@awebai/oats 0.29.4 → 0.30.0
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/README.md +12 -6
- package/bin/oats.mjs +194 -50
- package/capabilities/oats-aweb/bin/oats-aweb.mjs +538 -204
- package/capabilities/oats-aweb/injects/aweb.md +1 -1
- package/capabilities/oats-aweb/lib/binding-wire.mjs +31 -22
- package/capabilities/oats-aweb/oats.json +5 -12
- package/capabilities/oats-aweb/skills/VENDORED.md +4 -4
- package/capabilities/oats-aweb/skills/aweb-team-membership/SKILL.md +1 -1
- package/capabilities/oats-aweb/skills/oats-aweb/SKILL.md +83 -13
- package/capabilities/oats-code-review/injects/reviewer.md +26 -0
- package/capabilities/oats-code-review/oats.json +16 -0
- package/capabilities/oats-code-review/skills/adversarial-review/SKILL.md +66 -0
- package/capabilities/oats-code-review/skills/review-dev-docs/SKILL.md +30 -0
- package/capabilities/oats-code-review/skills/security-review/SKILL.md +56 -0
- package/capabilities/oats-code-review/skills/simplification-review/SKILL.md +34 -0
- package/capabilities/oats-developer/injects/developer.md +38 -0
- package/capabilities/oats-developer/oats.json +17 -0
- package/capabilities/oats-developer/skills/execution-strategy/SKILL.md +43 -0
- package/capabilities/oats-developer/skills/maintain-dev-docs/SKILL.md +47 -0
- package/capabilities/oats-developer/skills/run-the-review-loop/SKILL.md +65 -0
- package/capabilities/oats-developer/skills/understand-the-spec/SKILL.md +37 -0
- package/capabilities/oats-developer/skills/worktrees/SKILL.md +36 -0
- package/capabilities/oats-engineering-expert/injects/expert.md +37 -0
- package/capabilities/oats-engineering-expert/oats.json +17 -0
- package/capabilities/oats-engineering-expert/skills/coordinate-developers/SKILL.md +37 -0
- package/capabilities/oats-engineering-expert/skills/coordinate-experts/SKILL.md +52 -0
- package/capabilities/oats-engineering-expert/skills/land-your-prs/SKILL.md +50 -0
- package/capabilities/oats-engineering-expert/skills/plan-and-spec/SKILL.md +53 -0
- package/capabilities/oats-engineering-expert/skills/verify-developer-work/SKILL.md +49 -0
- package/capabilities/oats-okf/bin/oats-okf.mjs +8 -4
- package/capabilities/oats-okf/lib/binding-wire.mjs +47 -15
- package/capabilities/oats-okf/lib/inspection.mjs +26 -7
- package/capabilities/oats-okf/lib/sources.mjs +16 -2
- package/capabilities/oats-okf/lib/worker.mjs +5 -16
- package/capabilities/oats-okf/oats.json +6 -3
- package/capabilities/oats-okf-harvest/bin/okf-harvest.mjs +2 -2
- package/capabilities/oats-okf-harvest/oats.json +3 -3
- package/capabilities/oats-okf-harvest/skills/knowledge-harvest/SKILL.md +6 -6
- package/capabilities/oats-okf-maintenance/bin/okf-maintenance.mjs +2 -2
- package/capabilities/oats-okf-maintenance/injects/maintainer.md +1 -1
- package/capabilities/oats-okf-maintenance/oats.json +2 -2
- package/capabilities/oats-okf-maintenance/skills/knowledge-review/SKILL.md +1 -1
- package/capabilities/oats-okf-maintenance/skills/okf-trigger-setup/SKILL.md +11 -23
- package/capabilities/oats-workspace-experts/injects/oats-experts.md +26 -0
- package/capabilities/oats-workspace-experts/oats.json +9 -0
- package/docs/capabilities.md +160 -171
- package/docs/capability-manifest.schema.json +6 -11
- package/docs/configuration.md +213 -64
- package/docs/design/2026-09-16-knowledge-capability-contract.md +36 -50
- package/docs/design/2026-09-23-workspace-module-contracts.md +377 -544
- package/docs/design/2026-09-26-okf-knowledge-operations.md +132 -357
- package/docs/design/2026-09-27-team-model-v2.md +97 -117
- package/docs/design/2026-09-28-automations-trust.md +38 -0
- package/docs/design/2026-09-28-soul-launch-preference.md +63 -0
- package/docs/design/HISTORY.md +65 -0
- package/docs/design/README.md +23 -54
- package/docs/desktop-cli-api.md +1787 -1777
- package/docs/desktop.md +30 -91
- package/docs/execution-targets.md +146 -292
- package/docs/first-team.md +31 -17
- package/docs/implementation.md +76 -288
- package/docs/integrations.md +118 -320
- package/docs/knowledge-capability-authoring.md +25 -52
- package/docs/knowledge-reference/acceptance.md +3 -3
- package/docs/knowledge-reference/adoption.md +1 -1
- package/docs/knowledge-reference/harvester.md +2 -2
- package/docs/knowledge-reference/package-craft.md +3 -3
- package/docs/knowledge-reference/provider-mapping.md +3 -6
- package/docs/knowledge-reference/reader-capture.md +3 -3
- package/docs/knowledge-theory.md +62 -166
- package/docs/knowledge.md +225 -404
- package/docs/layers.md +42 -97
- package/docs/oats-local.schema.json +58 -5
- package/docs/oats-membership.schema.json +1 -8
- package/docs/oats-package.schema.json +5 -5
- package/docs/oats-workspace.schema.json +8 -22
- package/docs/official-catalog.md +25 -28
- package/docs/packages.md +45 -63
- package/docs/plans/0.30-close-out.md +61 -0
- package/docs/release-lane.md +77 -0
- package/docs/release-notes/oats-framework-v1.1.3.md +10 -8
- package/docs/release-notes/v0.19.0.md +48 -147
- package/docs/release-notes/v0.19.1.md +2 -3
- package/docs/release-notes/v0.19.3.md +2 -15
- package/docs/release-notes/v0.20.0.md +0 -15
- package/docs/release-notes/v0.22.0.md +71 -138
- package/docs/release-notes/v0.22.1.md +42 -90
- package/docs/release-notes/v0.22.10.md +1 -1
- package/docs/release-notes/v0.22.11.md +1 -47
- package/docs/release-notes/v0.22.12.md +4 -13
- package/docs/release-notes/v0.22.13.md +1 -42
- package/docs/release-notes/v0.22.14.md +3 -11
- package/docs/release-notes/v0.22.15.md +1 -46
- package/docs/release-notes/v0.22.16.md +6 -8
- package/docs/release-notes/v0.22.18.md +1 -99
- package/docs/release-notes/v0.22.19.md +3 -14
- package/docs/release-notes/v0.22.2.md +6 -15
- package/docs/release-notes/v0.22.3.md +0 -1
- package/docs/release-notes/v0.22.4.md +1 -14
- package/docs/release-notes/v0.22.5.md +2 -12
- package/docs/release-notes/v0.22.6.md +0 -3
- package/docs/release-notes/v0.23.0.md +9 -25
- package/docs/release-notes/v0.23.1.md +9 -25
- package/docs/release-notes/v0.23.2.md +2 -4
- package/docs/release-notes/v0.24.0.md +56 -97
- package/docs/release-notes/v0.24.1.md +7 -11
- package/docs/release-notes/v0.24.10.md +34 -45
- package/docs/release-notes/v0.24.11.md +12 -20
- package/docs/release-notes/v0.24.12.md +35 -48
- package/docs/release-notes/v0.24.13.md +34 -41
- package/docs/release-notes/v0.24.2.md +9 -13
- package/docs/release-notes/v0.24.3.md +7 -11
- package/docs/release-notes/v0.24.4.md +6 -6
- package/docs/release-notes/v0.24.5.md +6 -10
- package/docs/release-notes/v0.24.6.md +2 -5
- package/docs/release-notes/v0.24.7.md +46 -75
- package/docs/release-notes/v0.24.8.md +58 -96
- package/docs/release-notes/v0.24.9.md +38 -54
- package/docs/release-notes/v0.25.0.md +59 -76
- package/docs/release-notes/v0.25.1.md +57 -81
- package/docs/release-notes/v0.25.2.md +51 -70
- package/docs/release-notes/v0.25.3.md +11 -13
- package/docs/release-notes/v0.25.4.md +9 -13
- package/docs/release-notes/v0.25.5.md +3 -5
- package/docs/release-notes/v0.25.6.md +20 -29
- package/docs/release-notes/v0.25.7.md +5 -7
- package/docs/release-notes/v0.25.8.md +26 -39
- package/docs/release-notes/v0.26.0.md +175 -646
- package/docs/release-notes/v0.27.0.md +4 -5
- package/docs/release-notes/v0.27.1.md +4 -6
- package/docs/release-notes/v0.27.2.md +1 -1
- package/docs/release-notes/v0.28.0.md +57 -124
- package/docs/release-notes/v0.29.0.md +89 -208
- package/docs/release-notes/v0.29.1.md +1 -1
- package/docs/release-notes/v0.29.2.md +3 -4
- package/docs/release-notes/v0.30.0.md +205 -0
- package/docs/schedules.md +280 -363
- package/docs/servers.md +99 -117
- package/docs/soul.schema.json +2 -9
- package/docs/souls-and-instances.md +145 -158
- package/docs/workspaces.md +132 -215
- package/lib/automations.mjs +21 -6
- package/lib/core.mjs +226 -74
- package/lib/instance-events.mjs +1 -1
- package/lib/instance-inspect.mjs +109 -34
- package/lib/instance-lifecycle.mjs +14 -1
- package/lib/instance-resolution.mjs +26 -27
- package/lib/launch-preference.mjs +87 -0
- package/lib/materialize.mjs +3 -3
- package/lib/resolve.mjs +29 -87
- package/lib/schedule.mjs +1 -1
- package/lib/teams-verbs.mjs +195 -0
- package/lib/teams.mjs +190 -0
- package/lib/triggers.mjs +2 -2
- package/lib/workspace.mjs +54 -147
- package/package-catalog.json +9 -15
- package/package.json +1 -1
- package/skills/oats-getting-started/SKILL.md +25 -13
- package/capabilities/oats-review/injects/review.md +0 -69
- package/capabilities/oats-review/oats.json +0 -10
- package/capabilities/oats-review/skills/code-review/SKILL.md +0 -44
- package/capabilities/oats-review/skills/security-review/SKILL.md +0 -59
- package/docs/conventions.md +0 -90
- package/docs/design/2026-09-07-architecture-reassessment.md +0 -131
- package/docs/design/2026-09-07-desktop-souls-capabilities.md +0 -50
- package/docs/design/2026-09-07-mobile-agent-management-proposal.md +0 -228
- package/docs/design/2026-09-08-expert-assisted-deployment-proposal.md +0 -558
- package/docs/design/2026-09-13-knowledge-and-memory-direction.md +0 -744
- package/docs/design/2026-09-13-knowledge-implementation.md +0 -127
- package/docs/design/2026-09-13-knowledge-location-contract.md +0 -340
- package/docs/design/2026-09-14-artifact-retention-contract.md +0 -190
- package/docs/design/2026-09-14-portable-souls-and-git-workspaces.md +0 -708
- package/docs/design/2026-09-14-portable-souls-contract-amendments.md +0 -85
- package/docs/design/2026-09-14-portable-souls-explainer.md +0 -750
- package/docs/design/2026-09-15-captured-dispatch.md +0 -127
- package/docs/design/2026-09-15-captured-resolution-records.md +0 -143
- package/docs/design/2026-09-15-package-preparation.md +0 -100
- package/docs/design/2026-09-15-portable-data-contract.md +0 -121
- package/docs/design/2026-09-15-portable-declarations.md +0 -189
- package/docs/design/2026-09-15-portable-souls-handoff.md +0 -150
- package/docs/design/2026-09-15-portable-souls-implementation.md +0 -417
- package/docs/design/2026-09-15-selection-lock-and-approval.md +0 -122
- package/docs/design/2026-09-15-source-observation.md +0 -119
- package/docs/design/2026-09-16-captured-admission.md +0 -77
- package/docs/design/2026-09-16-captured-helper-dispatch.md +0 -105
- package/docs/design/2026-09-16-captured-launch-inputs.md +0 -42
- package/docs/design/2026-09-16-command-profile-preparation.md +0 -86
- package/docs/design/2026-09-16-fresh-install-first-rollout.md +0 -47
- package/docs/design/2026-09-16-fresh-operator-walkthrough.md +0 -282
- package/docs/design/2026-09-16-messaging-capability-contract.md +0 -59
- package/docs/design/2026-09-16-portable-migration-evidence.md +0 -158
- package/docs/design/2026-09-16-portable-onboarding.md +0 -179
- package/docs/design/2026-09-16-prepare-request-transport.md +0 -26
- package/docs/design/2026-09-16-provider-binding-codecs.md +0 -98
- package/docs/design/2026-09-16-provider-binding-wire.md +0 -274
- package/docs/design/2026-09-17-capability-helper-input-contract.md +0 -95
- package/docs/design/2026-09-17-captured-backend-parity.md +0 -53
- package/docs/design/2026-09-17-captured-native-start.md +0 -58
- package/docs/design/2026-09-17-portable-boundary-hookup.md +0 -19
- package/docs/design/2026-09-17-portable-boundary-resources.md +0 -52
- package/docs/design/2026-09-17-public-captured-start.md +0 -108
- package/docs/design/2026-09-17-public-prepare-request.md +0 -90
- package/docs/design/2026-09-18-captured-pi-host.md +0 -205
- package/docs/design/2026-09-18-first-cut-release-checklist.md +0 -131
- package/docs/design/2026-09-18-herdr-protocol-compatibility.md +0 -60
- package/docs/design/2026-09-20-redesign-program-board.md +0 -142
- package/docs/design/2026-09-20-workspace-and-portable-adoption-plan.md +0 -289
- package/docs/design/2026-09-20-workspace-onboarding-public.md +0 -207
- package/docs/design/2026-09-22-desktop-parity-seams.md +0 -58
- package/docs/design/2026-09-23-simplified-workspace-model.md +0 -711
- package/docs/design/2026-09-23-workspace-v2-implementation-plan.md +0 -65
- package/docs/design/2026-09-24-desktop-phase-f-boundary.md +0 -242
- package/docs/design/2026-09-24-phase-d-plan.md +0 -305
- package/docs/design/2026-09-25-teams-contract.md +0 -258
- package/docs/design/2026-09-26-desktop-design-brief-architecture.md +0 -241
- package/docs/design/desktop-ux-plan.md +0 -362
- package/docs/design/launch-configurations.md +0 -168
- package/docs/design/okf-mirror-provenance.md +0 -105
- package/docs/design/operations-contract.md +0 -141
- package/docs/oats-member.schema.json +0 -38
- package/skills/integration-authoring/SKILL.md +0 -84
- package/skills/oats-support/SKILL.md +0 -79
- package/skills/skill-craft/SKILL.md +0 -109
- package/skills/soul-craft/SKILL.md +0 -116
|
@@ -1,179 +0,0 @@
|
|
|
1
|
-
# Portable fresh onboarding and source discovery
|
|
2
|
-
|
|
3
|
-
> **Superseded (2026-09-23).** The 0.24 onboarding facade this note describes (`lib/portable-onboarding-acceptance.mjs`, `test/portable-onboarding-public.acceptance.mjs`, source editions, exports) was deleted with the workspace model v2; the 0.25 bootstrap is `oats onboard [<dir>] --workspace <ref>` (contract §6, `docs/desktop-cli-api.md`). Read [2026-09-23-simplified-workspace-model.md](2026-09-23-simplified-workspace-model.md) (worked example) and [2026-09-23-workspace-module-contracts.md](2026-09-23-workspace-module-contracts.md) (normative) instead; kept as history.
|
|
4
|
-
|
|
5
|
-
16 September 2026. This module supports a controlled fresh setup path while
|
|
6
|
-
historical in-place migration is deferred. It does not alter the Portable Souls
|
|
7
|
-
architecture or weaken the existing partial/unknown evidence safeguards.
|
|
8
|
-
|
|
9
|
-
## Responsibilities remain separate
|
|
10
|
-
|
|
11
|
-
A fresh setup request carries four independent facts:
|
|
12
|
-
|
|
13
|
-
1. **Source location** — an explicit four-field soul reference, or an alias from
|
|
14
|
-
one explicit workspace observation.
|
|
15
|
-
2. **Deployment/install location** — an explicit absolute path that passes fresh
|
|
16
|
-
state preflight.
|
|
17
|
-
3. **Work target** — an explicit existing directory, independently reported as a
|
|
18
|
-
Git or non-Git target. It never identifies the soul or deployment.
|
|
19
|
-
4. **Context/membership** — an explicit workspace plus optional reciprocal member
|
|
20
|
-
request, or an explicit standalone context key. Declared messaging teams are
|
|
21
|
-
reported separately; inspection performs no enrollment and makes no privacy
|
|
22
|
-
claim.
|
|
23
|
-
|
|
24
|
-
`lib/portable-onboarding.mjs` reuses `createWorkspaceDiscovery`, the repository
|
|
25
|
-
transaction issued by the caller, and the existing workspace/member/soul parsers.
|
|
26
|
-
It contains no source/config parser, resolver, network adapter, package installer,
|
|
27
|
-
provider codec, credential handler or team operation.
|
|
28
|
-
|
|
29
|
-
## Fresh deployment preflight
|
|
30
|
-
|
|
31
|
-
`preflightFreshDeployment({deployment,maxEntries?})` is read-only. A missing child
|
|
32
|
-
of one real canonical parent is a valid fresh destination. An existing directory
|
|
33
|
-
may contain arbitrary project files, a Git repository, authored souls, and authored
|
|
34
|
-
capability source. Those do not make it dirty.
|
|
35
|
-
|
|
36
|
-
The preflight reports `separate-deployment-required` for fixed deployment-owned
|
|
37
|
-
state: configuration or selection locks, schedules, portable state, captured
|
|
38
|
-
resolutions or migration evidence, retained/installed artifacts, installed package
|
|
39
|
-
state, native history, and bounded discovered instance/retirement directories.
|
|
40
|
-
The scan is shallow and incrementally bounded. It never recursively inventories
|
|
41
|
-
project contents and never deletes, moves, repairs or rewrites a conflict. Advice
|
|
42
|
-
is always to preserve the existing path and choose a separate fresh deployment.
|
|
43
|
-
|
|
44
|
-
Issued inspections also keep ephemeral directory identity witnesses in memory:
|
|
45
|
-
the existing deployment, or the parent of an absent deployment, and the work
|
|
46
|
-
target. `recheckFreshOnboarding` rechecks those selected roots and managed state
|
|
47
|
-
after source inspection and immediately before the fresh mutation adapter. Root
|
|
48
|
-
replacement, disappearance or provisioning after an absent-path inspection
|
|
49
|
-
requires a new inspection (`selection-changed`); ordinary project-file edits are
|
|
50
|
-
allowed. No witness is added to public preparation JSON, written to disk or made
|
|
51
|
-
into an identity registry. This is a local point-in-time check, not a lock against
|
|
52
|
-
hostile concurrent writers; core retains its own action-boundary custody checks.
|
|
53
|
-
|
|
54
|
-
## Explicit source/workspace/export/catalog inspection
|
|
55
|
-
|
|
56
|
-
`inspectPortableOnboarding` requires an explicit deployment, work target, source
|
|
57
|
-
and origin. A string source is accepted only as an alias in an explicit workspace;
|
|
58
|
-
otherwise the caller supplies the ordinary four-field source reference. Workspace
|
|
59
|
-
and `standaloneContextKey` are mutually exclusive. Presence means an own field:
|
|
60
|
-
any supplied workspace value must pass the existing workspace discovery/schema
|
|
61
|
-
validator; `null`, `false`, `0` and empty text are not omission or a standalone
|
|
62
|
-
shortcut. Without a workspace, the key
|
|
63
|
-
must be explicitly supplied as opaque text of at most 256 UTF-8 bytes or explicit
|
|
64
|
-
`null`; it is never
|
|
65
|
-
derived from source/work paths, OS identity or repository metadata. `null` records
|
|
66
|
-
an explicit lack of standalone private context and is suitable only when later
|
|
67
|
-
preparation resolves messaging disabled. The
|
|
68
|
-
existing discovery adapter qualifies source identity, observes exact revisions,
|
|
69
|
-
validates the advertised export and parses the exported soul.
|
|
70
|
-
|
|
71
|
-
An optional explicit member request performs the existing reciprocal membership
|
|
72
|
-
check. Without it, repository membership is `not-requested`; import does not follow
|
|
73
|
-
the publisher's workspace backlink. Messaging team declarations are data only and
|
|
74
|
-
always report `enrollment:"not-performed"` and
|
|
75
|
-
`privateTeamQualification:"not-evaluated"`.
|
|
76
|
-
|
|
77
|
-
Catalog inspection is opt-in by unique declared workspace indexes. It observes the
|
|
78
|
-
catalog source/revision and exact explicit descriptor path through the same
|
|
79
|
-
repository transaction, returning only the source and document witnesses. There is
|
|
80
|
-
no guessed catalog filename and no kernel-owned catalog payload parser.
|
|
81
|
-
|
|
82
|
-
The result is `ready-for-preparation`, `needs-configuration`, or
|
|
83
|
-
`separate-deployment-required`, with all four responsibilities represented in
|
|
84
|
-
separate fields. `effects` reports no deployment writes, installs, activation,
|
|
85
|
-
credential, team or job operations while honestly recording repository reads and
|
|
86
|
-
caller-owned repository-transaction scratch use.
|
|
87
|
-
|
|
88
|
-
## Preparation handoff
|
|
89
|
-
|
|
90
|
-
`buildFreshPreparationRequest` accepts only an inspection object issued by this
|
|
91
|
-
module and only when its status is `ready-for-preparation`. It accepts public
|
|
92
|
-
operator/mode/local-input choices only; the public preparation wrapper owns its
|
|
93
|
-
private scratch directory, so `directory` is rejected rather than leaked from the
|
|
94
|
-
private `prepareComposition` contract. It returns:
|
|
95
|
-
|
|
96
|
-
```text
|
|
97
|
-
{ schemaVersion: 1, operation: "prepare", persisted: false,
|
|
98
|
-
preparation: <existing prepareCapturedComposition input>,
|
|
99
|
-
workTarget: <the separately inspected target>,
|
|
100
|
-
effects: {writes:false, installs:false, activation:false, enrollment:false} }
|
|
101
|
-
```
|
|
102
|
-
|
|
103
|
-
It does not invoke preparation. A thin core/CLI adapter may pass `preparation`
|
|
104
|
-
unchanged to public `prepareCapturedComposition` only at an explicit mutating
|
|
105
|
-
boundary. The handoff forwards the exact standalone key for standalone contexts;
|
|
106
|
-
core at `c5c6a3c9171e424a36a1bdbf3932b9319a3c6c72` now admits and stores that field.
|
|
107
|
-
No adapter may rediscover targets, infer the key, read ambient config to fill
|
|
108
|
-
omissions, adopt a publisher workspace, or reinterpret work and team fields.
|
|
109
|
-
The public JavaScript bridge is implemented at that source pin; a complete fresh
|
|
110
|
-
onboarding CLI is still separate integration work.
|
|
111
|
-
|
|
112
|
-
## Fresh acceptance driver
|
|
113
|
-
|
|
114
|
-
`lib/portable-onboarding-acceptance.mjs` (deleted with v2) kept acceptance above the same facade:
|
|
115
|
-
|
|
116
|
-
- `compareFreshSourceAcceptance({organization,standalone})` accepts only issued,
|
|
117
|
-
ready inspections and proves qualified identity, exact commit, export and
|
|
118
|
-
definition equality. The organization side must have workspace context; the
|
|
119
|
-
standalone side must have standalone context and an explicit non-Git work target.
|
|
120
|
-
- `prepareFreshOnboarding(inspection, options, adapters)` builds the exact public
|
|
121
|
-
request, rechecks the issued deployment/work-root witnesses and fresh managed
|
|
122
|
-
state immediately before any mutation, and
|
|
123
|
-
calls only an explicitly supplied `prepareCapturedComposition` adapter. An
|
|
124
|
-
absent deployment returns `fresh-deployment-provisioning-required`; a missing
|
|
125
|
-
core bridge returns `onboarding-integration-required`; both are `pending` with
|
|
126
|
-
`mutationAttempted:false`.
|
|
127
|
-
- A supplied preparation result exposes explicit requested write bindings and
|
|
128
|
-
exact artifact approval requests. The driver never approves them or converts an
|
|
129
|
-
approval-required result into success.
|
|
130
|
-
|
|
131
|
-
The deterministic fixture uses one unchanged source in an explicit organization
|
|
132
|
-
workspace/member context and a standalone non-Git target. It verifies explicit
|
|
133
|
-
bindings and approval requests, publisher-backlink non-follow, and a positive
|
|
134
|
-
control where newly appeared managed state refuses before the mutating adapter.
|
|
135
|
-
That deterministic fixture uses no production provider, install, team, identity,
|
|
136
|
-
timer or job operation.
|
|
137
|
-
|
|
138
|
-
## Request-file transport
|
|
139
|
-
|
|
140
|
-
`readPortablePreparationRequest` in `lib/portable-onboarding-request.mjs` is the
|
|
141
|
-
thin bounded file reader for the proposed lifecycle-owned `prepare --request`
|
|
142
|
-
route. It accepts parsed transport forms, uses shared no-follow/strict JSON
|
|
143
|
-
readers and returns the entire public request unchanged. It rejects competing
|
|
144
|
-
input flags and explicit captured selectors before file access, does not inherit
|
|
145
|
-
old resolution authority, and adds no preparation schema/resolver/defaults.
|
|
146
|
-
Unknown fields remain present for public core to reject. See the
|
|
147
|
-
[request transport contract](2026-09-17-public-prepare-request.md); implementing
|
|
148
|
-
the helper does not claim CLI router availability.
|
|
149
|
-
|
|
150
|
-
## Pinned real public consumer
|
|
151
|
-
|
|
152
|
-
`test/portable-onboarding-public.acceptance.mjs` (deleted with v2) additionally executed the real
|
|
153
|
-
public preparation/approval/retained-inspection APIs archived from exact core
|
|
154
|
-
`c5c6a3c9171e424a36a1bdbf3932b9319a3c6c72`, without merging its branch. It uses
|
|
155
|
-
isolated local Git transport, temporary deployments and a declared inert fixture
|
|
156
|
-
knowledge capability—not OKF or a live service. The unchanged builder output
|
|
157
|
-
crosses the public boundary with no added private `directory` and no stripped
|
|
158
|
-
standalone/operator fields. Source identity, exact revision, explicit destinations,
|
|
159
|
-
string/null contexts, approval-before-code and retained full-subject authority are
|
|
160
|
-
checked. A newly appeared legacy lock still refuses before preparation.
|
|
161
|
-
|
|
162
|
-
A separate case in the same explicit driver pins
|
|
163
|
-
`257c4b96b67001fa2bcf38436e57106c44aa797b` for the actual public CLI
|
|
164
|
-
`spawn --no-launch`. It uses the real producer, not hand-written instance metadata,
|
|
165
|
-
to mint distinct incarnations and index admitted/completed fixture spawn-hook
|
|
166
|
-
intents. It verifies exact retained subject/context/binding, private snapshot
|
|
167
|
-
cleanup, and refusal of both repeated and occupied homes without overwrite.
|
|
168
|
-
The result is still `launched:false`, `launchPending:true`; actual runtime launch
|
|
169
|
-
and live provider behavior are not qualified.
|
|
170
|
-
|
|
171
|
-
See the [fresh operator walkthrough](2026-09-16-fresh-operator-walkthrough.md) for
|
|
172
|
-
exact reproduction, implemented public no-launch steps and the pending lifecycle-
|
|
173
|
-
owned request-file router versus actual launch/provider qualification. The earlier standalone key limit mismatch is corrected: onboarding
|
|
174
|
-
uses core's 256 UTF-8-byte bound, with no silent conversion. The pinned public
|
|
175
|
-
consumer checks preservation of a non-ASCII key exactly at that boundary.
|
|
176
|
-
|
|
177
|
-
Fresh setup is not permission to remove existing work, knowledge, native history,
|
|
178
|
-
identities or credentials. It is also not release, provider/privacy qualification,
|
|
179
|
-
instance launch, team creation or schedule activation.
|
|
@@ -1,26 +0,0 @@
|
|
|
1
|
-
# Public preparation request-file transport
|
|
2
|
-
|
|
3
|
-
```
|
|
4
|
-
oats prepare --request <absolute-regular-json-file> [--json]
|
|
5
|
-
```
|
|
6
|
-
|
|
7
|
-
The JSON file is the **whole public `prepareCapturedComposition` input**—for fresh onboarding, only `buildFreshPreparationRequest(...).preparation`. It is not the onboarding result/ready-inspection wrapper, captured resolution/execution binding, private preparation scratch `directory`, or instance/work placement. No fields are filtered or inferred: the existing closed public validator rejects unknown fields. Preparation distinguishes workspace field presence from truthiness: every supplied workspace is validated, including null/false/zero/empty-string values, and it conflicts with any explicit standalone key. An absent workspace plus an explicit standalone null remains valid.
|
|
8
|
-
|
|
9
|
-
The CLI delegates to `readPortablePreparationRequest` in `lib/portable-onboarding-request.mjs`, the same leaf used by onboarding consumers. It uses `readPortableBytes` and `parseStrictJson` once, with their existing bounds: regular/no-follow descriptor read, at most 8 MiB, strict UTF-8/JSON, duplicate-key rejection, depth 64 and 100000 entries. The full decoded object is frozen without filtering/defaulting. There is no new JSON/global argument parser, resolver, recursive include syntax, stdin/eval mode or private scratch API. Diagnostic errors are sanitized and do not echo raw provider values. Requests must contain nonsecret declarations and credential references, never credential values.
|
|
10
|
-
|
|
11
|
-
`--request` is mutually exclusive with all other preparation input flags. Exclusivity and normalized absolute-path checks precede opening the file. Missing/nonregular/symlink files and invalid path arguments report `E_BAD_ARGS`; malformed UTF-8/JSON reports `invalid-declaration`, while byte/depth/entry excess remains `resource-limit` and observed read drift remains `integrity-drift`. This aligns the unreleased inline CLI prototype with the shared helper rather than maintaining competing error contracts. Explicit captured `--deployment`, `--resolution`, or `--artifact-set` selectors—including equals spelling and selectors before the command—are rejected before reading/preparing a request. Partial/malformed selectors retain the existing typed refusal.
|
|
12
|
-
|
|
13
|
-
The shared routing boundary first uses `capturedSelector(args,{})` to inspect explicit selectors without inherited authority. Prepare then handles explicit new work; even malformed inherited OATS deployment/resolution/instance variables cannot select its source or context. Other commands retain their existing explicit/inherited capture rules. No global environment reset is performed.
|
|
14
|
-
|
|
15
|
-
Existing forms remain supported:
|
|
16
|
-
|
|
17
|
-
```
|
|
18
|
-
oats prepare --dir ABS --source GIT --revision REF --export PATH --alias NAME [--work MODE] [--json]
|
|
19
|
-
oats prepare --dir ABS --workspace GIT [--workspace-revision REF] --alias NAME [--work MODE] [--json]
|
|
20
|
-
```
|
|
21
|
-
|
|
22
|
-
All forms share the existing result renderer. Incomplete preparation preserves problems and exact approval requests in error details. A returned resolution is not enrollment, privacy, executable approval or actual launch success.
|
|
23
|
-
|
|
24
|
-
This transport represents explicit **new-work input**, not a reusable ready-inspection permission. Fresh onboarding must still enforce its own preflight at the mutation boundary. After a first prepare writes managed state, explicit approved continuation uses ordinary public preparation; the CLI neither deletes that state nor imposes fresh-only restrictions on legitimate continuation.
|
|
25
|
-
|
|
26
|
-
Focused tests cover complete native-transport requests with provider-owned operator bindings and explicit standalone string/null contexts; exact 256-byte Unicode key preservation; poisoned inherited selectors; source/workspace flag compatibility; mixed/duplicate/relative/malformed/symlink/oversized/unknown-field refusals; and before/after-command explicit selector refusal. These are isolated fixture preparation tests, not real provider privacy or managed-runtime launch qualification.
|
|
@@ -1,98 +0,0 @@
|
|
|
1
|
-
# Provider-owned binding codecs — implementation boundary
|
|
2
|
-
|
|
3
|
-
This implements the accepted provider-neutral binding direction, not a new policy
|
|
4
|
-
engine or an OKF data model in the kernel. Current preparation deliberately returns
|
|
5
|
-
`provider-not-qualified`; the following handshake is the next integration step.
|
|
6
|
-
|
|
7
|
-
## One provider, three bounded commands
|
|
8
|
-
|
|
9
|
-
A fundamental capability may declare an optional versioned `binding` interface:
|
|
10
|
-
|
|
11
|
-
```json
|
|
12
|
-
{
|
|
13
|
-
"binding": {
|
|
14
|
-
"version": 1,
|
|
15
|
-
"normalize": "binding-normalize",
|
|
16
|
-
"bind": "binding-bind",
|
|
17
|
-
"check": "binding-check"
|
|
18
|
-
}
|
|
19
|
-
}
|
|
20
|
-
```
|
|
21
|
-
|
|
22
|
-
Each value names an EXISTING command in that same capability manifest. It is not a
|
|
23
|
-
second script/operation table. Those commands therefore already participate in
|
|
24
|
-
self-containment, exact executable approval and retained resource inventory.
|
|
25
|
-
Missing/unknown versions or references refuse. The interface belongs only to the
|
|
26
|
-
manifest's fundamental slot.
|
|
27
|
-
|
|
28
|
-
1. **normalize** receives already parsed source/workspace/operator inputs with their
|
|
29
|
-
origins and captured effective capability settings. It emits equality/presence
|
|
30
|
-
requirements and bounded candidates for its own `/bindings/<slot>/…` fields.
|
|
31
|
-
It must not select capability sources or rewrite another provider's fields.
|
|
32
|
-
2. The kernel combines these with existing requirements/candidates through the SAME
|
|
33
|
-
`resolveChoices` engine. A conflict/incomplete result is not a usable binding.
|
|
34
|
-
3. **bind** receives the selected field values and emits the effective, NONSECRET
|
|
35
|
-
ProviderBinding envelope plus credential references. Messaging additionally emits
|
|
36
|
-
the responsible-human/private/wider choice envelope. Output does not certify
|
|
37
|
-
membership, authorization or privacy. It cannot change the selected software.
|
|
38
|
-
4. **check** receives a captured binding at the requested action boundary and checks
|
|
39
|
-
mutable credentials/host/provider readiness using native facilities. It does not
|
|
40
|
-
rewrite the immutable binding or silently enroll/create a replacement team.
|
|
41
|
-
|
|
42
|
-
Separating normalization from binding avoids constructing a payload before operator
|
|
43
|
-
choices have passed the common resolver, or letting a provider carry its own hidden
|
|
44
|
-
precedence implementation. The default OKF provider owns its node/store/schema rules;
|
|
45
|
-
an alternate provider need not contain OKF reads/owns/stateDir fields.
|
|
46
|
-
|
|
47
|
-
## Execution and custody
|
|
48
|
-
|
|
49
|
-
No codec executes merely because it was downloaded. Preparation reads current exact
|
|
50
|
-
artifact approval first; missing approval exposes the prospective artifact set for
|
|
51
|
-
explicit `oats trust --artifact-set`, not a fabricated partial resolution. Commands
|
|
52
|
-
run from their verified retained root with bounded JSON stdin/stdout and duration,
|
|
53
|
-
not imports from a current source directory. Errors handling malformed provider
|
|
54
|
-
output must not quote possibly sensitive raw stdout/stderr.
|
|
55
|
-
|
|
56
|
-
Preparation commands are normalization/rendering, not enrollment or lifecycle hooks.
|
|
57
|
-
Approved provider implementations must keep those phases free of external mutations.
|
|
58
|
-
Actual setup/identity/team lifecycle occurs only at its explicit later action boundary.
|
|
59
|
-
This is a provider contract, not a claimed filesystem/network sandbox.
|
|
60
|
-
|
|
61
|
-
Provider output is structurally validated, field ownership checked, and no complete
|
|
62
|
-
record is published until binding/resource/helper preparation succeeds. Credential
|
|
63
|
-
values are never copied into a record or notes; only supported lookup references are
|
|
64
|
-
retained. A check's current result is not cached as permanent authority in the record.
|
|
65
|
-
|
|
66
|
-
## Delivery status
|
|
67
|
-
|
|
68
|
-
The optional manifest field has a shared validator wired into the complete kernel
|
|
69
|
-
manifest loader and its public structural schema. The [wire v1](2026-09-16-provider-binding-wire.md)
|
|
70
|
-
now has a bounded codec and native invocation broker, exposed through core
|
|
71
|
-
`runCapturedProviderBinding({deployment,artifacts,capability,phase,settings,input})`.
|
|
72
|
-
It loads the complete retained manifest, verifies artifact/provenance, checks current
|
|
73
|
-
exact approval before execution, and validates/sanitizes provider output. Shared
|
|
74
|
-
ProviderBinding, MessagingChoice and captured-choice codecs are reused, not copied.
|
|
75
|
-
A native fixture proves no unapproved child runs and all phases work after source
|
|
76
|
-
deletion/current-config poison; that is transport evidence, not provider qualification.
|
|
77
|
-
|
|
78
|
-
Preparation now supplies frozen decoded declarations/origins to the broker, merges
|
|
79
|
-
provider-owned fields through the same resolver, and captures complete nonsecret
|
|
80
|
-
bindings only after conflicts and provenance checks pass. Missing approval/interface
|
|
81
|
-
or unresolved fields still expose prospective software without a fabricated record.
|
|
82
|
-
Operator preparation input may include a provider-owned `bindings` map alongside its
|
|
83
|
-
existing software `policy`; it does not introduce another precedence engine. Adoption
|
|
84
|
-
origin-map keys are made subtree-relative while original document pointers/spans stay
|
|
85
|
-
intact. A real standalone-OKF consumer probe at a pinned source commit verifies the
|
|
86
|
-
cross-repository payload and source-deleted, non-ready check (an absent base is not ready).
|
|
87
|
-
|
|
88
|
-
Captured action loading now runs read-only provider readiness against its exact
|
|
89
|
-
binding; non-ready refuses before execution and is not cached in the immutable record.
|
|
90
|
-
Synchronous captured CLI commands receive a private `OATS_BINDING_FILE` snapshot,
|
|
91
|
-
not live configuration, with owned cleanup after success/failure. A real pinned OKF
|
|
92
|
-
consumer fixture verifies its native snapshot loader against an initialized temporary
|
|
93
|
-
base after source/config deletion. That is integration evidence, not production
|
|
94
|
-
provider or privacy qualification.
|
|
95
|
-
|
|
96
|
-
Captured lifecycle/registration consumers and full helper policy remain unfinished.
|
|
97
|
-
Default-provider work remains in its own source repository. No live provider,
|
|
98
|
-
private-team behavior, new release or deployment was qualified here.
|
|
@@ -1,274 +0,0 @@
|
|
|
1
|
-
# Provider binding wire v1
|
|
2
|
-
|
|
3
|
-
Concrete child/parent integration contract for [provider-owned codecs](2026-09-16-provider-binding-codecs.md).
|
|
4
|
-
This is a bounded JSON protocol, not a second resolver or sandbox. Source commands
|
|
5
|
-
must already have exact artifact approval before any phase runs.
|
|
6
|
-
|
|
7
|
-
## Transport
|
|
8
|
-
|
|
9
|
-
Invoke the manifest-owned phase command with its declared arguments, no shell and
|
|
10
|
-
no extra implicit flags. Write ONE UTF-8 JSON request to stdin and close stdin.
|
|
11
|
-
Stdout is ONE JSON response; logs belong on stderr. Maximum request/response size
|
|
12
|
-
is 1 MiB, depth 32, 16384 entries; execution timeout is at most 30 seconds. The
|
|
13
|
-
native broker may accept a shorter explicit `timeoutMs` (1–30000). Timeout terminates
|
|
14
|
-
only the spawned codec process with SIGKILL, not an ignorable SIGTERM; no existing
|
|
15
|
-
session or unrelated process is targeted. Duplicate keys,
|
|
16
|
-
trailing output, malformed UTF-8 and unknown envelope fields/versions refuse.
|
|
17
|
-
Kernel diagnostics never echo provider stdout/stderr or free-form error messages.
|
|
18
|
-
The command runs from its verified retained capability root. Ambient OATS/PI
|
|
19
|
-
instance identity is scrubbed; kernel supplies only this capability's identity,
|
|
20
|
-
root and effective settings. Native host facilities remain host-owned. This is
|
|
21
|
-
not filesystem/network isolation, and normalization/binding must not enroll,
|
|
22
|
-
write stores, publish knowledge or start workers.
|
|
23
|
-
|
|
24
|
-
Every request has exactly:
|
|
25
|
-
|
|
26
|
-
```json
|
|
27
|
-
{"schemaVersion":1,"phase":"normalize","slot":"knowledge","capability":"oats.okf","settings":{},"input":{}}
|
|
28
|
-
```
|
|
29
|
-
|
|
30
|
-
`phase` is normalize/bind/check; slot is knowledge/messaging/tasks. Both must match
|
|
31
|
-
the retained manifest. Settings are already selected and schema-validated.
|
|
32
|
-
|
|
33
|
-
Success echoes the identity fields and contains `ok:true,result:{...}`. Failure
|
|
34
|
-
echoes them and contains `ok:false,error:{code:"needs-configuration"}`. It has no
|
|
35
|
-
result. All structured responses exit 0: transport completed, while `ok` is the
|
|
36
|
-
semantic outcome. Nonzero exit/signal/timeout is transport failure. Allowed error/problem codes are needs-configuration, requirement-conflict,
|
|
37
|
-
invalid-binding, authorization-required, host-requirement-missing,
|
|
38
|
-
provider-unavailable and provider-not-qualified. Optional provider error/problem
|
|
39
|
-
`message` is permitted. The 0.24.4 follow-up retains it ONLY when it exactly
|
|
40
|
-
matches a fixed nonsecret reason in the VERIFIED selected capability manifest's
|
|
41
|
-
optional `binding.reasons` array: **1–64 unique strings**, each **1–200 printable
|
|
42
|
-
ASCII characters**, with no braces/interpolation markers. If the field is absent,
|
|
43
|
-
the kernel's reviewed per-capability compatibility list applies; a present invalid
|
|
44
|
-
or empty declaration refuses, never falls back. No trimming, Unicode normalization,
|
|
45
|
-
interpolation, prefix matching, operator values, paths, or unlisted provider output
|
|
46
|
-
cross this boundary. Code-only replies
|
|
47
|
-
and unknown/unlisted messages keep the existing kernel template fallback.
|
|
48
|
-
|
|
49
|
-
The allowlist is out-of-band kernel input, never declared by a provider response.
|
|
50
|
-
Exact artifact approval is still required BEFORE invoking the codec. The broker
|
|
51
|
-
preserves the vetted message and preparation rechecks it against the same selected
|
|
52
|
-
manifest, retaining slot/capability/origins. JSON and human CLI diagnostics surface
|
|
53
|
-
the reason; human output also shows an existing choice `key` when provided. This
|
|
54
|
-
changes no readiness status, launch authority, credential contract or wire version.
|
|
55
|
-
Older kernels reject the new optional manifest fields; providers declaring them
|
|
56
|
-
must floor on the reasons-capable **0.24.4** kernel. The compatibility list serves
|
|
57
|
-
older manifests, not a way around declaration validation. It includes the complete
|
|
58
|
-
30-message aweb1.11.0 codec vocabulary (including non-ready check reasons) and the
|
|
59
|
-
seven OKF2.1.2 setting messages; it invents none for code-only OKF2.1.1.
|
|
60
|
-
|
|
61
|
-
`binding.keys` is also accepted with **shape validation only** in0.24.4: a unique
|
|
62
|
-
array of exact names or trailing-dot namespaces (`wider`, `stores.`), each matching
|
|
63
|
-
`^[A-Za-z][A-Za-z0-9_-]*\\.?$` over the WHOLE string (no trailing newline). There
|
|
64
|
-
is no filtering, overlapping-ownership check or owned/unowned-key attribution yet;
|
|
65
|
-
those are deferred to0.25. Providers still receive the complete map and MUST ignore
|
|
66
|
-
foreign keys themselves. Declaring keys does not authorize diagnostic text.
|
|
67
|
-
|
|
68
|
-
Knowledge providers and harvesters follow the same separation: the
|
|
69
|
-
[knowledge capability boundary](2026-09-16-knowledge-capability-contract.md) keeps
|
|
70
|
-
models, retrieval, evidence selection, judgment and delivery in the capability.
|
|
71
|
-
Shared invocation/evidence/helper execution is infrastructure, not a kernel harvester.
|
|
72
|
-
|
|
73
|
-
## Normalize
|
|
74
|
-
|
|
75
|
-
`input` is `{declarations,context}`. Context is the captured workspace/standalone
|
|
76
|
-
context, not a cwd to inspect. Each declaration has exactly
|
|
77
|
-
`{kind,value,origin,origins}`:
|
|
78
|
-
|
|
79
|
-
- kind: soul/workspace/adoption/operator;
|
|
80
|
-
- value: the already-decoded soul declaration, workspace declaration, adoption
|
|
81
|
-
object, or operator input respectively (not YAML bytes or a filename);
|
|
82
|
-
- origin: its root Origin1; origins: JSON-pointer map of supplied Origin1 locators.
|
|
83
|
-
|
|
84
|
-
The provider interprets only its domain. It must not reread live source/config.
|
|
85
|
-
Returned origins must refer to supplied document/pointer witnesses. Soul hard
|
|
86
|
-
constraints use soul-requirement, soul defaults use soul-default; candidates from
|
|
87
|
-
other inputs use workspace-default/import-adoption/operator respectively. The
|
|
88
|
-
kernel checks origin authority as well as its structure; a source cannot mint an
|
|
89
|
-
operator candidate.
|
|
90
|
-
|
|
91
|
-
Result is exactly `{requirements,candidates,model}`. Requirements/candidates use
|
|
92
|
-
the existing resolveChoices wire entries. Every key must be a canonical JSON
|
|
93
|
-
pointer strictly below `/bindings/<slot>/`. Only the kernel selects winners by
|
|
94
|
-
combining these with the existing plan in the SAME resolver. Model is bounded
|
|
95
|
-
opaque nonsecret provider data, passed unchanged into bind in this transaction.
|
|
96
|
-
|
|
97
|
-
For default OKF, source `value.knowledge` is oats.okf.locations@1 with its existing
|
|
98
|
-
owner/stores/reads/owns payload. A workspace `knowledge.stores[]` entry for that
|
|
99
|
-
contract has `payload:{bindings:{"write.default":<portable locator>,...}}`.
|
|
100
|
-
Adoption/operator `value.bindings` is the already-authored provider binding map.
|
|
101
|
-
Several workspace envelopes remain separate same-authority inputs, not a merge
|
|
102
|
-
that silently chooses a winner. Explicit selected settings may supply host-owned
|
|
103
|
-
state placement; no stateDir or publication destination is inferred from a home.
|
|
104
|
-
Other providers own their payload contracts; the kernel does not parse these OKF
|
|
105
|
-
fields. Unknown/incompatible payload contracts must be reported, not reinterpreted.
|
|
106
|
-
|
|
107
|
-
## Bind
|
|
108
|
-
|
|
109
|
-
`input` is exactly `{model,choices,context}`. Choices contains ONLY this provider's
|
|
110
|
-
resolved `/bindings/<slot>/...` choices, including selectedBy/constraints/considered.
|
|
111
|
-
Result is `{payloadContract,payloadVersion,payload,credentialRefs,provenance}` plus
|
|
112
|
-
`messagingChoice` ONLY for messaging. Kernel adds schemaVersion/capability to form
|
|
113
|
-
ProviderBinding1. Credential references use the EXISTING env or provider-reference
|
|
114
|
-
shapes; values, keys and tokens are never copied. Payload is opaque NONSECRET data;
|
|
115
|
-
providers are responsible for their domain's nonsecret validation.
|
|
116
|
-
|
|
117
|
-
Messaging must return the existing enabled MessagingChoice1 with provider-resolvable
|
|
118
|
-
responsible human and exact context, plus explicit wider-team consent. A populated
|
|
119
|
-
binding is not evidence of enrollment/privacy/readiness. Non-messaging providers
|
|
120
|
-
cannot set messagingChoice. Disabled messaging is represented by no messaging
|
|
121
|
-
provider and `{schemaVersion:1,enabled:false}`, not an invented private team.
|
|
122
|
-
|
|
123
|
-
For messaging lifecycle integration, the [capability contract boundary](2026-09-16-messaging-capability-contract.md)
|
|
124
|
-
assigns generic intent/invocation to the kernel and native identity/team/transport
|
|
125
|
-
behavior to the capability. Missing additional invocation fields need one reviewed
|
|
126
|
-
versioned projection, not aweb-specific kernel behavior.
|
|
127
|
-
|
|
128
|
-
## Check
|
|
129
|
-
|
|
130
|
-
`input` is `{binding,context,action,invocation?}` with no other fields. Binding is
|
|
131
|
-
the complete immutable ProviderBinding1. Action is the requested captured action,
|
|
132
|
-
not a new launch recipe. Optional `invocation` is the same bounded
|
|
133
|
-
CapturedInvocationContext1 projected for execution below; if present, its capability,
|
|
134
|
-
context and action must match this request. It is not nullable: omit it for an explicit
|
|
135
|
-
scope check without invocation data. Identity-dependent provider actions must refuse
|
|
136
|
-
missing instance context. Normalize/bind do not accept this field.
|
|
137
|
-
Result is exactly `{status,problems}`; status is ready/needs-configuration/
|
|
138
|
-
authorization-required/unavailable. Problems is an array of code + optional message
|
|
139
|
-
objects using the error-code set above. Ready requires an empty problems array.
|
|
140
|
-
|
|
141
|
-
Check performs provider-owned READ-ONLY mutable readiness/credential/store/member
|
|
142
|
-
checks through existing native/provider mechanisms. Bounded private temporary Git
|
|
143
|
-
staging for fetch/checkout/read is allowed with owned cleanup; accepted stores,
|
|
144
|
-
operator checkouts and remotes must not be mutated. It does not change binding,
|
|
145
|
-
initialize a base, enroll an identity, create a team, or schedule/publish work.
|
|
146
|
-
Unsupported/unqualified checks return non-ready. Results are evaluated at each
|
|
147
|
-
action boundary and never persisted as permanent authority in the resolution.
|
|
148
|
-
A real provider acceptance is still required; fixture success is not certification.
|
|
149
|
-
|
|
150
|
-
## Captured command invocation
|
|
151
|
-
|
|
152
|
-
The captured action loader runs the provider's check against the verified record at
|
|
153
|
-
each command/operation/hook load; non-ready blocks before the action. Inspection and
|
|
154
|
-
instruction composition do not enroll or claim readiness. Captured hook dispatch and public captured native start/restart are implemented.
|
|
155
|
-
Public captured retirement remains unimplemented; managed-runtime/Pi adoption and
|
|
156
|
-
real-host readiness remain separate qualification steps.
|
|
157
|
-
|
|
158
|
-
For synchronous captured CLI commands, core writes the exact ProviderBinding1 to a
|
|
159
|
-
fresh private invocation directory outside the home and retained artifacts. It
|
|
160
|
-
passes only its absolute path in `OATS_BINDING_FILE`; the selected capability's
|
|
161
|
-
retained root and effective settings are supplied separately. The file is owner-only
|
|
162
|
-
mode `0600` and removed with its owned directory after success or failure. A pre-existing
|
|
163
|
-
ambient snapshot variable is scrubbed. The caller must not exit before cleanup.
|
|
164
|
-
|
|
165
|
-
This is an ephemeral invocation input, never the operator's live `bindings-file`
|
|
166
|
-
or a durable worker pointer. A provider must distinguish absent (legacy) from
|
|
167
|
-
present-but-invalid (refuse, no fallback). Independent work must freeze its needed
|
|
168
|
-
binding/runtime data under existing durable source/attempt custody before returning;
|
|
169
|
-
no async worker may rely on the invocation file remaining. No credential value is
|
|
170
|
-
part of the ProviderBinding contract. Abrupt process death can leave private scratch;
|
|
171
|
-
it does not make that scratch selectable authority or justify unsafe cleanup.
|
|
172
|
-
|
|
173
|
-
### Current paired execution transport versus explicit old ingress
|
|
174
|
-
|
|
175
|
-
Current captured commands, operations and hooks with an actual selected provider binding receive BOTH `OATS_INVOCATION_CONTEXT_FILE` and `OATS_BINDING_FILE`. Generic invocation is universal; an additive/unbound capability legitimately has no binding snapshot. The supplemental source receipt is not a substitute for either input. Checks still use the existing stdin contract and optional inline invocation, not an additional file channel.
|
|
176
|
-
|
|
177
|
-
The raw namespace-command route does not nominate an instance or admit an action. Source-independent existing-run completion therefore receives `instance:null`, `intent:null` and no instance-derived prior receipt, even after source-home deletion. The [existing-run completion boundary](2026-09-16-captured-admission.md#existing-provider-run-completion-after-source-home-deletion) keeps qualified retained provider-run custody separate from a new kernel mutation grant. No helper binding or invented live source identity substitutes for that authority.
|
|
178
|
-
|
|
179
|
-
Binding/source-receipt-only fixtures represent explicitly OLD transport, not positives for the current paired reader. Missing, malformed or invalid-present current snapshots must not cause synthesized projections or silent fallback. Any deliberate old-ingress compatibility path is separately explicit and qualified against exact producer/provider pins; it does not silently upgrade old fixtures or alter the selected supplemental-input/registered-replay policy.
|
|
180
|
-
|
|
181
|
-
## Captured lifecycle registration input
|
|
182
|
-
|
|
183
|
-
The kernel also has a bounded private `OATS_SOURCE_RECEIPT_FILE` projection for a
|
|
184
|
-
synchronous captured lifecycle hook that explicitly selects
|
|
185
|
-
`inputs.sourceReceipt:{version:1}` in its retained object-form declaration. No
|
|
186
|
-
opt-in means no source snapshot, regardless of layer; generic invocation remains
|
|
187
|
-
universal. See the [selected input contract](2026-09-17-capability-helper-input-contract.md). Its exact v1 payload is the agreed
|
|
188
|
-
`{schemaVersion,kind,home,work,context,agent,instance,sourceIdentity,role,executionBinding,responsibleHuman,binding}`
|
|
189
|
-
receipt. Persistent sources require their qualified captured soul identity; helper
|
|
190
|
-
receipts require `sourceIdentity:null`. The context equals the durable execution
|
|
191
|
-
deployment, the role is the retained canonical source instructions (bounded to
|
|
192
|
-
128 KiB), and the provider binding contains no credential values.
|
|
193
|
-
|
|
194
|
-
The file uses the same owner-only mode `0600`, outside-home/retained-artifact custody
|
|
195
|
-
and normal success/failure cleanup posture as `OATS_BINDING_FILE`. The home argument
|
|
196
|
-
must match the receipt. Captured lifecycle hook loading preflights every applicable
|
|
197
|
-
retained hook, exact approval, host requirement and provider readiness before the
|
|
198
|
-
first lifecycle side effect, then preserves the existing hook metadata, warning,
|
|
199
|
-
environment and required-hook result contract. Each selected receipt is derived only for its actual binding owner, from the
|
|
200
|
-
verified canonical body and owned generic instance/action facts, before provider
|
|
201
|
-
readiness/effects. Multiple opting providers get separate same-owner snapshots;
|
|
202
|
-
unsolicited/contradictory explicit receipts refuse and caller extraEnv cannot
|
|
203
|
-
nominate snapshot paths. No knowledge-slot dependency or automatic receipt is
|
|
204
|
-
inferred. This supplemental input is not a generic messaging identity contract
|
|
205
|
-
or permission for new registration through an absent-input fallback.
|
|
206
|
-
|
|
207
|
-
## Provider-neutral captured invocation context
|
|
208
|
-
|
|
209
|
-
Captured commands, hooks and operations receive one private mode-`0600`
|
|
210
|
-
`OATS_INVOCATION_CONTEXT_FILE`. Read-only checks receive that same validated data in
|
|
211
|
-
`input.invocation` instead, NOT via a second file/environment source of authority.
|
|
212
|
-
This enables setup-specific admission without requiring already-completed enrollment.
|
|
213
|
-
The unreleased v1 payload is:
|
|
214
|
-
|
|
215
|
-
```text
|
|
216
|
-
{schemaVersion:1, executionBinding,
|
|
217
|
-
subject: <exact captured record subject>,
|
|
218
|
-
instance:null|{home,work,name,agent,incarnationId},
|
|
219
|
-
intent:null|{schemaVersion:1,executionId,incarnationId,attempt},
|
|
220
|
-
context, responsibleHuman, messagingChoice,
|
|
221
|
-
capability, action, priorReceipt}
|
|
222
|
-
```
|
|
223
|
-
|
|
224
|
-
The subject is the existing closed union: `{kind:'persistent',soul: SoulSelection}`
|
|
225
|
-
or `{kind:'helper',provider: CapabilityArtifactRef,definition: ResourceRef,name}`.
|
|
226
|
-
Helpers retain their exact provider artifact and definition, not an alias-derived
|
|
227
|
-
identity. The shared subject/context codecs and structural schemas are reused.
|
|
228
|
-
Overall limits are 512 KiB, depth 32 and 16384 entries; `priorReceipt` separately has
|
|
229
|
-
128 KiB, depth 24 and 8192 entries. Its JSON is opaque and nullable, never credentials.
|
|
230
|
-
|
|
231
|
-
The kernel derives it from the verified record, explicit target and that capability's
|
|
232
|
-
current stored metadata/index before provider readiness or execution. Non-null instance
|
|
233
|
-
facts and any supplied prior receipt must match the captured home's owned incarnation,
|
|
234
|
-
record and indexed receipts; a scope action has instance:null and no invented home. A public broker check
|
|
235
|
-
with invocation re-verifies the referenced record and matches the entire binding,
|
|
236
|
-
artifact set and effective settings, not merely the request's syntactic shape.
|
|
237
|
-
`action` is the
|
|
238
|
-
existing exact loader action (`command` with capability/namespace and name, `hook`
|
|
239
|
-
with capability/name, or `operation` with slot/name), not a new action table.
|
|
240
|
-
`messagingChoice`
|
|
241
|
-
carries the requested private floor and explicit wider set; it is intent, never proof
|
|
242
|
-
of privacy/enrollment. `priorReceipt` is bounded opaque JSON owned by the selected
|
|
243
|
-
capability. Credential values remain outside all three snapshots. Providers must use
|
|
244
|
-
the exact execution/source/instance/context/human/action facts and reconcile retries
|
|
245
|
-
against their prior receipt; they must not infer replacements from cwd, OS user,
|
|
246
|
-
display name, source alias or ambient configuration.
|
|
247
|
-
|
|
248
|
-
The file uses the same owned scratch, success/failure cleanup and observed-result
|
|
249
|
-
preservation boundary as the binding/source snapshots. Captured hook dispatch recovers
|
|
250
|
-
an observed opaque provider receipt even if several nested snapshot cleanups fail,
|
|
251
|
-
including after a nonzero child exit. It records a required, unconfirmed cleanup
|
|
252
|
-
failure rather than treating the hook as clean or discarding receipt-owned effects.
|
|
253
|
-
This accounting is provider-neutral and does not interpret knowledge or messaging data.
|
|
254
|
-
Existing
|
|
255
|
-
`OATS_SOURCE_RECEIPT_FILE` remains a selected supplemental source-context input,
|
|
256
|
-
not a messaging-specific or general identity mechanism. Provider registration,
|
|
257
|
-
helper skipping/recursion policy and qualified existing-descriptor replay stay
|
|
258
|
-
provider-owned; absence alone does not identify a dependent/non-ready provider. Captured hook dispatch and public captured
|
|
259
|
-
start/restart are implemented; public captured retirement remains unimplemented.
|
|
260
|
-
Managed-runtime/Pi adoption and real-host qualification remain outstanding. These
|
|
261
|
-
captured paths must not fall back to current source or configuration.
|
|
262
|
-
|
|
263
|
-
This addition is an unreleased coordinated wire change: both provider validators
|
|
264
|
-
must accept optional `check.input.invocation` and the exact subject union before a
|
|
265
|
-
new compatible provider pin is used. The new incarnation/intent fields also need
|
|
266
|
-
coordinated successor consumers; earlier pins are not silently patched or claimed
|
|
267
|
-
compatible. [Captured admission](2026-09-16-captured-admission.md) records opaque fresh
|
|
268
|
-
incarnations and logical request IDs before effects using the existing home index.
|
|
269
|
-
An explicit retry reuses its ID/receipt; identical distinct requests get distinct IDs.
|
|
270
|
-
Composition/home/alias values are never replacement identities. Actual captured native dispatch is implemented under indexed incarnation/intent
|
|
271
|
-
custody. Stable scheduler execution-ID propagation and broader managed-runtime/Pi
|
|
272
|
-
and real-host qualification remain outstanding; inert fixture dispatch does not
|
|
273
|
-
prove model health or task completion. Admission
|
|
274
|
-
authorizes an attempt/reconciliation, not duplicate native effects, enrollment or privacy.
|