Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
64 commits
Select commit Hold shift + click to select a range
a2f5c0f
Draft the 6.1.1 RFC 0006 split execplan
leynos Sep 8, 2026
214a939
Revise the 6.1.1 execplan after expert design review
leynos Sep 8, 2026
ef820e7
Settle roadmap 6.1.1 on child RFCs and roadmap-tracked delivery
leynos Sep 9, 2026
f8849ff
Record the EP-M0 audit and the D10 deny-set decision
leynos Sep 11, 2026
2e455cf
Falsify EP-M0's recovery of table 11's reject-class split
leynos Sep 11, 2026
b84f466
Land the EP-M1 coverage contract, ADR-021, and roadmap rewrite (6.1.1)
Sep 18, 2026
20882d7
Clear the EP-M1 CodeRabbit review (6.1.1)
Sep 19, 2026
937dca1
Clear the EP-M1 second CodeRabbit review (6.1.1)
Sep 19, 2026
60bd114
Settle the EP-M2 template against the shipped parser (6.1.1)
Sep 19, 2026
5a4a312
Land the EP-M2 child-RFC template and RFC 0013's worked section 5 (6.…
Sep 24, 2026
f5333d1
Correct four reject-condition claims in RFC 0013's worked section (6.…
Sep 24, 2026
32ab9a3
Fix two gate-breaking defects and the Status contract (6.1.1)
Sep 24, 2026
1d82222
Document the heading predicate's test module for Whitaker (6.1.1)
Sep 24, 2026
2d5ca8c
Implement CONF-1's subsection checks and fix a wrong-namespace guard …
Sep 24, 2026
581a392
Correct the delivery model and ADR-021's amendment procedure (6.1.1)
Sep 24, 2026
3e8b874
Factor the coverage-map row parse and drop a skip().next() (6.1.1)
Sep 24, 2026
a019f0f
Record the third gate run and its two lessons (6.1.1)
Sep 24, 2026
415bdf2
Split the coverage test modules under Whitaker's 400-line cap (6.1.1)
Sep 24, 2026
ec4e047
Record the fourth gate run and the 400-line cap's real scope (6.1.1)
Sep 24, 2026
76f4ff1
Apply rustfmt to the split coverage modules (6.1.1)
Sep 24, 2026
79ebbfb
Record the fifth gate run and the skipped first stage (6.1.1)
Sep 24, 2026
0dc827a
Action the third CodeRabbit pass on the coverage tests (6.1.1)
Sep 24, 2026
86183bb
Write RFC 0013, the first focused child RFC (6.1.1, EP-M3)
Sep 24, 2026
503ef1f
Record the eighth gate run and the rebase-blocked CI channel (6.1.1)
Sep 24, 2026
8d26247
Close the doctest evidence gap shared by both gate runs (6.1.1)
Sep 24, 2026
0a80090
Correct RFC 0013's from_yaml_all inheritance and sharpen 5.10 (6.1.1)
Sep 24, 2026
d78610d
Record the EP-M3 go/no-go verdict as GO (6.1.1)
Sep 24, 2026
b5075b8
Fix the en-GB-oxendict spelling the gate caught (6.1.1)
Sep 24, 2026
26d27b9
Fix the dangling technical-design link main introduced (6.1.1)
Sep 24, 2026
e14a0e7
Record the second rebase and the corpus-wide test finding (6.1.1)
Sep 24, 2026
78dd556
Record the ninth gate run and the green CI result (6.1.1)
Sep 24, 2026
305d29c
Fix five review findings, renumber the colliding ADR, and rewrap
Sep 25, 2026
aa6a7a3
Extract the registry-aggregate checks into a named helper
Sep 26, 2026
90e1341
Record the third rebase and the TOML duplicate-key trap
Sep 27, 2026
16ef3b0
Answer three CodeRabbit findings on the RFC 0006 split
Sep 27, 2026
6640500
Record the fourth review pass and its three findings in the plan
Sep 27, 2026
a1eb18d
Correct the scanned-corpus count and name the set
Sep 27, 2026
3dd37c6
Drop an unsubstantiated ordinal from the review-pass entry
Sep 27, 2026
dc5f917
Fix the two gates the seven-target run left red
Sep 27, 2026
6537d5c
Bound both serializers' output and guard one coverage-map cell
Sep 28, 2026
da37d73
Pin the blocked gate run to the revision it covers
Sep 28, 2026
92d6833
Record the re-measured blocker and close the PR-description drift
Sep 28, 2026
b86f5d9
Verify the guard's mechanism against the document it reasons from
Sep 28, 2026
f833ab4
Correct the blocker's scope: CI runs these gates, and they are green
Sep 28, 2026
7a05a7d
Cover the correction's own revision with the evidence it cites
Sep 28, 2026
32ed7c6
Untrack uv.lock, which no configuration here ever reads
Sep 28, 2026
486a200
Record the cache unblocking and the uv.lock untracking in the plan
Sep 28, 2026
89ac435
Record the local seven-target run that discharges the owed second rea…
Sep 28, 2026
d982dd7
Fix the MD013 line that CI caught, and record both liveness proofs
Sep 28, 2026
622bc9f
Disposition the seven stale bot findings and correct a wrong credenti…
Sep 28, 2026
ade186a
Disposition the seven in-scope local CodeRabbit findings
Sep 28, 2026
1063626
Record the check-fmt recurrence and the wrong-verifier lesson
Sep 28, 2026
a40a7b4
Fix the spelling gate that reded markdownlint on feed5192
Sep 28, 2026
df8335b
Record the rebase provenance and correct a citation it invalidated
Sep 28, 2026
a8c48b0
Record the seven-target gate run that passed on 802be5ea
Sep 28, 2026
4624a1a
Record the CI outcome and the local re-run on the current head
Sep 28, 2026
2d051a7
Record the seven-target run on 84e4fa82 and the order it ran in
Sep 28, 2026
7ca6e60
Close the gate loop by stating the delta, and re-run nixie for cause
Sep 28, 2026
4c6bdff
Amend the never-CI-validated observation now that the channel reopened
Sep 28, 2026
d0a7b57
Caution that a rebase invalidated CodeRabbit's own fix citation
Sep 28, 2026
33b7f9a
Apply the in-scope findings from the 2db228aa review
Sep 28, 2026
83baae5
Validate RFC coverage and JSON round-trip scope
Oct 1, 2026
84de944
Separate coverage contract validation stages
Oct 1, 2026
1171500
Record rebase validation and fix YAML indentation
Oct 1, 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
9 changes: 9 additions & 0 deletions .config/nextest.toml
Original file line number Diff line number Diff line change
Expand Up @@ -99,6 +99,15 @@ success-output = "immediate"
# budget and the test's own allowance meet.
slow-timeout = { period = "60s", terminate-after = 10 }

[[profile.default.overrides]]
# The RFC 0006 coverage contract (obligation COV-4 in
# docs/execplans/6-1-1-split-rfc-0006-set-into-focused-child-rfcs-and-task.md).
# This test's whole point is the line it prints: how many capability groups are
# still unwritten. A half-finished split passes every other coverage check, so
# a stall is only visible if the count reaches the terminal on a green run.
filter = 'test(/^coverage_map_status_is_reported($|::)/)'
success-output = "immediate"

[profile.ci]
# The CI-only profile. It exists solely to carry the whole-run budget, and
# inherits everything else from `default`, including that profile's
Expand Down
4 changes: 2 additions & 2 deletions .github/workflows/release-dry-run.yml
Original file line number Diff line number Diff line change
Expand Up @@ -16,9 +16,9 @@ concurrency:
jobs:
release:
uses: ./.github/workflows/release.yml
with:
dry-run: true
# This workflow runs on pull requests, so it forwards no secrets. The
# release workflow reads only `secrets.GITHUB_TOKEN`, which a called
# workflow receives without forwarding, so `secrets: inherit` would
# only widen what a pull request can reach.
with:
dry-run: true
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@ __pycache__/
.coverage
.uv-cache/
.uv-tools/
uv.lock
.pytest_cache/
.ruff_cache/
.typos-oxendict-base.json
Expand Down
4 changes: 4 additions & 0 deletions Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -230,6 +230,10 @@ test: test-nextest doctest ## Run every Rust test with warnings treated as error
test-nextest: check-build-tools ## Run all non-doctest Rust tests through cargo-nextest
$(GATE_RUSTFLAGS) $(CARGO) nextest run --workspace --all-targets --all-features $(NEXTEST_BUILD_JOBS) $(NEXTEST_TEST_JOBS)

.PHONY: test-rfc-stdlib-coverage
test-rfc-stdlib-coverage: check-build-tools ## Check the RFC 0006 split and its parsers
$(GATE_RUSTFLAGS) $(CARGO) nextest run --test rfc_stdlib_coverage_tests --all-features $(NEXTEST_BUILD_JOBS) $(NEXTEST_TEST_JOBS)

doctest: check-build-tools ## Run doctests, which cargo-nextest cannot execute
$(GATE_RUSTFLAGS) $(CARGO) test --workspace --doc --all-features $(BUILD_JOBS)

Expand Down
677 changes: 677 additions & 0 deletions docs/adr-040-focused-child-rfcs-for-survey-rfcs.md

Large diffs are not rendered by default.

7 changes: 7 additions & 0 deletions docs/contents.md
Original file line number Diff line number Diff line change
Expand Up @@ -75,6 +75,9 @@ operator, user, and contributor references are easier to find.
Survey of the ansible-core Jinja standard library, with an explicit
disposition for every candidate helper and Netsuke-native contracts for the
accepted set.
- [rfcs/0013-structured-data-interchange-helpers.md](rfcs/0013-structured-data-interchange-helpers.md):
First focused child of RFC 0006: the JSON and YAML interchange helpers and
the cross-cutting contract discharged for them.
- [rfcs/0007-netsukefile-testing-framework.md](rfcs/0007-netsukefile-testing-framework.md):
Proposed Netsukefile testing framework: the `netsuke test` command, the YAML
test dialect, and its mocking model.
Expand Down Expand Up @@ -232,6 +235,10 @@ operator, user, and contributor references are easier to find.
Runtime annotation introspection declared unsupported for the workflow
contract tests, with the loader gate's stale `TYPE_CHECKING` claim corrected
and a revisit gate that reopens on a real consumer.
- [ADR-040](adr-040-focused-child-rfcs-for-survey-rfcs.md): Splitting a survey
RFC into focused child RFCs, each owning one or more capability groups, with
the accepted set partitioned by a coverage map and guarded by a
derivation-based coverage test.
- [ADR-041](adr-041-canonical-recipe-shell-quoting-surface.md): `shell_quote`
and `shell_join` as the canonical recipe quoting surface, with two dialects
and a host-dependent default.
Expand Down
52 changes: 52 additions & 0 deletions docs/developers-guide.md
Original file line number Diff line number Diff line change
Expand Up @@ -4567,6 +4567,58 @@ provisions `pytest`, `pyyaml`, `hypothesis`, and `cmd-mox==0.2.0` through
`uv run --with`, so `uv` is the only prerequisite and no virtual environment
needs creating by hand.

### RFC 0006 standard-library coverage contract

`tests/rfc_stdlib_coverage_tests.rs` runs seven repository checks:

| Check | Responsibility |
| --------------------------------------------- | --------------------------------------------------- |
| `every_accepted_helper_has_exactly_one_owner` | Partition accepted helpers across child RFCs. |
| `no_forbidden_helper_is_registered` | Keep deferred and rejected candidates out. |
| `totals_and_purity_aggregate_agree` | Reconcile accepted totals and purity counts. |
| `coverage_map_status_is_reported` | Report written and unwritten capability groups. |
| `inter_document_links_resolve` | Resolve relative RFC links to files in the tree. |
| `every_capability_has_a_roadmap_task` | Match owned helpers to tasks in the assigned step. |
| `every_child_discharges_every_clause` | Check child RFC clause coverage and section 5 text. |

The private modules in `tests/rfc_stdlib_coverage/` parse the source documents,
derive helper sets, and validate the partition. `survey`, `section7`,
`section8`, `totals`, and `assertions` read RFC 0006; `map`, `registries`, and
`clauses` read its coverage map and each child RFC; `roadmap` reads
`docs/roadmap.md`; `links` checks relative targets across the RFC corpus.
`document` and `markdown` provide the shared structural and lexical parsing
used by those readers. The contract therefore depends on the Markdown in RFC
0006, child RFCs, and the roadmap staying in the supported shapes.

Partial coverage can pass: unwritten child groups are allowed while the split
is in progress, and the status check reports rather than rejects that state.
The output count is the liveness signal; it must reach zero before the split is
complete. `.config/nextest.toml` gives
`test(/^coverage_map_status_is_reported($|::)/)` the
`success-output = "immediate"` override so this count appears during the suite,
as soon as this test finishes, including on a successful run.

Run `make test-rfc-stdlib-coverage` for the focused Rust contract binary,
`make test-workflow-contracts` for the workflow contracts, and `make test` for
the full Rust suite. The focused target uses the repository's standard Rust
gate flags and Nextest configuration. The parser tests live beside the private
functions they exercise; filesystem cases use isolated temporary fixtures via
the test-only `Repo` constructor, which is private to that module tree. Those
fixtures are not a general-purpose Markdown parsing API. The link property's
private depth helper belongs only to its reference model: it checks traversal
before the model renders the normalized path. The Nextest contract's private
policy helper checks only an override already selected by the exact filter; its
caller owns loading and selection. Neither helper is a shared parser or a
runtime interface.

The parser intentionally handles a narrow subset: ATX headings, simple
pipe-delimited table rows, and fenced blocks with up to three leading spaces.
It does not parse full CommonMark or recognize fences nested in list items.
Relative links are extracted from inline Markdown link syntax and checked for
target-file existence; fragment anchors are not validated. See
[ADR-040](adr-040-focused-child-rfcs-for-survey-rfcs.md) for the split and its
coverage contract rationale.

### Configuration-precedence regression tests

The config-precedence ladder and display-policy domain are covered by three
Expand Down
Loading
Loading