@awebai/oats 0.29.3 → 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 +203 -54
- 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 +16 -9
- package/capabilities/oats-okf/lib/binding-wire.mjs +47 -15
- package/capabilities/oats-okf/lib/config.mjs +2 -1
- package/capabilities/oats-okf/lib/consult.mjs +26 -4
- package/capabilities/oats-okf/lib/harvest-switch.mjs +16 -3
- package/capabilities/oats-okf/lib/inspection.mjs +26 -7
- package/capabilities/oats-okf/lib/io.mjs +9 -1
- package/capabilities/oats-okf/lib/sources.mjs +34 -3
- package/capabilities/oats-okf/lib/stores.mjs +8 -6
- package/capabilities/oats-okf/lib/worker.mjs +7 -17
- 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 +37 -16
- package/capabilities/oats-okf-maintenance/injects/maintainer.md +1 -1
- package/capabilities/oats-okf-maintenance/lib/provenance.mjs +6 -1
- package/capabilities/oats-okf-maintenance/oats.json +2 -2
- package/capabilities/oats-okf-maintenance/skills/knowledge-review/SKILL.md +17 -2
- 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 +7 -10
- 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 +116 -0
- 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.29.4.md +90 -0
- package/docs/release-notes/v0.30.0.md +205 -0
- package/docs/schedules.md +280 -349
- 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 +28 -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 +2 -5
- package/lib/resolve.mjs +29 -87
- package/lib/schedule.mjs +32 -18
- package/lib/teams-verbs.mjs +195 -0
- package/lib/teams.mjs +190 -0
- package/lib/triggers.mjs +53 -17
- 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
|
-
# Knowledge implementation plan
|
|
2
|
-
|
|
3
|
-
Status: implementation authorized by the human on 2026-09-13, including main
|
|
4
|
-
pushes and framework/OKF releases. Execute bounded batches with adversarial
|
|
5
|
-
review after approximately every two new commits, including fix commits.
|
|
6
|
-
The [location contract](2026-09-13-knowledge-location-contract.md) and its
|
|
7
|
-
[reference-theory boundary](../../agents/oats-expert/soul/knowledge/decisions/provider-neutral-knowledge-and-harvest.md)
|
|
8
|
-
remain the architectural context. This document resolves implementation choices
|
|
9
|
-
under that authorization; it does not impose OKF policy on other integrations.
|
|
10
|
-
|
|
11
|
-
## First delivery
|
|
12
|
-
|
|
13
|
-
- Canonical reference theory and injection/skill authoring guidance.
|
|
14
|
-
- An optional, installed-artifact-usable `knowledge-theory-expert`.
|
|
15
|
-
- Default OKF with working Git and ordinary directory custody. Omnigraph is an
|
|
16
|
-
authoring example, not a dependency or a required first implementation.
|
|
17
|
-
- Explicit external base/node ownership and initial reads; independent,
|
|
18
|
-
automatically requested per-source harvest; preserved evidence before
|
|
19
|
-
retirement; Git deliveries always PRs; no Git dependency for directory mode.
|
|
20
|
-
- Explicit migration with preservation and cutover, never silently discarding
|
|
21
|
-
an old soul bundle or treating a missing base as empty knowledge.
|
|
22
|
-
|
|
23
|
-
## Follow-on phase — after this implementation is complete
|
|
24
|
-
|
|
25
|
-
The human additionally requested a dedicated OATS knowledge Git repository and
|
|
26
|
-
an expertise-oriented soul reorganization. The [accepted follow-on plan](../../agents/oats-expert/soul/knowledge/decisions/expert-souls-and-knowledge-rebuild.md)
|
|
27
|
-
records the intended overall/kernel/Desktop/market/onboarding roles, the ban on
|
|
28
|
-
engineer-role souls, strict audit of existing knowledge and pending notes,
|
|
29
|
-
rejection of obsolete OAS material and code duplication, and safe cutover.
|
|
30
|
-
This is a curated rebuild, not a bulk migration. The human subsequently allowed
|
|
31
|
-
the separate repository shell to be provisioned under temporary personal
|
|
32
|
-
ownership pending organization transfer. Do not migrate the corpus, rename
|
|
33
|
-
live souls, or remove source knowledge before implementation verification.
|
|
34
|
-
|
|
35
|
-
## Implementation choices
|
|
36
|
-
|
|
37
|
-
1. **Capability-owned configuration.** Initially accept one absolute
|
|
38
|
-
`bindings-file` setting, avoiding ambiguous relative-setting provenance.
|
|
39
|
-
Paths inside it resolve from that file's directory. The document contains
|
|
40
|
-
version, durable state directory, named Git/directory bases and cadence.
|
|
41
|
-
2. **Capability-owned soul declarations.** Use `soul/okf.json` rather than
|
|
42
|
-
teaching the kernel an OKF-specific nested YAML schema. It declares stable
|
|
43
|
-
owner identity, `owns` and `reads`. Accepted bases carry matching identity
|
|
44
|
-
and node ownership metadata. No knowledge content resides in the soul.
|
|
45
|
-
3. **One link namespace per OKF base.** Nodes are owned, nonoverlapping
|
|
46
|
-
subdirectories. Reads are selective, index-first and non-mutating. Every
|
|
47
|
-
configured base is discoverable; `reads` is not an ACL.
|
|
48
|
-
4. **Durable per-source input.** Keep copied evidence, note hashes, bounded
|
|
49
|
-
record content, frozen destinations and processing receipts outside source
|
|
50
|
-
homes/worktrees and accepted bases. Separate capture, delivered judgment,
|
|
51
|
-
and accepted/reader-visible state. No automatic evidence garbage collection
|
|
52
|
-
in the first implementation.
|
|
53
|
-
5. **Directory custody is real.** Independent workers must not require a fake
|
|
54
|
-
Git repository. Add only the generic non-Git execution support actually
|
|
55
|
-
needed; preserve work-mode, trust and retirement safety.
|
|
56
|
-
6. **Delivery.** Git workers edit their own accepted-baseline checkout and
|
|
57
|
-
produce a verified PR receipt. Directory workers stage changes and publish
|
|
58
|
-
with baseline checks, coordination and crash-recoverable receipts. Never
|
|
59
|
-
downgrade Git failures into direct writes. Initial directory coordination
|
|
60
|
-
is single-host/cooperative, not a distributed-lock claim.
|
|
61
|
-
7. **Automation.** Reuse generic scheduler command jobs for per-source work;
|
|
62
|
-
retain pending work after its source is gone. Source registration is
|
|
63
|
-
automatic; host timer installation is an explicit setup action. Retire
|
|
64
|
-
captures/enqueues, not synchronously waits for model judgment or GitHub.
|
|
65
|
-
8. **Optional authoring distribution in this repository.** Ship a dedicated
|
|
66
|
-
`oats.knowledge-theory` package under `oats-package/`, using an enumerated
|
|
67
|
-
self-contained capability subtree. This keeps release scope to the two
|
|
68
|
-
authorized repositories and avoids pretending an edit to the bundled
|
|
69
|
-
`oats.authoring` changes its separately released catalog package. The new
|
|
70
|
-
package supplies the expert and authoring skill/reference closure, has no
|
|
71
|
-
knowledge-layer binding or mandatory injection, and does not depend on OKF.
|
|
72
|
-
**Release channel: Git, not npm.** The npm kernel ships public docs and the
|
|
73
|
-
CLI but excludes `oats-package/` entirely: npm omits symlinks and therefore
|
|
74
|
-
cannot carry the canonical source `CLAUDE.md -> AGENTS.md`. Do not ship a
|
|
75
|
-
partial copy, synthesize source aliases on acquisition, weaken the source
|
|
76
|
-
rule, or change generic installed-artifact integrity semantics. Acquire with
|
|
77
|
-
`oats install git:github.com/awebai/oats@v0.23.0`, then explicitly target
|
|
78
|
-
`oats.knowledge-theory` with `oats use ... --soul <author-soul>`. The default
|
|
79
|
-
Git package path selects the self-contained subtree and exact-locks its
|
|
80
|
-
commit. A catalog pin can follow only after that immutable tag exists.
|
|
81
|
-
9. **Minimal generic fixes.** Hooks must receive the running kernel's absolute
|
|
82
|
-
CLI path; scheduled dispatch must not inherit another instance's identity;
|
|
83
|
-
final record capture must distinguish completion from a skipped/held pass.
|
|
84
|
-
Do not add a knowledge registry or compulsory reference doctrine to core.
|
|
85
|
-
|
|
86
|
-
## Source and delivery discipline
|
|
87
|
-
|
|
88
|
-
The standalone OKF repository's enumerated runtime subtree is
|
|
89
|
-
`oats-package/capabilities/oats-okf/`. Its published `v1.6.1` is the starting
|
|
90
|
-
baseline; stale unenumerated duplicates are not implementation targets. The
|
|
91
|
-
framework's bundled copy is synchronized only at integration, with parity tests.
|
|
92
|
-
Existing release tags are immutable.
|
|
93
|
-
|
|
94
|
-
Implementation helpers edit explicitly assigned files and do not commit,
|
|
95
|
-
push, change branches or release. The maintainer integrates small commits and
|
|
96
|
-
runs exact-range adversarial review every two commits, closing blocking
|
|
97
|
-
findings before dependent work advances. Reviews cover product boundary,
|
|
98
|
-
correctness, security and release/merge readiness, not just test results.
|
|
99
|
-
|
|
100
|
-
## Verification and release gates
|
|
101
|
-
|
|
102
|
-
- Standalone tests exercise its actual exported payload, not stale root copies.
|
|
103
|
-
- Framework tests include generic non-Git execution, hook/dispatch identity,
|
|
104
|
-
capture-completeness and alternative-provider isolation.
|
|
105
|
-
- Real temporary Git repositories test embedded/dedicated Git knowledge; real
|
|
106
|
-
directories outside Git test directory custody, concurrent updates and crash
|
|
107
|
-
recovery. Failed/uncertain publication stays recoverable.
|
|
108
|
-
- Source deletion and name reuse cannot lose or misattribute pending evidence.
|
|
109
|
-
- Installed-artifact acquire/lock/trust/activate/scaffold/retire probes validate
|
|
110
|
-
the complete expert curriculum and OKF's real compatibility floor. The kernel
|
|
111
|
-
tarball must exclude the optional Git package while retaining public docs.
|
|
112
|
-
Its installed CLI acquires the exact complete theory Git fixture via direct
|
|
113
|
-
and catalog sources, verifies the tracked alias survives unchanged, removes
|
|
114
|
-
the fixture checkout, and tests local reference closure and alternative-theory
|
|
115
|
-
isolation. Generated instance aliases remain ordinary kernel behavior.
|
|
116
|
-
- A fresh selected-runtime instance must answer from delivered knowledge without
|
|
117
|
-
the source home/transcript. Scaffolding alone is not this learning gate.
|
|
118
|
-
- Run strict knowledge validation, all affected tests, full framework gates,
|
|
119
|
-
tarball smoke, and a final cross-repository adversarial review before release.
|
|
120
|
-
|
|
121
|
-
Version targets are provisional: framework 0.23.0 for generic support, OKF 2.0.0
|
|
122
|
-
for breaking external-knowledge custody, optional theory package 1.0.0, then a
|
|
123
|
-
framework patch for catalog/payload updates if required. The prerequisite
|
|
124
|
-
0.23.0 keeps bundled OKF and its catalog pin at 1.6.1; standalone OKF 2.0.0
|
|
125
|
-
follows rather than creating a prerequisite release cycle. Publish dependency
|
|
126
|
-
sources before advancing catalog pins; follow actual current release scripts,
|
|
127
|
-
not historical instructions contradicted by the implemented release lane.
|
|
@@ -1,340 +0,0 @@
|
|
|
1
|
-
# Knowledge contracts, integrations, and storage
|
|
2
|
-
|
|
3
|
-
**Status:** architecture proposal for discussion, 2026-09-13. No implementation
|
|
4
|
-
or configuration schema is approved by this document. Accepted direction is
|
|
5
|
-
recorded in [external knowledge custody](../../agents/oats-expert/soul/knowledge/decisions/external-knowledge-custody.md)
|
|
6
|
-
and [provider-neutral knowledge and harvest](../../agents/oats-expert/soul/knowledge/decisions/provider-neutral-knowledge-and-harvest.md).
|
|
7
|
-
This proposal refines the [knowledge and memory direction](2026-09-13-knowledge-and-memory-direction.md).
|
|
8
|
-
|
|
9
|
-
## 1. Accepted starting points
|
|
10
|
-
|
|
11
|
-
**Scope:** OATS publishes an opinionated reference knowledge theory; default
|
|
12
|
-
OKF follows it, but other knowledge capabilities may choose different models.
|
|
13
|
-
The location/harvest design below is for this default-theory workstream and
|
|
14
|
-
capabilities that choose to adopt it, not extra kernel requirements.
|
|
15
|
-
|
|
16
|
-
- All knowledge leaves the soul, including general expertise.
|
|
17
|
-
- Working instances read knowledge and capture memory; they do not promote
|
|
18
|
-
into the base. For now this is injection guidance, not an OS sandbox.
|
|
19
|
-
- Harvesting is independent of the source instance's execution/work context.
|
|
20
|
-
- Git-committed knowledge updates are PRs.
|
|
21
|
-
- Access rests on users' existing accounts; for GitHub repositories, their
|
|
22
|
-
GitHub permissions apply. Assume all workspace/team agents can access the
|
|
23
|
-
configured bases. No new public/private classification or per-agent ACLs.
|
|
24
|
-
- The first working version must cover Git-backed OKF AND a non-Git knowledge
|
|
25
|
-
store. Non-Git support is not a later optional extension.
|
|
26
|
-
- The reference knowledge/memory theory is independent of concrete storage
|
|
27
|
-
tools. An integration using a graph store and its CLI can adopt that theory,
|
|
28
|
-
or choose a different approach; it owns the resulting runtime behavior.
|
|
29
|
-
- OATS supplies canonical authoring docs for knowledge injections and skills,
|
|
30
|
-
and a `knowledge-theory-expert` agent to help create knowledge capabilities.
|
|
31
|
-
The expert and full authoring material are planned deliverables, not yet built.
|
|
32
|
-
- Every capability provides its own complete runtime instructions, skills,
|
|
33
|
-
memory conventions, harvester and related machinery. The kernel does not
|
|
34
|
-
automatically inject the reference doctrine into every knowledge capability.
|
|
35
|
-
|
|
36
|
-
The mechanisms below are proposed. In particular, which non-Git implementation
|
|
37
|
-
ships first is not yet settled: directory-backed OKF is the simplest candidate;
|
|
38
|
-
Omnigraph is a concrete alternative to investigate, not an already verified
|
|
39
|
-
integration or an agreed initial dependency.
|
|
40
|
-
|
|
41
|
-
## 2. Separate the model, the integration, and custody
|
|
42
|
-
|
|
43
|
-
### OATS reference knowledge/memory model — the recommended approach
|
|
44
|
-
|
|
45
|
-
- **Instance memory:** task-local state, observations and captured evidence.
|
|
46
|
-
- **Durable knowledge:** expertise that survives an instance, with explicit
|
|
47
|
-
ownership, provenance, decisions and supersession.
|
|
48
|
-
- **Capture:** preserve observations while doing the work; do not make the
|
|
49
|
-
working instance hold the promotion bar.
|
|
50
|
-
- **Harvest:** judge candidates against the common doctrine; promote, merge,
|
|
51
|
-
supersede or drop; preserve exclusions and one authoritative home per claim.
|
|
52
|
-
- **Consultation:** discover relevant prior knowledge before re-deriving it,
|
|
53
|
-
using progressive disclosure rather than bulk loading.
|
|
54
|
-
|
|
55
|
-
These meanings do not require Markdown, YAML frontmatter, `index.md`, local
|
|
56
|
-
files, a Git branch, or a particular command. The promotion bar, expertise
|
|
57
|
-
rather than code-description doctrine, and capture/judgment separation remain
|
|
58
|
-
consistent when an author chooses to implement this theory with another tool.
|
|
59
|
-
They are not mandatory policy for a capability that chooses a different model.
|
|
60
|
-
|
|
61
|
-
### Canonical authoring material and knowledge-theory-expert
|
|
62
|
-
|
|
63
|
-
OATS maintains the theory in its repository and supplies canonical documentation
|
|
64
|
-
for turning it into working-agent injections, skills and harvester instructions.
|
|
65
|
-
These references explain the concepts, their rationale, expected behaviors and
|
|
66
|
-
examples. An author can point a coding agent at them without needing a special
|
|
67
|
-
runtime dependency.
|
|
68
|
-
|
|
69
|
-
OATS should also provide `knowledge-theory-expert`. Its job is to:
|
|
70
|
-
|
|
71
|
-
- explain the reference model and the reasons for its distinctions;
|
|
72
|
-
- help map it to a chosen tool's actual read/write and storage behavior;
|
|
73
|
-
- help author a complete capability, including injections, skills and harvesting;
|
|
74
|
-
- identify gaps or deliberate departures and suggest relevant behavioral tests.
|
|
75
|
-
|
|
76
|
-
It assists authors; it does not run every harvest, police every capability,
|
|
77
|
-
serve as a required approval gate, or replace the canonical docs. Its package,
|
|
78
|
-
curriculum and instructions are still to design. No agent has been scaffolded
|
|
79
|
-
or spawned as part of this scoping discussion.
|
|
80
|
-
|
|
81
|
-
### Knowledge capability — a complete runtime implementation
|
|
82
|
-
|
|
83
|
-
Each capability supplies the complete behavior selected by the deployment:
|
|
84
|
-
its skills, injections, instance memory and capture protocol, native reader
|
|
85
|
-
and writer tools, harvester and judgment instructions where applicable,
|
|
86
|
-
lifecycle contributions, validation and delivery. It is not only an adapter
|
|
87
|
-
under a mandatory OATS-supplied judge.
|
|
88
|
-
|
|
89
|
-
For example:
|
|
90
|
-
|
|
91
|
-
- Default OKF authors use the reference theory and ship concrete OKF injection,
|
|
92
|
-
craft/harvest skills, harvester, hooks and Git/non-Git delivery behavior.
|
|
93
|
-
- An Omnigraph capability author may use the same docs/expert to create the
|
|
94
|
-
equivalent package around the native CLI and data model.
|
|
95
|
-
- An author choosing a different memory or learning model provides and
|
|
96
|
-
documents that capability's own runtime instructions instead.
|
|
97
|
-
|
|
98
|
-
Canonical theory stays in one maintained place, but adopting it does not
|
|
99
|
-
require a mandatory shared runtime injection or harvester skill. Explicit
|
|
100
|
-
resource reuse through supported packaging is fine; mutable documentation is
|
|
101
|
-
not fetched into agents as a hidden policy update. Capability releases own
|
|
102
|
-
changes to the runtime material they supply.
|
|
103
|
-
|
|
104
|
-
The kernel keeps generic capability/layer/configuration/lifecycle/operation
|
|
105
|
-
and trust contracts. It neither chooses the theory nor implements a universal
|
|
106
|
-
harvester. Existing framework/work-mode rules still apply to every capability.
|
|
107
|
-
|
|
108
|
-
### Custody — how a write becomes accepted knowledge
|
|
109
|
-
|
|
110
|
-
Format and delivery are separate choices. OKF does not imply Git:
|
|
111
|
-
|
|
112
|
-
| Implementation | Read path | Write/delivery path |
|
|
113
|
-
|---|---|---|
|
|
114
|
-
| Git-backed OKF | Accepted revision of an OKF bundle | Independent checkout, validation, PR; accepted after merge |
|
|
115
|
-
| Directory-backed OKF | Configured OKF directory | Coordinated, validated update with an observable durable result; no Git or PR |
|
|
116
|
-
| CLI-backed graph store | Provider-native discovery/query through its CLI | Provider-native writes and confirmation; no invented Git semantics |
|
|
117
|
-
|
|
118
|
-
A dedicated knowledge repository can be Git-backed; moving out of the code
|
|
119
|
-
repo does not make it non-Git. A non-Git store must work without `.git`, GitHub,
|
|
120
|
-
a branch, a remote, or a PR receipt.
|
|
121
|
-
|
|
122
|
-
## 3. Base, node, binding
|
|
123
|
-
|
|
124
|
-
Sections 3–7 describe the proposed default location/harvest design and offer a
|
|
125
|
-
pattern for authors adopting the reference theory. These nouns and shapes are
|
|
126
|
-
not mandatory schema for every knowledge capability.
|
|
127
|
-
|
|
128
|
-
### Base
|
|
129
|
-
|
|
130
|
-
A named body of durable knowledge with a canonical provider-resolved location.
|
|
131
|
-
It is not intrinsically an OKF bundle or a repository.
|
|
132
|
-
|
|
133
|
-
An OKF base maps to a bundle root. A different provider can map a base to its
|
|
134
|
-
native database/space/collection identifier. Only that provider interprets
|
|
135
|
-
its locator, storage structure, validation and consistency behavior.
|
|
136
|
-
|
|
137
|
-
General expertise, project decisions and team knowledge all live in bases;
|
|
138
|
-
none live inside souls. A project or workspace may consult several bases.
|
|
139
|
-
The invariant is **one authoritative home per concept**, not one required
|
|
140
|
-
physical storage root for everything relevant to a project.
|
|
141
|
-
|
|
142
|
-
### Node
|
|
143
|
-
|
|
144
|
-
A logically soul-owned portion of a base, with exactly one owning soul. A soul
|
|
145
|
-
can own nodes in several bases. Ownership is responsibility and harvest
|
|
146
|
-
routing, not an access-control grant. A provider must make the boundary
|
|
147
|
-
addressable; an OKF directory is one representation, not the universal one.
|
|
148
|
-
|
|
149
|
-
`project/oats-desktop-expert` and `team/oats-desktop-expert` are distinct node
|
|
150
|
-
references. Matching leaf names never merge them. Owner identity must also
|
|
151
|
-
distinguish same-named souls in different repositories; its exact syntax is open.
|
|
152
|
-
|
|
153
|
-
### Binding
|
|
154
|
-
|
|
155
|
-
Workspace/project configuration maps logical references to a selected
|
|
156
|
-
integration's concrete locations. A soul declares what it owns and consults,
|
|
157
|
-
without embedding knowledge, physical paths, remote URLs or credentials.
|
|
158
|
-
|
|
159
|
-
Illustrative soul declarations, not an approved schema:
|
|
160
|
-
|
|
161
|
-
```yaml
|
|
162
|
-
# oats-desktop-expert/soul.yaml
|
|
163
|
-
knowledge:
|
|
164
|
-
owns: [project/oats-desktop-expert]
|
|
165
|
-
reads: [project/oats-expert]
|
|
166
|
-
```
|
|
167
|
-
|
|
168
|
-
Here `oats-desktop-expert` consults project direction maintained by `oats-expert`
|
|
169
|
-
and accumulates its own durable Desktop expertise. Binding `project` to an
|
|
170
|
-
embedded OKF bundle, a separate OKF repository, or a non-Git store does not
|
|
171
|
-
change the meaning of those declarations.
|
|
172
|
-
|
|
173
|
-
Aliases are contextual, not global identities. Resolve them before a read or
|
|
174
|
-
harvest; persisted jobs retain the resolved destination so later configuration
|
|
175
|
-
changes cannot redirect pending work. Changing storage providers is an explicit
|
|
176
|
-
migration, not an alias edit that silently converts or copies knowledge.
|
|
177
|
-
|
|
178
|
-
## 4. Reference-model implementation contract versus concrete location
|
|
179
|
-
|
|
180
|
-
Do not make a tool pretend to have files or Git metadata. The following is a
|
|
181
|
-
checklist for our default implementation and other capabilities adopting this
|
|
182
|
-
model. It is not a new universal knowledge-provider API, mandatory theoretical
|
|
183
|
-
conformance test, or kernel requirement.
|
|
184
|
-
|
|
185
|
-
| Concern | Provider-neutral meaning |
|
|
186
|
-
|---|---|
|
|
187
|
-
| Resolve | Map a logical base/node to an unambiguous provider-owned destination and owner |
|
|
188
|
-
| Discover/consult | Give instances a useful entry point and tools to retrieve relevant accepted knowledge |
|
|
189
|
-
| Prepare harvest | Preserve bounded source evidence and resolved destinations independently of the source home |
|
|
190
|
-
| Apply judgment | Let the harvester maintain knowledge using the provider's native authoring tools |
|
|
191
|
-
| Validate | Check the proposed update against the provider's representation and shared semantic requirements |
|
|
192
|
-
| Deliver | Report a durable proposal, an applied update, a no-change result, or a failure; distinguish these |
|
|
193
|
-
| Refresh/inspect | Explain what readers can see, freshness limitations and pending work without guessing from activity |
|
|
194
|
-
|
|
195
|
-
The resolved descriptor needs a logical reference, provider identity, opaque
|
|
196
|
-
provider locator, node/owner identity, reader/writer instructions or operation
|
|
197
|
-
references, delivery semantics, and binding provenance. A version or receipt
|
|
198
|
-
is provider-native; a Git commit ID is not a required field for every store.
|
|
199
|
-
|
|
200
|
-
### OKF location examples
|
|
201
|
-
|
|
202
|
-
| Placement/custody | Canonical location | Bundle root | Read baseline |
|
|
203
|
-
|---|---|---|---|
|
|
204
|
-
| Embedded Git | `https://github.com/example/project.git` | `knowledge/` | Configured accepted branch |
|
|
205
|
-
| Dedicated Git | `https://github.com/example/project-knowledge.git` | `.` | Configured accepted branch |
|
|
206
|
-
| Non-Git directory | Explicit workspace-relative directory, e.g. `./team-knowledge` | That directory | Provider-confirmed current contents |
|
|
207
|
-
|
|
208
|
-
Git locators include repository, contained root, accepted ref and PR target/head
|
|
209
|
-
route. Directory locators include a resolved path and direct-update custody.
|
|
210
|
-
A future CLI-backed locator uses the actual identifiers supported by that
|
|
211
|
-
provider; do not invent Omnigraph fields or command flags before investigation.
|
|
212
|
-
|
|
213
|
-
Configuration belongs to the selected knowledge capability's settings and
|
|
214
|
-
existing targeting, not a new mandatory kernel registry. Multiple bases do not
|
|
215
|
-
require multiple active knowledge layers: `oats.okf` can supply both Git and
|
|
216
|
-
directory custody. An Omnigraph integration could replace it in another
|
|
217
|
-
deployment. Simultaneous different integrations in one instance are not assumed
|
|
218
|
-
here; that would need a separate composition decision.
|
|
219
|
-
|
|
220
|
-
### Resolution and access rules
|
|
221
|
-
|
|
222
|
-
1. Bind locations explicitly; do not choose from cwd, source work mode, source
|
|
223
|
-
feature branch or whichever checkout happens to be writable.
|
|
224
|
-
2. Relative paths resolve from their declaring scope, with containment checks.
|
|
225
|
-
3. Missing required bindings or failed access are visible errors; never create
|
|
226
|
-
an empty substitute or silently choose another base.
|
|
227
|
-
4. Reads do not scaffold nodes. Creation and ownership changes are explicit writes.
|
|
228
|
-
5. Use the user's existing account/access for the selected system. GitHub governs
|
|
229
|
-
GitHub access; a local directory uses host filesystem access; another tool
|
|
230
|
-
uses its native authentication. No new OATS permission system is implied.
|
|
231
|
-
6. All configured workspace/team bases are available to its agents. `reads`
|
|
232
|
-
selects initial context, not an ACL; `owns` selects responsibility/routing.
|
|
233
|
-
Access to other repositories does not auto-bind them.
|
|
234
|
-
7. A failed Git delivery cannot fall back to direct writes. Tracked knowledge
|
|
235
|
-
cannot be relabelled local merely to bypass its PR contract.
|
|
236
|
-
8. Defer public/private classification and disclosure routing. Keep the existing
|
|
237
|
-
secret/credential and third-party-verbatim promotion exclusions.
|
|
238
|
-
|
|
239
|
-
## 5. Independent harvest, provider-specific writing
|
|
240
|
-
|
|
241
|
-
A per-source harvest takes preserved evidence, source/soul identity, bounded
|
|
242
|
-
record provenance, claimed note versions, resolved destinations and a stable
|
|
243
|
-
input identifier. It does not rely on the source staying alive or keeping the
|
|
244
|
-
same worktree/branch. Independent execution does not mean context-free evidence.
|
|
245
|
-
|
|
246
|
-
The reference-model harvester's reasoning is:
|
|
247
|
-
|
|
248
|
-
1. Consult existing relevant knowledge through the integration's read tools.
|
|
249
|
-
2. Judge the source candidates under the common doctrine.
|
|
250
|
-
3. Select each candidate's owned destination; maintain or supersede existing
|
|
251
|
-
knowledge rather than creating duplicate descriptions.
|
|
252
|
-
4. Apply changes with the integration's authoring tools, validate, and report
|
|
253
|
-
the actual delivery outcome. Advance source processing state only under the
|
|
254
|
-
agreed durable-result protocol.
|
|
255
|
-
|
|
256
|
-
Concrete writing differs:
|
|
257
|
-
|
|
258
|
-
- **Git OKF:** worker-owned destination checkout, starting from the accepted
|
|
259
|
-
branch; knowledge-only PR whether the bundle is embedded or dedicated.
|
|
260
|
-
- **Non-Git OKF candidate:** worker-owned execution context, coordinated edits
|
|
261
|
-
to the configured directory, validation and recoverable publication. A plain
|
|
262
|
-
successful edit command alone is not the whole crash/retry contract.
|
|
263
|
-
- **Omnigraph scenario:** the harvester uses Omnigraph's native CLI to consult
|
|
264
|
-
and write knowledge; working instances use it to retrieve knowledge. How
|
|
265
|
-
logical nodes, supersession, receipts and consistency map to that CLI must
|
|
266
|
-
be verified. No command surface or transaction guarantee is assumed here.
|
|
267
|
-
|
|
268
|
-
The integration manages authenticating through the user's available access;
|
|
269
|
-
credentials do not travel inside harvest evidence. Source retirement preserves
|
|
270
|
-
inputs before removal or reports incomplete retirement. Results are per
|
|
271
|
-
explicit destination; cross-store changes are not assumed atomic.
|
|
272
|
-
|
|
273
|
-
Provider-neutral orchestration does not mean every backend supports identical
|
|
274
|
-
transactions or review states. Do not report a proposal as applied, a queued
|
|
275
|
-
write as queryable, or a process launch as successful harvesting.
|
|
276
|
-
|
|
277
|
-
## 6. Visibility, concurrency and validation
|
|
278
|
-
|
|
279
|
-
For Git OKF, distinguish PR opened, merged, and visible in a refreshed reader.
|
|
280
|
-
For non-Git, distinguish proposed/staged changes if supported, durable application,
|
|
281
|
-
and reader visibility according to the actual provider. A direct local provider
|
|
282
|
-
can have no pending-review phase; it must not fabricate one.
|
|
283
|
-
|
|
284
|
-
A provider documents its read consistency and available version/freshness
|
|
285
|
-
signals. If it cannot offer snapshots, acknowledge that instead of inventing a
|
|
286
|
-
Git-like revision. Failed or rejected delivery must remain recoverable after
|
|
287
|
-
the source home is gone. Exact watermark and retention mechanics are open.
|
|
288
|
-
|
|
289
|
-
Concurrency has separate units: source input claims, node updates and storage
|
|
290
|
-
publication. Git requires accepted-head validation across PRs; non-Git files
|
|
291
|
-
need coordinated/recoverable publication; a service needs its actual concurrency
|
|
292
|
-
contract. Test concurrent harvests, retries, and failure after a partial write.
|
|
293
|
-
|
|
294
|
-
Validate OKF with the OKF validator, including each base's native link namespace.
|
|
295
|
-
A graph integration validates its own representation and logical ownership;
|
|
296
|
-
it does not run a Markdown validator on a service. Default implementations
|
|
297
|
-
must pass behavioral tests for the reference doctrine, provenance, supersession,
|
|
298
|
-
exclusions, one canonical home and consultation by a fresh instance. Authors
|
|
299
|
-
adopting the theory can reuse these tests; a capability choosing a different
|
|
300
|
-
theory is not rejected merely for differing from that model.
|
|
301
|
-
|
|
302
|
-
## 7. First working version and remaining decisions
|
|
303
|
-
|
|
304
|
-
There are two related deliverables:
|
|
305
|
-
|
|
306
|
-
1. **Reference/authoring:** canonical theory and injection/skill guidance plus
|
|
307
|
-
the `knowledge-theory-expert` agent. Useful without a running OKF deployment.
|
|
308
|
-
2. **Default implementation:** complete capability-owned runtime behavior,
|
|
309
|
-
applying that theory to working Git and non-Git storage.
|
|
310
|
-
|
|
311
|
-
**Required:** working Git-backed OKF AND a working non-Git knowledge store.
|
|
312
|
-
A Git-only release with a non-Git interface stub does not satisfy this scope.
|
|
313
|
-
|
|
314
|
-
Recommendation for the smallest initial implementation: `oats.okf` with Git and
|
|
315
|
-
plain-directory custody. This exercises both paths without introducing an
|
|
316
|
-
unresearched external dependency. The choice is not yet accepted: confirm
|
|
317
|
-
whether the first non-Git implementation should instead be Omnigraph itself.
|
|
318
|
-
An Omnigraph implementation adopting the reference theory should be possible
|
|
319
|
-
without rewriting the theory; this does not oblige every Omnigraph capability
|
|
320
|
-
to adopt it.
|
|
321
|
-
|
|
322
|
-
Acceptance scenarios use `oats-expert` and `oats-desktop-expert`:
|
|
323
|
-
|
|
324
|
-
1. Git OKF works both inside the code repo and in a dedicated knowledge repo;
|
|
325
|
-
harvest runs independently and opens the appropriate knowledge-only PR.
|
|
326
|
-
2. The non-Git implementation persists real harvested knowledge with no Git
|
|
327
|
-
repository or GitHub dependency, and reports a verifiable result.
|
|
328
|
-
3. In each implementation, a fresh instance answers from accepted knowledge
|
|
329
|
-
learned by a retired instance, without its home or transcript.
|
|
330
|
-
4. Both preserve the same promotion doctrine, provenance and exclusions, and
|
|
331
|
-
handle concurrent updates, failed delivery and safe retirement inputs.
|
|
332
|
-
5. A workspace using the OKF integration can consult multiple configured bases
|
|
333
|
-
without ambiguous ownership or destination selection.
|
|
334
|
-
|
|
335
|
-
Before implementation, settle the authoring-material and expert delivery shape,
|
|
336
|
-
non-Git backend, binding/schema and ownership identity, delivery/refresh semantics,
|
|
337
|
-
and source input/retention protocol. The kernel stays provider-neutral; each
|
|
338
|
-
capability supplies its complete runtime knowledge behavior. No mandatory shared
|
|
339
|
-
theory-runtime layer, public/private permission model or multi-provider router
|
|
340
|
-
is a prerequisite.
|
|
@@ -1,190 +0,0 @@
|
|
|
1
|
-
# Retained capability artifacts and captured resolutions
|
|
2
|
-
|
|
3
|
-
14 September 2026. Portable Souls implementation foundation, task `aweb-abiu`.
|
|
4
|
-
|
|
5
|
-
Package updates currently replace `.agents/capabilities/installed/<id>`.
|
|
6
|
-
Instance metadata records commands and resource paths into that mutable store.
|
|
7
|
-
Keeping a command string does not keep the implementation that string invokes.
|
|
8
|
-
|
|
9
|
-
This first patch adds **retention primitives only**, in
|
|
10
|
-
`lib/capability-artifacts.mjs`. It does not change the installer, lock schema,
|
|
11
|
-
instance launch, scheduler or lifecycle dispatch. Existing instances are not
|
|
12
|
-
protected from package updates by this patch. The following integration contract
|
|
13
|
-
must be reviewed before those consumers change.
|
|
14
|
-
|
|
15
|
-
## Responsibilities
|
|
16
|
-
|
|
17
|
-
- Acquisition resolves sources and materializes a package's declared resources.
|
|
18
|
-
- Retention publishes a verified capability tree under its exact integrity.
|
|
19
|
-
- Resolution selects one artifact per capability ID and records effective inputs.
|
|
20
|
-
- Approval authorizes the selected executable revision, independently of retention.
|
|
21
|
-
- Dispatch uses the captured resolution, including for retirement and queued work.
|
|
22
|
-
|
|
23
|
-
No soul, workspace, team or knowledge schema belongs in the storage primitive.
|
|
24
|
-
There is no new resolver or background service. The artifact includes materialized
|
|
25
|
-
runtime dependencies and its existing `.oats-installation.json` provenance.
|
|
26
|
-
|
|
27
|
-
## Storage API implemented in this patch
|
|
28
|
-
|
|
29
|
-
```text
|
|
30
|
-
<deployment>/.agents/capabilities/artifacts/
|
|
31
|
-
.gitignore # managed file containing *
|
|
32
|
-
<capability-id>/
|
|
33
|
-
sha256-<full digest>/ # one retained capability tree
|
|
34
|
-
```
|
|
35
|
-
|
|
36
|
-
`retainCapabilityArtifact(scope, sourceDir, capabilityId, lock)` accepts a
|
|
37
|
-
materialized capability and its captured package/capability lock maps. It checks
|
|
38
|
-
the locked integrity and generated provenance before publication and verifies
|
|
39
|
-
the copied tree again before renaming it into place. It returns the capability
|
|
40
|
-
ID, integrity, canonical local directory and `retained` or `kept` status.
|
|
41
|
-
|
|
42
|
-
`verifyRetainedCapability(scope, capabilityId, lock)` verifies the exact stored
|
|
43
|
-
revision against the captured provenance. It does not consult the scope's current
|
|
44
|
-
lock, source checkout, catalog, network or approval state.
|
|
45
|
-
|
|
46
|
-
An absent scope, store or revision reports `artifact-not-found`. A present but
|
|
47
|
-
invalid tree/store or a digest/provenance mismatch is a different refusal. Callers
|
|
48
|
-
can therefore distinguish missing inputs from damaged retained state without
|
|
49
|
-
parsing filesystem error messages. A damaged entry is never silently repaired.
|
|
50
|
-
|
|
51
|
-
`retainedCapabilityDir(scope, capabilityId, integrity)` computes the lexical path
|
|
52
|
-
after checking the ID and full digest. Computing a path is not verification.
|
|
53
|
-
|
|
54
|
-
Both publication and verification reject broken or escaping symlinks. Absolute
|
|
55
|
-
symlinks back into the original source are rejected too: that source may later
|
|
56
|
-
disappear. Internal relative symlinks retain their spelling. The source directory
|
|
57
|
-
is copied with the package engine's catchable copy routine, not linked or moved.
|
|
58
|
-
File permissions are preserved; this uses the existing artifact digest format,
|
|
59
|
-
which hashes file bytes and symlink targets, not Unix mode bits.
|
|
60
|
-
At the consumer-migration boundary, introduce a versioned digest covering file
|
|
61
|
-
bytes, symlink targets and each regular file's executable flag, normalized from
|
|
62
|
-
the owner-execute bit (`(mode & 0o100) !== 0`). Apply the same digest rule to Git
|
|
63
|
-
and local-path sources. Group/other execute bits depend on the acquiring user's
|
|
64
|
-
umask and are not part of artifact identity. This models execution by the
|
|
65
|
-
deployment operator who owns the materialized files; it is not a guarantee for
|
|
66
|
-
arbitrary other operating-system principals.
|
|
67
|
-
Keep the old format explicitly verifiable for pre-migration evidence; never
|
|
68
|
-
reinterpret an old digest as covering modes. Other mode bits remain outside
|
|
69
|
-
identity. Do not rewrite modes during retention or infer executable entrypoints
|
|
70
|
-
by parsing free-form command/hook strings. This format change is not implemented
|
|
71
|
-
by the current primitive.
|
|
72
|
-
|
|
73
|
-
An existing revision is verified and reused. A damaged existing tree is an error,
|
|
74
|
-
never an invitation to overwrite it. Publishing another revision leaves the first
|
|
75
|
-
alone. Same-filesystem staging and rename avoid partially published trees; normal
|
|
76
|
-
errors remove staging. Concurrent publication of an already present valid revision
|
|
77
|
-
may reuse it after verification. A process crash can leave dot-prefixed staging
|
|
78
|
-
for later explicit cleanup; it is never a selectable artifact. This is not a
|
|
79
|
-
power-loss durability or hostile-host isolation guarantee.
|
|
80
|
-
|
|
81
|
-
Retention creates its managed ignore before any payload. It does not change the
|
|
82
|
-
scope's config, current lock, approval flags or authored capability directories.
|
|
83
|
-
Empty store directories/ignore metadata may remain after failure. No artifact
|
|
84
|
-
garbage collection is implemented: conservative retention is intentional.
|
|
85
|
-
|
|
86
|
-
## Resolution and lock integration proposed next
|
|
87
|
-
|
|
88
|
-
Use a versioned per-instance resolution record, with a separate identifier from
|
|
89
|
-
runtime/session identity. It needs:
|
|
90
|
-
|
|
91
|
-
- Exact source soul reference and retained source revision.
|
|
92
|
-
- One selected artifact reference per capability ID, plus package provenance
|
|
93
|
-
sufficient to verify and, where possible, restore that artifact.
|
|
94
|
-
- Effective non-secret configuration, default/override provenance and binding
|
|
95
|
-
references, not secrets or a promise to freeze membership and credentials.
|
|
96
|
-
- Every managed helper, command/hook and runtime resource required for later
|
|
97
|
-
dispatch. Resource references resolve against retained artifact roots.
|
|
98
|
-
|
|
99
|
-
The following contract decisions incorporate the external expert's review:
|
|
100
|
-
|
|
101
|
-
- Imported and member-repository souls produce the same record shape: upstream
|
|
102
|
-
soul identity, exact retained source revision and adopter-local alias. Keep the
|
|
103
|
-
canonical repository and exported path in the source reference; the local alias
|
|
104
|
-
is not a global identity.
|
|
105
|
-
- Retain soul source artifacts separately from capability artifacts, under the
|
|
106
|
-
deployment, keyed by qualified source identity and content digest. Do not encode
|
|
107
|
-
a soul as a capability helper. A shared leaf module may implement the tree-copy,
|
|
108
|
-
digest and publication mechanics, with different provenance validation for each
|
|
109
|
-
kind. Retain all declared source resources needed after preparation, not just
|
|
110
|
-
`soul.yaml` or a symlink into the author's checkout.
|
|
111
|
-
Source retention inherits the same typed absence, invalid-shape and integrity
|
|
112
|
-
refusals, including never silently repairing a damaged retained tree.
|
|
113
|
-
- Store captured resolutions independently of instance homes so queued work can
|
|
114
|
-
retain a reference after its originating home is removed. Each instance and
|
|
115
|
-
independent execution references its exact resolution; conservative retention
|
|
116
|
-
applies to both source trees and resolution records.
|
|
117
|
-
- Record provenance per effective choice: a soul requirement/default, workspace
|
|
118
|
-
default, import-entry adoption default or explicit operator choice. Preserve the
|
|
119
|
-
hard constraints as well as the selected values.
|
|
120
|
-
- Record resolved non-secret provider bindings with separate credential references.
|
|
121
|
-
The default knowledge provider's payload includes store-qualified read nodes and
|
|
122
|
-
owned-node destinations. The kernel envelope does not require other knowledge
|
|
123
|
-
providers to implement OKF's owns/reads model.
|
|
124
|
-
- Record the responsible human/private-team key and chosen wider-team references
|
|
125
|
-
for messaging-enabled instances. These capture the choice, not immutable live
|
|
126
|
-
membership or permission to read earlier conversations.
|
|
127
|
-
- Existing-instance migration records `reconstructed`, `partial` or `unknown`
|
|
128
|
-
status with evidence and unresolved inputs. A partial or unknown record cannot
|
|
129
|
-
pass for a complete captured resolution in CLI or Desktop readiness.
|
|
130
|
-
|
|
131
|
-
The scope is an explicit deployment directory. A standalone repository or an
|
|
132
|
-
isolated user-data deployment uses the same store and APIs; no workspace Git
|
|
133
|
-
repository or parent-directory discovery is required by retention.
|
|
134
|
-
|
|
135
|
-
The deployment lock records current choices for new preparation. A captured
|
|
136
|
-
resolution is the authority for its instance or queued work; it must not look up
|
|
137
|
-
an older package row by ID in today's lock and accidentally acquire a new one.
|
|
138
|
-
The wire schema/version is not chosen by this retention patch. Current lock
|
|
139
|
-
objects are inputs for verification, not an implicit new persistent lock format.
|
|
140
|
-
|
|
141
|
-
Preparation publishes all needed artifacts, then commits the complete resolution
|
|
142
|
-
before launching anything. A failed preparation may leave unreferenced valid
|
|
143
|
-
artifacts; it must not leave a selectable partial resolution. Choosing or approving
|
|
144
|
-
a newer artifact is a separate operation. No artifact's presence grants approval.
|
|
145
|
-
|
|
146
|
-
Independent queued work retains the resolution it will execute, even after the
|
|
147
|
-
originating instance or source soul has been removed. Recurring schedules must
|
|
148
|
-
state whether they capture a composition or explicitly prepare a new one on a
|
|
149
|
-
future tick; an already queued execution cannot silently advance either way.
|
|
150
|
-
The proposed default is to capture the composition; re-preparation on later ticks
|
|
151
|
-
is an explicit policy. Messaging-disabled jobs do not acquire a private team.
|
|
152
|
-
|
|
153
|
-
## Consumer migration
|
|
154
|
-
|
|
155
|
-
This is one coordinated change, not a permanent pair of resolution engines:
|
|
156
|
-
|
|
157
|
-
1. Add the explicit lock/resolution schema and store migration. Verify the current
|
|
158
|
-
flat artifacts before retaining them. Do not re-fetch a moving source and
|
|
159
|
-
claim those bytes reconstruct an overwritten historical revision.
|
|
160
|
-
2. Wire acquisition/preparation to retained artifacts. Ensure selected source
|
|
161
|
-
revisions are consistent across the transaction; preserve normal trust gates.
|
|
162
|
-
3. Capture references for new instances and independent work. Route generated
|
|
163
|
-
commands, runtime packages, capability helpers, launch/retire hooks and recovery
|
|
164
|
-
through the captured resolution, including after source deletion.
|
|
165
|
-
4. Migrate existing instance/queued-work records only where their exact managed
|
|
166
|
-
inputs can be established. Report unresolved historical inputs explicitly;
|
|
167
|
-
preserve running sessions and let their owners choose the restart boundary.
|
|
168
|
-
5. Remove mutable-store lookups from captured consumers. Update diagnostics and
|
|
169
|
-
removal behavior to retain referenced revisions. Add collection only later if
|
|
170
|
-
actual storage use justifies it.
|
|
171
|
-
|
|
172
|
-
The compatibility boundary includes `core.mjs` acquisition, restoration, trust,
|
|
173
|
-
discovery, spawn, launch and retirement; package diagnostics and CLI paths; and
|
|
174
|
-
the scheduler/operation callers. Each is a consumer to check, not a reason to
|
|
175
|
-
create another config parser. Before wiring core consumers, extract the shared
|
|
176
|
-
artifact helpers into a narrow leaf module: `core.mjs` must not acquire a circular dependency on the retention module
|
|
177
|
-
that currently consumes its helpers. Keep policy and lifecycle logic out of the
|
|
178
|
-
shared leaf module.
|
|
179
|
-
|
|
180
|
-
## Evidence and limits
|
|
181
|
-
|
|
182
|
-
The focused tests use the real package engine to install A, retain it, update to
|
|
183
|
-
B and retain B. Both execute their own test payload after removing the original
|
|
184
|
-
source, flat install and current lock. Further tests cover idempotent retention,
|
|
185
|
-
digest/provenance rejection, no silent repair, contained symlinks, and Git ignores.
|
|
186
|
-
No model harnesses or GUI processes are started.
|
|
187
|
-
|
|
188
|
-
This proves the storage prerequisite. It does **not** yet prove a running instance
|
|
189
|
-
or queued job dispatches A while new work uses B. That acceptance test belongs to
|
|
190
|
-
the consumer migration, with executable trust and recovery exercised end to end.
|