DUNIN7 · LOOMWORKS · RECORD
record.dunin7.com
Status Current
Path change-requests/cr-2026-209-loomworks-title-both-faces-v0_1.md

DUNIN7-M4 — INFRASTRUCTURE CHANGE REQUEST

CR-2026-209 — Titles, both faces: candidates are named at draft, and derivation stops shipping the whole description (v0.1)

Version. 0.1 · Date. 2026-08-12 · Author. Claude Code (drafting, from the E0128 walk Finding 3) / Marvin Percival (approving). Target. /Users/dunin7/loomworks-engine (surface renders whatever title carries — Step 1 verifies no surface change is needed). Baseline. Engine cd91176. CC confirms at Step 0. Companion to. inspection-briefs/loomworks-e0128-walk-findings-v0_1 Finding 3 (record da86274); the batch filing's item 2. Charter. Autonomous regime. Status. DRAFT — awaiting the gate. Do not execute.


0. Settled — the Operator's ruling, 2026-08-12. Do not re-raise.

The two-faced item, as one fix. Derivation alone leaves candidates untitled; titling candidates alone inherits the truncation. A fix covers both or it isn't the fix:

1. The changes

A. Face 1 — candidates are named when their seed lands. Wherever a candidate acquires a seed (the brief-path draft; door 3's seed/extract; the Phase 40 draft path — Step 1 enumerates the sites against code, the fifth-wrong-premise check), the same derivation writes the candidate's title (COALESCE-guarded so an operator-supplied name always wins, matching the promote branch's discipline). A candidate is never NULL-titled once it has a seed to be named from. Pre-seed candidates (door 3's seedless draft-candidate row, before upload) remain untitled for that window only — named at extract, the first moment a name is derivable; Step 1 verifies the window's surfaces say "Untitled" gracefully rather than blank.

B. Face 2 — derivation produces a label, not a description. derive_title_from_seed currently ships the leading what_the_work_is text with an ellipsis. It becomes a deterministic clause extraction: the operator-supplied name when present (unchanged, first); else the first sentence of what_the_work_is clipped at a clause boundary (comma/dash/semicolon) within a word-boundary budget (~60 chars, no mid-word cuts, ellipsis only when a clause was actually cut). No LLM — a deterministic function stays testable and free. Flagged for the Operator at the gate, not decided here: if model-derived names are wanted (a real "title" rather than a better clip), that is an LLM-seam design with cost and drift questions — a different CR; this one makes the deterministic derivation honest about being a label.

C. Backfill, scoped narrowly and named: existing NULL-titled candidates (E0128, E0129, any others found at Step 1) get the Face-1 derivation applied once, by migration or script — candidates only, never retitling committed engagements (their titles, however imperfect, are in use; E0089's improvement applies only if it is re-derived, which this CR does not do — face 2 governs new derivations).

2. Consequences named, so they are chosen

3. Tests — each observed failing first

derive_title_from_seed: clause-boundary cases (sentence, comma-clause, word-boundary budget, no mid-word cut, ellipsis-only-when-cut, operator-name-wins). Face 1: each enumerated seed-landing site writes the title; the COALESCE guard; the pre-seed window. Backfill: NULL-titled candidates named, committed rows untouched. Existing title/creation suites re-run (B-68 item B's tests included).

4. seed-mutability impact

Kind A expected, and named: title derivation READS the seed (what_the_work_is) at draft/extract time and stops at the engagement row — a computed signal that stops at a boundary. If the seed later moves (B-69's standing question), the title does not follow it; that is today's promote-time behavior too, now merely earlier. Recorded per the verbatim heading discipline; checked at Step 1.

5. Build steps

| Step | What | Mode | |---|---|---| | 0 | Pre-flight — baseline, clean tree. | Auto | | 1 | Enumerate the seed-landing sites against code; verify surface reads; tests written, observed failing. | Auto | | 2 | Derivation rewrite; site wiring; backfill. | Auto | | 3 | Full suite; ruff; mypy (verdicts in full); migration/script up-down or idempotence check. | Auto | | 4 | Eye-test: a fresh conversational candidate carries a clause-label title through candidacy; E0128/E0129 named post-backfill; E0089 unchanged. | Auto | | A | Checkpoint. | Checkpoint | | 5 | Tag cr-2026-209-title-both-faces; push; watch the run. | Auto |

6. Acceptance gate

  1. Both faces demonstrably fixed in one deploy: a conversational candidate is named through candidacy; a fresh spec-door create gets a clause label, not the description.
  2. Operator-supplied names win everywhere (pinned).
  3. Backfill: candidates named; committed engagements untouched (pinned).
  4. Suite green; gates clean; run watched; eye-test observed.
  5. seed-mutability recorded (Kind A entry).

7. Kickoff prompt


Execute CR-2026-209 v0.1 at change-requests/cr-2026-209-loomworks-
title-both-faces-v0_1.md in loomworks-record. Engine repo. Confirm CR
number and baseline first.

§0: both faces in one fix — candidates named when their seed lands;
derivation produces a clause label, not the description. Step 1's
site enumeration is the fifth-wrong-premise check; run it before the
wiring. Backfill candidates only — never retitle committed
engagements.

DUNIN7 — Done In Seven LLC — Miami, Florida CR-2026-209 — titles, both faces — v0.1 — 2026-08-12 Named when nameable; a label, not a description.