@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,708 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
type: Decision
|
|
3
|
-
status: accepted-for-implementation
|
|
4
|
-
title: Portable souls and Git-backed organizational workspaces
|
|
5
|
-
description: Accepted Portable Souls architecture, reconciled with all lead amendments and the landed storage contract; syntax and provider qualification remain review gates.
|
|
6
|
-
timestamp: 2026-09-15
|
|
7
|
-
---
|
|
8
|
-
|
|
9
|
-
# Portable souls and Git-backed organizational workspaces
|
|
10
|
-
|
|
11
|
-
## 1. Status and purpose
|
|
12
|
-
|
|
13
|
-
**Accepted for infrastructure implementation, 2026-09-15.** Direct human
|
|
14
|
-
implementation/deployment authorization supersedes the earlier discussion-only
|
|
15
|
-
status, not the constraints. This document coherently incorporates the full
|
|
16
|
-
[lead amendment](2026-09-14-portable-souls-contract-amendments.md). Its substantive
|
|
17
|
-
text is retained verbatim there so acceptance depends on no private conversation
|
|
18
|
-
or ignored instance file. The [handoff's 15 decisions](2026-09-15-portable-souls-handoff.md#2-the-decisions-binding)
|
|
19
|
-
and the landed [retention contract](2026-09-14-artifact-retention-contract.md)
|
|
20
|
-
are binding. The [delivery plan and acceptance ledger](2026-09-15-portable-souls-implementation.md)
|
|
21
|
-
map each clause to verification.
|
|
22
|
-
|
|
23
|
-
Architecture acceptance is not final parser/schema approval, provider privacy
|
|
24
|
-
qualification, or a claim of shipped behavior. All YAML shapes are illustrative
|
|
25
|
-
and require parser review; accepted spelling and semantics are explicit below.
|
|
26
|
-
At baseline `428cd9af615652c4a93d754c1106674abd18545b`, only the storage
|
|
27
|
-
retention prerequisite is landed for Portable Souls. Desktop feature work is
|
|
28
|
-
**later**. The held capture patch `54b07ee` is excluded. This documentation pass
|
|
29
|
-
performs no live installation, activation, credential operation, scheduling,
|
|
30
|
-
model/GUI launch or session control.
|
|
31
|
-
|
|
32
|
-
The objective is an organization with many repositories, teams and expert souls,
|
|
33
|
-
where people can discover and prepare the appropriate experts without cloning the
|
|
34
|
-
whole organization or operating an additional OATS registry service.
|
|
35
|
-
|
|
36
|
-
> The soul declares what it needs and where it comes from.
|
|
37
|
-
> The workspace declares admission, defaults, knowledge stores, team references
|
|
38
|
-
> and catalogs.
|
|
39
|
-
> The local deployment resolves, installs, binds credentials and keeps state.
|
|
40
|
-
|
|
41
|
-
## 2. The problem this solves
|
|
42
|
-
|
|
43
|
-
Today, a committed soul can depend on capabilities selected through an uncommitted
|
|
44
|
-
parent workspace configuration. Cloning the soul's repository may not reveal where
|
|
45
|
-
those essential capabilities come from. A capability ID alone is insufficient
|
|
46
|
-
provenance. Absolute machine paths in soul definitions create another portability
|
|
47
|
-
failure.
|
|
48
|
-
|
|
49
|
-
Local directory-based discovery also assumes that people have similar checkouts
|
|
50
|
-
under the same parent folder. It cannot discover a repository that is not present
|
|
51
|
-
on the machine, and directory adjacency is not organizational admission.
|
|
52
|
-
|
|
53
|
-
We want portable requirements, remote organizational discovery and explicit local
|
|
54
|
-
setup instead of undocumented dependencies on the original operator's filesystem.
|
|
55
|
-
|
|
56
|
-
## 3. The model: related concepts, separate responsibilities
|
|
57
|
-
|
|
58
|
-
| Concept | Responsibility |
|
|
59
|
-
|---|---|
|
|
60
|
-
| Soul | Durable expert definition: role, procedural curriculum and capability requirements. Not a running process. |
|
|
61
|
-
| Instance | One incarnation of a soul, with its own home, task, effective composition and runtime identity. |
|
|
62
|
-
| Capability | Reusable runtime surface: skills, instructions, commands/hooks, helper agents and requirements. It may implement a fundamental layer. |
|
|
63
|
-
| Package | Acquisition/update unit exporting one or more capabilities, with contained payload and dependency declarations. |
|
|
64
|
-
| Source repository | Versioned home of soul definitions, packages or other project material. |
|
|
65
|
-
| Work target | Repository or directory an instance operates on; not necessarily the soul's source repository. |
|
|
66
|
-
| Workspace definition | Git-hosted organizational authority for admitted repositories, defaults, discovery sources and team references. |
|
|
67
|
-
| Local deployment | One operator's installed realization: local root, repository mappings, artifacts, locks, bindings, trust and state. |
|
|
68
|
-
| Team | A selected provider's communication/coordination membership boundary. |
|
|
69
|
-
|
|
70
|
-
One organizational workspace may have many teams and many local deployments.
|
|
71
|
-
One instance may belong to several teams. Source location, installation location,
|
|
72
|
-
work target and team membership must not be inferred from one another.
|
|
73
|
-
|
|
74
|
-
### Knowledge declarations and the provider-neutral envelope
|
|
75
|
-
|
|
76
|
-
All durable knowledge remains external to souls. A soul records knowledge
|
|
77
|
-
requirements using source-complete store locators or explicitly inherited bindings.
|
|
78
|
-
The workspace advertises stores and a default provider; the deployment resolves
|
|
79
|
-
locations and credentials. A resolved instance reads and harvests without fetching
|
|
80
|
-
the workspace definition again. Installing a soul does not transplant an upstream
|
|
81
|
-
owner registry.
|
|
82
|
-
|
|
83
|
-
The kernel captures effective non-secret provider configuration and binding
|
|
84
|
-
provenance with separate credential references. This envelope is provider-neutral:
|
|
85
|
-
a replacement knowledge capability exposes its own required configuration and
|
|
86
|
-
readiness through the capability contract, without being forced into OKF storage,
|
|
87
|
-
node ownership or internal authoring policy.
|
|
88
|
-
|
|
89
|
-
For the default provider (OKF), the conceptual declaration is:
|
|
90
|
-
- `reads`: entries with a store and node, not globally ambiguous short names.
|
|
91
|
-
- `owns`: entries with a node and optional destination. A missing destination
|
|
92
|
-
inherits an **explicitly selected write binding**; if none is configured, report
|
|
93
|
-
`needs configuration`. Every resolved node address includes its store.
|
|
94
|
-
- Fixed source requirements and rebindable store defaults must be distinguishable.
|
|
95
|
-
|
|
96
|
-
There is no one-store-per-soul invariant or newly imposed single-write-store limit.
|
|
97
|
-
Each resolved node has one explicit steward, each promoted concept an explicit
|
|
98
|
-
destination. Steward, proposing harvester and accepting maintainer are three
|
|
99
|
-
roles: multiple instances/deployments can propose without acquiring conflicting
|
|
100
|
-
ownership. Git knowledge delivery is a PR, public or private; a PR is not accepted
|
|
101
|
-
until merged. Reading public knowledge never authorizes publication of adopter
|
|
102
|
-
captures or notes. No new disclosure engine or per-agent ACL is implied.
|
|
103
|
-
|
|
104
|
-
## 4. Source-complete soul requirements
|
|
105
|
-
|
|
106
|
-
A soul declares its essential capabilities with enough information to acquire
|
|
107
|
-
them independently of a private upstream configuration.
|
|
108
|
-
|
|
109
|
-
Illustrative soul declaration as **pseudoconfiguration**, not current runnable
|
|
110
|
-
configuration (nesting requires parser/schema review):
|
|
111
|
-
|
|
112
|
-
```text
|
|
113
|
-
name: market-research-expert
|
|
114
|
-
requires:
|
|
115
|
-
capabilities:
|
|
116
|
-
example.market-research:
|
|
117
|
-
source: git:github.com/example/marketing-capabilities@main#packages/research
|
|
118
|
-
messaging: any
|
|
119
|
-
defaults:
|
|
120
|
-
tasks:
|
|
121
|
-
capability: example.tasks
|
|
122
|
-
source: git:github.com/example/task-capabilities@main#packages/tasks
|
|
123
|
-
```
|
|
124
|
-
|
|
125
|
-
This identifies a capability, its source repository, a revision policy and the
|
|
126
|
-
selected package root. The package must actually export that capability ID.
|
|
127
|
-
The branch is a moving selector, not the installed artifact's identity.
|
|
128
|
-
|
|
129
|
-
Organization catalogs can offer convenient names during authoring. The resulting
|
|
130
|
-
portable requirement must retain resolvable provenance rather than depending only
|
|
131
|
-
on a catalog nickname available on one machine.
|
|
132
|
-
|
|
133
|
-
Supported sources can include:
|
|
134
|
-
- A package in an organization-wide capability repository.
|
|
135
|
-
- A package in a team-specific repository.
|
|
136
|
-
- A third-party package outside the organization.
|
|
137
|
-
- A package contained in the soul's own repository.
|
|
138
|
-
- An explicitly local development package.
|
|
139
|
-
|
|
140
|
-
Use `repo:packages/self-serve-dev` for a package at the **root of the soul's
|
|
141
|
-
source repository at its retained snapshot**. Nested `agents/<name>/` directories,
|
|
142
|
-
installation paths, caller cwd and work targets never change this base. `repo:`
|
|
143
|
-
paths must remain contained in that snapshot, including after symlink resolution.
|
|
144
|
-
Never use an ambiguous `./` source spelling in a portable soul declaration.
|
|
145
|
-
Explicit `path:` references are honestly nonportable development inputs. The
|
|
146
|
-
accepted `repo:` spelling is not yet a finalized parser/schema; containment and
|
|
147
|
-
source normalization must be reviewed together.
|
|
148
|
-
|
|
149
|
-
"Anywhere" means any supported transport delivering a valid package contract,
|
|
150
|
-
not arbitrary executable download instructions. A downloaded repository does not
|
|
151
|
-
become trusted merely because its files now have a local path.
|
|
152
|
-
|
|
153
|
-
Keep three states distinct:
|
|
154
|
-
1. Available in a catalog.
|
|
155
|
-
2. Selected or required by a soul.
|
|
156
|
-
3. Configured and authorized for use by an instance.
|
|
157
|
-
|
|
158
|
-
Catalog availability does not activate every capability. Install only the effective
|
|
159
|
-
requirements and their dependency closure, not the entire organization's catalog.
|
|
160
|
-
|
|
161
|
-
### Portability is not possession of credentials
|
|
162
|
-
|
|
163
|
-
A soul can carry the software needed to use a task service or knowledge store. It
|
|
164
|
-
cannot carry another operator's credentials, team enrollment or machine paths.
|
|
165
|
-
Those are deployment inputs. Missing required inputs produce an explicit
|
|
166
|
-
`needs configuration` result, not a falsely successful launch.
|
|
167
|
-
|
|
168
|
-
`requires` are constraints **every** successful composition satisfies; `defaults`
|
|
169
|
-
are fallback values among permitted choices, rebindable by an operator or import
|
|
170
|
-
entry. A generic `messaging: any` requirement can be satisfied by an adopter's
|
|
171
|
-
provider, but supplies no software, credentials or private team by itself. An
|
|
172
|
-
intrinsic implementation/source requirement cannot be erased by a default or
|
|
173
|
-
operator override. Conflicting requirements fail with both origins reported.
|
|
174
|
-
This is constraints plus fallback values, not competing configuration hierarchies.
|
|
175
|
-
|
|
176
|
-
### Importing an external soul by reference
|
|
177
|
-
|
|
178
|
-
An external import has four conceptual fields (syntax remains for parser review):
|
|
179
|
-
|
|
180
|
-
```yaml
|
|
181
|
-
imports:
|
|
182
|
-
- source: git:github.com/example/public-experts
|
|
183
|
-
soul: agents/research-expert
|
|
184
|
-
revision: main
|
|
185
|
-
alias: research
|
|
186
|
-
adoption:
|
|
187
|
-
teams: { experts: research-team }
|
|
188
|
-
knowledge-destination: adopter-store
|
|
189
|
-
tasks: example.tasks
|
|
190
|
-
```
|
|
191
|
-
|
|
192
|
-
The fields are canonical source repository, exported soul path, revision selector
|
|
193
|
-
and adopter-local alias. Adoption values above must resolve to explicit,
|
|
194
|
-
source-complete bindings; short labels alone do not satisfy a requirement.
|
|
195
|
-
Preparation retains the exact resolved source revision and **all source resources
|
|
196
|
-
the soul needs**. Upstream soul identity (repository plus exported path), exact
|
|
197
|
-
revision and local alias are distinct: changing an alias creates no new upstream
|
|
198
|
-
soul; advancing a selector does not itself create a new running instance identity.
|
|
199
|
-
Source moves need explicit provenance handling, never filename matching.
|
|
200
|
-
|
|
201
|
-
Imports are **by reference, never by copy** into an adopter-maintained definition.
|
|
202
|
-
The workspace may advertise an import without admitting its source repository or
|
|
203
|
-
requiring the publisher's backlink. Standalone prepare accepts the same reference;
|
|
204
|
-
private sources still require existing Git access. Persistent souls remain
|
|
205
|
-
persistent souls, not ephemeral capability helpers.
|
|
206
|
-
|
|
207
|
-
Import-entry adoption defaults are workspace-side, keyed to the **qualified
|
|
208
|
-
upstream identity/reference**, not its short alias. They can bind extension points,
|
|
209
|
-
map team aliases, choose default knowledge destinations and rebind providers, but
|
|
210
|
-
cannot replace hard requirements. A team map advertises a destination, not
|
|
211
|
-
enrollment. Explicit spawn choices may override adoption defaults within the same
|
|
212
|
-
bounds. No copy, fork or second policy hierarchy is needed.
|
|
213
|
-
|
|
214
|
-
## 5. Workspace membership through reciprocal Git declarations
|
|
215
|
-
|
|
216
|
-
A member repository's OATS config references the workspace repository by Git
|
|
217
|
-
remote. The workspace definition explicitly admits that member repository.
|
|
218
|
-
|
|
219
|
-
```text
|
|
220
|
-
member repository --declares membership in--> workspace repository
|
|
221
|
-
member repository <--admitted by------------- workspace repository
|
|
222
|
-
```
|
|
223
|
-
|
|
224
|
-
Neither declaration alone is enough. For an authenticated operator U:
|
|
225
|
-
|
|
226
|
-
```text
|
|
227
|
-
eligible(U, repository, workspace) =
|
|
228
|
-
U can read workspace
|
|
229
|
-
AND U can read repository
|
|
230
|
-
AND workspace admits repository
|
|
231
|
-
AND repository identifies workspace
|
|
232
|
-
```
|
|
233
|
-
|
|
234
|
-
This separates organizational admission from filesystem placement. It prevents a
|
|
235
|
-
fork with an inherited backlink from automatically joining the original workspace.
|
|
236
|
-
It also prevents an arbitrary sibling directory from becoming an organizational
|
|
237
|
-
member merely because it is nearby.
|
|
238
|
-
|
|
239
|
-
Use qualified repository/soul identities, not folder names or globally unique
|
|
240
|
-
short soul names. Canonicalize equivalent Git remote spellings and retain provider
|
|
241
|
-
repository identity where available. Renames, transfers and redirects must not
|
|
242
|
-
silently select a different authority. Observe declarations at recorded revisions.
|
|
243
|
-
|
|
244
|
-
Start with one workspace association per member repository. Multiple teams do not
|
|
245
|
-
require multiple workspace associations. More elaborate federation or multi-workspace
|
|
246
|
-
membership is a separate requirement, not implicit recursive config inheritance.
|
|
247
|
-
|
|
248
|
-
### Membership is different from consuming external sources
|
|
249
|
-
|
|
250
|
-
Using a public capability does not make its repository an organization member.
|
|
251
|
-
Similarly, a reusable public soul repository cannot backlink to every customer's
|
|
252
|
-
workspace.
|
|
253
|
-
|
|
254
|
-
An organization consumes a reviewed external soul through the by-reference import
|
|
255
|
-
in section 4, never by copying it into a member repository. That does not admit
|
|
256
|
-
the publisher. Local-only souls remain locally discoverable unless explicitly
|
|
257
|
-
published through an appropriate mechanism.
|
|
258
|
-
|
|
259
|
-
Reciprocal admission applies equally to project, experts, capabilities and
|
|
260
|
-
knowledge repositories; source consumption of a package, soul or public knowledge
|
|
261
|
-
store is never membership.
|
|
262
|
-
|
|
263
|
-
## 6. How discovery works without cloning everything
|
|
264
|
-
|
|
265
|
-
The workspace definition contains:
|
|
266
|
-
- Admitted member repositories.
|
|
267
|
-
- Default fundamental-layer selections and non-secret organizational settings.
|
|
268
|
-
- Knowledge stores and a default knowledge provider for discoverability.
|
|
269
|
-
- Named team references, including the private-per-human choice.
|
|
270
|
-
- Optional capability catalogs, package-index sources and external soul imports.
|
|
271
|
-
|
|
272
|
-
Member repositories publish small declarative export indexes naming their exported
|
|
273
|
-
souls and packages, descriptions and contained source paths. Exact field names and
|
|
274
|
-
manifest placement remain to be agreed. Package manifests remain authoritative for
|
|
275
|
-
the actual payload; catalogs only advertise sources.
|
|
276
|
-
|
|
277
|
-
From any associated repository, a client can:
|
|
278
|
-
1. Read its workspace reference.
|
|
279
|
-
2. Fetch the workspace definition using the operator's existing GitHub access.
|
|
280
|
-
3. Validate admission and relevant reciprocal backlinks.
|
|
281
|
-
4. Read accessible repositories' small export indexes.
|
|
282
|
-
5. Present qualified souls and capabilities without downloading all source trees.
|
|
283
|
-
6. Fetch the selected soul/package and prepare work targets only when needed.
|
|
284
|
-
|
|
285
|
-
Do not base this on recursive scans of every repository file, global code search,
|
|
286
|
-
or executing repository scripts during discovery. Descriptors are data, not agent
|
|
287
|
-
instructions. Validate schema, containment and resource limits before using them.
|
|
288
|
-
|
|
289
|
-
At scale, cache per observed revision and authorization context, refresh changed
|
|
290
|
-
indexes incrementally, and respect pagination, bounded concurrency and rate limits.
|
|
291
|
-
Show inaccessible, unavailable or stale sources honestly. GitHub may intentionally
|
|
292
|
-
not distinguish a hidden private repository from a nonexistent one.
|
|
293
|
-
|
|
294
|
-
Start with client-side aggregation. A generated aggregate index is optional later;
|
|
295
|
-
it must not broaden access to private descriptions merely to save requests.
|
|
296
|
-
No metadata refresh silently updates already installed or running instances.
|
|
297
|
-
|
|
298
|
-
## 7. Access control: use GitHub, without overstating its guarantees
|
|
299
|
-
|
|
300
|
-
GitHub supplies authentication and repository-content authorization. Workspace
|
|
301
|
-
membership supplies organizational admission. Neither needs a second OATS user or
|
|
302
|
-
repository-permission database.
|
|
303
|
-
|
|
304
|
-
Read access permits discovery of accessible definitions. It does not grant write
|
|
305
|
-
access to source repositories, approval to execute arbitrary hooks, membership in
|
|
306
|
-
a messaging team, or access to cloud services. Those remain their respective
|
|
307
|
-
systems' authority.
|
|
308
|
-
|
|
309
|
-
Important limits:
|
|
310
|
-
- A readable workspace allowlist can reveal private repository names/URLs even if
|
|
311
|
-
the reader cannot open those repositories.
|
|
312
|
-
- A broadly readable aggregate index must not copy protected soul descriptions.
|
|
313
|
-
- Cached metadata must not be shared indiscriminately between authorization contexts.
|
|
314
|
-
- Revoking access cannot erase files someone already cloned or information learned.
|
|
315
|
-
- Offline cached information is last-known state, not proof of current membership.
|
|
316
|
-
|
|
317
|
-
Use native GitHub repository permissions, reviews and branch protection rather
|
|
318
|
-
than inventing an organization-wide OATS ACL engine. Choose metadata visibility
|
|
319
|
-
intentionally and revalidate remote operations. Do not promise stronger secrecy
|
|
320
|
-
or revocation than the underlying platform can provide.
|
|
321
|
-
|
|
322
|
-
## 8. Decentralized operation without another hosted control plane
|
|
323
|
-
|
|
324
|
-
Authority and authorship are distributed across ordinary Git repositories:
|
|
325
|
-
- Soul maintainers own their definitions.
|
|
326
|
-
- Capability maintainers own their packages.
|
|
327
|
-
- Workspace maintainers own organizational admission and defaults.
|
|
328
|
-
- Operators own local deployments and their credentials.
|
|
329
|
-
|
|
330
|
-
The organization needs no OATS-operated registry server, custom package registry,
|
|
331
|
-
central discovery database, or always-running discovery daemon. Existing Git hosting
|
|
332
|
-
and optional hosted CI can store, review and validate these declarations. A workspace
|
|
333
|
-
repository is a logical coordination point, not a new service to operate.
|
|
334
|
-
|
|
335
|
-
GitHub is the first discovery/access adapter. The model uses Git source references
|
|
336
|
-
and should not require every package or future deployment to be GitHub-hosted.
|
|
337
|
-
|
|
338
|
-
This is not a claim that the whole agent system is literally server-free. Instances
|
|
339
|
-
still execute on machines; model APIs and selected messaging/task providers may be
|
|
340
|
-
hosted services. Unattended work needs an available execution host. The benefit is
|
|
341
|
-
that organizational discovery and package distribution add no new hosted OATS
|
|
342
|
-
infrastructure requirement.
|
|
343
|
-
|
|
344
|
-
Git discovery finds definitions. Live presence, contact routes and remote execution
|
|
345
|
-
authority remain with messaging/execution providers. Do not put heartbeats or
|
|
346
|
-
continuously changing instance state into Git.
|
|
347
|
-
|
|
348
|
-
## 9. Flexible placement, strong conventions
|
|
349
|
-
|
|
350
|
-
An organization may choose:
|
|
351
|
-
|
|
352
|
-
```text
|
|
353
|
-
workspace-definition repository
|
|
354
|
-
admits engineering, marketing and project repositories
|
|
355
|
-
advertises capability catalog sources
|
|
356
|
-
defines default layers and team references
|
|
357
|
-
|
|
358
|
-
engineering-capabilities repository
|
|
359
|
-
several independently maintained package roots
|
|
360
|
-
|
|
361
|
-
marketing-capabilities repository
|
|
362
|
-
research, publishing and campaign packages
|
|
363
|
-
|
|
364
|
-
marketing-souls repository
|
|
365
|
-
market-research-expert and content-strategy-expert
|
|
366
|
-
|
|
367
|
-
individual project repository
|
|
368
|
-
its own experts and project-local capability packages
|
|
369
|
-
```
|
|
370
|
-
|
|
371
|
-
Souls live in project repositories **first**, conventionally `agents/<name>/`, as
|
|
372
|
-
many as the project needs. A separate experts repository is for expertise spanning
|
|
373
|
-
repositories, not a compulsory central soul store. Name souls for expertise, not
|
|
374
|
-
job titles. This is an example topology, not a required hierarchy. One repository
|
|
375
|
-
may contain many packages; unrelated sources remain valid under the same contract.
|
|
376
|
-
Do not distribute every organizational capability as one inseparable package unless
|
|
377
|
-
that really is the intended update unit.
|
|
378
|
-
|
|
379
|
-
OATS should provide conventional locations, templates, manifests, validators and
|
|
380
|
-
onboarding skills. The current Git package-root default is `oats-package/`; explicit
|
|
381
|
-
package paths remain supported. Keep canonical AGENTS.md with its CLAUDE.md alias,
|
|
382
|
-
complete skill/reference closure, and contained package resources.
|
|
383
|
-
|
|
384
|
-
Conventions make common cases easy. Explicit validated references make other
|
|
385
|
-
arrangements possible. An onboarding expert should understand the details so users
|
|
386
|
-
can ask for outcomes rather than learn the directory conventions themselves.
|
|
387
|
-
|
|
388
|
-
## 10. What installation does, and where it happens
|
|
389
|
-
|
|
390
|
-
Reuse the existing OATS package engine. A capability installation materializes its
|
|
391
|
-
manifest, skills/reference/script closure, injections, declared commands/hooks,
|
|
392
|
-
helper agents and supported locked runtime dependencies. External host requirements
|
|
393
|
-
are checked separately. Acquisition is not activation or executable approval.
|
|
394
|
-
|
|
395
|
-
Select an explicit local deployment scope:
|
|
396
|
-
1. An already selected local workspace deployment, when present.
|
|
397
|
-
2. Otherwise the standalone repository/soul scope.
|
|
398
|
-
3. With no repository, an isolated deployment under user application data.
|
|
399
|
-
|
|
400
|
-
A remote workspace locator is not a local path. Following it must not clone every
|
|
401
|
-
member repo, create arbitrary parent directories or install machine-wide tools.
|
|
402
|
-
Do not mix capability storage with an application's ordinary Node node_modules.
|
|
403
|
-
A machine-wide download cache is optional optimization, not activation or authority.
|
|
404
|
-
|
|
405
|
-
The baseline installer still replaces one flat `installed/<id>` artifact per
|
|
406
|
-
capability per scope. The landed retention primitive additionally supports:
|
|
407
|
-
|
|
408
|
-
```text
|
|
409
|
-
<deployment>/.agents/capabilities/artifacts/<capability-id>/sha256-<full digest>/
|
|
410
|
-
```
|
|
411
|
-
|
|
412
|
-
It verifies bytes and provenance, publishes immutable A/B trees side by side,
|
|
413
|
-
and neither selects nor approves them. The [retention contract](2026-09-14-artifact-retention-contract.md)
|
|
414
|
-
owns its typed refusals and containment rules. Missing artifacts differ from
|
|
415
|
-
invalid shape/store or integrity drift; damaged retained entries are never
|
|
416
|
-
silently repaired. Publication uses same-filesystem staging/rename; it is not a
|
|
417
|
-
hostile-host or power-loss guarantee.
|
|
418
|
-
|
|
419
|
-
The accepted integration stores soul source artifacts **separately** under the
|
|
420
|
-
explicit deployment, keyed by qualified source identity plus digest, with the same
|
|
421
|
-
typed refusal/no-repair semantics. Retain the full required source closure, not
|
|
422
|
-
just `soul.yaml` or a link to an author's checkout. Exact new wire versions and
|
|
423
|
-
paths need schema review.
|
|
424
|
-
|
|
425
|
-
A versioned **captured resolution**, stored outside instance homes, is the authority
|
|
426
|
-
for each instance and independent execution. The deployment lock records **current
|
|
427
|
-
choices for new preparation**, not an ambient authority for earlier work. Capture
|
|
428
|
-
source identity/revision/alias; one artifact per capability ID and verification
|
|
429
|
-
provenance; helpers, commands/hooks and managed runtime resources; non-secret
|
|
430
|
-
configuration and per-choice provenance retaining hard constraints; provider-owned
|
|
431
|
-
bindings with separate credential references; responsible human/private context
|
|
432
|
-
key and wider-team choices. These last fields record choices, not fixed live
|
|
433
|
-
membership or permission to read past conversations.
|
|
434
|
-
|
|
435
|
-
Preparation resolves once per transaction, validates/fetches/materializes the
|
|
436
|
-
closure, publishes every required artifact, then commits a complete resolution
|
|
437
|
-
**before launch**. A failed preparation may leave valid unreferenced artifacts,
|
|
438
|
-
but never a selectable partial resolution. Report installed / trusted / configured /
|
|
439
|
-
enrolled separately and `needs configuration` for missing inputs. Neither
|
|
440
|
-
acquisition nor artifact presence grants trust, activation or membership.
|
|
441
|
-
|
|
442
|
-
Before core consumers import retention, extract tree-copy/digest/publication
|
|
443
|
-
mechanics into a narrow **leaf** module; no dependency back into `core.mjs`, no
|
|
444
|
-
policy or lifecycle logic. Then follow the retention contract's five consumer
|
|
445
|
-
migration steps: explicit schema/store migration; acquisition/preparation wiring;
|
|
446
|
-
new instance and queued-work capture; evidence-based old-record migration;
|
|
447
|
-
removal of mutable-store lookups and reference-aware diagnostics/removal. This is
|
|
448
|
-
one coordinated migration, not a permanent parallel resolver/store model.
|
|
449
|
-
|
|
450
|
-
Existing records report `reconstructed`, `partial` or `unknown`, with evidence and
|
|
451
|
-
unresolved inputs. Partial/unknown cannot pass as complete in CLI or later Desktop
|
|
452
|
-
readiness. Verify old artifacts before retaining; never refetch a moving source
|
|
453
|
-
and claim to recover an overwritten revision. Preserve running sessions and let
|
|
454
|
-
owners choose restart boundaries.
|
|
455
|
-
|
|
456
|
-
At that consumer-migration boundary, introduce a **versioned digest** covering file
|
|
457
|
-
bytes, symlink targets and each regular file's executable flag normalized from
|
|
458
|
-
owner execute, `(mode & 0o100) !== 0`, identically for Git and `path:` sources. Old
|
|
459
|
-
digests remain explicitly verifiable and are never reinterpreted as mode-aware.
|
|
460
|
-
Group/other execute and other mode bits stay outside identity. Do not rewrite
|
|
461
|
-
modes during retention or infer entrypoints from free-form command strings. The
|
|
462
|
-
landed primitive still uses the old bytes/symlink digest; the format bump is not
|
|
463
|
-
claimed implemented.
|
|
464
|
-
|
|
465
|
-
Provider state and accepted knowledge remain outside replaceable software artifacts.
|
|
466
|
-
Remote persistent-soul acquisition preserves persistent-soul semantics; package
|
|
467
|
-
transport does not make it an ephemeral helper. A standalone repository or a
|
|
468
|
-
non-Git user-data deployment uses the same APIs, with no fake workspace required.
|
|
469
|
-
|
|
470
|
-
## 11. Versions and explicit freshness
|
|
471
|
-
|
|
472
|
-
People should not have to select numbered versions routinely. Machines still need
|
|
473
|
-
exact revisions to reproduce behavior and retire or recover instances safely.
|
|
474
|
-
Current package manifests require numeric versions; this proposal does not silently
|
|
475
|
-
remove that schema field or compatibility checks.
|
|
476
|
-
|
|
477
|
-
A soul can track a defined branch/release channel or explicitly pin a revision.
|
|
478
|
-
Resolve the policy once during preparation into an immutable full composition:
|
|
479
|
-
source soul revision, workspace/default inputs, capability dependency closure,
|
|
480
|
-
artifact identities and relevant non-secret binding provenance. Keep secrets out
|
|
481
|
-
of shared locks and Git metadata.
|
|
482
|
-
|
|
483
|
-
Observe a source/ref consistently within one resolution transaction. Do not advance
|
|
484
|
-
it halfway through assembling an instance.
|
|
485
|
-
|
|
486
|
-
Accepted v1 freshness:
|
|
487
|
-
- Refresh the chosen channel on **explicit prepare or update**, once per transaction.
|
|
488
|
-
- Show an available-unapproved revision beside the last-approved usable revision;
|
|
489
|
-
never call the latter "latest". No discovery daemon or unattended trust service.
|
|
490
|
-
- New instances may use a newly approved compatible resolution after that refresh.
|
|
491
|
-
- Declarative skill changes are behavior-bearing and get a bounded visible change
|
|
492
|
-
notice, but do not gain an executable-approval gate.
|
|
493
|
-
- Existing instances and durable jobs keep their captured artifacts.
|
|
494
|
-
- Explicit upgrades create a new validated composition, with state-migration checks.
|
|
495
|
-
- Offline use is visibly last-known/approved, not claimed to be latest.
|
|
496
|
-
- A failed required update is visible, not a falsely successful refresh.
|
|
497
|
-
|
|
498
|
-
Different instances can select different revisions in the same workspace:
|
|
499
|
-
|
|
500
|
-
```text
|
|
501
|
-
artifact A <- existing marketing instance
|
|
502
|
-
artifact B <- new marketing instance and another compatible instance
|
|
503
|
-
```
|
|
504
|
-
|
|
505
|
-
Identical artifacts are shared; distinct artifacts coexist. Exactly one artifact
|
|
506
|
-
per capability ID is selected inside an individual instance. If one dependency
|
|
507
|
-
closure requires conflicting artifacts for the same capability/command identity,
|
|
508
|
-
report both requirement paths and fail until reconciled. Do not load both under
|
|
509
|
-
one namespace or arbitrarily choose the newest. No general semver solver initially.
|
|
510
|
-
|
|
511
|
-
Retain artifacts referenced by live instances, rollback or pending independent jobs,
|
|
512
|
-
including retirement/recovery code needed after source deletion. Garbage collection
|
|
513
|
-
must be reference-aware; conservative retention is preferable initially.
|
|
514
|
-
|
|
515
|
-
Downloading during explicit preparation is not automatic trust. **Executable means
|
|
516
|
-
commands, hooks or environment (`env`)**; any changed executable artifact requires
|
|
517
|
-
fresh approval at its exact integrity/revision. Publisher continuity or `latest`
|
|
518
|
-
grants nothing. V1 has **no unattended approval**; any future bounded policy needs
|
|
519
|
-
a separate product decision, not an implementation shortcut. Unchanged artifacts
|
|
520
|
-
need not be replaced merely because unrelated repository content changed.
|
|
521
|
-
|
|
522
|
-
All lifecycle dispatch, restart, retirement, recovery and independent queued work
|
|
523
|
-
use the captured resolution, never a newly read ambient lock/config. Retain source
|
|
524
|
-
trees and resolutions as well as capability artifacts while referenced, including
|
|
525
|
-
workers whose source has been deleted. Recurring schedules must state whether they
|
|
526
|
-
capture composition or explicitly prepare on a later tick; capture is the proposed
|
|
527
|
-
default pending policy review. Already queued executions never silently advance.
|
|
528
|
-
No scheduler is activated by this design work.
|
|
529
|
-
|
|
530
|
-
Immutability covers **OATS-managed software composition only**: not knowledge
|
|
531
|
-
contents, credentials, live team memberships, the work repository, external services
|
|
532
|
-
or host tools. Authorized credential rotation and membership changes do not upgrade
|
|
533
|
-
software.
|
|
534
|
-
|
|
535
|
-
Software rollback does not reverse external writes or database/knowledge schema
|
|
536
|
-
migrations. Concurrent revisions sharing external state need provider compatibility.
|
|
537
|
-
A security incident may require explicitly stopping or migrating an instance, not
|
|
538
|
-
quietly overwriting the artifact underneath it.
|
|
539
|
-
|
|
540
|
-
> Sources may move. Installed artifacts do not. Instances retain exact compositions.
|
|
541
|
-
|
|
542
|
-
## 12. Defaults, teams and identities
|
|
543
|
-
|
|
544
|
-
### Two authorities, one resolver
|
|
545
|
-
|
|
546
|
-
Policy consists of workspace defaults and soul declarations. The workspace fills
|
|
547
|
-
choices the soul leaves open; soul `requires` constrain all choices and `defaults`
|
|
548
|
-
are fallbacks. Explicit operator choice (import-entry adoption defaults or spawn
|
|
549
|
-
choice) may rebind defaults and bindings, never erase requirements. Import adoption
|
|
550
|
-
is workspace-side configuration, not a third tier. Conflicts report both origins.
|
|
551
|
-
There is **no repository capability-default tier and no agent-types/family entity**.
|
|
552
|
-
|
|
553
|
-
Repository briefing (`agents-md-injection`) and worktree setup remain **work-target
|
|
554
|
-
behavior**, selected from the repository actually worked on, not an imported soul's
|
|
555
|
-
source repository. Applicable executable trust still applies. Directory work targets
|
|
556
|
-
remain valid with no invented Git repository or organizational membership.
|
|
557
|
-
|
|
558
|
-
An instance selects exactly one workspace context. Its imported soul's original
|
|
559
|
-
organization contributes no second policy authority. Without a workspace, use
|
|
560
|
-
explicit standalone bindings for unresolved requirements; `messaging: any` supplies
|
|
561
|
-
neither a provider nor credentials nor a private team. Report missing bindings,
|
|
562
|
-
not an unnamed implicit product default.
|
|
563
|
-
|
|
564
|
-
### Private-first choices, not a qualified privacy guarantee
|
|
565
|
-
|
|
566
|
-
For messaging-enabled instances, the private team is keyed by a **provider-resolvable
|
|
567
|
-
human identity plus qualified workspace identity**, reused across that person's
|
|
568
|
-
machines. OS usernames, checkout paths and agent aliases are insufficient. Child
|
|
569
|
-
and scheduled instances inherit their responsible human. Messaging-disabled workers
|
|
570
|
-
need no team. Standalone deployments require an explicit context key instead of a
|
|
571
|
-
nonexistent workspace identity.
|
|
572
|
-
|
|
573
|
-
Wider teams the soul lists are opt-in **per instance**. An explicit wider set
|
|
574
|
-
replaces wider defaults but retains the private floor. Team-alias mappings only
|
|
575
|
-
advertise destinations; provider prerequisites and actual enrollment remain separate.
|
|
576
|
-
A global instance identity holds multiple provider membership credentials and
|
|
577
|
-
survives joining/leaving teams. Process, session and local deployment-record IDs
|
|
578
|
-
are not global instance identities; team-qualified aliases are addresses, not
|
|
579
|
-
replacement identity keys. Distinct incarnations of one soul are not automatically
|
|
580
|
-
the same standing identity.
|
|
581
|
-
|
|
582
|
-
**Catalog visibility, live-instance visibility, contact permission and conversation-
|
|
583
|
-
history access are four separate grants.** Joining a wider team must not expose
|
|
584
|
-
earlier private conversations or other private instances. These are intended
|
|
585
|
-
boundaries, **not product privacy guarantees until a named messaging owner qualifies
|
|
586
|
-
the provider behavior**. Ordinary members and administrators controlling a host or
|
|
587
|
-
service are distinct access contexts; do not claim protection from administrators
|
|
588
|
-
merely because team membership is private. Until qualification, capture private
|
|
589
|
-
keys/contexts and wider-team references as choices only; do not certify enrollment
|
|
590
|
-
or privacy on their presence.
|
|
591
|
-
|
|
592
|
-
### One default provider per slot is a v1 simplification
|
|
593
|
-
|
|
594
|
-
Fundamental slots are knowledge, messaging and tasks. **Zero or one default
|
|
595
|
-
provider per slot** is the v1 product simplification, not a universal capability
|
|
596
|
-
limitation. Simultaneous Jira + GitHub is an explicit unsolved design test: can one
|
|
597
|
-
default task interface coexist with another service integration, or does the task
|
|
598
|
-
contract need named bindings? Do not call it solved or build a generalized
|
|
599
|
-
multi-provider solver before that review.
|
|
600
|
-
|
|
601
|
-
## 13. User experience and implementation boundary
|
|
602
|
-
|
|
603
|
-
A user should be able to say: "Prepare the marketing experts for this organization."
|
|
604
|
-
The onboarding expert discovers accessible definitions, proposes the appropriate
|
|
605
|
-
souls, fetches only needed sources, installs capabilities, resolves missing bindings,
|
|
606
|
-
joins authorized teams and verifies a useful first task and its consumed output.
|
|
607
|
-
|
|
608
|
-
The user should not need to understand package paths or artifact hashes. The result
|
|
609
|
-
must nevertheless be inspectable through ordinary files, CLI and GUI diagnostics,
|
|
610
|
-
without the setup expert or its original conversation remaining alive.
|
|
611
|
-
|
|
612
|
-
Available before Portable Souls (OATS 0.23.1 machinery, preserved at the baseline):
|
|
613
|
-
- Git/local package sources, selected package roots and dependency closure handling.
|
|
614
|
-
- Capability materialization, exact locks, integrity checks and executable trust.
|
|
615
|
-
- Scoped configuration, instance composition and lifecycle/provider boundaries.
|
|
616
|
-
|
|
617
|
-
Landed at `428cd9af`: capability artifact retention only, with the binding contract.
|
|
618
|
-
The installer, lock and runtime consumers are not migrated by that foundation.
|
|
619
|
-
|
|
620
|
-
Accepted infrastructure additions/changes, NOT claimed implemented here:
|
|
621
|
-
- Source-complete intrinsic capability requirements in portable soul declarations.
|
|
622
|
-
- Git-hosted logical workspace association and reciprocal remote membership.
|
|
623
|
-
- Remote exported-soul/package discovery and persistent-source preparation.
|
|
624
|
-
- Multiple immutable revisions per deployment and per-instance resolution references.
|
|
625
|
-
- The associated lock migration, default-resolution and update-policy integration.
|
|
626
|
-
- Private-team choices and honest CLI readiness; actual messaging privacy requires
|
|
627
|
-
provider qualification. Desktop feature/UX implementation comes later.
|
|
628
|
-
|
|
629
|
-
Preserve working machinery. Do not replace the scheduler, create another IAM system,
|
|
630
|
-
or introduce general federation/version-solving just to implement this proposal.
|
|
631
|
-
|
|
632
|
-
## 14. Delivery and acceptance
|
|
633
|
-
|
|
634
|
-
Follow the dependency-ordered [implementation plan](2026-09-15-portable-souls-implementation.md),
|
|
635
|
-
not the historical order of discussions. First reconcile these docs and extract
|
|
636
|
-
the acyclic storage helpers; then versioned resolution/source retention and schema;
|
|
637
|
-
then declarations, reciprocal discovery/import and preparation; then coordinated
|
|
638
|
-
consumer/digest migration and CLI diagnostics. Messaging behavior is gated by a
|
|
639
|
-
named owner and qualification. Desktop feature work is later.
|
|
640
|
-
|
|
641
|
-
Acceptance must demonstrate (not just scaffold):
|
|
642
|
-
- A fresh operator prepares without the author's private workspace config.
|
|
643
|
-
- Two layouts discover the same accessible definitions, including uncloned repos,
|
|
644
|
-
without installing discovery sources or running their scripts.
|
|
645
|
-
- Forked/unadmitted repos stay out for every member kind; source consumption is
|
|
646
|
-
not admission. Inaccessible/stale indexes neither leak protected descriptions
|
|
647
|
-
nor imply readiness.
|
|
648
|
-
- `repo:` resolves at the retained repository root, including nested souls;
|
|
649
|
-
escaping/broken symlinks fail and `path:` is visibly nonportable.
|
|
650
|
-
- Constraints beat defaults, source conflicts report both paths, and missing
|
|
651
|
-
bindings/approval fail before unsafe execution. `env` alone needs approval.
|
|
652
|
-
- Store-qualified nodes are unambiguous across stores; promotion has one explicit
|
|
653
|
-
destination and steward. Other providers use their own configuration/readiness
|
|
654
|
-
model. Public reads never silently become publication.
|
|
655
|
-
- Multiple artifacts coexist, each instance selects one per ID, and the complete
|
|
656
|
-
captured managed composition survives source/home deletion without ambient
|
|
657
|
-
substitution. Historical migration evidence is honestly graded.
|
|
658
|
-
- Explicit refresh shows last-approved and available-unapproved separately;
|
|
659
|
-
failures/offline views never claim latest, and declarative changes remain visible.
|
|
660
|
-
|
|
661
|
-
Three mandatory falsification scenarios from the accepted amendment:
|
|
662
|
-
1. **Portable adoption:** import the same public soul unchanged into an organization
|
|
663
|
-
and a standalone no-Git work target. Read public knowledge, bind an explicit
|
|
664
|
-
adopter write destination, and prepare without publisher workspace access.
|
|
665
|
-
Verify canonical source identity and exact retained revision; no copy or false
|
|
666
|
-
membership. Missing bindings report incomplete readiness.
|
|
667
|
-
2. **Private-first qualification:** two humans, two hosts each, one workspace.
|
|
668
|
-
Reuse each private team across hosts; a child or scheduled instance inherits
|
|
669
|
-
its human. Widen/narrow one representative without changing global identity or
|
|
670
|
-
silently changing knowledge bindings. Verify catalog/live discovery, inbound
|
|
671
|
-
contact and historical access separately, including other private instances
|
|
672
|
-
and administrator limitations. Requires a named messaging owner; not yet passed.
|
|
673
|
-
3. **A/B dispatch:** old instance and independent queued job retain A while a new
|
|
674
|
-
instance prepares approved B. Remove original source and prove A still executes
|
|
675
|
-
its managed lifecycle/recovery resources; the current lock must not substitute
|
|
676
|
-
B. Storage-only A/B execution is not this end-to-end proof.
|
|
677
|
-
|
|
678
|
-
Useful outputs, accepted knowledge and fresh-reader visibility are separate from
|
|
679
|
-
process launch or a delivered PR. Operational/live gates need their own evidence;
|
|
680
|
-
this documentation update supplies none.
|
|
681
|
-
|
|
682
|
-
## 15. Remaining review gates, not reopened decisions
|
|
683
|
-
|
|
684
|
-
- Parser/schema syntax for `repo:`, requires/defaults, store-qualified reads/owns,
|
|
685
|
-
imports/adoption and exports; wire versions for lock/resolution/digest and the
|
|
686
|
-
migration detail. Semantics are accepted; illustrative YAML is not a parser API.
|
|
687
|
-
- Canonical remote handling across renames/transfers and qualified identity format;
|
|
688
|
-
source moves require explicit provenance, not silent identity substitution.
|
|
689
|
-
- Named messaging owner and qualification of private-team identity, discovery,
|
|
690
|
-
contact/history boundaries and enrollment UX. No privacy claim before this gate.
|
|
691
|
-
- Simultaneous Jira + GitHub test; no speculative multi-provider solver.
|
|
692
|
-
- Recurring-schedule capture versus explicit reprepare policy wording; already
|
|
693
|
-
queued work always retains its resolution. Unattended approval is not in v1.
|
|
694
|
-
|
|
695
|
-
Resolve ambiguity with the human/contract reviewers before inventing semantics.
|
|
696
|
-
Human authorization now permits infrastructure implementation under these bounds;
|
|
697
|
-
it does not authorize integrating the held capture patch or bringing Desktop
|
|
698
|
-
feature work forward.
|
|
699
|
-
|
|
700
|
-
## Current implementation references
|
|
701
|
-
|
|
702
|
-
These provide baseline context, not proof that this proposal is implemented:
|
|
703
|
-
- Package engine (`package-engine-contract.md`, removed in 0.26)
|
|
704
|
-
- Package runtime API (`package-runtime-api.md`, removed in 0.26)
|
|
705
|
-
- [Configuration](../configuration.md)
|
|
706
|
-
- [Souls and instances](../souls-and-instances.md)
|
|
707
|
-
- [Multi-team/deployment proposal](2026-09-08-expert-assisted-deployment-proposal.md)
|
|
708
|
-
- [Execution targets](../execution-targets.md)
|