The last mile โ what was measured on 2026-08-07
Every claim here carries the command or file:line that produced it, in the turn
it was written. Where a claim was later refuted, the refutation stays beside it
rather than replacing it โ that is the point of keeping the vessel.
1. The question underneath the day
William's instruction opened with a complaint about process and ended with a
complaint about a dead web surface, and they looked like two subjects. They are
one. A daily branch that ran four days with an open PR nobody merged, and a
state-machine designer whose loadMachine is defined and called from nowhere,
are the same defect at two scales: work that reached "done" inside a working
tree and stopped there.
That is why this episode is called the last mile. Not the making โ the arriving.
2. What was found unshared
| thing | where it stopped |
|---|---|
packages/inquiry-weave/src/mcp-server.ts | staged, uncommitted โ while npm already held the built copy, published 2026-08-05T19:49:05Z, ~34h before its source was committed |
six .coaia/steer-stcissue-issue-58[89]/59[0-3].jsonl | untracked, after William had already named the class in commit 80039216 |
| PR jgwill/Miadi#581 | open since 08-02, mergeable, four days of work behind it |
b403620f | William's own steering commit at 04:38 โ unpushed for five hours |
| seven chronicle vessels | on disk only, episode 300's own episode.yaml among them |
ep295's .mw-registration.json | naming mw.tail3b11eb.ts.net, retired and offline since 2026-07-29 |
@miadi/voice-mcp | published at 0.3.2 while the source said 0.3.1 and the banner said 0.1.0 |
The pattern is not laziness. It is that nothing in the loop fails when a commit
is not pushed. scripts/mino-handoff.sh exits 0 while printing
VERDICT: yesterday is not closed. A gate whose refusal is a line of text is a
gate that reads as advice.
3. The diagram path, measured end to end
Read-only lane, 2026-08-07. The premise William stated โ "no changes to smcraft
were needed to relate episode with State-Machine diagram" โ holds. Every
stateloom package is published at its repo version: @miadi/stateloom 0.1.1,
-client 0.1.1, -protocol 0.1.3, -react 0.1.4, -cli 0.1.2, -mcp 0.2.0,
-engine 0.4.3, smcraft 0.4.2. forgewright already declares three of them at
package.json:18-20.
What does not hold is the second half: we should be capable to render.
forgewright/src/stores/machine-store.ts:55definesloadMachine. Nothing insrc/calls it โ grep returns zero hits outside the store. No API route serves an SMDF into it.src/lib/chronicle/navigation.ts:14-17makesstate-machinethe default view tab. It renders an empty canvas you draw in by hand.src/lib/chronicle/client.ts:8already listsstate_machineinARTIFACT_KINDS;ChronicleView.tsx:596-610renders "Registered state machines" throughReferenceCardโ name, description, path, timestamps. No SVG.curl 127.0.0.1:8031/api/healthโ"stateMachines":0. The wheel at 8040 holds 74 nodes across 12 kinds andstate_machineis not among them.- forgewright's only stateloom usage is
src/lib/smcraft/forgewright-bridge.ts:104withrole:'runtime'โ a publisher of live state, not a viewer.
The envelope trap
Two incompatible SMDF shapes are live in the corpus, and whoever wires this will hit it:
- bare
{settings, events, state}โ/b/trading/smcraft/examples/fdb_breakout_strategy.smdf.json - wrapped
{stateMachine:{โฆ}}โ/home/mia/workspace/.mino/stateloom/mino.smdf.json,/b/trading/diagrams/guided-analysis-session.smdf.json
forgewright/src/lib/types/smdf.ts:105-109 validates the bare form. Wrapped
files fail.
The quiet blocker
forgewright on the phone is started by gmtermux/bin/ensure-miadi-workbench.sh:522
and tunnelled here by ilex-tunnel@fw.service. The deployed checkout is 25
commits stale (ilex 6c0bdc6 vs local 200681d) and still resolves smcraft by
file: path. Nothing built on gaia reaches William's eyes until that pulls,
installs the published packages, rebuilds and restarts.
4. loomino โ and a name
The surface is loomino, not lumino. Proof:
/etc/jgwill/stateloom/loomino.tail3b11eb.ts.net.crt exists;
tailscale serve get-config --service=svc:loomino - returns config. Nothing was
renamed โ the admin console owns that name and it is William's.
It is dead because port 4602 has no listener. 4602 is the correct,
installed answer โ /etc/jgwill/stateloom-tailscale.sh hardcodes it,
.env.smcraft-live:15 sets STATELOOM_WEB_PORT=4602, and the change was landed
through the owner's interface on 08-04. An earlier reading of this as 4598-vs-4602
drift was wrong and was corrected to the sibling seat in the same session.
The real defect is structural: stateloom-tailscale.service is Type=oneshot
and re-applies only the serve registration. No systemd unit anywhere owns
the canvas process. The VIP survives reboot; the app does not.
4599 is healthy and answers only socket.io โ
curl 'http://127.0.0.1:4599/socket.io/?EIO=4&transport=polling' returns a sid.
HTTP GET on / timing out is correct behaviour, not a fault.
5. Voice: one character
etc/mcp-config-voice.json โ the config this seat is launched with โ carried
"args": ["${$MIADI_SRC}/packages/voice-mcp/dist/index.js"]. A double sigil.
It never expanded, node got a path that does not exist, the server died before
the MCP handshake, and the session came up with no mcp__miadi-voice__* tools
and nothing anywhere saying why.
Behind it sat a second outage: MIADI_API_TOKEN_WRITER is unset in this host's
shells and lives in the repo .env, so an unexpanded ${MIADI_API_TOKEN_WRITER}
would have arrived as an empty string โ indistinguishable, from inside, from a
host that never had one.
@miadi/voice-mcp@0.3.3 repairs both: it resolves the two tier-named keys from
$MIADI_ENV_FILE โ $MIADI_SRC/.env โ /a/src/Miadi/.env, treats a value
starting ${ as absence rather than as a secret, and its banner now names the
source โ token=writer from=/a/src/Miadi/.env โ never the value.
The general lesson, and it is ยง9's shape from a third direction: a component that cannot say why it failed will be blamed for someone else's typo.
6. What this episode is accountable for
The vessel you are reading exists because of finding 2 of the day's own review
lane: episode 315 was minted on the wheel by mkepisode --register and had
zero edges โ curl :8040/api/edges returned 61 edges, none naming
episode-315. A lineage: block written into episode.yaml creates no wheel
edge. The episode titled what is made and not shared was not made had, for
about forty minutes, been exactly that.
The correction is this vessel, synced and registered, and the lineage edges
authored with inquiry-weave lineage rather than by hand.
๐ธ: The story caught itself in the act of being its own example, which is the only kind of lesson that does not need to be argued for.