DUNIN7 · LOOMWORKS · RECORD
record.dunin7.com
Status Current
Path investigations/loomworks-resident-engagement-investigation-v0_2.md

Loomworks — Resident Engagement Investigation — v0.2

Version. 0.2 Date. 2026-05-09 Status. Investigation. Names a methodology construct (resident engagements) and the axes that separate it from delivery engagements. v0.2 calibrates the database-backed Memory framing in response to the Operator's correction: database-backed Memory is an available backing for engagements that warrant it — notably application-type engagements with a data repository, and transactional/operational engagements — not a default that displaces assertion-backed Memory generally. v0.1 is superseded by this version; the construct is unchanged but its claims about Memory backings are tightened. Author. Claude.ai (investigation layer). Operator: Marvin Percival. Provenance. Conversation initiated by the Operator's question about whether the line between Loomworks engagements and applications is blurring. Concrete framing: what is the difference between (option 1) an engagement that describes an Expenses application, versus (option 2) an engagement whose Memory holds what expenses are and into which expenses are uploaded, with a render that delivers answers? The question surfaced that option 2 is architecturally already supported and is the more natural shape for a large class of cases the methodology had been quietly framing as option 1. Informed by. Current-status manifest v0.36 (engagement-as-universal-adapter; operational vs infrastructure engagements; the Credit Management as first infrastructure engagement). Methodology v0.20 (engagement, Memory, four-room pipeline, render-as-deliverable framing). Phase 47 invitation/credit/referral scoping notes v0.3–v0.7 (Credit Management Engagement as standard engagement with own data store; the seam read; archetype generality). Closed-loop engagement investigation v0.1 (closed-loop as a use-case class distinct from delivery-class; observation/attribution separation). Agent Fabric investigation v0.1 (Companion as manager, specialists as workers). Memory-space-extensibility investigation v0.1 (N-space Memory, organization/team/role/domain Memory). Operator Layer discovery v0.4 (three populations of SDK consumers; applications named as a first-class render category; Specialist SDK). Queued directions v0.4 (engagement creation + Discovery-to-seed; metadata-driven runtime; non-text-shaped knowledge; quick-capture engagement). Render-feasibility puppy investigation v0.1 (delivery-class examples worked through; the kennel website case, the buyer contract case).


1. The framing question

The Operator opened with the observation that the line between Loomworks engagements and applications feels blurred, illustrated with two readings of an Expenses use case:

The Operator's reading: option 2 has what expenses are and what expenses have been uploaded, and "all we need then is a shape/render that is delivering answers." The question implicitly proposes that option 2 is not just a stylistic choice but a recognition about what engagements naturally do.


2. What lands

The line is genuinely blurring, and the blur is real because two readings of "engagement" have been carried forward in tension:

The newer reading is not a thought experiment. Phase 47's Credit Management Engagement was the architectural commitment that engagement-as-environment is a real category. The credit system doesn't describe a credit-tracking app — it is the credit system. The Operator never ships a credit application anywhere; they interact with the engagement via the Companion, and the engagement runs the system.

This investigation names the construct (resident engagement versus delivery engagement), identifies the axes that separate them, and shows that most cases the methodology had been framing as "applications-to-be-built" are more naturally framed as resident engagements doing what engagements already do.

The records-substrate question — whether records live as Memory assertions or in a co-located data store — was raised initially as a refinement, but follow-up turns of the conversation sharpened it into a primary axis: Memory backings. The architecture admits more than one backing for Memory; the assertion store is one backing, and what Phase 47 named as a "co-located data store" for Credit Management is structurally a second backing. Naming these as peer backings of the same construct rather than as Memory-plus-adjacent-store changes the language, the governance posture, and what an engagement's specialist is allowed to read and write without crossing a boundary. Sections §8 and §9 work this out; §10 names what governance looks like when held-then-commit is the wrong-shaped ceremony for the data being held.


3. Naming the construct

The two engagement classes are named:

The names emphasize the directional axis the question turns on: where does the consuming experience live? Inside the engagement (resident) or delivered out of the engagement (delivery)?

Naming alternatives considered and set aside:

Resident and delivery hold the directional sense without overloading existing vocabulary. They also make the common middle case nameable: a delivery engagement that has a resident reading (Credit Management, technically — its renders are corrective FORAY flows that ship into the credit substrate, but the substrate is itself part of the engagement, so the delivery isn't external) and a resident engagement that occasionally produces deliverables (Expenses producing a year-end PDF report for the accountant). The classes are dominant readings, not exclusive boxes.


4. Why the question felt like a blur

The blur is real, and tracing where it came from is worth the exercise because the architecture has been quietly absorbing the resident reading for months while the language stayed delivery-shaped.

The original methodology framing was delivery-shaped. Methodology v0.20 and earlier treats an engagement as the journey from intent to a confirmed shape that a render specialist produces. The default mental model is: someone wants something, the engagement specifies it, the render produces it, the deliverable lands. Most worked examples in early documents — contracts, IRB submissions, application code, storybooks — are delivery-shaped, and they reinforced the reading.

Phase 47 introduced the universal-adapter recognition without renaming. Credit Management was built as "an engagement whose specialist owns its own data store." The substrate change was real (a separate database schema, hot-path reads from outside the engagement, FORAY governance over operations). But the framing carried forward language like "co-located data store" and "the integration seam," which positions the data store as outside the engagement even though it's owned, operated, and governed by the engagement's specialist. The language treated the engagement as having an outside; the architecture treated the engagement as containing the substrate.

Engagement-as-universal-adapter was the right naming for the substrate move but didn't name the consuming-experience move. The recent-updates note in the manifest does name it ("any system wrapped as a Loomworks engagement gets Companion, pipeline, approvals, FORAY, OVA"), but the consuming-experience question — who reaches the system, and where do they reach it — is what makes resident a real category. Credit Management is consumed by Loomworks core (engine reads on the hot path) and by the Operator (via the Companion). Both consumers are inside Loomworks. There is no external delivery in the picture.

Most "applications" people think they need are resident. This is the load-bearing recognition. When someone says "I need an expenses app," they almost always mean: I want a place where I can put expenses and ask questions about them. That is what an engagement already is. The "app" framing is a habit imported from a world where the only way to have a place-with-questions was to build a separate piece of software with its own database, UI, and lifecycle. Loomworks gives that for free, with provenance, FORAY governance, Companion interaction, and N-space Memory composition included. The engagement isn't a specification for an expenses app; the engagement is the expenses environment.

The blur dissolves when both moves are named together: engagement-as-universal-adapter (the substrate move) plus engagement-as-environment (the consuming-experience move) jointly produce the resident class.


5. The axes that separate the classes

Three axes carry the distinction. They compose; they're not mutually exclusive.

5.1 Axis A — Where consumers live

When all consumers are inside, the engagement is naturally resident. When any consumer is outside, the engagement is pulled toward delivery for the part of its work that reaches that consumer.

5.2 Axis B — What the engagement primarily produces

These aren't exclusive — Credit Management produces both operational state and answers (the Companion answers "what's my balance" by reading state). An ad-management engagement produces both shipped deliverables (the ad creative) and operational state (placement, performance metrics). The axis is about which output dominates the engagement's purpose.

5.3 Axis C — Where substrate lives

When the substrate is inside, governance, audit, and provenance are uniform across the engagement's lifetime. When the substrate is outside, the engagement gives up some governance in exchange for reach.

5.4 How the axes compose

The cleanest reading of the resident/delivery distinction is Axis A and Axis C jointly. When consumers and substrate are both inside, the engagement is resident. When either is outside, it's delivery (or has a delivery component). Axis B then determines the flavor within whichever class:


6. Worked examples positioned across the axes

Six examples. Each is a real or near-real engagement; positioning them surfaces how the axes do their work.

Expenses (resident, personal). Memory holds what an expense is — categories, deductibility rules, vendor patterns, tax-period relationships, the Operator's filing conventions. Memory also holds the accumulated records (in database-backed Memory; see §9). Consumers: the Operator alone. Output: answers ("Q3 deductibles," "travel total," "uncategorized items"), occasional shipped deliverables (year-end PDF for the accountant — a delivery-component within an otherwise resident engagement). No external substrate.

FarmGuard (resident, workspace). Memory holds the agricultural domain — soil types, crop rotations, irrigation strategies, the farm's specific topology and history. Memory also holds sensor readings and observations over time. Consumers: the Operator and Contributors (farm operator, agronomist, researchers). Output: decisions ("when to irrigate," "which fields to rotate"), answers about the farm's state, occasional shipped reports (for crop insurance, for grant applications). Substrate inside.

Credit Management (resident, operational/infrastructure). Memory holds model profiles, oracle rates, asset taxonomy, codes, governance assertions for Companion-as-Authority. Database-backed Memory holds FORAY action flows. Consumers: Loomworks engine on the hot path (key resolution, balance reads), the Operator via Companion (balance answers, grant requests). Output: operational state plus answers. Substrate inside (in a database-backed Memory space). No external substrate, no external consumer.

The Loomworks methodology engagement (resident, workspace). Memory holds the methodology itself — the principles, the patterns, the build-record material, the queued directions. Consumers: the Operator (Marvin) and Claude.ai as Contributor. Output: methodology decisions, scoping notes, CRs (which are themselves delivery artifacts shipped to CC, but the engagement-as-thinking-ground is resident). The methodology engagement is interesting because it's resident and its renders are sometimes delivery artifacts — the engagement isn't classified by what its renders happen to be at any moment but by how the consuming experience composes.

Goosey storybook (delivery, with a resident scaffolding). Memory holds the Goosey domain — characters, story arcs, art style, target reading level, the parent's authoring preferences. Renders are storybook PDFs (or printed books) shipped to a child reader. Consumer: outside Loomworks. Substrate: the rendered storybook lives outside (it's a file the child reads). The engagement has a resident scaffolding (the domain, the working notes, the version history) and a delivery surface (the rendered book). Both readings are real; the dominant reading is delivery because that's the work the engagement primarily exists to do.

Custom kennel website (pure delivery). Memory holds the kennel domain — breeds, available litters, past breeding history, brand voice. Renders are a deployed website. Consumer: outside Loomworks (buyers searching the web). Substrate: the deployed website's runtime, hosted on Cloudflare or similar — outside Loomworks entirely. The engagement specifies; specialists deploy; the website lives elsewhere. Pure delivery.

The point of working through six examples: the resident/delivery distinction does real classification work. It doesn't put every engagement in a clean box, but it correctly identifies the dominant reading and surfaces where engagements have mixed components that the axes name explicitly.


7. The forces that push to delivery

Three forces, any one of which is sufficient to pull an engagement (or a part of an engagement) toward delivery:

When none of these apply — and for most personal-tracking, workspace, and operational-infrastructure cases none of them do — resident is the natural shape, and any push toward delivery is overbuilding.

A good test for an unclassified engagement: ask "could the Operator do this work by talking to their Companion in the engagement, with the engagement holding everything?" If yes, resident. If the answer needs a piece of software somewhere else, or a person somewhere else, or a substrate somewhere else, the part that needs to be elsewhere is delivery.


8. Memory backings as a primary axis

This section names what was raised initially as a sub-question and sharpened across follow-up turns into a primary architectural construct.

The calibration up front. This is not a claim that Memory should default to database-backed, or that Memory currently held in the assertion store should migrate. The recognition is narrower and more practical: certain engagements have data shapes for which database-backed Memory is the appropriate backing — most clearly application-type engagements that include a data repository, and transactional or operational engagements like Credit Management. For those engagements, database-backed Memory belongs in the architecture as a peer backing rather than as adjacent infrastructure. For everything else — most engagements in current scope, including the Loomworks methodology engagement itself, FarmGuard's working state, and the considered-claim portions of any engagement — assertion-backed Memory remains the default and the right shape. The construct adds a backing to the available set; it does not promote that backing to a new default.

Memory is a category that admits multiple backings. Today the methodology has framed Memory as a single thing — assertions in the assertion store, governed by held-then-commit, retrieved semantically. That framing was right for the assertion shape it described, but the framing implicitly forecloses a recognition the architecture has already made: Credit Management's "co-located data store" is also Memory, holding the engagement's records, governed by the engagement's specialist, contributing to the Companion's access set when queried. Naming it as a Memory backing instead of an adjacent store changes the language to match what's already true.

Two backings exist today, with a third sketched. Each has a fitness-for-purpose; the engagement chooses which backings it uses based on the data shapes it holds.

Backing is orthogonal to scope. The N-space Memory pattern (memory-space-extensibility investigation) named the scope axis: personal, engagement, organization, team, role, domain. The backing axis is independent. An engagement's Memory at the engagement scope can have an assertion-backed face (its domain knowledge: what an expense is) and a database-backed face (its records: what expenses have been uploaded). Personal Memory might be assertion-only today and gain database-backed personal records later (a personal task list with structured fields). Organization Memory might be primarily assertion-backed for shared knowledge and gain database-backed organizational records (employee directory, asset registry) as organizations adopt Loomworks.

Cross-backing reads are the interesting work. The richest case is when an engagement's assertion-Memory and database-Memory reference each other. "Categorize this expense as travel because the vendor matches the airline-pattern assertion in domain Memory" requires the Companion to read both backings and join across them. The composition is reasoning work for the Companion, not infrastructure work — provided the backings live in the same database technology, where joins are a native operation rather than a federation problem. §9 names why this single-technology constraint matters and what it implies.

What stays unchanged across backings. The Companion is still bound to the person. FORAY still attests at the appropriate granularity (per-assertion for assertion-backed; per-flow for database-backed). OVA still authorizes. The four-room pipeline still operates. The engagement still has its lifecycle. Renders are still produced from confirmed shapes. The only thing that changes is that Memory is now a category with multiple backings rather than a single store with one shape, and engagements declare which backings they use for which kinds of held material.


9. Database backing — Postgres, with declared sub-shapes

The database choice for the database-backed Memory backing is dispositive rather than weakly preferential. Postgres, with three declared sub-shapes per engagement.

9.1 Why Postgres

9.2 Alternatives considered and set aside

9.3 Three declared sub-shapes per engagement

Within Postgres, an engagement chooses among three sub-shapes based on the data's operational pattern. These mirror the engine's existing event-projection-state structure at the Memory-backing layer:

The sub-shape is part of what the engagement declares when it adopts a database-backed Memory space. The declaration is the governance event; CC and the engine know what to expect; the Companion knows what query patterns are available against it.

9.4 What this resolves

The records-substrate question raised at the close of the prior conversation turn — whether accumulated records in an engagement that warrants a data repository belong as assertions or in a separate store — is now reframed: for the engagements that warrant database-backed Memory in the first place (application-type engagements with a data repository, transactional/operational engagements), the records belong in Memory in a database-backed Memory space, on Postgres, in one of three declared sub-shapes. Engagements that don't warrant database-backed Memory (the majority) are not affected by this resolution; their records, where they have records, remain assertion-backed.

Credit Management is the existing instance (its co-located data store retroactively becomes its database-backed Memory space). Expenses with accumulated records — if the induction confirms that Expenses warrants a data repository, which the Operator's framing strongly suggests — is the next instance. The "co-located data store" language in Phase 47's scoping notes becomes a vocabulary residue to absorb in methodology v0.21.


10. Ingestion without held-then-commit — the analogous gate

Held-then-commit is the right ceremony for considered claims (assertions). It is the wrong ceremony for records arriving operationally (an expense uploaded from a receipt, a sensor reading from a field, a credit consumption from an LLM call). The methodology needs a peer ceremony for the database-backed case.

The analogue is an ingestion gate. The shape:

Schema declarations remain held-then-commit. Even though row-level events skip the hold for direct-commit cases, changes to the schema itself — declaring a new table, adding a column, registering a new ingestion handler — are governance-bearing in the assertion sense. They are considered claims about how the engagement structures its records. Held-then-commit applies. The schema is part of the engagement's vocabulary and travels through the same ceremony as any other vocabulary change.

What the gate gives. Three things:

What this means for Credit Management retrospectively. The pattern is already there — FORAY action flows are append-only event tables; balance is a projection; the writes happen through specialist-mediated paths that match the gate shape. Phase 47 built the right thing; the methodology naming was the gap. Methodology v0.21 should name the ingestion gate as the peer ceremony to held-then-commit and recognize Credit Management's pattern as the first instance.


11. Composition with existing engagement classes

The methodology has accumulated several engagement-class names across investigations. The resident/delivery construct sits among them as the top-level split; the others compose with it on different axes.

Composition example: Credit Management is resident, infrastructure, with closed-loop reconciliation feedback, at organization scope (Loomworks itself). Expenses is resident, operational, potentially closed-loop (as categorization refines), at personal scope. The kennel website is delivery, with a resident scaffolding, at workspace scope (the kennel as an organization).

The classes don't replace each other; they describe different axes. Methodology v0.21 should consolidate them into a single coherent taxonomy.


12. What this means for engagements currently in scope

Six engagements are in motion or queued. The construct repositions some of them.

The pattern across these positions: most engagements have a dominant reading and a secondary component on the other side. The construct doesn't force engagements into single boxes; it gives them precise vocabulary for the mixed cases.


13. Filed for consideration

13.1 Methodology v0.21 absorption

The v0.21 consolidation should absorb the following from this investigation:

13.2 Queued directions update

loomworks-queued-directions-and-deferred-work should gain or update:

13.3 Retroactive reading of Phase 47

Phase 47's Credit Management Engagement was the architectural commitment that engagement-as-environment is a real category. The framing language hadn't caught up; the vocabulary residue ("co-located data store," "the integration seam") positioned the substrate as outside-the-engagement when the architecture treats it as engagement-owned. v0.21 should retroactively rename without rebuilding — Phase 47 built the right thing; the naming is the consolidation work.

13.4 Open question — when assertion-backed Memory should adopt the ingestion-gate vocabulary

A finer question this investigation surfaces but doesn't resolve. Some assertions arrive operationally — a Companion-authored held assertion from a Phase 42 intent classification, an automated observation from a closed-loop performance loop. The Operator-confirmation step is structurally similar to the ingestion gate's commit step. Whether held-then-commit and the ingestion gate are two ceremonies or one ceremony with two parameterizations is worth examining when methodology v0.21 consolidates. This investigation files it as open; it doesn't push a resolution.

13.5 What this investigation does not do


14. Trajectory worth preserving

The conversation moved through five turns, and each one corrected the framing of the prior:

Each turn refined what the prior turn left underspecified. The pattern matters for trajectory preservation: the resident-engagement construct didn't land in one move. It landed across five moves, each correcting the prior framing's blur or overreach. Future readers reconstructing the path should see all five; none of them is dispensable.


DUNIN7 — Done In Seven LLC — Miami, Florida Loomworks — Resident Engagement Investigation — v0.2 — 2026-05-09