fix: status readers and readiness reds from the 2026-09-05 corpus - #4691
Merged
Conversation
Tests that render host-local times set TZ=America/Los_Angeles and call tzset(). This host ships no /usr/share/zoneinfo, so libc resolves zone names only through TZDIR; in an environment that does not forward it, the pin degrades to a zero-offset POSIX zone named "America" and the expectations fail. `pinned_local_timezone` derives TZDIR from zoneinfo.TZPATH and verifies the pin took effect. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01DNGJ3awfNrsLaMdHgQZvid
The request-safe readiness path must prove tables, triggers and the durable freshness ledger without scanning the source. Two archive-path behaviours broke that contract: an absent ledger table was read as not-ready instead of structural-only, and any untrusted ledger record triggered a full `COUNT(*) FROM blocks` re-measure on every status probe. A recorded state below `ready` still re-measures — that is the ledger admitting it holds no current measurement, and it keeps a deferred single-session repair from reading as archive-wide incompleteness. A recorded `ready` that fails the trust check already carries counts and is reported stale or unknown without a scan. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01DNGJ3awfNrsLaMdHgQZvid
Status reports archive state; it must not go out of service on the very archive it is describing, and it must not call a live daemon stopped. Tier reads now go through one `_open_status_connection` that opens read-only without schema validation — an unstamped or skewed source.db, ops.db or user.db raised SchemaSkewError straight out of the render, replacing the whole report with one line. The operation-kernel route left three behaviours stranded: the HTTP candidate probe was unreachable whenever the daemon URL was the built-in default (so dev-loop discovery never ran), an unresolvable config aborted the daemon route instead of falling through to it, and a daemon that answers /healthz/live but returns an unparseable /api/status was rendered as a stopped daemon. The kernel's direct fallback is also gone: both callers render the direct surface themselves, so it assembled the full direct payload only to be discarded. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01DNGJ3awfNrsLaMdHgQZvid
Readiness state words were replaced by explicit convergence plus per-insight counts; these two assertions still named the retired verdicts. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01DNGJ3awfNrsLaMdHgQZvid
The schema-manifest check reached the catalog as a thirteenth root verb. It runs as `devtools verify schema-manifest` and as `devtools gate schema-manifest`; the root entry was a third route to the same module, and `verify` is a leaf command so it cannot host a subcommand of that name. Declare tests/unit/cli/test_insights.py as the owner of the root `insights` command, which the CLI registers but the interaction oracle had no owner for. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01DNGJ3awfNrsLaMdHgQZvid
The cross-contract proof imported sinnixd.projects, a package that no longer exists; the production descriptor parser is agentctl.projects. Its ProjectOperation carries no parameters or service lease, so the proof reads both defensively and still fails if either reappears in the descriptor. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01DNGJ3awfNrsLaMdHgQZvid
The fixture gave a real daemon delete of hundreds of sessions a two-second client budget, so the three routes that exercise it failed with TimeoutError whenever the host was busy. The budget bounds one request; the suite-wide pytest timeout still catches a hang. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01DNGJ3awfNrsLaMdHgQZvid
utcoffset() is Optional, so mypy rejects reading total_seconds() off it. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01DNGJ3awfNrsLaMdHgQZvid
Sinity
enabled auto-merge (squash)
September 5, 2026 15:32
Codex Review SummaryThis comment shows the latest Codex review activity on this pull request.
ℹ️ About Codex in GitHubYour team has set up Codex to review pull requests in this repo. Reviews are triggered when you
Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings. |
|
Important
This repository does not receive automatic reviews because it has fewer than 10 stars. ⚙️ Run configurationConfiguration used: Organization UI Review profile: ASSERTIVE Plan: Team Run ID: Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
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.
Summary
Fixes one cluster of the 2026-09-05 master corpus reds (106 failed / 20,455 passed): status and readiness readers, local-time tests, the twelve-verb command surface, and the descriptor contract.
Verification
The lane's focused runs on the 25 listed tests were green before the interruption;
devtools verify --quickgreen before push. This PR was published by the coordinator from the lane's clean checkpoint after the agent hit its quota; the exact final focused result line was not captured.Residual risk
Tests whose failure is caused by the corpus width change (#4682, descriptor argv) were updated to the merged behaviour.
🤖 Generated with Claude Code
https://claude.ai/code/session_01DNGJ3awfNrsLaMdHgQZvid