DUNIN7 · LOOMWORKS · RECORD
record.dunin7.com
Status Current
Path investigations/loomworks-upload-pathway-ground-truth-v0_1.html

Upload Pathway — Ground Truth

Version. 0.1  ·  Date. 2026-07-01  ·  Type. Investigation / grounding (read-only).
Base. engine main @ 2abcfd1 (post-CR-2026-129, Room 1 closed).
Reconciles. upload-pathway-investigation v0_1, upload-vision-conversion-bug-diagnosis v0_2, Phase 59 CR (CR-2026-092 v0.4), queued-directions §15.3.

Target end state. Upload a file / folder / image → it becomes Memory. Images: the system interprets the image and that description becomes a held assertion the Operator confirms (machine describes → proposes → human approves), through the same capture→confirm→commit grammar as a spoken note. Non-image files/folders: stored, and their content interpreted into a recallable description that also becomes Memory.

Headline. There are two image rails. The old one drafted a Memory assertion; the current one doesn't. That split — not a broken vision skill — explains both the "it worked before" recollection and the live "0%, no description" symptom.

Rail A — Phase 16 /contributions (older)Rail B — Phase 58/59 /uploads (current chat/composer)
EndpointPOST /engagements/{id}/contributionsPOST /engagements/{id}/uploads (uploads.py:441)
Image visiondescribe_image_skill (skills/image_description.py)image_vision_analysis (claude-sonnet-4-6)
Lands in Memory?YES — creates a held Assertion + lineage (contributions.py:280)NOassertions_drafted=[] hardcoded (uploads.py:661)
Storagelocal diskMinIO / S3 object store

The frontend chat/composer upload moved onto Rail B. Vision still fires, but its output stops at event grain and never becomes an assertion — a rail switch that dropped the Memory-landing, not a regression inside the vision code. Git history confirms image_vision_analysis was born complete (9405cb7), refined (516a005), and fixed not disabled (bd05d5c); no commit ever stubbed it or removed a key. A live upload on 2026-06-02 shows the vision call actually firing.

1. What works

2. What's broken (the 0% surface — not what it looks like)

The "image_metadata 0% / image_ocr 0% / image_vision_analysis 0%, no description" picker is not skill confidence — skills have no confidence field (they emit reliability ∈ succeeded/unreliable/failed). Those percentages are the executor's chain-disambiguation heuristic (per_candidate_scores):

Distinct from the key-gate: a missing Anthropic key would surface transformation_failed with an error message, not the 0% picker. Vision's key is DB-resolved via system_config.loomworks_llm_key / engagement key — not an env var. Two independent problems: (a) multi-candidate image routing dead-ends at 0% before running anything; (b) even past that, vision needs a DB-stored loomworks_llm_key.

3. What's absent

4. Phase 59 reconciliation + prior findings

Salvageable vs net-new (for scoping)

Read-only. Nothing was modified. Grounding for scoping — no fixes, no design decisions.

DUNIN7 — Done In Seven LLC — Miami, Florida · Loomworks — Upload Pathway Ground Truth — v0.1 — 2026-07-01