Skip to content

feat: manageable session queue, truthful live view, and legible transcripts - #557

Merged
pedronauck merged 8 commits into
mainfrom
session-improvs
Sep 6, 2026
Merged

pedronauck merged 8 commits into
mainfrom
session-improvs

Conversation

@pedronauck

@pedronauck pedronauck commented Sep 6, 2026 •

Copy link
Copy Markdown
Member

What & why

PR #555 shipped tasks 01–02 of the sessions-stability program (live steer, truthful stop). This PR
integrates the remaining six implementation slices, tasks 03–08. Together they close the gap between
what a long-running session is actually doing and what the operator can see and control: follow-ups
are a managed queue instead of a black box, the agent transport no longer wedges a turn under the
storm and slow-consumer conditions we can reproduce, sessions survive on observed work rather than a
wall clock, the live view reports connection and catch-up state it can actually verify, and an
hours-long transcript reads and searches like a document.

Surviving queue and send envelope (task_03). Interrupt now cancels only the active turn; every
parked entry survives it, including agent- and Goal-owned rows. Clearing is a separate explicit
action (compozy session input clear, DELETE …/prompt/queue, compozy__session_inputs_clear) that
writes one durable queue_cleared trace per removed entry with the actor identity, and repairs its
own transcript projection if the daemon dies between the queue write and the projection. Send
identity admits exactly one dispatch: replaying a message_id/idempotency_key pair returns the
recorded outcome with replayed: true, and the same identity with different content is a
send_conflict. Daemon-authored synthetic follow-ups moved onto the same durable queue, so the
in-memory second scheduler is gone. unconfirmed has one owner now — the client. Daemon queue
statuses stay the closed set queued|dispatching|sent|failed|canceled; a lost acknowledgment is
client-local state with a Retry that replays the printed identity.

Transport hardening (task_04). The reproduced deadlock in internal/acp ingestion and broadcast
is removed, and saturation is now explicit rather than silent. The notification path no longer
blocks: pre-append ingestion goes through a bounded IngestGate that drains every accepted event
and then fails the turn with a stated cause when it saturates, instead of dropping events quietly;
post-append delivery goes through LiveBroadcast, which sheds slow watchers with a
stream.consumer_degraded marker they recover from durable history. Pending permission and RPC maps
are bounded and fail fast when the process dies. Both stages expose Stats() so supervision can see
the queue depth it is reasoning about. The proof is TestDaemonE2EACPmockTransportStorm: a real daemon and a real acpmock process,
one HTTP stream deliberately stopped mid-read, a 50,000-chunk producer run to completion, and then
the whole 1,600,000-byte durable window read back through UDS starting at sequence 1, with exactly
one canonical degradation event. Storm diagnosis also caught a full transcript reprojection after
every 4 KiB write; persistence now batches to a 256 KiB byte limit alongside the existing
64-event / 25 ms boundaries while store coalescing keeps individual 4 KiB delivery frames.

Signal-based survival and no silent starvation (task_05). Inactivity termination is driven by
evidence, not elapsed time. Six work-signal sources keep a session alive — agent_progress,
tool_running, active_child, loop_run, task_lease, scheduled_wait — and they are readable on
the session resource as supervision.work_signals / supervision.sources. A source that cannot
answer reports unknown plus attention and suspends automatic stops instead of guessing. Genuine
silence warns exactly once (quiet_after, default 30m) and then stops through the task_02 escalation
ladder (stop_grace, default 10m); fresh work cancels the warning. The old wall-clock killers are
deleted, and network.live.max_total_wall_time now defaults to 0, so Live participation no longer
dies at 30 minutes unless you set a budget. On the scheduling side, capacity-starved runs escalate to
a visible needs-attention state through scheduler.capacity_waiting_escalated, skipped wakes stopped
counting as successes (the counters payload now separates wake_attempts, wake_skipped,
wake_succeeded and wake_failed), blocked automation fires defer durably via
automation_scheduler_state.deferred_until and drain after a restart, and the audit-row sweeper
actually runs.

Truthful live view (task_06). Reconnects resume exactly once from the last delivered position;
the recent-window cursor skip that silently dropped events is fixed, and a reconnect already at the
current watermark gets an empty transcript_delta with has_more: false — catch-up confirmed
without inventing a message. A brief interruption stays quiet for two seconds, then shows
Reconnecting · N; six failures show Disconnected with a working Try again instead of a dead
stream posing as an empty session. A send pressed while disconnected is refused with the draft kept.
The prompt-POST gap is covered by a bounded one-second control poll over session detail, queue and
decisions, handing back to the transcript tail at settle with the retained cursor and projection
fences. Token bursts coalesce at a durable sequence watermark. Compaction archives only prior
completed turns and cuts their projection in the same transaction, so a surviving active assistant
keeps its message identity and the APIs never disagree with what is on screen. Retention that has
removed a resume position now answers cursor_expired and replaces the retired window rather than
failing.

Legible transcript (task_07). One live tool row that replaces itself, completed tools collapsed
into a group sentence, settled turns folded behind Worked for {duration} · Ran N commands, edited M files, and interrupted turns left open. An explicit Thinking… state replaced the empty assistant
bubble with floating copy actions. Scroll has one owner, so reading older history does not fight the
stream and opening a fold does not yank the viewport. Steer provenance is on the message itself:
Steered — delivered into the live turn, interrupted and replaced, Superseded by your next steer, From the queue · was #1. Stop outcomes read as outcomes (Stopped by you after 1m 40s,
Stopped after … (inactivity)), a real tool failure shows danger while routine errors stay muted,
large payloads get a bounded body with Show all and Download, prose streaming has a smooth
reveal with a reduced-motion path, and huge transcripts stay inside a bounded browser window.

Session navigation (task_08). Full-history search and an operator-message outline are
first-class reads with parity on all four public surfaces: GET …/transcript/search,
GET …/transcript/outline on HTTP and UDS, compozy session search / compozy session outline, and
compozy__session_search / compozy__session_outline. Matches carry additive part_index and
field hints (text, title, tool_name, filename, error, input, output), so a consumer
opens the exact containing work row instead of guessing from the snippet. In the web, find-in-
conversation jumps to a match in unloaded older history, opens the folds it needs, keeps focus while
the stream runs, and invalidates cleanly when compaction archives the match. A compact message trail
hops between sent messages with hover previews and compresses when there are many.

Also in this PR: event_summaries gained a monotonic seq cursor (the old id-ordered log stream
could reuse a retired position after retention or VACUUM), the sessiondb projection got a
(kind, start_sequence) index plus a display backfill for user/system timestamps and settled tool
results, and the deleted internal/session/session_supervision.go and two superseded web components
had every consumer migrated with them.

Repairs found by this PR's own CI. Native presentation metadata now covers session
search/outline/inputs-clear and the public q preview. Bounded raw-stream test callers pass the
required limit=200. ACP mock sandbox creation keeps its bounded detached acknowledgement so
cancellation can release a terminal it created — that was a test-provider cleanup bug, not a daemon
lifecycle change. The web keeps an unresolved file-mutation verification warning visible both
outside settled work folds and in standalone marker-only messages. React Doctor's findings were
resolved by extracting focused components and view models, moving navigation async helpers out of
the compiled hook, correcting empty Find status semantics, and giving reveal progress a per-instance
XState clock with canceled-frame identity fencing — no suppression, config, or rule changes.

Redaction cost on the streaming path. CPU samples of the one-core transport storm
identified repeated secret-assignment and provider-token scans. The redactor now skips the unchanged
assignment expression when its required separator is absent, and skips provider expressions when
their derived required literal prefix is absent. Empty prefixes still scan. Rule order and
replacements are unchanged; 11,840 before/after output hashes match. The first optimization alone
still exceeded CI's deadline, so the final repair addresses both measured costs. The owning Daytona
sidecar generator regenerated the embedded Linux amd64/arm64 binaries.

Settings navigation and final terminal/selector repairs. A delayed Settings-open completion could
overwrite a newer Profiles click. The routing coordinator now honors explicit same-location navigation
and fences the older history write. Hidden terminal panes no longer publish dimensions derived from
unresolved CSS, and the visible grid fills its containing window. The CLI recognizes a completed
DETACH when the server closes before the input writer reports completion, preventing an unintended
reconnect. The runtime selector uses Base UI's default closing-focus lifecycle, preserving focus when
the operator moves into the composer during its exit. The controller implemented the final terminal,
CLI and selector integration repairs directly and reviewed the complete resulting diff.

Stop recovery and terminal selection. Canceling a known session whose process has already
exited returns nothing-in-flight even if retirement reaches the driver lookup first. Stop callers
and persisted restart receipts now share the first verified outcome, including when the process
watcher finishes before the driver returns. Terminal selection actions float inside the terminal
window: revealing them no longer resizes the PTY and clears the selection that opened them.
The existing CLI integration driver verifies its synthetic process through its owned Done channel;
the desktop geometry test follows current resize frames instead of the earlier attach dimensions.

Spec and tasks: .compozy/tasks/sessions-stability (_spec.md, _dx.md, _uiux.md, _tests.md,
task_03–task_08). Tasks 09–10 are the QA plan and its execution; their output in this diff is the
docs/qa/ tree plus the repairs the walks forced, both listed below.

How you verified it

Integrated real-user QA. One isolated lab (eng-qa-bootstrap, fresh COMPOZY_HOME, own ports and
socket, Vite proxy to the lab daemon) ran eleven charters across four personas. Ten passed; the
eleventh is blocked on an external prerequisite (below). Full report:
docs/qa/reports/2026-09-06-sessions-stability.md. Highlights, all from public reads rather than
internal state:

  • Long-history navigation was set up through 1,510 public CLI prompts against a real controlled ACP
    subprocess. An independent paginated HTTP read counted 3,023 distinct messages with incident0000
    and incident1509 both retained; outline returned 1,510 rows and literal search found
    incident0000 from outside the latest page.
  • Lost acknowledgment: a browser I/O fault discarded the first successful 202. Retry sent the
    byte-identical request, the server returned the same entry with replayed: true, and the
    transcript retained exactly one authored user message and one assistant reply for that identity.
  • Transport: real URL blocking produced six SSE failures, kept the visible transcript and draft, and
    showed the terminal retry marker. Unblock plus Try again returned live at the unchanged cursor
    4651 without another transcript event and without auto-sending the draft.
  • Queue trace: three public submissions, a browser removal (3→2), then a confirmed Clear all (2→0).
    The independent public queue read returned inputs: [], queue.entries: 0 of cap 10, both
    receipts survived a reload, and the transcript kept every per-entry identity.
  • Inactivity: a fresh turn stopped after 1m 9s with no work for 41s, daemon stop_cause=inactivity,
    verified and escalated, with no "Session failed" notice.
  • Scheduling: an occupied daemon deferred an unstarted one-shot and a recurring fire; both completed
    at attempt 1 after a real restart drained the queue. A capacity-bound run emitted exactly one
    scheduler.capacity_waiting_escalated at 37.5s and needs_attention at 53s with reason
    prompting, then recovered into a linked attempt 2.
  • Decisions: a real ACP permission request survived a page reload in the composer dock and resolved
    to a canonical receipt that resumed the same prompt. A native clarification answered through the
    composer completed with choice 0, fallback false.
  • Download: the browser Download wrote 6,774 bytes, all 260 lines, with the Unicode needle
    ação λ café intact (SHA256 f611bf90…).
  • Twenty-four defects were recorded across QA, the controller review and CI diagnosis, repaired in
    their owners and verified with the applicable canonical suites and real journeys. The original
    sixteen include the three final-review findings described below; five further records cover
    streaming redaction, Settings navigation, terminal sizing, CLI detach and selector focus.

Visual contracts. All 37 required rows pass with 0 blocking divergences: 29 new rows for tasks
03/05/06/07/08, plus task_01 VC-01..05 and task_02 VC-01..02 recaptured because later composer and
timeline changes invalidated their geometry. Task_01 VC-06 (settings) is reused because its visual
markup, layout and styles are unchanged; the later repair changes routing event handling. Bundles live at
.compozy/tasks/sessions-stability/evidence/visual/<task>/<VC>/ with reference, implementation,
side-by-side, diff, comparison.json and a per-row review.md. These are deterministic Storybook
captures of production components; they are evidence for visual language, not for motion cadence or
runtime behavior, and each review.md states that scope explicitly.

Automated checks. New and changed tests went into their existing canonical suites
(internal/acp, internal/session, internal/store/{globaldb,sessiondb}, internal/api/{core, httpapi,udsapi}, internal/automation, internal/scheduler, internal/cli, internal/daemon,
internal/config, web/src/**/__tests__). The complete JS side runs from the repo root: root Turbo
lint typecheck test over ./web, ./packages/ui and ./sdk/typescript, with 7,101/7,101 web
tests across 771 files in 120.56s and zero lint or type warnings
(.cache/sessions-prefix-final-gate-regenerated.log). Focused Go evidence, with logs under .cache/: the
migration and schema catalogs (internal/store/globaldb 3.884s, internal/store/sessiondb 2.127s)
and the native descriptor catalog (internal/tools/builtin 1.641s); for the review repairs, the real
SQLite/HTTP reconnect suite for the resumed-stop bug (15.011s), the HTTP/UDS empty-head log cursor
integration (12.803s / 4.784s), the queue-edit payload case (0.751s), and the compaction race
selection (3.656s).

Repairs for the CI failures. The existing daemon transport-storm (50,000 events) and
blocked-cancel regressions pass in 50.115s; real cancellation and its owning cleanup selection pass
over 20 repetitions; metadata and harness race suites plus the Windows mock-driver cross-build pass;
the existing timeline and thinking-visibility tests pass 50 cases, and the focused suites behind the
React Doctor work pass 72. For the final redaction repair, the same real one-core storm drops from 51.92s to 16.83s,
with all 50,000 chunks, exact 1.6MB durable bytes, terminal completion and one correlated degradation
record. Ten sequential benchmark samples show median reductions of 73.7% for 64KiB plaintext and
42.4% for JSON envelopes. The unchanged title/verifier browser journey passes in 19.3s.

A subsequent Linux CI failure exposed the storm watcher's receive buffer being applied after TCP
negotiation, allowing all 1.6MB to fit without application backpressure. Configuring the same 1024-byte
option before dialing makes the pressure condition effective: an isolated Linux probe admits 1.03MB,
versus 2.56MB before. Assertions, 50,000 chunks and the deadline are unchanged. The corrected real
one-core journey passes in 16.05s; runtime CI on 201591b96 passed all 268 tests, including 182 daemon
cases. This is a corrected test precondition within the existing storm incident.

All 12 terminal browser/CLI journeys pass against the fixed served build. The canonical UI suite has
761 passing cases and 264 focused Web terminal cases pass. The detach regression fails before the
production repair and passes with the race detector afterward; its unchanged real CLI golden path
passes three times with Bash, matching CI. Six combined provider/terminal journeys pass with the
repaired daemon and Web build. After extracting the selector search header, both provider/model
journeys pass again in 13.2s; all 98 selector component cases pass. The browser regression explicitly
checks composer focus after the popup closes and fails on the old served build. Each wrapper
restored web/dist byte-for-byte.

The earlier claim that five local Profiles repetitions and seven related journeys served a patched
alternative bundle is withdrawn: the fixture forced web/dist. Profiles and related Settings
journeys passed actual CI on d897e90f5 and 201591b96; the final current-head result is below.
Evidence and causal detail are retained in docs/qa/reports/2026-09-06-sessions-stability.md and the
CI defect records.

The final cancellation regression fails deterministically on the old production code; the
unchanged receipt recovery case also reproduces under one core. Both pass over 30 repetitions after
the repairs. The full session race suite passes in 136.495s, three real subprocess lifecycle journeys
in 6.012s, and both real network gateway journeys in 38.164s; the Windows build passes.
The existing terminal quote journey selects actual rendered rows with a real pointer gesture and
still fails on the old UI. On the fixed UI it passes selection, quoted source identity/text, reply,
and no-session fallback in 18.2s total. Packaged macOS clipboard, zoom and IME pass again in 12.8s
against the final Web build. Assertions and deadlines remain intact. React Doctor 0.9.13 reports
100/100 with zero warnings or errors on the final UI.

Final controller review. The integrated diff was reviewed once against the tasks 03–08 contracts.
Three findings came from this pass; each was repaired with red-then-green
evidence and re-walked in the browser where a user could see it: a replayed session_stopped frame
from history closing an active resumed
raw stream, a queued-edit refusal losing concurrently typed composer text (the browser re-walk found
a second half of the same loss — a completed send returning 409 without its actionable dispatch
code), and an empty live-only log stream synthesizing a wall-clock cursor that dropped newly
persisted older-timestamp events. Notes: .compozy/tasks/sessions-stability/memory/peer-review.md.

Not verified

The local default Fish shell delays the terminal start marker by about ten seconds and causes the
approximate journal actor assertion to fail on both the old and repaired binaries. Bash, matching
CI, passes the complete open/run/detach/journal path three times. The Fish result remains a recorded
pre-existing environment limit.

Real provider auth loss, rate limiting, and reauthentication inside the cache TTL remain
externally unverified.
The operator account is logged in and real Claude prompts succeeded, and the
Compozy native auth probe truthfully returns unknown because no auth_status_command is
configured. Reproducing the failure branch needs a separate real-provider account whose
authentication or rate limit can be controlled; no operator logout or credential mutation was
performed, and no acpmock fixture or successful-login screenshot substitutes for it. RT-018's
provider-error branch and the MS-web-provider-auth-gate canary carry that limit. The owning
protocol and cache suites still pass; they cover the code path, not the live provider behavior.

One further note on the record: several gate fixtures were reconciled along the way (bounded stream
limits, ACP saturation drain order, broadcaster sequence-reset delivery, nested folds). The
observable invariants they assert are unchanged, and no production regression was hidden behind
those updates.

React Doctor 0.9.13 reports 100/100, zero errors and zero warnings for the changed Web sources.
The same CLI first reproduced CI's 2 errors and 14 warnings (84/100); the source corrections above
resolved all 16 without suppression, config or rule changes
(.cache/sessions-final-repairs-react-doctor.json).

Screenshots

Twelve deterministic visual-contract captures of the production components at 1440×900, then four
frames from the integrated lab run and one from the daemon-served Playwright journey that covers a
CI regression. The 37-row visual-contract accounting above is unchanged; the last image is
additional regression proof, not a contract row.

Queue strip with three parked follow-ups, per-row Steer / edit / remove, Clear all, and the
⏎ steer · ⌘⏎ queue hint under a live turn.

Queue strip with three queued follow-ups

Acknowledgment lost in transit: a client-local Not confirmed row carrying the message identity, with
a Retry that replays it. The daemon queue never shows this state.

Unconfirmed send row with Retry

Clear all is explicit and inline, and the rows it is about to remove show who owns them (reviewer,
release-1.4). Keep leaves the queue untouched.

Clear all confirmation with actor attribution

Stream severed after the quiet grace: Reconnecting · 3 in the window header, transcript and
composer intact.

Reconnecting chip with retry count

Retries exhausted: Disconnected, an explicit "Live updates stopped at 09:31 AM — couldn't reconnect
after 6 tries. What you see is saved up to then." and a working Try again.

Disconnected with Try again

Send pressed while disconnected: refused as Not sent, draft preserved verbatim, no silent drop.

Send guard preserving the draft while disconnected

The single silence warning on an open session, with the countdown mirrored in the status row and a
Stop now action. Any real work signal cancels it.

Quiet warning with countdown and Stop now

Steer provenance on the messages themselves: superseded, interrupted-and-replaced, and promoted from
the queue, with the interrupted turn folded as Interrupted after 1s · replaced by your steer.

Steer provenance rows in the transcript

A turn stays working while its children run: two live child-agent rows and Working for 6m 6s · 2 agents running.

Working row with two live child agents

Stop reads as an outcome, on the turn and in the status row: You stopped after 1m 40s, with the
interrupted command marked stopped rather than failed.

Stopped turn with duration

Find-in-conversation: 1 of 4, the result list under the bar, and the landing turn opened for a match with its tool bodies revealed.

Find bar with matches and an opened fold

Message trail: one tick hovered, preview card with the sent message, its reply preview and 2 of 2.

Message trail with a hovered tick preview

Integrated lab, real ACP permission request: Working for 2m 2s · Waiting for your decision, the
dock beside the composer with Allow once / Always allow / Reject. This survived a page reload before
being answered.

Real permission dock waiting for a decision

Integrated lab, the queued-edit recovery re-walk. A held PUT on entry inq-cfa9b26f210c1465
released after the entry had already been sent returned 409 entry_dispatching with the edited text
in details.text, and the composer kept both blocks in order: the draft typed while the request was
in flight, and the recovered edit handed back by the refusal. A page reload preserved the same three
editor paragraphs, and the public queue drained to entries: 0 of cap 10.

Real queued-edit recovery after an already-sent 409

Integrated lab, real inactivity stop: Stopped after 1m 9s · no work for 41 seconds. The daemon
recorded stop_cause=inactivity, verified and escalated.

Real inactivity stop with the no-work reason

Integrated lab, find into a truncated tool payload on the 3,023-message session: 1 of 1 on line 251
of 260, Unicode needle payload needle ação λ café highlighted inside every nested clipping box.

Real find landing inside a truncated tool payload

Daemon-served Playwright journey, covering the file-mutation regression: the unresolved verification
warning stays visible below the completed answer even though the turn's work is collapsed into its
fold.

Unresolved file-mutation warning visible below a completed answer

Impact

CLI

  • compozy session input clear <session-id> (new) — explicit clear with per-entry transcript traces;
    returns inputs, cleared_count, queue_generation.
  • compozy session search <id> <query> (new) and compozy session outline <id> (new) — full-history
    transcript search and the operator-message outline.
  • compozy session status grows supervision.work_signals, supervision.sources,
    supervision.quiet_warning and the queue: {entries, cap} summary.
  • compozy session events --follow now supplies a bounded 200-event initial window.
  • Paper cut fixed: the session prompt examples advertised --expected-turn-id while help exposed
    --expected-turn.

HTTP / UDS (same routes on both transports)

  • DELETE …/sessions/{id}/prompt/queue (new) — explicit clear-all, traced per entry.
  • GET …/sessions/{id}/transcript/search and GET …/sessions/{id}/transcript/outline (new) —
    read-only, workspace-scoped. Search matches carry additive part_index and field hints; the
    entry cursor stays the result identity and older readers may ignore the hints.
  • Session resource gains supervision (work signals, sources, quiet warning) and the queue summary.
  • Stream: a raw initial request must now specify a bounded limit; an unbounded request is rejected.
    An explicit after_sequence (including zero) plus limit reads the next matching events in
    ascending order instead of the most recent ones. New reset reason cursor_expired. New
    delivery-only frame stream.consumer_degraded (after_sequence, through_sequence,
    refresh: true; no id, cannot advance the replay cursor). A reconnect at the current watermark
    receives an empty transcript_delta with has_more: false.
  • Scheduler status: SchedulerCountersPayload splits wake_attempts / wake_skipped /
    wake_succeeded / wake_failed and adds capacity_waiting_runs, spawn_requested,
    needs_attention, last_cycle_at.

Native tools

  • compozy__session_inputs_clear, compozy__session_search, compozy__session_outline (new).
  • compozy__session_describe gains the supervision block and queue summary. Descriptors and the
    catalog digest are regenerated.

Canonical events — session.queue_cleared, session.queue_clear_failed,
session.supervision_warning, session.supervision_stopped, session.supervision_source_error,
session.turn_quiesced, scheduler.capacity_waiting_escalated, and the
transcript_marker.queue_cleared marker.

config.toml

  • [session.supervision]: quiet_after (default 30m) and stop_grace (default 10m) replace
    inactivity_warning_after / inactivity_timeout. Per SD-013 the released keys stay readable and
    writable through the v0.4 window with a deprecation warning and are removed in v0.5.0. A file
    using only the legacy keys keeps their independent absolute timers, including disabled warnings and
    equal thresholds; setting either new key opts into the new zero semantics, and explicit new values
    win over the translated legacy value. Translation lives at the loader boundary
    (internal/config/supervision_compatibility.go), not in the manager.
  • [network.live] max_total_wall_time default changes from 30m to 0 (aggregate wall budget off by
    default). Per-wake wall time, wake count, tokens and depth stay enforced.

SQLite (append-only, lossless)

  • globaldb 00104 — session_input_clear_traces table plus its pending index, so a clear survives a
    crash between the queue write and its projection.
  • globaldb 00105 — session_input_queue rebuild adding synthetic_prompt_json (durable synthetic
    follow-ups) and the active-steer uniqueness index; every existing row is copied.
  • globaldb 00106 — automation_scheduler_state.deferred_until for durable defer/drain.
  • globaldb 00107 — event_summaries rebuild to a monotonic seq INTEGER PRIMARY KEY AUTOINCREMENT
    with id kept unique. The migration preserves the pre-migration rowid cursor including retained
    gaps, so existing numeric log cursors keep working and retention/VACUUM/reopen never reuse a
    retired sequence.
  • sessiondb 00007 — (kind, start_sequence) index for outline and role-scoped search.
  • sessiondb 00008 — display backfill for user/system message timestamps and settled tool results,
    from the authoritative event ledger. It rewrites no event bytes, identities, archives or sequence
    fences.

Web — queue strip with in-row editor, owner attribution, cap state and clear confirmation;
unconfirmed row with Retry; transport chip and notices (grace, reconnecting, disconnected, paused,
send guard); quiet warning notice and status row; live tool row, tool group row, turn fold row,
thinking row, steer receipts and user steer provenance; find bar with Highlight API marks;
message trail; one scroll owner with a page window and viewport host for bounded memory on huge
transcripts; smooth streaming preference. Two superseded components
(session-composer-queued-prompts, session-working-row) were deleted with their consumers.

Docs (packages/site) — new cli/session/search, cli/session/outline,
cli/session/input/clear; updated sessions/control-plane, sessions/events, sessions/lifecycle,
cli/session/{index,prompt}, cli/session/input/{index,steer}, configuration/config-toml.
Official skill: skills/compozy/references/runtime-operations.md gains explicit queue-clear
semantics, prompt-identity rules and a silence-supervision / scheduling-pressure section.

QA tree — new charter CH-session-history-navigation, the run report
docs/qa/reports/2026-09-06-sessions-stability.md, 24 docs/qa/bugs/BUG-20260906-* records, and
updates to the affected scenarios (RT-018, RT-019, RT-session-live-steer,
RT-session-prompt-cancel, RT-session-native-stop, RT-visible-session-streaming,
RT-session-context-rebuild, ET-web-session-transcript-calm-grammar,
ET-web-session-permission-dock, MS-web-provider-auth-gate, TA-schedule-catchup-overlap) plus
journey J-14.

Compatibility regimes and delete targets for this program are recorded once in _spec.md's Compozy
Impact Audit; this PR does not restate them.


Local gate and delivery

  • Local gate: every affected lane passes at tree fingerprint
    15fb49715cc5967984d5ef897aa288f8a0bd5236, still current after commit. Codegen: 33s; Go lint:
    35s and zero issues; Go race: 13s using valid package evidence from the preceding full pass
    (373s, including session 141.637s and daemon 155.516s). Go SDK, desktop, UI and TypeScript SDK pass;
    Web: 7,101 tests in 771 files, 123.91s. Source-size and Go source-policy pass.
    The configured commit hook ran all checks with stash and revert disabled; the checked tree
    fingerprint remains current. Evidence: .cache/sessions-stop-selection-delivery-gate.log
    and .cache/sessions-stop-selection-delivery-gate-status.log.
  • Delivery head: ea4db72734b780c4d8a0a27870d928fdc9b5f746. The working tree is clean and the
    remote PR head matches. Images 01–16 retain capture key ca00890294bc; image 17 retains
    91bc7b2b3. All 17 verified URLs are preserved.
  • Required CI: all checks are terminal for ea4db72734b780c4d8a0a27870d928fdc9b5f746:
    31 passed, 17 conditionally skipped, zero failed or pending. CI run 34065173749
    passed all eight Go race shards, all four Web E2E shards, runtime and desktop E2E, frontend,
    codegen, static checks and both aggregate gates. React Doctor and the site preview also passed.
    Terminal evidence: .cache/sessions-stop-selection-ci-green.json.
  • New or changed behavior is covered by the owning tests and actual journeys described above.
  • Codex implemented the backend and final integration repairs, and reviewed the earlier
    Herdr-orchestrated Claude Fable frontend changes. Claude Code Opus prepared the initial detailed
    description and screenshot publication; Codex updated the final evidence and delivery metadata.

This PR remains draft. The real-provider auth-loss, rate-limit and reauthentication-within-cache-TTL
branch remains externally unverified; passing CI does not establish that live-provider behavior.

Checkpoint via cy-loop-tasks (iteration 82, phase D review round 1).

Deliver tasks03-08: manageable durable queue, bounded ACP delivery, work-signal supervision, truthful replay, calm transcripts and full-history navigation. Complete final integrated QA and repair the confirmed findings. Real-provider auth-loss/rate-limit validation remains externally unverified.

Co-Authored-By: Codex <[email protected]>
@vercel

vercel Bot commented Sep 6, 2026 •

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated
compozy-site Ready Ready Preview Sep 6, 2026 10:53pm UTC

Request Review

@coderabbitai

coderabbitai Bot commented Sep 6, 2026 •

Copy link
Copy Markdown
Contributor

Important

Review skipped

Too many files!

This PR contains 589 files, which is 289 over the limit of 300.

To get a review, reduce the PR to 300 files or fewer by splitting it into smaller PRs or changing its base branch.

Usage-priced reviews support at most 300 files.

⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Team

Run ID: 1dad5eb3-cbd7-42f6-9806-07d1964bfdc6

📥 Commits

Reviewing files that changed from the base of the PR and between ca00890 and ea4db72.

⛔ Files ignored due to path filters (98)
  • docs/qa/bugs/BUG-20260906-cancel-exited-session-race.md is excluded by !**/*.md
  • docs/qa/bugs/BUG-20260906-compaction-repeat-boundaries.md is excluded by !**/*.md
  • docs/qa/bugs/BUG-20260906-compaction-startup-hooks.md is excluded by !**/*.md
  • docs/qa/bugs/BUG-20260906-deferred-schedule-drain.md is excluded by !**/*.md
  • docs/qa/bugs/BUG-20260906-empty-log-head-cursor.md is excluded by !**/*.md
  • docs/qa/bugs/BUG-20260906-find-specialized-tool-field.md is excluded by !**/*.md
  • docs/qa/bugs/BUG-20260906-hidden-terminal-pane-minimum-vote.md is excluded by !**/*.md
  • docs/qa/bugs/BUG-20260906-inactivity-stop-presentation.md is excluded by !**/*.md
  • docs/qa/bugs/BUG-20260906-injected-guidance-missing-history.md is excluded by !**/*.md
  • docs/qa/bugs/BUG-20260906-native-profile-agent.md is excluded by !**/*.md
  • docs/qa/bugs/BUG-20260906-promoted-turn-missing-live.md is excluded by !**/*.md
  • docs/qa/bugs/BUG-20260906-queue-edit-concurrent-draft.md is excluded by !**/*.md
  • docs/qa/bugs/BUG-20260906-raw-stream-resumed-stop.md is excluded by !**/*.md
  • docs/qa/bugs/BUG-20260906-resume-profile-agent.md is excluded by !**/*.md
  • docs/qa/bugs/BUG-20260906-runtime-selector-closing-focus.md is excluded by !**/*.md
  • docs/qa/bugs/BUG-20260906-session-header-transport.md is excluded by !**/*.md
  • docs/qa/bugs/BUG-20260906-session-reconnect-current-watermark.md is excluded by !**/*.md
  • docs/qa/bugs/BUG-20260906-settings-nav-stale-open-history.md is excluded by !**/*.md
  • docs/qa/bugs/BUG-20260906-stop-receipt-outcome-race.md is excluded by !**/*.md
  • docs/qa/bugs/BUG-20260906-stopped-history-schema-upgrade.md is excluded by !**/*.md
  • docs/qa/bugs/BUG-20260906-stopped-session-navigation.md is excluded by !**/*.md
  • docs/qa/bugs/BUG-20260906-stream-redaction-storm-timeout.md is excluded by !**/*.md
  • docs/qa/bugs/BUG-20260906-terminal-detach-close-race.md is excluded by !**/*.md
  • docs/qa/bugs/BUG-20260906-terminal-selection-resize-loop.md is excluded by !**/*.md
  • docs/qa/charters/CH-session-history-navigation.md is excluded by !**/*.md
  • docs/qa/journeys/J-14-read-a-finished-transcript.md is excluded by !**/*.md
  • docs/qa/reports/2026-09-06-sessions-stability.md is excluded by !**/*.md
  • docs/qa/scenarios/ET-profile-web-settings-lifecycle-dialogs.md is excluded by !**/*.md
  • docs/qa/scenarios/ET-terminal-browser-lifecycle.md is excluded by !**/*.md
  • docs/qa/scenarios/ET-terminal-cli-public-contract.md is excluded by !**/*.md
  • docs/qa/scenarios/ET-terminal-journal-recording.md is excluded by !**/*.md
  • docs/qa/scenarios/ET-terminal-window-native-flow.md is excluded by !**/*.md
  • docs/qa/scenarios/ET-web-runtime-selector-minimal-slider.md is excluded by !**/*.md
  • docs/qa/scenarios/ET-web-session-composer-text-entry.md is excluded by !**/*.md
  • docs/qa/scenarios/ET-web-session-permission-dock.md is excluded by !**/*.md
  • docs/qa/scenarios/ET-web-session-transcript-calm-grammar.md is excluded by !**/*.md
  • docs/qa/scenarios/MS-web-provider-auth-gate.md is excluded by !**/*.md
  • docs/qa/scenarios/RT-018.md is excluded by !**/*.md
  • docs/qa/scenarios/RT-019.md is excluded by !**/*.md
  • docs/qa/scenarios/RT-session-context-rebuild.md is excluded by !**/*.md
  • docs/qa/scenarios/RT-session-lifecycle-affordances.md is excluded by !**/*.md
  • docs/qa/scenarios/RT-session-live-steer.md is excluded by !**/*.md
  • docs/qa/scenarios/RT-session-native-stop.md is excluded by !**/*.md
  • docs/qa/scenarios/RT-session-prompt-cancel.md is excluded by !**/*.md
  • docs/qa/scenarios/RT-visible-session-streaming.md is excluded by !**/*.md
  • docs/qa/scenarios/TA-schedule-catchup-overlap.md is excluded by !**/*.md
  • extensions/spec-cycle/skills/cy-create-tasks/SKILL.md is excluded by !**/*.md
  • extensions/spec-cycle/skills/cy-execute-task/SKILL.md is excluded by !**/*.md
  • internal/sandbox/daytona/sidecar_assets/compozy-daytona-sidecar-linux-amd64.gz is excluded by !**/*.gz, !**/*.gz
  • internal/sandbox/daytona/sidecar_assets/compozy-daytona-sidecar-linux-arm64.gz is excluded by !**/*.gz, !**/*.gz
  • internal/store/globaldb/schema/migrations/atlas.sum is excluded by !**/*.sum, !**/*.sum
  • internal/store/sessiondb/schema/migrations/atlas.sum is excluded by !**/*.sum, !**/*.sum
  • internal/testutil/acpmock/testdata/transport_storm_fixture.json is excluded by !**/*.json
  • internal/tools/builtin/testdata/native-tool-catalog.json is excluded by !**/*.json
  • openapi/compozy.json is excluded by !**/*.json
  • packages/site/content/docs/cli/session/index.mdx is excluded by !**/*.mdx
  • packages/site/content/docs/cli/session/input/clear.mdx is excluded by !**/*.mdx
  • packages/site/content/docs/cli/session/input/index.mdx is excluded by !**/*.mdx
  • packages/site/content/docs/cli/session/input/meta.json is excluded by !**/*.json
  • packages/site/content/docs/cli/session/input/steer.mdx is excluded by !**/*.mdx
  • packages/site/content/docs/cli/session/meta.json is excluded by !**/*.json
  • packages/site/content/docs/cli/session/outline.mdx is excluded by !**/*.mdx
  • packages/site/content/docs/cli/session/prompt.mdx is excluded by !**/*.mdx
  • packages/site/content/docs/cli/session/search.mdx is excluded by !**/*.mdx
  • packages/site/content/docs/configuration/config-toml.mdx is excluded by !**/*.mdx
  • packages/site/content/docs/sessions/control-plane.mdx is excluded by !**/*.mdx
  • packages/site/content/docs/sessions/events.mdx is excluded by !**/*.mdx
  • packages/site/content/docs/sessions/lifecycle.mdx is excluded by !**/*.mdx
  • packages/ui/src/components/custom/stories/chat-message-bubble.stories.tsx is excluded by !**/*.stories.tsx
  • packages/ui/src/components/custom/stories/tool-call-row.stories.tsx is excluded by !**/*.stories.tsx
  • sdk/typescript/src/generated/contracts.ts is excluded by !**/generated/**, !**/generated/**
  • skills/compozy/references/runtime-operations.md is excluded by !**/*.md
  • web/e2e/__tests__/session-provider-override.spec.ts is excluded by !web/e2e/**
  • web/e2e/__tests__/terminal-agent.spec.ts is excluded by !web/e2e/**
  • web/e2e/__tests__/terminal.spec.ts is excluded by !web/e2e/**
  • web/e2e/fixtures/terminal-watcher.ts is excluded by !**/fixtures/**, !web/e2e/**
  • web/src/generated/compozy-openapi.d.ts is excluded by !**/generated/**, !**/generated/**, !**/*.d.ts
  • web/src/systems/agent/components/stories/agent-sessions-list.stories.tsx is excluded by !**/*.stories.tsx
  • web/src/systems/os/components/stories/attention-surfaces.stories.tsx is excluded by !**/*.stories.tsx
  • web/src/systems/os/components/stories/session-catalog-contract.stories.tsx is excluded by !**/*.stories.tsx
  • web/src/systems/os/components/stories/session-signal-contract.stories.tsx is excluded by !**/*.stories.tsx
  • web/src/systems/profiles/components/stories/profile-aggregate-contracts.stories.tsx is excluded by !**/*.stories.tsx
  • web/src/systems/session/components/assistant-ui/stories/session-composer-feedback-note.stories.tsx is excluded by !**/*.stories.tsx
  • web/src/systems/session/components/assistant-ui/stories/session-thread-queue.stories.tsx is excluded by !**/*.stories.tsx
  • web/src/systems/session/components/assistant-ui/stories/session-thread.stories.tsx is excluded by !**/*.stories.tsx
  • web/src/systems/session/components/assistant-ui/stories/session-working-row.stories.tsx is excluded by !**/*.stories.tsx
  • web/src/systems/session/components/stories/session-find-bar.stories.tsx is excluded by !**/*.stories.tsx
  • web/src/systems/session/components/stories/session-message-trail.stories.tsx is excluded by !**/*.stories.tsx
  • web/src/systems/session/components/stories/session-quiet-status-row.stories.tsx is excluded by !**/*.stories.tsx
  • web/src/systems/session/components/stories/session-quiet-warning-notice.stories.tsx is excluded by !**/*.stories.tsx
  • web/src/systems/session/components/stories/session-sidebar.stories.tsx is excluded by !**/*.stories.tsx
  • web/src/systems/session/components/stories/session-thinking-row.stories.tsx is excluded by !**/*.stories.tsx
  • web/src/systems/session/components/stories/session-transport-chip.stories.tsx is excluded by !**/*.stories.tsx
  • web/src/systems/session/components/stories/sessions-stability-connection.stories.tsx is excluded by !**/*.stories.tsx
  • web/src/systems/session/components/stories/sessions-stability-find-trail.stories.tsx is excluded by !**/*.stories.tsx
  • web/src/systems/session/components/stories/sessions-stability-quiet-timeline.stories.tsx is excluded by !**/*.stories.tsx
  • web/src/systems/session/components/stories/sessions-stability-timeline.stories.tsx is excluded by !**/*.stories.tsx
  • web/src/systems/session/components/stories/sessions-stability-working.stories.tsx is excluded by !**/*.stories.tsx
📒 Files selected for processing (589)
  • desktop/e2e/_electron/__tests__/shell.spec.ts
  • internal/acp/agent_process_ingest.go
  • internal/acp/agent_process_prompt.go
  • internal/acp/client_integration_test.go
  • internal/acp/client_permission_test.go
  • internal/acp/client_prompt_contract_test.go
  • internal/acp/event_broadcast.go
  • internal/acp/event_delivery_test.go
  • internal/acp/event_ingest.go
  • internal/acp/event_ingest_text.go
  • internal/acp/handlers.go
  • internal/acp/handlers_test.go
  • internal/acp/permission_pending.go
  • internal/acp/types_test.go
  • internal/api/contract/authored_context_heartbeat.go
  • internal/api/contract/prompt.go
  • internal/api/contract/prompt_input.go
  • internal/api/contract/prompt_input_test.go
  • internal/api/contract/scheduler.go
  • internal/api/contract/scheduler_counters.go
  • internal/api/contract/session_input_clear.go
  • internal/api/contract/session_runtime_payloads.go
  • internal/api/contract/session_transcript.go
  • internal/api/core/authored_context_access.go
  • internal/api/core/authored_context_session_handlers.go
  • internal/api/core/conversions.go
  • internal/api/core/conversions_parsers_test.go
  • internal/api/core/error_paths_test.go
  • internal/api/core/errors_diagnostic_payload.go
  • internal/api/core/errors_session_input.go
  • internal/api/core/errors_test.go
  • internal/api/core/handlers_test.go
  • internal/api/core/interfaces_session.go
  • internal/api/core/logs_stream.go
  • internal/api/core/parsers.go
  • internal/api/core/scheduler.go
  • internal/api/core/session_input.go
  • internal/api/core/session_manager_stub_test.go
  • internal/api/core/session_navigation.go
  • internal/api/core/session_stop.go
  • internal/api/core/session_stream.go
  • internal/api/core/session_stream_frames.go
  • internal/api/core/session_stream_internal_test.go
  • internal/api/core/session_stream_query.go
  • internal/api/core/session_stream_transcript.go
  • internal/api/core/session_workspace.go
  • internal/api/core/sse.go
  • internal/api/core/tasks_integration_test.go
  • internal/api/core/tasks_terminal_integration_test.go
  • internal/api/core/worktrees_test.go
  • internal/api/httpapi/handlers_test.go
  • internal/api/httpapi/httpapi_integration_test.go
  • internal/api/httpapi/session_routes.go
  • internal/api/httpapi/stream_helpers_test.go
  • internal/api/spec/operations.go
  • internal/api/spec/registry_session_input_clear.go
  • internal/api/spec/registry_sessions.go
  • internal/api/spec/schema_enum_registry.go
  • internal/api/spec/session_navigation.go
  • internal/api/spec/session_transcript.go
  • internal/api/testutil/session_stub.go
  • internal/api/testutil/session_stub_prompt.go
  • internal/api/udsapi/handlers_test.go
  • internal/api/udsapi/session_routes.go
  • internal/api/udsapi/stream_helpers_test.go
  • internal/api/udsapi/transport_parity_integration_test.go
  • internal/api/udsapi/udsapi_integration_test.go
  • internal/attachments/sweeper_test.go
  • internal/automation/dispatch.go
  • internal/automation/dispatch_context.go
  • internal/automation/dispatch_helpers.go
  • internal/automation/dispatch_reservation.go
  • internal/automation/dispatch_task_run.go
  • internal/automation/manager_jobs.go
  • internal/automation/model/types.go
  • internal/automation/model/validate.go
  • internal/automation/resource_overlay_gc.go
  • internal/automation/resource_projection_jobs.go
  • internal/automation/resource_projection_triggers.go
  • internal/automation/schedule.go
  • internal/automation/schedule_claim.go
  • internal/automation/schedule_deferral.go
  • internal/automation/schedule_execution.go
  • internal/automation/schedule_integration_test.go
  • internal/automation/schedule_reconcile.go
  • internal/automation/schedule_registry.go
  • internal/automation/schedule_test.go
  • internal/automation/store_contract.go
  • internal/cli/cli_integration_test.go
  • internal/cli/client_session_api.go
  • internal/cli/client_session_events.go
  • internal/cli/client_session_navigation.go
  • internal/cli/client_session_types.go
  • internal/cli/client_sessions.go
  • internal/cli/client_stream_values.go
  • internal/cli/client_terminal_stream.go
  • internal/cli/client_terminal_stream_test.go
  • internal/cli/client_test.go
  • internal/cli/helpers_test.go
  • internal/cli/session_command.go
  • internal/cli/session_event_output.go
  • internal/cli/session_input.go
  • internal/cli/session_input_clear.go
  • internal/cli/session_input_output.go
  • internal/cli/session_navigation.go
  • internal/cli/session_prompt_events.go
  • internal/cli/session_prompt_output.go
  • internal/cli/session_test.go
  • internal/config/config_agent_session.go
  • internal/config/config_agent_validation.go
  • internal/config/config_test.go
  • internal/config/merge.go
  • internal/config/merge_session.go
  • internal/config/merge_test.go
  • internal/config/network_config.go
  • internal/config/supervision_compatibility.go
  • internal/config/tool_surface.go
  • internal/daemon/boot_components.go
  • internal/daemon/boot_session_repair.go
  • internal/daemon/boot_session_supervision.go
  • internal/daemon/daemon_acpmock_faults_integration_test.go
  • internal/daemon/daemon_attention_e2e_integration_test.go
  • internal/daemon/daemon_test.go
  • internal/daemon/heartbeat_wake_runtime_test.go
  • internal/daemon/loop_action_runtime.go
  • internal/daemon/loop_coordinator_activation.go
  • internal/daemon/loop_goal_managed_runtime_integration_test.go
  • internal/daemon/native_session_input.go
  • internal/daemon/native_session_input_clear.go
  • internal/daemon/native_session_navigation.go
  • internal/daemon/native_tool_binding_groups.go
  • internal/daemon/native_tool_bindings.go
  • internal/daemon/native_tool_network_session_input.go
  • internal/daemon/native_tool_session_calls.go
  • internal/daemon/native_tools_test.go
  • internal/daemon/runtime_workers.go
  • internal/daemon/scheduler_runtime.go
  • internal/daemon/scheduler_waker.go
  • internal/daemon/session_work_sources.go
  • internal/daemon/tool_policy_resolver.go
  • internal/events/names.go
  • internal/events/registry_base.go
  • internal/extension/host_api_authored_context_session.go
  • internal/extension/host_api_test.go
  • internal/loop/coordinator_control_test.go
  • internal/loop/coordinator_wait.go
  • internal/loop/service_cancellation.go
  • internal/loop/service_integration_test.go
  • internal/loop/service_node_requeue.go
  • internal/loop/session_work.go
  • internal/network/participation/bounds.go
  • internal/network/participation/participation_test.go
  • internal/network/participation/validation.go
  • internal/observe/event_content.go
  • internal/redact/engine.go
  • internal/redact/patterns.go
  • internal/redact/redact.go
  • internal/redact/redact_test.go
  • internal/retention/periodic.go
  • internal/scheduler/scheduler_integration_test.go
  • internal/scheduler/scheduler_test.go
  • internal/scheduler/selection.go
  • internal/scheduler/starvation.go
  • internal/scheduler/types.go
  • internal/scheduler/wake_dispatch.go
  • internal/session/additional_test.go
  • internal/session/badge.go
  • internal/session/compaction.go
  • internal/session/inputqueue/clear.go
  • internal/session/inputqueue/synthetic.go
  • internal/session/manager.go
  • internal/session/manager_busy_input.go
  • internal/session/manager_busy_input_test.go
  • internal/session/manager_busy_input_types.go
  • internal/session/manager_create_accepted.go
  • internal/session/manager_empty_interrupt.go
  • internal/session/manager_hooks_compaction_test.go
  • internal/session/manager_hooks_prompt_test.go
  • internal/session/manager_input_clear.go
  • internal/session/manager_input_clear_events.go
  • internal/session/manager_input_dispatch.go
  • internal/session/manager_integration_test.go
  • internal/session/manager_lifecycle_contract_test.go
  • internal/session/manager_managed_input_submit.go
  • internal/session/manager_pending_input.go
  • internal/session/manager_prompt_admission.go
  • internal/session/manager_prompt_attachments.go
  • internal/session/manager_prompt_batch.go
  • internal/session/manager_prompt_contract_test.go
  • internal/session/manager_prompt_delivery.go
  • internal/session/manager_prompt_lifetime_test.go
  • internal/session/manager_prompt_pump.go
  • internal/session/manager_prompt_state.go
  • internal/session/manager_prompt_submit.go
  • internal/session/manager_resume.go
  • internal/session/manager_start_launch_accepted.go
  • internal/session/manager_steer.go
  • internal/session/manager_steer_completion.go
  • internal/session/manager_stop_finalization.go
  • internal/session/manager_stop_receipt.go
  • internal/session/manager_stop_terminal_event.go
  • internal/session/manager_synthetic_prompt_test.go
  • internal/session/manager_test.go
  • internal/session/manager_types.go
  • internal/session/prompt_activity.go
  • internal/session/prompt_activity_health.go
  • internal/session/prompt_activity_heartbeat.go
  • internal/session/prompt_activity_test.go
  • internal/session/prompt_activity_timeout.go
  • internal/session/prompt_cancel.go
  • internal/session/prompt_chunk_coalescer.go
  • internal/session/query.go
  • internal/session/query_recorder.go
  • internal/session/query_test.go
  • internal/session/resume_repair.go
  • internal/session/resume_repair_test.go
  • internal/session/session.go
  • internal/session/session_busy_input.go
  • internal/session/session_info.go
  • internal/session/session_pending.go
  • internal/session/session_prompt_state.go
  • internal/session/session_skill_invocations.go
  • internal/session/session_stop_state.go
  • internal/session/session_stream_broadcast.go
  • internal/session/session_stream_broadcast_test.go
  • internal/session/session_supervision.go
  • internal/session/stop_cause.go
  • internal/session/stop_events.go
  • internal/session/stop_operation.go
  • internal/session/stop_operation_start.go
  • internal/session/stop_reason.go
  • internal/session/stop_recovered_finalization.go
  • internal/session/synthetic_prompt.go
  • internal/session/synthetic_prompt_queue.go
  • internal/session/transcript_navigation.go
  • internal/session/turn_stop.go
  • internal/session/turn_stop_events.go
  • internal/session/work_signal_progress.go
  • internal/session/work_signal_registry.go
  • internal/session/work_signals.go
  • internal/session/work_supervision.go
  • internal/session/work_supervision_events.go
  • internal/store/globaldb/automation_sqlc_mapping.go
  • internal/store/globaldb/global_db_automation_deferral.go
  • internal/store/globaldb/global_db_automation_scheduler.go
  • internal/store/globaldb/global_db_automation_test.go
  • internal/store/globaldb/global_db_extra_test.go
  • internal/store/globaldb/global_db_loop_session_work.go
  • internal/store/globaldb/global_db_loop_test.go
  • internal/store/globaldb/global_db_loop_wait_backfill.go
  • internal/store/globaldb/global_db_loop_wait_escalation_apply.go
  • internal/store/globaldb/global_db_network_admission.go
  • internal/store/globaldb/global_db_network_conversation_repository_test.go
  • internal/store/globaldb/global_db_network_settlement.go
  • internal/store/globaldb/global_db_notification_preset.go
  • internal/store/globaldb/global_db_observe.go
  • internal/store/globaldb/global_db_session_input_clear.go
  • internal/store/globaldb/global_db_session_input_queue.go
  • internal/store/globaldb/global_db_session_input_queue_mutation.go
  • internal/store/globaldb/global_db_session_input_queue_scan.go
  • internal/store/globaldb/global_db_session_input_queue_terminal.go
  • internal/store/globaldb/global_db_session_input_queue_test.go
  • internal/store/globaldb/global_db_session_input_synthetic.go
  • internal/store/globaldb/global_db_session_prompt_admission_queue.go
  • internal/store/globaldb/global_db_session_steer.go
  • internal/store/globaldb/global_db_test.go
  • internal/store/globaldb/queries/automation_scheduler_catalog.sql
  • internal/store/globaldb/queries/loop_lifecycle.sql
  • internal/store/globaldb/queries/session_input.sql
  • internal/store/globaldb/queries/session_input_clear.sql
  • internal/store/globaldb/schema/definitions/20_sessions.sql
  • internal/store/globaldb/schema/definitions/30_automation.sql
  • internal/store/globaldb/schema/definitions/40_observability.sql
  • internal/store/globaldb/schema/migrations/00104_schema.sql
  • internal/store/globaldb/schema/migrations/00105_schema.sql
  • internal/store/globaldb/schema/migrations/00106_schema.sql
  • internal/store/globaldb/schema/migrations/00107_schema.sql
  • internal/store/globaldb/sqlcgen/automation_scheduler_catalog.sql.go
  • internal/store/globaldb/sqlcgen/loop_lifecycle.sql.go
  • internal/store/globaldb/sqlcgen/models.go
  • internal/store/globaldb/sqlcgen/session_input.sql.go
  • internal/store/globaldb/sqlcgen/session_input_clear.sql.go
  • internal/store/session_input_clear.go
  • internal/store/session_input_errors.go
  • internal/store/session_input_queue.go
  • internal/store/session_input_synthetic.go
  • internal/store/session_prompt_admission.go
  • internal/store/sessiondb/event_coalescer.go
  • internal/store/sessiondb/event_query.go
  • internal/store/sessiondb/queries/session_core.sql
  • internal/store/sessiondb/queries/transcript_projection.sql
  • internal/store/sessiondb/read_only_pool_lease.go
  • internal/store/sessiondb/schema/migrations/00007_schema.sql
  • internal/store/sessiondb/schema/migrations/00008_projection_display.sql
  • internal/store/sessiondb/schema/schema.sql
  • internal/store/sessiondb/session_conversation_rewind.go
  • internal/store/sessiondb/session_db_integration_test.go
  • internal/store/sessiondb/session_db_test.go
  • internal/store/sessiondb/session_event_archive.go
  • internal/store/sessiondb/session_event_redaction.go
  • internal/store/sessiondb/session_writer.go
  • internal/store/sessiondb/session_writer_coalescing.go
  • internal/store/sessiondb/sqlcgen/session_core.sql.go
  • internal/store/sessiondb/sqlcgen/transcript_projection.sql.go
  • internal/store/sessiondb/transcript_navigation.go
  • internal/store/sessiondb/transcript_query.go
  • internal/store/sqlite_checkpoint.go
  • internal/store/types_event.go
  • internal/store/types_event_summary.go
  • internal/task/manager.go
  • internal/task/scheduler_controls_test.go
  • internal/task/scheduler_counters.go
  • internal/task/scheduler_status.go
  • internal/task/starvation_events.go
  • internal/task/types_mutation.go
  • internal/testutil/acpmock/cmd/acpmock-driver/main_test.go
  • internal/testutil/acpmock/cmd/acpmock-driver/prompt.go
  • internal/testutil/acpmock/cmd/acpmock-driver/prompt_burst.go
  • internal/testutil/acpmock/cmd/acpmock-driver/sandbox.go
  • internal/testutil/acpmock/fixture_step_validation.go
  • internal/testutil/acpmock/fixture_types.go
  • internal/testutil/e2e/config_seed_test.go
  • internal/testutil/e2e/mock_agents.go
  • internal/testutil/e2e/runtime_harness_http_until_test.go
  • internal/toolmeta/native_entries.go
  • internal/toolmeta/preview_test.go
  • internal/toolmeta/registry_test.go
  • internal/toolruntime/registry.go
  • internal/toolruntime/registry_interrupt.go
  • internal/toolruntime/registry_lifecycle.go
  • internal/toolruntime/registry_observation.go
  • internal/toolruntime/registry_reconcile.go
  • internal/toolruntime/registry_state.go
  • internal/toolruntime/registry_test.go
  • internal/tools/artifact_sweeper_test.go
  • internal/tools/builtin/builtin_test.go
  • internal/tools/builtin/session_input_clear.go
  • internal/tools/builtin/session_navigation.go
  • internal/tools/builtin/sessions.go
  • internal/tools/builtin/toolsets.go
  • internal/tools/builtin_ids.go
  • internal/transcript/agent_event_codec.go
  • internal/transcript/markers.go
  • internal/transcript/navigation.go
  • internal/transcript/projection_types.go
  • internal/transcript/transcript_ui_projection_test.go
  • internal/transcript/ui_input_messages.go
  • internal/transcript/ui_messages_tool.go
  • internal/transcript/ui_messages_tool_result_test.go
  • packages/ui/src/components/custom/__tests__/tool-call-row.test.tsx
  • packages/ui/src/components/custom/tool-call-row-section.tsx
  • packages/ui/src/components/custom/tool-call-row.tsx
  • packages/ui/src/components/custom/tool-call-status-icon.tsx
  • packages/ui/src/components/terminal/__tests__/terminal-view.test.tsx
  • packages/ui/src/components/terminal/use-terminal-instance.ts
  • sdk/go/contracts/types_022_gen.go
  • sdk/go/contracts/types_023_gen.go
  • sdk/go/contracts/types_024_gen.go
  • sdk/go/contracts/types_025_gen.go
  • sdk/go/contracts/types_026_gen.go
  • sdk/go/contracts/types_027_gen.go
  • sdk/go/contracts/types_028_gen.go
  • sdk/go/contracts/types_029_gen.go
  • sdk/go/contracts/types_030_gen.go
  • sdk/go/contracts/types_031_gen.go
  • web/src/components/assistant-ui/__tests__/session-thread-navigation.test.tsx
  • web/src/components/assistant-ui/__tests__/session-thread-status.logic.test.ts
  • web/src/components/assistant-ui/__tests__/session-thread.test.tsx
  • web/src/components/assistant-ui/__tests__/session-timeline.logic.test.ts
  • web/src/components/assistant-ui/__tests__/timeline-scroll-anchoring.test.ts
  • web/src/components/assistant-ui/__tests__/use-session-find-highlights.test.tsx
  • web/src/components/assistant-ui/hooks/session-busy-input-store.ts
  • web/src/components/assistant-ui/hooks/session-navigation-target-context.ts
  • web/src/components/assistant-ui/hooks/thread-scroll-context.ts
  • web/src/components/assistant-ui/hooks/thread-scroll-landing.ts
  • web/src/components/assistant-ui/hooks/thread-scroll-store.ts
  • web/src/components/assistant-ui/hooks/use-assistant-message-timeline.ts
  • web/src/components/assistant-ui/hooks/use-session-busy-input-actions.ts
  • web/src/components/assistant-ui/hooks/use-session-composer-controller.ts
  • web/src/components/assistant-ui/hooks/use-session-composer-state.ts
  • web/src/components/assistant-ui/hooks/use-session-find-highlights.ts
  • web/src/components/assistant-ui/hooks/use-session-navigation-host.ts
  • web/src/components/assistant-ui/hooks/use-session-prompt-dispatch.ts
  • web/src/components/assistant-ui/hooks/use-session-thread-live-data.ts
  • web/src/components/assistant-ui/hooks/use-thinking-guard-elapsed.ts
  • web/src/components/assistant-ui/hooks/use-thread-page-window.ts
  • web/src/components/assistant-ui/hooks/use-thread-scroll-controller.ts
  • web/src/components/assistant-ui/hooks/use-thread-viewport.ts
  • web/src/components/assistant-ui/message-actions.logic.ts
  • web/src/components/assistant-ui/session-assistant-message.tsx
  • web/src/components/assistant-ui/session-composer-action-row.tsx
  • web/src/components/assistant-ui/session-composer-feedback-note.tsx
  • web/src/components/assistant-ui/session-composer-queued-prompts.logic.ts
  • web/src/components/assistant-ui/session-composer-queued-prompts.tsx
  • web/src/components/assistant-ui/session-composer-send-button.tsx
  • web/src/components/assistant-ui/session-composer.tsx
  • web/src/components/assistant-ui/session-find-ranges.ts
  • web/src/components/assistant-ui/session-live-tool-row.tsx
  • web/src/components/assistant-ui/session-message-parts.tsx
  • web/src/components/assistant-ui/session-prompt-dispatch-store.ts
  • web/src/components/assistant-ui/session-queue-trace.logic.ts
  • web/src/components/assistant-ui/session-row-equality.ts
  • web/src/components/assistant-ui/session-steer-receipt.tsx
  • web/src/components/assistant-ui/session-thread-live-data-context.ts
  • web/src/components/assistant-ui/session-thread-live-data-provider.tsx
  • web/src/components/assistant-ui/session-thread-messages.tsx
  • web/src/components/assistant-ui/session-thread-states.tsx
  • web/src/components/assistant-ui/session-thread-status-row.tsx
  • web/src/components/assistant-ui/session-thread-status.logic.ts
  • web/src/components/assistant-ui/session-thread-viewport.tsx
  • web/src/components/assistant-ui/session-thread.tsx
  • web/src/components/assistant-ui/session-timeline-fold.ts
  • web/src/components/assistant-ui/session-timeline-render.tsx
  • web/src/components/assistant-ui/session-timeline-reveal.ts
  • web/src/components/assistant-ui/session-timeline-summary.ts
  • web/src/components/assistant-ui/session-timeline-tool-message.ts
  • web/src/components/assistant-ui/session-timeline-work.ts
  • web/src/components/assistant-ui/session-timeline.logic.ts
  • web/src/components/assistant-ui/session-tool-group-row.tsx
  • web/src/components/assistant-ui/session-turn-fold-row.tsx
  • web/src/components/assistant-ui/session-user-message.tsx
  • web/src/components/assistant-ui/session-user-steer-meta.tsx
  • web/src/components/assistant-ui/session-working-row.logic.ts
  • web/src/components/assistant-ui/session-working-row.tsx
  • web/src/components/assistant-ui/timeline-message-parts.ts
  • web/src/components/assistant-ui/timeline-row-estimates.ts
  • web/src/components/assistant-ui/timeline-scroll-anchoring.ts
  • web/src/hooks/routes/__tests__/session-page-controls-store.test.ts
  • web/src/hooks/routes/__tests__/use-session-page-controls.test.tsx
  • web/src/hooks/routes/session-page-controls-effects.ts
  • web/src/hooks/routes/session-page-controls-store.ts
  • web/src/hooks/routes/use-session-busy-input-controls.ts
  • web/src/hooks/routes/use-session-page-controls.ts
  • web/src/lib/api-client.ts
  • web/src/routes/_app/__tests__/-agent-session-deeplink.router.integration.test.tsx
  • web/src/routes/_app/settings/-defaults-settings-page.tsx
  • web/src/styles.css
  • web/src/systems/agent/lib/__tests__/fleet-signals.test.ts
  • web/src/systems/agent/routes/agent-detail-story-fixtures.ts
  • web/src/systems/network/mocks/fixtures.ts
  • web/src/systems/os/apps/session/__tests__/session-window-content.test.tsx
  • web/src/systems/os/apps/session/__tests__/use-session-window-controller.test.tsx
  • web/src/systems/os/apps/session/__tests__/use-session-window-sidebar.test.tsx
  • web/src/systems/os/apps/session/session-window-content.tsx
  • web/src/systems/os/apps/session/use-session-window-controller.tsx
  • web/src/systems/os/apps/session/use-session-window-sidebar.ts
  • web/src/systems/os/apps/settings/__tests__/settings-window-nav.test.tsx
  • web/src/systems/os/apps/settings/settings-window-nav.tsx
  • web/src/systems/os/apps/settings/settings-window.tsx
  • web/src/systems/os/components/__tests__/os-window-deck.test.tsx
  • web/src/systems/os/components/__tests__/sessions-modal.test.tsx
  • web/src/systems/os/hooks/__tests__/use-os-attention.test.tsx
  • web/src/systems/os/lib/__tests__/attention-model.test.ts
  • web/src/systems/os/lib/__tests__/palette-session-filters.test.ts
  • web/src/systems/os/lib/__tests__/routing-coordinator.test.ts
  • web/src/systems/os/lib/routing-coordinator.ts
  • web/src/systems/runtime/components/runtime-selector/runtime-selector.tsx
  • web/src/systems/runtime/components/runtime-selector/selector-search.tsx
  • web/src/systems/runtime/components/runtime-selector/use-runtime-selector-popup.ts
  • web/src/systems/session/adapters/__tests__/session-api.test.ts
  • web/src/systems/session/adapters/session-api-errors.ts
  • web/src/systems/session/adapters/session-api.ts
  • web/src/systems/session/adapters/session-input-api.ts
  • web/src/systems/session/adapters/session-navigation-api.ts
  • web/src/systems/session/busy-input.ts
  • web/src/systems/session/components/__tests__/runtime-activity-notice.test.tsx
  • web/src/systems/session/components/__tests__/session-chat-runtime-provider.test.tsx
  • web/src/systems/session/components/__tests__/session-find-bar.test.tsx
  • web/src/systems/session/components/__tests__/session-message-trail.test.tsx
  • web/src/systems/session/components/__tests__/session-transport-chip.test.tsx
  • web/src/systems/session/components/__tests__/tool-call-card.test.tsx
  • web/src/systems/session/components/assistant-ui/stories/__tests__/session-thread-queue.stories.test.tsx
  • web/src/systems/session/components/assistant-ui/stories/session-thread-story-queue.ts
  • web/src/systems/session/components/assistant-ui/stories/session-thread-story-quiet-parts.ts
  • web/src/systems/session/components/assistant-ui/stories/session-thread-story-quiet-transcripts.ts
  • web/src/systems/session/components/assistant-ui/stories/session-thread-story-runtime.tsx
  • web/src/systems/session/components/message-markdown.tsx
  • web/src/systems/session/components/runtime-activity-notice.logic.ts
  • web/src/systems/session/components/runtime-activity-notice.tsx
  • web/src/systems/session/components/session-chat-runtime-provider.tsx
  • web/src/systems/session/components/session-find-bar.tsx
  • web/src/systems/session/components/session-message-trail.tsx
  • web/src/systems/session/components/session-panel-toggle.tsx
  • web/src/systems/session/components/session-primary-action.tsx
  • web/src/systems/session/components/session-queue-strip-editor.tsx
  • web/src/systems/session/components/session-queue-strip-row.tsx
  • web/src/systems/session/components/session-queue-strip.tsx
  • web/src/systems/session/components/session-quiet-status-row.tsx
  • web/src/systems/session/components/session-quiet-warning-notice.tsx
  • web/src/systems/session/components/session-thinking-row.tsx
  • web/src/systems/session/components/session-transport-chip.tsx
  • web/src/systems/session/components/session-transport-notices.tsx
  • web/src/systems/session/components/steer-marker-notice.tsx
  • web/src/systems/session/components/stories/sessions-stability-story-fixtures.ts
  • web/src/systems/session/components/stories/sessions-stability-story-host.tsx
  • web/src/systems/session/components/stories/sessions-stability-story-routes.ts
  • web/src/systems/session/components/thinking-block.tsx
  • web/src/systems/session/components/tool-call-card.tsx
  • web/src/systems/session/components/tool-renderers/bash-content.tsx
  • web/src/systems/session/components/tool-renderers/detail-payload.tsx
  • web/src/systems/session/components/tool-renderers/generic-content.tsx
  • web/src/systems/session/components/tool-renderers/matched-field-content.tsx
  • web/src/systems/session/hooks/__tests__/use-session-actions.test.tsx
  • web/src/systems/session/hooks/__tests__/use-session-create-dialog.test.tsx
  • web/src/systems/session/hooks/__tests__/use-session-live-tail.test.tsx
  • web/src/systems/session/hooks/__tests__/use-session-topbar-slot.test.tsx
  • web/src/systems/session/hooks/__tests__/use-sessions.test.tsx
  • web/src/systems/session/hooks/__tests__/use-workspace-session-groups.test.tsx
  • web/src/systems/session/hooks/index.ts
  • web/src/systems/session/hooks/session-live-tail-runtime.ts
  • web/src/systems/session/hooks/session-live-tail-store-contract.ts
  • web/src/systems/session/hooks/session-live-tail-store-effects.ts
  • web/src/systems/session/hooks/session-live-tail-store-recovery.ts
  • web/src/systems/session/hooks/session-live-tail-store.ts
  • web/src/systems/session/hooks/session-stream-source.ts
  • web/src/systems/session/hooks/smooth-streamed-text-store.ts
  • web/src/systems/session/hooks/throttled-streaming-value-store.ts
  • web/src/systems/session/hooks/use-session-chat-runtime.ts
  • web/src/systems/session/hooks/use-session-inputs.ts
  • web/src/systems/session/hooks/use-session-live-tail.ts
  • web/src/systems/session/hooks/use-session-navigation.ts
  • web/src/systems/session/hooks/use-session-runtime-extensions.ts
  • web/src/systems/session/hooks/use-session-topbar-slot.tsx
  • web/src/systems/session/hooks/use-session-transcript-thread-messages.ts
  • web/src/systems/session/hooks/use-session-turn-outcomes.ts
  • web/src/systems/session/hooks/use-smooth-streamed-text.ts
  • web/src/systems/session/hooks/use-smooth-streaming-preference.ts
  • web/src/systems/session/hooks/use-steer-provenance.ts
  • web/src/systems/session/hooks/use-throttled-streaming-value.ts
  • web/src/systems/session/hooks/use-transcript-page-window.ts
  • web/src/systems/session/hooks/use-transport-grace-elapsed.ts
  • web/src/systems/session/index.ts
  • web/src/systems/session/lib/__tests__/queued-prompt.test.ts
  • web/src/systems/session/lib/__tests__/session-busy-input.test.ts
  • web/src/systems/session/lib/__tests__/session-hierarchy.test.ts
  • web/src/systems/session/lib/__tests__/session-navigation.test.ts
  • web/src/systems/session/lib/__tests__/session-payload-truncation.test.ts
  • web/src/systems/session/lib/__tests__/session-pending-interactions.test.ts
  • web/src/systems/session/lib/__tests__/session-prompt-chat-transport.test.ts
  • web/src/systems/session/lib/__tests__/session-quiet-warning.test.ts
  • web/src/systems/session/lib/__tests__/session-smooth-reveal.test.ts
  • web/src/systems/session/lib/__tests__/session-thinking-state.test.ts
  • web/src/systems/session/lib/__tests__/session-tool-visual-state.test.ts
  • web/src/systems/session/lib/__tests__/session-transcript-window.test.ts
  • web/src/systems/session/lib/__tests__/session-transport.test.ts
  • web/src/systems/session/lib/__tests__/session-turn-outcomes.test.ts
  • web/src/systems/session/lib/__tests__/session-unconfirmed-send.test.ts
  • web/src/systems/session/lib/__tests__/session-working-status.test.ts
  • web/src/systems/session/lib/__tests__/steer-provenance.test.ts
  • web/src/systems/session/lib/query-keys.ts
  • web/src/systems/session/lib/query-options.ts
  • web/src/systems/session/lib/queued-prompt-preview.ts
  • web/src/systems/session/lib/queued-prompt.ts
  • web/src/systems/session/lib/session-busy-input-refusal.ts
  • web/src/systems/session/lib/session-busy-input.ts
  • web/src/systems/session/lib/session-find-text.ts
  • web/src/systems/session/lib/session-navigation-find-store.ts
  • web/src/systems/session/lib/session-navigation-transcript.ts
  • web/src/systems/session/lib/session-navigation.ts
  • web/src/systems/session/lib/session-payload-truncation.ts
  • web/src/systems/session/lib/session-prompt-chat-transport.ts
  • web/src/systems/session/lib/session-query-policy.ts
  • web/src/systems/session/lib/session-quiet-warning.ts
  • web/src/systems/session/lib/session-smooth-reveal.ts
  • web/src/systems/session/lib/session-thinking-state.ts
  • web/src/systems/session/lib/session-thread-repository.ts
  • web/src/systems/session/lib/session-tool-visual-state.ts
  • web/src/systems/session/lib/session-transcript-options.ts
  • web/src/systems/session/lib/session-transcript-query.ts
  • web/src/systems/session/lib/session-transcript-thread-context-value.ts
  • web/src/systems/session/lib/session-transcript-thread-context.tsx
  • web/src/systems/session/lib/session-transcript-window.ts
  • web/src/systems/session/lib/session-transport.ts
  • web/src/systems/session/lib/session-turn-outcomes-context-value.ts
  • web/src/systems/session/lib/session-turn-outcomes-context.tsx
  • web/src/systems/session/lib/session-turn-outcomes.ts
  • web/src/systems/session/lib/session-unconfirmed-send.ts
  • web/src/systems/session/lib/session-working-status.ts
  • web/src/systems/session/lib/steer-marker.ts
  • web/src/systems/session/lib/steer-provenance-context-value.ts
  • web/src/systems/session/lib/steer-provenance-context.tsx
  • web/src/systems/session/lib/steer-provenance.ts
  • web/src/systems/session/lib/tool-matched-field.ts
  • web/src/systems/session/mocks/fixtures.ts
  • web/src/systems/session/mocks/index.ts
  • web/src/systems/session/stores/session-streaming-preference-store.ts
  • web/src/systems/session/types.ts
  • web/src/systems/terminal/components/terminal-pane.tsx
  • web/src/systems/workspace/mocks/fixtures.ts

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.


Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@github-actions

github-actions Bot commented Sep 6, 2026 •

Copy link
Copy Markdown
Contributor

React Doctor found no new issues. 🎉

Reviewed by React Doctor for commit ea4db72.

@greptile-apps

greptile-apps Bot commented Sep 6, 2026

Copy link
Copy Markdown

Too many files changed for review (687 files, 100 file limit).

@pedronauck
pedronauck merged commit f26b842 into main Sep 6, 2026
48 of 49 checks passed
@pedronauck
pedronauck deleted the session-improvs branch September 6, 2026 23:36
This was referenced Sep 15, 2026

This branch was successfully deployed

1 active deployment
Preview — ea4db727 Deployed Sep 6, 2026 by vercel[bot]
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant