# v0.3.9-alpha.5 Release Notes

## Version

`v0.3.9-alpha.5`

## Dist Tag

`alpha`

During the alpha pilot, `alpha` is the tester-facing dist-tag. `latest` may lag
behind `alpha`, so verify both before treating default install as current.

## Summary

This prerelease packages the product workflow rail updates after
`persona-harness@0.3.9-alpha.4`.

It focuses on no-token product surfaces:

- first-run help that does not mutate project state;
- product MVP smoke coverage;
- `workflow continue` ticket-card context;
- Windows Korean stdin decoding for idea-first workflows.

Persona Harness remains an AI coding workflow rail + evidence + continuation
harness. This release is not eval evidence, PH superiority proof, generated app
product-quality certification, AST/linter enforcement, or an OpenCode/model
outcome claim.

## What Changed

### Workflow continue ticket context

- `6d29d91 fix(cli): surface ticket context in workflow continue`
  - `workflow continue` shows pending/current ticket task-card context in the top
    ticket block.
  - The finish gate is not weakened.
  - Completion claims remain blocked while implementation, reports, evidence, or
    tickets are pending.

### Product MVP smoke

- `8d3605b test(cli): add product MVP smoke`
  - Adds `npm run smoke:product-mvp`.
  - Covers built-CLI no-token product paths across init, doctor, observe,
    workflow PASS path, blocked path, and workflow next pending-ticket smoke.
  - This is product surface smoke only, not eval evidence or generated app
    quality certification.

### First-run help side-effect fix

- `e562f17 fix(cli): make first-run help side-effect free`
  - Keeps first-run help behavior from mutating project state.
  - Supports tester-facing command discovery without hidden setup side effects.

### Windows Korean stdin decoding

- `dd1e68f fix(cli): decode Windows Korean stdin`
  - Affected commands: `workflow draft --stdin`, `workflow capture --stdin`.
  - Root cause: stdin was decoded as UTF-8 only, so Windows cmd/PowerShell/SSH
    CP949/EUC-KR pipe input could mojibake.
  - Fix shape: decode raw stdin buffers as UTF-8 first; if replacement
    characters appear, try Windows Korean candidates (`windows-949`, `euc-kr`,
    `ks_c_5601-1987`).
  - This does not repair already broken workflow artifacts.

### Tester guide and smoke boundaries

- Docs through `1f97743 docs: record Windows Korean stdin fix` are included.
- The minimal tester guide records:
  - `persona-harness@alpha` install;
  - `ph init --default backend`;
  - `ph doctor`;
  - idea-first `workflow draft --stdin` -> approve -> split -> next -> continue
    -> check;
  - expected pending WARNs;
  - compact feedback format.
- Local proxy and SSH remote smoke on local tarballs were helpful for the
  no-token idea-first path.
- Registry-alpha remote commands passed, but that attempt was excluded from the
  helpful judgment because `workflow continue` lacked task-card context and
  Windows Korean input mojibake was observed before `dd1e68f`.

## Smoke Boundary

- Published registry package smoke is still required after publish.
- Do not treat local tarball smoke as proof of the published registry package.
- Do not claim generated app quality, PH superiority, eval PASS, AST/linter
  enforcement, or OpenCode/model behavior from this release.

## Verification

Release-prep verification for this worktree:

```bash
npm test
npm run typecheck
npm run build
npm run check:docs
npm run smoke:product-mvp
npm pack --dry-run
git diff --check
```

Observed result on 2026-06-28:

- `npm test`: passed, 69 files / 453 tests.
- `npm run typecheck`: passed.
- `npm run build`: passed.
- `npm run check:docs`: passed.
- `npm run smoke:product-mvp`: passed.
- `npm pack --dry-run`: passed for `persona-harness@0.3.9-alpha.5`.
  - filename: `persona-harness-0.3.9-alpha.5.tgz`;
  - package size: `378.5 kB`;
  - unpacked size: `1.5 MB`;
  - shasum: `6adf587a976b7509b21f4445ec8244a437cff80d`;
  - total files: `369`.
- `git diff --check`: passed.

## Publish Notes

- Publish with `npm publish --tag alpha` only after all verification commands
  pass.
- Do not intentionally move `latest` during this manual release unless separately
  approved.
- If npm requires OTP/2FA, stop after the first failure and hand off the exact
  command for the user to run.

## Published Registry Facts

`persona-harness@0.3.9-alpha.5` exists on the npm registry.

Registry facts observed after user-completed OTP publish:

- version: `0.3.9-alpha.5`;
- gitHead: `07d36eb3a74c68b880b812dcd755cf6a2c464637`;
- dist.shasum: `74ae2103be553d3e107a7e8167aadabe89a29e91`;
- dist-tags: `alpha=0.3.9-alpha.5`, `latest=0.3.9-alpha.3`.

Git facts observed after publish:

- HEAD: `07d36eb3a74c68b880b812dcd755cf6a2c464637`;
- local tag `v0.3.9-alpha.5` points at HEAD;
- origin tag `refs/tags/v0.3.9-alpha.5` points at the same HEAD.

Smoke boundary:

- Published registry facts are confirmed.
- Published registry install/surface smoke passed in External Smoke.
- `latest` was not moved and remains `0.3.9-alpha.3`.
- No generated app quality, PH superiority, eval PASS, or OpenCode/model outcome
  claim is made.

## Published Registry Surface Smoke

External Smoke passed the alpha5 Windows SSH registry re-smoke.

Source:

- install command: `npm install -D persona-harness@alpha`;
- installed package: `persona-harness@0.3.9-alpha.5`;
- registry gitHead: `07d36eb3a74c68b880b812dcd755cf6a2c464637`;
- registry shasum: `74ae2103be553d3e107a7e8167aadabe89a29e91`;
- dist-tags: `alpha=0.3.9-alpha.5`, `latest=0.3.9-alpha.3`;
- environment: Windows remote clean temp path over SSH.

Observed:

- no-token Korean idea-first path passed:
  - init/default backend;
  - doctor;
  - bootstrap;
  - `workflow draft --stdin`;
  - approve;
  - split;
  - next;
  - continue;
  - check.
- Korean input `TODO 웹 서비스 만들래` was preserved with no mojibake in
  `workflow next` title and `workflow continue` task-card context.
- `workflow continue` showed task-card context, next command/action, archive
  candidate, and no-completion guidance.
- `workflow check` WARN was expected because pending/template state remained.
- Help commands were side-effect free:
  - `init --help`;
  - `smoke --help`;
  - `feedback --help`.
- Those help commands exited 0 and did not create `.persona`, `.opencode`,
  `AGENTS.md`, workflow reports, smoke reports, or feedback reports.
- `npx ph --version` remains unsupported and exited 1; package version was
  confirmed by npm metadata instead.

Boundary:

- This is the final product surface smoke for alpha5.
- It is not eval/model/OpenCode/A-B evidence.
- It is not generated app quality certification or PH superiority proof.
- Evidence noise and wrapper/copy-block friction remain deferred until a real
  user or proxy complaint appears.

## SSH Implementation Trial

External Smoke also ran an alpha5 Windows SSH real-use implementation trial.

Result:

- partial success;
- no-token idea-first rail was helpful;
- Korean input was preserved;
- `workflow continue` preserved task-card context, next action, and
  no-completion guidance.

Generated app signal:

- OpenCode/model generated a Java/Spring/Gradle/H2/Flyway/JDBC app;
- `gradlew.bat test`: PASS;
- `gradlew.bat build`: PASS;
- runtime smoke: PASS with `/todos` POST, GET, and 400 checks;
- backend-shape was mostly PASS.

Closure friction:

- implementation and review reports remained templates;
- `req-1` remained pending;
- `workflow finish implement` exited 1 and correctly blocked completion.

Judgment:

- Product value signal exists.
- Closure friction remains, so the helpful/unclear boundary is still active for
  real implementation use.
- This is not an eval/model superiority claim, PH superiority proof, or generated
  app quality certification.
- The finish gate behaved correctly; this is not recorded as a gate bug.
- Future Windows SSH smoke should prefer `D:\persona-harness-smoke-*` paths.
- Raw retention should default to minimal rollup unless deeper debugging is
  explicitly needed.

## Post-Build Closure UX Follow-Up

`d9dcd0a fix(cli): guide post-build workflow closure` landed after the alpha5
registry package.

What changed:

- `workflow continue` and `workflow check` now show a post-build closure
  checklist when reports are still templates and a ticket is still pending after
  successful app generation.
- The checklist tells agents to:
  - avoid generating a new app;
  - fill the implementation report and mark it report-filled;
  - fill the review report and mark it report-filled;
  - review/archive the current requirement candidate;
  - run `workflow finish implement`.

Boundary:

- This is a closure UX fix, not finish-gate weakening.
- It adds no enforcement.
- It changes no eval-core, fixture, policy, or scorer behavior.
- If reports/evidence are still templates, the CLI does not claim build, test, or
  runtime success as confirmed.
- Model follow-through can still fail.
- Because this landed after the alpha5 registry package, the next alpha
  publish/re-smoke is required before treating it as published package behavior.
