DUNIN7 · LOOMWORKS · RECORD
record.dunin7.com
Status Current
Path scoping-notes/loomworks-creation-conversation-memory-pathway-scoping-note-v0_2.md

Loomworks Scoping Note — Creation-Conversation → Memory-Assertion Pathway — v0.2

Plain-language summary. When you create an engagement and commit it, the engagement comes alive with a faithful seed — but its Memory is empty. Zero assertions. The facts you stated while creating it (Fenwick is a houseplant, it sits on the west windowsill, it was watered Tuesday) were never written into the engagement's Memory. The render reads committed assertions, so with none there is nothing to render. The architecture already settles that the creation conversation is supposed to feed Memory — that pathway was simply never built. This phase builds it. Folded in: the committed seed currently lands on the shared commons rather than on the engagement it belongs to (a scoping bug), and one open design question — whether the seed-creation conversation is itself an engagement or a dedicated surface — gets settled here because it governs where the draft seed and the conversation's facts live before the engagement exists. v0.2 absorbs the Step 0 inspection brief: the pathway is confirmed unwired at code level, an adaptable analog mechanism already exists, and the three open decisions are now settled with engine code in view.


0. What changed from v0.1 (Step 0 absorption)


1. The problem, stated against the design (confirmed at code level)

The live walk (Fenwick → E0060) verified end to end against the engine database: an engagement commits cleanly, becomes active, carries a faithful seed — and holds zero committed assertions. Step 0 confirmed this at code level: the commit path (POST /me/engagements/from-conversationcommit_engagement[_divergent]_create_engagement) writes only the Engagement object (a seed_ref pointer) plus a wasDerivedFrom relationship. No assertion is written anywhere on the creation path. The conversation is read exactly once — at commit, by the seed extractor — and never for assertions.

The render chain is Render ← Shaping ← Manifestation ← committed assertions. With no assertions, the chain has no input. The render machinery was never the blocker. Getting the engagement's facts into its Memory as assertions is.

What the design settles (architecture specification v0.4, confirmed verbatim at Step 0):

Zero assertions post-commit is an unwired pathway, not a designed resting state.

The analog mechanism that already exists (Step 0). The in-engagement remember intent (router.py:282) takes one classified fact per turn and writes a held assertion via add_assertion, committed by commit_assertion. It is the closest thing to the pathway this phase builds — but it hard-rejects engagement_id IS NULL, so it cannot run on the creation conversation (which has no engagement yet). The pathway adapts this existing mechanism rather than inventing a new one.

Corrections-preserved is revise_assertion, not a supersede op (Step 0). There is no distinct supersede operation. Corrections are handled by revise_assertion — a new held version plus a wasRevisionOf relationship, with prior versions reachable via history. This is the contract Decision B rides on.


2. What this phase covers

In scope:

  1. The creation-conversation → Memory-assertion pathway. Take facts stated during engagement creation and write them into the engagement's Memory as committed assertions with provenance. Adapt the existing remember / add_assertion / commit_assertion mechanism. Headline deliverable.
  1. Seed-scope fix (folded in). The committed seed must be scoped to its engagement, not commons E0001. Confirmed at code level: draft_seed writes the seed on ADMINISTRATIVE_ENGAGEMENT_ID (= E0001); the committed engagement holds only a seed_ref pointer; the seed is never re-homed. DB confirms E0060's seed 6db3f37c is physically on E0001. The fix re-homes the seed onto the engagement at commit. This also clears the orphaned-seeds residue (see §6).
  1. Settle the deferred §13 scope question. Whether the seed-creation conversation is itself an engagement (S####) or a dedicated surface. Settled in this phase as Decision C (§3) — not deferred again.

Out of scope (parked, for the manifest — not this phase):


3. Open design decisions — SETTLED (Step 0, code in view)

Decision A — When assertions are written. SETTLED: at commit, from the reviewed conversation. Step 0 confirmed the conversation is already read once, at commit, by the seed extractor. Assertion-writing rides the same commit boundary: when the Operator commits, the reviewed conversation's facts are extracted and written as held assertions, then committed through the held → commit ceremony — atomic with the engagement becoming active. Rationale: assertions enter Memory exactly when the engagement becomes real, from the conversation the Operator actually reviewed; no pre-engagement assertion home is needed (which simplifies Decision C). The alternative — incremental per-turn writes before commit — was set aside because it requires an assertion home before the engagement exists, pulling toward the heavier S#### path, and risks writing facts the Operator later revises away during the same creation conversation.

Decision B — Extraction grain and provenance. SETTLED.

Decision C — Seed-creation-conversation scope. SETTLED: Option 2 (dedicated surface). The creation conversation is a pre-engagement surface, not an S#### engagement. Concretely:

Rationale: Decision A (write at commit) means the conversation only needs to be readable at commit, not to host live assertions beforehand. The lighter surface is sufficient and avoids introducing a second engagement per creation plus a promotion/migration step. The S#### path remains on record as the considered-and-deferred alternative.


4. Verification discipline (carried forward from the walk)

This phase inherits the walk's methodology: verify every claimed success against the engine database — never trust the surface. Every fault the walk found reported success at the UI and passed the test suite; only reading the engine caught them.


5. State this phase builds on (verified at Step 0)


6. Items to reconcile before the change request

  1. Orphan-seed count: 7 vs 6. Step 0's DB read found 7 unreferenced seed lineages on E0001; the walk handoff and the cleanup provenance record (operations/loomworks-environment-cleanup-2026-06-01-orphan-engagements-v0_1.md, 77074f1) cited 6. Reconcile which is correct (likely 6 candidates + E0061's seed = 7) so the seed-scope fix targets the right set. Action: a one-line confirm against the cleanup record at change-request drafting.
  2. Canonical-source items — now confirmed at Step 0: spec §02/§03 wording ✓ (creation conversation named verbatim as a pathway), seed v0.9 current with load-bearing commitments unchanged ✓, manifest v0.48 ✓, engine main 813f13f ✓. The only open canonical item is the §16→§13 citation, corrected in this v0.2.

7. Next step

Change-request drafting handoff. Step 0 has settled the mechanism, the timing, the grain, the provenance, the corrections contract, and the scope question — the change request now specifies the build:

The change request is drafted in a fresh chat from a drafting handoff, per the phase methodology sequence.


Loomworks scoping note — creation-conversation → Memory-assertion pathway — v0.2 — 2026-06-01