fix(hero): drop the internal tool name from the walkthrough prompt - #1006
Merged
Conversation
The first prompt told the agent to "call request_approval before doing anything destructive". That is the internal tool name — no user knows it — and having the human ask for the pause inverts the claim the beat exists to make. The homepage says nothing irreversible happens without a human; the demo showed a human requesting that it should. The prompt is now what a person would type. Measured against the real backend, the agent calls request_approval first and unprompted in 12 of 12 runs, because the graph's system prompt already instructs it to pause before destructive actions. The agent's stated reason ships verbatim from a live run rather than composed. Adds a dedicated aimock fixture rather than editing the one interrupt-approval and the marketing clip share, re-records the replay, and re-records both posters, since the desktop poster shows the prompt bubble verbatim. Both recorders now also assert no a2ui surface is present, closing a hole where a capture that drifted into the next run would still have found the composer cleared and passed. Known and tracked separately: the replayed answer after approval is still an authored narration rather than a real model turn. See docs/superpowers/specs/2026-09-04-hero-executable-approval-tools-design.md. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
|
The latest updates on your projects. Learn more about Vercel for GitHub.
|
blove
enabled auto-merge (squash)
September 5, 2026 04:18
Contributor
…sktop one The guard read `sizeOf(mobile) <= sizeOf(desktop)`, on the reasoning that a phone downloads one instead of the other. Both posters are re-recorded together, so that coupling made the phone poster's budget a function of content it does not contain: re-recording the walkthrough shrank the desktop capture from 38.1KB to 33.0KB and failed the 34.0KB phone poster, which had not got worse. Meeting it by re-encoding would have cost real legibility for nothing. The quality curve is shallow — 55 -> 40 buys about 3KB — so clearing a 33.0KB bar needs roughly quality 45 on a poster whose entire job is readable text at ~348 CSS px, and it would clear it with no headroom until the next re-record. The phone poster is not justified on bytes. Below 768px `.hero-demo-stage` is `aspect-ratio: 3 / 5` with `object-fit: cover`, so the 1200x720 desktop capture covering that portrait box shows about 36% of its own width. It is shipped because that crop is unusable, and it would be worth shipping at a small byte premium. So the ceiling is now absolute, at the mid-30s KB the recorder already budgeted against when it chose 1.5x over 2x. Mutation-checked: dropping it to 33,000 fails on the shipped 33,968-byte file. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Contributor
Contributor
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
The hero walkthrough's first prompt told the agent to "call
request_approvalbefore doing anything destructive". That is the internal tool name. No user knows it, so the demo read as staged — and worse, it inverted the claim the beat exists to make. The homepage says nothing irreversible happens without a human. The demo showed a human asking for that to be true.The prompt
Now simply what a person would type:
No tool name, and no request for review. Measured against the real backend, the agent calls
request_approvalfirst and unprompted in 12 of 12 runs, across two independent batches, because the graph's system prompt already instructs it to pause before destructive actions and not to assume permission. The agent's stated reason ships verbatim from a live run rather than composed.What had to be re-recorded
A dedicated aimock fixture, rather than editing the one
interrupt-approval.spec.tsand the marketing clip share, with thehasToolResultentry ordered first so the post-approval turn does not re-issue the tool. Then the replay fixture, and both posters, since the desktop poster shows the prompt bubble verbatim.Two things surfaced while doing it, both fixed by measuring rather than guessing. The poster beat had to move, because the cursor's glide window shifted with the new replay and at the old beat the arrowhead landed on the prose. And the narration's opening line has a hard 44-character budget, since a second line pushes the answer off the top of the phone poster.
Both recorders now also assert that no A2UI surface is present. The existing empty-composer guard had a hole: it auto-retries, so a capture that drifted into the next run would find the composer cleared again and pass.
What this does not fix
The replayed answer after approval is still an authored narration, not a real model turn. Measured live, the model produces either clarifying questions or a 5,800-character ops document; the shipped narration is 482 characters. That is a real honesty problem, it is separate from this one, and it has an approved design:
docs/superpowers/specs/2026-09-04-hero-executable-approval-tools-design.md. This change does not make it worse, and it removes the developer-only knowledge that prompted the review.Verification
examples-chat-angulargreen, hero and interrupt-approval e2e green, posters read at full size.interrupt-approval.jsonand its consumers untouched.🤖 Generated with Claude Code