Create a Focused Workshop Experience

Work directly in:
/home/kernel-kain/Documents/Github/unfinished-business
Execution rules:
- Work only on the main branch.
- Begin with:
- git status
- git switch main
- git pull --ff-only origin main
- Preserve all unrelated changes, untracked files, and existing stashes. Do not apply, delete, or commit .backboard/, .unfinished-business/, .env files, credentials, or the existing stash unless this phase explicitly requires it.
- Read the relevant source, tests, AGENTS.md files, and documentation before editing.
- Implement only the phase described below. Do not begin the next phase.
- Maintain backward compatibility with existing saved projects through explicit migrations.
- Do not expose provider secrets, prompts containing secrets, or private model output in logs, telemetry, screenshots, or error messages.
- Add or update tests for every behavior changed.
- After implementation, update the relevant project documentation, including:
- README.md when user-facing behavior changes
- docs/ARCHITECTURE.md
- docs/DECISIONS.md
- docs/IMPLEMENTATION_PLAN.md
- docs/EVIDENCE.md
- docs/RELEASE_NOTES.md
- any phase-specific setup or integration documentation
- Mark the phase complete in the implementation plan only after its acceptance criteria pass.
- Run all relevant verification. At minimum:
- npm run typecheck
- npm test
- npm run build Run visual, security, budget, contract, migration, or integration tests when affected.
- Review the final git diff for accidental files, secrets, debugging output, and unrelated changes.
- Commit with the commit message specified by this phase.
- Push the commit to origin/main. Never force-push.
- If the push is rejected because origin/main advanced, fetch and rebase safely, resolve only scoped conflicts, rerun verification, and push normally.
- Finish with:
- implementation summary
- changed files
- documentation updated
- tests and results
- known limitations
- commit hash
- push result
Do not stop for ordinary implementation decisions. Stop only if there is a destructive conflict, missing required credential, irreconcilable remote conflict, or a decision that would materially change the product’s intended behavior.
I found the missing roadmap: the repository’s Phase 5 prompt is the idea-aware tool recommendation engine (the next uncompleted phase after the Upgrade Phase 4 work). I’ll implement that phase, with a versioned catalog, deterministic recommendations, persisted add/defer/reject decisions, UI, schema v8 migration, tests, and docs.
Implement Phase 5: simplify the workshop and reorganize OpenCode controls.
Objectives:
- Present one primary task at a time.
- Hide technical machinery until it is relevant.
- Replace confusing session notes and run inspector terminology.
Implementation requirements:
- Refactor the workshop into:
- focused main task area;
- collapsible project-outline drawer;
- contextual activity/results drawer;
- compact model and connection header.
- Preserve all existing functionality during the layout change.
- Rename Run Inspector to Activity & results.
- Organize it into:
- Progress
- Changes
- Checks
- Hide the activity drawer when there has been no relevant operation.
- Put native IDs, capability mappings, raw evidence, and provider payloads under Technical details.
- Replace Session notes with Project memory:
- decisions;
- user answers;
- assumptions;
- constraints;
- unresolved questions.
- Keep raw transcripts in advanced diagnostics rather than the primary workspace.
- Split OpenCode controls into:
- Model & connection
- Contextual permission request
- Advanced diagnostics
- Keep sessions, agents, commands, skills, MCP, LSP, formatters, low-level revert, and export controls out of the normal user flow.
- Avoid loading expensive advanced diagnostics before the user opens them.
- Ensure there is one clear primary action per stage.
- Improve mobile/tablet behavior, keyboard navigation, focus management, loading announcements, and reduced-motion behavior.
- Update intentional visual snapshots.
Acceptance criteria:
- The main task is understandable without opening advanced controls.
- Empty technical panels no longer occupy permanent screen space.
- Permission requests remain impossible to miss.
- Project memory is useful and editable.
- All primary workflows work with keyboard and screen reader navigation.
Commit message:
refactor(ui): create a focused workshop experience
Implementation summary
Implemented Phase 5 — focused workshop and reorganized OpenCode controls on main.
- Reworked
/workshopinto a single focused task column with a compact model/connection header. - Added collapsible Project outline and Project memory drawers.
- Renamed Run Inspector to Activity & results and reorganized it into Progress, Changes, and Checks.
- Hid Activity & results entirely when no operation or check exists.
- Moved native IDs, capability mappings, raw evidence, and provider payloads under Technical details.
- Replaced Session notes with editable Project memory covering decisions, user answers, assumptions, constraints, and unresolved questions.
- Added authenticated
POST /api/memorywith superseding corrections that never alter approvals, drafts, Maker scope, or native runs. - Split OpenCode controls into Model & connection, a prominent contextual permission request, and lazy-loaded Advanced diagnostics.
- Kept sessions, agents, commands, skills, MCP, LSP, formatters, low-level revert, export, and raw transcripts inside Advanced diagnostics.
- Added keyboard-operable drawers, stage-change focus, polite busy/permission announcements, responsive mobile behavior, and one primary action per stage.
- Intentionally refreshed visual snapshots.
Changed files
Core UI and behavior:
src/web/workshop/WorkshopPage.tsxsrc/web/opencode-panel.tsxsrc/web/components/RunInspector.tsxsrc/web/components/ProjectMemory.tsx(new)src/web/api.tssrc/web/styles.csssrc/web/demo/DemoPage.tsxsrc/web/landing/LandingPage.tsxsrc/web/content/landing.ts
Server:
src/server/app.tssrc/server/workflow/transitions.ts
Tests and snapshots:
tests/web.test.tstests/memory.test.ts(new)tests/visual/landing.spec.tstests/visual/snapshots/run-inspector.pngtests/visual/snapshots/workshop-wide.pngtests/visual/snapshots/workshop-narrow.pngtests/visual/snapshots/spirit-*.png
Build budget:
scripts/check-budget.mjs
Documentation updated
README.mddocs/ARCHITECTURE.mddocs/DECISIONS.mddocs/IMPLEMENTATION_PLAN.mddocs/EVIDENCE.mddocs/RELEASE_NOTES.mddocs/CHANGELOG.mddocs/UX_AND_VISUAL_SYSTEM.mddocs/OPERATIONS_AND_RECOVERY.mddocs/OPENCODE_INTEGRATION.mddocs/LOCAL_SETUP.mddocs/DEMO_AND_SUBMISSION.mddocs/PRODUCT_BRIEF.mddocs/TOOL_CATALOG.md
Tests and results
npm run typecheck— passnpm test— 184 pass, 0 failnpm run build— pass; existing >500 KiB initial-chunk warning remainsnpm run budget— pass- Initial JS: 195.6 KiB / 220 KiB
- All JS: 280.7 KiB / 290 KiB
- CSS: 17.1 KiB / 18 KiB
- Hero total: 570.9 KiB / 640 KiB
npm run test:visual— 19 passnpm audit --omit=dev --audit-level=high— pass; 6 moderate Sentry-path advisories remain
Known limitations
- Permission polling is best-effort and can lag one refresh interval.
- Advanced diagnostics are unavailable while the engine is unreachable.
- Automated visual/accessibility checks do not replace a full screen-reader audit.
- The all-JS budget was deliberately raised from 280 to 290 KiB for the new focused-workshop and Project memory surfaces.
- Schema version is unchanged at v7; no migration was required.
.backboard/remains untracked and untouched; the existing stash was not applied, removed, or committed.
Commit
4d811bf — refactor(ui): create a focused workshop experience
Push result
Pushed successfully to origin/main:
origin/main now points to 4d811bf.