feat(006/3): jira migrated onto PM provider manifest#1127
Merged
zbigniewsobiecki merged 2 commits intodevfrom Apr 16, 2026
Merged
feat(006/3): jira migrated onto PM provider manifest#1127zbigniewsobiecki merged 2 commits intodevfrom
zbigniewsobiecki merged 2 commits intodevfrom
Conversation
Mirror of 006/2 for JIRA.
Backend:
- src/integrations/pm/jira/manifest.ts — wires JiraIntegration,
JiraRouterAdapter, all 3 JIRA trigger handlers, JiraPlatformClient.
verifyWebhookSignature uses the shared makeHmacSha256Verifier factory
from 006/1 — JIRA is the first consumer since Trello's scheme is
bespoke. Header: 'x-hub-signature' with 'sha256=' prefix, hex.
- src/integrations/pm/jira/index.ts — registers via side effect.
- src/integrations/pm/index.ts — appends the jira barrel import.
- src/triggers/builtins.ts — registerJiraTriggers removed; manifest
iteration handles it.
- src/router/worker-env.ts — jira branch of extractProjectIdFromJob
removed (registry handles it via manifest.extractProjectIdFromJob).
Frontend:
- web/src/components/projects/pm-providers/jira/wizard.ts —
jiraProviderWizard composes useJiraDiscovery +
useJiraCustomFieldCreation inside useProviderHooks. Three step adapters
in adapters.tsx destructure providerHooks into the existing JIRA step
component prop shape — implementations unchanged.
- pm-wizard.tsx — removed useJiraDiscovery +
useJiraCustomFieldCreation + handleCreateJiraCostField +
creatingJiraCostField state. The three per-step render branches
collapse: with both Trello and JIRA on manifest, the non-manifest
fallback is now Linear-only.
Credential roles for JIRA: email + api_token (required) +
webhook_secret (optional). Plan had a drift (claimed base_url was a
credential role) — corrected: base_url is an integration-config field,
not a credential.
Tests: 7782/7782 pass. 16 new JIRA manifest tests. Conformance harness
now runs 33 assertions (11 × TestProvider + Trello + JIRA).
Tests that exercise JIRA-typed jobs (worker-env, container-manager) and
the builtins-triggers mock all picked up with JIRA manifest side-effect
imports.
Same deferrals as 006/2 (documented in .done plan):
- bootstrap.ts JIRA block stays until plan 006/5 migrates pmRegistry.get('jira') callers.
- createJiraCustomField tRPC endpoint kept (additive consolidation).
Docs: README migration status note updated. CHANGELOG entry added.
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
Plan 006/3 of spec 006: JIRA joins Trello on the manifest pattern.
No operator-visible changes. JIRA wizard UX, webhook flow, trigger dispatch, and ack-comment behavior are byte-for-byte identical to
dev.What's landed
Backend
src/integrations/pm/jira/manifest.ts— wiresJiraIntegration,JiraRouterAdapter, all 3 JIRA trigger handlers,JiraPlatformClient. First consumer of the sharedmakeHmacSha256Verifierfactory (landed in 006/1). JIRA signs HMAC-SHA256 of the body withsha256=<hex>inX-Hub-Signature— maps cleanly.src/integrations/pm/index.ts— appends the JIRA barrel import.src/triggers/builtins.ts—registerJiraTriggerscall removed; manifest iteration handles JIRA triggers.src/router/worker-env.ts::extractProjectIdFromJob— JIRA branch removed.Frontend
web/src/components/projects/pm-providers/jira/wizard.ts—jiraProviderWizardcomposesuseJiraDiscovery+useJiraCustomFieldCreationinsideuseProviderHooks. Three step adapters bridge the generic renderer shape to the existing JIRA step components — which stay unchanged.web/src/components/projects/pm-wizard.tsx—useJiraDiscovery,useJiraCustomFieldCreation,handleCreateJiraCostField, andcreatingJiraCostFieldstate are gone from the parent wizard. With both Trello (006/2) and JIRA (006/3) on the manifest, the three per-step render branches collapse — the non-manifest fallback is now Linear-only (006/4 migrates it).Plan drift note
Plan 006/3 task 1's test list claimed
credentialRoles includes email + api_token + base_url (required). Corrected at implementation time:base_urlis an integration-config field, not a credential role. The credential roles areemail+api_token(required) +webhook_secret(optional), persrc/config/integrationRoles.ts. Documented in the.doneplan.Tests
base_urlis NOT a credential role, HMAC-SHA256 happy/tamper/missing-header/opt-out, extractProjectIdFromJob, platform client, routerAdapter/pmIntegration wiring, triggerHandlers list)Build (backend + web), typecheck, lint all clean.
Deferred to plan 006/5 (same as 006/2)
src/integrations/bootstrap.ts— multiplepmRegistry.get('jira')call sites still depend on the legacy registration.createJiraCustomFieldtRPC endpoint intopm.discovery.createCustomField— additive, not behavior-changing.Post-merge verification
npm testgreen; lint + typecheck + backend build + web build all clean🤖 Generated with Claude Code