@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,127 +0,0 @@
|
|
|
1
|
-
# Captured dispatch integration
|
|
2
|
-
|
|
3
|
-
This connects the record/package/source primitives to the exact action loader.
|
|
4
|
-
Core exposes `loadCapturedDispatch`, and the CLI supports exact captured inspect,
|
|
5
|
-
approval and command invocation. Lifecycle/provider adoption and complete
|
|
6
|
-
preparation/migration are still in progress.
|
|
7
|
-
|
|
8
|
-
## Capture effective setting defaults, do not invent them on load
|
|
9
|
-
|
|
10
|
-
`manifest-settings.mjs` derives setting defaults from the exact selected capability
|
|
11
|
-
manifest bytes. Their provenance names an artifact-owned document: exact artifact
|
|
12
|
-
reference, manifest path, raw-byte integrity and JSON pointer to the default.
|
|
13
|
-
This also works for catalog/local sources without fabricating an upstream Git URL
|
|
14
|
-
or a self-referential resolution ID.
|
|
15
|
-
|
|
16
|
-
`manifest-default` is the intrinsic field-default candidate, below workspace, soul,
|
|
17
|
-
adoption and operator choices in the SAME resolver. It is not a third policy authority.
|
|
18
|
-
Hard requirements still constrain it. Explicit null, false and empty values survive;
|
|
19
|
-
overridden defaults remain considered inputs with their exact witness. The shared
|
|
20
|
-
schema consumes the runtime candidate/Origin enums.
|
|
21
|
-
|
|
22
|
-
Preparation must call `captureManifestSettings` with every selected manifest before
|
|
23
|
-
publishing the record. Every effective setting uses its canonical per-capability
|
|
24
|
-
choice key. Loaded records verify the retained default value and artifact/file/pointer
|
|
25
|
-
witness, even when overridden. Verification also checks every recorded intrinsic
|
|
26
|
-
candidate against those exact selected manifests, including choices absent from the
|
|
27
|
-
dispatch settings map; fabricated defaults are not valid considered inputs. Missing
|
|
28
|
-
or misdirected settings are incomplete captures, not an invitation to consult the
|
|
29
|
-
current manifest/configuration and fill them later.
|
|
30
|
-
|
|
31
|
-
Two focused default tests and a real retained-record regression cover priority,
|
|
32
|
-
nullable/false/empty/prototype-named data, complete definition coverage, original
|
|
33
|
-
manifest ownership and refusal of omitted witnesses/noncanonical references.
|
|
34
|
-
|
|
35
|
-
## Public captured command ABI
|
|
36
|
-
|
|
37
|
-
Builds advertise `capturedDispatchApi: 1` and their supported actions in
|
|
38
|
-
`oats version --json`. Both selectors are required, with an absolute deployment
|
|
39
|
-
and the complete `sha256-…` resolution ID; they can precede or follow the command.
|
|
40
|
-
|
|
41
|
-
```text
|
|
42
|
-
oats inspect --deployment /deployment --resolution sha256-… --json
|
|
43
|
-
oats inspect --deployment /deployment --resolution sha256-… --composition --json
|
|
44
|
-
oats trust example.action --deployment /deployment --resolution sha256-… --json
|
|
45
|
-
oats trust example.action --deployment /deployment --artifact-set sha256-… --json
|
|
46
|
-
oats example-action show --deployment /deployment --resolution sha256-… -- --detail
|
|
47
|
-
oats operation run knowledge:view --deployment /deployment --resolution sha256-… --home /instance --arg mode=full --json
|
|
48
|
-
oats spawn expert --deployment /deployment --resolution sha256-… --home /fresh/instances/expert-1 --no-launch --json
|
|
49
|
-
```
|
|
50
|
-
|
|
51
|
-
The operation form loads the selected provider and operation declaration from the
|
|
52
|
-
exact record. Home-context operations additionally require the target home's stored
|
|
53
|
-
`executionBinding` to match the deployment/resolution pair; scope operations run in
|
|
54
|
-
the explicit deployment and reject a home. Both routes use current exact approval,
|
|
55
|
-
provider readiness, retained settings/resources and the private invocation binding
|
|
56
|
-
snapshot. They preserve the existing strict JSON-v1 operation receipt and unconfirmed-
|
|
57
|
-
effects semantics without consulting a current soul, config, lock or manifest. The
|
|
58
|
-
owned operation process uses non-ignorable `SIGKILL` at the bounded timeout. If the
|
|
59
|
-
provider answered but private snapshot cleanup cannot be confirmed, the command fails
|
|
60
|
-
as unconfirmed while retaining the observed provider envelope and cleanup diagnostic;
|
|
61
|
-
it never reports ordinary pre-execution failure or drops the possible effects.
|
|
62
|
-
|
|
63
|
-
The artifact-set variant approves exact prospective software BEFORE a provider codec
|
|
64
|
-
can complete a resolution. It requires a verified v3 artifact set, never a fabricated
|
|
65
|
-
partial resolution or current selected-ID lookup, and supports trust only.
|
|
66
|
-
|
|
67
|
-
The last command passes `--detail` to the capability. Tokens after `--` are never
|
|
68
|
-
interpreted as OATS selectors. Duplicate/partial pairs and mixed legacy context
|
|
69
|
-
selectors refuse. Explicit pairs replace inherited captured selectors as a whole.
|
|
70
|
-
Child commands receive `OATS_DEPLOYMENT`/`OATS_RESOLUTION` plus their captured settings;
|
|
71
|
-
invoking-agent OATS/PI identity variables are removed. Host credentials/configuration
|
|
72
|
-
outside those identity namespaces are not copied or reconfigured. Dispatch uses the
|
|
73
|
-
current absolute Node executable and the exact retained, inventoried script.
|
|
74
|
-
|
|
75
|
-
An inherited pair propagates to subsequent CLI invocations. Unsupported captured
|
|
76
|
-
kernel commands refuse rather than use current configuration; host `version` probing
|
|
77
|
-
remains available under inherited context. Existing uncaptured invocations are unchanged
|
|
78
|
-
pending explicit lifecycle/migration cutover. Trust is an explicit operator action;
|
|
79
|
-
inspect/help never execute capability code. Provider binding qualification and captured
|
|
80
|
-
operation CLI support are implemented; captured spawn/lifecycle CLI support is not
|
|
81
|
-
implied by the advertised actions.
|
|
82
|
-
|
|
83
|
-
## Implemented action-loading boundary
|
|
84
|
-
|
|
85
|
-
`loadCapturedDispatch({deployment, resolution, action})` verifies exact retained
|
|
86
|
-
inputs, applies core's strict full manifest loader/self-containment/compatibility
|
|
87
|
-
checks, and reconstructs captured settings without consulting current config.
|
|
88
|
-
It reads current exact-artifact approvals separately, sharing evaluation with
|
|
89
|
-
approval diagnostics. No provider payload code runs before approval.
|
|
90
|
-
|
|
91
|
-
Actions are inspect, compose, command (capability or namespace), operation (slot
|
|
92
|
-
and name), and hook (capability and event). Command/operation/hook loading requires
|
|
93
|
-
the exact action declaration, approved target artifact, host requirements, and an
|
|
94
|
-
inventoried retained executable file. Fundamental provider bindings remain blocked
|
|
95
|
-
until their qualification adapter is integrated; choices are not enrollment.
|
|
96
|
-
Unsupported actions and unverified historical reconstruction refuse, never fall back.
|
|
97
|
-
|
|
98
|
-
`dispatch.composition` records canonical soul body, ordered instruction references,
|
|
99
|
-
work mode, named skills, and explicit injection omission/override choices. Launch
|
|
100
|
-
recipes require this projection. Non-launch command records may omit it; compose
|
|
101
|
-
then refuses. The common formatter is shared with existing preparation, while the
|
|
102
|
-
captured path reads only verified retained resources. Body ownership, duplicate
|
|
103
|
-
sources/skill names, override references and disabled choices are checked. Complete
|
|
104
|
-
manifest-to-curriculum coverage and lifecycle materialization remain integration work.
|
|
105
|
-
|
|
106
|
-
The actual complete manifest codec and both applicable launch checks (recipe plus
|
|
107
|
-
configuration, including reserved environment/NUL rules) are supplied by core.
|
|
108
|
-
This static validation does not qualify launch: launch action adoption and mutable
|
|
109
|
-
host/provider gates are still separate work. No current lock/config/marketplace
|
|
110
|
-
fallback and no inferred executable permission from diagnostic booleans.
|
|
111
|
-
|
|
112
|
-
Core now also exposes a bounded scaffold-only adapter for a preselected explicit
|
|
113
|
-
home. It requires exact executable approvals and retained `directory` work mode,
|
|
114
|
-
then materializes the retained soul/helper link, composed instructions, copied skill
|
|
115
|
-
trees, private directory work and `instance.json` execution binding/responsible-human
|
|
116
|
-
metadata. `instance.json` explicitly records `scaffolded-hooks-pending`; no launch,
|
|
117
|
-
non-directory work-target setup or roster discovery is implied. The public captured
|
|
118
|
-
spawn route currently requires an explicit absolute new home and `--no-launch`; it does
|
|
119
|
-
not infer placement, work or launch inputs. A separate exact activation step derives
|
|
120
|
-
any source receipt from the record and runs the captured hook preflight/runner. Before
|
|
121
|
-
hooks it publishes a durable captured-home reference outside the source/home, so source
|
|
122
|
-
deletion cannot hide an uncertain lifecycle obligation. Success records
|
|
123
|
-
`spawned-launch-pending`; required or uncertain hook failure keeps the home, hook metadata
|
|
124
|
-
and `spawn-failed-cleanup-required` status in both metadata and the index rather than
|
|
125
|
-
deleting possible external effects. The scaffold adapter creates the home exclusively and rolls
|
|
126
|
-
back only its inode-owned home on pre-hook failure. Other work modes refuse until their
|
|
127
|
-
work-target inputs are retained.
|
|
@@ -1,143 +0,0 @@
|
|
|
1
|
-
# Captured resolution records — implementation boundary
|
|
2
|
-
|
|
3
|
-
This checkpoint implements versioned record-shape validation, immutable publication
|
|
4
|
-
and exact retained-input verification. It does **not** yet wire public preparation,
|
|
5
|
-
lock v3, executable approval, provider readiness, lifecycle dispatch or schedules.
|
|
6
|
-
The [binding retention contract](2026-09-14-artifact-retention-contract.md) remains
|
|
7
|
-
the authority for that subsequent consumer migration.
|
|
8
|
-
|
|
9
|
-
## Record and address
|
|
10
|
-
|
|
11
|
-
`lib/resolution-shape.mjs` is the executable wire validator. The structural schema
|
|
12
|
-
is `docs/captured-resolution.schema.json`, using `docs/portable.schema.json` shared
|
|
13
|
-
definitions; semantic and filesystem checks remain mandatory. A reference is
|
|
14
|
-
`{ schemaVersion: 1, id: "sha256-<64 lowercase hex>" }`. The ID hashes the complete
|
|
15
|
-
canonical JSON record including its final LF, with no self-ID field. Records live at:
|
|
16
|
-
|
|
17
|
-
```text
|
|
18
|
-
<explicit-deployment>/.agents/resolutions/<id>.json
|
|
19
|
-
```
|
|
20
|
-
|
|
21
|
-
They are outside instance homes and independent of today's selection lock. Each
|
|
22
|
-
record has these closed top-level fields:
|
|
23
|
-
|
|
24
|
-
```text
|
|
25
|
-
schemaVersion, capture, subject, context, artifacts, choices, bindings,
|
|
26
|
-
messagingChoice, resources, resourceBundles, dispatch, helpers, evidence
|
|
27
|
-
```
|
|
28
|
-
|
|
29
|
-
`capture` is prepared or reconstructed; partial/unknown evidence is not a complete
|
|
30
|
-
record. Reconstructed wire data requires evidence. The current publication API
|
|
31
|
-
accepts only newly prepared records: historical publication remains explicitly
|
|
32
|
-
migration-required until the evidence/migration verifier is implemented. This is
|
|
33
|
-
not a claim that old instances were reconstructed.
|
|
34
|
-
|
|
35
|
-
## Source and artifact structure
|
|
36
|
-
|
|
37
|
-
A persistent subject has a soul selection containing identity, revision, alias,
|
|
38
|
-
sourceArtifact, definition and projection.roots. Qualified identity and artifact
|
|
39
|
-
identity must agree. The definition lies inside its exported path and retained
|
|
40
|
-
projection. Roots are a canonically ordered set.
|
|
41
|
-
|
|
42
|
-
A Git observation carries its matching repository identity, canonical remote,
|
|
43
|
-
selector, exact commit and provenance. A local observation names an explicit local
|
|
44
|
-
source and the witnessed projection integrity. For a local working snapshot of a
|
|
45
|
-
Git soul it also carries the matching repository identity; it does not pretend the
|
|
46
|
-
local bytes are a clean Git commit. The same identity/digest can be retained while
|
|
47
|
-
different records preserve different observations.
|
|
48
|
-
|
|
49
|
-
A helper subject contains provider, definition and name. Its provider must be a
|
|
50
|
-
selected capability, and its definition belongs to that provider. Verification
|
|
51
|
-
requires the helper to be exported by the retained manifest and checks the retained
|
|
52
|
-
name and canonical AGENTS.md/CLAUDE.md alias. It is not a persistent-import shortcut.
|
|
53
|
-
|
|
54
|
-
The embedded artifact set has schemaVersion, package rows and capability rows.
|
|
55
|
-
Package rows carry normalized source/path, exact commit or local witness, version,
|
|
56
|
-
versioned payload integrity and dependencies. Dependency edges are own-key checked,
|
|
57
|
-
unique/canonically ordered, and traversed with a bounded iterative cycle check.
|
|
58
|
-
Capability rows carry their exact artifact reference and package/projection or
|
|
59
|
-
honest local-capability provenance. Verification checks installation-provenance
|
|
60
|
-
fields against these captured rows, never today's lock.
|
|
61
|
-
|
|
62
|
-
## Choices, bindings and managed resources
|
|
63
|
-
|
|
64
|
-
Choices retain value, selectedBy, constraints and considered candidates. Candidates
|
|
65
|
-
also retain their authority kind so replay does not guess precedence from a display
|
|
66
|
-
origin. The record validator replays them through the SAME pure choice resolver and
|
|
67
|
-
requires an identical satisfied result. It does not add a second policy algorithm.
|
|
68
|
-
Origins identify source/deployment/operator/record/artifact documents and JSON pointers;
|
|
69
|
-
source witnesses include exact revision and raw-byte document integrity. Manifest defaults
|
|
70
|
-
name their exact selected artifact, oats.json bytes and default pointer, and are retained
|
|
71
|
-
as lowest-priority candidates. Missing defaults or noncanonical setting references refuse;
|
|
72
|
-
loading never invents a default. See `2026-09-15-captured-dispatch.md`.
|
|
73
|
-
|
|
74
|
-
Bindings identify a selected fundamental provider, payload contract/version,
|
|
75
|
-
provider-owned payload, credential references and provenance. The kernel imposes no
|
|
76
|
-
OKF payload model. Credential entries name environment/provider lookups, never
|
|
77
|
-
literal credential values. Payload classification and provider readiness remain the
|
|
78
|
-
provider/preparation boundary; arbitrary JSON passing this shape is not proof of
|
|
79
|
-
correct or non-secret service configuration.
|
|
80
|
-
|
|
81
|
-
Resources refer to a selected capability, source or explicitly selected resource
|
|
82
|
-
bundle and a contained path/kind. Dispatch holds exact manifest references,
|
|
83
|
-
per-capability/per-setting choice-key maps, a launch recipe, managed runtime-package
|
|
84
|
-
references, host requirements and work-target inputs. Manifests correspond exactly
|
|
85
|
-
to selected capability IDs; runtime/work-target references must be in the inventory.
|
|
86
|
-
|
|
87
|
-
The input verifier checks source hard capability/provider/settings requirements
|
|
88
|
-
against captured selections and provenance. `soul-constraints.mjs` derives these
|
|
89
|
-
hard facts for both preparation and verification; their equality/presence constraint
|
|
90
|
-
and retained-definition document/pointer must remain in the captured choices.
|
|
91
|
-
An equal effective value with an operator-only origin is not a substitute.
|
|
92
|
-
|
|
93
|
-
Explicit extra source resources and repo-relative package roots must be present in
|
|
94
|
-
the projection. A repo: package's versioned payload integrity must match that root
|
|
95
|
-
inside the retained source snapshot, not merely the original local pathname or a
|
|
96
|
-
claimed commit. Missing required source or helper inputs refuse before publication.
|
|
97
|
-
|
|
98
|
-
Launch/host structures retain their existing codec boundary. Full manifest and
|
|
99
|
-
launch-contract compilation belongs to the sole preparation/dispatch adapter; this
|
|
100
|
-
storage checkpoint is not permission to execute a merely shape-valid recipe.
|
|
101
|
-
|
|
102
|
-
## Private messaging choices are not membership
|
|
103
|
-
|
|
104
|
-
Disabled messaging has no private/wider tuple. Enabled messaging records the
|
|
105
|
-
selected provider, provider-resolvable human reference, matching workspace or
|
|
106
|
-
explicit standalone context, canonically ordered chosen wider teams and provenance.
|
|
107
|
-
The tuple is an intent, not a certificate or a privacy assertion. Mutable credentials,
|
|
108
|
-
live membership and conversation-history authorization remain outside the software
|
|
109
|
-
pin and require the named provider owner's qualification.
|
|
110
|
-
|
|
111
|
-
## Publication and verification
|
|
112
|
-
|
|
113
|
-
`commitCapturedResolution` validates the shape and verifies retained managed inputs,
|
|
114
|
-
then writes a private candidate and atomically hard-links it into the addressed
|
|
115
|
-
namespace without replacing an existing entry. The managed ignore is published
|
|
116
|
-
before payloads. Matching existing bytes are reused; damaged entries refuse without
|
|
117
|
-
repair. Cleanup is confined to owned staging and preserves primary failures.
|
|
118
|
-
|
|
119
|
-
`readCapturedResolution` uses a bounded, descriptor-backed read, requires canonical
|
|
120
|
-
bytes and the matching address, then validates shape. It checks the hash before
|
|
121
|
-
following references. `verifyResolutionInputs` verifies the selected trees, source
|
|
122
|
-
projection/canonical aliases, hard software requirements, resource kinds/containment,
|
|
123
|
-
manifest identity/layer/provenance and helper definitions. A helper graph has explicit
|
|
124
|
-
active/visited state and record/depth/edge/aggregate-byte budgets. Shared nodes and
|
|
125
|
-
trees are cached only within that verification operation.
|
|
126
|
-
|
|
127
|
-
No read falls back to current config, current lock, source checkout, catalog or
|
|
128
|
-
network. Exact-input verification does not grant executable trust, prove enrollment,
|
|
129
|
-
freeze external state or establish host readiness. The eventual action loader must
|
|
130
|
-
perform those current action-specific checks through the supported contracts.
|
|
131
|
-
|
|
132
|
-
## Evidence and following work
|
|
133
|
-
|
|
134
|
-
Focused tests cover canonical source/revision/alias structure; constraint replay;
|
|
135
|
-
embedded graph/ownership errors; provider opacity/credential references; immutable
|
|
136
|
-
A/B record resources after original-source removal and poisoned ambient config/lock;
|
|
137
|
-
corrupt-record refusal; and missing requirements/helpers before publication.
|
|
138
|
-
|
|
139
|
-
These are record/input tests, NOT the end-to-end old-instance/queued-job lifecycle
|
|
140
|
-
acceptance. The shared structural schemas and private lock/approval primitives are
|
|
141
|
-
implemented, but public selection-lock integration, complete source-aware preparation,
|
|
142
|
-
exact action dispatch, managed-runtime authorization,
|
|
143
|
-
provider payload qualification and explicit historical migration remain separate gates.
|
|
@@ -1,100 +0,0 @@
|
|
|
1
|
-
# Package preparation integration
|
|
2
|
-
|
|
3
|
-
The source/data/discovery foundation is on main. This next increment reuses the
|
|
4
|
-
existing package engine instead of implementing an unrelated portable installer.
|
|
5
|
-
Public preparation/dispatch/migration is not complete at this checkpoint.
|
|
6
|
-
|
|
7
|
-
## Shared materialization
|
|
8
|
-
|
|
9
|
-
`lib/package-materialization.mjs:createCapabilityMaterializer` is now the single
|
|
10
|
-
materializer called by existing acquisition and exact restore. The kernel supplies
|
|
11
|
-
its existing runtime-dependency, declared-resource containment, dependency-link
|
|
12
|
-
containment and native-binary checks. The module has no core import, source resolver,
|
|
13
|
-
current lock lookup, approval decision or activation side effect.
|
|
14
|
-
|
|
15
|
-
The order remains: production dependency materialization with no lifecycle scripts;
|
|
16
|
-
complete containment/native checks; projection into staging; deterministic v1
|
|
17
|
-
installation provenance; integrity. Published flat capability roots still copy
|
|
18
|
-
rather than move so later template reads keep their source. Dedicated roots move
|
|
19
|
-
as before. Links and actual modes are retained.
|
|
20
|
-
|
|
21
|
-
`.oats-installation.json` remains exactly the same ordered two-space JSON, final LF
|
|
22
|
-
and mode0644. It records the supplied true source/commit/package path, never a writer
|
|
23
|
-
kernel version or a fabricated temporary local source. The legacy integrity result
|
|
24
|
-
remains literal compatibility evidence; new preparation calculates the explicit
|
|
25
|
-
new-format digest over the same resulting tree. No approval transfers between formats.
|
|
26
|
-
|
|
27
|
-
Materialization also rejects aliased capability roots and source-controlled links,
|
|
28
|
-
directories, executable entries or case aliases at the reserved provenance path BEFORE
|
|
29
|
-
dependency work. Generated provenance replaces its own entry atomically; it never writes
|
|
30
|
-
through an authored link or shared inode. Valid v1 bytes remain unchanged. A temporary
|
|
31
|
-
fixture reproduced an inherited acquisition overwrite through a provenance symlink
|
|
32
|
-
before this correction, then verified refusal and preservation of the unrelated target.
|
|
33
|
-
|
|
34
|
-
Whole-closure platform-invariance preflight remains the caller's responsibility and
|
|
35
|
-
must occur BEFORE any sibling npm materialization. The reusable callback factory does
|
|
36
|
-
not replace that transaction-level requirement or the full manifest codec.
|
|
37
|
-
|
|
38
|
-
One focused test pins exact provenance bytes, modes, links and absence of selection/
|
|
39
|
-
approval writes. Existing acquisition, integrity-drift, restore and no-install-script
|
|
40
|
-
regressions plus the scaffold-only dependency probe exercise the core adapter.
|
|
41
|
-
|
|
42
|
-
## Shared staged closure
|
|
43
|
-
|
|
44
|
-
`lib/package-closure.mjs:resolvePackageClosure` now owns the one bounded dependency
|
|
45
|
-
walk, identity/source-key collision checks, cycle detection and dependency-first
|
|
46
|
-
ordering. Existing acquisition delegates to it through its existing source, manifest,
|
|
47
|
-
compatibility and literal legacy-digest adapters. Source adapters must provide explicit
|
|
48
|
-
owned staging and cleanup; repeated edges cannot discard a reused authoritative root.
|
|
49
|
-
|
|
50
|
-
The default limits are 256 unique package identities, 64 dependency levels and 1024
|
|
51
|
-
source requests. These are resource guards, not another version solver. The engine
|
|
52
|
-
never installs, activates, writes a lock, grants approval or calls a catalog on its own.
|
|
53
|
-
Two focused graph tests and existing acquisition/closure/restore/incremental/platform
|
|
54
|
-
preflight regressions verify the extraction. The legacy source parser remains explicit
|
|
55
|
-
in the old adapter while the new preparation adapter uses the shared portable grammar.
|
|
56
|
-
|
|
57
|
-
Package dependencies in new preparation use `source-spec.mjs:parsePackageDependency3`:
|
|
58
|
-
pinned Git shorthand/raw transports share the portable parser, catalog convenience is
|
|
59
|
-
explicitly dependency-only, and local dependencies need an explicit base/authorization.
|
|
60
|
-
No catalog nickname becomes an intrinsic soul source and no remote dependency inherits
|
|
61
|
-
cwd or HOME. The legacy adapter retains its literal older parser until cutover.
|
|
62
|
-
|
|
63
|
-
## Portable package adapter
|
|
64
|
-
|
|
65
|
-
`lib/portable-package-preparation.mjs:preparePackageArtifacts` connects the shared
|
|
66
|
-
walker/materializer to frozen repository observations. It verifies required exports,
|
|
67
|
-
uses one staged source per normalized package request, binds repo: dependencies to
|
|
68
|
-
their declaring snapshot, applies whole-closure platform checks before materialization,
|
|
69
|
-
and retains new-format artifacts with their real source/commit/path provenance.
|
|
70
|
-
The existing full package/capability loader accepts an explicit strict-ingress option:
|
|
71
|
-
bounded strict bytes are read BEFORE either package or capability semantic validation,
|
|
72
|
-
not as a late post-check. Legacy default readers keep their existing interpretation.
|
|
73
|
-
|
|
74
|
-
Local inputs require explicit authorization and a clean selected package subtree.
|
|
75
|
-
A bounded no-follow preflight refuses known deployment/auth/instance roots at EVERY
|
|
76
|
-
depth before copying, and excludes nested Git metadata. Source identity/stat witnesses
|
|
77
|
-
are checked around copying. Git and local sources share the same guarded projection
|
|
78
|
-
writer, including exclusive leaf creation, parent-alias protection and exact final names.
|
|
79
|
-
Remote package dependencies cannot borrow adopter-local paths merely because another
|
|
80
|
-
root request was local. Owned staging cleanup uses the shared safe read-only-directory
|
|
81
|
-
cleanup, never changes original sources or retained artifacts.
|
|
82
|
-
|
|
83
|
-
Newly obtained observations join the same selector/commit cache as caller-supplied ones.
|
|
84
|
-
A repo: dependency reuses a snapshot already obtained by this preparation operation;
|
|
85
|
-
it does not require another upstream fetch to serve an already-known commit.
|
|
86
|
-
|
|
87
|
-
The result contains the acquired artifact set and root package IDs plus owned cleanup.
|
|
88
|
-
It writes neither current selection locks nor approvals and activates nothing. Complete
|
|
89
|
-
composition must still select active capabilities, classify/resolve provider bindings,
|
|
90
|
-
retain source/runtime resources, commit the full record and perform selection CAS.
|
|
91
|
-
Four focused tests cover original local provenance/source deletion, real Git A plus
|
|
92
|
-
repo dependencies without a second observation after upstream B, nested private-state
|
|
93
|
-
refusal, nested Git exclusion and bounded capability ingress before semantic validation.
|
|
94
|
-
|
|
95
|
-
## Following integration
|
|
96
|
-
|
|
97
|
-
Complete the composition transaction and public consumers using this adapter. Portable
|
|
98
|
-
preparation must resolve each selector once, retain exact artifacts and records, and
|
|
99
|
-
update only its mutable selection snapshot. Existing old-format readers
|
|
100
|
-
remain literal evidence/migration paths, not ambient fallback for captured dispatch.
|
|
@@ -1,121 +0,0 @@
|
|
|
1
|
-
# Portable data and digest contract
|
|
2
|
-
|
|
3
|
-
Status: implementation foundation for the accepted Portable Souls architecture.
|
|
4
|
-
These codecs do not yet change installed locks, approvals or lifecycle dispatch.
|
|
5
|
-
The [retention contract](2026-09-14-artifact-retention-contract.md) and
|
|
6
|
-
[binding decisions](2026-09-15-portable-souls-handoff.md) govern the consumer migration.
|
|
7
|
-
|
|
8
|
-
## Explicit integrity identity
|
|
9
|
-
|
|
10
|
-
An integrity is `{ format, value }`, with a supported format name and the complete
|
|
11
|
-
`sha256-<64 lowercase hexadecimal digits>`. Format is part of identity and approval;
|
|
12
|
-
matching bare hex values from different formats cannot transfer trust.
|
|
13
|
-
|
|
14
|
-
| Format | Meaning |
|
|
15
|
-
| --- | --- |
|
|
16
|
-
| `oats.tree-exec.v1` | Complete retained tree, including materialized dependencies/provenance, with owner-execute semantics |
|
|
17
|
-
| `oats.package-payload-exec.v1` | Same encoding with the existing package exclusions: root oats-lock.json and all node_modules entries |
|
|
18
|
-
| `oats.json.v1` | Canonical UTF-8 JSON including exactly one final LF; no implicit hash prefix |
|
|
19
|
-
| `oats.bytes.v1` | Exact raw descriptor bytes; not canonical JSON or a tree |
|
|
20
|
-
|
|
21
|
-
Existing legacy digest functions and their exclusions/order/framing remain literal
|
|
22
|
-
in their current modules. They are not renamed to the new format or interpreted
|
|
23
|
-
as executable-mode evidence. The new format fixes both the missing executable flag
|
|
24
|
-
and the legacy ambiguity between arbitrary binary content and entry delimiters.
|
|
25
|
-
Computing a new digest does not prove historical bytes or grant approval.
|
|
26
|
-
|
|
27
|
-
## New tree encoding
|
|
28
|
-
|
|
29
|
-
The stream begins with the UTF-8 format name and one NUL. Entries are sorted by
|
|
30
|
-
UTF-8 bytes of their complete POSIX-relative paths, not locale or insertion order.
|
|
31
|
-
`L(bytes)` is an unsigned 64-bit big-endian byte count followed by those exact bytes.
|
|
32
|
-
|
|
33
|
-
```text
|
|
34
|
-
file: F || L(path) || X || L(content)
|
|
35
|
-
symlink: S || L(path) || L(literal target)
|
|
36
|
-
```
|
|
37
|
-
|
|
38
|
-
F/S are single ASCII bytes. X is one binary byte, 0 or 1, from
|
|
39
|
-
`(mode & 0o100) !== 0`. Git and local-path materializations use this same rule.
|
|
40
|
-
Group/other execute bits, other permission bits, directory modes and empty
|
|
41
|
-
directories are outside identity. Copy/retention still preserves actual modes.
|
|
42
|
-
Links are not followed. Unsupported entries and invalid UTF-8 names/targets refuse;
|
|
43
|
-
there is no lossy normalization. Retention separately validates containment.
|
|
44
|
-
|
|
45
|
-
File reads use a descriptor and compare observed metadata before/after reading.
|
|
46
|
-
This is not a hostile-host or atomic whole-filesystem snapshot guarantee.
|
|
47
|
-
Resource limits bound traversal and bytes.
|
|
48
|
-
|
|
49
|
-
## Canonical records and strict ingress
|
|
50
|
-
|
|
51
|
-
`lib/portable-values.mjs` provides the shared canonical encoder and strict JSON
|
|
52
|
-
reader. The declaration decoder must use this reader for JSON, rather than another
|
|
53
|
-
permissive JSON.parse entry point.
|
|
54
|
-
|
|
55
|
-
- Emit object keys directly in UTF-8 byte order; rebuilding an object and calling
|
|
56
|
-
JSON.stringify would reorder integer-looking keys.
|
|
57
|
-
- Preserve array order. Field-specific set validation/ordering belongs to the
|
|
58
|
-
shared wire schema, not arbitrary provider payload normalization.
|
|
59
|
-
- Use ECMAScript primitive JSON serialization for finite numbers, including -0→0.
|
|
60
|
-
- Accept Unicode-scalar strings only. Invalid UTF-8 and escaped lone surrogates fail.
|
|
61
|
-
- Reject duplicate decoded JSON keys, including alternate escape spellings.
|
|
62
|
-
- Produce null-prototype decoded maps; consumers still use explicit own-key checks.
|
|
63
|
-
- Refuse cycles, sparse/extended arrays, unsupported prototypes, non-JSON values,
|
|
64
|
-
symbols and accessor/non-enumerable properties. Do not invoke caller getters or
|
|
65
|
-
toJSON. This is a data contract, not a sandbox for hostile JavaScript proxies.
|
|
66
|
-
- Apply byte/depth/entry limits. The canonical output ends with exactly one LF.
|
|
67
|
-
|
|
68
|
-
Record IDs, identity keys, source-request keys and artifact-set keys must use this
|
|
69
|
-
one encoding. Validate a stored record's content address before following its
|
|
70
|
-
references. Complete/evidence separation, graph budgets and semantic cross-reference
|
|
71
|
-
validation are the next record-store layer, not claims supplied by a digest alone.
|
|
72
|
-
|
|
73
|
-
## Shared portable source grammar
|
|
74
|
-
|
|
75
|
-
`lib/source-spec.mjs` is the pure new-format codec. It neither reads the filesystem
|
|
76
|
-
nor acquires anything, supplies credentials, observes hosting-provider identity,
|
|
77
|
-
or grants trust. It is not wired into legacy CLI/lock readers at this checkpoint.
|
|
78
|
-
|
|
79
|
-
- Intrinsic declarations use exactly `git:`, `repo:` or `path:`.
|
|
80
|
-
- Git declarations require an explicit revision selector; omitted package fragments
|
|
81
|
-
use the documented `oats-package` default. `#.` and an empty fragment select root.
|
|
82
|
-
- The normalized source and canonical package path remain separate in lock rows.
|
|
83
|
-
- SSH user@host is authority, not a selector. Slash-bearing refs remain intact;
|
|
84
|
-
ambiguous additional delimiters refuse rather than select another repository.
|
|
85
|
-
- Shorthand host/repository locators expand through the documented HTTPS/.git
|
|
86
|
-
convention. Explicit repository endpoints retain their path; no .git suffix is
|
|
87
|
-
invented for an explicit SSH/HTTPS/file endpoint.
|
|
88
|
-
- Repository/import/knowledge locators have no package-root default, ref or fragment;
|
|
89
|
-
the surrounding declaration supplies revision and exported path separately.
|
|
90
|
-
- `repo:` is a repository-root relation at the captured soul revision, not a local
|
|
91
|
-
path and not a new persisted package transport. Containment is also checked later.
|
|
92
|
-
- `path:` acquisition requires explicit local adoption authorization; relative local
|
|
93
|
-
paths require an explicit absolute authoring base. No cwd or HOME inference.
|
|
94
|
-
- New-format locked values must already be canonical; reading does not repair them.
|
|
95
|
-
Catalog convenience remains valid for package locks/CLI, never as the sole source
|
|
96
|
-
of an intrinsic portable soul requirement. Captured provenance must preserve the
|
|
97
|
-
actual resolution; a catalog ID is not immutable publisher authority.
|
|
98
|
-
- Existing legacy-format parsers remain literal evidence readers until their explicit
|
|
99
|
-
migration. Consumer integration must route new values through this codec rather
|
|
100
|
-
than adding private URL/ref splitters.
|
|
101
|
-
|
|
102
|
-
## New-format retained trees
|
|
103
|
-
|
|
104
|
-
`lib/portable-artifacts.mjs` stores new-format capability, soul-source and other
|
|
105
|
-
managed-resource trees under the explicit deployment. Capability namespaces use
|
|
106
|
-
validated IDs; soul namespaces use the canonical hash of the supplied qualified
|
|
107
|
-
identity, not an adopter alias; resource namespaces are content-addressed.
|
|
108
|
-
The source/record layer must establish that identity and its source witness.
|
|
109
|
-
Storage alone does not certify repository identity or a complete soul projection.
|
|
110
|
-
|
|
111
|
-
New revisions live under a `tree-exec-v1` path component; legacy artifact addresses
|
|
112
|
-
remain distinct. Existing relative-link containment, same-parent tree publication
|
|
113
|
-
and atomic managed-ignore publication are reused. Source and copied bytes are
|
|
114
|
-
verified; damaged entries refuse without repair; valid identical trees are reused.
|
|
115
|
-
Managed directory symlinks refuse, while an explicitly selected deployment alias
|
|
116
|
-
may resolve to its real directory. No current lock, source checkout or network is
|
|
117
|
-
consulted when verifying a retained tree.
|
|
118
|
-
|
|
119
|
-
A verification receipt establishes tree bytes/containment only. It does not grant
|
|
120
|
-
trust, prove all required resources are present, resolve provider bindings or
|
|
121
|
-
implement lifecycle dispatch. Those are the captured-resolution layer's checks.
|