Skip to content

fix: status readers and readiness reds from the 2026-09-05 corpus - #4691

Merged
Sinity merged 8 commits into
masterfrom
lane/reds-status-readiness
Sep 5, 2026
Merged

fix: status readers and readiness reds from the 2026-09-05 corpus#4691
Sinity merged 8 commits into
masterfrom
lane/reds-status-readiness

Conversation

@Sinity

@Sinity Sinity commented Sep 5, 2026

Copy link
Copy Markdown
Owner

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.

  • fix(daemon): keep archive FTS readiness on bounded probes
  • fix(cli): keep status readable on a skewed tier and a live daemon
  • fix(devtools): keep the root command surface at twelve verbs
  • test: assert insight readiness by convergence and counts
  • test: pin the local timezone without an ambient TZDIR
  • test: prove the descriptor against the agentctl parser
  • test: budget the delete-authority client for a real 513-session route
  • test: compare a restored zone offset as a timedelta

Verification

The lane's focused runs on the 25 listed tests were green before the interruption; devtools verify --quick green 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

Sinity and others added 8 commits September 5, 2026 14:31
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
Sinity enabled auto-merge (squash) September 5, 2026 15:32
@chatgpt-codex-connector

chatgpt-codex-connector Bot commented Sep 5, 2026

Copy link
Copy Markdown

Codex Review Summary

This comment shows the latest Codex review activity on this pull request.

Review Status Commit Review trigger
📝 Code Review Completed 2026-09-05T15:37:15.435776Z 4fde33b PR opened
ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review" or "@codex security review".

Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings.

@coderabbitai

coderabbitai Bot commented Sep 5, 2026

Copy link
Copy Markdown

Important

  • 🔍 Trigger review

This repository does not receive automatic reviews because it has fewer than 10 stars.

⚙️ Run configuration

Configuration used: Organization UI

Review profile: ASSERTIVE

Plan: Team

Run ID: 8e09937e-4b17-4baa-ac99-7b88a90bdd6e


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.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@Sinity
Sinity merged commit 148b99d into master Sep 5, 2026
3 of 4 checks passed
@Sinity
Sinity deleted the lane/reds-status-readiness branch September 5, 2026 15:39
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