@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.
- package/dist/doctor/rules/legacy-stage-artifact-path.d.ts +28 -0
- package/dist/doctor/rules/legacy-stage-artifact-path.d.ts.map +1 -0
- package/dist/doctor/rules/legacy-stage-artifact-path.js +232 -0
- package/dist/doctor/rules/legacy-stage-artifact-path.js.map +1 -0
- package/dist/doctor/rules/legacy-stage-artifact-path.ts +285 -0
- package/dist/doctor/runner.d.ts.map +1 -1
- package/dist/doctor/runner.js +2 -0
- package/dist/doctor/runner.js.map +1 -1
- package/dist/entry/annotations.d.ts.map +1 -1
- package/dist/entry/annotations.js +27 -2
- package/dist/entry/annotations.js.map +1 -1
- package/dist/entry/approve.d.ts +21 -4
- package/dist/entry/approve.d.ts.map +1 -1
- package/dist/entry/approve.js +74 -7
- package/dist/entry/approve.js.map +1 -1
- package/dist/entry/snapshot.d.ts +51 -0
- package/dist/entry/snapshot.d.ts.map +1 -0
- package/dist/entry/snapshot.js +95 -0
- package/dist/entry/snapshot.js.map +1 -0
- package/dist/iterate/iterate.d.ts.map +1 -1
- package/dist/iterate/iterate.js +37 -25
- package/dist/iterate/iterate.js.map +1 -1
- package/dist/review/types.d.ts +20 -1
- package/dist/review/types.d.ts.map +1 -1
- package/dist/review/types.js.map +1 -1
- package/dist/schema/draft-annotation.d.ts +23 -2
- package/dist/schema/draft-annotation.d.ts.map +1 -1
- package/dist/schema/draft-annotation.js +7 -0
- package/dist/schema/draft-annotation.js.map +1 -1
- package/dist/schema/journal-events.d.ts +53 -18
- package/dist/schema/journal-events.d.ts.map +1 -1
- package/package.json +1 -1
|
@@ -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' ||
|
|
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' ||
|
|
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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"}
|
package/dist/entry/approve.d.ts
CHANGED
|
@@ -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
|
-
*
|
|
20
|
-
* -
|
|
21
|
-
*
|
|
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;
|
|
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"}
|
package/dist/entry/approve.js
CHANGED
|
@@ -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
|
-
*
|
|
16
|
-
* -
|
|
17
|
-
*
|
|
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
|
-
//
|
|
37
|
-
//
|
|
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 {
|
|
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;
|
|
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":"
|
|
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"}
|
package/dist/iterate/iterate.js
CHANGED
|
@@ -1,19 +1,41 @@
|
|
|
1
1
|
import { readFile } from 'node:fs/promises';
|
|
2
|
-
import {
|
|
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
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
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
|
-
// #
|
|
26
|
-
//
|
|
27
|
-
|
|
28
|
-
|
|
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":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC5C,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"iterate.js","sourceRoot":"","sources":["../../src/iterate/iterate.ts"],"names":[],"mappings":"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"}
|
package/dist/review/types.d.ts
CHANGED
|
@@ -133,7 +133,26 @@ export interface DeleteCommentAnnotation extends AnnotationBase {
|
|
|
133
133
|
/** The original `comment` annotation's id. */
|
|
134
134
|
commentId: string;
|
|
135
135
|
}
|
|
136
|
-
|
|
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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"}
|
package/dist/review/types.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/review/types.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;
|
|
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"}
|