DUNIN7 · LOOMWORKS · RECORD
record.dunin7.com
Status Current
Path substrate/loomworks-engagement-identity-record-v0_1.md

Engagement identity — record of decision

Version. v0.1 Date. 2026-06-25 Author. Claude.ai, under Operator direction, grounded on Claude Code (CC) read-only engine traces. Status. Decision record. Captures what engagement identity is, what the engine actually implements, the design intent it diverged from, the misframings caught and corrected along the way, and the Operator's decisions. Settled where marked settled; deferred items named explicitly. Grounds the Companion's engagement-addressing design. Grounds on. CC read-only traces of the engagement model, ID generator (migration 0065), membership/contributor/invitation/claim wiring, and live dev data (2026-06-25). The 2026-05-17 addressing design (chat "Architectural rethink operator surface design"). The 2026-06-09 Companion architecture foundation (Scope axis built on the engagement identity scheme).


Plain-language summary

An engagement has more than one identifier, and each does a different job. The confusion that prompted this record came from treating one of them — the human-friendly E#### — as if it carried identity everywhere, when it does not. The settled position:

Today the engine is in-instance only (no federation), so the cross-instance ambiguity people worry about cannot occur yet. The decisions here govern both today's reality and the federated future when it is built. The "running out of E numbers" worry is a non-issue — the scheme is backed by a 64-bit counter (effectively inexhaustible); the only forward caveat is a frontend one (don't assume the ID is exactly four digits).


1. The four jobs of engagement identity

"Engagement identity" is not one thing. It is four identifiers serving four distinct needs. Collapsing them is what caused the confusion.

| Job | Who uses it | Handle | Scope | |---|---|---|---| | Speak / recall | the Operator, by voice | the name / title ("Goosey") | local, human | | Personal terse handle | the Operator, tersely | operator_sequence_number ("23"; Personal = "0") | per-person, within one instance | | Cross-person, in-instance | all members of an engagement | E#### (display_identifier) | instance-local, shared by all members | | Cross-boundary identity | machines / sharing | the UUID (primary key) | global, unique by construction |

Every job has a handle that exists today. Nothing is missing. The problem was never a missing identifier — it was treating the instance-local E#### as the cross-boundary handle when the UUID is.


2. What the engine actually implements (CC, 2026-06-25)

Grounded, not assumed:


3. Contributorship today — Model A, in-instance (CC, 2026-06-25)

The question that had to be settled: when someone other than the owner participates in an engagement, are they a member inside the same instance, or an Operator of a separate instance with the engagement shared across them?

Verdict: Model A — in-instance. Federation does not exist.

Consequence: within an instance, E#### is unambiguous — every member of an engagement sees the same one. The cross-instance E#### collision (two instances both minting E0007) cannot occur today, because no engagement crosses an instance boundary. It is purely a federation-future concern.


4. The decisions (Operator)

4.1 The UUID is the engagement's identity. It is globally unique by construction and already exposed. Cross-boundary reference uses the UUID. Sharing an engagement is "a message with the ID (UUID) attached" — machine-mediated, not human-typed. No human-readable cross-instance ID is required, so no instance-identifier and no namespaced E#### need to be built.

4.2 E#### is a local label, assigned per instance. Within one instance it is shared by all members (engine, today). In the federation future, when an engagement is shared across instances, the receiving instance assigns its own local E#### to the same UUID — one UUID, many E####s. The E#### never needs to be globally unique, because two parties holding different E####s for the same UUID is expected and fine.

4.3 The UUID is preserved on share, never regenerated. This is the load-bearing constraint of 4.2: the receiving instance stores the same UUID (wrapped in a fresh local E####). If a new UUID were minted, the two sides would have two identities for one engagement and the scheme breaks. The UUID is the invariant; the E#### is the variable.

4.4 Humans never reference E#### across instances. Within an instance, address by name / operator_sequence_number / E####. Across instances, always the machine path (message + UUID / link). Each instance shows its own local E####; cross-instance, the human acts on the shared thing, not on a number.

4.5 The E#### scheme stays as-is. Four-digit minimum padding, instance-wide sequence. Not changed. (See §6 — capacity is a non-issue; the only forward caveat is a frontend one.)


5. Corrections preserved (the trajectory, not just the destination)

The path here included several positions that were wrong and were corrected against engine fact. Recorded so the reasoning is reconstructable:


6. The "running out of E numbers" question — a non-issue

The one forward caveat is a frontend one, not an engine one: surfaces that show the ID must not hard-code a four-character E#### width or assume exactly four digits — the ID can grow to E10000+. This is a render-robustness note for the engagement-list and any ID-displaying surface. No engine change. (Operator decision: leave the scheme alone; it only matters if it messes up an interface render, and the mitigation is the frontend caveat above.)

Two known properties of the E#### label (recorded, not problems to fix):


7. Consequence for the Companion (what this unblocks)

The Companion addresses engagements instance-locally: by name ("open Goosey"), by operator_sequence_number ("open 23"), and/or by E#### ("open E0007") — accepting whichever the Operator reaches for, since the engine carries all three. The UUID is the invisible cross-boundary identity, never spoken, carried inside any share-message. The canonical displayed handle stays E#### (shared, unambiguous within the instance), per the engine.

This settles engagement addressing, which was the open question blocking the Companion home-surface design. The home can now be designed: engagements addressed and labeled locally, Personal as an engagement with visibility='personal' (it is an engagement — same machinery, distinguished by visibility), the UUID underneath as identity.


8. Deferred — named, not blocking

These are real and belong to the federation future or to adjacent strategic threads. None blocks current work.


DUNIN7 — Done In Seven LLC — Miami, Florida Engagement identity — record of decision — v0.1 — 2026-06-25