DUNIN7 · LOOMWORKS · RECORD
record.dunin7.com
Status Current
Path change-requests/cr-restore-engagement-creation-affordance-v0_1.md

Change Request — Restore engagement-creation affordance (lens-home) — v0.1

Document: cr-restore-engagement-creation-affordance-v0_1 Version: v0.1 Date: 2026-06-28 Type: Phase change request — frontend only (Operator Layer loomworks repo). No engine, no classifier, no create-page change. Consumer: Claude Code (executor). Branch base: feat-companion-surface @ dac9fec (current OL HEAD; carries the mobile Companion surface + add-side work). Governing scoping note: loomworks-restore-engagement-creation-affordance-scoping-note-v0_1. Grounding: loomworks-create-flow-and-old-surface-omissions-inspection-v0_1 (capability is live, only the entry point is gone) + the CR-drafting grounding pass (real Home.tsx, HomeCards.tsx, create-engagement/page.tsx, TopBar.tsx at dac9fec).


Plain-language summary

You can create an engagement today — the engine, the Companion, and the create page all work — but there's no visible way in from the home where you manage your engagements. The old home had a create button; the new home (built to a mockup that omitted it) doesn't. This adds a create button back to the home that opens the create conversation. One control, both layouts (desktop and mobile), nothing new underneath — it points at the create page that already exists.


What's true today (grounded at dac9fec)


Seed alignment

Aligned — restores a capability the seed's success conditions assume (creating an engagement is the operator's first action). "Only show what is available" cuts toward this: creation IS available (live), so it must appear; its absence is the surface failing to show an available capability — the same omission class as upload / navigation / the mobile transcript.


Decisions (settled, grounded)

  1. The affordance is a create button (not a try-prompt — no prompt seam exists on the home). Settled by grounding.
  2. Navigate, don't open-in-placerouter.push("/operator/create-engagement"), reusing the working create page exactly as-is. The in-place option (rendering the create conversation on the home) is a deliberate later refinement, out of scope here.
  3. Both layouts — desktop (the lens-tab row's right cluster, where the static hint sits) and mobile (the home's mobile layout needs a create entry too).
  4. Follow the card-button idiom — a <button> with the home's existing button styling, router.push on click, no focus-set.

Decisions deferred / out of scope (named, not built)


The build — steps

Per-step commits, suite green at each, halt-before-push. Frontend only; no engine, no migration, no create-page change.

Step 0 — inspect before building (no code)

Confirm against feat-companion-surface @ dac9fec:

  1. Branch is at dac9fec.
  2. Home.tsx lens-tab row structure (:298-325) — the flex-1 spacer + HOME.voiceHint right-cluster placement is as grounded, so the create button has a home in that cluster.
  3. The home's mobile layout (:335-431) — where a create control sits there (the mobile home has Personal pinned above a swipe stack + an anchored bottom bar with a mic). Identify the mobile placement (lean: near the header or as a visible control above/within the zone list — NOT hidden in the bottom bar, which is the voice composer).
  4. The existing button/tab styling tokens to match (the lens-tab buttons and the CARD class in HomeCards.tsx) so the create button reads as native chrome, not a bolt-on.

Report findings, then build.

Step 1 — Desktop create button

In Home.tsx, add a create button to the lens-tab row's right cluster (:298-325), beside or in place-of-prominence with the static HOME.voiceHint. The button:

Suite expectation: new visible control; existing home tests unaffected (additive). Add a test: the create button renders on the desktop home and navigates to /operator/create-engagement on click.

Step 2 — Mobile create button

In Home.tsx's mobile layout (:335-431), add the same create affordance, placed per the Step-0 finding (lean: a visible control near the header or above the zone list — not buried in the voice bottom bar). Same router.push("/operator/create-engagement") handler.

Suite expectation: add a test: the create button renders on the mobile home and navigates on click. Existing mobile-home tests unaffected.

Note: Steps 1 and 2 may collapse into one commit if the create button is a shared element both layouts render (cleaner — one button component, placed in each layout). Lean: a single shared CreateEngagementButton (or inline shared element) rendered in both layouts, one commit, rather than two divergent inline buttons. CC's call at build time based on the real layout structure — but prefer the shared element to avoid two buttons drifting.

Step 3 — Strings

Add to HOME in src/lib/strings.ts:

Confirm the vocabulary wall accepts it (it uses "engagement" already throughout HOME).


Acceptance

What this does NOT do (scope boundary)


DUNIN7 — Done In Seven LLC — Miami, Florida Change Request — Restore engagement-creation affordance (lens-home) — v0.1 — 2026-06-28 Adds a create-engagement button to the lens-home (desktop + mobile) doing router.push("/operator/create-engagement"), following the card-button idiom minus focus-set. The capability is live end-to-end; only the entry point was dropped to a mockup. Frontend-only, additive, on dac9fec. Desktop home voice + other omissions named but out of scope.