- name
- close
- description
- Use when verified work is ready for QA, acceptance, checkpointing, learning, recommendation, and handoff.
# /close - Close Lane
Close the active entity: capture leftovers, verify acceptance, checkpoint, learn,
recommend, and hand off.
## Entity Reconciliation
After authorized material progress, reconcile touched and causally affected
artifacts before routing, handoff, or final response. Track entity ref,
island/provider locator (a path for file storage), basis/evidence, and the
reason/action due. Update through the verified owning CLI/adapter; use a
write-authorized skill fallback only when that operation is unavailable.
Record updated, no_change(reason), or blocked(reason), preserving unresolved
refs. Reading or mentioning a path alone creates no update obligation.
Read-only work reports pending changes only. Reminders grant no write authority;
task status stays with the bound tracker. Update only artifacts whose content
or evidence changed; do not rewrite every referenced document.
## Work Link
Lifecycle lane: Close
Entity movement: `verified -> closed | monitoring | follow_up | blocked`
Workstream: update active workstream before reporting done
Upstream: `/exec`
Downstream: `/work`; continuity runs in this protocol's `handoff` step; `/ws` owns workstream state
Router: `/work`
HUD: end with `🧬 {ws} ⚡{exec_count} 📥{capture_count} ⏸️{paused_count} ✅{done_count} | 🚦{gate}={score} | ⏭️ {next} | 🔁{loop_state}`
Apply acceptance against the active domain's plan or execution contract; task
DNA and software-specific proof gates apply to the SDLC overlay. Mark genuinely
inapplicable software gates N/A for non-coding work. Checkpoint Git only when
the deliverable is Git-backed and commit/push are within the authorized scope.
## Next Routes
Use the result to select the next owner. Show applicable alternatives in a
numbered `skill://<name>` table only when a decision remains; suggestions never
grant new execution, publishing, or checkpoint authority.
| Result | Next owner |
|---|---|
| Uncaptured intent or leftovers | `skill://capture` |
| Acceptance failed within the existing authorized contract | `skill://exec` using the same domain method |
| Coding contract must change | `skill://propose`; `skill://lev-plan` if the broader plan changes |
| Non-coding scope or plan must change | `skill://lev-plan` or `skill://interview`; proposal optional |
| Accepted or paused, context needs preservation | Protocol step `handoff` (work template); `skill://ws` for workstream state |
| Several completed efforts warrant synthesis | `skill://lev-learn` |
| Another effort or uncertain next owner | `skill://lev` |
## Protocol
```yaml
steps:
- id: capture_gate
action: Run capture in gate mode before closing.
validation: "in_memory_count == 0."
on_failure: "Route to /capture and stop close."
- id: qa_acceptance
action: Check output against the active domain plan or execution contract, acceptance criteria, declared verifier evidence, and applicable proof-gate verdicts.
validation: "Every acceptance item and applicable proof gate is pass, fail, blocked, or explicitly not-tested with residual risk."
on_failure: "Route failed criteria back to /exec."
- id: standards_review
action: Check the change against the coding standards and boundary rules from the Standards and boundaries section of [Project Context](../lev/references/project-context.md).
validation: "Each applicable rule is pass or fail with path:line, or the review says none applies."
on_failure: "Route the broken rule back to /exec."
- id: proof_gate_verdict
action: Seal the proof gates required by the active domain contract before acceptance.
validation: "Applicable SDLC Pentagon, UltraQA, cleanup, and ai-slop-cleaner results or domain-specific equivalents are recorded; inapplicable gates have an N/A rationale, and residual risks are explicit."
on_failure: "Do not accept; route to /exec or /propose depending on whether runtime evidence or proof contract is missing."
- id: accept
action: Decide whether the work is accepted.
validation: "Confidence >= 0.85 for auto-accept, otherwise human approval is recorded."
on_failure: "Do not commit or handoff as closed."
- id: checkpoint
action: For authorized Git-backed checkpoints, stage, commit, pull without rebase, and push when sealing verified work; otherwise record not_applicable or the authority boundary.
validation: "Authorized checkpoint succeeds, is not_applicable, or its blocker/authority boundary is recorded."
on_failure: "Keep entity blocked and do not claim closed."
- id: learn
action: Extract typed learnings with claim, evidence, applies_to, and propagates.
validation: "At least one learning or explicit 'no new learning' is recorded."
on_failure: "Add the learning block before handoff."
- id: recommend
action: Recommend keep, monitor, execute, or reject for related entities.
validation: "Next lifecycle verb is clear."
on_failure: "Route to /work for next-verb selection."
- id: handoff
action: Write the session handoff directly from the existing work template (`../work/templates/handoff.md`) at `.lev/pm/handoffs/{YYYYMMDD}-{workstream}-{component}-{slug}-session-{N}.md`, patching the current session file when it exists and carrying exact IDs, paths, failed checks, source revisions, and unresolved needs verbatim. Update the active workstream YAML (`.lev/pm/workstreams/<ws-id>/state/workstream.yaml`, owned by `skill://ws`) through its verified owning CLI or adapter, or by a layout-preserving file edit when none is verified. A `/handoff` route may run these steps only where it resolves on this host.
validation: "Workstream YAML reflects close result, the handoff exists at its canonical path, and a cold-start recall check passed: recall, artifact, continuation, and decision questions answered from the handoff alone match the original sources and current artifact state."
on_failure: "Do not end without durable state. Patch each missing or mismatched fact into the handoff and rerun the recall check."
```
## Trigger Record
When the workstream has a trigger stream, write:
```yaml
schema: lifecycle_trigger.v1
verb: close
entity_ref: lev://entity/work/workstream/<ws-id> | lev://entity/work/task/<task-id>
outputs:
items: []
learnings: []
gates: []
proof_gates:
pentagon: pass | fail | blocked | not_applicable
ultraqa: pass | fail | blocked | not_applicable
ai_slop_cleaner: pass | fail | blocked | not_applicable
artifacts: []
metrics:
drift: <number>
in_memory_count: 0
cursor:
last_verb: close
next_verb: null
recommend: []
```
## KPI Gate
| KPI | Move on |
|---|---|
| drift_score | `< 0.3` |
| hygiene_pass_rate | `>= 0.95` |
| learning_extracted | `>= 1` or explicit none |
| proof_gate_verdicts | all applicable gates pass or have explicit blocked/follow-up routing |
Max rework: 2. Three consecutive gate failures becomes blocked.
## Red Flags
- "Ready to push when you are."
- "Close can skip capture because the task is done."
- "A passing command means acceptance."
- "Repo-wide audit passed, so feature-local Pentagon proof is done."
- "Temporary QA harness cleanup can be handled later."
- "I'll write handoff later."
- "The handoff reads complete, so a cold start will work."
- "Pull with rebase."
## Related
- `/exec` provides verified work.
- `/capture` clears in-memory leftovers.
- The `handoff` step writes continuity from the work template; `/ws` owns workstream state; a `/handoff` alias applies only where the host resolves it.
- `/work` routes the next entity.
GitHub에서 보기