Skip to content

fix: improve verifier follow-up issue format#310

Merged
stranske merged 1 commit intomainfrom
fix/verifier-issue-format
Dec 30, 2025
Merged

fix: improve verifier follow-up issue format#310
stranske merged 1 commit intomainfrom
fix/verifier-issue-format

Conversation

@stranske
Copy link
Copy Markdown
Owner

@stranske stranske commented Dec 30, 2025

Automated Status Summary

Scope

  • Scope section missing from source issue.

Tasks

  • Tasks section missing from source issue.

Acceptance criteria

  • Acceptance criteria section missing from source issue.

Head SHA: 9334b84
Latest Runs: ❔ in progress — Gate
Required: gate: ❔ in progress

Workflow / Job Result Logs
Agents PR meta manager ❔ in progress View run
CI Autofix Loop ✅ success View run
Copilot code review ❔ in progress View run
Gate ❔ in progress View run
Health 40 Sweep ✅ success View run
Health 44 Gate Branch Protection ✅ success View run
Health 45 Agents Guard ✅ success View run
Health 50 Security Scan ❔ in progress View run
Maint 52 Validate Workflows ✅ success View run
PR 11 - Minimal invariant CI ✅ success View run
Selftest CI ✅ success View run
Validate Sync Manifest ✅ success View run

1. Remove confusing 'Satisfy:' prefix from tasks - it's redundant since
   the task list already implies items need to be completed

2. Filter out markdown section headers (## Related, etc.) that were
   incorrectly being captured as acceptance criteria

3. Filter out PR/Issue references that look like list items but aren't
   actual acceptance criteria

This makes follow-up issues clearer and removes noise from the task list.
Copilot AI review requested due to automatic review settings December 30, 2025 06:59
@agents-workflows-bot
Copy link
Copy Markdown
Contributor

⚠️ Action Required: Unable to determine source issue for PR #310. The PR title, branch name, or body must contain the issue number (e.g. #123, branch: issue-123, or the hidden marker ).

@github-actions
Copy link
Copy Markdown
Contributor

Automated Status Summary

Head SHA: b8957a8
Latest Runs: ⏳ pending — Gate
Required contexts: Gate / gate, Health 45 Agents Guard / Enforce agents workflow protections
Required: core tests (3.11): ⏳ pending, core tests (3.12): ⏳ pending, docker smoke: ⏳ pending, gate: ⏳ pending

Workflow / Job Result Logs
(no jobs reported) ⏳ pending

Coverage Overview

  • Coverage history entries: 1

Coverage Trend

Metric Value
Current 0.00%
Baseline 85.00%
Delta -85.00%
Minimum 70.00%
Status ❌ Below minimum

Top Coverage Hotspots (lowest coverage)

File Coverage Missing
src/trend_analysis/_autofix_trigger_sample.py 0.0% 10
src/trend_analysis/_autofix_violation_case2.py 0.0% 15
src/trend_analysis/_autofix_violation_case3.py 0.0% 13
src/trend_analysis/_ci_probe_faults.py 0.0% 18
src/trend_analysis/automation_multifailure.py 0.0% 4
src/trend_analysis/constants.py 0.0% 1
src/trend_analysis/selector.py 0.0% 12
src/trend_analysis/weighting.py 0.0% 11
src/trend_analysis/__init__.py 100.0% 0

Low Coverage Files (<50.0%)

File Coverage Missing
src/trend_analysis/_autofix_trigger_sample.py 0.0% 10
src/trend_analysis/_autofix_violation_case2.py 0.0% 15
src/trend_analysis/_autofix_violation_case3.py 0.0% 13
src/trend_analysis/_ci_probe_faults.py 0.0% 18
src/trend_analysis/automation_multifailure.py 0.0% 4
src/trend_analysis/constants.py 0.0% 1
src/trend_analysis/selector.py 0.0% 12
src/trend_analysis/weighting.py 0.0% 11

Updated automatically; will refresh on subsequent CI/Docker completions.


Keepalive checklist

Scope

No scope information available

Tasks

  • No tasks defined

Acceptance criteria

  • No acceptance criteria defined

@github-actions
Copy link
Copy Markdown
Contributor

🤖 Keepalive Loop Status

PR #310 | Agent: Codex | Iteration 0/5

Current State

Metric Value
Iteration progress [----------] 0/5
Action wait (missing-agent-label)
Gate success
Tasks 0/2 complete
Keepalive ❌ disabled
Autofix ❌ disabled

🔍 Failure Classification

| Error type | infrastructure |
| Error category | resource |
| Suggested recovery | Confirm the referenced resource exists (repo, PR, branch, workflow, or file). |

Copy link
Copy Markdown
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

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

Pull request overview

This PR improves the format of verifier follow-up issues by removing redundant prefixes and filtering out incorrectly captured markdown content from task lists, addressing user feedback about confusing issue #306 formatting.

Key Changes:

  • Removes "Satisfy:" prefix from task items generated from unmet criteria
  • Adds filtering to prevent markdown section headers from being captured as acceptance criteria
  • Adds filtering to prevent PR/Issue reference lines from being captured as task items

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

Comment on lines 362 to +368
newTasks = findings.gaps.map((gap) => `Address: ${gap}`);
} else if (findings.unmetCriteria.length > 0) {
// Use verifier's specific unmet criteria
newTasks = findings.unmetCriteria.map((criterion) => `Satisfy: ${criterion}`);
// Use verifier's specific unmet criteria (no prefix - it's clear these need work)
newTasks = findings.unmetCriteria;
} else {
// Fall back to creating tasks from unmet acceptance criteria
newTasks = refinedUnmetCriteria.map((criterion) => `Satisfy: ${criterion}`);
newTasks = refinedUnmetCriteria;
Copy link

Copilot AI Dec 30, 2025

Choose a reason for hiding this comment

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

There's an inconsistency in how tasks are generated. When gaps are identified (line 362), tasks are prefixed with "Address:", but when unmet criteria or refined unmet criteria are used (lines 365, 368), no prefix is added. This creates inconsistent task formatting in the follow-up issue.

For consistency, consider either:

  1. Removing the "Address:" prefix on line 362 to match the other cases (recommended based on the PR's rationale)
  2. Adding appropriate prefixes to lines 365 and 368 to match line 362

The first option aligns with the PR description's goal of removing redundant prefixes since task list items already imply they need work.

Copilot uses AI. Check for mistakes.
Comment on lines +191 to +192
// Skip items that look like markdown links to sections (e.g., "- PR #123")
if (/^[-–]\s*(PR|Issue)\s*#\d+/i.test(text)) {
Copy link

Copilot AI Dec 30, 2025

Choose a reason for hiding this comment

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

The regex pattern is checking for text that starts with a hyphen/dash followed by "PR" or "Issue", but at this point text has already been extracted from the checkbox content (via match[1].trim()). The leading - or * was consumed by the checkbox pattern on line 184, so text will never start with - or .

For example, if the input line is - [ ] - PR #296 - Description, then match[1] captures - PR #296 - Description, which will correctly match this pattern. However, if the input is - [ ] PR #296 - Description (without a leading dash after the checkbox), it won't match.

Consider simplifying the pattern to /^(PR|Issue)\s*#\d+/i to match text that starts directly with "PR" or "Issue" followed by a number. Alternatively, if you want to handle both cases, use /^[-–]?\s*(PR|Issue)\s*#\d+/i to make the leading dash optional.

Suggested change
// Skip items that look like markdown links to sections (e.g., "- PR #123")
if (/^[-]\s*(PR|Issue)\s*#\d+/i.test(text)) {
// Skip items that look like markdown links to sections (e.g., "- PR #123" or "PR #123")
if (/^[-]?\s*(PR|Issue)\s*#\d+/i.test(text)) {

Copilot uses AI. Check for mistakes.
items.push(match[1].trim());
const text = match[1].trim();
// Skip markdown section headers that were incorrectly captured as criteria
if (text.startsWith('#') || text.startsWith('##')) {
Copy link

Copilot AI Dec 30, 2025

Choose a reason for hiding this comment

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

The check for startsWith('##') is redundant since any string starting with '##' will also start with '#'. The first condition will always catch both cases. Consider removing the || text.startsWith('##') portion to simplify the logic without changing behavior.

Suggested change
if (text.startsWith('#') || text.startsWith('##')) {
if (text.startsWith('#')) {

Copilot uses AI. Check for mistakes.
@stranske
Copy link
Copy Markdown
Owner Author

@codex fix comments

@chatgpt-codex-connector
Copy link
Copy Markdown

Summary

Testing

  • node --test .github/scripts/__tests__/verifier-issue-formatter.test.js

View task →

@stranske stranske merged commit 46938e1 into main Dec 30, 2025
71 checks passed
@stranske stranske deleted the fix/verifier-issue-format branch December 30, 2025 07:20
stranske added a commit that referenced this pull request Dec 30, 2025
1. Add helper functions to detect placeholder and garbage content:
   - isPlaceholderContent(): Detects "section missing from source issue" text
   - looksLikeSectionHeader(): Filters markdown headers like "## Related"
   - looksLikeReferenceLink(): Filters PR/Issue reference links

2. Update extractUncheckedItems() to use the new filters, removing:
   - Placeholder text from bot-generated PR templates
   - Markdown section headers incorrectly captured as criteria
   - PR/Issue reference links that aren't actual acceptance criteria

3. Add hasSubstantiveContent flag to formatFollowUpIssue() return:
   - true when there are real tasks/criteria/gaps to address
   - false when all content is placeholders or empty

4. Update both verifier workflows to skip issue creation when
   hasSubstantiveContent is false

Fixes issues like #313 (contentless) and #306 (garbage content).

Tested:
- PR #304 scenario: Now correctly filters out "## Related" and "- PR #N"
- PR #310 scenario: Now returns hasSubstantiveContent=false
- All 39 existing tests pass
stranske added a commit that referenced this pull request Dec 30, 2025
* docs: update SystemEvaluation.md - parallel testing is implemented

The documentation incorrectly stated that pytest-xdist was missing and
tests run sequentially. In fact:

- pytest-xdist is already in pyproject.toml (version 3.8.0)
- reusable-10-ci-python.yml installs pytest-xdist automatically
- The workflow uses '-n auto --dist=loadgroup' when xdist is detected

Updated the Performance section and Recommendations to reflect the
actual implemented state.

* fix: prevent contentless follow-up issues from verifier

1. Add helper functions to detect placeholder and garbage content:
   - isPlaceholderContent(): Detects "section missing from source issue" text
   - looksLikeSectionHeader(): Filters markdown headers like "## Related"
   - looksLikeReferenceLink(): Filters PR/Issue reference links

2. Update extractUncheckedItems() to use the new filters, removing:
   - Placeholder text from bot-generated PR templates
   - Markdown section headers incorrectly captured as criteria
   - PR/Issue reference links that aren't actual acceptance criteria

3. Add hasSubstantiveContent flag to formatFollowUpIssue() return:
   - true when there are real tasks/criteria/gaps to address
   - false when all content is placeholders or empty

4. Update both verifier workflows to skip issue creation when
   hasSubstantiveContent is false

Fixes issues like #313 (contentless) and #306 (garbage content).

Tested:
- PR #304 scenario: Now correctly filters out "## Related" and "- PR #N"
- PR #310 scenario: Now returns hasSubstantiveContent=false
- All 39 existing tests pass

* Update .github/scripts/verifier_issue_formatter.js

Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>

* Update .github/scripts/verifier_issue_formatter.js

Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>

---------

Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
stranske added a commit that referenced this pull request Dec 30, 2025
* docs: update SystemEvaluation.md - parallel testing is implemented

The documentation incorrectly stated that pytest-xdist was missing and
tests run sequentially. In fact:

- pytest-xdist is already in pyproject.toml (version 3.8.0)
- reusable-10-ci-python.yml installs pytest-xdist automatically
- The workflow uses '-n auto --dist=loadgroup' when xdist is detected

Updated the Performance section and Recommendations to reflect the
actual implemented state.

* fix: prevent contentless follow-up issues from verifier

1. Add helper functions to detect placeholder and garbage content:
   - isPlaceholderContent(): Detects "section missing from source issue" text
   - looksLikeSectionHeader(): Filters markdown headers like "## Related"
   - looksLikeReferenceLink(): Filters PR/Issue reference links

2. Update extractUncheckedItems() to use the new filters, removing:
   - Placeholder text from bot-generated PR templates
   - Markdown section headers incorrectly captured as criteria
   - PR/Issue reference links that aren't actual acceptance criteria

3. Add hasSubstantiveContent flag to formatFollowUpIssue() return:
   - true when there are real tasks/criteria/gaps to address
   - false when all content is placeholders or empty

4. Update both verifier workflows to skip issue creation when
   hasSubstantiveContent is false

Fixes issues like #313 (contentless) and #306 (garbage content).

Tested:
- PR #304 scenario: Now correctly filters out "## Related" and "- PR #N"
- PR #310 scenario: Now returns hasSubstantiveContent=false
- All 39 existing tests pass

* Update .github/scripts/verifier_issue_formatter.js

Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>

* Update .github/scripts/verifier_issue_formatter.js

Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>

* Initial plan

* Fix misleading comment in formatSimpleFollowUpIssue

The comment claimed "Simple format always has substantive content" but
the code correctly checks for it. Updated comment to accurately reflect
that we verify content rather than assume it exists.

Co-authored-by: stranske <23046322+stranske@users.noreply.github.com>

---------

Co-authored-by: stranske <stranske@gmail.com>
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
Co-authored-by: stranske <23046322+stranske@users.noreply.github.com>
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