Skip to content

feat(pm): status mapping parity across Linear and JIRA#1114

Merged
zbigniewsobiecki merged 4 commits intodevfrom
zs/003-status-mapping-parity
Apr 15, 2026
Merged

feat(pm): status mapping parity across Linear and JIRA#1114
zbigniewsobiecki merged 4 commits intodevfrom
zs/003-status-mapping-parity

Conversation

@zbigniewsobiecki
Copy link
Copy Markdown
Member

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

  • Linear wizard Field Mapping step now shows 8 status slots in lifecycle order (backlog, splitting, planning, todo, inProgress, inReview, done, merged), up from 4. Map a Linear workflow state to planning and the planning agent dispatches on issue transitions — previously impossible.
  • Existing Linear integrations upgrade in place: the 4 new slots render as "not set" on next wizard visit; no migration, no operator action required to keep existing mappings working.

What changes behind the scenes

  • src/pm/lifecycle.tsProjectPMConfig.statuses widens from 5 to 9 declared optional keys (adds splitting, planning, todo, debug). The canonical type is now the single source of truth for the CASCADE stage vocabulary.
  • src/pm/linear/integration.tsresolveLifecycleConfig passes splitting/planning/todo/merged through.
  • src/pm/jira/integration.tssilent-drop bug fix. JIRA's wizard already accepted splitting/planning/todo mappings for months, but resolveLifecycleConfig was 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.tsxLINEAR_STATUS_SLOTS grows from 4 entries to 8.

Not touched

  • Trello wizard, JIRA wizard UI, Sentry integration, label mappings, STATUS_TO_AGENT map.
  • debug stage: declared on the canonical type for future use, but not surfaced on any wizard UI until a debug trigger handler lands.
  • No DB migration. Config is JSONB and the new keys are additive-optional.

Tests

  • 9 new unit 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).
  • Spec ACs fix: use CI environment for deploy workflow secrets #8/fix: improve PostgreSQL startup reliability and agent documentation #9 (agent dispatch for splitting/planning/todo/merged) are covered by the pre-existing tests/unit/triggers/linear-status-changed.test.ts and jira-status-changed.test.ts — discovered during implementation that status-changed handlers read provider-specific config directly (not resolveLifecycleConfig), so dispatch was never blocked at the handler level. The real silent-drop surfaced in downstream PMLifecycleManager and GitHub PR triggers; fixing resolveLifecycleConfig unblocks those.

Totals: 7597 unit + 522 integration — all green. Root + web typecheck + lint clean.

Test plan

  • npm test — 7597 passing
  • TEST_DATABASE_URL=... npm run test:integration — 522 passing
  • npm run lint — clean
  • npm run typecheck — clean
  • cd web && npx tsc -b — clean
  • On dev after deploy: open the Linear wizard on project llmist, confirm 8 status slots render in lifecycle order, map one of the new slots (e.g. planning), save, reload, confirm persistence.
  • On dev after deploy: move a Linear issue into the newly-mapped state; confirm the expected agent (e.g. planning) starts in the runs dashboard.
  • On dev after deploy: move a JIRA issue into a pre-existing splitting / planning / todo mapping; confirm the agent now dispatches (was silently dropped before).

🤖 Generated with Claude Code

zbigniewsobiecki and others added 4 commits April 15, 2026 21:23
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
Copy link
Copy Markdown

codecov Bot commented Apr 15, 2026

Codecov Report

✅ All modified and coverable lines are covered by tests.

📢 Thoughts on this report? Let us know!

@zbigniewsobiecki zbigniewsobiecki merged commit 710443e into dev Apr 15, 2026
9 checks passed
@zbigniewsobiecki zbigniewsobiecki deleted the zs/003-status-mapping-parity branch April 15, 2026 19:37
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant