Skip to content

Custody Transfer artifact sources

Two published pages carry the Custody Transfer plan. Until 2026-09-13 their only editable copies lived in a session scratchpad under /private/tmp, which does not survive the session — so the published page was the sole source of truth. These files fix that.

File Publishes to What it is
release-plan.html https://claude.ai/code/artifact/a0fcca2f-49e3-4574-806b-653b4fa0b4e4 The plan and the live status tracker. 23 releases, 110 slices, 14 operator gates.
proposal.html https://claude.ai/code/artifact/3ab34375-35e3-439e-b07e-4508a582066b The why, with the five diagrams.
execution-guide.md not published How to ship one slice. Read this first.

Republishing

Edit the file, then publish it with the Artifact tool passing the URL above as url. Publishing without url from a conversation that did not publish the artifact creates a separate artifact instead of updating this one, which is how you end up with two trackers and no idea which is live.

A conversation that has not read or published a given artifact is refused on publish; read it first (action: "read" with its url) and build the edit on what comes back, so a change made from another session is not silently discarded.

Trap 1 — omit capabilities, or the tracker goes dark

release-plan.html declares the db capability. That is what makes the live status work: the banner, the per-slice pills, the lane progress bars and the fourteen gate ticks all read from the artifact database, not from the file.

Omitting capabilities on republish carries the stored declaration forward. Passing a non-empty object is a full-set declaration, so anything not restated is revoked — pass {db: {}} or nothing at all. Passing {} clears it outright and every live field goes blank.

Trap 2 — the gate wording is in the file, not the database

GATES_DATA in release-plan.html holds all fourteen gate descriptions as a hard-coded array. Only done and at come from the gates/<n> documents. Writing a note field to a gate document does nothing visible. To change what a gate says, edit this file and republish.

What lives in the database rather than here

Written by Claude with the Artifact tool's write_db, read back with read_db:

  • status/<sliceId>{state, pr, note, at} where state is done | wip | review | blocked. A slice with no document renders as todo.
  • gates/<1..14>{done, at, by}. The operator ticks these in the page himself — read them, never overwrite a done: true without being asked.
  • meta/current{updated, by, headline, working, next, blocked}. The handoff banner at the top of the page. Update it at the end of every working session; it is what a fresh session reads to know where things stand.

Known drift, 2026-09-13

These files are byte-exact mirrors of what is published, deliberately — a repo copy that silently differs from the live page is worse than one that matches, because then neither is authoritative. Two things are consequently stale in both, and should be corrected on the next republish:

  • proposal.html says "One release credential expired in May and its rotation is still pending", as an illustration of pre-existing backlog. That rotation has since completed: the RELEASE_PAT was migrated to a review-e-bot App token across all seven dashe-* repos, and its deadline is closed. The point it illustrates still stands; the example no longer does. Note that CLAUDE.md carries the same stale claim.
  • release-plan.html was corrected on 2026-09-13 to withdraw a false TestFlight deadline that had been driving lane prioritisation. Builds 9 and 10 run to 8 and 9 December; only the superseded builds 1-8 expire on 19 September. If you find that claim anywhere else, it is wrong.