complete - log the finished work, make the work commit, and merge

SkillDev tools

Complete a finished feature, fix, or rollback by running final gates, archiving its spec, updating plans, creating the work commit, and requesting approval before squash merge. Use for /complete or requests to finish, wrap up, merge, or close the current work item.

Available today. Use it from your connected AI after setup.

Connect ahel once, and every AI you use reads what you have installed.

Then ask your AI: use the complete - log the finished work, make the work commit, and merge skill

What this skill tells your AI

The instructions your AI receives, as published by aiblueprinthq/ai-blueprint in .agents/skills/complete/SKILL.md and read by ahel’s review.

Context reuse: Reuse any required file already loaded in project instructions or the current session. Read it again only if absent, changed, or exact current bytes or line references are needed.

First action: Before project inspection, preflight, or any other tool call, publish running to blueprint/.state/run.json using the dashboard activity contract in AGENTS.md.

Where this sits in the workflow:

/feature, /fix, or /rollback  ->  /implement  ->  [complete]  ->  next
(the spec)                         (build it)      (commit + merge + log)

/implement built the feature, fix, or rollback on its branch, with optional per-step commit checkpoints. This skill closes it out: it logs the work, makes the single work-level commit, and squash-merges. Run it only when the work is done, reviewed, and the documented Verify command, or the fallback build and tests, passes.

Before you start

Read blueprint/config.json. A missing file means the built-in defaults apply. If the file exists but is invalid, stop and point the user to /doctor. Configuration can strengthen or shape the completion gates, but it never grants permission to commit, merge, push, deploy, publish, or take destructive action.

Confirm the work is actually finished: blueprint/context/current-feature.md holds a real spec, its steps are built on a branch, and Verify, or the fallback build and tests, passes. Apply the configured regular quality gates below before logging or committing. Uncommitted step work is expected because per-step checkpoints are optional; this skill commits it. Don't require the steps to be pre-committed.

Read blueprint/context/review.md when present. A missing file on an older install means no independent review has been requested. A pending, changes-requested, malformed, or stale record is always a blocker because the user already initiated that gate, even when its configured policy is manual.

Configured regular quality gates

Use qualityGates.regular for this work item:

  • Audit: manual runs only when the user explicitly requests /audit; when-sensitive runs for authentication, authorization, payments, secrets, personal or user data, migrations, destructive operations, external side effects, security boundaries, or unusually broad changes; always runs for every work item.
  • Independent review: manual runs only when the user explicitly requests /audit independent current; when-sensitive requires it for the same sensitive categories as Audit; always requires it for every work item. An independent review includes a full current audit, so it satisfies a selected Audit gate instead of repeating the audit in the builder session.
  • Check: manual runs only when explicitly requested; when-behavioral runs when a done-when needs observed runtime behavior such as a click, request, CLI command, download, background job, or multi-screen flow; always runs for every work item.
  • Try guide: manual runs only when explicitly requested; when-user-facing generates a guide when the change affects UI, navigation, copy, a public API or CLI, output, or another workflow a person directly uses; always generates one for every work item.

Apply automatic gates in this order: /check, review, then /try. When independent review is selected, run /audit independent current, stop at its handoff, and resume Complete only after a fresh reviewer writes a current passing receipt. Otherwise run /audit current when Audit is selected. Reuse adequate evidence produced during the current work item instead of repeating it. A required gate that cannot run is a blocker. /try only generates instructions for human review; never claim the user performed them. P0 and P1 finding blockers remain enforced regardless of these settings.

Step 0 - final safety pass

Before logging or committing, run a short safety pass and report blockers only:

  • active spec exists and the work is not being completed from main or master
  • the branch name uses the configured feature, fix, or rollback prefix
  • changed files are tied to the active spec, with no unrelated dirty work mixed in (dirty blueprint/context/findings.md and blueprint/context/review.md are expected review evidence)
  • the exact Verify command from AGENTS.md passed in this session, when one is declared; otherwise the build passed, and tests passed when the project has a declared test command and the change touched logic
  • any check required by qualityGates.regular has evidence, and there is a clear manual try path
  • with verification.logicTests: "required", logic changes have a configured runner and passing focused tests; otherwise completion is blocked and /tests is the next setup step
  • with verification.uiEvidence: "required", UI done-whens have direct browser evidence, including screenshots and relevant console and network checks
  • any audit or try guide required by qualityGates.regular ran before completion
  • a selected independent-review gate has a passed receipt whose target equals HEAD, whose base ref still produces the recorded merge base, whose exact spec SHA-256 still matches, whose reviewer adapter and selected model match the request, whose required Check result passed, whose receipt sections are non-empty, and whose target has no later changes except the review and findings files. Apply the same checks to any explicit receipt even when the configured policy is manual. Any mismatch is stale and blocks completion.
  • when a passing independent receipt exists, the active spec is already verified and remains byte-for-byte unchanged through archival
  • if workflow files changed, .agents and .claude stayed in sync where both adapters exist
  • no P0 or P1 finding in blueprint/context/findings.md is open or fixed. fixed still blocks on purpose: the repair exists but no review has looked at it - run /audit to close it. The only waivers are accepted (the user's explicit decision in the current chat, reason recorded; never set it for them) or invalid (an /audit re-examination verdict with recorded evidence, or the user's explicit call). A missing ledger file means no findings.

Do not claim "passed", "verified", or "working" without naming the command, route, screenshot, or output that proves it. Stop before Step 1 if required evidence is missing.

After this safety pass succeeds, set the active spec's **Status:** to verified before archiving it when no independent receipt exists. With a passing independent receipt, it must already be verified; do not rewrite it after review. Rerun the required final checks either way because /complete owns the final safety pass.

Step 1 - log the work

Check whether the spec is a feature, fix, or rollback. A fix is marked Type: Fix and has no build-plan number. A rollback is marked Type: Rollback and records the exact target feature, archive, commit, and parent.

  • Feature - archive blueprint/context/current-feature.md to blueprint/history/features/NN-name.md (NN is the build-plan number), and check it off in blueprint/build-plan.md (and its parent item once all sub-items are checked). Then recompute the overview fingerprint using /overview's checkbox-normalized hash contract and replace only the existing blueprint:source-hash value. Do not regenerate or rewrite the overview body. This keeps completion progress from looking like plan drift and migrates older exact-byte fingerprints.
  • Fix - archive it to blueprint/history/fixes/name.md. A fix isn't a build-plan item, so there's nothing to check off.
  • Rollback - archive it to blueprint/history/rollbacks/YYYY-MM-DD-NN-name.md, preserving the original completed feature archive. Create blueprint/history/rollbacks/ first if an older Blueprint installation does not have it yet. Uncheck the exact target item in blueprint/build-plan.md and its parent when applicable, then append a concise note to the target line with the rollback date and archive path. Keep the feature number stable. If the user later decides the feature is permanently abandoned rather than pending rebuild, that roadmap decision is a separate plan edit.

Archive resolved findings. If blueprint/context/findings.md holds any findings, append a ## Findings section to the archive file just written with every closed, accepted, or invalid entry at its final status (accepted entries keep their recorded reason). Prefix each ID with the archive name for global uniqueness: feature 12's F-03 becomes 12/F-03; fixes and rollbacks use their archive filename as the prefix. An entry carried forward from earlier work archives with the item that resolved it; its Found line preserves where it came from. Only closed, accepted, and invalid entries are resolved for archival. A fixed entry is not resolved at any severity: never append it to the archive or remove it from the live ledger.

Then remove only the archived entries from the ledger. Entries with open, fixed, or unverified status stay in the ledger with their IDs so they are never silently dropped. A fixed P2/P3 finding does not block completion, but it must remain verbatim for a later /audit re-review. When no open, fixed, or unverified entries remain, reset the ledger to exactly this stub, and create it the same way if the file is missing (an older install):

# Findings

> **Generated file.** The findings ledger: review findings raised by `/audit`
> against the work in progress, each with a durable ID, severity (P0-P3), and
> status. `/implement` marks repaired findings `fixed`, a later `/audit` pass
> moves them to `closed`, and `/complete` refuses to merge while any P0 or P1
> finding is `open` or `fixed`, then archives resolved findings with the work
> and resets this file.

_No findings recorded. `/audit` appends findings here when it finds them._

Archive independent review. When a current passed receipt exists, append a ## Independent review section to the archive file with the receipt fields, commands, safe evidence references, findings, and remaining risk from blueprint/context/review.md. Preserve the full target and base SHAs, spec hash, base ref, builder adapter and model, requested reviewer and model, actual reviewer adapter and model, Check result, fresh-session declaration, and review time. Do not archive a stale, pending, changes-requested, or malformed record.

Then reset blueprint/context/review.md to exactly this stub, creating it when an older installation does not have it:

# Independent Review

> **Generated file.** Holds the active independent-review request or latest
> receipt for the current work item. `/audit independent current` prepares a
> handoff against an approved checkpoint, a fresh reviewer session completes it,
> and `/complete` refuses stale, pending, or changes-requested review state.

_No independent review requested. Run `/audit independent current` to prepare one._

Keep every unresolved entry in the ledger. Do not replace it with the empty stub while it still contains any open, fixed, or unverified finding. After archiving resolved findings, replace blueprint/context/current-feature.md with the canonical stub below. Do not paraphrase it or substitute an abbreviated "no work" stub. Before committing, read the file and confirm it exactly matches:

# Current Feature

> **Generated file.** Holds the one feature, fix, or rollback being built right now. Run
> `/feature <number-or-name>` to spec a build-plan feature, or `/fix "<bug>"` for
> an ad-hoc fix. Use `/rollback <completed-feature>` to plan a safe reversal.
> Build one thing at a time; `/complete` archives it under
> `blueprint/history/` and resets this file.

_Nothing in progress. Run `/feature`, `/fix`, or `/rollback` to start._

When no open, fixed, or unverified ledger entries remain, confirm blueprint/context/findings.md exactly matches the canonical Findings stub above. Otherwise, preserve the remaining entries without rewriting them. Confirm blueprint/context/review.md exactly matches the canonical Independent Review stub above.

Don't commit yet; the next step makes one work commit covering the code and these documentation changes. The archive is the build history.

Discard consumed prototypes. If this feature built the look from prototypes/

  • its Design reference pointed there and an early step ported prototypes/theme.css into the app - delete the prototypes/ folder now. The tokens live in the real stylesheet and the HTML mockups were always throwaway; fold the deletion into this feature's commit. Skip this if the feature didn't consume prototypes.

Step 2 - make the work commit

Stage everything on the branch (any uncommitted step work plus the Step 1 logging changes) and make one conventional work commit (for example feat: <feature>, fix: <name>, or revert: roll back <feature>). Verify, or the fallback build and tests, must pass first.

Step 3 - merge

  1. Squash-merge the branch into main, only with the user's explicit go-ahead, so the feature lands as one clean commit regardless of how many checkpoints the branch carried.
  2. Delete the branch after a clean merge.
  3. Stop and ask whether to push local main to its upstream. The merge approval does not count as push approval.
  4. Push main only after a separate explicit yes to push main in the current chat. If the repo has no remote or upstream, say so instead of guessing.

Then point the user at /feature, /fix, or /rollback for the next thing.

Finish with a concise How to try it note for the completed work. For a rollback, explain how to confirm the removed behavior is gone and name one unaffected regression path. If the manual path is more than a couple of steps, tell the user to run /try latest; that command can read the archived feature after current-feature.md is reset.

Rules

  • The work item is the unit of history: one squashed feature, fix, or rollback commit on main, even if the branch carried several checkpoint commits.
  • A rollback preserves the original feature archive and adds a separate rollback archive. Never rewrite history to make the feature look as if it never existed.
  • Don't merge unfinished or failing work. The documented Verify command, or the fallback build and tests, must pass first.
  • Never merge while a P0 or P1 finding is open or fixed in the ledger. The recorded ways past the gate without code are accepted (only by the user's explicit decision, with their reason) or invalid (only from re-examination evidence or the user's explicit call); both travel into the archive, never a silent drop.
  • Never merge with a required or explicitly initiated independent review that is missing, pending, changes-requested, malformed, or stale. The user may explicitly cancel a manual review before completion, but the agent never resets or waives it on the user's behalf.
  • Merging and pushing are the user's calls: get an explicit yes for the merge, then ask whether to push main. Do not treat merge approval, /complete, or "looks good" as permission to push.
  • Push main only after a separate explicit yes to push main in the current chat.
  • One item per completion. If a parent feature still has unchecked sub-features, leave the parent unchecked.

Formatting

Format the output to match the project's conventions in blueprint/context/ai-interaction.md: concise, scannable markdown, with lists for enumerations and tables for matrices rather than dense paragraphs.

Signals

GitHub stars
395
Forks
102
Last commit
Sep 2026
Advanced
Catalog kind
skill
Gateway key
complete
Source
github.com/aiblueprinthq/ai-blueprint