Skip to content

Fix inline bold criteria section parsing - #374

Merged
datacas merged 1 commit into
mainfrom
task-372
Oct 30, 2026
Merged

datacas merged 1 commit into
mainfrom
task-372

Conversation

@datacas

@datacas datacas commented Oct 30, 2026

Copy link
Copy Markdown
Owner

Closes #372 — #372

Summary

The criteria parser now treats a punctuated bold label followed by prose, such as **Tests.** text, as a section boundary. Flat-list validation remains strict. Regression coverage includes the existing standalone label and heading forms, malformed and placeholder criteria, bold markup within criteria, and the unchanged body of #330.

Diagnosis

Issue #372 reports that roadmap criteria are rejected when the next section uses an inline bold label. Reproduction before the fix: read_criteria("github", "datacas/code-cycle-toolkit", "330") returned needs_refinement: criteria must be a flat Markdown list. The cause matched the issue hypothesis: _SECTION recognized only headings and standalone bold labels. The invariant is that every non-section line inside the criteria block must be a flat Markdown list item.

The related-item search was widened because this is a bug in a shared parser. It found #159 and closed issue #253 as search candidates; neither shares this parser cause. #330 is the real-world body fixture. Classification: isolated_defect; decision: implement.

Work units

Unit Behaviour Files Tests Verification Rollback
WU-1 Recognize punctuated inline bold section labels while preserving criteria validation. scripts/verification_plan.py, tests/test_verification_plan.py, tests/fixtures/issue-330.md, docs/verification.md CriteriaTests regression coverage Parser smoke passed; python3 scripts/validate-package.py passed; configured full suite exceeded the 10-minute stage limit and is unverified. Independent

Verification (agent-reported)

  • python3 -m unittest discover -s tests — timed out after the 10-minute limit and was stopped (exit 130); not verified on the final head.
  • python3 scripts/validate-package.py — passed (exit 0): 16 skills validated and shared sections/manifests aligned.
  • python3 -m unittest — exited 0 but ran 0 tests; this is not evidence for the acceptance criteria.
  • Parser smoke assertions — passed (exit 0) for all six acceptance criteria against the final worktree.
  • Boundary verification: not required; the change is confined to pure parsing behavior.

The local run uses the repository checkout and dispatch environment; CI will run on GitHub's hosted runners with its own environment. Code-host checks will be reported for the pushed head once read.

@datacas

datacas commented Oct 30, 2026

Copy link
Copy Markdown
Owner Author

Implementation is published on task-372. Verification is blocked because the required full test suite did not finish within the ten-minute stage limit; the parser smoke assertions and package validation passed, but they do not replace that required check.

@datacas

datacas commented Oct 30, 2026

Copy link
Copy Markdown
Owner Author

[CCR-20260930-001] · reviewer · anthropic/claude-sonnet-5-5→? · high · schema:2

Initial review: PR #374 (work item #372)

Status: REVIEW_PASSED_AWAITING_CI — head bc026627e7765612ec508ba1cb98ffcdae09b572 fully reviewed; no open finding blocks approval. This is not an approval: the required checks of this head are still running and the cycle's CI gate decides.

Scope

Accumulated diff origin/main...HEAD (119 lines, 4 files): scripts/verification_plan.py, tests/test_verification_plan.py, tests/fixtures/issue-330.md, docs/verification.md. Repository conventions applied: AGENTS.md (docs page updated with the behavioural change: satisfied).

Findings

None. _SECTION gains one alternative, \*\*[^*]+[.:]\*\*[:.]?\s+\S.*$. It requires punctuation inside the bold label plus same-line prose, so:

  • **Prose** is still prose. (no punctuation in the label) stays a flat-list violation;
  • - Keeps **bold markup** ... items start with a list marker and never match;
  • the pre-existing standalone-label and heading forms are untouched;
  • nested items and placeholders still return needs_refinement.

Acceptance criteria (tests.version=2)

AC Check Result
AC-1 test_inline_bold_section_label_ends_criteria (**Tests.** and **Tests:**) passed
AC-2 existing standalone-label and heading tests in CriteriaTests passed
AC-3 test_malformed_criteria_remain_needs_refinement (prose, **Prose** line, nested item) passed
AC-4 same test (placeholder TODO, empty list) passed
AC-5 test_bold_markup_inside_criterion_does_not_end_section passed
AC-6 test_issue_330_body_is_evaluable_without_remote_edit (8 items, fixture of the #330 body) passed

The AC-6 fixture is a copy of the issue body; it does not read the live issue.

Security triage

Not a sensitive change: the security audit was skipped after triage. The deterministic rule (security_required=false in the plan) did not match any changed path (docs/, scripts/verification_plan.py, tests/), and my own reading finds a pure text parser with no new input surface, no I/O or privilege change.

Commands executed

  • python3 -m unittest tests.test_verification_plan — exit 0, 28 tests OK.
  • python3 scripts/validate-package.py — exit 0: VALID: 16 skills.
  • python3 -m unittest discover -s tests — not verified: did not finish within the 10-minute limit (same as the implementer's run); output up to that point showed only passing dots. Not counted as passed.
  • python3 -m unittest (no discovery) runs 0 tests and is no evidence.

Unverified

Full test suite on this head (timeout, see above); CI on GitHub's runners is the remaining evidence.

CI (parallel policy, not waited on)

Workflow "Validate package", all IN_PROGRESS at read time: Skills, manifests, and Bash installer; Windows test shard (windows-1..4). Nothing passed, failed or skipped yet.

Residual risks

A prose line in the criteria list that begins with a punctuated bold label (**Note.** ...) now silently ends the section instead of being rejected. This is the intended grammar and is documented in docs/verification.md.

Verdict

No blocking findings. Pending only the CI gate for the head above.

@datacas
datacas merged commit fabfbae into main Oct 30, 2026
6 checks passed
@datacas
datacas deleted the task-372 branch October 30, 2026 22:40
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.

Criteria gate rejects roadmap issues with inline bold section labels

1 participant