Peter Steinberger
66cacbae5d
test: remove strict-subset assertions ( #126142 )
2026-08-18 20:15:50 -07:00
Peter Steinberger
54ebb307cd
fix(mcp): retire terminal transports and process trees ( #126101 )
...
Close terminal SSE and stateful notification streams through the owning lifecycle, and reap stdio/QA process groups before exact authority is discarded.\n\nRefs #126098 , #126099 , #126100 .
2026-08-18 18:10:45 -07:00
Peter Steinberger
fe816d69ef
fix(gateway): route detached announce by instance ( #125946 )
...
* test(qa): cover worker generation reload
* test(qa): anchor worker generation fixture
* test(qa): strengthen worker generation proof
* test(qa): stabilize terminal reply smoke waits
* test(qa): widen terminal reply CI budget
* test(qa): drop superseded timeout workaround
* fix(gateway): route detached announce by instance
2026-08-18 17:14:43 -07:00
Josh Avant
50720c3b8e
fix(codex): preserve native approval scope ( #125995 )
2026-08-18 16:18:01 -07:00
Dallin Romney
f6dbcc1ba9
test(e2e): keep recovery proof alive ( #125804 )
2026-08-18 07:44:38 -07:00
Dallin Romney
902eb1f282
test(e2e): repair release validation harness drift ( #125681 )
...
* test(e2e): align usage and Canvas contracts
* test(e2e): restore registry and use built CLI
2026-08-18 07:14:01 -07:00
Dallin Romney
350ac1d050
test(gateway): await hosted plugin registry startup ( #125814 )
2026-08-18 07:12:34 -07:00
Dallin Romney
e1d4eac8f4
fix(qa): use full tool profile for node MCP live proof ( #125683 )
...
* fix(gateway): share node tool snapshots across chunks
* docs(gateway): explain node snapshot ownership
* fix(qa): expose node MCP tool in live proof
2026-08-18 07:08:25 -07:00
Peter Steinberger
efaa867d93
feat(nodes): publish exact runner slots ( #125708 )
...
* feat(nodes): publish exact runner slots
* docs(runners): link slot inventory PR
* fix(ui): keep session menus clickable under previews
* perf(protocol): keep runner slot schema off broad barrel
* test(codex): tolerate elapsed media startup budget
* test(codex): type media client factory mocks
* fix(protocol): reject impossible runner slot counts
* test(ci): stabilize loaded lifecycle checks
* test(ui): allow loaded bulk-delete scheduling
* test(ui): stabilize loaded interaction checks
* test(ui): isolate loaded update notice checks
* test(ui): colocate bulk-delete lifecycle coverage
* test(gateway): publish session config before async setup
2026-08-18 07:08:06 -07:00
Peter Steinberger
f72782d87b
refactor(test): restore auth persistence integrity ( #125699 )
...
* test: restore auth persistence integrity
Restore the SQLite-backed auth wizard assertions traced to 43ea501f38 and consolidate duplicated message-action and temp-directory fixtures.
* test: support npm 12 pack results
2026-08-18 02:58:30 -07:00
Josh Avant
916aca13f3
feat: record subagent execution lineage ( #122015 )
...
* feat(audit): record subagent execution lineage
* fix(audit): type-check spawn lineage validation
* docs: preserve spawned-run lineage invariants
* fix(audit): preserve lineage for worker spawns
* fix(audit): bind worker lineage to live authority
* fix(audit): keep lineage carrier private
* fix(sessions): preserve ACP participant recording
* fix(audit): keep lineage out of runtime bearer
* fix(audit): keep lineage type private
* test(audit): match current worker claim shape
* test(audit): preserve readonly lineage result
* fix(audit): redeem spawn lineage privately
* fix(audit): preserve lineage redemption on copy
* test(audit): prove nested worker spawn lineage
* fix(audit): restore execution identity CI gates
2026-08-17 21:41:30 -07:00
Peter Steinberger
1cf8ea446d
fix(mcp): prevent stale catalogs and silent tool failures ( #125564 )
...
* fix(mcp): harden lifecycle and result integrity
* fix(mcp): bound catalog invalidation replay
* test(mcp): stabilize process cleanup proof
2026-08-17 21:37:12 -07:00
Peter Steinberger
821f41e1cd
fix(workers): propagate session permission context to worker placements ( #125326 )
...
* fix(workers): propagate session permission context
* test(workers): expect launch descriptor v4
2026-08-17 09:34:56 -07:00
Peter Steinberger
11ebdfc9c3
fix(gateway): normalize TLS certificate pins ( #125276 )
...
* fix(gateway): normalize TLS certificate pins
* test(gateway): use valid TLS pin fixtures
2026-08-17 06:02:56 -07:00
Peter Steinberger
2b55b55b72
feat(workboard): run attached automations after linked sessions finish ( #125170 )
...
* feat(workboard): nudge attached automations on session events
* fix(workboard): share automation nudge lifecycle state
* fix(workboard): satisfy nudge type guards
* fix(cron): add enabled-only immediate runs
2026-08-17 02:29:26 -07:00
Ayaan Zaidi
8c6976e1fc
fix(agents): report recovered tool retries ( #125078 )
...
Preserve attempt-local recovery state so successful mutation retries emit a redacted terminal receipt without stale failure warnings.
Co-authored-by: Ayaan Zaidi <hi@obviy.us >
2026-08-17 14:35:00 +05:30
Peter Steinberger
ee86b24ac1
fix(node-host): recover MCP catalogs and sessions ( #125092 )
...
* fix(node-host): recover MCP catalogs and sessions
Share placement-neutral MCP lifecycle and result projection while keeping Gateway session ownership and node process ownership separate. Refresh node catalogs live, recover closed or expired transports without replay, and preserve MCP application errors across node.invoke.\n\nFixes #125044
* test: register node MCP CI inventory
* fix(node-host): stop MCP recovery after abort
2026-08-17 01:39:33 -07:00
Peter Steinberger
f59e945013
feat(gateway): move sessions between Gateway and runners ( #125036 )
...
* chore: preserve session placement move work
* feat(gateway): move sessions between runners
* test(gateway): align recovery fixture with move barriers
* fix(protocol): format literal-only Swift initializers
* test(ui): prove session move terminal state
* refactor(gateway): narrow session move target fence
* fix(gateway): preserve pending result recovery ownership
* test(workers): migrate reclaim lifecycle fixtures
* refactor(gateway): keep move internals private
* test(gateway): align split bootstrap fixture with moves
* fix(gateway): recover session moves through exact intent
* refactor(gateway): derive move placement subtypes locally
2026-08-17 00:23:13 -07:00
Josh Avant
c1d3b33aa7
fix: honor provider timeouts during stuck-session recovery ( #123877 )
...
* fix(diagnostics): respect active model request timeouts
* chore(diagnostics): keep recovery activity internal
* test(diagnostics): await stream wrapper results
* fix(diagnostics): harden provider timeout recovery
* fix(diagnostics): track compaction model calls
* test: prove provider timeout recovery boundary
2026-08-16 18:18:29 -07:00
Peter Steinberger
2d3612da6b
fix(gateway): preserve prepared plugin metadata under load ( #124844 )
...
* fix(gateway): preserve prepared plugin metadata under load
* fix(gateway): project metadata before catalog preparation
* test(agents): assert projected startup metadata
* test(gateway): bind load probes to each finalization wave
2026-08-16 15:14:39 -07:00
Peter Steinberger
91e537da15
fix(runners): preserve device sessions through lifecycle faults ( #124744 )
...
* test(runners): cover paired-node lifecycle wire
* fix(runners): preserve retryable device lifecycle
* test(runners): keep wire fixture internals local
* fix(runners): stop fallback on device capacity
2026-08-16 12:29:07 -07:00
Peter Steinberger
dbad5e385d
refactor(workers): separate runner consent from capacity ( #124356 )
...
* refactor(workers): separate runner inventory state
* docs(runners): track inventory cleanup
* test(workers): use bundle-only launch wire
* test(workers): update optional inventory fixture
* test(workers): validate prewarm inventory capability
* fix(workers): version runner inventory cutover
2026-08-16 04:46:38 -07:00
Peter Steinberger
f19f62cb77
perf(node-host): prewarm worker bundles ( #124427 )
...
* perf(node-host): prewarm worker bundles
* test(gateway): gate worker finalization responsiveness
* fix(node-host): negotiate bundle prewarming
* fix(protocol): refresh worker prewarm models
* fix(node-host): preserve prewarm upgrade compatibility
2026-08-16 00:41:42 -07:00
Peter Steinberger
8cf85e3ced
fix: restore release-validation fixture coverage ( #124401 )
...
* test(release): refresh validation fixtures
* test(release): satisfy fixture lint gates
* test(release): preserve fixture owner contracts
2026-08-15 22:15:09 -07:00
Peter Steinberger
5943cd0362
test(qa): make target-none heartbeat explicit ( #124380 )
2026-08-15 20:41:14 -07:00
Peter Steinberger
1ab85edb0e
fix(workers): bundle workspace rsync receiver ( #124339 )
2026-08-15 19:23:05 -07:00
Peter Steinberger
78502eda6d
feat(workers): run device sessions from Gateway bundles ( #124037 )
...
* feat(workers): run device sessions from Gateway bundles
Install the current Gateway bundle before a device environment becomes ready, verify it at attach and tunnel boundaries, launch only from the immutable namespaced bundle directory, and retire stale environments for idempotent reprovisioning. Remove the local execution mode and preserve the node-local build claim only as temporary inventory metadata for the final projection/cleanup slice.
* docs(runners): record Gateway bundle cutover
* test(ci): repair runner validation fixtures
# Conflicts:
# src/scripts/test-projects.test.ts
* fix(workers): surface outdated node recovery
Keep legacy runner inventory diagnostic-only while exposing the update-and-reconnect action through node, environment, provider, placement, and Control UI surfaces.
* fix(workers): reject legacy inventory with recovery
* fix(workers): bundle worker deploy closure
* test(workers): close bundle cutover gates
* fix(workers): compose browser runtime at build
* fix(workers): satisfy bundle cutover gates
* fix(workers): route temp runtime through infra
* docs(workers): align bundle host guidance
* fix(ui): fence outdated session destinations
2026-08-15 17:46:44 -07:00
Josh Lehman
de23bf1893
test: repair worker environment E2E fixtures ( #124202 )
2026-08-15 09:57:02 -07:00
Peter Steinberger
3c06621e3b
improve(test): cut core tooling 3 runtime ( #123659 )
...
* perf(test): collapse core tooling runtime proofs
* fix(test): import OTEL span id guard
2026-08-14 06:35:48 -07:00
Peter Steinberger
7cadfb0bd6
fix: speed up local node launches and isolate scratch state ( #123503 )
...
* perf(node-host): reuse advertised worker build identity
* fix(agents): keep default workspaces inside state dir
* fix(plugins): package llama.cpp private SSRF runtime
* fix(node-host): silence missing skills directory
2026-08-13 23:24:54 -07:00
Peter Steinberger
860aeed8f6
feat(gateway): transfer node worker workspaces ( #123280 )
...
* feat(gateway): transfer node worker workspaces
* fix(gateway): harden node workspace transfer
* fix(gateway): isolate transfer HTTP contract
* fix(gateway): trim transfer HTTP exports
2026-08-13 21:00:44 -07:00
Peter Steinberger
438d035885
feat(gateway): launch workers on paired nodes ( #123157 )
...
* feat(gateway): launch workers on paired nodes
* docs(plan): track node worker launch wire
* fix(runners): restore node workspace ownership
Rehydrate durable workspace bindings after Gateway restart, fence timed-out node tunnel starts, and refuse incomplete clone fallback for submodule and Git LFS workspaces.
* test(runners): isolate node launch fixtures
2026-08-13 18:02:18 -07:00
Peter Steinberger
cb8e08f536
fix(logs): report line-limit truncation ( #123358 )
2026-08-13 16:57:26 -07:00
Vincent Koc
ac110917e1
fix(ci): stream npm pack receipt to disk ( #123019 )
2026-08-13 14:30:27 +08:00
Vincent Koc
3bc665f6ae
fix(ci): sanitize AI manifest during installer pack ( #122952 )
2026-08-13 13:02:43 +08:00
Vincent Koc
8733dcd05f
fix(ci): expose AI pack diagnostics ( #122786 )
2026-08-13 08:25:58 +08:00
Peter Steinberger
dceb2c343c
refactor: retire due compat-ledger surfaces (context-engine host params, deactivate alias, logging internals) ( #121845 )
...
* refactor(plugins): retire deactivate hook alias
* refactor(plugin-sdk): prune retired facade exports
* test(logging): isolate logger test controls
* refactor(logging): internalize file transport controls
* test(plugin-sdk): preserve retired facade coverage
* test(auto-reply): remove stale diagnostic imports
* refactor(logging): delete dead config-read guard
shouldSkipMutatingLoggingConfigRead had no production caller even on main;
it survived the dead-export scan only via logger's testApi re-export. The
test-isolation commit removed that mask, exposing the fossil. Delete the
guard, its test-only re-export, its mock entry, and its dedicated test file.
* refactor(plugin-sdk): retire due compatibility subpaths
* test(plugin-sdk): type group policy predicates
* refactor(plugin-sdk): split removed subpath records
* refactor(secrets): remove retired collector barrel
* test(plugin-sdk): tighten wildcard surface pin
* refactor(plugin-sdk): retire matrix facade metadata
* style(plugin-sdk): format facade metadata
* fix(ci): load channel setup contracts from source
Repair the main-owned regression from 99d662473c (Peter Steinberger): the new env-contract test could consume stale ignored dist metadata instead of the checked-in plugin declaration.
* test(plugin-sdk): refresh API baseline after rebase
2026-08-12 12:41:27 -07:00
Josh Avant
1b36f42653
fix(audit): preserve numeric decision cursors ( #122619 )
2026-08-12 13:08:25 -05:00
Josh Avant
562391b9af
feat(audit): explain denied operator approvals ( #119815 )
...
* Audit: add durable decision receipts
* Audit: route generic decision facts through writer
* Audit: satisfy strict decision count typing
* Test: align decision writer type coverage
* Refactor: isolate decision receipt projection
* Fix: preserve ambiguous approval correlation
* Fix decision coverage across pages
* Fix approval coverage across corrupt pages
* Fix decision summaries across retention and paging
* Remove superseded decision fact count path
* Keep session-derived approval links conservative
* Test decision paging at owner boundary
* Audit: bind approval receipts to exact execution
* Test: keep decision receipt coverage focused
* docs(agents): preserve decision receipt ownership
* Docs: refresh Plugin SDK split baselines
* Docs: require opt-in for future decision facts
* Fix: bound decision receipt inspection
2026-08-12 05:23:29 -05:00
Josh Avant
3b01ea7905
fix(audit): show authenticated users for Gateway runs ( #122484 )
...
* fix(audit): show authenticated users for Gateway runs
* fix(audit): keep profile labels out of sessions
* test(qa): verify session label retention at storage
* fix(sessions): preserve canonical profile ownership
* test(qa): require full identity inspection proof
* docs(agents): preserve execution identity ownership boundary
2026-08-12 08:50:37 +00:00
Peter Steinberger
5a643e3543
fix(plugins): keep packed entries consistent through package lifecycle ( #121174 )
...
* fix(plugins): own packed entry lifecycles by package
Persist package ownership per runtime child, route lifecycle actions through one closed resolver, reconcile removed child policy during updates, and retain rollback generations until durable config/index commit.
* fix(plugins): break uninstall policy import cycle
* test(plugins): model package ownership in lifecycle fixtures
2026-08-12 00:49:29 -07:00
Peter Steinberger
b080dd1e76
refactor: consolidate coercion contracts ( #122458 )
...
* refactor: consolidate coercion contracts
Centralize exact string, record, numeric, date, Boolean, argument, and structured-error coercions while preserving call-site semantics.
Migrate canonical-name collisions and deprecated internal SDK bypasses, deleting 55 net production/tooling lines. Expand declaration ownership enforcement to 101 allowed helpers and add a narrow export-completeness audit.
* fix: preserve standalone script coercions
Keep copied Control UI tooling self-contained and retain the trusted release harness module-relative source seam when the harness runs against an old target cwd.
2026-08-11 23:26:37 -07:00
Peter Steinberger
f6fff4f7fd
refactor: canonicalize aliases and classify test suites ( #122407 )
...
* refactor: use canonical re-export names
* fix(test): classify suite support as test source
* fix(agents): retarget gateway stub session-entry import
* test(gateway): retarget session-utils mock keys after alias removal
2026-08-11 21:18:34 -07:00
Peter Steinberger
ae2158c0da
fix(cloud-workers): start source bundles with vendored packages ( #122400 )
...
* test(qa): prove cloud worker mid-turn loss
* fix(cloud-workers): prune vendored workspace dependencies
* test(qa): keep SSH fixture type private
2026-08-11 20:32:54 -07:00
Peter Steinberger
964c8c84c1
refactor: consolidate coercion ownership ( #122299 )
...
* refactor: consolidate coercion ownership
Centralize four canonical coercion helpers, migrate exact core and plugin duplicates through narrow Plugin SDK facades, and enforce declaration and plugin-normalization ownership boundaries.
The sweep adds eight focused SDK exports while deleting more production and tooling code than it adds. User-visible behavior is unchanged except for safer equivalent object and UI parsing at existing boundaries.
* fix: guard integer option ownership
Register resolveIntegerOption with the canonical function owner and extend the declaration-guard fixture so future local duplicates fail validation.
* fix: keep integer helpers on numeric facade
Remove the unshipped duplicate string-coerce exports and route every affected plugin consumer through the existing number-runtime contract.
* fix: point numeric coercion to number runtime
Make boundary and declaration diagnostics recommend the canonical numeric facade, with failing-before coverage for both guidance paths.
2026-08-11 17:14:53 -07:00
Peter Steinberger
3d76246792
refactor: eliminate final export name collisions ( #122083 )
...
* refactor: resolve final export name collisions
* refactor: update remaining collision rename consumers
* style: format rebased auth helpers
* test: update remaining session entry mocks
* test: update remaining runtime mock exports
* test: update delivery info path mock
* refactor: reconcile combined collision sweeps
* chore: regenerate collision and sdk baselines
2026-08-11 11:18:24 -07:00
Peter Steinberger
ebb2770000
refactor: eliminate export name collisions ( #122084 )
...
* refactor: eliminate export name collisions
* chore(scripts): burn resolved collision baselines
* refactor: narrow legacy session load options
* chore: refresh SDK and session debt baselines
* refactor: adopt upstream secrets collision fix
* test(plugin-sdk): mock renamed session store core
* fix(scripts): track renamed session accessor core
2026-08-11 10:41:50 -07:00
Peter Steinberger
cad77fb39c
refactor: consolidate remaining coercion helpers ( #122020 )
2026-08-11 10:22:01 -07:00
Peter Steinberger
e390781534
refactor: burn cross-directory export name collisions ( #121893 )
...
* refactor: name subsystem logger exports
* refactor(test): distinguish exported test doubles
* refactor: consolidate canonical owner helpers
* refactor: give cross-domain helpers distinct names
* chore(lint): ratchet collision debt baselines
* fix(test): complete collision rename consumers
* fix(test): update remaining collision mock consumers
* fix(test): update transcript reader mock export
* refactor: keep embedded logger name at its owner
* fix(test): align embedded logger mock with owner
* refactor: name shared assistant phase extraction
* fix(ui): update assistant phase extractor import
* chore(generated): refresh collision and SDK baselines
* style(test): format merged plugin mocks
* chore(sdk): refresh API content hashes
2026-08-11 06:50:22 -07:00
Peter Steinberger
fa03d9b913
refactor: consolidate coercion helpers ( #121366 )
...
* refactor: consolidate coercion helpers
* fix: remove duplicate coercion imports
* fix: preserve serialized coercion guard
* chore: ratchet coercion helper carve-outs
* fix(test): keep gauntlet subprocess startup lean
* fix: preserve imported session timestamp semantics
* fix: preserve catalog timestamp string semantics
* chore: align plugin SDK surface ratchet
* fix: preserve trajectory and SDK string contracts
* fix(test): preserve QA record assertion semantics
* fix: complete standalone record guard rename
* refactor(cron): use canonical string coercion
* fix(acpx): preserve Pi timestamp parsing
* test(channels): adapt custody test harnesses
* test(telegram): classify media harness as test support
* test(acpx): split timestamp contract coverage
* test(channels): support generated custody contracts
* chore: ban the full coercion helper name set
Extends the declaration guard to all eleven consolidated helper names and
renames the cron schedule-identity readNumber wrapper to readScheduleInteger
so the banned generic name cannot regrow.
* fix(scripts): repair release-validation guard drift and lint cause
Restores the renamed isJsonRecord guard in assertTrustedWorkflowHarness after
main added isRecord call sites in parallel, and attaches the caught YAML error
as the thrown error cause (preserve-caught-error was red on main).
* fix: preserve Claude timestamp string semantics
* fix: preserve persisted timestamp string semantics
* fix: preserve date-first timestamp contracts
* fix(openai): harden delegation failure formatting
* chore: close coercion helper guard gaps
* test(openai): model non-error delegation rejection
* chore: refresh plugin SDK API contract
* fix(tasks): use canonical string field reader
* fix(ai): use canonical provider error field coercion
* fix(browser): migrate native bootstrap coercion
* docs(plugin-sdk): clarify text record export compatibility
* fix(gateway): normalize approval execution identity
* test(outbound): isolate message action poll harness
2026-08-11 00:02:18 -07:00