Document: loomworks-seed-viewer-scoping-note-v0_1
Version: v0.1
Status: scoping note — precedes a CR. Shape settled below; one engine fact to confirm at CR drafting (whether a read endpoint exists). Grounded in loomworks-seed-model-grounding-inspection-v0_1 (the seed-model strand).
Date: 2026-06-28
Origin: Surfaced while grounding the seed editor. After an engagement is active, the Operator cannot see its committed seed anywhere on the surface — the seed is visible only during creation (the live draft the Companion co-authors), then disappears from the in-engagement view. You can't edit (or carry, or refer back to) a seed you can't see.
Why this is first: the seed viewer is a hard prerequisite shared by three directions — the seed editor (you can't edit what you can't see), the Example-Generator → create integration (its payoff is "here's your seed"), and create itself (the create conversation builds a seed the Operator then loses sight of). It is the cheapest of the seed-related pieces and unblocks the most downstream.
When you create an engagement, the Companion builds a seed with you and you watch it take shape. After you commit, that seed vanishes from view — the in-engagement screen shows the four rooms and the title, but nowhere to see the engagement's own foundation document. This adds a way to view the committed seed: what the work is, who it's for, the voice, the constraints, the success conditions — the engagement's commitments, readable at any time. View only — no editing in this piece (that's the seed editor, which builds on this). Mostly surfacing something the engine already holds.
The seed substrate is fully built; the gap is purely surface:
memory_events — one immutable row per version (object_id stable, object_version increments, object_type='seed', full Seed in the payload). The active seed is found via Engagement.seed_ref (a version-pinned pointer). Corrections-preserved is automatic — every revision is append-with-version-bump, never overwrite.get_current_seed(engagement_id, db) (engagement/seed_lookup.py) reads the active seed — but it is used for prompt context loading, not exposed as an HTTP route (the inspection's flagged caveat; see open item).DraftSpecification.tsx renders the live seed the Companion co-authors, used in ChatView during drafting. After commit, nothing on the in-engagement surface shows it: InEngagementHeader renders only title + identifier; seed_id is on the wire (projects.ts) but never fetched; ProjectSummary carries no seed fields; no fetchSeed/getSeed client method exists.The gap: the committed seed has no viewer. The data is held, versioned, and readable internally — it just never reaches the Operator after creation.
Directly aligned. The seed is the foundation document — it names what the engagement is committed to. An Operator running an engagement should be able to see its commitments; the seed governs the work, and working against commitments you can't see is the surface hiding the most foundational thing the engagement holds. "Only show what is available" applies — the seed is available (held and readable); its absence from the surface is the surface failing to show it. Showing the seed read-only also respects Operator-authority cleanly: viewing changes nothing, so there's no state-transition concern in this piece (that arrives with the editor).
A read-only view of the active engagement's committed seed, reachable from the in-engagement surface.
The inspection found get_current_seed internally but no HTTP GET-seed route consumed by the frontend, and flagged it for direct confirmation. This decides the CR's size:
GET …/seed wrapping get_current_seed, returning the current seed (fields + version), plus a fetchSeed client method + a display component.Either way the substrate (versioning, retention, the read function) is done; the question is only whether the read is already exposed. CR Step 0 confirms this against the live engine before drafting executable steps. Lean assumption for planning: a thin endpoint is needed (the smaller-surprise direction — easier to drop a planned endpoint than to discover a missing one mid-build).
get_current_seed) — the endpoint (if needed) wraps it, doesn't reimplement it.DraftSpecification.tsx already renders a seed during creation — the committed-seed viewer can reuse or adapt that rendering rather than build a fresh seed-display component (confirm at CR whether it's reusable for the committed read or create-bound).revise_seed/considerations machinery) is the next piece and depends on this one.
After create-restore (or alongside — both are "surface what exists end-to-end" and both touch the in-engagement / home surface). Prerequisite for the seed editor and a building block for the generator integration. Frontend (+ likely a thin engine read endpoint). Ships on the Operator-Layer feat-companion-surface branch (with the engine endpoint on engine main if needed).
DUNIN7 — Done In Seven LLC — Miami, Florida Loomworks — seed viewer — scoping note — v0.1 — 2026-06-28 After commit, an engagement's seed is invisible on the surface though the engine holds it, versioned and readable. This adds a read-only viewer of the committed seed (fields in plain terms, current version) reached from the in-engagement header. Likely frontend + a thin GET-seed endpoint (confirm at CR). Read-only — the prerequisite for the seed editor and a building block for the generator integration.