DUNIN7 · LOOMWORKS · RECORD
record.dunin7.com
Status Current
Path phases/phase-60-companion-as-operator-system-interface/loomworks-stream1-engagement-navigation-handoff-v0_1.md

Loomworks Architectural Rethink — Session Handoff (Stream 1, Engagement Addressing & Grouping)

Version. 0.1 Date. 2026-05-16 (evening) Author. Marvin Percival (DUNIN7 Operator) with Claude.ai Status. Self-contained handoff for a fresh chat. All scoping decisions in this document are settled; the next chat picks up at mockup production.


Plain-language summary

What this document is. A handoff capturing the engagement-addressing and grouping decisions settled during the 2026-05-16 architectural rethink session. The next chat picks up by producing v0.2 of the Stream 1 mockup space, focused on engagement-level navigation with these decisions baked in.

What's settled. Fifteen design decisions across engagement addressing, grouping (workspaces, tags), surface organization, and operator vocabulary. The model is complete enough that the mockup can be drawn without further scoping discussion.

What's NOT settled. Anything below the engagement-level navigation surface — specifically, the session-within-engagement navigation problem from Stream 1 v0.1 (three layout alternatives: sidebar / below-fold / card stack). That's a separate mockup track and isn't touched in this handoff.

What the fresh chat does first. Reads this handoff. Confirms shared understanding by restating the model (or asking clarifying questions on anything ambiguous). Then produces v0.2 of the Stream 1 mockup — single HTML file, engagement-level navigation, all fifteen decisions visible in the rendering.


1. Context

1.1 Where this fits

The Loomworks architectural rethink scoping arc opened earlier in the session (Stream 1 — Operator surface design). The original v0.1 mockup showed three layouts for session-within-engagement navigation (the "session-as-unit-of-work" model). That mockup is intact and reactable; it's not what this handoff is about.

This handoff captures a second design problem that surfaced during the same session: engagement-level navigation. How does an operator address engagements? How are engagements grouped? What's the surface organization that lets an operator move between engagements?

These two problems (within-engagement and across-engagement) are related but distinct. The within-engagement Stream 1 v0.1 mockup sits as a parallel track waiting for its own reaction. The engagement-level mockup is what comes next, in v0.2.

1.2 Session trajectory

Several substantial design moves landed across the conversation:

  1. Engagement identifier scheme opened with a proposal for per-operator sequence numbers and command vocabulary ("get session 23," "show sessions")
  2. Refined to distinguish engagement (substrate-level container) from session (unit-of-work within engagement); the per-operator addressing was for engagements, not sessions
  3. Added a universal global engagement ID for cross-contributor disambiguation, sitting alongside the per-operator personal number
  4. Worked through Personal engagement special-casing (number 0 + name Personal, dual-addressable)
  5. Established tags as lateral grouping and workspaces as vertical containment, both first-class, both supporting multi-membership
  6. Settled workspace navigation as "place-you-enter" (Reading A) with cross-cutting views as a peer surface area
  7. Settled cross-cutting view content as combination (system-defined + operator-defined Companion-mediated filters)
  8. Settled Personal engagement placement as expandable, above workspaces in the surface
  9. Settled persistence rules (personal numbers append-only, no reuse on archival)
  10. Settled global ID visibility (always visible) and format (E####, e.g., E4729)
  11. Surfaced a methodology-level principle: identifier formats should not require case-sensitivity to disambiguate from numerics (which is why E was chosen over L — lowercase l looks like 1)

2. The settled model — engagement addressing

2.1 Three-layer addressing

Engagements carry multiple identifiers, each serving a different addressing need:

| Identifier | Format | Example | Scope | Used for | |---|---|---|---|---| | Global engagement ID | E#### | E4729 | Universal — same value for every contributor in the engagement | Cross-person disambiguation; external references (emails, shared docs) | | Personal engagement number | Integer | 23 | Per-operator sequence; Operator A's 23 may be Operator B's 15 for the same engagement | Operator's own working-set handle; quick recall ("get engagement 23") | | Text description | Free-form string | "Loomworks commons" | Editable per-engagement | Human-readable name/meaning |

2.2 Personal engagement (the foundational one)

Reserved special-case. Every operator has their own Personal engagement.

2.3 Sessions within engagements

Sessions are bounded units-of-work within engagements (per the Stream 1 v0.1 "session-as-unit-of-work" framing). They have their own numbering scoped to the engagement, but the recall use case is rare. Most session navigation happens implicitly through the within-engagement surface (Stream 1 v0.1 territory). Direct invocation ("jump to session 7 of engagement 23") is power-user behavior, not the common case.

2.4 Personal-number persistence

Append-only. When an engagement is archived or closed, its personal number stays reserved forever. The operator's "engagement 23" five years from now is the same engagement, even if it's been dormant for years. Personal-number space grows monotonically.

2.5 Global ID format

Pure integer prefixed with E. No separator. Example: E4729.

Format rationale (filed as methodology principles in §4):

2.6 Global ID visibility

Always visible in the engagement list and engagement header. Not behind a hover state or a click. The reasoning: cross-person disambiguation is the use case the global ID exists for; making operators dig to find it defeats the point.

Visible-but-subtle treatment expected — small monospace-ish styling near the engagement description, not dominant.

2.7 Display conventions

In engagement lists, the canonical rendering is:


{personal_number} · {description} · {global_id}

Examples:


0 · Personal
23 · Loomworks commons · E4729
24 · FarmGuard September pricing · E5102
25 · Smith Q3 contract · E5118

Personal engagement (0) renders with name only; its global ID exists but the personal number 0 plus name Personal carry sufficient signal.

Sortable by personal number, description, last activity, etc. (decisions on default sort and available sorts can be made at mockup time — not load-bearing).


3. The settled model — grouping and surface organization

3.1 Tags

Lateral grouping. Free-form strings. Many per engagement.

3.2 Workspaces

Vertical containment. Named places. Many per engagement. Navigation context.

3.3 Cross-cutting area

Peer to workspaces. Filtered views without navigation state-shift.

3.4 Personal engagement placement

Expandable, above workspaces. Pinned at the top of the surface (sidebar or left rail), expandable when in use, collapsible when not.

The "above" placement signals foundationality — Personal sits structurally above the workspace organization, available regardless of which workspace is current. The "expandable" treatment respects that Personal is always there but doesn't always need to be loud.

3.5 Surface organization summary


SURFACE LEFT-RAIL (or equivalent)
├── Personal engagement (always at the top, expandable)
├── Workspaces (places-you-enter; navigation state)
│   ├── Smith Account
│   ├── Q3 Planning
│   └── (etc.)
└── Cross-cutting (filtered views; no state-shift)
    ├── Everywhere (all engagements)
    ├── Recent activity
    ├── Tagged urgent (operator-defined)
    └── (other operator-defined filters)

4. Methodology principles surfaced

Worth filing for v0.21 candidacy. Several of these came out of the architectural decisions and should be carried forward independent of this surface:

  1. Multi-axis identifier scheme. Engagements carry multiple identifiers (global ID, personal number, description, name aliases through tags) each serving a different addressing need. Single-identifier systems force compromises this avoids.
  1. Identifier formats should not require case-sensitivity to disambiguate from numerics. Surfaced when L was rejected in favor of E. Rules out L, I, O as prefix letters when typability matters.
  1. Typed-prefix scheme leaves room to grow. E#### for engagements; future entities can use S####, T####, etc. Scales without rebuild.
  1. Lateral grouping (tags) and vertical containment (workspaces) coexist. Different cognitive purposes, both first-class. Engagements can be in many of either. Don't collapse to one or the other.
  1. Place-you-enter (with state) and filtered-view (without state) coexist as navigation modes. Workspaces are places; cross-cutting views are filters. Both are first-class; the operator uses whichever fits the task.
  1. System-defined dual-addressing for special-cased entities. Personal engagement is addressable by both number 0 and name Personal. Sets precedent for similar dual-addressing on other system-special entities if any are added.
  1. Operator-defined cross-cutting filters are Companion-mediated. Defining a filter is a conversational act, not a chrome-driven action. Reflects the Companion-as-primary-interface principle from prior project knowledge.
  1. Append-only personal identifier sequences. Sequence numbers don't get reused on archival. The cost (growing number space) is small; the benefit (stable references in personal history) is significant.

5. What v0.2 of the Stream 1 mockup should show

When the fresh chat produces the mockup, it should render:

5.1 Required surface elements

5.2 What the mockup should NOT try to resolve

5.3 Open questions deliberately left for the mockup to surface

These are the right kind of open questions for a mockup to resolve — visual reactability is the cheapest way to settle them.


6. What's still open for the architectural rethink overall

This handoff covers Stream 1's engagement-level navigation only. Other streams of the rethink remain in various states:


7. Kickoff prompt for the fresh chat

Suggested opening for the next chat:


Opening the next step of the Loomworks architectural rethink. Read the
handoff document loomworks-stream1-engagement-navigation-handoff-v0_1.md
first. All fifteen decisions in that document are settled; do not re-open
them.

Confirm shared understanding by briefly restating the model — or ask
clarifying questions on anything ambiguous in the handoff.

Then produce v0.2 of the Stream 1 mockup space, focused on engagement-
level navigation with all settled decisions visible. Single HTML file.
Annotation conventions: deliberately-open visual decisions called out
inline. Versioning: this is v0.2 in the Stream 1 series because it
extends the same architectural rethink stream as v0.1 (the session-within-
engagement mockup), even though the focus is different.

Filename: loomworks-stream1-engagement-navigation-mockup-v0_1.html
(this is the first mockup focused on engagement-level navigation; the
v0_1 versioning is local to this sub-track; the Stream 1 v0.2 lineage
is conceptual rather than filename-encoded).

Discovery-record discipline applied. Plain English throughout.

Document trailer

DUNIN7 — Done In Seven LLC — Miami, Florida Loomworks architectural rethink · Stream 1 · Engagement Addressing & Grouping · session handoff v0.1 · 2026-05-16 Hands off to a fresh chat for v0.2 mockup production.