Skip to content

fix: preserve indented checkbox states in PR Meta body sync#258

Merged
stranske merged 2 commits intomainfrom
claude/fix-task-completion-concerns-I1gRT
Feb 26, 2026
Merged

fix: preserve indented checkbox states in PR Meta body sync#258
stranske merged 2 commits intomainfrom
claude/fix-task-completion-concerns-I1gRT

Conversation

@stranske
Copy link
Copy Markdown
Owner

@stranske stranske commented Feb 26, 2026

Source: Issue #256

Automated Status Summary

Scope

You want to generate new output types as maintainers change their minds (slides, extra exhibits, etc.) without rewiring everything.

Context for Agent

Related Issues/PRs

Tasks

  • Create src/counter_risk/outputs/base.py defining an OutputGenerator interface for output plugins.
  • Update the historical workbook updater to implement OutputGenerator.
    • Create a new class that wraps the historical workbook updater logic (verify: confirm completion in repo) implements the OutputGenerator interface (verify: confirm completion in repo)
    • Define scope for: Refactor the existing historical workbook update code to use the new OutputGenerator-based class (verify: confirm completion in repo)
    • Implement focused slice for: Refactor the existing historical workbook update code to use the new OutputGenerator-based class (verify: confirm completion in repo)
    • Validate focused slice for: Refactor the existing historical workbook update code to use the new OutputGenerator-based class (verify: confirm completion in repo)
    • Define scope for: Add unit tests to verify the historical workbook OutputGenerator produces the same output as before
    • Implement focused slice for: Add unit tests to verify the historical workbook OutputGenerator produces the same output as before
    • Validate focused slice for: Add unit tests to verify the historical workbook OutputGenerator produces the same output as before
    • Define scope for: Update any calling code to use the new OutputGenerator interface for the historical workbook (verify: confirm completion in repo)
    • Implement focused slice for: Update any calling code to use the new OutputGenerator interface for the historical workbook (verify: confirm completion in repo)
    • Validate focused slice for: Update any calling code to use the new OutputGenerator interface for the historical workbook (verify: confirm completion in repo)
  • Update the PPT screenshot updater to implement OutputGenerator.
    • Create a new class that wraps the PPT screenshot updater logic (verify: confirm completion in repo)
    • Define scope for: Refactor the existing PPT screenshot update code to use the new OutputGenerator-based class (verify: confirm completion in repo)
    • Implement focused slice for: Refactor the existing PPT screenshot update code to use the new OutputGenerator-based class (verify: confirm completion in repo)
    • Validate focused slice for: Refactor the existing PPT screenshot update code to use the new OutputGenerator-based class (verify: confirm completion in repo)
    • Define scope for: Add unit tests to verify the PPT screenshot OutputGenerator produces the same output as before
    • Implement focused slice for: Add unit tests to verify the PPT screenshot OutputGenerator produces the same output as before
    • Validate focused slice for: Add unit tests to verify the PPT screenshot OutputGenerator produces the same output as before
    • Define scope for: Update any calling code to use the new OutputGenerator interface for the PPT screenshot updater (verify: confirm completion in repo)
    • Implement focused slice for: Update any calling code to use the new OutputGenerator interface for the PPT screenshot updater (verify: confirm completion in repo)
    • Validate focused slice for: Update any calling code to use the new OutputGenerator interface for the PPT screenshot updater (verify: confirm completion in repo)
  • Update the PPT link refresher to implement OutputGenerator.
    • Create a new class that wraps the PPT link refresher logic (verify: confirm completion in repo)
    • Define scope for: Refactor the existing PPT link refresh code to use the new OutputGenerator-based class (verify: confirm completion in repo)
    • Implement focused slice for: Refactor the existing PPT link refresh code to use the new OutputGenerator-based class (verify: confirm completion in repo)
    • Validate focused slice for: Refactor the existing PPT link refresh code to use the new OutputGenerator-based class (verify: confirm completion in repo)
    • Define scope for: Add unit tests to verify the PPT link refresher OutputGenerator produces the same output as before
    • Implement focused slice for: Add unit tests to verify the PPT link refresher OutputGenerator produces the same output as before
    • Validate focused slice for: Add unit tests to verify the PPT link refresher OutputGenerator produces the same output as before
    • Define scope for: Update any calling code to use the new OutputGenerator interface for the PPT link refresher (verify: confirm completion in repo)
    • Implement focused slice for: Update any calling code to use the new OutputGenerator interface for the PPT link refresher (verify: confirm completion in repo)
    • Validate focused slice for: Update any calling code to use the new OutputGenerator interface for the PPT link refresher (verify: confirm completion in repo)
  • Add a PDF export generator that uses PowerPoint export via COM if available; otherwise skips with a warning.
    • Create a PDFExportGenerator class that implements the OutputGenerator interface with method stubs (verify: confirm completion in repo)
    • Define scope for: Implement COM availability detection logic to check if PowerPoint COM interface is accessible (verify: confirm completion in repo)
    • Implement focused slice for: Implement COM availability detection logic to check if PowerPoint COM interface is accessible (verify: confirm completion in repo)
    • Validate focused slice for: Implement COM availability detection logic to check if PowerPoint COM interface is accessible (verify: confirm completion in repo)
    • Add PowerPoint to PDF export functionality using COM automation when available (verify: confirm completion in repo)
    • Implement graceful fallback behavior that logs a warning (verify: confirm completion in repo) skips PDF generation when COM is unavailable (verify: confirm completion in repo)
    • Add unit tests for the PDF export generator covering both COM available (verify: tests pass) unavailable scenarios (verify: confirm completion in repo)
  • Add configuration to enable/disable specific outputs per run and register output generators via config.
    • Define configuration schema for output generators including enable/disable flags (verify: config validated)
    • Define configuration schema for output generators including registration details (verify: config validated)
    • Implement a registry mechanism that loads (verify: confirm completion in repo) stores OutputGenerator instances from configuration (verify: config validated)
    • Add runtime logic to filter enabled output generators based on configuration settings (verify: config validated)
    • Update configuration documentation to explain how to register (verify: docs updated) enable/disable output generators (verify: confirm completion in repo)
    • Add integration tests that verify outputs can be selectively enabled disabled via configuration (verify: config validated)

Acceptance criteria

  • Implementing a single OutputGenerator class and registering it in config adds a new output without requiring changes to other outputs.
  • Disabling an output via config does not break the pipeline run.

Head SHA: a3d07a5
Latest Runs: ✅ success — Gate
Required: gate: ✅ success

Workflow / Job Result Logs
.github/workflows/autofix.yml ❌ failure View run
Agents PR Event Hub ⏭️ skipped View run
Agents PR Meta ❔ in progress View run
Dependabot Auto-merge ⏭️ skipped View run
Gate ✅ success View run
Health 45 Agents Guard ✅ success View run

parseCheckboxStates() and mergeCheckboxStates() only matched top-level
checkboxes (^- \[), ignoring indented sub-tasks (  - \[). When PR Meta
regenerated the PR body from the issue, auto-reconciled sub-task
checkboxes were silently reverted to unchecked. This caused the keepalive
loop to stall with rounds_without_task_completion: 8 despite the agent
completing real work — PR #256 had 5 tasks auto-checked then immediately
un-checked on every push.

https://claude.ai/code/session_01JhCWWDJG8PqwaSbVPCGfm6
Copilot AI review requested due to automatic review settings February 26, 2026 01:35
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

Fixes PR Meta body regeneration so it preserves checked states for indented (nested) markdown checklist items, preventing sub-task progress from being silently reverted during sync.

Changes:

  • Updated parseCheckboxStates() to detect checkbox lines with leading indentation.
  • Updated mergeCheckboxStates() to preserve indentation when restoring checked states onto regenerated content.

@agents-workflows-bot
Copy link
Copy Markdown
Contributor

agents-workflows-bot bot commented Feb 26, 2026

🤖 Keepalive Loop Status

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

Current State

Metric Value
Iteration progress [----------] 0/5
Action wait (missing-agent-label)
Disposition skipped (transient)
Gate success
Tasks 12/51 complete
Timeout 45 min (default)
Timeout usage 8m elapsed (19%, 37m remaining)
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). |

@agents-workflows-bot
Copy link
Copy Markdown
Contributor

agents-workflows-bot bot commented Feb 26, 2026

Keepalive Work Log (click to expand)
# Time (UTC) Agent Action Result Files Tasks Progress Commit Gate
0 2026-02-26 01:43:46 Codex wait (missing-agent-label-transient) skipped 0 12/51 failure
0 2026-02-26 02:13:13 Codex wait (missing-agent-label-transient) skipped 0 12/51 success

The body scan in extractIssueNumberFromPull was treating patterns like
"Run #2615" as issue references, causing the Upsert PR body sections
check to fail with a 404 when trying to fetch non-existent issues.

Add a preceding-word filter to skip #NNN when preceded by common
non-issue words (run, attempt, step, job, check, task, version, v).

https://claude.ai/code/session_01JhCWWDJG8PqwaSbVPCGfm6
@stranske stranske merged commit 10a0e5d into main Feb 26, 2026
333 checks passed
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.

3 participants