@deskwork/core 0.16.0 → 0.17.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.
@@ -104,6 +104,13 @@ function toDraftAnnotation(stored) {
104
104
  type: 'delete-comment',
105
105
  commentId: stored.commentId,
106
106
  };
107
+ case 'archive-comment':
108
+ return {
109
+ ...base,
110
+ type: 'archive-comment',
111
+ commentId: stored.commentId,
112
+ ...(stored.priorStage !== undefined ? { priorStage: stored.priorStage } : {}),
113
+ };
107
114
  }
108
115
  }
109
116
  /**
@@ -116,7 +123,9 @@ function toDraftAnnotation(stored) {
116
123
  * silently persisting an orphan that the folder will skip over.
117
124
  */
118
125
  export async function addEntryAnnotation(projectRoot, entryId, annotation) {
119
- if (annotation.type === 'edit-comment' || annotation.type === 'delete-comment') {
126
+ if (annotation.type === 'edit-comment' ||
127
+ annotation.type === 'delete-comment' ||
128
+ annotation.type === 'archive-comment') {
120
129
  const raw = await listEntryAnnotationsRaw(projectRoot, entryId);
121
130
  const referent = raw.find((a) => a.type === 'comment' && a.id === annotation.commentId);
122
131
  if (!referent) {
@@ -180,6 +189,7 @@ export async function listEntryAnnotationsRaw(projectRoot, entryId) {
180
189
  function foldAnnotations(raw) {
181
190
  const editsByCommentId = new Map();
182
191
  const deletedCommentIds = new Set();
192
+ const archivedCommentIds = new Set();
183
193
  for (const a of raw) {
184
194
  if (a.type === 'edit-comment') {
185
195
  const arr = editsByCommentId.get(a.commentId) ?? [];
@@ -189,16 +199,23 @@ function foldAnnotations(raw) {
189
199
  else if (a.type === 'delete-comment') {
190
200
  deletedCommentIds.add(a.commentId);
191
201
  }
202
+ else if (a.type === 'archive-comment') {
203
+ archivedCommentIds.add(a.commentId);
204
+ }
192
205
  }
193
206
  const out = [];
194
207
  for (const a of raw) {
195
- if (a.type === 'edit-comment' || a.type === 'delete-comment') {
208
+ if (a.type === 'edit-comment' ||
209
+ a.type === 'delete-comment' ||
210
+ a.type === 'archive-comment') {
196
211
  // Fold-only events; not surfaced in the active view.
197
212
  continue;
198
213
  }
199
214
  if (a.type === 'comment') {
200
215
  if (deletedCommentIds.has(a.id))
201
216
  continue;
217
+ if (archivedCommentIds.has(a.id))
218
+ continue;
202
219
  const edits = editsByCommentId.get(a.id);
203
220
  if (!edits || edits.length === 0) {
204
221
  out.push(a);
@@ -207,6 +224,14 @@ function foldAnnotations(raw) {
207
224
  out.push(applyEdits(a, edits));
208
225
  continue;
209
226
  }
227
+ // Drop resolve/address annotations whose target comment was archived
228
+ // — without this, the marginalia column would render an "address"
229
+ // badge or a "resolve" status against a comment that no longer
230
+ // appears in the active sidebar.
231
+ if ((a.type === 'resolve' || a.type === 'address') &&
232
+ archivedCommentIds.has(a.commentId)) {
233
+ continue;
234
+ }
210
235
  out.push(a);
211
236
  }
212
237
  return out;
@@ -1 +1 @@
1
- {"version":3,"file":"annotations.js","sourceRoot":"","sources":["../../src/entry/annotations.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"annotations.js","sourceRoot":"","sources":["../../src/entry/annotations.ts"],"names":[],"mappings":"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"}
@@ -6,6 +6,15 @@ interface ApproveResult {
6
6
  readonly entryId: string;
7
7
  readonly fromStage: Stage;
8
8
  readonly toStage: Stage;
9
+ /** True when an `index.md` snapshot was preserved at
10
+ * `<dir>/scrapbook/<priorStage>.md`. False when there was no
11
+ * `index.md` to snapshot (common at Ideas) or the entry has no
12
+ * `artifactPath` (legacy entries pre-doctor migration). */
13
+ readonly snapshotted: boolean;
14
+ /** Number of `comment` annotations archived as part of the transition
15
+ * (issue #200 — comments don't auto-rebase across document evolution;
16
+ * archive-on-approve sidesteps the anchor-stability problem). */
17
+ readonly archivedComments: number;
9
18
  }
10
19
  /**
11
20
  * Graduate an entry to the next linear-pipeline stage.
@@ -15,10 +24,18 @@ interface ApproveResult {
15
24
  * - Published (terminal)
16
25
  * - Blocked / Cancelled (off-pipeline; induct first)
17
26
  *
18
- * On success:
19
- * - sidecar.currentStage advances to nextStage(currentStage)
20
- * - sidecar.reviewState is cleared (stage-transition resets review)
21
- * - a stage-transition journal event is appended
27
+ * On success, in this order (so a kill-power between any two steps
28
+ * leaves a recoverable state):
29
+ * - Atomic snapshot of `<dir>/index.md` `<dir>/scrapbook/<priorStage>.md`
30
+ * (issue #222 Option B + hybrid refinement). Skipped when
31
+ * `index.md` doesn't exist on disk.
32
+ * - Archive every active `comment` annotation as the entry's prior
33
+ * stage's content goes into the freezer (issue #200 — anchor
34
+ * stability under document evolution; comments authored against
35
+ * the just-archived content cannot reliably rebase).
36
+ * - Append a `stage-transition` journal event.
37
+ * - Mutate the sidecar (currentStage advances; reviewState clears).
38
+ * - Regenerate `calendar.md` (issue #148).
22
39
  */
23
40
  export declare function approveEntryStage(projectRoot: string, opts: ApproveOptions): Promise<ApproveResult>;
24
41
  export {};
@@ -1 +1 @@
1
- {"version":3,"file":"approve.d.ts","sourceRoot":"","sources":["../../src/entry/approve.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAS,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAEvD,UAAU,cAAc;IACtB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;CACvB;AAED,UAAU,aAAa;IACrB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,SAAS,EAAE,KAAK,CAAC;IAC1B,QAAQ,CAAC,OAAO,EAAE,KAAK,CAAC;CACzB;AAED;;;;;;;;;;;;GAYG;AACH,wBAAsB,iBAAiB,CACrC,WAAW,EAAE,MAAM,EACnB,IAAI,EAAE,cAAc,GACnB,OAAO,CAAC,aAAa,CAAC,CA0CxB"}
1
+ {"version":3,"file":"approve.d.ts","sourceRoot":"","sources":["../../src/entry/approve.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAS,KAAK,EAAE,MAAM,oBAAoB,CAAC;AASvD,UAAU,cAAc;IACtB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;CACvB;AAED,UAAU,aAAa;IACrB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,SAAS,EAAE,KAAK,CAAC;IAC1B,QAAQ,CAAC,OAAO,EAAE,KAAK,CAAC;IACxB;;;gEAG4D;IAC5D,QAAQ,CAAC,WAAW,EAAE,OAAO,CAAC;IAC9B;;sEAEkE;IAClE,QAAQ,CAAC,gBAAgB,EAAE,MAAM,CAAC;CACnC;AAED;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,wBAAsB,iBAAiB,CACrC,WAAW,EAAE,MAAM,EACnB,IAAI,EAAE,cAAc,GACnB,OAAO,CAAC,aAAa,CAAC,CAqExB"}
@@ -3,6 +3,8 @@ import { writeSidecar } from "../sidecar/write.js";
3
3
  import { appendJournalEvent } from "../journal/append.js";
4
4
  import { regenerateCalendar } from "../calendar/regenerate.js";
5
5
  import { nextStage } from "../schema/entry.js";
6
+ import { snapshotIndexForStage } from "./snapshot.js";
7
+ import { addEntryAnnotation, listEntryAnnotationsRaw, mintEntryAnnotation, } from "./annotations.js";
6
8
  /**
7
9
  * Graduate an entry to the next linear-pipeline stage.
8
10
  *
@@ -11,10 +13,18 @@ import { nextStage } from "../schema/entry.js";
11
13
  * - Published (terminal)
12
14
  * - Blocked / Cancelled (off-pipeline; induct first)
13
15
  *
14
- * On success:
15
- * - sidecar.currentStage advances to nextStage(currentStage)
16
- * - sidecar.reviewState is cleared (stage-transition resets review)
17
- * - a stage-transition journal event is appended
16
+ * On success, in this order (so a kill-power between any two steps
17
+ * leaves a recoverable state):
18
+ * - Atomic snapshot of `<dir>/index.md` `<dir>/scrapbook/<priorStage>.md`
19
+ * (issue #222 Option B + hybrid refinement). Skipped when
20
+ * `index.md` doesn't exist on disk.
21
+ * - Archive every active `comment` annotation as the entry's prior
22
+ * stage's content goes into the freezer (issue #200 — anchor
23
+ * stability under document evolution; comments authored against
24
+ * the just-archived content cannot reliably rebase).
25
+ * - Append a `stage-transition` journal event.
26
+ * - Mutate the sidecar (currentStage advances; reviewState clears).
27
+ * - Regenerate `calendar.md` (issue #148).
18
28
  */
19
29
  export async function approveEntryStage(projectRoot, opts) {
20
30
  const sidecar = await readSidecar(projectRoot, opts.uuid);
@@ -33,8 +43,27 @@ export async function approveEntryStage(projectRoot, opts) {
33
43
  throw new Error(`Cannot approve from stage ${from} (no successor).`);
34
44
  }
35
45
  const at = new Date().toISOString();
36
- // Strip reviewState on stage transition. exactOptionalPropertyTypes
37
- // requires us to omit the key entirely rather than set undefined.
46
+ // 1. Atomic snapshot of index.md → scrapbook/<priorStage>.md (#222).
47
+ // Throws on conflicting prior snapshot operator resolves and
48
+ // re-runs.
49
+ const snapshot = await snapshotIndexForStage(projectRoot, sidecar, from);
50
+ // 2. Archive every still-active comment annotation (#200). The
51
+ // `archive-comment` annotation is fold-only — it doesn't physically
52
+ // remove the original comment from the journal. The audit trail is
53
+ // preserved via `listEntryAnnotationsRaw`.
54
+ const raw = await listEntryAnnotationsRaw(projectRoot, sidecar.uuid);
55
+ const archived = collectActiveCommentIds(raw);
56
+ for (const commentId of archived) {
57
+ const annotation = mintEntryAnnotation({
58
+ type: 'archive-comment',
59
+ workflowId: sidecar.uuid,
60
+ commentId,
61
+ priorStage: from,
62
+ });
63
+ await addEntryAnnotation(projectRoot, sidecar.uuid, annotation);
64
+ }
65
+ // 3. Strip reviewState on stage transition. exactOptionalPropertyTypes
66
+ // requires us to omit the key entirely rather than set undefined.
38
67
  const { reviewState: _drop, ...rest } = sidecar;
39
68
  void _drop;
40
69
  const updated = {
@@ -54,6 +83,44 @@ export async function approveEntryStage(projectRoot, opts) {
54
83
  // this, the canonical visible representation of the pipeline lags
55
84
  // the SSOT until `doctor --fix=all` is run.
56
85
  await regenerateCalendar(projectRoot);
57
- return { entryId: sidecar.uuid, fromStage: from, toStage: to };
86
+ return {
87
+ entryId: sidecar.uuid,
88
+ fromStage: from,
89
+ toStage: to,
90
+ snapshotted: snapshot.snapshotted,
91
+ archivedComments: archived.length,
92
+ };
93
+ }
94
+ /**
95
+ * Walk the raw annotation stream and return the ids of every comment
96
+ * that is still active at the moment of approve — a comment is "active"
97
+ * if it has not already been deleted, archived, or implicitly resolved
98
+ * earlier in the journal.
99
+ *
100
+ * The fold is one-pass: we record delete/archive/resolve sets first,
101
+ * then the second loop emits comment ids that are not in any kill set.
102
+ * (resolve != deleted/archived — a resolved comment is still a comment;
103
+ * we only avoid double-archiving a comment that was already archived.)
104
+ */
105
+ function collectActiveCommentIds(raw) {
106
+ const deleted = new Set();
107
+ const archived = new Set();
108
+ for (const a of raw) {
109
+ if (a.type === 'delete-comment')
110
+ deleted.add(a.commentId);
111
+ else if (a.type === 'archive-comment')
112
+ archived.add(a.commentId);
113
+ }
114
+ const out = [];
115
+ for (const a of raw) {
116
+ if (a.type !== 'comment')
117
+ continue;
118
+ if (deleted.has(a.id))
119
+ continue;
120
+ if (archived.has(a.id))
121
+ continue;
122
+ out.push(a.id);
123
+ }
124
+ return out;
58
125
  }
59
126
  //# sourceMappingURL=approve.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"approve.js","sourceRoot":"","sources":["../../src/entry/approve.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAC1D,OAAO,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AAC/D,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAa/C;;;;;;;;;;;;GAYG;AACH,MAAM,CAAC,KAAK,UAAU,iBAAiB,CACrC,WAAmB,EACnB,IAAoB;IAEpB,MAAM,OAAO,GAAG,MAAM,WAAW,CAAC,WAAW,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;IAC1D,MAAM,IAAI,GAAG,OAAO,CAAC,YAAY,CAAC;IAClC,IAAI,IAAI,KAAK,OAAO,EAAE,CAAC;QACrB,MAAM,IAAI,KAAK,CAAC,kDAAkD,CAAC,CAAC;IACtE,CAAC;IACD,IAAI,IAAI,KAAK,WAAW,EAAE,CAAC;QACzB,MAAM,IAAI,KAAK,CAAC,wCAAwC,CAAC,CAAC;IAC5D,CAAC;IACD,IAAI,IAAI,KAAK,SAAS,IAAI,IAAI,KAAK,WAAW,EAAE,CAAC;QAC/C,MAAM,IAAI,KAAK,CACb,4BAA4B,IAAI,2CAA2C,CAC5E,CAAC;IACJ,CAAC;IACD,MAAM,EAAE,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC;IAC3B,IAAI,EAAE,KAAK,IAAI,EAAE,CAAC;QAChB,MAAM,IAAI,KAAK,CAAC,6BAA6B,IAAI,kBAAkB,CAAC,CAAC;IACvE,CAAC;IACD,MAAM,EAAE,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IAEpC,oEAAoE;IACpE,kEAAkE;IAClE,MAAM,EAAE,WAAW,EAAE,KAAK,EAAE,GAAG,IAAI,EAAE,GAAG,OAAO,CAAC;IAChD,KAAK,KAAK,CAAC;IACX,MAAM,OAAO,GAAU;QACrB,GAAG,IAAI;QACP,YAAY,EAAE,EAAE;QAChB,SAAS,EAAE,EAAE;KACd,CAAC;IACF,MAAM,YAAY,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC;IACzC,MAAM,kBAAkB,CAAC,WAAW,EAAE;QACpC,IAAI,EAAE,kBAAkB;QACxB,EAAE;QACF,OAAO,EAAE,OAAO,CAAC,IAAI;QACrB,IAAI;QACJ,EAAE;KACH,CAAC,CAAC;IACH,iEAAiE;IACjE,kEAAkE;IAClE,4CAA4C;IAC5C,MAAM,kBAAkB,CAAC,WAAW,CAAC,CAAC;IACtC,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC;AACjE,CAAC"}
1
+ {"version":3,"file":"approve.js","sourceRoot":"","sources":["../../src/entry/approve.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,51 @@
1
+ /**
2
+ * Snapshot the entry's current `index.md` to its scrapbook on stage
3
+ * approve (Issue #222 — Option B + hybrid refinement).
4
+ *
5
+ * Behavior contract (called from `approveEntryStage` BEFORE any sidecar
6
+ * mutation, so a kill-power between snapshot and sidecar-write leaves
7
+ * the snapshot durable on disk):
8
+ *
9
+ * 1. Resolve the entry's `<dir>/index.md` from `dirname(artifactPath)`.
10
+ * `dirname` is the keying field — `artifactPath` itself may already
11
+ * be `<dir>/index.md` (the common case post-T1) or some other
12
+ * per-stage file (legacy entries pre-doctor migration).
13
+ * 2. If `index.md` doesn't exist on disk: skip (no content to
14
+ * preserve; common at Ideas where only `idea.md` exists).
15
+ * 3. If `<dir>/scrapbook/<priorStage>.md` already exists with the
16
+ * same content as `index.md`: no-op (idempotent — re-approve
17
+ * after a `repair` should not error).
18
+ * 4. If `<dir>/scrapbook/<priorStage>.md` exists with DIFFERENT
19
+ * content: refuse with a clear error. The fix path is operator
20
+ * resolution (they likely hand-edited a prior snapshot); silent
21
+ * overwrite would erase prior approved history.
22
+ * 5. Atomic write: write content to `<target>.<pid>.tmp`, then
23
+ * `rename` to `<target>`. Mirrors `writeSidecar`'s pattern in
24
+ * `packages/core/src/sidecar/write.ts`.
25
+ *
26
+ * Stage-name-in-filename is lowercase for consistency with the existing
27
+ * `scrapbook/outline.md` / `scrapbook/idea.md` / `scrapbook/plan.md`
28
+ * convention. `Drafting` → `scrapbook/drafting.md`.
29
+ */
30
+ import type { Entry, Stage } from '../schema/entry.ts';
31
+ export interface SnapshotResult {
32
+ /** True when a snapshot file was written (or already matched on disk). */
33
+ readonly snapshotted: boolean;
34
+ /** Absolute path to the snapshot target (when `snapshotted`). */
35
+ readonly snapshotPath?: string;
36
+ /** Reason for skip when `snapshotted` is false. */
37
+ readonly skipReason?: 'no-index-md' | 'no-snapshot-dir';
38
+ }
39
+ /**
40
+ * Snapshot the entry's `index.md` into `scrapbook/<priorStage>.md`.
41
+ *
42
+ * `projectRoot` is the absolute project root. `entry.artifactPath` is
43
+ * resolved relative to it. `priorStage` is the stage being graduated
44
+ * AWAY FROM (the stage whose content the snapshot preserves).
45
+ *
46
+ * Throws when a prior snapshot exists with conflicting content. Returns
47
+ * a `{ snapshotted: false }` result for legitimate skips (no `index.md`
48
+ * on disk, or no `artifactPath` on the sidecar).
49
+ */
50
+ export declare function snapshotIndexForStage(projectRoot: string, entry: Entry, priorStage: Stage): Promise<SnapshotResult>;
51
+ //# sourceMappingURL=snapshot.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"snapshot.d.ts","sourceRoot":"","sources":["../../src/entry/snapshot.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AAUH,OAAO,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAEvD,MAAM,WAAW,cAAc;IAC7B,0EAA0E;IAC1E,QAAQ,CAAC,WAAW,EAAE,OAAO,CAAC;IAC9B,iEAAiE;IACjE,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,CAAC;IAC/B,mDAAmD;IACnD,QAAQ,CAAC,UAAU,CAAC,EAAE,aAAa,GAAG,iBAAiB,CAAC;CACzD;AAqBD;;;;;;;;;;GAUG;AACH,wBAAsB,qBAAqB,CACzC,WAAW,EAAE,MAAM,EACnB,KAAK,EAAE,KAAK,EACZ,UAAU,EAAE,KAAK,GAChB,OAAO,CAAC,cAAc,CAAC,CA+CzB"}
@@ -0,0 +1,95 @@
1
+ /**
2
+ * Snapshot the entry's current `index.md` to its scrapbook on stage
3
+ * approve (Issue #222 — Option B + hybrid refinement).
4
+ *
5
+ * Behavior contract (called from `approveEntryStage` BEFORE any sidecar
6
+ * mutation, so a kill-power between snapshot and sidecar-write leaves
7
+ * the snapshot durable on disk):
8
+ *
9
+ * 1. Resolve the entry's `<dir>/index.md` from `dirname(artifactPath)`.
10
+ * `dirname` is the keying field — `artifactPath` itself may already
11
+ * be `<dir>/index.md` (the common case post-T1) or some other
12
+ * per-stage file (legacy entries pre-doctor migration).
13
+ * 2. If `index.md` doesn't exist on disk: skip (no content to
14
+ * preserve; common at Ideas where only `idea.md` exists).
15
+ * 3. If `<dir>/scrapbook/<priorStage>.md` already exists with the
16
+ * same content as `index.md`: no-op (idempotent — re-approve
17
+ * after a `repair` should not error).
18
+ * 4. If `<dir>/scrapbook/<priorStage>.md` exists with DIFFERENT
19
+ * content: refuse with a clear error. The fix path is operator
20
+ * resolution (they likely hand-edited a prior snapshot); silent
21
+ * overwrite would erase prior approved history.
22
+ * 5. Atomic write: write content to `<target>.<pid>.tmp`, then
23
+ * `rename` to `<target>`. Mirrors `writeSidecar`'s pattern in
24
+ * `packages/core/src/sidecar/write.ts`.
25
+ *
26
+ * Stage-name-in-filename is lowercase for consistency with the existing
27
+ * `scrapbook/outline.md` / `scrapbook/idea.md` / `scrapbook/plan.md`
28
+ * convention. `Drafting` → `scrapbook/drafting.md`.
29
+ */
30
+ import { mkdir, readFile, rename, stat, writeFile, } from 'node:fs/promises';
31
+ import { basename, dirname, join } from 'node:path';
32
+ function fileExists(absPath) {
33
+ return stat(absPath).then((s) => s.isFile(), () => false);
34
+ }
35
+ /**
36
+ * Atomic write via tmp-file + rename (same defense as `writeSidecar`).
37
+ * The tmp filename embeds the PID so concurrent processes don't clobber
38
+ * each other's tmp state mid-rename.
39
+ */
40
+ async function atomicWrite(absPath, content) {
41
+ await mkdir(dirname(absPath), { recursive: true });
42
+ const tmpPath = `${absPath}.${process.pid}.tmp`;
43
+ await writeFile(tmpPath, content);
44
+ await rename(tmpPath, absPath);
45
+ }
46
+ /**
47
+ * Snapshot the entry's `index.md` into `scrapbook/<priorStage>.md`.
48
+ *
49
+ * `projectRoot` is the absolute project root. `entry.artifactPath` is
50
+ * resolved relative to it. `priorStage` is the stage being graduated
51
+ * AWAY FROM (the stage whose content the snapshot preserves).
52
+ *
53
+ * Throws when a prior snapshot exists with conflicting content. Returns
54
+ * a `{ snapshotted: false }` result for legitimate skips (no `index.md`
55
+ * on disk, or no `artifactPath` on the sidecar).
56
+ */
57
+ export async function snapshotIndexForStage(projectRoot, entry, priorStage) {
58
+ if (!entry.artifactPath) {
59
+ // Legacy entries without an artifactPath: no anchor for the
60
+ // snapshot dir. The doctor migration rule
61
+ // (`legacy-stage-artifact-path`) sets `artifactPath` to
62
+ // `<dir>/index.md`; once it runs, this branch becomes unreachable.
63
+ return { snapshotted: false, skipReason: 'no-snapshot-dir' };
64
+ }
65
+ const absArtifact = join(projectRoot, entry.artifactPath);
66
+ // Resolve the entry's "document directory":
67
+ // - When artifactPath ends `<dir>/<file>.md`, the doc dir is <dir>.
68
+ // - When artifactPath ends `<dir>/scrapbook/<file>.md` (legacy
69
+ // per-stage shape), the doc dir is <dir> — i.e. the scrapbook's
70
+ // parent. We strip one extra level so snapshots land in
71
+ // `<dir>/scrapbook/`, not `<dir>/scrapbook/scrapbook/`.
72
+ const dir = basename(dirname(absArtifact)) === 'scrapbook'
73
+ ? dirname(dirname(absArtifact))
74
+ : dirname(absArtifact);
75
+ const indexPath = join(dir, 'index.md');
76
+ if (!(await fileExists(indexPath))) {
77
+ return { snapshotted: false, skipReason: 'no-index-md' };
78
+ }
79
+ const content = await readFile(indexPath, 'utf8');
80
+ const targetPath = join(dir, 'scrapbook', `${priorStage.toLowerCase()}.md`);
81
+ if (await fileExists(targetPath)) {
82
+ const existing = await readFile(targetPath, 'utf8');
83
+ if (existing === content) {
84
+ // Idempotent re-approve — same content already on disk.
85
+ return { snapshotted: true, snapshotPath: targetPath };
86
+ }
87
+ throw new Error(`snapshotIndexForStage refused: ${targetPath} already exists with ` +
88
+ `different content; refusing to overwrite a prior approved ` +
89
+ `snapshot. Resolve the conflict (delete or rename the existing ` +
90
+ `snapshot file) before re-running approve.`);
91
+ }
92
+ await atomicWrite(targetPath, content);
93
+ return { snapshotted: true, snapshotPath: targetPath };
94
+ }
95
+ //# sourceMappingURL=snapshot.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"snapshot.js","sourceRoot":"","sources":["../../src/entry/snapshot.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AAEH,OAAO,EACL,KAAK,EACL,QAAQ,EACR,MAAM,EACN,IAAI,EACJ,SAAS,GACV,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAYpD,SAAS,UAAU,CAAC,OAAe;IACjC,OAAO,IAAI,CAAC,OAAO,CAAC,CAAC,IAAI,CACvB,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,EAAE,EACjB,GAAG,EAAE,CAAC,KAAK,CACZ,CAAC;AACJ,CAAC;AAED;;;;GAIG;AACH,KAAK,UAAU,WAAW,CAAC,OAAe,EAAE,OAAe;IACzD,MAAM,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IACnD,MAAM,OAAO,GAAG,GAAG,OAAO,IAAI,OAAO,CAAC,GAAG,MAAM,CAAC;IAChD,MAAM,SAAS,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;IAClC,MAAM,MAAM,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;AACjC,CAAC;AAED;;;;;;;;;;GAUG;AACH,MAAM,CAAC,KAAK,UAAU,qBAAqB,CACzC,WAAmB,EACnB,KAAY,EACZ,UAAiB;IAEjB,IAAI,CAAC,KAAK,CAAC,YAAY,EAAE,CAAC;QACxB,4DAA4D;QAC5D,0CAA0C;QAC1C,wDAAwD;QACxD,mEAAmE;QACnE,OAAO,EAAE,WAAW,EAAE,KAAK,EAAE,UAAU,EAAE,iBAAiB,EAAE,CAAC;IAC/D,CAAC;IACD,MAAM,WAAW,GAAG,IAAI,CAAC,WAAW,EAAE,KAAK,CAAC,YAAY,CAAC,CAAC;IAC1D,4CAA4C;IAC5C,qEAAqE;IACrE,gEAAgE;IAChE,mEAAmE;IACnE,2DAA2D;IAC3D,2DAA2D;IAC3D,MAAM,GAAG,GACP,QAAQ,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC,KAAK,WAAW;QAC5C,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;QAC/B,CAAC,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;IAC3B,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,UAAU,CAAC,CAAC;IAExC,IAAI,CAAC,CAAC,MAAM,UAAU,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC;QACnC,OAAO,EAAE,WAAW,EAAE,KAAK,EAAE,UAAU,EAAE,aAAa,EAAE,CAAC;IAC3D,CAAC;IACD,MAAM,OAAO,GAAG,MAAM,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;IAClD,MAAM,UAAU,GAAG,IAAI,CACrB,GAAG,EACH,WAAW,EACX,GAAG,UAAU,CAAC,WAAW,EAAE,KAAK,CACjC,CAAC;IAEF,IAAI,MAAM,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;QACjC,MAAM,QAAQ,GAAG,MAAM,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;QACpD,IAAI,QAAQ,KAAK,OAAO,EAAE,CAAC;YACzB,wDAAwD;YACxD,OAAO,EAAE,WAAW,EAAE,IAAI,EAAE,YAAY,EAAE,UAAU,EAAE,CAAC;QACzD,CAAC;QACD,MAAM,IAAI,KAAK,CACb,kCAAkC,UAAU,uBAAuB;YACjE,4DAA4D;YAC5D,gEAAgE;YAChE,2CAA2C,CAC9C,CAAC;IACJ,CAAC;IAED,MAAM,WAAW,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;IACvC,OAAO,EAAE,WAAW,EAAE,IAAI,EAAE,YAAY,EAAE,UAAU,EAAE,CAAC;AACzD,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"iterate.d.ts","sourceRoot":"","sources":["../../src/iterate/iterate.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAS,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAEvD,UAAU,cAAc;IACtB,IAAI,EAAE,MAAM,CAAC;CAEd;AAED,UAAU,aAAa;IACrB,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,KAAK,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,WAAW,CAAC;CAC1B;AAaD,wBAAsB,YAAY,CAAC,WAAW,EAAE,MAAM,EAAE,IAAI,EAAE,cAAc,GAAG,OAAO,CAAC,aAAa,CAAC,CA8EpG"}
1
+ {"version":3,"file":"iterate.d.ts","sourceRoot":"","sources":["../../src/iterate/iterate.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAS,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAEvD,UAAU,cAAc;IACtB,IAAI,EAAE,MAAM,CAAC;CAEd;AAED,UAAU,aAAa;IACrB,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,KAAK,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,WAAW,CAAC;CAC1B;AAkCD,wBAAsB,YAAY,CAAC,WAAW,EAAE,MAAM,EAAE,IAAI,EAAE,cAAc,GAAG,OAAO,CAAC,aAAa,CAAC,CAqEpG"}
@@ -1,19 +1,41 @@
1
1
  import { readFile } from 'node:fs/promises';
2
- import { join } from 'node:path';
2
+ import { existsSync } from 'node:fs';
3
+ import { basename, dirname, join } from 'node:path';
3
4
  import { readSidecar } from "../sidecar/read.js";
4
5
  import { writeSidecar } from "../sidecar/write.js";
5
6
  import { appendJournalEvent } from "../journal/append.js";
6
7
  import { getContentDir } from "../config.js";
7
- const STAGE_ARTIFACT_PATH = {
8
- Ideas: (slug, contentDir) => join(contentDir, slug, 'scrapbook', 'idea.md'),
9
- Planned: (slug, contentDir) => join(contentDir, slug, 'scrapbook', 'plan.md'),
10
- Outlining: (slug, contentDir) => join(contentDir, slug, 'scrapbook', 'outline.md'),
11
- Drafting: (slug, contentDir) => join(contentDir, slug, 'index.md'),
12
- Final: (slug, contentDir) => join(contentDir, slug, 'index.md'),
13
- Published: null,
14
- Blocked: null,
15
- Cancelled: null,
16
- };
8
+ /**
9
+ * Resolve the entry's "document under review" path. Per Issue #222 /
10
+ * Option B + hybrid refinement, longform + outline iterate target a
11
+ * single canonical file regardless of stage.
12
+ *
13
+ * Resolution order (T1 + non-index.md fallback):
14
+ * 1. If the sidecar carries `artifactPath`:
15
+ * a. Prefer `<dirname(artifactPath)>/index.md` IF that file exists
16
+ * (T1's index.md-canonical case).
17
+ * b. Otherwise fall back to `artifactPath` itself. Supports
18
+ * shared-directory layouts (multiple entries per directory,
19
+ * each addressed by its own filename).
20
+ * 2. No artifactPath: try `<contentDir>/<slug>/index.md` (legacy
21
+ * shape, pre-#140 entries the doctor migration hasn't processed).
22
+ */
23
+ function resolveIndexPath(projectRoot, sidecar) {
24
+ if (sidecar.artifactPath) {
25
+ const absArtifact = join(projectRoot, sidecar.artifactPath);
26
+ // Strip the scrapbook segment for legacy `<dir>/scrapbook/<file>.md`
27
+ // shapes; otherwise dirname(absArtifact) IS the doc dir.
28
+ const dir = basename(dirname(absArtifact)) === 'scrapbook'
29
+ ? dirname(dirname(absArtifact))
30
+ : dirname(absArtifact);
31
+ const indexPath = join(dir, 'index.md');
32
+ if (existsSync(indexPath))
33
+ return indexPath;
34
+ return absArtifact;
35
+ }
36
+ const contentDir = getContentDir(projectRoot);
37
+ return join(contentDir, sidecar.slug, 'index.md');
38
+ }
17
39
  export async function iterateEntry(projectRoot, opts) {
18
40
  const sidecar = await readSidecar(projectRoot, opts.uuid);
19
41
  if (sidecar.currentStage === 'Published') {
@@ -22,20 +44,10 @@ export async function iterateEntry(projectRoot, opts) {
22
44
  if (sidecar.currentStage === 'Blocked' || sidecar.currentStage === 'Cancelled') {
23
45
  throw new Error(`Cannot iterate: entry is ${sidecar.currentStage}; induct it back into the pipeline first.`);
24
46
  }
25
- // #140: prefer the explicit artifactPath on the sidecar when present.
26
- // Fall back to the slug+stage heuristic for entries without one.
27
- let artifactPath;
28
- if (sidecar.artifactPath) {
29
- artifactPath = join(projectRoot, sidecar.artifactPath);
30
- }
31
- else {
32
- const pathFn = STAGE_ARTIFACT_PATH[sidecar.currentStage];
33
- if (!pathFn) {
34
- throw new Error(`Cannot iterate at stage ${sidecar.currentStage}: no artifact path defined.`);
35
- }
36
- const contentDir = getContentDir(projectRoot);
37
- artifactPath = pathFn(sidecar.slug, contentDir);
38
- }
47
+ // Issue #222 single document evolves; always read/write index.md.
48
+ // Per-stage files (idea.md / plan.md / outline.md) are scrapbook
49
+ // snapshots produced by approve, not iterate's read target.
50
+ const artifactPath = resolveIndexPath(projectRoot, sidecar);
39
51
  const markdown = await readFile(artifactPath, 'utf8');
40
52
  // Iteration is the operator's explicit "pin a new version" decision;
41
53
  // the core helper records what was asked, not what the helper thinks
@@ -1 +1 @@
1
- {"version":3,"file":"iterate.js","sourceRoot":"","sources":["../../src/iterate/iterate.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"iterate.js","sourceRoot":"","sources":["../../src/iterate/iterate.ts"],"names":[],"mappings":"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"}
@@ -133,7 +133,26 @@ export interface DeleteCommentAnnotation extends AnnotationBase {
133
133
  /** The original `comment` annotation's id. */
134
134
  commentId: string;
135
135
  }
136
- export type DraftAnnotation = CommentAnnotation | EditAnnotation | ApproveAnnotation | RejectAnnotation | ResolveAnnotation | AddressAnnotation | EditCommentAnnotation | DeleteCommentAnnotation;
136
+ /**
137
+ * Archive a `comment` annotation as part of a stage transition (#200,
138
+ * Issue #222 hybrid refinement). Append-only: the original is left in
139
+ * place on disk; the folded view drops it from the active list. Distinct
140
+ * from `delete-comment` — archive captures "this comment was made
141
+ * against a prior stage's content; the document has since evolved, so
142
+ * range/anchor stability cannot be guaranteed against the new content."
143
+ *
144
+ * The optional `priorStage` field records which stage the comment was
145
+ * archived OUT OF — useful for audit views that group archived comments
146
+ * by stage of origin.
147
+ */
148
+ export interface ArchiveCommentAnnotation extends AnnotationBase {
149
+ type: 'archive-comment';
150
+ /** The original `comment` annotation's id. */
151
+ commentId: string;
152
+ /** The stage the document was at when the comment was archived. */
153
+ priorStage?: string;
154
+ }
155
+ export type DraftAnnotation = CommentAnnotation | EditAnnotation | ApproveAnnotation | RejectAnnotation | ResolveAnnotation | AddressAnnotation | EditCommentAnnotation | DeleteCommentAnnotation | ArchiveCommentAnnotation;
137
156
  export interface DraftVersion {
138
157
  /** 1-based version number; v1 is the initial draft. */
139
158
  version: number;
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/review/types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/review/types.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/review/types.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AA4NH,yDAAyD;AACzD,MAAM,CAAC,MAAM,iBAAiB,GAE1B;IACF,IAAI,EAAE,CAAC,WAAW,EAAE,WAAW,CAAC;IAChC,WAAW,EAAE,CAAC,WAAW,EAAE,UAAU,EAAE,WAAW,CAAC;IACnD,SAAS,EAAE,CAAC,WAAW,EAAE,WAAW,CAAC;IACrC,QAAQ,EAAE,CAAC,SAAS,EAAE,WAAW,CAAC;IAClC,OAAO,EAAE,EAAE;IACX,SAAS,EAAE,EAAE;CACd,CAAC;AAEF,MAAM,UAAU,iBAAiB,CAC/B,IAAwB,EACxB,EAAsB;IAEtB,OAAO,iBAAiB,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;AAC9C,CAAC"}
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/review/types.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAiPH,yDAAyD;AACzD,MAAM,CAAC,MAAM,iBAAiB,GAE1B;IACF,IAAI,EAAE,CAAC,WAAW,EAAE,WAAW,CAAC;IAChC,WAAW,EAAE,CAAC,WAAW,EAAE,UAAU,EAAE,WAAW,CAAC;IACnD,SAAS,EAAE,CAAC,WAAW,EAAE,WAAW,CAAC;IACrC,QAAQ,EAAE,CAAC,SAAS,EAAE,WAAW,CAAC;IAClC,OAAO,EAAE,EAAE;IACX,SAAS,EAAE,EAAE;CACd,CAAC;AAEF,MAAM,UAAU,iBAAiB,CAC/B,IAAwB,EACxB,EAAsB;IAEtB,OAAO,iBAAiB,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;AAC9C,CAAC"}