Skip to content

A commit attribution written in the plan reaches the blueprint, and the review raises a contract break on it #86

Description

@PierreMardon

Status

Closed on 2026-10-05: fixed by #88, not seen in the seven runs played since. The plan and the blueprint no longer say how a commit is written or signed. One occurrence in the 17 runs before the fix, with a cause in three steps.

What was seen

The run handed back on a plan change proposal that has nothing to do with the feature:

Proposal to decide (plan-changes/01.md): the blueprint and plan.md promise a Co-Authored-By: Claude Opus 5.5 line. The commits carry Claude Sonnet 5.5, because the plan runs the executor on Sonnet. The proposal is to change the blueprint (line 98) and plan.md (line 166) so the line names the model that wrote the commit.

How it got there, each step doing what its prompt allows:

  1. The built-in Plan agent, which runs on opus, wrote the commit into the plan with its own attribution: "Commit on feat/overdue-command with the message cli: add the overdue command, ending with the attribution line Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>."
  2. The extractor carried it to the blueprint, under what the developer would not see go by: "The work lands as one commit, cli: add the overdue command, on feat/overdue-command, with a Co-Authored-By: Claude Opus 5.5 line."
  3. The executor, on sonnet, committed with its own line. The reviewer compared the commit with the frozen blueprint, found them apart, and raised a contract break: the blueprint would have to change to stay true.

The delivered code passed its 10 hidden acceptance tests. The developer is asked to decide on the name of a model in a commit trailer.

Sources

  • Raw data, out of git: .evals/campaign-3/runs/01-overdue-list/run-01/: run.json for the hand back, and in the plan folder of its project plan.md line 166, blueprint.md line 98, reviews/pass-01.md, plan-changes/01.md, journal.jsonl (review-done with breaks: 1).
  • Searched in the plans and blueprints of the 17 runs of the three campaigns: this is the only one that names an attribution.
  • The attribution itself is Most commits of the chain end with a Co-Authored-By line the host never asked for #72: 4 commits of 5 carry it in every campaign.

Suspected cause

  • Nothing tells the agent that drafts the plan that how a commit is signed is not part of a slice: its template asks for "what it delivers, what it touches, the precedent it copies, what proves it done" (templates/plan.md).
  • Nothing tells the extractor that the form of a commit is not what "touches their control, their work or their time" means (agents/surface-extractor.md, "The frame").
  • The reviewer did its job: a blueprint that says something false is a break.

The run was played from the branch of #83, which rewords the extractor: the sentence it adds on the sensitive zones, "say in full only what stands nowhere else", may have helped the line onto the page. One run cannot tell.

Why it matters

A contract break stops the loop and takes a decision of the developer and a new revision. Here it was spent on a line of a commit message, and it will come back whenever a plan names a model and the executor runs on another, which is the default setting.

Next

Tied to the choice of #72. If the chain says nothing of attribution, the fix is narrow: the blueprint never states how commits are written, since the conventions of the host say it. If the chain forbids attribution unless the host asks for it, this goes away with it.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions