diff --git a/clients/web/src/README.md b/clients/web/src/README.md index 14c4c3fd..3f685052 100644 --- a/clients/web/src/README.md +++ b/clients/web/src/README.md @@ -7,30 +7,32 @@ routes to the implementation and its operating guide rather than duplicating eit | Reading or interaction | Source entry | Interpretation | | --- | --- | --- | -| Canvas Project catalogue, retained concerns, judgments, references, and continuation | [AtlasView.svelte](lib/components/AtlasView.svelte), [Atlas link hints](lib/atlas/navigation.ts) | [Atlas](../../../docs/divination/altar/atlas.md) | -| Project board retention/recovery, portable authorship and reviewed selection transformations | [CanvasWorkspace.svelte](lib/components/CanvasWorkspace.svelte), [CanvasView.svelte](lib/components/CanvasView.svelte), [Canvas engine](lib/canvas/engine.ts) | [Canvas](../../../docs/compositions/canvas/index.md) | -| Conversation, consent, and offering recovery | [BridgeView.svelte](lib/components/BridgeView.svelte), [shell-lifetime workspace](lib/bridge/workspace.svelte.ts) | [Bridge](../../../docs/divination/altar/bridge.md) | -| Conversation catalogue, retained inspection, and source-linked document-local working material | [SeancesWorkspace.svelte](lib/components/SeancesWorkspace.svelte), [material](lib/seances/material.ts) | [Séances](../../../docs/divination/altar/seances.md) | -| Finite dictation, transcript review and private correction/vocabulary controls | [BridgeVoiceInput.svelte](lib/components/BridgeVoiceInput.svelte), [capture](lib/bridge/voice/capture.ts), [draft coordinator](lib/bridge/voice/dictation.ts), [DictationFeedback.svelte](lib/components/DictationFeedback.svelte) | [Bridge dictation](../../../docs/divination/altar/bridge.md#dictate-and-review) | -| Exact instrument work destination and inert Canvas command proposals | [work-command registry](lib/bridge/work-commands.ts), [Canvas command planner](lib/canvas/commands.ts) | [Canvas commands](../../../docs/compositions/canvas/index.md#give-a-bounded-command-through-bridge) | -| Public-note intake, lifecycle review and metadata recovery within Bridge | [PublicNotes.svelte](lib/components/PublicNotes.svelte), [recovery controller](lib/archive/notes.ts) | [Public notes](../../../docs/divination/altar/bridge.md#manage-public-notes) | -| Spatial Run field, tab observation history, and one Run's retained records and gaps | [OrbField.svelte](lib/components/OrbField.svelte), [OrbTimeline.svelte](lib/components/OrbTimeline.svelte), [OrbView.svelte](lib/components/OrbView.svelte) | [Orb](../../../docs/divination/altar/orb.md) | -| Admitted runtime topology, actual call attempts, source coverage and inspection-only scores | [Runtime evidence](lib/components/RuntimeEvidence.svelte), [runtime reader](lib/orb/runtime.ts), [generic projection](lib/graph/runtime.ts) | [Connected components](../../../docs/sepulcher/extensions/oculus.md#connected-components-and-activity) | -| Exact-Run matching Archive selection and capture limits | [ArchiveRecallPanel.svelte](lib/components/ArchiveRecallPanel.svelte) | [Archive selection](../../../docs/divination/altar/orb.md#inspect-a-matching-archive-selection) | -| Capability ownership map/list, selected properties, preview, ticket, and physical request | [NexusView.svelte](lib/components/NexusView.svelte), [native map](lib/components/NexusMap.svelte), [projection](lib/nexus/map.ts), [properties](lib/components/NexusProperties.svelte) | [Nexus](../../../docs/divination/altar/nexus.md) | -| Exact registered score and computed graph | [LoomView.svelte](lib/components/LoomView.svelte), [shared canvas](lib/components/graph/GraphCanvas.svelte) | [Loom](../../../docs/divination/altar/loom.md) | +| Canvas Project catalogue, retained concerns, judgments, references, and continuation | [AtlasView.svelte](lib/pages/atlas/components/AtlasView.svelte), [Atlas link hints](lib/atlas/navigation.ts) | [Atlas](../../../docs/divination/altar/atlas.md) | +| Project board retention/recovery, portable authorship and reviewed selection transformations | [CanvasWorkspace.svelte](lib/pages/canvas/components/CanvasWorkspace.svelte), [CanvasView.svelte](lib/pages/canvas/components/CanvasView.svelte), [Canvas engine](lib/pages/canvas/state/engine.ts) | [Canvas](../../../docs/compositions/canvas/index.md) | +| Conversation, consent, and offering recovery | [BridgeView.svelte](lib/pages/bridge/components/BridgeView.svelte), [shell-lifetime workspace](lib/shell/state/bridge-workspace.svelte.ts) | [Bridge](../../../docs/divination/altar/bridge.md) | +| Conversation catalogue, retained inspection, and source-linked document-local working material | [SeancesWorkspace.svelte](lib/pages/seances/components/SeancesWorkspace.svelte), [material](lib/pages/seances/state/material.ts) | [Séances](../../../docs/divination/altar/seances.md) | +| Finite dictation, transcript review and private correction/vocabulary controls | [BridgeVoiceInput.svelte](lib/pages/bridge/components/BridgeVoiceInput.svelte), [capture](lib/pages/bridge/state/voice/capture.ts), [draft coordinator](lib/pages/bridge/state/voice/dictation.ts), [DictationFeedback.svelte](lib/pages/bridge/components/DictationFeedback.svelte) | [Bridge dictation](../../../docs/divination/altar/bridge.md#dictate-and-review) | +| Exact instrument work destination and inert Canvas command proposals | [work-command registry](lib/shell/state/work-commands.ts), [Canvas command planner](lib/pages/canvas/state/commands.ts) | [Canvas commands](../../../docs/compositions/canvas/index.md#give-a-bounded-command-through-bridge) | +| Public-note intake, lifecycle review and metadata recovery within Bridge | [PublicNotes.svelte](lib/pages/bridge/components/PublicNotes.svelte), [recovery controller](lib/pages/bridge/state/archive/notes.ts) | [Public notes](../../../docs/divination/altar/bridge.md#manage-public-notes) | +| Spatial Run field, tab observation history, and one Run's retained records and gaps | [OrbField.svelte](lib/pages/orb/components/OrbField.svelte), [OrbTimeline.svelte](lib/pages/orb/components/OrbTimeline.svelte), [OrbView.svelte](lib/pages/orb/components/OrbView.svelte) | [Orb](../../../docs/divination/altar/orb.md) | +| Admitted runtime topology, actual call attempts, source coverage and inspection-only scores | [Runtime evidence](lib/pages/orb/components/RuntimeEvidence.svelte), [runtime reader](lib/pages/orb/state/runtime.ts), [generic projection](lib/pages/orb/state/runtime-projection.ts) | [Connected components](../../../docs/sepulcher/extensions/oculus.md#connected-components-and-activity) | +| Exact-Run matching Archive selection and capture limits | [ArchiveRecallPanel.svelte](lib/pages/orb/components/ArchiveRecallPanel.svelte) | [Archive selection](../../../docs/divination/altar/orb.md#inspect-a-matching-archive-selection) | +| Capability ownership map/list, selected properties, preview, ticket, and physical request | [NexusView.svelte](lib/pages/nexus/components/NexusView.svelte), [native map](lib/pages/nexus/components/NexusMap.svelte), [projection](lib/pages/nexus/state/map.ts), [properties](lib/pages/nexus/components/NexusProperties.svelte) | [Nexus](../../../docs/divination/altar/nexus.md) | +| Exact registered score and computed graph | [LoomView.svelte](lib/pages/loom/components/LoomView.svelte), [shared canvas](lib/graph/components/GraphCanvas.svelte) | [Loom](../../../docs/divination/altar/loom.md) | [The layout](routes/+layout.svelte) supplies browser-document context; -[AltarShell](lib/components/AltarShell.svelte) projects navigation, global attention and the -shell-lifetime [Bridge dock and legacy full-focus page](lib/components/BridgeDock.svelte). The Séances +[AltarShell](lib/shell/components/AltarShell.svelte) projects navigation, global attention and the +shell-lifetime [Bridge dock and legacy full-focus page](lib/pages/bridge/components/BridgeDock.svelte). The Séances work route inspects conversations without selecting the live Bridge; explicit continuation reuses that same conversation component. Its layout preferences contain only bounded width, side and open state; conversation and recovery remain in their existing owners. -[Browser-local pins](lib/bridge/pins.ts) retain bounded session identities only. +[Browser-local pins](lib/navigation/pins.ts) retain bounded session identities only. [Instrument links](lib/navigation/instruments.ts) carry bounded selection hints. Destination loaders still validate identity and relationships; a URL does not prove ownership or Run/Pattern -equivalence. Focused component tests live beside their components; navigation has its own +equivalence. Code used by one instrument lives in that instrument's `lib/pages//` +`components/` and `state/` folders; code used by two or more instruments stays outside `pages/`. +Focused component tests live beside their components; navigation has its own [identity tests](lib/navigation/instruments.test.ts). [API contracts](lib/api/models.ts) alias [generated transport types](lib/api/openapi.d.ts). @@ -38,7 +40,7 @@ Their Python owners are [Altar controllers](../../../src/lychd/interface/web/) a [web-domain contracts](../../../src/lychd/domain/web/). Regeneration, checks, and builds follow [CONTRIBUTING](../../../CONTRIBUTING.md#quality-checks); do not hand-edit generated descriptions. -Loom and Orb share [graph projections](lib/graph/) and one [canvas adapter](lib/components/graph/GraphCanvas.svelte), +Loom and Orb share [graph projections](lib/graph/) and one [canvas adapter](lib/graph/components/GraphCanvas.svelte), with semantic views over the same identities. [The renderer gate](../../../docs/adr/15-frontend.md#decision-lock-and-reopening-gate) owns qualification; [State](../../../docs/state-of-the-work.md#orb-instrument) records its remaining limits. diff --git a/clients/web/src/lib/api/canvas.test.ts b/clients/web/src/lib/api/canvas.test.ts index 64cf49c1..b943016f 100644 --- a/clients/web/src/lib/api/canvas.test.ts +++ b/clients/web/src/lib/api/canvas.test.ts @@ -1,5 +1,5 @@ import { afterEach, expect, it, vi } from "vitest"; -import { blankDocument } from "$lib/canvas/engine"; +import { blankDocument } from "$lib/pages/canvas/state/engine"; afterEach(() => { vi.unstubAllGlobals(); document.cookie = "canvas-csrf=; Max-Age=0"; }); it("protects exact Canvas creation and bootstrap through generated paths", async () => { diff --git a/clients/web/src/lib/api/orb-runtime.test.ts b/clients/web/src/lib/api/orb-runtime.test.ts index 0d4c620a..403c00fb 100644 --- a/clients/web/src/lib/api/orb-runtime.test.ts +++ b/clients/web/src/lib/api/orb-runtime.test.ts @@ -1,5 +1,5 @@ import { afterEach, expect, it, vi } from "vitest"; -import { runtimeSnapshot } from "$lib/orb/__fixtures__/runtime"; +import { runtimeSnapshot } from "$lib/pages/orb/state/__fixtures__/runtime"; afterEach(() => { vi.unstubAllGlobals(); vi.resetModules(); }); it("uses the independent read endpoint and preserves authorization refusal", async () => { const NativeRequest = globalThis.Request; diff --git a/clients/web/src/lib/api/scavenger.test.ts b/clients/web/src/lib/api/scavenger.test.ts index 677d123a..bac2aa5b 100644 --- a/clients/web/src/lib/api/scavenger.test.ts +++ b/clients/web/src/lib/api/scavenger.test.ts @@ -1,5 +1,5 @@ import { afterEach, expect, it, vi } from "vitest"; -import { admissionId, request } from "$lib/scavenger/observation.fixtures"; +import { admissionId, request } from "$lib/pages/observationsScavenger/state/observation.fixtures"; afterEach(() => { vi.unstubAllGlobals(); document.cookie = "scavenger-csrf=; Max-Age=0"; }); diff --git a/clients/web/src/lib/components/AtlasLinks.svelte b/clients/web/src/lib/components/atlas/AtlasLinks.svelte similarity index 100% rename from clients/web/src/lib/components/AtlasLinks.svelte rename to clients/web/src/lib/components/atlas/AtlasLinks.svelte diff --git a/clients/web/src/lib/components/AtlasLinks.test.ts b/clients/web/src/lib/components/atlas/AtlasLinks.test.ts similarity index 100% rename from clients/web/src/lib/components/AtlasLinks.test.ts rename to clients/web/src/lib/components/atlas/AtlasLinks.test.ts diff --git a/clients/web/src/lib/components/ConsentCard.svelte b/clients/web/src/lib/components/shared/ConsentCard.svelte similarity index 98% rename from clients/web/src/lib/components/ConsentCard.svelte rename to clients/web/src/lib/components/shared/ConsentCard.svelte index f175f227..e80cbae2 100644 --- a/clients/web/src/lib/components/ConsentCard.svelte +++ b/clients/web/src/lib/components/shared/ConsentCard.svelte @@ -1,7 +1,7 @@ + + + + diff --git a/clients/web/src/lib/components/graph/FlowEdge.svelte b/clients/web/src/lib/graph/components/FlowEdge.svelte similarity index 100% rename from clients/web/src/lib/components/graph/FlowEdge.svelte rename to clients/web/src/lib/graph/components/FlowEdge.svelte diff --git a/clients/web/src/lib/components/graph/FlowNode.svelte b/clients/web/src/lib/graph/components/FlowNode.svelte similarity index 100% rename from clients/web/src/lib/components/graph/FlowNode.svelte rename to clients/web/src/lib/graph/components/FlowNode.svelte diff --git a/clients/web/src/lib/components/graph/FlowSurface.svelte b/clients/web/src/lib/graph/components/FlowSurface.svelte similarity index 100% rename from clients/web/src/lib/components/graph/FlowSurface.svelte rename to clients/web/src/lib/graph/components/FlowSurface.svelte diff --git a/clients/web/src/lib/components/graph/GraphCanvas.svelte b/clients/web/src/lib/graph/components/GraphCanvas.svelte similarity index 100% rename from clients/web/src/lib/components/graph/GraphCanvas.svelte rename to clients/web/src/lib/graph/components/GraphCanvas.svelte diff --git a/clients/web/src/lib/components/graph/OrbNode.svelte b/clients/web/src/lib/graph/components/OrbNode.svelte similarity index 100% rename from clients/web/src/lib/components/graph/OrbNode.svelte rename to clients/web/src/lib/graph/components/OrbNode.svelte diff --git a/clients/web/src/lib/components/graph/OrbTerritories.svelte b/clients/web/src/lib/graph/components/OrbTerritories.svelte similarity index 100% rename from clients/web/src/lib/components/graph/OrbTerritories.svelte rename to clients/web/src/lib/graph/components/OrbTerritories.svelte diff --git a/clients/web/src/lib/components/graph/camera-command.ts b/clients/web/src/lib/graph/components/camera-command.ts similarity index 100% rename from clients/web/src/lib/components/graph/camera-command.ts rename to clients/web/src/lib/graph/components/camera-command.ts diff --git a/clients/web/src/lib/components/graph/flow-drafts.test.ts b/clients/web/src/lib/graph/components/flow-drafts.test.ts similarity index 100% rename from clients/web/src/lib/components/graph/flow-drafts.test.ts rename to clients/web/src/lib/graph/components/flow-drafts.test.ts diff --git a/clients/web/src/lib/components/graph/flow-drafts.ts b/clients/web/src/lib/graph/components/flow-drafts.ts similarity index 100% rename from clients/web/src/lib/components/graph/flow-drafts.ts rename to clients/web/src/lib/graph/components/flow-drafts.ts diff --git a/clients/web/src/lib/components/graph/layout.test.ts b/clients/web/src/lib/graph/components/layout.test.ts similarity index 100% rename from clients/web/src/lib/components/graph/layout.test.ts rename to clients/web/src/lib/graph/components/layout.test.ts diff --git a/clients/web/src/lib/components/graph/layout.ts b/clients/web/src/lib/graph/components/layout.ts similarity index 100% rename from clients/web/src/lib/components/graph/layout.ts rename to clients/web/src/lib/graph/components/layout.ts diff --git a/clients/web/src/lib/components/graph/orb-layout.test.ts b/clients/web/src/lib/graph/components/orb-layout.test.ts similarity index 100% rename from clients/web/src/lib/components/graph/orb-layout.test.ts rename to clients/web/src/lib/graph/components/orb-layout.test.ts diff --git a/clients/web/src/lib/components/graph/orb-layout.ts b/clients/web/src/lib/graph/components/orb-layout.ts similarity index 100% rename from clients/web/src/lib/components/graph/orb-layout.ts rename to clients/web/src/lib/graph/components/orb-layout.ts diff --git a/clients/web/src/lib/graph/model.ts b/clients/web/src/lib/graph/model.ts index 98883a52..7fb7c690 100644 --- a/clients/web/src/lib/graph/model.ts +++ b/clients/web/src/lib/graph/model.ts @@ -1,3 +1,5 @@ +import type { LoomView, OrbRunSnapshot } from "$lib/api/models"; + /** Immutable semantic input shared by the Loom and Orb renderer adapters. * Coordinates and renderer drafts never become Pattern or Run authority. */ @@ -32,3 +34,10 @@ export interface GraphProjection { readonly nodes: readonly GraphNode[]; readonly edges: readonly GraphEdge[]; } + +/** Whether a Run snapshot exactly matches this Pattern id, revision and digest. */ +export function matchesOrbPattern(snapshot: OrbRunSnapshot, pattern: LoomView): boolean { + return snapshot.pattern.exact && snapshot.pattern.digest !== null && + snapshot.pattern.pattern_id === pattern.pattern_id && snapshot.pattern.revision === pattern.revision && + snapshot.pattern.digest === pattern.digest; +} diff --git a/clients/web/src/lib/bridge/pins.test.ts b/clients/web/src/lib/navigation/pins.test.ts similarity index 100% rename from clients/web/src/lib/bridge/pins.test.ts rename to clients/web/src/lib/navigation/pins.test.ts diff --git a/clients/web/src/lib/bridge/pins.ts b/clients/web/src/lib/navigation/pins.ts similarity index 100% rename from clients/web/src/lib/bridge/pins.ts rename to clients/web/src/lib/navigation/pins.ts diff --git a/clients/web/src/lib/components/AtlasView.svelte b/clients/web/src/lib/pages/atlas/components/AtlasView.svelte similarity index 98% rename from clients/web/src/lib/components/AtlasView.svelte rename to clients/web/src/lib/pages/atlas/components/AtlasView.svelte index 107399ce..74ae9154 100644 --- a/clients/web/src/lib/components/AtlasView.svelte +++ b/clients/web/src/lib/pages/atlas/components/AtlasView.svelte @@ -2,6 +2,7 @@ import { beforeNavigate, goto } from "$app/navigation"; import { tick, untrack } from "svelte"; import { atlasHref, parseAtlasLink, type AtlasLinkIntent } from "$lib/atlas/navigation"; + import PageHeader from "$lib/components/shared/PageHeader.svelte"; import { ApiError, @@ -578,14 +579,15 @@ {view ? `${view.title} · Atlas` : "Atlas"} — LychD
-
-
- {#if projectId}← All projects{/if} - {projectId ? "Canvas project record" : "Canvas projects"} -

{view?.title ?? "Atlas"}

- {#if !projectId}

Open a canvas or return to a project.

{/if} -
-
+ + {#snippet actions()} @@ -597,8 +599,8 @@ Open Canvas → {lifecycleNames[view.lifecycle]} {/if} -
-
+ {/snippet} + {#if notice}

{notice}

{/if} {#if linkIntent} @@ -1141,17 +1143,14 @@ padding: clamp(1.25rem, 3vw, 2.5rem); color: var(--color-bone); } - .atlas-heading, .section-heading, .actions, .form-footer, .pagination { + .section-heading, .actions, .form-footer, .pagination { display: flex; align-items: center; justify-content: space-between; flex-wrap: wrap; gap: 0.75rem; } - .atlas-heading { align-items: flex-end; margin-bottom: 2.25rem; padding-bottom: 1.5rem; border-bottom: 1px solid var(--color-engraving); } - .atlas-heading h1 { margin-block: 0.35rem 0.6rem; font-size: clamp(1.8rem, 3.3vw, 2.8rem); letter-spacing: -0.02em; overflow-wrap: anywhere; } - .atlas-heading p { color: var(--color-parchment); max-width: 48rem; } - .back-link { display: inline-block; margin-bottom: 0.6rem; } + .atlas > :global(.page-header) { margin-bottom: 2.25rem; } h2 { font-size: var(--text-xl); font-weight: 500; } h3 { font-size: var(--text-lg); font-weight: 500; overflow-wrap: anywhere; } h4 { font-size: var(--text-base); font-weight: 600; } @@ -1319,7 +1318,6 @@ .project-facts { align-items: flex-start; text-align: left; } .card-foot { display: flex; justify-content: space-between; width: 100%; } .record-preview { justify-content: flex-start; } - .atlas-heading { align-items: flex-start; } } @media (max-width: 68rem) { .project-reading { grid-template-columns: minmax(0, 1fr); } @@ -1329,7 +1327,6 @@ .atlas-chart { display: none; } .supporting-grid, .form-pair, .comparison-values, .concern-filters, .overview-body, .basis-columns { grid-template-columns: minmax(0, 1fr); } .concern-counts { grid-template-columns: repeat(2, minmax(0, 1fr)); } - .atlas-heading { gap: 1rem; } .section-heading { gap: 0.8rem; } .atlas { padding: 1rem; } .editor input, .editor textarea, .editor select { font-size: 1rem; } @@ -1342,7 +1339,6 @@ .atlas-chart { display: none; } .supporting-grid, .form-pair, .comparison-values, .concern-filters, .overview-body, .basis-columns { grid-template-columns: minmax(0, 1fr); } .concern-counts { grid-template-columns: repeat(2, minmax(0, 1fr)); } - .atlas-heading { gap: 1rem; } .section-heading { gap: 0.8rem; } .atlas { padding: 1rem; } .editor input, .editor textarea, .editor select { font-size: 1rem; } diff --git a/clients/web/src/lib/components/AtlasView.test.ts b/clients/web/src/lib/pages/atlas/components/AtlasView.test.ts similarity index 100% rename from clients/web/src/lib/components/AtlasView.test.ts rename to clients/web/src/lib/pages/atlas/components/AtlasView.test.ts diff --git a/clients/web/src/lib/components/AltarWelcome.svelte b/clients/web/src/lib/pages/bridge/components/AltarWelcome.svelte similarity index 100% rename from clients/web/src/lib/components/AltarWelcome.svelte rename to clients/web/src/lib/pages/bridge/components/AltarWelcome.svelte diff --git a/clients/web/src/lib/components/BridgeDock.svelte b/clients/web/src/lib/pages/bridge/components/BridgeDock.svelte similarity index 99% rename from clients/web/src/lib/components/BridgeDock.svelte rename to clients/web/src/lib/pages/bridge/components/BridgeDock.svelte index 35d7bf34..7777c0a6 100644 --- a/clients/web/src/lib/components/BridgeDock.svelte +++ b/clients/web/src/lib/pages/bridge/components/BridgeDock.svelte @@ -1,6 +1,6 @@ " }, policy_revision: "p" }, diff --git a/clients/web/src/lib/components/PublicNoteRecall.svelte b/clients/web/src/lib/pages/bridge/components/PublicNoteRecall.svelte similarity index 93% rename from clients/web/src/lib/components/PublicNoteRecall.svelte rename to clients/web/src/lib/pages/bridge/components/PublicNoteRecall.svelte index 559a6ec4..0cffd118 100644 --- a/clients/web/src/lib/components/PublicNoteRecall.svelte +++ b/clients/web/src/lib/pages/bridge/components/PublicNoteRecall.svelte @@ -2,9 +2,10 @@ import { beforeNavigate } from "$app/navigation"; import { getContext, onMount, onDestroy, tick } from "svelte"; import { getArchiveProfile, discoverArchiveGeneration, recallArchiveSemanticNotes, inspectArchiveSemanticRecall, resolveArchiveSemanticRecall } from "$lib/api/client"; - import { PublicSourceRecall, initialRecallState, emptyRecallDraft, validateRecallDraft } from "$lib/archive/semantic"; - import { notesHref } from "$lib/archive/notes"; + import { PublicSourceRecall, initialRecallState, emptyRecallDraft, validateRecallDraft } from "$lib/pages/bridge/state/archive/semantic"; + import { notesHref } from "$lib/pages/bridge/state/archive/notes"; import { altarNavigationContext, type AltarNavigation } from "$lib/navigation/instruments"; + import PageHeader from "$lib/components/shared/PageHeader.svelte"; const navigation = getContext(altarNavigationContext); let recall = $state.raw(initialRecallState()); @@ -73,12 +74,14 @@ Recall public sources — Bridge — LychD
-
- Bridge · public notes -

Recall public sources

-

One explicit semantic query and exact current-source load. This view generates no answer and starts no conversation Run.

+ -
+