Version. 0.2 Date. 2026-05-29 Status. Working draft. Closes the composer-upload-port work (item 3) and the 2026-05-28/29 arc. v0.2 corrects an omission in v0.1's tracked-item list and points at the research arc that followed the arc's close.
This document closes the composer-upload-port work (item 3) and records the five-item-arc final state. v0.2 changes from v0.1: it restores the conftest finding (§15.2's open structural item) to the tracked follow-up list — v0.1's five-item framing dropped it — and adds a pointer to the source-identification / FORAY research arc that began after this arc closed. No build state changed between v0.1 and v0.2; this is a record-accuracy correction.
The headline result is unchanged: item 3 — file upload through the in-engagement composer — is complete and verified live on both surfaces. Shape 2 (a shared upload hook both surfaces consume), five build steps plus one gap-closing test, frontend behaviour preserved and proven. Before the build, the session paid down record debt (queued-directions §15.3 filed; the Phase 60 manifest mislabel corrected). The decision recorded is that item 3 is done; what carries forward is the tracked follow-up list (now complete) and the research arc's grounding note.
The list from the 2026-05-28 evening handoff, closed:
b793aef, 427c446). Prior session.d5d57ee). Prior session.Numbering note (corrected in v0.2). The 2026-05-28-evening handoff framed the open list as four items, bundling two methodology candidates — route-redisposition (§15.1) and the suite-wide conftest fixture (§15.2) — together under its "Item 4." v0.1 of this handoff renumbered to five (item 4 = route-redisposition alone, item 5 = passkey) and in doing so dropped the conftest finding from the numbered list entirely. The conftest finding is a real, tracked, open structural item (§15.2) and is restored to the follow-up list below. Both methodology candidates travel together into the v0.21 methodology consolidation whenever that consolidation happens; neither is build work.
Shape 2: the upload orchestration (formerly inlined in ChatView's handleUpload) extracted into a shared, turn-type-agnostic hook (src/hooks/useEngagementUpload.ts) consumed by both ChatView and CenterPane. The composer's upload goes direct to the engine (/engagements/{id}/uploads) via the existing postUpload — the Operator Layer has no backend tier. Draft persistence was added to CenterPane in the same arc (parity with ChatView). Build steps, each its own commit: Step 1 d67173c (extract hook, ChatView consumes), Step 2 002be2e (CenterPane draft persistence), Step 3 74e1d26 (mount affordance, remove disabled placeholder), Step 4 2e938a7 (consolidated tests), 401 gap-closer c2ca4db. Final code head c2ca4db; 399 tests; typecheck and lint at baseline.
Live verification (both surfaces, 2026-05-29): CenterPane — live affordance, single/multi/folder upload, typed-text-plus-file as two preserved turns, draft persistence survives navigation and clears on commit, both extract and fallback paths. ChatView regression check — single upload works unchanged. ChatView's refactored path is unbroken.
b3ec366) — added §15.3 (upload content does not reach assertion grain) plus two documentation corrections. Archived v0.19, v0.20.8f57ff3) — corrected Entry 101's Phase 60 mislabel, added Entry 105, recorded the upload-pathway phase-identifier as unreconciled. Archived v0.42.822a75a) and CR v0.2 (09876d0) in change-requests/..md is canonical.onClarificationPick not wired. On CenterPane an upload that returns a clarification card renders it, but its buttons have no wired action (no chip-to-reconverse path like ChatView's). Observed live. Small follow-up; the manual-content fallback works..json / .html. Engine extracts .md, images, and others, but not .json/.html, which fall back to manual-content. Engine work (upload-facility-extension, queued-directions §4), not a frontend defect. Surfaced clearly by live testing.record.dunin7.com/operations/discipline-mechanisms/ editor page serves editor.js/site.css as text/html. Record-site serving issue, unrelated to this work.tests/conftest.py api_client fixture overrides get_db_session with a yield-only session carrying no commit/rollback envelope; ~85 test files inherit it. Same structural shape that hid the upload-handler transaction bug, but not currently hiding an active bug; left unchanged deliberately (mechanically applying the production envelope would break tests asserting same-session reads of uncommitted writes). The methodology candidate: a suite-wide override diverging from the production envelope is a standing bug-hiding surface even when no bug is present; remediation is a finer instrument (per-test envelope opt-in, or commit-on-clean-yield plus a lint), not a mechanical change. Travels with the route-redisposition candidate into the v0.21 methodology consolidation.c2ca4db); listed for completeness. Was a pre-existing coverage gap, now covered.
Assertion-grain gap (queued-directions §15.3). Upload writes a UploadEventReceived Memory event with full provenance but drafts no individually-affirmable Assertions (assertions_drafted hardcoded empty; no downstream promoter). Upload content is searchable and provenance-attributable but does not reach the assertion grain the rest of Memory operates on. Independent of item 3; present on the path ChatView used before this work; a real engine work item, unsequenced. This is "Memory-completion item B" in the research arc below.
After item 3 closed, the session opened a strategic/foundational inquiry that is mid-arc, not closed — a fuller handoff will be written when it closes. What happened so far, and where it lives:
memory_events uses the rich ActorRef; conversation_turns uses only person_id + a two-value role); surface labeling discards designation (a Contributor is labeled as the Operator); domain_expert is built but inert.loomworks-foray-integration-grounding-investigation-v0_1 (this session) captures the live dunin7-foray v3.0.0 SDK contract verbatim, the reflection-layer principle, the demo-vs-live adapter finding, the actor-string-vs-ActorRef gap, and the attestation conceptual model from the Manuka example. This grounds the source-identification scope.ActorRef, surface the four source-kinds honestly, and be FORAY-complete-and-seam-marked (data completeness + reserved-location seams; no dunin7-foray dependency taken in item C). The scoping note is the next artifact.
This v0.2, plus: queued-directions bumped v0.21 → v0.22 (folding the §15.1-resolved edits already committed at 7f0d6c0, with a changelog entry); the FORAY grounding note filed in foray-reference/ or investigations/. Spec v0.5 (correcting three stale upload-in-flight lines in §10/§11/§13) remains deferred as its own absorption pass.
| Repository | Head | State |
|---|---|---|
| Engine (loomworks-engine) | d5d57ee | Unchanged this session. |
| Operator Layer (loomworks) | c2ca4db | Composer upload port; pushed; tag composer-upload-port-v0_1. |
| Record (loomworks-record) | (batch) | v0.21→v0.22 bump, this handoff v0.2, FORAY grounding note — landing in the consolidation batch. v0.1 handoff and CR v0.2 already pushed (aac6564). |
v0.1 (2026-05-29). Initial close handoff for the composer-upload-port arc.
v0.2 (2026-05-29). Restored the conftest finding (§15.2) to the tracked follow-up list (v0.1's five-item framing had dropped it). Added the research-arc pointer (Memory-completion direction, roles research, FORAY grounding note) and the record-consolidation-pass note. No build state changed.
DUNIN7 — Done In Seven LLC — Miami, Florida Loomworks Session Handoff — Composer Upload Port — v0.2 — 2026-05-29