Record workflow evaluation evidence - #19
Conversation
Let agents edit and submit snapshots throughout the interview while keeping Compile bound to one exact accepted generation. Replace the obsolete publication and local-compilation surfaces with the retained product journey and its provenance-aware recovery rules.
Keep the behavioral corpus and repository assertions tied to the relaxed push policy and the current compiled-journey contract. Remove obsolete pins and stop conditions so the tests protect the workflow the Skill now describes.
A fresh Home Inventory run showed that broad prompts can still become a seven-question checklist and can invite a second flattened candidate. Bound the opening batch, preserve the object/quantity/mixed distinction, reserve later choices explicitly, and keep one honest Plan.
Preserve the representative interview and compilation observations, refresh plugin installation provenance, and pin their privacy-safe summaries. Align initialization, diagnostic repair, and Compile evals with the relaxed snapshot workflow so the corpus no longer enforces obsolete ceremony.
|
Hosted Node 22 and Node 24 checks stop at the intentional external-contract ancestry gate: |
Preserve the reviewed workflow and model evidence while inheriting the landed interview and exact CLI contract layers.
ReviewReviewing after the merge, since this landed at 22:09Z. Two things I raised on earlier branches resolve here, and one recurs. Verification
The byte total reconciles exactly against the per-file sizes in the observation. This closes the finding I raised on Skills #18On #18 I flagged that the packaged Skill still instructed three commands the CLI stack had removed, at The mentions that remain are now negative: I confirmed no instruction to run any of them survives anywhere under Stating what does not exist beats silence. An agent carrying stale expectations from anywhere else gets told directly rather than discovering it through The last sentence is the best line in the diff. "Report that capability gap rather than approximating it with direct HTTP" gives a missing command a defined outcome. Without it, the plausible agent behavior on a missing command is to reach for The version pin fired again, one day laterOn #16 I noted that putting
Running Every behavioral field matched: 8 files, Two forced re-records in two days, neither reflecting any change in what the check exists to detect, is a different proposition from the one-off I described on #16. The remedy the assertion message prescribes is re-record, rename the dated evidence, update the pins, which is real work each time and trains exactly the reflex that would wave through a genuine drift. The argument from #16 still stands: Worth deciding now rather than after the fifth re-record. The Skill got substantially shorterComparing the installed inventory against #16's:
The check on whether anything load bearing went with it is the eval corpus and the model rehearsal, and both are exercised. Worth noting for the record that this is the largest single reduction in the shipped instructions so far, so if a future rehearsal starts failing in an unexplained way, this is the change to look at first. Evidence limitsThe final section is exemplary and worth keeping in that form:
Nine explicit non-claims attached to evidence that could easily be read as more than it is. That is what makes the evidence usable later rather than something a reader has to re-derive the scope of. The integration note is similarly precise: the pinned CLI revision |
Writing down what does not existThere is a line in this PR that looks like a leftover and is doing real work: Three commands that were removed from the CLI. You might expect the instructions to simply stop mentioning them. Instead they mention them by name, to say they are gone. That choice is worth understanding, because it applies to any documentation an AI agent reads, and increasingly that is a lot of documentation. The problem with deletingThe obvious cleanup after removing a feature is to delete every reference. The docs then describe what exists, and nothing more. Tidy. For a human reader, fine. A human who tries a removed command gets an error, shrugs, and looks at For an agent, silence is ambiguous in a way it is not for a person. The agent may have picked up So the agent tries. Gets The three things an agent does nextWatch what happens when an agent hits Retry with variations. Maybe it was Try to fix the environment. The command is missing, so the tool must be out of date. Install a newer version, or a different one. This is why the same paragraph adds "Do not install, download, or upgrade the unreleased CLI automatically." An agent that helpfully upgrades an unreleased tool has just changed the thing you were testing. Route around it. This is the dangerous one. The agent knows what publishing means and can see an API. So it reaches for That last path is why the paragraph ends the way it does: Read what this does. It gives "the command I need is missing" a defined outcome. Not an error to recover from creatively, an outcome: say so and stop. That matters because the CLI is not a thin wrapper. It validates responses against exact key sets, verifies artifact digests against downloaded bytes, checks ETags for conditional writes. An agent that hand-rolls the same request with The shape of the instructionThree parts, and each closes off one of the three behaviors:
Without part three the first two just leave the agent stuck, and a stuck agent improvises. You have to give it somewhere to go. The general principleInstructions for an agent need a negative space: the things it might reasonably try that it should not. Ordinary human documentation almost never has this. You do not write "this library has no Concretely, worth stating explicitly:
That last category is the one most worth writing down, because it is exactly where a capable agent's initiative causes damage. "You could do this and you must not" is not a sentence you write for humans. It is a necessary one here. Shorter, not longerOne more thing worth noticing, because it cuts against how these documents usually evolve. The instructions in this release got substantially smaller. That is the opposite of the normal trajectory. Instructions accumulate: every incident adds a warning, every misunderstanding adds a clarification, and nobody removes anything because removal feels risky. The problem with accumulation is that instructions compete for attention. Guidance that is 40% obsolete is worse than half the length and current, because the reader, human or otherwise, has to work out which parts still apply. And when a command described in detail across several sections no longer exists, that detail is not neutral. It is actively misleading. So the shrink here is doing two things: removing what is wrong, and making what remains more likely to be followed. The negative statements survive the cut, and that is the interesting editorial judgment. Everything explaining how to use the removed commands is gone. One sentence saying they do not exist stayed. That is the right ratio: the detail was the liability, the correction is cheap and prevents a specific wrong turn. If you maintain instructions an agent reads
|
Summary
Integration
CLI #17, #16, #18, and #19 and Skills #17 and #18 are now on their default branches. The reviewed CLI evidence revision
f55edffc9e88924f9a4c95f41c4d0bc9b72422f8remains in CLImainancestry, so the historical evidence and exact digest remain unchanged. This PR now targets Skillsmain.The service rehearsal remains revision-pinned through firstdraft/firstdraft #306. This PR does not implement firstdraft/firstdraft #291, release the plugin or CLI, contact staging or production, or create a real GitHub repository.
Verification
sh script/check: 42 tests, 42 passed; exact external contract passed against CLIf55edffc9e88924f9a4c95f41c4d0bc9b72422f8;git diff --check origin/main...HEAD: passed.npm run record:claude-plugin-install: both exact strict validations passed; isolated installation contained 8 canonical Skill files and 207,433 bytes; live inventory was Skills 1, Agents 0, Hooks 0, MCP servers 0, and LSP servers 0; monitored real state was unchanged and temporary state was removed.3a029a8b425addbbba4f56d9197878cc002752f4, candidate pluginb5c3897b240bfa3a9117d1a564d8e6b7d783e993, freshly packed CLIf55edffc9e88924f9a4c95f41c4d0bc9b72422f8; two pushes, two bounded status waits, one Compile; final valid graph version 2; 194 files and 542,894 bytes verified through strict fake GitHub publication, retained download, and materialization.Evidence limits
Home Inventory is an opening-turn local interview evaluation, not a compilable live fixture. Movie Catalog is one constrained local rehearsal with fake GitHub transport; it does not establish installed-marketplace model use, published distribution, arbitrary applications, generated-app execution, deployment, real GitHub, staging, or production readiness. The CLI and plugin remain unreleased.