# Missing ship wrapper recovery

status: DONE
task IDs: #3
source request: Update canonical agent-facing delivery documentation so future agents treat missing `.claude/scripts/ship.sh` as executable setup, never an external blocker. Require `ship-init` Phase A evidence proposal, internal evidence inspection, Phase B frozen-mode selection from project facts, then wrapper-based landing. Never ask owner or hand-type publication cascade.

## Outcome

Agents recover a missing project ship wrapper themselves and continue landing through canonical controller.

## Acceptance criteria

- Root `CLAUDE.md` Landing section gives exact Phase A and Phase B recovery commands at failure site.
- Root section points to canonical `finishing-a-development-branch` / `ship-init` contract instead of duplicating doctrine.
- Checked-in canonical delivery skill explicitly says missing wrapper is executable setup, NEVER external blocker.
- Documentation links and command paths exist.
- Diff is concise, imperative, agent-first, and passes relevant documentation checks.
- Commit lands through generated or existing ship wrapper; deployment runs only if repository documentation installation requires it.

## Preserved WIP

- Branch: `wt/ship-wrapper-docs`
- Worktree: `/home/user/Projects/overdeck/.worktrees/ship-wrapper-docs`
- Based on: `origin/main` at `11a299417`
- Shared main checkout remains untouched.

## Constraints

- Use guarded `od-worktree` workflow; never edit shared main checkout.
- Never ask owner to choose publication mode.
- Never hand-type merge/push cascade.
- Keep full doctrine canonical in `modules/workstation/claude/skills/finishing-a-development-branch/SKILL.md`.
- No co-author line.

## Execution steps

1. Read repository instructions, `GIT_FATIGUE.md` §12, canonical finishing skill, and plan registry.
2. Add minimal missing-wrapper recovery at root Landing failure site.
3. Make canonical skill's blocker classification explicit.
4. Verify paths, links, commands, diff, and relevant doc tests.
5. Commit, generate wrapper if absent, land through wrapper, deploy only if required, verify installed copy when applicable.
6. Mark plan and index DONE with receipts.

## Current receipt

2026-08-13 DONE: Disk admission initially refused at 3.50 GiB free. `pnpm store prune` removed 9.35 KiB. Proved selected completed worktrees clean and merged into `origin/main`, removed them only through `od-worktree remove`, and reached 28.65 GiB before worktree creation; final free space is 41.96 GiB. Commit `948141237` landed through canonical wrapper as integration commit `270ca169c`; wrapper drift check passed, source worktree and branch were removed. Existing wrapper froze `merge-to-main` from project facts and delegated to the tested controller; no owner question or raw publication cascade occurred. Installed `/home/user/.claude/skills/finishing-a-development-branch/SKILL.md` and deploy-clone copy exactly match landed source SHA-256 `aec252806534ab454679dd100e7f278928cde99b630055c92993798233e7a8c9`. Root `CLAUDE.md` resolves to landed `AGENTS.md` in clean checkouts; shared main checkout carries unrelated WIP and was not overwritten. `test-ship-init.sh` passed 21/21. `test-finish-branch.sh` passed 115/116: all docs-lane security, link, frontmatter, classification, and landing checks passed; one pre-existing fixture creates `pkg/` outside declared `packages/*` workspace and pnpm exits 254 before TypeScript. Delivery-contract test also exposed pre-existing remote mirror omission of `ajv/dist/2020`. Post-land deploy installed agent files and reused unchanged web release, then exited 20 on pre-existing fleet sandbox-image drift; installed docs were independently byte-verified, so no fleet rebuild was required for this docs-only task.

## Next executable action

None. Task #3 is landed and installed.
