#168

fix(ci-speedup, ci-score): keep the closing question visible when the host's question tool fails

Openyonasbwants to merge intofrom

TL;DR

On Codex, the end-of-audit question can go through an experimental tool that sometimes never appears. The user then saw no options while the agent said it was "waiting for your choice above". Every question now also ends the plain message with the same options in the same order, and the agent never claims to be waiting on a choice the user cannot see. Each question also has to offer at least two options, so the "just save the report" choice can no longer drop out.

before:  question -> experimental tool (never renders) -> user sees nothing -> "waiting for your choice"
after:   same numbered options in the message  ->  then the experimental tool  ->  user can always answer

What changed

  • ci-speedup (skills/ci-speedup/SKILL.md, interaction contract for phases 1 and 6):
    • When the host's structured-question tool is experimental (Codex request_user_input), the plain message also ends with the same question as a numbered option list. Options keep the same order, and the list is sent before the tool call, so a call that never returns cannot hide it.
    • The agent never says it is waiting on a choice unless the options are visible in its own last message.
    • At least two options are required, unless a step names the exception. Example: dropping the save when the report failed its own check.
    • The plain-message-only fallback now also covers a failed tool call.
    • The always-last None, just save the report (.md) rule is unchanged. It is now pinned inside the contract as well.
  • ci-score (skills/ci-score/SKILL.md, interaction contract for steps 0 and 4): the same rules. Its contract is documented to stay parallel with ci-speedup's; it also keeps its own "never predict the tool absent" clause.
  • ci-score close passages: the step-4 close, the close invariants and references/close-contract.md used to reserve the printed option list for hosts with no tool. All three now carry the mirror rule, so following them on Codex no longer strands the user. The reference no longer treats the mirrored list as banned menu narration.
  • The ci-speedup SKILL.md body stays at 499 of its 500-line budget.
  • Pins:
    • test_experimental_question_tool_is_mirrored_in_the_plain_message in skills/ci-speedup/tests/test_close_guidance.py and skills/ci-score/tests/test_close_contract.py. They assert long contiguous phrases, so a shortened, negated or re-scoped rule fails.
    • test_every_close_delivery_passage_carries_the_experimental_tool_mirror in skills/ci-score/tests/test_close_contract.py.
  • Changelog entries, dated 2026-10-29, are in both skills.

Verification

  • Every new or tightened pin failed before its SKILL.md edit and passes after.
  • Green: the ci-score suite and ci-speedup close guidance (705 passed), plus the other suites that read SKILL.md (535 passed), including the line-budget guard.

Known gap, not in this PR

ci-secure's question delivery has no Codex-specific mirror rule. It is the same failure class and is left for a follow-up.

🤖 Generated with Claude Code

Activity

4
greptile-apps[bot]1d ago

Confidence Score: 4/5

[Medium impact] The change affects user questions in two CI skills.

The PR appears safe to merge, with a non-blocking conflict in ci-score's close instructions.

Findings

  1.  Close instructions still conflict ▶

Reviews (1) · Last reviewed commit: "fix(ci-speedup, ci-score): mirror experi..." · Reviewed by Greptile

greptile-apps[bot]reviewed1d ago