@isaacriehm/cairn-core 0.3.8 → 0.4.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/.tsbuildinfo +1 -1
- package/dist/attention/bulk-accept.d.ts +18 -0
- package/dist/attention/bulk-accept.js +46 -0
- package/dist/attention/bulk-accept.js.map +1 -1
- package/dist/attention/dedup.d.ts +68 -0
- package/dist/attention/dedup.js +239 -0
- package/dist/attention/dedup.js.map +1 -0
- package/dist/attention/index.d.ts +3 -0
- package/dist/attention/index.js +3 -0
- package/dist/attention/index.js.map +1 -1
- package/dist/attention/restore.d.ts +43 -0
- package/dist/attention/restore.js +127 -0
- package/dist/attention/restore.js.map +1 -0
- package/dist/attention/source-strip.d.ts +49 -0
- package/dist/attention/source-strip.js +340 -0
- package/dist/attention/source-strip.js.map +1 -0
- package/dist/claude/cache.d.ts +31 -0
- package/dist/claude/cache.js +0 -0
- package/dist/claude/cache.js.map +1 -0
- package/dist/claude/error.d.ts +1 -1
- package/dist/claude/error.js +5 -0
- package/dist/claude/error.js.map +1 -1
- package/dist/claude/runner.js +60 -3
- package/dist/claude/runner.js.map +1 -1
- package/dist/claude/types.d.ts +25 -0
- package/dist/hooks/runners/session-start.js +24 -2
- package/dist/hooks/runners/session-start.js.map +1 -1
- package/dist/init/baseline-audit.d.ts +8 -0
- package/dist/init/baseline-audit.js +1 -1
- package/dist/init/baseline-audit.js.map +1 -1
- package/dist/init/brand-derive.js +53 -34
- package/dist/init/brand-derive.js.map +1 -1
- package/dist/init/index.d.ts +4 -2
- package/dist/init/index.js +3 -1
- package/dist/init/index.js.map +1 -1
- package/dist/init/ingest-docs.d.ts +7 -0
- package/dist/init/ingest-docs.js +4 -1
- package/dist/init/ingest-docs.js.map +1 -1
- package/dist/init/mapper-merge.js +1 -0
- package/dist/init/mapper-merge.js.map +1 -1
- package/dist/init/phases/3-mapper.js +18 -0
- package/dist/init/phases/3-mapper.js.map +1 -1
- package/dist/init/phases/5-brand.js +3 -0
- package/dist/init/phases/5-brand.js.map +1 -1
- package/dist/init/phases/6-docs-ingest.js +14 -0
- package/dist/init/phases/6-docs-ingest.js.map +1 -1
- package/dist/init/phases/7b-source-comments.d.ts +9 -0
- package/dist/init/phases/7b-source-comments.js +41 -1
- package/dist/init/phases/7b-source-comments.js.map +1 -1
- package/dist/init/phases/7c-rules-merge.js +10 -0
- package/dist/init/phases/7c-rules-merge.js.map +1 -1
- package/dist/init/phases/index.d.ts +2 -0
- package/dist/init/phases/index.js +2 -0
- package/dist/init/phases/index.js.map +1 -1
- package/dist/init/phases/parallel-678.d.ts +31 -0
- package/dist/init/phases/parallel-678.js +205 -0
- package/dist/init/phases/parallel-678.js.map +1 -0
- package/dist/init/phases/source-comments-output-io.d.ts +78 -0
- package/dist/init/phases/source-comments-output-io.js +84 -0
- package/dist/init/phases/source-comments-output-io.js.map +1 -0
- package/dist/init/progress.d.ts +35 -0
- package/dist/init/progress.js +71 -0
- package/dist/init/progress.js.map +1 -0
- package/dist/init/rules-merge/ingest.d.ts +14 -0
- package/dist/init/rules-merge/ingest.js +8 -2
- package/dist/init/rules-merge/ingest.js.map +1 -1
- package/dist/init/seed.js +48 -21
- package/dist/init/seed.js.map +1 -1
- package/dist/init/source-comments/classify.d.ts +6 -0
- package/dist/init/source-comments/classify.js +60 -3
- package/dist/init/source-comments/classify.js.map +1 -1
- package/dist/init/source-comments/ingest.d.ts +21 -0
- package/dist/init/source-comments/ingest.js +28 -3
- package/dist/init/source-comments/ingest.js.map +1 -1
- package/dist/mcp/tools/attention-dedup.d.ts +21 -0
- package/dist/mcp/tools/attention-dedup.js +34 -0
- package/dist/mcp/tools/attention-dedup.js.map +1 -0
- package/dist/mcp/tools/attention-restore.d.ts +14 -0
- package/dist/mcp/tools/attention-restore.js +22 -0
- package/dist/mcp/tools/attention-restore.js.map +1 -0
- package/dist/mcp/tools/index.js +6 -1
- package/dist/mcp/tools/index.js.map +1 -1
- package/dist/mcp/tools/init-phases.d.ts +1 -0
- package/dist/mcp/tools/init-phases.js +88 -1
- package/dist/mcp/tools/init-phases.js.map +1 -1
- package/dist/mcp/tools/resolve-attention.js +44 -141
- package/dist/mcp/tools/resolve-attention.js.map +1 -1
- package/dist/status-line/format.d.ts +4 -1
- package/dist/status-line/format.js +26 -3
- package/dist/status-line/format.js.map +1 -1
- package/dist/status-line/reader.js +25 -1
- package/dist/status-line/reader.js.map +1 -1
- package/package.json +1 -1
- package/templates/.claude/rules/cairn.md +47 -0
|
@@ -17,6 +17,7 @@
|
|
|
17
17
|
* cairn runner).
|
|
18
18
|
*/
|
|
19
19
|
import { runMapper } from "../mapper.js";
|
|
20
|
+
import { clearProgress, writeProgress } from "../progress.js";
|
|
20
21
|
import { toMapperResultPersisted, writeMapperOutputFile, } from "./mapper-output-io.js";
|
|
21
22
|
import { advancePhase } from "./orchestrator.js";
|
|
22
23
|
export async function runPhase3Mapper(state) {
|
|
@@ -32,16 +33,32 @@ export async function runPhase3Mapper(state) {
|
|
|
32
33
|
state,
|
|
33
34
|
};
|
|
34
35
|
}
|
|
36
|
+
const startedAt = Date.now();
|
|
37
|
+
let totalSlices = 0;
|
|
38
|
+
let completed = 0;
|
|
35
39
|
try {
|
|
36
40
|
const result = await runMapper({
|
|
37
41
|
detection,
|
|
38
42
|
summary,
|
|
39
43
|
repoRoot: state.repoRoot,
|
|
44
|
+
onSlicesDetected: (slices) => {
|
|
45
|
+
totalSlices = slices.length;
|
|
46
|
+
},
|
|
47
|
+
onModuleEnd: () => {
|
|
48
|
+
completed += 1;
|
|
49
|
+
writeProgress(state.repoRoot, {
|
|
50
|
+
phase: "3-mapper",
|
|
51
|
+
batch: completed,
|
|
52
|
+
total: totalSlices,
|
|
53
|
+
startedAt,
|
|
54
|
+
});
|
|
55
|
+
},
|
|
40
56
|
});
|
|
41
57
|
// Write the full result (with scope_index.files + module_proposals)
|
|
42
58
|
// to disk; downstream phases that need those reload it on demand.
|
|
43
59
|
writeMapperOutputFile(state.repoRoot, result);
|
|
44
60
|
const persisted = toMapperResultPersisted(result);
|
|
61
|
+
clearProgress(state.repoRoot);
|
|
45
62
|
const next = {
|
|
46
63
|
...state,
|
|
47
64
|
outputs: { ...state.outputs, "3-mapper": persisted },
|
|
@@ -53,6 +70,7 @@ export async function runPhase3Mapper(state) {
|
|
|
53
70
|
};
|
|
54
71
|
}
|
|
55
72
|
catch (err) {
|
|
73
|
+
clearProgress(state.repoRoot);
|
|
56
74
|
return {
|
|
57
75
|
status: "error",
|
|
58
76
|
error: {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"3-mapper.js","sourceRoot":"","sources":["../../../src/init/phases/3-mapper.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAEH,OAAO,EAAE,SAAS,EAAqB,MAAM,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"3-mapper.js","sourceRoot":"","sources":["../../../src/init/phases/3-mapper.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAEH,OAAO,EAAE,SAAS,EAAqB,MAAM,cAAc,CAAC;AAC5D,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAG9D,OAAO,EACL,uBAAuB,EACvB,qBAAqB,GACtB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAGjD,MAAM,CAAC,KAAK,UAAU,eAAe,CAAC,KAAiB;IACrD,MAAM,SAAS,GAAG,KAAK,CAAC,OAAO,CAAC,UAAU,CAAgC,CAAC;IAC3E,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC,UAAU,CAA4B,CAAC;IACrE,IAAI,SAAS,KAAK,SAAS,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;QACrD,OAAO;YACL,MAAM,EAAE,OAAO;YACf,KAAK,EAAE;gBACL,IAAI,EAAE,iBAAiB;gBACvB,OAAO,EAAE,kDAAkD;aAC5D;YACD,KAAK;SACN,CAAC;IACJ,CAAC;IACD,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IAC7B,IAAI,WAAW,GAAG,CAAC,CAAC;IACpB,IAAI,SAAS,GAAG,CAAC,CAAC;IAClB,IAAI,CAAC;QACH,MAAM,MAAM,GAAiB,MAAM,SAAS,CAAC;YAC3C,SAAS;YACT,OAAO;YACP,QAAQ,EAAE,KAAK,CAAC,QAAQ;YACxB,gBAAgB,EAAE,CAAC,MAAM,EAAE,EAAE;gBAC3B,WAAW,GAAG,MAAM,CAAC,MAAM,CAAC;YAC9B,CAAC;YACD,WAAW,EAAE,GAAG,EAAE;gBAChB,SAAS,IAAI,CAAC,CAAC;gBACf,aAAa,CAAC,KAAK,CAAC,QAAQ,EAAE;oBAC5B,KAAK,EAAE,UAAU;oBACjB,KAAK,EAAE,SAAS;oBAChB,KAAK,EAAE,WAAW;oBAClB,SAAS;iBACV,CAAC,CAAC;YACL,CAAC;SACF,CAAC,CAAC;QACH,oEAAoE;QACpE,kEAAkE;QAClE,qBAAqB,CAAC,KAAK,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;QAC9C,MAAM,SAAS,GAAG,uBAAuB,CAAC,MAAM,CAAC,CAAC;QAClD,aAAa,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;QAC9B,MAAM,IAAI,GAAe;YACvB,GAAG,KAAK;YACR,OAAO,EAAE,EAAE,GAAG,KAAK,CAAC,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE;SACrD,CAAC;QACF,OAAO;YACL,MAAM,EAAE,UAAU;YAClB,SAAS,EAAE,SAAS;YACpB,KAAK,EAAE,YAAY,CAAC,IAAI,CAAC;SAC1B,CAAC;IACJ,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,aAAa,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;QAC9B,OAAO;YACL,MAAM,EAAE,OAAO;YACf,KAAK,EAAE;gBACL,IAAI,EAAE,eAAe;gBACrB,OAAO,EAAE,wBAAwB;gBACjC,MAAM,EAAE,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,IAAI,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC;aACtE;YACD,KAAK;SACN,CAAC;IACJ,CAAC;AACH,CAAC"}
|
|
@@ -49,6 +49,9 @@ export async function runPhase5Brand(state) {
|
|
|
49
49
|
avoid: DEFAULT_AVOID,
|
|
50
50
|
};
|
|
51
51
|
result = applyBrandAnswers(state.repoRoot, answers);
|
|
52
|
+
if (derived === null) {
|
|
53
|
+
result.warnings.push("brand-derive: Haiku timeout/parse fail → using mechanical defaults. Re-run `cairn fix brand` after init.");
|
|
54
|
+
}
|
|
52
55
|
}
|
|
53
56
|
}
|
|
54
57
|
const next = {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"5-brand.js","sourceRoot":"","sources":["../../../src/init/phases/5-brand.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,EAAE,iBAAiB,EAAqB,MAAM,mBAAmB,CAAC;AACzE,OAAO,EAAE,sBAAsB,EAAE,qBAAqB,EAAE,MAAM,oBAAoB,CAAC;AACnF,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAQjD,MAAM,aAAa,GACjB,8LAA8L,CAAC;AAEjM,MAAM,aAAa,GACjB,4LAA4L,CAAC;AAE/L,SAAS,kBAAkB,CAAC,KAAiB;IAC3C,MAAM,MAAM,GAAG,KAAK,CAAC,OAAO,CAAC,UAAU,CAA0C,CAAC;IAClF,MAAM,IAAI,GAAG,MAAM,EAAE,YAAY,IAAI,cAAc,CAAC;IACpD,OAAO,uCAAuC,IAAI,4DAA4D,CAAC;AACjH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,KAAiB;IACpD,qDAAqD;IACrD,IAAI,KAAK,CAAC,MAAM,KAAK,SAAS,IAAI,KAAK,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC1D,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC;QAC5B,IAAI,MAAM,GAAqD,IAAI,CAAC;QACpE,IAAI,MAAM,KAAK,WAAW,EAAE,CAAC;YAC3B,MAAM,MAAM,GAAG,KAAK,CAAC,OAAO,CAAC,UAAU,CAE1B,CAAC;YACd,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;gBACzB,MAAM,MAAM,GAAG,KAAK,CAAC,OAAO,CAAC,UAAU,CAA0C,CAAC;gBAClF,MAAM,WAAW,GAAG,MAAM,EAAE,YAAY,IAAI,cAAc,CAAC;gBAC3D,8DAA8D;gBAC9D,0DAA0D;gBAC1D,yCAAyC;gBACzC,MAAM,OAAO,GAAG,MAAM,sBAAsB,CAAC;oBAC3C,QAAQ,EAAE,KAAK,CAAC,QAAQ;oBACxB,WAAW;oBACX,aAAa,EAAE,MAAM,CAAC,MAAM,CAAC,cAAc;iBAC5C,CAAC,CAAC;gBACH,MAAM,OAAO,GAAiB,OAAO,KAAK,IAAI;oBAC5C,CAAC,CAAC,qBAAqB,CAAC,OAAO,CAAC;oBAChC,CAAC,CAAC;wBACE,UAAU,EAAE,MAAM,CAAC,MAAM,CAAC,cAAc;wBACxC,SAAS,EAAE,kBAAkB,CAAC,KAAK,CAAC;wBACpC,KAAK,EAAE,aAAa;wBACpB,KAAK,EAAE,aAAa;qBACrB,CAAC;gBACN,MAAM,GAAG,iBAAiB,CAAC,KAAK,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"5-brand.js","sourceRoot":"","sources":["../../../src/init/phases/5-brand.ts"],"names":[],"mappings":"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"}
|
|
@@ -8,12 +8,25 @@
|
|
|
8
8
|
* have.
|
|
9
9
|
*/
|
|
10
10
|
import { runDocsIngestion } from "../ingest-docs.js";
|
|
11
|
+
import { clearProgress, writeProgress } from "../progress.js";
|
|
11
12
|
import { advancePhase } from "./orchestrator.js";
|
|
12
13
|
export async function runPhase6DocsIngest(state) {
|
|
14
|
+
const startedAt = Date.now();
|
|
15
|
+
let completed = 0;
|
|
13
16
|
try {
|
|
14
17
|
const result = await runDocsIngestion({
|
|
15
18
|
repoRoot: state.repoRoot,
|
|
19
|
+
onGroupProgress: (row) => {
|
|
20
|
+
completed += 1;
|
|
21
|
+
writeProgress(state.repoRoot, {
|
|
22
|
+
phase: "6-docs-ingest",
|
|
23
|
+
batch: completed,
|
|
24
|
+
total: row.total,
|
|
25
|
+
startedAt,
|
|
26
|
+
});
|
|
27
|
+
},
|
|
16
28
|
});
|
|
29
|
+
clearProgress(state.repoRoot);
|
|
17
30
|
const next = {
|
|
18
31
|
...state,
|
|
19
32
|
outputs: { ...state.outputs, "6-docs-ingest": result },
|
|
@@ -25,6 +38,7 @@ export async function runPhase6DocsIngest(state) {
|
|
|
25
38
|
};
|
|
26
39
|
}
|
|
27
40
|
catch (err) {
|
|
41
|
+
clearProgress(state.repoRoot);
|
|
28
42
|
return {
|
|
29
43
|
status: "error",
|
|
30
44
|
error: {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"6-docs-ingest.js","sourceRoot":"","sources":["../../../src/init/phases/6-docs-ingest.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAE,gBAAgB,EAAwB,MAAM,mBAAmB,CAAC;AAC3E,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAGjD,MAAM,CAAC,KAAK,UAAU,mBAAmB,CAAC,KAAiB;IACzD,IAAI,CAAC;QACH,MAAM,MAAM,GAAoB,MAAM,gBAAgB,CAAC;YACrD,QAAQ,EAAE,KAAK,CAAC,QAAQ;
|
|
1
|
+
{"version":3,"file":"6-docs-ingest.js","sourceRoot":"","sources":["../../../src/init/phases/6-docs-ingest.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAE,gBAAgB,EAAwB,MAAM,mBAAmB,CAAC;AAC3E,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAC9D,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAGjD,MAAM,CAAC,KAAK,UAAU,mBAAmB,CAAC,KAAiB;IACzD,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IAC7B,IAAI,SAAS,GAAG,CAAC,CAAC;IAClB,IAAI,CAAC;QACH,MAAM,MAAM,GAAoB,MAAM,gBAAgB,CAAC;YACrD,QAAQ,EAAE,KAAK,CAAC,QAAQ;YACxB,eAAe,EAAE,CAAC,GAAG,EAAE,EAAE;gBACvB,SAAS,IAAI,CAAC,CAAC;gBACf,aAAa,CAAC,KAAK,CAAC,QAAQ,EAAE;oBAC5B,KAAK,EAAE,eAAe;oBACtB,KAAK,EAAE,SAAS;oBAChB,KAAK,EAAE,GAAG,CAAC,KAAK;oBAChB,SAAS;iBACV,CAAC,CAAC;YACL,CAAC;SACF,CAAC,CAAC;QACH,aAAa,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;QAC9B,MAAM,IAAI,GAAe;YACvB,GAAG,KAAK;YACR,OAAO,EAAE,EAAE,GAAG,KAAK,CAAC,OAAO,EAAE,eAAe,EAAE,MAAM,EAAE;SACvD,CAAC;QACF,OAAO;YACL,MAAM,EAAE,UAAU;YAClB,SAAS,EAAE,oBAAoB;YAC/B,KAAK,EAAE,YAAY,CAAC,IAAI,CAAC;SAC1B,CAAC;IACJ,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,aAAa,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;QAC9B,OAAO;YACL,MAAM,EAAE,OAAO;YACf,KAAK,EAAE;gBACL,IAAI,EAAE,oBAAoB;gBAC1B,OAAO,EAAE,gCAAgC;gBACzC,MAAM,EAAE,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,IAAI,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC;aACtE;YACD,KAAK;SACN,CAAC;IACJ,CAAC;AACH,CAAC"}
|
|
@@ -1,6 +1,15 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Phase 7b-source-comments — walk every source file's docblock-class
|
|
3
3
|
* comment, classify via Haiku, write DEC drafts / invariant proposals.
|
|
4
|
+
*
|
|
5
|
+
* Heavy walk + per-block classifications spill to
|
|
6
|
+
* `.cairn/init/source-comments-walk.json`; only the lightweight projection
|
|
7
|
+
* (counts, ledger paths, kindCounts) lives on the persisted phase output.
|
|
8
|
+
*
|
|
9
|
+
* Project globs from the mapper + the 4-pilot picked module flow into
|
|
10
|
+
* scoring so every DEC draft + invariant gets `capture_confidence`
|
|
11
|
+
* stamped at write time — `cairn attention bulk-accept` becomes an
|
|
12
|
+
* O(1) file move instead of a re-score sweep.
|
|
4
13
|
*/
|
|
5
14
|
import type { PhaseResult, PhaseState } from "./types.js";
|
|
6
15
|
export declare function runPhase7bSourceComments(state: PhaseState): Promise<PhaseResult>;
|
|
@@ -1,17 +1,56 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Phase 7b-source-comments — walk every source file's docblock-class
|
|
3
3
|
* comment, classify via Haiku, write DEC drafts / invariant proposals.
|
|
4
|
+
*
|
|
5
|
+
* Heavy walk + per-block classifications spill to
|
|
6
|
+
* `.cairn/init/source-comments-walk.json`; only the lightweight projection
|
|
7
|
+
* (counts, ledger paths, kindCounts) lives on the persisted phase output.
|
|
8
|
+
*
|
|
9
|
+
* Project globs from the mapper + the 4-pilot picked module flow into
|
|
10
|
+
* scoring so every DEC draft + invariant gets `capture_confidence`
|
|
11
|
+
* stamped at write time — `cairn attention bulk-accept` becomes an
|
|
12
|
+
* O(1) file move instead of a re-score sweep.
|
|
4
13
|
*/
|
|
5
14
|
import { runSourceCommentsIngestion, } from "../source-comments/index.js";
|
|
15
|
+
import { clearProgress, writeProgress } from "../progress.js";
|
|
6
16
|
import { advancePhase } from "./orchestrator.js";
|
|
17
|
+
import { to7bResultPersisted, writeSourceCommentsWalkFile, } from "./source-comments-output-io.js";
|
|
7
18
|
export async function runPhase7bSourceComments(state) {
|
|
19
|
+
const mapper = state.outputs["3-mapper"];
|
|
20
|
+
const globs = mapper
|
|
21
|
+
? {
|
|
22
|
+
route_handler_globs: mapper.output.route_handler_globs,
|
|
23
|
+
dto_globs: mapper.output.dto_globs,
|
|
24
|
+
generator_source_globs: mapper.output.generator_source_globs,
|
|
25
|
+
high_stakes_globs: mapper.output.high_stakes_globs,
|
|
26
|
+
off_limits: mapper.output.off_limits_globs,
|
|
27
|
+
}
|
|
28
|
+
: {};
|
|
29
|
+
const pilotOut = state.outputs["4-pilot"];
|
|
30
|
+
const pilotModule = typeof pilotOut?.picked === "string" && pilotOut.picked.length > 0
|
|
31
|
+
? pilotOut.picked
|
|
32
|
+
: undefined;
|
|
33
|
+
const startedAt = Date.now();
|
|
8
34
|
try {
|
|
9
35
|
const result = await runSourceCommentsIngestion({
|
|
10
36
|
repoRoot: state.repoRoot,
|
|
37
|
+
globs,
|
|
38
|
+
...(pilotModule !== undefined ? { pilotModule } : {}),
|
|
39
|
+
onBatchProgress: (row) => writeProgress(state.repoRoot, {
|
|
40
|
+
phase: "7b-source-comments",
|
|
41
|
+
batch: row.index + 1,
|
|
42
|
+
total: row.total,
|
|
43
|
+
classified: row.classified,
|
|
44
|
+
failed: row.failed,
|
|
45
|
+
startedAt,
|
|
46
|
+
}),
|
|
11
47
|
});
|
|
48
|
+
writeSourceCommentsWalkFile(state.repoRoot, result);
|
|
49
|
+
const persisted = to7bResultPersisted(result);
|
|
50
|
+
clearProgress(state.repoRoot);
|
|
12
51
|
const next = {
|
|
13
52
|
...state,
|
|
14
|
-
outputs: { ...state.outputs, "7b-source-comments":
|
|
53
|
+
outputs: { ...state.outputs, "7b-source-comments": persisted },
|
|
15
54
|
};
|
|
16
55
|
return {
|
|
17
56
|
status: "complete",
|
|
@@ -20,6 +59,7 @@ export async function runPhase7bSourceComments(state) {
|
|
|
20
59
|
};
|
|
21
60
|
}
|
|
22
61
|
catch (err) {
|
|
62
|
+
clearProgress(state.repoRoot);
|
|
23
63
|
return {
|
|
24
64
|
status: "error",
|
|
25
65
|
error: {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"7b-source-comments.js","sourceRoot":"","sources":["../../../src/init/phases/7b-source-comments.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"7b-source-comments.js","sourceRoot":"","sources":["../../../src/init/phases/7b-source-comments.ts"],"names":[],"mappings":"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"}
|
|
@@ -3,12 +3,21 @@
|
|
|
3
3
|
* sections, classify via Haiku, propose net-new rules + flag conflicts.
|
|
4
4
|
*/
|
|
5
5
|
import { runRulesMerge, } from "../rules-merge/index.js";
|
|
6
|
+
import { clearProgress, writeProgress } from "../progress.js";
|
|
6
7
|
import { advancePhase } from "./orchestrator.js";
|
|
7
8
|
export async function runPhase7cRulesMerge(state) {
|
|
9
|
+
const startedAt = Date.now();
|
|
8
10
|
try {
|
|
9
11
|
const result = await runRulesMerge({
|
|
10
12
|
repoRoot: state.repoRoot,
|
|
13
|
+
onSectionProgress: (row) => writeProgress(state.repoRoot, {
|
|
14
|
+
phase: "7c-rules-merge",
|
|
15
|
+
batch: row.index,
|
|
16
|
+
total: row.total,
|
|
17
|
+
startedAt,
|
|
18
|
+
}),
|
|
11
19
|
});
|
|
20
|
+
clearProgress(state.repoRoot);
|
|
12
21
|
const next = {
|
|
13
22
|
...state,
|
|
14
23
|
outputs: { ...state.outputs, "7c-rules-merge": result },
|
|
@@ -20,6 +29,7 @@ export async function runPhase7cRulesMerge(state) {
|
|
|
20
29
|
};
|
|
21
30
|
}
|
|
22
31
|
catch (err) {
|
|
32
|
+
clearProgress(state.repoRoot);
|
|
23
33
|
return {
|
|
24
34
|
status: "error",
|
|
25
35
|
error: {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"7c-rules-merge.js","sourceRoot":"","sources":["../../../src/init/phases/7c-rules-merge.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EACL,aAAa,GAEd,MAAM,yBAAyB,CAAC;AACjC,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAGjD,MAAM,CAAC,KAAK,UAAU,oBAAoB,CAAC,KAAiB;IAC1D,IAAI,CAAC;QACH,MAAM,MAAM,GAAwB,MAAM,aAAa,CAAC;YACtD,QAAQ,EAAE,KAAK,CAAC,QAAQ;
|
|
1
|
+
{"version":3,"file":"7c-rules-merge.js","sourceRoot":"","sources":["../../../src/init/phases/7c-rules-merge.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EACL,aAAa,GAEd,MAAM,yBAAyB,CAAC;AACjC,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAC9D,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAGjD,MAAM,CAAC,KAAK,UAAU,oBAAoB,CAAC,KAAiB;IAC1D,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IAC7B,IAAI,CAAC;QACH,MAAM,MAAM,GAAwB,MAAM,aAAa,CAAC;YACtD,QAAQ,EAAE,KAAK,CAAC,QAAQ;YACxB,iBAAiB,EAAE,CAAC,GAAG,EAAE,EAAE,CACzB,aAAa,CAAC,KAAK,CAAC,QAAQ,EAAE;gBAC5B,KAAK,EAAE,gBAAgB;gBACvB,KAAK,EAAE,GAAG,CAAC,KAAK;gBAChB,KAAK,EAAE,GAAG,CAAC,KAAK;gBAChB,SAAS;aACV,CAAC;SACL,CAAC,CAAC;QACH,aAAa,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;QAC9B,MAAM,IAAI,GAAe;YACvB,GAAG,KAAK;YACR,OAAO,EAAE,EAAE,GAAG,KAAK,CAAC,OAAO,EAAE,gBAAgB,EAAE,MAAM,EAAE;SACxD,CAAC;QACF,OAAO;YACL,MAAM,EAAE,UAAU;YAClB,SAAS,EAAE,YAAY;YACvB,KAAK,EAAE,YAAY,CAAC,IAAI,CAAC;SAC1B,CAAC;IACJ,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,aAAa,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;QAC9B,OAAO;YACL,MAAM,EAAE,OAAO;YACf,KAAK,EAAE;gBACL,IAAI,EAAE,oBAAoB;gBAC1B,OAAO,EAAE,oBAAoB;gBAC7B,MAAM,EAAE,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,IAAI,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC;aACtE;YACD,KAAK;SACN,CAAC;IACJ,CAAC;AACH,CAAC"}
|
|
@@ -14,3 +14,5 @@ export { runPhase7cRulesMerge } from "./7c-rules-merge.js";
|
|
|
14
14
|
export { runPhase8Baseline } from "./8-baseline.js";
|
|
15
15
|
export { runPhase10Strip } from "./10-strip.js";
|
|
16
16
|
export { runPhase12Multidev } from "./12-multidev.js";
|
|
17
|
+
export { runPhases678Parallel } from "./parallel-678.js";
|
|
18
|
+
export { SOURCE_COMMENTS_WALK_PATH, sourceCommentsWalkAbsPath, readSourceCommentsWalkFile, writeSourceCommentsWalkFile, to7bResultPersisted, type IngestSourceCommentsResultPersisted, } from "./source-comments-output-io.js";
|
|
@@ -14,4 +14,6 @@ export { runPhase7cRulesMerge } from "./7c-rules-merge.js";
|
|
|
14
14
|
export { runPhase8Baseline } from "./8-baseline.js";
|
|
15
15
|
export { runPhase10Strip } from "./10-strip.js";
|
|
16
16
|
export { runPhase12Multidev } from "./12-multidev.js";
|
|
17
|
+
export { runPhases678Parallel } from "./parallel-678.js";
|
|
18
|
+
export { SOURCE_COMMENTS_WALK_PATH, sourceCommentsWalkAbsPath, readSourceCommentsWalkFile, writeSourceCommentsWalkFile, to7bResultPersisted, } from "./source-comments-output-io.js";
|
|
17
19
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/init/phases/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,SAAS,GASV,MAAM,YAAY,CAAC;AAEpB,OAAO,EACL,eAAe,EACf,iBAAiB,EACjB,cAAc,EACd,eAAe,EACf,eAAe,GAChB,MAAM,eAAe,CAAC;AAEvB,OAAO,EACL,kBAAkB,EAClB,mBAAmB,EACnB,oBAAoB,EACpB,qBAAqB,EACrB,uBAAuB,GAExB,MAAM,uBAAuB,CAAC;AAE/B,OAAO,EACL,eAAe,EACf,YAAY,EACZ,cAAc,EACd,YAAY,GACb,MAAM,mBAAmB,CAAC;AAE3B,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAChD,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAChD,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAChD,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAC9C,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAC9C,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAC9C,OAAO,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AACzD,OAAO,EAAE,wBAAwB,EAAE,MAAM,yBAAyB,CAAC;AACnE,OAAO,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAC3D,OAAO,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AACpD,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAChD,OAAO,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/init/phases/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,SAAS,GASV,MAAM,YAAY,CAAC;AAEpB,OAAO,EACL,eAAe,EACf,iBAAiB,EACjB,cAAc,EACd,eAAe,EACf,eAAe,GAChB,MAAM,eAAe,CAAC;AAEvB,OAAO,EACL,kBAAkB,EAClB,mBAAmB,EACnB,oBAAoB,EACpB,qBAAqB,EACrB,uBAAuB,GAExB,MAAM,uBAAuB,CAAC;AAE/B,OAAO,EACL,eAAe,EACf,YAAY,EACZ,cAAc,EACd,YAAY,GACb,MAAM,mBAAmB,CAAC;AAE3B,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAChD,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAChD,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAChD,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAC9C,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAC9C,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAC9C,OAAO,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AACzD,OAAO,EAAE,wBAAwB,EAAE,MAAM,yBAAyB,CAAC;AACnE,OAAO,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAC3D,OAAO,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AACpD,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAChD,OAAO,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AACtD,OAAO,EAAE,oBAAoB,EAAE,MAAM,mBAAmB,CAAC;AAEzD,OAAO,EACL,yBAAyB,EACzB,yBAAyB,EACzB,0BAA0B,EAC1B,2BAA2B,EAC3B,mBAAmB,GAEpB,MAAM,gCAAgC,CAAC"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Phases 6 / 7b / 7c parallel orchestrator.
|
|
3
|
+
*
|
|
4
|
+
* The three post-pilot ingestion phases (docs-ingest, source-comments,
|
|
5
|
+
* rules-merge) are each I/O-bound on Haiku; running them sequentially
|
|
6
|
+
* adds the smaller two phases' wall-clock to the long 7b run for no
|
|
7
|
+
* good reason. This runner fires all three concurrently inside a single
|
|
8
|
+
* MCP call.
|
|
9
|
+
*
|
|
10
|
+
* Concurrency-safety:
|
|
11
|
+
* - DEC + INV id allocators race-free via shared `Set<string>` threads
|
|
12
|
+
* (each phase's allocation loop is sync within JS turn boundaries,
|
|
13
|
+
* so mutations to the shared Set are atomic per turn). The pre-scan
|
|
14
|
+
* happens once, here; phases mutate the Set as they allocate.
|
|
15
|
+
* - Filesystem mutations are non-overlapping by design: phase 6 writes
|
|
16
|
+
* to `decisions/_inbox/`, phase 7b writes to `decisions/_inbox/` +
|
|
17
|
+
* `invariants/` + applies strip-replace to source, phase 7c writes
|
|
18
|
+
* to `decisions/_inbox/`. Different filenames per phase (DEC ids
|
|
19
|
+
* are unique across the shared Set), so no race.
|
|
20
|
+
* - Ledger rebuilds: only 7b rebuilds the invariants ledger; the
|
|
21
|
+
* decisions ledger is rebuilt later by `bulkAcceptObvious`. Safe.
|
|
22
|
+
*
|
|
23
|
+
* State machine:
|
|
24
|
+
* - The runner enters expecting `currentPhase === "6-docs-ingest"` and
|
|
25
|
+
* exits with `currentPhase === "8-baseline"`, jumping past the
|
|
26
|
+
* individual 7b / 7c slots in PHASE_IDS. The sequential per-phase
|
|
27
|
+
* MCP tools remain available; this runner is the optimized path the
|
|
28
|
+
* adopt skill prefers.
|
|
29
|
+
*/
|
|
30
|
+
import type { PhaseResult, PhaseState } from "./types.js";
|
|
31
|
+
export declare function runPhases678Parallel(state: PhaseState): Promise<PhaseResult>;
|
|
@@ -0,0 +1,205 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Phases 6 / 7b / 7c parallel orchestrator.
|
|
3
|
+
*
|
|
4
|
+
* The three post-pilot ingestion phases (docs-ingest, source-comments,
|
|
5
|
+
* rules-merge) are each I/O-bound on Haiku; running them sequentially
|
|
6
|
+
* adds the smaller two phases' wall-clock to the long 7b run for no
|
|
7
|
+
* good reason. This runner fires all three concurrently inside a single
|
|
8
|
+
* MCP call.
|
|
9
|
+
*
|
|
10
|
+
* Concurrency-safety:
|
|
11
|
+
* - DEC + INV id allocators race-free via shared `Set<string>` threads
|
|
12
|
+
* (each phase's allocation loop is sync within JS turn boundaries,
|
|
13
|
+
* so mutations to the shared Set are atomic per turn). The pre-scan
|
|
14
|
+
* happens once, here; phases mutate the Set as they allocate.
|
|
15
|
+
* - Filesystem mutations are non-overlapping by design: phase 6 writes
|
|
16
|
+
* to `decisions/_inbox/`, phase 7b writes to `decisions/_inbox/` +
|
|
17
|
+
* `invariants/` + applies strip-replace to source, phase 7c writes
|
|
18
|
+
* to `decisions/_inbox/`. Different filenames per phase (DEC ids
|
|
19
|
+
* are unique across the shared Set), so no race.
|
|
20
|
+
* - Ledger rebuilds: only 7b rebuilds the invariants ledger; the
|
|
21
|
+
* decisions ledger is rebuilt later by `bulkAcceptObvious`. Safe.
|
|
22
|
+
*
|
|
23
|
+
* State machine:
|
|
24
|
+
* - The runner enters expecting `currentPhase === "6-docs-ingest"` and
|
|
25
|
+
* exits with `currentPhase === "8-baseline"`, jumping past the
|
|
26
|
+
* individual 7b / 7c slots in PHASE_IDS. The sequential per-phase
|
|
27
|
+
* MCP tools remain available; this runner is the optimized path the
|
|
28
|
+
* adopt skill prefers.
|
|
29
|
+
*/
|
|
30
|
+
import { scanExistingDecisionIds, scanExistingInvariantIds, } from "../../decision-capture/id.js";
|
|
31
|
+
import { logger } from "../../logger.js";
|
|
32
|
+
import { runDocsIngestion } from "../ingest-docs.js";
|
|
33
|
+
import { clearProgress, writeProgress } from "../progress.js";
|
|
34
|
+
import { runRulesMerge } from "../rules-merge/index.js";
|
|
35
|
+
import { runSourceCommentsIngestion } from "../source-comments/index.js";
|
|
36
|
+
import { to7bResultPersisted, writeSourceCommentsWalkFile, } from "./source-comments-output-io.js";
|
|
37
|
+
import { advancePhase } from "./orchestrator.js";
|
|
38
|
+
const log = logger("init.phases.parallel-678");
|
|
39
|
+
export async function runPhases678Parallel(state) {
|
|
40
|
+
// Sanity: this runner only enters at the start of the 6 / 7b / 7c
|
|
41
|
+
// window. If currentPhase is anywhere else, the caller invoked the
|
|
42
|
+
// wrong tool — surface as error so we don't mid-pipeline jump.
|
|
43
|
+
if (state.currentPhase !== "6-docs-ingest") {
|
|
44
|
+
return {
|
|
45
|
+
status: "error",
|
|
46
|
+
error: {
|
|
47
|
+
code: "wrong-phase",
|
|
48
|
+
message: `runPhases678Parallel requires currentPhase=6-docs-ingest, got ${state.currentPhase}`,
|
|
49
|
+
},
|
|
50
|
+
state,
|
|
51
|
+
};
|
|
52
|
+
}
|
|
53
|
+
const mapper = state.outputs["3-mapper"];
|
|
54
|
+
const globs = mapper
|
|
55
|
+
? {
|
|
56
|
+
route_handler_globs: mapper.output.route_handler_globs,
|
|
57
|
+
dto_globs: mapper.output.dto_globs,
|
|
58
|
+
generator_source_globs: mapper.output.generator_source_globs,
|
|
59
|
+
high_stakes_globs: mapper.output.high_stakes_globs,
|
|
60
|
+
off_limits: mapper.output.off_limits_globs,
|
|
61
|
+
}
|
|
62
|
+
: {};
|
|
63
|
+
const pilotOut = state.outputs["4-pilot"];
|
|
64
|
+
const pilotModule = typeof pilotOut?.picked === "string" && pilotOut.picked.length > 0
|
|
65
|
+
? pilotOut.picked
|
|
66
|
+
: undefined;
|
|
67
|
+
const sharedDecIds = scanExistingDecisionIds(state.repoRoot);
|
|
68
|
+
const sharedInvIds = scanExistingInvariantIds(state.repoRoot);
|
|
69
|
+
log.info({
|
|
70
|
+
preScannedDecIds: sharedDecIds.size,
|
|
71
|
+
preScannedInvIds: sharedInvIds.size,
|
|
72
|
+
}, "parallel-678 starting");
|
|
73
|
+
// Fire all three phases. Each phase's loop is synchronous between
|
|
74
|
+
// await points, so shared-Set mutations stay atomic per JS turn.
|
|
75
|
+
// The 7b heartbeat dominates statusline output (it runs longest), but
|
|
76
|
+
// 6 and 7c also write progress so the operator sees motion across
|
|
77
|
+
// all three.
|
|
78
|
+
const t0 = performance.now();
|
|
79
|
+
const startedAt = Date.now();
|
|
80
|
+
const settled = await Promise.allSettled([
|
|
81
|
+
runDocsIngestion({
|
|
82
|
+
repoRoot: state.repoRoot,
|
|
83
|
+
existingDecIds: sharedDecIds,
|
|
84
|
+
onGroupProgress: (row) => writeProgress(state.repoRoot, {
|
|
85
|
+
phase: "6-docs-ingest",
|
|
86
|
+
batch: row.total > 0 ? row.total : 1,
|
|
87
|
+
total: row.total,
|
|
88
|
+
startedAt,
|
|
89
|
+
}),
|
|
90
|
+
}),
|
|
91
|
+
runSourceCommentsIngestion({
|
|
92
|
+
repoRoot: state.repoRoot,
|
|
93
|
+
globs,
|
|
94
|
+
...(pilotModule !== undefined ? { pilotModule } : {}),
|
|
95
|
+
existingDecIds: sharedDecIds,
|
|
96
|
+
existingInvIds: sharedInvIds,
|
|
97
|
+
onBatchProgress: (row) => writeProgress(state.repoRoot, {
|
|
98
|
+
phase: "7b-source-comments",
|
|
99
|
+
batch: row.index + 1,
|
|
100
|
+
total: row.total,
|
|
101
|
+
classified: row.classified,
|
|
102
|
+
failed: row.failed,
|
|
103
|
+
startedAt,
|
|
104
|
+
}),
|
|
105
|
+
}),
|
|
106
|
+
runRulesMerge({
|
|
107
|
+
repoRoot: state.repoRoot,
|
|
108
|
+
existingDecIds: sharedDecIds,
|
|
109
|
+
onSectionProgress: (row) => writeProgress(state.repoRoot, {
|
|
110
|
+
phase: "7c-rules-merge",
|
|
111
|
+
batch: row.index,
|
|
112
|
+
total: row.total,
|
|
113
|
+
startedAt,
|
|
114
|
+
}),
|
|
115
|
+
}),
|
|
116
|
+
]);
|
|
117
|
+
const durationMs = Math.round(performance.now() - t0);
|
|
118
|
+
clearProgress(state.repoRoot);
|
|
119
|
+
const [docsRes, srcRes, rulesRes] = settled;
|
|
120
|
+
// Any phase failure = whole-block failure. Surface the first error so
|
|
121
|
+
// the operator knows which Haiku batch died and can `/exit` + resume.
|
|
122
|
+
if (docsRes.status !== "fulfilled") {
|
|
123
|
+
return {
|
|
124
|
+
status: "error",
|
|
125
|
+
error: {
|
|
126
|
+
code: "docs-ingest-failed",
|
|
127
|
+
message: "Docs ingestion failed in parallel pipeline",
|
|
128
|
+
detail: docsRes.reason instanceof Error
|
|
129
|
+
? docsRes.reason.stack ?? docsRes.reason.message
|
|
130
|
+
: String(docsRes.reason),
|
|
131
|
+
},
|
|
132
|
+
state,
|
|
133
|
+
};
|
|
134
|
+
}
|
|
135
|
+
if (srcRes.status !== "fulfilled") {
|
|
136
|
+
return {
|
|
137
|
+
status: "error",
|
|
138
|
+
error: {
|
|
139
|
+
code: "source-comments-failed",
|
|
140
|
+
message: "Source-comment ingestion failed in parallel pipeline",
|
|
141
|
+
detail: srcRes.reason instanceof Error
|
|
142
|
+
? srcRes.reason.stack ?? srcRes.reason.message
|
|
143
|
+
: String(srcRes.reason),
|
|
144
|
+
},
|
|
145
|
+
state,
|
|
146
|
+
};
|
|
147
|
+
}
|
|
148
|
+
if (rulesRes.status !== "fulfilled") {
|
|
149
|
+
return {
|
|
150
|
+
status: "error",
|
|
151
|
+
error: {
|
|
152
|
+
code: "rules-merge-failed",
|
|
153
|
+
message: "Rules merge failed in parallel pipeline",
|
|
154
|
+
detail: rulesRes.reason instanceof Error
|
|
155
|
+
? rulesRes.reason.stack ?? rulesRes.reason.message
|
|
156
|
+
: String(rulesRes.reason),
|
|
157
|
+
},
|
|
158
|
+
state,
|
|
159
|
+
};
|
|
160
|
+
}
|
|
161
|
+
writeSourceCommentsWalkFile(state.repoRoot, srcRes.value);
|
|
162
|
+
const persistedSrc = to7bResultPersisted(srcRes.value);
|
|
163
|
+
const outputs = {
|
|
164
|
+
"6-docs-ingest": docsRes.value,
|
|
165
|
+
"7b-source-comments": persistedSrc,
|
|
166
|
+
"7c-rules-merge": rulesRes.value,
|
|
167
|
+
};
|
|
168
|
+
// Advance the state machine all the way past 7c so the next phase
|
|
169
|
+
// tool the skill calls is 8-baseline.
|
|
170
|
+
let next = {
|
|
171
|
+
...state,
|
|
172
|
+
outputs: {
|
|
173
|
+
...state.outputs,
|
|
174
|
+
...outputs,
|
|
175
|
+
},
|
|
176
|
+
};
|
|
177
|
+
const skipTargets = ["6-docs-ingest", "7b-source-comments", "7c-rules-merge"];
|
|
178
|
+
for (const _ of skipTargets) {
|
|
179
|
+
next = advancePhase(next);
|
|
180
|
+
}
|
|
181
|
+
// Stamp aggregate duration for ETA-audit telemetry.
|
|
182
|
+
for (const id of skipTargets) {
|
|
183
|
+
const out = next.outputs[id];
|
|
184
|
+
if (typeof out === "object" && out !== null) {
|
|
185
|
+
const obj = out;
|
|
186
|
+
if (obj["duration_ms"] === undefined) {
|
|
187
|
+
// Approximate per-phase duration via the wall-clock divided
|
|
188
|
+
// among the three phases — until each ingest function reports
|
|
189
|
+
// its own duration, this is the best we can do.
|
|
190
|
+
obj["duration_ms"] = durationMs;
|
|
191
|
+
}
|
|
192
|
+
}
|
|
193
|
+
}
|
|
194
|
+
log.info({
|
|
195
|
+
durationMs,
|
|
196
|
+
decsAfter: sharedDecIds.size,
|
|
197
|
+
invsAfter: sharedInvIds.size,
|
|
198
|
+
}, "parallel-678 complete");
|
|
199
|
+
return {
|
|
200
|
+
status: "complete",
|
|
201
|
+
nextPhase: next.currentPhase,
|
|
202
|
+
state: next,
|
|
203
|
+
};
|
|
204
|
+
}
|
|
205
|
+
//# sourceMappingURL=parallel-678.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"parallel-678.js","sourceRoot":"","sources":["../../../src/init/phases/parallel-678.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Side-file persistence for the heavy Phase 7b output.
|
|
3
|
+
*
|
|
4
|
+
* `IngestSourceCommentsResult` carries the full walk (every comment block's
|
|
5
|
+
* raw text + prose) and the matching classifications. On a busy monorepo
|
|
6
|
+
* this crosses ~1.7 MB — far above what the MCP transport can echo back
|
|
7
|
+
* in a tool result. Mirrors the v0.3.5 mapper-output spillover: write the
|
|
8
|
+
* full payload to `.cairn/init/source-comments-walk.json` and persist a
|
|
9
|
+
* lightweight projection (counts, paths, ledger-relevant lists) into
|
|
10
|
+
* `init-state.json`.
|
|
11
|
+
*
|
|
12
|
+
* Downstream phases consume only the lightweight projection — the
|
|
13
|
+
* heavy walk + per-block classifications already live in
|
|
14
|
+
* `.cairn/baseline/source-comments-<ISO>.yaml` (the audit YAML), which
|
|
15
|
+
* the strip-replace stage and any later debug tools already read.
|
|
16
|
+
*/
|
|
17
|
+
import type { IngestSourceCommentsResult } from "../source-comments/index.js";
|
|
18
|
+
import type { CommentClassKind } from "../source-comments/classify.js";
|
|
19
|
+
/** Filename relative to repoRoot. */
|
|
20
|
+
export declare const SOURCE_COMMENTS_WALK_PATH: string;
|
|
21
|
+
export declare function sourceCommentsWalkAbsPath(repoRoot: string): string;
|
|
22
|
+
/**
|
|
23
|
+
* Atomically write the full Phase 7b result. Creates `.cairn/init/`
|
|
24
|
+
* if needed.
|
|
25
|
+
*/
|
|
26
|
+
export declare function writeSourceCommentsWalkFile(repoRoot: string, full: IngestSourceCommentsResult): string;
|
|
27
|
+
/**
|
|
28
|
+
* Read the full Phase 7b result from `.cairn/init/source-comments-walk.json`.
|
|
29
|
+
* Returns null if missing or unreadable. Available for debug tooling and
|
|
30
|
+
* post-hoc inspection — phase consumers prefer the lightweight projection
|
|
31
|
+
* stored on state.
|
|
32
|
+
*/
|
|
33
|
+
export declare function readSourceCommentsWalkFile(repoRoot: string): IngestSourceCommentsResult | null;
|
|
34
|
+
/**
|
|
35
|
+
* Lightweight projection persisted into `init-state.json` outputs. Drops
|
|
36
|
+
* `walk.blocks` and `classifications` (the heavy fields); keeps ledger /
|
|
37
|
+
* triage references that downstream phases + the cairn-adopt summary
|
|
38
|
+
* skill query directly.
|
|
39
|
+
*/
|
|
40
|
+
export interface IngestSourceCommentsResultPersisted {
|
|
41
|
+
/** Repo-relative path to the spilled full result, or null when not written. */
|
|
42
|
+
walkPath: string;
|
|
43
|
+
walkSummary: {
|
|
44
|
+
files: number;
|
|
45
|
+
blocks: number;
|
|
46
|
+
bytesScanned: number;
|
|
47
|
+
fileCountByLang: Record<string, number>;
|
|
48
|
+
filesAvailable: number;
|
|
49
|
+
truncatedAtFileCap: boolean;
|
|
50
|
+
};
|
|
51
|
+
decDraftsWritten: {
|
|
52
|
+
id: string;
|
|
53
|
+
path: string;
|
|
54
|
+
sourceFile: string;
|
|
55
|
+
}[];
|
|
56
|
+
invariantsWritten: {
|
|
57
|
+
id: string;
|
|
58
|
+
path: string;
|
|
59
|
+
sourceFile: string;
|
|
60
|
+
}[];
|
|
61
|
+
invariantStripFilesModified: number;
|
|
62
|
+
invariantStripItemsApplied: number;
|
|
63
|
+
invariantStripItemsSkipped: number;
|
|
64
|
+
invariantStripError: string | null;
|
|
65
|
+
invariantProposalsAdded: number;
|
|
66
|
+
canonicalCitationsAdded: number;
|
|
67
|
+
auditPath: string;
|
|
68
|
+
auditRelPath: string;
|
|
69
|
+
invariantProposalsPath: string | null;
|
|
70
|
+
canonicalCitationsPath: string | null;
|
|
71
|
+
inputTokens: number;
|
|
72
|
+
outputTokens: number;
|
|
73
|
+
batchesRun: number;
|
|
74
|
+
batchesFailed: number;
|
|
75
|
+
kindCounts: Record<CommentClassKind, number>;
|
|
76
|
+
}
|
|
77
|
+
/** Strip the heavy fields from a fresh ingest result for state persistence. */
|
|
78
|
+
export declare function to7bResultPersisted(full: IngestSourceCommentsResult): IngestSourceCommentsResultPersisted;
|