ICN Governance Demo — Presentation-Ready Sprint
Session Context
You are working on the ICN (InterCooperative Network) project at ~/projects/icn. The main branch has 4 unpushed commits from a demo sprint completed Mar 14 2026:
9253a65e docs(state): add governance demo sprint status entry
fbd559f3 fix(governance): pass authenticated voter DID through actor command channel
4bd3cb70 Merge feat/demo-sprint: governance route fix + demo pipeline
95d1d65f fix(gateway): resolve governance route 404 caused by actix-web scope shadowing
All 547 tests pass. The 18-step governance demo works from cold start. Vote tally is correct (2/2). Working tree is clean.
Why this matters: The NY Cooperative Summit planning call is March 19 at 2pm EDT. I need to pitch ICN as the tech/infrastructure track and propose a governance demo workshop for the May call for presenters. The audience is cooperative organizers (Joe Marraffino, Frank Cetera, Liska Wilson, etc.) — NOT developers. They need to see what cooperative digital governance looks like, not how Rust actors work.
Tasks (in order)
1. Push main to origin
git branch --show-current # confirm main
git log --oneline origin/main..main # confirm 4 commits
git push origin main
2. Audit and polish demo.html
Read crates/icn-gateway/static/demo.html. Assess its current state:
- Does it render a usable UI?
- Can a non-technical person understand what's happening?
- Does it connect to the gateway API and show live results?
If it's a skeleton or developer-facing: Rewrite it as a single-page presentation demo with these requirements:
- Clean, modern CSS (no framework dependencies — inline everything)
- Title: "Cooperative Governance Demo — InterCooperative Network"
- Three visual phases: Setup (create co-op + members), Govern (propose + vote), Verify (tally + proof)
- Each phase has a "Run" button that executes the API calls and shows results inline
- Status indicators: green checkmarks for success, red X for failure, spinner for in-progress
- The proposal text should be relatable: "Approve $12,000 Q2 budget for community kitchen equipment"
- Show the vote tally as a simple bar chart or vote count display
- Show the cryptographic proof hash as a "Receipt" card (not raw JSON)
- Error states should say what went wrong in plain English
- Gateway URL configurable at top (default
http://localhost:8080) - Mobile-responsive (it will be projected, but someone might pull it up on their phone)
- No localStorage, no external CDN dependencies, fully self-contained
If it's already decent: Polish it to meet the above requirements. Don't rewrite from scratch.
3. Create presenter mode script
Create demo/scripts/present.sh (or update the existing one) that:
- Builds
icndif needed (skip if binary is fresh) - Initializes a clean data directory at
/tmp/icn-demo - Starts the gateway on port 8080
- Waits for health check (
/health) - Runs
demo-governance.pyin slow mode — add a--presenterflag that:- Pauses between each phase (Setup / Govern / Verify) and prints a human-readable explanation
- Outputs colored terminal text showing what's happening
- Waits for Enter key between phases (so presenter controls pacing)
- Opens the demo.html URL in a message (don't auto-open browser — just print the URL)
- On Ctrl+C, kills the gateway cleanly
4. Add --presenter flag to demo-governance.py
Modify the demo script to support two modes:
- Default (automated): Runs all 18 steps without pausing (current behavior, used for CI/testing)
--presenterflag: Interactive mode that:- Groups steps into 3 phases with narrative headers
- Prints plain-English explanations before each API call ("Now Alice is casting her vote...")
- Shows success/failure with color (green/red)
- Pauses between phases with
[Press Enter to continue] - At the end, prints a summary card:
✓ Cooperative created: Finger Lakes Food Co-op ✓ Proposal: "Approve $12,000 Q2 budget for community kitchen equipment" ✓ Votes: 2 for, 0 against, 0 abstain ✓ Result: ACCEPTED ✓ Cryptographic proof: blake3:a1b2c3...
5. Write operator runbook
Create demo/RUNBOOK.md:
# ICN Governance Demo — Operator Runbook
## Prerequisites
- Rust toolchain (stable)
- Python 3.8+
- `requests` Python package (`pip install requests`)
- Port 8080 available
## Quick Start (automated)
bash demo/scripts/start-demo.sh /tmp/icn-demo
python3 demo/scripts/demo-governance.py http://localhost:8080
## Presenter Mode (interactive, for live demos)
bash demo/scripts/present.sh
## Browser Demo
After starting the gateway, open: http://localhost:8080/static/demo.html
## Troubleshooting
[Fill in based on actual failure modes you encounter]
## Cleanup
pkill -f icnd
rm -rf /tmp/icn-demo
Fill in the troubleshooting section with real failure modes — try breaking things intentionally (wrong port, missing data dir, killed mid-flow) and document the error messages and fixes.
6. Record a screen capture script
Create demo/scripts/record-demo.sh that:
- Checks for
asciinema(install hint if missing) - Runs the presenter-mode demo while recording
- Saves to
demo/recordings/governance-demo.cast - Prints: "Upload to asciinema.org or play locally with: asciinema play demo/recordings/governance-demo.cast"
This is the backup plan for March 19 — if live demo is too risky over Zoom, I play the recording.
7. Verify everything from cold start
Kill all running icnd processes. Delete all temp data. Then:
# Full cold start
bash demo/scripts/present.sh
# Verify browser UI
curl -s http://localhost:8080/static/demo.html | head -5 # should return HTML
# Verify automated mode still works
pkill -9 -f icnd
bash demo/scripts/start-demo.sh /tmp/icn-verify-2
python3 demo/scripts/demo-governance.py http://localhost:8080
# Run tests
cargo test -p icn-gateway -p icn-governance-actor -p icn-governance -p icn-rpc 2>&1 | tail -5
pkill -9 -f icnd
All must pass. If anything breaks, fix it before committing.
8. Commit and push
Commit in logical chunks:
feat(demo): presentation-ready demo.html with phased UI(if demo.html was rewritten/polished)feat(demo): add --presenter flag to demo-governance.py(interactive mode)docs(demo): add operator runbook and recording script(RUNBOOK.md + record-demo.sh + present.sh)
Push to origin/main.
Do NOT
- Refactor the governance actor, gateway, or any core crates — they work, ship them
- Add new API endpoints or features
- Touch the vote tally logic (it's fixed)
- Start federation demo work — that's Phase 1, not this sprint
- Add npm/webpack/React/any build tooling to demo.html — it must be a single self-contained HTML file
- Spend more than 30 minutes on any single task — if it's not working, document why and move on
- Add any external service dependencies (no databases, no Redis, no Docker required for the demo)
- Change the default automated behavior of demo-governance.py —
--presenteris additive only
Architecture Reference
- Gateway binary:
icnd(built from workspace root) - Gateway port: 8080
- Auth flow: DID challenge (
POST /v1/auth/challenge) → sign nonce → verify (POST /v1/auth/verify) → JWT - Governance routes: All under
/v1/gov/(domains, proposals, votes, tally, proof) - Coop routes:
/v1/coops/(create, members, settings) - Static files:
/static/*served fromcrates/icn-gateway/static/ - Data dir: Passed as CLI arg, stores all state (delete to reset)
- Key crates:
icn-gateway(HTTP server),icn-governance-actor(actor + commands),icn-governance(types + store + handle trait),icn-rpc(RPC handler)
Success Criteria
When this sprint is done, I should be able to:
- Run
bash demo/scripts/present.shand walk a non-technical person through cooperative governance in 5 minutes - Open
http://localhost:8080/static/demo.htmlin a browser and click through the demo without touching a terminal - Play
asciinema play demo/recordings/governance-demo.castas a backup if live demo fails - Hand someone
demo/RUNBOOK.mdand they can run the demo without asking me questions