workflow-fix: c4 escape via _standalone_na_declared
Highlight text on any card (body, plan, or an event) to anchor a comment, or leave a whole-task comment here. Mention @claude to summon a reply.
No comments yet.
Overview / Motivation
Auto-filed by the /daily 2026-07-11 parked-candidate routing pass (Step C) from a FORMAL workflow-fix candidate block parked on task #1262 (emitting agent: round-1 Alternatives critic; parked under the recursion guard).
Goal
Migrate the verify_plan.py c4 (check_contrastive_negatives) N/A escape from a bare doc-global regex to _standalone_na_declared, mirroring the #1237/#1262 pattern.
Workflow gap
- Bug observed: c4's N/A escape is a bare doc-global
re.search(r"(?i)not a behavior[- ]implantation")over strip_fences at scripts/verify_plan.py:714 — any prose sentence containing the phrase self-escapes the check (same class as the c7 bug #1262 fixed; #1237's NA_RE-prefix grep missed both). - Why it is a workflow gap: verify_plan.py is the plan-gate verifier; a self-escaping check lets a bounced plan spuriously satisfy c4 (the #810 polarity). Mechanizable check: grep verify_plan.py for bare
re.search(r"(?i)not afeeding_pass— the set must be empty or documented. - Confidence (emitter): high
- verified-at-filing:
grep -n 're.search(r"(?i)not a behavior' scripts/verify_plan.py→ 1 hit at line 714 feeding_passat line 715 (2026-07-12, post-#1262 merge) — still unfixed; #1262 migrated only c7.
Proposed change (candidate diff sketch — refine in planning)
- if re.search(r"(?i)not a behavior[- ]implantation", text):
+ if _standalone_na_declared(plan, r"not a behavior[- ]implantation"):
+ docstring/SKILL.md: add `N/A — not a behavior-implantation` (check 4) to the canonical escape lists
+ tests: mid-prose red fixture + standalone green fixture; floor 22->23
Scope / surfaces
- Primary target:
scripts/verify_plan.py - ADD the phrase to the canonical escape lists (verify_plan module docstring + adversarial-planner SKILL.md block, backtick-wrapped) — currently absent from both; red-green fixtures; bump the skillmd-pin extraction floor.
Constraints / invariants
- Workflow-surface only — never experiment code,
configs/, ortasks/. scripts/workflow_lint.py --check-askspasses; ruff on touched files passes;uv run pytest tests/test_verify_plan.pygreen.- This session runs under
EPM_WORKFLOW_FIX_SESSION=1and carries aworkflow_fix_target:Provenance line — it MUST NOT auto-route any of its own subagents' workflow-fix candidates (recursion guard).
Provenance
- workflow_fix_target: scripts/verify_plan.py
- fingerprint: 791d8ecf6fd1
target_file: scripts/verify_plan.py
bug_observed: c4 (check_contrastive_negatives) N/A escape is a bare doc-global re.search(r"(?i)not a behavior[- ]implantation") over strip_fences at scripts/verify_plan.py:714 — any prose sentence containing the phrase self-escapes the check (same class as the c7 bug #1262 fixes; #1237's NA_RE-prefix grep missed both).
why_workflow_gap: verify_plan.py is the plan-gate verifier; a self-escaping check lets a bounced plan spuriously satisfy c4 (the #810 polarity). Surfaced by the #1262 round-1 Alternatives critic (mechanizable check: grep verify_plan.py for bare re.search(r"(?i)not a feeding _pass — the set must be empty or documented).
proposed_change: migrate c4's escape to _standalone_na_declared(plan, r"not a behavior[- ]implantation") mirroring #1237/#1262; ADD the phrase to the canonical escape lists (verify_plan module docstring + adversarial-planner SKILL.md block, backtick-wrapped) since it is currently absent from both; red-green fixtures; bump the skillmd-pin extraction floor.
diff_sketch: |
- if re.search(r"(?i)not a behavior[- ]implantation", text):
- if _standalone_na_declared(plan, r"not a behavior[- ]implantation"):
- docstring/SKILL.md: add
N/A — not a behavior-implantation(check 4) to the canonical escape lists - tests: mid-prose red fixture + standalone green fixture; floor 22->23 confidence: high related_task: #1262