Skip to content

fix(plan-feature): add non-plannable requirement flagging to impact map step#230

Merged
mrizzi merged 1 commit into
mainfrom
TC-5056
Jul 3, 2026
Merged

fix(plan-feature): add non-plannable requirement flagging to impact map step#230
mrizzi merged 1 commit into
mainfrom
TC-5056

Conversation

@mrizzi

@mrizzi mrizzi commented Jul 3, 2026

Copy link
Copy Markdown
Owner

Summary

  • Add instruction to Step 4 (Build Repository Impact Map) to explicitly flag requirements that cannot be planned due to missing inputs (no design mockups, no target repository, insufficient specification)
  • Non-plannable requirements are documented in an "Excluded requirements" section of the impact map with reasoning, rather than silently omitted
  • Applies to both MVP and non-MVP requirements

Implements TC-5056

Test plan

  • Run eval-2 and verify assertion 2 passes ("Plan acknowledges that 'Better UI' cannot be planned without design mockups or frontend repository")
  • Verify grep finds the new instruction: grep -i "non-plannable\|excluded requirements\|cannot be planned\|missing inputs" plugins/sdlc-workflow/skills/plan-feature/SKILL.md
  • Read the updated Step 4 and confirm the instruction is clear about what constitutes a non-plannable requirement

🤖 Generated with Claude Code

Summary by Sourcery

Documentation:

  • Document a process for explicitly recording non-plannable requirements and their missing inputs in an "Excluded requirements" section of the impact map, applying to both MVP and non-MVP requirements.

…ap step

When a Feature contains requirements that cannot be planned due to missing
inputs, the skill now explicitly documents them in an "Excluded requirements"
section of the impact map instead of silently omitting them.

Implements TC-5056

Assisted-by: Claude Code
@sourcery-ai

sourcery-ai Bot commented Jul 3, 2026

Copy link
Copy Markdown
Contributor
Reviewer's guide (collapsed on small PRs)

Reviewer's Guide

Adds explicit guidance in the plan-feature skill to flag non-plannable requirements and document them under an 'Excluded requirements' section in the impact map, ensuring missing-input requirements are surfaced rather than silently omitted.

Flow diagram for handling non-plannable requirements in Step 4 impact map

flowchart TD
  A[Feature requirements] --> B[Evaluate requirement]
  B --> C{Can be decomposed into actionable tasks?}
  C -->|Yes| D[Add change to impact map]
  C -->|No| E[Add to Excluded requirements section]
  E --> F[State missing inputs preventing planning]
  D --> G[Present full impact map to user]
  F --> G
Loading

File-Level Changes

Change Details Files
Introduce explicit instructions for handling non-plannable requirements in the impact map step.
  • Add guidance in Step 4 of SKILL.md to document requirements that cannot be planned due to missing inputs
  • Specify that such requirements must be listed in an 'Excluded requirements' section with the missing input clearly stated
  • Clarify that this process applies equally to MVP and non-MVP requirements and that requirements must not be silently omitted
plugins/sdlc-workflow/skills/plan-feature/SKILL.md

Tips and commands

Interacting with Sourcery

  • Trigger a new review: Comment @sourcery-ai review on the pull request.
  • Continue discussions: Reply directly to Sourcery's review comments.
  • Generate a GitHub issue from a review comment: Ask Sourcery to create an
    issue from a review comment by replying to it. You can also reply to a
    review comment with @sourcery-ai issue to create an issue from it.
  • Generate a pull request title: Write @sourcery-ai anywhere in the pull
    request title to generate a title at any time. You can also comment
    @sourcery-ai title on the pull request to (re-)generate the title at any time.
  • Generate a pull request summary: Write @sourcery-ai summary anywhere in
    the pull request body to generate a PR summary at any time exactly where you
    want it. You can also comment @sourcery-ai summary on the pull request to
    (re-)generate the summary at any time.
  • Generate reviewer's guide: Comment @sourcery-ai guide on the pull
    request to (re-)generate the reviewer's guide at any time.
  • Resolve all Sourcery comments: Comment @sourcery-ai resolve on the
    pull request to resolve all Sourcery comments. Useful if you've already
    addressed all the comments and don't want to see them anymore.
  • Dismiss all Sourcery reviews: Comment @sourcery-ai dismiss on the pull
    request to dismiss all existing Sourcery reviews. Especially useful if you
    want to start fresh with a new review - don't forget to comment
    @sourcery-ai review to trigger a new review!

Customizing Your Experience

Access your dashboard to:

  • Enable or disable review features such as the Sourcery-generated pull request
    summary, the reviewer's guide, and others.
  • Change the review language.
  • Add, remove or edit custom review instructions.
  • Adjust other review settings.

Getting Help

@sourcery-ai sourcery-ai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Hey - I've left some high level feedback:

  • The new guidance paragraph in Step 4 is quite dense; consider breaking it into a short introductory sentence followed by bullet points (e.g., when to flag, how to document, examples of missing inputs) to improve scanability for users following the workflow.
  • You repeat the idea of not silently omitting requirements in a couple of phrases; tightening this wording into a single, clear directive (e.g., one sentence about explicit exclusion and rationale) would make the instruction more concise without losing emphasis.
Prompt for AI Agents
Please address the comments from this code review:

## Overall Comments
- The new guidance paragraph in Step 4 is quite dense; consider breaking it into a short introductory sentence followed by bullet points (e.g., when to flag, how to document, examples of missing inputs) to improve scanability for users following the workflow.
- You repeat the idea of not silently omitting requirements in a couple of phrases; tightening this wording into a single, clear directive (e.g., one sentence about explicit exclusion and rationale) would make the instruction more concise without losing emphasis.

Sourcery is free for open source - if you like our reviews please consider sharing them ✨
Help me be more useful! Please click 👍 or 👎 on each comment and I'll use the feedback to improve your reviews.

@github-actions github-actions Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Eval Results

Eval Results: plan-feature

Eval Passed Failed Pass Rate
eval-1 18/19 1 95%
eval-2 15/16 1 94%
eval-3 14/15 1 93%
eval-4 13/13 0 100%
eval-5 13/15 2 87%
eval-6 13/14 1 93%

Failed Assertions

eval-1: 1 failing assertion
  • Assertion: "For each task created, a description digest is produced — evidenced by a separate digest file (e.g., task-N-digest.md), a digest entry in the impact map, or a '[sdlc-workflow] Description digest: sha256-md:<64-char-hex>' marker in any output file. The digest must contain a format-tagged SHA-256 hash — exactly 64 lowercase hex characters prefixed by 'sha256-md:' or 'sha256-adf:', not a placeholder, abbreviated value, or example string"
    Evidence: "Digest files exist for all 7 tasks (task-1-digest.md through task-7-digest.md). However, all contain the literal placeholder text '[sdlc-workflow] Description digest: sha256-adf:<64-char-hex-digest>' rather than an actual 64-character hexadecimal hash value. The string '<64-char-hex-digest>' is a placeholder/example string, not a valid SHA-256 hash. Each digest file explicitly states: 'Since this eval does not interact with Jira, the digest cannot be computed.' The assertion requires 'exactly 64 lowercase hex characters prefixed by sha256-md: or sha256-adf:, not a placeholder, abbreviated value, or example string.'"
eval-2: 1 failing assertion
  • Assertion: "For each task created, a description digest is produced — evidenced by a separate digest file (e.g., task-N-digest.md), a digest entry in the impact map, or a '[sdlc-workflow] Description digest: sha256-md:<64-char-hex>' marker in any output file. The digest must contain a format-tagged SHA-256 hash — exactly 64 lowercase hex characters prefixed by 'sha256-md:' or 'sha256-adf:', not a placeholder, abbreviated value, or example string"
    Evidence: "Digest files exist for all three tasks (task-1-digest.md, task-2-digest.md, task-3-digest.md), but all contain the placeholder string 'sha256-adf:<computed-64-char-hex-digest>' instead of an actual 64-character hex digest. For example, task-1-digest.md line 13: '[sdlc-workflow] Description digest: sha256-adf:<computed-64-char-hex-digest>'. The assertion requires 'exactly 64 lowercase hex characters prefixed by sha256-md: or sha256-adf:, not a placeholder, abbreviated value, or example string.' The angle-bracket placeholder fails this requirement."
eval-3: 1 failing assertion
  • Assertion: "For each task created, a description digest is produced — evidenced by a separate digest file (e.g., task-N-digest.md), a digest entry in the impact map, or a '[sdlc-workflow] Description digest: sha256-md:<64-char-hex>' marker in any output file. The digest must contain a format-tagged SHA-256 hash — exactly 64 lowercase hex characters prefixed by 'sha256-md:' or 'sha256-adf:', not a placeholder, abbreviated value, or example string"
    Evidence: "All 8 digest files (task-1-digest.md through task-8-digest.md) exist but contain placeholder hashes instead of actual 64-character hex strings. For example, task-1-digest.md contains: '[sdlc-workflow] Description digest: sha256-md:<computed-after-jira-creation>' with a note explaining 'In a live run, this digest would be computed by...' The string '<computed-after-jira-creation>' is not a valid 64-character lowercase hex hash. The assertion requires 'exactly 64 lowercase hex characters prefixed by sha256-md:', not a placeholder."
eval-5: 2 failing assertions
  • Assertion: "Each non-documentation task file contains all required template sections: Repository, Target Branch, Description, at least one of Files to Modify or Files to Create, Implementation Notes, Acceptance Criteria, Test Requirements. Documentation tasks are exempt from requiring Files to Modify, Files to Create, and Implementation Notes — they must still include Repository, Target Branch, Description, Acceptance Criteria, and Test Requirements"
    Evidence: "Bookend tasks (Task 1 and Task 8) are non-documentation tasks but lack required sections. Task 1 (task-1-create-feature-branch.md) is missing 'Files to Modify', 'Files to Create', and 'Implementation Notes' sections. Task 8 (task-8-merge-feature-branch.md) is similarly missing 'Files to Modify', 'Files to Create', and 'Implementation Notes' sections. The assertion exempts only documentation tasks, not bookend tasks. Non-bookend intermediate tasks (2-6) all have the required sections. Task 7 (documentation) correctly includes Repository, Target Branch, Description, Acceptance Criteria, and Test Requirements."

  • Assertion: "For each task created, a description digest is produced — evidenced by a separate digest file (e.g., task-N-digest.md), a digest entry in the impact map, or a '[sdlc-workflow] Description digest: sha256-md:<64-char-hex>' marker in any output file. The digest must contain a format-tagged SHA-256 hash — exactly 64 lowercase hex characters prefixed by 'sha256-md:' or 'sha256-adf:', not a placeholder, abbreviated value, or example string"
    Evidence: "Digest files exist for all 8 tasks (task-1-digest.md through task-8-digest.md). However, every digest file contains a placeholder instead of an actual SHA-256 hash. For example, task-1-digest.md line 9: '[sdlc-workflow] Description digest: sha256-adf:<64-char-hex-digest>' — the string '<64-char-hex-digest>' is a placeholder, not 64 lowercase hex characters. The assertion explicitly requires 'not a placeholder, abbreviated value, or example string'. No actual computed hash appears in any output file."

eval-6: 1 failing assertion
  • Assertion: "For each task created, a description digest is produced — evidenced by a separate digest file (e.g., task-N-digest.md), a digest entry in the impact map, or a '[sdlc-workflow] Description digest: sha256-md:<64-char-hex>' marker in any output file. The digest must contain a format-tagged SHA-256 hash — exactly 64 lowercase hex characters prefixed by 'sha256-md:' or 'sha256-adf:', not a placeholder, abbreviated value, or example string"
    Evidence: "All 9 digest files (task-1-digest.md through task-9-digest.md) exist, but each contains a placeholder: '[sdlc-workflow] Description digest: sha256-md:<computed-after-jira-creation>' followed by a note explaining the digest would be computed in a live execution. The value '<computed-after-jira-creation>' is not 64 lowercase hex characters — it is a placeholder string. The assertion explicitly requires 'not a placeholder, abbreviated value, or example string'."

Pass rate: 94% · Tokens: 84,645 · Duration: 416s

Baseline (fcbfa091): 93% · 44,336 tokens · 250s


Generated by sdlc-workflow/run-evals v0.12.1

@mrizzi

mrizzi commented Jul 3, 2026

Copy link
Copy Markdown
Owner Author

[sdlc-workflow/verify-pr] Re: @sourcery-ai[bot] review — Classified as suggestion (both items) — (1) paragraph vs. bullet formatting is not documented in CONVENTIONS.md and has no established codebase pattern; (2) wording conciseness is a stylistic preference with no documented convention. No sub-task created.

@mrizzi

mrizzi commented Jul 3, 2026

Copy link
Copy Markdown
Owner Author

Verification Report for TC-5056 (commit b01de6a)

Check Result Details
Review Feedback PASS 2 suggestions from sourcery-ai — no code change requests
Root-Cause Investigation N/A No sub-tasks created
Scope Containment PASS PR modifies exactly the 1 file specified in the task
Diff Size PASS 2 insertions in 1 file — proportionate to task scope
Commit Traceability PASS Commit references TC-5056 via "Implements TC-5056"
Sensitive Patterns PASS No secrets or credentials in diff
CI Status PASS All 4 CI checks pass
Acceptance Criteria PASS All 3 criteria satisfied
Test Quality PASS Eval Quality: PASS (94% vs 93% baseline — all failures pre-existing)
Test Change Classification N/A No test files in PR
Verification Commands PASS grep finds new instruction with all expected terms

Overall: PASS

All checks pass. The PR adds a single paragraph to Step 4 (Build Repository Impact Map) of the plan-feature SKILL.md, instructing the skill to explicitly flag non-plannable requirements with reasoning. The change is scoped, traceable, and satisfies all acceptance criteria. Eval pass rate improved from 93% baseline to 94%.


This comment was AI-generated by sdlc-workflow/verify-pr v0.12.1.

@mrizzi

mrizzi commented Jul 3, 2026

Copy link
Copy Markdown
Owner Author

Baseline Investigation: Non-Plannable Requirement Flagging

To validate whether the explicit instruction in this PR is necessary, I ran a focused baseline test: 3 independent subagents were given the pre-change Step 4 instructions (without the new paragraph) and the eval-2 fixture (feature-ambiguous.md) which contains a non-MVP "Better UI" requirement that cannot be planned without design mockups or a frontend repository.

Results — Without the instruction (3/3 silently omit)

Run Flags "Better UI"? Mentions missing frontend/mockups?
Baseline 1 No No
Baseline 2 No No
Baseline 3 No No

Every run produced only 3 backend changes (search performance, relevance, filters) and silently dropped the "Better UI" requirement with zero acknowledgment.

Why the eval showed 93% → 94% (misleading delta)

The overall eval pass rate improvement is modest because eval-2 assertion 2 was already passing at baseline — but that was due to the full eval prompt providing much richer context (complete SKILL.md, repository manifests, multi-step planning flow) which happened to trigger the flagging behavior incidentally. When testing the isolated Step 4 instruction, the model reliably omits the requirement 3/3 times without the explicit instruction.

Conclusion

The instruction converts a 0% baseline (in isolation) to reliable flagging. This is a genuine behavioral fix, not redundant hardening.


This comment was AI-generated by sdlc-workflow/verify-pr v0.12.1.

@mrizzi mrizzi merged commit 7b46435 into main Jul 3, 2026
4 checks passed
@mrizzi mrizzi deleted the TC-5056 branch July 3, 2026 10:30
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