@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,282 +0,0 @@
|
|
|
1
|
-
# Fresh operator walkthrough: working preparation versus pending launch
|
|
2
|
-
|
|
3
|
-
> **Superseded (2026-09-23).** The acceptance driver and helper this walkthrough runs (`test/portable-onboarding-public.acceptance.mjs`, `test/helpers/portable-onboarding-consumer.mjs`) were deleted with the workspace model v2; the 0.25 operator path is `oats onboard` → `oats sync` → `oats spawn` (`docs/first-team.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
|
-
## Scope of this evidence
|
|
6
|
-
|
|
7
|
-
This is a **source-level integration walkthrough**, not a claim about an installed
|
|
8
|
-
release. The onboarding builder/acceptance boundary is from `3b8f6532`; the real
|
|
9
|
-
preparation consumer remains pinned to
|
|
10
|
-
`c5c6a3c9171e424a36a1bdbf3932b9319a3c6c72`. A separate producer/CLI case is pinned
|
|
11
|
-
to `257c4b96b67001fa2bcf38436e57106c44aa797b` and exercises actual public
|
|
12
|
-
`spawn --no-launch`, including incarnation and intent custody. Neither test implies
|
|
13
|
-
compatibility with an untested newer wire. Core owns preparation scratch,
|
|
14
|
-
artifact retention, binding execution, approval and incarnation/admission. Onboarding does not replace
|
|
15
|
-
those implementations.
|
|
16
|
-
|
|
17
|
-
The acceptance uses a small manifest-declared **fixture knowledge capability**.
|
|
18
|
-
It does not use OKF, access external services, exercise harvesting, or qualify
|
|
19
|
-
private messaging. Its provider program interprets only its own collection and
|
|
20
|
-
explicit destination data. The source carries an unreachable publisher-workspace
|
|
21
|
-
backlink; inspection/preparation never adopts or contacts that workspace.
|
|
22
|
-
|
|
23
|
-
## Reproduce the pinned public consumer
|
|
24
|
-
|
|
25
|
-
**No longer runnable.** The acceptance driver and its helper were deleted with
|
|
26
|
-
the workspace model v2; the command below fails with `Could not find
|
|
27
|
-
'test/portable-onboarding-public.acceptance.mjs'`. The equivalent 0.25 evidence
|
|
28
|
-
is the CLI suite over the Northwind fixture (`test/onboard.test.mjs`,
|
|
29
|
-
`test/spawn-standalone.test.mjs`, `test/fixtures/northwind/build.mjs`).
|
|
30
|
-
|
|
31
|
-
```text
|
|
32
|
-
# historical (deleted): node --test --test-timeout=60000 test/portable-onboarding-public.acceptance.mjs
|
|
33
|
-
```
|
|
34
|
-
|
|
35
|
-
This explicit acceptance driver was separate from the default `*.test.mjs` suite:
|
|
36
|
-
a shallow checkout or source tarball need not contain a historical cross-branch
|
|
37
|
-
commit. An explicit run **failed** if the pin or matching dependency lock was absent;
|
|
38
|
-
it never silently skipped, fetched a moving branch, substituted current core or
|
|
39
|
-
stripped unsupported request fields.
|
|
40
|
-
|
|
41
|
-
`test/helpers/portable-onboarding-consumer.mjs` (deleted) archived committed core objects
|
|
42
|
-
into owned ignored `stage/onboarding-consumer-*` scratch and verified the pin and
|
|
43
|
-
held-patch exclusion. It linked only this worktree's dependencies after comparing
|
|
44
|
-
the complete npm lock. No working files from another agent were loaded and no Git
|
|
45
|
-
worktree/branch was added, reset or merged. Only the fixture's scratch was removed
|
|
46
|
-
on completion.
|
|
47
|
-
|
|
48
|
-
The test runs real native Git observations with isolated host configuration and
|
|
49
|
-
explicit local file transport mappings. Other transports are disabled. Public
|
|
50
|
-
preparation creates retained software/state **inside temporary fixture
|
|
51
|
-
deployments**; after explicit fixture-only artifact approval, its inert provider
|
|
52
|
-
normalize/bind/check commands run. The separate 257c4b96 case also executes the
|
|
53
|
-
fixture's declared spawn hook through the actual public CLI. It never hand-writes
|
|
54
|
-
permissive instance metadata: the producer mints and indexes each incarnation,
|
|
55
|
-
admits the hook intent, and settles the receipt. Guarded test executables detect
|
|
56
|
-
any attempted backend/model/client/host-timer invocation. No runtime, helper,
|
|
57
|
-
schedule, normal capability command or live provider is launched.
|
|
58
|
-
|
|
59
|
-
## Exact operator sequence at this source checkpoint
|
|
60
|
-
|
|
61
|
-
### 1. Choose independent inputs
|
|
62
|
-
|
|
63
|
-
Choose an explicit source export/revision/alias, deployment directory and work
|
|
64
|
-
target. Existing project files/Git repositories need not be empty. For organization
|
|
65
|
-
setup, choose an explicit workspace; consuming a public source does not make its
|
|
66
|
-
repository a member. Supply a member request only when reciprocal admission is
|
|
67
|
-
actually intended.
|
|
68
|
-
|
|
69
|
-
For standalone setup, supply an own `standaloneContextKey` field containing an
|
|
70
|
-
explicit opaque key, or explicit `null` for no private context. Never derive it
|
|
71
|
-
from a path, username, source alias or agent identity. Do not also supply a
|
|
72
|
-
workspace. The fixture prepares both keyed and explicit-null standalone requests,
|
|
73
|
-
with messaging disabled; neither case proves messaging enrollment/privacy.
|
|
74
|
-
|
|
75
|
-
Onboarding and pinned core both accept at most **256 UTF-8 bytes** for the key.
|
|
76
|
-
Oversized keys are refused, never truncated, dropped or derived from another input.
|
|
77
|
-
The earlier onboarding limit of 1,024 characters has been corrected: local ingress
|
|
78
|
-
rejects over-limit ASCII and non-ASCII keys before source access, and the real
|
|
79
|
-
pinned consumer retains an exact 256-byte non-ASCII key unchanged.
|
|
80
|
-
|
|
81
|
-
The key boundary is verified against pinned c5 preparation. Incarnation/admission
|
|
82
|
-
behavior is checked separately against exact 257c4b96, not inferred from c5.
|
|
83
|
-
|
|
84
|
-
### 2. Inspect, without authorizing installation
|
|
85
|
-
|
|
86
|
-
Use `preflightFreshDeployment({deployment})` and then
|
|
87
|
-
`inspectPortableOnboarding(input, {repositories})`, where `repositories` is the
|
|
88
|
-
existing `createRepositoryTransaction` owned by the caller. Inspect explicit
|
|
89
|
-
workspace imports/exports and optional catalog descriptor witnesses. There is no
|
|
90
|
-
automatic topology scan or publisher-workspace adoption.
|
|
91
|
-
|
|
92
|
-
- `separate-deployment-required`: preserve everything at that deployment and
|
|
93
|
-
select another path. Do not delete its OATS state, knowledge, identity or history.
|
|
94
|
-
- `needs-configuration`: resolve the reported explicit input/membership issue.
|
|
95
|
-
- `ready-for-preparation`: advisory preflight/discovery passed; it is **not**
|
|
96
|
-
provider readiness, executable approval, installation or launch permission.
|
|
97
|
-
|
|
98
|
-
Close the inspection repository transaction when inspection ends. The issued
|
|
99
|
-
inspection may be used to build a public request without retaining its scratch.
|
|
100
|
-
The real consumer proves this by closing inspection scratch before preparation.
|
|
101
|
-
|
|
102
|
-
A missing deployment path can be inspected, but public preparation requires an
|
|
103
|
-
existing directory. Provision that explicit path separately without replacing an
|
|
104
|
-
existing entry; onboarding does not create it. **Re-inspect after provisioning**
|
|
105
|
-
before the first preparation call. The old absent-path inspection is not permission
|
|
106
|
-
to use a directory that appeared later. Replacement of the selected deployment,
|
|
107
|
-
its absent-path parent or the work-target directory also requires reinspection;
|
|
108
|
-
ordinary project-file edits do not.
|
|
109
|
-
|
|
110
|
-
### 3. Supply explicit provider bindings and build the public request
|
|
111
|
-
|
|
112
|
-
```js
|
|
113
|
-
const choices = { operator, mode: "directory", allowLocalPaths: false };
|
|
114
|
-
const handoff = buildFreshPreparationRequest(inspection, choices);
|
|
115
|
-
```
|
|
116
|
-
|
|
117
|
-
`operator` uses the existing public operator envelope (`policy`, operator
|
|
118
|
-
`document`, optional `bindings`). A capability interprets its own binding payload;
|
|
119
|
-
there is no universal `writeDestination` schema or default destination in
|
|
120
|
-
onboarding. The fixture's `bindings.destination` is **fixture-provider syntax**,
|
|
121
|
-
not an OKF or generic kernel field.
|
|
122
|
-
|
|
123
|
-
Pass **all** of `handoff.preparation` unchanged. It contains deployment/source/
|
|
124
|
-
origin, explicit workspace or standalone key, operator/mode/local-input choices,
|
|
125
|
-
and an optional member request. It contains no `directory`: public
|
|
126
|
-
`prepareCapturedComposition` creates and cleans its own private scratch.
|
|
127
|
-
`handoff.workTarget` stays separate; this step does not perform actual work
|
|
128
|
-
placement.
|
|
129
|
-
|
|
130
|
-
### 4. Explicitly perform the first preparation
|
|
131
|
-
|
|
132
|
-
Given `core` loaded from the intended compatible kernel and explicit native
|
|
133
|
-
`repositoryOptions`, the working API handoff is:
|
|
134
|
-
|
|
135
|
-
```js
|
|
136
|
-
const first = prepareFreshOnboarding(inspection, choices, {
|
|
137
|
-
prepareCapturedComposition(request) {
|
|
138
|
-
return core.prepareCapturedComposition(request, { repositoryOptions });
|
|
139
|
-
},
|
|
140
|
-
});
|
|
141
|
-
```
|
|
142
|
-
|
|
143
|
-
This is a **mutating command boundary**, unlike inspection/building. The driver
|
|
144
|
-
rechecks fresh state and its ephemeral selected directory witnesses immediately
|
|
145
|
-
before calling public core. If a legacy lock or other relevant managed state
|
|
146
|
-
appeared, it throws `fresh-deployment-required`; if an inspected directory was
|
|
147
|
-
replaced or a previously absent deployment was provisioned, it throws
|
|
148
|
-
`selection-changed` and requires a fresh inspection. Both refuse before calling
|
|
149
|
-
core. No project-content pin or new persistent custody registry is added; this
|
|
150
|
-
local recheck does not replace core's own concurrency and lifecycle guards.
|
|
151
|
-
|
|
152
|
-
An absent deployment returns `pending/fresh-deployment-provisioning-required`;
|
|
153
|
-
an absent callable adapter returns `pending/onboarding-integration-required`.
|
|
154
|
-
Both have `mutationAttempted:false`. An installed core that rejects a supplied
|
|
155
|
-
field remains a typed error, not a reason to strip the field and retry.
|
|
156
|
-
|
|
157
|
-
### 5. Review an exact approval request, then explicitly continue
|
|
158
|
-
|
|
159
|
-
An executable binding codec must itself be approved before normalize/bind may
|
|
160
|
-
run. In the real fixture, the first result has `resolution:null`, an
|
|
161
|
-
`approval-required` problem and an exact `{capability, artifactSet, request}`
|
|
162
|
-
approval request. No provider phase ran before that approval.
|
|
163
|
-
|
|
164
|
-
After the operator has reviewed and chosen **that exact** artifact:
|
|
165
|
-
|
|
166
|
-
```js
|
|
167
|
-
core.approveAvailableCapability(
|
|
168
|
-
handoff.preparation.deployment,
|
|
169
|
-
chosenApproval.artifactSet,
|
|
170
|
-
chosenApproval.capability,
|
|
171
|
-
explicitOperatorApprovalOrigin,
|
|
172
|
-
);
|
|
173
|
-
const prepared = core.prepareCapturedComposition(
|
|
174
|
-
handoff.preparation,
|
|
175
|
-
{ repositoryOptions },
|
|
176
|
-
);
|
|
177
|
-
```
|
|
178
|
-
|
|
179
|
-
These are two deliberate mutations, not an automatic approval loop. Never approve
|
|
180
|
-
all returned requests merely to obtain a green result. The capability may still
|
|
181
|
-
report incomplete/conflicting bindings afterward.
|
|
182
|
-
|
|
183
|
-
After the first preparation writes managed state, the deployment is **no longer
|
|
184
|
-
fresh**. Continue through ordinary explicit public preparation as above; rerunning
|
|
185
|
-
the fresh driver correctly refuses. Do not erase the newly retained state to
|
|
186
|
-
bypass that guard. The driver is not a full resumable onboarding orchestrator.
|
|
187
|
-
|
|
188
|
-
### 6. Inspect the captured result, not a launch claim
|
|
189
|
-
|
|
190
|
-
When public preparation returns a resolution, use the existing public
|
|
191
|
-
`core.loadCapturedDispatch({deployment, resolution, action:{kind:"inspect"}})`.
|
|
192
|
-
The real test verifies the exact source commit/qualified identity, adopter-local
|
|
193
|
-
alias, explicit provider destination, workspace or standalone context, and
|
|
194
|
-
messaging-disabled choice from the retained record. Full-subject invocation data
|
|
195
|
-
also matches that record through the generic fixture check seam.
|
|
196
|
-
|
|
197
|
-
It verifies retained inspection again after removing **fixture-owned original
|
|
198
|
-
sources**, not after deleting real user repositories. This is preparation and
|
|
199
|
-
retention evidence—not actual running instance/job lifecycle acceptance.
|
|
200
|
-
|
|
201
|
-
### 7. Explicit public spawn without runtime launch (257c4b96 only)
|
|
202
|
-
|
|
203
|
-
At the separately pinned producer, a reviewed prepared **directory-mode** record
|
|
204
|
-
can create a new home and run its approved spawn hooks:
|
|
205
|
-
|
|
206
|
-
```bash
|
|
207
|
-
node "$PINNED_KERNEL/bin/oats.mjs" \
|
|
208
|
-
--deployment "$DEPLOYMENT" --resolution "$RESOLUTION" \
|
|
209
|
-
spawn "$RETAINED_SUBJECT_ALIAS" --home "$NEW_ABSOLUTE_HOME" --no-launch --json
|
|
210
|
-
```
|
|
211
|
-
|
|
212
|
-
These variables must name the explicit pinned kernel, retained resolution and a
|
|
213
|
-
new home under a real existing parent; the alias must match the retained subject.
|
|
214
|
-
Do not point the command at an occupied home or substitute an old instance's
|
|
215
|
-
metadata. No additional work-target flag is supported by this captured spawn
|
|
216
|
-
form. Its `home/work` is a newly owned execution directory, not silent adoption
|
|
217
|
-
of the separately inspected project checkout.
|
|
218
|
-
|
|
219
|
-
The real consumer uses this exact CLI after removing its fixture source/workspace
|
|
220
|
-
repositories. It asserts producer-created `incarnationId`, exact execution binding,
|
|
221
|
-
retained source/context/provider binding, index schemaVersion 2, and the same
|
|
222
|
-
completed hook intent in index/metadata/opaque provider receipt. Two homes with the
|
|
223
|
-
same resolution receive distinct incarnation and execution IDs. It also proves
|
|
224
|
-
private invocation/binding snapshots are cleaned up after hooks.
|
|
225
|
-
|
|
226
|
-
Successful output is **still pending launch**:
|
|
227
|
-
|
|
228
|
-
```text
|
|
229
|
-
ok:true
|
|
230
|
-
result.launched:false
|
|
231
|
-
result.launchPending:true
|
|
232
|
-
result.hooksPending:false
|
|
233
|
-
instance/index lifecycle: spawned-launch-pending
|
|
234
|
-
```
|
|
235
|
-
|
|
236
|
-
`ok:true` confirms this no-launch operation, not that a runtime started or user work
|
|
237
|
-
completed. Repeating the call for the same home, or choosing an occupied user-data
|
|
238
|
-
directory, returns `E_INSTANCE_EXISTS` without changing existing metadata/index/
|
|
239
|
-
work or dispatching another hook. The operator must preserve the occupied path;
|
|
240
|
-
there is no force/cleanup shortcut in this flow. Actual runtime start/wake/retire
|
|
241
|
-
and production provider qualification remain separate lifecycle/acceptance gates.
|
|
242
|
-
|
|
243
|
-
### Pending request-file router (lifecycle-owned)
|
|
244
|
-
|
|
245
|
-
The requested addition is `prepare --request <absolute-regular-json-file> [--json]`;
|
|
246
|
-
it is **not implemented in either pinned CLI**. The
|
|
247
|
-
[request transport helper](2026-09-17-public-prepare-request.md) is now implemented
|
|
248
|
-
as `readPortablePreparationRequest({file,inputFlags,explicitSelector})`; it takes
|
|
249
|
-
already-parsed transport forms, reads bounded strict JSON, and returns the whole
|
|
250
|
-
input unchanged to public core. The real preparation consumer exercises it.
|
|
251
|
-
The file is exactly `handoff.preparation`, never its wrapper or a captured
|
|
252
|
-
execution selector. The
|
|
253
|
-
lifecycle adapter must retain the existing source/workspace flag forms, make
|
|
254
|
-
request mode mutually exclusive with all source/deployment input overrides, and
|
|
255
|
-
use the existing bounded reader, strict JSON decoder and public core validator.
|
|
256
|
-
Explicit captured selectors must be refused for new preparation, including before
|
|
257
|
-
the command; stale inherited resolution/instance environment must not supply
|
|
258
|
-
new-work authority. The existing global selector parser owns this routing—there
|
|
259
|
-
is no onboarding-owned parallel parser. Until implemented/tested, use the working
|
|
260
|
-
public JavaScript handoff above, not invented request flags.
|
|
261
|
-
|
|
262
|
-
## Working versus pending
|
|
263
|
-
|
|
264
|
-
| Boundary | Status at the pinned consumer |
|
|
265
|
-
|---|---|
|
|
266
|
-
| Explicit source/workspace inspection and exact public preparation handoff | Exercised with real native Git and unchanged request objects |
|
|
267
|
-
| String/null standalone context in the public JavaScript API | Exercised; core's 256-byte limit applies |
|
|
268
|
-
| Exact artifact approval before provider compilation, explicit adopter binding | Exercised with a declared fixture capability only |
|
|
269
|
-
| Fresh preflight refuses newly appeared legacy state | Exercised before the real adapter is invoked |
|
|
270
|
-
| Private `directory` in public request | Correctly refused before scratch/acquisition writes |
|
|
271
|
-
| Request-file helper feeding the existing public preparation API | Implemented and exercised with unchanged inputs; no installer/global parser |
|
|
272
|
-
| Onboarding CLI request mode and standalone-key/operator-binding flags | **Not implemented in pinned `prepareCmd`**; lifecycle-owned router still pending |
|
|
273
|
-
| Public `oats prepare` source/workspace forms | Present in pinned source, but cannot express this complete fresh-context/binding flow; not a substitute for the tested API request |
|
|
274
|
-
| Core-owned inspection of a retained resolution | Exercised without source/workspace availability |
|
|
275
|
-
| Actual public `spawn --no-launch` at exact 257c4b96 | Exercised producer-created incarnation/index/intent and fixture hooks; returns pending launch, refuses overwrite |
|
|
276
|
-
| Full actual captured launch/start/wake/retire, managed runtimes and non-directory work placement | **Not qualified by these tests**; lifecycle-owned work/gates remain |
|
|
277
|
-
| Real knowledge delivery and private messaging grants/reuse | **Not qualified**; provider-owned implementation and bounded live acceptance remain |
|
|
278
|
-
| Historical reconstruction/in-place migration | Deferred; not required or silently satisfied by fresh setup |
|
|
279
|
-
|
|
280
|
-
No migration CLI, alternate installer/config engine, registry, identity database or
|
|
281
|
-
provider backend is introduced here. Main integration/release remain coordinator
|
|
282
|
-
operations, not consequences of a passing local consumer test.
|
|
@@ -1,59 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
type: Decision
|
|
3
|
-
status: accepted-boundary
|
|
4
|
-
title: Messaging capability contract boundary
|
|
5
|
-
description: Define generic messaging inputs and outcomes in OATS, then implement their provider behavior in oats.aweb.
|
|
6
|
-
timestamp: 2026-09-16
|
|
7
|
-
---
|
|
8
|
-
|
|
9
|
-
# Messaging capability contract boundary
|
|
10
|
-
|
|
11
|
-
OATS supplies the messaging contracts; the selected messaging capability consumes
|
|
12
|
-
them. `oats.aweb` owns the aweb implementation. This follows the accepted
|
|
13
|
-
[Portable Souls decisions](2026-09-15-portable-souls-handoff.md), not a new kernel
|
|
14
|
-
messaging backend or OATS-hosted identity/permissions system.
|
|
15
|
-
|
|
16
|
-
## Existing shared contracts
|
|
17
|
-
|
|
18
|
-
Reuse [provider wire v1](2026-09-16-provider-binding-wire.md), ProviderBinding1,
|
|
19
|
-
MessagingChoice1, execution bindings and manifest-owned commands/hooks.
|
|
20
|
-
|
|
21
|
-
| Contract responsibility | Kernel supplies/enforces | Capability implements/reports |
|
|
22
|
-
|---|---|---|
|
|
23
|
-
| Selection | One selected provider, exact artifact approval, shared resolver choices | Provider-domain normalization/binding, no hidden precedence |
|
|
24
|
-
| Ownership/context | Responsible-human reference; qualified workspace or explicit standalone key; inherited owner for children/jobs | Native reference resolution and proof it addresses the intended human/context |
|
|
25
|
-
| Membership intent | Private floor plus explicit wider set; source/team declarations are not enrollment | Native private-team provision/reuse and wider membership reconciliation |
|
|
26
|
-
| Invocation | Exact execution binding, validated instance/subject and action/event, own binding and prior provider receipt | Native operation using only supplied authority and supported credential lookup |
|
|
27
|
-
| Outcomes | Typed readiness, action/result and cleanup custody; nonsecret retained receipts | Provider-specific identity/team/member references and actual evidence |
|
|
28
|
-
| Access | Four distinct expected grants, no privacy inferred from configuration | Verification through actual catalog/live/contact/history mechanisms |
|
|
29
|
-
|
|
30
|
-
The existing generic wire is implemented. The exact additional captured messaging
|
|
31
|
-
lifecycle projection, if required, must be reviewed/versioned before hookup. It
|
|
32
|
-
must derive from the captured record and invocation, not ambient team/configuration
|
|
33
|
-
or a knowledge-specific source declaration. This table does not invent a second
|
|
34
|
-
command table, resolver or readiness protocol.
|
|
35
|
-
|
|
36
|
-
## Phase and effect boundary
|
|
37
|
-
|
|
38
|
-
- Normalize/bind compile supplied intent into nonsecret provider data and common
|
|
39
|
-
messaging choices. No identity/team enrollment occurs merely from acquisition.
|
|
40
|
-
- Check is read-only and action-specific. A setup action may be admissible when
|
|
41
|
-
authorized to provision; that is not proof membership already exists.
|
|
42
|
-
- Explicit capability setup/lifecycle actions perform permitted mutations, retain
|
|
43
|
-
receipts and handle retries/cleanup. Subsequent readiness reflects actual state.
|
|
44
|
-
- Unadapted captured actions refuse before using live legacy configuration. No
|
|
45
|
-
hidden fallback, arbitrary team creation or identity borrowing is acceptable.
|
|
46
|
-
|
|
47
|
-
## Getting the aweb capability working
|
|
48
|
-
|
|
49
|
-
Investigate and use supported aweb identity, team, membership and transport
|
|
50
|
-
mechanisms inside the capability. A missing field in `whoami`, or absence of a
|
|
51
|
-
single human/context lookup command, is not sufficient to declare the design
|
|
52
|
-
blocked. Establish the native resolution/reuse mechanism and its authority; where
|
|
53
|
-
that truly cannot be implemented, report the precise missing backend contract.
|
|
54
|
-
|
|
55
|
-
The four grants intentionally need not share a native API. Compose their separate
|
|
56
|
-
mechanisms without treating contact as history access. Preserve the no-new-OATS-
|
|
57
|
-
control-plane constraint and validate cross-host identity/private-team reuse with
|
|
58
|
-
real provider evidence before claiming privacy. Fixtures and connectivity alone
|
|
59
|
-
remain insufficient. No credential values belong in captured contracts or logs.
|
|
@@ -1,158 +0,0 @@
|
|
|
1
|
-
# Portable migration evidence reader and planner
|
|
2
|
-
|
|
3
|
-
> **Superseded (2026-09-23).** The modules this note describes (`lib/portable-migration-evidence.mjs`, `lib/portable-migration.mjs`, `lib/portable-migration-store.mjs`, `lib/portable-migration-artifacts.mjs`, `lib/legacy-lock-codec.mjs`) were deleted with the workspace model v2 — there is no migration (decision 5/15: a 0.24 lock is `E_LOCK_SCHEMA`, not evidence). 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 is the first read-only implementation slice of the
|
|
6
|
-
Portable Souls consumer migration. The retention contract and the fifteen
|
|
7
|
-
binding decisions in `2026-09-15-portable-souls-handoff.md` remain authoritative.
|
|
8
|
-
|
|
9
|
-
## Boundary
|
|
10
|
-
|
|
11
|
-
`lib/portable-migration-evidence.mjs` inventories an explicitly supplied bounded
|
|
12
|
-
set of deployment-local inputs:
|
|
13
|
-
|
|
14
|
-
- legacy/current lock files;
|
|
15
|
-
- instance homes (`instance.json` plus an optional rollback-incomplete cleanup
|
|
16
|
-
descriptor); and
|
|
17
|
-
- schedule scopes (`oats-schedules.json` plus schedule state).
|
|
18
|
-
|
|
19
|
-
The caller supplies the target list. The reader does not recursively discover a
|
|
20
|
-
workspace, infer an owner from an alias, consult current config, fetch source,
|
|
21
|
-
execute a provider, inspect a live process, or write any file. Targets must be
|
|
22
|
-
contained by one explicit canonical deployment and may not traverse symlinked
|
|
23
|
-
parents. Metadata is read through the shared descriptor-backed bounded reader.
|
|
24
|
-
Every present document is identified by `oats.bytes.v1` over its literal bytes,
|
|
25
|
-
including historical whitespace and old field spelling.
|
|
26
|
-
|
|
27
|
-
The inventory deliberately emits a bounded summary rather than copying arbitrary
|
|
28
|
-
legacy settings, commands, task text, credentials, or hook output into a new
|
|
29
|
-
record. A valid-shaped `executionBinding` or scheduled execution capsule is
|
|
30
|
-
preserved as a candidate reference, but shape validation is not retained-input,
|
|
31
|
-
approval, host, provider, or lifecycle verification.
|
|
32
|
-
|
|
33
|
-
`verifyPortableMigrationInventory` repeats the same bounded reads and compares the
|
|
34
|
-
complete deterministic projection. Byte drift, disappearance, appearance, or a
|
|
35
|
-
changed summary returns `selection-changed`. This is a precondition for a future
|
|
36
|
-
apply operation, not an apply operation itself.
|
|
37
|
-
|
|
38
|
-
## Honest planning
|
|
39
|
-
|
|
40
|
-
`lib/portable-migration.mjs` is pure. `planPortableMigration(inventory)` emits only:
|
|
41
|
-
|
|
42
|
-
- `preserve`: retain an existing captured job authority while verifying it;
|
|
43
|
-
- `verify`: verify an existing captured reference and all separate readiness
|
|
44
|
-
gates; or
|
|
45
|
-
- `hold`: preserve literal evidence because reconstruction is not established.
|
|
46
|
-
|
|
47
|
-
Every target remains `partial` or `unknown`. This planner cannot emit
|
|
48
|
-
`reconstructed`, sets `readyToApply:false`, and declares that it performs no
|
|
49
|
-
writes, provider execution, session or schedule changes, or trust transfer.
|
|
50
|
-
|
|
51
|
-
## Separate unselectable evidence store
|
|
52
|
-
|
|
53
|
-
`lib/portable-migration-store.mjs` validates `ResolutionEvidence1` and publishes
|
|
54
|
-
planned partial/unknown evidence under:
|
|
55
|
-
|
|
56
|
-
```text
|
|
57
|
-
<deployment>/.agents/resolution-evidence/<oats.json.v1 id>.json
|
|
58
|
-
```
|
|
59
|
-
|
|
60
|
-
The store is distinct from `.agents/resolutions/`; partial/unknown documents must
|
|
61
|
-
carry `resolution:null`. `listResolutionEvidence` provides bounded deterministic
|
|
62
|
-
diagnostics with incremental visited-entry, retained-record and aggregate-byte
|
|
63
|
-
limits. Managed metadata/staging consumes the visited-entry budget even though it
|
|
64
|
-
is not returned. An absent store is empty; every returned content address is
|
|
65
|
-
verified, and corruption or unexpected entries fail closed.
|
|
66
|
-
`commitPlannedResolutionEvidence` re-reads and compares
|
|
67
|
-
the complete inventory before it creates the evidence store, recomputes the
|
|
68
|
-
planner output rather than trusting caller-supplied status, and publishes canonical
|
|
69
|
-
private bytes by atomic no-replace hard link. Matching existing bytes are reused;
|
|
70
|
-
damaged existing evidence refuses without repair. Publication changes no source
|
|
71
|
-
lock, home, schedule, session or approval state.
|
|
72
|
-
|
|
73
|
-
`commitHistoricalHomeCapabilityEvidence` can publish the narrow verified
|
|
74
|
-
home-to-v2-artifact association as `partial`. It persists capability/package IDs,
|
|
75
|
-
paths and old/new digests, but deliberately omits unclassified legacy source,
|
|
76
|
-
settings and command text; the original byte-addressed documents remain the
|
|
77
|
-
witnesses. It still grants no selection, approval or retention authority.
|
|
78
|
-
|
|
79
|
-
The validator can read a future `reconstructed` evidence document only when it has
|
|
80
|
-
no unresolved inputs and names a shaped resolution reference. This slice exposes
|
|
81
|
-
no writer for that state. A later dedicated historical verifier must establish and
|
|
82
|
-
publish the complete reconstructed record before it can publish that evidence.
|
|
83
|
-
|
|
84
|
-
Old v1/v2 lock rows remain literal historical evidence. Their legacy digest and
|
|
85
|
-
trust fields are not reinterpreted as owner-execute identity or exact-artifact
|
|
86
|
-
approval. `lib/legacy-lock-codec.mjs` is the acyclic bytes-in structural decoder
|
|
87
|
-
for both historical formats. It preserves the existing v1 entry, retired-entry,
|
|
88
|
-
v2 row/graph/back-reference, state-free empty-v2 and transitional-v2 semantics,
|
|
89
|
-
while routing ingress through the common bounded strict JSON decoder. Duplicate
|
|
90
|
-
decoded keys, malformed UTF-8 and oversized inputs therefore refuse before any
|
|
91
|
-
row is exposed. Retired capability policy is an injected pure callback; the
|
|
92
|
-
codec imports no core/config/filesystem module.
|
|
93
|
-
|
|
94
|
-
The migration inventory accepts this codec as `legacyLockDecoder`. Successful
|
|
95
|
-
structural verification removes only that unresolved item from the plan.
|
|
96
|
-
`verifyHistoricalLockCandidate` then rechecks the complete inventory, rereads the
|
|
97
|
-
chosen explicit target and returns the strictly decoded v1/v2 rows with their
|
|
98
|
-
literal witness and `trustAuthority:"none"`. It does not retain artifacts or
|
|
99
|
-
associate the lock with a home/job. A deployment lock still cannot establish which
|
|
100
|
-
revision an individual home or job used. Home runtime rows, rendered hook paths,
|
|
101
|
-
copied skills and launch metadata can narrow investigation but do not establish
|
|
102
|
-
the full source, capability, helper and managed-runtime closure. A legacy or
|
|
103
|
-
unknown scheduled attempt is held exactly; it is never rebound to today's
|
|
104
|
-
definition or lock. The inventory distinguishes an existing legacy attempt from
|
|
105
|
-
an absent attempt even when no execution field exists. A captured current
|
|
106
|
-
definition cannot turn that old unresolved attempt into preserved captured
|
|
107
|
-
authority; the planner keeps the target `unknown` and `hold` pending owner
|
|
108
|
-
reconciliation.
|
|
109
|
-
|
|
110
|
-
`lib/portable-migration-artifacts.mjs` adds one narrower read-only proof for an
|
|
111
|
-
explicit materialized-v2 candidate. It requires the strict lock witness, verifies
|
|
112
|
-
the existing legacy artifact digest and exact `.oats-installation.json` provenance,
|
|
113
|
-
preflights `.oats-installation.json` through the bounded descriptor-backed
|
|
114
|
-
regular-file reader before the legacy tree hasher can allocate it, records the
|
|
115
|
-
exact provenance-byte digest, and then measures both old and new tree digests
|
|
116
|
-
twice. A final bounded provenance read must match the preflight witness. A
|
|
117
|
-
symlinked, oversized, replaced or drifting provenance file therefore cannot lend
|
|
118
|
-
external/pre-hash bytes to the candidate. The old digest implementation and its
|
|
119
|
-
historical mode limitations remain unchanged. The result labels modes
|
|
120
|
-
`observed-at-migration`, trust/selection authority `none`, and retention
|
|
121
|
-
`not-retained`.
|
|
122
|
-
|
|
123
|
-
V1 candidates require the existing literal legacy digest as an injected callback;
|
|
124
|
-
the migration module never imports core or substitutes the v2 algorithm. It
|
|
125
|
-
preflights and byte-witnesses bounded regular `oats.json`, requires its
|
|
126
|
-
capability/version to match the v1 row, brackets old/new digest measurements, and
|
|
127
|
-
still treats `trustedExecutables` only as evidence. V1 `package` and capability
|
|
128
|
-
`path` are persisted as `null`: unknown historical row keys do not become verified
|
|
129
|
-
artifact provenance. No legacy source, settings or other unknown row text is copied
|
|
130
|
-
into the new evidence document; only the independently verified artifact path is.
|
|
131
|
-
|
|
132
|
-
`verifyHistoricalHomeCapabilityCandidate` can additionally prove that one unchanged
|
|
133
|
-
home's `capabilityRuntime` names exactly one capability with the same old digest.
|
|
134
|
-
That is a narrow per-capability association only: the result remains `partial`,
|
|
135
|
-
retains the legacy trusted bit only as a claim, and leaves source revision, full
|
|
136
|
-
resources/helpers/runtime closure and new-format approval unresolved.
|
|
137
|
-
|
|
138
|
-
## Required follow-on seams
|
|
139
|
-
|
|
140
|
-
1. The acyclic strict legacy-lock byte decoder is implemented. Parent integration
|
|
141
|
-
must replace `core.parseLockFileStrict`'s duplicate body with a tiny file-read
|
|
142
|
-
wrapper around it and expose the bound bytes seam with the kernel's retired-ID
|
|
143
|
-
callback. Until that integration lands, core remains the live parser and the
|
|
144
|
-
migration inventory requires explicit decoder injection.
|
|
145
|
-
2. Parent lifecycle integration must provide the authoritative bounded target
|
|
146
|
-
list, including quarantined/deferred homes and independent provider records.
|
|
147
|
-
This module does not infer deployment topology.
|
|
148
|
-
3. Reconstructed publication needs a dedicated historical evidence verifier. It
|
|
149
|
-
must establish every managed input, recheck unchanged witnesses, retain exact
|
|
150
|
-
artifacts, require new-format executable approval, and use immutable guarded
|
|
151
|
-
publication. It must not weaken the existing prepared-only
|
|
152
|
-
`commitCapturedResolution` gate.
|
|
153
|
-
4. Partial/unknown evidence now has its own immutable evidence store and never
|
|
154
|
-
enters `.agents/resolutions/` or becomes dispatch-selectable. A later lifecycle
|
|
155
|
-
adapter may index these references without changing that authority boundary.
|
|
156
|
-
|
|
157
|
-
No live migration, lock conversion, timer, provider, instance, or deployment
|
|
158
|
-
operation is performed by this slice.
|