Skip to content
Back to skills

In Finish

ASecurity

Session finish (fold): update ST docs, wip.md, restart.md, commit cleanly. localfold = per-workstream before a compact; globalfold = project-wide before EOD

  • 26 stars
  • 0 votes
  • 0 copies
  • 3 views
  • Added May 27, 2026
documentationgonodedocumentation

Security analysis

A100/100

Scanned October 1, 2026

npx -y skills add matthewsinclair/intent --skill in-finish --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of In Finish?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for In Finish
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/matthewsinclair-in-finish/badge)](https://www.skillsdirectory.com/skills/matthewsinclair-in-finish)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
---
description: "Session finish (fold): update ST docs, wip.md, restart.md, commit cleanly. localfold = per-workstream before a compact; globalfold = project-wide before EOD"
chains_to: ["in-whiteboard", "in-verify"]
---

# Session Finish

End-of-session wrap-up. Ensure all state is captured so the next session can pick up cleanly.

## Fold scopes: localfold and globalfold

"Fold" is shorthand for this wrap-up (compact, tidy, snapshot). Two scopes, coined in the Lamplight project:

- **localfold** -- per-workstream tidy before a **compact** or context reset. Fold only THIS workstream's own Intent docs and whiteboard node: its ST/WP docs, its in-progress state, and (in a whiteboard project) its own-node `archive`. Scope is just you; you do not touch project-wide docs or other nodes. **IT DOES NOT `release`.** A compact is not the end of a session, so the node's `status` stays `active` -- `/in-whiteboard` invariant 6 says so and its red-flag table names setting `paused` here as the error. This line read `archive` + `release` until 2026-08-31, contradicting that invariant, and step 1 below contradicted it a second time; both are corrected. Release belongs to a session that is actually ending.
- **globalfold** -- project-wide tidy before **end of day**, when all workstreams close out. Fold the shared project tracking docs (`intent/wip.md`, `intent/restart.md`, `done.md`) into a coherent snapshot. In a multi-node setup this is typically the coordinating / validation workstream's job, not every node's.

When the human says "localfold", run the wrap below scoped to your own workstream; when they say "globalfold", run the project-wide version across the shared docs. A solo project has one workstream, so local and global coincide.

## Procedure

### 1. Release the whiteboard

If `intent/whiteboard/` exists in the project root **and this session is actually ending**, invoke `/in-whiteboard release`. This sets your node's board `status: paused` and refreshes its heartbeat before any doc updates are committed. **If you are folding before a `/compact` or a context reset, DO NOT release** -- run `/in-whiteboard touch` instead and leave `status: active`. The discriminator is whether the SESSION ends, never whether a fold happened. Before releasing, consider whether any entries in your node's `## Decisions` should be migrated into `wip.md` / `done.md` for permanent record -- the whiteboard is the live channel, `wip.md` / `done.md` are the snapshots. If the directory doesn't exist, skip silently.

### 2. Update steel thread docs

For each ST/WP worked on this session:

- Write the thread's objective and context through `intent set <ID> objective|context --from <file>` (or `intent st edit <ID>`)
- Update the attached companion documents the thread carries (`design.md`, `impl.md`, `tasks.md`) with as-built status; `intent st edit <ID> <name> --path` names each and refuses one the thread does not carry, and `intent st attach <ID> <name>.md --from <file>` adds one
- Closing a thread or WP? `intent st done` / `intent wp done` refuse while its `acceptance.md` contract is BLOCKED (the close-gate). Cover or satisfy the remaining ACs first; the ST-level sign-off AC is the verifier's. See `working-with-llms.md` (D11).
- **An AC you are not going to do has two honest exits, and neither is satisfying it.** If it moved to another thread, `intent ac descope <id> <AC> --to <ID>`; if it was dropped, `intent ac withdraw <id> <AC> --reason "..."`. Both are non-blocking and both stay on the record. Reach for them instead of the two alternatives that lose the truth: marking work done that was not, or deleting the line. `intent ac rescope` / `reinstate` undo them.
- **BLOCKED on an AT contract finding, not an unsatisfied AC?** The gate lints the AT rows too -- a row that fails the grammar, or a `green` AT citing a file that does not exist, is coverage that cannot be resolved. `intent at lint <id>` names each one; fix each row it names by hand with `intent at edit <id> <AT-id>`.
- `st done` / `wp done` close a unit whose `## Objective` is still `_(not yet written)_`, and warn when they do. A unit that closed with that warning closed without anyone having said what it was for -- write the sentence with `intent set <ID> objective --from <file>`, ideally before closing.

### 3. Update work-in-progress

Update `intent/wip.md` with:

- Current state of in-progress work
- What's next

**`wip.md` IS DOING AND TODO ONLY. DONE WORK IS ILLEGAL IN IT, AND THIS LIST USED TO ORDER THE OPPOSITE.** Its first bullet read _What was accomplished this session_ until 2026-09-08 -- so the skill every node runs at wrap-up instructed the precise thing the file's own name forbids, and a human then corrected it by hand, repeatedly, across projects. **A repeated correction is a document defect, not a discipline failure**: nodes were following the instruction they were given.

Finished work already has homes that outlive the session and cannot rot -- the commit, the closed issue, the satisfied AC, `done.md`. **Restating it in `wip.md` gives one fact a second home whose only distinguishing property is that nobody updates it**, which is the divergence this section's own history is about.

The test before you write a line here: **would this line still be true if the work were abandoned tomorrow?** DOING and TODO survive that question. _What was accomplished_ does not -- it is a claim about the past, and `wip.md` is not a log.

### 4. Update restart context

Update `intent/restart.md` with:

- Key context the next session needs
- Any decisions made or deferred
- Pointers to relevant files and STs

`.claude/restart.md` is the ENTRY POINT and holds NO STATE. It says where to start and points at the two files above; it does not carry WIP, TODO, focus, or a summary of current work. Leave it alone unless the entry procedure itself changed.

**This is a rule with a history.** These three files were three copies of one narrative, each opening with a banner declaring it superseded the others -- which is the tell that nobody was deleting, only prepending. They were folded back into one on 2026-08-24. **State written here is how that rebuilds**, because the same content then has three homes and three values, and nothing reports the divergence.

**If you find yourself writing a supersedes banner, delete what it supersedes instead.**

### 5. File quality checks

- No non-printing characters in any files (proper emojis and ASCII only)
- All markdown tables are column-aligned
- No Claude signature in commit messages

### 6. ONLY update .md doc files

Do NOT write new code during session finish. This step is documentation only. Commit the documentation updates.

## Skill Chain

Before finishing, consider:

- `/in-whiteboard release` -- pause this session's whiteboard node (step 1 runs it when `intent/whiteboard/` exists AND the session is actually ending; a fold before `/compact` runs `touch` instead)
- `/in-verify` -- verify any completion claims made this session

## Red Flags

| Rationalization                          | Reality                                                      |
| ---------------------------------------- | ------------------------------------------------------------ |
| "I'll update restart.md next session"    | Next session won't have this context. Write it now.          |
| "The code speaks for itself"             | Code changes without docs are invisible to the next session. |
| "Just one more quick fix before wrap-up" | Finish means finish. No new code.                            |

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…

Newsletter

Get the weekly list of safe new skills, and the ones we pulled.