Skip to content

128 · T113 — ADR: named-profile configuration file and the file precedence tier - #138

Merged
athvin merged 5 commits into
mainfrom
adr/t113-profiles-config-file-adr
Aug 7, 2026
Merged

athvin merged 5 commits into
mainfrom
adr/t113-profiles-config-file-adr

Conversation

@athvin

@athvin athvin commented Aug 7, 2026

Copy link
Copy Markdown
Owner

Ticket: T113 — docs/implementation/128-T113-profiles-config-file-adr.md

Summary

Enforces ADR 128 (named-profile configuration file and the file precedence tier). The ADR body, arch.md C26 amendment, and the partial supersessions of ADR 089/091 pre-landed on main in PR #116; this branch adds the missing dated ADR 128 entry to arch.md's Amendment changelog, ships scripts/check-profiles-config-file-adr.sh (67 content assertions over the ADR, arch.md, both superseded ADRs, READMEs, the purity test, and the T114–T118 seam tickets), and wires it into CI's always-run structural-checks job.

Tests-first

Confirmed — failing tests committed first in cd13aff.

Definition of done

  • ADR body with Status/Context/Decision/Consequences/Rejected alternatives — pre-landed on main (PR 111 · T96 — crate metadata, per-crate docs, and the lint ratchet #116); this branch enforces it via the checker rather than re-authoring
  • Operator acceptance recorded (2026-07-29) in the ticket's Open questions and the ADR's Status — checker-enforced
  • arch.md C26 amendment and ADR 089/091 partial-supersession notes — pre-landed (PR 111 · T96 — crate metadata, per-crate docs, and the lint ratchet #116); dated Amendment-changelog entry added here (4d893d7)
  • Ticket Test plan's mechanical assertions shipped as the CI-wired content checker (913f048); hygiene test proves the wiring (red when unwired, green when wired)
  • Local gate GATE=PASS (39 checks, zero failures, one expected SKIP)
  • CI green on this PR — pending
  • Deviations recorded (see below)

Checker robustness was independently adversarially verified: 16/16 planted violations (covering every target file and assertion mechanism) turned it red, including a reworded C26 clause that two duplicate generic phrases elsewhere in arch.md could not mask, and a relocated changelog entry defeated by sed-scoping. Known mechanism-wide limit shared by all grep-based ADR checkers here: HTML-comment-wrapped content still greps green. Pre-existing caveat, not introduced here: push to main carries paths-ignore: docs/implementation/**, so only the PR path (unfiltered) exercises this checker for docs-only changes.

Open questions resolved

  • Operator sign-off: pre-resolved, accepted 2026-07-29 — recorded in the ticket's Open questions section and the ADR's Status; the checker now enforces both.
  • Config-file name/discovery order: the ticket itself defers this to T115 — left there.
  • tasks.md carries no T113 entry (it ends at T65), so no Q: items existed.

Deviations

Two entries in docs/implementation/DEVIATIONS.md (2026-08-06 · 128), mirroring the accepted T100 pair: the pinning check lives in scripts/ plus one ci.yml line outside the docs-only DoD line, and the ADR body/C26 amendment/supersessions pre-landed in PR #116 — this branch enforces rather than re-authors them.

athvin and others added 5 commits August 6, 2026 21:14
…ntract

scripts/check-profiles-config-file-adr.sh follows the thirteen existing
check-*-adr.sh decision-record checkers (ci.yml, "ADR content contracts")
and mechanically translates ticket 128's Test plan: ADR completeness with
the dated operator acceptance, the two partial supersessions recorded
narrowly with the original rejection text surviving beside each note, the
narrow spec-level prohibitions intact ("describing the graph" /
"describing the shape" / "a domain-specific language"), the recorded
misattribution in ADR 089, the binding purity constraint naming
crates/core/tests/determinism_and_purity.rs and C20, every decision the
milestone inherits (four tiers, profiles, unchanged DAGR_* spellings,
tri-state pool pins, bootstrap-only read, zero-dep core, TOML in dagr-cli
only), the inert-env-tier finding that puts T114 before the loader, and —
the load-bearing half — everything that would count as WIDENING the
carve-out, each asserted to be still named as excluded.

Red as committed, twice over:

* the two Amendment-changelog assertions fail — arch.md's "Post-M4
  boundary amendments" section self-describes as listing EACH
  boundary-moving decision, carries entries for ADR 097 and ADR 115, and
  has none for ADR 128;
* ci_and_test_hygiene's dormant-checker tests fail — the script exists
  and nothing in ci.yml runs it yet.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
The "Post-M4 boundary amendments" section self-describes as listing each
boundary-moving decision so the spec's history is readable in one place,
and carries entries for ADR 097 and ADR 115 — but PR #116, which landed
the ADR 128 C26 amendment itself, added no entry for it. The entry
mirrors its siblings: what was narrowed (the config-file half of "no
config file or DSL", only), what is now permitted (a bootstrap-read
dagr.toml of run-level knobs with named profiles, fourth in precedence),
what stays verbatim ("no DSL", "no configuration file describing the
graph", zero-dep core, C20's empty-environment criterion), and the two
partial supersessions (ADR 089, ADR 091).

The section's header widens by one clause — "moved a *permanent*
non-goal or scope boundary" — because C26's clause was a self-described
permanent scope boundary rather than an entry on the non-goals list.

Turns the two red Amendment-changelog assertions in
scripts/check-profiles-config-file-adr.sh green.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Runs scripts/check-profiles-config-file-adr.sh in the existing "ADR
content contracts (boundary amendments)" step, beside ADR 115's checker.
Turns ci_and_test_hygiene's dormant-checker tests green: every
scripts/check-*.sh must be invoked by the workflow, so the checker
cannot rot into a comment.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Mirrors the two 115 (T100) entries, which record the identical pair for
the sibling boundary amendment: the pinning check lives in scripts/ plus
one ci.yml run line, outside the DoD's docs-only path phrasing; and the
ADR body, the arch.md C26 amendment, and both partial supersessions
landed ahead of this branch in PR #116 (commit 126cdcb), so this branch
enforces them rather than re-authoring them.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…ce on the shallow CI clone

the_metastore_forbidden_surface_scan_still_passes failed on the macOS leg
(run 31176223029): under nextest, m10_acceptance_gate's two script-running
tests execute as concurrent processes over the one shared .git, and the M7
(deepen=200) and M10 (deepen=500) acceptance-boundary scripts' best-effort
`git fetch --deepen` calls race on the shallow clone's locks. The loser's
failure is swallowed by `|| true`, its pinned marker stays unresolvable,
and on a fresh depth-1 PR clone the origin/main fallback does not exist
either, so the script fails with 'could not resolve an M6 base commit'.

Fix: give the `test` job a full-history checkout (fetch-depth: 0). Both
marker commits are then already present, --is-shallow-repository is false,
neither script enters its fetch branch, and the race (plus the in-test
network dependence) is unreachable. The repo packs at ~2.3 MiB over ~272
commits, so the cost is negligible; every other job keeps depth-1. The
standing 128 DEVIATIONS entry is extended to record the extra ci.yml touch.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
@athvin
athvin merged commit 5c3ff20 into main Aug 7, 2026
16 checks passed
@athvin
athvin deleted the adr/t113-profiles-config-file-adr branch August 7, 2026 12:17
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant