DUNIN7 · LOOMWORKS · RECORD
record.dunin7.com
Status Current
Path phases/open-engagement-intent/loomworks-open-engagement-intent-completion-record-v0_1.md

Completion Record — Spoken open/close intents (CR-2026-124 v0.2)

Record version. v0.1 Date. 2026-06-26 Change Request. CR-2026-124 — Spoken "open X" and "close" intents — v0.2 (2026-06-26). Status. Executed on branch cr-2026-124-open-engagement-intent through Step 3; suite green at every step; the 8-step spoken-loop database-truth walk passed; the anti-theft loop was exercised with a live key. NOT pushed — halt before push, awaiting Operator authorization. Executing agent. Claude Code on DUNIN7-M4. Operator. Marvin Percival. Grounded by. CR-2026-124 v0.2 (Step 0 §2, confirmed-live); the merged CR-2026-123 spine (engine 6f785f9, alembic 0095) supplying resolve_engagement_handle + set_current_engagement.


Plain-language summary

This is the spoken half of the current-engagement spine. CR-2026-123 made the engine able to resolve an engagement handle and set it as your current focus, but only through a direct endpoint call. This CR teaches the Companion the spoken triggers: say "open Goosey" (or "open 7", or "open E0007") and it takes you into that project; say "close" and it clears where you are. With both CRs merged, the full loop works — say "open Goosey," then "commit held 14" lands in Goosey without re-naming it, then "close" and the next unqualified instruction makes the Companion ask which project.

v0.2 folded a spoken "close" in alongside "open X" (your decision), so this CR adds two intents, not one. The risk in touching the live classifier is intent theft — a new intent capturing utterances that should mean something else, especially the common words in the "close" family ("close", "done", "leave"). That was checked empirically with a live Anthropic key: the two new intents classify correctly and a sample of eight existing intents still classify as themselves. No tuning was needed.


What shipped (per-step commits; suite green at each)

Branch cr-2026-124-open-engagement-intent off the CR-2026-123 merge 6f785f9. Not pushed. No schema change (classifier-only).

| Commit | Step | Change | |---|---|---| | 4a1a129 | 0 | Archive CR v0.2 as branch base (baseline 6f785f9, suite 2966/46, alembic 0095). | | 5e5d89a | 1 | open_engagement + close_engagement added to IntentLabel (23 → 25); two classifier blocks + the open_engagement PARAMETER EXTRACTION line in intent_classifier.md (the close block carries a disambiguation note vs orient and vs a confirmation turn); two instruction .md files; both enumeration guards bumped 23 → 25. | | d104c88 | 2 | _route_open_engagement (resolve handle → set focus → confirm; ambiguous-before-miss catch order) + _route_close_engagement (clear focus) + dispatch branches in route_intent; helpers _engagement_display_name / _ambiguous_open_message. All replies server-composed. |

Suite: baseline 2966 → Step 1 2966/63 → Step 2 2973 passed, 0 failed, 63 skipped. The skipped count is 46 baseline + 17 new LLM-classification tests (@skip_no_llm_key) that skip in the keyless gate. No schema change → no migration.


Anti-theft — exercised with a live key (the Step 1 care-point)

The classification + anti-theft tests (tests/test_cr_2026_124_open_close_intents.py) are LLM-dependent (the established test_classifier.py pattern: @skip_no_llm_key). They skip in the keyless suite, so they were run directly against a live Anthropic key (from the repo .env) to exercise the anti-theft loop the CR anticipated:

17/17 passed with the key. No tuning halt was needed (the expected "close"-collision halt did not fire).


Report (CR §5)

8-step spoken-loop database-truth walk (CR §3 Step 3) — playground_dev, rolled back

All passed:

  1. "open GooseyW" → focus set → an unqualified note (omitted project_id, converse-default → focus) lands in Goosey — PASS (the spine + voice end to end).
  2. "open 7" → focus to the sequence-7 engagement — PASS
  3. "open E996042" → focus (delegated resolution) — PASS
  4. "open 0" → Personal — PASS
  5. "open Notes" (two of them) → spoken candidates ("your number 3 or your number 4"), focus unchanged; a follow-up "open 3" sets the sequence-3 one — PASS
  6. "open Nonexistent" → plain not-found, focus unchanged — PASS
  7. "close" → focus cleared → the next unqualified note → router returns no_project (asks), nothing lands in Personal — PASS
  8. Classifier anti-theft — verified in Step 1 with the live key (17/17, incl. the 8 existing-intent samples) — PASS

Open after this record


State at completion


DUNIN7 — Done In Seven LLC — Miami, Florida Completion Record — Spoken open/close intents — v0.1 — 2026-06-26 CR-2026-124 v0.2