DUNIN7 · LOOMWORKS · RECORD
record.dunin7.com
Status Current
Path standing-notes/loomworks-standing-note-foray-emission-state-v0_1.md

Standing note — FORAY emission state in Loomworks — v0.1

Version. 0.1 Date. 2026-07-29 Status. Standing note. Cross-phase reference for Claude and Claude Code. Author. Claude.ai. Operator: Marvin Percival. Grounding. Claude Code inspection of loomworks-engine at main, 2026-07-29. Current-status manifest v0.75. FORAY Protocol Specification v4.1.2 via the foray skill.


Plain-language summary

What this note does. It records, once, what FORAY attestation actually does inside Loomworks today, so that no future document has to re-derive it and no future document repeats the error this note was written to stop. The short version: the hook is placed correctly and does nothing.

What changed. Nothing in the code. What changed is that an outward-facing document claimed attestation was firing, a second document claimed it was being built, and both were wrong. This note fixes the fact in one place.

What decision is needed. One, and it is the Operator's: whether Loomworks emission to FORAY gets scheduled, and where in the queue. This note does not recommend an answer; it makes the answer choosable by stating the position accurately.


1. What FORAY comprises

A FORAY transaction decomposes into up to four components — Arrangements, Accruals, Anticipations, Actions — and carries foray_metadata, which includes the commitment sealing the transaction: transaction hash, chain transaction identifier, block height, confirmation time.

The seal is not an accessory to the four components. It is what makes the chain tamper-evident rather than merely structured, and it is the reason FORAY is an evidence protocol rather than a transaction format. Describing FORAY without it misdescribes FORAY. This matters for document discipline: the seal belongs in every architectural description of FORAY, unhedged, because it is true of FORAY.

2. What Loomworks does today

Nothing reaches FORAY.

A counting trap, because the next person to check will hit it. Grepping FORAY_RESERVED_LOCATION returns seventeen hits, and grepping _foray_reserved_emit( also returns seventeen. Both overcount by one, for different reasons: the first includes the marker as it appears inside the emitter's own docstring at foray/reserved_emit.py:9, where it documents the convention; the second includes a docstring line in credit/flows.py. Neither is a call site. Both methods converge on sixteen executable calls.

An earlier draft of this note said seventeen, from exactly this trap. Manifest v0.75's total of sixteen is correct. What is stale in the manifest is the breakdown: it records 3 audit + 1 memory + 12 credit, whereas the live composition is 3 audit + 1 memory + 11 credit + 1 conversation — a credit marker moved and conversation.turn (conversation_turns.py:198) was added after that line was written, so the total coincidentally still sums while the parts no longer match.

3. What is genuinely right

The architecture commitment holds, and it is the load-bearing half.

append_event at memory/events.py:247 is the single write site for memory_events. Ninety-three callers converge on it. It emits one reserved-location call per write, carrying the event identifier and the anchor-priority hint. Contribution and approval actions reach it through engagement/assertions.py at six call sites.

So every recordable action does traverse the chokepoint, and the chokepoint is at the substrate rather than at any surface — which is precisely the FORAY-emission-at-the-substrate commitment. A replaceable surface cannot route around it. The hard architectural problem is solved. What is missing is the far end of the wire.

4. Not in flight

Two commits in the repository's entire history have touched src/loomworks/foray/, both from the substrate cleanup arc (Phases 61 and 62). Both are ancestors of main. No commit on any branch, local or remote, modifies reserved_emit.py beyond its creation.

There is no branch where an implementation waits. "Being built" is as false as "working today."

5. The false friend

tune_setting.py:96 logs "FORAY audit write failed". That is a real database write, but to the engine's own local audit table via write_setting_change_event. It is the engine's audit substrate, FORAY-labelled in prose only. It is not an attestation to FORAY.

Anyone grepping for FORAY and finding a real write path will find this one. It is the most likely route by which the claim gets re-introduced.

6. The three buckets

The error this note exists to prevent came from having two buckets — working today, and being built — leaving a design commitment with no scheduled work nowhere honest to sit. It was placed in the first, moved to the second, and both were wrong. Use three:

| Bucket | What belongs in it | |---|---| | What FORAY is | The four components and the commitment that seals them. Architecture. Stated unhedged, because it is true of the protocol. | | What Loomworks does today | Passkey confirmation on every consequential transition. Attribution, visible corrections, machine-origin marking. | | Architected, hook placed, unscheduled | Loomworks emission to FORAY. Chokepoint at append_event; sixteen markers; nothing on the far end; no work scheduled. |

The third bucket is not a weakness to bury. It is the strongest architectural statement available: the part that is hard to retrofit is done, and what remains is wiring.

7. Consequences for documents in flight

Prospect-facing documents. Attestation appears in architectural description of FORAY, never in a Loomworks readiness list. The passkey ceremony carries the today-guarantee. Corrected in the plain-English set at v0.3 and the deal walkthrough at v0.4.

The OVA Slice 1 change-request drafting handoff lists "FORAY anchoring" among its five surfaces. Read against this note, that names a hook, not a behavior. Before the change request is drafted, the Operator should decide whether Slice 1 wires the emitter — in which case the scheduling decision in Section 8 is answered by that CR — or whether Slice 1 places markers like every other surface, in which case the handoff's wording needs to say so. This is a pre-drafting decision, not a drafting detail.

Manifest. The marker total of sixteen is correct and needs no change. The breakdown corrects from 3 audit + 1 memory + 12 credit to 3 audit + 1 memory + 11 credit + 1 conversation at the next absorption pass. Low urgency; recorded here so the next author does not restate the stale split.

8. The open decision

Whether to schedule Loomworks emission to FORAY, and where.

Arguments for scheduling it sooner: it is the difference between the evidence-grade claim being true and being architectural; the venture vertical's commercial argument leans on it; and the surrounding work is done, so the remaining slice is bounded.

Arguments for leaving it: no customer is live, so nothing unattested is accumulating that would need back-filling in a way the chokepoint's design does not already handle; the FORAY service integration is cross-protocol work with its own dependencies; and the passkey guarantee is sufficient for the pitches currently in front of firms.

Not recommended either way here. Named so it is choosable.


DUNIN7 — Done In Seven LLC — Miami, Florida Standing note — FORAY emission state in Loomworks — v0.1 — 2026-07-29