Bug Report BR-063 — RW -k task attribution drift (requested task vs version anchor)
Status: COMPLETE
Priority: CRITICAL
Severity: CRITICAL — forensic integrity blocker: release records can claim one task while version/tag lineage anchors a different task.
Created: 2026-04-07
Last updated: 2026-04-07 — E2:S01:T13+2 released runtime hardening to dev (RW -k mismatch guard, --art, validate_version_bump alignment, tests, dual-source docs).
Version: v0.2.1.13+2
Code: BR-063
Implementing Task: E2:S01:T13
Problem Statement
RW -k accepts an explicit requested task id for intent context, but release attribution can still follow the existing version.py task lineage. This can produce split accountability:
- commit/changelog narrative references requested task (example:
T12) - internal version/tag lineage remains a different task (example:
T10+6)
This breaks forensic traceability and creates ambiguous responsibility for what was actually released.
Expected Behavior
For a single release, task attribution must be single-source and consistent across:
version.py(RC.EPIC.STORY.TASK+BUILD)- commit footer (
Epic | Story | Task) - internal/semver release tags
- main and detailed changelog entries
- BR implementing-task linkage where applicable
If requested task and computed version task differ, RW must hard-fail unless an explicit reconciliation mode is chosen.
Reproduction
- Run
RW -k E2:S01:T12. - Observe version lineage increments on
T10(0.2.1.10+6). - Observe release/changelog text attributed to
T12. - Result: release artifacts disagree on accountable task.
Proposed Resolution
- Add explicit
RW -kattribution guard that compares requested task id with computed version task anchor. - If mismatch, abort by default and require an explicit operator choice:
- adopt requested task as canonical release anchor, or
- keep computed anchor and rewrite all release metadata accordingly.
- Add regression coverage for mismatch scenario.
Implementation Outcome
- Implemented
--artonvalidate_rw_task_intent.pyforrw-kintentional mismatch adoption. - Changed
rw-kdefault to forensic-strict mismatch fail (instead of unconditional pass). - Added
--artalignment enforcement invalidate_version_bump.pyvia--requested. - Extended tests:
test_validate_rw_task_intent.py(new) for mismatch/pass scenarios.test_validate_version_bump.pyfor ART alignment checks.test_rw_triggers.pyfor parsing RW inputs that include task ids/flags.
- Updated RW rules/docs to document
--artoperator guidance and propagation requirements.
Related
- BR-061
packages/frameworks/workflow mgt/scripts/validation/validate_rw_task_intent.pypackages/frameworks/workflow mgt/scripts/validation/validate_version_bump.py