claude-code-session-manager 0.76.0 → 0.77.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (123) hide show
  1. package/dist/assets/{AgentLibrary-CBx9l4zN.js → AgentLibrary-B2ie8bbw.js} +2 -2
  2. package/dist/assets/{DataModel-Bf0EIE_t.js → DataModel-BIJPYw32.js} +1 -1
  3. package/dist/assets/{History-CpdtWhC8.js → History-CeY6dk9S.js} +2 -2
  4. package/dist/assets/{Hooks-DyUbMDmg.js → Hooks-BFH2ocKg.js} +2 -2
  5. package/dist/assets/{HostBilko-By-wIpry.js → HostBilko-36gj9wLz.js} +1 -1
  6. package/dist/assets/{Library-CQmo4QVC.js → Library-C-hBct39.js} +1 -1
  7. package/dist/assets/{ListDetail-BQMd6NOm.js → ListDetail-CNq64VWV.js} +1 -1
  8. package/dist/assets/{MarkdownEditor-DEp43FXX.js → MarkdownEditor-Bh3qt5-1.js} +1 -1
  9. package/dist/assets/{McpServers-CLarzwqA.js → McpServers-DpGN0oyz.js} +1 -1
  10. package/dist/assets/{Memory-B0sCdIy1.js → Memory-D59hUjC4.js} +6 -6
  11. package/dist/assets/{Panel-BhWPVOCD.js → Panel-DCgbaoci.js} +1 -1
  12. package/dist/assets/{Permissions-Ddlq8T_O.js → Permissions-DAmQ0DYV.js} +2 -2
  13. package/dist/assets/{Plugins-D2oA_2Jl.js → Plugins-Dyfgn6Is.js} +2 -2
  14. package/dist/assets/{ProvenanceBadge-DgAgavUM.js → ProvenanceBadge-BiYhPO1U.js} +1 -1
  15. package/dist/assets/SaveBar-RV7B6sOh.js +1 -0
  16. package/dist/assets/Scheduler-BPaNqx1b.js +14 -0
  17. package/dist/assets/{ScopeSwitcher-C_zWEtIl.js → ScopeSwitcher-P4mdLGNU.js} +1 -1
  18. package/dist/assets/{Settings-2Vx3X5SI.js → Settings-BL4vf5aX.js} +1 -1
  19. package/dist/assets/{SkillReferenceGraph-BDEUjlTQ.js → SkillReferenceGraph-BRBDyi1_.js} +1 -1
  20. package/dist/assets/{Skills-Cmrz_LeN.js → Skills-BV08gDUH.js} +2 -2
  21. package/dist/assets/{SystemPrompt-DVA1eYDP.js → SystemPrompt-CLftSsDw.js} +1 -1
  22. package/dist/assets/TagLibrary-Bp8jGsd5.js +1 -0
  23. package/dist/assets/{TiptapBody-DmPc3amD.js → TiptapBody-jCpuB6E5.js} +1 -1
  24. package/dist/assets/{Toggle-zfd5LJkK.js → Toggle-D2paA1xf.js} +1 -1
  25. package/dist/assets/{index-B_4PNh9T.js → index-BDRSqBl3.js} +175 -175
  26. package/dist/assets/{index-DIjnPkRN.css → index-CYhdtisq.css} +1 -1
  27. package/dist/assets/{settingsSchema-B9es6fdA.js → settingsSchema-6IOLjZZN.js} +1 -1
  28. package/dist/index.html +2 -2
  29. package/package.json +8 -2
  30. package/plugins/session-manager-dev/skills/develop/standards.md +1 -1
  31. package/scripts/project-pages-logic/dist/logic.cjs +4709 -0
  32. package/scripts/render-project-pages/dist/renderer.cjs +18900 -0
  33. package/scripts/render-project-pages.cjs +70 -0
  34. package/scripts/scheduler-mcp-server.cjs +115 -1
  35. package/scripts/validate-project-pages-summary.cjs +62 -0
  36. package/src/main/__tests__/agentModelResolve.test.cjs +66 -0
  37. package/src/main/__tests__/health-delegation-chain.test.cjs +2 -1
  38. package/src/main/__tests__/prdAgentType.test.cjs +103 -0
  39. package/src/main/__tests__/prdCreate.test.cjs +138 -0
  40. package/src/main/__tests__/prdFrontmatterAgentType.test.cjs +117 -0
  41. package/src/main/__tests__/prdFrontmatterQuietMachine.test.cjs +108 -0
  42. package/src/main/__tests__/projectHomeAdminRoutes.test.cjs +485 -0
  43. package/src/main/__tests__/projectPages.test.cjs +73 -1
  44. package/src/main/__tests__/rcaReport.test.cjs +54 -0
  45. package/src/main/__tests__/runVerify.test.cjs +94 -0
  46. package/src/main/__tests__/scheduler-autofix-select.test.cjs +43 -0
  47. package/src/main/__tests__/scheduler-bash-timeout-env.test.cjs +103 -0
  48. package/src/main/__tests__/scheduler-effective-concurrency.test.cjs +10 -0
  49. package/src/main/__tests__/scheduler-foreign-wip-manifest.test.cjs +78 -0
  50. package/src/main/__tests__/scheduler-inplace-salvage.test.cjs +242 -0
  51. package/src/main/__tests__/scheduler-investigation-prompt.test.cjs +31 -0
  52. package/src/main/__tests__/scheduler-launch-failure.test.cjs +201 -0
  53. package/src/main/__tests__/scheduler-leftover-fields.test.cjs +52 -0
  54. package/src/main/__tests__/scheduler-looks-done.test.cjs +241 -0
  55. package/src/main/__tests__/scheduler-prd-persona-spawn.test.cjs +135 -0
  56. package/src/main/__tests__/scheduler-quiet-machine-lease.test.cjs +222 -0
  57. package/src/main/__tests__/scheduler-reap-dead-running-jobs.test.cjs +147 -0
  58. package/src/main/__tests__/scheduler-shared-tree-guard.test.cjs +212 -0
  59. package/src/main/__tests__/scheduler-worktree-cap-defer.test.cjs +194 -0
  60. package/src/main/__tests__/seedAgentPersonas.test.cjs +75 -14
  61. package/src/main/config.cjs +4 -1
  62. package/src/main/index.cjs +8 -1
  63. package/src/main/ipcSchemas.cjs +51 -0
  64. package/src/main/lib/__tests__/childWithLog.test.cjs +78 -0
  65. package/src/main/lib/__tests__/delegationReadiness.test.cjs +152 -2
  66. package/src/main/lib/__tests__/epicWorktreeMint.test.cjs +4 -2
  67. package/src/main/lib/__tests__/fixChainDepth.test.cjs +40 -0
  68. package/src/main/lib/__tests__/gitWorktree.test.cjs +277 -4
  69. package/src/main/lib/__tests__/gitWorktreeSalvageDelta.test.cjs +153 -0
  70. package/src/main/lib/__tests__/jobWorktree.test.cjs +5 -3
  71. package/src/main/lib/__tests__/landedSinceRun.test.cjs +73 -0
  72. package/src/main/lib/__tests__/launchFailure.test.cjs +220 -0
  73. package/src/main/lib/__tests__/mcpToolCatalog.test.cjs +1 -0
  74. package/src/main/lib/__tests__/opsOwnership.test.cjs +7 -0
  75. package/src/main/lib/__tests__/prdDeclaredPaths.test.cjs +82 -0
  76. package/src/main/lib/__tests__/queueHealth.test.cjs +58 -0
  77. package/src/main/lib/__tests__/quietMachineLease.test.cjs +39 -0
  78. package/src/main/lib/__tests__/reaperHelpers.test.cjs +22 -1
  79. package/src/main/lib/__tests__/schedulerBatchLaunchHold.test.cjs +125 -0
  80. package/src/main/lib/__tests__/schedulerBatchQuietMachine.test.cjs +109 -0
  81. package/src/main/lib/__tests__/schedulerMcpServerHeadlessRefusal.test.cjs +71 -0
  82. package/src/main/lib/__tests__/schedulerMcpServerProjectHome.test.cjs +350 -0
  83. package/src/main/lib/agentModelResolve.cjs +58 -0
  84. package/src/main/lib/childWithLog.cjs +40 -5
  85. package/src/main/lib/claudeBin.cjs +54 -1
  86. package/src/main/lib/definitionOfDone.cjs +3 -2
  87. package/src/main/lib/delegationReadiness.cjs +115 -9
  88. package/src/main/lib/epicWorktreeMint.cjs +5 -2
  89. package/src/main/lib/fixChainDepth.cjs +45 -0
  90. package/src/main/lib/gitWorktree.cjs +464 -19
  91. package/src/main/lib/jobWorktree.cjs +1 -0
  92. package/src/main/lib/landedSinceRun.cjs +55 -0
  93. package/src/main/lib/launchFailure.cjs +357 -0
  94. package/src/main/lib/mcpToolCatalog.cjs +87 -2
  95. package/src/main/lib/opsOwnership.cjs +12 -0
  96. package/src/main/lib/prdAgentType.cjs +84 -0
  97. package/src/main/lib/prdCreate.cjs +57 -1
  98. package/src/main/lib/prdDeclaredPaths.cjs +70 -0
  99. package/src/main/lib/prdFrontmatter.cjs +17 -3
  100. package/src/main/lib/projectHomeAdminRoutes.cjs +402 -0
  101. package/src/main/lib/projectPageSummarySchema.cjs +181 -0
  102. package/src/main/lib/queueHealth.cjs +38 -0
  103. package/src/main/lib/queueStore.cjs +9 -2
  104. package/src/main/lib/quietMachineLease.cjs +48 -0
  105. package/src/main/lib/rcaReport.cjs +53 -3
  106. package/src/main/lib/reaperHelpers.cjs +18 -1
  107. package/src/main/lib/scheduleJobSchema.cjs +31 -0
  108. package/src/main/lib/scheduleJobTransitions.cjs +6 -2
  109. package/src/main/lib/schedulerBatch.cjs +133 -29
  110. package/src/main/lib/schedulerConfig.cjs +19 -0
  111. package/src/main/projectPages.cjs +160 -2
  112. package/src/main/runVerify.cjs +50 -9
  113. package/src/main/scheduler/prdParser.cjs +18 -1
  114. package/src/main/scheduler.cjs +1371 -97
  115. package/src/main/seedAgentPersonas.cjs +62 -21
  116. package/src/main/templates/project-pages-catalog.json +741 -0
  117. package/src/main/templates/project-pages-pipeline.md +417 -0
  118. package/src/preload/api.d.ts +118 -2
  119. package/src/preload/index.cjs +7 -0
  120. package/src/seed/agents/project-home-builder.md +59 -0
  121. package/dist/assets/SaveBar-Qvc4Ek-H.js +0 -1
  122. package/dist/assets/Scheduler-BmYJvNzK.js +0 -14
  123. package/dist/assets/TagLibrary-DYJGAKZu.js +0 -1
@@ -0,0 +1,741 @@
1
+ {
2
+ "$comment": "GENERATED by scripts/project-pages-assets.cjs from src/renderer/lib/projectPages/library/*.tsx — do not edit; run `npm run build:project-pages-assets`.",
3
+ "lenses": [
4
+ {
5
+ "id": "home",
6
+ "label": "Project Home",
7
+ "blurb": "A dashboard-flavored overview — for someone who already has the project open, not an outside pitch.",
8
+ "slots": [
9
+ {
10
+ "id": "overview",
11
+ "label": "Overview",
12
+ "variants": [
13
+ {
14
+ "id": "dashboard",
15
+ "label": "Stat band",
16
+ "note": "Claim + sub, then a ruled stat band. The default."
17
+ },
18
+ {
19
+ "id": "ledger",
20
+ "label": "Dark ledger",
21
+ "note": "Inverted; compact inline figures."
22
+ }
23
+ ]
24
+ },
25
+ {
26
+ "id": "pillars",
27
+ "label": "How it's organized",
28
+ "variants": [
29
+ {
30
+ "id": "grid",
31
+ "label": "2×2 cards",
32
+ "note": "Even weight across every pillar."
33
+ },
34
+ {
35
+ "id": "rows",
36
+ "label": "Tagged rows",
37
+ "note": "Dense, text-only."
38
+ }
39
+ ]
40
+ }
41
+ ],
42
+ "presets": [
43
+ {
44
+ "id": "v1",
45
+ "label": "Dashboard",
46
+ "note": "Default — stat band + pillar cards.",
47
+ "pick": {
48
+ "overview": "dashboard",
49
+ "pillars": "grid"
50
+ }
51
+ },
52
+ {
53
+ "id": "v2",
54
+ "label": "Ledger",
55
+ "note": "Denser, mono-leaning.",
56
+ "pick": {
57
+ "overview": "ledger",
58
+ "pillars": "rows"
59
+ }
60
+ }
61
+ ]
62
+ },
63
+ {
64
+ "id": "marketing",
65
+ "label": "Marketing Landing",
66
+ "blurb": "Positions the project to someone who has never seen it — then proves it works.",
67
+ "slots": [
68
+ {
69
+ "id": "hero",
70
+ "label": "Hero",
71
+ "variants": [
72
+ {
73
+ "id": "editorial",
74
+ "label": "Editorial statement",
75
+ "note": "Serif claim, wide measure. Best when the idea sells itself."
76
+ },
77
+ {
78
+ "id": "split",
79
+ "label": "Split with shot",
80
+ "note": "Claim left, product image right. Needs a strong screenshot."
81
+ },
82
+ {
83
+ "id": "centered",
84
+ "label": "Centered + install",
85
+ "note": "Symmetrical, CLI-forward. Good for dev tools."
86
+ },
87
+ {
88
+ "id": "terminal",
89
+ "label": "Dark terminal",
90
+ "note": "Inverted panel with a live session transcript."
91
+ }
92
+ ]
93
+ },
94
+ {
95
+ "id": "proof",
96
+ "label": "Proof strip",
97
+ "variants": [
98
+ {
99
+ "id": "stats",
100
+ "label": "Four-up stat band",
101
+ "note": "Ruled cells. Use when numbers are concrete."
102
+ },
103
+ {
104
+ "id": "ticker",
105
+ "label": "Attribute chips",
106
+ "note": "Low-commitment; works with no metrics at all."
107
+ },
108
+ {
109
+ "id": "quote",
110
+ "label": "Pull quote",
111
+ "note": "A single voice. Needs a real quote."
112
+ },
113
+ {
114
+ "id": "ledger",
115
+ "label": "Inline ledger",
116
+ "note": "Compact one-liner of figures."
117
+ }
118
+ ]
119
+ },
120
+ {
121
+ "id": "pillars",
122
+ "label": "Capability block",
123
+ "variants": [
124
+ {
125
+ "id": "cards",
126
+ "label": "2×2 cards",
127
+ "note": "Even weight across four ideas."
128
+ },
129
+ {
130
+ "id": "alt",
131
+ "label": "Alternating rows",
132
+ "note": "Each capability gets an image. Longest option."
133
+ },
134
+ {
135
+ "id": "list",
136
+ "label": "Definition list",
137
+ "note": "Dense, text-only. Best for technical readers."
138
+ },
139
+ {
140
+ "id": "showcase",
141
+ "label": "Hero shot + legend",
142
+ "note": "One big image, four captions beneath."
143
+ }
144
+ ]
145
+ },
146
+ {
147
+ "id": "tour",
148
+ "label": "Product tour",
149
+ "variants": [
150
+ {
151
+ "id": "tabs",
152
+ "label": "Tabbed tour",
153
+ "note": "Interactive — one surface at a time, with a shot."
154
+ },
155
+ {
156
+ "id": "stacked",
157
+ "label": "Alternating deep-dive",
158
+ "note": "Every surface gets a full row. Longest, most convincing."
159
+ },
160
+ {
161
+ "id": "cards",
162
+ "label": "Tour cards",
163
+ "note": "Four capped cards with thumbnails. Scannable."
164
+ },
165
+ {
166
+ "id": "bigshot",
167
+ "label": "One window + legend",
168
+ "note": "A single full-app shot with an indexed rail."
169
+ }
170
+ ]
171
+ },
172
+ {
173
+ "id": "workflow",
174
+ "label": "How it works",
175
+ "variants": [
176
+ {
177
+ "id": "steps",
178
+ "label": "Four step cards",
179
+ "note": "Each step carries the command that runs it."
180
+ },
181
+ {
182
+ "id": "rail",
183
+ "label": "Vertical loop",
184
+ "note": "Reads as a sequence; good after a dense section."
185
+ },
186
+ {
187
+ "id": "terminal",
188
+ "label": "Dark step band",
189
+ "note": "Inverted; breaks up a long cream page."
190
+ }
191
+ ]
192
+ },
193
+ {
194
+ "id": "depth",
195
+ "label": "Substance block",
196
+ "variants": [
197
+ {
198
+ "id": "compare",
199
+ "label": "Comparison table",
200
+ "note": "Against the two alternatives buyers already have."
201
+ },
202
+ {
203
+ "id": "specs",
204
+ "label": "Spec ledger",
205
+ "note": "Requirements and limits, plainly stated."
206
+ },
207
+ {
208
+ "id": "privacy",
209
+ "label": "Local-first panel",
210
+ "note": "Leads with the privacy argument."
211
+ },
212
+ {
213
+ "id": "stack",
214
+ "label": "Inline spec strip",
215
+ "note": "Lightest option — one band of facts."
216
+ }
217
+ ]
218
+ },
219
+ {
220
+ "id": "faq",
221
+ "label": "Objections",
222
+ "variants": [
223
+ {
224
+ "id": "accordion",
225
+ "label": "Accordion",
226
+ "note": "Compact; hides answers until asked."
227
+ },
228
+ {
229
+ "id": "columns",
230
+ "label": "Open columns",
231
+ "note": "Everything visible, nothing to click."
232
+ },
233
+ {
234
+ "id": "objections",
235
+ "label": "Objection rows",
236
+ "note": "Question as a serif statement, answer beside it."
237
+ }
238
+ ]
239
+ },
240
+ {
241
+ "id": "close",
242
+ "label": "Closing CTA",
243
+ "variants": [
244
+ {
245
+ "id": "install",
246
+ "label": "Dark install band",
247
+ "note": "Ends on the command."
248
+ },
249
+ {
250
+ "id": "split",
251
+ "label": "Split CTA",
252
+ "note": "Statement left, buttons right."
253
+ },
254
+ {
255
+ "id": "quiet",
256
+ "label": "Quiet footer note",
257
+ "note": "Understated; for tools that avoid a hard sell."
258
+ }
259
+ ]
260
+ }
261
+ ],
262
+ "presets": [
263
+ {
264
+ "id": "v1",
265
+ "label": "Editorial",
266
+ "note": "Type-led, image-light. Safest for an unknown project.",
267
+ "pick": {
268
+ "hero": "editorial",
269
+ "proof": "stats",
270
+ "pillars": "cards",
271
+ "tour": "tabs",
272
+ "workflow": "rail",
273
+ "depth": "compare",
274
+ "faq": "accordion",
275
+ "close": "install"
276
+ }
277
+ },
278
+ {
279
+ "id": "v2",
280
+ "label": "Product-led",
281
+ "note": "Screenshots carry the argument.",
282
+ "pick": {
283
+ "hero": "split",
284
+ "proof": "quote",
285
+ "pillars": "alt",
286
+ "tour": "stacked",
287
+ "workflow": "steps",
288
+ "depth": "privacy",
289
+ "faq": "objections",
290
+ "close": "split"
291
+ }
292
+ },
293
+ {
294
+ "id": "v3",
295
+ "label": "Developer",
296
+ "note": "CLI-forward, dense, no marketing gloss.",
297
+ "pick": {
298
+ "hero": "terminal",
299
+ "proof": "ticker",
300
+ "pillars": "list",
301
+ "tour": "bigshot",
302
+ "workflow": "terminal",
303
+ "depth": "specs",
304
+ "faq": "columns",
305
+ "close": "quiet"
306
+ }
307
+ }
308
+ ]
309
+ },
310
+ {
311
+ "id": "feature",
312
+ "label": "Feature Description",
313
+ "blurb": "Explains one capability in depth — mostly by showing it.",
314
+ "slots": [
315
+ {
316
+ "id": "header",
317
+ "label": "Feature header",
318
+ "variants": [
319
+ {
320
+ "id": "spec",
321
+ "label": "Spec header",
322
+ "note": "Title plus metadata row. Reads like documentation."
323
+ },
324
+ {
325
+ "id": "problem",
326
+ "label": "Problem / solution",
327
+ "note": "Two columns. Use when the pain needs naming first."
328
+ },
329
+ {
330
+ "id": "hero",
331
+ "label": "Hero with shot",
332
+ "note": "Bleeds an image into the next section."
333
+ },
334
+ {
335
+ "id": "ba",
336
+ "label": "Before / after",
337
+ "note": "Contrast cards. Strongest for a fix to an old behaviour."
338
+ }
339
+ ]
340
+ },
341
+ {
342
+ "id": "mech",
343
+ "label": "How it works",
344
+ "variants": [
345
+ {
346
+ "id": "steps",
347
+ "label": "Numbered steps",
348
+ "note": "Ruled rows. Best for sequential mechanics."
349
+ },
350
+ {
351
+ "id": "flow",
352
+ "label": "Horizontal flow",
353
+ "note": "Cards with arrows. Good when order matters visually."
354
+ },
355
+ {
356
+ "id": "annotated",
357
+ "label": "Annotated screenshot",
358
+ "note": "Image plus numbered call-outs."
359
+ },
360
+ {
361
+ "id": "narrative",
362
+ "label": "Narrative + rail",
363
+ "note": "Prose first, steps as a supporting rail."
364
+ }
365
+ ]
366
+ },
367
+ {
368
+ "id": "walk",
369
+ "label": "Walkthrough",
370
+ "variants": [
371
+ {
372
+ "id": "click",
373
+ "label": "Click-through",
374
+ "note": "Interactive stepper — one screen at a time with a description beside it."
375
+ },
376
+ {
377
+ "id": "side",
378
+ "label": "Side-by-side rows",
379
+ "note": "Alternating shot / explanation. The most thorough option."
380
+ },
381
+ {
382
+ "id": "strip",
383
+ "label": "Filmstrip",
384
+ "note": "Screens in a row with captions. Fastest to scan."
385
+ },
386
+ {
387
+ "id": "hotspots",
388
+ "label": "Hotspot anatomy",
389
+ "note": "One screen, numbered markers, clickable legend."
390
+ }
391
+ ]
392
+ },
393
+ {
394
+ "id": "states",
395
+ "label": "States & details",
396
+ "variants": [
397
+ {
398
+ "id": "grid",
399
+ "label": "State gallery",
400
+ "note": "Each release milestone as its own shot."
401
+ },
402
+ {
403
+ "id": "pair",
404
+ "label": "Before / after pair",
405
+ "note": "Two large shots making one comparison."
406
+ },
407
+ {
408
+ "id": "details",
409
+ "label": "Detail crops",
410
+ "note": "Zoomed component shots with micro-copy."
411
+ }
412
+ ]
413
+ },
414
+ {
415
+ "id": "rules",
416
+ "label": "Behaviour detail",
417
+ "variants": [
418
+ {
419
+ "id": "cards",
420
+ "label": "Rule cards",
421
+ "note": "Four guarantees, equal weight."
422
+ },
423
+ {
424
+ "id": "table",
425
+ "label": "Spec table",
426
+ "note": "Key / value / note. Densest option."
427
+ },
428
+ {
429
+ "id": "faq",
430
+ "label": "Expandable FAQ",
431
+ "note": "For edge cases readers ask about."
432
+ },
433
+ {
434
+ "id": "invariants",
435
+ "label": "Dark invariants",
436
+ "note": "Inverted panel for hard constraints."
437
+ }
438
+ ]
439
+ },
440
+ {
441
+ "id": "status",
442
+ "label": "Status",
443
+ "variants": [
444
+ {
445
+ "id": "timeline",
446
+ "label": "Release timeline",
447
+ "note": "Version-by-version ledger."
448
+ },
449
+ {
450
+ "id": "matrix",
451
+ "label": "Milestone cards",
452
+ "note": "Scannable across five columns."
453
+ },
454
+ {
455
+ "id": "next",
456
+ "label": "Shipped / not yet",
457
+ "note": "Two honest lists."
458
+ }
459
+ ]
460
+ }
461
+ ],
462
+ "presets": [
463
+ {
464
+ "id": "v1",
465
+ "label": "Documentation",
466
+ "note": "Metadata-forward, table-driven. For internal readers.",
467
+ "pick": {
468
+ "header": "spec",
469
+ "mech": "steps",
470
+ "walk": "hotspots",
471
+ "states": "grid",
472
+ "rules": "table",
473
+ "status": "timeline"
474
+ }
475
+ },
476
+ {
477
+ "id": "v2",
478
+ "label": "Explainer",
479
+ "note": "Frames the pain, then the mechanism, then the doubts.",
480
+ "pick": {
481
+ "header": "problem",
482
+ "mech": "flow",
483
+ "walk": "click",
484
+ "states": "pair",
485
+ "rules": "faq",
486
+ "status": "matrix"
487
+ }
488
+ },
489
+ {
490
+ "id": "v3",
491
+ "label": "Showcase",
492
+ "note": "Visual-first; leans on screenshots.",
493
+ "pick": {
494
+ "header": "hero",
495
+ "mech": "annotated",
496
+ "walk": "side",
497
+ "states": "details",
498
+ "rules": "cards",
499
+ "status": "next"
500
+ }
501
+ }
502
+ ]
503
+ },
504
+ {
505
+ "id": "architecture",
506
+ "label": "Architecture Overview",
507
+ "blurb": "Orients an engineer to the shape of the system before they touch it.",
508
+ "slots": [
509
+ {
510
+ "id": "summary",
511
+ "label": "System summary",
512
+ "variants": [
513
+ {
514
+ "id": "layers",
515
+ "label": "Layer ledger",
516
+ "note": "Stacked rows, top to bottom. The default."
517
+ },
518
+ {
519
+ "id": "principles",
520
+ "label": "Summary + principles",
521
+ "note": "Statement left, rules right."
522
+ },
523
+ {
524
+ "id": "stack",
525
+ "label": "Dark stack",
526
+ "note": "Inverted; reads as a systems doc."
527
+ },
528
+ {
529
+ "id": "boundary",
530
+ "label": "Trust boundary",
531
+ "note": "Boxes inside an explicit boundary frame."
532
+ }
533
+ ]
534
+ },
535
+ {
536
+ "id": "map",
537
+ "label": "Module map",
538
+ "variants": [
539
+ {
540
+ "id": "boxes",
541
+ "label": "Module cards",
542
+ "note": "Grid with churn bars and dependency chips."
543
+ },
544
+ {
545
+ "id": "matrix",
546
+ "label": "Dependency matrix",
547
+ "note": "Row depends on column. Densest, most precise."
548
+ },
549
+ {
550
+ "id": "tree",
551
+ "label": "Source tree",
552
+ "note": "Mono tree of directories. Good for newcomers."
553
+ },
554
+ {
555
+ "id": "lanes",
556
+ "label": "Process lanes",
557
+ "note": "Groups modules by lane."
558
+ }
559
+ ]
560
+ },
561
+ {
562
+ "id": "flow",
563
+ "label": "Control flow",
564
+ "variants": [
565
+ {
566
+ "id": "seq",
567
+ "label": "Sequence rows",
568
+ "note": "A → B with message and note."
569
+ },
570
+ {
571
+ "id": "rail",
572
+ "label": "Vertical rail",
573
+ "note": "One request followed end to end."
574
+ },
575
+ {
576
+ "id": "diagram",
577
+ "label": "Node chain + calls",
578
+ "note": "Path across the top, calls beneath."
579
+ }
580
+ ]
581
+ },
582
+ {
583
+ "id": "dec",
584
+ "label": "Decisions & risk",
585
+ "variants": [
586
+ {
587
+ "id": "adr",
588
+ "label": "ADR list",
589
+ "note": "Numbered, with the reasoning kept."
590
+ },
591
+ {
592
+ "id": "cards",
593
+ "label": "Decision cards",
594
+ "note": "Two-up, scannable."
595
+ },
596
+ {
597
+ "id": "risks",
598
+ "label": "Risk register",
599
+ "note": "What could still bite, and its state."
600
+ },
601
+ {
602
+ "id": "principles",
603
+ "label": "Dark principles",
604
+ "note": "Closes on the values, not the caveats."
605
+ }
606
+ ]
607
+ }
608
+ ],
609
+ "presets": [
610
+ {
611
+ "id": "v1",
612
+ "label": "Orientation",
613
+ "note": "For a new engineer on day one.",
614
+ "pick": {
615
+ "summary": "layers",
616
+ "map": "boxes",
617
+ "flow": "rail",
618
+ "dec": "adr"
619
+ }
620
+ },
621
+ {
622
+ "id": "v2",
623
+ "label": "Review",
624
+ "note": "Precise and dense — for an architecture review.",
625
+ "pick": {
626
+ "summary": "boundary",
627
+ "map": "matrix",
628
+ "flow": "seq",
629
+ "dec": "risks"
630
+ }
631
+ },
632
+ {
633
+ "id": "v3",
634
+ "label": "Narrative",
635
+ "note": "Reads like a systems essay.",
636
+ "pick": {
637
+ "summary": "stack",
638
+ "map": "lanes",
639
+ "flow": "diagram",
640
+ "dec": "principles"
641
+ }
642
+ }
643
+ ]
644
+ },
645
+ {
646
+ "id": "brief",
647
+ "label": "Brief",
648
+ "blurb": "The project's synthesized Brief — purpose, structure, scope history, and conventions — as a static read, not a live dashboard.",
649
+ "slots": [
650
+ {
651
+ "id": "purpose",
652
+ "label": "Purpose",
653
+ "variants": [
654
+ {
655
+ "id": "prose",
656
+ "label": "Prose",
657
+ "note": "Claim heading + what-this-is paragraphs. The default."
658
+ },
659
+ {
660
+ "id": "quote",
661
+ "label": "Dark pull-quote",
662
+ "note": "Inverted, serif-led — leads with the purpose as a statement."
663
+ }
664
+ ]
665
+ },
666
+ {
667
+ "id": "areas",
668
+ "label": "How it's put together",
669
+ "variants": [
670
+ {
671
+ "id": "table",
672
+ "label": "Dense rows",
673
+ "note": "Name, note, owning session, heat bar — one row per area."
674
+ },
675
+ {
676
+ "id": "cards",
677
+ "label": "2×2 cards",
678
+ "note": "Even weight across every area, heat as a pill."
679
+ }
680
+ ]
681
+ },
682
+ {
683
+ "id": "scope",
684
+ "label": "How the goal has moved",
685
+ "variants": [
686
+ {
687
+ "id": "timeline",
688
+ "label": "Timeline",
689
+ "note": "Dated rows with an added/narrowed/decided tone pill. The default."
690
+ },
691
+ {
692
+ "id": "log",
693
+ "label": "Dark log",
694
+ "note": "Compact monospace log lines, inverted."
695
+ }
696
+ ]
697
+ },
698
+ {
699
+ "id": "conventions",
700
+ "label": "Conventions",
701
+ "variants": [
702
+ {
703
+ "id": "checklist",
704
+ "label": "Checklist",
705
+ "note": "One checkmark per convention. The default."
706
+ },
707
+ {
708
+ "id": "chips",
709
+ "label": "Wrapped chips",
710
+ "note": "Denser, no vertical list."
711
+ }
712
+ ]
713
+ }
714
+ ],
715
+ "presets": [
716
+ {
717
+ "id": "v1",
718
+ "label": "Read",
719
+ "note": "Default — prose purpose, dense area rows, timeline scope, checklist conventions.",
720
+ "pick": {
721
+ "purpose": "prose",
722
+ "areas": "table",
723
+ "scope": "timeline",
724
+ "conventions": "checklist"
725
+ }
726
+ },
727
+ {
728
+ "id": "v2",
729
+ "label": "Ledger",
730
+ "note": "Denser, mono-leaning, two inverted sections.",
731
+ "pick": {
732
+ "purpose": "quote",
733
+ "areas": "cards",
734
+ "scope": "log",
735
+ "conventions": "chips"
736
+ }
737
+ }
738
+ ]
739
+ }
740
+ ]
741
+ }