feat(web): undo thread lifecycle actions from toasts - #845
Conversation
|
Deployment failed for project pylon-marketing with the following error: Learn More: https://vercel.com/pylon-code?upgradeToPro=build-rate-limit |
Thread transfer impact✅ Thread transfer remains within every enforced ceiling.
Baseline: Scenario and decoded snapshot size10 historical turns, 5 command tools per turn, 878.9 KiB retained MCP result per historical turn, and a 1.05 MiB retained result in the measured turn.
Updated in place by a trusted workflow. PR artifacts are strictly validated and never executed. |
|
Integration review found a bulk-snooze Undo ownership gap on this head. The silent successful snooze keeps its receipt coalesced until shell projection, but Sidebar's aggregate-toast |
|
Landing hold update: review found an additional reconnect race. An Undo inverse queued under session A could bind to replacement session B after the toast click. The owning branch is being updated with an opaque session-owner check at RPC binding, plus a real queued-command A→B regression. This and the bulk-snooze receipt/claim transfer both require fresh independent review and exact-head CI before the draft is ready. |
|
Independent review PASS on final head I checked the bulk snooze claim transfer against the receipt sequence, duplicate and no-op handling, archive navigation identity, cross-kind invalidation, and unpin/settle/snooze inverse chains. All real Undo paths require a live session owner; the optional owner is stripped before wire dispatch, and the RPC request checks it against the exact receiving session. The serial queue regression covers A-owned Undo queued behind another command, then same-ID B replacement before execution: B receives no inverse. Multi-step settle Undo carries the same owner through each command; a reconnect may produce a partial Undo failure but cannot run a stale inverse on B. This is source and focused-test review. I did not use a browser or device. PR #844 separately adds a complementary pasted-text preflight in the same RPC request function, so combined integration must retain both guards. |
|
The previous head’s |
|
Independent re-review PASS on The seven toast fixtures now create claims with live fake owners, and a new null-owner case confirms no actionable toast. Production |
…thread-undo # Conflicts: # apps/web/src/components/Sidebar.tsx # apps/web/src/keybindings.ts # docs/user/keybindings.md # packages/client-runtime/src/rpc/client.ts
|
The latest updates on your projects. Learn more about Vercel for GitHub. 1 Skipped Deployment
|
A successful unpin, settle, snooze, or archive action can now be reversed from Pylon's existing toast. For example, settling a pinned and snoozed thread offers Undo that restores its prior pin order and wake time; the thread shortcut uses that same toast and leaves text-editor undo alone.
The inverse is offered only for an observed state change with a successful command receipt. Duplicate actions share the real pending result; the inverse stays owned until that receipt's event sequence reaches the live shell. Cross-kind actions, deletion, navigation changes, and replacement RPC sessions invalidate stale inverses. Shell events carry an opaque producer-session owner, so a buffered event from an old connection cannot satisfy a new receipt. Bulk snooze transfers each confirmed member's Undo claim without releasing its receipt fence. Every inverse carries its original opaque session owner through the local command queue, checks it against the receiving RPC session, and strips it before the wire request. Pylon's toast UI is retained. The upstream sidebar notice replacement remains a separate product choice.
Validation: After reconciliation with current
pylon, 178 focused tests passed; the adversarial review found a settle-Undo race that was fixed and covered by two new tests (34 focused Undo tests pass). Web and client-runtime typechecks, scoped lint, and formatting passed. The final-head CI is green. In an isolated browser with a synthetic thread, settling showed the receipt-backed Undo toast, and clicking Undo restored the thread to the active list.Browser evidence (synthetic project and thread):
Implemented by GPT-6 Sol in the Codex harness.
Need help on this PR? Tag
@codesmith-botwith what you need. Autofix is disabled.