From c885a2f6b8cb457e5ef96161a92d08fc0c285702 Mon Sep 17 00:00:00 2001 From: Nucleic Date: Tue, 21 Jul 2026 19:06:12 -0700 Subject: [PATCH] Merge nucleic/keen-willow-wren-ydll into dev --- NucleicRemote/NucleicRemote/Models/HostConnection.swift | 7 +++++++ NucleicRemote/NucleicRemote/Models/RemoteStore.swift | 7 +++++++ 2 files changed, 14 insertions(+) diff --git a/NucleicRemote/NucleicRemote/Models/HostConnection.swift b/NucleicRemote/NucleicRemote/Models/HostConnection.swift index 762998e..4dc6752 100644 --- a/NucleicRemote/NucleicRemote/Models/HostConnection.swift +++ b/NucleicRemote/NucleicRemote/Models/HostConnection.swift @@ -797,6 +797,13 @@ final class HostConnection { // Collapsed Bash summary lines the owner pushes to peer *Macs* (mesh session sync). // The phone renders its own deterministic command summaries, so it ignores these. break + case .carbonHeads, .carbonHeadAdvanced, .carbonManifestData, .carbonManifestUnavailable, + .carbonShardData, .carbonShardUnavailable: + // Carbon shard replication (docs/CARBON_SHARDING.md §8.6, D13): phones hold no + // Carbon store, no key custody, and never mirror — every case is inert here. The + // phone never sends the fetch verbs (it doesn't advertise `canMirrorCarbon`), so + // these arrive only if a future host misroutes; ignoring them is the contract. + break case .transcriptReverted(let reverted): // The owner reverted/undid this chat — the transcript was truncated to `throughSeq`. // Tell RemoteStore first (it records the applied revert epoch so the summary-level diff --git a/NucleicRemote/NucleicRemote/Models/RemoteStore.swift b/NucleicRemote/NucleicRemote/Models/RemoteStore.swift index b09fcbd..d5071b1 100644 --- a/NucleicRemote/NucleicRemote/Models/RemoteStore.swift +++ b/NucleicRemote/NucleicRemote/Models/RemoteStore.swift @@ -2834,6 +2834,11 @@ final class RemoteStore: ObservableObject { // Session-owning intents → the Mac that has this session. case .subscribe(let s): connection(owningSession: s.sessionID)?.send(msg) + case .fetchCarbonHeads, .fetchCarbonManifests, .fetchCarbonShards, .carbonShardAck: + // Carbon shard replication (docs/CARBON_SHARDING.md §8.6, D13): phones never + // mirror — no Carbon store, no key custody — so these verbs are never issued from + // iOS. Inert by contract. + break case .unsubscribe(let id), .interrupt(let id), .deleteSession(let id), .discard(let id), .integrate(let id, _), .renameSession(let id, _), .setFavorite(let id, _), .setArchived(let id, _), .setSessionModel(let id, _), .setSessionEffort(let id, _), @@ -3035,6 +3040,8 @@ final class RemoteStore: ObservableObject { switch msg { case .sendInput(let id, let input): demoRun(id, userText: input.plainText ?? "") + case .fetchCarbonHeads, .fetchCarbonManifests, .fetchCarbonShards, .carbonShardAck: + break // Carbon replication: never issued from iOS (D13); inert in demo too. case .startChat(let req): demoStartChat(req) case .approvalRespond(let id, let decision):