Skip to content

docs(skills): add the epic-closeout skill - #170

Merged
cuioss-oliver merged 2 commits into
mainfrom
docs/epic-closeout-skill
Aug 5, 2026
Merged

docs(skills): add the epic-closeout skill#170
cuioss-oliver merged 2 commits into
mainfrom
docs/epic-closeout-skill

Conversation

@cuioss-oliver

@cuioss-oliver cuioss-oliver commented Aug 5, 2026

Copy link
Copy Markdown
Collaborator

What this is

Promotes the orchestrator epic close-out sequence out of the one epic it was written in and into
a project-level, user-invocable skill at .claude/skills/epic-closeout/SKILL.md, taking a slug.

One file added, nothing else touched. Footprint is .claude/skills/epic-closeout/SKILL.md alone.

Why a skill rather than a document per epic

The source is .plan/local/orchestrator/api-sheriff-roadmap/epic-closeout.md, which lives in the
first epic that will close
. Two live epics (api-sheriff-0-2-0, api-sheriff-0-3-0) would
otherwise depend on a mechanism document inside a closed-and-archived tree, and each would carry its
own copy of the sequence.

The split it preserves

Lives in Example
Mechanism the skill how a lesson is consumed, how a bundle round is delivered
State each epic's ledger which round is next and how many rows it carries; which defects owe verification

Same split as status.json (authority) vs. a generated START-HERE block (rendering). The skill names
no epic, no round number, no defect id and no lesson id.

The rules carried across

  1. Consume means archive, never deletearchive/lessons-consumed/{lesson-id}.md, a fourth
    sibling to bundle-handoffs/, plans-shipped/, plans-struck/; persist-then-remove, so an
    interrupted pass loses at most the lesson in flight and a re-run is a no-op.
  2. A discard is archived too, with its rationale.
  3. Archive the corrected text of a superseded lesson, not the original.
  4. The lessons corpus is global to the repository, not per-epic — hence the convention must be
    identical in every epic.
  5. An assertion of re-homing is not a re-homing — verify it in the target tree, with the
    structural cause (the write boundary) stated so it reads as a mechanism, not sloppiness.
  6. Bundle hand-off rules — the index is the durable dedup base checked before compiling; rows
    flip UNSENT → sent in the same action as the send; round numbering restarts at 1 per
    epic
    , with the epic's name distinguishing carriers.
  7. A cover note about a class beats N disconnected rows.

Plus two things the skill states plainly: it disposes and never calls close, and it is not
runnable by accident
(explicit slug, no plan in flight, operator asked, state document read first).

One correction to the source

epic-closeout.md shows the removal as manage-lessons remove --lesson-id {id}. That invocation is
rejected: --reason and --coverage-verdict are required, and completely_covered additionally
requires --covering-clause and --covering-input. The skill carries the full form.

Gate

Documentation-only, gate not run. Per CLAUDE.md § Pre-Commit Process as it now stands
(ae52984), the exemption is by file class and mixed commits are explicitly not exempt. This commit
adds exactly one file under .claude/** — no *.java, no pom.xml, no src/**, no workflow, no
Dockerfile — so it cannot change build output.

Concurrency with PLAN-48

PLAN-48 owns .claude/skills/release/SKILL.md, .github/workflows/release.yml,
doc/development/release-process.adoc and CLAUDE.md. None of them is touched here — the only
reference to PLAN-48's surface is a See also line pointing at the release skill as a shape
precedent. Disjoint footprints.


Requested follow-up — reduce epic-closeout.md to state only

Outside my write boundary (.plan/local/orchestrator/** is the orchestrator's tree), so this is
reported rather than applied. This is the same boundary that produces rule 5 above; it bites here too.

Target: .plan/local/orchestrator/api-sheriff-roadmap/epic-closeout.md, rewritten to this
epic's state
, opening with a pointer to .claude/skills/epic-closeout/SKILL.md for the how.

Keep (state):

  • Bundle round — round 7 delivered (archive/bundle-handoffs/plan-marshall-bundle-findings-round-7.md);
    round 8 is next, compiled 2026-08-03 and UNSENT. The row count in the document is stale:
    it says 26, and bundle-handoff-index.md now carries 27 (round 8 item N) rows.
    Either restate
    it as 27 or, better, drop the number and say read the count from the index — a second copy of a
    count is a second thing to go stale.
  • Rows 21–26 (now –27) added 2026-08-05 have not been deduped against rounds 1–7; specifically
    21 vs 16, and 24 as a recurrence of the standing --delete-branch clause.
  • Ledger sweep candidates — (30) empty deep-lane component-assessment sink, a two-plan
    recurrence (PLAN-42, PLAN-45); (31) q_gate_validation: once vs plan_without_asking: true;
    (25) empty documentation.skills_by_profile.module_testing; (16) no sanctioned execution path for
    the main-branch deploy-snapshot check; (49) ci pr merge reports merged: true for an enqueue.
  • The named class instance: rows 21, 23, 25 and the [OK] self-review are all a mechanism
    reporting a clean result it never computed
    .
  • Lessons — the corpus stands at 19 active; note 2026-08-05-10-001 was corrected on
    2026-08-05 after its root cause was refuted, so its corrected text is what gets archived.
  • Defects owing re-homing verification(4), (10b), (21), (43), each asserting
    "RE-HOMED … TRACK IT THERE, NOT HERE"; (37) is the discharged precedent (asserted-but-unwritten
    for a day, enacted 2026-08-05).
  • Memory — 21 files; coderabbit-oss-rate-limit-blocks-merge corrected 2026-08-05, its
    "budget re-triggers" advice wrong.
  • The 0.1.0 pre-cut checklist to implant into api-sheriff-0-2-0 (re-run Trivy immediately
    before dispatch; rebuild the scan target from the tree under test; bump
    .github/project.yml current-version; assert GHCR visibility == "public" via gh api; never
    --delete-branch). State, because it is the record of one cut — the skill's step 8 states only
    the rule that such knowledge is harvested into the successor.
  • Sequencing — runs after PLAN-48 lands and is reconciled, before close; item 5 (memory) may
    run at any point.

Drop (now in the skill):

  • § Why this is not a plan — the Ledger Write-Boundary argument, verbatim in the skill.
  • The four-destinations table and the removal is the last step, never the disposition trap.
  • § The consume mechanism — archive, never delete, in full: the archive path, persist-then-remove
    and its rationale, discards-archived-with-rationale, corrected-text-not-original.
  • The bundle-index rules: durable dedup base, check-before-compiling, flip-in-the-same-action, the
    permanent pre-2026-07-29 dedup gap as a rule (the epic keeps the concrete gap as state).
  • The cover note about a class rule (the epic keeps this epic's instance).
  • The assertion of re-homing is not a re-homing rule and its structural cause (the epic keeps the
    four entries owing verification).
  • Items 6 and 7 almost entirely — implanting the mechanism and adding a close-out document to
    each successor, including per-epic round-1 numbering and the corpus-is-global argument.
  • Item 8's framing; only the 0.1.0 checklist content stays.

Net: epic-closeout.md goes from ~179 lines of mixed mechanism and state to roughly a third of that,
all state, headed by one pointer to the skill.

Not done, deliberately

The close-out itself has not been run. Authoring the mechanism was the job; the first execution
is the orchestrator's, after PLAN-48 lands.

🤖 Generated with Claude Code

https://claude.ai/code/session_016zTCGAUEzEbQowHT6yfMjP

Summary by CodeRabbit

  • New Features
    • Added a guided epic closeout workflow for formally dispositioning completed work without closing the epic.
    • Supports bundle handoffs, lesson and knowledge consolidation, defect and watch-item re-homing, successor setup, and completion reporting.
    • Includes validation steps and safety safeguards to help ensure no follow-up items or learnings are lost.

Promotes the orchestrator epic close-out sequence from a document living
inside the first epic that will close into a project-level, user-invocable
skill taking a `slug`.

Two live epics would otherwise depend on a mechanism document inside a
closed-and-archived tree, and each would carry its own copy of the sequence.

Preserves the mechanism/state split: the skill states the rule, the epic's
ledger supplies the instance. Nothing epic-specific is recorded here.

The rules the ad-hoc work paid for, carried across verbatim:

- consume means archive, never delete (`archive/lessons-consumed/{id}.md`),
  persist-then-remove, so an interrupted pass loses at most one lesson
- a discard is archived too, with its rationale
- archive the corrected text of a superseded lesson, not the original
- the lessons corpus is global to the repository, not per-epic
- an assertion of re-homing is not a re-homing — verify it in the target tree
- the bundle index is the durable dedup base; rows flip UNSENT -> sent in the
  same action as the send; round numbering restarts at 1 per epic
- prefer a cover note about a class over N disconnected rows

The skill disposes only — it never calls `close`.

Documentation-only footprint (.claude/** alone), so the pre-commit gate does
not apply per CLAUDE.md.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_016zTCGAUEzEbQowHT6yfMjP

@sourcery-ai sourcery-ai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Sorry @cuioss-oliver, you have reached your weekly rate limit of 500000 diff characters.

Please try again later or upgrade to continue using Sourcery

@cuioss-review-bot

cuioss-review-bot Bot commented Aug 5, 2026

Copy link
Copy Markdown

PR Reviewer Guide 🔍

(Review updated until commit c3d413b)

🧪 No relevant tests
🔒 No security concerns identified
⚡ No major issues detected

@coderabbitai

coderabbitai Bot commented Aug 5, 2026

Copy link
Copy Markdown

Review Change Stack

Warning

Review limit reached

@cuioss-oliver, you've reached your PR review limit, so we couldn't start this review.

Next review available in: 51 minutes

You've used all free OSS reviews for now. Wait for the free limit to reset to keep reviewing this public repository.

How can I continue?

After more reviews become available, a review can be triggered using the @coderabbitai review command as a PR comment. Alternatively, push new commits to this PR.

To avoid repeated limits, reduce automatic review volume by pausing incremental auto-reviews earlier, using label-based review opt-in, excluding WIP or generated PR titles, or requesting reviews manually when the PR is ready. If your team needs uninterrupted high-volume reviews, an organization admin can enable usage-based reviews.

How do review limits work?

CodeRabbit enforces per-developer PR review limits for each organization. Most developers receive the normal plan review availability.

For paid Pro and Pro+ PR reviews, CodeRabbit uses adaptive limits for sustained high-volume activity. When a developer's recent PR review activity reaches the 95th percentile or higher among CodeRabbit users, additional reviews become available more gradually as earlier reviews age out of the rolling window.

Please refer docs for additional details.

Review details
⚙️ Run configuration

Configuration used: Repository: cuioss/coderabbit/.coderabbit.yaml

Review profile: CHILL

Plan: Pro Plus

Run ID: 388221ed-3c4b-445d-af7e-4e68e3fbd3c8

📥 Commits

Reviewing files that changed from the base of the PR and between 04ace3e and c3d413b.

📒 Files selected for processing (1)
  • .claude/skills/epic-closeout/SKILL.md
📝 Walkthrough

Walkthrough

This change adds a new .claude skill named epic-closeout. The skill defines a complete epic disposition workflow, successor hand-off steps, ledger and archive handling, defect redistribution checks, memory consolidation, reporting steps, and operating rules.

Changes

Epic closeout skill

Layer / File(s) Summary
Skill workflow and rules
.claude/skills/epic-closeout/SKILL.md
Adds the full epic-closeout skill definition. The document defines preconditions, epic ledger state handling, final bundle delivery, lessons archive and remove ordering, defect and watch re-homing verification, successor setup, knowledge harvesting, reporting, and safety rules.

Estimated code review effort: 3 (Moderate) | ~20 minutes

🚥 Pre-merge checks | ✅ 2
✅ Passed checks (2 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title clearly and concisely describes the addition of the epic-closeout skill documented in the changeset.

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@cuioss-oliver

Copy link
Copy Markdown
Collaborator Author

@coderabbitai review

@coderabbitai

coderabbitai Bot commented Aug 5, 2026

Copy link
Copy Markdown
✅ Action performed

Review finished.

Note: CodeRabbit is an incremental review system and does not re-review already reviewed commits. This command is applicable only when automatic reviews are paused.

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 4


ℹ️ Review info
⚙️ Run configuration

Configuration used: Repository: cuioss/coderabbit/.coderabbit.yaml

Review profile: CHILL

Plan: Pro Plus

Run ID: ce7f5be1-14cc-48ed-8aa3-74b32e4371d1

📥 Commits

Reviewing files that changed from the base of the PR and between ae52984 and 04ace3e.

📒 Files selected for processing (1)
  • .claude/skills/epic-closeout/SKILL.md

Comment thread .claude/skills/epic-closeout/SKILL.md Outdated
Comment thread .claude/skills/epic-closeout/SKILL.md Outdated
Comment thread .claude/skills/epic-closeout/SKILL.md Outdated
Comment thread .claude/skills/epic-closeout/SKILL.md
…the drain

CodeRabbit review on PR #170.

- The line "Every step operates on that tree" was wrong: steps 3, 5, 6, 7
  and 8 write outside the epic tree. State that, and read the scope from
  the step.
- The write-boundary paragraph omitted step 8 from the ledger-write list;
  it is a successor-ledger write like 6 and 7.
- The close-out state document is now required rather than "if it has one",
  with an explicit bootstrap: compile it from the epic's own artifacts and
  have the operator confirm it before step 1 writes anything. Without it
  every step runs on recollection.
- New precondition: only one close-out at a time. The corpus is global, so
  two concurrent drains can dispose of the same lesson twice; the step 3
  ordering makes a re-run safe, not a concurrent run.
- The same-action flip rule now says plainly that it is not a claim of
  atomicity, and names the dedup pass as what catches an interruption.
- Dropped the cross-skill See-also file path; the shape precedent it made
  is already stated in the body.

Documentation-only footprint (.claude/** alone).

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_016zTCGAUEzEbQowHT6yfMjP
@cuioss-oliver

Copy link
Copy Markdown
Collaborator Author

/review

@cuioss-oliver
cuioss-oliver added this pull request to the merge queue Aug 5, 2026
Merged via the queue into main with commit ed52e19 Aug 5, 2026
33 checks passed
@cuioss-oliver
cuioss-oliver deleted the docs/epic-closeout-skill branch August 5, 2026 17:07
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant