fix(story-mode): a failed check that Claude fixes in its next command says so

Flagged by four readers across rounds 10 to 12: after a push, "but a
check after that fails" never said that Claude repaired what the check
found (the new remote pointed at a branch with no commits) and checked
again. When Claude's next command runs that same check again after a
change (`git -C remote.git symbolic-ref HEAD refs/heads/main && git -C
remote.git log …`) and passes, the caption adds "; Claude fixes it, and
the check passes next." A check re-run with no change before it, or one
that fails again, claims nothing.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
This commit is contained in:
Codeman maintainer committed 2026-10-18 18:54:14 +02:00
1 parent b0898b5441
commit ed6c89ff98
4 files changed
+41 -3

No files matched your search

@@ -100,7 +100,7 @@
{
"kind": "save",
"ok": true,
"story": "Claude starts a git repository, saves the work: \"add kebab CLI that turns text into URL slugs\" and copies it to remote.git, a folder on this computer, but a check after that fails.",
"story": "Claude starts a git repository, saves the work: \"add kebab CLI that turns text into URL slugs\" and copies it to remote.git, a folder on this computer, but a check after that fails; Claude fixes it, and the check passes next.",
"unaskedSave": false,
"director": "git commit -q -F - · git push -u origin main · 1 error",
"balloon": null,
+1 -1
View File
@@ -129,7 +129,7 @@ describe('Story Mode on real sessions', () => {
// One commit, then a push in a command of its own: one commit, not two.
// The folder had no repository: the first save starts one, and the reader is told.
story:
'Claude starts a git repository, saves the work: "add kebab CLI that turns text into URL slugs" and copies it to remote.git, a folder on this computer, but a check after that fails.',
'Claude starts a git repository, saves the work: "add kebab CLI that turns text into URL slugs" and copies it to remote.git, a folder on this computer, but a check after that fails; Claude fixes it, and the check passes next.',
});
});
+25
View File
@@ -1373,6 +1373,31 @@ describe('buildStoryPage', () => {
expect(loop('Add mode() with tests.')).not.toMatch(/as you asked/);
});
it('a check that failed after a push and passes in the next command after a change reads as fixed', () => {
const save = (next: string, nextOk = true) =>
pageOf([
prompt('ship it'),
...bash('b1', 'git commit -qm "add a"', 'Commit', ''),
...bash(
'b2',
'git push -u origin main && git -C remote.git log --oneline',
'Push',
'Exit code 128\nTo ./remote.git\n * [new branch] main -> main\nfatal: your current branch does not have any commits yet',
true
),
...bash('b3', next, 'Next', nextOk ? 'f4c840d add a' : 'Exit code 1\nfatal: no', !nextOk),
end(1000),
]).panels.find((p) => p.kind === 'save')!.caption.story;
expect(save('git -C remote.git symbolic-ref HEAD refs/heads/main && git -C remote.git log --oneline')).toMatch(
/, but a check after that fails; Claude fixes it, and the check passes next\.$/
);
// Run again with no change before it, or failing again: no claim of a fix.
expect(save('git status -sb && git -C remote.git log --oneline')).toMatch(/, but a check after that fails\.$/);
expect(
save('git -C remote.git symbolic-ref HEAD refs/heads/main && git -C remote.git log --oneline', false)
).toMatch(/, but a check after that fails\.$/);
});
it('a check after a push is named a check, and tests in a fresh copy say so', () => {
const page = pageOf([
prompt('ship it'),