Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
288 commits
Select commit Hold shift + click to select a range
a772502
A locked screen stops a native run at its first observation with scre…
Tom-R-Main Sep 26, 2026
a12a43b
Native results set success from an accepted done, so the report's ver…
Tom-R-Main Sep 26, 2026
28a741b
Q12b result: H0(c); receipts lowered requests per progress (−0.28 [−0…
Tom-R-Main Sep 26, 2026
59775e7
Receipts: untrusted events of any kind read by_script, and a control'…
Tom-R-Main Sep 26, 2026
91f19f5
Merge packages E (strict claim check, Q16 arm), F (Q11b arm), G (carr…
Tom-R-Main Sep 26, 2026
cc0768d
audit_no_fact: read traces through Path (ruff SIM115)
Tom-R-Main Sep 26, 2026
0d3907a
Legible Loop v6: evidence from packages C to G, rule by rule, for the…
Tom-R-Main Sep 26, 2026
6918473
Notebook: G5 re-predicts G4 on an unlocked screen, before the run
Tom-R-Main Sep 26, 2026
1a31586
G5 held: with the save readback the verifier accepts the saved append…
Tom-R-Main Sep 26, 2026
809e346
Notebook: G6 predicts G5's first-save partials were early reads, befo…
Tom-R-Main Sep 26, 2026
7b880f3
G6 failed: the first Command-S partials were real failed saves, not e…
Tom-R-Main Sep 26, 2026
55cbd6c
Q16 result: strict claim check cuts no-fact refusals 62 to 20 and ver…
Tom-R-Main Sep 26, 2026
a04845e
Merge package E results: Q16 and Q17
Tom-R-Main Sep 26, 2026
ef6d3eb
Q16b (the strict claim check on the live heldout, once, with an adopt…
Tom-R-Main Sep 26, 2026
709d412
Q16b result: not adopted by the rule (one false completion); it is lh…
Tom-R-Main Sep 26, 2026
8cad4eb
Q11b result: H0(b); the narrow declaration costs 10 verified passes p…
Tom-R-Main Sep 27, 2026
c2de17e
Plan status and Legible Loop evidence after Q16b and Q11b
Tom-R-Main Sep 27, 2026
7bf0a67
Secondary audit through c2de17e (Codex): recomputed results agree; fo…
Tom-R-Main Sep 27, 2026
7b1f93a
Secondary audit fixes, each reproduced first: key and Enter reach the…
Tom-R-Main Sep 27, 2026
c4c8a5a
Rust oracle erratum (2015 to 2012, the year Wikipedia gives and both …
Tom-R-Main Sep 27, 2026
8c3009f
Q17 write-up: six tasks
Tom-R-Main Sep 27, 2026
963aab0
Notebook: V2 predicts the claim check accepts adversarial dones whose…
Tom-R-Main Sep 27, 2026
fbe6d43
Claims audit: 18 dones labelled accept or reject on synthetic pages (…
Tom-R-Main Sep 27, 2026
0af2cae
Claims audit labels: quote task strings (YAML syntax only; no label c…
Tom-R-Main Sep 27, 2026
16c51bc
Claims audit: the full verifier accepts none of 10 incorrect dones in…
Tom-R-Main Sep 27, 2026
3bbd76b
Strict verifier: Jev sees form field values and the no-fact rule appl…
Tom-R-Main Sep 27, 2026
7e8a8d5
Workflow oracle: snapshot-file and check-file --appended prove the va…
Tom-R-Main Sep 27, 2026
0ae441a
Screenshots stay off once a session has handled a secret, whether or …
Tom-R-Main Sep 27, 2026
a5f724f
Pilot as an integration test: evidence kept per run (source observati…
Tom-R-Main Sep 27, 2026
404d392
Every footwork command stops with a named reason (exit 7) instead of …
Tom-R-Main Sep 27, 2026
fb3e6fb
Pilot: wait up to 60 s for the person to pause before saving, recordi…
Tom-R-Main Sep 27, 2026
2d48bca
G7 held: the clean pilot meets the workflow oracle (save recovered th…
Tom-R-Main Sep 27, 2026
7f08dfa
Q16c pre-registered: the current strict verifier's adoption decision,…
Tom-R-Main Sep 27, 2026
a2df528
Q16c fresh set scored: no unsupported acceptance in either mode (0/14…
Tom-R-Main Sep 27, 2026
64871aa
Package H: grants bound to one operation on one resource with these a…
Tom-R-Main Sep 27, 2026
0868fb7
Package I: the bounded arm (System 1 finishes only a fixed action and…
Tom-R-Main Sep 27, 2026
d73cd9e
Q16c result: improvement by the rule (verified 150 against 128 pooled…
Tom-R-Main Sep 27, 2026
07f500b
Q16c write-up: strict arm cost 1.14
Tom-R-Main Sep 27, 2026
dc1c2d8
Merge packages H (grants bound to a resource and an effect) and I (th…
Tom-R-Main Sep 27, 2026
6ef9deb
Adopt the strict verifier as the default (Q16c), a settings change no…
Tom-R-Main Sep 27, 2026
0bc5ca8
Heldouts once on the strict verifier's adoption: fixture heldout dual…
Tom-R-Main Sep 27, 2026
621fa1a
Q18 launch note: native path unchanged since pre-registration; the st…
Tom-R-Main Sep 28, 2026
9302fb1
Q13 oracles: the fixture server records GET queries and serves downlo…
Tom-R-Main Sep 28, 2026
575cb7f
Q18 result: H0(a); the bounded arm verified the most (17 of 18) at th…
Tom-R-Main Sep 28, 2026
65a8f0b
Grants for target-less actions (menu items, chords) bind the current …
Tom-R-Main Sep 28, 2026
35761a9
Grants live pilot script (Finder, scratch folder) and H1, before running
Tom-R-Main Sep 28, 2026
3225e40
Grants live pilot held: on a real Finder window a grant cleared trash…
Tom-R-Main Sep 28, 2026
b63e85f
Notebook: G8 predicts Q13's four new oracles confirm correct scripted…
Tom-R-Main Sep 28, 2026
0d351da
Q13 oracle stage script: a correct and a wrong scripted solve per new…
Tom-R-Main Sep 28, 2026
7723b79
Q13 oracle stage, first run kept (3 of 6 as expected; Calculator not …
Tom-R-Main Sep 28, 2026
edc689b
A browser session binds the tab showing the page it last observed: th…
Tom-R-Main Sep 28, 2026
f67645c
Q13 oracle stage: the form's Send is a gated effect, so each scripted…
Tom-R-Main Sep 28, 2026
9559b25
Q13 oracle stage held (G8): on the real apps every new oracle confirm…
Tom-R-Main Sep 28, 2026
0ada1b4
Q13a pre-registered: five cross-surface tasks driven by the operator …
Tom-R-Main Sep 28, 2026
a24570d
Q13a amendment during task 5, before its effect: the order reference …
Tom-R-Main Sep 28, 2026
35e3af9
Q13a result: three cross-surface tasks proven, two stopped truthfully…
Tom-R-Main Sep 28, 2026
c3980cb
Cross-surface loop (option 1): the model drives one footwork session …
Tom-R-Main Sep 28, 2026
7c24ff0
Q13 amendment before run 1: a carried reference in a done answer reso…
Tom-R-Main Sep 28, 2026
ef0b491
Q13 result: the model driving the cross-surface loop proved tasks 1 t…
Tom-R-Main Sep 28, 2026
ab0fc0e
Notebook: V4 predicts cross-surface context on the verifier's traject…
Tom-R-Main Sep 28, 2026
34ceffa
footwork done --context-from: another surface's receipts (with eviden…
Tom-R-Main Sep 28, 2026
8441209
V4 failed: cross-surface context moves Jev toward accepting the corre…
Tom-R-Main Sep 28, 2026
e67e4f9
done puts a harness check on the verifier's trajectory: whether each …
Tom-R-Main Sep 28, 2026
3c65e89
V5: the harness's carried-value check makes the verifier refuse a tam…
Tom-R-Main Sep 28, 2026
9e8957f
Match carries record which occurrence they are and the lines around t…
Tom-R-Main Sep 28, 2026
d44d9c6
V6 failed: occurrence and surroundings on the trajectory do not let t…
Tom-R-Main Sep 28, 2026
d7ac3ad
Cross-surface loop: requirements per surface, a done judged on every …
Tom-R-Main Sep 28, 2026
d84c6a6
V7 failed and summary S9: per-surface judging accepted the source hal…
Tom-R-Main Sep 28, 2026
7f3f793
Notebook: E3, exploring Finder rename and list selection routes
Tom-R-Main Sep 28, 2026
39d9ea4
E3: writing Finder's name cell shows a new name without renaming the …
Tom-R-Main Sep 28, 2026
a538619
Q19 pre-registered: twenty novel development tasks (browser, native, …
Tom-R-Main Sep 28, 2026
a8c3136
Q19 driving harness: setup, a logged footwork wrapper, friction notes…
Tom-R-Main Sep 28, 2026
89384ce
Q19 baseline, partial (D01 to D07; D08 paused by a locked screen): si…
Tom-R-Main Sep 28, 2026
6452fb3
Q19 baseline: 14 of 20 proven, 6 stopped truthfully, 174 commands, 30…
Tom-R-Main Sep 29, 2026
e075a3a
Notebook: R1 predicts the wrong-document save is a hotkey sent withou…
Tom-R-Main Sep 29, 2026
3bd8067
A chord goes out only once the bound window is its app's key window, …
Tom-R-Main Sep 29, 2026
6fb90ec
A grant records which of several look-alike elements it is for ("2 of…
Tom-R-Main Sep 29, 2026
09b9bbe
A secret typed into a masked field reads unverifiable with its length…
Tom-R-Main Sep 29, 2026
99c5673
Q19 round 1: Chrome opens a window when none, label: addresses numeri…
Tom-R-Main Sep 29, 2026
95946e1
Q19 frozen re-drive: commands -38% on tasks proven both times, fricti…
Tom-R-Main Sep 29, 2026
8c90832
Front the bound window by activating the app first, then raising the …
Tom-R-Main Sep 29, 2026
ebe0ae3
R5 failed: TextEdit changes its key window only on real input (every …
Tom-R-Main Sep 29, 2026
f282080
When AX leaves another window key, click the bound window's title bar…
Tom-R-Main Sep 29, 2026
82bfa9f
ruff format
Tom-R-Main Sep 29, 2026
73d0b70
R6 held: a hit-tested title-bar click makes the bound TextEdit docume…
Tom-R-Main Sep 29, 2026
c9acf95
Q19: freeze independently authored heldout tasks and oracle checks
Tom-R-Main Sep 29, 2026
5751e12
Q19 final-run procedure fixed before the held-back tasks are read; mo…
Tom-R-Main Sep 29, 2026
8de6e2d
Merge the Q19 held-back tasks (Codex, codex/q19-heldout 2494390) afte…
Tom-R-Main Sep 29, 2026
3d47cf7
Q19 held-back: deviations recorded before the first run (the operator…
Tom-R-Main Sep 29, 2026
dc86c6a
Q19 held-back: nine of ten tasks by both drivers, H10 by the operator…
Tom-R-Main Sep 29, 2026
ca55771
Q19 held-back result: no untruthful outcome for either driver; operat…
Tom-R-Main Sep 29, 2026
bc49e13
Measurement consistency: Q19 held-back adjudication kept apart from r…
Tom-R-Main Sep 29, 2026
aaf905a
Q19 held-back write-up: counts point to the adjudicated summary; the …
Tom-R-Main Sep 29, 2026
5423ae1
M1 predicts effect evidence (save readback, submitted fields) at done…
Tom-R-Main Sep 29, 2026
7634205
M1 failed: effect evidence at done (save readback, submitted fields, …
Tom-R-Main Sep 29, 2026
ce1cf4f
M2 predicts a deterministic evidence floor under Jev (named effect ev…
Tom-R-Main Sep 29, 2026
c391f08
M2 held: a deterministic evidence floor under Jev (the named effect's…
Tom-R-Main Sep 29, 2026
f008342
Effect-evidence completion (M1/M2) is opt-in with FOOTWORK_COMPLETION…
Tom-R-Main Sep 29, 2026
c60a241
M3 predicts state signatures, tried-action refusal, bounded recovery,…
Tom-R-Main Sep 29, 2026
c2f10a7
M3 build: bounded recovery in the model loop, opt-in (state signature…
Tom-R-Main Sep 29, 2026
40592a9
M3 failed: recovery never engaged (any confirmed receipt counted as a…
Tom-R-Main Sep 29, 2026
382f936
M4 predicts progress counted from new states, values and effect recor…
Tom-R-Main Sep 29, 2026
861249a
M4: progress counts a new state, a new carried value or a new saved/s…
Tom-R-Main Sep 29, 2026
cec8bf4
M4 failed narrowly: X1 ended before the budget in 5 of 6 (M3: 3 of 6)…
Tom-R-Main Sep 29, 2026
805db9e
Repeating a recorded submission (loading its result address, or press…
Tom-R-Main Sep 29, 2026
305b29b
Fixture event logs belong to one run: serve refuses a directory that …
Tom-R-Main Sep 29, 2026
ef244bd
Challenge brief for the completion and recovery candidate (m-candidat…
Tom-R-Main Sep 29, 2026
c3b7c5a
M6 predicts the X3 uncertainty is a bare answer's missing link to the…
Tom-R-Main Sep 29, 2026
1b1753a
M6 failed: stating the answer's source and exclusion raises the verif…
Tom-R-Main Sep 29, 2026
b583168
Add independent sealed-set validation and end-state oracles
Tom-R-Main Sep 29, 2026
978f827
Make sealed live grading reject false stops and corrupt images
Tom-R-Main Sep 29, 2026
337cac7
Seal evaluator inputs and retain each offline judgment before the nex…
Tom-R-Main Sep 29, 2026
0151445
Reject substitute outputs when grading unavailable tasks
Tom-R-Main Sep 29, 2026
5b60392
Grade supported native saves by exact destination bytes
Tom-R-Main Sep 29, 2026
8cf2e84
Seal independent completion and recovery challenge cases before first…
Tom-R-Main Sep 29, 2026
d98accc
Merge the independent challenge packet (Codex, codex/m-challenge-auth…
Tom-R-Main Sep 29, 2026
3118000
Independent challenge measured once on m-candidate-1: 0 of 18 negativ…
Tom-R-Main Sep 29, 2026
3a3e24c
Adjudicate M challenge stop and correct effect-failure diagnoses
Tom-R-Main Sep 29, 2026
5f40787
Document Responses placement and preregister role-separated Jev compa…
Tom-R-Main Sep 30, 2026
c81384f
Record corrected Decisions API scope before any paid measurement
Tom-R-Main Sep 30, 2026
1b8b292
Defer Decisions comparison until release and preserve unused prototype
Tom-R-Main Sep 30, 2026
cb2a814
Record browser inspection portability prediction before verification
Tom-R-Main Oct 1, 2026
80e0366
Record continuous inspection prediction before verification
Tom-R-Main Oct 1, 2026
bbe921e
Predict offline inspection comparison behavior
Tom-R-Main Oct 1, 2026
4ab92a7
Add sealed browser experiment comparator
Tom-R-Main Oct 1, 2026
5fdcc7c
Document inspection transport continuity gate
Tom-R-Main Oct 1, 2026
9a2651c
Record live inspection limits and route capture prediction
Tom-R-Main Oct 1, 2026
2aa7d2f
Predict browser capture coverage diagnostics
Tom-R-Main Oct 1, 2026
242e609
Add sealed capture coverage diagnostics
Tom-R-Main Oct 1, 2026
1b04088
Predict scoped CDP event buffer behavior
Tom-R-Main Oct 1, 2026
2d3c23d
Add scoped event ring for future CDP transport
Tom-R-Main Oct 1, 2026
fc852fe
Add durable scoped browser inspection utilities
Tom-R-Main Oct 1, 2026
a24ddbb
Predict metadata-only stream capture behavior
Tom-R-Main Oct 1, 2026
ef5ca3f
Add bounded metadata-only stream capture sidecar
Tom-R-Main Oct 1, 2026
91356db
Record protocol-envelope inspection prediction
Tom-R-Main Oct 1, 2026
49f4f24
Add privacy-minimized realtime envelope inspection
Tom-R-Main Oct 1, 2026
4b9098a
Predict GraphQL operation metadata extraction
Tom-R-Main Oct 1, 2026
0a2a0ec
Add scoped GraphQL operation metadata extraction
Tom-R-Main Oct 1, 2026
cba2941
Predict live multi-site inspection calibration
Tom-R-Main Oct 1, 2026
2943af8
Bridge disposable Playwright CDP sessions to inspection recorder
Tom-R-Main Oct 1, 2026
5d94b83
Add bounded public-site inspection calibration runner
Tom-R-Main Oct 1, 2026
93f2af8
Allow existing local Chromium for public calibration
Tom-R-Main Oct 1, 2026
720a932
Preserve envelope evidence when public workflow fails
Tom-R-Main Oct 1, 2026
8d8ba73
Wait for echo through the accessibility snapshot
Tom-R-Main Oct 1, 2026
de8ebbc
Predict URL sanitizer repair from live capture
Tom-R-Main Oct 1, 2026
e40be48
Redact embedded and mixed-token URLs in browser journals
Tom-R-Main Oct 1, 2026
c18b013
Predict private public-site flow capture before trial
Tom-R-Main Oct 1, 2026
85d7e6f
Calibrate private-config public leadgen flows
Tom-R-Main Oct 1, 2026
a01cd81
Predict public-flow capture and attribution improvements
Tom-R-Main Oct 1, 2026
ae4a8a2
Record public-flow reload and origin-class traffic
Tom-R-Main Oct 1, 2026
662b9e8
Predict cold-entry and evidence gate experiments
Tom-R-Main Oct 1, 2026
04d55d4
Capture cold entry and verify workflow evidence before publication
Tom-R-Main Oct 1, 2026
32bb08a
Record live capture limits and evidence-ledger outcome
Tom-R-Main Oct 1, 2026
fd5cf12
Predict safe recovery from transient browser-origin loss
Tom-R-Main Oct 1, 2026
e3b7b08
Recover paused browser polling after origin verification
Tom-R-Main Oct 1, 2026
618cad0
Register Decisions versus Jev development shadow comparison
Tom-R-Main Oct 8, 2026
f3fcb64
Document Decisions role boundaries and conservative fanout accounting
Tom-R-Main Oct 8, 2026
3c616c2
Add optional Decisions shadow transport and frozen paired replay harness
Tom-R-Main Oct 8, 2026
5962744
Correct notebook preflight timestamp from observed clock
Tom-R-Main Oct 8, 2026
6a9a67b
Record authenticated Decisions contract probe and input accounting
Tom-R-Main Oct 8, 2026
cea0685
Preserve incomplete D1 run and preregister bounded request diagnosis
Tom-R-Main Oct 8, 2026
a8c5b94
Capture bounded redacted Decisions errors for explicit request diagnosis
Tom-R-Main Oct 8, 2026
b02e72a
Adapt singleton Decisions choices and repair paired admission reporting
Tom-R-Main Oct 8, 2026
2919386
Preregister visual information ablation separate from text backend co…
Tom-R-Main Oct 8, 2026
064fd39
Record Decisions text comparison and unused-head refusal analysis
Tom-R-Main Oct 8, 2026
84f3fd5
Freeze paired visual information ablation before Decisions measurement
Tom-R-Main Oct 8, 2026
9c6f208
Record visual capability result and preserve Jev text placement
Tom-R-Main Oct 8, 2026
ca532bf
Ground Decisions placement in arc-cua boundaries and transfer limits
Tom-R-Main Oct 8, 2026
784f401
Register six-family visual pilot before implementation and calls
Tom-R-Main Oct 8, 2026
a359dff
Freeze oracle-free execution cadence and twenty-task inventory
Tom-R-Main Oct 8, 2026
bd1c8f2
Clarify scripted conformance versus actual deterministic refusal
Tom-R-Main Oct 8, 2026
5801ed8
Freeze visual proposal capture and guarded fixture execution harness
Tom-R-Main Oct 8, 2026
c465377
Freeze browser and native visual observations before paired judgments
Tom-R-Main Oct 8, 2026
a9e2223
Include all recorded capture phases in future visual latency estimates
Tom-R-Main Oct 8, 2026
f311c71
Record visual gains and failed target-grounding guardrail
Tom-R-Main Oct 8, 2026
9e3c41e
Translate Decisions experiments into a bounded Footwork product roadmap
Tom-R-Main Oct 8, 2026
f5a3485
Register target-grounding repair and private inspection before implem…
Tom-R-Main Oct 8, 2026
27294bf
Add read-only target-bound native inspection and review preview
Tom-R-Main Oct 8, 2026
9fd1575
Freeze matched target-grounding comparison before Decisions calls
Tom-R-Main Oct 8, 2026
5d67e88
Freeze target-grounding captures and native inspection qualification
Tom-R-Main Oct 8, 2026
b7f1137
Record inconclusive target-repair attribution and private inspection …
Tom-R-Main Oct 8, 2026
bd98fdb
Specify bounded visual checks and remediate escalation plan
Tom-R-Main Oct 8, 2026
9613204
Predict native advisory visual contract before implementation checks
Tom-R-Main Oct 8, 2026
82aef06
Add bounded native advisory visual checks and structured escalation
Tom-R-Main Oct 8, 2026
cbd7bf1
Record native visual advisory verification and qualification limits
Tom-R-Main Oct 8, 2026
943d534
Predict interrupted visual ledger boundary before review probes
Tom-R-Main Oct 9, 2026
49cfc37
Predict native visual capture deadline before delayed-driver probe
Tom-R-Main Oct 9, 2026
c088a2b
Fail closed across visual budgets observations and final handoffs
Tom-R-Main Oct 9, 2026
9148c2e
Reconcile visual result at receipt publication boundary
Tom-R-Main Oct 9, 2026
88325d1
Record visual boundary review and final native requalification
Tom-R-Main Oct 9, 2026
72c4c7a
Preregister independent visual qualification machinery and failure gates
Tom-R-Main Oct 9, 2026
4037830
Build offline visual qualification corpus scoring and measured timing…
Tom-R-Main Oct 9, 2026
92bc874
Record VQ1 CLI proof review remediation and qualification limits
Tom-R-Main Oct 9, 2026
b2a181f
Record H4 architecture decision and reference-backed build design
Tom-R-Main Oct 9, 2026
a31d88f
Preregister thin capability recovery and missing-judge predictions
Tom-R-Main Oct 9, 2026
91f72ad
Pause judged operator routes when required judgment is unavailable
Tom-R-Main Oct 9, 2026
d49b0fd
Build scoped four-tool MCP slice with durable append recovery
Tom-R-Main Oct 9, 2026
f8009e4
Record live-route exploratory check and owned fixture preparation
Tom-R-Main Oct 9, 2026
64ddfdb
Fix fixture SDK request and preserve cleanup after setup failure
Tom-R-Main Oct 9, 2026
41182a1
Predict TextEdit fixture sandbox behavior before opener comparison
Tom-R-Main Oct 9, 2026
39a3b93
Verify real fixture route and freeze bounded fresh-host trial runner
Tom-R-Main Oct 9, 2026
e339724
Record fresh Claude host acceptance and clarify operation-token usage
Tom-R-Main Oct 9, 2026
703ebd8
Record clean host acceptance and preregister real-route interruption
Tom-R-Main Oct 9, 2026
808d86f
Add bounded public-MCP interruption verifier with exact AX oracle
Tom-R-Main Oct 9, 2026
a6f4a70
Qualify real interruption recovery and close scoped capability slice
Tom-R-Main Oct 9, 2026
9026bb4
Preregister raw runtime qualification and C1 preparation
Tom-R-Main Oct 9, 2026
b9d7145
Predict transient AX readiness race before fixture correction
Tom-R-Main Oct 9, 2026
5e9a533
Record locked desktop prerequisite and predict fail-before-launch guard
Tom-R-Main Oct 9, 2026
020c596
Predict raw policy catalog narrowing before qualification
Tom-R-Main Oct 9, 2026
c547b97
Record raw catalog proof and predict arm-neutral restart relay
Tom-R-Main Oct 9, 2026
e00818b
Build pinned raw baseline and freeze C1 development harness
Tom-R-Main Oct 9, 2026
5e3d2d0
Predict raw screenshot framing limit before regression repair
Tom-R-Main Oct 9, 2026
1c97f94
Preserve large raw MCP replies with bounded transport frames
Tom-R-Main Oct 9, 2026
0fd8c88
Predict modern MCP recovery and fair candidate gating repairs
Tom-R-Main Oct 9, 2026
4f209be
Qualify dual-era MCP recovery and unbiased first-change gating
Tom-R-Main Oct 9, 2026
c7c418c
Freeze qualified C1 comparison before sixty measured sessions
Tom-R-Main Oct 9, 2026
98770ea
Record C1 comparison failures and bounded remediation plan
Tom-R-Main Oct 9, 2026
22c58bc
Predict capability text-contract and empty-field repairs before scena…
Tom-R-Main Oct 9, 2026
50948c6
Expose append separators and qualify exact writable native fields
Tom-R-Main Oct 10, 2026
87d0de2
Harden text qualification geometry and prerequisite failure evidence
Tom-R-Main Oct 10, 2026
4f1c5aa
Record live qualification and reference evidence for text repairs
Tom-R-Main Oct 10, 2026
7a11341
Preregister durable native restart reconciliation and counterexamples
Tom-R-Main Oct 10, 2026
6589ff1
Amend restart rules after Claude review; preregister detached AX probe
Tom-R-Main Oct 10, 2026
dcc0ed4
Verify detached AX feasibility and preserve restart baseline
Tom-R-Main Oct 10, 2026
3d48261
Record detached feasibility outcome before implementation
Tom-R-Main Oct 10, 2026
2a47557
Amend autosave identity and deadline rules before qualification
Tom-R-Main Oct 10, 2026
696a641
Record worker and caller deadline ordering before qualification
Tom-R-Main Oct 10, 2026
8a407f1
Reconcile native appends from durable independent execution receipts
Tom-R-Main Oct 10, 2026
320c3b0
Record invalid fixture placement before fresh restart qualification
Tom-R-Main Oct 10, 2026
c9ba496
Qualify restart recovery with native interruptions and Claude sign-off
Tom-R-Main Oct 10, 2026
8312cd3
Predict combined PR completion and native dispatch remediations
Tom-R-Main Oct 10, 2026
537d037
Predict fail-closed submission evidence correction before regression …
Tom-R-Main Oct 10, 2026
9b980df
Predict ordered save evidence and remapped field correction
Tom-R-Main Oct 10, 2026
daa0846
Predict final native resource identity guard before input tests
Tom-R-Main Oct 10, 2026
c0c315d
Preserve exact native append and resource preconditions through live …
Tom-R-Main Oct 10, 2026
9961eda
Keep completion evidence current and literal without inferred submiss…
Tom-R-Main Oct 10, 2026
c4d4953
Preregister native requalification after combined PR fixes
Tom-R-Main Oct 10, 2026
3064be9
Predict atomic restart harness boundary publication before requalific…
Tom-R-Main Oct 10, 2026
4fb9a95
Publish complete restart markers and add real native freshness guard …
Tom-R-Main Oct 10, 2026
3a85baa
Predict delayed AX geometry publication before guard harness repair
Tom-R-Main Oct 10, 2026
023ec2f
Wait for observed field geometry within a bounded native trial deadline
Tom-R-Main Oct 10, 2026
678443e
Record combined review and fresh native restart and dispatch qualific…
Tom-R-Main Oct 10, 2026
e107417
Predict browser artifact redaction and cross-platform CI remediations
Tom-R-Main Oct 10, 2026
95be91f
Redact short URL credentials and allowlist browser inventory counts i…
Tom-R-Main Oct 10, 2026
33fdf1f
Validate frozen visual corpus hashes independently of host rendering
Tom-R-Main Oct 10, 2026
14fb64f
Keep portable redaction active and isolate macOS-only evaluation probes
Tom-R-Main Oct 10, 2026
9306464
Record reviewed CI and browser artifact remediations before fresh Lin…
Tom-R-Main Oct 10, 2026
6dd8164
Predict deterministic deadline test boundary synchronization before r…
Tom-R-Main Oct 10, 2026
e95a852
Trigger deadline tests at observed input boundaries rather than host-…
Tom-R-Main Oct 10, 2026
fd62f6c
Close remediation hypotheses and hand final reviewed source to Linux CI
Tom-R-Main Oct 10, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
3 changes: 3 additions & 0 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,9 @@ jobs:
run: uv sync
- name: Lint
run: uv run ruff check python evals tests scripts
- name: Browser inspection tests (no dependencies)
working-directory: .
run: node --test tools/browser-inspection/*.test.mjs tools/inspection-experiments/*.test.mjs tools/inspection-transport/*.test.mjs
- name: Rust checks
run: |
cargo fmt --all --check
Expand Down
6 changes: 6 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -13,3 +13,9 @@
*.pyc
.DS_Store
/external/

# Local capability trial scratch; qualification summaries live in results/.
/jevdual/output/

# Owned restart fixture/profile scratch; sanitized qualification lives beside it.
/jevdual/results/restart-reconciliation-20261010/fixture/
17 changes: 17 additions & 0 deletions AGENTS.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
# Working in Footwork (for agents and people)

Read `CONTRIBUTING.md` first; its rules apply to every change. Two habits matter most for an agent
working here across sessions:

- **Keep the engineering notebook.** Before a substantive test or harness change, write a
`prediction` in `jevdual/docs/notebook/<date>-<package>.md`: hypothesis, test, what it predicts,
and an outcome that would count against it. Append an `update` when evidence changes the diagnosis
(resolving a prediction as held, failed or inconclusive), and a `summary` when a package closes or is
handed off. Refer to traces, receipts, tests and commits; never copy them. Skip routine steps.
Format and rules: `jevdual/docs/notebook/README.md`; check with
`uv run python -m evals.notebook docs/notebook --check` from `jevdual/`.
- **Commit the prediction before the test that resolves it.** A prediction committed with its own
result cannot be told apart from one written afterwards.

The notebook is also where a session picks up after its context is lost: read the open predictions
and the last update of the current package before doing anything else.
1 change: 1 addition & 0 deletions CLAUDE.md
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
@AGENTS.md
3 changes: 3 additions & 0 deletions CONTRIBUTING.md
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,9 @@ Footwork is research code with an evaluation discipline. The discipline is the p
- **Secrets never appear in the repo.** Task secrets are fixture demo logins scoped to their origin;
`scripts/redact_results.py` runs on every run directory before it is committed; traces and `run.log`
are git-ignored.
- **Engineering keeps a notebook.** Debugging and harness changes between experiments record a
prediction before the test and an update when the evidence changes it, in
`jevdual/docs/notebook/` (format in its README; `tests/test_notebook.py` checks it).
- **A bug found by driving becomes a scenario first.** `jevdual/tests/test_session_scenarios.py` runs the
real `footwork` commands against a simulated Mac (`tests/fixtures/native_world.py`); reproduce the bug
there, see it fail, then fix the harness, not the scenario.
Expand Down
72 changes: 56 additions & 16 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,11 @@ The Python package is `jevdual` (in [`jevdual/`](jevdual/)); Footwork is the pro
from a run directory under [`jevdual/results/`](jevdual/results/), and every experiment was pre-registered in
[`jevdual/docs/experiments/`](jevdual/docs/experiments/) before it ran.

Optional [browser inspection utilities](tools/browser-inspection/README.md) collect redacted,
timestamped evidence through an existing tab/CDP adapter. They are dependency-free ESM helpers,
separate from the Python driver and verification gates. Their contract is tested offline; live
capture fidelity must be calibrated on the selected browser.

## Drive it

```sh
Expand All @@ -28,13 +33,35 @@ footwork done "624" # the verifier judges the claim against the win
```

Also `do type | append | key | hotkey | menu | scroll | enter`, `status`, and `footwork run` for the whole
loop with Jev as System 1 and an LLM as System 2 on escalation. Nothing dispatches on an id from an older
loop: by default the measured **guarded** arm (an LLM decides every step behind the guard), or `--arm dual`
for Jev as System 1 with the LLM on escalation. Nothing dispatches on an id from an older
observation; text comes from the task or from named secrets (`{NAME}` read from `$FOOTWORK_SECRET_NAME`,
never printed); `--authorize "<label>"` names the one change the operator approved. Sessions default to
`background_only`: the person's front app, pointer and keyboard are left alone (`--mode` grants more).
`start --browser` drives footwork's own Chrome profile through the Driver's DevTools route instead of the
accessibility tree. Needs macOS with Accessibility granted to the process that runs it, and a TypeSafe key.

For private visual inspection, use a numeric ID from the current native observation:

```sh
footwork inspect-target 12 --operation click --postcondition "The selected editor enters crop mode"
```

This records a fresh window PNG, target-bound manifest and static HTML preview under the session's
`inspection/` directory. The preview outlines the offered target over the unchanged original image
and displays the operation and required postcondition. It makes no model calls, executes no action
and does not verify the stated effect.
Sessions that have handled secrets withhold screenshots before capture. Missing or unqualified
capture geometry, truncated observations and changed target identities refuse inspection.
Native AX projections may be partial: the manifest records that limit, and label-based inspection
requires a complete observation. Browser inspection through this command is not yet qualified.

`footwork visual-check --request request.json --session SESSION` prepares one native advisory
document/reference or crop/subject check. It records the original capture and a structured receipt.
Explicit `--provider decisions --disclose` enables one bounded provider request using an existing
key; the default contacts no provider. Visual answers grant no action or completion authority.
See [visual check inputs, limits and escalation](jevdual/docs/visual-checks.md).

Measured this way on 2026-09-25 ([`docs/plans/legible-harness.md`](jevdual/docs/plans/legible-harness.md)):
Calculator 48 × 13 in 30 s (System 1 proposed every step at p ≥ 0.94, verifier accept 0.98); TextEdit
append-and-save in 9 s, the save confirmed by the window title losing its edited mark.
Expand Down Expand Up @@ -68,33 +95,42 @@ three same-code runs ([`results/q9-live-dev.md`](jevdual/results/q9-live-dev.md)

What that says, in order of how sure we are:

- **The guard is the product.** Zero false completions on every split and run, on these predicates, at
about two Jev calls per task, and at the LLM's own cost. The LLM alone deletes the account when asked to
- **The guard is the product.** Zero false completions on the guarded arm on every split and run, on these
predicates, at about two Jev calls per task, and at the LLM's own cost. The guard is not infallible: in
the Q8 run the dual arm clicked an authorized Delete twice and the verifier accepted it
([`results/q8-consent.md`](jevdual/results/q8-consent.md), the one false completion). The LLM alone deletes the account when asked to
reach a page, and its own judge marks that a success.
- **Jev acting saves driver work, not money yet.** Dual makes 23 to 29% fewer driver requests than the
guarded arm across two same-night samples and runs its own steps at a median 1.4 s against 15.7 s for an
LLM step, but pays for that in Jev volume; task wall time between the arms is not distinguishable on
live sites, and dual matches stock's cost only on the fixture heldout so far.
- **System 2 delegating bounded subgoals to Jev did not pay** in three measurements
([`Q9`](jevdual/docs/experiments/Q9.md)): more cost, no more completions. The executor reached 5 of 30
assignments; an audit then found software defects behind most of those failures, fixed in the tree and
not yet re-measured. Delegation stays available as a tool, off by default.
assignments; an audit then found software defects behind most of those failures, and the repaired build
was measured again ([`results/q9e-delegate-fixed.md`](jevdual/results/q9e-delegate-fixed.md)): 36
verified against 41 for the same-day guarded arm, $0.644 against $0.424, 3 of 27 assignments reached.
Delegation stays available as a tool, off by default.
- **Declaring the contract to the driver did not pay** ([`Q11`](jevdual/docs/experiments/Q11.md)): model
requests rose 21% per task with completions unchanged. Receipts for every action
([`Q12`](jevdual/docs/experiments/Q12.md)) are the next test and are running now.
requests rose 21% per task with completions unchanged. Neither did receipts for every action
([`Q12`](jevdual/docs/experiments/Q12.md), [`results/q12-live-dev.md`](jevdual/results/q12-live-dev.md)):
repeated no-op clicks fell 18% but requests per unit of progress did not move (−0.02 [−0.14, +0.10], over
the 53 tasks with some progress in both arms), and verified passes fell by 4 pooled. Receipts are kept as
an honesty measure, not as a saving; the input defect they exposed is fixed first.

### Native apps and a shared machine

- **The arbiter's calibration transfers from DOM menus to accessibility-tree menus**
- **The arbiter's target confidence ranks wrong System 1 steps on accessibility-tree menus**
([`Q10`](jevdual/docs/experiments/Q10.md), [`results/q10-native-dev.md`](jevdual/results/q10-native-dev.md)):
target-confidence AUROC for a wrong System 1 step is 0.90 [0.85, 0.94] on Calculator and TextEdit, against
0.80 on the web. After verifier and task fixes, dual is within one task of guarded (13 against 15 of 18,
AUROC 0.90 [0.85, 0.94] on Calculator and TextEdit, against 0.80 on the web. That is a ranking result on
two apps, whose agreed wrong steps come from two tasks; it is not a calibrated probability, and it does
not yet say anything about unfamiliar apps. After verifier and task fixes, dual is within one task of guarded (13 against 15 of 18,
[`results/q10b-native-dev.md`](jevdual/results/q10b-native-dev.md)); the gap is one repeated-sequence task.
Native stays experimental.
- **A session runs beside a person without taking their work, input or focus**
([`Q15`](jevdual/docs/experiments/Q15.md)): 15 of 15 coexistence cases passed every check (another app,
another document of the same process, a foreground step beside an idle or moving person, a conflicting
edit). `background_only` is the default; `foreground_permitted` holds the front for 36 to 65 ms and only
edit). In none of three attempts did the person's move overlap a foreground step, so that race is covered
by a unit test, not a live one. `background_only` is the default; `foreground_permitted` holds the front for 36 to 65 ms and only
after 3 s of idle.

## How it works
Expand Down Expand Up @@ -187,11 +223,15 @@ verifier and no S1 policy; see `evals/runner.py` (`guarded` arm) for the exact w

Research code with a working product core. The guard and the reactive dual loop are measured on the
browser; the native arm and the operator session are measured on a small native split and a coexistence
suite and stay experimental. Delegation and evidence selection are off by default. Open, in order
([`plan`](jevdual/docs/plans/legible-harness.md)): receipts (Q12, running), a narrower contract declaration
(Q11b), native readback and the repeated-sequence rule, one contract across browser and native (Q13), and
whether the browser should go through the accessibility tree too (Q14). Calibration claims wait on the human
audit sheets. Read [`CONTRIBUTING.md`](CONTRIBUTING.md) before opening a change.
suite and stay experimental. Delegation and evidence selection are off by default. The
[status audit of 2026-09-26](jevdual/results/status-audit-20260926/README.md) reproduced five contract
breaks offline (operator sessions following the active browser tab, field receipts that overstate, a secret
in a receipt, the browser path continuing when its destructive judgment fails, short documents replaced
unpaused). Open, in order ([`plan`](jevdual/docs/plans/next-work.md)): those fixes, authorization parity
across routes, the input loss after navigation, then receipts again (Q12b), verifier evidence and recovery,
a narrower declaration (Q11b), and one contract across browser and native (Q13). Whether the browser should
go through the accessibility tree too (Q14) has a working route but no comparison yet. Calibration claims
wait on the human audit sheets. Read [`CONTRIBUTING.md`](CONTRIBUTING.md) before opening a change.

## Credits

Expand Down
1 change: 1 addition & 0 deletions jevdual/.gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -20,3 +20,4 @@ results/annotation/packets/

# local smoke runs (e.g. scripts/q15_coexistence.py); results that back a claim go under results/
runs/
results/**/screenshots/
13 changes: 7 additions & 6 deletions jevdual/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -26,13 +26,14 @@ below, not rerun since):
| stock browser-use (Muse Spark 1.3 Contributor) | 21/23 | 2 | 65 | 0 | 0.098 | 1,578 |
| dual (Jev + Muse) | 23/23 | 0 (2 paused) | 55 | 189 | 0.122 | 1,412 |

Heldout split, 10 local tasks, settings frozen, rerun once on adoption of the verification changes
(`results/heldout-adopt.md`):
Heldout split, 10 local tasks, settings frozen, rerun once on each adoption; the latest is the strict
verifier's (`results/heldout-adopt-20260927.md`; the previous, `results/heldout-adopt.md`):

| arm | pass | false done | LLM calls | Jev calls | est. cost USD | wall s |
|---|---|---|---|---|---|---|
| stock | 9/10 | 1 | 33 | 0 | 0.049 | 708 |
| dual | 10/10 | 0 (1 paused) | 24 | 76 | 0.049 | 522 |
| stock | 9/10 | 1 | 38 | 0 | 0.055 | 489 |
| dual | 10/10 | 0 (1 paused) | 21 | 61 | 0.045 | 380 |
| guarded | 10/10 | 0 (1 paused) | 37 | 28 | 0.055 | 476 |

Live split, 55 tasks on public and practice sites, three arms after the verification changes
(`results/q6-live-paired.md`):
Expand All @@ -55,8 +56,8 @@ remains the default and delegation a tool.

What the splits say: Jev alone handles navigation, search, pagination, modals and login in two to
five steps and cannot read or answer; the LLM alone reads and answers and will click "Delete
account" when asked to reach a page, and its own judge accepts that as success; the pair is the only
arm with zero false completions on every split. On the fixture heldout the pair now matches stock's
account" when asked to reach a page, and its own judge accepts that as success; the guard kept false
completions at zero on every split in that comparison (a later Q8 dual run had one, `results/q8-consent.md`). On the fixture heldout the pair now matches stock's
cost with 27% fewer driver steps and 26% less wall time. On live sites it uses 26% fewer driver steps than
stock at 1.32× its estimated cost, with the whole gap being Jev call volume (458 calls), and wall time
not distinguishable. Steps run by Jev take a median 1.4 s against 15.7 s for a Muse step; that is a per-step figure, and task
Expand Down
Loading
Loading