persona-harness 0.9.0 → 0.9.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -14,6 +14,20 @@ preparation alone does not establish stable support or channel state.
14
14
  explicit subsequent `ph update enable --yes` can opt in; malformed, foreign,
15
15
  symlinked, or user-diverged state remains fail-closed and unchanged.
16
16
 
17
+ ## [0.9.1] - 2026-08-31
18
+
19
+ - Publish the canonical portable-host guide for the static adapters generated
20
+ by `ph init` in Codex, Claude Code, OpenCode, and Antigravity projects.
21
+ It distinguishes package-created discovery files from a live host session's
22
+ selection or delivery of a skill.
23
+ - Document safe adapter ownership and update behavior: a later `ph init` may
24
+ refresh only unchanged Persona-owned files, while modified, user-owned, or
25
+ symlinked targets remain fail-closed. `ph update enable` remains the separate
26
+ optional OpenCode plugin-pin path.
27
+ - Keep Context and legacy runtime injection default-off, and state that current
28
+ Context delivery is an optional OpenCode-specific runtime boundary rather
29
+ than a portable-host claim.
30
+
17
31
  ## [0.8.31] - 2026-08-25
18
32
 
19
33
  - Clarify `ph workflow finish implement` source-read runtime failures with a
package/README.md CHANGED
@@ -6,7 +6,7 @@
6
6
 
7
7
  # Persona Harness
8
8
 
9
- **Evidence-first completion gates for AI coding agents building Java/Spring backends.**
9
+ **Evidence-first workflow gates and portable skill adapters for AI coding agents building Java/Spring backends.**
10
10
 
11
11
  [![npm version](https://img.shields.io/npm/v/persona-harness?color=369eff&labelColor=black&style=flat-square)](https://www.npmjs.com/package/persona-harness)
12
12
  [![npm downloads](https://img.shields.io/npm/dt/persona-harness?color=ff6b35&labelColor=black&style=flat-square)](https://www.npmjs.com/package/persona-harness)
@@ -45,9 +45,10 @@ completion in 5/5 measured runs. Runtime injection did not improve the paired
45
45
  OpenCode measurements and added cost, so it remains default-off.
46
46
 
47
47
  **Built for:** Java/Spring/Gradle projects with explicit workflow gates and
48
- evidence checks. `ph init` also materializes portable skill adapters for Codex,
49
- Claude Code, OpenCode, and Antigravity; live host selection and delivery remain
50
- separate observation boundaries.
48
+ evidence checks. `ph init` materializes portable, project-local skill adapters
49
+ for Codex, Claude Code, OpenCode, and Antigravity. Static adapter installation
50
+ is package behavior; a host's live skill selection and delivery are separate
51
+ observation boundaries.
51
52
 
52
53
  **Not a promise of:** automatic implementation, generated-app quality,
53
54
  production readiness, token savings, or broad security guarantees.
@@ -105,8 +106,9 @@ Persona Harness exposes two deliberately separate tracks:
105
106
  verification authority.
106
107
  - **Isolation:** Context-only paths do not execute project commands or contact
107
108
  GitHub/network.
108
- - **Host:** OpenCode is the only implemented delivery adapter; live host
109
- delivery remains a separate, unobserved boundary.
109
+ - **Host:** `ph init` installs static skill adapters for Codex, Claude Code,
110
+ OpenCode, and Antigravity. Context delivery is currently implemented only by
111
+ the optional OpenCode adapter and remains a separate, unobserved boundary.
110
112
  - **Evidence:** Context usefulness remains `INCONCLUSIVE` until independent
111
113
  external evidence exists.
112
114
  - **Product focus:** the productized workflow focus is Java/Spring. The
@@ -214,18 +216,22 @@ earned by measurement first — see [MEASURED-CLAIMS](docs/MEASURED-CLAIMS.md).
214
216
 
215
217
  ## Install
216
218
 
217
- Requires Node.js ^20.17.0 || >=22.9.0 (Node 21 is unsupported), Java 21+ / Gradle, and the OpenCode CLI with a configured provider.
219
+ Requires Node.js ^20.17.0 || >=22.9.0 (Node 21 is unsupported). Java 21+ /
220
+ Gradle are required for the Java/Spring workflow rail. Install the coding-agent
221
+ host you already use separately; OpenCode is optional unless you want its
222
+ plugin-only Context delivery.
218
223
 
219
224
  ```bash
220
- # OpenCode
221
- curl -fsSL https://opencode.ai/install | bash # or: npm install -g opencode-ai
222
- opencode auth login
223
-
224
- # Persona Harness
225
+ # Any supported host project
225
226
  npm install -D persona-harness
226
- npx ph --help && npx ph doctor
227
+ npx ph init
228
+ npx ph doctor
227
229
  ```
228
230
 
231
+ `ph init` installs host-native discovery files without requiring a
232
+ Persona-specific launch command. See the [portable host adapter guide](docs/current/portable-host-adapters.md)
233
+ for the generated paths, host-specific limits, and safe update procedure.
234
+
229
235
  ## Quick Start
230
236
 
231
237
  For a clean project directory (not the Persona Harness repo itself):
@@ -241,7 +247,9 @@ npx ph go "Add a task creation endpoint."
241
247
 
242
248
  `ph init` writes manifest-owned shared-skill adapters beneath `.agents/skills`,
243
249
  `.claude/skills`, and `.opencode/skills`. It refuses a modified, user-owned, or
244
- symlinked generated target instead of overwriting it.
250
+ symlinked generated target instead of overwriting it. The generated files make
251
+ the catalog discoverable to the host; they do not prove that a running session
252
+ selected a skill or grant a workflow command any authority.
245
253
 
246
254
  For an existing Java/Spring/Gradle project, inspect the inferred draft first,
247
255
  then accept it explicitly:
@@ -308,6 +316,11 @@ OpenCode configuration and never overwrites changed rules, profiles, workflow
308
316
  state, or `.gitignore`; malformed, symlinked, foreign, or ordinary projects are
309
317
  left unchanged.
310
318
 
319
+ This automatic update path is OpenCode-plugin-specific. It does not rewrite the
320
+ portable host adapter trees. After upgrading the npm package, run `npx ph init`
321
+ to refresh only unchanged Persona-owned adapters; modified, user-owned, or
322
+ symlinked adapter files stay blocked rather than being overwritten.
323
+
311
324
  > [!NOTE]
312
325
  > If `workflow finish` fails, the agent must fix the reported blocker before claiming completion. **That failure is the product working, not a bug.**
313
326
 
@@ -396,6 +409,23 @@ do not change the P0-3 root CLI discovery contract.
396
409
 
397
410
  ## Platform And Host Support
398
411
 
412
+ ### Portable host adapters
413
+
414
+ `ph init` materializes the same catalog into each host's project-local discovery
415
+ layout. This proves the installed package produced safe static files, not that a
416
+ specific live session loaded or followed one.
417
+
418
+ | Host | Project-local adapter path | What the package establishes |
419
+ | --- | --- | --- |
420
+ | Codex and Antigravity | `.agents/skills/persona-harness-<skill-id>/SKILL.md` | Manifest-owned, host-neutral skill discovery metadata. |
421
+ | Claude Code | `.claude/skills/persona-harness-claude-<skill-id>/SKILL.md` | Manifest-owned, host-neutral skill discovery metadata. |
422
+ | OpenCode | `.opencode/skills/persona-harness-opencode-<skill-id>/SKILL.md` | Manifest-owned discovery metadata; the optional plugin remains a separate runtime boundary. |
423
+
424
+ The `.agents` and `.claude` adapters explicitly opt out of OpenCode automatic
425
+ discovery so an OpenCode project receives one native candidate rather than
426
+ duplicates. For the full ownership, upgrade, and non-claim boundary, read the
427
+ [portable host adapter guide](docs/current/portable-host-adapters.md).
428
+
399
429
  ### Node runtime floor
400
430
 
401
431
  The packaged CLI and its product-owned Sigstore authority verifiers require
@@ -424,12 +454,11 @@ or provide a credential fallback. When more than one repository is enrolled,
424
454
  pass the selected enrolled `owner/repository` to `fetch github`. Neither
425
455
  command publishes a package, moves a channel, or consumes Finish authority.
426
456
 
427
- | Surface | Status | Evidence boundary |
457
+ | CLI/runtime surface | Status | Evidence boundary |
428
458
  | --- | --- | --- |
429
- | Linux + OpenCode | Product: Node ^20.17.0 || >=22.9.0; source checks: Node 20.19.0 | Required Verify repository aggregates PR fast feedback and main package integration. Pull requests run policy, typecheck, build, and the two Vitest projects; main pushes additionally run Linux Node 20.19.0 source-built, packed-tarball, and fresh local-tarball installed checks. The dispatch-only support matrix retains exact product-floor Linux Node 20.17.0 and 22.9.0 imports plus latest Linux Node 20, 22, and 24 on demand. |
430
- | macOS + OpenCode | Manual limited smoke | The dispatch-only support matrix retains macOS Node 22 smoke only; this is not a promise of macOS Node 20/24 coverage. |
459
+ | Linux CLI/package | Product: Node ^20.17.0 || >=22.9.0; source checks: Node 20.19.0 | Required Verify repository aggregates PR fast feedback and main package integration. Pull requests run policy, typecheck, build, and the two Vitest projects; main pushes additionally run Linux Node 20.19.0 source-built, packed-tarball, and fresh local-tarball installed checks. The dispatch-only support matrix retains exact product-floor Linux Node 20.17.0 and 22.9.0 imports plus latest Linux Node 20, 22, and 24 on demand. |
460
+ | macOS CLI/package | Manual limited smoke | The dispatch-only support matrix retains macOS Node 22 smoke only; this is not a promise of macOS Node 20/24 coverage. |
431
461
  | Windows | Unverified / nonblocking | No Windows matrix job or support claim. Lock identity device/inode behavior and stale-lock/concurrency conclusions are not measured or verified. |
432
- | Codex adapter | Planned | No current Codex adapter or Codex product evidence; this is a planned adapter only. |
433
462
 
434
463
  Automatic CI boundary: Verify repository is the required PR/main aggregate. Pull requests require only the fast feedback lanes; main pushes also require Linux Node 20.19.0 package integration. The dispatch-only support matrix is deferred multi-runtime evidence, not a required PR/main gate. It is distinct from the canonical clean-CI builder's main-push signed evidence and the ordinary path-filtered diagnostic selftest.
435
464
 
@@ -439,8 +468,8 @@ Evidence answers one bounded question — *"What did this PH workflow observe fo
439
468
  this defined gate?"* — and nothing more. PH does **not** promise app-quality
440
469
  certification, token savings, Clean Code guarantees, broad AST/linter
441
470
  enforcement, a full TDD framework, closure guarantees, strong anti-forgery
442
- integrity before P3, or a complete workflow without OpenCode. The canonical list
443
- is in [MEASURED-CLAIMS](docs/MEASURED-CLAIMS.md).
471
+ integrity before P3, or a proven live workflow route on every host. The
472
+ canonical list is in [MEASURED-CLAIMS](docs/MEASURED-CLAIMS.md).
444
473
 
445
474
  > [!WARNING]
446
475
  > `ph bearshell` is **not a sandbox**. It limits runtime and output size, but commands still run on your machine with your permissions. See [SECURITY](SECURITY.md).
@@ -448,6 +477,7 @@ is in [MEASURED-CLAIMS](docs/MEASURED-CLAIMS.md).
448
477
  ## Docs
449
478
 
450
479
  - **New users** → [Start Here](docs/START-HERE.md) · [Quick Demo](docs/QUICK-DEMO.md) · [Measured Claims](docs/MEASURED-CLAIMS.md)
480
+ - **Codex, Claude Code, OpenCode, or Antigravity** → [portable host adapter guide](docs/current/portable-host-adapters.md)
451
481
  - **Agent not following the rail?** → [Troubleshooting](docs/troubleshooting/README.md)
452
482
  - **Install & backend shape** → [MVP install guide](docs/current/java-backend-mvp-install-guide.md)
453
483
  - **Contributors** → [CONTRIBUTING](CONTRIBUTING.md) · [ROADMAP](ROADMAP.md) · [CODE_OF_CONDUCT](CODE_OF_CONDUCT.md)
@@ -12,14 +12,15 @@ A reading map for people seeing Persona Harness (PH) for the first time.
12
12
  ## I want to try it
13
13
 
14
14
  1. [QUICK-DEMO](QUICK-DEMO.md) — the fastest hands-on path.
15
- 2. [README → Quick Start](../README.md#quick-start--javaspring-backend) — the
16
- full workflow.
17
- 3. For an existing Java/Spring/Gradle project, run `npx ph attach` to inspect
15
+ 2. [README → Quick Start](../README.md#quick-start) — the full workflow.
16
+ 3. [Portable host adapters](current/portable-host-adapters.md) — install the
17
+ shared-skill catalog for Codex, Claude Code, OpenCode, or Antigravity.
18
+ 4. For an existing Java/Spring/Gradle project, run `npx ph attach` to inspect
18
19
  the inferred draft, then `npx ph attach --yes` to accept it. Use
19
20
  `npx ph attach --repair --yes` only for a recognized weak Persona Harness
20
21
  installation, never a ready attachment; unrecognized or corrupt files are
21
22
  not overwritten.
22
- 4. [Troubleshooting](troubleshooting/README.md) — if the agent implements
23
+ 5. [Troubleshooting](troubleshooting/README.md) — if the agent implements
23
24
  directly, ignores the rail, or skips tickets on an existing project.
24
25
 
25
26
  ## I want to contribute
@@ -38,6 +39,24 @@ A reading map for people seeing Persona Harness (PH) for the first time.
38
39
 
39
40
  ## Platform and host support
40
41
 
42
+ ### Portable host adapters
43
+
44
+ `ph init` installs the canonical shared-skill catalog as manifest-owned regular
45
+ files in every supported project layout. This makes the catalog discoverable; it
46
+ does not establish that a running host session selected, loaded, or followed a
47
+ skill.
48
+
49
+ | Host | Generated path |
50
+ | --- | --- |
51
+ | Codex and Antigravity | `.agents/skills/persona-harness-<skill-id>/SKILL.md` |
52
+ | Claude Code | `.claude/skills/persona-harness-claude-<skill-id>/SKILL.md` |
53
+ | OpenCode | `.opencode/skills/persona-harness-opencode-<skill-id>/SKILL.md` |
54
+
55
+ Read [Portable host adapters](current/portable-host-adapters.md) before
56
+ customizing an adapter or expecting a package update to replace it. Context and
57
+ legacy runtime injection remain default-off; Context delivery is still an
58
+ OpenCode-specific optional boundary.
59
+
41
60
  ### Node runtime floor
42
61
 
43
62
  Sigstore-backed package verification requires Node.js ^20.17.0 || >=22.9.0;
@@ -52,12 +71,11 @@ diagnostics, not Finish authority. External assurance readiness is displayed
52
71
  through a separate read-only, non-consuming inspection; neither surface moves
53
72
  registry or trust state.
54
73
 
55
- | Surface | Status | Evidence boundary |
74
+ | CLI/runtime surface | Status | Evidence boundary |
56
75
  | --- | --- | --- |
57
- | Linux + OpenCode | Product: Node ^20.17.0 || >=22.9.0; source checks: Node 20.19.0 | Required Verify repository aggregates PR fast feedback and main package integration. Pull requests run policy, typecheck, build, and the two Vitest projects; main pushes additionally run Linux Node 20.19.0 source-built, packed-tarball, and fresh local-tarball installed checks. The dispatch-only support matrix retains exact product-floor Linux Node 20.17.0 and 22.9.0 imports plus latest Linux Node 20, 22, and 24 on demand. |
58
- | macOS + OpenCode | Manual limited smoke | The dispatch-only support matrix retains macOS Node 22 smoke only; this is not a promise of macOS Node 20/24 coverage. |
76
+ | Linux CLI/package | Product: Node ^20.17.0 || >=22.9.0; source checks: Node 20.19.0 | Required Verify repository aggregates PR fast feedback and main package integration. Pull requests run policy, typecheck, build, and the two Vitest projects; main pushes additionally run Linux Node 20.19.0 source-built, packed-tarball, and fresh local-tarball installed checks. The dispatch-only support matrix retains exact product-floor Linux Node 20.17.0 and 22.9.0 imports plus latest Linux Node 20, 22, and 24 on demand. |
77
+ | macOS CLI/package | Manual limited smoke | The dispatch-only support matrix retains macOS Node 22 smoke only; this is not a promise of macOS Node 20/24 coverage. |
59
78
  | Windows | Unverified / nonblocking | No Windows matrix job or support claim. Lock identity device/inode behavior and stale-lock/concurrency conclusions are not measured or verified. |
60
- | Codex adapter | Planned | No current Codex adapter or Codex product evidence; this is a planned adapter only. |
61
79
 
62
80
  Automatic CI boundary: Verify repository is the required PR/main aggregate. Pull requests require only the fast feedback lanes; main pushes also require Linux Node 20.19.0 package integration. The dispatch-only support matrix is deferred multi-runtime evidence, not a required PR/main gate. It is distinct from the canonical clean-CI builder's main-push signed evidence and the ordinary path-filtered diagnostic selftest.
63
81
 
@@ -19,8 +19,8 @@ history but do not become a current product or release claim.
19
19
 
20
20
  | I need to... | Start here |
21
21
  | --- | --- |
22
- | Install or understand the product | [Detailed usage](persona-harness-detailed-usage.md) and [workflow lifecycle](workflow-closure-state-machine-design.md) |
23
- | Use the portable shared-skill or product-discovery guidance | [Persona Shared Skills Core](persona-shared-skills-core.md) |
22
+ | Install or understand the product | [Portable host adapters](portable-host-adapters.md) and [workflow lifecycle](workflow-closure-state-machine-design.md) |
23
+ | Use the portable shared-skill or product-discovery guidance | [Persona Shared Skills Core](persona-shared-skills-core.md); use the portable-host guide above for host layouts. |
24
24
  | Maintain a local personalization profile | [Personalization Profile V1](personalization-profile-v1.md) |
25
25
  | Follow the Context Personalization program | [Context Personalization Program Status](context-program-status.md) |
26
26
  | Contribute to Context Personalization safely | [Context contributor map](context-contributor-map.json) |
@@ -12,7 +12,8 @@ Start with [Current Docs](README.md) unless you need a specific decision.
12
12
  | Workflow lifecycle projection | `docs/current/workflow-closure-state-machine-design.md` | The current fail-closed `workflow-lifecycle.1` state model. |
13
13
  | Workflow state concurrency | `docs/current/workflow-state-concurrency.md` | Writer ownership and safe state handling. |
14
14
  | Public product boundary | `docs/MEASURED-CLAIMS.md` | What Persona Harness may and may not claim. |
15
- | Install and usage | `docs/current/persona-harness-detailed-usage.md` | Detailed local install and maintenance-oriented usage. |
15
+ | Install and usage | `docs/START-HERE.md` | Current first-run path for the workflow rail and host-neutral installation. |
16
+ | Portable host adapters | `docs/current/portable-host-adapters.md` | Static adapter layouts, init ownership, update boundary, and host-evidence limits. |
16
17
  | Portable shared-skill and product-discovery contract | `docs/current/persona-shared-skills-core.md` | Catalog ownership, interview approval, capability-derived host assurance, explicit handoffs, and packaged surface. |
17
18
  | Personalization profile store | `docs/current/personalization-profile-v1.md` | Versioned local profile records, append-only lifecycle, privacy, and fail-closed storage. |
18
19
  | Context Personalization program | `docs/current/context-program-status.md` | Canonical P0 audit, isolated OpenCode delivery boundary, separation invariants, and claim status. |
@@ -115,6 +115,7 @@ Total indexed files: 342
115
115
  | `docs/current/npm-beta-publish-preparation.md` | current compatibility doc | - | Compatibility/current-era doc retained in place; migrate by summary and pointer before moving. |
116
116
  | `docs/current/omo-steal-measurement-report.md` | current or historical decision/status | - | Decision/status document; active only if named by docs/current/README.md, otherwise historical reference. |
117
117
  | `docs/current/persona-harness-detailed-usage.md` | operational stable | - | Stable non-versioned guide or index. |
118
+ | `docs/current/portable-host-adapters.md` | current active pointer/status | - | Current portable static-adapter layouts, ownership, update, and host-evidence boundary. |
118
119
  | `docs/current/persona-harness-state-and-version.md` | current compatibility doc | - | Compatibility/current-era doc retained in place; migrate by summary and pointer before moving. |
119
120
  | `docs/current/persona-workflow-roles-v0.3.md` | current compatibility doc | - | Compatibility/current-era doc retained in place; migrate by summary and pointer before moving. |
120
121
  | `docs/current/p0-finish-next-action-acceptance-record.md` | current active pointer/status | - | P0-2 exact-main finish follow-up, report-transition, package evidence, and claim boundary record. |
@@ -4,6 +4,11 @@
4
4
 
5
5
  Persona Harness의 현재 productized MVP는 Java/Spring backend Clean Code injection이다.
6
6
 
7
+ 이 문서는 선택적 OpenCode plugin 경로를 위한 Java/Spring guide다. `ph init`이
8
+ Codex, Claude Code, OpenCode, Antigravity에 만드는 static shared-skill adapter의
9
+ 설치·소유권·갱신 경계는 [Portable Host Adapters](portable-host-adapters.md)를 먼저
10
+ 보세요. 이 문서의 OpenCode 예시는 다른 host가 지원되지 않는다는 뜻이 아니다.
11
+
7
12
  목표는 같은 요구사항에서 Gradle 기반, 계층 분리, DTO boundary, Repository boundary, Service orchestration-only backend product code shape가 더 균일하게 나오도록 Java target file에 rule context를 주입하는 것이다.
8
13
 
9
14
  frontend, infra, multi-domain shared skill은 후속 확장 후보이며 현재 release-facing MVP 범위가 아니다.
@@ -1,8 +1,14 @@
1
1
  # Persona Harness Detailed Usage Notes
2
2
 
3
- This document preserves the previous root README details after the public-facing README was simplified. Use this for local install, tarball verification, release readiness, plugin wiring, and development-oriented notes.
4
-
5
- The root [README.md](../../README.md) is now focused on first-time users.
3
+ This document preserves previous root README details after the public-facing
4
+ README was simplified. It includes historical OpenCode-only experiments and
5
+ alpha-era setup instructions; do not use it as the current first-run or
6
+ host-support guide.
7
+
8
+ Start with the root [README.md](../../README.md),
9
+ [Start Here](../START-HERE.md), and [Portable Host
10
+ Adapters](portable-host-adapters.md). Use the retained notes below only when an
11
+ older maintenance or experiment record is specifically relevant.
6
12
 
7
13
  ---
8
14
 
@@ -201,11 +201,15 @@ assumes every capability by default.
201
201
 
202
202
  The current OpenCode compact route uses one explicit bounded manifest and
203
203
  remains portable because its notice/session behavior is emulated and its
204
- generic pre-tool/completion enforcement capabilities are unavailable. This is
205
- not evidence that Claude Code, Codex, or Antigravity adapters are installed or
206
- live; host-specific generation and probing remain separate 0.9.0 work.
207
- The contract does not change selection, workflow authority, Context's explicit
208
- default-off boundary, or the legacy `runtimeInjection` default of `false`.
204
+ generic pre-tool/completion enforcement capabilities are unavailable. The 0.9.0
205
+ package materializes static adapters for Claude Code, Codex, and Antigravity as
206
+ well as OpenCode; that package fact is not evidence that any host adapter is
207
+ installed in a particular project or live in a particular session. Host-native
208
+ selection and delivery remain separate observation boundaries. See [Portable
209
+ Host Adapters](portable-host-adapters.md) for the generated layouts, ownership,
210
+ and upgrade boundary. The contract does not change selection, workflow
211
+ authority, Context's explicit default-off boundary, or the legacy
212
+ `runtimeInjection` default of `false`.
209
213
 
210
214
  ## Package Boundary
211
215
 
@@ -0,0 +1,135 @@
1
+ # Portable Host Adapters
2
+
3
+ ## Purpose
4
+
5
+ Starting with Persona Harness 0.9.0, the canonical shared-skill catalog is
6
+ discoverable in four agent hosts without a Persona-specific launch command:
7
+
8
+ - Codex
9
+ - Claude Code
10
+ - OpenCode
11
+ - Antigravity
12
+
13
+ This is a **static adapter installation** boundary. It gives each host regular
14
+ project-local `SKILL.md` files with the same catalog metadata and skill body. It
15
+ does not prove that a running host session selected a skill, loaded it, or
16
+ followed its guidance.
17
+
18
+ ## Install In Any Supported Host Project
19
+
20
+ From the project root:
21
+
22
+ ```bash
23
+ npm install -D persona-harness
24
+ npx ph init
25
+ npx ph doctor
26
+ ```
27
+
28
+ `ph init` materializes the current canonical catalog in all of the following
29
+ host discovery layouts:
30
+
31
+ | Host | Generated adapter path |
32
+ | --- | --- |
33
+ | Codex and Antigravity | `.agents/skills/persona-harness-<skill-id>/SKILL.md` |
34
+ | Claude Code | `.claude/skills/persona-harness-claude-<skill-id>/SKILL.md` |
35
+ | OpenCode | `.opencode/skills/persona-harness-opencode-<skill-id>/SKILL.md` |
36
+
37
+ Use your host's normal project-skill discovery mechanism after initialization.
38
+ Persona Harness does not add a host-specific launch command or turn static
39
+ discovery into a claim that the host selected a skill in the current session.
40
+
41
+ ## What Is Shared
42
+
43
+ Every generated adapter points to the same Persona-owned catalog. It carries a
44
+ short `name` and `description`, catalog identity, adapter layout, and package
45
+ version. The catalog can advise one compact reference, such as
46
+ `deep-interview`, `grill-me`, `programming`, `debug`, or `review`; discovery
47
+ does not load every skill body.
48
+
49
+ The adapter does not, merely by being discovered:
50
+
51
+ - run shell commands;
52
+ - create or advance workflow state;
53
+ - use network, GitHub, evidence, or authority surfaces;
54
+ - grant verification or Finish authority; or
55
+ - enable Context or legacy runtime injection.
56
+
57
+ The shared-skill routing and handoff contract is defined in
58
+ [Persona Shared Skills Core](persona-shared-skills-core.md).
59
+
60
+ ## Ownership And Safe Re-runs
61
+
62
+ The init manifest records every generated adapter path and digest. `ph init`
63
+ may retain or refresh an unchanged Persona-owned adapter on a later run. It
64
+ does not adopt neighboring user skills.
65
+
66
+ Before any write, `ph init` checks each generated path as a no-follow regular
67
+ file. It fails closed without a partial write when it encounters a user-owned,
68
+ modified, missing-ownership, ambiguous, or symlinked target. In a clean
69
+ checkout without an init manifest, only a byte-identical adapter can be
70
+ re-owned.
71
+
72
+ If an adapter is intentionally customized, preserve it as user-owned and do
73
+ not expect `ph init` to replace it. Resolve the ownership collision deliberately
74
+ instead of deleting or forcing files just to make initialization pass.
75
+
76
+ ## OpenCode Duplicate Prevention
77
+
78
+ OpenCode can discover all three conventional project skill directories. The
79
+ generated `.agents` and `.claude` adapters therefore declare
80
+ `opencode/autoinvoke: "false"`; only the `.opencode` adapter declares
81
+ `opencode/autoinvoke: "true"`. This leaves one native OpenCode candidate per
82
+ canonical skill while preserving Codex, Antigravity, and Claude Code discovery.
83
+
84
+ The existing optional OpenCode plugin registration remains separate from static
85
+ adapter materialization. It may expose OpenCode-specific advisory behavior, but
86
+ it does not change other hosts' semantics.
87
+
88
+ ## Context And Runtime Boundary
89
+
90
+ `context.enabled` is explicit and default-off. Static portable adapters do not
91
+ enable it. Context delivery is currently implemented only by the optional
92
+ OpenCode adapter, and even there a local configuration or package check cannot
93
+ prove a live session received a Context block.
94
+
95
+ The legacy `runtimeInjection` setting also remains default-off. Portable
96
+ adapters make skills discoverable; they do not silently enable runtime hooks,
97
+ pre-tool enforcement, completion enforcement, session persistence, or automatic
98
+ adapter updates on a host that lacks those controls.
99
+
100
+ ## Updating A Project
101
+
102
+ Upgrade the package through your normal npm workflow, then re-run init from the
103
+ same project root:
104
+
105
+ ```bash
106
+ npm install -D persona-harness@latest
107
+ npx ph init
108
+ npx ph doctor
109
+ ```
110
+
111
+ The later init can refresh only unchanged Persona-owned adapters. It will not
112
+ overwrite custom files or follow symlinks. The optional `ph update enable`
113
+ feature is an OpenCode plugin-pin update path; it does not automatically refresh
114
+ the portable adapter layouts. A new host session is still required for a host to
115
+ pick up any updated project-local skill files.
116
+
117
+ ## What `ph doctor` Can Verify
118
+
119
+ `ph doctor` can report installed-package metadata, local integration files,
120
+ ownership diagnostics, and configured Persona routes. It cannot inspect a live
121
+ Codex, Claude Code, OpenCode, or Antigravity session. Treat host-native skill
122
+ selection, activation notices, and delivery as host evidence, not as something
123
+ proved by package installation alone.
124
+
125
+ ## Capability And Claim Boundary
126
+
127
+ The versioned portable contract records per-host capability states as
128
+ `supported`, `emulated`, or `unavailable`. It derives portable versus enforced
129
+ assurance from that validated manifest rather than from a host name. A project
130
+ that requires enforced assurance blocks if the host cannot supply the required
131
+ control.
132
+
133
+ This does not claim uniform runtime hooks or enforcement across hosts. It is a
134
+ safe, host-neutral starting point for the same Persona skill catalog, while live
135
+ host behavior remains a separately observable boundary.
@@ -25,7 +25,7 @@
25
25
  "package": {
26
26
  "channel": "unpublished",
27
27
  "scope": "source-candidate",
28
- "version": "0.9.0"
28
+ "version": "0.9.1"
29
29
  },
30
30
  "currentSourceCandidate": {
31
31
  "registryInstall": "requires-authorized-release-before-registry-install",
@@ -0,0 +1,32 @@
1
+ # v0.9.1 Release Notes
2
+
3
+ ## Portable Host Documentation
4
+
5
+ This patch publishes the supported-host documentation for the portable skill
6
+ adapters introduced in 0.9.0. The root README, Start Here guide, current
7
+ documentation index, shared-skill package README, and Korean, Japanese, and
8
+ Simplified Chinese entry pages now describe the same project-local adapter
9
+ layouts for Codex, Claude Code, OpenCode, and Antigravity.
10
+
11
+ The package also includes the canonical [Portable Host Adapters](../portable-host-adapters.md)
12
+ guide so an installed consumer can inspect the generated paths and ownership
13
+ rules without relying on repository-only documentation.
14
+
15
+ ## Boundaries Preserved
16
+
17
+ - `ph init` materializes static, manifest-owned adapter files; installation does
18
+ not claim that a live host session selected or followed a skill.
19
+ - Context and legacy runtime injection remain explicit and default-off. Current
20
+ Context delivery is still an optional OpenCode-specific runtime boundary.
21
+ - `ph update enable` remains the optional OpenCode plugin-pin path. Updating
22
+ portable adapters requires a later `ph init` and only refreshes unchanged
23
+ Persona-owned files.
24
+ - User-owned, modified, ambiguous, or symlinked adapter targets remain
25
+ fail-closed rather than being overwritten.
26
+
27
+ ## Verification
28
+
29
+ The release path verifies documentation taxonomy and links, the public support
30
+ matrix, package-file policy, TypeScript type safety, a canonical packed package,
31
+ an isolated installed package with `sourceFallback=false`, protected CI, and
32
+ registry provenance.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "persona-harness",
3
- "version": "0.9.0",
3
+ "version": "0.9.1",
4
4
  "private": false,
5
5
  "type": "module",
6
6
  "packageManager": "npm@10.8.2",
@@ -62,6 +62,7 @@
62
62
  "docs/current/v0.3.1-external-tester-feedback-template.md",
63
63
  "docs/current/v0.3.0-alpha-publish-readiness.md",
64
64
  "docs/current/persona-harness-detailed-usage.md",
65
+ "docs/current/portable-host-adapters.md",
65
66
  "docs/current/context-program-status.md",
66
67
  "docs/current/context-contributor-map.json",
67
68
  "docs/current/context-external-validation.md",
@@ -37,6 +37,26 @@ metadata and Persona's optional automatic advisory-route configuration
37
37
  separately, and leaves adapter reachability, current host-native selection, and
38
38
  host route delivery as `UNOBSERVED` unless the host itself provides evidence.
39
39
 
40
+ ## Project-local host layouts
41
+
42
+ `npx ph init` materializes this catalog as regular, manifest-owned adapters in
43
+ each supported host layout:
44
+
45
+ | Host | Adapter path |
46
+ | --- | --- |
47
+ | Codex and Antigravity | `.agents/skills/persona-harness-<skill-id>/SKILL.md` |
48
+ | Claude Code | `.claude/skills/persona-harness-claude-<skill-id>/SKILL.md` |
49
+ | OpenCode | `.opencode/skills/persona-harness-opencode-<skill-id>/SKILL.md` |
50
+
51
+ Init may refresh only an unchanged Persona-owned adapter. User-owned, modified,
52
+ or symlinked targets fail closed rather than being overwritten. The adapters
53
+ make the catalog discoverable but do not enable Context, legacy runtime
54
+ injection, workflow commands, shell, network, authority, or completion state.
55
+ The generated OpenCode-native path is the only one eligible for OpenCode
56
+ automatic discovery, preventing duplicate candidates from the other compatible
57
+ layouts. See [Portable Host Adapters](../../docs/current/portable-host-adapters.md)
58
+ for the full upgrade and host-evidence boundary.
59
+
40
60
  ## Portable Contract
41
61
 
42
62
  The root package exposes `persona-portable-skill-contract.1` through its
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@persona-harness/shared-skills",
3
- "version": "0.9.0",
3
+ "version": "0.9.1",
4
4
  "type": "module",
5
5
  "private": true,
6
6
  "description": "Persona-owned portable skill procedures and optional overlays",