PR Gates / CI image pin matches docker/ci (pull_request) Successful in 11s
PR Gates / Docs update reminder (pull_request) Successful in 16s
PR Gates / decisions lifecycle (pull_request) Successful in 16s
Build ErsatzTV Image / Build & test (.NET) (pull_request) Successful in 17s
Build ErsatzTV Image / EF migration integrity (SQLite + MySql) (pull_request) Successful in 30s
Build ErsatzTV Image / Functional E2E (curl contracts) (pull_request) Successful in 20s
Build ErsatzTV Image / API docs in sync (OpenAPI + endpoint index) (pull_request) Successful in 20s
Build ErsatzTV Image / Formatting (changed .cs conform to .editorconfig) (pull_request) Successful in 20s
Build ErsatzTV Image / Build & push image (amd64) (pull_request) Has been skipped
Session context/config checkup (/doctor) found ~2.5k chars of always-loaded CLAUDE.md text that a session can reconstruct from the codebase, plus a task-specific workflow that only matters when closing an issue. Cut (derivable from the repo): - the `### Project Layout` table (what `ls` shows) - the `dotnet build` / `dotnet run` invocations (standard for the toolchain; the non-obvious `docker build -f docker/Dockerfile` line is kept) - the Language / Media / Functional C# bullets (stated by the csproj and Directory.Packages.props) Migrated to lazy loading: - the 7 mandatory completion steps and the `## Closing record` template move to .claude/skills/closing-an-issue/SKILL.md; only its one-line description stays resident. The `## Done-when` / merge-consent block stays in CLAUDE.md on purpose — it is safety-critical and describes hook behaviour that fires whether or not a skill was loaded. CLAUDE.md 13,306 -> 10,801 chars (~625 est. tokens saved per session). No convention, route, endpoint or decision changes, so no other doc updates are triggered by the docs-update table. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2.4 KiB
2.4 KiB
name, description
| name | description |
|---|---|
| closing-an-issue | The ersatztv task-completion protocol — the mandatory steps and the `## Closing record` comment template for closing a Gitea issue. Use when finishing a task that closes an issue, or when writing a closing comment. The `/done` command runs this automatically. |
Task Completion Protocol
Every task that closes a Gitea issue MUST complete ALL of these before it is considered done.
Use /done <issue> to run through this automatically.
Merge consent is a separate, hook-enforced concern — see the ## Done-when convention in the
root CLAUDE.md, which stays always-loaded.
- Root cause (bug fixes / incidents only): Document WHY the problem existed, not just what was changed. If root cause is unknown, say so explicitly and open a follow-up investigation issue. Fixing symptoms without understanding causes creates recurring problems.
- Comment on issues as you work — what you found, what approach you're taking, any deviations from the suggested fix.
- Push changes:
git pushall commits before closing. Usefixes #Nin commit messages to auto-close where appropriate. - Close comment: Add a structured
## Closing recordcomment on the issue (template below). - Close the issue via API or
fixes #Ncommit. Leave open with a comment only if partially addressed. - Update docs: If the change affects operational behavior, update the relevant Obsidian docs (
~/homelab-docs/), MEMORY.md, or CLAUDE.md inline — not as a follow-up. - Reply to reviewer (if from adversarial review): Summary of done/deferred/questions. This triggers the next review cycle.
## Closing record template
Step 4 — this is both the human-readable summary and the per-issue unit MemPalace mines for
retrieval; see docs/handoffs/chicorytv-issue-queue.md → "Knowledge retrieval" for the retrieval
contract this feeds.
## Closing record
**Outcome:** <what shipped / what didn't; PR link>
**Root cause:** <for bug fixes/incidents — why the problem existed, or "unknown, see follow-up #N">
**Decisions/conventions changed:** <keys added/superseded in docs/decisions.md, or "none">
**Reusable knowledge:** <a fact/gotcha worth surfacing to a future session or MemPalace search>
**Verification:** <tests run, live-E2E, CI status>
**Deferred:** <anything explicitly punted, with a follow-up issue link, or "none">
**Docs updated:** <which docs/*.md files changed in this PR, or "none required and why">