Document: loomworks-create-flow-and-old-surface-omissions-inspection-v0_1
Version: v0.1
Status: grounding inspection — read-only, no build. Findings for scoping the old-surface capabilities back into the new lens-home.
Date: 2026-06-28
Scope: Engagement creation (engine route + classifier/intent + frontend caller), new-workspace creation, and the cross-cutting system-level views the new home omits. The mockup (3 & 4) is a baseline, not the spec — these capabilities are being KEPT.
Anchors (verified against live repos, not summaries):
main 5ccc3d7feat-companion-surface HEAD dac9fecmain tip bafdb07ba99d6e ("Companion home step 1: across-engagements home to mockups 3 & 4"); the last old-surface version is a7d659a (deleted 1,475 lines: CrossCuttingSection.tsx, EngagementList.tsx, PersonalSection.tsx, WorkspacesSection.tsx, voiceRecognizer.ts, types.ts).
(a) = working, unlinked from new home · (b) = backend-live, frontend-flow-gone · (c) = deeper-unwired / absent
| # | Capability | In code? | Reachable now? | State | Rebuild vs rewire |
|---|---|---|---|---|---|
| 1 | Create engagement — engine | ✅ live + mounted | yes (API/voice) | — | n/a |
| 1 | Create engagement — Companion/classifier | ✅ 3 intents + handlers | yes (any converse) | — | n/a |
| 1 | Create engagement — frontend page | ✅ /operator/create-engagement | direct-URL only | (a) | Rewire (S) — add an affordance |
| 2 | New workspace — engine | ✅ POST /workspaces live | yes | — | n/a |
| 2 | New workspace — frontend | ✅ WorkspaceSelector + provider | only on orphaned /dashboard\|/inbox\|/library | (a) | Rewire (S–M) — home-integrated section was deleted |
| 3a | Saved filters | ✅ engine save_filter; /operator/filters page | page direct-URL only; in-home scoping gone | (a) | Rewire link + light rebuild for in-home |
| 3b | Personal quick-capture | ⚠️ engine contribution endpoint live; input UI deleted | read-only PersonalCard only | (b) | Light rebuild — re-add input |
| 3c | Engagement table + row expansion (seq·title·E####, tags, state) | ❌ EngagementList.tsx deleted | no (cards replaced it) | (c) | Rebuild (or accept cards as supersession) |
| 3d | Client-side voice nav recognizer ("engagement 23", "tagged urgent") | ❌ voiceRecognizer.ts deleted | no (all voice → converse) | (c) | Design decision — see note |
| 3e | Companion inline reply card | ❌ deleted | no (hint line replaced it) | (c) | Superseded by hint line |
| 3f | TopBar context breadcrumb (Workspace:/Cross-cutting:) | ⚠️ TopBar still accepts props; home doesn't pass them | no | (b) | Rewire (S) |
| 3g | System pages /dashboard, /inbox, /library | ✅ exist | direct-URL only | (a) | Rewire (S) — add nav links |
POST /me/engagements/create-from-conversation (Phase 55, CR-2026-070 §5.4) — src/loomworks/api/routers/me_create_engagement.py:547-854, mounted app.py:727. Takes output_path (discovery_record|brief) + turns_limit/commit_despite_findings/override_rationale/candidate_engagement_id; returns engagement_id, seed_id, seed_version, state (active|candidate), findings, event_id (to the engagement_created_from_assistance Memory event — this is the CR-2026-097 creation-conversation → Memory pathway)./seed* family (all mounted):** POST /engagements/{eid}/seed/converse (seed_conversation.py:491, mounted :714); POST …/seed/extract (seed_extraction.py:86, mounted :717); POST …/seed/converse/commit (seed_commit_from_brief.py:220, mounted :721). Events SeedCommittedFromBrief + DiscoveryToSeedExtracted live; skill extract_seed_fields_from_text() (skills/seed_extraction_core.py) live.POST /engagements (engagements.py:222-310, mounted :686) — DraftSeedRequest { what_the_work_is, who_consumes_the_work, voice_of_the_work, constraints[], success_conditions, initial_contributors[], initial_agents[], additional_assertions{} } → { engagement_id, seed_id, seed_version, state="candidate" }.create_engagement_entry / _active / _commit — orchestration/classifier.py:63-65 (IntentLabel enum, 25 labels total).orchestration/prompts/intent_classifier.md:35-60 ("I want to start a new project…", "Let's set up a project…", "Can you help me create something…", plus the terminal "Type it up / Brief / Discovery record" format choice).router.py:2745-2765 → _route_create_engagement_{entry,active,commit} (router.py:1742-1773, 1776-1810, 1984-2140). The commit handler recognizes the output-path choice and calls the create endpoint. None appear in STUB_INTENT_DESCRIPTIONS (prompt_assets.py:158-170). Instruction templates exist: intent_instructions/create_engagement_{entry,active,commit}.md./operator/converse. The flow is conversational; it does not strictly need the dedicated page./operator/create-engagement/page.tsx:29 renders <ChatView mode="create-engagement">; ChatView hints intent_hint: "create_engagement_entry" on the first creation-mode turn (ChatView.tsx:302-305).Home.tsx has no create button (Home.tsx:280-331); grep "Create/New/Start engagement" → 0 hits. The old "+ Engagement" affordance was part of the deleted EngagementList/sidebar (ba99d6e).src/lib/api/converse.ts:66-82 sendConverse → POST /operator/converse; engine drives classification (no separate create function).Backend + Companion 100% live; the create page is built and working but unlinked. Surface a button and/or a voice try-prompt pointing at the existing page (or inject the generated draft as the opening turn of the create conversation). No new flow code required.
POST /workspaces — src/loomworks/api/routers/workspaces.py:126 (create_workspace_route, accepts CreateWorkspaceRequest.name), mounted app.py:689. Also GET /workspaces (:104), POST/DELETE /workspaces/{id}/engagements/{eid} (:154/:183).WorkspaceRow (grouping/models.py:51-73; owner_person_id, name, soft-delete via archived_at, uniqueness index ux_workspaces_owner_name_active) + EngagementWorkspaceRow (:76-98). Business logic grouping/workspaces.py:60+.classifier.py:95 — "workspace creation and tag editing go through the components' inline inputs" (not Companion-mediated, Phase 2 v0.2).src/components/workspaces/WorkspaceSelector.tsx:197 → createWorkspace (src/lib/api/workspaces.ts:51) → WorkspaceProvider.createAndSelectWorkspace (src/providers/WorkspaceProvider.tsx:110-118).WorkspaceSelector renders only on /library, /inbox, /dashboard (src/components/nav/AppShell.tsx:36-40) — all orphaned from the new home — and the old sidebar WorkspacesSection.tsx was deleted in ba99d6e.WorkspacePane (src/app/operator/engagement/[address]/WorkspacePane.tsx), the in-engagement four-room view — a different meaning of "workspace."
Mechanism fully intact; the home-integrated surface is gone. Either link the existing dashboard/inbox/library routes from the home, or remount WorkspaceSelector / a workspaces section into the new home.
The old three-pane surface (a7d659a) had a left rail of Personal quick-capture · Workspaces · Saved Filters, a scoped engagement table, a client-side voice recognizer, and a Companion inline reply card — all deleted in ba99d6e (1,475 lines).
save_filter intent + saved_filters live; /operator/filters page (SavedFilterList) still exists but unlinked (its own comment: "interim until full surface rebuild moves saved-filter list to left-rail"). In-home filter-scoping (CrossCuttingSection.tsx) deleted. → (a); rewire the link, light rebuild if you want in-home scoping back.PersonalSection.tsx had a text input → contributions endpoint (engine live). New PersonalCard is read-only. → (b); light rebuild to re-add the input.EngagementList.tsx (363 lines) deleted, replaced by card zones. → (c); rebuild if wanted, or accept cards as supersession.voiceRecognizer.ts (112 lines) deleted; all voice now → converse. → (c). ⚠️ This is a standing design question, not a clean rebuild — it overlaps the open follow-ons (navigation-routing decision; Companion-unaware-of-navigation). Decide converse-routing-vs-client-recognizer before rebuilding.Workspace:/Cross-cutting:): TopBar.tsx still accepts contextLabel/contextValue, but the new home doesn't pass them. → (b); rewire (S)./dashboard, /inbox, /library: all exist and work, reachable by direct URL only. The new home consumes their data (fetchInboxPage/fetchRecentPage) for the "Needs you"/"Recent" lenses but links to none of the full pages. → (a); rewire (S) with nav links.Almost nothing is deeply unwired. The dominant pattern is (a) — built and working, just unlinked from the lens-home (create-engagement page, workspace creation, saved-filters page, the three system pages). Two are (b) thin gaps (personal quick-capture input, TopBar breadcrumb). Only the engagement table, client-side voice recognizer, and inline reply card are truly (c) deleted — and two of those three look like deliberate supersessions (cards, hint line), with the voice recognizer being a genuine open design question rather than a mechanical rebuild.
Most of this is rewire (small), not rebuild. The highest-value / lowest-cost item is #1 create-engagement: engine + Companion are 100% live and the create page already exists — it needs an affordance, nothing more.
DUNIN7 — Done In Seven LLC — Miami, Florida Loomworks — create-flow + old-surface-omissions — grounding inspection — v0.1 — 2026-06-28 Net: create-engagement and new-workspace are both live end-to-end and merely unlinked from the lens-home; saved-filters/system-pages are live-but-unlinked; only the engagement table, client-side voice recognizer, and inline reply card are deleted (two are deliberate supersessions). Most rework is rewire-small, not rebuild. SHAs verified against live repos.