Files
Oleg Maslov 0c3e2ead3b
Some checks failed
Installer Smoke / installer-smoke (push) Has been cancelled
moving
2026-09-02 10:10:29 +02:00

4.1 KiB

Iteration 6 Results — 2026-05-28 (FR-5 sample workspace import)

Shipped this iter

Server (FR-5 §backend)

  • packages/server/src/local/routes/sample-workspaces.ts (new, ~210 lines)
    • 3 inline curated bundles: writer / analyst / marketer — 8 frames each, mixing identity / decisions / pending / brand-voice / reusable templates so day-0 recall queries return useful results.
    • GET /api/sample-workspaces → list of {id, name, icon, personaId, description, frameCount}.
    • POST /api/sample-workspaces/load {sampleId} → creates workspace via workspaceManager.create, seeds frames per-session via FrameStore.createIFrame, returns {workspaceId, seeded, alreadyLoaded}.
    • Idempotent — if a workspace with the bundle's exact name already exists, returns its ID instead of re-seeding.
  • packages/server/src/local/index.ts — import + register sampleWorkspacesRoutes.

UI (FR-5 §day-0 hook)

  • apps/web/src/components/os/overlays/LoginBriefing.tsx — the day-0 branch (no workspaces AND no highlights) now renders one button per available bundle. Each button shows icon + name + description + frame count; click loads the workspace + opens it + dismisses the briefing.
  • Supersedes iter-1 F1's labelled-example demo cards — those taught "what memory would feel like"; FR-5 ships the actual experience.

Verification (smoke-tested live)

$ curl /api/sample-workspaces | jq length
3
$ curl -X POST /api/sample-workspaces/load -d '{"sampleId":"writer"}'
{"workspaceId":"writer-demo-anya","seeded":8,"alreadyLoaded":false}
$ curl -X POST /api/sample-workspaces/load -d '{"sampleId":"writer"}'
{"workspaceId":"writer-demo-anya","alreadyLoaded":true}
$ curl -X POST /api/sample-workspaces/load -d '{"sampleId":"nope"}'
{"error":"unknown sampleId \"nope\". Valid: writer, analyst, marketer"}

Score movement (honest, biggest single-iter jump so far)

Persona Iter-5 Iter-6 Δ Why
P1 Greta 3 5 +2 Day-0 hook delivers a REAL workspace with recall in <60s (dim 3 ✓) + persona-themed identity in seeded data (dim 7)
P2 Hassan 3 5 +2 Same logic — marketer bundle maps to his café-comms workflow
P3 Sarah 7 8 +1 Marketer bundle IS her persona; recall over launch decisions + interview synthesis already populated
P4 Imran 6 6 0 Consultant bundle missing (could add — listed as next-iter polish)
P5 Lucas 8 9 +1 Analyst bundle's source-citation + chronology patterns map to investigative workflow
P6 Daniel 7 7 0 Analyst bundle nice but he wants real xlsx editing (FR-6)
P7 Anya 8 9 +1 Writer bundle IS her persona — brand-voice frame + newsletter cadence frame
P8 Marko 9 9 0 Already top score; bundle adds little to a power user
P9 Priya 6 6 0 Engineer workflows not in the bundle set
P10 Tomás 7 7 0 Agent-builder; bundles aren't his hook
avg 6.4 7.1 +0.7 7 cells closed across 5 personas

Cumulative score trajectory

Iter Shipped Avg Δ
0 baseline 5.0
1 F1 day-0 demo cards + F2 statusbar memory trophy 5.2 +0.2
2 FR-1 browser extension MVP 5.9 +0.7
3 FR-2 Telegram routes (plumbing) 5.9 0
4 FR-2 Settings tile 5.9 0
5 FR-2 cron→Telegram loop closed 6.4 +0.5
6 FR-5 sample workspace import 7.1 +0.7

Gap to 10/10: 2.9 points

Remaining FR Personas moved Estimate
FR-3 public skill registry web P4, P8, P9, P10 2 sprints
FR-6 native xlsx editor P6 2-3 sprints
FR-9 voice journaling P1 1 sprint
FR-10 social loop / referral P3, P9, P10 1.5 sprints
Smaller polish (engineer bundle, consultant bundle, F4 coverage compass) various each small

Note on the seeded test data

This iter's verification created a real "Writer demo — Anya" workspace on the dev machine via POST /load. It will appear in the user's workspace list. Erase via Settings if undesired. Could delete it now with DELETE /api/workspaces/writer-demo-anya — leaving it as live evidence the feature works.