@deskwork/core 0.11.1 → 0.12.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/calendar/regenerate.d.ts +14 -0
- package/dist/calendar/regenerate.d.ts.map +1 -0
- package/dist/calendar/regenerate.js +50 -0
- package/dist/calendar/regenerate.js.map +1 -0
- package/dist/config.d.ts +7 -0
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +16 -0
- package/dist/config.js.map +1 -1
- package/dist/doctor/migrate.d.ts.map +1 -1
- package/dist/doctor/migrate.js +128 -9
- package/dist/doctor/migrate.js.map +1 -1
- package/dist/doctor/rules/missing-frontmatter-id.d.ts.map +1 -1
- package/dist/doctor/rules/missing-frontmatter-id.js +13 -4
- package/dist/doctor/rules/missing-frontmatter-id.js.map +1 -1
- package/dist/doctor/rules/missing-frontmatter-id.ts +12 -4
- package/dist/doctor/validate.d.ts.map +1 -1
- package/dist/doctor/validate.js +47 -3
- package/dist/doctor/validate.js.map +1 -1
- package/dist/entry/approve.d.ts +25 -0
- package/dist/entry/approve.d.ts.map +1 -0
- package/dist/entry/approve.js +59 -0
- package/dist/entry/approve.js.map +1 -0
- package/dist/entry/block.d.ts +20 -0
- package/dist/entry/block.d.ts.map +1 -0
- package/dist/entry/block.js +40 -0
- package/dist/entry/block.js.map +1 -0
- package/dist/entry/cancel.d.ts +20 -0
- package/dist/entry/cancel.d.ts.map +1 -0
- package/dist/entry/cancel.js +41 -0
- package/dist/entry/cancel.js.map +1 -0
- package/dist/entry/induct.d.ts +29 -0
- package/dist/entry/induct.d.ts.map +1 -0
- package/dist/entry/induct.js +52 -0
- package/dist/entry/induct.js.map +1 -0
- package/dist/entry/publish.d.ts +38 -0
- package/dist/entry/publish.d.ts.map +1 -0
- package/dist/entry/publish.js +72 -0
- package/dist/entry/publish.js.map +1 -0
- package/dist/iterate/iterate.d.ts.map +1 -1
- package/dist/iterate/iterate.js +26 -5
- package/dist/iterate/iterate.js.map +1 -1
- package/dist/schema/entry.d.ts +15 -12
- package/dist/schema/entry.d.ts.map +1 -1
- package/dist/schema/entry.js +6 -0
- package/dist/schema/entry.js.map +1 -1
- package/dist/schema/journal-events.d.ts +65 -60
- package/dist/schema/journal-events.d.ts.map +1 -1
- package/package.json +26 -1
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Read all sidecars under `.deskwork/entries/` and write
|
|
3
|
+
* `.deskwork/calendar.md` reflecting their current state. Idempotent;
|
|
4
|
+
* if no sidecars exist, calendar.md is rewritten with empty stage
|
|
5
|
+
* sections.
|
|
6
|
+
*
|
|
7
|
+
* Used by:
|
|
8
|
+
* - the doctor's repair pass (canonical SSOT reconciliation),
|
|
9
|
+
* - every entry stage-transition helper (#148: keep calendar.md
|
|
10
|
+
* in sync after each approve/block/cancel/induct so adopters
|
|
11
|
+
* don't have to run `doctor --fix=all` to see their state).
|
|
12
|
+
*/
|
|
13
|
+
export declare function regenerateCalendar(projectRoot: string): Promise<void>;
|
|
14
|
+
//# sourceMappingURL=regenerate.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"regenerate.d.ts","sourceRoot":"","sources":["../../src/calendar/regenerate.ts"],"names":[],"mappings":"AAMA;;;;;;;;;;;GAWG;AACH,wBAAsB,kBAAkB,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CA6B3E"}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
import { readdir, readFile, writeFile, mkdir } from 'node:fs/promises';
|
|
2
|
+
import { join, dirname } from 'node:path';
|
|
3
|
+
import { sidecarsDir } from "../sidecar/paths.js";
|
|
4
|
+
import { EntrySchema } from "../schema/entry.js";
|
|
5
|
+
import { renderCalendar } from "./render.js";
|
|
6
|
+
/**
|
|
7
|
+
* Read all sidecars under `.deskwork/entries/` and write
|
|
8
|
+
* `.deskwork/calendar.md` reflecting their current state. Idempotent;
|
|
9
|
+
* if no sidecars exist, calendar.md is rewritten with empty stage
|
|
10
|
+
* sections.
|
|
11
|
+
*
|
|
12
|
+
* Used by:
|
|
13
|
+
* - the doctor's repair pass (canonical SSOT reconciliation),
|
|
14
|
+
* - every entry stage-transition helper (#148: keep calendar.md
|
|
15
|
+
* in sync after each approve/block/cancel/induct so adopters
|
|
16
|
+
* don't have to run `doctor --fix=all` to see their state).
|
|
17
|
+
*/
|
|
18
|
+
export async function regenerateCalendar(projectRoot) {
|
|
19
|
+
const dir = sidecarsDir(projectRoot);
|
|
20
|
+
let names = [];
|
|
21
|
+
try {
|
|
22
|
+
names = await readdir(dir);
|
|
23
|
+
}
|
|
24
|
+
catch {
|
|
25
|
+
// No entries dir: write an empty calendar.
|
|
26
|
+
}
|
|
27
|
+
const entries = [];
|
|
28
|
+
for (const name of names.filter((n) => n.endsWith('.json'))) {
|
|
29
|
+
let raw;
|
|
30
|
+
try {
|
|
31
|
+
raw = await readFile(join(dir, name), 'utf8');
|
|
32
|
+
}
|
|
33
|
+
catch {
|
|
34
|
+
continue;
|
|
35
|
+
}
|
|
36
|
+
try {
|
|
37
|
+
const parsed = EntrySchema.safeParse(JSON.parse(raw));
|
|
38
|
+
if (parsed.success)
|
|
39
|
+
entries.push(parsed.data);
|
|
40
|
+
}
|
|
41
|
+
catch {
|
|
42
|
+
// skip malformed
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
const md = renderCalendar(entries);
|
|
46
|
+
const calendarPath = join(projectRoot, '.deskwork', 'calendar.md');
|
|
47
|
+
await mkdir(dirname(calendarPath), { recursive: true });
|
|
48
|
+
await writeFile(calendarPath, md);
|
|
49
|
+
}
|
|
50
|
+
//# sourceMappingURL=regenerate.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"regenerate.js","sourceRoot":"","sources":["../../src/calendar/regenerate.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;AACvE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAClD,OAAO,EAAE,WAAW,EAAc,MAAM,oBAAoB,CAAC;AAC7D,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAE7C;;;;;;;;;;;GAWG;AACH,MAAM,CAAC,KAAK,UAAU,kBAAkB,CAAC,WAAmB;IAC1D,MAAM,GAAG,GAAG,WAAW,CAAC,WAAW,CAAC,CAAC;IACrC,IAAI,KAAK,GAAa,EAAE,CAAC;IACzB,IAAI,CAAC;QACH,KAAK,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC,CAAC;IAC7B,CAAC;IAAC,MAAM,CAAC;QACP,2CAA2C;IAC7C,CAAC;IAED,MAAM,OAAO,GAAY,EAAE,CAAC;IAC5B,KAAK,MAAM,IAAI,IAAI,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC;QAC5D,IAAI,GAAW,CAAC;QAChB,IAAI,CAAC;YACH,GAAG,GAAG,MAAM,QAAQ,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,EAAE,MAAM,CAAC,CAAC;QAChD,CAAC;QAAC,MAAM,CAAC;YACP,SAAS;QACX,CAAC;QACD,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,WAAW,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC;YACtD,IAAI,MAAM,CAAC,OAAO;gBAAE,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QAChD,CAAC;QAAC,MAAM,CAAC;YACP,iBAAiB;QACnB,CAAC;IACH,CAAC;IAED,MAAM,EAAE,GAAG,cAAc,CAAC,OAAO,CAAC,CAAC;IACnC,MAAM,YAAY,GAAG,IAAI,CAAC,WAAW,EAAE,WAAW,EAAE,aAAa,CAAC,CAAC;IACnE,MAAM,KAAK,CAAC,OAAO,CAAC,YAAY,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IACxD,MAAM,SAAS,CAAC,YAAY,EAAE,EAAE,CAAC,CAAC;AACpC,CAAC"}
|
package/dist/config.d.ts
CHANGED
|
@@ -86,6 +86,13 @@ export declare function configPath(projectRoot: string): string;
|
|
|
86
86
|
* without worrying about shared references.
|
|
87
87
|
*/
|
|
88
88
|
export declare function parseConfig(value: unknown): DeskworkConfig;
|
|
89
|
+
/**
|
|
90
|
+
* Resolve a site's contentDir. Returns the absolute path to the site's
|
|
91
|
+
* content directory. Used by helpers that need to find on-disk artifacts
|
|
92
|
+
* without hardcoding `docs/` (the legacy default — see #140 carryover
|
|
93
|
+
* notes).
|
|
94
|
+
*/
|
|
95
|
+
export declare function getContentDir(projectRoot: string, site?: string): string;
|
|
89
96
|
/** Read and parse the deskwork config for a project root. */
|
|
90
97
|
export declare function readConfig(projectRoot: string): DeskworkConfig;
|
|
91
98
|
//# sourceMappingURL=config.d.ts.map
|
package/dist/config.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAKH,wEAAwE;AACxE,eAAO,MAAM,cAAc,IAAI,CAAC;AAEhC,mDAAmD;AACnD,MAAM,WAAW,UAAU;IACzB;;;;;OAKG;IACH,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,2DAA2D;IAC3D,UAAU,EAAE,MAAM,CAAC;IACnB,qEAAqE;IACrE,YAAY,EAAE,MAAM,CAAC;IACrB,8EAA8E;IAC9E,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB;;;;;OAKG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB;;;;OAIG;IACH,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B;;;;;OAKG;IACH,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B;;;OAGG;IACH,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAC7B;;;;;OAKG;IACH,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAED,iCAAiC;AACjC,MAAM,WAAW,cAAc;IAC7B,OAAO,EAAE,OAAO,cAAc,CAAC;IAC/B,qFAAqF;IACrF,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;IAClC,gEAAgE;IAChE,WAAW,EAAE,MAAM,CAAC;IACpB,8EAA8E;IAC9E,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB;;;;OAIG;IACH,gBAAgB,CAAC,EAAE,MAAM,CAAC;CAC3B;AAqBD,gFAAgF;AAChF,wBAAgB,UAAU,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,CAEtD;AAED;;;;;;GAMG;AACH,wBAAgB,WAAW,CAAC,KAAK,EAAE,OAAO,GAAG,cAAc,CAwE1D;AA+ID,6DAA6D;AAC7D,wBAAgB,UAAU,CAAC,WAAW,EAAE,MAAM,GAAG,cAAc,CAoB9D"}
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAKH,wEAAwE;AACxE,eAAO,MAAM,cAAc,IAAI,CAAC;AAEhC,mDAAmD;AACnD,MAAM,WAAW,UAAU;IACzB;;;;;OAKG;IACH,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,2DAA2D;IAC3D,UAAU,EAAE,MAAM,CAAC;IACnB,qEAAqE;IACrE,YAAY,EAAE,MAAM,CAAC;IACrB,8EAA8E;IAC9E,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB;;;;;OAKG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB;;;;OAIG;IACH,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B;;;;;OAKG;IACH,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B;;;OAGG;IACH,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAC7B;;;;;OAKG;IACH,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAED,iCAAiC;AACjC,MAAM,WAAW,cAAc;IAC7B,OAAO,EAAE,OAAO,cAAc,CAAC;IAC/B,qFAAqF;IACrF,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;IAClC,gEAAgE;IAChE,WAAW,EAAE,MAAM,CAAC;IACpB,8EAA8E;IAC9E,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB;;;;OAIG;IACH,gBAAgB,CAAC,EAAE,MAAM,CAAC;CAC3B;AAqBD,gFAAgF;AAChF,wBAAgB,UAAU,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,CAEtD;AAED;;;;;;GAMG;AACH,wBAAgB,WAAW,CAAC,KAAK,EAAE,OAAO,GAAG,cAAc,CAwE1D;AA+ID;;;;;GAKG;AACH,wBAAgB,aAAa,CAAC,WAAW,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,GAAG,MAAM,CAWxE;AAED,6DAA6D;AAC7D,wBAAgB,UAAU,CAAC,WAAW,EAAE,MAAM,GAAG,cAAc,CAoB9D"}
|
package/dist/config.js
CHANGED
|
@@ -184,6 +184,22 @@ function resolveDefaultSite(value, siteSlugs) {
|
|
|
184
184
|
}
|
|
185
185
|
return value;
|
|
186
186
|
}
|
|
187
|
+
/**
|
|
188
|
+
* Resolve a site's contentDir. Returns the absolute path to the site's
|
|
189
|
+
* content directory. Used by helpers that need to find on-disk artifacts
|
|
190
|
+
* without hardcoding `docs/` (the legacy default — see #140 carryover
|
|
191
|
+
* notes).
|
|
192
|
+
*/
|
|
193
|
+
export function getContentDir(projectRoot, site) {
|
|
194
|
+
const cfg = readConfig(projectRoot);
|
|
195
|
+
const siteName = site ?? cfg.defaultSite;
|
|
196
|
+
const siteCfg = cfg.sites[siteName];
|
|
197
|
+
if (!siteCfg) {
|
|
198
|
+
throw new Error(`Unknown site "${siteName}" in .deskwork/config.json. ` +
|
|
199
|
+
`Configured sites: ${Object.keys(cfg.sites).join(', ')}.`);
|
|
200
|
+
}
|
|
201
|
+
return join(projectRoot, siteCfg.contentDir);
|
|
202
|
+
}
|
|
187
203
|
/** Read and parse the deskwork config for a project root. */
|
|
188
204
|
export function readConfig(projectRoot) {
|
|
189
205
|
const path = configPath(projectRoot);
|
package/dist/config.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"migrate.d.ts","sourceRoot":"","sources":["../../src/doctor/migrate.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"migrate.d.ts","sourceRoot":"","sources":["../../src/doctor/migrate.ts"],"names":[],"mappings":"AA0GA,UAAU,cAAc;IACtB,MAAM,EAAE,OAAO,CAAC;CACjB;AAED,UAAU,aAAa;IACrB,eAAe,EAAE,MAAM,CAAC;IACxB,YAAY,EAAE,MAAM,EAAE,CAAC;CACxB;AAED,wBAAsB,kBAAkB,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CA2B9E;AAED,wBAAsB,eAAe,CACnC,WAAW,EAAE,MAAM,EACnB,IAAI,EAAE,cAAc,GACnB,OAAO,CAAC,aAAa,CAAC,CAgFxB"}
|
package/dist/doctor/migrate.js
CHANGED
|
@@ -1,44 +1,162 @@
|
|
|
1
|
-
import { readFile, writeFile,
|
|
1
|
+
import { readFile, writeFile, readdir } from 'node:fs/promises';
|
|
2
2
|
import { join } from 'node:path';
|
|
3
3
|
import { extractEntriesForMigration } from "../calendar/parse.js";
|
|
4
4
|
import { writeSidecar } from "../sidecar/write.js";
|
|
5
5
|
import { renderCalendar } from "../calendar/render.js";
|
|
6
6
|
import { appendJournalEvent } from "../journal/append.js";
|
|
7
7
|
import { readJournalEvents } from "../journal/read.js";
|
|
8
|
-
|
|
9
|
-
|
|
8
|
+
/**
|
|
9
|
+
* Read .deskwork/review-journal/ingest/*.json and return the sourceFile
|
|
10
|
+
* for the record whose entryId matches. Used by migration to populate
|
|
11
|
+
* Entry.artifactPath from the legacy data instead of deriving from the
|
|
12
|
+
* slug+stage heuristic (#140).
|
|
13
|
+
*/
|
|
14
|
+
async function findIngestSourceFile(projectRoot, entryId) {
|
|
15
|
+
const dir = join(projectRoot, '.deskwork', 'review-journal', 'ingest');
|
|
16
|
+
let files;
|
|
10
17
|
try {
|
|
11
|
-
|
|
12
|
-
if (/^## Paused\b/m.test(md) || /^## Review\b/m.test(md))
|
|
13
|
-
return true;
|
|
18
|
+
files = await readdir(dir);
|
|
14
19
|
}
|
|
15
20
|
catch {
|
|
16
|
-
return
|
|
21
|
+
return undefined;
|
|
22
|
+
}
|
|
23
|
+
for (const f of files) {
|
|
24
|
+
if (!f.endsWith('.json'))
|
|
25
|
+
continue;
|
|
26
|
+
let rec;
|
|
27
|
+
try {
|
|
28
|
+
rec = JSON.parse(await readFile(join(dir, f), 'utf8'));
|
|
29
|
+
}
|
|
30
|
+
catch {
|
|
31
|
+
continue;
|
|
32
|
+
}
|
|
33
|
+
if (rec.entryId === entryId && typeof rec.sourceFile === 'string') {
|
|
34
|
+
return rec.sourceFile;
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
return undefined;
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* Walk legacy pipeline-workflow records and group by entryId. Used by
|
|
41
|
+
* migration to populate Entry.iterationByStage[currentStage] +
|
|
42
|
+
* Entry.reviewState (#141). Multiple records per entryId keep the highest
|
|
43
|
+
* currentVersion.
|
|
44
|
+
*/
|
|
45
|
+
async function readLegacyPipelineRecords(projectRoot) {
|
|
46
|
+
const dir = join(projectRoot, '.deskwork', 'review-journal', 'pipeline');
|
|
47
|
+
const out = new Map();
|
|
48
|
+
let files;
|
|
49
|
+
try {
|
|
50
|
+
files = await readdir(dir);
|
|
51
|
+
}
|
|
52
|
+
catch {
|
|
53
|
+
return out;
|
|
54
|
+
}
|
|
55
|
+
for (const f of files) {
|
|
56
|
+
if (!f.endsWith('.json'))
|
|
57
|
+
continue;
|
|
58
|
+
let rec;
|
|
59
|
+
try {
|
|
60
|
+
rec = JSON.parse(await readFile(join(dir, f), 'utf8'));
|
|
61
|
+
}
|
|
62
|
+
catch {
|
|
63
|
+
continue;
|
|
64
|
+
}
|
|
65
|
+
if (typeof rec.entryId !== 'string')
|
|
66
|
+
continue;
|
|
67
|
+
if (typeof rec.currentVersion !== 'number')
|
|
68
|
+
continue;
|
|
69
|
+
if (typeof rec.state !== 'string')
|
|
70
|
+
continue;
|
|
71
|
+
const existing = out.get(rec.entryId);
|
|
72
|
+
if (!existing || rec.currentVersion > existing.currentVersion) {
|
|
73
|
+
out.set(rec.entryId, { currentVersion: rec.currentVersion, state: rec.state });
|
|
74
|
+
}
|
|
17
75
|
}
|
|
76
|
+
return out;
|
|
77
|
+
}
|
|
78
|
+
/**
|
|
79
|
+
* Translate a legacy review-workflow `state` string to the Phase 30
|
|
80
|
+
* ReviewState enum (`'in-review' | 'iterating' | 'approved'`). Legacy
|
|
81
|
+
* states without a clean Phase 30 mapping translate to undefined (drop).
|
|
82
|
+
*/
|
|
83
|
+
function translateLegacyState(state) {
|
|
84
|
+
if (state === 'applied')
|
|
85
|
+
return 'approved';
|
|
86
|
+
if (state === 'iterating')
|
|
87
|
+
return 'iterating';
|
|
88
|
+
if (state === 'open')
|
|
89
|
+
return 'in-review';
|
|
90
|
+
return undefined;
|
|
91
|
+
}
|
|
92
|
+
export async function detectLegacySchema(projectRoot) {
|
|
93
|
+
// #149: the .deskwork/entries directory is the migration marker —
|
|
94
|
+
// its presence (even empty) means the project has been migrated to
|
|
95
|
+
// (or natively created in) the entry-centric schema. Drift in
|
|
96
|
+
// calendar.md (legacy CLI verbs that haven't been split yet, e.g.
|
|
97
|
+
// publish, can re-emit `## Paused` / `## Review` section names via
|
|
98
|
+
// the legacy renderer) is a SEPARATE problem to be fixed by the
|
|
99
|
+
// doctor's reconciliation pass, NOT by re-running migration on top
|
|
100
|
+
// of valid sidecars (which would overwrite correct fields with
|
|
101
|
+
// stale heuristic data — artifactPath from old ingest-journal
|
|
102
|
+
// entries, iterationByStage shape regression, etc.).
|
|
103
|
+
const entriesDir = join(projectRoot, '.deskwork', 'entries');
|
|
18
104
|
try {
|
|
19
|
-
await
|
|
105
|
+
await readdir(entriesDir);
|
|
20
106
|
return false;
|
|
21
107
|
}
|
|
22
108
|
catch {
|
|
109
|
+
// No entries dir.
|
|
110
|
+
}
|
|
111
|
+
// No entries dir: pre-migration shape. Calendar.md presence is the
|
|
112
|
+
// "this is a deskwork project that needs to be migrated" signal.
|
|
113
|
+
try {
|
|
114
|
+
await readFile(join(projectRoot, '.deskwork', 'calendar.md'), 'utf8');
|
|
23
115
|
return true;
|
|
24
116
|
}
|
|
117
|
+
catch {
|
|
118
|
+
// No calendar.md and no entries dir: not a deskwork project at all.
|
|
119
|
+
return false;
|
|
120
|
+
}
|
|
25
121
|
}
|
|
26
122
|
export async function migrateCalendar(projectRoot, opts) {
|
|
27
123
|
const md = await readFile(join(projectRoot, '.deskwork', 'calendar.md'), 'utf8');
|
|
28
124
|
const sources = extractEntriesForMigration(md);
|
|
29
125
|
const sidecars = [];
|
|
30
126
|
const unmigratable = [];
|
|
127
|
+
// #141: legacy review-workflow records carry iteration counts + state.
|
|
128
|
+
// Read once; consult per entry.
|
|
129
|
+
const pipelineByEntryId = await readLegacyPipelineRecords(projectRoot);
|
|
31
130
|
for (const src of sources) {
|
|
32
131
|
// Build iteration history from journal — best-effort.
|
|
33
132
|
const events = await readJournalEvents(projectRoot, { entryId: src.uuid });
|
|
34
133
|
const iterationByStage = countIterationsByStage(events);
|
|
134
|
+
// #141: fold legacy pipeline workflow data into iterationByStage at
|
|
135
|
+
// the entry's currentStage. Pipeline records don't track per-stage,
|
|
136
|
+
// so we attribute the highest currentVersion to currentStage.
|
|
137
|
+
const pipelineSummary = pipelineByEntryId.get(src.uuid);
|
|
138
|
+
if (pipelineSummary) {
|
|
139
|
+
const stage = src.currentStage;
|
|
140
|
+
const existing = iterationByStage[stage] ?? 0;
|
|
141
|
+
if (pipelineSummary.currentVersion > existing) {
|
|
142
|
+
iterationByStage[stage] = pipelineSummary.currentVersion;
|
|
143
|
+
}
|
|
144
|
+
}
|
|
35
145
|
const earliest = events[0]?.at ?? new Date().toISOString();
|
|
36
146
|
const latest = events[events.length - 1]?.at ?? new Date().toISOString();
|
|
37
147
|
const priorStage = src.currentStage === 'Blocked' || src.currentStage === 'Cancelled'
|
|
38
148
|
? inferPriorStageFromJournal(events)
|
|
39
149
|
: undefined;
|
|
40
|
-
|
|
150
|
+
// #141: prefer the journal-derived reviewState; fall back to the
|
|
151
|
+
// legacy pipeline-workflow state if the journal has no review-state-
|
|
152
|
+
// change events for this entry.
|
|
153
|
+
const reviewState = latestReviewStateFromJournal(events) ??
|
|
154
|
+
(pipelineSummary ? translateLegacyState(pipelineSummary.state) : undefined);
|
|
41
155
|
const description = src.description !== '' ? src.description : undefined;
|
|
156
|
+
// #140: prefer the actual on-disk path recorded in the ingest journal.
|
|
157
|
+
// Without this, doctor's file-presence validator derives a slug+stage
|
|
158
|
+
// path that misses entries laid out under custom directories.
|
|
159
|
+
const artifactPath = await findIngestSourceFile(projectRoot, src.uuid);
|
|
42
160
|
// Build entry with conditional spread to satisfy exactOptionalPropertyTypes.
|
|
43
161
|
const entry = {
|
|
44
162
|
uuid: src.uuid,
|
|
@@ -53,6 +171,7 @@ export async function migrateCalendar(projectRoot, opts) {
|
|
|
53
171
|
...(description !== undefined && { description }),
|
|
54
172
|
...(priorStage !== undefined && { priorStage }),
|
|
55
173
|
...(reviewState !== undefined && { reviewState }),
|
|
174
|
+
...(artifactPath !== undefined && { artifactPath }),
|
|
56
175
|
};
|
|
57
176
|
sidecars.push(entry);
|
|
58
177
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"migrate.js","sourceRoot":"","sources":["../../src/doctor/migrate.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,
|
|
1
|
+
{"version":3,"file":"migrate.js","sourceRoot":"","sources":["../../src/doctor/migrate.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"missing-frontmatter-id.d.ts","sourceRoot":"","sources":["../../../src/doctor/rules/missing-frontmatter-id.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAIH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAIpD,OAAO,KAAK,EACV,aAAa,EACb,UAAU,EAIX,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"missing-frontmatter-id.d.ts","sourceRoot":"","sources":["../../../src/doctor/rules/missing-frontmatter-id.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAIH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAIpD,OAAO,KAAK,EACV,aAAa,EACb,UAAU,EAIX,MAAM,aAAa,CAAC;AAYrB,UAAU,aAAa;IACrB,sCAAsC;IACtC,YAAY,EAAE,MAAM,CAAC;IACrB,iEAAiE;IACjE,WAAW,EAAE,eAAe,GAAG,aAAa,GAAG,gBAAgB,CAAC;CACjE;AA0DD;;;;GAIG;AACH,wBAAgB,sBAAsB,CACpC,WAAW,EAAE,MAAM,EACnB,MAAM,EAAE,aAAa,CAAC,QAAQ,CAAC,EAC/B,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,aAAa,GACnB,aAAa,EAAE,CAyDjB;AAED;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,IAAI,CAKxE;AAkBD,QAAA,MAAM,IAAI,EAAE,UAmHX,CAAC;AAEF,eAAe,IAAI,CAAC"}
|
|
@@ -26,11 +26,20 @@ import { readFrontmatter, updateFrontmatter } from "../../frontmatter.js";
|
|
|
26
26
|
import { readFileSync, writeFileSync } from 'node:fs';
|
|
27
27
|
const RULE_ID = 'missing-frontmatter-id';
|
|
28
28
|
const MARKDOWN_EXTENSIONS = new Set(['.md', '.mdx', '.markdown']);
|
|
29
|
-
|
|
30
|
-
|
|
29
|
+
// Phase 30 places stage artifacts at <slug>/scrapbook/{idea,plan,outline}.md
|
|
30
|
+
// — those need to be reachable as candidates so the rule can bind frontmatter
|
|
31
|
+
// ids on them. Only `scrapbook/secret/` stays excluded (editorially-private
|
|
32
|
+
// notes that are NOT tracked entry artifacts).
|
|
33
|
+
const SKIP_DIRS = new Set(['node_modules', 'dist', '.git']);
|
|
34
|
+
function shouldSkipDir(name, parentDirName) {
|
|
31
35
|
if (name.startsWith('.'))
|
|
32
36
|
return true;
|
|
33
|
-
|
|
37
|
+
if (SKIP_DIRS.has(name.toLowerCase()))
|
|
38
|
+
return true;
|
|
39
|
+
// Path-aware: skip `scrapbook/secret/` but allow `scrapbook/` itself.
|
|
40
|
+
if (name === 'secret' && parentDirName === 'scrapbook')
|
|
41
|
+
return true;
|
|
42
|
+
return false;
|
|
34
43
|
}
|
|
35
44
|
function collectMarkdownFiles(dir) {
|
|
36
45
|
const out = [];
|
|
@@ -55,7 +64,7 @@ function collectMarkdownFiles(dir) {
|
|
|
55
64
|
continue;
|
|
56
65
|
}
|
|
57
66
|
if (st.isDirectory()) {
|
|
58
|
-
if (shouldSkipDir(name))
|
|
67
|
+
if (shouldSkipDir(name, basename(currentDir)))
|
|
59
68
|
continue;
|
|
60
69
|
visit(abs);
|
|
61
70
|
continue;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"missing-frontmatter-id.js","sourceRoot":"","sources":["../../../src/doctor/rules/missing-frontmatter-id.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAEH,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAC5D,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AAE9D,OAAO,EAAE,mBAAmB,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AACxE,OAAO,EAAE,eAAe,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AAC1E,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAStD,MAAM,OAAO,GAAG,wBAAwB,CAAC;AAEzC,MAAM,mBAAmB,GAAG,IAAI,GAAG,CAAC,CAAC,KAAK,EAAE,MAAM,EAAE,WAAW,CAAC,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"missing-frontmatter-id.js","sourceRoot":"","sources":["../../../src/doctor/rules/missing-frontmatter-id.ts"],"names":[],"mappings":"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"}
|
|
@@ -37,7 +37,12 @@ import type {
|
|
|
37
37
|
const RULE_ID = 'missing-frontmatter-id';
|
|
38
38
|
|
|
39
39
|
const MARKDOWN_EXTENSIONS = new Set(['.md', '.mdx', '.markdown']);
|
|
40
|
-
|
|
40
|
+
|
|
41
|
+
// Phase 30 places stage artifacts at <slug>/scrapbook/{idea,plan,outline}.md
|
|
42
|
+
// — those need to be reachable as candidates so the rule can bind frontmatter
|
|
43
|
+
// ids on them. Only `scrapbook/secret/` stays excluded (editorially-private
|
|
44
|
+
// notes that are NOT tracked entry artifacts).
|
|
45
|
+
const SKIP_DIRS = new Set(['node_modules', 'dist', '.git']);
|
|
41
46
|
|
|
42
47
|
interface CandidateFile {
|
|
43
48
|
/** Absolute path to the candidate. */
|
|
@@ -46,9 +51,12 @@ interface CandidateFile {
|
|
|
46
51
|
matchReason: 'template-path' | 'title-match' | 'basename-match';
|
|
47
52
|
}
|
|
48
53
|
|
|
49
|
-
function shouldSkipDir(name: string): boolean {
|
|
54
|
+
function shouldSkipDir(name: string, parentDirName: string): boolean {
|
|
50
55
|
if (name.startsWith('.')) return true;
|
|
51
|
-
|
|
56
|
+
if (SKIP_DIRS.has(name.toLowerCase())) return true;
|
|
57
|
+
// Path-aware: skip `scrapbook/secret/` but allow `scrapbook/` itself.
|
|
58
|
+
if (name === 'secret' && parentDirName === 'scrapbook') return true;
|
|
59
|
+
return false;
|
|
52
60
|
}
|
|
53
61
|
|
|
54
62
|
function collectMarkdownFiles(dir: string): string[] {
|
|
@@ -73,7 +81,7 @@ function collectMarkdownFiles(dir: string): string[] {
|
|
|
73
81
|
continue;
|
|
74
82
|
}
|
|
75
83
|
if (st.isDirectory()) {
|
|
76
|
-
if (shouldSkipDir(name)) continue;
|
|
84
|
+
if (shouldSkipDir(name, basename(currentDir))) continue;
|
|
77
85
|
visit(abs);
|
|
78
86
|
continue;
|
|
79
87
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"validate.d.ts","sourceRoot":"","sources":["../../src/doctor/validate.ts"],"names":[],"mappings":"AAYA,MAAM,WAAW,iBAAiB;IAChC,QAAQ,EACJ,QAAQ,GACR,kBAAkB,GAClB,qBAAqB,GACrB,iBAAiB,GACjB,mBAAmB,GACnB,eAAe,GACf,kBAAkB,GAClB,aAAa,GACb,WAAW,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,EAAE,iBAAiB,EAAE,CAAC;CAC/B;
|
|
1
|
+
{"version":3,"file":"validate.d.ts","sourceRoot":"","sources":["../../src/doctor/validate.ts"],"names":[],"mappings":"AAYA,MAAM,WAAW,iBAAiB;IAChC,QAAQ,EACJ,QAAQ,GACR,kBAAkB,GAClB,qBAAqB,GACrB,iBAAiB,GACjB,mBAAmB,GACnB,eAAe,GACf,kBAAkB,GAClB,aAAa,GACb,WAAW,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,EAAE,iBAAiB,EAAE,CAAC;CAC/B;AA2bD,wBAAsB,WAAW,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAWhF"}
|
package/dist/doctor/validate.js
CHANGED
|
@@ -58,6 +58,7 @@ async function validateCalendarSidecar(projectRoot) {
|
|
|
58
58
|
}
|
|
59
59
|
const calendarEntries = extractEntriesForMigration(md);
|
|
60
60
|
const calendarUuids = new Set(calendarEntries.map((e) => e.uuid));
|
|
61
|
+
const calendarStageByUuid = new Map(calendarEntries.map((e) => [e.uuid, e.currentStage]));
|
|
61
62
|
const sidecarUuids = await readSidecarUuids(projectRoot);
|
|
62
63
|
for (const uuid of calendarUuids) {
|
|
63
64
|
if (!sidecarUuids.has(uuid)) {
|
|
@@ -79,6 +80,25 @@ async function validateCalendarSidecar(projectRoot) {
|
|
|
79
80
|
});
|
|
80
81
|
}
|
|
81
82
|
}
|
|
83
|
+
// #148: each entry should appear under the section that matches its
|
|
84
|
+
// sidecar's currentStage. If a stage transition wrote the sidecar but
|
|
85
|
+
// didn't regenerate calendar.md, the entry will appear under the
|
|
86
|
+
// pre-transition section. Surface this as a finding so --check sees
|
|
87
|
+
// the drift; the repair pass regenerates calendar.md from sidecars.
|
|
88
|
+
const sidecars = await loadSidecars(projectRoot);
|
|
89
|
+
for (const sc of sidecars) {
|
|
90
|
+
const calendarStage = calendarStageByUuid.get(sc.entry.uuid);
|
|
91
|
+
if (calendarStage === undefined)
|
|
92
|
+
continue;
|
|
93
|
+
if (calendarStage !== sc.entry.currentStage) {
|
|
94
|
+
failures.push({
|
|
95
|
+
category: 'calendar-sidecar',
|
|
96
|
+
message: `calendar.md shows entry ${sc.entry.uuid} under "## ${calendarStage}" but sidecar.currentStage=${sc.entry.currentStage} (calendar.md is stale; run with --fix=all to regenerate)`,
|
|
97
|
+
entryId: sc.entry.uuid,
|
|
98
|
+
path: calendarPath,
|
|
99
|
+
});
|
|
100
|
+
}
|
|
101
|
+
}
|
|
82
102
|
return failures;
|
|
83
103
|
}
|
|
84
104
|
async function loadSidecars(projectRoot) {
|
|
@@ -131,6 +151,23 @@ function artifactPathForStage(projectRoot, slug, stage) {
|
|
|
131
151
|
return null;
|
|
132
152
|
}
|
|
133
153
|
}
|
|
154
|
+
/**
|
|
155
|
+
* Resolve the on-disk artifact path for an entry.
|
|
156
|
+
*
|
|
157
|
+
* Precedence:
|
|
158
|
+
* 1. entry.artifactPath (when set — see #140 / migration)
|
|
159
|
+
* 2. slug+stage heuristic (`artifactPathForStage`) for entries without
|
|
160
|
+
* an explicit path. Off-pipeline stages (Blocked / Cancelled) still
|
|
161
|
+
* return null.
|
|
162
|
+
*
|
|
163
|
+
* Returns null when no artifact is expected for this stage.
|
|
164
|
+
*/
|
|
165
|
+
function resolveArtifactPath(projectRoot, entry) {
|
|
166
|
+
if (entry.artifactPath) {
|
|
167
|
+
return join(projectRoot, entry.artifactPath);
|
|
168
|
+
}
|
|
169
|
+
return artifactPathForStage(projectRoot, entry.slug, entry.currentStage);
|
|
170
|
+
}
|
|
134
171
|
/**
|
|
135
172
|
* Minimal frontmatter `deskwork.stage` extractor.
|
|
136
173
|
*
|
|
@@ -177,7 +214,7 @@ async function validateFrontmatterSidecar(projectRoot) {
|
|
|
177
214
|
const failures = [];
|
|
178
215
|
const sidecars = await loadSidecars(projectRoot);
|
|
179
216
|
for (const { entry, path: sidecarPath } of sidecars) {
|
|
180
|
-
const artifactPath =
|
|
217
|
+
const artifactPath = resolveArtifactPath(projectRoot, entry);
|
|
181
218
|
if (!artifactPath)
|
|
182
219
|
continue;
|
|
183
220
|
if (!(await fileExists(artifactPath)))
|
|
@@ -254,13 +291,20 @@ async function validateIterationHistory(projectRoot) {
|
|
|
254
291
|
}
|
|
255
292
|
// Compare sidecar counts to journal counts for every stage we know about
|
|
256
293
|
// (union of sidecar-recorded stages and journal-witnessed stages).
|
|
294
|
+
//
|
|
295
|
+
// We only fail when the journal has MORE events than the sidecar — that
|
|
296
|
+
// direction means the sidecar lost data that the journal still witnesses
|
|
297
|
+
// (real drift). The other direction (sidecar count > journal count) is
|
|
298
|
+
// the migration case: #141 carries iteration counts forward from legacy
|
|
299
|
+
// pipeline-workflow records that never had per-event iteration journal
|
|
300
|
+
// entries. Treating that as drift would flag every migrated entry.
|
|
257
301
|
const allStages = new Set([...stages, ...Object.keys(journalCount)]);
|
|
258
302
|
for (const stage of allStages) {
|
|
259
303
|
const sidecarN = entry.iterationByStage[stage] ?? 0;
|
|
260
304
|
const journalN = journalCount[stage] ?? 0;
|
|
261
305
|
if (sidecarN === 0)
|
|
262
306
|
continue; // migration tolerance: only flag stages the sidecar tracks
|
|
263
|
-
if (
|
|
307
|
+
if (journalN > sidecarN) {
|
|
264
308
|
failures.push({
|
|
265
309
|
category: 'iteration-history',
|
|
266
310
|
message: `iterationByStage[${stage}]=${sidecarN} but journal has ${journalN} iteration event(s) for that stage`,
|
|
@@ -276,7 +320,7 @@ async function validateFilePresence(projectRoot) {
|
|
|
276
320
|
const failures = [];
|
|
277
321
|
const sidecars = await loadSidecars(projectRoot);
|
|
278
322
|
for (const { entry, path } of sidecars) {
|
|
279
|
-
const artifactPath =
|
|
323
|
+
const artifactPath = resolveArtifactPath(projectRoot, entry);
|
|
280
324
|
if (!artifactPath)
|
|
281
325
|
continue;
|
|
282
326
|
if (!(await fileExists(artifactPath))) {
|