@aperant/framework 0.16.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.
- package/CHANGELOG.md +185 -1
- package/dist/cli/commands/ci-watch.mjs +49 -2
- package/dist/cli/commands/ci-watch.mjs.map +1 -1
- package/dist/cli/commands/commit.mjs +3 -3
- package/dist/cli/commands/commit.mjs.map +1 -1
- package/dist/cli/commands/event.mjs +16 -16
- package/dist/cli/commands/event.mjs.map +1 -1
- package/dist/cli/commands/merge-integrate.mjs +3 -3
- package/dist/cli/commands/merge-integrate.mjs.map +1 -1
- package/dist/cli/commands/produce.d.mts +9 -0
- package/dist/cli/commands/produce.d.mts.map +1 -0
- package/dist/cli/commands/produce.mjs +1345 -0
- package/dist/cli/commands/produce.mjs.map +1 -0
- package/dist/cli/commands/spar-resolve-partner.d.mts +9 -0
- package/dist/cli/commands/spar-resolve-partner.d.mts.map +1 -0
- package/dist/cli/commands/spar-resolve-partner.mjs +82 -0
- package/dist/cli/commands/spar-resolve-partner.mjs.map +1 -0
- package/dist/cli/commands/task.d.mts +16 -1
- package/dist/cli/commands/task.d.mts.map +1 -1
- package/dist/cli/commands/task.mjs +434 -266
- package/dist/cli/commands/task.mjs.map +1 -1
- package/dist/cli/config/gitignore-drift.d.mts.map +1 -1
- package/dist/cli/config/gitignore-drift.mjs +1 -0
- package/dist/cli/config/gitignore-drift.mjs.map +1 -1
- package/dist/cli/config/post-merge-sweep.d.mts.map +1 -1
- package/dist/cli/config/post-merge-sweep.mjs +1 -0
- package/dist/cli/config/post-merge-sweep.mjs.map +1 -1
- package/dist/cli/coordination/auto-emit-artifact-ready.mjs +5 -5
- package/dist/cli/coordination/auto-emit-artifact-ready.mjs.map +1 -1
- package/dist/cli/coordination/event-schema.d.mts +5 -3
- package/dist/cli/coordination/event-schema.d.mts.map +1 -1
- package/dist/cli/coordination/event-schema.mjs +245 -21
- package/dist/cli/coordination/event-schema.mjs.map +1 -1
- package/dist/cli/coordination/store.d.mts +2 -2
- package/dist/cli/coordination/store.mjs +4 -4
- package/dist/cli/coordination/store.mjs.map +1 -1
- package/dist/cli/dispatch.d.mts.map +1 -1
- package/dist/cli/dispatch.mjs +4 -0
- package/dist/cli/dispatch.mjs.map +1 -1
- package/dist/cli/help.d.mts.map +1 -1
- package/dist/cli/help.mjs +31 -0
- package/dist/cli/help.mjs.map +1 -1
- package/dist/cli/host/codex-config.d.mts +78 -0
- package/dist/cli/host/codex-config.d.mts.map +1 -0
- package/dist/cli/host/codex-config.mjs +169 -0
- package/dist/cli/host/codex-config.mjs.map +1 -0
- package/dist/cli/install/legacy-paths.d.mts.map +1 -1
- package/dist/cli/install/legacy-paths.mjs +2 -0
- package/dist/cli/install/legacy-paths.mjs.map +1 -1
- package/dist/cli/produce/blind-probe.d.mts +85 -0
- package/dist/cli/produce/blind-probe.d.mts.map +1 -0
- package/dist/cli/produce/blind-probe.mjs +217 -0
- package/dist/cli/produce/blind-probe.mjs.map +1 -0
- package/dist/cli/produce/claim.d.mts +188 -0
- package/dist/cli/produce/claim.d.mts.map +1 -0
- package/dist/cli/produce/claim.mjs +518 -0
- package/dist/cli/produce/claim.mjs.map +1 -0
- package/dist/cli/produce/done-gate.d.mts +87 -0
- package/dist/cli/produce/done-gate.d.mts.map +1 -0
- package/dist/cli/produce/done-gate.mjs +200 -0
- package/dist/cli/produce/done-gate.mjs.map +1 -0
- package/dist/cli/produce/events.d.mts +77 -0
- package/dist/cli/produce/events.d.mts.map +1 -0
- package/dist/cli/produce/events.mjs +126 -0
- package/dist/cli/produce/events.mjs.map +1 -0
- package/dist/cli/produce/evidence-oracle.d.mts +63 -0
- package/dist/cli/produce/evidence-oracle.d.mts.map +1 -0
- package/dist/cli/produce/evidence-oracle.mjs +122 -0
- package/dist/cli/produce/evidence-oracle.mjs.map +1 -0
- package/dist/cli/produce/ledger.d.mts +140 -0
- package/dist/cli/produce/ledger.d.mts.map +1 -0
- package/dist/cli/produce/ledger.mjs +272 -0
- package/dist/cli/produce/ledger.mjs.map +1 -0
- package/dist/cli/produce/probe-family.d.mts +53 -0
- package/dist/cli/produce/probe-family.d.mts.map +1 -0
- package/dist/cli/produce/probe-family.mjs +160 -0
- package/dist/cli/produce/probe-family.mjs.map +1 -0
- package/dist/cli/produce/projection.d.mts +55 -0
- package/dist/cli/produce/projection.d.mts.map +1 -0
- package/dist/cli/produce/projection.mjs +97 -0
- package/dist/cli/produce/projection.mjs.map +1 -0
- package/dist/cli/produce/run-id.d.mts +42 -0
- package/dist/cli/produce/run-id.d.mts.map +1 -0
- package/dist/cli/produce/run-id.mjs +79 -0
- package/dist/cli/produce/run-id.mjs.map +1 -0
- package/dist/cli/produce/saga.d.mts +180 -0
- package/dist/cli/produce/saga.d.mts.map +1 -0
- package/dist/cli/produce/saga.mjs +290 -0
- package/dist/cli/produce/saga.mjs.map +1 -0
- package/dist/cli/produce/scheduler.d.mts +165 -0
- package/dist/cli/produce/scheduler.d.mts.map +1 -0
- package/dist/cli/produce/scheduler.mjs +399 -0
- package/dist/cli/produce/scheduler.mjs.map +1 -0
- package/dist/cli/produce/setpoint.d.mts +52 -0
- package/dist/cli/produce/setpoint.d.mts.map +1 -0
- package/dist/cli/produce/setpoint.mjs +113 -0
- package/dist/cli/produce/setpoint.mjs.map +1 -0
- package/dist/cli/produce/verification-ttl.d.mts +75 -0
- package/dist/cli/produce/verification-ttl.d.mts.map +1 -0
- package/dist/cli/produce/verification-ttl.mjs +169 -0
- package/dist/cli/produce/verification-ttl.mjs.map +1 -0
- package/dist/cli/roadmap/{conductor-view.d.mts → showrunner-view.d.mts} +3 -3
- package/dist/cli/roadmap/showrunner-view.d.mts.map +1 -0
- package/dist/cli/roadmap/{conductor-view.mjs → showrunner-view.mjs} +7 -7
- package/dist/cli/roadmap/showrunner-view.mjs.map +1 -0
- package/dist/cli/wfrun/run.d.mts.map +1 -1
- package/dist/cli/wfrun/run.mjs +1 -0
- package/dist/cli/wfrun/run.mjs.map +1 -1
- package/dist/plugin/.claude-plugin/plugin.json +2 -1
- package/dist/plugin/skills/apt/SKILL.md +112 -38
- package/dist/plugin/skills/apt-debug/SKILL.md +14 -24
- package/dist/plugin/skills/apt-fan-out/SKILL.md +4 -4
- package/dist/plugin/skills/apt-handoff/SKILL.md +1 -1
- package/dist/plugin/skills/apt-plan/SKILL.md +5 -5
- package/dist/plugin/skills/apt-plan/adapters/{conductor.md → showrunner.md} +16 -16
- package/dist/plugin/skills/apt-produce/SKILL.md +606 -0
- package/dist/plugin/skills/apt-quick/SKILL.md +14 -22
- package/dist/plugin/skills/apt-run/SKILL.md +126 -3
- package/dist/plugin/skills/apt-ship/SKILL.md +2 -0
- package/dist/plugin/skills/apt-spar/SKILL.md +19 -9
- package/dist/plugin/skills/apt-watch-ci/SKILL.md +4 -4
- package/package.json +4 -4
- package/prompts/{conductor-framework-context.md → showrunner-framework-context.md} +1 -1
- package/prompts/{conductor-status-check.md → showrunner-status-check.md} +1 -1
- package/prompts/{conductor-sub-agent.md → showrunner-sub-agent.md} +6 -6
- package/prompts/{conductor-system.md → showrunner-system.md} +8 -8
- package/skills/apt/SKILL.md +112 -38
- package/skills/apt-debug/SKILL.md +14 -24
- package/skills/apt-fan-out/SKILL.md +4 -4
- package/skills/apt-handoff/SKILL.md +1 -1
- package/skills/apt-plan/SKILL.md +5 -5
- package/skills/apt-plan/adapters/{conductor.md → showrunner.md} +16 -16
- package/skills/apt-produce/SKILL.md +606 -0
- package/skills/apt-quick/SKILL.md +14 -22
- package/skills/apt-run/SKILL.md +126 -3
- package/skills/apt-ship/SKILL.md +2 -0
- package/skills/apt-spar/SKILL.md +19 -9
- package/skills/apt-watch-ci/SKILL.md +4 -4
- package/src/cli/commands/ci-watch.mjs +51 -2
- package/src/cli/commands/commit.mjs +3 -3
- package/src/cli/commands/event.mjs +16 -16
- package/src/cli/commands/merge-integrate.mjs +3 -3
- package/src/cli/commands/produce.mjs +1466 -0
- package/src/cli/commands/spar-resolve-partner.mjs +85 -0
- package/src/cli/commands/task.mjs +482 -285
- package/src/cli/config/gitignore-drift.mjs +1 -0
- package/src/cli/config/post-merge-sweep.mjs +1 -0
- package/src/cli/coordination/auto-emit-artifact-ready.mjs +5 -5
- package/src/cli/coordination/event-schema.d.ts +4 -2
- package/src/cli/coordination/event-schema.mjs +276 -21
- package/src/cli/coordination/store.mjs +4 -4
- package/src/cli/dispatch.mjs +4 -0
- package/src/cli/help.mjs +31 -0
- package/src/cli/host/codex-config.mjs +165 -0
- package/src/cli/install/legacy-paths.mjs +2 -0
- package/src/cli/produce/blind-probe.mjs +245 -0
- package/src/cli/produce/claim.mjs +543 -0
- package/src/cli/produce/done-gate.mjs +238 -0
- package/src/cli/produce/events.mjs +131 -0
- package/src/cli/produce/evidence-oracle.mjs +133 -0
- package/src/cli/produce/ledger.mjs +284 -0
- package/src/cli/produce/probe-family.mjs +168 -0
- package/src/cli/produce/projection.mjs +105 -0
- package/src/cli/produce/run-id.mjs +84 -0
- package/src/cli/produce/saga.mjs +303 -0
- package/src/cli/produce/scheduler.mjs +423 -0
- package/src/cli/produce/setpoint.mjs +122 -0
- package/src/cli/produce/verification-ttl.mjs +191 -0
- package/src/cli/roadmap/showrunner-view.d.ts +10 -0
- package/src/cli/roadmap/{conductor-view.mjs → showrunner-view.mjs} +6 -6
- package/src/cli/wfrun/run.mjs +1 -0
- package/dist/cli/roadmap/conductor-view.d.mts.map +0 -1
- package/dist/cli/roadmap/conductor-view.mjs.map +0 -1
- 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
|
-
*
|
|
3
|
-
*
|
|
2
|
+
* showrunner-view.mjs — read-only roadmap surface for the Aperant
|
|
3
|
+
* Showrunner's `getRoadmap` tool.
|
|
4
4
|
*
|
|
5
|
-
* Wraps `loadRoadmapForScope` + `listRoadmapScopes` so the
|
|
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
|
|
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
|
|
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
|
|
23
|
+
export function buildShowrunnerRoadmapView(projectRoot) {
|
|
24
24
|
const scopes = listRoadmapScopes(projectRoot)
|
|
25
25
|
const out = []
|
|
26
26
|
for (const scope of scopes) {
|
package/src/cli/wfrun/run.mjs
CHANGED
|
@@ -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
|