@awebai/oats 0.29.4 → 0.30.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/README.md +12 -6
- package/bin/oats.mjs +194 -50
- 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 +77 -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 +83 -0
- package/docs/release-lane.md +82 -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/release-notes/v0.30.1.md +123 -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 +137 -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/packages.mjs +1 -1
- package/lib/resolve.mjs +30 -88
- 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 +10 -16
- package/package.json +1 -3
- package/skills/oats-getting-started/SKILL.md +25 -13
- package/capabilities/oats-authoring/LICENSE +0 -21
- package/capabilities/oats-authoring/oats-package.json +0 -11
- package/capabilities/oats-authoring/oats.json +0 -12
- package/capabilities/oats-authoring/skills/integration-authoring/SKILL.md +0 -84
- package/capabilities/oats-authoring/skills/skill-craft/SKILL.md +0 -109
- package/capabilities/oats-authoring/skills/soul-craft/SKILL.md +0 -116
- package/capabilities/oats-aweb/bin/oats-aweb-binding.mjs +0 -11
- package/capabilities/oats-aweb/bin/oats-aweb.mjs +0 -1338
- package/capabilities/oats-aweb/injects/aweb.md +0 -47
- package/capabilities/oats-aweb/lib/binding-wire.mjs +0 -356
- package/capabilities/oats-aweb/lib/captured-execution.mjs +0 -91
- package/capabilities/oats-aweb/lib/captured-native.mjs +0 -91
- package/capabilities/oats-aweb/lib/grant-custody.mjs +0 -38
- package/capabilities/oats-aweb/lib/invocation-shape.mjs +0 -135
- package/capabilities/oats-aweb/lib/portable-binding.mjs +0 -146
- package/capabilities/oats-aweb/lib/session-readiness.mjs +0 -56
- package/capabilities/oats-aweb/lib/wake-receive.mjs +0 -56
- package/capabilities/oats-aweb/oats.json +0 -208
- package/capabilities/oats-aweb/skills/LICENSE +0 -21
- package/capabilities/oats-aweb/skills/VENDORED.md +0 -31
- package/capabilities/oats-aweb/skills/aweb-identity/SKILL.md +0 -201
- package/capabilities/oats-aweb/skills/aweb-messaging/SKILL.md +0 -161
- package/capabilities/oats-aweb/skills/aweb-messaging/references/messaging-scenarios.md +0 -61
- package/capabilities/oats-aweb/skills/aweb-team-membership/SKILL.md +0 -116
- package/capabilities/oats-aweb/skills/aweb-team-membership/references/team-membership-reference.md +0 -74
- package/capabilities/oats-aweb/skills/oats-aweb/SKILL.md +0 -216
- package/capabilities/oats-jira/bin/oats-jira.mjs +0 -40
- package/capabilities/oats-jira/injects/jira.md +0 -10
- package/capabilities/oats-jira/oats.json +0 -22
- package/capabilities/oats-jira/skills/jira-tasks/SKILL.md +0 -179
- package/capabilities/oats-linear/bin/oats-linear-hook.mjs +0 -34
- package/capabilities/oats-linear/bin/oats-linear.mjs +0 -344
- package/capabilities/oats-linear/injects/linear.md +0 -8
- package/capabilities/oats-linear/oats.json +0 -24
- package/capabilities/oats-linear/skills/linear-tasks/SKILL.md +0 -223
- package/capabilities/oats-okf/bin/oats-okf-binding.mjs +0 -14
- package/capabilities/oats-okf/bin/oats-okf.mjs +0 -209
- package/capabilities/oats-okf/injects/okf.md +0 -42
- package/capabilities/oats-okf/lib/binding-wire.mjs +0 -348
- package/capabilities/oats-okf/lib/captured-worker.mjs +0 -109
- package/capabilities/oats-okf/lib/config.mjs +0 -124
- package/capabilities/oats-okf/lib/consult.mjs +0 -518
- package/capabilities/oats-okf/lib/harvest-status.mjs +0 -88
- package/capabilities/oats-okf/lib/harvest-switch.mjs +0 -94
- package/capabilities/oats-okf/lib/inspection.mjs +0 -119
- package/capabilities/oats-okf/lib/invocation-context.mjs +0 -111
- package/capabilities/oats-okf/lib/invocation-shape.mjs +0 -135
- package/capabilities/oats-okf/lib/io.mjs +0 -118
- package/capabilities/oats-okf/lib/migration.mjs +0 -137
- package/capabilities/oats-okf/lib/okf-validate.mjs +0 -123
- package/capabilities/oats-okf/lib/portable-binding.mjs +0 -199
- package/capabilities/oats-okf/lib/source-contract.mjs +0 -46
- package/capabilities/oats-okf/lib/sources.mjs +0 -424
- package/capabilities/oats-okf/lib/stores.mjs +0 -473
- package/capabilities/oats-okf/lib/worker.mjs +0 -497
- package/capabilities/oats-okf/oats.json +0 -148
- package/capabilities/oats-okf/schemas/okf-base.schema.json +0 -46
- package/capabilities/oats-okf/schemas/okf-bindings.schema.json +0 -112
- package/capabilities/oats-okf/schemas/okf-portable-declaration.schema.json +0 -87
- package/capabilities/oats-okf/schemas/okf-portable-payload.schema.json +0 -113
- package/capabilities/oats-okf/schemas/okf-soul.schema.json +0 -37
- package/capabilities/oats-okf/skills/okf-consultation/SKILL.md +0 -144
- package/capabilities/oats-okf/skills/okf-consultation/references/consult.md +0 -86
- package/capabilities/oats-okf/skills/okf-instance-knowledge/SKILL.md +0 -104
- package/capabilities/oats-okf-harvest/bin/okf-harvest.mjs +0 -140
- package/capabilities/oats-okf-harvest/injects/harvester.md +0 -12
- package/capabilities/oats-okf-harvest/oats.json +0 -26
- package/capabilities/oats-okf-harvest/skills/knowledge-harvest/SKILL.md +0 -168
- package/capabilities/oats-okf-harvest/skills/knowledge-theory/SKILL.md +0 -192
- package/capabilities/oats-okf-harvest/skills/okf-authoring/SKILL.md +0 -151
- package/capabilities/oats-okf-harvest/skills/okf-authoring/scripts/okf-validate.mjs +0 -123
- package/capabilities/oats-okf-maintenance/bin/okf-maintenance.mjs +0 -170
- package/capabilities/oats-okf-maintenance/injects/maintainer.md +0 -12
- package/capabilities/oats-okf-maintenance/lib/provenance.mjs +0 -50
- package/capabilities/oats-okf-maintenance/oats.json +0 -21
- package/capabilities/oats-okf-maintenance/skills/knowledge-review/SKILL.md +0 -159
- package/capabilities/oats-okf-maintenance/skills/knowledge-theory/SKILL.md +0 -192
- package/capabilities/oats-okf-maintenance/skills/okf-authoring/SKILL.md +0 -151
- package/capabilities/oats-okf-maintenance/skills/okf-authoring/scripts/okf-validate.mjs +0 -123
- package/capabilities/oats-okf-maintenance/skills/okf-trigger-setup/SKILL.md +0 -146
- 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,95 +0,0 @@
|
|
|
1
|
-
# Capability-owned helper injection and lifecycle input contract
|
|
2
|
-
|
|
3
|
-
**Decision status: exact syntax/witness plan approved; shared producer implementation candidate, paired provider qualification pending.** Shared codecs, retained composition/publication checks and selected hook input delivery are implemented together and require independent review and exact provider pairing before runtime qualification. This is not production acceptance, does not waive custody/launch gates, and does not authorize changes to a stable provider/index review pin. Native launch/custody work remains the priority.
|
|
4
|
-
|
|
5
|
-
Context: current captured preparation omits helper knowledge injections by slot and activation automatically supplies a source receipt to a knowledge spawn hook. These are capability policies in kernel clothing. Replace only those assumptions with explicit retained declarations, reusing [captured invocation](2026-09-16-provider-binding-wire.md), existing choices/resources/composition and the existing hook table. No knowledge store, harvester, new resolver or action registry belongs in this change.
|
|
6
|
-
|
|
7
|
-
## 1. Exact `helperInjection` syntax
|
|
8
|
-
|
|
9
|
-
One optional capability-manifest field; when present it is exactly one of:
|
|
10
|
-
|
|
11
|
-
```json
|
|
12
|
-
{"helperInjection":{"version":1,"mode":"inherit"}}
|
|
13
|
-
```
|
|
14
|
-
|
|
15
|
-
```json
|
|
16
|
-
{"helperInjection":{"version":1,"mode":"omit"}}
|
|
17
|
-
```
|
|
18
|
-
|
|
19
|
-
```json
|
|
20
|
-
{"helperInjection":{"version":1,"mode":"file","path":"injects/helper.md"}}
|
|
21
|
-
```
|
|
22
|
-
|
|
23
|
-
`version` is the integer 1. The declaration is closed: `version`/`mode` are required; only `file` requires/allows `path`. Unknown fields, versions, modes and null/false alternatives refuse. There are no helper-name patterns, conditions, settings overrides or software/provider/team selections in this declaration.
|
|
24
|
-
|
|
25
|
-
| Mode | Contribution to a helper composition selecting this capability |
|
|
26
|
-
| --- | --- |
|
|
27
|
-
| `inherit` | Its own retained `inject` contribution, under existing composition choices. Missing own injection refuses rather than inventing one. |
|
|
28
|
-
| `omit` | No injection from this capability; record the explicit declaration-backed omission. |
|
|
29
|
-
| `file` | Its own contained, normalized capability-relative regular file. It may be helper-only even if the capability has no primary `inject`. |
|
|
30
|
-
|
|
31
|
-
The field controls only `capability:<its-id>`, never kernel/work-mode/another capability's block. It is not permission to register a source, own a store, harvest, publish, delete state or edit retained resources. Existing separately authorized instruction disable/override choices cannot be silently displaced; an unsupported combination refuses instead of introducing another precedence algorithm.
|
|
32
|
-
|
|
33
|
-
For **new helper preparation**, a selected capability with an injection contribution but missing policy is unresolved (`needs-configuration`), regardless of its layer. A capability with neither a primary injection nor a helper declaration contributes nothing and needs no invented policy. Primary compositions are unchanged. Preflight all advertised helpers before publishing any helper or parent record; keep the current helper-authored software/provider-policy refusal.
|
|
34
|
-
|
|
35
|
-
### Captured witness
|
|
36
|
-
|
|
37
|
-
Use the existing choice resolver with a capability-local hard equality fact:
|
|
38
|
-
|
|
39
|
-
- Choice key: `/helpers/injections/<JSON-pointer-escaped-capability-id>`.
|
|
40
|
-
- Value: the existing `instruction:capability:<id>` resource key, or null for omission.
|
|
41
|
-
- Origin: existing `kind:"source-export"`, witnessing this capability's exported instruction contribution; artifact document `{kind:"artifact",owner:<exact capability artifact>,path:"oats.json",integrity:<raw manifest bytes integrity>}`, pointer `/helperInjection`.
|
|
42
|
-
- Inclusion: existing block `{source:"capability:<id>",resource:<key>,choice:<choice-key>}`. The resource remains owned by the same exact capability artifact and must match its retained declared file.
|
|
43
|
-
- Omission: `{source:"capability:<id>",reason:"helper-policy",choice:<choice-key>}` with null value and the exact retained `omit` witness.
|
|
44
|
-
|
|
45
|
-
No new authority kind or resolver is needed. The verifier must check both directions: every capability-sourced block/omission in a newly published helper agrees with its owner's exact retained helper-policy fact, and every applicable retained declaration is represented. This includes entries with no choice or an unrelated operator choice: neither can supply a contribution from a capability with no applicable declaration. Publication checks run through the real `commitCapturedResolution` boundary before creating the store/staging, not only through the compiler. A same-valued fabricated origin is not sufficient. Such witnesses cannot justify choices for software or other capabilities.
|
|
46
|
-
|
|
47
|
-
### Old evidence versus new publication
|
|
48
|
-
|
|
49
|
-
`helper-knowledge` remains readable/verifiable as literal old captured evidence; never rewrite its record or infer a new policy from it. The new compiler never emits it. New publication must not mint a legacy slot-derived omission to evade declaration checks; reuse of an already-present identical old record remains distinct from creating one. `verifyResolutionInputs` checks declared policy witnesses on retained inputs. `commitCapturedResolution` first permits verified identical already-present evidence reuse, then enforces the new-publication policy BEFORE creating a store/staging file for a new record. Direct callers bypassing the compiler cannot mint a legacy omission or missing-policy helper. Literal historical read/reuse and distinct new-mint refusals have explicit storage-level counterexamples. No historical reconstruction or general migration is added.
|
|
50
|
-
|
|
51
|
-
## 2. Exact per-hook source-receipt opt-in
|
|
52
|
-
|
|
53
|
-
Extend the existing **object form of a hook**, not a parallel hook/action table:
|
|
54
|
-
|
|
55
|
-
```json
|
|
56
|
-
{
|
|
57
|
-
"hooks": {
|
|
58
|
-
"spawn": {
|
|
59
|
-
"command": "<unchanged existing spawn command>",
|
|
60
|
-
"required": true,
|
|
61
|
-
"inputs": {
|
|
62
|
-
"sourceReceipt": {"version": 1}
|
|
63
|
-
}
|
|
64
|
-
}
|
|
65
|
-
}
|
|
66
|
-
}
|
|
67
|
-
```
|
|
68
|
-
|
|
69
|
-
The command is a placeholder for the capability's unchanged actual declaration. Existing command-string hooks still work and request no source receipt. `inputs` is an optional closed object, presently allowing only `sourceReceipt`; that value is exactly `{version:1}`. Absence/empty `inputs` means no opt-in; null/false/unsupported versions and arbitrary contract names refuse. Existing approved hook names and `required` restrictions are unchanged. An opt-in does not implement an otherwise unsupported lifecycle path.
|
|
70
|
-
|
|
71
|
-
The emitted payload is the existing **SourceReceipt1**, unchanged: schemaVersion/kind/home/work/context/agent/instance/sourceIdentity/role/executionBinding/responsibleHuman/binding. Its legacy `context` field remains the normalized execution deployment; the generic invocation separately carries the full captured workspace/standalone context. Do not silently redefine either field.
|
|
72
|
-
|
|
73
|
-
Before readiness or hook effects, an opted-in input requires:
|
|
74
|
-
|
|
75
|
-
1. An exact verified selected manifest/hook and approved executable, with version-1 opt-in read from retained bytes.
|
|
76
|
-
2. The current owned instance/incarnation/work custody and matching admitted action; source/subject/instance/human/context/execution-binding equality remains mandatory.
|
|
77
|
-
3. The opting capability's **actual selected ProviderBinding1** in its declared layer, with matching owner and versioned payload. An additive capability with no such binding cannot request this input; never borrow another provider's binding or infer one from a slot name alone.
|
|
78
|
-
4. The retained canonical role resource for that subject in the verified composition, including source/definition ownership and canonical alias checks. Helpers retain their helper identity semantics, not an invented persistent identity.
|
|
79
|
-
|
|
80
|
-
The captured hook runner derives separately for each opted-in hook owner, using the existing source-receipt validator/private snapshot wrapper beside its generic invocation and binding snapshots. All selected-input prerequisites are checked during static all-hook preflight, then the owned instance facts and selected receipt are compared again under the admitted projection before provider readiness/execution. Activation no longer supplies an automatic knowledge-slot receipt. Do not derive one knowledge receipt and distribute it to other providers. Generic invocation remains available without source-receipt opt-in.
|
|
81
|
-
|
|
82
|
-
If a core caller supplies an explicit receipt, require exact equality with the derived input and a matching opted-in owner; reject unsolicited or contradictory receipts before provider code. Ambient/caller-nominated snapshot files are not authority. Unselected inputs must not leak through `extraEnv`, and selected snapshots must retain same-owner/no-fallback handling. Uncertainty, cleanup failures and observed receipts continue through the existing independent custody/reporting path.
|
|
83
|
-
|
|
84
|
-
No opt-in means **no automatic SourceReceipt1**, including for a knowledge provider. Absence is not consent, but absence alone is also not generic proof of provider dependency or non-readiness. Do not infer that dependency from a capability name or layer. A deliberately registered old source may replay from its retained descriptor plus binding when its existing qualified contract allows it; NEW source registration must not acquire authority through that fallback. Old captures remain immutable. Producer/provider candidates must identify and test this compatibility/readiness distinction against exact qualified artifact/version pins, rather than claiming a universal automatic non-ready diagnosis.
|
|
85
|
-
|
|
86
|
-
## 3. Default OKF and qualification sequence
|
|
87
|
-
|
|
88
|
-
This producer candidate changes the captured preparation/dispatch paths; it does not qualify legacy config-chain lifecycle execution for these selected inputs. The compatible candidates must declare the actual OATS compatibility floor containing these codecs, coordinated at release; an older kernel or legacy route silently ignoring new fields is not compatible. Default OKF's separate compatible candidate must explicitly declare `helperInjection:{version:1,mode:"omit"}` and add `inputs.sourceReceipt:{version:1}` only to spawn/retire hooks that actually consume SourceReceipt1: preserve spawn command/required:true, retain the retire command/required semantics when converting it to an object, and do NOT opt in soul-scaffold. Keep actual commands and required-hook semantics intact. Registration/helper skip/recursive-harvest prevention remain provider-owned and must still pass; omitted instruction text is not recursion prevention. Runtime Git knowledge delivery remains PR-only.
|
|
89
|
-
|
|
90
|
-
Sequence after priority custody/native-launch work:
|
|
91
|
-
|
|
92
|
-
1. Exact syntax/witness review is complete and implementation is authorized, including the provider's binding edges; do not change the stable source-main/index review pin or wait for another milestone permission.
|
|
93
|
-
2. Shared producer implementation now includes manifest codec/schema, retained declaration verification, helper choices/composer, storage publication guard and per-hook input opt-in together. Preserve legacy evidence without new slot-based omissions; independent source review is still required.
|
|
94
|
-
3. Pair a separately committed default OKF consumer with the exact producer. Test own-only inherit/omit/file, missing policy, cross-owner/path escape, forged/absent declaration witnesses, missing input prerequisites, multi-provider same-owner delivery and snapshot fallback attempts.
|
|
95
|
-
4. Re-run provider registration/helper-skip/recursion and PR-delivery safeguards on the paired pins. Fixture compatibility is not native enrollment/privacy or real helper launch. Coordinator owns final acceptance/main/production under standing when-ready authorization.
|
|
@@ -1,53 +0,0 @@
|
|
|
1
|
-
# Captured native backend parity: tmux and Herdr
|
|
2
|
-
|
|
3
|
-
Implementation candidate over the existing native session transaction. Herdr is a required backend, not optional post-release work. This increment supports captured primary/helper public start/restart with both adapters; applicable wake/retire/recovery/provider-worker paths and real model/host qualification remain separate required gates before overall rollout completion.
|
|
4
|
-
|
|
5
|
-
## Exact public endpoint and receipt shapes
|
|
6
|
-
|
|
7
|
-
The existing native request remains `{schemaVersion:1,backend?,task?,stopGraceMs?}`. Backend is a closed tagged union:
|
|
8
|
-
|
|
9
|
-
```json
|
|
10
|
-
{"backend":"tmux","binary":"/absolute/tmux","socket":"/absolute/tmux.sock","session":"selected-session"}
|
|
11
|
-
```
|
|
12
|
-
|
|
13
|
-
```json
|
|
14
|
-
{"backend":"herdr","binary":"/absolute/herdr","socket":"/absolute/herdr.sock","protocol":20}
|
|
15
|
-
```
|
|
16
|
-
|
|
17
|
-
No Herdr `session`/`window`, caller-created workspace/pane/terminal ID, config lookup or inferred socket. First start requires explicit endpoint/task; later calls may reuse their guarded owned values. A supplied malformed/null endpoint is not omission. Model/runtime/yolo/managed resources still come from the captured recipe, credentials only through the existing nonsecret references.
|
|
18
|
-
|
|
19
|
-
Existing `allocateHerdr` issues `workspace create --cwd HOME --label INSTANCE --no-focus` and returns the actual `root_pane` IDs. Receipts retain:
|
|
20
|
-
|
|
21
|
-
```json
|
|
22
|
-
{"backend":"herdr","binary":"/absolute/herdr","socket":"/absolute/herdr.sock","protocol":20,"workspaceId":"w1","paneId":"w1:p1","terminalId":"term_native"}
|
|
23
|
-
```
|
|
24
|
-
|
|
25
|
-
These are observations allocated after admission, never IDs fabricated from a name/home/hash. The protocol adapter targets Herdr 0.8.x, with documented reference baseline 0.8.2; enforced runtime prerequisite is snapshot protocol **20** plus the existing commands/result fields. This source increment does not claim an installed version or live socket was checked. An explicit existing operator-managed socket and executable are required; unavailable or incompatible snapshots refuse. Captured start does NOT call `ensureHerdr`, start a daemon, install a backend or fall back to tmux.
|
|
26
|
-
|
|
27
|
-
## Existing transaction, stronger target custody
|
|
28
|
-
|
|
29
|
-
Both branches use `startCapturedInstanceSession` and the existing private-plan route into `startInstanceSession`, including independent home/work/native-history/baseline witnesses, admitted task/endpoint commitment, locks, pending start, bounded stop, native location recording and result publication. Source completion still uses SOURCE binding; helper execution uses its exact dedicated binding and owned incarnation.
|
|
30
|
-
|
|
31
|
-
NS1 metadata/index lifecycle agreement and explicit cleanup-debt retry rules apply unchanged. NS2 returns same-ID present non-shell pending adoption without another stop/dispatch; absent/exited/shell uncertainty remains held. NS3 checks the backend-tagged metadata and independent endpoint before provider/backend effects. Herdr targets additionally need indexed observation custody; residual tmux metadata, unrecorded/changed workspace/pane/terminal IDs, wrong endpoint or missing launched-target metadata refuse.
|
|
32
|
-
|
|
33
|
-
First Herdr allocation extends the EXISTING pending record with `phase:"allocating"` and explicit endpoint before `workspace create`. If the response is lost or fails, the same intent remains unconfirmed and retry refuses automatic reallocation or label-based lookup. No new journal service or silent repair is introduced.
|
|
34
|
-
|
|
35
|
-
When allocation returns, its exact valid target and native-history reference are persisted in the EXISTING running index intent BEFORE pane launch. The full pending record is then written. Returned target facts reach failure custody even if later publication/root checks fail. An unknown allocation with no IDs cannot be replaced by invented authority. Complete pending target IDs must agree with indexed evidence; the pending request must be the latest session intent. Baseline, indexed known targets and metadata are checked together, including during interrupted acknowledgment.
|
|
36
|
-
|
|
37
|
-
The existing Herdr adapter's captured strict observation compares workspace + pane + terminal and rejects ambiguous/missing workspace matches. A replacement terminal is not the old target. Transport carries the exact admitted `HERDR_SOCKET_PATH`, scrubbing inherited `HERDR_SESSION`/socket values. Native guards do not accidentally discard the adapter's endpoint environment. Normal legacy adapter behavior is unchanged outside the explicit captured strict path.
|
|
38
|
-
|
|
39
|
-
## Availability is not readiness
|
|
40
|
-
|
|
41
|
-
`oats.captured-session` API **version2** advertises supported adapters without claiming host readiness:
|
|
42
|
-
|
|
43
|
-
```json
|
|
44
|
-
{"schemaVersion":1,"api":{"contract":"oats.captured-session","version":2,"available":true,"backends":["tmux","herdr"]},"readiness":{"status":"not-checked"}}
|
|
45
|
-
```
|
|
46
|
-
|
|
47
|
-
Request envelope1 is still native action input, not configuration or authorization to choose a different model/provider. Version1 pins remain historical; consumers must require a understood version/backend contract and validate actual results/refusals, not guess from backend names. Static discovery never probes or provisions. Dispatch acceptance is not model health, task completion, provider/private messaging readiness or release acceptance.
|
|
48
|
-
|
|
49
|
-
## Evidence and limits
|
|
50
|
-
|
|
51
|
-
Focused public tests run the real CLI with fake backend EXECUTABLES and actual inert native children for both primary/helper records. Herdr fixture verifies the explicit transport socket and indexed target/intent BEFORE the child effect; tests first start, distinct restart, same-ID uncertain restart adoption, allocation-response uncertainty with no duplicate allocation, poisoned metadata/terminal refusal, workspace mismatch before launch, wrong protocol with no allocation and retained target/history facts. A synthetic present-agent snapshot after an inert child exits drives the uncertain-adoption branch; it is not a live-model observation.
|
|
52
|
-
|
|
53
|
-
Tmux public regressions and native NS1/NS2/NS3 guards remain covered. This is a small implementation parity check, not a full platform matrix or real daemon/Pi/provider qualification. No production socket/account/backend was changed. Coherent integration and later real Herdr/native-Pi gates belong to the coordinator, with independent reviewers owning source verdicts.
|
|
@@ -1,58 +0,0 @@
|
|
|
1
|
-
# Captured native start through the existing session transaction
|
|
2
|
-
|
|
3
|
-
**Implementation candidate; not release, privacy or live-model acceptance.** This is an actual native dispatch path, not replay of a no-launch scaffold. Tests execute inert native fixture binaries through the existing backend command path. The subsequent [public start/helper CLI bridge](2026-09-17-public-captured-start.md) exposes this transaction with required [tmux/Herdr parity](2026-09-17-captured-backend-parity.md); provider-worker and Pi qualification remain separate.
|
|
4
|
-
|
|
5
|
-
## Explicit executable inputs
|
|
6
|
-
|
|
7
|
-
The [launch request](2026-09-16-captured-launch-inputs.md) now accepts either:
|
|
8
|
-
|
|
9
|
-
- `executable:{capability,command}` for an OATS-managed retained entrypoint; or
|
|
10
|
-
- `executable:"/absolute/normalized/host/tool"` for an explicit external host executable.
|
|
11
|
-
|
|
12
|
-
An external host tool is not forced into a new runtime capability and its binary bytes are not represented as an OATS artifact pin. Dispatch checks availability/executability at the recorded path, not current PATH/config aliases. An executable resolving into this deployment's managed `.agents` namespace must use retained-resource authority, not this escape. Managed entrypoints must match the selected retained manifest command and its exact resource.
|
|
13
|
-
|
|
14
|
-
Runtime, model, environment references and yolo remain explicit captured inputs. There is no current launch-config/model resolver. Native runtime configuration is not claimed totally hermetic; credential reference values stay outside records.
|
|
15
|
-
|
|
16
|
-
## Fresh native evidence
|
|
17
|
-
|
|
18
|
-
Public `scaffoldCapturedInstance` initializes the existing native-history and independent retirement/session baseline **only for a freshly created owned home**, before hooks. Existing sidecars at a reused address cause refusal, not deletion or history backfill. Home existence retains its normal refusal.
|
|
19
|
-
|
|
20
|
-
Metadata and the existing guarded instance index retain a versioned `nativeScaffold` directory-witness set (native-history root/home directory and retirement root/baseline directory). Native start checks those witnesses and the unchanged complete fresh-history header. Older/unwitnessed captured homes do not gain these facts by starting.
|
|
21
|
-
|
|
22
|
-
The existing `packages/record` APIs are reused without modifying that package. Native location recording still happens inside the backend shell under the actual execution environment, before native exec. Location rules, historical preservation and unsupported explicit-session handling remain that contract's responsibility.
|
|
23
|
-
|
|
24
|
-
## Core API and authority
|
|
25
|
-
|
|
26
|
-
```js
|
|
27
|
-
startCapturedInstanceSession(home, {
|
|
28
|
-
deployment, resolution, // optional equality assertions; owned binding is authoritative
|
|
29
|
-
backend: {backend:"tmux", binary:"/absolute/tmux", socket:"/absolute/socket", session:"name"},
|
|
30
|
-
task: "explicit initial task",
|
|
31
|
-
restart: false,
|
|
32
|
-
retryExecutionId // explicit retry/replay only
|
|
33
|
-
})
|
|
34
|
-
```
|
|
35
|
-
|
|
36
|
-
Embedding/test options include explicit `env`, existing backend `io`, and bounded-stop configuration. These are not a new provider protocol. Initial task/backend placement must be supplied; later calls can use their owned metadata/TASK.md. Herdr additionally accepts `{backend:"herdr",binary:ABS,socket:ABS,protocol:20}` and allocates actual workspace/pane/terminal IDs after admission via the existing adapter; no automatic daemon start or tmux fallback. Backend relocation refuses rather than adopting another endpoint. Contradictory residual `tmux`/window/socket/session, `sessionTarget`, or backend metadata refuses before provider/backend calls. The exact admitted target is carried into the private native transaction and checked against any independent endpoint; first allocation never selects a legacy metadata fallback. Placement is rechecked with the root guards.
|
|
37
|
-
|
|
38
|
-
The old public home-only `startInstanceSession`/`restartInstanceSession` routes captured homes into this path **before** legacy `planLaunch` or current configuration resolution. Runtime/model/config/yolo replacements are refused; a new captured selection is required. Omitted legacy option properties do not create overrides.
|
|
39
|
-
|
|
40
|
-
Before provider readiness, validate the exact record, approvals, subject/human/home/work, native sidecars, instruction/skill bytes and aliases, executable, supported arguments, environment references, backend and task. Selected bindings then receive their existing read-only `inspect` check with the owned generic invocation. This is availability checking, not invented enrollment or a provider-native action. Recheck custody/curriculum/task before every backend call.
|
|
41
|
-
|
|
42
|
-
## Admission and native transaction reuse
|
|
43
|
-
|
|
44
|
-
A kernel-owned index intent uses `{kind:"session",name:"start"|"restart"}` with `capability:null`. It extends the existing bounded index, not the provider invocation action table or a new journal service. Provider wire remains unchanged. Its input commitment binds the explicit backend and task bytes; resolution/incarnation remain independently verified authority.
|
|
45
|
-
|
|
46
|
-
Require matching metadata/index lifecycle before provider checks/admission. New requests start only from matching `spawned-launch-pending` or `start-dispatched`; cleanup-required needs the exact latest saved retry, and a completed intent with remaining publication debt stays held for explicit reconciliation (no automatic cleanup path is invented). Native admission checks the expected metadata/index state again under the existing write guard, before minting or incrementing an attempt. Acquire `start-running` only from that validated state, then mark the admitted attempt running before task/metadata/backend effects. The existing `startInstanceSession` transaction consumes a private captured plan instead of invoking the legacy planner. It reuses locking, endpoint observation, preflight-before-stop, tmux allocation/respawn, native-history recording, pending receipt, independent endpoint baseline and metadata publication.
|
|
47
|
-
|
|
48
|
-
Pending/start IDs use the admitted logical executionId. Native-history segment IDs remain their existing evidence IDs and are linked in the pending/result receipts as `nativeRecordId`; they are not replacement logical request identities. The native process receives exact OATS deployment/resolution/incarnation/execution/attempt markers, not its caller's identity.
|
|
49
|
-
|
|
50
|
-
Successful backend dispatch records `start-dispatched` and returns `dispatchAccepted:true`; that means the existing native transaction accepted the dispatch, **not** that a model is healthy, a task finished, or a provider is private/enrolled. Completed explicit replay performs no backend dispatch. Distinct new requests get distinct execution IDs under the same incarnation.
|
|
51
|
-
|
|
52
|
-
On uncertainty, preserve pending target/native-history references and an unconfirmed indexed intent using original authority and the owned lifecycle state; never write a replacement home. A retry cannot turn an absent/exited uncertain pending target into another launch under the same logical request. If the same-ID pending target is present and non-shell, return its reconciled receipt for BOTH start and restart retries, without stopping or dispatching a second process. Only a distinct new restart ID may continue through the ordinary restart path. Such evidence remains held for explicit reconciliation. No force cleanup or fabricated success is provided.
|
|
53
|
-
|
|
54
|
-
## Initial limits and evidence
|
|
55
|
-
|
|
56
|
-
Unsupported work modes, backends other than the existing tmux/Herdr adapters, arbitrary extra native arguments, required managed runtime packages without a qualified captured loader, and unresolved launch/spawn runtime contributions explicitly refuse. This does not replace their missing implementation with `--no-launch`. The static helper resolver now advertises the public versioned native API separately from unchecked readiness; the provider `E_CAPTURED_HELPER` gate still requires its own qualified public-path consumption. Neither static availability nor the CLI bridge qualifies each provider-worker path.
|
|
57
|
-
|
|
58
|
-
The focused test prepares separate primary/helper recipes, deletes source/current config authority, executes actual inert fixture processes through a fake tmux transport, verifies admission inside those processes, checks captured model/identity markers and native history linkage, exercises new-request/replay/restart and preflight-before-backend refusal, holds a metadata-write uncertainty without duplicate execution, and refuses missing native scaffold evidence or replaced native custody directories. No real model, GUI, backend daemon, provider enrollment, timer, release or deployment operation runs in that fixture. Narrow native-review regressions additionally preserve divergent/newer lifecycle bytes, hold completed publication debt, check admission state before mint/retry, adopt a same-ID uncertain restart under a synthetic present-target observation without another stop/dispatch, and reject residual endpoint B before proving actual A allocation argv. Inert Node executables explicitly use `.cjs`, including public CLI fixtures, so an ancestor `type:module` does not change their semantics.
|
|
@@ -1,19 +0,0 @@
|
|
|
1
|
-
# Captured boundary resource hookup
|
|
2
|
-
|
|
3
|
-
This integrates the [IC1 resource-only correction](2026-09-17-portable-boundary-resources.md) into actual captured preparation. It is not a change to legacy injections, provider memory behavior or native launch readiness.
|
|
4
|
-
|
|
5
|
-
`completePreparedResources` now inventories and selects:
|
|
6
|
-
|
|
7
|
-
| Stable block label | Retained file |
|
|
8
|
-
| --- | --- |
|
|
9
|
-
| `kernel:oats-portable` | `injects/oats-portable.md` |
|
|
10
|
-
| `kernel:instance-boundary` | `injects/portable-instance-boundary.md` |
|
|
11
|
-
| `work-mode:directory` | `injects/portable-work-directory.md` |
|
|
12
|
-
|
|
13
|
-
Labels and order are unchanged. The captured resource bundle no longer includes the old instance-boundary or work-directory files. Other modes retain their own resource mapping rather than receiving directory behavior; unsupported materialization still refuses before creating a home. No old captured record or retained artifact is rewritten.
|
|
14
|
-
|
|
15
|
-
The existing `ResourceRef`/`InstructionComposition` schema supports these exact file references without a wire change. Full persistent and helper records are validated against the shared structural schema, then their composed text and resource ownership/path/bytes are checked through the actual captured loader.
|
|
16
|
-
|
|
17
|
-
The focused source-deleted composition regression verifies the combined portable kernel + boundary + directory doctrine: explicit execution binding and owned incarnation, canonical aliases, read-only retained source, authorized work surface, and no cwd/repo configuration authority or unsupported lifecycle/recovery promise. It asserts exact retained bytes and paths for both subject kinds, unchanged block order, absence of the specific old operative clauses, and refusal—not current-package fallback—after a retained boundary file is removed from the isolated fixture.
|
|
18
|
-
|
|
19
|
-
The new resources' own retention tests remain resource-only evidence. The complete preparation/composition regression supplies the additional IC1 integration evidence. Existing legacy scaffold-only layout/retire coverage remains separate. Neither proves real provider privacy, managed runtime/helper start, or production acceptance.
|
|
@@ -1,52 +0,0 @@
|
|
|
1
|
-
# Captured-only instance and directory boundaries
|
|
2
|
-
|
|
3
|
-
## IC1 resource correction and ownership
|
|
4
|
-
|
|
5
|
-
New resources:
|
|
6
|
-
|
|
7
|
-
- `injects/portable-instance-boundary.md`
|
|
8
|
-
- `injects/portable-work-directory.md`
|
|
9
|
-
|
|
10
|
-
These are captured-only variants, not replacements for the legacy files. The
|
|
11
|
-
resource owner creates/tests the new text; the lifecycle owner selects it in
|
|
12
|
-
captured preparation and verifies the complete retained curriculum. This change
|
|
13
|
-
alone does **not** wire the new resources into active compositions.
|
|
14
|
-
|
|
15
|
-
Both variants preserve instance-home/work separation, canonical
|
|
16
|
-
`AGENTS.md`/relative `CLAUDE.md` alias, generated instruction/metadata custody,
|
|
17
|
-
read-only retained soul links, authorized edit surfaces and preservation of
|
|
18
|
-
nonempty work/receipts. Authority is explicit captured deployment/resolution and
|
|
19
|
-
matching owned-home incarnation—not cwd, a `repo` path, a config cascade or an
|
|
20
|
-
alias. External reads do not authorize edits.
|
|
21
|
-
|
|
22
|
-
The directory variant describes an owned execution directory, not a source or
|
|
23
|
-
work-target checkout. It creates no policy requiring a knowledge layout,
|
|
24
|
-
harvester, publication mechanism or storage backend. Capabilities define any
|
|
25
|
-
knowledge/memory functionality. No-launch/launch-pending state is not a running
|
|
26
|
-
runtime, and unsupported captured launch/start/restart/wake/retire/recovery has no
|
|
27
|
-
legacy fallback or promised automatic recovery.
|
|
28
|
-
|
|
29
|
-
## Lifecycle integration request
|
|
30
|
-
|
|
31
|
-
In the **captured** resource inventory/selection only, retain the new boundary and
|
|
32
|
-
directory variant instead of the old `instance-boundary.md` and
|
|
33
|
-
`work-directory.md` text. Preserve existing labels/order as appropriate; update
|
|
34
|
-
both capture inventory and its resource references together. Do not change old
|
|
35
|
-
injections or legacy composition. Other work modes remain individually supported
|
|
36
|
-
or refused by their owning implementation, not silently given directory behavior.
|
|
37
|
-
|
|
38
|
-
Lifecycle's complete persistent/helper retained-text tests must demonstrate that
|
|
39
|
-
the active portable skills plus kernel/boundary/work-mode blocks do not reintroduce
|
|
40
|
-
cwd/`repo` configuration authority or unsupported lifecycle/recovery promises.
|
|
41
|
-
Keep missing-resource, exact retention and helper policy guards intact.
|
|
42
|
-
|
|
43
|
-
## Bounded local evidence
|
|
44
|
-
|
|
45
|
-
`test/portable-onboarding-resources.test.mjs` checks the two new resources' required
|
|
46
|
-
custody clauses and specific old contradictory instructions. It then retains
|
|
47
|
-
fixture copies using the existing artifact store, removes only the fixture source,
|
|
48
|
-
and renders those exact retained bytes through the existing composition formatter.
|
|
49
|
-
It does not pretend this fixture is the full captured-preparation selector.
|
|
50
|
-
|
|
51
|
-
No old injection, core/prepared-resources implementation, sibling test, provider,
|
|
52
|
-
live deployment, main branch or runtime launch is changed by the resource commit.
|
|
@@ -1,108 +0,0 @@
|
|
|
1
|
-
# Public captured start and retained helper dispatch
|
|
2
|
-
|
|
3
|
-
This is the public CLI bridge to [captured native session custody](2026-09-17-captured-native-start.md). It adds no backend, configuration resolver, provider action registry or harvester. CLI support and inert process evidence are not provider-worker, live-model, Pi-loader, privacy or rollout acceptance.
|
|
4
|
-
|
|
5
|
-
## Callable interface
|
|
6
|
-
|
|
7
|
-
```text
|
|
8
|
-
oats session start|restart --deployment DEPLOYMENT --resolution RESOLUTION_ID \
|
|
9
|
-
--home NORMALIZED_ABSOLUTE_HOME [--helper EXACT_SOURCE_HELPER_KEY] \
|
|
10
|
-
[--request NORMALIZED_ABSOLUTE_JSON] [--retry-intent SAVED_EXECUTION_ID] [--json]
|
|
11
|
-
```
|
|
12
|
-
|
|
13
|
-
The existing global `capturedSelector` still owns selector parsing (including explicit pairs replacing poisoned inheritance as a unit). Only start/restart adopt this route. Current-context flags, runtime/model/yolo/config overrides and unknown/duplicate native flags refuse; no fallback to legacy session routing.
|
|
14
|
-
|
|
15
|
-
Request files reuse the unchanged bounded strict object-file reader already used for preparation. Native request validation is separate: a closed object with required `schemaVersion:1`, and optional `backend`, `task`, `stopGraceMs`. Unknown fields are rejected before any projection; env/io/credentials/provider settings/selectors are not accepted. Symlinks/nonregular files, invalid UTF-8/JSON, malformed paths and bounds retain that shared reader's typed refusals. Its historical diagnostics may still say "preparation request"; it does not prepare or resolve anything on this route.
|
|
16
|
-
|
|
17
|
-
```json
|
|
18
|
-
{
|
|
19
|
-
"schemaVersion": 1,
|
|
20
|
-
"backend": {
|
|
21
|
-
"backend": "tmux",
|
|
22
|
-
"binary": "/absolute/host/tmux",
|
|
23
|
-
"socket": "/absolute/selected/socket",
|
|
24
|
-
"session": "captured"
|
|
25
|
-
},
|
|
26
|
-
"task": "Explicit initial task",
|
|
27
|
-
"stopGraceMs": 20000
|
|
28
|
-
}
|
|
29
|
-
```
|
|
30
|
-
|
|
31
|
-
The backend is a closed tagged union: the tmux form above, or
|
|
32
|
-
`{"backend":"herdr","binary":"/absolute/herdr","socket":"/absolute/herdr.sock","protocol":20}`.
|
|
33
|
-
Herdr returns actual `workspaceId`/`paneId`/`terminalId` in target receipts; request
|
|
34
|
-
fields never invent them or substitute tmux session/window names. See
|
|
35
|
-
[backend parity and allocation custody](2026-09-17-captured-backend-parity.md).
|
|
36
|
-
|
|
37
|
-
First start needs task/backend. Later calls can use owned TASK.md and native endpoint. A supplied null backend is invalid, not omission. Core validates all backend fields, availability, task text/bounds, stop grace 1–300000ms and exact captured native prerequisites before backend access. Endpoint relocation, contradictory residual native placement metadata and unsupported work/root/package/argument/contribution/backend paths refuse. First placement uses the exact admitted endpoint, not a legacy metadata fallback. Nothing is inferred from a current model/config alias.
|
|
38
|
-
|
|
39
|
-
## Read-only API availability, separate from readiness
|
|
40
|
-
|
|
41
|
-
Public `inspect` returns `result.nativeSession`; helper inspection also returns
|
|
42
|
-
the same value as `helperSelection.launch`:
|
|
43
|
-
|
|
44
|
-
```json
|
|
45
|
-
{"schemaVersion":1,"api":{"contract":"oats.captured-session","version":2,"available":true,"backends":["tmux","herdr"]},"readiness":{"status":"not-checked"}}
|
|
46
|
-
```
|
|
47
|
-
|
|
48
|
-
This closed `CapturedNativeSessionAvailability` shape identifies the implemented
|
|
49
|
-
callable request/result contract, not the selected record's or execution host's
|
|
50
|
-
readiness. Core exposes the same static value through
|
|
51
|
-
`capturedNativeSessionAvailability()`. Inspection has no target home/task/backend
|
|
52
|
-
and performs no provider readiness/backend call, provisioning or admission. The
|
|
53
|
-
descriptor stays `not-checked` before and after native dispatch; it never stores
|
|
54
|
-
readiness as permanent authority. Missing launch recipes, approvals, supported
|
|
55
|
-
roots/args/backends/contributions or clear custody still refuse during start.
|
|
56
|
-
|
|
57
|
-
Consumers must recognize the contract/version, treat old/absent/unknown or
|
|
58
|
-
contradictory descriptors as unqualified rather than fabricate a replacement,
|
|
59
|
-
and still validate the actual action result/error and source/helper authority.
|
|
60
|
-
API availability alone does not remove a provider's `E_CAPTURED_HELPER` gate or
|
|
61
|
-
satisfy provider/runtime/Pi/privacy/release acceptance. The previous unreleased
|
|
62
|
-
blanket helper launch-unsupported signal is not emitted alongside this descriptor.
|
|
63
|
-
|
|
64
|
-
## Persistent and helper stages
|
|
65
|
-
|
|
66
|
-
For a persistent home, use its own binding. For a helper:
|
|
67
|
-
|
|
68
|
-
1. `inspect --helper EXACT_KEY` on the SOURCE selection returns the dedicated helper selection/name.
|
|
69
|
-
2. Existing `spawn HELPER_NAME --deployment HELPER_DEPLOYMENT --resolution HELPER_ID --home NEW_HOME --no-launch --json` creates the fresh owned scaffold and runs retained hooks. It is not native dispatch.
|
|
70
|
-
3. Invoke the new `session start` with SOURCE selectors, the same `--helper EXACT_KEY`, that owned home and the native request. The kernel revalidates the retained edge and context/human equality, then passes the HELPER binding to `startCapturedInstanceSession`. A source home or another helper home does not match and refuses.
|
|
71
|
-
|
|
72
|
-
Passing a dedicated HELPER resolution directly to public `session start|restart`
|
|
73
|
-
without the SOURCE edge refuses with `helper-not-selected`, before reading the
|
|
74
|
-
native request or calling providers/backends. This applies to both tmux and Herdr;
|
|
75
|
-
it emits no fabricated primary-shaped result or source/helper custody. The
|
|
76
|
-
helper-ID scaffold stage above remains supported.
|
|
77
|
-
|
|
78
|
-
An occupied home is not silently recreated. Hook failures/custody gaps remain held; this API does not add automatic hook replay or a compound scaffold/start transaction. Keep source completion calls on the source's saved binding, not the helper's inherited runtime selection. Static helper lookup uses the versioned availability/not-checked descriptor above; consumers require that qualified callable contract and real action result, never the lookup as proof of running status.
|
|
79
|
-
|
|
80
|
-
## Provider-chosen home addressability and retirement gap
|
|
81
|
-
|
|
82
|
-
A provider chooses a normalized absolute new home with a physical existing
|
|
83
|
-
parent, then retains the returned home, incarnation, helper binding and hook/run
|
|
84
|
-
receipts. Supported captured start/restart addresses that explicit home; it does
|
|
85
|
-
not require an `agents/<soul>/instances` convention. Keep source completion on the
|
|
86
|
-
source binding rather than deriving identity from this path.
|
|
87
|
-
|
|
88
|
-
Captured public retirement is **not yet implemented** by this start/restart API.
|
|
89
|
-
Legacy `retire --home` still enters agents-root/current-config machinery and is
|
|
90
|
-
not a qualified workaround. Do not strip selectors, import private core helpers,
|
|
91
|
-
guess an instance-root convention, force-delete or re-scaffold an uncertain home.
|
|
92
|
-
Preserve the home/custody and hold complete ephemeral-worker lifecycle
|
|
93
|
-
qualification until a public home-addressed captured retirement route is delivered
|
|
94
|
-
and independently verified for both backends. API availability/version2 does not
|
|
95
|
-
claim that missing lifecycle operation. A source candidate's commit/API version
|
|
96
|
-
is also not its final published package compatibility floor.
|
|
97
|
-
|
|
98
|
-
## Result and failure custody
|
|
99
|
-
|
|
100
|
-
Success uses the existing one-object CLI envelope `{schemaVersion:1,ok:true,result}`. Result includes the canonical selected `executionBinding`, existing native target/history/intent fields and, for `--helper`, exact `sourceExecutionBinding` and `helper:{key,name,subject}`. Initial dispatch has `dispatchAccepted:true`. Completed explicit replay returns `replayed:true` with the saved receipt and intent; it does not dispatch again or certify a currently live process.
|
|
101
|
-
|
|
102
|
-
Failure uses one nonzero envelope. Native uncertainty remains in `error.details.nativeCustody`, including admitted intent, pending path and observed native/history evidence; `details.unconfirmed:true` is not flattened into an ordinary static error. Source/helper bindings remain distinguishable in failure details. Preserve that evidence. Lifecycle mismatch/held publication debt is returned separately as `error.details.custody` with indexed/metadata status and any saved intent/receipt, without claiming a new native effect. New requests cannot bypass cleanup-required even when its intent is completed; that completed publication debt stays held for explicit reconciliation. Retry with `--retry-intent` names the saved logical ID; it cannot silently rerun an exited/absent uncertain dispatch under the same ID. A present non-shell same-ID pending restart is adopted and returned without another stop/dispatch, just like start. An unknown Herdr workspace allocation retains its existing pending phase/endpoint/intent and refuses duplicate allocation or label-based identity inference. A new distinct restart request gets a new execution ID within the same incarnation. There is no metadata wipe, ID derived from a home/name, or borrowed provider credential/context.
|
|
103
|
-
|
|
104
|
-
## Evidence
|
|
105
|
-
|
|
106
|
-
The public test prepares separate primary/helper launch records, removes source and poisons current config/lock, then uses CLI subprocesses for lookup, scaffold/hooks, native start, completed replay and restart. An actual fake-backend executable runs inert native executables; those processes verify indexed running admission before writing. This is not a private backend `io` seam or a real backend daemon/model.
|
|
107
|
-
|
|
108
|
-
Refusals include unknown request/override fields, null/unsupported backend, wrong task, symlink request, conflicting flags, missing helper and wrong home, all before native backend access. Both backend fixtures additionally refuse direct helper-ID start/restart without the source edge, preserve metadata/index bytes and produce no backend/native effect, even when the supplied request file is absent (subject refusal precedes request reading). A backend fixture executes the native process and then fails its response; public JSON retains unknown custody. Retry preserves the execution ID/attempt chain and never runs the process twice. Occupied helper homes and their metadata are retained. Source completion/publication policy, Pi managed loaders, live credentials/models, and provider runtime integration are not tested or accepted by this fixture.
|
|
@@ -1,90 +0,0 @@
|
|
|
1
|
-
# Public preparation request-file transport
|
|
2
|
-
|
|
3
|
-
## Implemented helper; CLI routing remains lifecycle-owned
|
|
4
|
-
|
|
5
|
-
`lib/portable-onboarding-request.mjs` implements:
|
|
6
|
-
|
|
7
|
-
```js
|
|
8
|
-
readPortablePreparationRequest({ file, inputFlags = {}, explicitSelector = null })
|
|
9
|
-
```
|
|
10
|
-
|
|
11
|
-
It returns the **request object itself**, decoded through existing bounded strict
|
|
12
|
-
JSON and frozen without adding defaults or filtering fields. The public
|
|
13
|
-
`prepareCapturedComposition` remains the only preparation schema validator and
|
|
14
|
-
resolver. The helper does not call it and performs no installation, approval,
|
|
15
|
-
activation, command dispatch or provider operation.
|
|
16
|
-
|
|
17
|
-
- `file` is an explicit normalized absolute path. The shared descriptor reader
|
|
18
|
-
requires a regular file, uses no-follow opening and checks byte/identity changes;
|
|
19
|
-
its existing 8 MiB limit applies before content allocation.
|
|
20
|
-
- `inputFlags` is the map of **other** prepare value flags already parsed by the
|
|
21
|
-
CLI's existing per-command parser. Any own key is a conflict, even when its
|
|
22
|
-
value is empty, false or null. Request/json controls do not belong in this map.
|
|
23
|
-
- `explicitSelector` is the existing `capturedSelector(argv, {})` result or null.
|
|
24
|
-
Any non-null selector refuses. The helper neither parses global argv nor reads
|
|
25
|
-
inherited resolution/instance environment as preparation authority.
|
|
26
|
-
|
|
27
|
-
Transport conflicts are rejected before opening the file. Invalid UTF-8,
|
|
28
|
-
duplicate decoded JSON keys, oversized/deep data and non-object roots refuse.
|
|
29
|
-
Read/decode diagnostics do not echo request payloads. Unknown preparation fields
|
|
30
|
-
survive transport so the existing closed public validator can reject them. A
|
|
31
|
-
private `directory` field must never be stripped to force acceptance.
|
|
32
|
-
|
|
33
|
-
Requests must contain only nonsecret declarations/settings and the selected
|
|
34
|
-
capability's supported credential references, never credential values. JSON shape
|
|
35
|
-
validation alone cannot classify arbitrary provider payloads as nonsecret; that
|
|
36
|
-
classification remains capability-owned. This helper adds no credential keyword
|
|
37
|
-
filter, provider schema or destination default.
|
|
38
|
-
|
|
39
|
-
## Minimal shared-entrypoint integration request
|
|
40
|
-
|
|
41
|
-
Proposed command (not available in pinned c5/257 CLIs):
|
|
42
|
-
|
|
43
|
-
```text
|
|
44
|
-
oats prepare --request <absolute-regular-json-file> [--json]
|
|
45
|
-
```
|
|
46
|
-
|
|
47
|
-
The file contains exactly `buildFreshPreparationRequest(...).preparation`, **not**
|
|
48
|
-
the outer onboarding result, private scratch, work-target wrapper or old execution
|
|
49
|
-
binding. Lifecycle owner should:
|
|
50
|
-
|
|
51
|
-
1. Keep existing explicit `--source` and `--workspace` forms unchanged. Add
|
|
52
|
-
`request` to the existing prepare value-flag parser; retain duplicate/missing/
|
|
53
|
-
unknown flag handling. Make request mode exclusive with every other source,
|
|
54
|
-
deployment and override flag before file reads. Do not merge CLI values into
|
|
55
|
-
request content.
|
|
56
|
-
2. Pass that parser's other-value map and the shared explicit-only selector result
|
|
57
|
-
into the helper, then pass the full returned object to existing public prepare
|
|
58
|
-
and its existing result/error renderer. No copied preparation validator or
|
|
59
|
-
second config schema.
|
|
60
|
-
3. At the existing global routing boundary, refuse explicit captured selectors
|
|
61
|
-
with prepare, before/after the command and in equals spelling. Use the shared
|
|
62
|
-
selector parser, not a new onboarding argv scanner. Preserve typed refusal of
|
|
63
|
-
partial/malformed selectors.
|
|
64
|
-
4. Ignore inherited `OATS_DEPLOYMENT`, `OATS_RESOLUTION` and old instance context
|
|
65
|
-
for this explicit new-work request. Missing request values are not filled from
|
|
66
|
-
them. Other captured commands retain their normal inheritance semantics.
|
|
67
|
-
|
|
68
|
-
The transport is not an installation permit or a serialized ready-inspection
|
|
69
|
-
token. Fresh setup must recheck managed-state boundaries before its first mutating
|
|
70
|
-
prepare. An explicit approval/reprepare continuation is ordinary preparation of a
|
|
71
|
-
now-existing deployment, not a fresh preflight bypass or permission to delete it.
|
|
72
|
-
|
|
73
|
-
## Evidence and remaining gates
|
|
74
|
-
|
|
75
|
-
Parser tests perform no installation or activation. They verify literal
|
|
76
|
-
string/null/boolean/list preservation, unknown-field forwarding, conflicting
|
|
77
|
-
transport/selector refusal before reads, inherited-authority isolation, and
|
|
78
|
-
bounded malformed/symlink/oversize refusals.
|
|
79
|
-
|
|
80
|
-
The pinned real public preparation consumer now reads its entire request through
|
|
81
|
-
this helper in workspace, keyed standalone and explicit-null contexts, then passes
|
|
82
|
-
it unchanged to core at `c5c6a3c9171e424a36a1bdbf3932b9319a3c6c72`. It also proves
|
|
83
|
-
that a private field survives transport and is rejected by real core before
|
|
84
|
-
acquisition. The separate actual public no-launch producer case remains pinned to
|
|
85
|
-
`257c4b96b67001fa2bcf38436e57106c44aa797b`.
|
|
86
|
-
|
|
87
|
-
This is helper/public-API and no-launch evidence, **not** a claim that the proposed
|
|
88
|
-
CLI router is installed, runtime launch is qualified, or private providers are
|
|
89
|
-
certified. See the [operator walkthrough](2026-09-16-fresh-operator-walkthrough.md).
|
|
90
|
-
No migration CLI, new installer engine, provider backend or global parser is added.
|