[ISS-4] verify_sprint_task: plain-prose plan paths are invisible to the classifier, so every large task is DIVERGENT #137

Open
opened 2026-09-09 19:55:07 +02:00 by janpeter · 0 comments
Owner

Beheerd door Scrum4Me — wijzigingen hier worden overschreven. Bron: https://thuis.jp-visser.nl/issues/cmtudcbaw000656og4k7czrh7

Status: new · Severity: s3_major · Gemeld door: scrum4me-server:claude-opus-5 · Occurrences: 1 (laatst: 2026-09-09T17:24:52.664Z) · Aangemaakt: 2026-09-09T17:24:52.664Z

Registratie

Observed on sprint run cmtucwrsy01dedp7r8vhw1uhe (Scrum4Us ST-127 / IDEA-208 usage table), job cmtucwrt601dfdp7r90844x4v.

SYMPTOM
verify_sprint_task returns DIVERGENT for a diff that touches exactly and only the files the plan names:
packages/shared/tests/usage-contract.test.ts | 76 +
packages/shared/src/contract/endpoints.ts | 48 +
packages/shared/src/index.ts | 2 +-
Reasoning returned: "Plan vermeldt geen specifieke paden; 132 gewijzigde regels — te groot om als aligned te bestempelen."

CAUSE (read from src/verify/classify.ts)
extractPlanPaths() recognises a path only when it is backtick-quoted (backtickRe + looksLikePath) or is the heading of a "- "/"* " bullet. The plan snapshots for T-529..T-533 write their file set as plain prose:
"Files: packages/shared/src/contract/endpoints.ts,\npackages/shared/tests/usage-contract.test.ts."
so planPaths.length === 0 and classifyDiffAgainstPlan falls into the no-plan-paths branch, which is "> 50 changed lines -> DIVERGENT" (classify.ts:119-130).

IMPACT
The verdict is uncorrelated with the actual work: it is a function of how the plan text happens to be punctuated. A plan whose paths are unquoted can never reach ALIGNED once the change exceeds 50 lines, and the SPRINT_IMPLEMENTATION prompt tells the worker to fail the whole sprint on DIVERGENT. All five tasks of this sprint are written that way; T3 and T4 are multi-hundred-line changes, so the run is unrunnable as configured. The inverse failure also exists and is worse: a genuinely divergent small change with no backticked paths is classified ALIGNED.

SUGGESTED FIX
Extend extractPlanPaths() with a bare-path scan over the plan text — a token matching something like /(?:[\w.-]+/)+[\w.-]+.[a-zA-Z][a-zA-Z0-9]{0,5}/ (at least one slash plus a file extension) reuses looksLikePath()'s intent without the backtick requirement, and would pick up both the "Files:" header and the inline references. Worth a test case with an unquoted "Files:" header, since that is the shape the idea/grill pipeline actually produces.

WORKAROUND AVAILABLE TODAY
Cut plan snapshots with backtick-quoted paths, or set verify_required to ALIGNED_OR_PARTIAL for tasks whose plans use prose paths.

Onderzoek

Nog geen onderzoek.

Oplossing

Nog geen oplossing.

> Beheerd door Scrum4Me — wijzigingen hier worden overschreven. Bron: https://thuis.jp-visser.nl/issues/cmtudcbaw000656og4k7czrh7 Status: new · Severity: s3_major · Gemeld door: scrum4me-server:claude-opus-5 · Occurrences: 1 (laatst: 2026-09-09T17:24:52.664Z) · Aangemaakt: 2026-09-09T17:24:52.664Z ## Registratie Observed on sprint run cmtucwrsy01dedp7r8vhw1uhe (Scrum4Us ST-127 / IDEA-208 usage table), job cmtucwrt601dfdp7r90844x4v. SYMPTOM verify_sprint_task returns DIVERGENT for a diff that touches exactly and only the files the plan names: packages/shared/__tests__/usage-contract.test.ts | 76 + packages/shared/src/contract/endpoints.ts | 48 + packages/shared/src/index.ts | 2 +- Reasoning returned: "Plan vermeldt geen specifieke paden; 132 gewijzigde regels — te groot om als aligned te bestempelen." CAUSE (read from src/verify/classify.ts) extractPlanPaths() recognises a path only when it is backtick-quoted (backtickRe + looksLikePath) or is the heading of a "- "/"* " bullet. The plan snapshots for T-529..T-533 write their file set as plain prose: "Files: packages/shared/src/contract/endpoints.ts,\npackages/shared/__tests__/usage-contract.test.ts." so planPaths.length === 0 and classifyDiffAgainstPlan falls into the no-plan-paths branch, which is "> 50 changed lines -> DIVERGENT" (classify.ts:119-130). IMPACT The verdict is uncorrelated with the actual work: it is a function of how the plan text happens to be punctuated. A plan whose paths are unquoted can never reach ALIGNED once the change exceeds 50 lines, and the SPRINT_IMPLEMENTATION prompt tells the worker to fail the whole sprint on DIVERGENT. All five tasks of this sprint are written that way; T3 and T4 are multi-hundred-line changes, so the run is unrunnable as configured. The inverse failure also exists and is worse: a genuinely divergent small change with no backticked paths is classified ALIGNED. SUGGESTED FIX Extend extractPlanPaths() with a bare-path scan over the plan text — a token matching something like /(?:[\w.-]+\/)+[\w.-]+\.[a-zA-Z][a-zA-Z0-9]{0,5}/ (at least one slash plus a file extension) reuses looksLikePath()'s intent without the backtick requirement, and would pick up both the "Files:" header and the inline references. Worth a test case with an unquoted "Files:" header, since that is the shape the idea/grill pipeline actually produces. WORKAROUND AVAILABLE TODAY Cut plan snapshots with backtick-quoted paths, or set verify_required to ALIGNED_OR_PARTIAL for tasks whose plans use prose paths. ## Onderzoek _Nog geen onderzoek._ ## Oplossing _Nog geen oplossing._ <!-- s4m:issue:cmtudcbaw000656og4k7czrh7 -->
Sign in to join this conversation.
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
janpeter/scrum4me-mcp#137
No description provided.