From 163483eb507a3c76400cbcbbe36af206360a9235 Mon Sep 17 00:00:00 2001 From: keboss-m <85340750+keboss-m@users.noreply.github.com> Date: Mon, 6 Jul 2026 15:36:43 +0300 Subject: [PATCH] feat: initial OpenSpec skills + /opsx commands for ZCode MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Port of @fission-ai/openspec@1.4.1 workflow templates into ZCode-native skills and slash commands. - 11 skills (skills/openspec-*/SKILL.md): auto-trigger + /skill force-load - 11 commands (commands/opsx/*.md): /opsx:explore, /opsx:propose, /opsx:apply, /opsx:sync, /opsx:archive, /opsx:new, /opsx:continue, /opsx:ff, /opsx:verify, /opsx:bulk-archive, /opsx:onboard - install.sh / install.ps1 (idempotent, copies to ~/.zcode/) - uninstall.sh / uninstall.ps1 - README.md with command table, install/update/uninstall, upstream mapping Skill instruction text is ported verbatim from the upstream get…SkillTemplate().instructions fields, with three ZCode adaptations: 1. /opsx: cross-refs inside skill bodies → /skill openspec- 2. Task tool → Agent tool (one occurrence in openspec-archive-change) 3. Source-version comment header in each SKILL.md --- .gitignore | 15 + README.md | 158 ++++++ commands/opsx/apply.md | 9 + commands/opsx/archive.md | 9 + commands/opsx/bulk-archive.md | 9 + commands/opsx/continue.md | 9 + commands/opsx/explore.md | 9 + commands/opsx/ff.md | 9 + commands/opsx/new.md | 9 + commands/opsx/onboard.md | 9 + commands/opsx/propose.md | 9 + commands/opsx/sync.md | 9 + commands/opsx/verify.md | 9 + install.ps1 | 54 ++ install.sh | 52 ++ skills/openspec-apply-change/SKILL.md | 157 ++++++ skills/openspec-archive-change/SKILL.md | 115 ++++ skills/openspec-bulk-archive-change/SKILL.md | 246 ++++++++ skills/openspec-continue-change/SKILL.md | 117 ++++ skills/openspec-explore/SKILL.md | 285 ++++++++++ skills/openspec-ff-change/SKILL.md | 100 ++++ skills/openspec-new-change/SKILL.md | 72 +++ skills/openspec-onboard/SKILL.md | 554 +++++++++++++++++++ skills/openspec-propose/SKILL.md | 109 ++++ skills/openspec-sync-specs/SKILL.md | 145 +++++ skills/openspec-verify-change/SKILL.md | 169 ++++++ uninstall.ps1 | 33 ++ uninstall.sh | 31 ++ 28 files changed, 2511 insertions(+) create mode 100644 .gitignore create mode 100644 README.md create mode 100644 commands/opsx/apply.md create mode 100644 commands/opsx/archive.md create mode 100644 commands/opsx/bulk-archive.md create mode 100644 commands/opsx/continue.md create mode 100644 commands/opsx/explore.md create mode 100644 commands/opsx/ff.md create mode 100644 commands/opsx/new.md create mode 100644 commands/opsx/onboard.md create mode 100644 commands/opsx/propose.md create mode 100644 commands/opsx/sync.md create mode 100644 commands/opsx/verify.md create mode 100644 install.ps1 create mode 100644 install.sh create mode 100644 skills/openspec-apply-change/SKILL.md create mode 100644 skills/openspec-archive-change/SKILL.md create mode 100644 skills/openspec-bulk-archive-change/SKILL.md create mode 100644 skills/openspec-continue-change/SKILL.md create mode 100644 skills/openspec-explore/SKILL.md create mode 100644 skills/openspec-ff-change/SKILL.md create mode 100644 skills/openspec-new-change/SKILL.md create mode 100644 skills/openspec-onboard/SKILL.md create mode 100644 skills/openspec-propose/SKILL.md create mode 100644 skills/openspec-sync-specs/SKILL.md create mode 100644 skills/openspec-verify-change/SKILL.md create mode 100644 uninstall.ps1 create mode 100644 uninstall.sh diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..04e8af1 --- /dev/null +++ b/.gitignore @@ -0,0 +1,15 @@ +# OS +.DS_Store +Thumbs.db +desktop.ini + +# Editor +*.swp +*.swo +*~ +.idea/ +.vscode/ + +# No build artifacts expected, but ignore just in case +node_modules/ +*.log diff --git a/README.md b/README.md new file mode 100644 index 0000000..090e9b1 --- /dev/null +++ b/README.md @@ -0,0 +1,158 @@ +# openspec-zcode + +[OpenSpec](https://github.com/Fission-AI/openspec) spec-driven development (SDD) skills and `/opsx:*` slash commands for the **ZCode** harness. + +This repo ports the 11 OpenSpec workflow commands (the `/opsx:*` family) into ZCode-native **skills** (auto-triggering instructions) plus matching **slash commands** (so you can type `/opsx:propose` in chat, exactly like in Claude Code or Cursor). + +The skills are thin steering wrappers around the **OpenSpec CLI** (`@fission-ai/openspec`), which remains the engine for artifact-dependency resolution, schema handling, and path resolution. You need the CLI installed and a project initialized with `openspec init`. + +## What you get + +- **11 skills** (`openspec-*`) — full workflow instructions, auto-triggered by intent or force-loaded via `/skill openspec-`. +- **11 slash commands** (`/opsx:*`) — thin wrappers that mount the matching skill and pass `$ARGUMENTS` through. + +| `/opsx` command | Skill | Purpose | +|---|---|---| +| `/opsx:explore` | `openspec-explore` | Thinking partner — investigate, brainstorm, clarify. No implementation. | +| `/opsx:propose` | `openspec-propose` | Create a change + generate all artifacts (proposal/specs/design/tasks) in one step. | +| `/opsx:apply` | `openspec-apply-change` | Work through `tasks.md`, writing code and checking off items. | +| `/opsx:sync` | `openspec-sync-specs` | Merge a change's delta specs into main specs without archiving. | +| `/opsx:archive` | `openspec-archive-change` | Finalize a change: completion check, optional sync, move to archive. | +| `/opsx:new` | `openspec-new-change` | Scaffold a new change folder and show the first artifact template, then stop. | +| `/opsx:continue` | `openspec-continue-change` | Create the next single ready artifact. | +| `/opsx:ff` | `openspec-ff-change` | Fast-forward: create all planning artifacts in dependency order at once. | +| `/opsx:verify` | `openspec-verify-change` | Validate implementation (Completeness/Correctness/Coherence). | +| `/opsx:bulk-archive` | `openspec-bulk-archive-change` | Archive multiple changes at once with cross-change conflict resolution. | +| `/opsx:onboard` | `openspec-onboard` | Guided end-to-end tutorial on a real task in your codebase. | + +## Prerequisites + +1. **Node.js 18+** and npm. +2. **OpenSpec CLI**, installed globally: + ```bash + npm install -g @fission-ai/openspec + openspec --version # should print e.g. 1.4.1 + ``` +3. **A project initialized with OpenSpec** (run once per repo): + ```bash + cd /path/to/your/project + openspec init + ``` + This creates `openspec/config.yaml`, `openspec/specs/`, and `openspec/changes/`. +4. **ZCode** (this harness). + +## Install + +### Linux / macOS / Git Bash on Windows + +```bash +git clone https://gts.meratalk.online/keboss/openspec-zcode.git +cd openspec-zcode +./install.sh +``` + +### Native Windows (PowerShell) + +```powershell +git clone https://gts.meratalk.online/keboss/openspec-zcode.git +cd openspec-zcode +.\install.ps1 +``` + +Both scripts copy: +- `skills/openspec-*` → `~/.zcode/skills/openspec-*/` +- `commands/opsx/*.md` → `~/.zcode/commands/opsx/*.md` + +Override the target directory with `ZCODE_HOME`: + +```bash +ZCODE_HOME=/custom/path ./install.sh +# PowerShell: $env:ZCODE_HOME = "C:\custom\path"; .\install.ps1 +``` + +**Restart ZCode** (or start a new session) after installing so it re-scans the skills and commands directories. + +## Update + +```bash +cd openspec-zcode +git pull +./install.sh # or .\install.ps1 +``` + +The install scripts are idempotent — re-running overwrites existing copies cleanly. + +## Uninstall + +```bash +./uninstall.sh # or .\uninstall.ps1 +``` + +Removes `~/.zcode/skills/openspec-*/` and `~/.zcode/commands/opsx/*.md`. Leaves the rest of your ZCode config untouched. + +## Usage + +Open ZCode in any project with `openspec/` initialized. Two ways to invoke: + +**Slash commands** (explicit, like the upstream OpenSpec UX): +``` +/opsx:propose add-realtime-presence +/opsx:apply add-realtime-presence +/opsx:archive add-realtime-presence +``` + +**Skills** (auto-trigger by intent, or force-load): +``` +/skill openspec-propose +"Let's think through the auth redesign" → auto-triggers openspec-explore +``` + +## Layout + +``` +openspec-zcode/ +├── skills/ +│ └── openspec-{explore,propose,apply-change,sync-specs,archive-change, +│ new-change,continue-change,ff-change,verify-change, +│ bulk-archive-change,onboard}/SKILL.md +├── commands/opsx/ +│ └── {explore,propose,apply,sync,archive,new,continue,ff,verify, +│ bulk-archive,onboard}.md +├── install.sh / install.ps1 +├── uninstall.sh / uninstall.ps1 +├── .gitignore +└── README.md +``` + +## How it maps to upstream OpenSpec + +Upstream OpenSpec (`@fission-ai/openspec`) ships per-AI-tool installers that generate two artifacts per command: a skill file and a command file. The table of supported tools (Claude Code, Cursor, Codex, Windsurf, …) lives in the upstream `docs/supported-tools.md`. This repo adds the **ZCode** entry to that matrix: + +| Artifact | ZCode path | +|---|---| +| Skills | `~/.zcode/skills/openspec-/SKILL.md` | +| Commands | `~/.zcode/commands/opsx/.md` → `/opsx:` | + +The skill bodies are ported verbatim from `@fission-ai/openspec@1.4.1` (`dist/core/templates/workflows/*.js`, the `instructions` field of each `get…SkillTemplate()`), with three minimal adaptations for the ZCode harness: + +1. Cross-references inside skill bodies: `/opsx:` → `/skill openspec-` (the slash commands themselves keep `/opsx:*`). +2. `Task tool (subagent_type: "general-purpose")` → `Agent tool (subagent_type: "general-purpose")` (one occurrence, in `openspec-archive-change`). +3. A source-comment header in each `SKILL.md` recording the upstream version for future re-syncs. + +Everything else — all `openspec … --json` CLI calls, all `AskUserQuestion tool` / `TodoWrite tool` references (both exist natively in ZCode), all artifact dependency logic — is unchanged, because the OpenSpec CLI remains the engine. + +## Re-syncing after an OpenSpec upgrade + +When `@fission-ai/openspec` releases a new version and you want the latest skill instructions: + +1. `npm install -g @fission-ai/openspec@latest` +2. Re-extract the `instructions` field of each `get…SkillTemplate()` from the new `dist/core/templates/workflows/*.js`. +3. Re-apply the three adaptations above. +4. Bump the version comment in each `SKILL.md` header. +5. `./install.sh` to redeploy. + +The skill names and command names are stable across versions; only the instruction text changes. + +## License + +The skill instruction text is ported from `@fission-ai/openspec` (MIT licensed). Everything else in this repo is provided under MIT as well. diff --git a/commands/opsx/apply.md b/commands/opsx/apply.md new file mode 100644 index 0000000..7753393 --- /dev/null +++ b/commands/opsx/apply.md @@ -0,0 +1,9 @@ +--- +description: OpenSpec apply — implement tasks from a change, working through tasks.md until done or blocked. +argument-hint: "[change name; inferred if omitted or if only one active change exists]" +skills: openspec-apply-change +--- + +Use the `openspec-apply-change` skill for this request: + +$ARGUMENTS diff --git a/commands/opsx/archive.md b/commands/opsx/archive.md new file mode 100644 index 0000000..1aab43e --- /dev/null +++ b/commands/opsx/archive.md @@ -0,0 +1,9 @@ +--- +description: OpenSpec archive — finalize a completed change and move it to the archive folder. +argument-hint: "[change name]" +skills: openspec-archive-change +--- + +Use the `openspec-archive-change` skill for this request: + +$ARGUMENTS diff --git a/commands/opsx/bulk-archive.md b/commands/opsx/bulk-archive.md new file mode 100644 index 0000000..131950b --- /dev/null +++ b/commands/opsx/bulk-archive.md @@ -0,0 +1,9 @@ +--- +description: OpenSpec bulk-archive — archive multiple completed changes at once, resolving cross-change spec conflicts. +argument-hint: "[optional: subset of change names; prompts for selection if omitted]" +skills: openspec-bulk-archive-change +--- + +Use the `openspec-bulk-archive-change` skill for this request: + +$ARGUMENTS diff --git a/commands/opsx/continue.md b/commands/opsx/continue.md new file mode 100644 index 0000000..6152c96 --- /dev/null +++ b/commands/opsx/continue.md @@ -0,0 +1,9 @@ +--- +description: OpenSpec continue — create the next ready artifact for an existing change. +argument-hint: "[change name]" +skills: openspec-continue-change +--- + +Use the `openspec-continue-change` skill for this request: + +$ARGUMENTS diff --git a/commands/opsx/explore.md b/commands/opsx/explore.md new file mode 100644 index 0000000..8b209e1 --- /dev/null +++ b/commands/opsx/explore.md @@ -0,0 +1,9 @@ +--- +description: OpenSpec explore mode — a thinking partner for ideas, problems, and requirements (no implementation). +argument-hint: "[topic, question, or change name to investigate]" +skills: openspec-explore +--- + +Use the `openspec-explore` skill for this request: + +$ARGUMENTS diff --git a/commands/opsx/ff.md b/commands/opsx/ff.md new file mode 100644 index 0000000..2b3abaa --- /dev/null +++ b/commands/opsx/ff.md @@ -0,0 +1,9 @@ +--- +description: OpenSpec ff — fast-forward: create all planning artifacts in dependency order at once. +argument-hint: "[change name or description]" +skills: openspec-ff-change +--- + +Use the `openspec-ff-change` skill for this request: + +$ARGUMENTS diff --git a/commands/opsx/new.md b/commands/opsx/new.md new file mode 100644 index 0000000..c46cff9 --- /dev/null +++ b/commands/opsx/new.md @@ -0,0 +1,9 @@ +--- +description: OpenSpec new — scaffold a new change folder and show the first artifact template, then stop. +argument-hint: "[change name or description]" +skills: openspec-new-change +--- + +Use the `openspec-new-change` skill for this request: + +$ARGUMENTS diff --git a/commands/opsx/onboard.md b/commands/opsx/onboard.md new file mode 100644 index 0000000..b7f2bda --- /dev/null +++ b/commands/opsx/onboard.md @@ -0,0 +1,9 @@ +--- +description: OpenSpec onboard — guided end-to-end tutorial running a real change on your codebase. +argument-hint: "[optional: a small task you'd like to use for the tutorial]" +skills: openspec-onboard +--- + +Use the `openspec-onboard` skill for this request: + +$ARGUMENTS diff --git a/commands/opsx/propose.md b/commands/opsx/propose.md new file mode 100644 index 0000000..3ae7265 --- /dev/null +++ b/commands/opsx/propose.md @@ -0,0 +1,9 @@ +--- +description: OpenSpec propose — create a new change and generate all artifacts (proposal, specs, design, tasks) in one step. +argument-hint: "[change name or description of what to build]" +skills: openspec-propose +--- + +Use the `openspec-propose` skill for this request: + +$ARGUMENTS diff --git a/commands/opsx/sync.md b/commands/opsx/sync.md new file mode 100644 index 0000000..e9def37 --- /dev/null +++ b/commands/opsx/sync.md @@ -0,0 +1,9 @@ +--- +description: OpenSpec sync — merge a change's delta specs into main specs without archiving. +argument-hint: "[change name]" +skills: openspec-sync-specs +--- + +Use the `openspec-sync-specs` skill for this request: + +$ARGUMENTS diff --git a/commands/opsx/verify.md b/commands/opsx/verify.md new file mode 100644 index 0000000..4c7c3b9 --- /dev/null +++ b/commands/opsx/verify.md @@ -0,0 +1,9 @@ +--- +description: OpenSpec verify — validate implementation against artifacts (Completeness/Correctness/Coherence). +argument-hint: "[change name]" +skills: openspec-verify-change +--- + +Use the `openspec-verify-change` skill for this request: + +$ARGUMENTS diff --git a/install.ps1 b/install.ps1 new file mode 100644 index 0000000..9357ee3 --- /dev/null +++ b/install.ps1 @@ -0,0 +1,54 @@ +# install.ps1 — install OpenSpec skills + /opsx commands into ZCode user directory. +# Native Windows PowerShell. Idempotent: safe to re-run. +[CmdletBinding()] +param( + [string]$ZCodeHome = (Join-Path $env:USERPROFILE ".zcode") +) + +$ErrorActionPreference = "Stop" + +# Resolve repo root (directory of this script). +$Src = $PSScriptRoot +if (-not $Src) { $Src = Split-Path -Parent $MyInvocation.MyCommand.Path } + +$SkillsSrc = Join-Path $Src "skills" +$CommandsSrc = Join-Path $Src "commands\opsx" +$SkillsDest = Join-Path $ZCodeHome "skills" +$CommandsDest = Join-Path $ZCodeHome "commands\opsx" + +# Sanity checks. +if (-not (Test-Path -LiteralPath $SkillsSrc)) { + Write-Error "Source skills directory not found at: $SkillsSrc" + exit 1 +} +if (-not (Test-Path -LiteralPath $CommandsSrc)) { + Write-Error "Source commands directory not found at: $CommandsSrc" + exit 1 +} + +# Create destination dirs. +New-Item -ItemType Directory -Force -Path $SkillsDest | Out-Null +New-Item -ItemType Directory -Force -Path $CommandsDest | Out-Null + +# Copy each openspec-* skill directory, replacing if it already exists. +$skillCount = 0 +Get-ChildItem -LiteralPath $SkillsSrc -Directory -Filter "openspec-*" | ForEach-Object { + $name = $_.Name + $target = Join-Path $SkillsDest $name + if (Test-Path -LiteralPath $target) { Remove-Item -LiteralPath $target -Recurse -Force } + Copy-Item -LiteralPath $_.FullName -Destination $target -Recurse -Force + $skillCount++ +} + +# Copy each /opsx command file. +$cmdCount = 0 +Get-ChildItem -LiteralPath $CommandsSrc -Filter "*.md" -File | ForEach-Object { + Copy-Item -LiteralPath $_.FullName -Destination $CommandsDest -Force + $cmdCount++ +} + +Write-Host "✓ Installed $skillCount skills + $cmdCount commands to $ZCodeHome" +Write-Host " Skills: $SkillsDest\openspec-*\SKILL.md" +Write-Host " Commands: $CommandsDest\*.md → /opsx:" +Write-Host "" +Write-Host "Restart ZCode (or start a new session) to pick up the new skills and commands." diff --git a/install.sh b/install.sh new file mode 100644 index 0000000..537819d --- /dev/null +++ b/install.sh @@ -0,0 +1,52 @@ +#!/usr/bin/env bash +# install.sh — install OpenSpec skills + /opsx commands into ZCode user directory. +# Works on Linux, macOS, and Git Bash on Windows. Idempotent: safe to re-run. +set -euo pipefail + +# Resolve repo root (directory of this script). +SRC="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" + +# Target ZCode home (override with ZCODE_HOME if needed). +DEST="${ZCODE_HOME:-$HOME/.zcode}" + +SKILLS_SRC="$SRC/skills" +COMMANDS_SRC="$SRC/commands/opsx" +SKILLS_DEST="$DEST/skills" +COMMANDS_DEST="$DEST/commands/opsx" + +# Sanity checks. +if [ ! -d "$SKILLS_SRC" ]; then + echo "✗ Source skills directory not found at: $SKILLS_SRC" >&2 + exit 1 +fi +if [ ! -d "$COMMANDS_SRC" ]; then + echo "✗ Source commands directory not found at: $COMMANDS_SRC" >&2 + exit 1 +fi + +# Create destination dirs. +mkdir -p "$SKILLS_DEST" "$COMMANDS_DEST" + +# Copy each openspec-* skill directory, replacing if it already exists. +skill_count=0 +for skill_dir in "$SKILLS_SRC"/openspec-*; do + [ -d "$skill_dir" ] || continue + name="$(basename "$skill_dir")" + rm -rf "$SKILLS_DEST/$name" + cp -r "$skill_dir" "$SKILLS_DEST/$name" + skill_count=$((skill_count + 1)) +done + +# Copy each /opsx command file. +cmd_count=0 +for cmd_file in "$COMMANDS_SRC"/*.md; do + [ -f "$cmd_file" ] || continue + cp -f "$cmd_file" "$COMMANDS_DEST/" + cmd_count=$((cmd_count + 1)) +done + +echo "✓ Installed $skill_count skills + $cmd_count commands to $DEST" +echo " Skills: $SKILLS_DEST/openspec-*/SKILL.md" +echo " Commands: $COMMANDS_DEST/*.md → /opsx:" +echo "" +echo "Restart ZCode (or start a new session) to pick up the new skills and commands." diff --git a/skills/openspec-apply-change/SKILL.md b/skills/openspec-apply-change/SKILL.md new file mode 100644 index 0000000..116052b --- /dev/null +++ b/skills/openspec-apply-change/SKILL.md @@ -0,0 +1,157 @@ +--- +name: openspec-apply-change +description: Implement tasks from an OpenSpec change. Use when the user wants to start implementing, continue implementation, or work through tasks of an existing OpenSpec change, code up the tasks from tasks.md, realize a proposed change, or resume implementation work. +--- + + + +Implement tasks from an OpenSpec change. + +**Input**: Optionally specify a change name. If omitted, check if it can be inferred from conversation context. If vague or ambiguous you MUST prompt for available changes. + +**Steps** + +1. **Select the change** + + If a name is provided, use it. Otherwise: + - Infer from conversation context if the user mentioned a change + - Auto-select if only one active change exists + - If ambiguous, run `openspec list --json` to get available changes and use the **AskUserQuestion tool** to let the user select + + Always announce: "Using change: " and how to override (e.g., `/skill openspec-apply-change `). + +2. **Check status to understand the schema** + ```bash + openspec status --change "" --json + ``` + Parse the JSON to understand: + - `schemaName`: The workflow being used (e.g., "spec-driven") + - `planningHome`, `changeRoot`, and `actionContext`: planning scope and edit constraints + - Which artifact contains the tasks (typically "tasks" for spec-driven, check status for others) + +3. **Get apply instructions** + + ```bash + openspec instructions apply --change "" --json + ``` + + This returns: + - `contextFiles`: artifact ID -> array of concrete file paths (varies by schema - could be proposal/specs/design/tasks or spec/tests/implementation/docs) + - Progress (total, complete, remaining) + - Task list with status + - Dynamic instruction based on current state + + **Handle states:** + - If `state: "blocked"` (missing artifacts): show message, suggest using openspec-continue-change + - If `state: "all_done"`: congratulate, suggest archive + - Otherwise: proceed to implementation + + **Workspace guard:** If status JSON reports `actionContext.mode: "workspace-planning"` and `allowedEditRoots` is empty, explain that full workspace apply is not supported in this slice. Treat linked repos and folders as read-only context, ask the user to select an affected area through an explicit implementation workflow, and STOP before editing files. + +4. **Read context files** + + Read every file path listed under `contextFiles` from the apply instructions output. + The files depend on the schema being used: + - **spec-driven**: proposal, specs, design, tasks + - Other schemas: follow the contextFiles from CLI output + +5. **Show current progress** + + Display: + - Schema being used + - Progress: "N/M tasks complete" + - Remaining tasks overview + - Dynamic instruction from CLI + +6. **Implement tasks (loop until done or blocked)** + + For each pending task: + - Show which task is being worked on + - Make the code changes required + - Keep changes minimal and focused + - Mark task complete in the tasks file: `- [ ]` → `- [x]` + - Continue to next task + + **Pause if:** + - Task is unclear → ask for clarification + - Implementation reveals a design issue → suggest updating artifacts + - Error or blocker encountered → report and wait for guidance + - User interrupts + +7. **On completion or pause, show status** + + Display: + - Tasks completed this session + - Overall progress: "N/M tasks complete" + - If all done: suggest archive + - If paused: explain why and wait for guidance + +**Output During Implementation** + +``` +## Implementing: (schema: ) + +Working on task 3/7: +[...implementation happening...] +✓ Task complete + +Working on task 4/7: +[...implementation happening...] +✓ Task complete +``` + +**Output On Completion** + +``` +## Implementation Complete + +**Change:** +**Schema:** +**Progress:** 7/7 tasks complete ✓ + +### Completed This Session +- [x] Task 1 +- [x] Task 2 +... + +All tasks complete! Ready to archive this change. +``` + +**Output On Pause (Issue Encountered)** + +``` +## Implementation Paused + +**Change:** +**Schema:** +**Progress:** 4/7 tasks complete + +### Issue Encountered + + +**Options:** +1.