Skip to content

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
noahgift merged 8 commits into
mainfrom
agent/G-11
Sep 6, 2026

Conversation

@noahgift

@noahgift noahgift commented Sep 6, 2026

Copy link
Copy Markdown
Contributor

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.

  1. 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 write roadmap.yaml or a README count line. --no-renames (a rename's source is a write); merge_group/push print REPORT and exit 0 (judged at the pull_request run, which is required: gate needs guard-runner-labels, ruleset "Green Main"). 14-row case table.
  2. scripts/lib/dag_status.py — a row's status is derived from docs/audits/impl-<pmat_id>-receipt.md (the C0-7 marker rule, byte-faithful: CRLF and mid-string quotes behave exactly as check_receipt_complete.sh). render_dag.py prints it; dag_invariants.py D7 refuses a typed status that disagrees; past-expiry reads it. D7 rows 12–16.
  3. scripts/check_readme_claims.sh and crates/aprender-core/tests/readme_contract.rs (FALSIFY-README-005/007) — counts are a ratchet: lag allowed, overstatement RED, --exact for the orchestrator; a self-contradicting README RED. 7-row case table. (The Rust tests rode workspace-test and would have failed every row PR that left the README lagging.)
  4. ci.yml guard-runner-labels: README case table before its live step; write-set case table + live step after the DAG invariants.
  5. Contract 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.

leg commit what run
RED (README ratchet, row 3) 053eee448 + c245dc24c (semantic) README claims must match measurement FAILED run 34038067035, job 101499760324
RED (D7, rows 12/14/15/16) 2a9ab0df6 (README mutant reverted, D7 + write-set kept) DAG-invariants guard case table FAILED run 34038496093, job 101500915181
RED (write-set, rows 2/9/11) eda2ea746 (D7 reverted, write-set kept) Row-PR write-set case table FAILED run 34040294692, job 101505945716
GREEN d9c2aeff2 (the last revert; receipt status: complete) guard-runner-labels SUCCESS (14/14 · 16/16 · 7/7) run 34041439234

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.sh equivalent, re-run by the orchestrator after the rebase onto main b0a0a51.pr/G-11-verify3.log):

bash scripts/check_row_pr_write_set.sh --self-test      # 14/14
bash scripts/check_dag_invariants.sh --selftest         # 16/16
bash scripts/check_readme_claims.sh --self-test         # 7/7
python3 scripts/render_dag.py --check                   # byte-identical (91 rows on main)
bash scripts/check_guards_are_wired.sh                  # PASS (ratcheted)
cargo test -p aprender-core --test readme_contract      # 15 passed (own target dir, pinned cargo)

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_count through compare_count, the Rust README tests, case-table order. Q2 (is the pull_request run required?) settled by the ruleset: gate requires guard-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).

…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
@github-actions

github-actions Bot commented Sep 6, 2026

Copy link
Copy Markdown

§13.11 rung 1 — quorum shadow verdict

S13-SHADOW pr=3020 head=d9c2aeff2bd66d1ae7158c4bed4737411726a023 verdict=REFUSE class=Q1 arm_rc=1

Shadow mode: this records a verdict and merges nothing. A refusal
to arm is not a block (§13 adds zero rows to §7) — the pull request is
exactly as green as it was.

…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
noahgift enabled auto-merge September 6, 2026 15:10
@noahgift noahgift added pp-066 PP-066 (0.66) DAG row inst:A PP-066 instance claim (I14): inst:A labels Sep 6, 2026
@noahgift
noahgift added this pull request to the merge queue Sep 6, 2026
Merged via the queue into main with commit 3792afa Sep 6, 2026
17 of 18 checks passed
@noahgift
noahgift deleted the agent/G-11 branch September 6, 2026 17:38
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)
noahgift added a commit that referenced this pull request Sep 7, 2026
…ed tree — main gained analyser mentions (#3020, #3030) after the first stamp; the baseline is introduced by this PR, so its initial count is the merged tree's

Pmat-Ticket: PMAT-1063
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
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

inst:A PP-066 instance claim (I14): inst:A pp-066 PP-066 (0.66) DAG row

Projects

None yet

Development

Successfully merging this pull request may close these issues.

PP-066 G-11: shared-file write contention — row PRs never write the DAG, roadmap, spec block or README counts; DAG status derived from receipts

1 participant