feat(ats): freeze the agent-browser-ats-order/1 browser order contract - #164
Merged
Merged
Conversation
P0 of the Agent Browser order path
(docs/specs/2026-09-23-ats-agent-browser-orders.md): the closed wire between
ATSv2's future browser order-ticket port and a qualified site adapter beside
the user's signed-in Agent Browser session. No broker picker and no broker
API are prerequisites; unsupported sites stay observation-only.
Ten semantic operations. No caller-supplied selector, coordinate, URL,
script or free text is representable, and tickers are equity-shaped so an
all-caps URL cannot pass as one. Results carry no page content, and the
masked account label comes from a closed character set. ATS simulated paper
can never reach a browser and a paper binding can never be live capital. A
commit is never a fill. Ambiguous and duplicate_commit results always require
reconciliation from site history. Every result must answer exactly its call,
session generation, principal and pinned adapter digest, observed no earlier
than the call less 5 s of clock skew.
- src/core/ats_contracts/browser_order{,_result,_gate,_values}.ts:
validators, the result gate and derivations; no I/O
- test/fixtures/ats_browser_order_golden.json: 189 single-cause vectors
(28 exchanges, 69 call rejects, 58 result rejects, 34 gate mismatches),
each naming the exact refusal it must trigger; stored as pure ASCII
- test/fixtures/ats_browser_order_{wire,gate,verify}.py: an independent
Python mirror with identical digests and refusal messages, emulating V8
Date.parse; run in CI on Linux and Windows
- docs: CONTRACTS.md section 4, and the spec with the session, ownership and
capability diagram, the deployment decision and the supersession of
API-only language; section 3's stale profile name corrected
Independent TypeScript, security and Python-parity reviews found a
fullwidth-digit label bypass, a URL-shaped ticker, a replay gap and a
year-0000 divergence; all are fixed and pinned by vectors. Each of 24 guards
was removed in turn and every suite failed for its stated reason.
Local: full suite 2717 pass, 13 skipped, 1 fail (win32 Job Object warden
ping timeout in device_runtime_containment, unrelated and green on main CI
windows-latest); ATS suites 88/88 after the final module split; Python
mirrors 189 + 18 checks; verify:production ok at 4,844,612 bytes.
No order tool is registered and nothing here authorizes an order.
AetherAI3
added a commit
that referenced
this pull request
Sep 23, 2026
… mission G7 and G8 described provider sandbox and live capital as reachable only through a broker's documented API and ruled out any browser route. For the Agent Browser mission — a trading site the user signs in to, driven by a qualified site adapter — that routing is superseded by docs/specs/2026-09-23-ats-agent-browser-orders.md and the frozen agent-browser-ats-order/1 contract (#164). Adds a supersession note under the header, lets G7 qualify either the API route or the browser route (acceptance by the site's own order history), and narrows G8's prohibition to generic browser clicks, raw VNC, raw shell, MCP pass-through and free-text endpoints. Nothing else changes; everything that forbids generic browser control or screenshot evidence still stands.
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
Freezes
agent-browser-ats-order/1, the typed wire through which ATSv2 will check and execute a bounded order on the user's own signed-in trading site in Agent Browser — no broker picker, no broker API. P0 of the Agent Browser order path: it authorizes no order and registers no tool. ATSv2 lifts the Python mirror and pins the fixture in its companion PR, AetherAI3/ATSv2#444; #162's API-only live routing is superseded for this mission (spec §7).Key Changes
Verification
verify:productionok at 4,844,612 / 5,000,000 bytes.Risk / Follow-ups