Repository navigation
Bot hand-offs follow-ups: owner answers 2b–6a, Remote rev 38 - #583
sambitcreate wants to merge 6 commits into
Conversation
…places it The owner chose to keep a copy (question 6): the first change after an unreadable rules.json writes its bytes to rules.json.unreadable (then .2, .3, never over an earlier copy). Deleting the Bot removes the copies. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01FTLKrZsPKZM2hnxHVxEnak
…on the Mac The owner chose to match the Mac (question 4). The CLI daemon now keeps the first stop's origin on the cancelled timeline: user_stop for Stop and Pause, chat_deletion for a deleted chat and application_shutdown when it stops. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01FTLKrZsPKZM2hnxHVxEnak
The host feed now sends Bot rows per audience: a desktop holding bot:handoffs reads a paused Bot as paused, others keep the revision-35 rows. A change both audiences read alike stays one event. The paired host's Bot rows show "Paused" or "Interrupted — tap to resume" in place of the Bot's purpose, as local Bot rows do. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01FTLKrZsPKZM2hnxHVxEnak
A card the Bot's password-or-code rule opened now carries
takesNote: false. The desktop's paired-Mac chat, iOS and Android hold the
composer for it ("Enter it yourself, then tap Done.") and answer it
without a note, instead of learning from a 400 that a note was refused.
Revision 37 shipped in no release, so the field needs no opt-in.
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01FTLKrZsPKZM2hnxHVxEnak
…ne is an accepted limit Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01FTLKrZsPKZM2hnxHVxEnak
|
iOS build and simulator tests failed on b2f916c in Generated by Claude Code |
|
Electron E2E (2/3) failed on b2f916c because Generated by Claude Code |
Follow-up to #559: the owner's answers to its six open questions ("1b 2b 3a 4a 5a 6a", 2026-10-22). Five of them are in this PR; 1b is not.
What changes
rules.jsonis kept. When a Bot's rules file can't be read, the next rule change keeps its bytes beside it asrules.json.unreadable(then.2,.3, never over an earlier copy) before writing the new file. Deleting the Bot removes the copies. The Rules alert says where the copy is. (main/services/bot-rules/store.ts,docs/bot-rules.md)cancelledwithcancellationOrigin: "user_stop", as on the Mac; other stops record their own origin. (packages/cli/src/daemon-chats.ts,packages/cli/src/bots.ts)bot:handoffsreads a paused Bot as paused, every other desktop keeps the revision-35 rows. A change both audiences read alike stays one event. The paired Mac's Bot rows show "Paused" or "Interrupted — tap to resume" in place of the purpose, like local rows. (aiden-remote-host-feed.ts, router,remote-bots-section.tsx)takesNote: false. The desktop's paired-Mac chat, iOS and Android hold the composer for it ("Enter it yourself, then tap Done.") and answer it without a note, instead of learning from a400. Revision 37 shipped in no release, so the field needs no opt-in. FixturebotHandoffs.noNoteHandoff, OpenAPI and API docs updated.docs/bot-computers.md.Remote revision
Claims 38 (
AIDEN_REMOTE_BOT_HANDOFF_NOTE_CONTRACT_REVISION);mainis at 37. Re-claim at merge ifmainmoves. iOSAidenRemotePhase0Testsand the fixture's twocontractRevisionliterals are updated together.Tests
aiden-remote-host-feed.test.ts); router passes the audience only to holders on a wired host.new-chat-targets.test.ts,remote-new-chat-view.test.tsx); no-note card holds the composer and answers bare (remote-bot-chat-view.test.tsx).takesNoteparser and fixture, credential-rule card projection.AidenBotContractTests,AidenBotSessionTests) and Android (AidenBotHandoffsContractTest,AidenBotSessionControllerTest) decodetakesNotefail-closed and hold the composer. These run in CI only (no Xcode or Android SDK in the cloud container).forgetBotremoves them. CLI parity:user_stoporigin.aiden-remote-*andpeer-*suites (912 pass, excludingaiden-remote-service.test.ts, which needs IPv6), the touched renderer suites,tsc --noEmit, eslint on touched files, and the CLI suite (2 known container-only failures).Flaky tests seen on this PR
Both on head b2f916c, run 39813515653, outside this PR's code paths:
AidenMessageVisualSnapshotLayoutTests.testVisualSnapshotKeepsItsHeightAlongsideAnImageDeck: snapshot rows 0, expected 269 ("the snapshot was squeezed instead of drawn at its own height"), after a simulator(ipc/mig) server died. It also flaked once on Open chat visuals full screen on iOS and Android (Remote revision 35) #514.tests/e2e/inline-visuals.spec.ts:47: after the spec's relaunch the chat showed "This chat couldn't be loaded", andiframe[title="Weekly total"]timed out atscrollIntoViewIfNeeded. It passed on retry and was counted by--fail-on-flaky-tests.🤖 Generated with Claude Code
https://claude.ai/code/session_01FTLKrZsPKZM2hnxHVxEnak