feat(pm): status mapping parity across Linear and JIRA#1114
Merged
zbigniewsobiecki merged 4 commits intodevfrom Apr 15, 2026
Merged
feat(pm): status mapping parity across Linear and JIRA#1114zbigniewsobiecki merged 4 commits intodevfrom
zbigniewsobiecki merged 4 commits intodevfrom
Conversation
Spec 003 introduces PM status mapping parity across Linear and JIRA. Plan 1 (status-parity) locked for execution. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Plan 003/1 (status-parity). Linear PM wizard Field Mapping step now exposes all 8 CASCADE stages (backlog, splitting, planning, todo, inProgress, inReview, done, merged) in lifecycle order instead of only 4. Linear operators can now map workflow states to splitting/planning/todo/merged and have the corresponding agents dispatch on issue transitions. JIRA's silent-drop bug in resolveLifecycleConfig fixed: splitting/ planning/todo mappings the JIRA wizard already accepted now surface through to PMLifecycleManager and GitHub PR triggers. No operator action required. Canonical ProjectPMConfig.statuses widens to declare the full 9-stage vocabulary (including debug, reserved for future trigger), so providers can no longer silently drift from the trigger layer. Existing Linear integrations upgrade in place: new slots render as 'not set' on next wizard visit. No migration. Tests: 9 new unit tests (type shape + Linear + JIRA integration + SSR wizard). Integration coverage for spec ACs #8/#9 provided by existing linear-status-changed and jira-status-changed trigger handler tests — discovered during Phase 4 that handlers read provider-specific config directly (not resolveLifecycleConfig), so dispatch was never blocked for handlers; the drop was in downstream PMLifecycleManager callers. Totals: 7597 unit + 522 integration all green. Lint + typecheck clean. Closes spec 003. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
… complete Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Codecov Report✅ All modified and coverable lines are covered by tests. 📢 Thoughts on this report? Let us know! |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Closes spec 003-linear-status-mapping-parity. Linear PM integration now reaches full parity with Trello + JIRA on CASCADE stage → agent dispatch; JIRA silently-dropped mappings now actually work.
What the operator sees
planningand the planning agent dispatches on issue transitions — previously impossible.What changes behind the scenes
src/pm/lifecycle.ts—ProjectPMConfig.statuseswidens from 5 to 9 declared optional keys (addssplitting,planning,todo,debug). The canonical type is now the single source of truth for the CASCADE stage vocabulary.src/pm/linear/integration.ts—resolveLifecycleConfigpasses splitting/planning/todo/merged through.src/pm/jira/integration.ts— silent-drop bug fix. JIRA's wizard already accepted splitting/planning/todo mappings for months, butresolveLifecycleConfigwas dropping them — so any agent lifecycle hook (hooks.moveOnPrepare: 'planning') targeting those statuses silently no-op'd. Now passes all 8 through.web/src/components/projects/pm-wizard-linear-steps.tsx—LINEAR_STATUS_SLOTSgrows from 4 entries to 8.Not touched
STATUS_TO_AGENTmap.debugstage: declared on the canonical type for future use, but not surfaced on any wizard UI until a debug trigger handler lands.Tests
tests/unit/pm/lifecycle-config-shape.test.ts,linear-integration.test.ts,jira-integration.test.ts,tests/unit/web/linear-field-mapping-step.test.ts).tests/unit/triggers/linear-status-changed.test.tsandjira-status-changed.test.ts— discovered during implementation that status-changed handlers read provider-specific config directly (notresolveLifecycleConfig), so dispatch was never blocked at the handler level. The real silent-drop surfaced in downstreamPMLifecycleManagerand GitHub PR triggers; fixingresolveLifecycleConfigunblocks those.Totals: 7597 unit + 522 integration — all green. Root + web typecheck + lint clean.
Test plan
npm test— 7597 passingTEST_DATABASE_URL=... npm run test:integration— 522 passingnpm run lint— cleannpm run typecheck— cleancd web && npx tsc -b— cleanllmist, confirm 8 status slots render in lifecycle order, map one of the new slots (e.g.planning), save, reload, confirm persistence.splitting/planning/todomapping; confirm the agent now dispatches (was silently dropped before).🤖 Generated with Claude Code