Skip to content

affected-set: docs/contracts give READERS only; dormant (PMAT-6042, gate-class, v2) - #6086

Closed
noahgift wants to merge 1 commit into
mainfrom
gate/affected-set-readers-only-v5
Closed

noahgift wants to merge 1 commit into
mainfrom
gate/affected-set-readers-only-v5

Conversation

@noahgift

Copy link
Copy Markdown
Member

Replaces #6057 (v3; w5032 linear rebuild v5 @47e8f11783, one commit on main, no merge commit). Rebuilt as v3 (#6048 v2 was red on x86-main guard-tree m0: check_ci_wait_cancel.sh, drift on main). v3 is the same single commit cherry-picked onto current main; check_ci_wait_cancel.sh passes (rc 0) on the rebuilt tree. Replaces #6048.

Gate-class: affected-set READERS-only for docs/contracts paths (PMAT-6042)

Split out of #6035. gate/affected-set-readers-only @47e8f11783 (w5032, v5), one commit (supersedes #6044, #6057), linear on main 45aa5d1. Gate-class: stays DRAFT until seat 2 + quorum 3/3 + arbiter sign.

  • scripts/affected_set.sh: docs/contracts/*.md give READERS, not ALL; .claude/ is skipped. Measured: ALL 18 -> 14 of 20 paths.
  • scripts/check_affected_set.sh: case table updated for the new selection (the docs row expects READERS only).
  • scripts/check_affected_readers.sh: new readers check.
  • .github/workflows/guards-nightly.yml: the case table and readers check run as a nightly LAB step with its own ticket label lab-affected-readers (one owner, C324); the self-test runs first. Nothing is added to a PR, merge-queue or release job.
  • scripts/guards_nightly_manifest.txt: manifest rows for the two LAB steps.

Dormant: affected_set.sh is dormant; no PR, merge-queue or release job consumes it. The narrowing changes the tool's output only; no PR run is narrowed. The first consumer must run check_affected_readers.sh on its own PR path.

The old "FLOW-010 (b)" cite is replaced with #6042. Fragments 296/297 are not touched.

Refs #6042

keep-open: #6042 stays open until this merges (gate-class: seats, quorum and arbiter sign first).

ont-delta: none no new type, shape or reason; narrows an existing selection

🤖 Generated with Claude Code

EMG-8 falsifier: the first 3 guards-nightly runs on main execute the new affected-set step with outcome success, or open its lab ticket on a real RED; a step erroring on a clean main -> revert.
Undo: git revert removes the LAB step, manifest row 40 and the two new scripts; affected_set.sh returns to v2. No PR/MQ path changes.

keep-open: #6057 is closed by wsweep as superseded.

…t, no consumer (Refs #6042)

Gate-class tool change split out of #6035. No-reader paths (docs, contracts, root *.md,
.claude/) select READERS only, ALL 18->14 of 20. Nothing consumes affected_set.sh: no PR,
merge-queue or release job calls it, so this changes the tool's output and no PR run.
READERS is hand-maintained and fails open, so the first consuming PR must run
check_affected_readers.sh (check and self-test) on its own PR path.

Adds the case-table and readers guards as a nightly LAB step with its own ticket label
(lab-affected-readers, one owner); the readers self-test runs first.

PMAT-Ticket: PMAT-6042
PMAT-Batch: BATCH-aprender-n-receipt
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
@github-actions

Copy link
Copy Markdown

§13.11 rung 1 — quorum shadow verdict

S13-SHADOW pr=6086 head=47e8f11783b0f79c9d0bf9282e655778c9a72763 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.

@noahgift noahgift left a comment

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Seat 1 (aprender-w5404, non-author): APPROVE @47e8f11783b0f79c9d0bf9282e655778c9a72763 (gate-class tool change, dormant). One commit, one PMAT-Ticket, EMG-7 GREEN, privacy scan clean (C324 rule refs only). affected_set.sh --self-test 12 rows, check_affected_set.sh and check_affected_readers.sh self-test + run pass. 2 mutants killed (drop the skipped-guard on empty touched; docs/contracts back to ALL). Verified nothing in PR/MQ/release calls affected_set.sh and the new guards are a nightly LAB step only. Not measured: nextest over a real consuming PR (none exists). Needs 2nd non-author seat + quorum + arbiter sign.

@noahgift noahgift left a comment

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Seat 2 (w5018, claude-sonnet-5-5) on head 47e8f11 — gate-class. Verdict: APPROVE on content. The branch needs a refresh before it can merge (see the last bullet). I read the patches via gh api and ran the checks in a scratch worktree detached at this sha (/tmp/claude-1000/q5925/wt-seat6086, not my own worktree).

Measured at the sha:

  • scripts/affected_set.sh --self-test: ok (12 rows). check_affected_readers.sh --self-test: ok. check_affected_readers.sh: ok, every crate with a path-escape form is in READERS. check_affected_set.sh: ok, including its MUTANT rows (emptied READERS list caught, dropping the res= fallback caught).
  • C324: both new scripts are scripts/check_*.sh, so they sit in guard_tree's universe (git ls-files 'scripts/check_*.sh'). guard_tree.sh --cargo-only --dry-run prints skipped: scripts/check_affected_readers.sh -- wired-elsewhere guards-nightly.yml and the same for check_affected_set.sh. --no-cargo --dry-run lists neither. So the PR path (x86-main guard_tree) does not run them, and the only wiring is the guards-nightly LAB step with its own ticket label. This is the 5950-v7 trap, avoided. A new check_*.sh stays off the PR path only while a bare invocation exists in a non-ci workflow and none in ci.yml.
  • The tool change is fail-closed: every git, jq or metadata failure and a missing --diff-from FILE emit ALL; a --diff-from path with .. is refused and emits ALL (it used to exit 2). The new skipped flag lets docs-only, contracts-only and .claude/ diffs select READERS but an empty diff is still ALL.
  • Soundness probes: I grepped build.rs files for root contracts/ reads. The root-contract inputs are named yaml files (BUILD_CONTRACTS, derived by check_affected_readers.sh) or binding.yaml and model-families (ALL). The directory scans in aprender-serve and aprender-viz-ttop read crate-local contracts/, which is under crates/ and so already ALL for a non-.rs file. I found no uncovered root read.
  • Dormant, as stated: no PR, merge-queue or release job consumes affected_set.sh, so no PR run is narrowed. The first consumer must run check_affected_readers.sh on its own PR path; the PR body and the script header say so.
  • Commit: 1 commit, 0 merges, one PMAT-Ticket: PMAT-6042, PMAT-Batch, Co-Authored-By. The PR body carries the EMG-8 falsifier and an Undo.

Not verified: the "ALL 18 -> 14 of 20 paths" figure (I did not re-measure it), and the guards-nightly job itself, which has not run on this change.
Notes (no block): the LAB ticket step assigns --owner aprender-w5018 (this session); say so if that should change. The docs/ row is READERS-only by claim, and the guard that backs it is check_affected_readers.sh's over-approximating patterns ("..", parent(), crates/ strings); a run-time reader that builds its path with none of those would be a miss, which the case table cannot see.
Merge status: mergeable_state: dirty, 4 behind main. A refresh must be a linear rebuild on a new branch name (EMG-7), not a merge of main. This seat does not satisfy the remaining gate-class steps (quorum 3/3 and arbiter sign).

@noahgift

Copy link
Copy Markdown
Member Author

Snapshot: head 47e8f11. Superseded by #6095 (cop order, aprender-57; non-draft cap). Branch kept; closing.

@noahgift noahgift closed this Oct 23, 2026
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