Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
641 commits
Select commit Hold shift + click to select a range
e13661e
fix(frontend): capture Stop target before unlocking sends
mmabrouk Sep 4, 2026
f184867
fix(mobile): react to session liveness when polling gates
mmabrouk Sep 4, 2026
f43cfef
style(sessions): trim liveness rationale comments
mmabrouk Sep 4, 2026
cd21450
docs(sessions): record direct delivery as version one
mmabrouk Sep 4, 2026
19e06e1
fix(qa): wait for watchdog terminal records
mmabrouk Sep 4, 2026
d91ed34
fix(runner): preserve admitted stop handle
mmabrouk Sep 4, 2026
347cb5c
fix(runner): honor stop during pause teardown
mmabrouk Sep 4, 2026
0791279
fix(api): replay cancel idempotency before targeting
mmabrouk Sep 4, 2026
1c202ae
fix(entities): normalize legacy stop response
mmabrouk Sep 4, 2026
adcc987
fix(frontend): abort locally while resolving stop target
mmabrouk Sep 4, 2026
00fae4b
test(runner): preserve cancel fixture type
mmabrouk Sep 4, 2026
d81f935
fix(qa): honor durable stop mode in session driver
mmabrouk Sep 4, 2026
630a676
merge: #6554 driver fixes 6 and 7 (poll for the watchdog ending; flag…
mmabrouk Sep 4, 2026
56531f6
fix(frontend): pin stop target before queued sends
mmabrouk Sep 4, 2026
bac1a42
fix(frontend): pin durable Stop to the streamed turn
mmabrouk Sep 4, 2026
d4c4e43
fix(frontend): keep new turns unpinned before metadata
mmabrouk Sep 4, 2026
63cbee5
[feat] Add agent version history with configuration diffs and revert …
ashrafchowdury Sep 4, 2026
3935e0c
fix(sessions): make unfenced cancel running-only
mmabrouk Sep 4, 2026
f146221
Merge pull request #6515 from Agenta-AI/feat/sidebar-drag-reorder-6467
ashrafchowdury Sep 4, 2026
3f18f74
merge: #6503 durable Stop command, direct delivery, the flag into fea…
mmabrouk Sep 4, 2026
af14418
feat(sessions): settle executions whose runner cannot report an outcome
mmabrouk Sep 2, 2026
5eb30cf
fix(runner): probe the sandbox over HTTP, not through a local cache
mmabrouk Sep 2, 2026
208be17
docs(sessions): record the execution watchdog slice
mmabrouk Sep 2, 2026
59b5059
fix(sessions): key the watchdog off heartbeat age, not a lease
mmabrouk Sep 2, 2026
4e554e5
docs(sessions): name the risk in the threshold question
mmabrouk Sep 2, 2026
c540a64
docs(sessions): record the re-run at the 90-second threshold
mmabrouk Sep 2, 2026
4d6e363
docs(sessions): the watchdog stack is down, and how to bring it back
mmabrouk Sep 2, 2026
559a8d1
feat(sessions): give records a place to mark a late write
mmabrouk Sep 3, 2026
a630aff
feat(sessions): stamp the watchdog as the writer of the ending it writes
mmabrouk Sep 3, 2026
54923d4
feat(sessions): keep a quarantined record out of every transcript read
mmabrouk Sep 3, 2026
8f567b0
feat(sessions): quarantine records that arrive after the watchdog end…
mmabrouk Sep 3, 2026
1eabbb5
fix(sessions): write the ending for a stopped row whose runner died b…
mmabrouk Sep 3, 2026
2301f91
fix(sessions): release the dead turn's alive lock when the sweep writ…
mmabrouk Sep 3, 2026
df82ad2
feat(sessions): gate durable stop and late output
mmabrouk Sep 3, 2026
1ffffbd
fix(sessions): redeliver abandoned stop commands
mmabrouk Sep 3, 2026
c4e7cb9
fix(sessions): enforce one terminal execution outcome
mmabrouk Sep 3, 2026
16cf06e
fix(sessions): make stop settlement atomic
mmabrouk Sep 3, 2026
354f319
fix(sessions): make terminal settlement authoritative
mmabrouk Sep 3, 2026
378fc27
fix(sessions): bound terminal redis repair
mmabrouk Sep 3, 2026
76d3579
fix(sessions): default invalid late output policy
mmabrouk Sep 3, 2026
f43076f
fix(runner): release parked approvals on stop
mmabrouk Sep 3, 2026
a0d15a8
fix(runner): preserve fresh prompts after approvals
mmabrouk Sep 3, 2026
b77432c
fix(sessions): publish settled interaction cancellations
mmabrouk Sep 3, 2026
4ffabe4
chore(sessions): remove dead settlement field
mmabrouk Sep 3, 2026
0e398a3
fix(runner): settle parked approvals before repark
mmabrouk Sep 3, 2026
4342a65
fix(runner): watch re-gates while settling approvals
mmabrouk Sep 3, 2026
50418b3
fix(api): select watchdog endings by execution
mmabrouk Sep 4, 2026
cd7117a
fix(api): wire commands service into session watchdog
mmabrouk Sep 4, 2026
356c176
fix(api): clear dead session owner in watchdog
mmabrouk Sep 4, 2026
b76b701
fix(sessions): document cancel execution guard
mmabrouk Sep 4, 2026
7146130
fix(api): bound watchdog ending candidates
mmabrouk Sep 4, 2026
9160f68
chore(sessions): number the ending-marker migration 026
mmabrouk Sep 4, 2026
2fe0e92
fix(runner): repark a parked-approval Stop warm when no harness cance…
mmabrouk Sep 4, 2026
5d8058e
fix(api): keep the execution watchdog alive when a sweep pass raises
mmabrouk Sep 4, 2026
55db87f
fix(api): give MultiLogger an exception method
mmabrouk Sep 4, 2026
2727465
fix(api): let the watchdog settle commands past a row it cannot map
mmabrouk Sep 4, 2026
a629cf2
fix(api): let a runner claim commands past a row it cannot map
mmabrouk Sep 4, 2026
80531f0
fix(api): clear the running flag when the watchdog marks an execution…
mmabrouk Sep 4, 2026
1fc9aea
fix(api): tombstone a swept turn so a returning runner cannot re-set …
mmabrouk Sep 4, 2026
ca43e25
fix(sessions): reclaim session affinity from a replica that holds no …
mmabrouk Sep 4, 2026
7904daa
fix(sessions): persist the watchdog collapse through a Core UPDATE
mmabrouk Sep 4, 2026
fbc8259
fix(sessions): write the lost-turn is_running clear as a Core UPDATE
mmabrouk Sep 4, 2026
0f85872
test(sessions): pin watchdog settlement invariants
mmabrouk Sep 4, 2026
5251677
test(runner): pin watchdog teardown and probe routes
mmabrouk Sep 4, 2026
d7e58dc
fix(runner): end a turn when the provider says its sandbox is gone
mmabrouk Sep 4, 2026
8229202
test(runner): pin the sandbox-gone terminal end to end
mmabrouk Sep 4, 2026
4aecd1f
fix(sessions): reconcile watchdog rebase
mmabrouk Sep 4, 2026
9a15766
fix(sessions): guard watchdog stream updates
mmabrouk Sep 4, 2026
91fbab0
fix(sessions): retry watchdog lookup failures
mmabrouk Sep 4, 2026
c0a5ab9
fix(runner): expose quiet-run timeout overrides
mmabrouk Sep 4, 2026
0446be9
test(sessions): model guarded sweep rowcounts
mmabrouk Sep 4, 2026
7202cea
fix(api): fence watchdog settlement cleanup
mmabrouk Sep 4, 2026
3b3d8cc
fix(api): fence heartbeat row mirrors
mmabrouk Sep 4, 2026
b10767e
fix(api): generation-fence session affinity
mmabrouk Sep 4, 2026
e51ca17
fix(api): restore legacy watchdog cleanup
mmabrouk Sep 4, 2026
5c5355e
test(api): follow generated owner values
mmabrouk Sep 4, 2026
0e27a42
fix(api): fence heartbeat on stream state
mmabrouk Sep 4, 2026
9609237
fix(api): preserve owner generation on reclaim
mmabrouk Sep 4, 2026
1460da7
merge: #6501 execution watchdog, settlement, quarantine, sandbox-gone…
mmabrouk Sep 4, 2026
dc68ce0
fix(api): preserve outage backlog during recovery
mmabrouk Sep 4, 2026
06142b6
fix(api): split record batches only on row rejection
mmabrouk Sep 4, 2026
994fbbe
style(chat): format the agent turn test
mmabrouk Sep 4, 2026
83d0a24
fix(runner): decide a settled user Stop before the client-disconnect …
mmabrouk Sep 4, 2026
8d9cacc
fix(runner): carry and park a first turn's allowed sibling call
mmabrouk Sep 4, 2026
7b8b533
fix(runner): keep stopped sessions warm for ten minutes
mmabrouk Sep 4, 2026
f0dab5a
merge: #6557 warm Stop from the browser, first-turn sibling park, 600…
mmabrouk Sep 4, 2026
8180554
merge: #6556 keep outage-backlog records, split batches only per reco…
mmabrouk Sep 4, 2026
5526f9e
fix(api): guard Stop against the turn it did not mean, and cancel its…
mmabrouk Sep 2, 2026
0a35ca1
fix(frontend): close the approval card when the user stops the turn
mmabrouk Sep 2, 2026
5e2fbd2
docs(sessions): record the Stop guard slice, its live results, and it…
mmabrouk Sep 2, 2026
b3af4f9
fix(api): exempt Stop from the per-project concurrency limit
mmabrouk Sep 2, 2026
31b6097
fix(frontend): tell the user when a Stop was refused, and make mobile…
mmabrouk Sep 2, 2026
0dbc968
docs(sessions): record the added scope and its live results
mmabrouk Sep 2, 2026
31ab82b
feat(frontend): send the turn id with Stop so it cancels that turn or…
mmabrouk Sep 2, 2026
fd9c61f
docs(sessions): record the browser half of the turn id
mmabrouk Sep 2, 2026
2660548
fix(frontend): read the turn id from message metadata, not a data part
mmabrouk Sep 2, 2026
80ef6f5
docs(sessions): correct the browser half to the metadata mechanism
mmabrouk Sep 2, 2026
c10d9fd
docs(sessions): record why the turn id is read from the messages, not…
mmabrouk Sep 2, 2026
6ce81fb
fix(frontend): wait for durable stop acceptance
mmabrouk Sep 3, 2026
9bc0e19
fix(frontend): apply durable stop review
mmabrouk Sep 3, 2026
2ab4fd8
style(api): format cancel stop guard test
mmabrouk Sep 4, 2026
d850edb
fix(frontend): keep Stop available during approvals
mmabrouk Sep 4, 2026
1b48b8d
fix(frontend): render remote Stops as neutral
mmabrouk Sep 4, 2026
f252bd6
fix(frontend): settle parked Stops immediately
mmabrouk Sep 4, 2026
563f608
fix(api): make Stop displacement atomic
mmabrouk Sep 4, 2026
31ceae6
fix(chat): preserve Stop cancellation evidence
mmabrouk Sep 4, 2026
874559a
fix(frontend): scope Stop state to its request
mmabrouk Sep 4, 2026
9326550
docs(sessions): clarify Stop contracts
mmabrouk Sep 4, 2026
7fcd676
test(api): cover atomic Stop races
mmabrouk Sep 4, 2026
71084ae
style(frontend): trim Stop implementation comments
mmabrouk Sep 4, 2026
dc5d5d9
fix(frontend): clear stale stop guards before turns
mmabrouk Sep 4, 2026
e1ee2b0
fix(frontend): reset stopped latch on newer turns
mmabrouk Sep 4, 2026
63fb017
fix(mobile): settle stops after runs park
mmabrouk Sep 4, 2026
57d73c2
fix(frontend): disable interactions while stopping
mmabrouk Sep 4, 2026
5e54914
test(frontend): stabilize desktop stop hook harness
mmabrouk Sep 4, 2026
93ad612
style(frontend): order desktop hook test imports
mmabrouk Sep 4, 2026
e07deb1
test(api): preserve Stop scopes after rebase
mmabrouk Sep 4, 2026
fff1540
fix(frontend): collapse rebased Stop guard wrappers
mmabrouk Sep 4, 2026
8a8b2ae
fix(frontend): rehydrate durable stop guards
mmabrouk Sep 4, 2026
e65e624
Merge pull request #6504 from Agenta-AI/feat/session-stop-guard
mmabrouk Sep 4, 2026
d4c3d7e
fix(api): validate session record retry bounds
mmabrouk Sep 4, 2026
f1fedce
fix(sessions): harden admission and owner release
mmabrouk Sep 4, 2026
0478ce1
fix(runner): make stopped cleanup fail closed
mmabrouk Sep 4, 2026
ffb780c
fix(runner): record mounts before abort handling
mmabrouk Sep 4, 2026
4cadbd3
fix(runner): persist terminal records for escaped errors
mmabrouk Sep 4, 2026
afafc5c
fix(frontend): recover refused sends safely
mmabrouk Sep 4, 2026
fe131e8
fix(qa): reject incomplete session control evidence
mmabrouk Sep 4, 2026
712373d
docs(sessions): clarify control plane safety contracts
mmabrouk Sep 4, 2026
988552c
fix(runner): keep settled Codex stops warm
mmabrouk Sep 5, 2026
889dbad
fix(frontend): retain refused sends until restored
mmabrouk Sep 5, 2026
3dfd9e4
docs(sessions): restore best-effort reap contract
mmabrouk Sep 5, 2026
2c95ee4
chore(frontend): format user Stop unit test
mmabrouk Sep 5, 2026
d3d2030
fix(frontend): restore held refused sends
mmabrouk Sep 5, 2026
e5a7fa4
fix(frontend): capture refused send before restore frame
mmabrouk Sep 5, 2026
52ffa77
Merge pull request #6558 from Agenta-AI/fix/session-control-coderabbit
mmabrouk Sep 5, 2026
a646787
docs(api): update API reference from production OpenAPI spec
github-actions[bot] Sep 5, 2026
770b566
Merge pull request #6562 from Agenta-AI/automated/update-api-docs
mmabrouk Sep 5, 2026
4c91036
fix(frontend): preserve agent drafts during version restores
mmabrouk Sep 5, 2026
e7faec8
Merge pull request #6564 from Agenta-AI/fix/release-v0.114.8-revert-s…
mmabrouk Sep 5, 2026
3ebfff0
[AGE-4067] docs(agents): Plan custom secret setup and delivery
mmabrouk Sep 5, 2026
17b3b77
fix: repair web acceptance checks and bound preview runtime
mmabrouk Sep 5, 2026
a9d68a7
test(sessions): point the watchdog collapse test at its own database
mmabrouk Sep 5, 2026
93f703f
fix(tests): stabilize acceptance selection and prompt fixtures
mmabrouk Sep 5, 2026
e274184
fix(tests): compare deleted scenario IDs without assuming order
mmabrouk Sep 5, 2026
76139d2
Merge pull request #6566 from Agenta-AI/fix/web-acceptance-1148
mmabrouk Sep 5, 2026
8620107
Merge pull request #6567 from Agenta-AI/fix/session-control-coderabbit-2
mmabrouk Sep 5, 2026
508b551
Merge pull request #6526 from Agenta-AI/release/v0.114.8
mmabrouk Sep 5, 2026
0664a8e
v0.115.0
mmabrouk Sep 5, 2026
f72e4aa
Merge pull request #6553 from Agenta-AI/feat/session-control
mmabrouk Sep 5, 2026
4d924d0
feat(runner): relay live session frames
mmabrouk Sep 4, 2026
7424913
feat(api): ingest temporary session frames
mmabrouk Sep 4, 2026
2371bc6
feat(api): relay live session frames
mmabrouk Sep 4, 2026
e541dab
feat(web): preview live session frames
mmabrouk Sep 4, 2026
c3745b8
fix(api): protect durable records from frame trimming
mmabrouk Sep 4, 2026
9117708
fix(web): bound live session preview state
mmabrouk Sep 4, 2026
fbd06c3
fix(agent): wire live session relay
mmabrouk Sep 4, 2026
1dd3fd8
fix(api): isolate disposable live frames
mmabrouk Sep 4, 2026
054b3e9
fix(api): bound live frame ingress
mmabrouk Sep 4, 2026
1be4a25
fix(api): prevent live event caching
mmabrouk Sep 4, 2026
fa73cc1
docs(sessions): separate live frame retention
mmabrouk Sep 4, 2026
3e6b17f
fix(frontend): log invalid live frames
mmabrouk Sep 4, 2026
29bb4de
fix(frontend): reject gapped live previews
mmabrouk Sep 4, 2026
ff55b05
fix(api): restore durable record retention
mmabrouk Sep 4, 2026
27b4caf
fix(api): isolate live relay startup
mmabrouk Sep 4, 2026
ecb2214
docs(sessions): separate shipped and target events
mmabrouk Sep 4, 2026
6e6df19
feat(sessions): add durable sequence allocation
mmabrouk Sep 4, 2026
ed8eb9e
feat(sessions): relay committed durable events
mmabrouk Sep 4, 2026
1fa2449
feat(sessions): add reconnect snapshot and transcript paging
mmabrouk Sep 4, 2026
2f3bf88
feat(sessions): replay durable events before live follow
mmabrouk Sep 4, 2026
282d616
feat(sessions): reconnect from durable sequence cursors
mmabrouk Sep 4, 2026
455368b
fix(sessions): ignore untyped relay results
mmabrouk Sep 4, 2026
374bb2e
fix(sessions): sequence migrations by project
mmabrouk Sep 4, 2026
6bd3feb
fix(sessions): accept sparse durable event sequences
mmabrouk Sep 4, 2026
64c4824
fix(sessions): avoid watermark-only transcript refetches
mmabrouk Sep 4, 2026
bcd4f6b
test(sessions): declare the analytics engine fixture with pytest_asyncio
mmabrouk Sep 4, 2026
a7cfb8a
refactor(chat): stop retaining durable event payloads
mmabrouk Sep 4, 2026
c151273
fix(sessions): backpressure durable replay
mmabrouk Sep 4, 2026
636c916
fix(sessions): isolate durable relay envelopes
mmabrouk Sep 5, 2026
a19e671
fix(sessions): order cursor locks before acknowledgement
mmabrouk Sep 5, 2026
63b3343
fix(chat): hydrate through the reconnect cursor
mmabrouk Sep 5, 2026
e9f10a8
fix(chat): back off live reconnects
mmabrouk Sep 5, 2026
ef23286
test(migrations): verify tracing sequence parent
mmabrouk Sep 5, 2026
f5e7948
fix(chat): gate live follow on transcript adoption
mmabrouk Sep 5, 2026
4fdd89b
fix(chat): join interaction state into live replay
mmabrouk Sep 5, 2026
c1522b3
fix(sessions): exclude quarantined records from reconnect
mmabrouk Sep 5, 2026
04d3795
fix(chat): return desktop transcript adoption status
mmabrouk Sep 5, 2026
1969ec6
fix(chat): separate reconnect sequence and row watermarks
mmabrouk Sep 5, 2026
1281c60
fix(chat): guard transcript adoption failures
mmabrouk Sep 5, 2026
f600abb
style(chat): format live preview retry fixture
mmabrouk Sep 5, 2026
c672dc5
fix(sessions): add cursor lifecycle columns
mmabrouk Sep 5, 2026
46be7e6
feat(chat): render sender from shared session events
mmabrouk Sep 4, 2026
e22c629
feat(sessions): detach shared sender execution
mmabrouk Sep 4, 2026
389d887
feat(chat): reconnect sender to running turn
mmabrouk Sep 4, 2026
3011ea0
feat(mobile): follow shared sender execution
mmabrouk Sep 4, 2026
6445d5d
fix(chat): hide shared invoke acceptance rows
mmabrouk Sep 4, 2026
2006dfa
fix(sessions): apply shared sender review
mmabrouk Sep 4, 2026
64cc80b
fix(chat): clear the running strip when the turn ends after a reload
mmabrouk Sep 4, 2026
73d74a5
fix(chat): stop persisting a dead sender stream as a failed turn
mmabrouk Sep 4, 2026
4a23a87
fix(chat): surface accepted disconnect as connection state
mmabrouk Sep 4, 2026
e14b4dd
docs(sessions): remove stale flag consolidation note
mmabrouk Sep 4, 2026
3a59296
chore(ci): satisfy readiness checks
mmabrouk Sep 4, 2026
8716021
test(sessions): align shared sender contracts
mmabrouk Sep 4, 2026
539b722
fix(chat): keep accepted runs pending after disconnect
mmabrouk Sep 5, 2026
b7d60ec
fix(chat): latch one response source per turn
mmabrouk Sep 5, 2026
dde620a
fix(chat): preserve shared runner error provenance
mmabrouk Sep 5, 2026
15f3542
fix(chat): reset turn acceptance before request build
mmabrouk Sep 5, 2026
11451d7
test(chat): align shared sender fixtures after rebase
mmabrouk Sep 5, 2026
7ddea9e
fix(chat): show activity for connected shared readers
mmabrouk Sep 5, 2026
25e8c73
fix(chat): sync watched interactions live
mmabrouk Sep 5, 2026
d4bfc1b
fix(chat): bound shared sender acceptance
mmabrouk Sep 5, 2026
703054a
fix(runner): batch live session frames
mmabrouk Sep 5, 2026
1e9e748
fix(api): protect runner record ingest from plan throttling
mmabrouk Sep 5, 2026
754b2d5
fix(chat): restore flag-off running banner
mmabrouk Sep 5, 2026
fe2e5d1
chore(ci): refresh shared sender fixture fingerprint
mmabrouk Sep 5, 2026
28cb5da
docs(sessions): clarify live event retention and cursors
mmabrouk Sep 5, 2026
0cb6549
Merge pull request #6522 from Agenta-AI/feat/session-live-relay
mmabrouk Sep 5, 2026
c2958e3
Merge pull request #6524 from Agenta-AI/feat/session-durable-reconnect
mmabrouk Sep 5, 2026
c8721c2
Merge pull request #6531 from Agenta-AI/feat/session-shared-sender
mmabrouk Sep 5, 2026
1a82e38
fix(api): treat a non-dict record payload as absent
mmabrouk Sep 5, 2026
ce34eac
perf(api): trim the live-frame stream approximately
mmabrouk Sep 5, 2026
ee0c74d
test(api): close a leftover analytics engine in the sequence fixture
mmabrouk Sep 5, 2026
efa5de9
docs(api): record why the transcript window pages by offset
mmabrouk Sep 5, 2026
47e4ece
fix(runner): emit session-accepted only after the turn is admitted
mmabrouk Sep 5, 2026
2b15409
fix(runner): bound the live-frame ingest POST
mmabrouk Sep 5, 2026
6835357
fix(web): keep an accepted shared turn's transcript adoptable
mmabrouk Sep 5, 2026
1c09d79
test(web): give the SessionRecord fixtures their sequence field
mmabrouk Sep 5, 2026
4d51858
test(sdk,services): carry detached through the test doubles
mmabrouk Sep 5, 2026
a354ce4
docs: describe the durable-event contract as shipped
mmabrouk Sep 5, 2026
5c4c2ef
fix: resolve v0.115 release QA blockers (#6573)
mmabrouk Sep 5, 2026
6bc2410
docs(sessions): match the shipped live relay topology
mmabrouk Sep 5, 2026
4eb4446
Merge pull request #6574 from Agenta-AI/fix/session-live-events-coder…
mmabrouk Sep 5, 2026
8256a80
fix(migrations): build the records sequence index concurrently
mmabrouk Sep 5, 2026
c47d89e
Merge pull request #6576 from Agenta-AI/fix/session-live-events-index
mmabrouk Sep 5, 2026
480e020
[fix] Keep the flag-off watchdog and late-output defaults unchanged (…
mmabrouk Sep 5, 2026
7496c66
fix: prevent approval resume after stop (#6579)
mmabrouk Sep 5, 2026
e3ef284
fix(web): scope test cleanup and render messages once (#6581)
mmabrouk Sep 5, 2026
794c021
[AGE-4067] feat(agents): Inject custom secrets into agent runs
mmabrouk Sep 5, 2026
42df9c1
[AGE-4067] test(runner): Recognize custom secret wire credentials
mmabrouk Sep 5, 2026
1a8f02e
fix(api): enable durable Stop by default
mmabrouk Sep 5, 2026
362d1a7
fix(api): enable durable Stop by default (#6584)
mmabrouk Sep 5, 2026
a4af13c
Merge pull request #6571 from Agenta-AI/release/v0.115.0
mmabrouk Sep 5, 2026
ddd020e
v0.115.1
mmabrouk Sep 5, 2026
64dc2b9
Merge release/v0.115.1 into feat/session-live-events
mmabrouk Sep 5, 2026
4e5e172
Merge pull request #6572 from Agenta-AI/feat/session-live-events
mmabrouk Sep 5, 2026
b30df34
Merge release/v0.115.1 into agent custom secrets
mmabrouk Sep 5, 2026
a4401d9
fix(frontend): stop accepted shared session executions
mmabrouk Sep 5, 2026
2528652
Merge pull request #6587 from Agenta-AI/fix/release-1151-shared-stop
mmabrouk Sep 5, 2026
31b389d
Merge latest release shared-session stop fix
mmabrouk Sep 5, 2026
5f13f1e
fix(agents): address CodeRabbit review on custom secrets
mmabrouk Sep 7, 2026
e618bcd
fix(api): enforce secret access on agent bindings
mmabrouk Sep 7, 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
  •  
  •  
  •  
95 changes: 95 additions & 0 deletions .agents/skills/agent-release-gate/SKILL.md
Original file line number Diff line number Diff line change
Expand Up @@ -106,6 +106,45 @@ name the k. A commit-lock race test skipping for want of a reachable Postgres is
one-line syntax error (`SET LOCAL lock_timeout` with a bind parameter, which Postgres rejects
outright) survived 1911 green tests before a human hit it as his first live action.

**The two journeys that run many things at once: `burst` and `crosstalk`.** Every other journey
drives one run at a time, so the gate only ever saw faults that reproduce on a quiet deployment.
The credential-delivery fault of AGE-4249 does not: about one production first message in five
failed because some fresh Daytona sandboxes start without their Secret substitution wiring, and
per cold sandbox that is roughly an 8 percent fault. `burst` sends 16 first messages at the same
time on 16 brand new sessions, so the run buys 16 cold starts instead of one. `crosstalk` runs 3
two-turn conversations with long output beside 2 approval flows, and checks that no stream carries
another session's nonce, except on the codex harness, where the gate rides a platform tool with
empty arguments, so the approval command carries no nonce and isolation is not checked there
(`nonce_checked=false`). Both are Daytona-only by default and skip elsewhere; both report the
runner's stable error code per run, so a `credential_delivery_failed` names itself.

```bash
uv run resources/qa_product.py --cell C4 --only burst --only crosstalk
uv run resources/qa_product.py --cell C4 --only burst --burst-size 24 # more cold starts
uv run resources/qa_product.py --cell C3 --only crosstalk --concurrency-everywhere # local too
uv run resources/test_qa_product_concurrency.py # offline tests
```

**Read a green burst honestly.** At an 8 percent per-cold-start fault rate, 8 runs miss the fault
51 percent of the time, 16 miss it 26 percent, and two Daytona cells at 16 miss it about 7 percent.
A PASS is a sample, not an all-clear, and the result says so in its own reason line. A FAIL is
proof.

Each concurrent run holds its own Daytona sandbox, about 5 GiB of the organization's disk, and a
parked sandbox keeps counting until its auto-delete window closes, so a burst of 16 is about 80
GiB in flight. The counts are `--burst-size` (default 16), `--crosstalk-conversations` (default 3)
and `--crosstalk-approvals` (default 2). The cap is 32 concurrent runs: 32 for the burst size, and
32 for the two crosstalk counts TOGETHER, because what costs disk is what runs at once. When the
provider refuses on capacity the journey reports SKIP with a loud reason, never a PASS or a FAIL,
because nothing about the product was measured. `--concurrency-timeout` (default 300s) bounds one
TURN and rides into the stream as an absolute deadline, so a two-turn crosstalk run gets twice
that and a stream that never ends is abandoned rather than followed.

A release that changes `services/runner/src/engines/sandbox_agent/**` or
`services/runner/src/providers/daytona*` makes the Daytona cells C2, C4 and X2 mandatory through
`path_triggers.py`, and forces `burst` and `crosstalk` into the run even when `--only` named
something else. That is how these journeys reach a release that needs them.

**Before a human gets a deployment URL, run `resources/qa_commit_approval.py` too.** It is not
part of `qa_product.py`'s cell × journey matrix — none of that matrix's journeys drive a live turn
against a REAL, saved workflow revision (the `commit` journey only exercises the REST API; `chat`,
Expand Down Expand Up @@ -142,6 +181,62 @@ cell, promoted after the platform-guidance fix closed that exact gap; it reuses
the same way the separate one-shot benchmark (Tier B) does — check there before writing a new
mechanism-blind cell from scratch, to avoid duplicating scaffolding.

## Session control cells

`resources/session_control.py` is a second, standalone driver: sixteen cells that cover Stop,
durable commands, and the runner's recovery paths (owner release, park/resume, watchdog
quarantine). It drives the same product endpoint and asserts on the same wire, but it needs its
own account bootstrap, so it runs as a separate process rather than as `qa_product.py` cells. See
`resources/path_triggers.py` for the exact mandatory-cell mechanism.

**These cells are MANDATORY** — run them, not just the standing gate — whenever the release diff
touches any of:

- `services/runner/src/sessions/**`
- `services/runner/src/engines/sandbox_agent/**`
- `api/oss/src/core/sessions/**`
- `api/oss/src/tasks/asyncio/sessions/**`
- `api/oss/src/apis/fastapi/sessions/**`

Run every cell with one line:

```bash
uv run resources/session_control.py --cells all --harness pi_core --sandbox local
```

Add `--project <docker-compose project name>` to run the eight cells that need direct Docker and
Postgres access (`sandbox-gone`, `records-outage`, `restart-after-stop`, `runner-gone`,
`runner-gone-late`, `post-stop-row`, `codex-child`, `stale-tail`) and the abort-log subcheck inside
`stop-after-finish`. Without `--project`, those eight cells SKIP with a named reason. The
`stop-after-finish` HTTP check still runs, but only its abort-log subcheck is unavailable. The
other eight cells
(`stop-warm`, `double-send`, `stale-stop`, `stop-approval`, `stop-after-finish`,
`repeat-stop`, `concurrent-stops`, `stop-during-completion`) run over HTTP alone against any
deployment. Add
`--resume <path to a prior run's results.json>` to pick a lost run back up: any cell already
recorded there is loaded instead of re-run.

Results land in a timestamped folder under `~/agenta-qa-evidence/` (override with
`AGENTA_QA_RUNS_DIR`), as `results.json` and `summary.md` — the same PASS/FAIL/SKIP shape as the
rest of the gate. When a release path makes session control mandatory, pass that artifact to the
standing gate with `--session-control-results <path>`: a missing or incomplete artifact stops the
gate before the matrix runs, and a recorded FAIL makes the final gate exit nonzero.

**Environment, by name.** Same three-variable discipline as the rest of the gate, no env-file
fallback:

- `AGENTA_BASE` — the deployment origin.
- `AGENTA_ADMIN_KEY` — mints the ephemeral account this driver runs under. Lives in
`~/.agenta-qa-secrets.env`.
- `QA_OPENAI_API_KEY` — stocked into that account's vault so the `pi_core` and `codex` harnesses
have a provider key. Lives in `~/.agenta-qa-openai.env`.
- `ANTHROPIC_API_KEY` — only required for `--harness claude`, stocked into the same vault the
same way. Lives in `~/.agenta-qa-secrets.env`. A pi_core- or codex-only run does not need it.

A Daytona run additionally needs a Secrets-capable Daytona key on the runner; the key in most
session env files returns 403 on the Secrets endpoint, so check that before trusting a Daytona
result.

## When results lie

The runtime **fails open**: a component can break, get logged, and the turn still succeeds with a
Expand Down
Loading
Loading