Skip to content

Make Footwork actions verifiable and recover scoped native appends after restart - #1

Merged
Tom-R-Main merged 288 commits into
mainfrom
codex/h4-thin-slice
Oct 10, 2026
Merged

Tom-R-Main merged 288 commits into
mainfrom
codex/h4-thin-slice

Conversation

@Tom-R-Main

@Tom-R-Main Tom-R-Main commented Oct 10, 2026 •

Copy link
Copy Markdown
Owner

Agents can lose an action reply after native input has already been delivered. This change makes the scoped TextEdit append recoverable from a qualified, operation-bound execution receipt, while keeping missing receipts unknown and refusing automatic replay. Exact field content, geometry and resource identity remain checked at the final input boundary.

This is the combined unpublished Footwork development branch. It includes the four-tool capability MCP slice, Jev decision and evaluation infrastructure, bounded browser inspection tools, and the recorded architecture/reference research and experiments. Much of the diff is frozen research evidence; failed and inconclusive runs retain their original conclusions. A merge commit preserves preregistration chronology and source hashes.

The capability slice binds a trusted loopback source and a selected native destination. A detached one-action worker separates execution from the caller transport; private immutable records, write-ahead admission and operation binding let read-only status recover qualified historical completion. Fresh document agreement remains a separate observation. Repeated tokens and status never launch another append.

Independent review and repository bot review reproduced and remediated stale field/save evidence, Unicode receipt corruption, false submission authority from query navigation, and loss of exact field/resource preconditions during live native dispatch. Completion now expires current-state evidence after potentially delivered same-source inputs. Ordinary query navigation supplies no submission acknowledgement, so completion remains blocked where that acknowledgement is required. Browser capture now redacts short opaque URL credentials and retains only documented inventory counters. Frozen visual fixtures are validated against authored hashes across platforms; Mac-only probes remain isolated while portable checks continue on Linux.

Validation:

  • Full local Python suite after product/evaluation fixes: 1,428 passed, 26 skipped. Subsequent deadline boundary controls: 35 recovery tests passed. Real localhost browser tests: 12 passed.
  • Independent review of the product changes in one continuing Codex context: 309 focused checks passed. Root checked the reviewed file hashes. Earlier durable-restart design and implementation received Claude Opus 5.5 review through the authorized mailbox; that review predates these PR remediations.
  • Node tests: 97 passed. Rust formatting, Clippy and 19 tests passed offline. Ruff and notebook validation passed.
  • Fresh real MCP/TextEdit restart matrix: all 12 cases passed. All three real native interference guards passed: trailing space, trailing newline and changed field geometry.

Evidence: jevdual/results/pr-review-remediation-20261010/. Reference mechanisms and exact local repository revisions: jevdual/docs/plans/reference-restart-reconciliation-20261010.md and reference-capability-build-20261009.md.

The native qualification covers the selected TextEdit AX route and process interruption. It does not establish disk-save durability, power-loss recovery, arbitrary-app support, exactly-once GUI execution or general installation readiness. No provider defaults or deployment are changed by this PR. Footwork remains MIT; dependency licenses continue to apply.

Tom-R-Main and others added 30 commits September 26, 2026 15:32
…en_locked, and the posture refuses every delivery; G4 inconclusive (the screen locked mid-run and the harness pressed keys for 25 steps against it)

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_015SXfQdX2QiRjY8NkxiQS5H
…ified-pass column is no longer 0 on every arm (Q17)

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_015SXfQdX2QiRjY8NkxiQS5H
….69, −0.01]) but cost 4 verified passes with no-fact refusals up; the delivery guardrail caught a false not_delivered on select_dropdown; the input fix moved verified passes 121 to 137

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_015SXfQdX2QiRjY8NkxiQS5H
…s change event confirms a dropdown or input step (Q12b's false not_delivered on every working sort); package D summary

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_015SXfQdX2QiRjY8NkxiQS5H
…ied values, save readback, locked-screen stop) and D's receipt fixes

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_015SXfQdX2QiRjY8NkxiQS5H
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_015SXfQdX2QiRjY8NkxiQS5H
… owner's draft

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_015SXfQdX2QiRjY8NkxiQS5H
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_015SXfQdX2QiRjY8NkxiQS5H
… 6 of 6 (Q17: 0 of 6); the readback polls up to 3 s before calling a save partial

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_015SXfQdX2QiRjY8NkxiQS5H
…re the rerun

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_015SXfQdX2QiRjY8NkxiQS5H
…arly reads; the receipts were true and sent the driver to File > Save; 6 of 6 verified again

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_015SXfQdX2QiRjY8NkxiQS5H
…ifies 148 against 137 with no false completion, but the primary's interval includes zero; not adopted on this run; V1 held

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_015SXfQdX2QiRjY8NkxiQS5H
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_015SXfQdX2QiRjY8NkxiQS5H
…ion rule) and Q11b (the narrow declaration on live-dev) pre-registered

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_015SXfQdX2QiRjY8NkxiQS5H
…w-rust-year on both arms, whose predicate (2015) disagrees with Wikipedia's current infobox (2012) that both arms quoted; the stale oracle is the owner's call

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_015SXfQdX2QiRjY8NkxiQS5H
…ooled through no-fact refusals (91 against 68) with predicate passes unchanged; not adopted

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_015SXfQdX2QiRjY8NkxiQS5H
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_015SXfQdX2QiRjY8NkxiQS5H
…ur source gaps (CLI judge wiring for key and Enter, unbound effect on a raised dispatch, screenshots before scrubbing, strict claim asides); Rust oracle erratum recommended

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_015SXfQdX2QiRjY8NkxiQS5H
… judge through footwork do; a raised dispatch ends in a named refusal; the browser judges Enter like a click; no screenshot while a secret is held; strict claims check facts inside asides

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_015SXfQdX2QiRjY8NkxiQS5H
…arms quoted): Q16b regrades to 20 against 22 of 24 with no false completions, decision unchanged; Q17 corrected to six tasks

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_015SXfQdX2QiRjY8NkxiQS5H
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_015SXfQdX2QiRjY8NkxiQS5H
… facts are elsewhere on the page, before the audit set exists

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_015SXfQdX2QiRjY8NkxiQS5H
…wrong product, wrong field, wrong task, unsupported qualification, fact in an aside, wrong year on the page, order not placed), scored by the claim check and the full verifier in both modes; labels committed before scoring

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_015SXfQdX2QiRjY8NkxiQS5H
…hanged)

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_015SXfQdX2QiRjY8NkxiQS5H
… either mode; strict halves false rejections (6/8 to 3/8); the claim check alone is weak as the audit said (V2 failed); V3 predicts two strict-mode verifier fixes, before making them

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_015SXfQdX2QiRjY8NkxiQS5H
…ies only to tasks that ask for an answer; claims audit false rejection 3/8 to 2/8 with false acceptance 0/10 (V3 failed its threshold; A4's remaining refusal is an absence without a trajectory)

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_015SXfQdX2QiRjY8NkxiQS5H
…lue landed once, at the end, with the earlier content intact, and name the failure otherwise; start clears carries and snapshots; pilot uses both

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_015SXfQdX2QiRjY8NkxiQS5H
…not its value is still exported or long enough to scrub (secondary audit, second round)

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_015SXfQdX2QiRjY8NkxiQS5H
…on, carry, snapshot, receipts, file before and after, recovery), a duplicate variant; G7 before running

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_015SXfQdX2QiRjY8NkxiQS5H
…a traceback; the pilot stops at its first failed step; G7's first run kept as evidence of both defects

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_015SXfQdX2QiRjY8NkxiQS5H
@chatgpt-codex-connector

chatgpt-codex-connector Bot commented Oct 10, 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-10-10T17:35:49.209024Z 678443e 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.

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 678443eb71

ℹ️ 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".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread tools/browser-inspection/redaction.mjs Outdated
Comment thread tools/browser-inspection/frontend.mjs Outdated
@Tom-R-Main
Tom-R-Main merged commit 8c9478f into main Oct 10, 2026
1 check passed
@Tom-R-Main
Tom-R-Main deleted the codex/h4-thin-slice branch October 10, 2026 18:00
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