Skip to content

fix(pstack): list every waiting item so each ketchup call is decidable - #692

Merged
poteto merged 5 commits into
mainfrom
lauren/ketchup-decidable-items
Oct 18, 2026
Merged

poteto merged 5 commits into
mainfrom
lauren/ketchup-decidable-items

Conversation

@poteto

@poteto poteto commented Oct 16, 2026 •

Copy link
Copy Markdown
Collaborator

Why

/ketchup capped the whole reply at 150 words and gave each action item two lines. When many items waited, the model folded a set of PRs into a count, such as "Merge the 12?", and moved the other calls to a linked file. The user could not decide from the reply.

What changed

  • Cap only the story at 100 words, shorter when less happened. Give each waiting item about 30 words, so the reply grows with the item count: two items stay well under 150 words, and thirty need far more. When many items wait, the reply runs long. Never cut or shrink an item to stay under a word limit: no count in place of a list, and no link in place of an item.
  • Fit the shape to the call. A call about one item is one bullet, with the item named once. When items share a call, ask it once, then give each item its own bullet: link, what it changes for users, evidence, and risk, even when the risk is low. Name the PR in every call.
  • A call between options gives each option's gain and cost, and those costs are its risk. Say what waiting costs only when it is more than a delay. Write "unknown" only for a fact the call needs, and leave out a link you do not have.
  • Ban drawings of action items and status lists. Keep stack, flow, and before-and-after diagrams.

Scope

  • pstack/skills/ketchup, the matching poteto-help line and README row, and their regenerated Claude Code copies.
  • Does not change /bro or the screenshot rules.

Blast Radius

Only /ketchup replies change. A large batch now makes a long reply, by design. On a small chat with two calls, replies stay near the old size, about 20% longer. The extra words are the evidence and risk that the old text left out.

Verification

  • Three fixture chats, a frozen grader, and 50 runs on two models. Share of waiting items decidable from the reply alone, on the batch chat: 0.00 → 0.93 on both models. Every reply with the final text listed every waiting item.
  • Blinded judges from a third vendor. On the two-call chat, all six final-text replies ranked above all five old-text replies. On the batch chat, the final text ranked above the previous revision, with higher brevity and accuracy scores.
  • The README row changed after these runs. The skill text the runs measured did not.
  • node scripts/validate-plugins.mjs and node scripts/check-pstack-docs.mjs pass, and node scripts/generate-pstack-harness-trees.mjs --check reports the harness tree up to date.

Note

Low Risk
Prompt-only changes to the /ketchup skill and help copy; behavior shifts to longer replies on large batches but no runtime code or security paths.

Overview
/ketchup no longer squeezes the whole catch-up into ~150 words. The narrative recap is capped around 100 words (shorter when little happened), while each thing waiting on the user gets ~30 words, so replies grow with backlog size instead of collapsing many PRs into “merge the 12?” or pushing detail behind links.

Action items are reframed as explicit calls with a shape that matches the decision: one bullet per single-item call (call, recommendation, user impact, evidence, risk); shared calls asked once, then one bullet per item (link/name, impact, evidence, risk, riskiest first). Counts can’t replace lists and links can’t replace items—the reply alone must be enough to decide. Option-style calls weigh gain/cost per option (that tradeoff is the risk); separate risk lines drop in that case.

Docs stay aligned: ketchup/SKILL.md frontmatter and rules, plus the /ketchup blurbs in README.md and poteto-help. Visual rules move slightly—no diagrams of action-item lists or status lists; stack/flow/before-after diagrams remain.

Reviewed by Cursor Bugbot for commit 55c6ce9. Bugbot is set up for automated code reviews on this repo. Configure here.

The 150-word cap and the two-line action item made the model fold a set
of PRs into a count and send the rest of the calls to a linked file.
Give each item its own bullet with its link, user change, evidence,
risk, and pick, and let the reply grow with the item count. Keep
structural diagrams and ban status and action-item diagrams.
The model named three PRs by title only, asked calls between options
without the PR number, and left out the risk on low-risk merges. Ask
for the number or link in every call, and for each item's risk even
when it is low.
…stays decidable

A call about one item is one bullet with the item named once. A call
between options takes its risk from the options' costs. Say what
waiting costs only when it is more than a delay, and size the reply by
item count so a two-call chat stays well under 150 words.
The row still promised a few plain sentences. Ketchup now lists every waiting item, so a large batch makes a long reply.
@poteto
poteto marked this pull request as ready for review October 18, 2026 05:32
@poteto
poteto merged commit 16541c6 into main Oct 18, 2026
2 checks passed
@cursor
cursor Bot deleted the lauren/ketchup-decidable-items branch October 18, 2026 19:50
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant