@awebai/oats 0.29.4 → 0.30.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +12 -6
- package/bin/oats.mjs +194 -50
- package/capabilities/oats-aweb/bin/oats-aweb.mjs +538 -204
- package/capabilities/oats-aweb/injects/aweb.md +1 -1
- package/capabilities/oats-aweb/lib/binding-wire.mjs +31 -22
- package/capabilities/oats-aweb/oats.json +5 -12
- package/capabilities/oats-aweb/skills/VENDORED.md +4 -4
- package/capabilities/oats-aweb/skills/aweb-team-membership/SKILL.md +1 -1
- package/capabilities/oats-aweb/skills/oats-aweb/SKILL.md +83 -13
- package/capabilities/oats-code-review/injects/reviewer.md +26 -0
- package/capabilities/oats-code-review/oats.json +16 -0
- package/capabilities/oats-code-review/skills/adversarial-review/SKILL.md +66 -0
- package/capabilities/oats-code-review/skills/review-dev-docs/SKILL.md +30 -0
- package/capabilities/oats-code-review/skills/security-review/SKILL.md +56 -0
- package/capabilities/oats-code-review/skills/simplification-review/SKILL.md +34 -0
- package/capabilities/oats-developer/injects/developer.md +38 -0
- package/capabilities/oats-developer/oats.json +17 -0
- package/capabilities/oats-developer/skills/execution-strategy/SKILL.md +43 -0
- package/capabilities/oats-developer/skills/maintain-dev-docs/SKILL.md +47 -0
- package/capabilities/oats-developer/skills/run-the-review-loop/SKILL.md +65 -0
- package/capabilities/oats-developer/skills/understand-the-spec/SKILL.md +37 -0
- package/capabilities/oats-developer/skills/worktrees/SKILL.md +36 -0
- package/capabilities/oats-engineering-expert/injects/expert.md +37 -0
- package/capabilities/oats-engineering-expert/oats.json +17 -0
- package/capabilities/oats-engineering-expert/skills/coordinate-developers/SKILL.md +37 -0
- package/capabilities/oats-engineering-expert/skills/coordinate-experts/SKILL.md +52 -0
- package/capabilities/oats-engineering-expert/skills/land-your-prs/SKILL.md +50 -0
- package/capabilities/oats-engineering-expert/skills/plan-and-spec/SKILL.md +53 -0
- package/capabilities/oats-engineering-expert/skills/verify-developer-work/SKILL.md +49 -0
- package/capabilities/oats-okf/bin/oats-okf.mjs +8 -4
- package/capabilities/oats-okf/lib/binding-wire.mjs +47 -15
- package/capabilities/oats-okf/lib/inspection.mjs +26 -7
- package/capabilities/oats-okf/lib/sources.mjs +16 -2
- package/capabilities/oats-okf/lib/worker.mjs +5 -16
- package/capabilities/oats-okf/oats.json +6 -3
- package/capabilities/oats-okf-harvest/bin/okf-harvest.mjs +2 -2
- package/capabilities/oats-okf-harvest/oats.json +3 -3
- package/capabilities/oats-okf-harvest/skills/knowledge-harvest/SKILL.md +6 -6
- package/capabilities/oats-okf-maintenance/bin/okf-maintenance.mjs +2 -2
- package/capabilities/oats-okf-maintenance/injects/maintainer.md +1 -1
- package/capabilities/oats-okf-maintenance/oats.json +2 -2
- package/capabilities/oats-okf-maintenance/skills/knowledge-review/SKILL.md +1 -1
- package/capabilities/oats-okf-maintenance/skills/okf-trigger-setup/SKILL.md +11 -23
- package/capabilities/oats-workspace-experts/injects/oats-experts.md +26 -0
- package/capabilities/oats-workspace-experts/oats.json +9 -0
- package/docs/capabilities.md +160 -171
- package/docs/capability-manifest.schema.json +6 -11
- package/docs/configuration.md +213 -64
- package/docs/design/2026-09-16-knowledge-capability-contract.md +36 -50
- package/docs/design/2026-09-23-workspace-module-contracts.md +377 -544
- package/docs/design/2026-09-26-okf-knowledge-operations.md +132 -357
- package/docs/design/2026-09-27-team-model-v2.md +97 -117
- package/docs/design/2026-09-28-automations-trust.md +38 -0
- package/docs/design/2026-09-28-soul-launch-preference.md +63 -0
- package/docs/design/HISTORY.md +65 -0
- package/docs/design/README.md +23 -54
- package/docs/desktop-cli-api.md +1787 -1777
- package/docs/desktop.md +30 -91
- package/docs/execution-targets.md +146 -292
- package/docs/first-team.md +31 -17
- package/docs/implementation.md +76 -288
- package/docs/integrations.md +118 -320
- package/docs/knowledge-capability-authoring.md +25 -52
- package/docs/knowledge-reference/acceptance.md +3 -3
- package/docs/knowledge-reference/adoption.md +1 -1
- package/docs/knowledge-reference/harvester.md +2 -2
- package/docs/knowledge-reference/package-craft.md +3 -3
- package/docs/knowledge-reference/provider-mapping.md +3 -6
- package/docs/knowledge-reference/reader-capture.md +3 -3
- package/docs/knowledge-theory.md +62 -166
- package/docs/knowledge.md +225 -404
- package/docs/layers.md +42 -97
- package/docs/oats-local.schema.json +58 -5
- package/docs/oats-membership.schema.json +1 -8
- package/docs/oats-package.schema.json +5 -5
- package/docs/oats-workspace.schema.json +8 -22
- package/docs/official-catalog.md +25 -28
- package/docs/packages.md +45 -63
- package/docs/plans/0.30-close-out.md +61 -0
- package/docs/release-lane.md +77 -0
- package/docs/release-notes/oats-framework-v1.1.3.md +10 -8
- package/docs/release-notes/v0.19.0.md +48 -147
- package/docs/release-notes/v0.19.1.md +2 -3
- package/docs/release-notes/v0.19.3.md +2 -15
- package/docs/release-notes/v0.20.0.md +0 -15
- package/docs/release-notes/v0.22.0.md +71 -138
- package/docs/release-notes/v0.22.1.md +42 -90
- package/docs/release-notes/v0.22.10.md +1 -1
- package/docs/release-notes/v0.22.11.md +1 -47
- package/docs/release-notes/v0.22.12.md +4 -13
- package/docs/release-notes/v0.22.13.md +1 -42
- package/docs/release-notes/v0.22.14.md +3 -11
- package/docs/release-notes/v0.22.15.md +1 -46
- package/docs/release-notes/v0.22.16.md +6 -8
- package/docs/release-notes/v0.22.18.md +1 -99
- package/docs/release-notes/v0.22.19.md +3 -14
- package/docs/release-notes/v0.22.2.md +6 -15
- package/docs/release-notes/v0.22.3.md +0 -1
- package/docs/release-notes/v0.22.4.md +1 -14
- package/docs/release-notes/v0.22.5.md +2 -12
- package/docs/release-notes/v0.22.6.md +0 -3
- package/docs/release-notes/v0.23.0.md +9 -25
- package/docs/release-notes/v0.23.1.md +9 -25
- package/docs/release-notes/v0.23.2.md +2 -4
- package/docs/release-notes/v0.24.0.md +56 -97
- package/docs/release-notes/v0.24.1.md +7 -11
- package/docs/release-notes/v0.24.10.md +34 -45
- package/docs/release-notes/v0.24.11.md +12 -20
- package/docs/release-notes/v0.24.12.md +35 -48
- package/docs/release-notes/v0.24.13.md +34 -41
- package/docs/release-notes/v0.24.2.md +9 -13
- package/docs/release-notes/v0.24.3.md +7 -11
- package/docs/release-notes/v0.24.4.md +6 -6
- package/docs/release-notes/v0.24.5.md +6 -10
- package/docs/release-notes/v0.24.6.md +2 -5
- package/docs/release-notes/v0.24.7.md +46 -75
- package/docs/release-notes/v0.24.8.md +58 -96
- package/docs/release-notes/v0.24.9.md +38 -54
- package/docs/release-notes/v0.25.0.md +59 -76
- package/docs/release-notes/v0.25.1.md +57 -81
- package/docs/release-notes/v0.25.2.md +51 -70
- package/docs/release-notes/v0.25.3.md +11 -13
- package/docs/release-notes/v0.25.4.md +9 -13
- package/docs/release-notes/v0.25.5.md +3 -5
- package/docs/release-notes/v0.25.6.md +20 -29
- package/docs/release-notes/v0.25.7.md +5 -7
- package/docs/release-notes/v0.25.8.md +26 -39
- package/docs/release-notes/v0.26.0.md +175 -646
- package/docs/release-notes/v0.27.0.md +4 -5
- package/docs/release-notes/v0.27.1.md +4 -6
- package/docs/release-notes/v0.27.2.md +1 -1
- package/docs/release-notes/v0.28.0.md +57 -124
- package/docs/release-notes/v0.29.0.md +89 -208
- package/docs/release-notes/v0.29.1.md +1 -1
- package/docs/release-notes/v0.29.2.md +3 -4
- package/docs/release-notes/v0.30.0.md +205 -0
- package/docs/schedules.md +280 -363
- package/docs/servers.md +99 -117
- package/docs/soul.schema.json +2 -9
- package/docs/souls-and-instances.md +145 -158
- package/docs/workspaces.md +132 -215
- package/lib/automations.mjs +21 -6
- package/lib/core.mjs +226 -74
- package/lib/instance-events.mjs +1 -1
- package/lib/instance-inspect.mjs +109 -34
- package/lib/instance-lifecycle.mjs +14 -1
- package/lib/instance-resolution.mjs +26 -27
- package/lib/launch-preference.mjs +87 -0
- package/lib/materialize.mjs +3 -3
- package/lib/resolve.mjs +29 -87
- package/lib/schedule.mjs +1 -1
- package/lib/teams-verbs.mjs +195 -0
- package/lib/teams.mjs +190 -0
- package/lib/triggers.mjs +2 -2
- package/lib/workspace.mjs +54 -147
- package/package-catalog.json +9 -15
- package/package.json +1 -1
- package/skills/oats-getting-started/SKILL.md +25 -13
- package/capabilities/oats-review/injects/review.md +0 -69
- package/capabilities/oats-review/oats.json +0 -10
- package/capabilities/oats-review/skills/code-review/SKILL.md +0 -44
- package/capabilities/oats-review/skills/security-review/SKILL.md +0 -59
- package/docs/conventions.md +0 -90
- package/docs/design/2026-09-07-architecture-reassessment.md +0 -131
- package/docs/design/2026-09-07-desktop-souls-capabilities.md +0 -50
- package/docs/design/2026-09-07-mobile-agent-management-proposal.md +0 -228
- package/docs/design/2026-09-08-expert-assisted-deployment-proposal.md +0 -558
- package/docs/design/2026-09-13-knowledge-and-memory-direction.md +0 -744
- package/docs/design/2026-09-13-knowledge-implementation.md +0 -127
- package/docs/design/2026-09-13-knowledge-location-contract.md +0 -340
- package/docs/design/2026-09-14-artifact-retention-contract.md +0 -190
- package/docs/design/2026-09-14-portable-souls-and-git-workspaces.md +0 -708
- package/docs/design/2026-09-14-portable-souls-contract-amendments.md +0 -85
- package/docs/design/2026-09-14-portable-souls-explainer.md +0 -750
- package/docs/design/2026-09-15-captured-dispatch.md +0 -127
- package/docs/design/2026-09-15-captured-resolution-records.md +0 -143
- package/docs/design/2026-09-15-package-preparation.md +0 -100
- package/docs/design/2026-09-15-portable-data-contract.md +0 -121
- package/docs/design/2026-09-15-portable-declarations.md +0 -189
- package/docs/design/2026-09-15-portable-souls-handoff.md +0 -150
- package/docs/design/2026-09-15-portable-souls-implementation.md +0 -417
- package/docs/design/2026-09-15-selection-lock-and-approval.md +0 -122
- package/docs/design/2026-09-15-source-observation.md +0 -119
- package/docs/design/2026-09-16-captured-admission.md +0 -77
- package/docs/design/2026-09-16-captured-helper-dispatch.md +0 -105
- package/docs/design/2026-09-16-captured-launch-inputs.md +0 -42
- package/docs/design/2026-09-16-command-profile-preparation.md +0 -86
- package/docs/design/2026-09-16-fresh-install-first-rollout.md +0 -47
- package/docs/design/2026-09-16-fresh-operator-walkthrough.md +0 -282
- package/docs/design/2026-09-16-messaging-capability-contract.md +0 -59
- package/docs/design/2026-09-16-portable-migration-evidence.md +0 -158
- package/docs/design/2026-09-16-portable-onboarding.md +0 -179
- package/docs/design/2026-09-16-prepare-request-transport.md +0 -26
- package/docs/design/2026-09-16-provider-binding-codecs.md +0 -98
- package/docs/design/2026-09-16-provider-binding-wire.md +0 -274
- package/docs/design/2026-09-17-capability-helper-input-contract.md +0 -95
- package/docs/design/2026-09-17-captured-backend-parity.md +0 -53
- package/docs/design/2026-09-17-captured-native-start.md +0 -58
- package/docs/design/2026-09-17-portable-boundary-hookup.md +0 -19
- package/docs/design/2026-09-17-portable-boundary-resources.md +0 -52
- package/docs/design/2026-09-17-public-captured-start.md +0 -108
- package/docs/design/2026-09-17-public-prepare-request.md +0 -90
- package/docs/design/2026-09-18-captured-pi-host.md +0 -205
- package/docs/design/2026-09-18-first-cut-release-checklist.md +0 -131
- package/docs/design/2026-09-18-herdr-protocol-compatibility.md +0 -60
- package/docs/design/2026-09-20-redesign-program-board.md +0 -142
- package/docs/design/2026-09-20-workspace-and-portable-adoption-plan.md +0 -289
- package/docs/design/2026-09-20-workspace-onboarding-public.md +0 -207
- package/docs/design/2026-09-22-desktop-parity-seams.md +0 -58
- package/docs/design/2026-09-23-simplified-workspace-model.md +0 -711
- package/docs/design/2026-09-23-workspace-v2-implementation-plan.md +0 -65
- package/docs/design/2026-09-24-desktop-phase-f-boundary.md +0 -242
- package/docs/design/2026-09-24-phase-d-plan.md +0 -305
- package/docs/design/2026-09-25-teams-contract.md +0 -258
- package/docs/design/2026-09-26-desktop-design-brief-architecture.md +0 -241
- package/docs/design/desktop-ux-plan.md +0 -362
- package/docs/design/launch-configurations.md +0 -168
- package/docs/design/okf-mirror-provenance.md +0 -105
- package/docs/design/operations-contract.md +0 -141
- package/docs/oats-member.schema.json +0 -38
- package/skills/integration-authoring/SKILL.md +0 -84
- package/skills/oats-support/SKILL.md +0 -79
- package/skills/skill-craft/SKILL.md +0 -109
- package/skills/soul-craft/SKILL.md +0 -116
|
@@ -1,750 +0,0 @@
|
|
|
1
|
-
_OATS architecture · accepted for infrastructure implementation · reconciled 15 September 2026_
|
|
2
|
-
|
|
3
|
-
# Portable Souls
|
|
4
|
-
|
|
5
|
-
> **Design accepted; implementation authorization is now explicit.** Baseline
|
|
6
|
-
> `428cd9af615652c4a93d754c1106674abd18545b` contains storage retention only, not
|
|
7
|
-
> migrated consumers or private-team guarantees. Desktop feature work is **later**.
|
|
8
|
-
|
|
9
|
-
How a multi-repository organization can publish expert souls, discover them through
|
|
10
|
-
existing Git access and prepare them on different machines, without an OATS registry:
|
|
11
|
-
private-first messaging choices and captured software compositions are the accepted
|
|
12
|
-
target, **not certified deployed behavior**.
|
|
13
|
-
|
|
14
|
-
> The **soul** declares what it needs and where it comes from.
|
|
15
|
-
> The **workspace** declares admission, defaults, knowledge stores, teams and catalogs.
|
|
16
|
-
> The **local deployment** resolves, installs, binds credentials and keeps state.
|
|
17
|
-
|
|
18
|
-
**Example boundary:** all LFX repository/package names, roles, versions, team
|
|
19
|
-
addresses, local layouts and scenarios below are **illustrations, not an inventory
|
|
20
|
-
or facts about a real deployment**. They are not claims that a named repository,
|
|
21
|
-
package export, release or provider behavior exists. No credentials or transcripts
|
|
22
|
-
are included. YAML shapes need parser/schema review; `repo:` semantics are accepted.
|
|
23
|
-
The [reconciled proposal](2026-09-14-portable-souls-and-git-workspaces.md),
|
|
24
|
-
[binding handoff](2026-09-15-portable-souls-handoff.md),
|
|
25
|
-
[public amendment](2026-09-14-portable-souls-contract-amendments.md) and
|
|
26
|
-
[implementation ledger](2026-09-15-portable-souls-implementation.md) are the common
|
|
27
|
-
baseline. There is no separate pre-review policy on this page.
|
|
28
|
-
|
|
29
|
-
_Concepts_
|
|
30
|
-
|
|
31
|
-
## The vocabulary
|
|
32
|
-
|
|
33
|
-
Every later section uses these words precisely. The LFX column illustrates the accepted model, not an actual checkout or live membership.
|
|
34
|
-
|
|
35
|
-
| Concept | What it is | In LFX |
|
|
36
|
-
|---|---|---|
|
|
37
|
-
| Soul | A durable expert definition: role, procedural curriculum, capability requirements, knowledge nodes, team aliases. Not a running process. | `self-serve-expert`, `self-serve-ux-expert`, `member-service-expert`, `mcp-data-expert`. Project experts can be committed in their own repositories' `agents/` directory and shared; local-only definitions are not a publication mechanism. |
|
|
38
|
-
| Instance | One incarnation of a soul: its own home, task, effective composition, runtime identity. Retired when done. | `self-serve-expert-1` working a PR in a worktree of `lfx-self-serve`. |
|
|
39
|
-
| Capability | A reusable runtime surface: skills, instructions, commands and hooks, helper agents. May implement a fundamental layer. | `lfx.local-review` (adversarial review workflows), `lfx.service-dev`, `lfx.ui-dev`, `oats.okf` (knowledge), `oats.aweb` (messaging), `oats.jira` (tasks). |
|
|
40
|
-
| Package | The acquisition and update unit: exports one or more capabilities, with payload and dependency declarations. | `lfx-engineering-capabilities#packages/local-review`; `awebai/oats-okf`. |
|
|
41
|
-
| Fundamental layer | Knowledge, messaging, tasks. Zero or one default implementation per slot in an instance is a v1 simplification, provisional; implementations are replaceable. | OKF, aweb, Jira as illustrative choices; a default fills an open role but cannot override a hard requirement. |
|
|
42
|
-
| Source repository | The versioned home of souls or packages. In the beginning this is simply the project repository itself: souls live under its conventional `agents/` directory, next to the code they work on. A dedicated souls repository is an option for souls that span repositories, not the starting point. | `lfx-self-serve/agents/self-serve-expert/`, `lfx-v2-member-service/agents/member-service-expert/`; `lfx-engineering-experts` for experts that span repositories (`mcp-data-expert`, `org-dashboard-expert`, `individual-dashboard-expert`); `lfx-engineering-capabilities` for packages. |
|
|
43
|
-
| Work target | The repository or directory an instance operates on. Not necessarily the soul's source repository. | `lfx-v2-member-service`, worked by a soul that may live in `lfx-engineering-experts`. |
|
|
44
|
-
| Workspace definition | A Git-hosted organisational authority: admitted repositories, layer defaults, knowledge stores, team references, catalogs. No secrets. | An illustrative `lfx-workspace` repository, separate from local deployment configuration. |
|
|
45
|
-
| Local deployment | One operator's installed realisation: artifacts, lock, repository mappings, credentials, trust approvals, private team, instance compositions. | Operator A's root, operator B's different root, or a laptop with only `lfx-self-serve` cloned. |
|
|
46
|
-
| Team | A messaging provider's membership boundary; catalog/live visibility, contact and history are separate grants requiring qualification. | `lfx` (everyone), `self-serve`, `platform`, `marketing`. |
|
|
47
|
-
| Private team | Intended per-human/workspace team for messaging-enabled instances, reused across hosts; wider teams are opt-in. No privacy guarantee until a named owner qualifies the provider. | Human A plus qualified workspace identity is the key, not a username or alias. |
|
|
48
|
-
| Knowledge store and node | Durable knowledge outside souls. Default OKF uses store-qualified nodes, one steward per node and explicit promotion destinations; other providers own their models. | `lfx-knowledge` with nodes such as `self-serve-service`, `lfx-review-conventions`. |
|
|
49
|
-
| Artifact and lock | Immutable capability artifact with package provenance. The lock holds new-preparation choices; captured resolutions outside homes govern instances/jobs. | `lfx.local-review / 4b7e02` selected by three instances; `lfx.local-review / c91a4f` by a fourth. |
|
|
50
|
-
| Channel and pin | A moving selector (`@main`, a release channel) or a fixed one (`@v4.1.0`, a commit). Resolved once per instance into an artifact. | Marketing follows `@main`; platform pins during a release. |
|
|
51
|
-
|
|
52
|
-
_Why_
|
|
53
|
-
|
|
54
|
-
## The fundamental issues
|
|
55
|
-
|
|
56
|
-
The symptoms (an uncommitted config, a gitignored `local-agents/` folder) are downstream of five structural problems. Each one is something the architecture has to answer, not something a tidier config file fixes.
|
|
57
|
-
|
|
58
|
-
| Issue | Root cause | Illustrative failure | What the design does |
|
|
59
|
-
|---|---|---|---|
|
|
60
|
-
| Expertise is trapped on machines | A soul is an accumulation of expertise, but its definition depends on things that exist only on the author's laptop. So the organisation cannot own, share or build on its own experts; each person re-creates them. | An unpublished `self-serve-ux-expert` depends on its author's local setup; colleagues must reconstruct its dependencies. | Souls become self-describing: every requirement carries its source, every knowledge node its store. A committed soul's *software sources* are complete; deployment inputs (credentials, team enrolment, store access) can still be missing and are reported as such. (see: Files) |
|
|
61
|
-
| Identity is inferred from location | What something is, where it came from, who admitted it and where it runs are all read off the filesystem. Nothing is addressable independently of a machine, so nothing can be reasoned about, trusted or moved. | A naive folder-based rule mistakes a fork or stray clone for a member and misses real members elsewhere; provenance becomes a folder name. | Qualified identities and reciprocal Git declarations. Source, install location, work target and team membership are four separate facts. (see: Org) |
|
|
62
|
-
| There is no organisational unit for agents | Repositories exist and machines exist; "LFX's agents" does not exist anywhere as a thing that can admit members, set defaults, list its knowledge or be asked what experts it has. | Without declarations, answering "which experts exist and where?" depends on the original operator instead of inspectable data. | A Git-hosted workspace definition: admission, defaults, knowledge stores, team references, catalogs. Discoverable from any member repository with existing GitHub access. (see: Onboarding) |
|
|
63
|
-
| Freshness and reproducibility fight | Humans want the latest and do not want to manage version numbers. Running agents need an exact, immutable composition or their behaviour changes under them and they cannot be retired or recovered safely. One mutable pointer cannot satisfy both. | Updating `lfx.local-review` in the shared store changes it for every instance already running, including a review sweep queued yesterday. Pinning it instead means someone manages versions by hand. | Channels and pins for humans; one immutable resolution per instance for machines; several artifacts per capability side by side; approval per revision for anything executable. (see: Updates) |
|
|
64
|
-
| Access is one blunt grant | Reading a repository, executing its hooks, joining a team, seeing a colleague's running agents and reading their conversations are five different permissions. When they are one, either too much is exposed or everything is locked. | Anyone who can read `lfx-self-serve` would, under a naive design, see and contact every instance spawned from it, including a manager reading an engineer's agents' mail. | Catalog/live visibility, contact and history are separate grants; private-first is the intended default pending provider qualification, not inferred from source access. (see: Teams) · (see: Permissions) |
|
|
65
|
-
|
|
66
|
-
A sixth constraint sits across all five: solving them must not add infrastructure LFX has to operate. No registry service, no discovery daemon, no OATS user database. Git hosting, the messaging provider and the machines people already have are the whole substrate.
|
|
67
|
-
|
|
68
|
-
_The model_
|
|
69
|
-
|
|
70
|
-
## Three responsibilities, kept apart
|
|
71
|
-
|
|
72
|
-
The design separates what travels with a soul, what the organisation asserts, and what one operator has actually installed. Source location, installation location, work target and team membership are four different things and none may be inferred from another.
|
|
73
|
-
|
|
74
|
-
**Soul**
|
|
75
|
-
|
|
76
|
-
_Owned by the soul's maintainer · committed with the soul_
|
|
77
|
-
|
|
78
|
-
- Role and procedural curriculum
|
|
79
|
-
- `requires` constraints and `defaults` fallbacks; each intrinsic capability has a **source-complete** reference: repository, package path, revision policy
|
|
80
|
-
- Source-complete knowledge locators or explicitly inherited bindings; store-qualified reads and optional owned-node destinations for OKF
|
|
81
|
-
- Logical team aliases (`self-serve`, `lfx`), never a provider's real team id
|
|
82
|
-
- Fundamental-layer needs it does not care about (any messaging provider)
|
|
83
|
-
|
|
84
|
-
**Workspace definition**
|
|
85
|
-
|
|
86
|
-
_Owned by workspace maintainers · the `lfx-workspace` repository_
|
|
87
|
-
|
|
88
|
-
- Admitted member repositories
|
|
89
|
-
- Default provider per fundamental layer
|
|
90
|
-
- The organisation's knowledge stores and tools, so authors and onboarding can find them
|
|
91
|
-
- Named team references mapped to provider-qualified ids
|
|
92
|
-
- Catalog sources for capability packages
|
|
93
|
-
- No secrets, no machine state
|
|
94
|
-
|
|
95
|
-
**Local deployment**
|
|
96
|
-
|
|
97
|
-
_Owned by one operator · on one machine_
|
|
98
|
-
|
|
99
|
-
- Retained artifacts; lock choices for new preparation and separate captured resolutions outside homes
|
|
100
|
-
- Repository mappings, work targets
|
|
101
|
-
- Credentials, knowledge-store connections
|
|
102
|
-
- The human's private team and each instance's wider memberships
|
|
103
|
-
- Executable trust approvals
|
|
104
|
-
- Per-instance compositions
|
|
105
|
-
|
|
106
|
-
Two boundaries fall out of this. A soul can carry the *software* needed to talk to Jira or a knowledge store; it cannot carry anyone's credentials, enrolment or paths, so a missing input produces an explicit `needs configuration` rather than a launch that pretends to have succeeded. And discovery may *advertise* a capability without *activating* it: only what a soul actually requires, plus its dependency closure, is installed.
|
|
107
|
-
|
|
108
|
-
_At org level_
|
|
109
|
-
|
|
110
|
-
## LFX, drawn
|
|
111
|
-
|
|
112
|
-
Illustrative topology, not a deployment inventory. Labels [new] indicate possible additions, not approved repository creation. A repository may hold several independently updated packages; every listed member follows the same reciprocal rule.
|
|
113
|
-
|
|
114
|
-
> **Souls live in project repositories first**
|
|
115
|
-
> - The default home of a soul is the repository it works on, under that repository's `agents/` directory: `lfx-self-serve/agents/self-serve-expert/`.
|
|
116
|
-
> - A repository carries as many repo-related souls as it wants. `lfx-self-serve` can hold `self-serve-expert`, `self-serve-ux-expert` and `self-serve-accessibility-expert` side by side, each exported.
|
|
117
|
-
> - Unpublished project-related definitions can be made portable there without a central soul repository.
|
|
118
|
-
> - A separate experts repository such as `lfx-engineering-experts` is for experts whose subject spans repositories (`mcp-data-expert`, `org-dashboard-expert`, `individual-dashboard-expert`), or later a marketing team with no code repository. Nothing requires souls to be centralised.
|
|
119
|
-
> - Souls are named for the expertise they hold, not for a job title: `self-serve-ux-expert`, not "UX engineer".
|
|
120
|
-
|
|
121
|
-
- _workspace definition_: **lfx-workspace (new)** — members · layer defaults · knowledge stores · teams (lfx, self-serve, platform, marketing) · catalogs
|
|
122
|
-
|
|
123
|
-
(admits / backlink)
|
|
124
|
-
|
|
125
|
-
- _capability repository_: **lfx-engineering-capabilities** — `packages/local-review` · `packages/pr-flow` · `packages/service-dev` · `packages/ui-dev` · `packages/mcp-playbooks`
|
|
126
|
-
- _experts repository · subjects that span repositories_: **lfx-engineering-experts** — mcp-data-expert · org-dashboard-expert · individual-dashboard-expert
|
|
127
|
-
- _souls repository_: **lfx-marketing-souls (new)** — campaign-strategy-expert · newsletter-strategy-expert · community-content-expert
|
|
128
|
-
- _project repository · carries its own souls_: **lfx-self-serve** — `agents/self-serve-expert` · `agents/self-serve-ux-expert` · `agents/self-serve-accessibility-expert` · `packages/self-serve-dev` (project-local capability)
|
|
129
|
-
- _project repositories · each carries its own souls_: **lfx-v2-member-service, lfx-v2-meeting-service, lfx-v2-committee-service, …** — `agents/member-service-expert`, `agents/member-service-salesforce-expert`, `agents/meeting-service-expert`, … sharing lfx.local-review and lfx.service-dev
|
|
130
|
-
- _knowledge store_: **lfx-knowledge (new)** — one illustrative default store, not a one-store limit · explicit node stewards/destinations · default OKF promotion
|
|
131
|
-
|
|
132
|
-
_Sources that are not membership (see Reciprocal membership)_
|
|
133
|
-
|
|
134
|
-
- *every developer soul* → lfx-engineering-capabilities#packages/local-review
|
|
135
|
-
- *self-serve-expert* → its own repo, `repo:packages/self-serve-dev`
|
|
136
|
-
- *workspace defaults* → awebai/oats-okf, oats.aweb, oats.jira (third party: no backlink, not admitted)
|
|
137
|
-
|
|
138
|
-
### Shared capabilities in `lfx-engineering-capabilities`
|
|
139
|
-
|
|
140
|
-
One repository, several independently updated package roots. This illustrative grouping preserves examples of shared craft; it is neither an inventory nor a packaging decision.
|
|
141
|
-
|
|
142
|
-
| Package | Capability | What it groups |
|
|
143
|
-
|---|---|---|
|
|
144
|
-
| packages/local-review | `lfx.local-review` | Adversarial review workflows: the per-repository convention reviewers, the learnings reviewers fed by each repo's review knowledge base, and the general reviewer, launched together after every commit. |
|
|
145
|
-
| packages/pr-flow | `lfx.pr-flow` | Branching, PR readiness and preflight conventions; the pre-PR full-branch sweep. |
|
|
146
|
-
| packages/service-dev | `lfx.service-dev` | The Go service craft shared by the v2 services: Goa design and generated-code boundaries, NATS, FGA, indexer contracts, Helm chart wiring. |
|
|
147
|
-
| packages/ui-dev | `lfx.ui-dev` | UI conventions shared by `lfx-v2-ui` and `lfx-self-serve`: component patterns, accessibility, upstream API validation. |
|
|
148
|
-
| packages/mcp-playbooks | `lfx.mcp-playbooks` | MCP playbooks that `mcp-data-expert` could share with other MCP-facing souls. |
|
|
149
|
-
|
|
150
|
-
Souls pick from these individually: `self-serve-ux-expert` needs `lfx.ui-dev` and `lfx.local-review`, not `lfx.service-dev`. Only what a soul requires is installed.
|
|
151
|
-
|
|
152
|
-
_Admission_
|
|
153
|
-
|
|
154
|
-
## Membership is reciprocal, for every member
|
|
155
|
-
|
|
156
|
-
A repository belongs to the LFX workspace when two independent declarations agree: the workspace **admits** the repository, and the repository **names** the workspace. Neither alone is enough. This is the general rule for organisational membership; it does not care what the repository contains.
|
|
157
|
-
|
|
158
|
-
```
|
|
159
|
-
eligible(operator, repository, workspace) =
|
|
160
|
-
operator can read lfx-workspace
|
|
161
|
-
AND operator can read repository
|
|
162
|
-
AND lfx-workspace admits repository
|
|
163
|
-
AND repository identifies lfx-workspace
|
|
164
|
-
```
|
|
165
|
-
|
|
166
|
-
Why both directions: admission alone would let the workspace claim any public repository; a backlink alone would let any fork or copy join by keeping one line. Together they mean a member is something both sides chose, at recorded revisions, and nothing can be faked by moving folders or forking. Identities are qualified (canonical remote, provider repository id), so renames and transfers are handled explicitly rather than by whichever same-named folder wins.
|
|
167
|
-
|
|
168
|
-
### It applies to every kind of member
|
|
169
|
-
|
|
170
|
-
The rule is the same whether the repository holds code, souls, packages or knowledge. What admission *unlocks* differs by what the repository exports.
|
|
171
|
-
|
|
172
|
-
| Member | Example | Its backlink says | Admission makes it |
|
|
173
|
-
|---|---|---|---|
|
|
174
|
-
| Project repository | `lfx-self-serve`, `lfx-v2-member-service` | `workspace:` plus the souls it exports from its own `agents/`, and any project-local package | A candidate work target and source of souls discoverable with required repository access; preparation has separate readiness gates. |
|
|
175
|
-
| Experts repository | `lfx-engineering-experts`, `lfx-marketing-souls` | `workspace:` plus its exported souls | A source of souls whose subjects span repositories. |
|
|
176
|
-
| Capabilities repository | `lfx-engineering-capabilities` | `workspace:` plus its package roots | A catalog entry: its packages are advertised to soul authors. Nothing is installed by admission alone. |
|
|
177
|
-
| Knowledge repository | `lfx-knowledge` | `workspace:` plus the store it exposes | A listed knowledge store: authors and the onboarding expert can find it, harvesters can be pointed at it. Reading it still needs GitHub access to it. |
|
|
178
|
-
|
|
179
|
-
**lfx-v2-member-service/oats.yaml (a project repository)**
|
|
180
|
-
|
|
181
|
-
```yaml
|
|
182
|
-
workspace: git:github.com/linuxfoundation/lfx-workspace
|
|
183
|
-
|
|
184
|
-
exports:
|
|
185
|
-
souls:
|
|
186
|
-
- path: agents/member-service-expert
|
|
187
|
-
- path: agents/member-service-salesforce-expert
|
|
188
|
-
```
|
|
189
|
-
|
|
190
|
-
**lfx-knowledge/oats.yaml (a knowledge repository)**
|
|
191
|
-
|
|
192
|
-
```yaml
|
|
193
|
-
workspace: git:github.com/linuxfoundation/lfx-workspace
|
|
194
|
-
|
|
195
|
-
exports:
|
|
196
|
-
knowledge:
|
|
197
|
-
- store: . # this repository is the store
|
|
198
|
-
description: LFX expert knowledge, soul-owned nodes
|
|
199
|
-
```
|
|
200
|
-
|
|
201
|
-
### What is not membership
|
|
202
|
-
|
|
203
|
-
- **Consuming a source.** The workspace defaults point at `awebai/oats-okf`, `oats.aweb` and `oats.jira`; souls may point at third-party packages. None of those repositories backlink, none are admitted, none become LFX members. A source declaration grants no membership, no execution trust and no credentials.
|
|
204
|
-
- **A fork.** A personal fork of `lfx-engineering-experts` still carries `workspace: linuxfoundation/lfx-workspace`. The workspace does not list the fork, so it is not a member: its souls are not discoverable as LFX's and its packages are not catalogued.
|
|
205
|
-
- **A neighbouring folder.** Something cloned under `~/lfx` that neither backlinks nor is admitted is just a directory.
|
|
206
|
-
- **A public reusable soul repository.** It cannot backlink to every organisation that uses it, so it is consumed, not admitted: LFX *imports* the soul by reference (below).
|
|
207
|
-
|
|
208
|
-
### Importing an external soul
|
|
209
|
-
|
|
210
|
-
The accepted contract resolves the external-adoption gap: A soul that lives in a repository LFX cannot admit is used by **reference, never by copy**. The reference has four fields: canonical source repository, exported soul path, revision selector, adopter-local alias. Preparation retains the exact resolved revision and the source files the soul needs; the upstream soul identity, the revision and the local alias stay distinct, so a newer revision is the same soul and a renamed alias is not a new one.
|
|
211
|
-
|
|
212
|
-
```
|
|
213
|
-
# lfx-workspace/oats-workspace.yaml
|
|
214
|
-
imports:
|
|
215
|
-
- source: git:github.com/some-org/mcp-experts
|
|
216
|
-
soul: agents/mcp-data-expert
|
|
217
|
-
revision: v2.3.0 # pin or channel, resolved once per prepare
|
|
218
|
-
alias: mcp-data-expert
|
|
219
|
-
adoption: # workspace-side defaults for this import, keyed to the qualified upstream identity
|
|
220
|
-
teams: { experts: platform } # advertises a destination; does not enrol
|
|
221
|
-
knowledge-destination: lfx-knowledge
|
|
222
|
-
tasks: oats.jira # rebinds a default; cannot replace a hard requirement
|
|
223
|
-
```
|
|
224
|
-
|
|
225
|
-
- The workspace advertises the import in its catalog; the source repository is not admitted and needs no backlink. Private sources still need GitHub access.
|
|
226
|
-
- A standalone prepare accepts the identical reference with no workspace at all.
|
|
227
|
-
- Adoption defaults on the entry may bind extension points and rebind rebindable defaults; a spawn-time choice may override them within the same bounds. Neither edits the soul.
|
|
228
|
-
- The imported soul's original organisation never becomes a second source of policy; the instance selects exactly one workspace context.
|
|
229
|
-
|
|
230
|
-
Adding a member is two reviewed changes: a PR to `lfx-workspace` adding one line to `members`, and a PR to the new repository adding its `oats.yaml`. Removing a member is either one. Branch protection on both sides is the review process; no OATS service is involved.
|
|
231
|
-
|
|
232
|
-
_Concretely_
|
|
233
|
-
|
|
234
|
-
## What the files say
|
|
235
|
-
|
|
236
|
-
Illustrative syntax from the proposal, not an agreed schema. What matters is the shape: each file says only what its owner is entitled to say.
|
|
237
|
-
|
|
238
|
-
**lfx-self-serve/agents/self-serve-expert/soul.yaml**
|
|
239
|
-
|
|
240
|
-
Illustrative soul declaration as **pseudoconfiguration**, not current runnable
|
|
241
|
-
configuration (nesting requires parser/schema review):
|
|
242
|
-
|
|
243
|
-
```text
|
|
244
|
-
name: self-serve-expert
|
|
245
|
-
description: Ships lfx-self-serve features through reviewed PRs
|
|
246
|
-
|
|
247
|
-
requires: # hard constraints, never erased by an override
|
|
248
|
-
capabilities:
|
|
249
|
-
lfx.local-review:
|
|
250
|
-
source: git:github.com/linuxfoundation/lfx-engineering-capabilities@main#packages/local-review
|
|
251
|
-
lfx.self-serve-dev:
|
|
252
|
-
source: repo:packages/self-serve-dev # root of retained source repository
|
|
253
|
-
messaging: any # no concrete provider => needs configuration
|
|
254
|
-
tasks: any
|
|
255
|
-
|
|
256
|
-
defaults: # fallbacks rebindable within requirements
|
|
257
|
-
tasks:
|
|
258
|
-
capability: oats.jira
|
|
259
|
-
source: git:github.com/awebai/oats-jira@v1#oats-package
|
|
260
|
-
|
|
261
|
-
knowledge: # OKF payload, NOT a mandatory kernel node schema
|
|
262
|
-
reads:
|
|
263
|
-
- store: git:github.com/linuxfoundation/lfx-knowledge@main
|
|
264
|
-
node: lfx-platform-architecture
|
|
265
|
-
- store: git:github.com/linuxfoundation/lfx-knowledge@main
|
|
266
|
-
node: lfx-review-conventions
|
|
267
|
-
owns:
|
|
268
|
-
- node: self-serve-service # inherits explicitly selected write binding
|
|
269
|
-
- node: self-serve-ui-patterns
|
|
270
|
-
destination: git:github.com/linuxfoundation/lfx-knowledge@main
|
|
271
|
-
|
|
272
|
-
teams: [self-serve, lfx] # opt-in aliases, not automatic wider enrollment
|
|
273
|
-
```
|
|
274
|
-
|
|
275
|
-
These conceptual fields require parser review, including how a fixed store source
|
|
276
|
-
is distinguished from a rebindable default. `owns` without a destination does not
|
|
277
|
-
invent a store: no explicit write binding means `needs configuration`. Each resolved
|
|
278
|
-
address includes store plus node; equal leaf names in different stores never collide.
|
|
279
|
-
All provider/version/team labels below are hypothetical, not install instructions.
|
|
280
|
-
|
|
281
|
-
**lfx-workspace/oats-workspace.yaml**
|
|
282
|
-
|
|
283
|
-
```yaml
|
|
284
|
-
name: lfx
|
|
285
|
-
|
|
286
|
-
members:
|
|
287
|
-
- github.com/linuxfoundation/lfx-engineering-capabilities # packages
|
|
288
|
-
- github.com/linuxfoundation/lfx-engineering-experts # souls
|
|
289
|
-
- github.com/linuxfoundation/lfx-marketing-souls # souls
|
|
290
|
-
- github.com/linuxfoundation/lfx-knowledge # knowledge store
|
|
291
|
-
- github.com/linuxfoundation/lfx-self-serve # project + its souls
|
|
292
|
-
- github.com/linuxfoundation/lfx-v2-member-service # project + its souls
|
|
293
|
-
- github.com/linuxfoundation/lfx-v2-meeting-service
|
|
294
|
-
# … one line per admitted repository, whatever it holds
|
|
295
|
-
|
|
296
|
-
defaults:
|
|
297
|
-
knowledge: { capability: oats.okf, source: git:github.com/awebai/oats-okf@v2#oats-package }
|
|
298
|
-
messaging: { capability: oats.aweb, source: git:github.com/awebai/oats-aweb@v1#oats-package }
|
|
299
|
-
tasks: { capability: oats.jira, source: git:github.com/awebai/oats-jira@v1#oats-package }
|
|
300
|
-
|
|
301
|
-
knowledge: # discoverability: where LFX keeps knowledge
|
|
302
|
-
stores:
|
|
303
|
-
- git:github.com/linuxfoundation/lfx-knowledge # one store for now; more can be listed later
|
|
304
|
-
|
|
305
|
-
teams:
|
|
306
|
-
lfx: aweb:lfx.aweb.ai/lfx
|
|
307
|
-
self-serve: aweb:lfx.aweb.ai/self-serve
|
|
308
|
-
platform: aweb:lfx.aweb.ai/platform
|
|
309
|
-
marketing: aweb:lfx.aweb.ai/marketing
|
|
310
|
-
private: per-human # default: one private team per person
|
|
311
|
-
|
|
312
|
-
catalogs:
|
|
313
|
-
- git:github.com/linuxfoundation/lfx-engineering-capabilities
|
|
314
|
-
```
|
|
315
|
-
|
|
316
|
-
**lfx-engineering-experts/oats.yaml (member repository backlink + export index)**
|
|
317
|
-
|
|
318
|
-
```yaml
|
|
319
|
-
workspace: git:github.com/linuxfoundation/lfx-workspace
|
|
320
|
-
|
|
321
|
-
exports:
|
|
322
|
-
souls:
|
|
323
|
-
- path: agents/mcp-data-expert
|
|
324
|
-
description: Exposing LFX data through MCP: schema, playbooks, limits
|
|
325
|
-
- path: agents/org-dashboard-expert
|
|
326
|
-
description: What an organisation sees of itself in LFX and why
|
|
327
|
-
- path: agents/individual-dashboard-expert
|
|
328
|
-
description: The individual contributor's view: identity, activity, privacy
|
|
329
|
-
```
|
|
330
|
-
|
|
331
|
-
Small, declarative, data-only. Discovery reads this file; it never scans the tree or runs anything in the repository.
|
|
332
|
-
|
|
333
|
-
**Illustrative deployment (new resolution/source-store paths and wire schema require review)**
|
|
334
|
-
|
|
335
|
-
```
|
|
336
|
-
<deployment>/
|
|
337
|
-
oats-lock.json # current choices for NEW preparation only
|
|
338
|
-
.agents/capabilities/artifacts/
|
|
339
|
-
lfx.local-review/
|
|
340
|
-
sha256-4b7e02…/ # older skill-only artifact
|
|
341
|
-
sha256-c91a4f…/ # new skill-only artifact; visible change notice
|
|
342
|
-
oats.jira/
|
|
343
|
-
sha256-a13d77…/ # approved executable artifact (has a spawn hook)
|
|
344
|
-
<captured-resolutions>/ # outside homes; authority for each instance/job
|
|
345
|
-
<retained-soul-sources>/ # qualified identity + digest; not capability helpers
|
|
346
|
-
.oats-state/ # provider state; private choices, not privacy proof
|
|
347
|
-
lfx-self-serve/ # work target, mapped in the deployment
|
|
348
|
-
lfx-v2-member-service/
|
|
349
|
-
```
|
|
350
|
-
|
|
351
|
-
Digest prefixes above are abbreviated **display labels**, not valid on-disk
|
|
352
|
-
references; retained artifacts use full `sha256-<64 hex digits>` digests. Soul-source
|
|
353
|
-
and resolution paths are placeholders pending schema review, not landed directories.
|
|
354
|
-
|
|
355
|
-
_Communication_
|
|
356
|
-
|
|
357
|
-
## Teams: private first, wider by choice
|
|
358
|
-
|
|
359
|
-
The accepted target is a private team for each human's messaging-enabled instances
|
|
360
|
-
in one workspace, reused across that human's machines. The human may opt each
|
|
361
|
-
instance into wider aliases such as `lfx`, `self-serve` or `marketing`.
|
|
362
|
-
|
|
363
|
-
**No provider privacy guarantee is claimed until a named messaging owner qualifies
|
|
364
|
-
actual behavior.** This is the intended model, not certified aweb behavior:
|
|
365
|
-
|
|
366
|
-
- **Private is the floor.** Use a provider-resolvable human identity plus qualified
|
|
367
|
-
workspace identity, never OS username, checkout path or agent alias. Children
|
|
368
|
-
and scheduled instances inherit their responsible human. Messaging-disabled
|
|
369
|
-
workers create no team. Standalone deployments need an explicit context key;
|
|
370
|
-
`messaging: any` supplies no software, credentials or enrollment.
|
|
371
|
-
- **Wider is opt-in per instance.** Soul aliases and import mappings advertise
|
|
372
|
-
destinations, not membership. Explicit wider sets replace wider defaults while
|
|
373
|
-
retaining the private floor; `[self-serve]` does not accumulate every alias.
|
|
374
|
-
- **Identity survives membership changes.** One global instance identity holds
|
|
375
|
-
multiple provider membership credentials and survives widening/narrowing. Local
|
|
376
|
-
process/session/deployment-record IDs and team-qualified aliases are not that
|
|
377
|
-
identity. Two incarnations of a soul do not automatically share it.
|
|
378
|
-
- **Four grants, separately qualified.** Catalog visibility, live-instance visibility,
|
|
379
|
-
contact permission and conversation-history access differ. Joining a wider team
|
|
380
|
-
must not reveal prior private conversations or other private instances. Ordinary
|
|
381
|
-
members and administrators controlling host/service are distinct access contexts;
|
|
382
|
-
private-team design is not protection from the latter.
|
|
383
|
-
- **Capture choices honestly.** Private context and wider-team references are not
|
|
384
|
-
evidence of enrollment, credential availability or privacy.
|
|
385
|
-
|
|
386
|
-
For illustration, human A keeps `self-serve-ux-expert-2` private while opting
|
|
387
|
-
`self-serve-expert-1` into `self-serve`. Human B's representative joins that wider
|
|
388
|
-
team. They should be contactable there without exposing either human's other
|
|
389
|
-
instances or earlier history. That is a qualification test, not a guarantee
|
|
390
|
-
established by writing a team map.
|
|
391
|
-
|
|
392
|
-
_Knowledge_
|
|
393
|
-
|
|
394
|
-
## Knowledge follows the same rule
|
|
395
|
-
|
|
396
|
-
The knowledge source is declared at the workspace level too, and a soul must be able to reach its knowledge by knowing *where to look* and *which nodes belong to it*, without needing access to the workspace repository. The workspace is the discoverability point that says which knowledge repositories and tools LFX has; it is not a gate the soul passes through on every read.
|
|
397
|
-
|
|
398
|
-
**The soul carries**
|
|
399
|
-
|
|
400
|
-
- Source-complete store locators or explicitly inherited bindings; fixed sources and rebindable defaults stay distinct
|
|
401
|
-
- The nodes it **owns** with optional destinations; absent destinations inherit an explicitly selected write binding or report missing configuration
|
|
402
|
-
- The nodes it **reads**, each store-qualified; context selection, not an access-control list
|
|
403
|
-
|
|
404
|
-
**The workspace carries**
|
|
405
|
-
|
|
406
|
-
- The list of stores: `lfx-knowledge` is one illustrative entry, not a limit
|
|
407
|
-
- The default knowledge provider (the capability that reads and harvests: `oats.okf`)
|
|
408
|
-
- Defaults resolved before use; subsequent reads do not refetch the workspace
|
|
409
|
-
|
|
410
|
-
**The deployment carries**
|
|
411
|
-
|
|
412
|
-
- Credentials for the store
|
|
413
|
-
- Resolved locators, local clone/connection and provenance captured outside the home
|
|
414
|
-
- Explicit promotion destinations, credential references and approvals; later schedules retain execution resolutions
|
|
415
|
-
|
|
416
|
-
The kernel's knowledge contract stays provider-neutral: the owns/reads node model and harvester-only promotion describe the default implementation (OKF); a replacement knowledge provider exposes its own configuration and readiness through the capability contract and is not forced into OKF's storage or authoring model.
|
|
417
|
-
|
|
418
|
-
Precedence is constraints plus fallbacks: a generic soul can inherit a selected store/provider binding; a specialized soul can fix its source. Operator/import choices rebind only defaults and extension points. The provider-neutral kernel envelope records non-secret payload/provenance with separate credential references. Access belongs to GitHub or the selected provider; a workspace-only nickname is not a complete address.
|
|
419
|
-
|
|
420
|
-
### Open-source souls may consume open-source knowledge bases
|
|
421
|
-
|
|
422
|
-
A public soul can name a public store the same way it names a public package: `mcp-data-expert`, once open-sourced, may read from a public `mcp-knowledge` repository maintained with it, and any organisation that prepares the soul reads that store with no LFX involvement. Consuming a public store is a source relation, not membership; it does not admit the store's repository to the adopter's workspace. A separately declared membership still follows the reciprocal rule.
|
|
423
|
-
|
|
424
|
-
Within declared defaults and extension points, the adopting organisation chooses where the soul's *own* nodes grow: in the public store, if its maintainers accept harvest PRs, or in its own store (`lfx-knowledge`). Fixed source requirements cannot be overridden. Each choice resolves a store-qualified destination under the declared node name. Public PRs do not break single-owner stewardship, because three roles are involved: the node's responsible steward, the harvester proposing a change, and the repository maintainers accepting it. Consuming a public store never implies publishing the adopter's notes to it; the destination and the intent to publish are explicit. Reads may come from more than one store. The invariant is **one explicit owner per node and an explicit destination for each promoted concept**, not one storage location per soul; one default write store is a common case, not an approved limit. Git promotions use PRs, public or private; proposal and acceptance differ.
|
|
425
|
-
|
|
426
|
-
Why the workspace list matters even though souls do not need it: someone writing `newsletter-strategy-expert` and choosing which nodes it should read, and the onboarding expert presenting "these are LFX's knowledge repositories", both start from that list. Node ownership stays with souls, one owner per node, per the knowledge direction of 13 September.
|
|
427
|
-
|
|
428
|
-
The reconciled proposal carries the same contract. Knowledge remains outside the
|
|
429
|
-
soul; only declarations travel. Later reads and independent harvests need not
|
|
430
|
-
consult the publisher's workspace or retain the source home. Mutable knowledge
|
|
431
|
-
contents are not part of the software pin.
|
|
432
|
-
|
|
433
|
-
_Walkthrough_
|
|
434
|
-
|
|
435
|
-
## Onboarding from one repository
|
|
436
|
-
|
|
437
|
-
A new engineer joins the platform team. They have a laptop, GitHub access to the LFX repositories, and a clone of `lfx-v2-member-service` because that is the service they were handed. They ask the onboarding expert: "Set me up to work on the member service the LFX way."
|
|
438
|
-
|
|
439
|
-
1. **Read the backlink.**
|
|
440
|
-
`lfx-v2-member-service/oats.yaml` names `github.com/linuxfoundation/lfx-workspace`. That is the only thing the local checkout contributes.
|
|
441
|
-
2. **Fetch the workspace definition.**
|
|
442
|
-
Using the engineer's own GitHub token. Nothing is cloned; one small file is read at a recorded revision.
|
|
443
|
-
3. **Validate admission.**
|
|
444
|
-
`lfx-v2-member-service` is in `members` and points back: eligible. Every other member is checked the same way. A name exposed by the readable allowlist can be marked inaccessible/unavailable without fetching protected descriptions; never distinguish hidden from nonexistent beyond what GitHub exposes.
|
|
445
|
-
4. **Read export indexes.**
|
|
446
|
-
`lfx-v2-member-service` exports `member-service-expert` and `member-service-salesforce-expert`; `lfx-engineering-experts` exports `mcp-data-expert`, `org-dashboard-expert` and `individual-dashboard-expert`; `lfx-engineering-capabilities` advertises its packages. The engineer is shown qualified names and where each comes from.
|
|
447
|
-
5. **Resolve, then fetch only what is needed.**
|
|
448
|
-
The engineer picks `member-service-expert` and `member-service-salesforce-expert`. Their requirements plus the workspace defaults resolve in one transaction into exact compositions: `lfx.local-review@main` at `4b7e02`, `lfx.service-dev@main`, `oats-okf@v2`, `oats-aweb@v1`, `oats-jira@v1`. Those packages are materialised; `lfx-knowledge` is cloned for the declared nodes. `lfx-self-serve` and the marketing repositories are never downloaded.
|
|
449
|
-
6. **Record the private context and wider choices.**
|
|
450
|
-
With a bound, qualified messaging provider, preparation would reuse/create the engineer's private team. The engineer chooses `platform` for one instance; the other stays private-only. Until a named owner qualifies the provider, report choices and unqualified enrollment/privacy separately, not an existing private team.
|
|
451
|
-
7. **Report each readiness boundary separately.**
|
|
452
|
-
Installed: yes. Executable trust: `oats-jira` has a spawn hook, so its artifact needs the engineer's approval. Bindings: Jira credentials missing, `needs configuration`. Teams: private context and `platform` choice recorded; enrollment/provider qualification pending. No unapproved resources execute and nothing claims unestablished readiness.
|
|
453
|
-
|
|
454
|
-
After complete preparation, ordinary files retain artifacts, soul source, captured resolution and non-secret binding/team choices outside the home. CLI diagnostics are infrastructure work; Desktop follows these APIs later. The onboarding conversation need not survive. Failed preparation never publishes a selectable partial resolution.
|
|
455
|
-
|
|
456
|
-
_Configuration_
|
|
457
|
-
|
|
458
|
-
## Precedence: two levels, no repository defaults
|
|
459
|
-
|
|
460
|
-
The accepted contract replaces the original three-tier proposal. Capability policy has two authorities, one resolver. A standalone repository can be the explicit deployment scope, not a middle tier between workspace and soul.
|
|
461
|
-
|
|
462
|
-
- **1. Workspace defaults** — Provider per fundamental layer, knowledge stores, team map, catalogs. Fill whatever the soul left open.
|
|
463
|
-
- **2. The soul's own declarations** — Intrinsic capabilities with sources, knowledge store and nodes, team aliases, any hard requirement on a specific provider. Portable: travels with the soul.
|
|
464
|
-
- **Explicit operator choice, bounded (not a third tier)** — On the workspace side (an import entry's adoption defaults, or a spawn-time choice). May rebind defaults and bindings; can never erase a hard requirement, and an attempt reports an incompatibility. Not a third tier: two authorities, one resolver.
|
|
465
|
-
|
|
466
|
-
Two rules hold at every level: a hard requirement is never erased by a default, and an incompatible combination (two providers for one slot, a required provider the workspace forbids) fails loudly or reports `needs configuration`. Nothing is silently substituted.
|
|
467
|
-
|
|
468
|
-
- **No agent-types/family entity.** Soul declarations and qualified per-soul adoption choices replace family policy in the target design; the baseline resolver is not claimed migrated.
|
|
469
|
-
- **One explicit workspace context.** An imported soul's original organization never supplies another policy tier. Standalone preparation uses explicit bindings and reports missing ones.
|
|
470
|
-
- **Repository briefing (`agents-md-injection`) and worktree setup stay**, selected from the repository actually worked on, not the imported source. Executable trust applies. Directory work targets need no fake Git or membership.
|
|
471
|
-
|
|
472
|
-
_Versions_
|
|
473
|
-
|
|
474
|
-
## Updates without surprises
|
|
475
|
-
|
|
476
|
-
People should not pick numbered versions as a routine. Machines still need exact revisions to reproduce behaviour and to retire or recover an instance safely. The reconciliation: humans choose a **channel** or a **pin**; preparation resolves it once into an **immutable composition**; the deployment keeps **several artifacts per capability** side by side.
|
|
477
|
-
|
|
478
|
-
- **lfx.local-review / 4b7e02** — resolved from @main on 9 Sep · approved
|
|
479
|
-
Selected by:
|
|
480
|
-
- self-serve-expert-1 (started 10 Sep)
|
|
481
|
-
- nightly review sweep (queued 13 Sep)
|
|
482
|
-
- member-service-expert-1 (platform pinned for release)
|
|
483
|
-
- **lfx.local-review / c91a4f** — resolved from @main on 14 Sep · approved today
|
|
484
|
-
Selected by:
|
|
485
|
-
- meeting-service-expert-2 (started today)
|
|
486
|
-
- new compatible instances following that channel after explicit refresh and any required approval; pinned preparations keep their selected revision
|
|
487
|
-
|
|
488
|
-
- **Explicit prepare/update** refreshes once per transaction. Show available-unapproved beside last-approved usable, never calling the latter "latest"; no daemon or unattended approval. **Existing instances and queued jobs** keep captured resolutions, not today's lock. Declarative skill changes get a bounded visible notice.
|
|
489
|
-
- Inside **one** instance there is exactly one artifact per capability id. If a dependency closure needs two, both requirement paths are reported and preparation fails; no newest-wins rule, no general semver solver in the first version.
|
|
490
|
-
- Artifacts referenced by a live instance, a rollback or a pending job are retained, including the code needed to retire an instance after its source has been deleted.
|
|
491
|
-
- Offline use is shown as last-known, not as current. A failed refresh is visible.
|
|
492
|
-
- The pin covers the OATS-managed composition: soul snapshot, capability closure, helpers, commands and hooks, non-secret configuration and binding provenance. It does not freeze knowledge contents, credentials, live team memberships, the work repository, external services or host tools.
|
|
493
|
-
|
|
494
|
-
### Automatic download is not automatic trust
|
|
495
|
-
|
|
496
|
-
OATS already requires fresh approval when an executable artifact's integrity changes. "Executable" means the package declares **commands, hooks, or environment**. One hook is enough.
|
|
497
|
-
|
|
498
|
-
| Package | Executable? | Following @main means |
|
|
499
|
-
|---|---|---|
|
|
500
|
-
| lfx.local-review (skills and instructions only) | No | New instances may use them after explicit prepare/update; visible change notice, no execution-approval prompt. |
|
|
501
|
-
| oats.jira (no commands, but a spawn hook) | Yes | Every changed executable artifact needs fresh approval; unchanged artifact integrity keeps its approval despite unrelated source changes. |
|
|
502
|
-
| oats.aweb (commands and hooks) | Yes | Same: approval per revision. |
|
|
503
|
-
|
|
504
|
-
Any provider declaring commands, hooks or environment is gated at the changed artifact, including env-only providers. V1 has no unattended approval. Any future policy needs a separate decision; publisher continuity or "latest" never grants approval. Rolling software back also does not undo external writes or schema migrations, so two revisions sharing `lfx-knowledge` still need provider compatibility.
|
|
505
|
-
|
|
506
|
-
_Access_
|
|
507
|
-
|
|
508
|
-
## Four permissions, not one
|
|
509
|
-
|
|
510
|
-
GitHub supplies authentication and content authorization; the workspace supplies
|
|
511
|
-
admission; the messaging provider owns membership and actual permissions. There
|
|
512
|
-
is no second OATS user database or ACL engine.
|
|
513
|
-
|
|
514
|
-
- **Catalog visibility:** accessible exported souls/packages, not live presence.
|
|
515
|
-
- **Live-instance visibility:** which running incarnations may be discovered.
|
|
516
|
-
- **Contact:** permission to address/message an instance.
|
|
517
|
-
- **Conversation-history access:** permission to read earlier conversations, never
|
|
518
|
-
inferred from contact or later wider-team membership.
|
|
519
|
-
|
|
520
|
-
The intended private-first outcome is that repository access alone reveals neither
|
|
521
|
-
private live instances nor their conversations. Widening one instance must not
|
|
522
|
-
expose other private instances or earlier history. **No privacy guarantee until a
|
|
523
|
-
named messaging owner qualifies provider behavior** in these separate dimensions,
|
|
524
|
-
including ordinary members versus administrators controlling host/service.
|
|
525
|
-
A recorded membership choice does not constitute qualification.
|
|
526
|
-
|
|
527
|
-
A readable allowlist may reveal private repository names; protected descriptions
|
|
528
|
-
must not be copied into broader indexes. Caches must not cross authorization
|
|
529
|
-
contexts. Revocation cannot erase existing clones; offline metadata is last-known,
|
|
530
|
-
not proof of current membership.
|
|
531
|
-
|
|
532
|
-
_Modularity_
|
|
533
|
-
|
|
534
|
-
## Same pieces, eight arrangements
|
|
535
|
-
|
|
536
|
-
The point of separating soul, workspace and deployment is that the same pieces compose into very different setups without any of them changing shape. Each card is an acceptance illustration for the target, not something a real deployment can run today. In all of them a soul may live in the project repository it works on, in a shared souls repository, or in a third party's repository; the arrangement never dictates where.
|
|
537
|
-
|
|
538
|
-
**Solo engineer, one repo, no workspace**
|
|
539
|
-
|
|
540
|
-
Clone `lfx-self-serve` alone and spawn `self-serve-expert` from its own `agents/` directory. The repository is the deployment.
|
|
541
|
-
|
|
542
|
-
- Workspace: none reachable; standalone scope
|
|
543
|
-
- Capabilities: from the soul's sources: lfx-engineering-capabilities and `repo:packages/self-serve-dev`
|
|
544
|
-
- Knowledge: the store the soul names, if readable; else needs configuration
|
|
545
|
-
- Teams: `messaging: any` supplies no software, credentials or team. Missing provider/human identity/standalone context key => needs configuration. Private-team claims additionally require named-owner provider qualification; no unnamed product default is assumed
|
|
546
|
-
|
|
547
|
-
**The whole organisation**
|
|
548
|
-
|
|
549
|
-
`lfx-workspace` admits thirty repositories; anyone starts from whichever one they hold.
|
|
550
|
-
|
|
551
|
-
- Workspace: defaults, stores, teams, catalogs
|
|
552
|
-
- Capabilities: souls' sources plus defaults
|
|
553
|
-
- Knowledge: lfx-knowledge
|
|
554
|
-
- Teams: private plus opt-in lfx, platform, self-serve, marketing
|
|
555
|
-
|
|
556
|
-
**A team with its own capability repo**
|
|
557
|
-
|
|
558
|
-
Marketing keeps `lfx-marketing-capabilities` without touching `lfx-engineering-capabilities`; its souls point there.
|
|
559
|
-
|
|
560
|
-
- Workspace: admits the new repo; adds it as a catalog
|
|
561
|
-
- Capabilities: `lfx.campaign-research` from the marketing repo
|
|
562
|
-
- Knowledge: own nodes in lfx-knowledge, or a marketing store
|
|
563
|
-
- Teams: private plus marketing
|
|
564
|
-
|
|
565
|
-
**Project-local capability**
|
|
566
|
-
|
|
567
|
-
`lfx-self-serve` could carry `packages/self-serve-dev` and reference `repo:packages/self-serve-dev` from its retained repository root.
|
|
568
|
-
|
|
569
|
-
- Workspace: unchanged
|
|
570
|
-
- Capabilities: one from lfx-engineering-capabilities, one from the same snapshot
|
|
571
|
-
- Knowledge: unchanged
|
|
572
|
-
- Teams: unchanged
|
|
573
|
-
|
|
574
|
-
**Open-sourcing a soul**
|
|
575
|
-
|
|
576
|
-
`mcp-data-expert` is published for the world. Another organisation prepares it with its own defaults and bindings.
|
|
577
|
-
|
|
578
|
-
- Workspace: theirs, not LFX's; no backlink to either
|
|
579
|
-
- Capabilities: from the soul's public sources
|
|
580
|
-
- Knowledge: the public store the soul names for what it reads; their own store for the nodes it owns locally (syntax open)
|
|
581
|
-
- Teams: their private teams and aliases
|
|
582
|
-
|
|
583
|
-
**Two speeds in one workspace**
|
|
584
|
-
|
|
585
|
-
Platform pins `lfx.local-review@v4.1.0` through a release; everyone else follows `@main`.
|
|
586
|
-
|
|
587
|
-
- Workspace: unchanged
|
|
588
|
-
- Capabilities: two lfx.local-review artifacts coexist; each instance holds one
|
|
589
|
-
- Knowledge: shared, provider-compatible
|
|
590
|
-
- Teams: unchanged
|
|
591
|
-
|
|
592
|
-
**Swapping a layer**
|
|
593
|
-
|
|
594
|
-
LFX moves tasks from Jira to GitHub Issues by changing one workspace default.
|
|
595
|
-
|
|
596
|
-
- Workspace: `tasks: oats.github-issues`
|
|
597
|
-
- Capabilities: souls saying `tasks: any` follow; a soul hard-requiring Jira keeps Jira or reports needs configuration
|
|
598
|
-
- Knowledge: unchanged
|
|
599
|
-
- Teams: unchanged
|
|
600
|
-
|
|
601
|
-
**Two organisations on one laptop**
|
|
602
|
-
|
|
603
|
-
Two explicit deployments side by side, with separate defaults and selected workspace contexts; provider isolation still requires qualification.
|
|
604
|
-
|
|
605
|
-
- Workspace: two, each reciprocal with its own members
|
|
606
|
-
- Capabilities: separate artifact stores and locks
|
|
607
|
-
- Knowledge: separate stores
|
|
608
|
-
- Teams: separate private teams per workspace
|
|
609
|
-
|
|
610
|
-
_Payoff_
|
|
611
|
-
|
|
612
|
-
## What it unlocks
|
|
613
|
-
|
|
614
|
-
**Commit the local souls**
|
|
615
|
-
|
|
616
|
-
Local-only project definitions can become portable, committed exports once their sources and declarations no longer depend on one machine's layout.
|
|
617
|
-
|
|
618
|
-
_Example:_ `member-service-expert` moves from `lfx-v2-member-service/local-agents/` to `lfx-v2-member-service/agents/`, in the same repository, names `lfx.local-review`'s source, and is listed in that repository's export index. Engineers with source access can discover and request preparation; launch still requires trust, credentials, configuration, store access and applicable enrollment readiness. No souls repository is needed for this.
|
|
619
|
-
|
|
620
|
-
**Onboard from any one repository**
|
|
621
|
-
|
|
622
|
-
LFX is reachable from whichever repository a person already has, with the access they already hold.
|
|
623
|
-
|
|
624
|
-
_Example:_ A contractor with read access to `lfx-v2-meeting-service` and `lfx-engineering-capabilities` prepares `meeting-service-expert` from a fresh laptop. They never learn the marketing repositories exist as more than an inaccessible name.
|
|
625
|
-
|
|
626
|
-
**Private by default — qualification target**
|
|
627
|
-
Intended outcome after provider setup and qualification, not a current promise.
|
|
628
|
-
_Example test:_ human A's `self-serve-expert-1` and `self-serve-ux-expert-2`
|
|
629
|
-
coordinate privately; ordinary wider-team members must not discover them or read
|
|
630
|
-
their private history without the corresponding grants.
|
|
631
|
-
|
|
632
|
-
**Souls that actually travel**
|
|
633
|
-
|
|
634
|
-
A soul published in one organisation runs in another, with the other's defaults and bindings.
|
|
635
|
-
|
|
636
|
-
_Example:_ `mcp-data-expert` is open-sourced with a public `mcp-knowledge` store. A second company runs it reading that store, harvesting into its own store, on its own aweb teams, with GitHub Issues instead of Jira. Same soul, no copied config.
|
|
637
|
-
|
|
638
|
-
**Forks stay out**
|
|
639
|
-
|
|
640
|
-
A copied backlink is not admission. Membership needs both directions at recorded revisions.
|
|
641
|
-
|
|
642
|
-
_Example:_ A personal fork of `lfx-engineering-experts` still says `workspace: linuxfoundation/lfx-workspace`. The workspace does not list the fork, so its souls are not LFX members and its packages are not catalogued.
|
|
643
|
-
|
|
644
|
-
**Teams move at their own pace**
|
|
645
|
-
|
|
646
|
-
Different instances hold different revisions of the same capability in the same deployment.
|
|
647
|
-
|
|
648
|
-
_Example:_ Platform pins `lfx.local-review@v4.1.0` for a release while self-serve follows `@main`. Both artifacts coexist; nobody is forced to upgrade mid-release.
|
|
649
|
-
|
|
650
|
-
**Nothing new to operate**
|
|
651
|
-
|
|
652
|
-
Git hosting is the control plane; CI validates indexes if wanted. No registry server, no discovery daemon.
|
|
653
|
-
|
|
654
|
-
_Example:_ Admitting `lfx-marketing-souls` is a PR to `lfx-workspace` adding one line to `members`, plus a backlink in the new repository. Branch protection is the review process.
|
|
655
|
-
|
|
656
|
-
**Knowledge without a detour**
|
|
657
|
-
|
|
658
|
-
A soul reads and grows its knowledge from its own declaration; the workspace is where you find out what stores exist.
|
|
659
|
-
|
|
660
|
-
_Example:_ with explicit provider, store access and write destination bindings, a standalone `lfx-self-serve` checkout reads store-qualified `lfx-review-conventions` and harvests into a resolved `self-serve-service` destination without workspace access. Missing inputs remain needs configuration.
|
|
661
|
-
|
|
662
|
-
**Honest readiness**
|
|
663
|
-
|
|
664
|
-
Each boundary is reported on its own: installed, trusted, configured, enrolled.
|
|
665
|
-
|
|
666
|
-
_Example:_ A prepared instance shows "needs configuration: Jira token", "approve: oats.jira a13d77" and "platform: enrolment pending" instead of launching and failing on first task.
|
|
667
|
-
|
|
668
|
-
_Where it stands_
|
|
669
|
-
|
|
670
|
-
## Baseline, accepted target, open gates
|
|
671
|
-
|
|
672
|
-
| Evidence boundary | What it establishes |
|
|
673
|
-
|---|---|
|
|
674
|
-
| Preexisting OATS package machinery | Git/local sources, package roots, closure/materialization, exact locks, integrity-bound trust and lifecycle composition; not the new two-authority resolver. |
|
|
675
|
-
| Baseline `428cd9af` Portable Souls foundation | `lib/capability-artifacts.mjs` retains/verifies A and B side by side with typed refusals; storage-only. Installer still overwrites `installed/<id>`, launch hooks reload by ID, scheduled operations resolve at execution. |
|
|
676
|
-
| Accepted infrastructure target, not completion | Source-complete declarations, reciprocal discovery, by-reference imports and retained sources, captured resolutions outside homes, preparation and consumer/store/lock/digest migration, honest CLI readiness. |
|
|
677
|
-
| Provider and later UI gates | Private/wider choices are recordable, not privacy guarantees. Named messaging owner qualification is pending; Desktop features follow infrastructure later. |
|
|
678
|
-
|
|
679
|
-
The [retention contract](2026-09-14-artifact-retention-contract.md) is binding. Before
|
|
680
|
-
core imports retention, shared tree-copy/digest/publication mechanics move into a
|
|
681
|
-
narrow leaf with no policy/lifecycle logic or back-import to core. Migration verifies
|
|
682
|
-
existing artifacts and grades records `reconstructed`, `partial` or `unknown` with
|
|
683
|
-
evidence. Overwritten historical revisions are not recovered by refetching moving
|
|
684
|
-
sources. Preserve running sessions; partial/unknown never passes readiness.
|
|
685
|
-
|
|
686
|
-
At consumer migration, the versioned digest covers file bytes, symlink targets and
|
|
687
|
-
regular-file executable flags normalized from owner execute, `(mode & 0o100) !== 0`,
|
|
688
|
-
for both Git and `path:`. Old digests remain verifiable without reinterpretation;
|
|
689
|
-
group/other execute and other mode bits stay outside identity. Do not rewrite modes.
|
|
690
|
-
Storage retention does not implement the digest bump or A/B lifecycle dispatch.
|
|
691
|
-
|
|
692
|
-
Retain source artifacts, capability artifacts and resolutions conservatively while
|
|
693
|
-
instances, jobs or supported recovery reference them. Dispatch/restart/retire/recovery
|
|
694
|
-
uses the captured record after source/home deletion, never an ambient lock. Recurring
|
|
695
|
-
schedules must state capture versus explicit future reprepare policy (capture remains
|
|
696
|
-
proposed); already queued work never advances silently. No scheduler is activated
|
|
697
|
-
by this documentation work.
|
|
698
|
-
|
|
699
|
-
### Remaining review gates
|
|
700
|
-
|
|
701
|
-
- Parser/schema syntax for `repo:`, imports/adoption, requires/defaults, store-qualified
|
|
702
|
-
reads/owns and exports; lock/resolution/digest wire versions and migration mechanics.
|
|
703
|
-
Accepted semantics do not mean every YAML illustration parses.
|
|
704
|
-
- Qualified repository identities and canonical remotes across renames/transfers;
|
|
705
|
-
source moves need explicit provenance, never filename matching.
|
|
706
|
-
- Named messaging owner and qualification of private human/context identity, live
|
|
707
|
-
discovery, inbound contact, history and administrator limitations. Standalone
|
|
708
|
-
context keys and messaging-disabled workers remain explicit cases.
|
|
709
|
-
- Zero or one default provider per slot is a **v1 product simplification**, not a
|
|
710
|
-
capability limit. Simultaneous Jira + GitHub is an unsolved design test; do not
|
|
711
|
-
assume named bindings or build a generalized multi-provider solver.
|
|
712
|
-
|
|
713
|
-
Lead amendments are fully incorporated and preserved in a public design appendix.
|
|
714
|
-
Infrastructure implementation is now human-authorized; Desktop is later and held
|
|
715
|
-
capture patch `54b07ee` stays excluded.
|
|
716
|
-
|
|
717
|
-
_Falsification_
|
|
718
|
-
|
|
719
|
-
## How we would know it works
|
|
720
|
-
|
|
721
|
-
Accepted design and amendment scenarios, kept as tests rather than promises. Any failure prevents the corresponding acceptance claim; provider/live gates are not proven by docs or storage fixtures.
|
|
722
|
-
|
|
723
|
-
- A fresh operator prepares `self-serve-expert` without the author's private workspace config.
|
|
724
|
-
- Two operators with different local layouts discover the same accessible LFX definitions.
|
|
725
|
-
- Uncloned repositories are discoverable without installing their code.
|
|
726
|
-
- Forked or unadmitted repositories do not become LFX members.
|
|
727
|
-
- Inaccessible or stale indexes neither leak protected descriptions nor imply readiness.
|
|
728
|
-
- Same-repository packages work portably; external local paths are clearly marked nonportable.
|
|
729
|
-
- Multiple revisions of `lfx.local-review` coexist while each instance has one unambiguous composition.
|
|
730
|
-
- An update cannot replace a running instance's or a pending job's artifacts.
|
|
731
|
-
- Conflicting dependencies and missing bindings/approval fail before unsafe execution; source conflicts report both origins, including env-only executable surfaces.
|
|
732
|
-
- A soul reads and harvests store-qualified nodes with an explicit destination without workspace access; a replacement provider is not forced into OKF's node schema.
|
|
733
|
-
- A named messaging owner qualifies two humans' private/wider visibility, contact and history independently, without claiming isolation from administrators controlling host/service.
|
|
734
|
-
- Real multi-team membership, useful outputs and recovery work end to end, not just scaffolds.
|
|
735
|
-
|
|
736
|
-
### Lead's three scenarios, adopted
|
|
737
|
-
|
|
738
|
-
1. Import the same public soul unchanged into LFX and into a standalone deployment with no Git work target. It reads its public knowledge, binds an explicit adopter write destination, and prepares without consulting its publisher's workspace configuration. Source identity and exact retained revision are verified.
|
|
739
|
-
2. Two humans on two hosts each in one workspace. Each person's private team is reused across their hosts; a spawned child or scheduled instance stays inside it; one representative is widened and narrowed without changing its global identity; discovery, inbound contact and historical conversation access are verified separately.
|
|
740
|
-
3. An existing instance and an independent queued job stay on revision A; a new instance is prepared on approved revision B; the original source is removed; A still executes its managed lifecycle and recovery resources. No ambient shared "latest" lookup may substitute B.
|
|
741
|
-
|
|
742
|
-
---
|
|
743
|
-
|
|
744
|
-
_Sources: [accepted proposal](2026-09-14-portable-souls-and-git-workspaces.md),
|
|
745
|
-
[public amendment](2026-09-14-portable-souls-contract-amendments.md),
|
|
746
|
-
[binding handoff](2026-09-15-portable-souls-handoff.md),
|
|
747
|
-
[retention contract](2026-09-14-artifact-retention-contract.md) and
|
|
748
|
-
[implementation ledger](2026-09-15-portable-souls-implementation.md).
|
|
749
|
-
All LFX examples are hypothetical; all new YAML nesting needs parser review.
|
|
750
|
-
No ignored instance file is needed to interpret this design._
|