feat(G-11): shared-file write contention — row PRs never write the DAG, roadmap, spec block or README counts; DAG status derived from receipts; README counts a ratchet (PMAT-1062) - #3020
Merged
Conversation
…DAG, the roadmap, the spec or a README count line (check_row_pr_write_set.sh, 11-row case table); a DAG row's status is DERIVED from its receipt (scripts/lib/dag_status.py; render_dag.py prints it; dag_invariants.py D7 refuses a disagreeing typed status; past-expiry reads it); README counts are a ratchet (lag allowed, overstatement RED, --exact for the orchestrator; 7-row case table); contract apr-row-pr-write-set-v1; wired case-table-then-live (PMAT-1062) Pmat-Ticket: PMAT-1062
…strator-only on EVERY branch (a PR from a non-agent/<id> branch no longer walks through), --no-renames with the DAG read at the base (a rename is a write, not ENV), CRLF/quote parity between dag_status.py and check_receipt_complete.sh (D7 row 16), the drift message states the partial-then-orchestrator discipline, cli_command_count through compare_count, README case table before its live step, and the Rust README tests (FALSIFY-README-005/007) become the same lag-allowed ratchet — they rode workspace-test and would have failed every row PR that left the README lagging (PMAT-1062) Pmat-Ticket: PMAT-1062
…he DAG dropped from rule 1 (write-set row 2), README equality restored (README row 3), derived_status trusts the typed key (D7 rows 12/15). REVERTED in the next commit; the PR body cites both run ids (PMAT-1062) Pmat-Ticket: PMAT-1062
|
§13.11 rung 1 — quorum shadow verdict Shadow mode: this records a verdict and merges nothing. A refusal |
…wo refusal messages (SC2075), the README self-test scratch dir through safe_rm_scratch (SEC011); 8 -> 8 on the runner's count (the mutants of 053eee4 stay in place for the RED leg) Pmat-Ticket: PMAT-1062
…e lag branch), not a syntax error — row 3 RED for the right reason Pmat-Ticket: PMAT-1062
…RED on 'README claims must match measurement' (row 3, lag RED). The D7 and write-set mutants stay for the next RED leg Pmat-Ticket: PMAT-1062
…on 'DAG-invariants guard case table' (rows 12/14/15/16). The write-set mutant stays for the last RED leg Pmat-Ticket: PMAT-1062
…6) was RED on 'Row-PR write-set case table'; all three registered mutations proven RED at CI (34038067035 / 34038496093 / 34040294692); receipt PMAT-1062 complete (the receipt says complete inside the PR before auto-merge is armed) Pmat-Ticket: PMAT-1062
noahgift
enabled auto-merge
September 6, 2026 15:10
noahgift
added a commit
that referenced
this pull request
Sep 6, 2026
crates/apr-cli/tests/cli_commands.rs::get_help_commands and ::help_subcommands fell under both thresholds when the registry test was rewritten; the ratchet refuses a kept row for a fixed function (the next regression at that coordinate would land for free). Verified locally: check_complexity_ratchet.sh rc=0, 689 recorded offenders, 2 removed, none new, none grown, none stale. Also drops this branch's README count bump: G-11 (#3020) makes the README counts a ratchet the orchestrator regenerates, and check_row_pr_write_set.sh refuses a count line on a row branch. PASS: row PR agent/R-0 writes no shared file. (PMAT-989, #2904)
This was referenced Sep 6, 2026
noahgift
added a commit
that referenced
this pull request
Sep 8, 2026
…nly in release-assets.yml at refs/tags/v*; base-owned promotion; derived fail-closed publish cascade; KEY row (#3045, PMAT-1079); spec v2.1 Spec v2.1 (Appendix A 2.1) and DAG (103 rows) record the delta of 2026-09-08: - BUILD != TEST. Assets build under the clean-room recipe (scripts/run_clean_room.sh, the forjar-pinned toolchain, fingerprint recorded); GPU verification is the fleet-verify receipt taken against the asset, never a build log. - The x86_64-cuda asset (= apr-x86_64-unknown-linux-gnu, cli,cuda per D-10) builds on lambda only inside release-assets.yml at a v* tag: runner group gpu-release restricted to that workflow at refs/tags/v*, a JIT ephemeral runner for one job, lambda's queue slot claimed (host_queues.lambda 4; S-1 -> 5, S-2 -> 6). Every other target: the CI clean-room runner. - Promotion is a base-owned workflow_dispatch job over four receipts carrying the asset sha256 with C14 PASS and parity != skipped. No workflow runs cargo publish; scripts/publish_cascade.sh derives its set from cargo metadata in topological order and refuses branch/dirty/prerelease/token. - New row KEY (#3045, PMAT-1079, owner noahgift, expiry 2026-10-02 [U]): until keys/apr-release-minisign.pub is on main the manifest job and the C13 gate refuse and R-5 stays blocked_by KEY; DONE-IF present -> R-6 pins its fingerprint. R-5/R-6/TAG-0.66.0 <- KEY. The gpu-release group stays a blocked_by: RUNNER-GROUP note on R-5, as the delta directs. - R-5 <- G-11b: make fleet-verify is G-11b's deliverable and is absent today [V]. Two corrections this session's verification pass found by measuring rather than reading: - The delta's embedded-SASS premise is false for this binary. apr generates PTX text in Rust (crates/aprender-gpu/src/ptx/) and the driver JIT-compiles it, cubins landing in ~/.cache/trueno/ptx (driver/ptx_cache.rs:3), so nothing SASS-shaped ships. The A now requires cuobjdump --list-elf to list NO ELF and reads the emitted PTX's .target on both hosts. - PMAT-1078 was not free: agent/R-5's contracts/apr-publish-cascade-v1.yaml:4 stamps it. KEY took PMAT-1079. An id is taken the moment a branch writes it, minted or not (pmat#1169 class). Also recorded: the three divergences of agent/R-5 (authored at 19c015f before this delta) that the row PR closes - an aarch64-cuda asset on gx10, .github/release-assets.pub, hosted builders; its promotion gate and cascade already match [V]. G-11's typed status flipped to complete from docs/audits/impl-PMAT-1062-receipt.md (#3020 merged 3792afa) and the §5.0 block re-rendered - D7 and render_dag.py --check were RED on this branch before this commit. Guards on this tree: render_dag.py --check PASS (byte-identical, 103 rows) - check_dag_invariants.sh PASS - check_receipt_complete.sh --dag PASS - check_roadmap_diff_additive.sh PASS (lifecycle only; acceptance_criteria is not a lifecycle field) - check_roadmap_ids_unique.sh PASS (822) - check_no_claim_literals.sh PASS - check_perf_claims_cite_receipts.sh PASS - check_row_pr_write_set.sh ok (orchestrator branch). Pmat-Ticket: PMAT-993 Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01X1cW8TnmNe3hgjragNjUxr
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
PP-066 DAG row G-11 (driver v4: G-11a) · ticket PMAT-1062 · Closes #3012 · epic #2873. Receipt:
docs/audits/impl-PMAT-1062-receipt.md.Why. Eight armed row PRs (#3001, #3003–#3009) each hand-edited
pp-066-dag.yaml(status),roadmap.yaml(pmat work complete) or a README count line; every merge made the other seven DIRTY through a queue that lands ~1 PR/hour. None of those files is a row's to write.What lands.
scripts/check_row_pr_write_set.sh— the DAG and the release spec are orchestrator-only on every branch (agent/pp-066-*,agent/pr-triage*); a row PR (agent/<id>,<id>a DAG row, read at the base) additionally may not writeroadmap.yamlor a README count line.--no-renames(a rename's source is a write); merge_group/push printREPORTand exit 0 (judged at the pull_request run, which is required:gateneedsguard-runner-labels, ruleset "Green Main"). 14-row case table.scripts/lib/dag_status.py— a row's status is derived fromdocs/audits/impl-<pmat_id>-receipt.md(the C0-7 marker rule, byte-faithful: CRLF and mid-string quotes behave exactly ascheck_receipt_complete.sh).render_dag.pyprints it;dag_invariants.pyD7 refuses a typed status that disagrees; past-expiry reads it. D7 rows 12–16.scripts/check_readme_claims.shandcrates/aprender-core/tests/readme_contract.rs(FALSIFY-README-005/007) — counts are a ratchet: lag allowed, overstatement RED,--exactfor the orchestrator; a self-contradicting README RED. 7-row case table. (The Rust tests rodeworkspace-testand would have failed every row PR that left the README lagging.)guard-runner-labels: README case table before its live step; write-set case table + live step after the DAG invariants.contracts/apr-row-pr-write-set-v1.yaml(kind: pattern; WS-OB-001..004 ↔ WS-F-001..004).pv validate: valid.Mutation evidence (I3) — on this branch, never in the queue.
053eee448+c245dc24c(semantic)README claims must match measurementFAILED2a9ab0df6(README mutant reverted, D7 + write-set kept)DAG-invariants guard case tableFAILEDeda2ea746(D7 reverted, write-set kept)Row-PR write-set case tableFAILEDd9c2aeff2(the last revert; receiptstatus: complete)A first run (34037532260) failed at the bashrs shrink-only step (8 → 11: SC2075 ×2 in the new guard, SEC011 ×1 in the README self-test) — a real defect of this branch, fixed in
9a997e653; the job stops at its first failing step, hence one RED run per guard.Acceptance (
.pr/G-11/accept.shequivalent, re-run by the orchestrator after the rebase onto main b0a0a51 —.pr/G-11-verify3.log):Review quorum: 3 agy lanes, 3/3 implement-with-changes; every finding re-verified and folded (disposition table in the receipt): the non-
agent/<id>bypass,--no-renames, CRLF/quote parity, the drift Catch-22 stated in the message,cli_command_countthroughcompare_count, the Rust README tests, case-table order. Q2 (is the pull_request run required?) settled by the ruleset:gaterequiresguard-runner-labels.Write set: scripts, tests, contracts/, ci.yml (one job's steps), this receipt. No DAG/roadmap/README/spec edit — the rule, obeyed by its own PR (the README lags by one contract, which the ratchet permits).