DUNIN7 · LOOMWORKS · RECORD
record.dunin7.com
Status Current
Path scoping-notes/loomworks-in-engagement-commit-affordance-scoping-note-v0_1.html

DUNIN7 · Loomworks · Scoping Note

In-engagement commit affordance

Version. v0.1
Date. 2026-06-25
Author. Claude.ai (scoping), under Operator direction.
Status. Scoping note. Frames a surface-design question, lays out alternatives, recommends a default. Precedes a Change Request. Not a Step 0 — the CR will require live-tree grounding. No build authorized.
Grounds on. Seed v0.12 (in context); this session's screenshots (engagement E0007/E0060, dashboard); CR-2026-121 completion record; CC component-level findings (the commit affordance lives only in DashboardView.tsx; the engagement-page components carry zero references to it).

Plain-language summary

The Companion can commit held drafts — but only on the dashboard's "Needs you" zone, a cross-engagement triage surface. When the Operator is working inside an engagement, talking to the Companion about that engagement's held drafts, there is no way to commit them without leaving for the dashboard. The engagement page lists the held drafts in its inbox rail, but as a read-only list with no commit control.

This was observed twice this session: the Operator went to the engagement page looking for the commit affordance and it was not there. The affordance was built into the dashboard (CR-2026-121 §5.1 scoped it to DashboardView's "Needs you" card); the engagement page was never under that CR.

This note frames the question — should the commit affordance also live on the engagement page, and in what form — lays out three options, and recommends one. It does not build anything and does not decide; the Operator decides which option becomes a CR.

The gap, grounded

What the session established, not assumed:

The gap is precise: the held items are already listed on the engagement page; they are simply not actionable there.

Seed alignment — why this is expected, not scope creep

Three seed commitments bear on this, and all three point toward closing the gap:

No conflict. Closing this gap implements a standing commitment and stays inside the seed's surface and authority rules.

The three options

Option 1 — Same affordance, second location

Render the dashboard's held card (the existing HeldNoteCard and its commit machinery) in the engagement page's inbox rail, filtered to this engagement's held items.

  • Operator gets: the identical experience — held numbers, multi-select, Commit selected / Commit all — in the rail where drafts are already listed.
  • Mechanism: reuse HeldNoteCard / commitAssertion / HELD_COMMIT; the card path commits through the human session (same authenticated POST as dashboard and Workshop), so R-B20 / human-authority is satisfied with no new work.
  • Cost: low — largely reuse-and-place.
  • Risk: the dashboard card may carry cross-engagement assumptions (it shows engagement names per item); in-engagement those are redundant. Minor presentation adjustment.

Option 2 — Engagement-scoped variant

A commit affordance on the engagement page purpose-built for the single-engagement context — same commit mechanism, presented for "these are your current engagement's drafts," potentially by making the rail's existing "Held assertion — awaiting commit" rows actionable in place rather than adding a separate card.

  • Operator gets: the same commit actions, on a surface designed for in-engagement use — no redundant engagement labels, drafts presented as part of this engagement's working state.
  • Mechanism: same commit POST and authority model; the difference is presentation — the rail rows become actionable rather than hosting a transplanted dashboard card.
  • Cost: low-to-moderate. More design intent than Option 1; no new backend.
  • Risk: slightly more frontend design; payoff is a surface native to the engagement page rather than a dashboard component visiting.

Option 3 — In-conversation commit

Commit woven into the Companion conversation itself — the Operator is already talking to the Companion about the drafts; commit happens inline in the chat, not as a card in the rail.

  • Operator gets: commit at the point of discussion — "commit held 2," or a confirm-card inline in the thread.
  • Mechanism: substantially overlaps with CR-2026-121's already-built verbal commit path (commit_assertion intent, confirm-back, human authority). Less "new affordance," more "surface the verbal path prominently in-engagement and/or render the confirm-back inline."
  • Cost: moderate, partly already paid — the verbal path exists; the work is discoverability.
  • Risk: the larger interaction-design question; touches how commit relates to conversation (connects to the queued Companion-as-Operator-interface direction). Could be over-scoped for a gap Options 1/2 close directly.

Recommended default

Recommendation — Option 2 (converging with Option 1)

Option 2 — engagement-scoped variant — as the default, with a note that it converges with Option 1.

  • The rail already lists this engagement's held items as "Held assertion — awaiting commit" rows. The most direct, most native fix is to make those existing rows actionable in place — the Operator sees the drafts there, commits them there.
  • It satisfies "only show what is available" cleanly: the actionable rows appear only when held drafts exist (the rail already lists them only when present), so there is no disabled-control problem to design around.
  • It reuses the entire commit backend and authority model (card-path POST, human committing party, R-B20) — no new endpoint, no new authority surface. The work is frontend presentation.
  • It converges with Option 1 in mechanism; the only difference is whether the held rows become actionable in place (Option 2) or host a lifted dashboard card (Option 1). If, at CR Step 0, the rail's structure makes lifting the existing card materially cheaper, fall back to Option 1 — same outcome for the Operator; the choice is an implementation detail surfaced by live grounding.

Option 3 is deferred, not rejected. The verbal path it would surface already exists (CR-2026-121); making it prominent in-engagement is worth doing, but it is a distinct, larger interaction-design question connected to the queued Companion-as-Operator-interface direction. Closing the card-surface gap (Option 2) and surfacing the verbal path in-engagement (Option 3) are complementary, not alternatives — but separate pieces of work. This note's gap (the Operator reached for a commit control and found none) is closed by Option 2; Option 3 is a follow-on enhancement.

What a CR for this would need (not done here)

This note is not a Step 0. Before a CR is drafted, live-tree grounding must establish:

The CR should be drafted in a fresh chat with that grounding, per session discipline.

What this note does not decide