# v0.1.0 Release Hardening

- Status: **Released**
- Owner: maintainers
- Confidence: high
- Package: [`dsh-claude-tui@0.1.0`](https://www.npmjs.com/package/dsh-claude-tui/v/0.1.0)
- GitHub Release: [`v0.1.0`](https://github.com/cogine-ai/dsh-claude-tui/releases/tag/v0.1.0)
- Approved: 2026-08-15
- Published: 2026-08-15

## Decision

`v0.1.0` passed every gate in this document and was published to npm on 2026-08-15. The milestone includes a one-command launcher, so a user with a supported Node.js version can install and enter the TUI with:

```sh
npx dsh-claude-tui
```

No separately installed `dsh` command, repository checkout, pnpm installation, or manual profile setup may be required. Provider credentials are still required before a real model request.

This milestone also includes the bounded model/provider surfaces approved for first-run usability: the Claude-shaped interaction is [documented separately](./model-provider-interactions.md), while all catalog, default, effort, and credential semantics remain DSH-owned. Further visual surfaces and interaction features remain deferred until after `v0.1.0`. The release sequence remains:

```text
Release hardening ✓ -> merge to main ✓ -> publish from the exact merged main commit ✓ -> verify registry metadata and a clean npx launch ✓ -> GitHub Release ✓ -> GIF/public launch -> feedback-led iteration
```

## Release gates

### 1. Publishable package

- Add a lifecycle build such as `prepack` so a clean checkout produces `lib/index.js`, `lib/startup.js`, and their declaration files.
- Complete the npm metadata: `repository`, `homepage`, `bugs`, and `keywords`.
- Build and pack from a clean Git archive, not from a worktree that already contains generated `lib` files.
- Inspect the tarball and assert that it contains the runtime files, type declarations, launcher, `cordis.patch.yml`, README files, disclaimer, and license.
- Install and execute the packed tarball before any registry publication.

### 2. One-command launcher

The package must expose an executable through `package.json#bin`. That launcher must:

- carry a compatible, version-pinned DeepSeek Harness CLI as a runtime dependency;
- publish a production `npm-shrinkwrap.json` so `npx` resolves the qualified transitive tree instead of accepting newly published dependency drift;
- make `npx dsh-claude-tui` reach the Claude-style TUI on first run;
- initialize the managed `claude-tui` profile when it is absent;
- on later runs, reconcile only the launcher-owned plugin registration to the package version currently executing;
- preserve credentials, Sessions, user overlays, and unrelated profile entries;
- fail with an actionable message instead of overwriting an existing profile when safe reconciliation is impossible;
- forward CLI arguments such as `--resume` and `--model`, the current working directory, environment, interactive stdio, exit codes, and termination signals;
- apply bundle-required defaults without overriding an explicit user environment;
- keep `--help` and `--version` side-effect free;
- never independently copy, print, or persist provider credentials; only an explicit masked TUI action may pass a value to DSH's credential service;
- preserve prompt drafts across model/provider overlays and mask API-key input from terminal output and Session history;
- read provider/model/effort/default/credential state from the corresponding DSH services instead of shipping a fixed catalog;
- never perform an independent self-update or mutate unrelated Harness plugins.

### 3. Packed end-to-end qualification

Run the following checks with no globally installed `dsh` and with a fresh temporary `DSH_HOME`:

1. Execute the tarball through its published bin and prove that the first run creates the required managed state and opens the TUI.
2. Complete one deterministic local-mock tool turn and exit cleanly.
3. Run the same package a second time and prove that setup is idempotent.
4. Preserve a user-owned marker/config entry across the second run.
5. Resume the created Session through `npx dsh-claude-tui --resume`.
6. Verify argument forwarding, non-zero child exit propagation, signal handling, and terminal restoration.
7. Exercise supported Node.js lines `22.19+` and `24+`; record the qualified operating systems and terminal emulators.

The existing Gate 3 runtime evidence remains the semantic baseline: local deterministic scenarios passed `8/8`, real DeepSeek scenarios passed `2/2`, and the full suite passed `42/42` at commit `5957907`.

### 4. Repository and publication readiness

- `pnpm check`, the clean-pack contract, and packed end-to-end qualification must all pass on the release commit.
- The release artifact must pass a credential and unexpected-file scan.
- Confirm npm package ownership, authentication, and 2FA before publishing.
- Keep the active repository CI workflow enabled and require a successful release-candidate run before publication.
- Inspect the staged package before final approval. Publishing, tagging, GitHub Release creation, and promotional assets happen only after this milestone is complete.

## Dependencies and risks

| Item | Release implication |
| --- | --- |
| Harness CLI compatibility | Pin the CLI used by the launcher and qualify upgrades instead of accepting an unbounded range. |
| Existing Harness installs | Ignore global executables, preserve unrelated `$DSH_HOME` state, reject an unowned `claude-tui` profile, and fail loud on pre-release on-disk format mismatches; cross-version migration is not owned by this launcher. Do not concurrently run different Harness versions against one `$DSH_HOME`, because Harness owns and may reconcile shared profile-module fallbacks. |
| Registry dependency drift | Publish the qualified npm production tree. The temporary direct pin on `@aws-sdk/credential-provider-node@3.972.79` avoids upstream `3.972.80`, whose published dependency range currently points to a nonexistent package version; remove the pin only after a clean npm install and packed E2E both pass without it. |
| Native install surface | The npm package is small, but its pinned Harness closure installs hundreds of packages and runs reviewed native setup for `node-pty`, `koffi`, and Harness' subprocess helper. Qualify cold installs on every supported OS and keep the production audit clean. |
| Profile ownership | Reconciliation must distinguish launcher-owned state from user-owned customization. |
| `npx` cache and offline behavior | Errors must identify whether package resolution, Harness setup, or provider access failed. |
| npm authentication and 2FA | Publication succeeded under the authenticated package owner; `latest` resolves to `0.1.0`. |
| CI activation | The release candidate passed the full Ubuntu matrix on Node.js `22.19.0`, `22.22.3`, `24.0.0`, and `24.14.0`. |

## Completion rule

Release Hardening was approved only after the release commit passed every gate above from a clean environment and the exact packed artifact passed local-mock, process-boundary, Session-resume, and real DeepSeek qualification. Passing source-level tests alone was insufficient.

The public registry reports `gitHead` `21679afe9a65bef44d2ccc11aa2ecca52215a218`, matching the exact merged `main` commit. A post-publication run with a fresh npm cache and isolated `DSH_HOME` rendered the TUI, created the managed profile, did not echo the supplied credential, and exited cleanly.

## Roadmap change log

- Before: release packaging beyond checkout installation was an undifferentiated future item.
- After: `v0.1.0 Release Hardening` made `npx dsh-claude-tui` a blocking release promise with explicit first-run, repeat-run, safety, and packed-artifact gates.
- Released: the pinned artifact passed the four-version CI matrix, production dependency audit, publish dry-run, packed real-API smoke, registry metadata verification, clean public-`npx` launch, and exact-commit GitHub Release required for the public `v0.1.0` baseline.
