Skip to content

Implementation Plan: Retire Auto-Generated Requirements (#4477) - #4661

Merged
Trecek merged 10 commits into
developfrom
impl-retire-auto-requirements-20260817-073008
Aug 17, 2026
Merged

Implementation Plan: Retire Auto-Generated Requirements (#4477)#4661
Trecek merged 10 commits into
developfrom
impl-retire-auto-requirements-20260817-073008

Conversation

@Trecek

@Trecek Trecek commented Aug 17, 2026

Copy link
Copy Markdown
Collaborator

Summary

Three surfaces auto-generate REQ-{GRP}-NNN requirement lists onto GitHub issue bodies:
prepare-issue Step 7a (every recipe:implementation issue at creation), triage-issues
Step 3c (batch, behind --enrich), and the whole enrich-issues skill + enrich_issues
MCP tool (backlog backfill). Downstream sessions treat each generated line as absolute, so
this quietly multiplies constraints nobody chose.

This plan replaces auto-generation with a single, short requirement bar and makes the
default outcome no requirements at all:

  • prepare-issue Step 7a becomes "Hard Constraints (rare)": default zero; append a
    ## Requirements section only for constraints that are absolute, broad, and unarguable,
    written as at most three plain sentences with no REQ- identifiers and no groups.
  • triage-issues --enrich and Step 3c are removed entirely. Batch generation is the
    same behavior at the worst scale, and a flag that survives the new bar would produce
    nothing on nearly every issue.
  • enrich-issues is retired — skill, enrich_issues MCP tool, registry entries, docs,
    and tests. Its only purpose is backfilling REQ-{GRP}-NNN onto the backlog; under the new
    bar there is nothing to backfill, and a dispatcher for a deleted skill is dead code.
  • make-req is kept and given the same bar in its Core Principles. It is user-invoked,
    writes to a local file (never to an issue), and make-groups traceability depends on its
    REQ-{GRP}-NNN IDs. It is a deliberate act on a supplied document, not pipeline debt.

The ## Requirements heading itself is preserved as the contract point. prepare-pr,
pipeline-summary, compose-pr, merge-pr, analyze-prs, and dry-walkthrough Step 4.6
all extract that heading from an issue or PR body, and all already degrade when it is absent:
the first five set requirements_section = "" and omit the section, and dry-walkthrough
Step 4.6 records "coverage check not applicable" rather than failing. Nothing starves.
make-plan and audit-impl build their own requirement inventories from plan text, not from
the issue's ## Requirements section — make-plan does read the whole issue body via
fetch_github_issue as unstructured context, so a rare hard constraint still reaches it.

Closes #4477

Implementation Plan

Plan file: .autoskillit/temp/make-plan/retire_auto_requirements_plan_2026-08-16_225423.md

🤖 Generated with Claude Code via AutoSkillit

Trecek and others added 10 commits August 17, 2026 07:38
prepare-issue Step 7a no longer traces backward from the goal to enumerate
REQ-{GRP}-NNN requirements on every recipe:implementation issue. It now applies
a three-part bar (absolute, broad, unarguable) whose default outcome is zero
requirements, capped at three plain sentences with no REQ- identifiers or groups.
Drops the issue-comment path, which violated AGENTS.md 3.4.

triage-issues --enrich and Step 3c are removed entirely: batch generation is the
same behavior at the worst scale, and a flag that survived the new bar would
produce nothing on nearly every issue.

Deletes the tests that guarded the removed behavior.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
make-req is kept — it is user-invoked, writes to a local file rather than an
issue body, and make-groups traceability depends on its REQ-{GRP}-NNN IDs. It
gets the same bar the pipeline generators are being retired for: absolute,
broad, unarguable, default none. Applied to both the bundled copy and the
project-local .claude/ override.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
enrich-issues existed only to backfill REQ-{GRP}-NNN requirements onto the
backlog. Under the new requirement bar there is nothing to backfill, and a
dispatcher for a deleted skill is dead code.

Removes the skill directory, the enrich_issues tool with its private helpers
(_build_enrich_skill_command, _parse_enrich_result, _extract_partial_enrich_data,
_ENRICHED_ISSUE_RE, _ENRICH_RESULT_*), and every registry entry: _MUTATION_TOOLS,
_TOOL_DEFS, GATED_TOOLS, TOOL_SUBSET_TAGS, _DISPLAY_CATEGORIES, _UNFORMATTED_TOOLS,
defaults.yaml tier2, and skill_contracts.yaml.

Registers enrich-issues in RETIRED_SKILL_NAMES in the same commit, per
AGENTS.md 3.1. Corrects the tracked doc totals this changes: MCP tools 75 to 74,
kitchen-tagged 52 to 51, bundled skills 142 to 141, tier2 106 to 105.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
…ntracts

triage-issues no longer generates requirements, so it no longer carries a
## Requirements section or REQ- identifiers. Its only surviving 'requirements'
mentions are the semantic_requirements frontmatter key and a make-groups
cross-reference, which trip the loose substring gate in the header-consistency
test. Removed it from that list; the test still guards prepare-issue and
pipeline-summary.

Deleted test_req_id_format_consistent_across_skills outright. Neither of its
subjects generates REQ- IDs now, and for prepare-issue it would pass only
because the rewritten Step 7a prohibits the format by name — the same inverted
assertion that retired test_prepare_issue_uses_req_id_format.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Per review-pr finding: deleting test_prepare_issue_uses_req_id_format left the
new NEVER- clause forbidding REQ- identifiers, requirement groups, and the
at-most-three constraint cap with zero coverage. Add a positive assertion on
the prohibition text in the Critical Constraints block — asserting on the
literal 'REQ-' would fail because the NEVER bullet itself contains the token.
Per review-pr finding: enrich-issues retirement left the parametrization
collapsed to a single skill (review-pr), silently dropping coverage of the
single delegated-worker + sonnet child_model_policy shape. Add
apply-review-dimensions which carries exactly that semantic frontmatter
shape (count: 1, delegated-worker, sonnet).
Per review-pr finding: rename 'Hard Constraints (rare)' → 'Hard Requirements
(rare)' and align the NEVER- clause 'constraint sentences' → 'requirement
sentences'. The 'requirements_generated'/'requirements_appended' field names
and '## Requirements' section header are the public API consumed by the
pipeline; choosing 'requirement' as the unifying term avoids breaking the
public contract while resolving the four-way vocabulary drift in a single
step. This also subsumes the I7 (rename REQUIREMENTS_FILE) and I8 (add
retention comment for ## Requirements) info findings — both become moot
once vocabulary aligns on 'requirement'.
Per review-pr info finding: enrich_issues retirement left _HEADLESS_FAILURE_SCENARIOS
parametrizing a single tool name and tool_fn = {'prepare_issue': prepare_issue}[tool_name]
as a vestigial one-entry dispatch dict. Drop the tool_name parameter and inline
prepare_issue so the test reads as what it is.
…_report_bug.py

Per review-pr info finding: enrich_issues retirement removed the _parse_enrich_result
tests, exposing that _parse_prepare_result unit tests were duplicated across
test_tools_report_bug.py and test_tools_issue_lifecycle.py with identical
assertions ('no result block found' / 'result block contained invalid JSON').
Keep the prepare-result parse tests in test_tools_issue_lifecycle.py (next to the
other tools_issue_headless helper tests) and remove the duplicate from
test_tools_report_bug.py, plus its now-unused _PREPARE_RESULT_START/END constants.
Adversarial validation caught two leftover 'constraint' references inside Step 7a:
- L371 'If one or more constraints pass' → 'requirements'
- L388 bash comment 'constraint sentences' → 'requirement sentences'

The step now consistently uses 'requirement' everywhere (heading L350, body
L371, NEVER clause L466, bash comment L388, field names, section header).
Public API (requirements_generated/appended, ## Requirements) remains
untouched per the original unification rationale.
@Trecek
Trecek added this pull request to the merge queue Aug 17, 2026
Merged via the queue into develop with commit 3ac852f Aug 17, 2026
4 checks passed
@Trecek
Trecek deleted the impl-retire-auto-requirements-20260817-073008 branch August 17, 2026 18:38
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.

2 participants