@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.
- package/dist/lib/editorial-skills-catalogue.d.ts +15 -1
- package/dist/lib/editorial-skills-catalogue.d.ts.map +1 -1
- package/dist/lib/editorial-skills-catalogue.js +66 -59
- package/dist/lib/editorial-skills-catalogue.js.map +1 -1
- package/dist/lib/entry-resolver.d.ts +22 -0
- package/dist/lib/entry-resolver.d.ts.map +1 -0
- package/dist/lib/entry-resolver.js +42 -0
- package/dist/lib/entry-resolver.js.map +1 -0
- package/dist/lib/stage-affordances.d.ts +31 -0
- package/dist/lib/stage-affordances.d.ts.map +1 -0
- package/dist/lib/stage-affordances.js +37 -0
- package/dist/lib/stage-affordances.js.map +1 -0
- package/dist/pages/dashboard/affordances.d.ts +41 -0
- package/dist/pages/dashboard/affordances.d.ts.map +1 -0
- package/dist/pages/dashboard/affordances.js +87 -0
- package/dist/pages/dashboard/affordances.js.map +1 -0
- package/dist/pages/dashboard/affordances.ts +95 -0
- package/dist/pages/dashboard/data.d.ts +24 -0
- package/dist/pages/dashboard/data.d.ts.map +1 -0
- package/dist/pages/dashboard/data.js +49 -0
- package/dist/pages/dashboard/data.js.map +1 -0
- package/dist/pages/dashboard/data.ts +56 -0
- package/dist/pages/dashboard/header.d.ts +13 -0
- package/dist/pages/dashboard/header.d.ts.map +1 -0
- package/dist/pages/dashboard/header.js +70 -0
- package/dist/pages/dashboard/header.js.map +1 -0
- package/dist/pages/dashboard/header.ts +80 -0
- package/dist/pages/dashboard/section.d.ts +37 -0
- package/dist/pages/dashboard/section.d.ts.map +1 -0
- package/dist/pages/dashboard/section.js +117 -0
- package/dist/pages/dashboard/section.js.map +1 -0
- package/dist/pages/dashboard/section.ts +132 -0
- package/dist/pages/dashboard.d.ts +30 -21
- package/dist/pages/dashboard.d.ts.map +1 -1
- package/dist/pages/dashboard.js +34 -799
- package/dist/pages/dashboard.js.map +1 -1
- package/dist/pages/dashboard.ts +44 -980
- package/dist/pages/entry-review.d.ts +25 -0
- package/dist/pages/entry-review.d.ts.map +1 -0
- package/dist/pages/entry-review.js +148 -0
- package/dist/pages/entry-review.js.map +1 -0
- package/dist/pages/entry-review.ts +185 -0
- package/dist/pages/help.d.ts +10 -5
- package/dist/pages/help.d.ts.map +1 -1
- package/dist/pages/help.js +113 -99
- package/dist/pages/help.js.map +1 -1
- package/dist/pages/help.ts +113 -99
- package/dist/pages/index.d.ts +13 -1
- package/dist/pages/index.d.ts.map +1 -1
- package/dist/pages/index.js +39 -24
- package/dist/pages/index.js.map +1 -1
- package/dist/pages/index.ts +43 -27
- package/dist/server.d.ts.map +1 -1
- package/dist/server.js +23 -3
- package/dist/server.js.map +1 -1
- package/package.json +4 -4
package/dist/pages/help.ts
CHANGED
|
@@ -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 (
|
|
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
|
-
*
|
|
18
|
-
*
|
|
19
|
-
*
|
|
20
|
-
*
|
|
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.
|
|
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
|
|
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>
|
|
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 —
|
|
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">
|
|
99
|
+
<span class="eh-section-sig">Pipeline · Verbs · Sidecar</span>
|
|
95
100
|
</header>
|
|
96
101
|
<p class="eh-lead">
|
|
97
|
-
|
|
102
|
+
One state machine, six stages on the line, two off the line. Each entry has a sidecar JSON file at <code>.deskwork/entries/<uuid>.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="
|
|
100
|
-
<span class="eh-state-label">Fig. 1 —
|
|
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">
|
|
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">
|
|
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">
|
|
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"
|
|
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"
|
|
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.
|
|
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="
|
|
115
|
-
<span class="eh-state-label">Fig. 2 —
|
|
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"
|
|
133
|
+
<div class="loop-node">/deskwork:add</div>
|
|
118
134
|
<div class="loop-arrow">→</div>
|
|
119
|
-
<div class="loop-node"
|
|
135
|
+
<div class="loop-node">/deskwork:iterate</div>
|
|
120
136
|
<div class="loop-arrow">⇄</div>
|
|
121
|
-
<div class="loop-node">
|
|
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;"
|
|
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;"
|
|
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;"
|
|
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">
|
|
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
|
|
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>
|
|
150
|
-
<li>
|
|
151
|
-
<li>
|
|
152
|
-
<li>
|
|
153
|
-
<li>
|
|
154
|
-
<li>Approve
|
|
155
|
-
<li>Mark published. Then commit + push by hand.<code>/deskwork:publish <slug></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 <uuid></code></li>
|
|
166
|
+
<li>Approve to graduate Ideas → Planned. Seeds plan.md.<code>/deskwork:approve <uuid></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 <uuid></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>
|
|
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>
|
|
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>
|
|
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
|
|
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>
|
|
247
|
-
<p><code>/dev/editorial-review/<
|
|
261
|
+
<h4>Entry review</h4>
|
|
262
|
+
<p><code>/dev/editorial-review/entry/<uuid></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>
|
|
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
|
|
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>.
|
|
264
|
-
},
|
|
265
|
-
{
|
|
266
|
-
title: 'Promote to Planned',
|
|
267
|
-
op: 'terminal',
|
|
268
|
-
body: unsafe('<p>The idea has shape. Run <code>/deskwork:plan <slug></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 <site> <slug></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/<uuid>.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: '
|
|
277
|
-
op: '
|
|
278
|
-
body: unsafe('<p>
|
|
281
|
+
title: 'Iterate the idea',
|
|
282
|
+
op: 'browser then terminal',
|
|
283
|
+
body: unsafe('<p>Open <code>/dev/editorial-review/entry/<uuid></code>. Leave margin notes on <code>idea.md</code>. Click <em>Iterate</em>; back in Claude Code run <code>/deskwork:iterate <uuid></code>. The agent revises using the site voice, writes the next version, bumps <code>iterationByStage.Ideas</code>.</p>'),
|
|
279
284
|
},
|
|
280
285
|
{
|
|
281
|
-
title: '
|
|
282
|
-
op: 'terminal',
|
|
283
|
-
body: unsafe('<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 <uuid></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: '
|
|
287
|
-
op: 'browser',
|
|
288
|
-
body: unsafe('<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: '
|
|
292
|
-
op: 'browser
|
|
293
|
-
body: unsafe('<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: '
|
|
297
|
-
op: 'browser
|
|
298
|
-
body: unsafe('<p>Click <
|
|
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 <uuid></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: '
|
|
307
|
-
op: '
|
|
308
|
-
body: unsafe('<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 <uuid> --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 <uuid></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 <uuid></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 <stage></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:
|
|
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 —
|
|
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
|
|
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>
|
|
370
|
+
<dt><kbd>b</kbd></dt><dd>block — out 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
|
|
372
|
-
<dt><kbd>4</kbd></dt><dd>jump to
|
|
373
|
-
<dt><kbd>5</kbd></dt><dd>jump to
|
|
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/<
|
|
391
|
+
<dt>/dev/editorial-review/entry/<uuid></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>
|
|
397
|
+
<h4>Stage transitions</h4>
|
|
387
398
|
<table class="eh-transitions">
|
|
388
|
-
<thead><tr><th>
|
|
399
|
+
<thead><tr><th>verb</th><th>effect</th></tr></thead>
|
|
389
400
|
<tbody>
|
|
390
|
-
<tr><td>
|
|
391
|
-
<tr><td>
|
|
392
|
-
<tr><td>
|
|
393
|
-
<tr><td>
|
|
394
|
-
<tr><td>
|
|
395
|
-
<tr><td>
|
|
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 <stage></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>
|
|
403
|
-
<dt
|
|
404
|
-
<dt
|
|
405
|
-
<dt>
|
|
406
|
-
<dt
|
|
414
|
+
<dt>.deskwork/entries/<uuid>.json</dt><dd>entry sidecar — source 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
|
|
413
|
-
<dt>
|
|
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/<uuid></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
|
|
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
|
}
|
package/dist/pages/index.d.ts
CHANGED
|
@@ -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
|
-
|
|
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;
|
|
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"}
|
package/dist/pages/index.js
CHANGED
|
@@ -16,41 +16,56 @@
|
|
|
16
16
|
*
|
|
17
17
|
* Read-only — links to existing routes only. No editing capability here.
|
|
18
18
|
*/
|
|
19
|
-
import {
|
|
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
|
|
25
|
-
* the most-recent
|
|
26
|
-
* null when no candidate exists; the caller falls
|
|
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
|
|
30
|
-
const candidates =
|
|
31
|
-
.filter((
|
|
32
|
-
.filter((
|
|
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
|
|
49
|
+
async function buildSections(ctx) {
|
|
50
|
+
const entries = await (async () => {
|
|
39
51
|
try {
|
|
40
|
-
return
|
|
52
|
+
return await readAllSidecars(ctx.projectRoot);
|
|
41
53
|
}
|
|
42
54
|
catch {
|
|
43
55
|
return [];
|
|
44
56
|
}
|
|
45
57
|
})();
|
|
46
|
-
const
|
|
47
|
-
// Issue #107: III links to the
|
|
48
|
-
//
|
|
49
|
-
//
|
|
50
|
-
//
|
|
51
|
-
//
|
|
52
|
-
|
|
53
|
-
|
|
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:
|
|
92
|
-
? `Defaults to the most-recent in-review longform (${
|
|
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">
|
package/dist/pages/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/pages/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAEH,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/pages/index.ts"],"names":[],"mappings":"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"}
|