@aperant/framework 0.17.0 → 0.19.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 (152) hide show
  1. package/CHANGELOG.md +152 -0
  2. package/dist/cli/commands/ci-watch.mjs +49 -2
  3. package/dist/cli/commands/ci-watch.mjs.map +1 -1
  4. package/dist/cli/commands/commit.mjs +3 -3
  5. package/dist/cli/commands/commit.mjs.map +1 -1
  6. package/dist/cli/commands/event.mjs +16 -16
  7. package/dist/cli/commands/event.mjs.map +1 -1
  8. package/dist/cli/commands/merge-integrate.mjs +3 -3
  9. package/dist/cli/commands/merge-integrate.mjs.map +1 -1
  10. package/dist/cli/commands/produce.d.mts +9 -0
  11. package/dist/cli/commands/produce.d.mts.map +1 -0
  12. package/dist/cli/commands/produce.mjs +1345 -0
  13. package/dist/cli/commands/produce.mjs.map +1 -0
  14. package/dist/cli/commands/task.d.mts +16 -1
  15. package/dist/cli/commands/task.d.mts.map +1 -1
  16. package/dist/cli/commands/task.mjs +434 -266
  17. package/dist/cli/commands/task.mjs.map +1 -1
  18. package/dist/cli/coordination/auto-emit-artifact-ready.mjs +5 -5
  19. package/dist/cli/coordination/auto-emit-artifact-ready.mjs.map +1 -1
  20. package/dist/cli/coordination/event-schema.d.mts +5 -3
  21. package/dist/cli/coordination/event-schema.d.mts.map +1 -1
  22. package/dist/cli/coordination/event-schema.mjs +245 -21
  23. package/dist/cli/coordination/event-schema.mjs.map +1 -1
  24. package/dist/cli/coordination/store.d.mts +2 -2
  25. package/dist/cli/coordination/store.mjs +4 -4
  26. package/dist/cli/coordination/store.mjs.map +1 -1
  27. package/dist/cli/dispatch.d.mts.map +1 -1
  28. package/dist/cli/dispatch.mjs +2 -0
  29. package/dist/cli/dispatch.mjs.map +1 -1
  30. package/dist/cli/help.d.mts.map +1 -1
  31. package/dist/cli/help.mjs +30 -0
  32. package/dist/cli/help.mjs.map +1 -1
  33. package/dist/cli/install/legacy-paths.d.mts.map +1 -1
  34. package/dist/cli/install/legacy-paths.mjs +2 -0
  35. package/dist/cli/install/legacy-paths.mjs.map +1 -1
  36. package/dist/cli/produce/blind-probe.d.mts +85 -0
  37. package/dist/cli/produce/blind-probe.d.mts.map +1 -0
  38. package/dist/cli/produce/blind-probe.mjs +217 -0
  39. package/dist/cli/produce/blind-probe.mjs.map +1 -0
  40. package/dist/cli/produce/claim.d.mts +188 -0
  41. package/dist/cli/produce/claim.d.mts.map +1 -0
  42. package/dist/cli/produce/claim.mjs +518 -0
  43. package/dist/cli/produce/claim.mjs.map +1 -0
  44. package/dist/cli/produce/done-gate.d.mts +87 -0
  45. package/dist/cli/produce/done-gate.d.mts.map +1 -0
  46. package/dist/cli/produce/done-gate.mjs +200 -0
  47. package/dist/cli/produce/done-gate.mjs.map +1 -0
  48. package/dist/cli/produce/events.d.mts +77 -0
  49. package/dist/cli/produce/events.d.mts.map +1 -0
  50. package/dist/cli/produce/events.mjs +126 -0
  51. package/dist/cli/produce/events.mjs.map +1 -0
  52. package/dist/cli/produce/evidence-oracle.d.mts +63 -0
  53. package/dist/cli/produce/evidence-oracle.d.mts.map +1 -0
  54. package/dist/cli/produce/evidence-oracle.mjs +122 -0
  55. package/dist/cli/produce/evidence-oracle.mjs.map +1 -0
  56. package/dist/cli/produce/ledger.d.mts +140 -0
  57. package/dist/cli/produce/ledger.d.mts.map +1 -0
  58. package/dist/cli/produce/ledger.mjs +272 -0
  59. package/dist/cli/produce/ledger.mjs.map +1 -0
  60. package/dist/cli/produce/probe-family.d.mts +53 -0
  61. package/dist/cli/produce/probe-family.d.mts.map +1 -0
  62. package/dist/cli/produce/probe-family.mjs +160 -0
  63. package/dist/cli/produce/probe-family.mjs.map +1 -0
  64. package/dist/cli/produce/projection.d.mts +55 -0
  65. package/dist/cli/produce/projection.d.mts.map +1 -0
  66. package/dist/cli/produce/projection.mjs +97 -0
  67. package/dist/cli/produce/projection.mjs.map +1 -0
  68. package/dist/cli/produce/run-id.d.mts +42 -0
  69. package/dist/cli/produce/run-id.d.mts.map +1 -0
  70. package/dist/cli/produce/run-id.mjs +79 -0
  71. package/dist/cli/produce/run-id.mjs.map +1 -0
  72. package/dist/cli/produce/saga.d.mts +180 -0
  73. package/dist/cli/produce/saga.d.mts.map +1 -0
  74. package/dist/cli/produce/saga.mjs +290 -0
  75. package/dist/cli/produce/saga.mjs.map +1 -0
  76. package/dist/cli/produce/scheduler.d.mts +165 -0
  77. package/dist/cli/produce/scheduler.d.mts.map +1 -0
  78. package/dist/cli/produce/scheduler.mjs +399 -0
  79. package/dist/cli/produce/scheduler.mjs.map +1 -0
  80. package/dist/cli/produce/setpoint.d.mts +52 -0
  81. package/dist/cli/produce/setpoint.d.mts.map +1 -0
  82. package/dist/cli/produce/setpoint.mjs +113 -0
  83. package/dist/cli/produce/setpoint.mjs.map +1 -0
  84. package/dist/cli/produce/verification-ttl.d.mts +75 -0
  85. package/dist/cli/produce/verification-ttl.d.mts.map +1 -0
  86. package/dist/cli/produce/verification-ttl.mjs +169 -0
  87. package/dist/cli/produce/verification-ttl.mjs.map +1 -0
  88. package/dist/cli/roadmap/{conductor-view.d.mts → showrunner-view.d.mts} +3 -3
  89. package/dist/cli/roadmap/showrunner-view.d.mts.map +1 -0
  90. package/dist/cli/roadmap/{conductor-view.mjs → showrunner-view.mjs} +7 -7
  91. package/dist/cli/roadmap/showrunner-view.mjs.map +1 -0
  92. package/dist/plugin/.claude-plugin/plugin.json +2 -1
  93. package/dist/plugin/skills/apt/SKILL.md +112 -38
  94. package/dist/plugin/skills/apt-debug/SKILL.md +14 -24
  95. package/dist/plugin/skills/apt-fan-out/SKILL.md +4 -4
  96. package/dist/plugin/skills/apt-handoff/SKILL.md +1 -1
  97. package/dist/plugin/skills/apt-plan/SKILL.md +5 -5
  98. package/dist/plugin/skills/apt-plan/adapters/{conductor.md → showrunner.md} +16 -16
  99. package/dist/plugin/skills/apt-produce/SKILL.md +606 -0
  100. package/dist/plugin/skills/apt-quick/SKILL.md +14 -22
  101. package/dist/plugin/skills/apt-run/SKILL.md +126 -3
  102. package/dist/plugin/skills/apt-ship/SKILL.md +2 -0
  103. package/dist/plugin/skills/apt-spar/SKILL.md +5 -3
  104. package/dist/plugin/skills/apt-watch-ci/SKILL.md +4 -4
  105. package/package.json +4 -4
  106. package/prompts/{conductor-framework-context.md → showrunner-framework-context.md} +1 -1
  107. package/prompts/{conductor-status-check.md → showrunner-status-check.md} +1 -1
  108. package/prompts/{conductor-sub-agent.md → showrunner-sub-agent.md} +6 -6
  109. package/prompts/{conductor-system.md → showrunner-system.md} +8 -8
  110. package/skills/apt/SKILL.md +112 -38
  111. package/skills/apt-debug/SKILL.md +14 -24
  112. package/skills/apt-fan-out/SKILL.md +4 -4
  113. package/skills/apt-handoff/SKILL.md +1 -1
  114. package/skills/apt-plan/SKILL.md +5 -5
  115. package/skills/apt-plan/adapters/{conductor.md → showrunner.md} +16 -16
  116. package/skills/apt-produce/SKILL.md +606 -0
  117. package/skills/apt-quick/SKILL.md +14 -22
  118. package/skills/apt-run/SKILL.md +126 -3
  119. package/skills/apt-ship/SKILL.md +2 -0
  120. package/skills/apt-spar/SKILL.md +5 -3
  121. package/skills/apt-watch-ci/SKILL.md +4 -4
  122. package/src/cli/commands/ci-watch.mjs +51 -2
  123. package/src/cli/commands/commit.mjs +3 -3
  124. package/src/cli/commands/event.mjs +16 -16
  125. package/src/cli/commands/merge-integrate.mjs +3 -3
  126. package/src/cli/commands/produce.mjs +1466 -0
  127. package/src/cli/commands/task.mjs +482 -285
  128. package/src/cli/coordination/auto-emit-artifact-ready.mjs +5 -5
  129. package/src/cli/coordination/event-schema.d.ts +4 -2
  130. package/src/cli/coordination/event-schema.mjs +276 -21
  131. package/src/cli/coordination/store.mjs +4 -4
  132. package/src/cli/dispatch.mjs +2 -0
  133. package/src/cli/help.mjs +30 -0
  134. package/src/cli/install/legacy-paths.mjs +2 -0
  135. package/src/cli/produce/blind-probe.mjs +245 -0
  136. package/src/cli/produce/claim.mjs +543 -0
  137. package/src/cli/produce/done-gate.mjs +238 -0
  138. package/src/cli/produce/events.mjs +131 -0
  139. package/src/cli/produce/evidence-oracle.mjs +133 -0
  140. package/src/cli/produce/ledger.mjs +284 -0
  141. package/src/cli/produce/probe-family.mjs +168 -0
  142. package/src/cli/produce/projection.mjs +105 -0
  143. package/src/cli/produce/run-id.mjs +84 -0
  144. package/src/cli/produce/saga.mjs +303 -0
  145. package/src/cli/produce/scheduler.mjs +423 -0
  146. package/src/cli/produce/setpoint.mjs +122 -0
  147. package/src/cli/produce/verification-ttl.mjs +191 -0
  148. package/src/cli/roadmap/showrunner-view.d.ts +10 -0
  149. package/src/cli/roadmap/{conductor-view.mjs → showrunner-view.mjs} +6 -6
  150. package/dist/cli/roadmap/conductor-view.d.mts.map +0 -1
  151. package/dist/cli/roadmap/conductor-view.mjs.map +0 -1
  152. package/src/cli/roadmap/conductor-view.d.ts +0 -10
@@ -0,0 +1,191 @@
1
+ /**
2
+ * @internal
3
+ * produce/verification-ttl.mjs — verification-TTL: a rotating sample of OLD done
4
+ * milestones re-verified against HEAD each tick, regressions flagged +
5
+ * compensated (M4, ID-M4-03 / AC13).
6
+ *
7
+ * Verification is not permanent — a milestone marked `done` at HEAD-sha `A` can
8
+ * silently regress as HEAD advances to `B` (a later milestone's change breaks an
9
+ * earlier one). This module gives verification a TTL:
10
+ *
11
+ * - `selectTtlReverifySample` REUSES M2's `selectSweepSample` for the rotating
12
+ * done-milestone candidates (do NOT invent a parallel rotation) and annotates
13
+ * staleness against the supplied HEAD sha — a done milestone is STALE when its
14
+ * last recorded `produce.ttl.reverified`/`produce.probe.run` head_sha ≠ the
15
+ * current HEAD (or it has never been re-verified since done); a milestone last
16
+ * re-verified against the current HEAD is EXCLUDED as FRESH.
17
+ * - `recordTtlReverify` REUSES the M2 cross-family guard (refuses a same-family
18
+ * re-verify), appends `produce.ttl.reverified`, and on `fail` ALSO appends
19
+ * `produce.ttl.regression_detected` AND fires the FORWARD compensator via
20
+ * saga.mjs::compensatePhase({phase:'verify'}) — a revert-branch + reopen +
21
+ * re-plan, NEVER a merged-PR rollback (ID-M4-03).
22
+ *
23
+ * `ttl.reverified` is a DISTINCT op from `probe.run` (a scheduled post-`done` TTL
24
+ * re-check vs a first-time done-gate probe) so the forensic trail stays clean —
25
+ * only the ROTATION and the CROSS-FAMILY GUARD are reused. This module records +
26
+ * computes; the actual re-verify RUN + the revert-ship/reopen/re-plan EXECUTION
27
+ * is the OOS dispatch layer.
28
+ */
29
+
30
+ import { selectSweepSample } from './blind-probe.mjs'
31
+ import {
32
+ appendProduceEvent,
33
+ readImplementerFamily,
34
+ readProduceRunEventsMatching,
35
+ } from './events.mjs'
36
+ import { normalizeFamily } from './probe-family.mjs'
37
+ import { projectRoadmap } from './projection.mjs'
38
+ import { compensatePhase } from './saga.mjs'
39
+
40
+ /**
41
+ * Build the per-milestone latest-recorded head_sha map from the
42
+ * `produce.ttl.reverified` + `produce.probe.run` events (both carry `head_sha`).
43
+ * Chronological fold — the last recorded run for a milestone wins.
44
+ *
45
+ * @param {string} projectDir
46
+ * @param {string} runId
47
+ * @returns {Map<string, { head_sha: string, at: string | null }>}
48
+ */
49
+ function latestReverifyByMilestone(projectDir, runId) {
50
+ const events = readProduceRunEventsMatching(
51
+ projectDir,
52
+ runId,
53
+ (op) => op === 'produce.ttl.reverified' || op === 'produce.probe.run',
54
+ )
55
+ const map = new Map()
56
+ for (const e of events) {
57
+ const d = e.data || {}
58
+ const id = typeof d.milestone_id === 'string' ? d.milestone_id : null
59
+ const sha = typeof d.head_sha === 'string' ? d.head_sha : null
60
+ if (!id || !sha) continue
61
+ map.set(id, { head_sha: sha, at: typeof e.t === 'string' ? e.t : null })
62
+ }
63
+ return map
64
+ }
65
+
66
+ /**
67
+ * Select a DETERMINISTIC rotating sample of already-`done` milestones STALE
68
+ * against HEAD (ID-M4-03 / AC7). REUSES `selectSweepSample` for the rotation
69
+ * order (fewest/oldest last-probe-run first), then annotates each candidate with
70
+ * staleness against `headSha` and FILTERS OUT the FRESH ones (last re-verified
71
+ * against the current HEAD). Returns the first `sample` STALE candidates. An
72
+ * absent HEAD sha fails closed (nothing selected).
73
+ *
74
+ * @param {string} projectDir
75
+ * @param {string} runId
76
+ * @param {{ headSha: string, sample?: number }} args
77
+ * @returns {{ run_id: string, head_sha: string | null, sample_size: number,
78
+ * selected: Array<{ milestone_id: string, title: string, last_reverify_head_sha: string | null, last_reverify_at: string | null, stale: boolean }> }}
79
+ */
80
+ export function selectTtlReverifySample(projectDir, runId, { headSha, sample = 1 } = {}) {
81
+ if (!headSha) return { run_id: runId, head_sha: null, sample_size: 0, selected: [] }
82
+
83
+ // The FULL rotation-ordered pool of done milestones (reuse selectSweepSample;
84
+ // pass the done count so it returns every done milestone in rotation order).
85
+ const doneCount = projectRoadmap(projectDir, runId).milestones.filter(
86
+ (m) => m.status === 'done',
87
+ ).length
88
+ const pool = selectSweepSample(projectDir, runId, { sample: doneCount || 1 }).selected
89
+
90
+ const latest = latestReverifyByMilestone(projectDir, runId)
91
+ const n = Number.isFinite(sample) && sample > 0 ? Math.floor(sample) : 1
92
+
93
+ const stale = []
94
+ for (const candidate of pool) {
95
+ const last = latest.get(candidate.milestone_id) || null
96
+ // STALE when never re-verified since done, or last re-verified against a sha
97
+ // ≠ the current HEAD. FRESH (last re-verify head_sha === HEAD) is excluded.
98
+ const isStale = !last || last.head_sha !== headSha
99
+ if (!isStale) continue
100
+ stale.push({
101
+ milestone_id: candidate.milestone_id,
102
+ title: candidate.title,
103
+ last_reverify_head_sha: last?.head_sha ?? null,
104
+ last_reverify_at: last?.at ?? null,
105
+ stale: true,
106
+ })
107
+ }
108
+
109
+ const selected = stale.slice(0, n)
110
+ return { run_id: runId, head_sha: headSha, sample_size: selected.length, selected }
111
+ }
112
+
113
+ /**
114
+ * Record a scheduled TTL re-verify RUN against HEAD (ID-M4-03). REUSES the M2
115
+ * cross-family guard (refuses a same-family re-verify, or when no implementer
116
+ * family is recorded). Appends `produce.ttl.reverified {run_id, milestone_id,
117
+ * head_sha, result}`; on `result === 'fail'` ALSO appends
118
+ * `produce.ttl.regression_detected` AND fires the FORWARD compensator via
119
+ * saga.mjs::compensatePhase({phase:'verify', reason:'ttl_regression@<sha>'}) — a
120
+ * revert-branch + reopen + re-plan, NEVER a merged-PR rollback. A `pass`
121
+ * refreshes verification against the new HEAD and logs no regression.
122
+ *
123
+ * @param {string} projectDir
124
+ * @param {{ runId: string, milestoneId: string, result: string, probeFamily: string, headSha: string }} args
125
+ * @returns {{ ok: true, result: string, probe_family: string, head_sha: string, regression: boolean, compensator: object | null }
126
+ * | { ok: false, reason: string }}
127
+ */
128
+ export function recordTtlReverify(
129
+ projectDir,
130
+ { runId, milestoneId, result, probeFamily, headSha },
131
+ ) {
132
+ if (result !== 'pass' && result !== 'fail') return { ok: false, reason: 'invalid_result' }
133
+ if (!headSha) return { ok: false, reason: 'no_head_sha' }
134
+ if (!probeFamily) return { ok: false, reason: 'no_probe_family' }
135
+
136
+ const implementerFamily = readImplementerFamily(projectDir, runId, milestoneId)
137
+ if (!implementerFamily) return { ok: false, reason: 'no_recorded_implementer' }
138
+ // Cross-family enforcement (normalized so claude-code === claude).
139
+ if (normalizeFamily(probeFamily) === normalizeFamily(implementerFamily))
140
+ return { ok: false, reason: 'same_family_reverify' }
141
+
142
+ appendProduceEvent(projectDir, 'produce.ttl.reverified', {
143
+ run_id: runId,
144
+ milestone_id: milestoneId,
145
+ head_sha: headSha,
146
+ result,
147
+ })
148
+
149
+ let regression = false
150
+ let compensator = null
151
+ if (result === 'fail') {
152
+ // The regression flags the milestone AND fires the FORWARD compensator — a
153
+ // revert-branch + reopen + re-plan, never a merged-PR rollback (ID-M4-03).
154
+ appendProduceEvent(projectDir, 'produce.ttl.regression_detected', {
155
+ run_id: runId,
156
+ milestone_id: milestoneId,
157
+ head_sha: headSha,
158
+ })
159
+ const comp = compensatePhase(projectDir, {
160
+ runId,
161
+ milestoneId,
162
+ phase: 'verify',
163
+ reason: `ttl_regression@${headSha}`,
164
+ })
165
+ regression = true
166
+ compensator = comp.ok ? comp.compensator : null
167
+ }
168
+
169
+ return { ok: true, result, probe_family: probeFamily, head_sha: headSha, regression, compensator }
170
+ }
171
+
172
+ /**
173
+ * Read-only fold of the run's `produce.ttl.regression_detected` events (for saga
174
+ * status / canary context). Chronological order.
175
+ *
176
+ * @param {string} projectDir
177
+ * @param {string} runId
178
+ * @returns {Array<{ milestone_id: string | null, head_sha: string | null, t: string | null }>}
179
+ */
180
+ export function listRegressions(projectDir, runId) {
181
+ const events = readProduceRunEventsMatching(
182
+ projectDir,
183
+ runId,
184
+ (op) => op === 'produce.ttl.regression_detected',
185
+ )
186
+ return events.map((e) => ({
187
+ milestone_id: e.data && typeof e.data.milestone_id === 'string' ? e.data.milestone_id : null,
188
+ head_sha: e.data && typeof e.data.head_sha === 'string' ? e.data.head_sha : null,
189
+ t: typeof e.t === 'string' ? e.t : null,
190
+ }))
191
+ }
@@ -0,0 +1,10 @@
1
+ /**
2
+ * Type declarations for the .mjs showrunner-view helper.
3
+ * Hand-authored — the import path points at src/.mjs directly.
4
+ */
5
+
6
+ export interface ShowrunnerRoadmapView {
7
+ scopes: Array<{ scope: string; roadmap: unknown }>
8
+ }
9
+
10
+ export function buildShowrunnerRoadmapView(projectRoot: string): ShowrunnerRoadmapView
@@ -1,26 +1,26 @@
1
1
  /**
2
- * conductor-view.mjs — read-only roadmap surface for the Aperant
3
- * Conductor's `getRoadmap` tool.
2
+ * showrunner-view.mjs — read-only roadmap surface for the Aperant
3
+ * Showrunner's `getRoadmap` tool.
4
4
  *
5
- * Wraps `loadRoadmapForScope` + `listRoadmapScopes` so the Conductor sees
5
+ * Wraps `loadRoadmapForScope` + `listRoadmapScopes` so the Showrunner sees
6
6
  * the same overlay-aware view every framework command sees. Direct reads
7
7
  * of `.aperant/roadmap/*\/phases/*.json` or `milestones.json` would miss
8
8
  * the dual-write overlay (seed_id from legacy blob, etc.) — Codex
9
9
  * roundtable correction #3.
10
10
  *
11
- * Step 5 of Conductor v2 ship order.
11
+ * Step 5 of Showrunner v2 ship order.
12
12
  */
13
13
 
14
14
  import { loadRoadmapForScope } from './io.mjs'
15
15
  import { listRoadmapScopes } from './paths.mjs'
16
16
 
17
17
  /**
18
- * Build a flat per-scope roadmap snapshot for the Conductor.
18
+ * Build a flat per-scope roadmap snapshot for the Showrunner.
19
19
  *
20
20
  * @param {string} projectRoot
21
21
  * @returns {{ scopes: Array<{ scope: string, roadmap: unknown }> }}
22
22
  */
23
- export function buildConductorRoadmapView(projectRoot) {
23
+ export function buildShowrunnerRoadmapView(projectRoot) {
24
24
  const scopes = listRoadmapScopes(projectRoot)
25
25
  const out = []
26
26
  for (const scope of scopes) {
@@ -1 +0,0 @@
1
- {"version":3,"file":"conductor-view.d.mts","sourceRoot":"","sources":["../../../src/cli/roadmap/conductor-view.mjs"],"names":[],"mappings":"AAgBA;;;;;GAKG;AACH,uDAHW,MAAM,GACJ;IAAE,MAAM,EAAE,KAAK,CAAC;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,OAAO,CAAA;KAAE,CAAC,CAAA;CAAE,CAUlE"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"conductor-view.mjs","sourceRoot":"","sources":["../../../src/cli/roadmap/conductor-view.mjs"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,EAAE,mBAAmB,EAAE,MAAM,UAAU,CAAA;AAC9C,OAAO,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAA;AAE/C;;;;;GAKG;AACH,MAAM,UAAU,yBAAyB,CAAC,WAAW;IACpD,MAAM,MAAM,GAAG,iBAAiB,CAAC,WAAW,CAAC,CAAA;IAC7C,MAAM,GAAG,GAAG,EAAE,CAAA;IACd,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;QAC5B,MAAM,OAAO,GAAG,mBAAmB,CAAC,WAAW,EAAE,KAAK,CAAC,CAAA;QACvD,IAAI,OAAO,KAAK,IAAI;YAAE,GAAG,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC,CAAA;IACnD,CAAC;IACD,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,CAAA;AACvB,CAAC"}
@@ -1,10 +0,0 @@
1
- /**
2
- * Type declarations for the .mjs conductor-view helper.
3
- * Hand-authored — the import path points at src/.mjs directly.
4
- */
5
-
6
- export interface ConductorRoadmapView {
7
- scopes: Array<{ scope: string; roadmap: unknown }>
8
- }
9
-
10
- export function buildConductorRoadmapView(projectRoot: string): ConductorRoadmapView