Skip to content

Terminal lane final read: 37 findings repaired (signal latch with per-line sweep, tmux shutdown by identity, complete scan, landscape and colour readers) - #552

Merged
seathatflowsinourveins merged 1 commit into
mainfrom
claude/terminal-lane-final-review-20260930
Sep 30, 2026
Merged

seathatflowsinourveins merged 1 commit into
mainfrom
claude/terminal-lane-final-review-20260930

Conversation

@seathatflowsinourveins

@seathatflowsinourveins seathatflowsinourveins commented Sep 30, 2026 •

Copy link
Copy Markdown
Owner

Scope

SOTA sources

  • The packaged GPT-6 lane of this repository (tools/sota-convergence/landscape-sweep: build_args.stage_lane_home, codex_call.sh, codex_job.py), not a self-written runner; Codex CLI 0.159.2 (openai/codex rust-v0.159.2), OmniRoute cx/gpt-6.1-sol and cx/gpt-6-astra-ultra on the local gateway (decision docs/decisions/2026-09-27-omniroute-account-pool.md).
  • Python signal module documentation (docs.python.org/3/library/signal.html, fetched 2026-09-30): an exception raised by a handler "may be raised after any bytecode instruction", so the handler only latches the first signal; PEP 475 (a call interrupted by a handler that returns is retried, so the loops poll the latch); signal(7) and pthread_sigmask (a blocked mask survives exec, measured on a sleep child: SigBlk 0x4003, hence no mask around the spawn).
  • Windows Terminal, microsoft/terminal at v1.24.11911.0: src/terminal/adapter/adaptDispatchGraphics.cpp (SGR parameters: MAX_PARAMETER_VALUE 65535, a missing component is 0, colour components within a byte, the colon RGB form applied only with an empty colour-space field), src/terminal/parser/stateMachine.cpp (C1 characters ignored while AcceptC1 is off), src/cascadia/TerminalSettingsModel/CascadiaSettingsSerialization.cpp and IInheritable.h (own value, then profiles.defaults, then a fragment's profile), src/cascadia/TerminalApp/Tab.cpp (the bell indicator's 2000 ms timer on the focused tab).
  • tmux 3.4 (measured on the installed server: display-message -p '#{pid}', the server process keeps the command line it was started with, a nonzero kill-server status does not tell a stopped server from a missing one) and tty-features.c (the sync terminal feature).
  • bash(1) INVOCATION and the $BASH_EXECUTION_STRING variable (a startup file can replay the -c string, so the nonce keeps ordinary output from passing for the record and does not authenticate stdout; measured); openai/codex codex-rs/config/src/types.rs at rust-v0.157.1 and rust-v0.159.2 (the notification definitions, every Default and Display impl, the Tui fields; checked on the real files).
  • No code was written where a maintained upstream exists: the repaired files are this repository's own checks and probes; the lane, the gateway, the verifier workflow and the merge tool are the existing ones.

Evidence-class table

Claim Evidence class Command / receipt
Six jobs of the packaged lane (three on gpt-6.1-sol, three on gpt-6-astra-ultra, effort max) returned 37 findings (1 high, 30 medium, 6 low; each with a reviewer-run command); 26.26M input tokens, 95.7% cache reads, 0.33M output, 50 min, pool 36 to 52 points native_proven (the runner's own records) receipt cross-family-review-terminal-lane-20260930 data.final_review; final-results.json
21 findings graded by independent Claude verifiers (17 confirmed, 4 partly, none refuted), 16 duplicates, all 37 repaired native_proven (Claude Workflow, stack-verifier, four units) plus source_review final-verification.json, final-findings.json, final_dispositions.json
The probes' signal handling: each of the two pty probes passes 8 end-to-end cases and 6 in-process latch tests (one and two SIGTERMs, two SIGINTs, SIGTERM then SIGINT, a SIGTERM at every line of the resource lifecycle, the exit status, two negative controls; no stand-in inherited a blocked signal), and 14 mutants (seven per probe) each fail exactly their cases local_integration (negative controls) recorded/alert_probe_selftest.txt, recorded/push_notification_probe_selftest.txt, recorded/pty_probe_mutants_alert.txt, recorded/pty_probe_mutants_push.txt
The tmux probes verify their server is gone by its identity before the socket directory is removed; two shutdown-failure controls each (a wrapper that refuses kill-server, and one that also lies about the pid) local_integration (private tmux server) recorded/tmux_bell_probe_selftest.txt (9 checks), recorded/tmux_sync_probe_selftest.txt, recorded/tmux_bell_probe.txt, recorded/tmux_sync_probe.txt
The readers follow their sources: the scan (12 tests, 11 mutants; the three installed releases give 17 types each), the landscape comparison (28 checks; the real rust-v0.157.1 and rust-v0.159.2 files), the colour counter (28 cases) local_integration plus source_review recorded/scan_reader_mutants.txt, recorded/notification_types_scan_*.json, recorded/landscape_refresh_selftest.txt, recorded/color_capture_selftest.txt
Native reruns: the colour counter matches the counts of 2026-09-28; the scrub probe on the native client compared 19 real-home names (none changed, none unmeasured); the PATH digest gives 13 entries native_proven (claude --bare in a pty with a dummy key; throwaway homes) recorded/color_capture.txt, recorded/scrub_placeholder_probe.txt, recorded/login_path_digest.txt
242 unit tests in the five affected modules pass local_integration recorded/unit_tests.txt
The login-shell scripts' nonce does not authenticate the shell's stdout; the digest-prefix and real-/tmp statements were corrected source_review (measured on a startup file that replays the -c string) decision record, "The final read of the repairs"

Local commands run

$ python3 scripts/validate.py
exit 0: {"components": 69, "hashed_files": 8559, "profiles": 4, "receipts": 177, "status": "passed"} (on the replayed head)
$ python3 scripts/validate_foundation.py ; python3 scripts/component_matrix.py --check ; python3 scripts/new_host_grand_list.py --check
exit 0, 0 and 0
$ python3 -B -m unittest tests.test_adoption_status tests.test_windows_terminal_defaults tests.test_adoption_docs_consistency tests.test_render_config tests.test_apply_claude_settings
Ran 242 tests ... OK (skipped=1)
$ the 30 commands of evidence/artifacts/terminal-lane-cross-family-review-20260930/recorded/exit_codes.txt
exit 0 each (the two signal-case mutant suites, 8 runs and 0 problems each, were run last and alone)
$ gitleaks git --pre-commit --staged --redact (the repository's pre-commit hook)
exit 0 on the commit below, after one reviewed false positive (a reviewer's prose "keys present, definitions_identical=True") had its punctuation changed in the record builder (see the artifact README)

Decision record

docs/decisions/2026-09-28-terminal-experience.md: "Update 2026-09-30", the new subsection "The final read of the repairs" (what was found, its residuals), three decision rows (signal handling, private labels, a further read) and the evidence row of the six jobs. docs/harness-defaults.md has four new anti-pattern rows (raising from a signal handler, judging a shutdown by an exit status, reading upstream syntax with a shorter rule than its grammar, naming a private string in the code that hides it).

Host evidence

This PR adds no file under evidence/hosts/.

  • python3 scripts/host_receipts.py validate is part of scripts/validate.py, which passes.
  • Independent review is recorded in this description (Review).
  • No platform_status change is made from a host receipt alone.

Review

  • The third read (the review this PR answers): six jobs, 37 findings; every finding was graded by a Claude verifier or is a duplicate of one that was, and the coordinator read each verifier's evidence before deciding. The largest theme is the re-check's own repairs: the signal handler that raised (Python may raise it after any bytecode instruction) could not be made safe by a mask or a spawn flag and was replaced by a latch; the tmux probes' kill-server status cannot tell a stopped server from a missing one; three readers (the scan, the landscape comparison, the colour counter) used a shorter rule than their sources' grammar.
  • What the verifiers narrowed: four findings were narrower than claimed (the signal window is microseconds, a lost cancellation needed instrumentation, a missing precondition where the control worked as shipped, and a first fix that could not use kill-server's status); none was refuted.
  • Not read again: the repairs of this round are checked by a sweep, mutants and native reruns but were not read again by a reviewer, and no fourth read is made inside this PR. Grounds: three reads returned 46, 33 and 37 findings, so the count does not converge and a fourth read would not by itself end the loop, and the bounded-review rule allows one review and one repair round (two further reads were made at the user's request). The shared Claude five-hour meter read 85% when the repairs were made (the peer terms: no new Claude agent at 60% or more); a headless probe on this host read 7% at 17:14Z after a host login change, but a headless probe reads the credential on disk, so whether this session's own requests count against that account is not established, and that reason is neither relied on nor dismissed here. A read of the merged commit is a separate bounded loop and the user's call.
  • Recording note: recorded/unit_tests.txt was recorded at 16:35Z, before the last documentation, receipt-text and mutant-runner docstring edits; the five affected test modules were re-run on the replayed head (OK, skipped=1, not recorded) and validate.py passed on it. The mutant record was produced by a pty_probe_mutants.py that differs from the committed file only in its docstring (and the README row that repeats it).
  • Residuals (recorded in the decision record): a settings save between the settings-swap tool's last comparison and the rename is still lost and is in neither file; the scan cannot resolve a name by scope or see a later .push; the login-shell scripts' answer lines are not authenticated against a startup file that replays the -c string; no Windows Terminal or interactive Claude Code session was run (the bell and focus reports remain unobserved).

Checklist

  • New/changed GitHub Actions are pinned to a full commit SHA with a version comment (no workflow is changed).
  • New/changed workflows declare top-level permissions: contents: read (no workflow is changed).
  • No secrets are printed, logged or committed; no new required secret was added. The added lines were scanned for user names, home paths, GUIDs, credential shapes and e-mail addresses: the only hits are five occurrences of /home/example (the allowed placeholder, the rule that keeps it the only one and its synthetic fixture).
  • No new paid hosting, subscription or billing surface was introduced.
  • Peer-owned untracked files and worktrees were preserved (not deleted, moved or overwritten).

🤖 Generated with Claude Code

@seathatflowsinourveins seathatflowsinourveins added the lane:foundation Foundation lane: Claude/Codex setup, hosts, memory, RAG, research, workers label Sep 30, 2026
seathatflowsinourveins added a commit that referenced this pull request Sep 30, 2026
…idate-macos flaked on the per-doubling ratio) (#556)

* Gate A U1f: growth exponent for the child-usage linearity checks

validate-macos failed tests.test_child_usage_suite on #548 (two attempts) and #552: the per-doubling check (each size at most 2.5 times the last plus
5 ms) rejected linear scanners at steps of 2.56 to 3.0 times on the macOS runner (actions runs 36745793168 and 36751526079). The criterion is now the
growth exponent from 16000 to 64000, ln((t64 + 5 ms) / (t16 + 5 ms)) / ln 4, under 1.5 (1 is linear, 2 is quadratic); the best-of-five timing, the
3-round retry, the 150 ms bound for unclosed "((" and the 1.5 s bound of the other shapes stay. All 36 macOS samples of those runs have an exponent of
1.19 or less; the scan measured before the D8 repair, continued quadratically, is 2.09. Detection is weaker for small quadratics (a pure quadratic
under 70 ms at 64,000 passes the exponent; the absolute bounds are the guard), which the test comment and the workflows README now say. Three
controls are added: the recorded macOS samples pass, the pre-repair scan fails, and a scan that is quadratic by construction is refused by the same
harness. An independent Opus review found no high-severity defect; its comment, label and README findings are applied.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>

* Register the new sha256 and size of test-child-usage.mjs, its README and SHA256SUMS in manifests/evidence.json

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>
…ine sweep, tmux shutdown by identity, complete scan, landscape and colour readers, scoped docs)

Six read-only jobs of the packaged Codex lane (three lenses, each on gpt-6.1-sol and on gpt-6-astra-ultra, effort max, through the local OmniRoute gateway) read the repairs of #532 and returned 37 findings. 21 were graded by Claude verifiers (17 confirmed, 4 partly, none refuted), 16 are duplicates, and all 37 are repaired here.

- pty probes: the signal handler only latches the first signal; cleanups run to their end at safe points and the exit status 128+signal follows; the selftests deliver a SIGTERM at every line of the resource lifecycle; pty_probe_mutants.py has seven mutants per probe (8 runs each, 0 problems)
- tmux probes: the private server is verified gone by pid, start time and socket command line before its directory is removed; two shutdown-failure controls each
- the notification-type scan, the landscape comparison and the colour counter follow their sources' grammar (complete initializers, every declared catalog, every Default and Display impl and the Tui fields, the pinned Windows Terminal SGR rules)
- documentation says what each check proves (the nonce does not authenticate stdout, the digest prefix is recorded, the real-/tmp count varies); the record builders read private labels from a private file
- sanitized record of the round, receipt rebuilt with the final read, correction notes in three older receipts, four anti-pattern rows, decision record subsection

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
@seathatflowsinourveins
seathatflowsinourveins force-pushed the claude/terminal-lane-final-review-20260930 branch from cecb3fa to d479e98 Compare September 30, 2026 19:59
@seathatflowsinourveins
seathatflowsinourveins merged commit 8ceff49 into main Sep 30, 2026
25 of 30 checks passed
@seathatflowsinourveins
seathatflowsinourveins deleted the claude/terminal-lane-final-review-20260930 branch September 30, 2026 21:05
seathatflowsinourveins pushed a commit that referenced this pull request Oct 1, 2026
…signal, spawn guard observed, sweep coverage stated, tmux identity control)

One read-only Claude Opus agent read the merged signal handling and shutdown code of the terminal lane (#532, #552) and returned 11 findings (3 medium, 8 low, none high). Each was verified by a measurement or by reading before it was repaired:

- the pty probes now end BY a latched signal (default action restored, then the signal sent to themselves) instead of exiting 128+N: a bash loop goes on after an exit 130 and stops after a death by SIGINT (shell_loop_control.py), as Cracauer's note says
- the per-line sweep records whether a client was started before the spawn guard and fails when one was; it states the lines swept of the lines with code, and the documents say what it does not reach
- an inherited SIG_IGN stays ignored; typing stops at a latched signal
- the tmux probes get a third shutdown-failure control that only the command-line check of the identity can fail (tmux_identity_mutant.py), a zombie no longer counts as alive, the pty.fork child ends with os._exit(127)
- timeouts count as failed results and still kill the stand-in; the mutant runner has eleven mutants and eight cases per probe (12 runs each, 0 problems)
- record of the read, rebuilt receipt, recorded outputs of 35 commands (Claude Code 2.1.286 scanned: the same 17 notification types), decision record, anti-pattern rows

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
seathatflowsinourveins added a commit that referenced this pull request Oct 1, 2026
…signal, spawn guard observed, sweep coverage stated, tmux identity control) (#563)

One read-only Claude Opus agent read the merged signal handling and shutdown code of the terminal lane (#532, #552) and returned 11 findings (3 medium, 8 low, none high). Each was verified by a measurement or by reading before it was repaired:

- the pty probes now end BY a latched signal (default action restored, then the signal sent to themselves) instead of exiting 128+N: a bash loop goes on after an exit 130 and stops after a death by SIGINT (shell_loop_control.py), as Cracauer's note says
- the per-line sweep records whether a client was started before the spawn guard and fails when one was; it states the lines swept of the lines with code, and the documents say what it does not reach
- an inherited SIG_IGN stays ignored; typing stops at a latched signal
- the tmux probes get a third shutdown-failure control that only the command-line check of the identity can fail (tmux_identity_mutant.py), a zombie no longer counts as alive, the pty.fork child ends with os._exit(127)
- timeouts count as failed results and still kill the stand-in; the mutant runner has eleven mutants and eight cases per probe (12 runs each, 0 problems)
- record of the read, rebuilt receipt, recorded outputs of 35 commands (Claude Code 2.1.286 scanned: the same 17 notification types), decision record, anti-pattern rows

Co-authored-by: Scout <scout@local>
Co-authored-by: Claude Sonnet 5.5 <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

lane:foundation Foundation lane: Claude/Codex setup, hosts, memory, RAG, research, workers

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant