Skip to content

#1022 Normalize action and question label identifiers across asks blocks - #1025

Merged
williamthorsen merged 7 commits into
mainfrom
1022
Jul 18, 2026
Merged

#1022 Normalize action and question label identifiers across asks blocks#1025
williamthorsen merged 7 commits into
mainfrom
1022

Conversation

@williamthorsen

@williamthorsen williamthorsen commented Jul 18, 2026

Copy link
Copy Markdown
Owner

What

Fixes inconsistent identifiers in prompts that ask more than one thing: Some asks carried no identifier, and numbering restarted with each list, so a bare "1" was ambiguous and a secondary ask was easy to miss. Agents are now instructed to give every ask in such a prompt a distinct identifier, so a user can answer them all at once by identifier on one line instead of retyping a prose label.

Why

The asks-block identifier guidance had drifted across several guidance files, and the two canonical next-steps menus dropped identifiers entirely. A user facing two or three stacked selects had no terse way to answer them, and a secondary select was easy to overlook.

Details

🐛 Bug fixes

  • Extended the multi-item identifier rule to the two canonical asks blocks that had dropped it: design-and-plan's next-steps menu (Remote-issue / Next-action selects) and the code-review next-steps menu (Deviations / Source-divergence / Actionable-findings sub-blocks) now label each list with its A/Q identifier, in the describing prose and in the rendered examples.
  • Moved the consequence-on-agreement test into the A/Q kinds definition, where it is consulted: a "yes" that makes the agent act is an action; a "yes" that only informs the agent is a question. A non-ask, such as a status note, stays in the prose, and an item's prefix and marker must agree.
  • Named the multi-select-of-atomic-actions block as a distinct shape, in which bare item numbers are the identifiers and 1a/1b marks mutually-exclusive alternatives sharing one slot.
  • Aligned the when-to-number threshold wording across the shared AGENTS.md summary, the action-items contract, and the option-format contract, and pointed the doctrine at the render contract's identifier rule instead of restating it, so the rule and its example live in one place.

Closes #1022

Asks blocks that present more than one independently-numbered list, such as a next-steps menu with several selects, now label each list with its `A`/`Q` identifier as a bold prefix, so a reader answers by identifier (`A1: 1, A2: 3`) instead of retyping a prose label. A single-list block carries none.

The action-items doctrine also names the multi-select-of-atomic-actions block as a distinct shape, where bare item numbers are the identifiers and `1a`/`1b` marks mutually-exclusive alternatives sharing one slot.
The `A`/`Q` kinds now carry the consequence-on-agreement test in their definition: a "yes" to an `A` makes the agent act, and a "yes" to a `Q` only informs the agent's judgment. The test is stated where it is consulted rather than in surrounding prose.

A statement that is not an ask, such as a status note, is neither kind and stays in the prose; an item's prefix and marker must always agree.
The option-format contract now covers blocks with more than one independently-numbered list: each list is labeled with its identifier, matching the action-items block rule. The two contracts state the identifier threshold consistently instead of diverging.
The prompt-formatting summary in the shared `AGENTS.md` now names action identifiers alongside question identifiers: a block with more than one ask or list labels each with `A` or `Q`. Its when-to-number threshold matches the full specification.
design-and-plan's next-steps block now labels its Remote-issue and Next-action selects with `A1`/`A2` identifiers when the remote-issue offer is shown, so the user answers `A1: 1, A2: 3` instead of retyping a prose label.
The review next-steps block, when it presents two or more sub-blocks (deviations, source divergence, actionable findings), now labels each with an `A1`/`A2`/`A3` identifier, so the user answers `A1: 1, A2: 2` in one line. A block with a single sub-block stays unlabeled.
The "blocks with more than one list" doctrine now references the render contract's identifier rule instead of restating it, so the bold-prefix mechanics and their example live in a single place. The doctrine keeps the reasoning it uniquely carries: each list is an item, and canonical blocks are not exempt.
@github-actions

Copy link
Copy Markdown

Dependency audit

Production dependency audit passed.

@williamthorsen williamthorsen self-assigned this Jul 18, 2026
@williamthorsen
williamthorsen marked this pull request as ready for review July 18, 2026 19:14
@williamthorsen
williamthorsen merged commit 0c69110 into main Jul 18, 2026
3 checks passed
@williamthorsen
williamthorsen deleted the 1022 branch July 18, 2026 19:20
williamthorsen added a commit that referenced this pull request Aug 4, 2026
…e-v0.2.2 codeassembly-v0.4.0 factory-v0.2.2 codeassembly-mcp-v0.2.2

codeassembly-v0.4.0
- #1153 feat: Make codeassembly and kb CLI tools publishable (#1164)
- #1091 fix: Anchor a project-deployed link where its target deploys (#1159)
- #1156 refactor: Rename packages to publishable names (#1157)
- #1152 tooling: Run every test in the default gate, classified by what it reaches (#1155)
- #1110 tooling: Migrate Vitest to nmr's centralized model (#1154)
- refactor: Refine typescript-preferences
- #1150 fix: State doc-description form and make comment mood opt-in (#1151)
- deps: Upgrade first-party linting deps to latest version
- #1137 feat: Establish personal rulebooks for code layout and TypeScript preferences (#1144)
- #1126 feat: Check a package's own guidance content before it ships (#1138)
- refactor: Fix lint
- tooling: Remove redundant lint rules
- #1133 fix: Reject an anchor link that names no heading (#1135)
- #1122 feat: Capture lede decisions as an accumulating corpus (#1132)
- #1125 feat: Honor invocation tokens in rulebook bodies (#1129)
- #1107 feat: Render rulebook links and path tokens per harness (#1124)
- #1115 feat: Sync guidance at build and install so an upgrade cannot leave it stale (#1123)
- #1114 feat: Adopt a dependency's guidance by naming the package (#1121)
- #1088 feat: Deliver project ambient rulebooks per harness (#1113)
- #1087 refactor: Rename the authoring rulebook and mark its enforced rules (#1092)
- #1095 tooling: Move compilation out of the install lifecycle into a bootstrap step (#1102)
- #1094 refactor: Remove the ambient ripgrep dependency from the test suite (#1097)
- deps: Upgrade all deps to latest version
- tooling: Upgrade all deps to latest version & modernize configs
- refactor: Fix lint
- #1077 feat: Show the proposed edit above post-review menu options (#1078)
- #1068 feat: Deliver ambient rulebooks mechanically, retiring GLOBAL.md (#1075)
- #1069 feat: Add a no-second-person rule to the lede-voice doctrine (#1070)
- #1050 feat: Add a redundancy rule to the lede-voice doctrine (#1058)
- #1035 internal: Add lifecycle workspace with the canonical envelope, vocabulary & lane fold (#1049)
- #1006 internal: Extend lifecycle-event instrumentation to five high-traffic skills (#1034)
- #1028 feat: Rule out absence-of-removed-code tests (#1032)
- #114 feat: Let reviewers emit gated insights into review artifacts (#1031)
- #1027 internal: Retire input.received and redundant skill.progress emits (#1030)
- #1026 fix: Name the side effects an approval ask authorizes (#1029)
- #1022 fix: Normalize action and question label identifiers across asks blocks (#1025)

factory-v0.2.2
- #1156 refactor: Rename packages to publishable names (#1157)
- deps: Upgrade all deps to latest version
- #1152 tooling: Run every test in the default gate, classified by what it reaches (#1155)
- #1110 tooling: Migrate Vitest to nmr's centralized model (#1154)
- tooling: Remove redundant lint rules
- deps: Upgrade deps to latest version
- deps: Upgrade all deps to latest version
- deps: Upgrade all deps to latest version
- tooling: Upgrade all deps to latest version & modernize configs
- refactor: Fix lint
- deps: Upgrade all deps to latest version

kb-v0.3.0
- #1153 feat: Make codeassembly and kb CLI tools publishable (#1164)
- #1156 refactor: Rename packages to publishable names (#1157)
- #1152 tooling: Run every test in the default gate, classified by what it reaches (#1155)
- #1110 tooling: Migrate Vitest to nmr's centralized model (#1154)
- tooling: Remove redundant lint rules
- #1095 tooling: Move compilation out of the install lifecycle into a bootstrap step (#1102)
- tooling: Upgrade all deps to latest version & modernize configs
- refactor: Fix lint

codeassembly-lifecycle-v0.2.0
- #1153 feat: Make codeassembly and kb CLI tools publishable (#1164)
- #1156 refactor: Rename packages to publishable names (#1157)
- #1152 tooling: Run every test in the default gate, classified by what it reaches (#1155)
- #1110 tooling: Migrate Vitest to nmr's centralized model (#1154)
- tooling: Remove redundant lint rules
- #1095 tooling: Move compilation out of the install lifecycle into a bootstrap step (#1102)
- tooling: Upgrade all deps to latest version & modernize configs
- #1038 feat: Add the read-only git adapter for worktree and base-branch ground truth (#1059)
- #1051 feat: Bound fold memory and rescan cost with a retention window (#1057)
- #1035 internal: Add lifecycle workspace with the canonical envelope, vocabulary & lane fold (#1049)

codeassembly-mcp-v0.2.2
- deps: Upgrade all deps to latest version
- #1156 refactor: Rename packages to publishable names (#1157)
- #1152 tooling: Run every test in the default gate, classified by what it reaches (#1155)
- #1110 tooling: Migrate Vitest to nmr's centralized model (#1154)
- #1095 tooling: Move compilation out of the install lifecycle into a bootstrap step (#1102)
- tooling: Upgrade all deps to latest version & modernize configs
- refactor: Fix lint

codeassembly-run-core-v0.2.2
- #1156 refactor: Rename packages to publishable names (#1157)
- #1152 tooling: Run every test in the default gate, classified by what it reaches (#1155)
- #1110 tooling: Migrate Vitest to nmr's centralized model (#1154)
- #1095 tooling: Move compilation out of the install lifecycle into a bootstrap step (#1102)
- tooling: Upgrade all deps to latest version & modernize configs
- refactor: Fix lint
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Action and question labels are inconsistently numbered

1 participant