Repository navigation
fix: treat pending gh pr checks as pending (#132) - #134
Conversation
Agent work on this PREstimated cost unknown · 18 responses · 22 sessions · 2.1 h wall time
Flags: 1 human correction · 1 large tool output · 5 repeated commands · 2 repeated failures · 57 repeated reads · 8 repeated skill loads · 5 tests edited after a failure · 1 session without usage records · 18 unpriced responses Details: snapshot, prices, coverage, counters
Token counters by model (native counter semantics; never added across semantics):
Generated tokens (reasoning and other output are disjoint; other output includes code, tool calls and replies):
Selected rates (USD per million tokens). These rates value the report at the selected schedule date; they do not establish historical prices or subscription spending.
Other output and reasoning are priced without double counting inclusive native output. Missing rates remain unknown. Local measurement from native records; usage totals are not billing. Updated in place by |
|
Independent review of exact head 7e53f4e (round 1)
Coordinator adjudication: finding 1 accepted (acceptance criterion: existing ledgers corrected; the real events are the target, not only the fixture). I confirmed the 19 rows and their compound shapes on the live ledger read-only. |
|
Round 1, second reviewer (same head 7e53f4e): Muse Spark 1.3 (xhigh): PASS. It confirmed the stored Codex shape for standalone Adjudication: the round stays FAIL. Muse treated rejecting compound scripts as safe, but the acceptance criterion is correcting the real events, and 15 of 19 real ones are compound scripts ending in |
|
Independent review of exact head 7f79f2c (round 2)
Coordinator adjudication: round-1 blocking finding resolved; no open required findings. Both low notes accepted as not required. Ready for merge approval. Version note: PR #135 also takes 1.3.1; whichever merges second rebases to 1.3.2. |
7f79f2c to
090e87c
Compare
|
Independent review of the rebased head 090e87c (onto v1.4.0, version 1.4.1)
Coordinator: the 19 ids match the round-2 list exactly. Ready for merge approval. |
|
Dispatch rule for every remaining round on this PR (Luke, 2026-10-19 17:55 Warsaw): launch no new threads on cavallo. Run Muse Spark 1.3 xhigh (Muse Code) and every other reviewer or worker on bestia, or on rocky. Muse Code is available on bestia (login present since 16:59). Already-running cavallo reviewers may finish; nothing new starts there. |
What:
gh pr checksexit 8 is stored as pending, including scripts whose status comes from that command, and excluded from failure diagnostics and report counts.Why: Native command status marks pending checks as failed; the first fix also missed real scripts with preceding commands, redirects, and AND chains.
So what: Round-2 behavior is preserved on current main with version 1.4.1; the primary agent can assess the rebase evidence, and merging remains a Human Gate that triggers release publication.
Closes #132.
Behavior
One shared predicate owns the exception at ingest and during existing-ledger correction. It lexes shell words and operators without executing input, preserving quoting and skipping heredoc bodies. It chooses the final command list after newline/semicolon separators and removes redirections before identifying
gh pr checks.In an
&&chain, any failing stage can produce the final status. Classification therefore requires every possible stage to begh pr checksor one of the observed gates that cannot explain exit 8: the supportedgit rev-parse HEAD/git statusforms andgh pr viewwithout jq/template/browser execution. Ambiguous gates, including pytest, remain failed. Pipelines, OR lists, substitutions, and unsupported syntax in the final list remain unclassified as pending.gh pr checks 353; pytest,gh pr checks 353 | cat, and plainpytestexit 8 remain failed; exit 1 remains failed.Pending is neither a failure nor a passing result.
diagnose, compare, task reporting, and publishing share the failure predicate.The next writable ledger initialization during
syncruns correction version 2, including ledgers already marked version 1. It uses stored commands and exit codes, so it needs no native replay and covers ledger-only events.Contribution to the Objective: trustworthy behavior evidence without false failure counts from ordinary CI polling.
Rebase and exact candidate
7f79f2c6e647d6be633f19988b533df738cecbc3(round 2 passed, Grok and Muse).eda2c8df41d75246ab11d0f7932cd0400f2f932c, released v1.4.0, including fix: recover native parser evidence and successful reads (#128) #130, Import Cue decisions and report procedure reads (#129) #131 and chore(release): prepare 1.4.0 #137.090e87cdc478b31b4f6516be4be64d18b6c3354f.Conflicts and resolution:
VERSION: selected main's 1.4.0 as the input, thenversionctl prepare patchgenerated 1.4.1..claude-plugin/plugin.json: selected main's manifest, then versionctl updated only the declared version mirror to 1.4.1..codex-plugin/plugin.json: same resolution..grok-plugin/plugin.json: same resolution.CHANGELOG.md: retained the complete 1.4.0 entry from main, then versionctl generated this fix's entry under 1.4.1. The obsolete 1.3.1 entry was not retained.agent_observer/privacy.py: combined this PR'spendingtool-result status with main'sattemptedandpendingread/skill-read statuses. Retained all other upstream parser/privacy changes, including privacy version 10.analysis.pyandingest.pymerged automatically. Their upstream successful-read filtering and duration correction remain intact. The status predicate, marker-2 correction, tests and fixtures are byte-identical to the reviewed head.There are no authored behavior changes beyond versioning and conflict resolution. The second task commit's patch is identical; the first differs only in version values/changelog location and the privacy conflict's upstream context. Zero-context implementation/test patch IDs match exactly:
Full git range-diff
1: 7e53f4e ! 1: 36e275f fix: classify pending gh pr checks without false failures (#132) @@ .claude-plugin/plugin.json @@ { "name": "agent-observer", -- "version": "1.3.0", -+ "version": "1.3.1", +- "version": "1.4.0", ++ "version": "1.4.1", "description": "Measure agent work across Codex, Claude Code, OpenCode and Grok Build from native records, and compare behavior by model and AgentsMD version.", "author": { "name": "toolboxmd", @@ .codex-plugin/plugin.json @@ { "name": "agent-observer", -- "version": "1.3.0", -+ "version": "1.3.1", +- "version": "1.4.0", ++ "version": "1.4.1", "description": "Measure agent work across Codex, Claude Code, OpenCode and Grok Build from native records, and compare behavior by model and AgentsMD version.", "author": { "name": "toolboxmd", @@ .grok-plugin/plugin.json @@ { "name": "agent-observer", -- "version": "1.3.0", -+ "version": "1.3.1", +- "version": "1.4.0", ++ "version": "1.4.1", "description": "Measure agent work across Codex, Claude Code, OpenCode and Grok Build from native records, and compare behavior by model and AgentsMD version.", "author": { "name": "toolboxmd", @@ CHANGELOG.md @@ # Changelog -+## [1.3.1] - 2026-10-19 ++## [1.4.1] - 2026-10-19 + +### Changed + +- Treat gh pr checks exit 8 as pending and correct existing ledgers + - ## [1.3.0] - 2026-10-19 + ## [1.4.0] - 2026-10-19 ### Added ## VERSION ## @@ --1.3.0 -+1.3.1 +-1.4.0 ++1.4.1 ## agent_observer/analysis.py ## @@ agent_observer/analysis.py: def _changed_paths(event) -> set: @@ agent_observer/privacy.py: _COMMON_STATUS = frozenset({ "tool_call": _COMMON_STATUS | frozenset({"cancelled"}), - "tool_result": _COMMON_STATUS | frozenset({"cancelled"}), + "tool_result": _COMMON_STATUS | frozenset({"cancelled", "pending"}), - "read": _COMMON_STATUS | frozenset({"cancelled"}), - "skill_read": _COMMON_STATUS | frozenset({"cancelled"}), + "read": _COMMON_STATUS | frozenset({"cancelled", "attempted", "pending"}), + "skill_read": _COMMON_STATUS | frozenset({"cancelled", "attempted", "pending"}), "lifecycle": frozenset( ## tests/fixtures/codex-pr-checks-pending.jsonl (new) ## 2: 7f79f2c = 2: 090e87c fix: classify status-producing gh checks in stored scriptsProof on the rebased head
python3 -m unittest tests.test_pr_checks_pending: all 7 tests passed.python3 -m unittest discover -s tests: 918 tests passed in 145.371s on the rebased head. Existing ResourceWarnings were emitted; there were no failures.python3 -m compileall -q agent_observer tests scripts: passed.git diff --check origin/main..HEAD: passed.bin/agent-observer --version: 1.4.1.versionctl release-check: passed on the new head.Historical red/green evidence is retained: before the round-2 fix, the regression ran 6 tests with 6 assertion failures (five sampled real target subcases and the marker-1 ledger case); after the fix, all 7 passed. Real sanitized targets cover 860917, 145983, 288772, 90306 and 894845, plus native record 363608. No transcript/private text is committed.
Fresh ledger-copy correction after rebase
PYTHONPATH="$PWD" python3 /tmp/observer-132-copy-proof.pyused SQLite backup from a read-only live connection, then calleddb.init_db()twice on the private temporary copy. No sync ran against the live ledger or the copy.Fresh snapshot: 579,894 events across 40 tables, with no prior correction marker. First pass set marker 2 and changed 23 event statuses from failed to pending:
90306, 119998, 145983, 155128, 206254, 207060, 288772, 306957, 318056, 354690, 363608, 860810, 860917, 862876, 894783, 894845, 894850, 911037, 924461, 930102, 930205, 939267, 942377.All original 19 supplied rows are pending; none remain failed. The four additional rows also have
gh pr checksas the status-producing command and exit code 8. The only other logical change was creating the marker with value 2. Hash comparisons over every table, every event column except status, and the complete SQLite schema confirmed no unrelated changes or changed event identities/counts.Second pass: zero status changes, all table/schema values unchanged, marker still 2. The private copy was deleted after verification. The live ledger was opened read-only and never synced or corrected.
Version, review and delivery
versionctl prepare patch --reason 'Treat gh pr checks exit 8 as pending and correct existing ledgers'prepared 1.4.0 -> 1.4.1 after resolving the old version against current main. All three plugin mirrors and the changelog agree. Version 1.4.2 is reserved for #135 after this PR, per the current instruction.Round-2 review passed on the previous head. No review status is transferred to the rebased SHA, and no reviewers were dispatched. No merge, tag, release, plugin installation or live-ledger correction was performed. The existing low notes (unobserved early
set -etermination and unsupported&>redirects) remain unchanged, as requested.Website/SEO impact: none; internal evidence classification changes no public command, URL or website content.
The Observer cost comment is republished after the lease push. Measurement/pricing gaps remain explicit.
Elon record