You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
The current PR creation flow is fragmented. summarize-change generates a change summary, prepare-pr adds a prefix, and create-pr calls gh pr create — but they don't compose cleanly. There is no way to pass scope/type context through the flow, which blocks features like label application. prepare-pr exists as an intermediary that doesn't match a user-desired action.
Context
summarize-change generates change-summary.md with title, body, and metadata — it's standalone and reusable
create-pr reads the change summary and calls gh pr create, but doesn't resolve scope, type, or labels
prepare-pr bridges summarize-change and create-pr by adding a title prefix — but it doesn't match a user action and is a candidate for absorption
create-ticket already demonstrates the full pattern: resolves scope/type via describe-change.sh, applies labels from .meta/label-map.json
The change summary currently has no structured frontmatter — title and metadata must be parsed from markdown
Solution
Single entry point with platform-specific delegates
Restructure into three skills following the strategy pattern:
create-pr (user-invocable) — the orchestrator. Handles the complete flow:
Accept optional scope/type arguments
Get session context
Call summarize-change to produce the change summary
Read structured frontmatter from the change summary to extract title, scope, type
Call describe-change.sh to resolve PR title prefix; apply to title only if non-empty
Resolve labels from .meta/label-map.json (if it exists), following the create-ticket pattern
Detect platform and delegate to the appropriate internal skill, passing: final title, body, labels, platform context
Problem
The current PR creation flow is fragmented.
summarize-changegenerates a change summary,prepare-pradds a prefix, andcreate-prcallsgh pr create— but they don't compose cleanly. There is no way to pass scope/type context through the flow, which blocks features like label application.prepare-prexists as an intermediary that doesn't match a user-desired action.Context
summarize-changegenerateschange-summary.mdwith title, body, and metadata — it's standalone and reusablecreate-prreads the change summary and callsgh pr create, but doesn't resolve scope, type, or labelsprepare-prbridgessummarize-changeandcreate-prby adding a title prefix — but it doesn't match a user action and is a candidate for absorptioncreate-ticketalready demonstrates the full pattern: resolves scope/type viadescribe-change.sh, applies labels from.meta/label-map.jsonSolution
Single entry point with platform-specific delegates
Restructure into three skills following the strategy pattern:
create-pr(user-invocable) — the orchestrator. Handles the complete flow:summarize-changeto produce the change summarydescribe-change.shto resolve PR title prefix; apply to title only if non-empty.meta/label-map.json(if it exists), following thecreate-ticketpatterncreate-gh-pr(internal,user-invocable: false) — GitHub delegate. Receives fully prepared data:gh pr create --draftwith--labelflags for resolved labelscreate-bitbucket-pr(internal,user-invocable: false) — Bitbucket delegate. Receives fully prepared data:Change to
summarize-changeAdd YAML frontmatter to the change summary artifact so downstream consumers can read structured fields without parsing markdown:
Cleanup
prepare-pr— its responsibilities (prefix resolution, artifact saving) are absorbed by the orchestrator and delegatescreate-pr— from a simple GitHub-only script reader to the platform-aware orchestratorAcceptance criteria
summarize-changeemits structured YAML frontmatter (title, ticket_id, commit, scope, type)create-prorchestrates the full flow: callssummarize-change, reads frontmatter, resolves prefix and labels, detects platform, delegatescreate-gh-pr(internal) receives prepared data and creates GitHub PRs with label supportcreate-bitbucket-pr(internal) receives prepared data and creates Bitbucket PRs with label supportprepare-pris retired