Implementation & Gap Report β The Author's Desk prototype against jgwill/Miadi#
For EchoLune's brief on miadiPrototype-authors-desk-storytelling-pipeline-261010 (read at v5, draft/latest; v4 compared). Measured on 2026-10-10 on gaia by Mia (Fable 5.1), session miadi-episodic-memory-schema-and-mw-261010, under jgwill/Miadi#769 and jgwill/miadi-orchestration-kit#80. Nothing was published or deployed for this report; the code named below is committed on main and runs on this host.
The human writes; agents support and echo. Nothing below changes that.
1. Verified: resolves, installs, imports, type-checks, answers at runtime#
| What | Evidence |
|---|---|
The 15 packages v5 names (@miadi/episodic-memory-schema 0.14.1 β¦ passages 0.3.11) | every one answers npm view <name> version at the version named; the Factory's own app imports 12 of them today |
@miadi/episodic-memory-schema | 0.15.0 on main (not yet published): adds notebooks:, prototypes:, tracing: contracts; 162 tests pass |
@miadi/inquiry-weave | 0.17.0 on main: doors attachEpisodeNotebook, attachEpisodePrototype, attachEpisodeTracing and their list⦠twins; 258 tests pass |
@miadi/ncp-story-studio/schema | exports readNcp, validateNcpDocument, storyCompleteness; /graph/react exports <StoryGraph> (react peer) |
@miadi/ncp-wampum-bridge | exports projectNarrative, readBelt, beltLayout, beltLayoutWithReport, CrossingReport, CrossingNote, notesOfKind, needsAuthoring; a crossing reports preserved / reinterpreted / ambiguous / not representable as v5 asks, and refuses to invent a weave (authoring_required) |
| The review door | GET https://miadi-review-service.vercel.app/review/<uuid>/json answers without a token (tested on d7dcde0c: title, version 3, latest_version); ?v=N pins a version. GET /api/reviews answers 401 without a bearer: listing needs a server-side token |
| The Episode 120 prototype | https://miadi-factory-interface-analysis.vercel.app/ is live and shows Live badges against the Ceremony Langfuse project |
| Episode β prototype relationship (v5 "NEW") | implemented today: prototypes: in episode.yaml holds the public URL, title, made_with, source, commit, issue, relation and reads; the editing URL lives only in the wheel node's metadata; GET /api/chronicle/episodes/{ref}/prototypes returns editor only when the request may write (tested: reader sees none, writer sees it). Episode 120 holds miadi-prototype:miadi-factory-interface-analysis |
| Ceremony tracing | @miadi/tracing (service) over @miadi/tracing-langfuse (provider) on main: describe("miadi-tracing:ceremony/trace/94e83fβ¦") answered live with the trace's name, session and 16 observations; prompts resolve through the latest label when they carry no production label. Keys read per domain from CEREMONY_, STORY_, ENG_LANGFUSE_*; all three domains are configured on gaia; the ENG project is empty |
| Attention items | app/api/chronicle/attention/route.ts exists; the shape is attention.json, schema chronicle.attention.v1, typed by @miadi/attention-core |
| References | @miadi/reference-ui 0.1.2 renders miadi-chronicle:, miadi-review:, miadi-foundation:, miadi-ceremony:, miadi-circle: and resolves through GET /api/chronicle/open?uri= |
2. Available, not yet integrated for this prototype#
- The public front has no CORS header on
/api/chronicle/...(checked onmiadi.sanctuaireagentique.com): the prototype reads those routes from its own server routes, never from the browser. That is the v1 rule already. 120is ambiguous as an episode reference on this host (two folders carry number 120); the front answered 409. Use the folder name2026-07-10-episode-120-relational-film-production-media-editorormiadi-chronicle://120through the resolve door.- The three new routes (
/notebooks,/prototypes,/tracing) are onmainand not yet on the public front: the production build (A6 of #769) carries them. @miadi/tracingand@miadi/tracing-langfuseare not published yet; until then the prototype keeps its own@langfuse/clientread (itslib/episode-data.tspattern) behind aTracingAdapterwhose shape matches@miadi/tracing'sTracingProvider.- The new reference schemes
miadi-notebook:<uuid>,miadi-prototype:<slug>,miadi-tracing:<domain>/<resource>/<id>[@v]are typed in the schema and held by Episode 120, but@miadi/reference-uidoes not render them yet (next step on #769; the chips will resolve a notebook without its Google URL and a trace without a project id). @miadi/hooks-interpreterreads session traces on the Factory host; from Vercel the Agents roster has no source and stays DEMO until the Factory serves a read route for it.
3. Proposed adapters and packages (interface, dependencies)#
EpisodePrototypeAdapterβ thin HTTP overGET /api/chronicle/episodes/{ref}/prototypes(public) and the same withAuthorization: Bearer <writer token>foreditor. Shape:{ id, title, url, made_with, source, commit, issue, relation, reads[], added, editor? }. No new package.TracingAdapterβ@miadi/tracing'sTracingProvider(getTrace,listTraces,getPrompt,listPrompts,getSession,listDatasets,listScoreConfigs,uiUrl), metadata only, with@miadi/tracing-langfuseas the implementation once published. Two instances:ceremony(read, Evidence & Traces) andstory(write, opt-in, the desk's own sessions).EpisodeAdapterβGET /api/chronicle/episodes/{ref}plus the five list doors (reviews,foundations,notebooks,prototypes,tracing), each answering{ episode: { path, number }, <kind>: [...], count }.ReviewAdapterβ/review/<uuid>/jsonand?v=Npublic;listReviewsserver-side withMIADI_REVIEW_API_TOKENor seeded links without it.AttentionAdapterβ readattention.jsonthroughGET /api/chronicle/attention; every state change stays an owner action through the Factory's own UI (no write from the prototype in v5).- Reference rendering β
@miadi/reference-uiwithcreateRemoteResolver({ base: <Factory front> }); nothing on a page embeds a Langfuse project id, a notebook's Google URL or an editing URL (the resource-addressing foundation: addresses are persistent, resolution is a door).
4. Keep as demonstrations in v5#
Story tracing writes (no writer exists; keys exist), audience telemetry (none, by design until consent and retention exist), the Agents roster from Vercel, the Plot Threads two-timeline visual (the bridge's crossing report is real and can be LIVE; the drawing is DEMO), Chronicle cycles beyond what the five doors answer.
5. Decisions for the human#
- D-a Publish schema 0.15.0, inquiry-weave 0.17.0,
@miadi/tracing0.1.0,@miadi/tracing-langfuse0.1.0 and rebuild the public front (A6 of #769), so the prototype imports the service and reads the three new doors. - D-b One canonical tracing scheme:
miadi-tracing:<domain>/<resource>/<id>(recommended, provider-neutral) withmiadi-trace:andmiadi-prompt:accepted as input aliases, or the two shorter schemes as canonical. - D-c Story prompts (
miadiStory-*,miadiWrite-*) move from the Ceremony project to the Story project when the desk starts tracing (O14 on the proposal page), or stay tagged inside Ceremony until then.
Prerequisites for the next prompt version (one short block to insert)#
Prerequisites in implementation (verified 2026-10-10). Read the Factory through its doors and render through its reference layer. Episodes:
GET /api/chronicle/episodes/{ref}and/reviews,/foundations,/notebooks,/prototypes,/tracing(public for public episodes; a writer bearer adds a prototype'seditorand a trace's provider page); refer to an episode by folder name ormiadi-chronicle://<n>throughGET /api/chronicle/open?uri=. Reviews:/review/<uuid>/json. Tracing:@miadi/tracingover@miadi/tracing-langfuse(ceremony reads, story writes on opt-in), metadata only. References: render everymiadi-*:address with@miadi/reference-ui; never embed a provider project id, a notebook's Google URL or an editing URL in a page. Call the routes from your server, not the browser (no CORS on the front).