# LazyClaude Release Checklist

Status: `lazyclaude-ai@0.2.1` is the current release candidate for dynamic workflow readiness.
`package.json` is aligned to `0.2.1`, and
`plugins/lazyclaude/.claude-plugin/plugin.json` is aligned to `0.2.1`.

This release carries the v0.2.1 dynamic workflow readiness surfaces:
`/dynamic-workflow`, `workflow-check --json`, native `/goal` fallback guidance,
subagent delegation mapping, and the v0.2.0 `review-work` / `ultragoal`
workflow parity surfaces, including the ultragoal runtime. It is the
next publishable target when explicitly approved.

DO NOT publish a new version of LazyClaude, run `npm publish`, push release
tags, or add a remote Claude Code marketplace entry without explicit user
approval.

This release path is for personal install convenience, not advertisement,
public repo promotion, or a public launch campaign.

Historical baseline anchors still covered by this checklist: `0.1.12` was the
publish-recovery baseline, `0.1.13` added ULW command trigger guardrails,
`0.1.14` added command-name HUD display, `0.1.15` introduced HUD brand color
selection, `0.1.16` added rate-limit reset countdown and deep-interview install
guidance, and `0.1.18` covered compact HUD bars and broader brand accent
behavior.

## Verified Locally

- `npm test`
- `npm run validate:plugin`
- `npm run qa:tmux`
- `npm run qa:portable`
- `npm run pack:dry-run`

## Local Checkout Use

Use this track when testing from the current checkout:

1. Run `npm test`.
2. Run `npm run validate:plugin`.
3. Run `npm run qa:tmux`.
4. Run `node bin/lazyclaude-ai.js workflow-check --json`.
5. Run `node bin/lazyclaude-ai.js ultragoal --help`.
6. Start Claude Code with `claude --plugin-dir ./plugins/lazyclaude`.

No npm publication is required for this track.

## v0.2.1 Dynamic Workflow Gates

Before requesting publication approval, confirm these artifacts from the current
checkout:

- `package.json` version is `0.2.1`.
- `plugins/lazyclaude/.claude-plugin/plugin.json` version is `0.2.1`.
- `plugins/lazyclaude/commands/dynamic-workflow.md` documents subagent delegation.
- `node bin/lazyclaude-ai.js workflow-check --json` reports `status: pass`.
- `plugins/lazyclaude/commands/review-work.md` documents the 5-lane review.
- `plugins/lazyclaude/commands/ultragoal.md` documents durable goal state.
- `plugins/lazyclaude/lib/ultragoal/` ships the runtime CLI/state modules.
- `node bin/lazyclaude-ai.js ultragoal --help` prints durable state commands.
- `npm pack --dry-run --json` includes runtime payloads and excludes local
  `.omo/`, `.omc/`, and `evidence/` state.
- `.omo/ulw-loop/evidence/v020-red-contracts.txt` or equivalent RED evidence
  exists for the workflow parity contracts before GREEN evidence.

## Fresh Machine NPM Install Use

Use this track after an approved npm package version exists:

1. Run `npx --yes lazyclaude-ai install`.
2. Run `npx --yes lazyclaude-ai doctor`.
3. Start Claude Code with the normal `claude` command.

The installer should register `lazyclaude@lazyclaude-ai` in Claude Code's user
plugin registry, `settings.json` `enabledPlugins`, and the LazyClaude-managed
local marketplace metadata needed by `claude plugin details`. Do not ask users
to type a generated command that shells out to `npx --yes lazyclaude-ai path` for
normal npm installs.

Run fresh-machine QA from a fresh directory, not from this repository checkout.
Inside the same-name source checkout, older published builds such as
`npx --yes lazyclaude-ai@0.1.11 install` could resolve the local package and
fail with `sh: lazyclaude-ai: command not found`. Current checkout builds include
the local npx shim. Use `cd /tmp` for the fresh directory scenario, or use the
explicit fresh-prefix form:

```bash
npm exec --prefix "$(mktemp -d)" --yes --package lazyclaude-ai -- lazyclaude install
```

## Quiet Public NPM Package Release Or Update

Use this track only when the user explicitly approves making a new package
version installable through `npm`, `npx`, and `bunx`.

1. Confirm the target package name and version with the user.
2. Review `README.md`, `README_ko-KR.md`, `docs/migration.md`, and
   `docs/workflow-compatibility-audit.md` for neutral release wording.
3. Run `npm whoami` and confirm the intended npm account.
4. Re-run the full local verification set from a clean checkout:
   - `npm test`
   - `npm run validate:plugin`
   - `npm run doctor`
   - `npm run qa:tmux`
   - `npm run qa:portable`
   - `npm run pack:dry-run`
5. Inspect `npm pack --dry-run --json` and confirm package contents.
6. Ask for explicit user approval to publish.
7. Only after approval, perform the selected publication path in a separate,
   auditable release step.

For the current unscoped `lazyclaude-ai` package name, use:

```bash
npm publish
```

If the package is renamed to a scoped package such as `@scope/lazyclaude-ai`,
publish it publicly with:

```bash
npm publish --access public
```

## Accidental Publish Rollback

If the wrong package or version is published, stop and report the incident
before further mutation. Depending on npm policy and timing, choose one audited
rollback action with user approval:

1. `npm deprecate <package>@<version> "<message>"`
2. `npm unpublish <package>@<version>` only when allowed and explicitly approved
3. Publish a corrected patch version after verification

## Marketplace Boundary

Local checkout testing still uses `claude --plugin-dir ./plugins/lazyclaude`.
NPM installs should use the global Claude user plugin registry and normal
`claude` launches. A root Claude marketplace file is intentionally not shipped
because users may already have an OMC/omc marketplace or plugin installed. The
npm installer creates a LazyClaude-managed local marketplace under
`LAZYCLAUDE_HOME` and registers only `lazyclaude-ai` in Claude's user marketplace
metadata so skills and hooks appear in `claude plugin details`. Do not add a
remote marketplace entry without explicit user approval. If user-level OMC
creates `.omc/` state during validation, keep it ignored and confirm it is
absent from the package dry-run.

## Rollback

If a local test load causes problems, stop Claude Code, restart without
`claude --plugin-dir ./plugins/lazyclaude`, and run `/reload-plugins` in any
remaining session that should drop the local plugin metadata.

If an npm-installed LazyClaude copy causes problems, run:

```bash
npx --yes lazyclaude-ai uninstall
```
