@afokapu/atdd-bun 0.10.31 → 0.10.32
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/README.md +2 -112
- package/conventions/atdd-bun.profiles/atdd-bun.profiles.presets.convention.yaml +2 -3
- package/conventions/planner.docs/planner.docs.area-index-required.convention.yaml +2 -2
- package/conventions/planner.docs/planner.docs.artifact-path-shape.convention.yaml +1 -1
- package/conventions/planner.docs/planner.docs.asciidoc-only.convention.yaml +0 -1
- package/conventions/planner.docs/planner.docs.identity-required.convention.yaml +1 -1
- package/conventions/planner.docs/planner.docs.undeclared-change.convention.yaml +1 -2
- package/detectors/bun_interlocking_coverage/checks/interlocking_train_sequence.mjs +7 -5
- package/detectors/planner_docs_capability/README.md +1 -1
- package/integrity.json +21 -49
- package/package.json +1 -1
- package/relationships.yaml +0 -151
- package/src/agent.ts +2 -18
- package/src/cli.ts +0 -8
- package/src/docs-capability.ts +6 -24
- package/src/enforce.ts +1 -2
- package/src/hooks.ts +1 -5
- package/src/index.ts +0 -2
- package/src/integrity.ts +3 -9
- package/src/setup.ts +1 -3
- package/templates/agents/AGENTS.block.md +0 -2
- package/templates/github/atdd-bun.yml +0 -5
- package/conventions/delivery/delivery.approved-sha-resolves.convention.yaml +0 -33
- package/conventions/delivery/delivery.board.convention.yaml +0 -60
- package/conventions/delivery/delivery.config-schema.convention.yaml +0 -49
- package/conventions/delivery/delivery.evidence-schema.convention.yaml +0 -34
- package/conventions/delivery/delivery.findings-resolved.convention.yaml +0 -42
- package/conventions/delivery/delivery.merge-gate.convention.yaml +0 -46
- package/conventions/delivery/delivery.model-allowed.convention.yaml +0 -29
- package/conventions/delivery/delivery.operating-model.convention.yaml +0 -97
- package/conventions/delivery/delivery.review.convention.yaml +0 -42
- package/conventions/delivery/delivery.reviewer-independent.convention.yaml +0 -34
- package/conventions/delivery/delivery.stages-complete.convention.yaml +0 -33
- package/detectors/delivery_evidence/atdd.implementation.yaml +0 -33
- package/detectors/delivery_evidence/detect.mjs +0 -9
- package/detectors/delivery_evidence/fixtures/clean/atdd-bun.yaml +0 -8
- package/detectors/delivery_evidence/fixtures/clean/docs/delivery/tranches/api/evidence.yaml +0 -54
- package/detectors/delivery_evidence/fixtures/dirty/atdd-bun.yaml +0 -3
- package/detectors/delivery_evidence/fixtures/dirty/docs/delivery/tranches/api/evidence.yaml +0 -31
- package/detectors/delivery_evidence/fixtures/dirty/docs/delivery/tranches/data/evidence.yaml +0 -8
- package/detectors/delivery_evidence/fixtures/dirty/docs/delivery/tranches/orphan/README.md +0 -1
- package/detectors/delivery_evidence/fixtures/dirty/docs/delivery/tranches/ui/evidence.yaml +0 -5
- package/detectors/planner_docs_capability/fixtures/dirty_missing_index/docs/delivery/release.adoc +0 -10
- package/detectors/planner_docs_capability/fixtures/dirty_missing_index/docs/purpose/index.adoc +0 -5
- package/planner-schemas/delivery-config.schema.json +0 -95
- package/planner-schemas/delivery-evidence.schema.json +0 -103
- package/src/board-ui.ts +0 -91
- package/src/board.ts +0 -222
- package/src/delivery.ts +0 -567
- package/templates/agents/delivery/SKILL.md +0 -15
package/README.md
CHANGED
|
@@ -55,7 +55,6 @@ registerEnforcementTest({ root: import.meta.dir + "/..", profiles: ["traceabilit
|
|
|
55
55
|
| `topology` | feature decomposition and the plan, source, test and E2E locations. Missing source, tests and E2E suites are reported only when a run also selects `coder` or `tester`, so a repository in the PLAN stage can enforce `planner` and `topology` before RED |
|
|
56
56
|
| `planner` | schemas for every plan artifact, graph integrity, the scoped planner rules |
|
|
57
57
|
| `telemetry` | the telemetry tracking plan: item shape, path-mirrored identity and versioning under `telemetry/`, wagon ownership of logical artifacts, the per-acceptance telemetry decision, metric label cardinality, source `Telemetry:` references, raw-string and forbidden-property emission, the vendor-SDK boundary around the TelemetryPort, and telemetry tests that bind the acceptance and item, assert the exact identity on a captured sink, cover every required item, and exercise declared timing semantics |
|
|
58
|
-
| `delivery` | the review record of each tranche under `docs/delivery/tranches/`: allowed writer and reviewer models with recorded fallbacks, reviewer independence, every finding fixed, withdrawn after one dispute or ruled on by a human, every configured stage approved, and, at the gate, no change without a record and a merged head that contains exactly the approved commit. Inert until adopted |
|
|
59
58
|
| `docs` | the documentation capability, including the generated journey view |
|
|
60
59
|
| `coder`, `tester`, `security`, `architecture`, `metrics`, `runtime` | Bun source and test conventions |
|
|
61
60
|
| `interlocking` | train/interlocking binding, infrastructure and route coverage |
|
|
@@ -85,7 +84,7 @@ the adoption that establishes the governed set, so a brownfield repository can d
|
|
|
85
84
|
`profiles: [docs]` in an ordinary pull request. From then on, the integrity check reports, against
|
|
86
85
|
the base branch, removing a profile from the list and removing the list itself. The second closes
|
|
87
86
|
the two-step bypass `[docs, security]` → no list → `[docs]`. `init` writes a new `atdd-bun.yaml`
|
|
88
|
-
with every profile listed
|
|
87
|
+
with every profile listed, so a greenfield repository is governed from its first commit; trim the
|
|
89
88
|
list before that commit to adopt gradually.
|
|
90
89
|
|
|
91
90
|
## Configuration
|
|
@@ -109,114 +108,6 @@ worktrees: { enabled: false }
|
|
|
109
108
|
release: { enabled: false }
|
|
110
109
|
```
|
|
111
110
|
|
|
112
|
-
### Delivery
|
|
113
|
-
|
|
114
|
-
For programs delivered as tranches by a coordinator and persistent drivers, with headless writers
|
|
115
|
-
and independent reviewers. Adopt it by naming `delivery` in `profiles:` (or, with no list, by adding
|
|
116
|
-
a `delivery:` block); `agent init` then installs the delivery skill. The adopting pull request is
|
|
117
|
-
itself governed: the skill and workflow it brings are outside the delivery root, so it carries its
|
|
118
|
-
own tranche record, reviewed and `ready` like any other. A later change to `atdd-bun.yaml` alone
|
|
119
|
-
needs no record: the integrity check reports any loosening for a human to approve.
|
|
120
|
-
|
|
121
|
-
The policy names, for each lifecycle stage (plan, red, green, refactor, final), who may write it and
|
|
122
|
-
who reviews it; either may be absent. By default two stages are reviewed: the plan, and the whole
|
|
123
|
-
change at its head (final). Red, green and refactor are written and held by their gates. How the
|
|
124
|
-
coordinator and drivers carry this out is the `delivery.operating-model` convention; what a reviewer
|
|
125
|
-
checks is `delivery.review`; how agents talk, through a local ntfy board with one topic per program,
|
|
126
|
-
tranche and review conversation (`atdd-bun chat`), is `delivery.board`, used only when `delivery.board` is
|
|
127
|
-
set. The skill only points to them.
|
|
128
|
-
|
|
129
|
-
The records live with the program's reasoning, in the docs profile's `docs/delivery/` area:
|
|
130
|
-
|
|
131
|
-
```text
|
|
132
|
-
docs/delivery/index.adoc the program: why, scope, how it was split (docs profile)
|
|
133
|
-
docs/delivery/tranches/<tranche>/evidence.yaml one tranche's review record (delivery profile)
|
|
134
|
-
docs/delivery/tranches/<tranche>/*.json the retained raw reviewer reports
|
|
135
|
-
```
|
|
136
|
-
|
|
137
|
-
Where delivery is adopted, the docs profile leaves the records folder's records and data files to
|
|
138
|
-
the delivery profile: they are not authored documentation, and changing them needs no docs
|
|
139
|
-
declaration. AsciiDoc there stays documentation. Where the docs profile is active, the first tranche
|
|
140
|
-
also brings `docs/index.adoc` and `docs/delivery/index.adoc`, each with `:doc-id:` and `:status:`,
|
|
141
|
-
since every docs area needs an index.
|
|
142
|
-
|
|
143
|
-
Upgrading from 0.8.0: records under `delivery/` are reported until `delivery.root: delivery` is set
|
|
144
|
-
(a reported root change, approved once) or they are moved. A data file in an old tranche that no
|
|
145
|
-
record there names is reported on local runs, not at the merge gate; removing it is a gate change a
|
|
146
|
-
human approves, or a new tranche's record can name it.
|
|
147
|
-
|
|
148
|
-
Upgrading from 0.9.0: an `atdd-bun.yaml` field with the wrong type (a quoted number, `yes`/`no`, a
|
|
149
|
-
non-string list item, `.inf`) is now reported, and on the base branch it blocks every pull request,
|
|
150
|
-
since the policy cannot be compared. Correct such fields on the base branch before upgrading.
|
|
151
|
-
|
|
152
|
-
Upgrading to 0.10: the policy names writers and reviewers per stage. The 0.9 stage names
|
|
153
|
-
(`plan_review`, `test_review`, `code_review`, `final_review` with `authors` and `reviewers`) are still
|
|
154
|
-
read, as `plan`, `red`, `refactor` and `final`, and 0.9 records that name review authors still count as
|
|
155
|
-
recorded work. Independence now defaults to `different-model`: a repository that relied on the old
|
|
156
|
-
`fresh-process` default sets it explicitly. A repository with no `stages:` gets the new default
|
|
157
|
-
operating model, without the integrity check reporting the change.
|
|
158
|
-
|
|
159
|
-
From 0.10.2 the pre-commit hook no longer counts uncommitted work: it refused exactly the small
|
|
160
|
-
commits that reduce it. `max_uncommitted_files` is no longer read; commit size stays limited by
|
|
161
|
-
`max_staged_files` and `max_staged_changed_lines`.
|
|
162
|
-
|
|
163
|
-
From 0.10.3 each ready record is judged by the delivery policy in `atdd-bun.yaml` at its `approved_sha`:
|
|
164
|
-
a later policy change (dropping or reordering a model, removing a review) never makes a merged record
|
|
165
|
-
fail. Records in progress are judged by the current policy.
|
|
166
|
-
|
|
167
|
-
From 0.10.4 a stage with nothing written (a plan-only or no-op tranche) records no work; a review
|
|
168
|
-
whose range recorded none answers for the latest recorded work before it.
|
|
169
|
-
|
|
170
|
-
From 0.10.5 only coordinators and drivers use the board: a writer or reviewer takes its task from its
|
|
171
|
-
launch prompt and returns its answer as output, which the driver posts. `atdd-bun chat wait` takes several
|
|
172
|
-
topics and `--skip heartbeat`; reviewers answer in JSON.
|
|
173
|
-
|
|
174
|
-
From 0.10.7 only a browser spec (a `*.e2e.*` file, or a Playwright file bound by `// Train:`/`// Journey:` or a
|
|
175
|
-
`test:train:`/`test:journey:` URN) is a journey spec. A `bun:test` file may carry the `Acceptance:` line
|
|
176
|
-
traceability needs, including a test proving `acc:train:…` and the journey test `atdd-bun.topology.e2e-location` requires.
|
|
177
|
-
|
|
178
|
-
Every key is optional; these are the defaults:
|
|
179
|
-
|
|
180
|
-
```yaml
|
|
181
|
-
delivery:
|
|
182
|
-
root: docs/delivery/tranches # one <tranche>/evidence.yaml per tranche, reports beside it
|
|
183
|
-
require_record: true # at the gate, a change outside the root (other than atdd-bun.yaml alone) needs a tranche record
|
|
184
|
-
multiplexer: herdr # the terminal multiplexer humans watch agents in; any command name
|
|
185
|
-
# board: { url: http://127.0.0.1:2586 } # opt-in: agents talk through a local board; absent, there is none
|
|
186
|
-
independence: different-model # a reviewer's model wrote none of the work it reviews; or fresh-process
|
|
187
|
-
stages: # models in preference order: the first, then recorded fallbacks
|
|
188
|
-
plan: { writer: [codex, claude-opus, kimi], reviewer: [glm, claude-opus, codex, kimi] }
|
|
189
|
-
red: { writer: [glm, claude-sonnet, deepseek-flash, claude-opus, codex, kimi] }
|
|
190
|
-
green: { writer: [glm, claude-sonnet, deepseek-flash, claude-opus, codex, kimi] }
|
|
191
|
-
refactor: { writer: [glm, claude-sonnet, deepseek-flash, claude-opus, codex, kimi] }
|
|
192
|
-
final: { reviewer: [codex, glm, claude-opus, kimi] }
|
|
193
|
-
fallback: { after_failures: 3, within_minutes: 10, when_exhausted: block } # or wait
|
|
194
|
-
commands: {} # per model: { author: "...", review: "..." } overriding delivery.operating-model's defaults
|
|
195
|
-
```
|
|
196
|
-
|
|
197
|
-
The profile checks the record, never the running agents. The generated CI sets
|
|
198
|
-
`ATDD_DELIVERY_GATE`: `merge` on pull requests and the merge queue, where every record the branch
|
|
199
|
-
changes must be `ready`, the branch may differ from its approved SHA only under the delivery root,
|
|
200
|
-
and a change outside the root needs a record unless it touches only `atdd-bun.yaml` (`require_record`, default true); `post-merge` on a
|
|
201
|
-
push to a protected branch (the generated workflow's push branches follow `protected_branches`), where the pushed commit must contain every approved SHA it brings in. Merge tranches with a
|
|
202
|
-
merge commit: a squash or rebase merge writes a commit no reviewer saw, and the post-merge check
|
|
203
|
-
fails on it. Moving the root, dropping a stage, relaxing a stage from `different-model` to
|
|
204
|
-
`fresh-process`, no longer reviewing a stage, adding a writer or reviewer, moving a fallback model earlier in a list, turning off
|
|
205
|
-
`require_record`, making fallback easier, or adding or changing a model's `commands` loosens the policy and is reported by the integrity check.
|
|
206
|
-
|
|
207
|
-
The record's model and run identifiers are the driver's claims. The profile checks that they are
|
|
208
|
-
consistent and that a `ready` record retains every review's raw report (a record in progress may lag
|
|
209
|
-
behind); it does not verify them
|
|
210
|
-
cryptographically.
|
|
211
|
-
|
|
212
|
-
The hooks enforce protected-branch blocking, micro-commit limits, mass-delete approval and
|
|
213
|
-
validation of the affected area. Git can bypass them, so CI is the authority. The changed-line
|
|
214
|
-
limit counts a moved file by the edits it carries, so relocating a directory is not measured as
|
|
215
|
-
rewriting it; mass-delete and registry-removal approval still count a move in full.
|
|
216
|
-
The journey view `atdd-bun docs journeys` generates is exempt from the size caps, since its index
|
|
217
|
-
alone can exceed them, and never from the `docs` profile, which refuses a copy that is not exactly
|
|
218
|
-
what the plan generates.
|
|
219
|
-
|
|
220
111
|
## Docs-site theme
|
|
221
112
|
|
|
222
113
|
A repository that publishes its AsciiDoc docs as a site does not need its own theme.
|
|
@@ -237,8 +128,7 @@ To re-theme it, override its custom properties (`--paper`, `--ink`, `--accent`,
|
|
|
237
128
|
The skill gives every coding agent the lifecycle PLAN → RED → GREEN → SMOKE → REFACTOR → TRACE and
|
|
238
129
|
the profile that gates each stage. The block in `AGENTS.md` and `CLAUDE.md` adds the rules: never
|
|
239
130
|
modify the toolkit itself, only the configuration it offers; turn profiles on or off in
|
|
240
|
-
`profiles:` only when the user asks
|
|
241
|
-
delivery skill.
|
|
131
|
+
`profiles:` only when the user asks.
|
|
242
132
|
|
|
243
133
|
`atdd-bun integrity`, run by the generated test and first in CI on a clean install, fails when:
|
|
244
134
|
|
|
@@ -8,12 +8,11 @@ statement: >-
|
|
|
8
8
|
terms:
|
|
9
9
|
- term_id: presets
|
|
10
10
|
text: >-
|
|
11
|
-
Planning: planner (plus docs when the repository keeps documentation under docs/). Building, once RED starts: add coder, tester, traceability, security; add htmx and design for a web UI, and interlocking once trains have a runtime. Instrumenting: add telemetry.
|
|
11
|
+
Planning: planner (plus docs when the repository keeps documentation under docs/). Building, once RED starts: add coder, tester, traceability, security; add htmx and design for a web UI, and interlocking once trains have a runtime. Instrumenting: add telemetry.
|
|
12
12
|
values:
|
|
13
13
|
planning: [planner]
|
|
14
14
|
building: [coder, tester, traceability, security]
|
|
15
15
|
instrumenting: [telemetry]
|
|
16
|
-
delivering: [delivery]
|
|
17
16
|
content:
|
|
18
17
|
summary: >-
|
|
19
18
|
A goal is easier to name than a profile. The presets map what the user is doing to the profiles that judge it, in the order the work creates what they check.
|
|
@@ -22,7 +21,7 @@ content:
|
|
|
22
21
|
security joins with the first code, not at release: a secret committed during GREEN stays in history.
|
|
23
22
|
coder already bundles the architecture, metrics, runtime, design and responsive detectors, so those need no later preset.
|
|
24
23
|
fix_hint: |
|
|
25
|
-
At a stage whose preset is missing, ask what the user wants to do (planning, building, instrumenting
|
|
24
|
+
At a stage whose preset is missing, ask what the user wants to do (planning, building, or instrumenting), recommend that preset and say it can be adopted step by step, then write the chosen list to profiles: in atdd-bun.yaml.
|
|
26
25
|
exceptions:
|
|
27
26
|
- >-
|
|
28
27
|
A profile can always be run by name to see what it would report (atdd-bun coder); only profiles: decides what the repository is governed by.
|
|
@@ -5,7 +5,7 @@ status: active
|
|
|
5
5
|
name: Each authored area carries an index.adoc
|
|
6
6
|
statement: >-
|
|
7
7
|
Each authored area of the canonical tree — `docs/`, `docs/purpose/`, `docs/architecture/`,
|
|
8
|
-
`docs/architecture/decisions/`, `docs/
|
|
8
|
+
`docs/architecture/decisions/`, `docs/archive/` — MUST contain an `index.adoc`.
|
|
9
9
|
Other canonical filenames are defined when useful and are NOT instantiated merely to satisfy an
|
|
10
10
|
empty taxonomy (spec 2 §4).
|
|
11
11
|
terms:
|
|
@@ -21,7 +21,7 @@ terms:
|
|
|
21
21
|
content:
|
|
22
22
|
summary: >-
|
|
23
23
|
An area without an index is an area the rendered site cannot navigate into and a reader cannot
|
|
24
|
-
enter. The rule checks the
|
|
24
|
+
enter. The rule checks the five canonical areas only; it does not require an index in every
|
|
25
25
|
subdirectory an author happens to create.
|
|
26
26
|
normative_text: |
|
|
27
27
|
The rule is scoped to the canonical areas DELIBERATELY, and the restraint is the point. Spec 2 §4
|
|
@@ -47,7 +47,7 @@ content:
|
|
|
47
47
|
path: docs/archive/old-spec.adoc # ✓ archive lands in archive/
|
|
48
48
|
|
|
49
49
|
An archived document keeps its content and gains `:status:`. It does not gain a place in
|
|
50
|
-
`purpose
|
|
50
|
+
`purpose/` or `architecture/` — those are for documents that are accepted truth today.
|
|
51
51
|
exceptions:
|
|
52
52
|
- >-
|
|
53
53
|
`impact: none` declares no artifacts and is not checked by this rule. Core enforces that a
|
|
@@ -45,7 +45,6 @@ content:
|
|
|
45
45
|
migration preserves history and never promotes it.
|
|
46
46
|
exceptions:
|
|
47
47
|
- Everything beneath `docs/dist/` is generated output and is never scanned.
|
|
48
|
-
- Where the delivery profile is adopted, its records folder (delivery.root, by default `docs/delivery/tranches/`) holds tranche records and raw reviewer reports, not authored documentation; its record and data files are left to that profile, while AsciiDoc there stays documentation.
|
|
49
48
|
- Markdown OUTSIDE `docs/` is untouched by this rule. `README.md`, `CONTRIBUTING.md` and the
|
|
50
49
|
repository-root corpus are out of its scope; they are migrated by the adoption step, not
|
|
51
50
|
rejected by this detector.
|
|
@@ -39,7 +39,7 @@ content:
|
|
|
39
39
|
:doc-id: architecture.shared-control-root
|
|
40
40
|
:status: current
|
|
41
41
|
|
|
42
|
-
Choose the id from the area the document lives in (`architecture.`, `purpose.`,
|
|
42
|
+
Choose the id from the area the document lives in (`architecture.`, `purpose.`,
|
|
43
43
|
`archive.`) so that the id and the tree agree. Nothing enforces that agreement today; it is a
|
|
44
44
|
convention that keeps ids readable, not a checked rule.
|
|
45
45
|
exceptions:
|
|
@@ -42,7 +42,7 @@ content:
|
|
|
42
42
|
impact: change
|
|
43
43
|
artifacts:
|
|
44
44
|
- action: modify
|
|
45
|
-
path: docs/
|
|
45
|
+
path: docs/purpose/release.adoc
|
|
46
46
|
|
|
47
47
|
If the change is genuinely not a documentation change — a typo fix in a rendered artefact, a
|
|
48
48
|
path you did not mean to touch — the fix is to not touch `docs/`, not to widen the declaration.
|
|
@@ -50,7 +50,6 @@ content:
|
|
|
50
50
|
the honest correction.
|
|
51
51
|
exceptions:
|
|
52
52
|
- '`docs/dist/**` is generated output and is never required to be declared.'
|
|
53
|
-
- Where the delivery profile is adopted, its records folder (delivery.root, by default `docs/delivery/tranches/`) changes with every tranche; its record and data files are governed by that profile's merge gate, not by a documentation declaration (AsciiDoc there is still documentation and still declared).
|
|
54
53
|
- A repository with no documentation declaration recorded at all is core's concern (companion §4,
|
|
55
54
|
check 1), not this rule's. This rule fires when a declaration exists and does not cover the diff.
|
|
56
55
|
- >-
|
|
@@ -57,6 +57,7 @@ export function trainSequenceCovered(trainId, texts) {
|
|
|
57
57
|
// reported "no test asserts the wagon SEQUENCE" about a sequence that does not exist,
|
|
58
58
|
// and a route pointing at a missing train is the binding family's concern
|
|
59
59
|
// (declared_route_not_runtime_resolvable), not this one.
|
|
60
|
+
// The plan document that declares `trainId`'s sequence, or null when none does.
|
|
60
61
|
export function declaresASequence(croot, trainId) {
|
|
61
62
|
const found = [];
|
|
62
63
|
(function rec(dir) {
|
|
@@ -73,9 +74,9 @@ export function declaresASequence(croot, trainId) {
|
|
|
73
74
|
for (const f of found) {
|
|
74
75
|
const text = readText(f);
|
|
75
76
|
if (!text.includes(trainId)) continue;
|
|
76
|
-
if (/^\s*sequence:\s*$/m.test(text) || /^\s*sequence:\s*\[/m.test(text)) return
|
|
77
|
+
if (/^\s*sequence:\s*$/m.test(text) || /^\s*sequence:\s*\[/m.test(text)) return f;
|
|
77
78
|
}
|
|
78
|
-
return
|
|
79
|
+
return null;
|
|
79
80
|
}
|
|
80
81
|
|
|
81
82
|
export function scanExecution(scanRoot) {
|
|
@@ -85,13 +86,14 @@ export function scanExecution(scanRoot) {
|
|
|
85
86
|
if (!records.length) continue;
|
|
86
87
|
const files = e2eFiles(croot).map((f) => ({ file: f, text: readText(f) }));
|
|
87
88
|
const texts = files.map((x) => x.text);
|
|
88
|
-
const anchor = files.length ? rel(files[0].file, croot) : "e2e/";
|
|
89
89
|
for (const trainId of [...trainsReachableFromRoutes(records)].sort()) {
|
|
90
|
-
|
|
90
|
+
// The finding points at the train's own document, where the sequence a test must assert is declared (FWS #fqUGvWHn25mq).
|
|
91
|
+
const declared = declaresASequence(croot, trainId);
|
|
92
|
+
if (!declared) continue; // nothing declared to exercise
|
|
91
93
|
if (unbuiltWagons(croot, trainId).length) continue; // pending: a wagon on it has no source yet
|
|
92
94
|
if (trainSequenceCovered(trainId, texts)) continue;
|
|
93
95
|
violations.push(
|
|
94
|
-
mk(RULE_SEQUENCE,
|
|
96
|
+
mk(RULE_SEQUENCE, rel(declared, croot), 1, 0,
|
|
95
97
|
`declared train "${trainId}" is selected by a route but no test asserts the wagon ` +
|
|
96
98
|
`SEQUENCE it executes; reorder or empty its definition and the suite stays green`,
|
|
97
99
|
""),
|
|
@@ -21,7 +21,7 @@ Each `dirty_*` tree is `clean/` plus exactly one defect, so that
|
|
|
21
21
|
| `dirty_identity` | a document with no attributes | `planner.docs.identity-required` |
|
|
22
22
|
| `dirty_duplicate_id` | two documents claiming `purpose.worktrees` | `planner.docs.doc-id-unique` |
|
|
23
23
|
| `dirty_unresolved_edge` | `:implements: purpose.wortrees` (a typo) | `planner.docs.graph-target-resolves` |
|
|
24
|
-
| `dirty_missing_index` | `docs/
|
|
24
|
+
| `dirty_missing_index` | `docs/purpose/` with its index removed | `planner.docs.area-index-required` |
|
|
25
25
|
| `dirty_adr_registry` | ADR-20260906-002 absent from the registry | `planner.docs.adr-registry-derived` |
|
|
26
26
|
|
|
27
27
|
`dirty_unresolved_edge` carries the **#1758 regression**: the test asserts the graph's
|
package/integrity.json
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
{
|
|
2
|
-
"version": "0.10.
|
|
2
|
+
"version": "0.10.32",
|
|
3
3
|
"files": {
|
|
4
4
|
"HOOK_AUDIT.md": "5329d840db37671b1918f688ead26865473b87db73dbc75f7c8b2a8bbe8d6d43",
|
|
5
5
|
"PLANNER_PORT.md": "fb5935bac8b7ac18994de21e43ace3a5ef8cd55f85b0e3349fca261280054f11",
|
|
6
|
-
"README.md": "
|
|
6
|
+
"README.md": "78a1acc1f18f84a567448051bec90f676e3cab7956d971abc97a6201c96fc409",
|
|
7
7
|
"bunfig.toml": "b9fc65eca9014c5179380259d70e76385a6a80788fa9a2df5fb3eaa5554fd2fe",
|
|
8
8
|
"conventions/atdd-bun.planner/atdd-bun.planner.acceptance-identity.convention.yaml": "81c5c773d5ee15e8d99a2c237aa9846b110b2533df45ebf407d0e3ec6ed3dd03",
|
|
9
9
|
"conventions/atdd-bun.planner/atdd-bun.planner.identity-required.convention.yaml": "e96d7c1455d0c221072d82e7f2b55da1c4f9ceb17718eb6ed96affdeef37675b",
|
|
@@ -13,7 +13,7 @@
|
|
|
13
13
|
"conventions/atdd-bun.planner/atdd-bun.planner.reference-resolves.convention.yaml": "b96927d269692c29c02fee38ecbeb999480791f8dc7486c4072a9ff30183d7d6",
|
|
14
14
|
"conventions/atdd-bun.planner/atdd-bun.planner.schema.convention.yaml": "16d0a26451758b759e6ca1f5b4f38ae1feff129688306ffcc2f70f6d3974b591",
|
|
15
15
|
"conventions/atdd-bun.planner/atdd-bun.planner.train-wagon-resolves.convention.yaml": "6410e248351e701dcba38c671c07c4d8f6d67927984ed4d18e567abd1eb1f3f0",
|
|
16
|
-
"conventions/atdd-bun.profiles/atdd-bun.profiles.presets.convention.yaml": "
|
|
16
|
+
"conventions/atdd-bun.profiles/atdd-bun.profiles.presets.convention.yaml": "a5885bfa387d0abbc4694ea2d0cf1f3639d5b45588707d4f70f2f2be4e12e847",
|
|
17
17
|
"conventions/atdd-bun.topology/atdd-bun.topology.e2e-location.convention.yaml": "3a3b991bc851b86d597636200f5cb10a0defda3920348860cdca28955ab91f4c",
|
|
18
18
|
"conventions/atdd-bun.topology/atdd-bun.topology.feature-source-coverage.convention.yaml": "2b64093f1e7f1fe0e2edcadf12e560fa80cecec19536abaa5bf09af362c6694e",
|
|
19
19
|
"conventions/atdd-bun.topology/atdd-bun.topology.feature-test-coverage.convention.yaml": "279be57399c9b79a1bd758414076e3053d67b7d4a7fcbbb950ea12d1201effeb",
|
|
@@ -92,27 +92,16 @@
|
|
|
92
92
|
"conventions/coder.htmx/coder.htmx.verb-endpoint-is-routed.convention.yaml": "d6aa58d35df4b7ebbcf675ca79f0177d64e56f095802b9a3eaae3e4befb5c270",
|
|
93
93
|
"conventions/coder.htmx/coder.htmx.verb-endpoint-same-origin.convention.yaml": "2128d26153e2d1f19c65a1e1665d4f82c78395daedb336d6ef1256e82b74aedb",
|
|
94
94
|
"conventions/coder.htmx/coder.htmx.verb-mutation-signals-progress.convention.yaml": "ae85c5ea01a09a3c41b939988088a8e5da91848d2710a1f0a1e0c86308638ac9",
|
|
95
|
-
"conventions/delivery/delivery.approved-sha-resolves.convention.yaml": "68f2ecc10870e780abb05bb31d211b1923d47b56672df4b3950f437aa9cf8ca8",
|
|
96
|
-
"conventions/delivery/delivery.board.convention.yaml": "fefc9f32f8ee85ee35b254cbc4aefec55a4b72eaa3a7b02b0ec21efb2074a013",
|
|
97
|
-
"conventions/delivery/delivery.config-schema.convention.yaml": "b59a69b7789ad0c3d0b1ac9ea2b955fbbb5dfa07a9ee169a037b406a198813f0",
|
|
98
|
-
"conventions/delivery/delivery.evidence-schema.convention.yaml": "9c6a22495dfb3e2fcbca700392866c3b5660084b1f5594230eb320b499d5e5cb",
|
|
99
|
-
"conventions/delivery/delivery.findings-resolved.convention.yaml": "f6574e93a9a2d4bdd6d6f5645720b1a647fc0048d95f7675fe783d2ddb62c05b",
|
|
100
|
-
"conventions/delivery/delivery.merge-gate.convention.yaml": "48745ec23625b68be9b8fe2c6dcdcba88b2b38924f6593abf6987391ff0ee243",
|
|
101
|
-
"conventions/delivery/delivery.model-allowed.convention.yaml": "e9690e95f3604483f182b3032ae60eac20109eb458509f14651945ccf07692f2",
|
|
102
|
-
"conventions/delivery/delivery.operating-model.convention.yaml": "1a86a1fe84695968a2fb719a899629af9a8baadcd90bdb8776f1f0208cebbbb4",
|
|
103
|
-
"conventions/delivery/delivery.review.convention.yaml": "b033579c2d90fcb098d325dcc07c7b084e048cca43fbe8e28159ec08a412018a",
|
|
104
|
-
"conventions/delivery/delivery.reviewer-independent.convention.yaml": "8c436d66ef5b1f6d6bc5dd55a235caca2490020e88665eecadb2ca41cd4149c5",
|
|
105
|
-
"conventions/delivery/delivery.stages-complete.convention.yaml": "0e5dd8057ad51eff7906e3424a9686a81be1814447afb9a30acab43d39e49b4c",
|
|
106
95
|
"conventions/planner.docs/planner.docs.adr-registry-derived.convention.yaml": "152cfb05c4a0e2053b09c05186d48ef330f4a94c5faddb8fbb322a81341a60a5",
|
|
107
|
-
"conventions/planner.docs/planner.docs.area-index-required.convention.yaml": "
|
|
108
|
-
"conventions/planner.docs/planner.docs.artifact-path-shape.convention.yaml": "
|
|
109
|
-
"conventions/planner.docs/planner.docs.asciidoc-only.convention.yaml": "
|
|
96
|
+
"conventions/planner.docs/planner.docs.area-index-required.convention.yaml": "6b851168daf1913c24ecdb91ae1d81a9e4542e9a5354642b2c60c273c15d28e8",
|
|
97
|
+
"conventions/planner.docs/planner.docs.artifact-path-shape.convention.yaml": "436937a82f8e064833dc28adfeedcfa78fcdc46a74b28e956756000787b3e05e",
|
|
98
|
+
"conventions/planner.docs/planner.docs.asciidoc-only.convention.yaml": "6e7b5b16efd794bee677d0827adc71c2f66df8bcba0264dd74a25c67c19f3a3b",
|
|
110
99
|
"conventions/planner.docs/planner.docs.doc-id-unique.convention.yaml": "558bc7d7001645f5443fcf19a5da67df17220b335d99811d103529bf22555311",
|
|
111
100
|
"conventions/planner.docs/planner.docs.graph-target-resolves.convention.yaml": "657225233b92125b2667e2d72d65dc0ebc7cfc92b2c9e023d3d42449281683ea",
|
|
112
|
-
"conventions/planner.docs/planner.docs.identity-required.convention.yaml": "
|
|
101
|
+
"conventions/planner.docs/planner.docs.identity-required.convention.yaml": "afe23ea51fd53f305668a8ba97acc46125d0d2a1d818785b35ecd0457f65ac1c",
|
|
113
102
|
"conventions/planner.docs/planner.docs.journey-view-current.convention.yaml": "5892d4213d72342dc568c37f13942139bbdce4c0d5716075de579dc8060fc969",
|
|
114
103
|
"conventions/planner.docs/planner.docs.reference-integrity.convention.yaml": "34310088114ac7cc58bc74443a76366e3e644121aaa3ff39b6602a0d15e03293",
|
|
115
|
-
"conventions/planner.docs/planner.docs.undeclared-change.convention.yaml": "
|
|
104
|
+
"conventions/planner.docs/planner.docs.undeclared-change.convention.yaml": "b66655649bbf030ab58f29d0c474890b88cf8dbff8440c9b22cb44769d0bbb7e",
|
|
116
105
|
"conventions/planner.telemetry/planner.telemetry.acceptance-decision.convention.yaml": "67dc840e0993c6940a431403b47439484ed557855a7dee82d75abd1479f3151e",
|
|
117
106
|
"conventions/planner.telemetry/planner.telemetry.logical-ownership.convention.yaml": "6dd666a22fd7fd0cb6e5fe5505665c8889a504ee929fdebf3aee019df4aac2b4",
|
|
118
107
|
"conventions/planner.telemetry/planner.telemetry.metric-cardinality.convention.yaml": "e61831f207ad4f09be983b300cbedc40f6ad08a4b2483612fc195e2343be93f6",
|
|
@@ -386,7 +375,7 @@
|
|
|
386
375
|
"detectors/bun_interlocking_coverage/checks/interlocking_route_coverage.mjs": "2d73c401adf77b3147e11271653c528d02dfc50f4eebde8be35795707023fb6d",
|
|
387
376
|
"detectors/bun_interlocking_coverage/checks/interlocking_smoke_coverage.mjs": "ad53b606c325f87b09ac89c848c75ba5618e7073223fe528cf048343147638ce",
|
|
388
377
|
"detectors/bun_interlocking_coverage/checks/interlocking_trace_binds.mjs": "61dcb8a8d04e9764aab7920f346bd3684fc98e2c294aa5c58eefec555145a1d0",
|
|
389
|
-
"detectors/bun_interlocking_coverage/checks/interlocking_train_sequence.mjs": "
|
|
378
|
+
"detectors/bun_interlocking_coverage/checks/interlocking_train_sequence.mjs": "e16af2af51a07c80f7cf5f4016ebf3f18a8cfc6b0ca9ca9187992fac6c12aeaf",
|
|
390
379
|
"detectors/bun_interlocking_coverage/detect.mjs": "a124418dc29aaf8fda9cd09427230d25768206b3f563d516774667e8cf75b66e",
|
|
391
380
|
"detectors/bun_interlocking_coverage/fixtures/clean/interlocking_production_runner/e2e/interlockings/match-resolution/routes.test.ts": "ba6ea85b3fbe15e3c49332da3ad2921a0ff3436a6fe3b5a5035fb35fdc874720",
|
|
392
381
|
"detectors/bun_interlocking_coverage/fixtures/clean/interlocking_production_runner/e2e/interlockings/match-resolution/trace.test.ts": "aee4ea93ceb8636846344e915cd7e66f7e8f99ba08596f83266590fa2b9ff58e",
|
|
@@ -674,15 +663,6 @@
|
|
|
674
663
|
"detectors/bun_ts_metrics_detector/fixtures/dirty/orphan.ts": "0f7acd0dffe90902a0a43cc45771b8a473d079efc9693112b3b85645c191c23d",
|
|
675
664
|
"detectors/bun_ts_metrics_detector/fixtures/dirty/typed.ts": "7c27ee1a674af7d5b2cce3a65bfec2111602d84a75817fd60f737c7d63fc9c83",
|
|
676
665
|
"detectors/bun_ts_metrics_detector/ts_metrics.mjs": "d5da8c768dd7fe1717cc7f29b4115f8b2573c945cf9fb2e6d7c2d76adc186417",
|
|
677
|
-
"detectors/delivery_evidence/atdd.implementation.yaml": "2f6fc30dc353bef97bcb32ea54e4317d3c87cbd7ae1443fcef2aefc46280dc09",
|
|
678
|
-
"detectors/delivery_evidence/detect.mjs": "e98664dee8090a0b280cd285a54e9a6fb9ba3572af2666b4e3656ca5b0555509",
|
|
679
|
-
"detectors/delivery_evidence/fixtures/clean/atdd-bun.yaml": "f701861e3530bb5a25a70d73e248549fb96642f48db1ff4d3e8e4546aaa825ee",
|
|
680
|
-
"detectors/delivery_evidence/fixtures/clean/docs/delivery/tranches/api/evidence.yaml": "2cdbc4f628cf2d56627e6692b1f4e1a9b72316a3b7d09b47fffcd54c696a0fcb",
|
|
681
|
-
"detectors/delivery_evidence/fixtures/dirty/atdd-bun.yaml": "85c572d65f27b11b7ff8f115883913b2d2f1978097c416d3341b9c9d0de373d4",
|
|
682
|
-
"detectors/delivery_evidence/fixtures/dirty/docs/delivery/tranches/api/evidence.yaml": "05a6c7926603842dbccd820cf19326bcf7377012931b63501748ba30a196945b",
|
|
683
|
-
"detectors/delivery_evidence/fixtures/dirty/docs/delivery/tranches/data/evidence.yaml": "165dd67ff64f14c30268de5b18bf0c9c6634fb9ca48439c660c1962cebe3e0cb",
|
|
684
|
-
"detectors/delivery_evidence/fixtures/dirty/docs/delivery/tranches/orphan/README.md": "7d480b1fff6546615e55d866784bc2267d06d0221dfde8d0ba0353fa1ea0db9a",
|
|
685
|
-
"detectors/delivery_evidence/fixtures/dirty/docs/delivery/tranches/ui/evidence.yaml": "777b4f7921e302dfce79cd764bba8b44091ac9c7ee04a00f5dbb663342ec68a0",
|
|
686
666
|
"detectors/htmx_e2e_detector/atdd.implementation.yaml": "454bb123039d57c992d27d9274e20fa3452ac41a237eb55471be62a4bcfebf06",
|
|
687
667
|
"detectors/htmx_e2e_detector/checks/_e2e.mjs": "efec6c8e3dc8b95bf3acd826397ecdedac64c06d367791a4017a272bc0660896",
|
|
688
668
|
"detectors/htmx_e2e_detector/checks/_map.json": "94dec08ff4764cd6a3dba139f12a7c984292e95a9354b0cdaa0ce9d4180e2c89",
|
|
@@ -788,7 +768,7 @@
|
|
|
788
768
|
"detectors/htmx_tester_detector/fixtures/dirty/panel.html": "840f263e83979c87b8a6dffdbef5df69883cfa2d5122be959092a4776f2f6457",
|
|
789
769
|
"detectors/htmx_tester_detector/fixtures/dirty/statusonly.test.ts": "a2daf2874bf68c6221374ac05619642a42d56b5d1f76e30fa3d2a1826adaf51b",
|
|
790
770
|
"detectors/htmx_tester_detector/test_header.mjs": "a22221fe9ef6d10297ec777c5d0c6e7b84010ccf41e90db30c036206790ea198",
|
|
791
|
-
"detectors/planner_docs_capability/README.md": "
|
|
771
|
+
"detectors/planner_docs_capability/README.md": "6e90339fae5a77154fc7bfda36d60b57e55acbd2884cbbc1d86f31f8aaf99960",
|
|
792
772
|
"detectors/planner_docs_capability/atdd.implementation.yaml": "0bc4c27c61faa15147ad8ed55a866d7830875efb6222aa463d49f1163a8b6121",
|
|
793
773
|
"detectors/planner_docs_capability/detect.mjs": "d10773fa5b2d8f65ce351804694171a6eb75e05eb4c80fa1edce4a5d56b72c5d",
|
|
794
774
|
"detectors/planner_docs_capability/fixtures/clean/docs/architecture/decisions/adr-20260906-001-shared-control-root.adoc": "6d30e5545e7b051c80605c3dbee50286f71e344ab2e71a987db945941de42523",
|
|
@@ -899,10 +879,8 @@
|
|
|
899
879
|
"detectors/planner_docs_capability/fixtures/dirty_missing_index/docs/architecture/state-store.adoc": "41141c225dad3fed39195313ad09a5cf3e3ba2f591bd6d8c7a9133dd79e52498",
|
|
900
880
|
"detectors/planner_docs_capability/fixtures/dirty_missing_index/docs/archive/2025-control-root.adoc": "7c7aef22837f29891a90ce15b0b181aab4a79fbba97e4c7903cc5e56d9028983",
|
|
901
881
|
"detectors/planner_docs_capability/fixtures/dirty_missing_index/docs/archive/index.adoc": "aa6d6eeea1a5692e800575c9579dc7b9e43ccab159f787baad560b3877d03ba0",
|
|
902
|
-
"detectors/planner_docs_capability/fixtures/dirty_missing_index/docs/delivery/release.adoc": "cef338e694dae844496d0d4379cc0e84b9cc37ca5af38a91c4cea840cf39c67a",
|
|
903
882
|
"detectors/planner_docs_capability/fixtures/dirty_missing_index/docs/dist/index.md": "eac4d8fe653f45c959731cc08218d898e5123d685a1017191c4cffb626777f13",
|
|
904
883
|
"detectors/planner_docs_capability/fixtures/dirty_missing_index/docs/index.adoc": "8aabcd7a4ecfc6ef565a604c1172364f761bef7d3fc4f2c96c07dce4e0ebe19b",
|
|
905
|
-
"detectors/planner_docs_capability/fixtures/dirty_missing_index/docs/purpose/index.adoc": "e10193ea48f3c77b67ca8ed7221c53f23ce699e63f651cc340cea9ef6b44cffb",
|
|
906
884
|
"detectors/planner_docs_capability/fixtures/dirty_missing_index/docs/purpose/worktrees.adoc": "de957bd8aec411c930fa9785d793c3345c82f5d7cb7f28f40f73f1c53a436440",
|
|
907
885
|
"detectors/planner_docs_capability/fixtures/dirty_unresolved_edge/docs/architecture/decisions/adr-20260906-001-shared-control-root.adoc": "6d30e5545e7b051c80605c3dbee50286f71e344ab2e71a987db945941de42523",
|
|
908
886
|
"detectors/planner_docs_capability/fixtures/dirty_unresolved_edge/docs/architecture/decisions/index.adoc": "4a6cb87e249d587c85bb6389ff5fecae7a96194af8677b588eed0c791099123b",
|
|
@@ -1185,8 +1163,6 @@
|
|
|
1185
1163
|
"planner-schemas/binding-lock.schema.json": "f2455606702f45fafa194549126d4a66e6c286ba1c4ba9e6bdcf932286a6d34d",
|
|
1186
1164
|
"planner-schemas/component.schema.json": "d20d3502c155627a120cb10d5e9bdec4ba2c73af9c3e9a9d10e3c351f167c72a",
|
|
1187
1165
|
"planner-schemas/contract-registry.schema.json": "b9dbaf6c87d4f4d676e3b4251344b9eada523b1c5e739c0423cabe267012c12e",
|
|
1188
|
-
"planner-schemas/delivery-config.schema.json": "7cd9c15ea4345ad83195b9a1c7d09a0b66275e9a3fdf8b5d6905d96bbec579d3",
|
|
1189
|
-
"planner-schemas/delivery-evidence.schema.json": "72ba1450abe5482c43f2069e9ee7d121398008a0ddef36c6b269d38a16872e0e",
|
|
1190
1166
|
"planner-schemas/feature.schema.json": "eb4aa40d89067ae5c86a079bb3d8e4f45c8727f9e15db2b86c08dacf8e4ae56a",
|
|
1191
1167
|
"planner-schemas/journey.schema.json": "1ff705bcf89a2823cf60c9e1597e254f97844e7a74dc58299d53192ad2c9f8c3",
|
|
1192
1168
|
"planner-schemas/registry-index.schema.json": "ffd5643da662ced4052707eeb270eb02908f2e48365103ff0638ec7ba146f430",
|
|
@@ -1199,33 +1175,29 @@
|
|
|
1199
1175
|
"planner-schemas/train.schema.json": "d6fbac9067c1bffeb84eb79a71228441055af6e6e7ba141dd4e0bcb079345ec0",
|
|
1200
1176
|
"planner-schemas/wagon.schema.json": "57b98f1ade998d745538eb3d72fb3014a50042006870f90bce47028eea336eb4",
|
|
1201
1177
|
"planner-schemas/wmbt.schema.json": "7a3a5693bfcf01340667c2be4a3c48e74f34b1af7e8dc13372c0de06b7f4fe12",
|
|
1202
|
-
"relationships.yaml": "
|
|
1203
|
-
"src/agent.ts": "
|
|
1204
|
-
"src/board-ui.ts": "16a843705552f8f18e0e328e90e4a2a9148d771ca69f2708fe4a91302947dfad",
|
|
1205
|
-
"src/board.ts": "4b9aa5b356d67c1b4ab4018796f9d09afba6d443dbebbb733b5d6c6a8d5a1c87",
|
|
1178
|
+
"relationships.yaml": "26dd50489d7cbd45400937a8949d6ff77cdd4400bfa828d6b7a17e90c64c879b",
|
|
1179
|
+
"src/agent.ts": "009d3170752ded12e9e3d4f7f07fd68d4bab821046714ad68cea428581343c67",
|
|
1206
1180
|
"src/ci.ts": "67e54d2cbfc44a9e42837d5e750af526d6255c539d3c452a4d5fca3226c0d9ac",
|
|
1207
|
-
"src/cli.ts": "
|
|
1208
|
-
"src/
|
|
1209
|
-
"src/
|
|
1210
|
-
"src/
|
|
1211
|
-
"src/
|
|
1212
|
-
"src/
|
|
1213
|
-
"src/integrity.ts": "ba3de29e12e62a1b3e0149e243183fdfbce33d88efc9d39605b54996c01426cd",
|
|
1181
|
+
"src/cli.ts": "09e6b4bdebef32ff482a12182e2efbc2e42424ff854e813a10efd3764e45d4fc",
|
|
1182
|
+
"src/docs-capability.ts": "bdeeb414649049b1cd4fa8008cada3a576318be51c43bec91bfa46a8e250c270",
|
|
1183
|
+
"src/enforce.ts": "45c473ffec9f565fba24df2a7db6564d76ee885cd4b0ab8b34bc14b7f2bcc7b2",
|
|
1184
|
+
"src/hooks.ts": "9779eb48f9d0cb6234c33f6616f98dde6583d2ee03ac3c19f3ace2d156af26d0",
|
|
1185
|
+
"src/index.ts": "b3cc97f9867bd605aefa95650a6b8b773e32e6e52e58792d0dbf6736dd3406be",
|
|
1186
|
+
"src/integrity.ts": "3a74cc03bbdebf83d607073a4a13ab4afd4a163c2307062ed137d7d21e38b988",
|
|
1214
1187
|
"src/journey-docs.ts": "994d229376244c84212cff951032823068a76565dd2fd427b9d44e341bd14853",
|
|
1215
1188
|
"src/planner-kernel.ts": "5d3f5305fb59becb2cc97d8a03aca6b104f385805d91cc0410856e289dd6fbb1",
|
|
1216
1189
|
"src/planner-schema-validator.ts": "ce529c0936171075e93c7539b3655fe895a98dd2973ebda5775958e6ebc316d9",
|
|
1217
1190
|
"src/planner-validators.ts": "99adeb65f579af923c11f21a8f55cfb9993b007fd8df59c5f764696b55379cfc",
|
|
1218
1191
|
"src/register.ts": "6a2f1c6b8df0dc9c8f45df8ec9fac2be29044e048b08c8ffe423410e94dadedd",
|
|
1219
1192
|
"src/release.ts": "7b0fe444ee81f476f53b9c21b6c347ef588ee616c60211419cf984132be768ba",
|
|
1220
|
-
"src/setup.ts": "
|
|
1193
|
+
"src/setup.ts": "2dbdddec898e9a3779889f3491eaa1423c4427c9ec63167663245b3ae4db1e6f",
|
|
1221
1194
|
"src/telemetry-plan.ts": "cdb1e8bfff414f3ea81977388973da2cf6d89567d9e060dc9d5989a33600f153",
|
|
1222
1195
|
"src/topology.ts": "9779ee48e1c453abb76363163d4ab363463fa14e359571139f6d1f1fcc51ae2c",
|
|
1223
|
-
"templates/agents/AGENTS.block.md": "
|
|
1196
|
+
"templates/agents/AGENTS.block.md": "d7f6013ef7b1793f236b610f78f2898f6c10c60751f671ff2c4b72d49b4f6011",
|
|
1224
1197
|
"templates/agents/atdd-bun.integrity.test.ts": "dec6f6e5f65a08d9512fc703b367c163f8c9da1f6aa7fd466835c1ec30348a41",
|
|
1225
1198
|
"templates/agents/atdd/SKILL.md": "8f36d7d571aa17beb03df5e620ff837be73eb21a4e73dabd2c12188d2b378022",
|
|
1226
|
-
"templates/agents/delivery/SKILL.md": "0c4fa25303ada52db9c6b67d51a4011c15039e92c4f2947994ec9cba4d0c5efa",
|
|
1227
1199
|
"templates/docs/site.css": "482b3427e3a3cb02a85dc85cfbeac80592dfd53abf42fc92d6ea7071f22afc95",
|
|
1228
1200
|
"templates/github/atdd-bun-release.yml": "d9547e9e6ef3ae010d53d55314f6a54567f88bd900f7e50d994cd308601d2684",
|
|
1229
|
-
"templates/github/atdd-bun.yml": "
|
|
1201
|
+
"templates/github/atdd-bun.yml": "404dc06b6ff4faf5eab909f9f77bac0ae58163d810c3928c4353b1f4b3529048"
|
|
1230
1202
|
}
|
|
1231
1203
|
}
|
package/package.json
CHANGED
package/relationships.yaml
CHANGED
|
@@ -95,17 +95,6 @@ nodes:
|
|
|
95
95
|
- coder.htmx.verb-endpoint-is-routed
|
|
96
96
|
- coder.htmx.verb-endpoint-same-origin
|
|
97
97
|
- coder.htmx.verb-mutation-signals-progress
|
|
98
|
-
- delivery.approved-sha-resolves
|
|
99
|
-
- delivery.board
|
|
100
|
-
- delivery.config-schema
|
|
101
|
-
- delivery.evidence-schema
|
|
102
|
-
- delivery.findings-resolved
|
|
103
|
-
- delivery.merge-gate
|
|
104
|
-
- delivery.model-allowed
|
|
105
|
-
- delivery.operating-model
|
|
106
|
-
- delivery.review
|
|
107
|
-
- delivery.reviewer-independent
|
|
108
|
-
- delivery.stages-complete
|
|
109
98
|
- planner.acceptance.abstract-fields-required
|
|
110
99
|
- planner.acceptance.authoring-guidelines
|
|
111
100
|
- planner.acceptance.boundary-kind-vocabulary
|
|
@@ -5208,143 +5197,3 @@ edges:
|
|
|
5208
5197
|
target_ref: planner.telemetry.tracking-plan-schema
|
|
5209
5198
|
type: requires
|
|
5210
5199
|
origin: "@afokapu/atdd-bun"
|
|
5211
|
-
- confidence: 1
|
|
5212
|
-
constraint: mandatory
|
|
5213
|
-
control: internal
|
|
5214
|
-
foundation: finish_to_start
|
|
5215
|
-
reason: evidence is judged against the stages the policy configures
|
|
5216
|
-
source_ref: delivery.evidence-schema
|
|
5217
|
-
strength: important
|
|
5218
|
-
target_ref: delivery.config-schema
|
|
5219
|
-
type: requires
|
|
5220
|
-
origin: "@afokapu/atdd-bun"
|
|
5221
|
-
- confidence: 1
|
|
5222
|
-
constraint: mandatory
|
|
5223
|
-
control: internal
|
|
5224
|
-
foundation: finish_to_start
|
|
5225
|
-
reason: allowed models and their preference order come from the policy
|
|
5226
|
-
source_ref: delivery.model-allowed
|
|
5227
|
-
strength: important
|
|
5228
|
-
target_ref: delivery.config-schema
|
|
5229
|
-
type: requires
|
|
5230
|
-
origin: "@afokapu/atdd-bun"
|
|
5231
|
-
- confidence: 1
|
|
5232
|
-
constraint: mandatory
|
|
5233
|
-
control: internal
|
|
5234
|
-
foundation: finish_to_start
|
|
5235
|
-
reason: models are read from a well-formed review entry
|
|
5236
|
-
source_ref: delivery.model-allowed
|
|
5237
|
-
strength: important
|
|
5238
|
-
target_ref: delivery.evidence-schema
|
|
5239
|
-
type: requires
|
|
5240
|
-
origin: "@afokapu/atdd-bun"
|
|
5241
|
-
- confidence: 1
|
|
5242
|
-
constraint: mandatory
|
|
5243
|
-
control: internal
|
|
5244
|
-
foundation: finish_to_start
|
|
5245
|
-
reason: independence is judged over the author and reviewer runs the record names
|
|
5246
|
-
source_ref: delivery.reviewer-independent
|
|
5247
|
-
strength: important
|
|
5248
|
-
target_ref: delivery.evidence-schema
|
|
5249
|
-
type: requires
|
|
5250
|
-
origin: "@afokapu/atdd-bun"
|
|
5251
|
-
- confidence: 1
|
|
5252
|
-
constraint: mandatory
|
|
5253
|
-
control: internal
|
|
5254
|
-
foundation: finish_to_start
|
|
5255
|
-
reason: outcomes are read from well-formed findings
|
|
5256
|
-
source_ref: delivery.findings-resolved
|
|
5257
|
-
strength: important
|
|
5258
|
-
target_ref: delivery.evidence-schema
|
|
5259
|
-
type: requires
|
|
5260
|
-
origin: "@afokapu/atdd-bun"
|
|
5261
|
-
- confidence: 1
|
|
5262
|
-
constraint: mandatory
|
|
5263
|
-
control: internal
|
|
5264
|
-
foundation: finish_to_start
|
|
5265
|
-
reason: a stage is approved only once its earlier findings are settled
|
|
5266
|
-
source_ref: delivery.stages-complete
|
|
5267
|
-
strength: important
|
|
5268
|
-
target_ref: delivery.findings-resolved
|
|
5269
|
-
type: requires
|
|
5270
|
-
origin: "@afokapu/atdd-bun"
|
|
5271
|
-
- confidence: 1
|
|
5272
|
-
constraint: mandatory
|
|
5273
|
-
control: internal
|
|
5274
|
-
foundation: start_to_start
|
|
5275
|
-
reason: a reviewer works read-only in a fresh process, as the independence rule judges from the record
|
|
5276
|
-
source_ref: delivery.review
|
|
5277
|
-
strength: important
|
|
5278
|
-
target_ref: delivery.reviewer-independent
|
|
5279
|
-
type: requires
|
|
5280
|
-
origin: "@afokapu/atdd-bun"
|
|
5281
|
-
- confidence: 1
|
|
5282
|
-
constraint: mandatory
|
|
5283
|
-
control: internal
|
|
5284
|
-
foundation: start_to_start
|
|
5285
|
-
reason: a reviewer settles a rebuttal in one round, as the findings rule judges from the record
|
|
5286
|
-
source_ref: delivery.review
|
|
5287
|
-
strength: important
|
|
5288
|
-
target_ref: delivery.findings-resolved
|
|
5289
|
-
type: requires
|
|
5290
|
-
origin: "@afokapu/atdd-bun"
|
|
5291
|
-
- confidence: 1
|
|
5292
|
-
constraint: mandatory
|
|
5293
|
-
control: internal
|
|
5294
|
-
foundation: start_to_start
|
|
5295
|
-
reason: the driver runs every review as the review convention describes
|
|
5296
|
-
source_ref: delivery.operating-model
|
|
5297
|
-
strength: important
|
|
5298
|
-
target_ref: delivery.review
|
|
5299
|
-
type: requires
|
|
5300
|
-
origin: "@afokapu/atdd-bun"
|
|
5301
|
-
- confidence: 1
|
|
5302
|
-
constraint: mandatory
|
|
5303
|
-
control: internal
|
|
5304
|
-
foundation: finish_to_start
|
|
5305
|
-
reason: the operating model leaves the record the evidence schema judges
|
|
5306
|
-
source_ref: delivery.operating-model
|
|
5307
|
-
strength: important
|
|
5308
|
-
target_ref: delivery.evidence-schema
|
|
5309
|
-
type: requires
|
|
5310
|
-
origin: "@afokapu/atdd-bun"
|
|
5311
|
-
- confidence: 1
|
|
5312
|
-
constraint: mandatory
|
|
5313
|
-
control: internal
|
|
5314
|
-
foundation: start_to_start
|
|
5315
|
-
reason: the coordinator and drivers dispatch work and receive results through the board
|
|
5316
|
-
source_ref: delivery.operating-model
|
|
5317
|
-
strength: important
|
|
5318
|
-
target_ref: delivery.board
|
|
5319
|
-
type: requires
|
|
5320
|
-
origin: "@afokapu/atdd-bun"
|
|
5321
|
-
- confidence: 1
|
|
5322
|
-
constraint: mandatory
|
|
5323
|
-
control: internal
|
|
5324
|
-
foundation: finish_to_start
|
|
5325
|
-
reason: the approved SHA is the one the closing review approved
|
|
5326
|
-
source_ref: delivery.approved-sha-resolves
|
|
5327
|
-
strength: important
|
|
5328
|
-
target_ref: delivery.stages-complete
|
|
5329
|
-
type: requires
|
|
5330
|
-
origin: "@afokapu/atdd-bun"
|
|
5331
|
-
- confidence: 1
|
|
5332
|
-
constraint: mandatory
|
|
5333
|
-
control: internal
|
|
5334
|
-
foundation: finish_to_start
|
|
5335
|
-
reason: the gate compares the branch head with an approved SHA that exists
|
|
5336
|
-
source_ref: delivery.merge-gate
|
|
5337
|
-
strength: important
|
|
5338
|
-
target_ref: delivery.approved-sha-resolves
|
|
5339
|
-
type: requires
|
|
5340
|
-
origin: "@afokapu/atdd-bun"
|
|
5341
|
-
- confidence: 1
|
|
5342
|
-
constraint: mandatory
|
|
5343
|
-
control: internal
|
|
5344
|
-
foundation: start_to_start
|
|
5345
|
-
reason: the gate merges a tranche whose lifecycle closed its acceptances
|
|
5346
|
-
source_ref: delivery.merge-gate
|
|
5347
|
-
strength: important
|
|
5348
|
-
target_ref: traceability.plan.executable-acceptance-has-test
|
|
5349
|
-
type: requires
|
|
5350
|
-
origin: "@afokapu/atdd-bun"
|