Skip to content

v2.0.2 — the map stops lying

Choose a tag to compare

@minuscle minuscle released this 22 Aug 06:32
· 17 commits to master since this release
Immutable release. Only release title and notes can be modified.

A skill collection routes on two things: the description your agent matches a request against, and
the map you read when you want to know what hands off to what. Both were wrong in v2.0.1.

Seven descriptions now say what their bodies do

A description is the routing table. When it drifts from the body the skill either never fires or
fires on the wrong request, and nothing tells you which.

  • duck-run said "plan, implement, test, and independently review". It also frames, verifies,
    and lands. It says so now.
  • duck-dry said comments and docstrings. It has always set the bar for commit messages and PR
    descriptions too.
  • duck-cut claimed it would "finish every viable item autonomously". It closes, cuts, merges,
    and unblocks whatever does not need you — it does not build.
  • duck-plan offered "independent critique of a draft plan". What it does is decorrelated
    co-authorship: a second family writes the plan with you, not a review after you.
  • duck-campaign said "prioritized" workstreams; it carves independent ones.
  • duck-diet now names stage routing — which model tier and agent type a stage runs on —
    because it decides that too.
  • duck-land drops tag and cut a release from its triggers, because it does neither.
    That is a gap, not a cleanup: "cut a release" now routes to nothing, and this release was cut by
    hand.

The map covers every skill

duck-why and duck-dry were absent from it. duck-decide was drawn off to one side when it is a
REJECT exit. Campaign planning sat inside each packet, when a campaign plans every packet before
any build starts.

Two vertical diagrams now, one per line — a single change through duck-run, a backlog through
duck-campaign — with the conditional edges beside the stage they leave: the CUT exit, duck-break
before proof, the diverging-loop breaker. The map moved above the skills table, because the map is
what groups the skills and the table is for alphabetical lookup.

duck-run names a cause before it patches

On REJECT the pipeline routes through duck-why when a blocker reports a symptom and the defect
behind it is not already obvious from the diff. A reviewer tells you where it hurt, not where it
broke.

The gate

Shipped under an owner waiver. Two families reviewed this span with no outage —
gemini-3.1-pro-high (Google) and gpt-oss-120b-medium (OpenAI) — and both returned REJECT.

Two of their three blockers died on evidence: a claimed CI failure the run log shows did not happen,
and a claimed contradiction in the duck-why routing that duck-why's own text answers. One
survived adjudication — this span removes the README section stating which rules are mechanically
checked and which are only discipline, under a justification that covers a different fact. The owner
read the finding and chose to ship without restoring it.

codex was unavailable for the third gate running (ERROR: Your workspace is out of credits), so
both reviewers came from one harness under different pinned models. The pin was proved before use:
a deliberately invalid --model errors with the full roster.