Repository navigation
Refuse env-style shell launchers; keep unix and local URL schemes checked (#206 review lows) [hold: after the wave] - #216
seathatflowsinourveins wants to merge 2 commits into
Conversation
…cked (lows from the #206 review) - codex_launch_issue also checks the interpreter an env-style launcher names (asdf's shims are #!/usr/bin/env bash), not only an absolute shell. - local_scheme: file, fsspec's local and any unix scheme (http+unix://%2F...) keep their // checked as a path. - README: a real blind child's AF_UNIX connect to a probe-owned socket the caller reached failed with EPERM (socket() itself succeeded), so the peer sessions' sockets are closed to it, as TCP is. - lane-provenance.json: codex and adjudication entries appended. Held until the 2026-09-24 wave (recorded with #206's code) lands. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
|
You have reached your Codex usage limits for code reviews. You can see your limits in the Codex usage dashboard. |
…0924 Codex false positives) The re-record's Codex lane (at b122312) flagged 2 of 32 layers with no read outside the export: Python's `'://' in ref` URL test read as a // path, and an rg fragment `(...|/runner.py$)` read as an absolute path. Narrow exemptions: a bare quoted '://' (the same quote on both sides), and a path ending in the regex anchor $ right before ) or |. `cat //`, an unquoted `://x`, `/etc/passwd$''` (bash's $'' quoting) and a quoted '/runner.py$' stay flagged. 4/4 mutants killed. Both layers passed on rerun with the same code, so the wave keeps a single codex_lane hash; this PR still waits for the wave. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
…ls, executable rollback (B3, B4, B5) B4: the before-GET, PUT, after-GET and PR-status claims are labelled historical, recorded by the PR author, output not retained. Measured today (2026-09-29T03:18:04Z, read-only): the recorded diff of the live ruleset 23739774 against origin/main (b0fb65b, GitHub's main tip then) exited 0 after stripping eight response-metadata keys and sorting rules by type; the rules order is the only other difference; the 57fb6d8 negative control exits 1 on the sota-sources context only; updated_at is still the recorded PUT second. packet.md L90-92 cited as historical corroboration. B3: rollback is git show 57fb6d8:.github/main-ruleset.json | gh api --method PUT .../rulesets/23739774 --input - (not run); verified 57fb6d8's file equals 7bbb021's minus sota-sources (jq -S, cmp exit 0) and main still carries 7bbb021's file. B5: a rebase is not the only way to get a sota-sources run (validate.yml L6-9 reopened/edited; docs/lanes.md merge path), GitHub starts no pull_request run while a PR conflicts, and reporting is not passing (the job reads only the description, L517-521); #205/#216 measured CONFLICTING with no sota-sources run. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…uire sota-sources (#430) * docs/lanes.md: merge with the reviewed head pinned (--match-head-commit) Strict up-to-date checks stay off and this User-owned repository cannot use a merge queue (docs/decisions/2026-09-22-github-automation-closure.md), so `gh pr merge <N> --squash --match-head-commit <SHA>` is the guard against merging a head nobody reviewed (https://cli.github.com/manual/gh_pr_merge). It was practised but not written down: grep for match-head-commit across docs, recipes, adoption, examples and AGENTS.md returned nothing. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com> * Decision record: close the sota-sources ruleset drift with dated GETs The live ruleset 23739774 now requires the committed eight checks. Before-GET 21:00:04Z (seven, no sota-sources); PUT of .github/main-ruleset.json at main e82e6be at 21:00:13Z; after-GET matches the committed file. Records the open PRs affected at PUT time and the rollback. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com> * docs/lanes.md merge guard: pin the checked and reviewed head read just before merge (B1, B2) B1: <SHA> is the full 40-character headRefOid read with gh pr view <N> --json headRefOid,statusCheckRollup immediately before the merge, on which the review completed and every required check ran with none running or failed. The hot-file protocol's rebase or merge of main comes before that read; if main changed a shared hot file after <SHA>, merge main again, wait for the checks on the new head and pin it; the review carries over only if the reviewed files are byte-identical (GitHub's stale-approval rule, available-rules-for-rulesets). Sources: gh 2.101.0 'gh pr merge --help'; cli/cli v2.101.0 pkg/cmd/pr/merge/http.go L77-80 (expectedHeadOid); GraphQL MergePullRequestInput.expectedHeadOid read by schema introspection and in github/docs src/graphql/data/fpt/schema-pulls.json. B2: the flag guards the head, not the base: with strict up-to-date checks off and no merge queue, two PRs green against an older main can still break it together (GitHub docs, loose required status checks). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * Drift closed entry: measured live-ruleset comparison, historical labels, executable rollback (B3, B4, B5) B4: the before-GET, PUT, after-GET and PR-status claims are labelled historical, recorded by the PR author, output not retained. Measured today (2026-09-29T03:18:04Z, read-only): the recorded diff of the live ruleset 23739774 against origin/main (b0fb65b, GitHub's main tip then) exited 0 after stripping eight response-metadata keys and sorting rules by type; the rules order is the only other difference; the 57fb6d8 negative control exits 1 on the sota-sources context only; updated_at is still the recorded PUT second. packet.md L90-92 cited as historical corroboration. B3: rollback is git show 57fb6d8:.github/main-ruleset.json | gh api --method PUT .../rulesets/23739774 --input - (not run); verified 57fb6d8's file equals 7bbb021's minus sota-sources (jq -S, cmp exit 0) and main still carries 7bbb021's file. B5: a rebase is not the only way to get a sota-sources run (validate.yml L6-9 reopened/edited; docs/lanes.md merge path), GitHub starts no pull_request run while a PR conflicts, and reporting is not passing (the job reads only the description, L517-521); #205/#216 measured CONFLICTING with no sota-sources run. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * Hot-file step: re-register docs/lanes.md and the automation-closure record in manifests/evidence.json Registered with host_receipts.register_file; component_matrix.py --write and new_host_grand_list.py --write left the four generated reports unchanged; scripts/validate.py passed. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * docs/lanes.md: read the pinned head's required checks with gh pr checks --required; move merge-guard mechanics to the decision record The round-one verifier showed the documented statusCheckRollup filter prints superseded runs, so 'none failed' could not be judged with it (merged #389, #411 and #413 each show an earlier sota-sources failure and a later success on the final head). gh pr checks --required lists only the required checks with the latest run of each; measured exit 0 (all passed), 1 (one failed, none pending) and 8 (pending). The implementation-level citations move to the decision record, the stale-approval comparison is called an analogy, and 'today' leaves the dated record. Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com> --------- Co-authored-by: Scout <scout@local> Co-authored-by: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
…t carries its caveat in the portable CLAUDE.md (#504) * Dispatch record: final status of the unresolved items Refreshes the "Unresolved" section after the 2026-09-29 merges. Each open item now names who acts and what starts it: the Harbor Terminal-Bench 4.0 run (the user's credential route, sandbox and budget), the sealed run's --model (accepted by the Gate A owner for its Amendment 4), the trading catalog's Claude row (the trading lane, after a native Opus 5.5 research run), the GPT-6 lane's effort default (a standalone rules pull request by the owner of each wave's first Codex stage; it fails 49 of 76 codex_lane tests when flipped and changes a verdict-gate trust path, and PR #216 does not touch it, which corrects the earlier parenthetical), the OmniRoute Claude route, Codex 0.158.0, the landscape sweep and the main-session model. Deferrals rest on the shared accounts' windows, read live, not on a recorded reset. The record's hash is registered on main's manifest (last commit). Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com> * Dispatch record: correct the GPT-6 lane effort owner note native-agent-stack-76 took the codex_lane.py default-effort flip as its own foundation rules pull request, and its foundation sweep does not use codex_lane.py (it passes --effort max explicitly through landscape-sweep/codex_job.py), so nothing there waits on the flip. The record said the owner of each wave's first Codex stage flips it before that stage; it now says who took it and what depends on it. The record's hash is re-registered in the same commit. Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com> * Portable CLAUDE.md: the max default carries its caveat A read-only check by the session that built the launcher found that AGENTS.md, the workflows README and the decision records say the max default rests on the user's requirement, not on a measured gain, while the portable instruction file (which becomes the user-level CLAUDE.md) stated the launcher, the opt-out and the fallback without it. It now carries the same clause (12 words; the file is 1,420 words against the test's 1,440 ceiling). The file's hash is registered in the same commit. Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com> --------- Co-authored-by: Scout <scout@local> Co-authored-by: Claude Sonnet 5.5 <noreply@anthropic.com>
|
Custody plan for #216: Claude session native-agent-stack-0c No live owner found: no coordination note claims this PR, and no #608 comment names it. The plan is port and close. A fresh PR from current main will carry the parts that still fit, with repairs, and this PR then closes with a link to it.
Objection window: 2 hours from this comment. Reply here to object or to claim the PR. Claude session native-agent-stack-0c |
…chers (#680) * fix(sota-convergence): port blind audit tightening from PR #216 Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * chore(evidence): register PR #216 port and regenerate foundation reports Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> --------- Co-authored-by: Scout <scout@local> Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
|
Closed unmerged: superseded by its port #680, merged as |
Follow-up to #206 with two lows from its final targeted review:
codex_launch_issuealso checks the interpreter an env-style launcher names. asdf's shims are#!/usr/bin/env bash, and such a launcher exits 127 in a blind child just as#!/bin/shdoes.unixandlocalURL schemes: the URL skip now treatsfile, fsspec'slocaland anyunixscheme (http+unix://%2F…) as local paths.Evidence: a real blind child created an AF_UNIX socket, but its
connect()to a probe-owned socket failed withPermissionError: [Errno 1] Operation not permitted, while the caller's own connection was accepted. So the peer sessions' sockets are closed to it, as TCP already was.Checks: the targeted tests pass (
test_codex_lane,test_adjudicate,test_verdict_lane_vendoring,test_record_verdicts: 329 OK). All 4 mutants of the new checks are killed.validate.pyand lint are clean, and gitleaks is clean.Hold: do not merge until the 2026-09-24 wave, which runs with #206's code, is recorded. The record-time check requires the returns'
codex_lane_py_sha256to be the checkout'scodex_lane.py. The registry is append-only, so both codes stay registered.🤖 Generated with Claude Code