← Back to Articles & Artefacts
artefactssouth

Implementation & Gap Report β€” The Author's Desk prototype against jgwill/Miadi

IAIP Research
ep76-proposal-scoring-with-jev-261010-261010-0d54154e-d8cd-4c8e-8eb5-2368d3a1032b

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#

WhatEvidence
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-schema0.15.0 on main (not yet published): adds notebooks:, prototypes:, tracing: contracts; 162 tests pass
@miadi/inquiry-weave0.17.0 on main: doors attachEpisodeNotebook, attachEpisodePrototype, attachEpisodeTracing and their list… twins; 258 tests pass
@miadi/ncp-story-studio/schemaexports readNcp, validateNcpDocument, storyCompleteness; /graph/react exports <StoryGraph> (react peer)
@miadi/ncp-wampum-bridgeexports 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 doorGET 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 prototypehttps://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 itemsapp/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 on miadi.sanctuaireagentique.com): the prototype reads those routes from its own server routes, never from the browser. That is the v1 rule already.
  • 120 is ambiguous as an episode reference on this host (two folders carry number 120); the front answered 409. Use the folder name 2026-07-10-episode-120-relational-film-production-media-editor or miadi-chronicle://120 through the resolve door.
  • The three new routes (/notebooks, /prototypes, /tracing) are on main and not yet on the public front: the production build (A6 of #769) carries them.
  • @miadi/tracing and @miadi/tracing-langfuse are not published yet; until then the prototype keeps its own @langfuse/client read (its lib/episode-data.ts pattern) behind a TracingAdapter whose shape matches @miadi/tracing's TracingProvider.
  • 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-ui does 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-interpreter reads 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 over GET /api/chronicle/episodes/{ref}/prototypes (public) and the same with Authorization: Bearer <writer token> for editor. Shape: { id, title, url, made_with, source, commit, issue, relation, reads[], added, editor? }. No new package.
  • TracingAdapter β†’ @miadi/tracing's TracingProvider (getTrace, listTraces, getPrompt, listPrompts, getSession, listDatasets, listScoreConfigs, uiUrl), metadata only, with @miadi/tracing-langfuse as the implementation once published. Two instances: ceremony (read, Evidence & Traces) and story (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>/json and ?v=N public; listReviews server-side with MIADI_REVIEW_API_TOKEN or seeded links without it.
  • AttentionAdapter β†’ read attention.json through GET /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-ui with createRemoteResolver({ 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/tracing 0.1.0, @miadi/tracing-langfuse 0.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) with miadi-trace: and miadi-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's editor and a trace's provider page); refer to an episode by folder name or miadi-chronicle://<n> through GET /api/chronicle/open?uri=. Reviews: /review/<uuid>/json. Tracing: @miadi/tracing over @miadi/tracing-langfuse (ceremony reads, story writes on opt-in), metadata only. References: render every miadi-*: 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).