v1.1.0 to v2.0.0

66 added, 90 removed. Audit A to A.

---
name: synthesis-project-resume
- description: "Start or resume any synthesis project in any harness on any machine with full verified context: classify the session (continuing, fresh, or wrong-project paste), load index plus CONTEXT plus REFERENCE plus recent sessions, respect live foreign claims, surface cross-machine changes, and upgrade stale project formats. Use when pasting a console resume prompt or (re)opening project work."
+ description: "Start or resume any synthesis project in any harness on any machine with verified context: classify the session (continuing, fresh, wrong project), load the records, respect live claims, surface other Macs' changes. Use when pasting a resume prompt or (re)opening project work."
license: "CC0-1.0"
depends_on: []
metadata:
author: "Rajiv Pant"
- version: "1.1.0"
+ version: "2.0.0"
source_repo: "github.com/synthesisengineering/synthesis-skills"
source_type: "public"
+ format: v5
---
# Project Resume
- **Version 1.1.0** (2026-09-21): name-addressed invocation — the R1
- prompt names the skill and the workspace, never a filesystem path.
+ One prompt resumes a synthesis project anywhere: any harness, any Mac, with or
+ without native skill loading. The skill decides whether this session is
+ continuing, fresh or pointed at the wrong project, loads the records it needs,
+ and hands the principal a one-screen brief. `synthesis resume` does the
+ mechanical part from local files and local git; this skill is the protocol
+ around it, and works by hand where the CLI is absent.
- **Version 1.0.0** (2026-09-20): first release — the R1–R10 resume
- contract, the three-way session classification, the one-screen
- resumption brief, and `scripts/resume_probe.py` for machine-readable
- project status.
+ ## Binding rules
- The normative contract is
- [references/requirements.md](references/requirements.md). This file
- is the operating protocol. It assumes nothing about the harness
- beyond a file system and git: no slash commands, no plugin loader,
- no MCP servers.
+ 1. **Classify before loading.** Continuing: confirm in one line and keep working. Fresh: load fully. Wrong project: stop, name both projects and what is at stake, and ask. Fragments of several projects count as wrong project.
+ 2. **An unknown id offers a new project.** Never resolve it to a similar existing name.
+ 3. **Never claim context you did not read.** State what was loaded and the newest item's date.
+ 4. **Never write through a live foreign claim.** Say who, on what, since when, and work read-only until the principal decides.
+ 5. **Another Mac's work is the normal case.** Surface what changed there; never pull over local uncommitted changes; report two diverged copies as a conflict, never pick one by date.
+ 6. **An unreachable remote is said once,** and the resume continues from local files.
+ 7. **The prompt names the skill, never a path,** so it is identical on every machine.
- ## 1. Invocation
+ ## Contents
- The console emits the resume prompt (R1):
+ - **Procedure** (below): invocation, classification, the fresh load, the brief.
+ - [references/requirements.md](references/requirements.md): the R1 to R10 resume contract and the console companion surface. Read when changing this skill or the console prompt.
+ - [references/coverage-map.md](references/coverage-map.md): where every part of 1.1.0 lives now.
+ - [references/preserved.md](references/preserved.md): what was cut and why, and the 1.1.0 text verbatim. Read only to review the cut.
+ ## Procedure
+
+ **1. Invocation.** The console emits:
+
```
Use the skill synthesis-project-resume to resume the synthesis
project with id <id> in the synthesis project management
workspace <name>.
```
- If your harness loads synthesis skills natively, this skill is
- already in your context under that name — invoke it if your
- harness needs an explicit call (Codex: `$synthesis-project-resume`)
- and continue at §2. Otherwise (skill-less harnesses such as
- Cursor), locate the skill file by searching your installed skills
- for `synthesis-project-resume/SKILL.md`: the Claude, Codex, and
- Muse plugin caches first, then `~/.claude/skills` and
- `~/.agents/skills`. Read it first and follow it. If no copy
- exists anywhere, stop and say to install synthesis-skills.
-
- Resolve the workspace name to its repo checkout: the knowledge
- repo is `ai-knowledge-{workspace}` — exact match first — else the
- unique `ai-knowledge-{workspace}-*` directory under the workspace
- roots (`~/workspaces/*`). If several match or none does, ask once
- and remember. Unknown project id means R6 (start): interview
- briefly (name, goal, workspace, repo family) and scaffold per the
- project-management contract, then continue as a fresh resume.
-
- ## 2. Classify the session (R2)
-
- Compare the requested project against the project your loaded
- context names — the index entry, CONTEXT, or working files already
- live in this session:
-
- 1. **Continuing** — same project already live. Say so in one line
- and keep working. Never reload-and-resummarize live context.
- 2. **Fresh** — no project loaded. Run the fresh-resume load (§3).
- 3. **Wrong-project paste** — a different project is live here. STOP.
- Name both projects and what is at stake in the live one, then ask
- whether to switch, and wait. Never strand live work silently.
-
- When the session's project is ambiguous (fragments of several
- projects in context), treat it as case 3 and name the candidates.
- False continuity corrupts; false caution costs one question.
-
- ## 3. Fresh-resume load (R3, R5, R8)
-
- 1. Resolve the project through the PM registry and causal resolver before
- reading project prose or choosing a checkout. Use its selected path and
- exact local attribution roots; do not pull over unresolved local work.
- 2. Read the index entry, `RESUME_STATE.json` (v2; verify the
- skeleton when present), `CURRENT_STATE.json` (operational
- handoff, when present), `CONTEXT.md`, `REFERENCE.md`, the two
- most recent session files, and any handoff queue entries — in
- that order.
- 3. Run `scripts/resume_probe.py` (sibling of this SKILL.md) for
- the machine-readable status (newest session, cross-machine
- changes, format version).
- 4. Check the coordination board for live foreign claims on the
- project paths (R4). Overlap means read-only until the principal
- decides — say who, what, since when.
- 5. Check the format version (R9). Older than installed means
- migrate-verify-resume through the versioned format contract
- before any other write.
- 6. Deliver the one-screen resumption brief: goal in one line, where
- it stands, the newest three facts, open loops with owners, the
- suggested next action. State what was loaded and the newest
- item's date.
+ Harnesses that load synthesis skills invoke it by name (Codex:
+ `$synthesis-project-resume`). Otherwise locate `synthesis-project-resume/SKILL.md`
+ in the Claude, Codex and Muse plugin caches, then `~/.claude/skills` and
+ `~/.agents/skills`, read it and follow it; if no copy exists, say to install
+ synthesis-skills. The workspace's knowledge repo is `ai-knowledge-{workspace}`
+ (exact match first), else the one `ai-knowledge-{workspace}-*` folder under
+ `~/workspaces/*`; if several or none match, ask once.
- For an interrupted autopilot run, apply the
- [capsule and cold-resume protocol](../synthesis-context-lifecycle/references/autopilot-recovery.md)
- after project selection and fresh ownership. Recover from the authoritative
- journal, reconcile effects and child output, and report unknown survival
- boundaries. A saved capsule cannot grant a claim or replay an external action.
+ **2. Classify** (rule 1). `synthesis resume <id>` applies the same test to the
+ project on this session's board file: it answers "Already working <id>" for a
+ continuing session, and for a session on another project it names both, asks,
+ and switches nothing. After the principal says yes:
+ `synthesis resume <id> --switch`. For an unknown id it offers to start the
+ project: interview briefly (name, goal, workspace, repo family) and scaffold it
+ per synthesis-project-management, then continue as a fresh resume.
- ## 4. Cross-machine surfacing (R5)
+ **3. Fresh load.**
- `git log` on the project path since this machine's last touch is
- part of every brief: "Mac B moved this yesterday — two session
- appends and a REFERENCE update." The principal should feel
- continuity, not a cold start. When the probe cannot reach the
- remotes, say so once (R10) and resume from local state.
+ 1. `git -C <knowledge repo> fetch --quiet` (offline: go on; resume says so once).
+ 2. `synthesis resume <id>`. It prints the directive, the current-state block,
+ phase, status, last session and the newest session entry, the next actions,
+ the plan, and a "Before working" list: the checkout behind its fetched
+ upstream (with the commits), uncommitted local changes not to pull over,
+ newer or diverged copies on other worktrees or branches, and other live
+ sessions on the project.
+ 3. Behind and clean: `git -C <knowledge repo> pull --ff-only`, then resume
+ again. Any CONFLICT line: stop and ask before writing.
+ 4. Read CONTEXT.md, the plan, REFERENCE.md, the two most recent session files,
+ and any brief left for you (a board message names it). For an interrupted
+ autopilot run, read its plan file first (synthesis-autopilot); a saved plan
+ never grants a claim or replays an outside action.
+ 5. Optional machine-readable status: `python3 <skill>/scripts/resume_probe.py
+ <knowledge repo> <id>` prints JSON with `id`, `name`, `goal`, `status`,
+ `updated`, `newest_session`, `session_mtime` and `recent_changes`; exit 2
+ for an unreadable index, 3 for an unknown id.
+ 6. Claims: `synthesis who`; overlap means read-only (rule 4). Then claim what
+ you will write.
- ## 5. What the skill refuses
+ Without the CLI, do steps 3 and 4 by hand with `git log` on the project path.
- - Switching projects on a wrong-project paste without confirmation.
- - Writing through a live foreign claim.
- - Claiming context it did not read.
- - Resuming a stale-format project without migrating it first.
- - Force-resolving repo divergence to make a resume "clean."
+ **4. The brief, one screen:** the goal in one line, where it stands, the newest
+ three facts, open loops with owners, the suggested next action, what was
+ loaded, and the newest item's date. Lead with what changed on another Mac
+ ("Mac B moved this yesterday: two session entries and a REFERENCE update") so
+ the principal feels continuity, not a cold start.