@awebai/oats 0.29.4 → 0.30.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +12 -6
- package/bin/oats.mjs +194 -50
- package/docs/capabilities.md +160 -171
- package/docs/capability-manifest.schema.json +6 -11
- package/docs/configuration.md +213 -64
- package/docs/design/2026-09-16-knowledge-capability-contract.md +36 -50
- package/docs/design/2026-09-23-workspace-module-contracts.md +377 -544
- package/docs/design/2026-09-26-okf-knowledge-operations.md +132 -357
- package/docs/design/2026-09-27-team-model-v2.md +97 -117
- package/docs/design/2026-09-28-automations-trust.md +38 -0
- package/docs/design/2026-09-28-soul-launch-preference.md +63 -0
- package/docs/design/HISTORY.md +65 -0
- package/docs/design/README.md +23 -54
- package/docs/desktop-cli-api.md +1787 -1777
- package/docs/desktop.md +30 -91
- package/docs/execution-targets.md +146 -292
- package/docs/first-team.md +31 -17
- package/docs/implementation.md +77 -288
- package/docs/integrations.md +118 -320
- package/docs/knowledge-capability-authoring.md +25 -52
- package/docs/knowledge-reference/acceptance.md +3 -3
- package/docs/knowledge-reference/adoption.md +1 -1
- package/docs/knowledge-reference/harvester.md +2 -2
- package/docs/knowledge-reference/package-craft.md +3 -3
- package/docs/knowledge-reference/provider-mapping.md +3 -6
- package/docs/knowledge-reference/reader-capture.md +3 -3
- package/docs/knowledge-theory.md +62 -166
- package/docs/knowledge.md +225 -404
- package/docs/layers.md +42 -97
- package/docs/oats-local.schema.json +58 -5
- package/docs/oats-membership.schema.json +1 -8
- package/docs/oats-package.schema.json +5 -5
- package/docs/oats-workspace.schema.json +8 -22
- package/docs/official-catalog.md +25 -28
- package/docs/packages.md +45 -63
- package/docs/plans/0.30-close-out.md +83 -0
- package/docs/release-lane.md +82 -0
- package/docs/release-notes/oats-framework-v1.1.3.md +10 -8
- package/docs/release-notes/v0.19.0.md +48 -147
- package/docs/release-notes/v0.19.1.md +2 -3
- package/docs/release-notes/v0.19.3.md +2 -15
- package/docs/release-notes/v0.20.0.md +0 -15
- package/docs/release-notes/v0.22.0.md +71 -138
- package/docs/release-notes/v0.22.1.md +42 -90
- package/docs/release-notes/v0.22.10.md +1 -1
- package/docs/release-notes/v0.22.11.md +1 -47
- package/docs/release-notes/v0.22.12.md +4 -13
- package/docs/release-notes/v0.22.13.md +1 -42
- package/docs/release-notes/v0.22.14.md +3 -11
- package/docs/release-notes/v0.22.15.md +1 -46
- package/docs/release-notes/v0.22.16.md +6 -8
- package/docs/release-notes/v0.22.18.md +1 -99
- package/docs/release-notes/v0.22.19.md +3 -14
- package/docs/release-notes/v0.22.2.md +6 -15
- package/docs/release-notes/v0.22.3.md +0 -1
- package/docs/release-notes/v0.22.4.md +1 -14
- package/docs/release-notes/v0.22.5.md +2 -12
- package/docs/release-notes/v0.22.6.md +0 -3
- package/docs/release-notes/v0.23.0.md +9 -25
- package/docs/release-notes/v0.23.1.md +9 -25
- package/docs/release-notes/v0.23.2.md +2 -4
- package/docs/release-notes/v0.24.0.md +56 -97
- package/docs/release-notes/v0.24.1.md +7 -11
- package/docs/release-notes/v0.24.10.md +34 -45
- package/docs/release-notes/v0.24.11.md +12 -20
- package/docs/release-notes/v0.24.12.md +35 -48
- package/docs/release-notes/v0.24.13.md +34 -41
- package/docs/release-notes/v0.24.2.md +9 -13
- package/docs/release-notes/v0.24.3.md +7 -11
- package/docs/release-notes/v0.24.4.md +6 -6
- package/docs/release-notes/v0.24.5.md +6 -10
- package/docs/release-notes/v0.24.6.md +2 -5
- package/docs/release-notes/v0.24.7.md +46 -75
- package/docs/release-notes/v0.24.8.md +58 -96
- package/docs/release-notes/v0.24.9.md +38 -54
- package/docs/release-notes/v0.25.0.md +59 -76
- package/docs/release-notes/v0.25.1.md +57 -81
- package/docs/release-notes/v0.25.2.md +51 -70
- package/docs/release-notes/v0.25.3.md +11 -13
- package/docs/release-notes/v0.25.4.md +9 -13
- package/docs/release-notes/v0.25.5.md +3 -5
- package/docs/release-notes/v0.25.6.md +20 -29
- package/docs/release-notes/v0.25.7.md +5 -7
- package/docs/release-notes/v0.25.8.md +26 -39
- package/docs/release-notes/v0.26.0.md +175 -646
- package/docs/release-notes/v0.27.0.md +4 -5
- package/docs/release-notes/v0.27.1.md +4 -6
- package/docs/release-notes/v0.27.2.md +1 -1
- package/docs/release-notes/v0.28.0.md +57 -124
- package/docs/release-notes/v0.29.0.md +89 -208
- package/docs/release-notes/v0.29.1.md +1 -1
- package/docs/release-notes/v0.29.2.md +3 -4
- package/docs/release-notes/v0.30.0.md +205 -0
- package/docs/release-notes/v0.30.1.md +123 -0
- package/docs/schedules.md +280 -363
- package/docs/servers.md +99 -117
- package/docs/soul.schema.json +2 -9
- package/docs/souls-and-instances.md +145 -158
- package/docs/workspaces.md +137 -215
- package/lib/automations.mjs +21 -6
- package/lib/core.mjs +226 -74
- package/lib/instance-events.mjs +1 -1
- package/lib/instance-inspect.mjs +109 -34
- package/lib/instance-lifecycle.mjs +14 -1
- package/lib/instance-resolution.mjs +26 -27
- package/lib/launch-preference.mjs +87 -0
- package/lib/materialize.mjs +3 -3
- package/lib/packages.mjs +1 -1
- package/lib/resolve.mjs +30 -88
- package/lib/schedule.mjs +1 -1
- package/lib/teams-verbs.mjs +195 -0
- package/lib/teams.mjs +190 -0
- package/lib/triggers.mjs +2 -2
- package/lib/workspace.mjs +54 -147
- package/package-catalog.json +10 -16
- package/package.json +1 -3
- package/skills/oats-getting-started/SKILL.md +25 -13
- package/capabilities/oats-authoring/LICENSE +0 -21
- package/capabilities/oats-authoring/oats-package.json +0 -11
- package/capabilities/oats-authoring/oats.json +0 -12
- package/capabilities/oats-authoring/skills/integration-authoring/SKILL.md +0 -84
- package/capabilities/oats-authoring/skills/skill-craft/SKILL.md +0 -109
- package/capabilities/oats-authoring/skills/soul-craft/SKILL.md +0 -116
- package/capabilities/oats-aweb/bin/oats-aweb-binding.mjs +0 -11
- package/capabilities/oats-aweb/bin/oats-aweb.mjs +0 -1338
- package/capabilities/oats-aweb/injects/aweb.md +0 -47
- package/capabilities/oats-aweb/lib/binding-wire.mjs +0 -356
- package/capabilities/oats-aweb/lib/captured-execution.mjs +0 -91
- package/capabilities/oats-aweb/lib/captured-native.mjs +0 -91
- package/capabilities/oats-aweb/lib/grant-custody.mjs +0 -38
- package/capabilities/oats-aweb/lib/invocation-shape.mjs +0 -135
- package/capabilities/oats-aweb/lib/portable-binding.mjs +0 -146
- package/capabilities/oats-aweb/lib/session-readiness.mjs +0 -56
- package/capabilities/oats-aweb/lib/wake-receive.mjs +0 -56
- package/capabilities/oats-aweb/oats.json +0 -208
- package/capabilities/oats-aweb/skills/LICENSE +0 -21
- package/capabilities/oats-aweb/skills/VENDORED.md +0 -31
- package/capabilities/oats-aweb/skills/aweb-identity/SKILL.md +0 -201
- package/capabilities/oats-aweb/skills/aweb-messaging/SKILL.md +0 -161
- package/capabilities/oats-aweb/skills/aweb-messaging/references/messaging-scenarios.md +0 -61
- package/capabilities/oats-aweb/skills/aweb-team-membership/SKILL.md +0 -116
- package/capabilities/oats-aweb/skills/aweb-team-membership/references/team-membership-reference.md +0 -74
- package/capabilities/oats-aweb/skills/oats-aweb/SKILL.md +0 -216
- package/capabilities/oats-jira/bin/oats-jira.mjs +0 -40
- package/capabilities/oats-jira/injects/jira.md +0 -10
- package/capabilities/oats-jira/oats.json +0 -22
- package/capabilities/oats-jira/skills/jira-tasks/SKILL.md +0 -179
- package/capabilities/oats-linear/bin/oats-linear-hook.mjs +0 -34
- package/capabilities/oats-linear/bin/oats-linear.mjs +0 -344
- package/capabilities/oats-linear/injects/linear.md +0 -8
- package/capabilities/oats-linear/oats.json +0 -24
- package/capabilities/oats-linear/skills/linear-tasks/SKILL.md +0 -223
- package/capabilities/oats-okf/bin/oats-okf-binding.mjs +0 -14
- package/capabilities/oats-okf/bin/oats-okf.mjs +0 -209
- package/capabilities/oats-okf/injects/okf.md +0 -42
- package/capabilities/oats-okf/lib/binding-wire.mjs +0 -348
- package/capabilities/oats-okf/lib/captured-worker.mjs +0 -109
- package/capabilities/oats-okf/lib/config.mjs +0 -124
- package/capabilities/oats-okf/lib/consult.mjs +0 -518
- package/capabilities/oats-okf/lib/harvest-status.mjs +0 -88
- package/capabilities/oats-okf/lib/harvest-switch.mjs +0 -94
- package/capabilities/oats-okf/lib/inspection.mjs +0 -119
- package/capabilities/oats-okf/lib/invocation-context.mjs +0 -111
- package/capabilities/oats-okf/lib/invocation-shape.mjs +0 -135
- package/capabilities/oats-okf/lib/io.mjs +0 -118
- package/capabilities/oats-okf/lib/migration.mjs +0 -137
- package/capabilities/oats-okf/lib/okf-validate.mjs +0 -123
- package/capabilities/oats-okf/lib/portable-binding.mjs +0 -199
- package/capabilities/oats-okf/lib/source-contract.mjs +0 -46
- package/capabilities/oats-okf/lib/sources.mjs +0 -424
- package/capabilities/oats-okf/lib/stores.mjs +0 -473
- package/capabilities/oats-okf/lib/worker.mjs +0 -497
- package/capabilities/oats-okf/oats.json +0 -148
- package/capabilities/oats-okf/schemas/okf-base.schema.json +0 -46
- package/capabilities/oats-okf/schemas/okf-bindings.schema.json +0 -112
- package/capabilities/oats-okf/schemas/okf-portable-declaration.schema.json +0 -87
- package/capabilities/oats-okf/schemas/okf-portable-payload.schema.json +0 -113
- package/capabilities/oats-okf/schemas/okf-soul.schema.json +0 -37
- package/capabilities/oats-okf/skills/okf-consultation/SKILL.md +0 -144
- package/capabilities/oats-okf/skills/okf-consultation/references/consult.md +0 -86
- package/capabilities/oats-okf/skills/okf-instance-knowledge/SKILL.md +0 -104
- package/capabilities/oats-okf-harvest/bin/okf-harvest.mjs +0 -140
- package/capabilities/oats-okf-harvest/injects/harvester.md +0 -12
- package/capabilities/oats-okf-harvest/oats.json +0 -26
- package/capabilities/oats-okf-harvest/skills/knowledge-harvest/SKILL.md +0 -168
- package/capabilities/oats-okf-harvest/skills/knowledge-theory/SKILL.md +0 -192
- package/capabilities/oats-okf-harvest/skills/okf-authoring/SKILL.md +0 -151
- package/capabilities/oats-okf-harvest/skills/okf-authoring/scripts/okf-validate.mjs +0 -123
- package/capabilities/oats-okf-maintenance/bin/okf-maintenance.mjs +0 -170
- package/capabilities/oats-okf-maintenance/injects/maintainer.md +0 -12
- package/capabilities/oats-okf-maintenance/lib/provenance.mjs +0 -50
- package/capabilities/oats-okf-maintenance/oats.json +0 -21
- package/capabilities/oats-okf-maintenance/skills/knowledge-review/SKILL.md +0 -159
- package/capabilities/oats-okf-maintenance/skills/knowledge-theory/SKILL.md +0 -192
- package/capabilities/oats-okf-maintenance/skills/okf-authoring/SKILL.md +0 -151
- package/capabilities/oats-okf-maintenance/skills/okf-authoring/scripts/okf-validate.mjs +0 -123
- package/capabilities/oats-okf-maintenance/skills/okf-trigger-setup/SKILL.md +0 -146
- package/capabilities/oats-review/injects/review.md +0 -69
- package/capabilities/oats-review/oats.json +0 -10
- package/capabilities/oats-review/skills/code-review/SKILL.md +0 -44
- package/capabilities/oats-review/skills/security-review/SKILL.md +0 -59
- package/docs/conventions.md +0 -90
- package/docs/design/2026-09-07-architecture-reassessment.md +0 -131
- package/docs/design/2026-09-07-desktop-souls-capabilities.md +0 -50
- package/docs/design/2026-09-07-mobile-agent-management-proposal.md +0 -228
- package/docs/design/2026-09-08-expert-assisted-deployment-proposal.md +0 -558
- package/docs/design/2026-09-13-knowledge-and-memory-direction.md +0 -744
- package/docs/design/2026-09-13-knowledge-implementation.md +0 -127
- package/docs/design/2026-09-13-knowledge-location-contract.md +0 -340
- package/docs/design/2026-09-14-artifact-retention-contract.md +0 -190
- package/docs/design/2026-09-14-portable-souls-and-git-workspaces.md +0 -708
- package/docs/design/2026-09-14-portable-souls-contract-amendments.md +0 -85
- package/docs/design/2026-09-14-portable-souls-explainer.md +0 -750
- package/docs/design/2026-09-15-captured-dispatch.md +0 -127
- package/docs/design/2026-09-15-captured-resolution-records.md +0 -143
- package/docs/design/2026-09-15-package-preparation.md +0 -100
- package/docs/design/2026-09-15-portable-data-contract.md +0 -121
- package/docs/design/2026-09-15-portable-declarations.md +0 -189
- package/docs/design/2026-09-15-portable-souls-handoff.md +0 -150
- package/docs/design/2026-09-15-portable-souls-implementation.md +0 -417
- package/docs/design/2026-09-15-selection-lock-and-approval.md +0 -122
- package/docs/design/2026-09-15-source-observation.md +0 -119
- package/docs/design/2026-09-16-captured-admission.md +0 -77
- package/docs/design/2026-09-16-captured-helper-dispatch.md +0 -105
- package/docs/design/2026-09-16-captured-launch-inputs.md +0 -42
- package/docs/design/2026-09-16-command-profile-preparation.md +0 -86
- package/docs/design/2026-09-16-fresh-install-first-rollout.md +0 -47
- package/docs/design/2026-09-16-fresh-operator-walkthrough.md +0 -282
- package/docs/design/2026-09-16-messaging-capability-contract.md +0 -59
- package/docs/design/2026-09-16-portable-migration-evidence.md +0 -158
- package/docs/design/2026-09-16-portable-onboarding.md +0 -179
- package/docs/design/2026-09-16-prepare-request-transport.md +0 -26
- package/docs/design/2026-09-16-provider-binding-codecs.md +0 -98
- package/docs/design/2026-09-16-provider-binding-wire.md +0 -274
- package/docs/design/2026-09-17-capability-helper-input-contract.md +0 -95
- package/docs/design/2026-09-17-captured-backend-parity.md +0 -53
- package/docs/design/2026-09-17-captured-native-start.md +0 -58
- package/docs/design/2026-09-17-portable-boundary-hookup.md +0 -19
- package/docs/design/2026-09-17-portable-boundary-resources.md +0 -52
- package/docs/design/2026-09-17-public-captured-start.md +0 -108
- package/docs/design/2026-09-17-public-prepare-request.md +0 -90
- package/docs/design/2026-09-18-captured-pi-host.md +0 -205
- package/docs/design/2026-09-18-first-cut-release-checklist.md +0 -131
- package/docs/design/2026-09-18-herdr-protocol-compatibility.md +0 -60
- package/docs/design/2026-09-20-redesign-program-board.md +0 -142
- package/docs/design/2026-09-20-workspace-and-portable-adoption-plan.md +0 -289
- package/docs/design/2026-09-20-workspace-onboarding-public.md +0 -207
- package/docs/design/2026-09-22-desktop-parity-seams.md +0 -58
- package/docs/design/2026-09-23-simplified-workspace-model.md +0 -711
- package/docs/design/2026-09-23-workspace-v2-implementation-plan.md +0 -65
- package/docs/design/2026-09-24-desktop-phase-f-boundary.md +0 -242
- package/docs/design/2026-09-24-phase-d-plan.md +0 -305
- package/docs/design/2026-09-25-teams-contract.md +0 -258
- package/docs/design/2026-09-26-desktop-design-brief-architecture.md +0 -241
- package/docs/design/desktop-ux-plan.md +0 -362
- package/docs/design/launch-configurations.md +0 -168
- package/docs/design/okf-mirror-provenance.md +0 -105
- package/docs/design/operations-contract.md +0 -141
- package/docs/oats-member.schema.json +0 -38
- package/skills/integration-authoring/SKILL.md +0 -84
- package/skills/oats-support/SKILL.md +0 -79
- package/skills/skill-craft/SKILL.md +0 -109
- package/skills/soul-craft/SKILL.md +0 -116
|
@@ -1,189 +0,0 @@
|
|
|
1
|
-
# Portable declaration codecs — implementation contract
|
|
2
|
-
|
|
3
|
-
The new parser modules implement the accepted two-authority architecture's data
|
|
4
|
-
boundary. They do **not** yet change legacy CLI composition, acquire packages or
|
|
5
|
-
select a workspace. Captured-record primitives exist separately; complete
|
|
6
|
-
preparation and public consumer migration remain integration work.
|
|
7
|
-
|
|
8
|
-
## One safe syntax reader
|
|
9
|
-
|
|
10
|
-
`lib/config-data.mjs` reads new portable YAML and JSON with byte/depth/entry limits,
|
|
11
|
-
raw-byte integrity and JSON-pointer origins. It uses the exact locked `yaml` 2.9.1
|
|
12
|
-
runtime dependency instead of extending a hand-written partial YAML parser; the
|
|
13
|
-
shared strict JSON reader handles JSON input. New kernel manifests/locks include
|
|
14
|
-
that dependency. No dependency install scripts are used.
|
|
15
|
-
|
|
16
|
-
The automatic syntax choice treats a flow-root `{`/`[` as JSON. Callers reading
|
|
17
|
-
explicit YAML may select `format: yaml`; ordinary block YAML supports inline maps,
|
|
18
|
-
sequences of maps, quotes and block scalars. No line or nested mapping is silently
|
|
19
|
-
dropped. YAML anchors, aliases, explicit tags, merge syntax, duplicate/coercive keys,
|
|
20
|
-
non-finite numbers and multiple documents refuse. Quoted metacharacters remain data.
|
|
21
|
-
Lexer/CST processing is budgeted before AST composition; duplicate decoded keys
|
|
22
|
-
are checked with a linear own-key lookup rather than a quadratic composer scan.
|
|
23
|
-
Decoded maps have null prototypes. Origins refer to the original document and
|
|
24
|
-
pointer; optional spans are character offsets, not byte offsets.
|
|
25
|
-
|
|
26
|
-
## Soul v1
|
|
27
|
-
|
|
28
|
-
Canonical authored fields are in [soul.schema.json](../soul.schema.json); runtime
|
|
29
|
-
source semantics are centralized in `lib/source-spec.mjs`. The schema describes
|
|
30
|
-
shape and does not certify acquisition, containment, credentials or enrollment.
|
|
31
|
-
|
|
32
|
-
```text
|
|
33
|
-
schemaVersion: 1
|
|
34
|
-
name: research-expert
|
|
35
|
-
requires:
|
|
36
|
-
capabilities:
|
|
37
|
-
example.research:
|
|
38
|
-
source: git:github.com/example/tools@main#packages/research
|
|
39
|
-
messaging: any
|
|
40
|
-
defaults:
|
|
41
|
-
tasks:
|
|
42
|
-
capability: example.tasks
|
|
43
|
-
source: repo:packages/tasks
|
|
44
|
-
knowledge:
|
|
45
|
-
contract: alternate.documents
|
|
46
|
-
version: 1
|
|
47
|
-
payload:
|
|
48
|
-
collection: research
|
|
49
|
-
teams: [experts]
|
|
50
|
-
resources: [references]
|
|
51
|
-
work: directory
|
|
52
|
-
```
|
|
53
|
-
|
|
54
|
-
`requires.capabilities` are intrinsic hard selections. Fundamental requirements are
|
|
55
|
-
`any` or a source-complete provider selection. Defaults supply source-complete
|
|
56
|
-
fallbacks or explicit `none`; optional additive defaults may disable a nonrequired
|
|
57
|
-
entry with `false`. Contradictions and workspace/operator choices belong to the
|
|
58
|
-
single resolver, not a second precedence implementation in the parser.
|
|
59
|
-
|
|
60
|
-
A provider selection has `capability`, `source`, optional non-secret `settings`.
|
|
61
|
-
An additive map entry obtains its ID from the key and has `source` plus optional
|
|
62
|
-
settings. The parser returns the unchanged declaration, normalized source entries
|
|
63
|
-
keyed by their original pointers, document origins and byte integrity. It does not
|
|
64
|
-
invent omitted defaults or providers.
|
|
65
|
-
|
|
66
|
-
Knowledge declarations use an opaque `{ contract, version, payload }` envelope.
|
|
67
|
-
Provider-owned validation supplies node/store or alternative semantics; this parser
|
|
68
|
-
must not require OKF fields. Parsing an arbitrary payload does not certify that its
|
|
69
|
-
contents are non-secret or that required external resources are configured.
|
|
70
|
-
|
|
71
|
-
Teams are offered aliases, not enrollment or wider-team consent. Extra resources
|
|
72
|
-
are canonical source-repository-relative paths; source projection later verifies
|
|
73
|
-
containment and complete retention. Work/runtime/model/yolo, `launch-config` and
|
|
74
|
-
`backend` are typed execution hints, not an inferred work repository or a policy
|
|
75
|
-
tier. Launch-config keeps the current 1–64-character name grammar; backend remains
|
|
76
|
-
tmux or herdr. This codec does not look up a named configuration, check host tools
|
|
77
|
-
or launch a backend.
|
|
78
|
-
|
|
79
|
-
The versioned format rejects `agent-types`, `type`, authored internal annotations,
|
|
80
|
-
and the old machine-local `repo` field rather than silently dropping them. Legacy
|
|
81
|
-
flat declarations remain migration inputs until the coordinated cutover. A local
|
|
82
|
-
capability path requires explicit local adoption authorization and an absolute
|
|
83
|
-
local base when relative; remote declarations cannot silently use the caller's cwd.
|
|
84
|
-
|
|
85
|
-
## Workspace, repository exports and external imports
|
|
86
|
-
|
|
87
|
-
`lib/workspace-definition.mjs` validates `oats-workspace.yaml`, repository `oats.yaml`
|
|
88
|
-
and the identical standalone/workspace external-soul reference. The schemas are
|
|
89
|
-
[oats-workspace.schema.json](../oats-workspace.schema.json) and
|
|
90
|
-
[oats-member.schema.json](../oats-member.schema.json); they reuse the soul schema's
|
|
91
|
-
selection/provider-envelope definitions. Runtime checks additionally enforce source
|
|
92
|
-
and path semantics, definition containment and duplicate aliases/repositories.
|
|
93
|
-
Both authorities share `portable-policy.mjs` selection-shape validation; neither
|
|
94
|
-
parser implements precedence or acquisition.
|
|
95
|
-
|
|
96
|
-
Workspace fields are schemaVersion, name, members, defaults, knowledge, teams,
|
|
97
|
-
catalogs and imports. Only schemaVersion/name are required; omitted lists admit
|
|
98
|
-
or activate nothing. Repository references have source and optional revision;
|
|
99
|
-
the parser leaves an omitted revision unresolved, not guessed as main. Discovery
|
|
100
|
-
must observe the intended hosting default branch and retain the exact observation.
|
|
101
|
-
Catalog references may additionally name an explicit contained index path.
|
|
102
|
-
|
|
103
|
-
An external import requires source, soul (exported path), revision and alias.
|
|
104
|
-
Its optional adoption object contains teamAliases, providers and bindings. Provider
|
|
105
|
-
choices use the same source-complete default-selection shape; the single resolver
|
|
106
|
-
later checks hard requirements. A team alias mapping is not wider-team consent.
|
|
107
|
-
The parser returns normalized references without creating an adopter-owned soul
|
|
108
|
-
or pretending the source repository is a member.
|
|
109
|
-
|
|
110
|
-
Workspace teams map aliases to provider/id pairs, with the reserved private entry
|
|
111
|
-
accepting only per-human. Knowledge stores and exported stores use provider-owned
|
|
112
|
-
contract/version/payload declarations; there is no imposed OKF node schema here.
|
|
113
|
-
No parser result claims enrollment, private-team identity or privacy qualification.
|
|
114
|
-
|
|
115
|
-
Repository exports contain souls, packages and knowledge lists. A soul export gives
|
|
116
|
-
an identity path plus an explicit definition path inside it, accommodating direct
|
|
117
|
-
and nested soul layouts without guessing. Package exports give their contained
|
|
118
|
-
package root. A public source index may omit workspace; that is not organizational
|
|
119
|
-
admission. Duplicate import aliases/member locators report both origin pointers.
|
|
120
|
-
Qualified hosting identity and reciprocal admission are the next discovery layer.
|
|
121
|
-
`lib/portable-identity.mjs` validates their value shapes: host/provider/repository ID
|
|
122
|
-
or an explicitly canonical remote; a soul adds its exported path; a workspace names
|
|
123
|
-
its oats-workspace.yaml. Alias, revision and local checkout placement are not parts
|
|
124
|
-
of a Git soul identity. Local-only souls have explicit canonical path identities.
|
|
125
|
-
These validators do not turn authored IDs into observed hosting authority or grant
|
|
126
|
-
membership; the discovery adapter must establish the actual facts.
|
|
127
|
-
|
|
128
|
-
## One choice engine
|
|
129
|
-
|
|
130
|
-
`lib/portable-choices.mjs` resolves field-level inputs through one algorithm. A
|
|
131
|
-
requirement is either equality with a concrete value or required presence. Policy
|
|
132
|
-
candidate kinds are workspace-default, soul-default, import-adoption and operator;
|
|
133
|
-
manifest-default is the lower intrinsic field fallback, captured from exact manifest
|
|
134
|
-
bytes rather than a third policy authority. This is
|
|
135
|
-
constraints plus bounded fallbacks, not a repository policy tier or a general
|
|
136
|
-
expression/version solver.
|
|
137
|
-
|
|
138
|
-
A concrete requirement seeds selection; an incompatible ordinary fallback is
|
|
139
|
-
recorded as overridden, not a false conflict. Incompatible adoption/operator choices
|
|
140
|
-
or conflicting hard/equal-authority inputs report both origins. Abstract presence
|
|
141
|
-
with no concrete binding reports needs-configuration. Results include selectedBy,
|
|
142
|
-
constraints and considered origins; they are choice plans, not installed/trusted/
|
|
143
|
-
enrolled readiness or captured-resolution authority.
|
|
144
|
-
|
|
145
|
-
Choice keys are JSON-pointer-shaped field names. Field codecs normalize disabled or
|
|
146
|
-
unbound selections to null; the generic engine does not guess from strings such as
|
|
147
|
-
none. False, zero and empty arrays can be legitimate data bindings. The source-aware
|
|
148
|
-
preparer must supply validated typed selections and retain the authored provenance.
|
|
149
|
-
No I/O or provider-specific payload interpretation belongs in this engine.
|
|
150
|
-
|
|
151
|
-
## Source-aware software plan
|
|
152
|
-
|
|
153
|
-
`lib/portable-composition.mjs:planSoftwareChoices` now compiles validated soul and
|
|
154
|
-
workspace parser results, qualified import adoptions, explicit operator policy and
|
|
155
|
-
provider-supplied hard fields into that SAME engine. `soul-constraints.mjs` supplies
|
|
156
|
-
the hard facts used by both planning and captured-record verification. It does not
|
|
157
|
-
implement another precedence algorithm.
|
|
158
|
-
|
|
159
|
-
Selections and settings retain their original document/pointer. The plan exposes
|
|
160
|
-
selected capability sources, zero/one providers per fundamental slot and per-setting
|
|
161
|
-
choice references. Nested settings retain their owning selection and source: the
|
|
162
|
-
same resolver first determines source eligibility, then resolves eligible settings
|
|
163
|
-
with the same stable inputs. Compatible-source fallbacks still fill open fields;
|
|
164
|
-
rejected-source settings are separate `excludedSettings` diagnostics with their
|
|
165
|
-
origins, never active configuration. No source is fetched or observed twice.
|
|
166
|
-
Two selected fields cannot assign different sources to one capability
|
|
167
|
-
ID. A required provider with no selection remains needs-configuration; no repository
|
|
168
|
-
capability-default tier or implicit provider is introduced.
|
|
169
|
-
|
|
170
|
-
A repo: choice carries its declaring source locator and exact Git revision or explicit
|
|
171
|
-
local context alongside the relative path; retained local bytes have separate witnesses. The same path in workspace and soul repositories is not
|
|
172
|
-
the same package. Operator repo: inputs need an explicit source context, never cwd.
|
|
173
|
-
The shared source codec validates normalized choice fields against their source/path
|
|
174
|
-
rather than allowing a contradictory URL or extra annotation. Local-path selection
|
|
175
|
-
still requires explicit authorization and is never executable trust.
|
|
176
|
-
|
|
177
|
-
Discovery must supply qualified adoption identities; aliases do not select the
|
|
178
|
-
upstream soul. Matching canonical-remote identities must agree with the import source.
|
|
179
|
-
Contradictory adoption fields for the same identity report both origins. Binding
|
|
180
|
-
values and team-alias maps are retained as data, not provider execution or enrollment.
|
|
181
|
-
|
|
182
|
-
This is a private SOFTWARE plan, not public readiness or a completed captured
|
|
183
|
-
composition. Provider declarations/stores stay opaque. Their non-secret classification,
|
|
184
|
-
concrete binding resolution and fixed-field constraints must join the same pipeline
|
|
185
|
-
before a public preview or complete capture; do not dump unclassified provider input.
|
|
186
|
-
No fetch, package materialization, trust write, membership claim or native dispatch
|
|
187
|
-
occurs here. Five focused planner tests cover anchors/hard seeds, precedence/missing
|
|
188
|
-
providers, qualified adoption conflicts, settings ownership and cross-field source
|
|
189
|
-
collisions.
|
|
@@ -1,150 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
type: Playbook
|
|
3
|
-
status: accepted-for-implementation
|
|
4
|
-
title: Portable Souls infrastructure implementation handoff
|
|
5
|
-
description: Portable binding contracts, fifteen decisions, storage-only baseline and dependency-ordered delivery gates; Desktop features later.
|
|
6
|
-
timestamp: 2026-09-15
|
|
7
|
-
---
|
|
8
|
-
|
|
9
|
-
# Portable Souls infrastructure implementation handoff
|
|
10
|
-
|
|
11
|
-
**Direct human authorization now permits infrastructure implementation/deployment.**
|
|
12
|
-
It supersedes the previous “not implementation authorized” status, not any of the
|
|
13
|
-
15 decisions or the landed retention contract. This documentation-only lane makes
|
|
14
|
-
no operational changes: no commits/pushes, branch switches, live installation or
|
|
15
|
-
activation, credential work, schedulers, models/GUI/session control. The held
|
|
16
|
-
capture patch `54b07ee` must never be integrated. **Desktop feature work is later.**
|
|
17
|
-
|
|
18
|
-
**Rollout amendment (2026-09-16):** [fresh installation is the current delivery path](2026-09-16-fresh-install-first-rollout.md).
|
|
19
|
-
General historical conversion/reconstruction and more migration CLI work are deferred,
|
|
20
|
-
not release-critical. The architecture and evidence/custody rules below still apply;
|
|
21
|
-
existing knowledge, work, histories and identities are not implicitly disposable.
|
|
22
|
-
|
|
23
|
-
## 1. Portable contract reading order and baseline
|
|
24
|
-
|
|
25
|
-
All required design text now lives at repository-relative paths; no private
|
|
26
|
-
instance review file or original conversation is an acceptance dependency.
|
|
27
|
-
|
|
28
|
-
| Order | Document | Authority / state |
|
|
29
|
-
|---|---|---|
|
|
30
|
-
| 1 | [Explainer](2026-09-14-portable-souls-explainer.md) | Reconciled illustrations; all LFX examples hypothetical, not deployment facts. |
|
|
31
|
-
| 2 | [Proposal](2026-09-14-portable-souls-and-git-workspaces.md) | Accepted design; full substantive amendment integrated coherently. |
|
|
32
|
-
| 3 | [Verbatim substantive amendment](2026-09-14-portable-souls-contract-amendments.md) | Public universal design appendix; transport metadata omitted, technical text preserved. |
|
|
33
|
-
| 4 | [Retention contract](2026-09-14-artifact-retention-contract.md) | Landed and binding: store semantics, captured resolution and consumer migration. |
|
|
34
|
-
| 5 | [Implementation checklist/ledger](2026-09-15-portable-souls-implementation.md) | Clause-by-clause mapping, dependency order, evidence and pending gates. |
|
|
35
|
-
| 6 | [Knowledge direction](2026-09-13-knowledge-and-memory-direction.md) and [current knowledge runtime](../knowledge.md) | Doctrine/context; the older brief's §4.9 automatic skill-delivery account is superseded by OKF v2 (no automatic soul-skill edits). Its older location/type mechanisms are not a second Portable Souls authority. |
|
|
36
|
-
| 7 | Package engine (`package-engine-contract.md`, removed in 0.26) and runtime API (`package-runtime-api.md`, removed in 0.26) | Existing acquisition/trust/runtime invariants; explicit Portable Souls migration changes store/resolution semantics, not silently these contracts. |
|
|
37
|
-
| 8 | Retention source `lib/capability-artifacts.mjs` and its tests (removed in 0.26 with the captured path) | Storage prerequisite; not complete instance/job dispatch. |
|
|
38
|
-
|
|
39
|
-
Implementation baseline: `428cd9af615652c4a93d754c1106674abd18545b` on the isolated
|
|
40
|
-
`feat/portable-souls-infrastructure` worktree. There is no instruction to merge,
|
|
41
|
-
rebase or switch branches. Primary checkout and older roster/knowledge drafts are
|
|
42
|
-
outside this delivery lane. This handoff describes baseline evidence, not a claim
|
|
43
|
-
that concurrent worktree edits are landed or deployed.
|
|
44
|
-
|
|
45
|
-
## 2. The decisions (binding)
|
|
46
|
-
|
|
47
|
-
1. **Three responsibilities.** The soul declares what it needs and where it comes from; the workspace definition declares admission, defaults, knowledge stores, team references and catalogs; the local deployment resolves, installs, binds credentials and keeps state. Source location, install location, work target and team membership are four separate facts; none is inferred from another.
|
|
48
|
-
2. **Source-complete soul declarations.** Every intrinsic capability carries a source (`git:<repo>@<selector>#<package-path>`); same-repository packages use `repo:<path from repository root>` at the soul's retained snapshot; `path:` is reserved for honestly nonportable local inputs. Never `./`.
|
|
49
|
-
3. **`requires` vs `defaults` in a soul.** Requirements are constraints every composition satisfies; defaults are fallbacks an operator or import entry may rebind. Conflicting requirements fail with both origins reported.
|
|
50
|
-
4. **Precedence: two levels, no repository tier, no agent-types.** Workspace defaults, then the soul's declarations; explicit operator choice (import-entry adoption defaults or spawn-time choice) is bounded: it may rebind defaults and bindings, never erase a hard requirement. Two authorities, one resolver. Repository briefing (`agents-md-injection`) and worktree setup stay as work-target behaviour, selected from the repository actually worked on.
|
|
51
|
-
5. **Reciprocal membership for every member kind.** A repository is a member when the workspace admits it and it names the workspace, at recorded revisions with qualified identities. Applies equally to project, experts, capabilities and knowledge repositories. Consuming a source (package, public soul, public store) is never membership. Forks with a copied backlink are not members.
|
|
52
|
-
6. **External-soul import by reference, never by copy.** Fields: canonical source repository, exported soul path, revision selector, adopter-local alias. Exact revision and needed source files retained; upstream identity, revision and alias are distinct. Workspace may advertise the import without admitting the source repository; standalone prepare accepts the same reference. Adoption defaults on the entry (team-alias map, knowledge destination, provider rebindings) are workspace-side, keyed to the qualified upstream identity, bounded as in 4.
|
|
53
|
-
7. **Souls live in project repositories first**, under `agents/<name>/`, as many per repository as wanted; an experts repository is for subjects spanning repositories. Souls are named for expertise, not job titles.
|
|
54
|
-
8. **Knowledge.** Declared at both levels: the workspace lists stores and the default provider (discoverability); the soul carries store-qualified `reads` and `owns` with optional destinations so it can read and harvest without the workspace repository. One explicit steward per node; explicit destination per promoted concept; no "one store per soul" invariant. Public PRs are fine: steward, proposing harvester and accepting maintainer are three roles. Open-source souls may consume open-source stores; reading a public store never publishes adopter notes. The kernel's knowledge contract is provider-neutral; owns/reads and harvester promotion describe the default provider (OKF).
|
|
55
|
-
9. **Teams: private first, wider by choice.** Each human's instances in a workspace auto-join a private team keyed by a provider-resolvable human identity plus qualified workspace identity, reused across that person's machines; children and scheduled instances inherit the owner; messaging-disabled workers create no team. Wider teams the soul lists are opt-in per instance; an explicit wider set replaces wider defaults but keeps the private floor. Catalog visibility, live-instance visibility, contact and conversation-history access are four separate grants; contact is not history. **No privacy guarantee is claimed until a named messaging owner qualifies provider behaviour.**
|
|
56
|
-
10. **One default provider per fundamental slot** is a v1 product simplification, labelled as such; simultaneous Jira + GitHub stays an explicit design test.
|
|
57
|
-
11. **Immutability.** Humans pick a channel or a pin; preparation resolves once per transaction into a captured resolution (soul snapshot, capability closure, helpers, commands/hooks, non-secret config and binding provenance); instances and queued work dispatch from that record, never from the ambient lock; several artifacts per capability coexist; one artifact per capability id per instance; conflicts fail with both paths. Pinned = OATS-managed composition only; not knowledge contents, credentials, memberships, work repo, external services, host tools.
|
|
58
|
-
12. **Trust.** Executable = commands, hooks or environment; a changed executable artifact needs fresh approval per revision; declarative skill changes are visible in the update notice but not gated. Freshness v1: refresh on explicit prepare/update, show available-unapproved beside last-approved (never "latest"), no daemon, no unattended approval.
|
|
59
|
-
13. **Digest.** At the migration boundary, a versioned digest over file bytes, symlink targets and each regular file's executable flag normalised from the owner-execute bit, same for Git and `path:` sources; old digests stay verifiable and are never reinterpreted.
|
|
60
|
-
14. **Migration.** One-time explicit store/lock migration; existing instances recorded as `reconstructed`, `partial` or `unknown` with evidence; partial/unknown never passes for complete in CLI or Desktop readiness; never claim recovery of an artifact the flat store overwrote; running sessions preserved.
|
|
61
|
-
15. **No new infrastructure.** No registry, discovery daemon or OATS user database; Git hosting, the messaging provider and existing machines are the substrate.
|
|
62
|
-
|
|
63
|
-
## 3. What is built at the baseline
|
|
64
|
-
|
|
65
|
-
`lib/capability-artifacts.mjs` retains/verifies exact capability trees side by side,
|
|
66
|
-
without activation, approval or selection. Absence (`artifact-not-found`) is
|
|
67
|
-
distinct from invalid artifact/store shape or integrity drift; damaged retained
|
|
68
|
-
state is never silently repaired. The contract also covers invalid references and
|
|
69
|
-
containment refusals. Source copying preserves file permissions, but the **baseline
|
|
70
|
-
digest does not cover mode bits**; the mode-aware version is migration work.
|
|
71
|
-
|
|
72
|
-
The installer still overwrites `installed/<id>`, `prepareLaunchHooks` reloads
|
|
73
|
-
manifests by ID, and scheduled operations resolve at run time. Storage A/B tests
|
|
74
|
-
are not proof that an old instance or queued job dispatches A while new work uses
|
|
75
|
-
B. The [ledger](2026-09-15-portable-souls-implementation.md) separates these gates.
|
|
76
|
-
|
|
77
|
-
## 4. Dependency-ordered work
|
|
78
|
-
|
|
79
|
-
1. Reconcile proposal/explainer/handoff with the complete amendment and record the
|
|
80
|
-
fifteen-clause checklist. This documentation lane owns only `docs/design/`.
|
|
81
|
-
2. Extract shared tree-copy/digest/publication mechanics into a narrow acyclic
|
|
82
|
-
leaf before core imports retention; no policy or lifecycle logic in the leaf.
|
|
83
|
-
3. Define reviewed versioned captured-resolution and lock schemas; retain soul
|
|
84
|
-
source separately by qualified identity/digest, with typed refusals. Source
|
|
85
|
-
identity, exact revision and adopter alias are distinct. Store records outside
|
|
86
|
-
homes, retain per-choice provenance/constraints and provider-neutral bindings.
|
|
87
|
-
4. Review/implement soul declarations: source-complete `git:`/`repo:`/`path:`,
|
|
88
|
-
requires/defaults, store-qualified knowledge payload, teams. Validate containment.
|
|
89
|
-
5. Review/implement workspace/member descriptors (`oats-workspace.yaml`, `oats.yaml`
|
|
90
|
-
are illustrative spellings): qualified reciprocal admission for every member
|
|
91
|
-
kind, defaults/stores/team references/catalogs/imports; bounded data-only indexes.
|
|
92
|
-
6. Integrate four-field by-reference imports and workspace-side adoption defaults;
|
|
93
|
-
identical standalone preparation, no copied soul or publisher backlink.
|
|
94
|
-
7. Preparation resolves once; publishes all artifacts; commits a complete resolution
|
|
95
|
-
before launch; reports installed/trusted/configured/enrolled separately.
|
|
96
|
-
8. Complete the retention contract's five-step consumer migration: acquisition,
|
|
97
|
-
launch/restart/retirement/recovery and independent queued work use captured
|
|
98
|
-
records; evidence-grade old records; remove ambient lookups; version the digest.
|
|
99
|
-
9. CLI diagnostics expose choices, provenance, explicit freshness and incomplete
|
|
100
|
-
migration honestly. Provider-neutral payloads do not compel OKF node semantics.
|
|
101
|
-
10. Private-team enrollment/privacy requires a **named messaging owner** and provider
|
|
102
|
-
qualification. Until then record choices only, not guarantees. The simultaneous
|
|
103
|
-
Jira + GitHub case stays a review test, not a new solver requirement.
|
|
104
|
-
11. Later Desktop features consume the same preparation/readiness APIs; do not bring
|
|
105
|
-
GUI work, live model/session controls or scheduling into this infrastructure lane.
|
|
106
|
-
|
|
107
|
-
The [implementation plan](2026-09-15-portable-souls-implementation.md) supplies
|
|
108
|
-
prerequisites, owners by responsibility, tests and an acceptance ledger. Dependency
|
|
109
|
-
order is not permission to make undecided schema/product choices silently.
|
|
110
|
-
|
|
111
|
-
## 5. Acceptance that must be demonstrated
|
|
112
|
-
|
|
113
|
-
The complete explainer/proposal checks apply; these three scenarios are mandatory:
|
|
114
|
-
|
|
115
|
-
1. Import the **same unchanged public soul** into an organization and a standalone
|
|
116
|
-
no-Git work target. Read public knowledge; bind an explicit adopter write
|
|
117
|
-
destination; prepare without publisher workspace access. Verify upstream identity,
|
|
118
|
-
exact retained revision and alias independently. Missing bindings stay incomplete.
|
|
119
|
-
2. Two humans on two hosts **each**, one workspace: reuse each private team across
|
|
120
|
-
hosts; a child or scheduled instance inherits its human; widen/narrow one
|
|
121
|
-
representative without changing global identity or knowledge bindings. Separately
|
|
122
|
-
qualify catalog/live visibility, contact and history. No current privacy guarantee.
|
|
123
|
-
3. Existing instance and independent queued job stay on A; a new instance prepares
|
|
124
|
-
approved B; remove original source and prove A still executes lifecycle/recovery
|
|
125
|
-
resources without ambient substitution. Storage-only execution is insufficient.
|
|
126
|
-
|
|
127
|
-
Useful output and accepted knowledge are distinct from scaffold/launch/PR activity.
|
|
128
|
-
Live evidence and provider qualification are separate from this documentation pass.
|
|
129
|
-
|
|
130
|
-
## 6. Safety and unresolved review gates
|
|
131
|
-
|
|
132
|
-
- Keep the capture patch held; preserve running sessions and existing deployment
|
|
133
|
-
inputs; never claim recovery of overwritten historical artifacts.
|
|
134
|
-
- Readiness must distinguish `reconstructed`, `partial`, `unknown`; partial/unknown
|
|
135
|
-
cannot pass as complete. Software pins do not freeze knowledge, credentials,
|
|
136
|
-
membership, work repositories, services or host tools.
|
|
137
|
-
- Parser/schema syntax for `repo:`, imports/adoption, reads/owns, requires/defaults,
|
|
138
|
-
workspace exports, wire versions and store/lock migration details remain review
|
|
139
|
-
work. Illustrative field names are not another parser or approved CLI flags.
|
|
140
|
-
- Canonical remote handling across renames/transfers requires explicit provenance.
|
|
141
|
-
- Private context identity requires provider-resolvable human plus qualified
|
|
142
|
-
workspace, or an explicit standalone context key. Messaging-disabled workers
|
|
143
|
-
create no team. Do not name a provider privacy guarantee without qualification.
|
|
144
|
-
- Zero or one default provider per slot is the v1 simplification; simultaneous
|
|
145
|
-
Jira + GitHub is not yet solved. Unattended approval is not part of v1.
|
|
146
|
-
- Recurring schedules must declare capture versus explicit future reprepare policy;
|
|
147
|
-
capture remains proposed. Already queued work never silently advances.
|
|
148
|
-
|
|
149
|
-
Human authorization closes the old implementation-approval hold only; contract
|
|
150
|
-
constraints, parser review and provider qualification remain in force.
|