Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
152 commits
Select commit Hold shift + click to select a range
5faed39
feat(tracker): select the issue tracker provider at init and via the CLI
dean0x Sep 16, 2026
713814d
feat(tracker): classify tracker.md as user content on uninstall
dean0x Sep 16, 2026
82ca47c
feat(tracker): add the background Tracker conventions agent
dean0x Sep 16, 2026
2a87021
fix(tracker): escape control bytes in the provider-token character class
dean0x Sep 16, 2026
e4d0df9
feat(tracker): emit the background tracker-setup directive at session…
dean0x Sep 16, 2026
d798973
feat(tracker): add the per-repo tracker override to the feature config
dean0x Sep 16, 2026
1e45af2
feat(scrubber): add --emit, the mechanical D11 gate for tool-call sinks
dean0x Sep 16, 2026
e66ef30
feat(tracker): author the tool-call contract behind a registry gate
dean0x Sep 16, 2026
21af11d
feat(tracker): resolve the provider per repo and refuse a stale config
dean0x Sep 16, 2026
2bf24b3
test(golden): regenerate git-agent golden for the Phase 3 preamble
dean0x Sep 16, 2026
15fd4bc
fix(tracker): pin the claim staleness and counter format in the Track…
dean0x Sep 16, 2026
c8a92a3
docs(tracker): document provider selection, the Tracker agent and the…
dean0x Sep 16, 2026
c3626e7
docs(tracker): drop an unverified ADR anchor from the tracker paragraph
dean0x Sep 16, 2026
c0c65e3
docs(knowledge): add tracker-feature knowledge base
dean0x Sep 16, 2026
70c28a6
fix(tracker): re-arm inference from devflow tracker --status (D-F)
dean0x Sep 16, 2026
259fa9b
fix(tracker): drop an unsupported ADR anchor from the tracker sources
dean0x Sep 16, 2026
d07dedf
feat(tracker): add the Jira provider mechanics module
dean0x Sep 16, 2026
af29b8b
test(tracker): price each tool-call provider's loaded set on its own row
dean0x Sep 16, 2026
8a69b66
docs(knowledge): record the Jira provider in the tracker knowledge base
dean0x Sep 16, 2026
5661780
docs(changelog): announce the Jira tracker mechanics
dean0x Sep 16, 2026
3952a4d
feat(tracker): add the Linear provider mechanics module
dean0x Sep 17, 2026
2dccf14
test(tracker): pin the provider literals across all three providers
dean0x Sep 17, 2026
bc1c423
test(tracker): forbid restating the tool-call contract in provider me…
dean0x Sep 17, 2026
8266108
refactor(git-agent): state the tracker ops and their entry gate provi…
dean0x Sep 17, 2026
bc36a48
test(golden): regenerate the git-agent golden for the neutral tracker…
dean0x Sep 17, 2026
3573c69
docs(tracker): surface Linear's known unknowns in the CLI reference
dean0x Sep 17, 2026
48b5d07
docs(knowledge): record the Linear provider and the neutralised track…
dean0x Sep 17, 2026
f383629
docs(changelog): announce the Linear tracker mechanics
dean0x Sep 17, 2026
bceb7a1
refactor(build-mds): drop a stale duplicate comment on gatedShut
dean0x Sep 17, 2026
21805a9
refactor(installer): hoist repeated unitSubdir(unit) call in buildUni…
dean0x Sep 17, 2026
ab9e65a
fix(tracker): drop and repoint the unsupported ledger citations
dean0x Sep 17, 2026
bb55340
test(tracker): assert the sink-bypass corpus reaches every tool-call …
dean0x Sep 17, 2026
bc57936
test(tracker): probe every provider-owned path for foreign tokens
dean0x Sep 17, 2026
d4475c0
fix(tracker): clean up the composed file and create tracker.md at 0600
dean0x Sep 17, 2026
f007812
docs(installer): state the real reason the prune reaches every stagin…
dean0x Sep 17, 2026
04270bc
docs(tracker): name the three places the artifact basenames are also …
dean0x Sep 17, 2026
9709289
fix(git-agent): call SHIPPED_ISSUES entries references, not numbers
dean0x Sep 17, 2026
5db2639
test(golden): regenerate the git-agent golden for the reference wording
dean0x Sep 17, 2026
7d27361
fix(scrubber): drop the D11-FAIL reason no arm can emit, and say what…
dean0x Sep 17, 2026
105b801
fix(tracker): correct the digit count the counter's range arm actuall…
dean0x Sep 17, 2026
3525fef
test(tracker): record the three neutralised lines as rewrites, not lo…
dean0x Sep 17, 2026
da72bf9
fix(git-agent): defer backlink's rate-limit signal to the resolved pr…
dean0x Sep 17, 2026
ee91147
fix(git-agent): render refs unprefixed under a non-github provider
dean0x Sep 17, 2026
5cd64e8
fix(tracker): strip the leading # before interpolating a shipped ref
dean0x Sep 17, 2026
1b05aba
test(tracker): pin the # strip and the relocated STOP signal per file
dean0x Sep 17, 2026
2f8cafd
test(tracker): pin AC-3.3, AC-3.11 and the discard outcome per provider
dean0x Sep 17, 2026
34e10c5
test(guards): move the retired tracker headings into the shared denylist
dean0x Sep 17, 2026
5c6bb3c
test(tracker): pin the reader's unprefixed rendering rule (AC-3.11)
dean0x Sep 17, 2026
ee9550e
test(seams): forbid a command-spawned Tracker agent (§8.4)
dean0x Sep 17, 2026
4271016
test(tracker): add the two identity payloads to the hostile table
dean0x Sep 17, 2026
044f4d4
test(tracker): forbid an interactive question in the Tracker agent
dean0x Sep 17, 2026
6477401
docs(tracker): re-measure every byte-budget derivation figure
dean0x Sep 17, 2026
f8a5969
docs(knowledge): record the alignment pass and the GAP-48 deferral
dean0x Sep 17, 2026
9e8cd83
test(golden): regenerate the git-agent golden for the alignment fixes
dean0x Sep 17, 2026
164543e
docs(knowledge): refresh installer-shadowing for the tracker overlay …
dean0x Sep 17, 2026
381877c
docs(knowledge): refresh feature-knowledge-system for the provider mo…
dean0x Sep 17, 2026
ed9c7b0
fix(git-agent): scope the non-github rendering rule to issue refs
dean0x Sep 17, 2026
044a626
docs(knowledge): refresh learning-capture-system for the tracker-setu…
dean0x Sep 17, 2026
f131c5c
test(golden): regenerate the git-agent golden for the issue-ref scoping
dean0x Sep 17, 2026
41eda42
docs(knowledge): re-derive the tracker byte-budget figures from the p…
dean0x Sep 17, 2026
0ab13ab
docs(knowledge): refresh test-harness for the tracker guards, seams a…
dean0x Sep 17, 2026
5fadf07
docs(knowledge): reconcile the features index from frontmatter
dean0x Sep 17, 2026
1d85d6a
docs(knowledge): re-derive the test-harness golden figures for the fi…
dean0x Sep 17, 2026
144b20e
docs(tracker): correct the git.md delta decomposition digits
dean0x Sep 17, 2026
0651db9
test(golden): bring the status-lines docblock table in line with its …
dean0x Sep 17, 2026
583ea1d
docs(tracker): name the two cuts behind the outside-preamble measurement
dean0x Sep 17, 2026
d819e29
test(tracker): record only printed byte-budget figures in the derivat…
dean0x Sep 17, 2026
da9a914
docs(knowledge): drop hand-derived byte decompositions from the track…
dean0x Sep 17, 2026
fd0de46
refactor(build-mds): resolve the variant registry once per build
dean0x Sep 17, 2026
7ad4f33
docs(tracker): finish the PF-057 sweep over the byte-budget derivations
dean0x Sep 17, 2026
9611273
refactor(redact-secrets): tag parseArgs's three shapes with a kind di…
dean0x Sep 17, 2026
9958376
fix(config): carry the per-repo tracker override as a raw JSON value
dean0x Sep 17, 2026
8a95881
docs(tracker): cite the two pitfalls with the `avoids` verb
dean0x Sep 17, 2026
40739fd
refactor(tests): split the byte-budget measurement model out of its g…
dean0x Sep 17, 2026
a0398b3
fix(init): converge tracker artifacts only after the manifest persists
dean0x Sep 17, 2026
63e835f
fix(installer): create a flat set's directory before promoting into it
dean0x Sep 17, 2026
7d16271
fix(redact-secrets): judge a marker-bearing value on its surviving bytes
dean0x Sep 17, 2026
8e855e8
fix(tracker): bound the provenance read and disclose the --status re-arm
dean0x Sep 17, 2026
e49cd4d
test(init-seed): complete the applyCliToggles FeatureSeed fixtures
dean0x Sep 17, 2026
7f5e2c9
fix(mds-variants): derive the gated roster and drop the [0]-index probe
dean0x Sep 17, 2026
378c94c
test(redact-secrets): type the .cjs seam and drop the `as never`
dean0x Sep 17, 2026
cb3a32e
test(guards): derive the control-byte corpus reach from its declaration
dean0x Sep 17, 2026
093d5ba
test(guards): read the prose spelling of a D11 body sink
dean0x Sep 17, 2026
4c60fba
test(tracker): sweep git.md in the DEGRADED reverse arm, resolve tracker
dean0x Sep 17, 2026
901a219
fix(redact-secrets): drop the dead temp-sibling write from --emit
dean0x Sep 17, 2026
b8c980a
fix(hooks): gate every unvalidated value Section 3 interpolates or reads
dean0x Sep 17, 2026
2f39dd8
test(redact-secrets): cover the exit-4 internal-error path
dean0x Sep 17, 2026
3f9d022
docs(redact-secrets): declare nonceSource as the `() => unknown` it v…
dean0x Sep 17, 2026
72f2740
fix(tracker): make the agent's claim, write and counter mechanics real
dean0x Sep 17, 2026
0525645
test(tracker): grade hostile payloads per alternative arm
dean0x Sep 17, 2026
370b4c8
test(tracker): make the §14.4 cell arm discriminating, and type its c…
dean0x Sep 17, 2026
a93a216
fix(uninstall): classify the tracker conventions backups as user content
dean0x Sep 17, 2026
46ae4c9
fix(hooks): gate the tracker directive on a git repo, linearise Secti…
dean0x Sep 17, 2026
8edbe00
fix(tracker): bind the agent's precedence, chain and absence guards
dean0x Sep 17, 2026
d8e1986
test(harness): make the schema oracle, the prose pins and the dist ga…
dean0x Sep 17, 2026
2c9d04e
perf(tracker): make the hoisted marker read the normative path
dean0x Sep 17, 2026
2b80f43
docs(tracker): name the define-set parity guard the same way in both …
dean0x Sep 17, 2026
0368796
docs(tracker): give the github module its two missing header paragraphs
dean0x Sep 17, 2026
fe53b6b
refactor(test): keep the git-agent import block contiguous
dean0x Sep 17, 2026
f2e5729
docs(tracker): name the parity guard by a provider-neutral, greppable…
dean0x Sep 17, 2026
ed532d7
refactor(tracker): give the shared provider-independent rules one author
dean0x Sep 17, 2026
1cb8d1c
fix(tracker): give the comment-body cap one owner per module
dean0x Sep 17, 2026
f898e3c
docs(tracker): state the contract's generation gate as the registry s…
dean0x Sep 17, 2026
3c00134
fix(tracker): bind the ref anchors to the whole string, and test the …
dean0x Sep 17, 2026
a47f876
docs(tracker): make the Known Unknowns pair greppable from the module…
dean0x Sep 17, 2026
c9d4738
refactor(git): give both batch ops one rate-limit pattern
dean0x Sep 17, 2026
da99734
test(golden): regenerate git-agent golden for regression-07
dean0x Sep 17, 2026
ff41f1e
test(golden): re-pin the three git-agent equality baselines
dean0x Sep 17, 2026
999244a
fix(git): give the D11 staging files a lifetime, not just a birth
dean0x Sep 17, 2026
8089465
fix(tracker): put the reference-rendering shape gate where the reader is
dean0x Sep 17, 2026
7b8a20e
fix(tracker): gate fetch-issue's numeric branch before it interpolates
dean0x Sep 17, 2026
940e6c7
test(golden): regenerate git-agent golden for security-01/-08
dean0x Sep 17, 2026
6fa2353
fix(d11): refuse a scrubbed body that carries its own framing line
dean0x Sep 17, 2026
9669c2d
fix(tracker): say which wins when Jira hands back a Retry-After
dean0x Sep 17, 2026
4e67fd9
fix(tracker): finish the tracker-issue wording at the plan command
dean0x Sep 17, 2026
4c88f5c
test(golden): regenerate git-agent golden for regression-04
dean0x Sep 17, 2026
7495353
test(containment): record the TRACKING_ISSUE rewrite
dean0x Sep 17, 2026
a15ddf8
fix(tracker): explicit selection outranks repo history grammar
dean0x Sep 17, 2026
4357130
fix(tracker): the per-repo tracker key narrows, never widens
dean0x Sep 17, 2026
e66723e
test(golden): regenerate git-agent golden for architecture-01/-02
dean0x Sep 17, 2026
c3e7f2c
refactor(tracker): one dedup ladder, stated once and recorded by token
dean0x Sep 17, 2026
50b6e89
refactor(tracker): one cleanup spelling across the tracker corpus
dean0x Sep 17, 2026
7f39c45
test(tracker): give the AC-3.22 non-vacuity arm a git marker
dean0x Sep 17, 2026
1cccc84
test(hooks): run every hook spawn under an isolated temp HOME
dean0x Sep 17, 2026
846b8d5
refactor(tests): one owner for the 80-character reference floor
dean0x Sep 17, 2026
6b23297
refactor(tracker): the registry is the one authority on the provider set
dean0x Sep 17, 2026
db42c2d
fix(tracker): the display sink honours the module's never-throws cont…
dean0x Sep 17, 2026
a3a3bab
fix(tracker): a provider change never destroys an earlier backup
dean0x Sep 17, 2026
edb6c2a
test(tracker): floors where floors are meant, and named lookups
dean0x Sep 17, 2026
358f91b
test(tracker): drive the reported-failure arm of every lifecycle owner
dean0x Sep 17, 2026
afe6b40
fix(init): --tracker on the Advanced path says what it selected
dean0x Sep 17, 2026
a475955
refactor(tracker): the default provider has one spelling at every wri…
dean0x Sep 17, 2026
b5a15b7
test(guards): guard docblocks state what the code beneath them does
dean0x Sep 17, 2026
2bab084
docs(tracker): two load-bearing comments state the end-state
dean0x Sep 17, 2026
0cf4415
docs(tests): state the surviving fact, not the transition
dean0x Sep 17, 2026
40b8bd7
test(tracker): distinct-heading floor, end-state prose, named lookups
dean0x Sep 17, 2026
c1836bf
fix(uninstall): an orphaned tracker staging file is swept as an artifact
dean0x Sep 17, 2026
af97aa1
perf(tests): overlap the tracker key-path seam's shell spawns
dean0x Sep 17, 2026
146950d
docs(tracker): the DI-seam note states the fact, not a borrowed anchor
dean0x Sep 17, 2026
26c1748
test(tracker): one claim per guard, and no branch that can never run
dean0x Sep 17, 2026
eed4dba
test(tracker): drive the --tracker boundary and the wizard gate
dean0x Sep 17, 2026
6515d69
test(tracker): execute the --set branch instead of matching it
dean0x Sep 17, 2026
ce5c37e
test(tracker): three lifecycle e2e arms through the real entry point
dean0x Sep 17, 2026
05d5c89
perf(tests): run the tracker-setup arms as their own test file
dean0x Sep 17, 2026
a6fbebb
refactor(tests): drop the dead ProviderCorpus.tree member
dean0x Sep 17, 2026
5b43195
docs(citations): drop fabricated anchor structure (PF-065)
dean0x Sep 17, 2026
57533f4
docs(tests): point the staleness-pin docblock at its post-split file
dean0x Sep 17, 2026
2b0d617
refactor(tests): dedupe eager-memory-refresh's runHook
dean0x Sep 17, 2026
4f9b14c
docs(tests): state the blank-cell property instead of transition narr…
dean0x Sep 17, 2026
093f93d
docs(fixtures): refresh stale byte-budget measurements (PF-057)
dean0x Sep 17, 2026
0680a88
test(hooks): size the serial parity arm's timeout to its measured dur…
dean0x Sep 17, 2026
3eb44e7
test(seams): size the committed-tree build arms' timeout to their mea…
dean0x Sep 17, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
223 changes: 146 additions & 77 deletions .devflow/features/feature-knowledge-system/KNOWLEDGE.md

Large diffs are not rendered by default.

11 changes: 6 additions & 5 deletions .devflow/features/index.md

Large diffs are not rendered by default.

79 changes: 54 additions & 25 deletions .devflow/features/installer-shadowing/KNOWLEDGE.md

Large diffs are not rendered by default.

97 changes: 91 additions & 6 deletions .devflow/features/learning-capture-system/KNOWLEDGE.md

Large diffs are not rendered by default.

146 changes: 99 additions & 47 deletions .devflow/features/test-harness/KNOWLEDGE.md

Large diffs are not rendered by default.

580 changes: 580 additions & 0 deletions .devflow/features/tracker-feature/KNOWLEDGE.md

Large diffs are not rendered by default.

11 changes: 7 additions & 4 deletions .devflow/features/tracker-references/KNOWLEDGE.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ description: "Use when modifying src/assets/agents/git.mds, adding or changing a
category: architecture
directories: [src/assets/agents/git.mds, src/assets/mds/tracker, src/assets/mds/git, src/core/mds-variants.ts, src/core/reference-sweep.ts, src/targets/claude-code/installer.ts, src/assets/commands/_partials/_tracker.mds, src/assets/skills/git, src/assets/skills/review-methodology, tests/tracker, tests/fixtures/tracker/baseline, tests/installer, tests/guards/capability-hoist.test.ts, tests/guards/provider-scope.test.ts, tests/guards/guard-census.test.ts]
created: 2026-09-14
updated: 2026-09-16
updated: 2026-09-17
---

# Tracker References
Expand All @@ -14,7 +14,7 @@ updated: 2026-09-16

Tracker Phase 2 (issue #324, tracking #321) splits `src/assets/agents/git.mds` — the always-loaded, per-spawn-billed Git agent prompt (PF-026) — into a **provider-independent contract** that stays in `git.mds` and **per-provider mechanics** that compile into generated skill references, loaded only by the operations that need them. The split is GitHub-only; Jira/Linear land in Phase 3 with the resolution substrate already reserved. This is the internal-refactor half of the tracker initiative: **zero user-visible behaviour change** — every GitHub-rendered artifact (`Tracked = #{n}`, `Depends on: #{n}`, issue filenames) is byte-identical to before the split.

**Status — NOT landed.** Phase 2 is open as **PR #339**. `origin/main` is `33b730e` and contains none of this work. The branch is merely *aligned with* `main` by merge commit `10ea0d5`, which pulled that `33b730e` in — `33b730e` is PR **#338**, a different PR that did land. Read "landed" strictly (PF-010: merged to `main`); until #339 merges, do not treat Phase 2 as shipped or skip the merge.
**Status — landed.** Phase 2 is on `main` as squash commit `ecfc141` (PR #339, issue #324). Every measurement and baseline in this file is stated against that tree. The provider dimension built on top of it — selection, the background Tracker agent, hook Section 3, `--emit` and the reader-side preamble — is owned by `.devflow/features/tracker-feature/KNOWLEDGE.md`, which also carries the Jira (3b) and Linear (3c) slots.

The system has five moving parts that must be understood together: (1) the contract left in `git.mds` plus a ≤40-line provider-resolution preamble that is the *single* place a provider token is resolved; (2) the MDS build machinery (`VARIANT_MODULES`, `expandVariants`, `splitVariantSections`) that fans reference modules out into per-op files; (3) the byte-budget guard that makes the split's payoff a tested property, not an assumption; (4) the containment oracle that proves no text was silently paraphrased or dropped during the move; (5) the installer's converge-not-merge overlay that gets the generated files into a user's `~/.claude/skills/devflow:git/references/` tree atomically. `feature-knowledge-system` owns the general MDS build pipeline (generator hosts, `output-dir:`); this KB owns the tracker-specific consumer of that pipeline.

Expand Down Expand Up @@ -102,7 +102,7 @@ Zero-unaccounted-lines over `git.md ∪ generated GitHub references`, checked ag

`CONTAINMENT_EXEMPTIONS` names every deliberately **rewritten** (not relocated) line range, each entry requiring a rationale of **≥ 40 characters**, asserted non-empty. Both policing arms matter: a range present with no matching content is a real gap; a range that *stops* being needed (content became a pure move after all) must also go red — "an exclusion that stops matching is red" fired for real during this phase (two stale `github-api.md` exclusions had to be deleted). The exemption count is **63** — 48 from Phase 2 proper (29 from the original split, 11 rows tagged `#340.` for issue #340's scrub-then-post rewrite of the `github-api.md`/`patterns.md` D11 inline-body recipes, 8 rows tagged `#341.` for issue #341's rewrite of `_github.mds`'s tech-debt-archive chain and its own remaining `github-api.md` recipes), plus 15 rows tagged `#339-resolve.` added by the /resolve fix wave (B20/B23/B32) for the unquoted-expansion fixes the wave carried across verbatim, the batch-projection change, and one D4 stop-and-report spelling in `github-api.md` (see Gotchas) — all individually justified — e.g. the D4 remote-unavailable/secondary-rate-limit sentences, the `< 50` backpressure rung, the D11 "to GitHub" scope sentence, the D11 close-comment scope clause (#341), the `&& gh …` post-command placeholder, [DR-17]'s commit-B batch-first rewrite, `ensure-traceable-issue`'s D3 pointer (repointed after its target section moved), and headings demoted from `##` to `###` on the move into a generated reference (see PF-063 in Gotchas). This count is unaffected by the 2026-09-15 fence-aware extractor fix — that fix changed how a section is EXTRACTED, not what content moved, so no exemption range changed.

Structural parity: `opsWithLoadInstruction > 0 && files.length > 0` — never a one-element set-parity scaffold (the exact PF-018/GAP-42 trap). Per-define non-emptiness enforces `MIN_REFERENCE_CHARS = 80` as a **floor** (registered in `numeric-floors.json`'s `floors` array, not `ceilings` — raising it only makes the guard stricter; lowering it re-admits the shape it exists to catch: a reference that kept its heading and lost its body). AC-2.7 reachability walks the full **13-file** manifest (10 GitHub ops + 3 cross-cutting), asserted in both directions, plus the negative check that no `references/tracker/_mcp.md` exists and no `'_mcp.md'` literal is named from any `github/{op}.md` after a GitHub-only build. The DR-19 shared-literal registry (started here, MCP arm deferred to Phase 3) asserts every normative sentence of `publication-gate.md`/`learn-conventions.md`/`decision-markers.md` appears in exactly one of those three files, **and** that no sentence in the registry is restated in any `github/{op}.md`.
Structural parity: `opsWithLoadInstruction > 0 && files.length > 0` — never a one-element set-parity scaffold (the exact PF-018/GAP-42 trap). Per-define non-emptiness enforces `MIN_REFERENCE_CHARS = 80` as a **floor** (registered in `numeric-floors.json`'s `floors` array, not `ceilings` — raising it only makes the guard stricter; lowering it re-admits the shape it exists to catch: a reference that kept its heading and lost its body). AC-2.7 reachability walks the full manifest, asserted in both directions — **34 files** from Phase 3c (three providers × 10 ops + 3 cross-cutting + the tool-call contract), with the template instantiated per REGISTERED provider rather than for `github` alone, and the contract reachable by a third rule (a shipped consumer names it). The negative half did not relax: no `'_mcp.md'` literal may be named from any `github/{op}.md`, and the gate still SHUTS for an injected registry with no tool-call provider. The DR-19 shared-literal registry (started here) asserts every normative sentence of `publication-gate.md`/`learn-conventions.md`/`decision-markers.md` appears in exactly one of those three files, **and** that no sentence in the registry is restated in any provider's `{op}.md`. Its MCP arm landed in Phase 3c as a **SEPARATE** `MCP_SHARED_LITERAL_REGISTRY` rather than as rows added here: this registry's ownership arm asserts its owners are exactly `GIT_CROSS_CUTTING_DOCS`, and the tool-call contract is a different module kind behind a different gate, so folding it in would have meant relaxing that arm to admit a fourth owner instead of classifying the case (ADR-025).

### 7. The installer overlay (`src/targets/claude-code/installer.ts`, `src/core/reference-sweep.ts`, `formatOverlaySummary` in `init.ts`)

Expand Down Expand Up @@ -140,7 +140,9 @@ What Phase 2 deliberately reserves without implementing:
- `_mcp.md` is **not generated** in Phase 2 (AC-2.7 asserts its absence) — no MCP-backed provider module exists yet, so it would have no reachable consumer (ADR-003).
- The DEGRADED reason `tracker mechanics unavailable` is reachable **by design** from the overlay's failure paths (an overlay unit that fails to refresh, or a declared reference absent from the build) even though its *runtime* consumption arm lands in Phase 3 (P3a-S14).
- The shared-literal registry's MCP arm ([DR-19]) is deferred until `_mcp.md` exists.
- **The `## Operations` contract table's provider-specific wording is Phase 3's to decide, not an oversight.** `git.mds`'s always-loaded table still reads "Fetch GitHub issue" / "Fetch multiple GitHub issues" while D4, D11, the Principles and the Boundaries were all neutralised to "the tracker". That asymmetry is deliberate in Phase 2 on two grounds: the table is contract prose, outside the mechanics-move charter, and every character of it lands against `git.mds`'s thin headroom. Phase 3 — which is when a second provider makes the wording actually wrong rather than merely narrow — owns the neutralisation decision for the table, and for `src/assets/skills/git/SKILL.md:188`'s `X-RateLimit-Remaining` threshold, the other GitHub literal deliberately left in an always-loaded file (there because the regression pass verified it is a load-bearing D4 mitigation). Do **not** rename either in Phase 2.
- **The `## Operations` contract table's provider-specific wording was Phase 3's to decide, and Phase 3 decided it (#325).** Phase 2 left the always-loaded table reading "Fetch GitHub issue" / "Fetch multiple GitHub issues" while D4, D11, the Principles and the Boundaries were all neutralised to "the tracker". The asymmetry was deliberate on two grounds — the table is contract prose, outside the mechanics-move charter, and every character of it lands against `git.mds`'s thin headroom — and it was reserved for the point at which a second provider would make the wording actually wrong rather than merely narrow. **The three tracker cells are now "tracker issue(s)", together with the two op-body descriptions that duplicate them**, because a table contradicting the operation two hundred lines below it is a worse end state than either wording alone. `create-release` and `fetch-review-threads` still name GitHub: PR and release hosting stay there under every provider, so those are not tracker facts. **`src/assets/skills/git/SKILL.md`'s `X-RateLimit-Remaining` threshold was KEPT**, deliberately — it is a load-bearing GitHub D4 mitigation in a file the GitHub path preloads, `SKILL.md` has 19 ch of headroom, and the skill carries GitHub doctrine rather than provider-neutral contract. Recorded so its survival reads as a decision rather than an oversight.

- **The `backlink-shipped-issues` digits-only entry gate was the same class of defect, and it was live.** Step 0 required every `SHIPPED_ISSUES` entry to be "digits only" — a GitHub shape in a provider-blind, always-loaded position, so the operation was unreachable under jira and linear. #325 made the step defer to the resolved provider's anchored reference grammar and **moved the github grammar `^#?[1-9][0-9]{0,8}$` into `_github.mds`'s `backlink_shipped_issues` define**, with the same drop rule and the canonical per-ref DEGRADED reason. The grammar was placed ABOVE the range `STATUS_LINE_REFERENCE_FILES` samples in that file (`between('1. Fetch existing comments authored by the viewer:', 'Apply the Comment-sink scrub (D11) …')`), which is why the frozen fixture stayed byte-identical: an addition outside a sampled slice is invisible to the extractor. **When adding to a reference the frozen fixture samples, check where its anchors are first.**
- **A prunable flat cross-cutting root** — `sweepOrphanedReferences` is scoped strictly to `references/tracker/**`, so an orphaned flat document at the references root is never pruned. Widening it needs an allowlist of the hand-authored files that live there (`github-api.md`, `violations.md`, …), which does not exist; `D-OVERLAY-FLAT-UNIT` deliberately treats the flat set as one non-prunable unit until it does. Phase-3 candidate, recorded so the narrower scope reads as a decision rather than an omission.
- Devflow-wide prompt diet, tracked in issue #342 (see Overview) — this feature's byte-budget ceilings are a per-agent instance of that broader effort, not the effort itself.

Expand Down Expand Up @@ -207,6 +209,7 @@ What Phase 2 deliberately reserves without implementing:
- PF-058: containment is four separate obligations — the per-op Principle-8 marker-neutralisation pointer restored to `setup-task`/`fetch-issue` is this pitfall's direct fix; the record explains why the global principle alone once proved insufficient for exactly these two ops
- PF-060: prose-only instructions are not guards — every prohibition in this feature (no `tracker-{provider}.md` filename, no `~/.claude` literal, no `<!-- devflow:` restatement) is backed by a mechanical negative guard, not just a written rule
- PF-063: byte-identical relocation is not semantics-preserving across a grammar boundary — the direct cause of the `###`-heading-depth rule for generated references; resolved by the fence-aware section-boundary rule (mechanics owned by `test-harness`), applied here to the two remaining `###`-demotion exemptions
- `.devflow/features/tracker-feature/KNOWLEDGE.md` — the provider dimension layered on this split: how a provider is selected (`manifest.features.tracker`, `devflow tracker`, `--tracker`), how `~/.devflow/tracker.md` conventions are inferred, the generation gate that turns `_mcp.md` on, and the reader-side resolution order and mismatch guard
- `.devflow/features/feature-knowledge-system/KNOWLEDGE.md` — the general MDS build pipeline (generator hosts, `output-dir:`, `skill-refs` variant) this feature's build side extends
- `.devflow/features/test-harness/KNOWLEDGE.md` — `extractOpSectionFromCorpus`, `collectUnfencedH2`, `gitAgentSinkCorpus`, goldens lifecycle, `walkFiles`, the general guard conventions this feature's tests follow, and the Guard 10 follow-up / fence-aware boundary mechanics referenced throughout this file's Gotchas
- `.devflow/features/dynamic-workflow-engine/KNOWLEDGE.md` — `_tracker.mds`'s adoption sites among the command-layer partials, `DIST_FILES` vs `ALL_HOSTS`
Expand Down
Loading