Commit Graph
82 Commits
Author SHA1 Message Date
OrcaWinandOrcaWin a9a0e8cd21 test: remove shallow catalog, browser and launch checks (#41258)
* test: remove routine native and catalog suites

* test: remove shallow browser, bridge and CLI checks

---------

Co-authored-by: OrcaWin <293788423+OrcaWin@users.noreply.github.com>
2026-11-11 14:44:15 -08:00
OrcaWinandOrcaWin 9576e55773 test: remove 1,144 low-value declarations (#41177)
Co-authored-by: OrcaWin <293788423+OrcaWin@users.noreply.github.com>
2026-11-11 09:11:06 -08:00
Jinjing 6df5a57077 Guide agent installation and sign-in from chat (#40208)
* wip

* add treanslation

* wip

* fix the renderer import

* fix static analysis

* wip

* wip
2026-11-09 23:33:19 +00:00
Neil e9f4df2c0f refactor: organize rate-limit providers and remove forwarding modules (#40116)
* refactor: group rate-limit providers under concrete owners

* test: preserve mixed Claude account-switch regression

* refactor: consolidate Antigravity service contract import
2026-11-08 20:29:13 -08:00
OrcaWinandOrcaWin d714d577bf test: remove 45 low-value suites and redundant cases (#40072)
* test: remove low-value synthetic and duplicated cases

* test: remove low-value IPC and renderer cases

* test: remove marginal mobile web build helper cases

* test: remove marginal browser coverage

* test: remove low-value mobile coverage

* test: remove fixture inventories and diagnostic-only cases

* test: remove low-value shared test suites and matrices

* test: remove internal-work and mock-only coverage

* test: remove prose passthrough and scan-count assertions

* test: remove low-value renderer suites and copy counters

---------

Co-authored-by: OrcaWin <293788423+OrcaWin@users.noreply.github.com>
2026-11-08 19:50:37 -08:00
Brennan Benson a24dfb936b Show installed skills in Antigravity Chat (#40027)
* fix(antigravity): show installed skills in Antigravity Chat

Orca's managed Antigravity server runs with its own GEMINI_HOME so its
sign-in stays separate, which also hid the person's user-wide skills.
Before each launch, link the chat home's config/skills and
antigravity-cli/skills to the ones in ~/.gemini, as the common pattern
does. Empty placeholder folders are replaced, folders with content are
kept, and a failure only logs.

Tracked in #39528.

* fix(antigravity): link a chat home's skills one launch at a time

Two chats starting together could both find the empty placeholder; one
removed it while the other failed, and a harness recreating it left the
chat without skills. Launches now link a chat home one at a time, retry
once when the placeholder reappears, and leave links alone when the
skills folder is unreadable rather than missing.

* test(antigravity): make the dangling skill link fixture portable to Windows
2026-11-08 16:21:49 -08:00
Neil b5e38ad9c6 refactor: organize agent hook installation and server owners (#39969)
* refactor: organize agent hook installation and server owners

* refactor: align hook mock registries and packaged entries
2026-11-08 13:23:03 -08:00
Neil a964c9e0b5 refactor(acp): group transport, session, launch, and timeline owners (#39897) 2026-11-08 08:42:10 -08:00
WenhaoandNeil 448aaadde6 fix(antigravity): detect Orca Chat sign-in via antigravity-acp/acp_token.json (#39398)
agy-acp-server 1.4.1 keeps the personal sign-in at
<GEMINI_HOME>/antigravity-acp/acp_token.json; nothing it writes ends in
oauth-token, so a signed-in Chat read as signed out and new chats could
move to the host's ~/.gemini account.

Fixes #39395

Co-authored-by: Neil <neil@stably.ai>
2026-11-08 03:45:48 -08:00
Neil 83f8e6340d refactor(shared): organize file operations and storage owners (#39746) 2026-11-07 22:58:35 -08:00
Neil 3a0e9a27d0 refactor: organize backend runtime by defining owner (#39625)
* refactor(main): organize runtime implementation owners

* test: retire wall-clock CLI title recovery case

* refactor: route new folder mutation to runtime store owner

* test: import folder mutation store contract from its owner
2026-11-07 22:24:34 -08:00
OrcaWinandOrcaWin e4a479ceec test: remove 282 low-value tests (#39632)
Co-authored-by: OrcaWin <293788423+OrcaWin@users.noreply.github.com>
2026-11-07 16:51:15 -08:00
OrcaWinandOrcaWin cc6900fc0b test: remove 193 low-value tests (#39506)
Co-authored-by: OrcaWin <293788423+OrcaWin@users.noreply.github.com>
2026-11-07 06:20:37 -08:00
OrcaWinandOrcaWin cecfa9865d test: remove 158 low-value tests (#39483)
Co-authored-by: OrcaWin <293788423+OrcaWin@users.noreply.github.com>
2026-11-07 04:18:13 -08:00
Neil 09722a6cf2 feat(antigravity): run Full access chats on the host's agy with --dangerously-skip-permissions (#39471)
agy has no Full access session mode, so Full access chats always fell back to
Orca's managed runtime, which kept most people off the host's agy (and off
Intel Macs, where only the host can run it). agy 1.5.2+ `agy acp` accepts
--dangerously-skip-permissions, which approves tool requests but not plans.

Host chats now launch with that flag only in Full access, in agy's default
mode. Switching permission mid-chat already restarts the ACP process and
resumes the session, so the flag follows the chat's mode. The flag never
approves plans, and Orca still leaves agy's requests to the person, so plan
approvals keep surfacing.

The cached readiness check launches with the flag, so a build that rejects it
keeps chats on Orca's runtime without an extra spawn; such a binary is not
checked again until it changes. Because ask and Full access both run agy's
default mode, the reported mode is read per launch, so a Full access chat
does not show as Ask.

Refs #39006, #33188
2026-11-07 03:58:51 -08:00
NeilandJinwoo-H e7b0e4029e fix(antigravity): say why a downloaded chat runtime failed its start check (#39456)
The managed-runtime install message now names the observed cause after the
existing headline: a timeout, an exit code with a redacted stderr excerpt, or
the version the server answered as. The host agy check that shares the
initialize helper is unchanged.

Takes over #34167 by @Jinwoo-H (away), ported onto main after #39006.

Co-authored-by: Jinwoo-H <73622457+Jinwoo-H@users.noreply.github.com>
2026-11-07 03:17:56 -08:00
Neil b1221ed985 fix(antigravity): pick the host's agy only when its sign-in serves sessions (#39452)
A keychain item for agy does not prove agy can sign in silently: agy acp then
answers every session request with "Authentication required", and Orca never
authenticates the host (oauth-personal opens a browser). The host check now
also lists sessions after initialize (which writes no conversation, unlike
session/new), so a signed-out agy keeps new chats on Orca's runtime. Any
answer except an incompatible binary is rechecked after 5 minutes so a lapsed
or restored sign-in is noticed. agy settings that name a modelProvider select
API-key auth, whose key host launches drop, so they keep chats off the host.

Refs #39006
2026-11-07 02:26:11 -08:00
OrcaWinandOrcaWin 95fadd01ba test: remove 321 low-value main and shared tests (#39429)
Co-authored-by: OrcaWin <293788423+OrcaWin@users.noreply.github.com>
2026-11-07 01:37:39 -08:00
Neil e0019dc20c fix(antigravity): keep Gemini Enterprise chats off the host's agy (#39392)
* fix(antigravity): keep Gemini Enterprise chats off the host's agy

A saved Chat account type other than a personal Google account (or a
malformed or still-saving one) now keeps new Antigravity chats on Orca's
managed runtime, whose sign-in honors it. Before, Enterprise users who had
not yet signed in to Orca's Chat were silently pinned to the host agy's
personal account. The check reads the execution host's own saved settings,
and the health snapshot refreshes when the setting changes.

Refs #39006, #38737

* test(antigravity): drop the settings cast
2026-11-07 00:42:48 -08:00
OrcaWinandOrcaWin 8004bfd425 test: remove 364 low-value main, renderer and shared tests (#39365)
Co-authored-by: OrcaWin <293788423+OrcaWin@users.noreply.github.com>
2026-11-07 00:13:23 -08:00
Neil 111bedc290 feat(antigravity): run Chat on the host's agy acp when compatible (#39006)
* feat(antigravity): run Chat on the host's agy acp when compatible

New Antigravity chats prefer a compatible host-local `agy acp` (initialize
must answer as "Antigravity ACP Server" >= 1.5.2, protocol 1, loadSession and
session/resume) and fall back to Orca's managed runtime otherwise. The chat's
account home pins its backend, so resume and auth failures never switch it.
Managed chats and their <userData>/antigravity-chat sign-in are unchanged.

Refs #38833, STA-14062

* test(acp): launch an attached host rig with its spec

* fix(antigravity): keep Orca's Chat sign-in, back off a hung agy, and never downgrade permissions

The host's agy takes a new chat only when nobody is signed in to Orca's own
Chat and agy has its own credential. A failed check waits 5 minutes before
retrying (5 s timeout). Full-access chats stay on Orca's runtime, and a host
chat refuses a permission mode agy lacks instead of asking.

* fix(antigravity): check agy's sign-in without a keychain prompt, ignore inherited API keys, allow own mode

agy falls back to an inherited GEMINI_API_KEY, which its models reject, so
host chats drop it. The macOS presence check reads only the keychain item's
attributes. Chats in agents' own permission mode may use the host's agy.

* fix(native-chat): show Orca's install card only for chats on the managed runtime

The status summary marks chats pinned to a host program (hostProgram), so a
chat on the host's agy is no longer blocked when Orca's runtime is missing.

* fix(mobile): show host agy sign-in copy for Antigravity chats

The desktop host now reports antigravitySystemNotSignedIn when a chat on the
host's agy is signed out; give the phone the same copy so its failure table
stays complete.
2026-11-06 23:44:54 -08:00
Brennan Benson 92590de7ea Allow Gemini Enterprise sign-in for Antigravity Chat (#38737)
* Support Gemini Enterprise authentication for Antigravity Chat

* Keep Antigravity account settings current across clients

* Type the mutable account snapshot fixture

* Keep account settings readable during Antigravity sign-in

* Use standard account form controls and localized placeholders

* Refresh Antigravity account settings after host reconnect

* Annotate the account form fixture without a cast

* Keep Antigravity auth settings at the ACP boundary

* Exercise host settings in the Enterprise sign-in regression

* Save visible Antigravity account settings before sign-in

* Remove obsolete account Apply copy and correct renderer test types

* Put Antigravity sign-in choices before the action

* Keep unchanged account fields editable on blur

* Preserve Antigravity sign-in status beside account choices

* Fix sign-in status predicate type narrowing

* Reject unconfirmed Antigravity account settings

* Show a shared Antigravity account failure once

* Type the Antigravity publication candidate

* Pair Antigravity settings failures with meaningful recovery

* Register account failure copy and refresh the schema catalog

* Keep the latest Antigravity save outcome ahead of delayed reads

* Type the retained account normalization fixture directly

* Keep RPC recovery coverage within its project boundary

* Keep Antigravity settings recovery in the Sign in action

* Keep unavailable Antigravity choices out of the recovery form

* Keep Antigravity settings reads stable across renders

* Retain the ACP task fixture deletion option type

* Hide unavailable Antigravity sign-in choices after a load failure
2026-11-06 14:36:37 -08:00
Neil a20e577dc9 feat(antigravity): manage accounts in the selected WSL distro (#39007)
Antigravity Accounts rejected a WSL account location outright. agy inside
WSL keeps its login in its file store (~/.gemini/antigravity-cli/
antigravity-oauth-token; it detects WSL the same way
isAntigravityFileStorageHost does), so save/select/remove now work there:

- A WSL credential backend reads and writes that file through runWslProcess
  in the selected distro (default resolved via resolveWslDefaultDistro). It
  checks the distro is running before every guest command and never starts a
  stopped one. Writes are a compare-and-swap inside the guest (sha256 of the
  expected file), go through a private temp file and rename, and pass the
  credential on stdin rather than the command line.
- runWslProcess accepts stdin input for argv-delivered commands.
- Each distro gets its own encrypted vault, so accounts never cross distros
  or the Windows host.
- Accounts "Refresh usage" is enabled for WSL now that usage reads the
  selected runtime (#38985), and rejects a reading tagged with another
  runtime's provenance.

Fixes #25847
Linear: STA-9624
2026-11-06 12:54:20 -08:00
Neil 0314da7ed8 refactor(main): group RPC and orchestration modules by owner (#38813) 2026-11-06 08:21:33 -08:00
Neil 1c950baf33 refactor(main): group session lifecycle and journal modules by owner (#38638)
* refactor: group structured session modules by owner

* test: retire status history work-count oracle suite

* refactor(main): organize journal storage and projection owners

* Consolidate restart recovery fixture imports

* Consolidate concrete session option model imports
2026-11-06 06:00:08 -08:00
Neil 6316943a6e feat(antigravity): report last-known quota for every saved account (#39005)
* feat(antigravity): report last-known quota for every saved account

agy has one shared login, so Orca never switches it to read another
account. Each successful usage read is now verified against the native
login before and after the fetch, attributed to the matching saved
account, and kept in the vault per runtime with its original read time.
A login change mid-read discards the reading. Settings, the status bar
usage popover, and orca account list --json show each saved account's
last reading, or unknown when it was never read.

Fixes #31664
STA-11623

* chore(antigravity): add saved-account quota copy and status bar fixture

* fix(antigravity): clear the sign-in hold when agy signs in again to the same account

Comparing logins by Google subject meant a fresh sign-in to the same
account never reported a credential change, so the meter stayed on
"Sign in with agy". A new refresh token now counts as a change; agy's own
token refresh keeps the refresh token and still doesn't.

* test(antigravity): attribute a WSL runtime's reading to that runtime's saved accounts
2026-11-06 05:04:34 -08:00
Neil 95c6a04133 fix(antigravity): switch agy accounts through the Linux Secret Service keyring (#38996)
* fix(antigravity): switch agy accounts through the Linux Secret Service keyring

agy stores its Linux login with go-keyring's Secret Service provider
(service=gemini, username=antigravity, login collection or default alias)
and falls back to its credential file without a session bus, in containers,
SSH and WSL. Add a secret-tool/gdbus adapter that mirrors that collection
choice, refuses locked keyrings with a clear error, and keep the file store
for headless hosts.

Fixes #32818 (STA-11911)

* test(antigravity): avoid casts in Linux keyring adapter test
2026-11-06 03:31:58 -08:00
18e99273d7 fix(acp): keep the ACP run temp folder short enough for unix sockets (#38968)
An ACP agent's TMPDIR sat inside the data folder. On macOS that path made
a socket such as datacloud-mcp-dataAgentKit-antigravityide.sock 131 bytes
long, over the 103-byte limit, so child programs could not bind it.

When a socket under the data-folder root would not fit, use a short
per-user folder in /tmp (mode 0700, owner checked via ensureOwnedPrivateDir,
keyed by a hash of the data root so Orca copies never wipe each other), and
clear the old data root once. Roots that fit, and Windows, keep the current
behavior.

Ported from #33948 onto current main (acp-private-temp now uses
launchPreparationFailure; daemon-socket-endpoint-path moved under
daemon/endpoint/publication; the launch-parity test it touched was removed).

Co-authored-by: Manan Chataut <thefrikidude@thefrikidude.local>
Co-authored-by: Jinwoo-H <jinwoo0825@gmail.com>
Co-authored-by: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-11-06 03:03:56 -08:00
OrcaWinandOrcaWin ab982d32b9 test: remove 137 low-value automation and account tests (#38755)
Co-authored-by: OrcaWin <293788423+OrcaWin@users.noreply.github.com>
2026-11-05 17:05:57 -08:00
Neil 8417fa890a refactor(main): group agent runtime code by defining owner (#38565) 2026-11-05 06:45:18 -08:00
Kelvin Amoaba 8d662f5c63 fix(ai-vault): show closed Antigravity chats in Agent Session History (#38203)
* fix(ai-vault): list managed Antigravity chats in Agent Session History

Orca's managed Antigravity chat sets GEMINI_HOME under the app's data
directory, so its transcripts land in antigravity-chat/antigravity-acp/brain,
which the history scanner never walked. Scan that root, take each session's
cwd from the server's conversations/<id>.meta so the row shows in its
workspace, and treat rows no chat owns as transcript references, since agy
cannot open the server's conversations.

* fix(ai-vault): scan managed Antigravity chats only for reference-aware clients
2026-11-04 19:31:13 +00:00
OrcaWinandOrcaWin 45b4fb3ab7 test: remove 152 low-value test declarations (#38182)
Co-authored-by: OrcaWin <293788423+OrcaWin@users.noreply.github.com>
2026-11-04 09:43:36 -08:00
Neil 7bf0377072 refactor: place terminal and workspace contracts with concrete owners (#38061) 2026-11-03 22:49:34 -08:00
Neil 2c03c4b989 refactor: organize agent status and lifecycle owners (#37961) 2026-11-03 16:36:54 -08:00
Kelvin Amoabaandzhangxaochen 93b599463d fix(agent-hooks): preserve Antigravity ownership across nested hooks (#37955)
Capture Antigravity process ownership before managed hook shells and preserve it through HTTP, startup replay and host relays. Reuse host admission for desktop and mobile, including foreground recovery.

Fixes #37505

Co-authored-by: zhangxaochen <3416677+zhangxaochen@users.noreply.github.com>
2026-11-03 22:57:50 +00:00
OrcaWin 29079b567f test: remove 151 low-value test declarations (#37870)
* test: remove 151 low-value test declarations

* test: prune obsolete wall-clock test exemptions
2026-11-03 11:07:43 -08:00
OrcaWin a29d2e3f7f test: remove 68 low-value test declarations (#37847) 2026-11-03 08:16:05 -08:00
Neil 45a29352ea refactor: group host storage and worker infrastructure (#37606) 2026-11-02 17:34:32 -08:00
Brennan Benson 32a6c4206e Keep Antigravity built-in skill files out of repositories (#37167)
* fix(antigravity): avoid built-in skill files in repositories

* fix(antigravity): say which runtime releases write the skill file

* test(antigravity): read the recorded 1.4.1 model and Effort options

* test(antigravity): type the recorded option key
2026-11-01 16:14:58 -08:00
Neil 57454e6d7e refactor(agent-session): group lifecycle records and direct owners (#36909) 2026-11-01 01:24:37 -08:00
Brennan BensonandVyacheslav Scherbinin 00de405c5c fix: group Antigravity models and refresh effort choices (#34518)
* fix(acp): update Antigravity model and effort metadata

* fix: confirm ACP model families and idle option metadata

* Preserve provider-owned model and effort selection

* test: repair model option host and consumer fixtures

* Use the provider child type for optional delivery ownership

* test: match model option fixtures to their protocol contracts

* fix: isolate resting options from adapter type dependencies

* Preserve Antigravity option fixture types

* Match option fixture control response contract

---------

Co-authored-by: Vyacheslav Scherbinin <gentslava@mail.ru>
2026-10-29 16:21:22 -07:00
Brennan Benson 4217095c06 Support Windows native Antigravity account switching (#34637)
* Support Windows native Antigravity account credentials

* Preserve Antigravity prompt arguments and sanitize Windows file failures

* Preserve Windows credential bytes and distinguish native read failures

* Import Buffer type in Windows security declarations

* Expose native credential bytes without a Node type dependency

* Let Windows agy launches keep shell ownership

* fix: declare Windows account messages and cover owner scope

* fix: resolve Windows account authority before snapshot projection

* fix: share Windows credential parsing with saved account reader

* test: type saved account identity lookup mock

* test: isolate native account fixture host detection

* test: reuse filesystem mock for container marker control

* test: preserve native credential contract failure diagnostics

* test: normalize private read expectation and cover Windows boundary
2026-10-29 14:31:23 -07:00
Brennan Benson f87d68b4a4 Chat runs launcher Commands like op run -- codex for every agent (#35592)
* Support launcher command prefixes for all chat agents

* Preserve launcher path arguments and copy routing checks

* Match Japanese command guidance to the Agent settings label

* test(pi): expect version probe termination barrier

* test(chat): expect current command refusal guidance

* fix(acp): refuse copy arguments before launch preparation
2026-10-29 11:59:03 -07:00
Brennan Benson 78ad9f4255 fix: keep chat option actions independent of inventory (#31927)
* fix: separate chat option input from inventory observations

* fix: preserve scoped chat choices and publication ownership

* fix: complete scoped catalog and applied control ownership

* test: make catalog fixture dependency boundaries explicit

* test: request catalog discovery explicitly in demand contracts

* fix(chat): preserve option observations and operation boundaries

* fix(chat): finish pending option and catalog lifetimes

* fix(chat): project saved permissions without launch preparation

* fix(chat): correct option rejection and catalog retirement

* Preserve Claude effort validation advice through chat rejection

* test: align refresh mocks and preserve fixture type evidence

* fix: share catalog claims only across equivalent owners

* test: use typed catalog corpus instrumentation

* fix: consolidate structured launch imports

* Validate SDK queue regression envelopes without assertions

* fix: complete catalog runtime and fixture type contracts

* Align native option fixtures with explicit discovery and applied facts

* Keep initial compatibility catalog reads on held memory

* Complete the installed catalog fixture envelope

* Observe learned defaults after asynchronous projection settles

* Consolidate host fixture journal type imports

* test(native-chat): align goal and seed fixtures with applied inputs

* fix(codex): retain applied proof when goal settings skip a write

* test: load rejection wording before timed queue regression

* Fix catalog fixtures and queued option snapshot typing

* Align permission publication fixture with passive option reads

* Separate startup config from held turn permission fixture

* Align input lifecycle fixtures with sparse applied choices

* Simplify scoped catalog refresh ownership and coalesce cache snapshots

* Load catalog persistence real-module fixture during collection

* Compose catalog availability fixtures from valid session records

* Align catalog and startup fixtures with current option contracts

* Fix permission read types and separate catalog fixture preparation

* Align option and restart fixtures with current lifecycle owners

* test(mobile): retain reported model alongside discovery

* test(mobile): recalibrate the measured route script envelope

* test: let the preflight shell-capture mock run its detection callback
2026-10-28 16:08:01 -07:00
Jinwoo Hong ad4b9af825 Stop opening a Google sign-in page every hour when agy is signed out (#34165) 2026-10-26 22:05:27 -07:00
Manan 653908a652 fix(antigravity): save an agy account whose credential has no id_token (#33580)
agy 1.4.7 stores no id_token, so Save current account stayed disabled and the account could not be saved. Save now asks Google's userinfo endpoint which account owns the current access token (only on the Save click), then saves it, or updates the saved account with the same Google subject. The credential is re-read after the lookup, and nothing is saved if it changed.

Fixes #33323
2026-10-26 20:14:24 -04:00
OrcaWinandOrcaWin 0cf038c03c test: remove low-value wrapper and inventory suites (#33736)
Co-authored-by: OrcaWin <293788423+OrcaWin@users.noreply.github.com>
2026-10-25 19:45:39 -07:00
553cbffb5a fix(antigravity): keep the selected account after agy refreshes its token (#33656)
After agy silently refreshes its Google token (the new credential has no id_token), Orca still matches the saved Antigravity account by auth method + refresh token instead of refusing the launch with "native Antigravity account changed"; the vault accepts such refreshed snapshots while still rejecting one whose id_token names a different account.

Fixes #31579
Supersedes #33204

Co-authored-by: biojuho <258838639+biojuho@users.noreply.github.com>
Co-authored-by: Manan <100475418+thefrikidude@users.noreply.github.com>
2026-10-25 16:09:45 -07:00
5ce9d58b2d fix(agent-hooks): force C numeric locale on POSIX curl timeouts (#19600)
* fix(agent-hooks): force C numeric locale on POSIX curl timeouts

curl parses --connect-timeout/--max-time with locale-sensitive strtod, so comma-decimal locales reject 0.5 and every hook silently falls into the restart spool.

Fixes #19578

Co-authored-by: Cursor <cursoragent@cursor.com>

* fix(agent-hooks): neutralize LC_ALL before setting LC_NUMERIC=C on POSIX curl

Signed-off-by: siddiqui irshad <mohdirshad1306@gmail.com>

* style(agent-hooks): format scoped curl commands

* test(hooks): expect scoped curl locale in Muse install script

---------

Signed-off-by: siddiqui irshad <mohdirshad1306@gmail.com>
Co-authored-by: Cursor <cursoragent@cursor.com>
Co-authored-by: Neil <neil@stably.ai>
2026-10-24 02:17:08 -07:00
OrcaWin 2847bbe9e8 [comment audit] Consolidate completed code comment cleanup
Combine the completed comment cleanup from 319 stacked PRs into one change against `main`, so the full CI suite validates the combined result once. This replaces the previous audit stack; no additional audit work is included.

The change shortens redundant comments across 2,753 source and shell-snapshot files (25,235 net lines removed). Conflicts preserve current-main executable code. Runtime behavior, test assertions, directives, licenses, generated notices, SAFETY rationales, and compatibility markers are preserved. The audit tracker remains local, outside the repository.

Validation:
- Equivalent source/emitted AST and executable tokens across all 2,750 source files, with separate checks for embedded shell, SQL, JavaScript, CSS, and generated fixtures.
- Identical executable lines in the three shell snapshots; protected comments unchanged.
- Changed-code quality gate passed with no new findings.
- 358 tests passed, 2 skipped across 23 focused test files.
- `git diff --check` passed.
2026-10-23 13:15:45 -07:00