workflow-fix: poll_pipeline synthesized envelope version max+1
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 /daily 2026-07-03 from a recursion-guard-parked workflow-fix candidate.
Goal
the synthesized envelope should omit the version (let task_workflow.post_event derive max+1) or compute max(existing)+1 for the kind; needs its own analysis of multipart/pointer-marker + sentinel-schema interactions
Workflow gap
- Bug observed: the synthesized-envelope fallback (~lines 846-856) pins 'kind': 'epm:results', 'version': 1 in code; on a follow-up round's re-run or a re-drained sentinel this reproduces the version-collision class (#389/#825) in the poller path
- Why it is a workflow gap: see candidate note
- Confidence (emitter): medium
Proposed change (candidate sketch — refine in planning)
the synthesized envelope should omit the version (let task_workflow.post_event derive max+1) or compute max(existing)+1 for the kind; needs its own analysis of multipart/pointer-marker + sentinel-schema interactions
Scope / surfaces
- Primary target:
scripts/poll_pipeline.py - Grep the workflow surface for the pattern before editing; list every hit in the plan.
Constraints / invariants
- Workflow-surface only;
scripts/workflow_lint.py --check-askspasses; ruff on touched files passes.
Provenance
- workflow_fix_target: scripts/poll_pipeline.py
- fingerprint: 5ff6ef7fb425
routed: parked: EPM_WORKFLOW_FIX_SESSION (recursion guard — this session is a workflow-fix session; candidate LOGGED for the next orchestrator pass, NOT auto-filed) source: prose-followup (planner § Follow-ups + Claude code-reviewer bug-class sweep, both confirmed the line)
target_file: scripts/poll_pipeline.py bug_observed: The synthesized-envelope fallback (~lines 846-856) pins "kind": "epm:results", "version": 1 in code; on a follow-up round's re-run or a re-drained sentinel this reproduces the same version-collision class (#389/#825) in the poller path. why_workflow_gap: The prose surfaces now defer to max+1 (#917), but this code path still hardcodes version 1 — the last checked-in literal for a round-versioned kind, outside #917's declared scope (poll_pipeline.py was must-not-touch). proposed_change: The synthesized envelope should omit the version (let task_workflow.post_event derive max+1) or compute max(existing)+1 for the kind; needs its own analysis of multipart/pointer-marker + sentinel-schema interactions. diff_sketch: |
- envelope = {"kind": "epm:results", "version": 1, ...}
- envelope = {"kind": "epm:results", ...} # version omitted -> post_event derives max+1 confidence: medium related_task: #917