@deskwork/studio 0.10.2 → 0.11.1

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 (56) hide show
  1. package/dist/lib/editorial-skills-catalogue.d.ts +15 -1
  2. package/dist/lib/editorial-skills-catalogue.d.ts.map +1 -1
  3. package/dist/lib/editorial-skills-catalogue.js +66 -59
  4. package/dist/lib/editorial-skills-catalogue.js.map +1 -1
  5. package/dist/lib/entry-resolver.d.ts +22 -0
  6. package/dist/lib/entry-resolver.d.ts.map +1 -0
  7. package/dist/lib/entry-resolver.js +42 -0
  8. package/dist/lib/entry-resolver.js.map +1 -0
  9. package/dist/lib/stage-affordances.d.ts +31 -0
  10. package/dist/lib/stage-affordances.d.ts.map +1 -0
  11. package/dist/lib/stage-affordances.js +37 -0
  12. package/dist/lib/stage-affordances.js.map +1 -0
  13. package/dist/pages/dashboard/affordances.d.ts +41 -0
  14. package/dist/pages/dashboard/affordances.d.ts.map +1 -0
  15. package/dist/pages/dashboard/affordances.js +87 -0
  16. package/dist/pages/dashboard/affordances.js.map +1 -0
  17. package/dist/pages/dashboard/affordances.ts +95 -0
  18. package/dist/pages/dashboard/data.d.ts +24 -0
  19. package/dist/pages/dashboard/data.d.ts.map +1 -0
  20. package/dist/pages/dashboard/data.js +49 -0
  21. package/dist/pages/dashboard/data.js.map +1 -0
  22. package/dist/pages/dashboard/data.ts +56 -0
  23. package/dist/pages/dashboard/header.d.ts +13 -0
  24. package/dist/pages/dashboard/header.d.ts.map +1 -0
  25. package/dist/pages/dashboard/header.js +70 -0
  26. package/dist/pages/dashboard/header.js.map +1 -0
  27. package/dist/pages/dashboard/header.ts +80 -0
  28. package/dist/pages/dashboard/section.d.ts +37 -0
  29. package/dist/pages/dashboard/section.d.ts.map +1 -0
  30. package/dist/pages/dashboard/section.js +117 -0
  31. package/dist/pages/dashboard/section.js.map +1 -0
  32. package/dist/pages/dashboard/section.ts +132 -0
  33. package/dist/pages/dashboard.d.ts +30 -21
  34. package/dist/pages/dashboard.d.ts.map +1 -1
  35. package/dist/pages/dashboard.js +34 -799
  36. package/dist/pages/dashboard.js.map +1 -1
  37. package/dist/pages/dashboard.ts +44 -980
  38. package/dist/pages/entry-review.d.ts +25 -0
  39. package/dist/pages/entry-review.d.ts.map +1 -0
  40. package/dist/pages/entry-review.js +148 -0
  41. package/dist/pages/entry-review.js.map +1 -0
  42. package/dist/pages/entry-review.ts +185 -0
  43. package/dist/pages/help.d.ts +10 -5
  44. package/dist/pages/help.d.ts.map +1 -1
  45. package/dist/pages/help.js +113 -99
  46. package/dist/pages/help.js.map +1 -1
  47. package/dist/pages/help.ts +113 -99
  48. package/dist/pages/index.d.ts +13 -1
  49. package/dist/pages/index.d.ts.map +1 -1
  50. package/dist/pages/index.js +39 -24
  51. package/dist/pages/index.js.map +1 -1
  52. package/dist/pages/index.ts +43 -27
  53. package/dist/server.d.ts.map +1 -1
  54. package/dist/server.js +23 -3
  55. package/dist/server.js.map +1 -1
  56. package/package.json +4 -4
@@ -2,7 +2,7 @@
2
2
  * The Compositor's Manual — `/dev/editorial-help`.
3
3
  *
4
4
  * Static (read-only) operator manual. Renders six sections:
5
- * I — the working model (calendar stages + review states diagrams)
5
+ * I — the working model (eight-stage pipeline + universal verbs)
6
6
  * II — three tracks (longform / shortform / distribution)
7
7
  * III — the skill catalogue (specimen grid)
8
8
  * IV — the studio surfaces, described
@@ -14,10 +14,15 @@
14
14
  * `editorial-skills-catalogue.ts` so a single edit shows up here, in
15
15
  * any future docs generator, and in any CLI inventory.
16
16
  *
17
- * Ported from `editorial-help.astro`. The audiocontrol original
18
- * referenced the two hardcoded sites (`audiocontrol.org ·
19
- * editorialcontrol.org`) in the cover imprint; here we render the
20
- * configured site hosts instead.
17
+ * Pipeline-redesign vocabulary (Phase 6, Task 37): the longform model
18
+ * is the entry-centric eight-stage pipeline (Ideas → Planned →
19
+ * Outlining Drafting Final → Published; Blocked / Cancelled
20
+ * off-pipeline) operated by universal verbs (`/deskwork:add`,
21
+ * `/deskwork:iterate`, `/deskwork:approve`, `/deskwork:publish`,
22
+ * `/deskwork:block`, `/deskwork:cancel`, `/deskwork:induct`). The
23
+ * stage-named skills of the prior model (`plan`, `outline`, `draft`,
24
+ * `pause`, `resume`, `review-start`, `review-cancel`) are retired.
25
+ * Shortform + distribution still use the workflow-object model.
21
26
  */
22
27
 
23
28
  import {
@@ -46,20 +51,20 @@ function renderCover(ctx: StudioContext, now: Date): RawHtml {
46
51
  return unsafe(html`
47
52
  <header class="er-pagehead er-pagehead--centered eh-cover">
48
53
  <p class="er-pagehead__kicker eh-cover-kicker">
49
- Vol. 01 <span class="dot">·</span> Manual <span class="dot">·</span> Internal — for operators
54
+ Vol. 02 <span class="dot">·</span> Manual <span class="dot">·</span> Internal — for operators
50
55
  </p>
51
56
  <h1 class="er-pagehead__title eh-cover-title">
52
57
  The Compositor's <em>Manual</em>
53
58
  </h1>
54
59
  <p class="er-pagehead__deck eh-cover-dek">
55
- Everything you need to move a thought from notebook to published dispatch without asking a colleague. The editorial calendar, the review pipelines, the skills that drive them, and the desk where you watch the whole thing happen.
60
+ Everything you need to move a thought from notebook to published dispatch without asking a colleague. The eight-stage pipeline, the universal verbs, the entry sidecar that holds the truth, and the desk where you watch the whole thing happen.
56
61
  </p>
57
62
  <p class="er-pagehead__imprint eh-imprint">
58
63
  <strong>Sites</strong><span>${sitesInline || ctx.projectRoot}</span>
59
64
  <span class="sep">§</span>
60
65
  <strong>Issued</strong><span>${formatIssueDate(now)}</span>
61
66
  <span class="sep">§</span>
62
- <strong>Revision</strong><span>1.0</span>
67
+ <strong>Revision</strong><span>2.0</span>
63
68
  <span class="sep">§</span>
64
69
  <strong>Desk</strong><a href="/dev/editorial-studio">/dev/editorial-studio</a>
65
70
  </p>
@@ -67,7 +72,7 @@ function renderCover(ctx: StudioContext, now: Date): RawHtml {
67
72
  }
68
73
 
69
74
  const TOC_ENTRIES = [
70
- { id: 'sec-model', num: '§ I', title: 'The working model — stages and states', page: 'p. 01' },
75
+ { id: 'sec-model', num: '§ I', title: 'The working model — pipeline and verbs', page: 'p. 01' },
71
76
  { id: 'sec-tracks', num: '§ II', title: 'Three tracks — longform, shortform, distribution', page: 'p. 02' },
72
77
  { id: 'sec-catalogue', num: '§ III', title: 'The skills, alphabetised', page: 'p. 03' },
73
78
  { id: 'sec-studio', num: '§ IV', title: 'The Editorial Studio, described', page: 'p. 08' },
@@ -91,42 +96,53 @@ function renderModelSection(): RawHtml {
91
96
  <header class="eh-section-head">
92
97
  <span class="eh-section-num">§ I</span>
93
98
  <h2 class="eh-section-title">The working model</h2>
94
- <span class="eh-section-sig">Stages · States</span>
99
+ <span class="eh-section-sig">Pipeline · Verbs · Sidecar</span>
95
100
  </header>
96
101
  <p class="eh-lead">
97
- Two state machines run in parallel. The <em>calendar stage</em> tracks where a piece of content lives in its lifecycle. The <em>review pipeline</em> tracks whether a specific draft version has been annotated, revised, and approved. They are orthogonal — a piece in <em>Drafting</em> may have three review workflows open against three different draft files, and a piece can reach <em>Published</em> without ever having been through review.
102
+ One state machine, six stages on the line, two off the line. Each entry has a sidecar JSON file at <code>.deskwork/entries/&lt;uuid&gt;.json</code> that holds its current stage, its per-stage iteration counter, and its history. The calendar markdown (<code>calendar.md</code>) is regenerated from sidecars the sidecar is the source of truth, the markdown is the rendered view.
98
103
  </p>
99
- <div class="eh-state-diagram" aria-label="Calendar stages">
100
- <span class="eh-state-label">Fig. 1 — Calendar stages</span>
104
+ <div class="eh-state-diagram" aria-label="Eight-stage pipeline">
105
+ <span class="eh-state-label">Fig. 1 — On-pipeline stages (forward-only)</span>
101
106
  <div class="eh-stage-chain">
102
- <div class="eh-stage-box"><span class="num">01</span><div class="ornament">◇</div><div class="name">Ideas</div><div class="hint">captured</div></div>
107
+ <div class="eh-stage-box"><span class="num">01</span><div class="ornament">◇</div><div class="name">Ideas</div><div class="hint">idea.md</div></div>
103
108
  <div class="eh-stage-arrow">→</div>
104
- <div class="eh-stage-box"><span class="num">02</span><div class="ornament">§</div><div class="name">Planned</div><div class="hint">keywords</div></div>
109
+ <div class="eh-stage-box"><span class="num">02</span><div class="ornament">§</div><div class="name">Planned</div><div class="hint">plan.md</div></div>
105
110
  <div class="eh-stage-arrow">→</div>
106
- <div class="eh-stage-box"><span class="num">03</span><div class="ornament">✎</div><div class="name">Drafting</div><div class="hint">writing</div></div>
111
+ <div class="eh-stage-box"><span class="num">03</span><div class="ornament">✎</div><div class="name">Outlining</div><div class="hint">outline.md</div></div>
107
112
  <div class="eh-stage-arrow">→</div>
108
- <div class="eh-stage-box"><span class="num">04</span><div class="ornament">※</div><div class="name">Review</div><div class="hint">iteration</div></div>
113
+ <div class="eh-stage-box"><span class="num">04</span><div class="ornament">¶</div><div class="name">Drafting</div><div class="hint">index.md</div></div>
109
114
  <div class="eh-stage-arrow">→</div>
110
- <div class="eh-stage-box"><span class="num">05</span><div class="ornament">✓</div><div class="name">Published</div><div class="hint">live</div></div>
115
+ <div class="eh-stage-box"><span class="num">05</span><div class="ornament">※</div><div class="name">Final</div><div class="hint">index.md</div></div>
116
+ <div class="eh-stage-arrow">→</div>
117
+ <div class="eh-stage-box"><span class="num">06</span><div class="ornament">✓</div><div class="name">Published</div><div class="hint">live</div></div>
111
118
  </div>
112
- <p class="eh-state-caption">Forward-only. An entry can be paused at any stage but does not walk backwards.</p>
119
+ <p class="eh-state-caption">Forward-only on the pipeline. Each stage has one primary artifact; <code>/deskwork:approve</code> graduates the entry by exactly one stage and seeds the next-stage file from the just-approved one.</p>
113
120
  </div>
114
- <div class="eh-state-diagram" aria-label="Review pipeline states">
115
- <span class="eh-state-label">Fig. 2 — Review pipeline (per draft, orthogonal)</span>
121
+ <div class="eh-state-diagram" aria-label="Off-pipeline stages">
122
+ <span class="eh-state-label">Fig. 2 — Off-pipeline (parking lots)</span>
123
+ <div class="eh-stage-chain">
124
+ <div class="eh-stage-box"><span class="num">⊘</span><div class="ornament">∥</div><div class="name">Blocked</div><div class="hint">resumable</div></div>
125
+ <div class="eh-stage-arrow">⇄</div>
126
+ <div class="eh-stage-box"><span class="num">×</span><div class="ornament">⊗</div><div class="name">Cancelled</div><div class="hint">abandoned</div></div>
127
+ </div>
128
+ <p class="eh-state-caption"><em>Blocked</em> is a process flag: out of pipeline, work paused, resumable. <em>Cancelled</em> is a semantic flag: intent abandoned, rare resume. Both record <code>priorStage</code> so <code>/deskwork:induct</code> can return the entry where it left off, with iteration counters preserved.</p>
129
+ </div>
130
+ <div class="eh-state-diagram" aria-label="Universal verbs">
131
+ <span class="eh-state-label">Fig. 3 — The universal verbs</span>
116
132
  <div class="eh-review-loop">
117
- <div class="loop-node">open</div>
133
+ <div class="loop-node">/deskwork:add</div>
118
134
  <div class="loop-arrow">→</div>
119
- <div class="loop-node">in-review</div>
135
+ <div class="loop-node">/deskwork:iterate</div>
120
136
  <div class="loop-arrow">⇄</div>
121
- <div class="loop-node">iterating</div>
137
+ <div class="loop-node">operator review</div>
122
138
  <div class="loop-arrow" style="grid-column: 3;">↓</div>
123
- <div class="loop-node terminal-ok" style="grid-column: 4;">approved</div>
139
+ <div class="loop-node terminal-ok" style="grid-column: 4;">/deskwork:approve</div>
124
140
  <div class="loop-arrow" style="grid-column: 5;">→</div>
125
- <div class="loop-node terminal-ok" style="grid-row: 3; grid-column: 1;">applied</div>
141
+ <div class="loop-node terminal-ok" style="grid-row: 3; grid-column: 1;">/deskwork:publish</div>
126
142
  <div class="loop-arrow" style="grid-row: 3; grid-column: 2;">←</div>
127
- <div class="loop-node terminal-x" style="grid-row: 3; grid-column: 3 / span 3;">cancelled (any state here)</div>
143
+ <div class="loop-node terminal-x" style="grid-row: 3; grid-column: 3 / span 3;">/deskwork:block · /deskwork:cancel · /deskwork:induct</div>
128
144
  </div>
129
- <p class="eh-state-caption">Every transition is validated by the pipeline's <code>VALID_TRANSITIONS</code>. <em>applied</em> means the draft has been written to its destination file; <em>cancelled</em> means the workflow was abandoned with the source untouched.</p>
145
+ <p class="eh-state-caption">Same verbs at every stage. <code>iterate</code> revises the current-stage artifact. <code>approve</code> advances by exactly one stage — there is no “approve but stay.” <code>block</code> and <code>cancel</code> step off the line; <code>induct</code> returns an entry to the pipeline (defaults: <em>Blocked/Cancelled</em> <code>priorStage</code>; <em>Final</em> <em>Drafting</em>; any other on-pipeline stage requires explicit <code>--to</code>).</p>
130
146
  </div>
131
147
  </section>`);
132
148
  }
@@ -139,20 +155,19 @@ function renderTracksSection(): RawHtml {
139
155
  <h2 class="eh-section-title">Three tracks</h2>
140
156
  <span class="eh-section-sig">Longform · Shortform · Distribution</span>
141
157
  </header>
142
- <p>Each track is a canonical run order for its kind of content. The studio surfaces the next move per track and per entry; these lists are for when you are driving Claude Code directly.</p>
158
+ <p>Each track is a canonical run order for its kind of content. The studio surfaces the next move per entry; these lists are for when you are driving Claude Code directly.</p>
143
159
  <div class="eh-tracks">
144
160
  <div class="eh-track">
145
161
  <p class="eh-track-title">Longform</p>
146
- <p class="eh-track-sub">Blog posts · dispatches</p>
162
+ <p class="eh-track-sub">Blog posts · dispatches · docs</p>
147
163
  <ol class="eh-track-steps">
148
- <li>Capture the idea.<code>/deskwork:add "Title"</code></li>
149
- <li>Promote and set keywords.<code>/deskwork:plan &lt;slug&gt;</code></li>
150
- <li>Scaffold the draft file.<code>/deskwork:draft &lt;slug&gt;</code><span class="note">or click "scaffold" in the studio.</span></li>
151
- <li>Write the prose. No skill; this is the human doing the work.</li>
152
- <li>Open a review workflow.<code>/deskwork:review-start &lt;slug&gt;</code></li>
153
- <li>Annotate in the browser, then iterate.<code>/deskwork:iterate</code></li>
154
- <li>Approve writes to the destination file.<code>/deskwork:approve</code></li>
155
- <li>Mark published. Then commit + push by hand.<code>/deskwork:publish &lt;slug&gt;</code></li>
164
+ <li>Capture the idea — mints sidecar + idea.md.<code>/deskwork:add "Title"</code></li>
165
+ <li>Iterate the idea until it has shape.<code>/deskwork:iterate &lt;uuid&gt;</code></li>
166
+ <li>Approve to graduate Ideas → Planned. Seeds plan.md.<code>/deskwork:approve &lt;uuid&gt;</code></li>
167
+ <li>Iterate the plan; approve when set. Seeds outline.md.<code>/deskwork:iterate · /deskwork:approve</code></li>
168
+ <li>Iterate the outline; approve when set. Seeds index.md (Drafting).<code>/deskwork:iterate · /deskwork:approve</code></li>
169
+ <li>Iterate the draft; approve when set. Stage becomes Final.<code>/deskwork:iterate · /deskwork:approve</code></li>
170
+ <li>Approve again to publish. Stamps datePublished.<code>/deskwork:publish &lt;uuid&gt;</code><span class="note">Then commit + push by hand.</span></li>
156
171
  </ol>
157
172
  </div>
158
173
  <div class="eh-track">
@@ -233,24 +248,24 @@ function renderStudioSection(): RawHtml {
233
248
  <div class="eh-panel">
234
249
  <p class="eh-panel-head">Primary surfaces</p>
235
250
  <h4>Calendar panels</h4>
236
- <p>Five columns: <em>Ideas · Planned · Drafting · Review · Published</em>. Each row shows slug, title, stage-specific metadata (keywords for Planned; dates for Published), a file-present dot, and the active review workflow stamp when one exists.</p>
251
+ <p>Six on-pipeline columns: <em>Ideas · Planned · Outlining · Drafting · Final · Published</em>, plus parking-lot panels for <em>Blocked</em> and <em>Cancelled</em>. Each row shows slug, title, the per-stage iteration counter (<code>iterationByStage</code>), a file-present dot for the current stage's primary artifact, and any review state.</p>
237
252
  <h4>Next-move column</h4>
238
- <p>Per row, the studio surfaces either a copy-to-clipboard command (for cognitive work that lives in Claude Code) or a one-click button (for mechanical transitions). <code>scaffold →</code> calls <code>/deskwork:draft</code>. <code>publish →</code> calls <code>/deskwork:publish</code>.</p>
253
+ <p>Per row, the studio surfaces either a copy-to-clipboard command (for cognitive work that lives in Claude Code) or a one-click button (for mechanical transitions). <code>approve →</code> calls <code>/deskwork:approve</code>. <code>publish →</code> calls <code>/deskwork:publish</code>. <code>block</code> / <code>cancel</code> / <code>induct</code> appear contextually.</p>
239
254
  <h4>Shortform coverage matrix</h4>
240
- <p>For each <em>Published</em> blog, a row of platform cells (reddit, linkedin, youtube, instagram). Shaded cells are covered by a DistributionRecord; empty cells surface the exact <code>/deskwork:shortform-start</code> command to copy.</p>
255
+ <p>For each <em>Published</em> entry, a row of platform cells (reddit, linkedin, youtube, instagram). Shaded cells are covered by a DistributionRecord; empty cells surface the exact <code>/deskwork:shortform-start</code> command to copy.</p>
241
256
  <h4>Voice-drift signal</h4>
242
- <p>A small panel on the right, backed by <code>/deskwork:review-report</code>. Names the two voice-skill categories that are producing the most operator corrections. Shows once you have at least five terminal workflows on record.</p>
257
+ <p>A small panel on the right. Names the two voice-skill categories that are producing the most operator corrections. Shows once you have at least five terminal workflows on record.</p>
243
258
  </div>
244
259
  <div class="eh-panel">
245
260
  <p class="eh-panel-head">Secondary surfaces</p>
246
- <h4>Longform review</h4>
247
- <p><code>/dev/editorial-review/&lt;slug&gt;</code>. The draft renders inside the review surface. Select text for a margin note; double-click anywhere to edit the markdown in place; approve, iterate, or reject from the fixed strip.</p>
261
+ <h4>Entry review</h4>
262
+ <p><code>/dev/editorial-review/entry/&lt;uuid&gt;</code>. The current-stage artifact (idea.md, plan.md, outline.md, or index.md) renders inside the review surface. Select text for a margin note; double-click anywhere to edit the markdown in place; approve, iterate, block, or cancel from the fixed strip. The review is keyed by entry uuid, not workflow id.</p>
248
263
  <h4>Shortform review</h4>
249
264
  <p><code>/dev/editorial-review-shortform</code>. Cards grouped by platform. Each card has a version header, an editable textarea, and save · approve · iterate · reject controls.</p>
250
265
  <h4>Keyboard</h4>
251
- <p>In the studio: <kbd>1</kbd>–<kbd>5</kbd> jump to stage columns. In a longform review: <kbd>e</kbd> / double-click toggles edit mode; <kbd>a</kbd> approves; <kbd>i</kbd> iterates; <kbd>r</kbd> rejects; <kbd>j</kbd>/<kbd>k</kbd> step through margin notes; <kbd>?</kbd> shows a full shortcuts overlay.</p>
266
+ <p>In the studio: <kbd>1</kbd>–<kbd>6</kbd> jump to on-pipeline columns. In an entry review: <kbd>e</kbd> / double-click toggles edit mode; <kbd>a</kbd> approves (graduates by one stage); <kbd>i</kbd> iterates; <kbd>b</kbd> blocks; <kbd>j</kbd>/<kbd>k</kbd> step through margin notes; <kbd>?</kbd> shows a full shortcuts overlay.</p>
252
267
  <h4>Polling</h4>
253
- <p>Both routes poll every 8–10 seconds when idle. If the agent runs <code>/deskwork:iterate</code> in Claude Code, a new draft version shows up in the browser without a reload.</p>
268
+ <p>Both routes poll every 8–10 seconds when idle. If the agent runs <code>/deskwork:iterate</code> in Claude Code, a new version of the current-stage artifact shows up in the browser without a reload.</p>
254
269
  </div>
255
270
  </div>
256
271
  </section>`);
@@ -260,42 +275,32 @@ const RUNTHROUGH_STEPS: ReadonlyArray<{ title: string; op: string; body: RawHtml
260
275
  {
261
276
  title: 'Capture an idea',
262
277
  op: 'terminal',
263
- body: unsafe('<p>You have a title in mind. Run <code>/deskwork:add "Your Title"</code>. A row lands in <em>Ideas</em>. Slug is generated; calendar is committed-able.</p>'),
264
- },
265
- {
266
- title: 'Promote to Planned',
267
- op: 'terminal',
268
- body: unsafe('<p>The idea has shape. Run <code>/deskwork:plan &lt;slug&gt;</code>. You are prompted for target keywords and topic tags; they land on the calendar row. The studio\'s Planned column now shows it with a tag strip.</p>'),
269
- },
270
- {
271
- title: 'Scaffold the draft',
272
- op: 'studio or terminal',
273
- body: unsafe('<p>Click the <code>scaffold →</code> button on the row, or run <code>/deskwork:draft --site &lt;site&gt; &lt;slug&gt;</code>. The blog file appears with frontmatter filled in, and the entry moves to <em>Drafting</em>.</p>'),
278
+ body: unsafe('<p>You have a title in mind. Run <code>/deskwork:add "Your Title"</code>. The sidecar lands at <code>.deskwork/entries/&lt;uuid&gt;.json</code> with stage <em>Ideas</em>; <code>idea.md</code> is initialised; <code>calendar.md</code> regenerates from sidecars.</p>'),
274
279
  },
275
280
  {
276
- title: 'Write the prose',
277
- op: 'editor',
278
- body: unsafe('<p>This is the human half. Open the scaffolded file and write the dispatch. The voice skill is not invoked yet it comes in at review time.</p>'),
281
+ title: 'Iterate the idea',
282
+ op: 'browser then terminal',
283
+ body: unsafe('<p>Open <code>/dev/editorial-review/entry/&lt;uuid&gt;</code>. Leave margin notes on <code>idea.md</code>. Click <em>Iterate</em>; back in Claude Code run <code>/deskwork:iterate &lt;uuid&gt;</code>. The agent revises using the site voice, writes the next version, bumps <code>iterationByStage.Ideas</code>.</p>'),
279
284
  },
280
285
  {
281
- title: 'Open the review workflow',
282
- op: 'terminal',
283
- body: unsafe('<p><code>/deskwork:review-start &lt;slug&gt;</code> prints the dev URL: <code>/dev/editorial-review/&lt;workflow-id&gt;</code>. The draft renders inside the review chrome. State: <em>open</em>.</p>'),
286
+ title: 'Approve into Planned',
287
+ op: 'browser or terminal',
288
+ body: unsafe('<p>Click <em>Approve</em> on the review surface or run <code>/deskwork:approve &lt;uuid&gt;</code>. Stage graduates to <em>Planned</em>. <code>plan.md</code> is seeded from <code>idea.md</code>; <code>iterationByStage.Planned</code> starts at 0.</p>'),
284
289
  },
285
290
  {
286
- title: 'Annotate in the browser',
287
- op: 'browser',
288
- body: unsafe('<p>Select text the <code>Mark</code> pencil appears category dropdown type a note → <em>Leave mark</em>. Repeat for each correction. The state flips to <em>in-review</em> on your first action.</p>'),
291
+ title: 'Plan, then outline, then draft',
292
+ op: 'browser then terminal',
293
+ body: unsafe('<p>Same loop at each stage. <code>/deskwork:iterate</code> revises the current-stage artifact (<code>plan.md</code>, then <code>outline.md</code>, then <code>index.md</code>). <code>/deskwork:approve</code> graduates by exactly one stage. There is no “approve but stay.”</p>'),
289
294
  },
290
295
  {
291
- title: 'Iterate',
292
- op: 'browser then terminal',
293
- body: unsafe('<p>Click <em>Iterate</em>. State becomes <em>iterating</em>. Back in Claude Code, run <code>/deskwork:iterate</code>. The agent revises using the site voice skill, writes v2 to the journal, flips back to <em>in-review</em>. Polling surfaces v2 in the browser without a reload.</p>'),
296
+ title: 'Approve into Final',
297
+ op: 'browser or terminal',
298
+ body: unsafe('<p>When the Drafting <code>index.md</code> is good, approve once more. Stage becomes <em>Final</em>. The same <code>index.md</code> is the artifact at Final Final is the “ready to publish” stage, not a separate file.</p>'),
294
299
  },
295
300
  {
296
- title: 'Approve and write',
297
- op: 'browser then terminal',
298
- body: unsafe('<p>Click <em>Approve</em>. State becomes <em>approved</em>. Run <code>/deskwork:approve</code>. The approved version is written to the blog file on disk; state becomes <em>applied</em>.</p>'),
301
+ title: 'Publish',
302
+ op: 'browser or terminal',
303
+ body: unsafe('<p>Click <code>publish →</code> on the Final row, or run <code>/deskwork:publish &lt;uuid&gt;</code>. Stage becomes <em>Published</em>; today\'s date is stamped as <code>datePublished</code>; <code>calendar.md</code> regenerates.</p>'),
299
304
  },
300
305
  {
301
306
  title: 'Commit by hand',
@@ -303,9 +308,14 @@ const RUNTHROUGH_STEPS: ReadonlyArray<{ title: string; op: string; body: RawHtml
303
308
  body: unsafe('<p>The UI does not commit. Review the diff, commit and push when ready. This is deliberate — the operator holds the pen.</p>'),
304
309
  },
305
310
  {
306
- title: 'Mark published',
307
- op: 'studio or terminal',
308
- body: unsafe('<p>Click <code>publish →</code> on the Drafting or Review row, or run <code>/deskwork:publish &lt;slug&gt;</code>. The entry moves to <em>Published</em>; today\'s date is stamped as <code>datePublished</code>.</p>'),
311
+ title: 'Park or abandon, when needed',
312
+ op: 'terminal',
313
+ body: unsafe('<p>Stuck on a source or a decision? <code>/deskwork:block &lt;uuid&gt; --reason "waiting on source"</code> moves the entry to <em>Blocked</em> with <code>priorStage</code> recorded. Done with it for good? <code>/deskwork:cancel &lt;uuid&gt;</code>. Both preserve the sidecar and history; nothing is deleted.</p>'),
314
+ },
315
+ {
316
+ title: 'Induct back into the pipeline',
317
+ op: 'terminal',
318
+ body: unsafe('<p><code>/deskwork:induct &lt;uuid&gt;</code> brings the entry back. From <em>Blocked</em> or <em>Cancelled</em>, the default destination is <code>priorStage</code>. From <em>Final</em>, the default is <em>Drafting</em>. From any other on-pipeline stage, you must pass <code>--to &lt;stage&gt;</code> explicitly. <code>iterationByStage</code> is preserved — pick up where you left off.</p>'),
309
319
  },
310
320
  {
311
321
  title: 'Cross-post',
@@ -315,7 +325,7 @@ const RUNTHROUGH_STEPS: ReadonlyArray<{ title: string; op: string; body: RawHtml
315
325
  {
316
326
  title: 'Reconcile and reflect',
317
327
  op: 'cadence',
318
- body: unsafe('<p><code>/deskwork:review-report</code> shows which voice-skill principles are drifting. Feed the observations back into the voice skills. The cycle compounds.</p>'),
328
+ body: unsafe('<p><code>/deskwork:doctor</code> reports drift between sidecar truth and rendered <code>calendar.md</code>; <code>/deskwork:status</code> gives a compact roll-call. Feed comment-annotation observations back into the voice skills. The cycle compounds.</p>'),
319
329
  },
320
330
  ];
321
331
 
@@ -351,13 +361,13 @@ function renderReferenceSection(): RawHtml {
351
361
  </header>
352
362
  <div class="eh-reference">
353
363
  <div class="eh-ref-block">
354
- <h4>Keyboard — longform review</h4>
364
+ <h4>Keyboard — entry review</h4>
355
365
  <dl>
356
366
  <dt><kbd>e</kbd> / dbl-click</dt><dd>toggle edit mode</dd>
357
367
  <dt>select text</dt><dd>leave a margin note</dd>
358
- <dt><kbd>a</kbd></dt><dd>approve the draft</dd>
368
+ <dt><kbd>a</kbd></dt><dd>approve graduates by one stage</dd>
359
369
  <dt><kbd>i</kbd></dt><dd>iterate (hand off to Claude Code)</dd>
360
- <dt><kbd>r</kbd></dt><dd>rejectcancels the workflow</dd>
370
+ <dt><kbd>b</kbd></dt><dd>blockout of pipeline, resumable</dd>
361
371
  <dt><kbd>j</kbd> / <kbd>k</kbd></dt><dd>step through margin notes</dd>
362
372
  <dt><kbd>?</kbd></dt><dd>shortcuts overlay</dd>
363
373
  <dt><kbd>esc</kbd></dt><dd>close overlay or cancel comment</dd>
@@ -368,50 +378,54 @@ function renderReferenceSection(): RawHtml {
368
378
  <dl>
369
379
  <dt><kbd>1</kbd></dt><dd>jump to Ideas column</dd>
370
380
  <dt><kbd>2</kbd></dt><dd>jump to Planned</dd>
371
- <dt><kbd>3</kbd></dt><dd>jump to Drafting</dd>
372
- <dt><kbd>4</kbd></dt><dd>jump to Review</dd>
373
- <dt><kbd>5</kbd></dt><dd>jump to Published</dd>
381
+ <dt><kbd>3</kbd></dt><dd>jump to Outlining</dd>
382
+ <dt><kbd>4</kbd></dt><dd>jump to Drafting</dd>
383
+ <dt><kbd>5</kbd></dt><dd>jump to Final</dd>
384
+ <dt><kbd>6</kbd></dt><dd>jump to Published</dd>
374
385
  </dl>
375
386
  </div>
376
387
  <div class="eh-ref-block eh-ref-block--stacked">
377
388
  <h4>URL patterns</h4>
378
389
  <dl>
379
390
  <dt>/dev/editorial-studio</dt><dd>calendar desk</dd>
380
- <dt>/dev/editorial-review/&lt;slug&gt;</dt><dd>longform review</dd>
391
+ <dt>/dev/editorial-review/entry/&lt;uuid&gt;</dt><dd>entry review (current-stage artifact)</dd>
381
392
  <dt>/dev/editorial-review-shortform</dt><dd>shortform cards</dd>
382
393
  <dt>/dev/editorial-help</dt><dd>this manual</dd>
383
394
  </dl>
384
395
  </div>
385
396
  <div class="eh-ref-block">
386
- <h4>Review state transitions</h4>
397
+ <h4>Stage transitions</h4>
387
398
  <table class="eh-transitions">
388
- <thead><tr><th>from</th><th>to</th></tr></thead>
399
+ <thead><tr><th>verb</th><th>effect</th></tr></thead>
389
400
  <tbody>
390
- <tr><td>open</td><td class="arrow">→ in-review, cancelled</td></tr>
391
- <tr><td>in-review</td><td class="arrow">→ iterating, approved, cancelled</td></tr>
392
- <tr><td>iterating</td><td class="arrow">→ in-review, cancelled</td></tr>
393
- <tr><td>approved</td><td class="arrow">→ applied, cancelled</td></tr>
394
- <tr><td>applied</td><td>— terminal</td></tr>
395
- <tr><td>cancelled</td><td>— terminal</td></tr>
401
+ <tr><td>add</td><td class="arrow">→ Ideas (mints sidecar + idea.md)</td></tr>
402
+ <tr><td>iterate</td><td class="arrow">→ same stage, next iteration</td></tr>
403
+ <tr><td>approve</td><td class="arrow">→ next stage by exactly one</td></tr>
404
+ <tr><td>publish</td><td class="arrow">Final Published (stamps datePublished)</td></tr>
405
+ <tr><td>block</td><td class="arrow">→ Blocked (records priorStage)</td></tr>
406
+ <tr><td>cancel</td><td class="arrow">→ Cancelled (records priorStage)</td></tr>
407
+ <tr><td>induct</td><td class="arrow">Blocked/Cancelled → priorStage; Final → Drafting; otherwise --to &lt;stage&gt;</td></tr>
396
408
  </tbody>
397
409
  </table>
398
410
  </div>
399
411
  <div class="eh-ref-block eh-ref-block--stacked">
400
412
  <h4>File locations</h4>
401
413
  <dl>
402
- <dt>(per-site calendarsee config)</dt><dd>the single calendar file per site</dd>
403
- <dt>.deskwork/review-journal/pipeline/</dt><dd>per-workflow review state, one JSON per id</dd>
404
- <dt>.deskwork/review-journal/history/</dt><dd>every event (versions, states, comments)</dd>
405
- <dt>(blog content dir see config)</dt><dd>blog post source directory</dd>
406
- <dt>plugins/&lt;plugin&gt;/skills/&lt;name&gt;/</dt><dd>one skill = one directory</dd>
414
+ <dt>.deskwork/entries/&lt;uuid&gt;.json</dt><dd>entry sidecarsource of truth (stage, history, iterationByStage)</dd>
415
+ <dt>(per-site calendar — see config)</dt><dd>calendar.md regenerated from sidecars; never edit by hand</dd>
416
+ <dt>(per-entry workspace — see config)</dt><dd>idea.md · plan.md · outline.md · index.md (one per stage)</dd>
417
+ <dt>.deskwork/review-journal/pipeline/</dt><dd>shortform workflow state, one JSON per id</dd>
418
+ <dt>.deskwork/review-journal/history/</dt><dd>shortform events (versions, states, comments)</dd>
419
+ <dt>.deskwork/{templates,prompts,doctor}/</dt><dd>per-project overrides — see <code>/deskwork:customize</code></dd>
407
420
  </dl>
408
421
  </div>
409
422
  <div class="eh-ref-block">
410
423
  <h4>First-run tripwires</h4>
411
424
  <dl>
412
- <dt>404 on /dev/*</dt><dd>the dev routes only run when <code>deskwork-studio</code> is up. Start it: <code>npx tsx packages/studio/src/server.ts</code>.</dd>
413
- <dt>no galley to review</dt><dd>start one with <code>/deskwork:review-start --site &lt;site&gt; &lt;slug&gt;</code>.</dd>
425
+ <dt>404 on /dev/*</dt><dd>the dev routes only run when <code>deskwork-studio</code> is up. Start it with the documented launch command.</dd>
426
+ <dt>nothing to review</dt><dd>capture an entry first: <code>/deskwork:add "Title"</code>, then visit <code>/dev/editorial-review/entry/&lt;uuid&gt;</code>.</dd>
414
427
  <dt>iterate doesn't trigger</dt><dd>the agent has to run <code>/deskwork:iterate</code>. The browser button just marks the workflow; Claude does the writing.</dd>
428
+ <dt>calendar.md drift</dt><dd>run <code>/deskwork:doctor</code>. The sidecar is truth — calendar.md is regenerated from it.</dd>
415
429
  </dl>
416
430
  </div>
417
431
  </div>
@@ -421,7 +435,7 @@ function renderReferenceSection(): RawHtml {
421
435
  function renderColophon(): RawHtml {
422
436
  return unsafe(html`
423
437
  <footer class="eh-colophon">
424
- <span>End of manual</span><span>·</span><span>revision 1.0</span><span>·</span><em>The cycle compounds.</em><span>·</span>
438
+ <span>End of manual</span><span>·</span><span>revision 2.0</span><span>·</span><em>The cycle compounds.</em><span>·</span>
425
439
  <a href="/dev/editorial-studio" style="color: inherit;">back to the studio</a>
426
440
  </footer>`);
427
441
  }
@@ -16,6 +16,18 @@
16
16
  *
17
17
  * Read-only — links to existing routes only. No editing capability here.
18
18
  */
19
+ import type { Entry } from '@deskwork/core/schema/entry';
19
20
  import type { StudioContext } from '../routes/api.ts';
20
- export declare function renderStudioIndex(ctx: StudioContext): string;
21
+ /**
22
+ * Pick the entry that should be the default Longform-reviews target —
23
+ * the most-recent in-pipeline entry whose review state is in-review or
24
+ * iterating. Returns null when no candidate exists; the caller falls
25
+ * back to the dashboard's Review section anchor.
26
+ *
27
+ * Replaces the legacy workflow-based picker as part of the pipeline
28
+ * redesign (Task 36) — the studio's review surfaces are now keyed by
29
+ * entry uuid, not workflow uuid.
30
+ */
31
+ export declare function pickDefaultLongformEntry(entries: readonly Entry[]): Entry | null;
32
+ export declare function renderStudioIndex(ctx: StudioContext): Promise<string>;
21
33
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/pages/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAIH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AA8NtD,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,aAAa,GAAG,MAAM,CA8B5D"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/pages/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAGH,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,6BAA6B,CAAC;AACzD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAqDtD;;;;;;;;;GASG;AACH,wBAAgB,wBAAwB,CACtC,OAAO,EAAE,SAAS,KAAK,EAAE,GACxB,KAAK,GAAG,IAAI,CAOd;AAsKD,wBAAsB,iBAAiB,CAAC,GAAG,EAAE,aAAa,GAAG,OAAO,CAAC,MAAM,CAAC,CA8B3E"}
@@ -16,41 +16,56 @@
16
16
  *
17
17
  * Read-only — links to existing routes only. No editing capability here.
18
18
  */
19
- import { readWorkflows } from '@deskwork/core/review/pipeline';
19
+ import { readAllSidecars } from '@deskwork/core/sidecar';
20
20
  import { html, unsafe } from "./html.js";
21
21
  import { layout } from "./layout.js";
22
22
  import { renderEditorialFolio } from "./chrome.js";
23
+ /** Stages that are part of the longform pipeline for review-default purposes. */
24
+ const LONGFORM_PIPELINE_STAGES = new Set([
25
+ 'Ideas',
26
+ 'Planned',
27
+ 'Outlining',
28
+ 'Drafting',
29
+ 'Final',
30
+ ]);
23
31
  /**
24
- * Pick the workflow that should be the default Longform-reviews target —
25
- * the most-recent open longform workflow (in-review or open). Returns
26
- * null when no candidate exists; the caller falls back to the dashboard's
27
- * Review section anchor.
32
+ * Pick the entry that should be the default Longform-reviews target —
33
+ * the most-recent in-pipeline entry whose review state is in-review or
34
+ * iterating. Returns null when no candidate exists; the caller falls
35
+ * back to the dashboard's Review section anchor.
36
+ *
37
+ * Replaces the legacy workflow-based picker as part of the pipeline
38
+ * redesign (Task 36) — the studio's review surfaces are now keyed by
39
+ * entry uuid, not workflow uuid.
28
40
  */
29
- function pickDefaultLongformWorkflow(workflows) {
30
- const candidates = workflows
31
- .filter((w) => w.contentKind === 'longform')
32
- .filter((w) => w.state === 'in-review' || w.state === 'open')
41
+ export function pickDefaultLongformEntry(entries) {
42
+ const candidates = entries
43
+ .filter((e) => LONGFORM_PIPELINE_STAGES.has(e.currentStage))
44
+ .filter((e) => e.reviewState === 'in-review' || e.reviewState === 'iterating')
33
45
  .slice()
34
46
  .sort((a, b) => b.updatedAt.localeCompare(a.updatedAt));
35
47
  return candidates[0] ?? null;
36
48
  }
37
- function buildSections(ctx) {
38
- const workflows = (() => {
49
+ async function buildSections(ctx) {
50
+ const entries = await (async () => {
39
51
  try {
40
- return readWorkflows(ctx.projectRoot, ctx.config);
52
+ return await readAllSidecars(ctx.projectRoot);
41
53
  }
42
54
  catch {
43
55
  return [];
44
56
  }
45
57
  })();
46
- const longformDefault = pickDefaultLongformWorkflow(workflows);
47
- // Issue #107: III links to the most-recent in-review longform when
48
- // one exists, else falls back to the dashboard's Review section
49
- // anchor (`#stage-review`, mounted in sub-phase D). The visual
50
- // template hint stays alongside the link so adopters still see the
51
- // URL shape `<slug>` placeholder shown in red-pencil italic.
52
- const longformLinkHref = longformDefault !== null
53
- ? `/dev/editorial-review/${longformDefault.id}`
58
+ const longformDefaultEntry = pickDefaultLongformEntry(entries);
59
+ // Issue #107 / pipeline-redesign Task 36: III links to the
60
+ // most-recent in-review (or iterating) longform entry when one
61
+ // exists, else falls back to the dashboard's Review section anchor
62
+ // (`#stage-review`, mounted in sub-phase D). The visual template
63
+ // hint stays alongside the link so adopters still see the URL
64
+ // shape `<slug>` placeholder shown in red-pencil italic. The
65
+ // link target is the entry-uuid keyed review route added in
66
+ // Task 35 (`/dev/editorial-review/entry/<uuid>`).
67
+ const longformLinkHref = longformDefaultEntry !== null
68
+ ? `/dev/editorial-review/entry/${longformDefaultEntry.uuid}`
54
69
  : '/dev/editorial-studio#stage-review';
55
70
  return [
56
71
  {
@@ -88,8 +103,8 @@ function buildSections(ctx) {
88
103
  template: { prefix: '/dev/editorial-review/', placeholder: '<slug>' },
89
104
  desc: 'Per-entry margin notes, decisions, iterate flow.',
90
105
  hint: 'entry-by-entry',
91
- postHint: longformDefault !== null
92
- ? `Defaults to the most-recent in-review longform (${longformDefault.slug}). Or reach via the Dashboard or Content view.`
106
+ postHint: longformDefaultEntry !== null
107
+ ? `Defaults to the most-recent in-review longform (${longformDefaultEntry.slug}). Or reach via the Dashboard or Content view.`
93
108
  : 'Defaults to the dashboard\'s Review section. Open a longform workflow to populate the per-entry deep-link.',
94
109
  },
95
110
  ],
@@ -187,8 +202,8 @@ function renderSection(section) {
187
202
  </ol>
188
203
  </section>`);
189
204
  }
190
- export function renderStudioIndex(ctx) {
191
- const sections = buildSections(ctx);
205
+ export async function renderStudioIndex(ctx) {
206
+ const sections = await buildSections(ctx);
192
207
  const body = html `
193
208
  ${renderEditorialFolio('index', 'index of the press')}
194
209
  <main class="er-toc-page">
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/pages/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/pages/index.ts"],"names":[],"mappings":"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"}