@awebai/oats 0.24.0 → 0.24.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/bin/oats.mjs CHANGED
@@ -23,7 +23,7 @@ import { enableTmuxMouse, tmuxConfigPath, tmuxMouseEnabled } from "../lib/tmux-c
23
23
  import {
24
24
  LAYERS, WORK_MODES, LEGACY_HOME_CAPABILITIES_DIR, OATS_LOCK_FILE, OATS_VERSION, OAS_SCOPE_REMEDY, RETIRED_CAPABILITIES, detectOasScopes, retiredCapabilityReason, configChain, configCapabilityEntries, manifestOperations,
25
25
  acquireCapability, restoreCapabilities, marketplaceCapabilities,
26
- capabilityManifests, capabilityManifest, capabilityMissingRequires, capabilityIntegrity, capabilityTrust, capabilityExecutablePath, activateCapturedScaffold, loadCapturedDispatch, prepareCapturedComposition, resolveCapturedHelper, capturedNativeSessionAvailability, scaffoldCapturedInstance, startCapturedInstanceSession, withCapturedBindingFile, withCapturedInvocationContextFile,
26
+ capabilityManifests, capabilityManifest, capabilityMissingRequires, capabilityIntegrity, capabilityTrust, capabilityExecutablePath, activateCapturedScaffold, loadCapturedDispatch, inspectPortableOnboarding, prepareCapturedComposition, resolveCapturedHelper, capturedNativeSessionAvailability, scaffoldCapturedInstance, startCapturedInstanceSession, withCapturedBindingFile, withCapturedInvocationContextFile,
27
27
  readCapabilityLocks, writeCapabilityLock, admitCapturedAction, beginCapturedIntent, settleCapturedIntent,
28
28
  parsePackageSource, inspectGitSourceRoot, acquirePackage, restorePackages, listInstalledPackages, readPackageLocks, readLockedConfigTemplates,
29
29
  officialCapabilityPackage, officialPackageCatalog,
@@ -95,6 +95,21 @@ const CLI_BIN = realpathSync(fileURLToPath(import.meta.url));
95
95
  const jsonFail = (code, message, details) => { console.log(JSON.stringify({ schemaVersion: 1, ok: false, error: { code, message: String(message), ...(details !== undefined ? { details } : {}) } })); process.exit(1); };
96
96
  const jsonOk = (result) => { console.log(JSON.stringify({ schemaVersion: 1, ok: true, result })); };
97
97
 
98
+ function inspectOnboardingCmd() {
99
+ const fail = (code, message) => JSON_MODE ? jsonFail(code, message) : die(message);
100
+ let file;
101
+ for (let index = 1; index < args.length; index++) {
102
+ if (args[index] === "--json") continue;
103
+ if (args[index] !== "--request" || file !== undefined || !args[index + 1] || args[index + 1].startsWith("--")) fail("E_BAD_ARGS", "source inspection accepts one --request <absolute-json> and --json only");
104
+ file = args[++index];
105
+ }
106
+ try {
107
+ const input = readPortablePreparationRequest({ file });
108
+ const result = inspectPortableOnboarding(input);
109
+ if (JSON_MODE) jsonOk(result); else console.log(JSON.stringify(result, null, 2));
110
+ } catch (error) { fail(error.code || "E_INSPECT_FAILED", error.message); }
111
+ }
112
+
98
113
  function prepareCmd() {
99
114
  const fail = (code, message, details) => JSON_MODE ? jsonFail(code, message, details) : die(message);
100
115
  const values = new Map(), allowed = new Set(["request", "dir", "source", "revision", "export", "alias", "workspace", "workspace-revision", "work"]);
@@ -4867,6 +4882,16 @@ catch (error) {
4867
4882
  if (JSON_MODE) jsonFail(error.code || "E_BAD_ARGS", error.message);
4868
4883
  die(error.message);
4869
4884
  }
4885
+ const sourceInspection = (cmd === "inspect" || captured?.args[0] === "inspect")
4886
+ && args.some(arg => arg === "--request" || arg.startsWith("--request="));
4887
+ if (sourceInspection) {
4888
+ if (captured) {
4889
+ if (JSON_MODE) jsonFail("E_BAD_ARGS", "source inspection is explicit new work and cannot use captured selectors");
4890
+ die("source inspection is explicit new work and cannot use captured selectors");
4891
+ }
4892
+ if (args.includes("--help") || args.includes("-h")) { if (JSON_MODE) jsonOk({ command: cmd, usage: usageLinesFor(cmd) }); else usageFor(cmd); process.exit(0); }
4893
+ inspectOnboardingCmd(); process.exit(0);
4894
+ }
4870
4895
  if (cmd === "prepare" || captured?.args[0] === "prepare") {
4871
4896
  if (captured) {
4872
4897
  if (JSON_MODE) jsonFail("E_BAD_ARGS", "prepare is explicit new work and cannot use captured selectors");
@@ -5184,6 +5209,9 @@ The turn record (core — every conversation captured, searchable, replicated):
5184
5209
  design, repo checkout only; see
5185
5210
  packages/experimental/README.md
5186
5211
 
5212
+ oats inspect --request <absolute-json-file> [--json]
5213
+ read-only fresh source/workspace/member metadata;
5214
+ no current config, provider execution or preparation authority
5187
5215
  oats prepare --request <absolute-json-file> [--json]
5188
5216
  complete public preparation input; no mixed flags,
5189
5217
  inherited binding, implicit setup or launch authority
@@ -61,11 +61,19 @@ export function validateWorkerSelection(source,context,request,inspected){
61
61
  if(h?.key!==CAPTURED_WORKER_KEY||h.name!=='memory-harvest'||subject?.kind!=='helper'||subject.name!==h.name||subject.provider?.kind!=='capability'||subject.provider.capability!=='oats.okf'||!same(subject.provider,subject.definition?.owner))fail('E_CAPTURED_HELPER','wrong qualified helper identity');
62
62
  const api={schemaVersion:1,api:{contract:'oats.captured-session',version:2,available:true,backends:['tmux','herdr']},readiness:{status:'not-checked'}};
63
63
  if(!same(selected.launch,api)||!same(inspected.nativeSession,api))fail('E_CAPTURED_HELPER','unknown captured native public API');
64
- // Exact retained model/runtime data is required; API availability alone is
65
- // never qualification. Missing public selection stays closed, no private read.
64
+ // Preserve the exact retained selection. Ordinary Claude/Codex may select
65
+ // null to use their own native model configuration; Pi's strict SDK slice
66
+ // still needs an explicit model and its previously qualified sole-OKF profile.
67
+ // API availability/approval is NOT native readiness. The unchanged public
68
+ // scaffold/start path enforces the entire retained resource/hook closure.
66
69
  const launch=selected.launchSelection;
67
- if(!obj(launch)||launch.runtime!==source.execution.runtime||launch.runtime!=='pi'||typeof launch.model!=='string'||!launch.model.trim()||(source.execution.model!==null&&launch.model!==source.execution.model))fail('E_CAPTURED_HELPER','retained helper launch runtime/model missing or mismatched');
68
- if(!Array.isArray(inspected.capabilities)||inspected.capabilities.length!==1||inspected.capabilities[0].id!=='oats.okf'||inspected.capabilities[0].approval!=='approved')fail('E_CAPTURED_HELPER','only the exact approved default-OKF helper profile is qualified in this slice');
70
+ if(!obj(launch)||launch.runtime!==source.execution.runtime||!['pi','claude','codex'].includes(launch.runtime)
71
+ || !(launch.model===null?launch.runtime!=='pi':typeof launch.model==='string'&&!!launch.model.trim())
72
+ || (source.execution.model!==null&&launch.model!==source.execution.model))fail('E_CAPTURED_HELPER','retained helper launch runtime/model missing or mismatched');
73
+ const capabilities=inspected.capabilities;
74
+ if(!Array.isArray(capabilities)||!capabilities.length||capabilities.some(c=>!obj(c)||typeof c.id!=='string'||!/^(?:@?[a-z0-9][a-z0-9._-]*[./])[a-z0-9][a-z0-9._/-]*$/.test(c.id)||!['approved','not-required'].includes(c.approval))
75
+ || new Set(capabilities.map(c=>c.id)).size!==capabilities.length||!capabilities.some(c=>c.id==='oats.okf'&&c.approval==='approved'))fail('E_CAPTURED_HELPER','complete selected helper capability closure requires current approval');
76
+ if(launch.runtime==='pi'&&capabilities.length!==1)fail('E_CAPTURED_HELPER','enriched strict-Pi helper profile is not qualified; required capabilities were not removed');
69
77
  if(binding(selected.executionBinding).deployment!==source.executionBinding.deployment||!same(inspected.resolution,selected.executionBinding.resolution))fail('E_CAPTURED_HELPER','helper inspection resolution/deployment differs');
70
78
  return {schemaVersion:1,sourceBinding:JSON.parse(JSON.stringify(source.executionBinding)),helperBinding:JSON.parse(JSON.stringify(selected.executionBinding)),helper:JSON.parse(JSON.stringify(h)),request,requestHash:hash(request),sourceIntent:JSON.parse(JSON.stringify(context.intent)),sourceIncarnationId:context.instance.incarnationId,launchSelection:JSON.parse(JSON.stringify(launch))};
71
79
  }
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "capability": "oats.okf",
3
3
  "command": "okf",
4
- "version": "2.1.0",
4
+ "version": "2.1.1",
5
5
  "compatibility": {
6
6
  "oats": ">=0.24.0"
7
7
  },
@@ -4,6 +4,10 @@ A **capability package** is OATS's reusable distribution unit. It can contribute
4
4
  skills, instance instructions, requirements, namespaced commands, and approved
5
5
  lifecycle hooks. Configuration—not the package—decides which souls receive it.
6
6
 
7
+ The [official marketplace policy](official-marketplace.md) defines the reviewed
8
+ package list and its acceptance criteria. Finding an official capability does not
9
+ install, activate or approve it; those remain explicit, separate choices.
10
+
7
11
  An **integration** is a capability package that implements one exclusive
8
12
  fundamental layer: `knowledge`, `messaging`, or `tasks`. General capabilities
9
13
  claim no layer and compose additively.
@@ -0,0 +1,70 @@
1
+ # OATS redesign — program board
2
+
3
+ **Purpose:** the one accurate view of every work stream in the redesign, what is on main, what is in flight, who owns it, and what blocks it. Lead: `oats-expert` (redesign lead). Updated whenever anything merges, is returned, or reality changes. Older per-lane boards are superseded by this file.
4
+
5
+ **Last update:** 2026-09-20 17:40Z · main `87292f40` · OKF `v2.1.1`
6
+
7
+ Legend: ✅ on main/published · 🔄 in flight (PR/branch) · 🟡 preserved, not adopted · ⬜ not started · ⛔ blocked
8
+
9
+ ## Streams at a glance
10
+
11
+ | # | Stream | State | Owner | Next action |
12
+ |---|---|---|---|---|
13
+ | S1 | Knowledge capability contract rework (kernel↔provider boundary, OKF 2.x) | ✅ shipped 0.24 / **OKF 2.1.1 released** (PR4 merged; mirror, catalog ref, soul source bumped) | P | done for this phase; OATS 0.24.1 cut after L's custody fix |
14
+ | S2 | Workspace/Portable Souls adoption of the OATS repos | ✅ PR23 + PR24 merged · ✅ member `oats.yaml` on main in oats-okf/aweb/authoring/jira · ⛔ oats-dev, oats-linear (no push access, human) | M, L, lead | human grants access → push 0434f4ef/8c183c37; then pin imports; then fresh deployment gate |
15
+ | S3 | Messaging capability readiness on the new infrastructure (aweb) | 🔄 codec PR2 + custody WIP · needs profile pin | P | lead pins pilot profile + answers authority question |
16
+ | S4 | Official capabilities `oats.core` / `oats.setup` + explicit default + onboarding `oats-setup-expert` | 🔄 D1 in progress (P, `feat/d1-oats-core-setup`, package → `oats.framework` 1.1.0) · 🔄 D2 in progress (L) · ⬜ D3 | P (D1), L (D2, D3) | review D1/D2 PRs; assign D3 after D2 |
17
+ | S5 | Official marketplace = reviewed list in oats repo | ✅ D4 merged PR26 (`docs/official-marketplace.md`, policy pointer) · ⬜ `oats.core`/`oats.setup` entries after D1 release | M | add entries at D1 release |
18
+ | S6 | Five expert souls created in the oats repo (`souls/<name>/`) | 🔄 assigned to M (`feat/s6-expert-soul-editions`) from the reviewed candidate; `souls/oats-expert` on main | M | review PR; `oats.core` follow-up after D1 |
19
+ | S7 | Centralised per-soul knowledge in `oats-knowledge` (migration + PR-only learning) | 🟡 35 curated concepts uncommitted on local `curation/expert-knowledge`; bootstrap proven on personal repo; `awebai/oats-knowledge` EMPTY, private | lead + human (visibility) | decide visibility; publish curation as PR; point souls' `stores.oats` at it |
20
+ | S8 | Desktop parity (marketplace view, soul creation with `oats.core`, onboarding flow) | ⬜ after S4/S5 | fresh Desktop engineer (blocked: `claude` absent) | pick runtime; spawn |
21
+
22
+ ## S1 — Knowledge capability contract rework
23
+ - ✅ Provider-neutral contract, binding wire v1, helper/input contract, retained execution: OATS 0.24.0 + OKF 2.1.0 (f20f8e57) published.
24
+ - ✅ **oats-okf PR4 merged (9f90ee9) → OKF v2.1.1 (01b48dfc)**: Claude/Codex helpers with complete approved closure accepted; strict-Pi unchanged. Framework mirror/inventory finalized, catalog ref and `souls/oats-expert` source → v2.1.1 (16c5c939, 87292f40).
25
+ - Open: strict-Pi "enriched profile" remains unqualified (documented, not hidden).
26
+
27
+ ## S2 — Workspace adoption of the OATS repos
28
+ - ✅ **PR23 merged f6d5a89b**: `oats-workspace.yaml` (7 members, `imports: []`), `oats.yaml` (exports souls/oats-expert, oats-package, capabilities/oats-authoring), transitional `souls/oats-expert/` edition, `docs/workspace-adoption.md`, layout tests.
29
+ - ✅ **PR24 merged da38e5a9**: deletion of `skills/oats-portable-setup` + `oats inspect --request` read-only seam (ACCEPTED as the public inspection route); full gate 1621/0.
30
+ - ✅ Member `oats.yaml` merged to main: oats-okf #3 (fec78a20), oats-aweb #1 (069ea2f6), oats-authoring #1 (54183a6a), oats-jira #1 (2f855daf).
31
+ - ⛔ oats-dev (0434f4ef) and oats-linear (8c183c37): neither M nor the lead's GitHub account has push — **human must grant access or push**.
32
+ - ⬜ `imports:` pin of `souls/oats-expert` at its published revision (after member indexes).
33
+ - ⬜ Fresh local deployment from the shared definition (P1.5) — the real acceptance gate.
34
+
35
+ ## S3 — Messaging (aweb) on the new infrastructure
36
+ - Facts: released aweb 1.10.3 has no binding interface; broker refuses. aw 1.36.1 broker calls `oats session inspect/input --home H`; never restarts stopped runtime; strict-Pi print mode can't take session input.
37
+ - 🔄 oats-aweb **PR2** codec (165b20e) + uncommitted `lib/captured-execution.mjs` (6/6).
38
+ - ✅ Lead answered (d9d912a4): pilot primary = Pi strict print host explicit model; helper = Pi sole-OKF (Claude/Codex allowed by 2.1.1); authority = existing HOME route + L's custody fix, gated on `oats >=0.24.1`; no new grant mechanism. P delivers aweb 1.11.0 PR.
39
+ - 🔄 L finding c21e36ff accepted; fix assigned (L, `fix/home-route-captured-custody`): reuse `readCapturedInstanceAuthority` on the HOME-only route, refuse before transport.
40
+
41
+ ## S4 — `oats.core` / `oats.setup` / onboarding
42
+ - ✅ Decision + plan D1–D4 on main 18af53be; docs reference as accepted-not-shipped.
43
+ - 🔄 **D1** (P, started 16:29Z; package identity confirmed: rename distribution package to `oats.framework` 1.1.0, capabilities 1.0.0, `oats.knowledge-theory` unchanged) package `oats.core` (`oats-operate`, `oats-souls`, oats.md injection) and `oats.setup` (oats-config, oats-packages, adoption guidance) under `oats-package/capabilities/`. Owner P.
44
+ - 🔄 **D2** (L, after custody fix) soul creation writes explicit `requires.capabilities.oats.core`; kernel skill list de-ambiented (one-release coexistence); checked-in souls updated. Owner L.
45
+ - ⬜ **D3** onboarding creates + instantiates `oats-setup-expert` (edition in `souls/`). Owner L (+M edition).
46
+ - Exit: fresh onboarding → running setup expert; created soul shows `oats.core`; kernel ships no ambient operational skill.
47
+
48
+ ## S5 — Official marketplace
49
+ - ✅ Mechanism exists (`package-catalog.json`, `officialPackageCatalog()`); decision names it the official list.
50
+ - ✅ **D4 merged PR26 (786490ae)**: `docs/official-marketplace.md`, `package-catalog.json` policy pointer (inert to the reader), README/packages/capabilities links, D3 sketch in adoption guide. ⬜ entries for `oats.core`/`oats.setup` at D1 release. Desktop view → S8.
51
+
52
+ ## S6 — Five expert souls in the oats repo
53
+ - Roster (decided): `oats-expert`, `oats-kernel-expert`, `oats-desktop-expert`, `market-research-expert`, `oats-assistant`.
54
+ - 🟡 Candidate: `expert-roster` worktree (b5e233b9 + 519 uncommitted changes: five `agents/<name>/soul/` + legacy roster deletions). Reviewed earlier; NOT committed.
55
+ - ✅ `souls/oats-expert` transitional edition on main already declares owns/reads for the five nodes.
56
+ - 🔄 Assigned to M (17:05Z): create `souls/<name>/` editions for the other four from the candidate; each declares `oats.core` explicitly (S4 rule) + `oats.okf`/`oats.aweb` sources; export in `oats.yaml`. Legacy `agents/` roster retirement is a separate, later cutover.
57
+
58
+ ## S7 — Centralised knowledge in `oats-knowledge`
59
+ - 🟡 Curated corpus: 35 concepts (five nodes) on local `curation/expert-knowledge` in `/Users/pepe-reyero/OATS-workspace/oats-knowledge`, **uncommitted**. Bootstrap + one PR-only harvest already proven on `josep-reyero/oats-knowledge` (3 commits).
60
+ - ⛔ Target `awebai/oats-knowledge` is EMPTY and PRIVATE; **visibility undecided** (stated requirement: public). Human decision needed before publishing.
61
+ - ⬜ Then: push bootstrap + curation as PR to awebai; bind `stores.oats` in the pilot deployment; prove fresh-reader + Git-PR learning with the new souls; retire old in-soul knowledge (`agents/*/soul/knowledge`) as a final cutover.
62
+
63
+ ## S8 — Desktop parity
64
+ - ⬜ After S4/S5: official marketplace view/search; soul creation showing `oats.core`; onboarding flow; redesign parity vs `Oats UX Redesign and Desktop Discovery (1)`.
65
+ - ⛔ Fresh `oats-desktop-engineer` not spawned: `claude` not on PATH → choose Pi/Codex or install (human).
66
+
67
+ ## Blockers needing the human
68
+ 1. `awebai/oats-knowledge` visibility (public vs private) — gates S7 publication.
69
+ 2. Push access to `awebai/oats-dev` and `awebai/oats-linear` for `josep-reyero` (or human pushes M's exact commits 0434f4ef / 8c183c37 as `oats.yaml`) — gates S2 completion.
70
+ 3. Desktop engineer runtime (Claude absent) — gates S8.
@@ -0,0 +1,287 @@
1
+ # OATS adoption plan: workspace first, knowledge and experts second
2
+
3
+ **Date:** 2026-09-20
4
+
5
+ **Status:** Phase1 implementation authorised by the human, using the existing developers under lead supervision/review. The workspace home is confirmed as `oats`; `oats-dev` remains development capabilities. This does not claim completed conversion or authorise unspecified new contracts, credential operations or live deployment mutations.
6
+
7
+ ## Goal and order
8
+
9
+ 1. Put OATS development onto the Git-workspace and Portable Souls architecture: a real shared workspace definition, qualified repository exports, by-reference sources and usable local deployments.
10
+ 2. Centralise the curated knowledge and adopt the five expertise souls on that foundation.
11
+ 3. Complete Desktop design/feature parity against the resulting supported flows.
12
+
13
+ A distribution work package (below, D1–D4) accompanies phase1: the kernel's operational skills become the official capabilities `oats.core` and `oats.setup`, every soul declares `oats.core` explicitly by default, onboarding creates an `oats-setup-expert`, and the official marketplace is the reviewed list in this repository.
14
+
15
+ The second phase does not run as an unrelated bulk migration while the first is still changing underneath it. Necessary generic knowledge/provider boundary fixes belong in phase1; default OKF behavior and the actual corpus/roster cutover belong in phase2.
16
+
17
+ ## Target arrangement
18
+
19
+ Approved repository responsibilities following the framework-hosted workspace choice. The two-phase order is unchanged:
20
+
21
+ | Repository | Role in the new setup |
22
+ |---|---|
23
+ | `oats` | Kernel, adapters, Desktop and portable soul exports through `oats.yaml`; hosts the shared development workspace in `oats-workspace.yaml`; ships the official capabilities `oats.core` and `oats.setup` and the reviewed official package list (`package-catalog.json`) |
24
+ | `oats-dev` | Reusable OATS development capabilities, including selected review skills/behavior; no longer responsible for defining the new workspace through a package template |
25
+ | `oats-okf` | Reference knowledge capability and its complete reading/capture/judgment/delivery behavior |
26
+ | `oats-aweb` | Messaging capability and its provider-owned identity/team/wake behavior |
27
+ | `oats-authoring` | Reusable authoring support |
28
+ | `oats-jira`, `oats-linear` | Optional task capabilities; workspace membership does not activate them |
29
+ | `oats-knowledge` | Curated accepted expertise, not executable soul definitions, working transcripts or a copy of framework documentation |
30
+
31
+ A workspace is a logical role and does not require a dedicated repository. The human has selected co-hosting in `oats`, preserving `oats-dev`'s capability purpose. Keep the `oats.dev` package where its reusable behavior is useful; separately review compatibility and the legacy template. Preserve published tags/payloads and exact restores. Merely adopting the workspace does not activate every capability.
32
+
33
+ `oats-workspace.yaml` and `oats.yaml` have separate contracts even when co-located. Admit the framework repository explicitly if it participates as a member, and verify matching reciprocal observations. Importing a public OATS soul or installing the framework must NOT implicitly select or enroll an adopter in the framework's development workspace. A separate workspace repository remains an option if independent permissions or lifecycle become necessary.
34
+
35
+ The shared workspace is **not a shared live runtime**. Each operator retains local deployment mappings, runtime/authentication, state and explicit approvals. Config and nonsecret lock/template provenance can be Git-shared where supported; credentials and live instance state cannot. Git access, organizational admission, executable approval and messaging enrollment remain distinct.
36
+
37
+ ## Verified starting point
38
+
39
+ - Kernel/Pi/Desktop0.24.0 and OKF2.1.0 are released. Workspace/source codecs, discovery, retained composition and scoped execution/provider machinery already exist. This is not a kernel rewrite from zero.
40
+ - A read-only September20 inventory found no root `oats-workspace.yaml` in either `oats` or `oats-dev` and no root `oats.yaml` in the framework or the six inspected capability/development repositories. The selected knowledge repository is not yet initialized. These observations must be refreshed against exact heads before editing.
41
+ - The default development package still supplies a legacy config template and `oats.review`; these are capability/template exports, not a Git workspace definition.
42
+ - The checked-in roster remains legacy. A five-role candidate and curated corpus are preserved but not validly published/adopted as the new portable setup.
43
+ - Earlier live native/directory-learning evidence is valuable but does not prove our actual Git workspace, two-operator deployment, private messaging or Git-PR learning cutover.
44
+ - Current source contains the approved forward correction of the accidentally integrated held record patch. Preserve repaired history and its active-content exclusion; do not reopen that incident or repeat closed test matrices.
45
+
46
+ # Phase 1 — adopt the workspace and Portable Souls architecture
47
+
48
+ ## P1.1 — freeze the repository, source and runtime map
49
+
50
+ **Owner:** integration lead, with kernel/provider/deployment owners.
51
+
52
+ Produce one bounded implementation checklist from the actual current code and chosen package revisions:
53
+
54
+ - Exact workspace repository and intended member repositories; external consumption is not membership.
55
+ - Source/export locations for the necessary transitional roles and the eventual five experts. Recommended reusable soul editions remain in the framework repository, separate from live legacy `agents/` sources.
56
+ - Compatible package/source revisions, required capabilities and operator-selectable bindings.
57
+ - Actual runtime/backend and messaging-delivery profiles to support, including intentional local differences. Do not replace native credentials/profiles or copy one operator's raw configuration to another.
58
+ - Existing support versus declaration/resource drift versus provider work versus genuinely missing kernel/CLI seams. Every missing generic field or authority change gets a concrete proposal; reuse the current parser/resolver/invocation engine.
59
+
60
+ **Deliverable:** an exact repository/change/owner matrix and a small gap list, not another open-ended architecture investigation.
61
+
62
+ ## P1.2 — author the real workspace
63
+
64
+ **Owner:** workspace/deployment owner, reviewed by the integration lead.
65
+
66
+ Add `oats-workspace.yaml` to the confirmed workspace home `oats` using the shipped schema, alongside that repository's separate `oats.yaml` export index:
67
+
68
+ - Intended members, selected source imports with real reviewed revisions and aliases.
69
+ - Shared defaults bounded by soul requirements, not a new repository-level policy hierarchy.
70
+ - Provider-owned knowledge declarations and team aliases only where meaningful and safe to publish.
71
+ - Explicit discovery/catalog references if needed, not an OATS-hosted registry.
72
+
73
+ Do not advertise a planned source export or uninitialized knowledge base as usable. Do not commit secrets, private runtime state or machine-specific execution paths into the public workspace. The phase2 knowledge destination can remain deliberately unresolved until it is initialized and approved.
74
+
75
+ **Deliverable:** validated, reviewable workspace definition and a short explanation of shared versus operator-local choices.
76
+
77
+ ## P1.3 — publish repository indexes and reciprocal admission
78
+
79
+ **Owner:** each repository/package owner, coordinated by the integration lead.
80
+
81
+ For every intended member:
82
+
83
+ - Add `oats.yaml` with the correct workspace backlink and actual exports.
84
+ - Advertise package roots containing real `oats-package.json` files, not arbitrary npm roots.
85
+ - Advertise only source-complete souls with explicit definition paths; imported souls remain references, not adopter-owned copies.
86
+ - Add knowledge exports only when the provider declaration/base actually exists. A metadata-only bootstrap of the knowledge repository must not masquerade as corpus migration or a ready store.
87
+ - Preserve package identities, compatible version floors, immutable releases and old locked revisions.
88
+
89
+ Coordinate publication of backlinks and workspace admission. One side alone is not membership. Resolve the existing contract's default-branch observations and explicit revisions honestly; do not invent mutually dependent future commit pins or guess `main` when the host's default branch is required.
90
+
91
+ **Deliverable:** discovery can qualify intended membership and enumerate real exports across repositories without requiring every source checkout to be present locally.
92
+
93
+ ## P1.4 — make the declared setup operational
94
+
95
+ **Owner:** kernel/lifecycle owner and the owners of the selected capabilities.
96
+
97
+ This is **adoption and validation first**, not a mandate to write new runtime code. Exercise the already shipped paths with correct declarations and inputs before changing them. A new inspection convenience is not automatically an adoption blocker; preserve it as a separate proposal unless necessity is demonstrated. Provider adaptation must identify the minimum usable completion path, not merely replace one refusal with a later refusal.
98
+
99
+ Close only demonstrated gaps needed by the chosen workspace/profile:
100
+
101
+ - Public inspection/preparation, explicit artifact approval, retained resolution, scaffold and native start through supported CLI/API paths.
102
+ - Complete source/skill/capability closure; independent source, deployment and work-target identities.
103
+ - Actual provider bindings, required hooks and their truthful readiness. A parsed team/store declaration is not enrollment or a working provider.
104
+ - Required continuation, capture and applicable wake/retire/recovery behavior for the selected profile. A path that is still unsupported must be named and resolved, not hidden behind successful start-only evidence.
105
+ - Version-correct operational skills and guidance, including known stale claims that public request/context/launch inputs are unavailable.
106
+ - Any minimal Desktop compatibility needed to observe/refuse operations truthfully; full redesign parity is later.
107
+
108
+ Use an explicitly agreed transitional edition of an existing role for the pilot, not a new fictitious owner or bootstrap host. Retain its actual requirements. Any temporary acceptance store/profile must be explicitly scoped and must not be counted as production knowledge adoption. Do not silently remove messaging, knowledge, plugins or other requirements to make it launch.
109
+
110
+ New package defaults or executable changes require appropriate release/pinning/approval. Adding metadata does not itself require replacing stable runtime components, but a real runtime change is not deployed merely because it reached main.
111
+
112
+ **Deliverable:** one reproducible operator path from the shared Git definition to a genuinely usable, retained portable instance under the chosen profile.
113
+
114
+ ## P1.5 — adopt fresh local deployments without disturbing existing work
115
+
116
+ **Owner:** each local operator; coordinated readiness/evidence review by the integration lead.
117
+
118
+ - Use a fresh explicit deployment location where existing managed state conflicts. Preserve old configs, locks, knowledge, identities, sessions, worktrees and pending jobs.
119
+ - Map local repositories/work targets deliberately; operators need not have identical directory layouts.
120
+ - Review exact software and restore/acquire through supported tooling. Keep native auth and deliberately chosen model/delivery behavior local.
121
+ - Verify source discovery, reciprocal admission, imported identity, retained composition and actual start/continuation on the approved test host.
122
+ - Check the second operator's declarations/readiness and an actual message/reply through its own identity without requesting model or GUI tests on that machine. Existing legacy connectivity is not automatically new-profile qualification.
123
+ - Exercise relevant source-unavailability/update safeguards using owned test fixtures, never by deleting working source repositories or modifying retained artifacts.
124
+
125
+ ### Phase1 exit gate
126
+
127
+ The shared workspace and repository declarations are published and discoverable; a fresh deployment can select a real portable source and complete the supported prepare/approve/scaffold/start path with its declared requirements. Required lifecycle/provider limitations are resolved or explicitly constrain the qualified profile. Both operators understand the same shared definition and their own local differences. Old live deployments remain preserved.
128
+
129
+ **Seven YAML files alone do not satisfy this gate.** Nor does an isolated fixture establish production provider readiness. No claim that the five new knowledge-backed experts are adopted is made yet.
130
+
131
+ # Distribution — official capabilities and the official marketplace
132
+
133
+ **Status:** direction accepted by the human on 2026-09-20 (decision `agents/oats-expert/soul/knowledge/decisions/official-capabilities-oats-core-setup-and-marketplace.md`). Runs alongside phase1 once the current lanes' PRs are integrated; it changes how OATS itself is distributed and must be in place before phase2 souls are published, since those souls declare their capabilities explicitly.
134
+
135
+ Today the skills that teach an agent to operate OATS (`oats`, `oats-config`, `oats-packages`) and the "you run on OATS" injection are ambient kernel content. Under Portable Souls a soul declares its capabilities and their sources, so this knowledge must be packaged as capabilities a soul can declare, remove or replace.
136
+
137
+ ## D1 — package `oats.core` and `oats.setup` from the oats repository
138
+
139
+ **Owner:** capability/provider owner (packaging), reviewed by the integration lead.
140
+
141
+ - `oats.core` — day-to-day operation, present on every soul by default: skill `oats-operate` (status, spawn, retire, doctor, lifecycle, instance layout) and skill `oats-souls` (soul discovery, spawn relations/linkage, roster, workspace-member souls), plus the former `injects/oats.md` injection.
142
+ - `oats.setup` — deployment and workspace configuration ("OATS Soul Setup"): the former `oats-config` and `oats-packages` skills, workspace adoption guidance and package acquisition/trust/lock knowledge.
143
+ - Both live under the framework's `oats-package/capabilities/` beside `oats-knowledge-theory`, are exported through the repository package manifest and `oats.yaml`, and are versioned/locked like any package. Content is moved from the existing skills, not re-authored; stale claims are corrected in the move.
144
+ - The `instance-boundary` injection, work-mode briefings and config-declared injections **stay kernel-owned** — they describe the layout the kernel itself creates.
145
+
146
+ **Deliverable:** two installable capabilities with manifests and focused inventory tests; the kernel unchanged except for registering nothing new.
147
+
148
+ ## D2 — explicit default `oats.core` on every soul; kernel skills de-ambiented
149
+
150
+ **Owner:** kernel/lifecycle owner.
151
+
152
+ - Every soul-creation path (CLI, Desktop, setup guidance) writes `requires.capabilities.oats.core` with its source into the soul definition. It is visible in the file and the user can remove it.
153
+ - The kernel does **not** inject `oats.core` when absent; `oats doctor` reports a soul that has neither `oats.core` nor a deliberate opt-out note, as information, not an error.
154
+ - The hard-coded kernel skill list and the `kernel:oats` injection are retired once souls carry `oats.core`. Transition: both coexist for one release, with existing kernel-listed skills marked deprecated in favor of the capability.
155
+ - Existing checked-in souls in this repository are updated to declare `oats.core` explicitly as part of the same change.
156
+
157
+ **Deliverable:** soul definitions are honest about OATS operational knowledge; no hidden kernel dependency.
158
+
159
+ ## D3 — onboarding creates and instantiates `oats-setup-expert`
160
+
161
+ **Owner:** kernel/lifecycle owner, with the workspace/source owner for the soul edition.
162
+
163
+ - Onboarding a new workspace (or a fresh deployment of one) produces a soul `oats-setup-expert` whose definition declares **both** `oats.core` and `oats.setup`, prepares/approves its artifacts under the normal approval bar, and instantiates it.
164
+ - The setup expert then drives adoption: declaring/adopting member repositories, selecting fundamental-layer capabilities, creating further souls (each with explicit `oats.core`), and walking the operator through trust/approval steps. Setup becomes a conversation with a competent soul, not a wall of flags.
165
+ - No new bootstrap authority: prepare/approve/scaffold/start remain the shipped path; onboarding only chooses the first soul and its capabilities. The entry point (CLI verb, Desktop flow, or both) and its relation to the version-scoped `oats init`/`oats use` compatibility path is proposed and reviewed separately; do not document a command before it exists.
166
+ - The soul edition itself is source-complete and exported from the oats repository like the other framework souls.
167
+
168
+ **Deliverable:** one reproducible path from "empty workspace" to a running `oats-setup-expert` that can configure the rest.
169
+
170
+ ## D4 — the official marketplace is the reviewed list in the oats repository
171
+
172
+ **Owner:** workspace/source owner (list and docs); Desktop owner for the view in the parity phase.
173
+
174
+ - `package-catalog.json` in `awebai/oats` (read today by `officialPackageCatalog()`) **is** the official marketplace. Listing = official. Do not build a second registry.
175
+ - Officialness is granted by a reviewed PR to that file — for external packages too. That review is the safety gate: we control what is called official even when we do not host the code. Document the acceptance criteria (source-complete package, pinned immutable ref, payload root, trust posture, maintainer contact).
176
+ - First entries: `oats.core`, `oats.setup`, `oats.okf`, `oats.aweb`, `oats.authoring`, `oats.jira`, `oats.linear`, `oats.dev`, `oats.knowledge-theory` (the fundamentals are already listed; add the two new ones once released).
177
+ - Discovery is universal (CLI and Desktop marketplace view/search present official packages as assignable to a soul); installation still goes through acquisition, lock and per-capability executable trust. Discoverable is not installed; installed is not approved.
178
+
179
+ **Deliverable:** documented official-list policy and seeded list; Desktop view tracked under phase3 parity.
180
+
181
+ ### Distribution exit gate
182
+
183
+ A fresh workspace onboarding yields an `oats-setup-expert` whose definition shows `oats.core` and `oats.setup` resolved from the official list; a soul created by that expert shows `oats.core` explicitly and still runs after the user removes it; the kernel ships no ambient operational skill. Framework souls in this repository declare `oats.core`.
184
+
185
+ # Phase 2 — centralise knowledge and adopt the five expert souls
186
+
187
+ ## P2.1 — align the reference knowledge profile
188
+
189
+ **Owner:** OKF owner, with kernel review only for demonstrated generic-boundary gaps.
190
+
191
+ Apply the accepted knowledge model to actual runtime instructions, skills, bindings and behavior:
192
+
193
+ - Centralised per-soul homes with stable identity and explicit cross-reads.
194
+ - Capability-owned organisation, placement, reading, capture, judgment and delivery—not a kernel-owned mandatory knowledge pipeline.
195
+ - Distinct accepted knowledge, local evidence/working state and immutable execution artifacts.
196
+ - Supported reading/refresh/capture for both short- and long-running instances; no automatic active-context synchronisation or silent curriculum replacement.
197
+ - Independent promotion, reference doctrine and PR-only Git delivery, distinguishing proposal, accepted merge and reader visibility.
198
+
199
+ Do not implement automatic speciation, redirects, whole-session cloning, a permanent maintenance agent or every alternative provider as prerequisites. Preserve their architectural possibility without claiming them shipped.
200
+
201
+ ## P2.2 — curate and publish the shared knowledge base
202
+
203
+ **Owner:** knowledge steward, with human publication/visibility decision.
204
+
205
+ - Confirm public/private visibility and access before publishing corpus or exposing private locators in the workspace.
206
+ - Reuse the existing curation and disposition records. Add a focused freshness pass for subsequent accepted decisions and discoveries; do not redo the entire audit or bulk-copy legacy folders.
207
+ - Preserve useful expertise, rationale, limitations and maintained slow state. Keep formal contracts/code navigation in docs, repeatable procedures in skills, and task residue/transcripts in local evidence.
208
+ - Give each accepted concept one canonical home, valid cross-links and appropriate provenance/freshness.
209
+ - Separate administrative repository/bootstrap scaffolding from corpus acceptance. Deliver the corpus through reviewed changes; ongoing runtime Git learning remains PR-only.
210
+
211
+ **Deliverable:** a small, current, reviewed knowledge base with an explicit owner/read mapping, not merely a passing validator over relocated text.
212
+
213
+ ## P2.3 — publish and adopt the five expertise souls
214
+
215
+ **Owner:** soul/source maintainer, reviewed by the integration lead and knowledge steward.
216
+
217
+ The five permanent expertise roles are:
218
+
219
+ 1. `oats-expert` — overall direction and cross-cutting architectural judgment.
220
+ 2. `oats-kernel-expert` — kernel/capability contract rationale and technical expertise.
221
+ 3. `oats-desktop-expert` — Desktop/product/interaction expertise.
222
+ 4. `market-research-expert` — sourced research and positioning evidence.
223
+ 5. `oats-assistant` — user-facing adoption and onboarding help.
224
+
225
+ Use source-complete portable declarations, canonical `AGENTS.md` and the `CLAUDE.md` alias, reviewed procedures, explicit capability requirements and stable knowledge bindings. Final export paths must be deliberately chosen before pinning imports. New adopters' learning must not silently default to the source publisher's writer.
226
+
227
+ The optional knowledge-theory authoring expert is not a sixth mandatory runtime role. The public assistant must work through a real supported adoption path, not only as a maintainer-local role. A distinct cold-bootstrap helper protocol, if needed, requires its own scoped decision; do not invent a persistent owner to bypass helper authority.
228
+
229
+ **Deliverable:** five indexed reusable sources, imported by the workspace at real compatible revisions, with the intended expertise/reading boundaries—not renamed engineer charters.
230
+
231
+ ## P2.4 — demonstrate learning, then switch writers/readers
232
+
233
+ **Owner:** integration lead and OKF owner, with local operators.
234
+
235
+ Use a small real end-to-end path:
236
+
237
+ 1. An expert obtains its accepted foundation and relevant cross-role context.
238
+ 2. A working instance captures a useful new finding.
239
+ 3. An independent worker judges it and delivers a Git PR.
240
+ 4. Authorised review/merge accepts it.
241
+ 5. A different/fresh instance obtains that accepted learning through the supported reader/refresh path.
242
+
243
+ Do not seed the conclusion and call that learning. Check representative questions and source/binding correctness for all five roles without running five redundant full matrices.
244
+
245
+ Then cut over the workspace imports/bindings deliberately. Reconcile or hold outstanding old harvests rather than retarget their frozen destinations; avoid duplicate old/new writers. Do not rename live homes or borrow identities. Keep original knowledge and work recoverable. Retirement/removal of superseded sources is a separately verified cleanup after unfinished work is safe.
246
+
247
+ ### Phase2 exit gate
248
+
249
+ The five experts run from portable sources in the shared workspace, consult the curated common knowledge, and demonstrate actual reviewed Git learning visible to a subsequent reader. Publication, access, writer ownership and local runtime configuration are known. The old setup is preserved until this is true.
250
+
251
+ # Execution and review discipline
252
+
253
+ The initial implementation lanes are deliberately disjoint:
254
+
255
+ | Lane | Owns | Does not own |
256
+ |---|---|---|
257
+ | Workspace/source declarations | Framework workspace/member indexes, transitional `souls/oats-expert/` edition preserving its existing logical owner, setup guide and metadata tests; other capability repositories' root `oats.yaml` only | Kernel or provider runtime, provider README/tests, framework mirrors, corpus migration |
258
+ | Kernel/onboarding | Public preparation/lifecycle glue, same-repository workspace regression coverage and portable-setup skill | Root workspace/member indexes, soul editions, provider payloads, record optimisation |
259
+ | Capability/provider readiness | Canonical OKF/aweb payloads, manifests, skills/docs/tests and actual profile-readiness facts | Kernel/record, root member indexes, soul editions, framework mirrors/catalog |
260
+ | Integration lead | Scope/interface arbitration, exact review/integration, shared stewardship, release coordination and combined deployment acceptance | Unilateral changes to another operator's credentials, identity or local deployment |
261
+
262
+ Distribution lanes (D1–D4) map onto the same owners: capability/provider readiness packages the two capabilities (D1); kernel/onboarding owns the explicit default, kernel de-ambienting and the setup-expert onboarding (D2, D3); workspace/source declarations own the official list and its policy docs (D4). They are assigned only after the current phase1 PRs are integrated, to avoid overlapping edits in `lib/core.mjs` and the skills tree.
263
+
264
+ The phase1 transitional source is an edition of the existing overall expert, not the full five-role rebuild or an invented bootstrap owner. Source publication precedes workspace import pinning to its actual approved revision. An owner reports a precise cross-lane seam rather than patching another lane's files. No new review agents or per-edit permission loops are required for agreed work.
265
+
266
+ - One redesign lead owns the cross-repository plan, dependency order, scope questions and integration picture. Contributors deliver bounded agreed work and exact diffs/PRs; no wholesale branch merges that import unrelated or held work.
267
+ - Workspace/source metadata and compatibility work can proceed in parallel once their shared identities/contracts are agreed. Provider changes are reviewed against concrete missing seams, not speculative replacement architectures.
268
+ - Local operator approval remains necessary for installation, executable trust, identity/team changes, deployment cutover and disclosure. Lead coordination is not authority over unrelated deployments.
269
+ - Use focused changed-path checks while developing, then one coherent acceptance gate per usable increment. Keep original failed evidence and distinguish author reports, independent checks, installed bytes and real execution.
270
+ - Preserve normal native harness auth and explicit permissions. No implicit credential handling, safety bypasses, source/identity borrowing or model/GUI testing on another operator's machine.
271
+ - Publish updated versions only where code/payload changes require them; never move existing tags. Record delivery and actual adoption separately.
272
+
273
+ # Decisions to settle at the appropriate boundary
274
+
275
+ - Workspace home is settled: `oats` hosts it and `oats-dev` remains development capabilities. Phase1 authorises the parallel existing-role edition at `souls/oats-expert/`; preserve its logical owner and settle any remaining source-policy details before publishing. Final five-role publication/cutover remains phase2, not permission to replace the live roster now.
276
+ - Confirm knowledge visibility and public-safe content before phase2 publication; this need not block the phase1 contract inventory.
277
+ - Agree the exact pilot/provider/runtime profile and its supported lifecycle. No hidden fallback to an easier profile.
278
+ - Review any newly identified generic contract or bootstrap authority change explicitly. Existing accepted constraints do not need repeated approval.
279
+
280
+ # References
281
+
282
+ - [Portable source/workspace declarations](2026-09-15-portable-declarations.md)
283
+ - [Workspace schema](../oats-workspace.schema.json) and [repository index schema](../oats-member.schema.json)
284
+ - [Fresh onboarding boundary](2026-09-16-portable-onboarding.md) — read historical pending statements with the actual current public routes and release scope
285
+ - [Released0.24 scope](../release-notes/v0.24.0.md)
286
+ - [Canonical knowledge theory](../knowledge-theory.md)
287
+ - [Generic knowledge/capability boundary](2026-09-16-knowledge-capability-contract.md)
@@ -0,0 +1,124 @@
1
+ # Public source inspection for same-repository workspace onboarding
2
+
3
+ This increment supplies the missing public adapter around the EXISTING portable
4
+ onboarding facade. It does not define another workspace format, parser, resolver,
5
+ registry, identity or permission. Source/member declarations remain separately
6
+ owned; production capability/profile readiness is not established by the fixture.
7
+
8
+ ## Read-only entry
9
+
10
+ ```sh
11
+ oats inspect --request /absolute/inspection.json --json
12
+ ```
13
+
14
+ This mode accepts only one request file and `--json`. Explicit captured selectors
15
+ or current-context flags conflict before file reads; inherited captured environment
16
+ is not new-work input. Other existing inspect modes are unchanged. The shared
17
+ bounded strict JSON request reader feeds the existing inspection validator intact:
18
+ unknown fields are not dropped, and no missing context comes from current config.
19
+
20
+ The public core export `inspectPortableOnboarding(input, {repositoryOptions}?)`
21
+ owns one transient repository transaction and its guarded cleanup. Its input is
22
+ the existing facade contract:
23
+
24
+ ```json
25
+ {
26
+ "deployment": "/operator/deployments/example",
27
+ "workTarget": "/operator/projects/example",
28
+ "source": "advertised-alias",
29
+ "origin": {"kind":"operator","document":{"kind":"operator","id":"setup"},"pointer":"/source"},
30
+ "workspace": {
31
+ "source": "git:https://example.org/team/framework.git",
32
+ "origin": {"kind":"operator","document":{"kind":"operator","id":"setup"},"pointer":"/workspace"}
33
+ },
34
+ "member": {
35
+ "source": "git:https://example.org/team/framework.git",
36
+ "origin": {"kind":"operator","document":{"kind":"operator","id":"setup"},"pointer":"/member"}
37
+ }
38
+ }
39
+ ```
40
+
41
+ These paths/references are placeholders. Workspace and member may identify the
42
+ SAME repository. They still require explicit workspace admission, a member
43
+ backlink and matching observed commits. Omitted repository revisions observe the
44
+ hosting default branch; they do not guess `main` or create circular future pins.
45
+
46
+ Independent adoption replaces workspace/member with an explicit source reference
47
+ `{source, soul, revision, alias}` and explicit `standaloneContextKey` (opaque string
48
+ or null). It does not follow the source publisher's workspace backlink or inherit
49
+ its development defaults/teams. A member check is optional; without one, import
50
+ reports `not-requested` membership, never enrollment.
51
+
52
+ ## Metadata is not authority or provider readiness
53
+
54
+ Normal JSON envelope `result` retains schemaVersion1 and the existing statuses:
55
+ `ready-for-preparation`, `needs-configuration`, `separate-deployment-required`.
56
+ `ok:true` means the observation succeeded, including a truthful hold. Separate
57
+ fields expose source identity/revision/export metadata, deployment/work paths,
58
+ workspace identity/import locators, reciprocal observations, declared teams and
59
+ non-effect claims. Inspection executes no provider, hook, approval or native
60
+ backend and writes no deployment state; repository scratch is transient.
61
+
62
+ The public projection deliberately does NOT expose `source.reference` as a
63
+ reusable mutation input. Opaque adoption values and provider declaration payloads
64
+ have not been classified by their owner and are omitted. Import summaries expose
65
+ `adoptionPresent`; knowledge export summaries expose contract/version and
66
+ `payloadOmitted`. Top-level `omitted:{providerPayloads:true,adoptionValues:true}`
67
+ states that this is a metadata view, not a lossless request or a safe-payload claim.
68
+ It is not an issued `buildFreshPreparationRequest` witness, even in the same
69
+ process. Keep the original authored input for an explicit preparation request.
70
+
71
+ Existing managed deployment state is preserved and reported, not repaired or
72
+ migrated. An absent selected path requires explicit operator provisioning and
73
+ reinspection. The serialized inspection does not lock the filesystem or authorize
74
+ later mutation; preparation retains its own existing validation/custody rules.
75
+ The inspected work target does not become source identity or an implied placement
76
+ choice. Supported captured directory scaffolds own their separate H/work.
77
+
78
+ ## Existing preparation and retained execution
79
+
80
+ `oats prepare --request` already accepts deployment/source/origin, workspace/member
81
+ OR standalone context, operator policy/bindings, mode/local-input authorization,
82
+ launch and helperLaunches. Do not pass the inspection result or workTarget/catalog
83
+ wrapper. Exact executable approval is separate. A required provider whose binding
84
+ code is unapproved may return `needs-configuration` with an `approval-required`
85
+ problem and exact artifact-set/capability requests, before any record exists:
86
+
87
+ ```sh
88
+ oats trust <capability> --deployment <D> --artifact-set <returned-id> --json
89
+ oats prepare --request /absolute/preparation.json --json
90
+ oats inspect --deployment <D> --resolution <R> --composition --json
91
+ oats spawn <subject> --deployment <D> --resolution <R> --home <new-H> --no-launch --json
92
+ oats session start --deployment <D> --resolution <R> --home <H> --request /absolute/native.json --json
93
+ ```
94
+
95
+ Repreparation after explicit approval is ordinary continuation in the selected,
96
+ now-managed deployment; do not delete its state to make fresh preflight pass.
97
+ Required hooks still run under their admitted custody with `--no-launch`; a parsed
98
+ binding or team declaration is not proof of an enrolled/ready native provider.
99
+ Native request version1 supplies backend/task/optional stopGraceMs, not a new
100
+ model or current launch selection. Complete OATS home resources remain composed.
101
+ Native auth stays native and permission bypass requires explicit user opt-in.
102
+
103
+ ## Limits and focused evidence
104
+
105
+ `test/workspace-onboarding-public.test.mjs` uses current public CLI/core, actual
106
+ Git and a bounded local SSH upload-pack fixture, contract-shaped inert provider
107
+ codecs/hooks, and inert native/backend executables. It covers self-membership,
108
+ reciprocal stale observations, independent adoption, non-effect/opaque-output
109
+ boundaries, exact approval, full retained resources, source deletion/current
110
+ config poison, required-provider failure BEFORE native admission/backend effects,
111
+ and original-incarnation native dispatch plus receipt-based stopped observation.
112
+ No production provider/SDK/model/server or host installation is exercised.
113
+
114
+ Captured input/wake and public captured retirement remain explicit unsupported
115
+ boundaries; a stopped terminal observation is not permission to deliver a captured
116
+ message or retire through legacy fallback. Session-delivered messaging must retain
117
+ its required wake contract; a start-only fixture does not qualify that profile.
118
+ Non-directory placement is not supplied by inspecting a Git work target. These
119
+ limits go to their owners as precise seams, not silent requirement removal.
120
+
121
+ The user requested removal of `oats-portable-setup` and no new skills in this
122
+ increment. Fresh kernel composition no longer selects that skill; existing
123
+ retained snapshots are unchanged. This document and CLI help describe the public
124
+ adapter, not a replacement skill or a claim of completed workspace deployment.