• "Molt Protocol"

    08/10/2026 at 16:44 0 comments

    Every earlier log in this series describes a piece of Scottina working. This one is about a piece of process that had to work first, before any of that code could get written without stepping on itself.

    Work stalled entirely, for a full day — not on a bug, but on not knowing which document to believe.

    The scene

    Early on, README.md and CLAUDE.md laid out a CAN addressing and message schema — one that had worked before, on an earlier project. As real edge cases turned up on the bench, that schema needed a small rework. Small on paper. In practice, code built against the old schema didn't fail loudly — it produced silently corrupted values instead of a visible fault. Anything built without the new schema in mind still ran, just wrong. That surfaced as a string of errors with no obvious common cause, and panic mode followed.

    The overhaul that came out of that panic was thorough — except it left README.md and CLAUDE.md untouched, on the theory that the old schema was just a useful historical note, not something actively poisoning new work. It was poisoning new work. A later session picked up README.md and CLAUDE.md as ground truth, never checked whether a newer document overrode them, and rebuilt against the stale schema all over again.

    Timestamps on each document helped, but not enough — editing one section of CLAUDE.md updated the timestamp for the whole file, so stale schema elsewhere in the same document looked just as current as whatever had actually just been touched. A document isn't one fact, it's many, and a single timestamp can't tell you which ones are still true.

    That's what forced the real fix: a document that can go stale in only one piece has to be disposable as a whole, not patched forever. Scratchpads.

    The five-step discipline

    Any working document that is not the authority document is a scratchpad, labeled as one from the moment it exists — a one-line stamp at the top naming the authority document it feeds and confirming it expires when the effort does.

    SCRATCHPAD <------ TEMP OVERRIDE ------ AUTHORITY DOC
        |
        v
     DISTILL
        |
        v
     HARVEST ---------------------> AUTHORITY DOC
        |                                |
        v                                |
     VERIFY <----------------------------+
        |
        v
     PURGE  ---- removes override pointer
        |
        v
     DECLARE


    1. Distill — one pass over the scratchpad, sorting real conclusions from dead ends.
    2. Harvest — write each surviving conclusion into the authority document, in plain terms, as a locked decision.
    3. Verify — read the authority document back and confirm each conclusion actually landed, not just got referenced. Nothing proceeds until this passes.
    4. Purge — the scratchpad leaves the working set. Loose research gets deleted; anything worth keeping gets archived out of reach, not left where new work could find it and build on it by mistake.
    5. Declare — the effort is stated complete. Nothing stale remains.

    Verify and Purge are the two steps that got skipped the last time this was tried informally, and skipping them is exactly how a project ends up with three documents arguing again.

    Closing the loop for the session that doesn't dig

    The birth stamp solves half the problem: a scratchpad always says which authority document it feeds. It doesn't solve the other half — a session that opens only README.md or CLAUDE.md has no reason to go looking for a scratchpad it doesn't know exists. That's exactly the gap that let a later session rebuild against the old CAN schema: the authority-looking document was sitting right there, and nothing on it said "don't trust this section yet."

    The fix runs the pointer the other direction too. When a scratchpad opens for a topic, the authority document...

    Read more »