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)
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.