Commit Graph

80715 Commits

Author SHA1 Message Date
Vincent Koc dda775459a fix(talk): preserve accepted work on relay detach
Co-authored-by: Dallin Romney <dallinromney@gmail.com>

Punchcard-Session: calm-brook-timber-r0
2026-08-18 22:43:04 -07:00
Peter Steinberger 404eddbc6a fix(plugins): preserve subagent lifecycle results (#126167) 2026-08-18 22:22:20 -07:00
Peter Steinberger a6b77ffc07 fix(msteams): preserve replies after durable ingress replay (#126169)
* fix(msteams): preserve replies across ingress replay

Recovered Teams channel and group-chat responses now preserve reply and quote context across durable ingress replay. Discovery metadata also advertises the existing group and reaction capabilities.

* chore(msteams): document replay assertion safety

* test(msteams): normalize replay delivery errors
2026-08-18 22:22:13 -07:00
Peter Steinberger e38a06439e refactor: trim locale and QA fixture debt (#126139)
* refactor: trim locale and QA fixture debt

* fix(qa): preserve shared flow portability

* chore(qa): document shared flow branch

* fix(docs): align plugin SDK subpath catalog

* fix(ci): align shared docs and flow contracts
2026-08-18 22:17:19 -07:00
Peter Steinberger 2456c77459 improve(gateway): avoid repeated logging and delivery scans (#126147)
* perf(gateway): remove repeated logging and delivery scans

Exact session-delivery retries no longer scan the full queue. Logging and diagnostics reuse lifecycle-owned settings and listener interest so uninterested projections are skipped, while outbound WebSocket summaries are built only after recipient admission.

* fix(infra): break diagnostic listener import cycle

Keep event-type validation at the diagnostic dispatcher while the process-wide listener presence counter remains a leaf module.

* test(cli): use logging override owner

Exercise late one-shot JSON diagnostics through the canonical logger override setter so lifecycle-cached console settings are invalidated as they are in production.

* test(auth): use logging override owner

Configure the locked-update warning test through the canonical logger override setter so lifecycle-cached console settings are invalidated before assertion.

* test(gateway): normalize redacted media fixture

Compare durable inbound media facts against the public redaction contract so random identifiers that resemble sensitive text do not make the Gateway suite flaky.
2026-08-18 22:13:22 -07:00
Peter Steinberger 1abd0fb0c2 test(infra): remove channel activity reset seam (#126188)
* test(infra): remove channel activity reset seam

* chore(plugin-sdk): ratchet surface budget
2026-08-18 22:12:49 -07:00
Peter Steinberger baefd067bb fix(deps): keep package runtime dependencies single-owned (#126119)
* fix(deps): consolidate shared runtime helpers

* test(concurrency): support current test lib target

* fix(time): preserve year-scale plugin durations

* fix(agents): preserve empty subagent completions
2026-08-18 22:12:45 -07:00
Peter Steinberger 0767902330 fix(channels): reject malformed ingress queue claims instead of minting sentinel identity (#126176)
* fix(channels): reject malformed ingress queue claims instead of minting sentinel identity

A status=claimed row missing claim_token, claim_owner, or claimed_at was
decoded into a fake claim (token "", owner "", claimedAt 0). Release then
guarded on claim_token = "" (never matches NULL) and the stale-claim scan's
claimed_at <= cutoff never selected NULL timestamps, so such rows were stuck
claimed forever and blocked their dedupe slot.

Claimed rows now decode through a strict claim-column decoder; malformed
claims are tombstoned as failed/corrupt_claim by stale recovery without an
ownership-policy consult (no reachable owner can exist), preserving a valid
payload so the event stays operator-resubmittable. Regression test fails
pre-fix: listClaims leaked the sentinel claim and recovery never scanned
the row.

* fix(channels): rename recovery claim decode variable to avoid method shadow

* fix(channels): scan malformed claims into recovery regardless of timestamp

A claimed row missing token/owner but carrying a corrupt future claimed_at
dodged both the cutoff and IS NULL predicates, so it never reached the strict
decoder. Recovery now selects any row with incomplete claim columns; the
malformed-claim tombstone relies on the exact-token guard alone instead of a
stale-cutoff comparison its timestamp cannot satisfy.
2026-08-18 22:09:48 -07:00
Peter Steinberger ffdd0641c8 fix(workboard): retry managed worktree cleanup after hook failures (#126162)
* fix(workboard): retry managed worktree cleanup

* fix(workboard): keep workspace mutation type local
2026-08-18 22:05:16 -07:00
Peter Steinberger dcdfd737e5 fix(workboard): recover interrupted worker launches (#126170)
* fix(workboard): recover interrupted worker launches

Persist prepared, accepted, and failed launch phases so Gateway restart reconciliation cannot leave cards permanently running between launch preparation and worker acceptance.

* fix(workboard): require durable terminal evidence

Do not synthesize terminal-session acceptance timing during restart reconciliation; stale same-key terminal rows without updatedAt now fail the prepared launch instead of being adopted.
2026-08-18 22:01:14 -07:00
Peter Steinberger 85cec65a19 fix(signal): preserve partial final delivery after later send failures (#126160)
* fix(signal): preserve partial final delivery

* test(signal): keep ingress boundary on sdk seams

* test(delivery): cover accepted partial target adoption
2026-08-18 21:55:09 -07:00
Peter Steinberger dc37ed8f63 fix(agents): record empty subagent completion delivery (#126179)
* fix(agents): preserve delivery after incomplete completion

* test(qa): distinguish failed delivered completions
2026-08-18 21:46:38 -07:00
Peter Steinberger 5564671c4f fix(gateway): bound audit and Codex backlogs (#126154)
* fix(gateway): bound audit and Codex backlogs

Live Gateway SQLite lock failures and process heap pressure exposed two
independent queue owners. Route best-effort audit persistence through the
canonical shared-state connection with bounded contention retries, and remove
the per-notification Codex yield so the keyed turn queue can drain directly.

Follow-up to #126033 and #126073.

* fix(gateway): annotate raw SQLite cold-open probe

* test(codex): register notification burst shard
2026-08-18 21:44:09 -07:00
Peter Steinberger caebee321d perf(test): consolidate TUI PTY session coverage (#126185) 2026-08-18 21:42:01 -07:00
Peter Steinberger 41ed3c3460 fix(ui): buttons use the default cursor instead of the link hand (#126153)
* fix(ui): reserve pointer cursors for links

* test: align cursor and docs contracts
2026-08-18 21:40:52 -07:00
Peter Steinberger d96f1d51be fix(gateway): hold the chat root through terminal persistence (#126183)
startChatDispatch reserved the detached dispatch's root-work continuation
after the ACK, and swallowed a failed reservation with ?? undefined. When
the reservation did not land, the request's root was released before
chat-send-dispatch-errors finalize() awaited
persistGatewaySessionLifecycleEvent, so a concurrent restart drain saw
zero active roots and completed while the session's terminal state was
still being written.

Reserve in admitChatSend instead, where the request root is provably
live, and release it from the single cleanupAdmittedRun owner. Callers
outside a Gateway request envelope hold no root, so their continuation is
a no-op.

The regression now starts a real waitForActiveGatewayRootWork() drain
while persistence is blocked and asserts it cannot settle until the write
is released, instead of asserting an absolute process-global counter.
2026-08-18 21:38:12 -07:00
Peter Steinberger 093b191318 test(agents): remove tool-policy warning reset API (#126175) 2026-08-18 21:37:26 -07:00
Jason (Json) d16c2858bf improve(update): make managed finalization timing auditable (#126107)
* improve(update): report finalizer phase timings

* test(update): return completion cache outcome

* refactor(update): isolate finalize command

* chore(update): document finalize config assertion

* test(update): isolate finalizer capability fixtures
2026-08-18 22:34:22 -06:00
Peter Steinberger a89c568068 fix(ui): center dashboard widget controls on hover (#126076)
* fix(ui): center dashboard widget hover controls

* fix(ui): gate resize handle with centered hover

* fix(ui): preserve iframe clicks with centered controls

* fix(ui): preserve corner actions when centering controls

* fix(ui): compact centered controls at intermediate widths

* test(plugins): align SDK subpath docs contract wording
2026-08-18 21:32:37 -07:00
Peter Steinberger 4ffa2a4418 fix(gateway): avoid readiness flaps during Reef reconnects (#126151)
* fix(gateway): avoid readiness flaps during Reef reconnects

* docs: preserve plugin SDK private-local contract wording
2026-08-18 21:29:43 -07:00
Peter Steinberger 00482543ff fix(agents): bound Skill Workshop model projections (#126158) 2026-08-18 21:28:54 -07:00
Peter Steinberger b4a720ff1e fix(worktrees): preserve active removal authority (#126174) 2026-08-18 21:21:25 -07:00
Peter Steinberger 8c3b3c6ea8 feat(agents): link PRs to public work sessions (#126057)
* feat(agents): link PRs to public work sessions

* fix(agents): preserve cron prompt cache for PR links
2026-08-18 21:13:27 -07:00
Peter Steinberger 601f65b2fd fix(clickclack): advertise media delivery capability (#126168) 2026-08-18 21:11:59 -07:00
Peter Steinberger 6c26bc7e2b fix(workboard): preserve concurrent edits during rollback (#126161) 2026-08-18 21:08:49 -07:00
Peter Steinberger 7bc994aee8 fix(install): avoid success after incomplete lifecycle changes (#125992)
* fix(install): make lifecycle mutations transactional

Standalone installers now apply npm-version-aware lifecycle approval. Updates verify and repair the installation before reporting success and preserve the prior install owner during method switches. Uninstall now exits nonzero when requested cleanup is only partially completed. Plugin update behavior is unchanged.

Closes #125925

* test(uninstall): assert aggregated live-owner failure

* fix(install): satisfy standalone shell checks

* fix(update): scan PATH for prior Git wrapper

* test(hooks): await Gmail watcher descendant exit

* fix(install): verify Windows npm candidate

* fix(ci): normalize package acceptance version

* fix(update): preserve staged local package links

* test(update): fold staged symlink coverage

* fix(update): retire every legacy Git wrapper

* test(docs): align consolidated ownership checks
2026-08-18 20:50:15 -07:00
Peter Steinberger a441431896 fix(tui): restore remembered global sessions (#126135) 2026-08-18 20:30:27 -07:00
ClawSweeper 7e69b1d5ab fix(ui): make Guardian review activity subtle (#125395)
* fix(ui): make guardian reviews subtle

* fix(ui): correlate Guardian warning cleanup

* fix(ui): retain ambiguous Guardian warnings

* fix(codex): preserve Guardian review state

Keep command-owned review state durable across reconnect and persisted history, with conservative bounded outcomes and producer-owned routine warning correlation. Verify native user-home app-server auth instead of injecting stored profiles.

* refactor(ui): split workspace conflict rendering

---------

Co-authored-by: RoboClaw <309084314+roboclaw-bot@users.noreply.github.com>
Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-08-18 20:28:23 -07:00
Peter Steinberger f2297701dd fix(agents): retain gateway binding for subagent completion (#126122) 2026-08-18 20:26:56 -07:00
Peter Steinberger 57e5ab7a87 fix(apps): show native gateway and notification failures (#125909)
* fix(apps): surface native action failures

Make iOS gateway reconnect attempts return visible closed outcomes, route macOS gateway deep links through primary setup confirmation, and expose pending/sent/error notification test results across native and Dashboard settings.

* chore(apps): refresh native i18n inventory

* test(macos): isolate gateway cancel state

* fix(ui): accept permission-only notification status

* test(gateway): drain accepted agent run before fixture reset

* fix(ui): notify clients after service worker claim

* test(gateway): wait for accepted root work to drain

* test(ui): isolate widget theme observer window

* test(ui): await durable attachment draft before teardown

* test(agents): use race-safe MCP process cleanup

* test(ui): await cloud startup runtime before error probe

* test(ui): align startup and teardown probes with current owners
2026-08-18 20:15:52 -07:00
Peter Steinberger 66cacbae5d test: remove strict-subset assertions (#126142) 2026-08-18 20:15:50 -07:00
Peter Steinberger 7097ccc7bd perf(test): gate Skill Workshop proof capture (#126051) 2026-08-18 20:13:50 -07:00
Peter Steinberger 2a97397f47 docs: consolidate setup and plugin references (#126132)
* docs: consolidate setup and plugin references

* docs: preserve meeting plugin configuration
2026-08-18 20:00:05 -07:00
Peter Steinberger feda957fc5 fix(gateway): bind channel completion dispatch (#126113)
* fix(gateway): bind channel completion dispatch

* fix(plugin-sdk): scope harness completion dispatch

* test(agents): cover scoped completion dispatch
2026-08-18 19:48:24 -07:00
Peter Steinberger 3666fa6825 fix(config): clone catalog metadata before defaults (#126123)
* fix(config): clone catalog metadata before defaults

* refactor(config): keep catalog clone net neutral
2026-08-18 19:47:31 -07:00
ClawSweeper bf420e92c6 fix(ui): keep mobile session actions reachable (#126124)
* fix(ui): keep mobile session actions reachable

Co-authored-by: Takhoffman <781889+Takhoffman@users.noreply.github.com>

* test(ui): use placement startup capability

Co-authored-by: Takhoffman <781889+Takhoffman@users.noreply.github.com>

---------

Co-authored-by: RoboClaw <309084314+roboclaw-bot@users.noreply.github.com>
Co-authored-by: Takhoffman <781889+Takhoffman@users.noreply.github.com>
2026-08-18 19:46:34 -07:00
Vyctor H. Brzezowski 2a469c1cb2 fix(ui): dismiss completed progress cards (#126102)
* test(ui): cover completed progress card dismissal

* test(ui): capture both completed card themes

* fix(ui): dismiss completed progress cards

* style: format progress card dismissal

* test(ui): assert visible dismissal lifecycle

* test(ui): wait for reloaded composer proof

* refactor(ui): reuse progress card action styles

* chore(protocol): refresh Swift progress card params

* style(ui): format progress card test

* fix(ui): hide progress dismissal from viewers

* test(ui): use Vitest viewer assertion
2026-08-18 23:39:31 -03:00
Peter Steinberger 89a7e4e965 fix(gateway): abort failed partial HTTP responses (#126130) 2026-08-18 19:34:32 -07:00
Peter Steinberger 0eac4f7a3c test(ai): route parity fixtures to owner (#126131) 2026-08-18 19:33:48 -07:00
ClawSweeper 23da04ba8a fix(sessions): require durable final reply evidence (#126075)
* fix(sessions): require durable final reply evidence

* fix(sessions): enforce durable terminal reply evidence

---------

Co-authored-by: Jason (Json) <263060202+fuller-stack-dev@users.noreply.github.com>
2026-08-18 20:18:14 -06:00
Peter Steinberger 64776a0489 fix(sessions): preserve committed results across reconnects (#125904)
* fix(sessions): preserve committed operation results

Report post-commit create failures through the existing runError response and retain confirmed same-client Control UI mutations across reconnects while fencing replacement clients.

* test(ui): await new-session ownership state

* test(ui): clarify draft teardown durability

* fix(ui): preserve reconnect refresh failures

* test(ui): poll absent text targets safely

* test(sms): await ingress spool ownership

* test(ui): await cloud startup failure state

* test(ui): await canonical place selection

* test(ui): scope activity feed to route owner

* test(ui): stabilize route-owned activity states
2026-08-18 19:13:58 -07:00
Peter Steinberger 0718aedb9d test(cli): remove stale update sidecar fixture (#126126) 2026-08-18 19:13:09 -07:00
Peter Steinberger c97b8ffdfc refactor: consolidate meeting and media provider families (#126053)
* refactor(plugins): consolidate provider family helpers

* fix(plugin-sdk): keep meeting script helpers private

* fix(plugins): sync meeting boundary paths
2026-08-18 19:11:13 -07:00
Peter Steinberger 15fb00eb6b fix: surface paired-device runtime requirements (#126067)
* fix: surface paired-device runtime requirements

* test: cover session runtime placement metadata

* test(gateway): stabilize runtime catalog fixtures

* fix(gateway): reject incompatible device moves
2026-08-18 19:10:41 -07:00
Peter Steinberger cc19b83d75 fix(status): keep reports available without read scope (#126072) 2026-08-18 19:08:04 -07:00
Peter Steinberger 886cf1a0bf fix(cua-computer): resolve the ESM-only driver SDK during artifact verification (#126120)
@trycua/cua-driver ships an exports map with only the import condition, so
require-condition resolution throws PATH_NOT_EXPORTED even when the package
is installed. Every real Windows/Linux node host therefore failed driver
artifact verification with COMPUTER_DRIVER_PACKAGE_MISSING despite a correct
install. Fall back to import-condition resolution before concluding the
package is missing; the platform packages keep resolving through require.

Found during a live CUA node bring-up on an Ubuntu guest; the regression
test exercises real installed-package resolution on Linux/Windows CI.
2026-08-18 19:06:52 -07:00
Peter Steinberger 407c8cdb34 fix(mcp): preserve catalog and result integrity (#126083)
* fix(mcp): preserve catalog and result integrity

* fix(mcp): sanitize node result details

* test(mcp): stabilize result memory regression

* refactor(mcp): keep result limits private

* test(mcp): remove stale invoke import
2026-08-18 19:05:33 -07:00
Peter Steinberger cc273e6eea fix(channels): stop idle ingress retention writes (#126073)
* fix(channels): prune ingress retention on admission

* style(channels): keep ingress monitor within limit

* fix(channels): skip pruning ignored ingress
2026-08-18 19:05:30 -07:00
Peter Steinberger d1f327a4e4 fix(ui): refresh Browser when sidebar tab activates (#126058) 2026-08-18 19:05:20 -07:00
Peter Steinberger a8bc60a119 refactor(ui): generalize session placement startup (#126118) 2026-08-18 18:59:50 -07:00