Fixed
- Doctrine artifact discovery in subdirectories — all 7 doctrine repositories now use
rglob()instead ofglob(), so artifacts in subdirectories ofshipped/are no longer silently skipped (#396). - Dashboard
/api/featuresempty response —StatusEvent.from_dict()now accepts bothfeature_slugandmission_slugfield names and normalizes the legacyin_reviewlane tofor_review. - Stale
patch()targets caught at lint time — newscripts/check_patch_targets.pyvalidates every@patch()target string resolves, added as an[ENFORCED]CI lint step (#394). - Architectural layer coverage guards — meta-tests fail when a
src/package has no layer assignment or a defined layer matches no module (#395). - Sonar reliability bugs — resolved 7 findings: unreachable code (S1763), identical branches (S3923), premature async task GC (S7502), always-true condition (S2583), tautological assertion (S3981), CSS shorthand override (S4657), parameter shadowing (S1226).
- Async task GC in event emitter —
asyncio.ensure_future()results held in_pending_tasksset with done-callback cleanup, preventing premature garbage collection. check-readinessCI gate unblocked — post-release version bump missed after tagging v3.1.0a2 (#408).
Changed
- CI test parallelization —
fast-testsandintegration-testssplit intodoctrine+corephases running in parallel (#397). --mission-runas canonical CLI flag — added as alias for--featureacross all CLI commands.--featureremains accepted as legacy alias.- Node.js 20 → 22 in CI workflows (current LTS).
- Mutation testing CI job disabled — too slow to run reliably.
- Ruff max line length increased from 120 to 164.
- Defunct
tests/legacyreferences removed.
Added
- RTK search tooling toolguide — new shipped doctrine artifact documenting RTK interception patterns and correct search tooling for worktree sessions.
last_updatedfield on Toolguide model and schema.- Integration tests for nested artifact discovery — 281-line test suite covering all 8 doctrine repository types.
integrationpytest marker registered inpyproject.toml.