Delivery Discipline
Shared skill — single source of truth for optional post-verify code delivery: need-delivery gate → commit/push → open or update PR/MR. Hosts declare it in
dependenciesand abort if missing — no silent fallback.Layering:
git-commit(commit/push) → this skill (delivery orchestration) →feature-branch-closeout(menu) →merge-discipline(merge gates). Do not fold merge or release shipping into this skill.
Prerequisite skill check
On load, verify git-commit is available; if missing, abort with install hint (npx skills add FuDesign2008/open-skills -g --skill git-commit --yes). No silent degrade.
Placeholder contracts
| Placeholder | Meaning | Who supplies |
|---|---|---|
{pr-body-extra} |
Host-specific PR/MR body sections (Jira link, OpenSpec path, scenario tables, etc.) | Referencing host, at the call site |
{commit-context} |
Optional commit fields (type, scope, subject, jira_id) |
Host or inferred from branch/diff |
When this applies
After verification is green (or pendings are explicitly listed) — and after OpenSpec archive when the host requires archive before delivery — when the run may need commits and/or a PR/MR.
Not this skill: merge into a protected branch; release-tag / release→main flows; commit-only with no PR intent (call git-commit directly).
1. Need-delivery gate
Skip the rest of this skill (no commit, no PR) when any of the following holds:
| Signal | Meaning |
|---|---|
| Clean delivery surface | No uncommitted changes and no commits ahead of the intended PR base (or no feature branch work to publish) |
| User declined | User said this run should not deliver / no PR / analysis-only |
| Host marked non-delivery | Host path is analysis-only or equivalent with no code (or artifact) changes to publish |
When skipping: state the reason in one line and return to the host (typically feature-branch-closeout or retrospective). Do not open an empty PR.
When delivery is needed (dirty tree, ahead commits, or user/host requested PR): continue.
2. Commit / push
- If there are uncommitted changes: load
git-commitwithexecute=true(unless the user asked for manual commit commands only). Pass{commit-context}when the host has Jira IDs or a fixed message format. - If the tree is clean but the branch is ahead of the remote: push as part of
git-commit's auto flow, or push explicitly if commit was skipped. - If already committed and already pushed: continue to §3 without re-committing.
Idempotency: never create an empty commit; never re-commit the same tip “for ceremony.”
3. Open or update PR/MR
- Detect the remote host (
gh/glab/ equivalent — agent picks native CLI). - If an open PR/MR already exists for this head branch: update title/body when the host supplies new
{pr-body-extra}; ensure the branch is pushed. - If none exists: create one against the default / protected base branch.
- Minimum body (always): summary of intent, changed-file overview, verification status (Executed / Pending per
completion-evidence-disciplinehonesty when the host has verification notes). - Append
{pr-body-extra}exactly as the host provided (do not drop Jira/OpenSpec fields).
Stop after presenting the PR/MR URL. Do not merge.
4. Return to host
Hand back: branch name, tip SHA, PR/MR URL (or “skipped — <reason>”). Hosts then load feature-branch-closeout for merge / keep / continue (and PR-only if delivery was skipped earlier and the user later chooses open PR — closeout option 1 re-enters this skill).
Host integration
- solve-workflow / opsx-solve-workflow: after verify (and archive for opsx), load this skill, then
feature-branch-closeout, then retrospective. - jira-fix-workflow stage 9 / opsx-jira-fix-workflow post-archive delivery: thin-reference this skill; pass Jira/OpenSpec fields via
{pr-body-extra}and{commit-context}. - feature-branch-closeout option “Open / update PR”: load this skill (idempotent).
- Prefer not copying commit-message or PR-body prose into hosts beyond the field map.
Forbidden
- Merging the PR/MR from this skill
- Embedding
merge-disciplineParts A–D - Requiring a PR on every host run (gate in §1 is mandatory)
- Silent no-op when the user explicitly asked to open a PR and the tree has deliverables