Date: Sun, 26 Apr 2026 19:47:22 +0000
Subject: [PATCH 11/15] feat(symbolic-moment): add all-staged and all-in-scope
picker options
Adds two new picker buttons for multi-person reads:
- "Read All Staged" (indigo): reads all staged counterparts excluding primary
- "All In Scope" (sky): reads primary + all staged profiles together
Implements `stagedOnlyScope` option in `runSymbolicMomentLane` to pass
observer profiles only to sendMessage. Updates picker copy based on the
number of staged profiles and adds tooltips explaining each option.
https://claude.ai/code/session_01WiNwPjtGzyNaAMab6srzqy
---
vessel/src/app/page.tsx | 49 +++++++++++++++++++++++++++++++++++++++--
1 file changed, 47 insertions(+), 2 deletions(-)
diff --git a/vessel/src/app/page.tsx b/vessel/src/app/page.tsx
index 06600ccf..9249814d 100644
--- a/vessel/src/app/page.tsx
+++ b/vessel/src/app/page.tsx
@@ -3038,6 +3038,7 @@ export default function App() {
desc: string,
options?: {
forcePrimaryScope?: boolean;
+ stagedOnlyScope?: boolean;
profileOverride?: VaultProfile | null;
source?: string;
},
@@ -3070,11 +3071,19 @@ export default function App() {
}).catch(() => { });
return;
}
+ if (options?.stagedOnlyScope) {
+ void sendMessage(safeDesc, {
+ stagedContextsOverride: observerStagedProfiles.map((p) => ({ profile: p, role: 'OBSERVER' as const })),
+ targetModeOverride: 'FIELD_REPORT',
+ structuredReadingOptInOverride: structuredFieldReport,
+ }).catch(() => { });
+ return;
+ }
void sendScopedMessage(safeDesc, {
targetModeOverride: 'FIELD_REPORT',
structuredReadingOptInOverride: structuredFieldReport,
}).catch(() => { });
- }, [armCorridorLoadingMode, primeAlignmentCorridor, requestReadArm, sendMessage, sendScopedMessage]);
+ }, [armCorridorLoadingMode, observerStagedProfiles, primeAlignmentCorridor, requestReadArm, sendMessage, sendScopedMessage]);
const handleCounterpartSoloMirror = useCallback((profile: VaultProfile, source: string) => {
appendClientRuntimeEvent('COUNTERPART_QUICK_ACTION_SELECTED', {
@@ -4200,7 +4209,9 @@ export default function App() {
Symbolic Moment Target
- A counterpart is staged. Choose whose chart should anchor the symbolic moment, or map both together.
+ {observerStagedProfiles.length === 1
+ ? `${observerStagedProfiles[0].name} is staged. Choose who or what to read in this moment.`
+ : `${observerStagedProfiles.length} profiles staged. Choose the focus or read them together.`}