@isaacriehm/cairn-core 0.3.8 → 0.4.0

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.
Files changed (92) hide show
  1. package/dist/.tsbuildinfo +1 -1
  2. package/dist/attention/bulk-accept.d.ts +18 -0
  3. package/dist/attention/bulk-accept.js +46 -0
  4. package/dist/attention/bulk-accept.js.map +1 -1
  5. package/dist/attention/dedup.d.ts +68 -0
  6. package/dist/attention/dedup.js +239 -0
  7. package/dist/attention/dedup.js.map +1 -0
  8. package/dist/attention/index.d.ts +3 -0
  9. package/dist/attention/index.js +3 -0
  10. package/dist/attention/index.js.map +1 -1
  11. package/dist/attention/restore.d.ts +43 -0
  12. package/dist/attention/restore.js +127 -0
  13. package/dist/attention/restore.js.map +1 -0
  14. package/dist/attention/source-strip.d.ts +49 -0
  15. package/dist/attention/source-strip.js +340 -0
  16. package/dist/attention/source-strip.js.map +1 -0
  17. package/dist/claude/cache.d.ts +31 -0
  18. package/dist/claude/cache.js +0 -0
  19. package/dist/claude/cache.js.map +1 -0
  20. package/dist/claude/error.d.ts +1 -1
  21. package/dist/claude/error.js +5 -0
  22. package/dist/claude/error.js.map +1 -1
  23. package/dist/claude/runner.js +60 -3
  24. package/dist/claude/runner.js.map +1 -1
  25. package/dist/claude/types.d.ts +25 -0
  26. package/dist/hooks/runners/session-start.js +24 -2
  27. package/dist/hooks/runners/session-start.js.map +1 -1
  28. package/dist/init/baseline-audit.d.ts +8 -0
  29. package/dist/init/baseline-audit.js +1 -1
  30. package/dist/init/baseline-audit.js.map +1 -1
  31. package/dist/init/brand-derive.js +53 -34
  32. package/dist/init/brand-derive.js.map +1 -1
  33. package/dist/init/index.d.ts +4 -2
  34. package/dist/init/index.js +3 -1
  35. package/dist/init/index.js.map +1 -1
  36. package/dist/init/ingest-docs.d.ts +7 -0
  37. package/dist/init/ingest-docs.js +4 -1
  38. package/dist/init/ingest-docs.js.map +1 -1
  39. package/dist/init/mapper-merge.js +1 -0
  40. package/dist/init/mapper-merge.js.map +1 -1
  41. package/dist/init/phases/3-mapper.js +18 -0
  42. package/dist/init/phases/3-mapper.js.map +1 -1
  43. package/dist/init/phases/5-brand.js +3 -0
  44. package/dist/init/phases/5-brand.js.map +1 -1
  45. package/dist/init/phases/6-docs-ingest.js +14 -0
  46. package/dist/init/phases/6-docs-ingest.js.map +1 -1
  47. package/dist/init/phases/7b-source-comments.d.ts +9 -0
  48. package/dist/init/phases/7b-source-comments.js +41 -1
  49. package/dist/init/phases/7b-source-comments.js.map +1 -1
  50. package/dist/init/phases/7c-rules-merge.js +10 -0
  51. package/dist/init/phases/7c-rules-merge.js.map +1 -1
  52. package/dist/init/phases/index.d.ts +2 -0
  53. package/dist/init/phases/index.js +2 -0
  54. package/dist/init/phases/index.js.map +1 -1
  55. package/dist/init/phases/parallel-678.d.ts +31 -0
  56. package/dist/init/phases/parallel-678.js +205 -0
  57. package/dist/init/phases/parallel-678.js.map +1 -0
  58. package/dist/init/phases/source-comments-output-io.d.ts +78 -0
  59. package/dist/init/phases/source-comments-output-io.js +84 -0
  60. package/dist/init/phases/source-comments-output-io.js.map +1 -0
  61. package/dist/init/progress.d.ts +35 -0
  62. package/dist/init/progress.js +71 -0
  63. package/dist/init/progress.js.map +1 -0
  64. package/dist/init/rules-merge/ingest.d.ts +14 -0
  65. package/dist/init/rules-merge/ingest.js +8 -2
  66. package/dist/init/rules-merge/ingest.js.map +1 -1
  67. package/dist/init/source-comments/classify.d.ts +6 -0
  68. package/dist/init/source-comments/classify.js +60 -3
  69. package/dist/init/source-comments/classify.js.map +1 -1
  70. package/dist/init/source-comments/ingest.d.ts +21 -0
  71. package/dist/init/source-comments/ingest.js +28 -3
  72. package/dist/init/source-comments/ingest.js.map +1 -1
  73. package/dist/mcp/tools/attention-dedup.d.ts +21 -0
  74. package/dist/mcp/tools/attention-dedup.js +34 -0
  75. package/dist/mcp/tools/attention-dedup.js.map +1 -0
  76. package/dist/mcp/tools/attention-restore.d.ts +14 -0
  77. package/dist/mcp/tools/attention-restore.js +22 -0
  78. package/dist/mcp/tools/attention-restore.js.map +1 -0
  79. package/dist/mcp/tools/index.js +6 -1
  80. package/dist/mcp/tools/index.js.map +1 -1
  81. package/dist/mcp/tools/init-phases.d.ts +1 -0
  82. package/dist/mcp/tools/init-phases.js +88 -1
  83. package/dist/mcp/tools/init-phases.js.map +1 -1
  84. package/dist/mcp/tools/resolve-attention.js +44 -141
  85. package/dist/mcp/tools/resolve-attention.js.map +1 -1
  86. package/dist/status-line/format.d.ts +4 -1
  87. package/dist/status-line/format.js +26 -3
  88. package/dist/status-line/format.js.map +1 -1
  89. package/dist/status-line/reader.js +25 -1
  90. package/dist/status-line/reader.js.map +1 -1
  91. package/package.json +1 -1
  92. 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;AAG5D,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,IAAI,CAAC;QACH,MAAM,MAAM,GAAiB,MAAM,SAAS,CAAC;YAC3C,SAAS;YACT,OAAO;YACP,QAAQ,EAAE,KAAK,CAAC,QAAQ;SACzB,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,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,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"}
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":"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"}
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;SACzB,CAAC,CAAC;QACH,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,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
+ {"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": result },
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;;;GAGG;AAEH,OAAO,EACL,0BAA0B,GAE3B,MAAM,6BAA6B,CAAC;AACrC,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAGjD,MAAM,CAAC,KAAK,UAAU,wBAAwB,CAAC,KAAiB;IAC9D,IAAI,CAAC;QACH,MAAM,MAAM,GAA+B,MAAM,0BAA0B,CAAC;YAC1E,QAAQ,EAAE,KAAK,CAAC,QAAQ;SACzB,CAAC,CAAC;QACH,MAAM,IAAI,GAAe;YACvB,GAAG,KAAK;YACR,OAAO,EAAE,EAAE,GAAG,KAAK,CAAC,OAAO,EAAE,oBAAoB,EAAE,MAAM,EAAE;SAC5D,CAAC;QACF,OAAO;YACL,MAAM,EAAE,UAAU;YAClB,SAAS,EAAE,gBAAgB;YAC3B,KAAK,EAAE,YAAY,CAAC,IAAI,CAAC;SAC1B,CAAC;IACJ,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO;YACL,MAAM,EAAE,OAAO;YACf,KAAK,EAAE;gBACL,IAAI,EAAE,wBAAwB;gBAC9B,OAAO,EAAE,iCAAiC;gBAC1C,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
+ {"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;SACzB,CAAC,CAAC;QACH,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,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"}
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":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AAEH,OAAO,EACL,uBAAuB,EACvB,wBAAwB,GACzB,MAAM,8BAA8B,CAAC;AACtC,OAAO,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAC;AACzC,OAAO,EAAE,gBAAgB,EAAwB,MAAM,mBAAmB,CAAC;AAC3E,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAC9D,OAAO,EAAE,aAAa,EAA4B,MAAM,yBAAyB,CAAC;AAClF,OAAO,EAAE,0BAA0B,EAAE,MAAM,6BAA6B,CAAC;AAGzE,OAAO,EACL,mBAAmB,EACnB,2BAA2B,GAE5B,MAAM,gCAAgC,CAAC;AACxC,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAGjD,MAAM,GAAG,GAAG,MAAM,CAAC,0BAA0B,CAAC,CAAC;AAQ/C,MAAM,CAAC,KAAK,UAAU,oBAAoB,CACxC,KAAiB;IAEjB,kEAAkE;IAClE,mEAAmE;IACnE,+DAA+D;IAC/D,IAAI,KAAK,CAAC,YAAY,KAAK,eAAe,EAAE,CAAC;QAC3C,OAAO;YACL,MAAM,EAAE,OAAO;YACf,KAAK,EAAE;gBACL,IAAI,EAAE,aAAa;gBACnB,OAAO,EAAE,iEAAiE,KAAK,CAAC,YAAY,EAAE;aAC/F;YACD,KAAK;SACN,CAAC;IACJ,CAAC;IAED,MAAM,MAAM,GAAG,KAAK,CAAC,OAAO,CAAC,UAAU,CAAsC,CAAC;IAC9E,MAAM,KAAK,GAAiB,MAAM;QAChC,CAAC,CAAC;YACE,mBAAmB,EAAE,MAAM,CAAC,MAAM,CAAC,mBAAmB;YACtD,SAAS,EAAE,MAAM,CAAC,MAAM,CAAC,SAAS;YAClC,sBAAsB,EAAE,MAAM,CAAC,MAAM,CAAC,sBAAsB;YAC5D,iBAAiB,EAAE,MAAM,CAAC,MAAM,CAAC,iBAAiB;YAClD,UAAU,EAAE,MAAM,CAAC,MAAM,CAAC,gBAAgB;SAC3C;QACH,CAAC,CAAC,EAAE,CAAC;IACP,MAAM,QAAQ,GAAG,KAAK,CAAC,OAAO,CAAC,SAAS,CAAoC,CAAC;IAC7E,MAAM,WAAW,GACf,OAAO,QAAQ,EAAE,MAAM,KAAK,QAAQ,IAAI,QAAQ,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC;QAChE,CAAC,CAAC,QAAQ,CAAC,MAAM;QACjB,CAAC,CAAC,SAAS,CAAC;IAEhB,MAAM,YAAY,GAAG,uBAAuB,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;IAC7D,MAAM,YAAY,GAAG,wBAAwB,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;IAE9D,GAAG,CAAC,IAAI,CACN;QACE,gBAAgB,EAAE,YAAY,CAAC,IAAI;QACnC,gBAAgB,EAAE,YAAY,CAAC,IAAI;KACpC,EACD,uBAAuB,CACxB,CAAC;IAEF,kEAAkE;IAClE,iEAAiE;IACjE,sEAAsE;IACtE,kEAAkE;IAClE,aAAa;IACb,MAAM,EAAE,GAAG,WAAW,CAAC,GAAG,EAAE,CAAC;IAC7B,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IAC7B,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,UAAU,CAAC;QACvC,gBAAgB,CAAC;YACf,QAAQ,EAAE,KAAK,CAAC,QAAQ;YACxB,cAAc,EAAE,YAAY;YAC5B,eAAe,EAAE,CAAC,GAAG,EAAE,EAAE,CACvB,aAAa,CAAC,KAAK,CAAC,QAAQ,EAAE;gBAC5B,KAAK,EAAE,eAAe;gBACtB,KAAK,EAAE,GAAG,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;gBACpC,KAAK,EAAE,GAAG,CAAC,KAAK;gBAChB,SAAS;aACV,CAAC;SACL,CAAC;QACF,0BAA0B,CAAC;YACzB,QAAQ,EAAE,KAAK,CAAC,QAAQ;YACxB,KAAK;YACL,GAAG,CAAC,WAAW,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YACrD,cAAc,EAAE,YAAY;YAC5B,cAAc,EAAE,YAAY;YAC5B,eAAe,EAAE,CAAC,GAAG,EAAE,EAAE,CACvB,aAAa,CAAC,KAAK,CAAC,QAAQ,EAAE;gBAC5B,KAAK,EAAE,oBAAoB;gBAC3B,KAAK,EAAE,GAAG,CAAC,KAAK,GAAG,CAAC;gBACpB,KAAK,EAAE,GAAG,CAAC,KAAK;gBAChB,UAAU,EAAE,GAAG,CAAC,UAAU;gBAC1B,MAAM,EAAE,GAAG,CAAC,MAAM;gBAClB,SAAS;aACV,CAAC;SACL,CAAC;QACF,aAAa,CAAC;YACZ,QAAQ,EAAE,KAAK,CAAC,QAAQ;YACxB,cAAc,EAAE,YAAY;YAC5B,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;KACH,CAAC,CAAC;IACH,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC;IACtD,aAAa,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;IAE9B,MAAM,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,CAAC,GAAG,OAAO,CAAC;IAE5C,sEAAsE;IACtE,sEAAsE;IACtE,IAAI,OAAO,CAAC,MAAM,KAAK,WAAW,EAAE,CAAC;QACnC,OAAO;YACL,MAAM,EAAE,OAAO;YACf,KAAK,EAAE;gBACL,IAAI,EAAE,oBAAoB;gBAC1B,OAAO,EAAE,4CAA4C;gBACrD,MAAM,EACJ,OAAO,CAAC,MAAM,YAAY,KAAK;oBAC7B,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,IAAI,OAAO,CAAC,MAAM,CAAC,OAAO;oBAChD,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC;aAC7B;YACD,KAAK;SACN,CAAC;IACJ,CAAC;IACD,IAAI,MAAM,CAAC,MAAM,KAAK,WAAW,EAAE,CAAC;QAClC,OAAO;YACL,MAAM,EAAE,OAAO;YACf,KAAK,EAAE;gBACL,IAAI,EAAE,wBAAwB;gBAC9B,OAAO,EAAE,sDAAsD;gBAC/D,MAAM,EACJ,MAAM,CAAC,MAAM,YAAY,KAAK;oBAC5B,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,IAAI,MAAM,CAAC,MAAM,CAAC,OAAO;oBAC9C,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC;aAC5B;YACD,KAAK;SACN,CAAC;IACJ,CAAC;IACD,IAAI,QAAQ,CAAC,MAAM,KAAK,WAAW,EAAE,CAAC;QACpC,OAAO;YACL,MAAM,EAAE,OAAO;YACf,KAAK,EAAE;gBACL,IAAI,EAAE,oBAAoB;gBAC1B,OAAO,EAAE,yCAAyC;gBAClD,MAAM,EACJ,QAAQ,CAAC,MAAM,YAAY,KAAK;oBAC9B,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,KAAK,IAAI,QAAQ,CAAC,MAAM,CAAC,OAAO;oBAClD,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC;aAC9B;YACD,KAAK;SACN,CAAC;IACJ,CAAC;IAED,2BAA2B,CAAC,KAAK,CAAC,QAAQ,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC;IAC1D,MAAM,YAAY,GAAG,mBAAmB,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IAEvD,MAAM,OAAO,GAAoB;QAC/B,eAAe,EAAE,OAAO,CAAC,KAAK;QAC9B,oBAAoB,EAAE,YAAY;QAClC,gBAAgB,EAAE,QAAQ,CAAC,KAAK;KACjC,CAAC;IAEF,kEAAkE;IAClE,sCAAsC;IACtC,IAAI,IAAI,GAAe;QACrB,GAAG,KAAK;QACR,OAAO,EAAE;YACP,GAAG,KAAK,CAAC,OAAO;YAChB,GAAG,OAAO;SACX;KACF,CAAC;IACF,MAAM,WAAW,GAAc,CAAC,eAAe,EAAE,oBAAoB,EAAE,gBAAgB,CAAC,CAAC;IACzF,KAAK,MAAM,CAAC,IAAI,WAAW,EAAE,CAAC;QAC5B,IAAI,GAAG,YAAY,CAAC,IAAI,CAAC,CAAC;IAC5B,CAAC;IAED,oDAAoD;IACpD,KAAK,MAAM,EAAE,IAAI,WAAW,EAAE,CAAC;QAC7B,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;QAC7B,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,GAAG,KAAK,IAAI,EAAE,CAAC;YAC5C,MAAM,GAAG,GAAG,GAA8B,CAAC;YAC3C,IAAI,GAAG,CAAC,aAAa,CAAC,KAAK,SAAS,EAAE,CAAC;gBACrC,4DAA4D;gBAC5D,8DAA8D;gBAC9D,gDAAgD;gBAChD,GAAG,CAAC,aAAa,CAAC,GAAG,UAAU,CAAC;YAClC,CAAC;QACH,CAAC;IACH,CAAC;IAED,GAAG,CAAC,IAAI,CACN;QACE,UAAU;QACV,SAAS,EAAE,YAAY,CAAC,IAAI;QAC5B,SAAS,EAAE,YAAY,CAAC,IAAI;KAC7B,EACD,uBAAuB,CACxB,CAAC;IAEF,OAAO;QACL,MAAM,EAAE,UAAU;QAClB,SAAS,EAAE,IAAI,CAAC,YAAY;QAC5B,KAAK,EAAE,IAAI;KACZ,CAAC;AACJ,CAAC"}
@@ -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;