@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
package/docs/packages.md
CHANGED
|
@@ -1,10 +1,11 @@
|
|
|
1
|
-
# Packages
|
|
1
|
+
# Packages: the versioned tier
|
|
2
2
|
|
|
3
3
|
A **package** is a place to fetch capabilities from *with a version attached*.
|
|
4
4
|
It is one of the two kinds of capability source in the
|
|
5
5
|
[workspace model](workspaces.md); the other — a member repo — is never
|
|
6
6
|
versioned. Nothing is installed: a package is resolved to an exact commit by
|
|
7
|
-
`oats sync`, recorded in `oats-lock.json`, and **copied whole into each
|
|
7
|
+
`oats sync`, recorded in `oats-lock.json`, and **copied whole into each
|
|
8
|
+
instance at spawn** (`<home>/.oats/modules/<cap>/`).
|
|
8
9
|
|
|
9
10
|
Ground truth: [`oats-package.schema.json`](oats-package.schema.json) (the
|
|
10
11
|
package manifest), the [lock v3 format](#lock-v3) below (`validateLock` in
|
|
@@ -28,7 +29,7 @@ A Git repository **contains** a package at `oats-package/`:
|
|
|
28
29
|
|
|
29
30
|
`oats-package.json` must declare `package` and `capabilities` (a list of
|
|
30
31
|
directories relative to the package root, each holding an `oats.json`). It may
|
|
31
|
-
also declare `souls
|
|
32
|
+
also declare `souls`: soul directories the package ships, see
|
|
32
33
|
[Package souls](#package-souls). A
|
|
33
34
|
directory entry need not equal the capability's name
|
|
34
35
|
(`capabilities/oats-okf` → capability `oats.okf`). A package declaring one
|
|
@@ -36,22 +37,21 @@ capability name twice, a listed directory without a manifest, or a manifest
|
|
|
36
37
|
without `capability` is `E_PACKAGE_MANIFEST`. Catalog entries may name another
|
|
37
38
|
`path` than `oats-package`; a `git:` ref always reads `oats-package/`.
|
|
38
39
|
|
|
39
|
-
## Declaring packages
|
|
40
|
+
## Declaring packages
|
|
40
41
|
|
|
41
42
|
The workspace file's `packages:` map is the **only** list of versions in the
|
|
42
43
|
whole organisation:
|
|
43
44
|
|
|
44
45
|
```yaml
|
|
45
46
|
packages:
|
|
46
|
-
oats.
|
|
47
|
-
oats.okf: v2.1.3
|
|
47
|
+
oats.okf: v4.0.4 # bare version → the official catalog
|
|
48
48
|
acme.tools: git:github.com/acme/tools@v0.4.0 # direct ref: git:<repo>@<tag or full OID>
|
|
49
49
|
```
|
|
50
50
|
|
|
51
|
-
- **Bare version** (`
|
|
51
|
+
- **Bare version** (`v4.0.4`, `4.0.4`, `1.0.0-rc.1`): the id is looked up in
|
|
52
52
|
the official catalog — `package-catalog.json` in the `oats` repo, or the file
|
|
53
53
|
named by `OATS_PACKAGE_CATALOG` — which supplies the repo url, the tag
|
|
54
|
-
convention (`
|
|
54
|
+
convention (`v4.0.4` or `oats-framework/v1.4.0`) and the payload path. An id
|
|
55
55
|
the catalog does not know is `E_PACKAGE_MISSING` ("use `git:<repo>@<ref>` for
|
|
56
56
|
a package outside the catalog"). The catalog is the reviewed official list
|
|
57
57
|
([official-catalog.md](official-catalog.md)) and the only way a
|
|
@@ -74,12 +74,11 @@ members:
|
|
|
74
74
|
- git:github.com/acme/agents
|
|
75
75
|
- git:github.com/acme/platform
|
|
76
76
|
packages:
|
|
77
|
-
oats.framework: v1.
|
|
78
|
-
oats.okf: v4.0.
|
|
79
|
-
oats.aweb: v1.
|
|
77
|
+
oats.framework: v1.4.0
|
|
78
|
+
oats.okf: v4.0.4
|
|
79
|
+
oats.aweb: v1.17.1
|
|
80
80
|
teams:
|
|
81
|
-
|
|
82
|
-
engineering: { description: Platform }
|
|
81
|
+
platform: { team: "platform:acme.aweb.ai", description: Platform engineering }
|
|
83
82
|
defaults:
|
|
84
83
|
capabilities: { oats.core: { from: package } }
|
|
85
84
|
knowledge: { oats.okf: { from: package } }
|
|
@@ -105,11 +104,11 @@ decision recorded in the lock.
|
|
|
105
104
|
```
|
|
106
105
|
$ oats sync
|
|
107
106
|
workspace acme (github.com/acme/agents @ 3f2a9c1e)
|
|
108
|
-
members agents ✓↔ (@ 3f2a9c1e) platform ✓↔ (@ 77c0a1b2)
|
|
109
|
-
packages acme.tools 0.4.0 ✓ (@ 47f4b816) oats.
|
|
107
|
+
members agents ✓↔ (@ 3f2a9c1e) platform ✓↔ (@ 77c0a1b2) billing ✗ (no-backlink)
|
|
108
|
+
packages acme.tools 0.4.0 ✓ (@ 47f4b816) oats.okf 4.0.4 ✓ (@ a4ccca02)
|
|
110
109
|
changed acme.tools — → 0.4.0 (@ 47f4b816)
|
|
111
|
-
souls
|
|
112
|
-
teams
|
|
110
|
+
souls 9 discovered (6 members, 1 external, 2 package, 0 disabled here) · 0 private capabilities
|
|
111
|
+
teams platform (shared) · this deployment's: oats teams
|
|
113
112
|
|
|
114
113
|
lock oats-lock.json
|
|
115
114
|
```
|
|
@@ -127,16 +126,15 @@ lock oats-lock.json
|
|
|
127
126
|
4. writes `oats-lock.json` and reports the diff. Entries dropped from
|
|
128
127
|
`packages:` are dropped from the lock.
|
|
129
128
|
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
exits `0` on success, and `--approve` is `E_BAD_ARGS`. `--json` emits the
|
|
129
|
+
Declaring a package in the workspace's `packages:` is the trust decision
|
|
130
|
+
([Trust](#trust)): `sync` asks nothing and exits `0` on success. `--json` emits the
|
|
133
131
|
`syncApi: 1` envelope documented in
|
|
134
132
|
[desktop-cli-api.md](desktop-cli-api.md#workspace-model-workspaceapi-2).
|
|
135
133
|
|
|
136
134
|
## `oats package add | remove`
|
|
137
135
|
|
|
138
136
|
```bash
|
|
139
|
-
oats package add oats.aweb v1.
|
|
137
|
+
oats package add oats.aweb v1.17.1 # a catalog version
|
|
140
138
|
oats package add acme.tools git:github.com/acme/tools@v0.4.0
|
|
141
139
|
oats package remove acme.tools
|
|
142
140
|
```
|
|
@@ -144,8 +142,8 @@ oats package remove acme.tools
|
|
|
144
142
|
Both edit `packages:` in `oats-workspace.yaml` **when the file is tracked by
|
|
145
143
|
the Git checkout the command runs in** (the workspace host repo); the edit is
|
|
146
144
|
validated against the full workspace schema before it is written, and the
|
|
147
|
-
receipt tells you to commit and `oats sync`. Anywhere else
|
|
148
|
-
a member clone
|
|
145
|
+
receipt tells you to commit and `oats sync`. Anywhere else (a deployment folder,
|
|
146
|
+
a member clone) the command prints the line to add (`--json`: `edited: false`,
|
|
149
147
|
`line`) because the workspace file is shared through Git, not through this
|
|
150
148
|
machine. Nothing network-bound happens in `package add`; `sync` resolves.
|
|
151
149
|
|
|
@@ -162,10 +160,10 @@ same workspace commit hold identical locks.
|
|
|
162
160
|
"source": "catalog:oats.okf",
|
|
163
161
|
"url": "https://github.com/awebai/oats-okf.git",
|
|
164
162
|
"path": "oats-package",
|
|
165
|
-
"version": "
|
|
166
|
-
"commit": "
|
|
167
|
-
"integrity": "sha256
|
|
168
|
-
"capabilities": ["oats.okf"]
|
|
163
|
+
"version": "4.0.4",
|
|
164
|
+
"commit": "a4ccca0230b75961daa00f59f29b8264be6fb5e8",
|
|
165
|
+
"integrity": "sha256-…",
|
|
166
|
+
"capabilities": ["oats.okf", "oats.okf-harvest", "oats.okf-maintenance"]
|
|
169
167
|
},
|
|
170
168
|
"acme.tools": {
|
|
171
169
|
"source": "git:github.com/acme/tools@v0.4.0",
|
|
@@ -183,31 +181,26 @@ same workspace commit hold identical locks.
|
|
|
183
181
|
|
|
184
182
|
| field | meaning |
|
|
185
183
|
|---|---|
|
|
186
|
-
| `source` | `catalog:<id>` or `git:<repo key>@<ref
|
|
184
|
+
| `source` | `catalog:<id>` or `git:<repo key>@<ref>`: how the workspace asked for it |
|
|
187
185
|
| `url` | the repo url the package was read from; travels in the lock so spawn needs no catalog |
|
|
188
186
|
| `path` | the package root inside the repo |
|
|
189
187
|
| `version` | the version string without a leading `v` (a `git:…@<OID>` pin records the OID) |
|
|
190
188
|
| `commit` | full 40-hex OID the version resolved to |
|
|
191
189
|
| `integrity` | `sha256-<hex>` content digest of the package tree at `path` |
|
|
192
|
-
| `capabilities` | the capability names the package provides (sorted)
|
|
193
|
-
| `souls` | the package souls
|
|
190
|
+
| `capabilities` | the capability names the package provides (sorted): what `from: package` looks up |
|
|
191
|
+
| `souls` | the package souls, sorted by name: `name`, `path` (inside the package) and `digest` (`sha256-<hex>` of the soul directory); absent when the package ships none |
|
|
194
192
|
|
|
195
193
|
A capability provided by **two** locked packages is ambiguous and fails
|
|
196
194
|
closed (`E_PACKAGE_MISSING { ambiguous: [ids] }`): keep one of them in
|
|
197
|
-
`packages:`. A lock that is not v3
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
with the field ignored, and the next write drops it. The reverse does not hold:
|
|
201
|
-
a kernel before 0.26.0 refuses a lock 0.26.0 wrote (`E_LOCK_SCHEMA "approved:
|
|
202
|
-
must be null or { executables, at }"`) — keep every kernel that reads one
|
|
203
|
-
deployment on 0.26.0 or later. Agents never hand-edit the lock.
|
|
195
|
+
`packages:`. A lock that is not v3, or cannot be read, is `E_LOCK_SCHEMA`; it
|
|
196
|
+
is never repaired automatically: delete it and `oats sync`. Agents never
|
|
197
|
+
hand-edit the lock.
|
|
204
198
|
|
|
205
199
|
## Trust
|
|
206
200
|
|
|
207
201
|
Member capabilities are trusted by membership; **a package is trusted by its
|
|
208
|
-
declaration in the workspace's `packages
|
|
209
|
-
|
|
210
|
-
per-version approval step. The lock is reproducibility, not approval: it pins
|
|
202
|
+
declaration in the workspace's `packages:`**. People declare a package only
|
|
203
|
+
when they trust it, so there is no second, per-version approval step. The lock is reproducibility, not approval: it pins
|
|
211
204
|
the exact commit and the content integrity, a moved tag or drifted content is
|
|
212
205
|
`E_PACKAGE_INTEGRITY`, and at spawn the lock's capability list must match what
|
|
213
206
|
the package declares at the locked commit (`E_PACKAGE_INTEGRITY { why:
|
|
@@ -226,7 +219,7 @@ running instance's package module as `moved` once the lock points elsewhere.
|
|
|
226
219
|
|
|
227
220
|
## Package souls
|
|
228
221
|
|
|
229
|
-
A package may ship **souls** as well as capabilities
|
|
222
|
+
A package may ship **souls** as well as capabilities. One pin in
|
|
230
223
|
`packages:` then versions both: nothing drifts, unlike an `external:` soul's
|
|
231
224
|
commit pin.
|
|
232
225
|
|
|
@@ -244,7 +237,7 @@ oats-package/
|
|
|
244
237
|
the lock entry. A soul without `soul.yaml` or `AGENTS.md`, or whose
|
|
245
238
|
directory is not a soul name, is `E_PACKAGE_MANIFEST`. On a later sync at
|
|
246
239
|
the same version the souls must still match (`E_PACKAGE_INTEGRITY { why:
|
|
247
|
-
"souls" }`)
|
|
240
|
+
"souls" }`).
|
|
248
241
|
- **Listed.** `oats souls` lists a package soul with `kind: "package"`,
|
|
249
242
|
`package`, `version`, `qualifiedName` and `origin: "package <id>
|
|
250
243
|
v<version>"`; `oats sync` / `oats workspace status` list each package's
|
|
@@ -253,9 +246,9 @@ oats-package/
|
|
|
253
246
|
A bare name works when it is unique across member, external and package
|
|
254
247
|
souls; otherwise `E_SOUL_AMBIGUOUS` names each qualified form
|
|
255
248
|
(`details.qualified`). A member soul's qualified form is `<member name>/<soul>`.
|
|
256
|
-
- **Resolved** like any soul: the workspace
|
|
257
|
-
`<slot>: none` work,
|
|
258
|
-
|
|
249
|
+
- **Resolved** like any soul: the workspace defaults apply, `off` and
|
|
250
|
+
`<slot>: none` work, its teams here are keyed `<package>/<soul>` in
|
|
251
|
+
`oats-local.yaml` `souls.teams`, and `from: here` means **this package** at the locked commit
|
|
259
252
|
(a capability it does not provide is `E_CAPABILITY_MISSING`).
|
|
260
253
|
- **Spawned** at the locked commit: the soul is fetched into the per-commit
|
|
261
254
|
soul cache and its digest must equal the lock's (`E_PACKAGE_INTEGRITY
|
|
@@ -285,7 +278,7 @@ oats-package/
|
|
|
285
278
|
|
|
286
279
|
## Trigger templates
|
|
287
280
|
|
|
288
|
-
A package may also ship **trigger templates
|
|
281
|
+
A package may also ship **trigger templates**: `triggers: [{ id,
|
|
289
282
|
file }]` in `oats-package.json`, each file `{ parameters, definition }`.
|
|
290
283
|
`oats trigger add --from <package>:<id> --set <name>=<value>` instantiates one
|
|
291
284
|
at the locked commit; see [schedules.md#triggers](schedules.md#triggers).
|
|
@@ -296,7 +289,7 @@ A soul may state floors on package versions — constraints, not sources:
|
|
|
296
289
|
|
|
297
290
|
```yaml
|
|
298
291
|
compatibility:
|
|
299
|
-
oats.okf: ">=
|
|
292
|
+
oats.okf: ">=4.0"
|
|
300
293
|
```
|
|
301
294
|
|
|
302
295
|
Checked at resolution against the locked version (`E_COMPATIBILITY`,
|
|
@@ -338,23 +331,12 @@ A soul that names one of the package's capabilities with
|
|
|
338
331
|
{
|
|
339
332
|
"policy": "docs/official-catalog.md",
|
|
340
333
|
"packages": {
|
|
341
|
-
"oats.okf": { "url": "https://github.com/awebai/oats-okf.git", "ref": "
|
|
342
|
-
"oats.framework": { "url": "https://github.com/awebai/oats.git", "ref": "oats-framework/v1.
|
|
334
|
+
"oats.okf": { "url": "https://github.com/awebai/oats-okf.git", "ref": "v4.0.4", "path": "oats-package" },
|
|
335
|
+
"oats.framework": { "url": "https://github.com/awebai/oats.git", "ref": "oats-framework/v1.4.0", "path": "oats-package" }
|
|
343
336
|
}
|
|
344
337
|
}
|
|
345
338
|
```
|
|
346
339
|
|
|
347
|
-
`ref` carries the tag convention: a workspace's `oats.framework: v1.
|
|
348
|
-
resolves to tag `oats-framework/v1.
|
|
349
|
-
advances a lock by itself
|
|
350
|
-
says so.
|
|
351
|
-
|
|
352
|
-
## Removed verbs
|
|
353
|
-
|
|
354
|
-
`oats install`, `restore`, `init`, `use`, `trust`, `list`, `catalog`, `remove`,
|
|
355
|
-
`migrate`, `config` are gone; each answers `E_UNKNOWN_COMMAND` naming its
|
|
356
|
-
replacement (`details.removed` / `details.replacement` in `--json`). There is
|
|
357
|
-
no installed-capability directory, no config template adoption, no host
|
|
358
|
-
requirement installer. A manifest's `requires` still describes what must exist
|
|
359
|
-
on the host (harness packages are verified at spawn; host commands are the
|
|
360
|
-
operator's to install).
|
|
340
|
+
`ref` carries the tag convention: a workspace's `oats.framework: v1.4.0`
|
|
341
|
+
resolves to tag `oats-framework/v1.4.0`. Resolving through the catalog never
|
|
342
|
+
advances a lock by itself: `oats sync` does, and says so.
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
# OATS 0.30 close-out: the shared plan
|
|
2
|
+
|
|
3
|
+
The single source of truth for the rest of 0.30, owned by BOTH leads (oats-expert-knowledge-reworks
|
|
4
|
+
and oats-expert-antares; Juan asked for joint work on 2026-09-28). Whoever changes the state updates
|
|
5
|
+
this file.
|
|
6
|
+
|
|
7
|
+
## Rules
|
|
8
|
+
- One driver per item; the other lead reviews every PR in it.
|
|
9
|
+
- Every developer brief is cc'd to the other lead. No objection within the hour and it stands.
|
|
10
|
+
- Idle agent sessions don't wake on mail: nudge them by tmux when they stall.
|
|
11
|
+
|
|
12
|
+
## Items
|
|
13
|
+
|
|
14
|
+
| # | Item | Driver | Developer | State |
|
|
15
|
+
|---|---|---|---|---|
|
|
16
|
+
| 1 | oats.aweb 1.17.1: a newcomer's first `--join` (service source, resume, `--name`); `--soul` on operator commands; the `aweb-team-leave-failed` event | Antares | Antares' aweb developer | TAGGED v1.17.1 → 9254e385 (tag object 899408a6); reviewed by the lead; proven in the final rehearsal |
|
|
17
|
+
| 2 | oats.okf 4.0.4: answer the kernel's documented readiness request, from the real host settings; recaptured with the real package | Antares | Antares' okf developer | TAGGED v4.0.4 → a4ccca02 (tag object e1c3827f); rehearsal case 10 PASS 5/5 with the kernel #298 fix |
|
|
18
|
+
| 3 | Kernel: `session start`/`restart` return, print and record the launch hooks' warnings | lead | cli-dev-okf-ops | MERGED #295 → 2049adda |
|
|
19
|
+
| 4 | Desktop #292: `launch-changed` decoding scoped to its code; `at: null`; real captures incl. `default-team-changed` | lead | ux-designer-desktop-redesign | MERGED #292 → 39a03379 |
|
|
20
|
+
| 5 | The 0.30.0 release PR (brief below) | lead | cli-dev-v2-native | briefed |
|
|
21
|
+
| 6 | Full rehearsal re-run on the final heads (all cases, incl. 5 and 10); close-out; retire case 9; the 0.30 runbook for Juan and Pepe | Antares | — | DONE on the final heads (main kernel stamped 0.30.0 + aweb v1.17.1 + okf v4.0.4): all cases PASS (1–8, 10, onboarding (a)–(e) + resume, the BYOT leave/retire owner commands actually run → revoked, 22 clean retires). Known: 8 (E_SPAWN_FAILED), the BYOT membership limit. Runbook for Juan and Pepe: next |
|
|
22
|
+
| 7a | automations.trust (#300, ACKed a0562b9f) + the Desktop grouping of `untrusted` with owner-mismatch (not here, with the remedy; a real-capture test): the Desktop PR merges BEFORE #300. Both land before the tag, or both go to 0.30.1 together | lead | cli-dev-okf-ops + ux-designer-desktop-redesign | routed |
|
|
23
|
+
| 7 | Tag v0.30.0 after green main CI on the exact release SHA | Antares | — | after 5 and 6 |
|
|
24
|
+
|
|
25
|
+
**Sequence:** 1–4 in parallel → 6 on the final heads → 5 with the final pins → 7.
|
|
26
|
+
|
|
27
|
+
## The release PR (item 5)
|
|
28
|
+
1. Version 0.30.0 in EVERY package that carries it (root, pi, desktop).
|
|
29
|
+
2. The `oats.core` / `oats.setup` compat floors AND the check-knowledge-theory floor at `>=0.30.0`,
|
|
30
|
+
in the same commit as the bump.
|
|
31
|
+
3. The framework v1.4.0 pins (the tag is cut at release).
|
|
32
|
+
4. The oats.aweb 1.17.1 and oats.okf 4.0.4 mirrors (trees == the tags) and pins. Until those tags
|
|
33
|
+
exist, use placeholders; the PR stays a draft.
|
|
34
|
+
5. Re-pin the REAL bundled binding-check test to 1.17.1's actual answer (no hand-written payload).
|
|
35
|
+
6. The Desktop's supported band: `<0.31`.
|
|
36
|
+
7. Release notes:
|
|
37
|
+
- the team model v2 migration and the flag day, with every setup step as
|
|
38
|
+
`oats aweb setup --soul <soul>`;
|
|
39
|
+
- the teams you control (BYOT) line: a lost team is left automatically on hosted teams; on a team
|
|
40
|
+
you control, the leave is reported with an `aweb-team-leave-failed` event, and the owner
|
|
41
|
+
removes the member;
|
|
42
|
+
- launch preferences (soul `launch:`, `souls.launch`, the frozen record, `--reselect-launch`);
|
|
43
|
+
- automations.trust, if it merged in time: a behaviour change for hosts that ran automations;
|
|
44
|
+
- fixed: second-team joins usable, okf readiness answered, launch warnings shown;
|
|
45
|
+
- the 0.29.4 catalog note (`OATS_PACKAGE_CATALOG`).
|
|
46
|
+
- **Known in 0.30.0** (so nobody is surprised): with no teams configured, spawn refuses through
|
|
47
|
+
the provider (`E_SPAWN_FAILED`), not `E_TEAM_UNCONFIGURED`; capability operator commands run
|
|
48
|
+
from a deployment need `--soul <soul>`; retire of homes whose session is gone (if it misses the
|
|
49
|
+
tag). Each is fixed in 0.30.1.
|
|
50
|
+
8. A check of the PACKED tarball: its `package-catalog.json` carries oats.engineering 1.1.0,
|
|
51
|
+
oats.aweb 1.17.1 and oats.okf 4.0.4.
|
|
52
|
+
|
|
53
|
+
## After the tag
|
|
54
|
+
- **Flag day:** the oats.engineering release with the souls' `launch:` (experts on Claude Code +
|
|
55
|
+
Opus 5.5; `code-reviewer` on Codex + Astra; compat `>=0.30.0`), and committing the shared team id.
|
|
56
|
+
- **0.30.1:**
|
|
57
|
+
- the kernel items that miss the tag: retire of homes whose session is gone, automations.trust;
|
|
58
|
+
- deployment-scope capability commands without `--soul`;
|
|
59
|
+
- the case-8 pre-check (`E_TEAM_UNCONFIGURED`).
|
|
60
|
+
- **Parked:** item L (`git rm agents/`, cli-dev-v2-native). It needs the GitHub `workflow` token
|
|
61
|
+
scope from the human on the lead's machine.
|
package/docs/release-lane.md
CHANGED
|
@@ -9,6 +9,9 @@ The policy it satisfies: no release capability may permanently depend on
|
|
|
9
9
|
GitHub or GitHub Actions. Registry publish works on its own; tags and hosted
|
|
10
10
|
release assets can follow later.
|
|
11
11
|
|
|
12
|
+
The last two sections cover the post-publish Desktop check and mirroring a
|
|
13
|
+
released `oats.okf`.
|
|
14
|
+
|
|
12
15
|
## When to use it
|
|
13
16
|
|
|
14
17
|
- **Runner outage.** GitHub Actions is down, queued, or a runner image has
|
|
@@ -130,3 +133,77 @@ contract; `test/release-lane.test.mjs` covers the lane's gates and phase
|
|
|
130
133
|
logic against fixtures, with `npm` stubbed. The two can run in either order:
|
|
131
134
|
a lane release followed by a workflow run, or a broken workflow run finished
|
|
132
135
|
by the lane, and neither republishes what the other already did.
|
|
136
|
+
|
|
137
|
+
## Desktop release verification
|
|
138
|
+
|
|
139
|
+
Installer CI gates what headless runners can prove reliably for every
|
|
140
|
+
published platform/architecture: electron-builder completes, the expected
|
|
141
|
+
DMG/ZIP/AppImage/DEB artifacts exist, both packaged macOS `.app` bundles
|
|
142
|
+
pass strict deep codesign verification of their complete ad-hoc signatures
|
|
143
|
+
(`codesign --verify --deep --strict`), node-pty's packaged `spawn-helper` is
|
|
144
|
+
executable, and node-pty loads and spawns under the packaged Electron ABI.
|
|
145
|
+
The macOS x64 leg cross-builds on macos-14 and installs Rosetta 2 so that its
|
|
146
|
+
x64 Electron + node-pty ABI probe really executes; a wrong-architecture
|
|
147
|
+
native module fails that leg.
|
|
148
|
+
|
|
149
|
+
CI does **not** gate the packaged GUI launch: ad-hoc-signed, non-notarized
|
|
150
|
+
Electron apps do not
|
|
151
|
+
have a reliable interactive windowserver in headless CI. Post-publish launch
|
|
152
|
+
acceptance is therefore owned by the operator/maintainer, using the actual
|
|
153
|
+
released installers (not a source checkout):
|
|
154
|
+
|
|
155
|
+
1. Verify the asset checksum/attestation, install it outside the source tree,
|
|
156
|
+
and on macOS use right-click → **Open** for the Gatekeeper step (ad-hoc
|
|
157
|
+
signatures carry no identified-developer identity).
|
|
158
|
+
2. Launch OATS Desktop and open a real deployment; verify roster, brain and
|
|
159
|
+
Markdown reads.
|
|
160
|
+
3. Attach an existing tmux terminal, confirm input/output, and close the tab
|
|
161
|
+
(the durable tmux window must survive).
|
|
162
|
+
4. Verify the released global CLI is detected and Spawn is enabled; hide or
|
|
163
|
+
mismatch the CLI and confirm reads/terminal still work while Spawn disables
|
|
164
|
+
with recovery guidance.
|
|
165
|
+
5. Repeat per published architecture where hardware is available. In
|
|
166
|
+
particular, launch-check macOS x64 on an Intel Mac if one is available;
|
|
167
|
+
CI's Rosetta ABI probe is the native-module proof, while this is the actual
|
|
168
|
+
shipped-installer/user-launch proof.
|
|
169
|
+
|
|
170
|
+
Record the installed version, platform/architecture and outcome in the
|
|
171
|
+
release verification notes. This post-publish check is acceptance — it does
|
|
172
|
+
not weaken the pre-publish build/inventory/ABI gates.
|
|
173
|
+
|
|
174
|
+
## Mirroring a released `oats.okf`
|
|
175
|
+
|
|
176
|
+
The standalone `awebai/oats-okf` repository is authoritative. This repository
|
|
177
|
+
carries a generated mirror of its capabilities under `capabilities/oats-okf*/`
|
|
178
|
+
and the inventory `scripts/okf-source-inventory.json`; neither is edited by
|
|
179
|
+
hand. After an okf release is tagged:
|
|
180
|
+
|
|
181
|
+
1. Check out the release in a clean clone of `awebai/oats-okf` at the tagged
|
|
182
|
+
commit, with the tag present locally and `origin` pointing at the official
|
|
183
|
+
repository.
|
|
184
|
+
2. From this repository:
|
|
185
|
+
|
|
186
|
+
```bash
|
|
187
|
+
node scripts/check-okf-mirror.mjs --finalize --source <clone> \
|
|
188
|
+
--final-tag v<version> --final-commit <full merged commit id>
|
|
189
|
+
node scripts/check-okf-mirror.mjs --verify
|
|
190
|
+
node scripts/check-okf-mirror.mjs --verify-source --source <clone>
|
|
191
|
+
```
|
|
192
|
+
|
|
193
|
+
3. Pin the same version in `package-catalog.json` and `oats-workspace.yaml`,
|
|
194
|
+
update the version literals the tests and smoke script carry, and review
|
|
195
|
+
the diff as one PR.
|
|
196
|
+
|
|
197
|
+
`--finalize` stamps `release.status: published` only when every check passes:
|
|
198
|
+
the tag is exactly `v<package version>` and resolves to the given commit; the
|
|
199
|
+
source tree is clean, with no masked index entries; the exported files, modes
|
|
200
|
+
and symlink targets equal the raw objects at that commit; `origin` is the
|
|
201
|
+
official repository, and a fresh `ls-remote` advertises the same tag object
|
|
202
|
+
and commit. A failed check leaves the mirror and inventory untouched.
|
|
203
|
+
|
|
204
|
+
`--verify` needs no network: it checks the checked-in mirror against the
|
|
205
|
+
inventory (file set, bytes, modes, symlinks, wrapper hashes). `--verify-source`
|
|
206
|
+
re-checks a published inventory against the source and its origin; it attests
|
|
207
|
+
what the remote advertised when queried, so released tags must never move.
|
|
208
|
+
`--generate --source <clone>` captures a working tree for development and
|
|
209
|
+
always records `release.status: pending`.
|
|
@@ -1,11 +1,13 @@
|
|
|
1
1
|
# oats.framework 1.1.3 · aweb 1.11.2 — helper composition for every edition
|
|
2
2
|
|
|
3
|
-
Packaging fix
|
|
3
|
+
Packaging fix: `oats.core` and `oats.aweb` shipped an `inject` without a
|
|
4
|
+
`helperInjection` policy, so preparation refused with `needs-configuration: new
|
|
5
|
+
helper injection requires an explicit capability policy`, no edition's OKF
|
|
6
|
+
harvest helper could compose, and no edition could publish a resolution.
|
|
4
7
|
|
|
5
|
-
- **`oats.core` 1.0.1** (in oats.framework 1.1.3): `helperInjection: {version:
|
|
6
|
-
|
|
7
|
-
- **
|
|
8
|
-
|
|
9
|
-
-
|
|
10
|
-
|
|
11
|
-
Decision: `agents/oats-expert/soul/knowledge/decisions/helper-injection-policy-on-every-injecting-capability.md`.
|
|
8
|
+
- **`oats.core` 1.0.1** (in oats.framework 1.1.3): `helperInjection: {version:
|
|
9
|
+
1, mode: inherit}`; a helper keeps the "you run on OATS" briefing.
|
|
10
|
+
- **aweb 1.11.2**: `helperInjection: {version: 1, mode: omit}`; a harvest
|
|
11
|
+
helper has no messaging identity. Manifest-only.
|
|
12
|
+
- Catalog: `oats.aweb` → `v1.11.2`, `oats.framework` →
|
|
13
|
+
`oats-framework/v1.1.3`; six editions and workspace imports repinned.
|