@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,50 +1,43 @@
|
|
|
1
1
|
# OATS v0.24.13 — schedule history API 3 and the Desktop schedules table
|
|
2
2
|
|
|
3
|
-
Kernel/Pi/Desktop **0.24.13**.
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
## Kernel
|
|
8
|
-
|
|
9
|
-
`oats schedule list|show` history had four defects
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
- **A run's identity is when it was scheduled and started,
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
`
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
- **
|
|
26
|
-
a
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
- **Session provenance, never a transcript.** The `transcript` pointer named a
|
|
30
|
-
reader that does not exist and is gone. Every run carries
|
|
31
|
-
`session: {instance|null, home|null, incarnation|null, server|null, delivery}`
|
|
32
|
-
— what the recorder knew at write time. A read-only transcript verb is a
|
|
33
|
-
separate seam (K12), not implied by this API.
|
|
3
|
+
Kernel/Pi/Desktop **0.24.13**. Consumers gate on `oats version --json`
|
|
4
|
+
`features[]` names and API integers, never on the version. Shapes are in the
|
|
5
|
+
[Desktop CLI API](../desktop-cli-api.md).
|
|
6
|
+
|
|
7
|
+
## Kernel: `schedule-read-2` (`scheduleHistoryApi: 3`; `scheduleApi` stays 2)
|
|
8
|
+
|
|
9
|
+
`oats schedule list|show` history had four defects; each is closed under a new
|
|
10
|
+
advertised name.
|
|
11
|
+
|
|
12
|
+
- **A run's identity is when it was scheduled and started, not its outcome.**
|
|
13
|
+
Each run has a stable `runId`; later facts update its one row and
|
|
14
|
+
`transitions[]` keeps the outcome sequence (`["started","unknown","ended"]`
|
|
15
|
+
is one run). Rows from before API 3 are returned with `legacy: true` and
|
|
16
|
+
`runId: null` and are never merged.
|
|
17
|
+
- **Bounded, descriptor-safe state.** Both scope files must be regular files,
|
|
18
|
+
are opened without following symlinks, and are read only within a 1 MiB
|
|
19
|
+
budget; over budget is a typed `E_SCHEDULE_STATE_OVERSIZE` refusal. History
|
|
20
|
+
is capped at 50 rows (`history: {status, stored, truncated}`); one job's
|
|
21
|
+
corrupt history never fails the others.
|
|
22
|
+
- **Subject truth.** `list` and `show` echo the resolved `scope` and canonical
|
|
23
|
+
`id`; a definition whose own `id` differs from its key refuses
|
|
24
|
+
`E_SCHEDULE_IDENTITY`.
|
|
25
|
+
- **Session provenance, not a transcript.** The `transcript` pointer, which
|
|
26
|
+
named a reader that did not exist, is removed. Every run carries
|
|
27
|
+
`session: {instance, home, incarnation, server, delivery}` as known when it
|
|
28
|
+
was recorded.
|
|
34
29
|
|
|
35
30
|
## Desktop
|
|
36
31
|
|
|
37
|
-
- **Schedules** view:
|
|
32
|
+
- **Schedules** view: a compact table (enabled, schedule, target, cadence,
|
|
38
33
|
next run, last reported outcome, actions) with **Recent runs** for the
|
|
39
|
-
workspace
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
command, no default workspace); legacy POST `list|show` aliases run through
|
|
47
|
-
the same strict admission, budgets and two coalesced read slots.
|
|
34
|
+
workspace, read on entry and on Refresh, without polling. `ended` is not
|
|
35
|
+
shown as success and `delivered` not as consumption. Remote history and
|
|
36
|
+
editing a captured wake are not available. Requires `scheduleHistoryApi: 3`
|
|
37
|
+
and `schedule-read-2`.
|
|
38
|
+
- **Security**: the command-running `GET /api/schedules` is removed (405);
|
|
39
|
+
legacy POST `list|show` aliases go through the same strict admission and
|
|
40
|
+
budgets.
|
|
48
41
|
|
|
49
42
|
## Upgrade
|
|
50
43
|
|
|
@@ -4,18 +4,14 @@ Kernel/Pi/Desktop **0.24.2**. Publication is not deployment: every operator stil
|
|
|
4
4
|
|
|
5
5
|
## What changed
|
|
6
6
|
|
|
7
|
-
- **`oats onboard [--dir <deployment>] [--workspace <git:source[@rev]>] [--force-existing] [--json]`**
|
|
8
|
-
- **Soul creation declares `oats.core` explicitly.** `oats create`
|
|
9
|
-
- **Official capabilities.** `oats.framework` **1.1.1** (tag `oats-framework/v1.1.1`) exports `oats.core` (`oats-operate`, `oats-souls`, "you run on OATS" briefing), `oats.setup` (`oats-config`, `oats-packages`, `oats-workspace-setup`
|
|
10
|
-
- **Retained inspection
|
|
11
|
-
- **aweb 1.11.0 pairing.** The catalog and
|
|
12
|
-
- **Six framework soul editions** exported and imported by `oats-workspace.yaml`:
|
|
13
|
-
- Baseline hygiene: golden fixtures use a genuinely empty catalog; the package check lazy-loads dev validators so syntax-only lanes work without `node_modules`.
|
|
7
|
+
- **`oats onboard [--dir <deployment>] [--workspace <git:source[@rev]>] [--force-existing] [--json]`** bootstraps a deployment with an **`oats-setup-expert`** soul that holds `oats.core` and `oats.setup`. It acquires the official `oats.framework` package (no catalog auto-trust), activates exactly those two capabilities for that soul, pins both at the acquired commit, and **prints** the spawn command; it never launches a model. `oats setup` (record capture setup) is unchanged.
|
|
8
|
+
- **Soul creation declares `oats.core` explicitly.** `oats create` writes `requires.capabilities.oats.core` resolved from the official catalog; `--no-oats-core` opts out. A soul that declares `oats.core` or `oats.setup` no longer receives the legacy kernel skills (`oats`, `oats-config`, `oats-packages`) or the `kernel:oats` injection; the capability's skills replace them. Other souls keep the legacy behavior, and `oats doctor` prints an informational line.
|
|
9
|
+
- **Official capabilities.** `oats.framework` **1.1.1** (tag `oats-framework/v1.1.1`) exports `oats.core` (`oats-operate`, `oats-souls`, the "you run on OATS" briefing), `oats.setup` (`oats-config`, `oats-packages`, `oats-workspace-setup`) and `oats.knowledge-theory`, listed in the official catalog with capability aliases.
|
|
10
|
+
- **Retained inspection reports `launchSelection`** (`{runtime, model}` or `null`) for the primary, and provider binding codecs receive `OATS_CLI_BIN`.
|
|
11
|
+
- **aweb 1.11.0 pairing.** The catalog and the framework soul editions pin `oats.aweb@v1.11.0`, which adds the portable binding interface (floor `>=0.24.2`). Its `check` qualifies only an explicit private team with `delivery: session` and an input-capable Claude or Codex primary; a strict-Pi print primary reports `needs-configuration`.
|
|
12
|
+
- **Six framework soul editions** are exported and imported by `oats-workspace.yaml`: `oats-expert`, `oats-kernel-expert`, `oats-desktop-expert`, `market-research-expert`, `oats-assistant` and `oats-setup-expert`, all declaring `oats.core`.
|
|
14
13
|
|
|
15
|
-
##
|
|
14
|
+
## Known limits
|
|
16
15
|
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
## Not in this cut
|
|
20
|
-
|
|
21
|
-
Desktop marketplace view / soul creation UI, legacy `agents/` roster and in-soul knowledge decommission (after the fresh-reader proof against the public `oats-knowledge`), Pi session-input support.
|
|
16
|
+
- The first-contact seams in `inspect` and `prepare` (request-file mismatch, raw `ENOENT` on an absent deployment, `oats trust --dir` rejecting lock v3, `--artifact-set` missing from help, unattributed provider problems) are fixed in [v0.24.3](v0.24.3.md).
|
|
17
|
+
- Pi primaries do not support session input.
|
|
@@ -1,13 +1,9 @@
|
|
|
1
|
-
# OATS v0.24.3 —
|
|
1
|
+
# OATS v0.24.3 — `prepare` usability fixes
|
|
2
2
|
|
|
3
|
-
Kernel/Pi/Desktop **0.24.3**. Fixes
|
|
3
|
+
Kernel/Pi/Desktop **0.24.3**. Fixes five usability problems met when adopting a shared workspace definition on 0.24.1 and 0.24.2. No contract, schema or authority change.
|
|
4
4
|
|
|
5
|
-
- **Attributed provider problems.** Every preparation problem
|
|
6
|
-
- **`oats trust <capability> --dir <deployment>` on a lock v3 deployment** returns a typed problem with the
|
|
7
|
-
- **Help** documents `--artifact-set` and how `prepare`'s `selections[].artifactSet`
|
|
8
|
-
- **`prepare` on an absent deployment path** returns a typed explicit-provisioning hold
|
|
9
|
-
- **One request file for both commands.** `prepare --request` accepts the explicit `workTarget` that `inspect --request` requires
|
|
10
|
-
|
|
11
|
-
The second operator's recorded requests and results are preserved verbatim as regression fixtures (`test/fixtures/second-operator/`). Their valid-vs-bogus `stores.oats` pair remains identical by design: both refused on missing OKF runtime settings (`bindings-file`, `state-dir`), which the messages now say.
|
|
12
|
-
|
|
13
|
-
Setup guidance for those settings lands in the next `oats.framework` payload.
|
|
5
|
+
- **Attributed provider problems.** Every preparation problem carries `slot`, `capability` and its `origins`, with kernel-fixed text (for example `oats.aweb@1.10.3 declares no binding interface; messaging cannot be prepared`). For a provider's own `needs-configuration` the kernel names the slot, capability and phase but not the missing setting unless the provider sends it (OKF 2.1.1 sends only a code). One unqualified slot no longer hides another slot's diagnostics. Provider free text still never crosses the wire.
|
|
6
|
+
- **`oats trust <capability> --dir <deployment>` on a lock v3 deployment** returns a typed problem with the working command (`oats trust <cap> --deployment <abs> --artifact-set <sha256-…>`) instead of `unsupported lockfileVersion 3`. Nothing is approved automatically.
|
|
7
|
+
- **Help** documents `--artifact-set` and how it pairs with `prepare`'s `selections[].artifactSet` and `approvalRequired[]`.
|
|
8
|
+
- **`prepare` on an absent deployment path** returns a typed explicit-provisioning hold instead of a raw `ENOENT`.
|
|
9
|
+
- **One request file for both commands.** `prepare --request` accepts the explicit `workTarget` that `inspect --request` requires, and `oats inspect --request <f> --emit-prepare-request <out>` writes the converted preparation request.
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
# OATS v0.24.4 — provider reasons cross the wire; one request file for both commands
|
|
2
2
|
|
|
3
|
-
Kernel/Pi/Desktop **0.24.4**.
|
|
3
|
+
Kernel/Pi/Desktop **0.24.4**. Provider releases that declare the new manifest fields (OKF 2.1.2, aweb 1.11.1) require this version.
|
|
4
4
|
|
|
5
|
-
- **The kernel no longer discards the provider's reason.** A provider's `error.message` (and a non-ready `check`'s `result.problems[].message`)
|
|
6
|
-
- **`binding.reasons` and `binding.keys` manifest fields** (optional). `reasons`: 1–64 unique printable-ASCII strings
|
|
7
|
-
- **`inspect --request` accepts `prepare`'s fields.** `operator`, `launch`, `helperLaunches`, `mode
|
|
8
|
-
- **CLI renders the problem `key`** (for example `/bindings/messaging/responsibleHuman`) beside its message.
|
|
5
|
+
- **The kernel no longer discards the provider's reason.** A provider's `error.message` (and a non-ready `check`'s `result.problems[].message`) crosses the binding wire when it is byte-equal to a fixed reason the provider declares in manifest `binding.reasons`, or to the kernel's compatibility list for aweb 1.11.0 and OKF 2.1.2. It is surfaced as the problem's `message` beside `slot`, `capability` and `origins`; anything else is dropped and the kernel template is used. No interpolation, operator values or paths ever cross.
|
|
6
|
+
- **`binding.reasons` and `binding.keys` manifest fields** (optional). `reasons`: 1–64 unique printable-ASCII strings of at most 200 characters, no braces; an invalid declaration refuses. `keys`: a provider's owned operator-binding keys, exact names or trailing-dot namespaces (`stores.`), shape-validated only in this release. Providers must still ignore keys they do not own. Earlier kernels reject manifests carrying these fields, so declaring providers require `>=0.24.4`.
|
|
7
|
+
- **`inspect --request` accepts `prepare`'s fields.** `operator`, `launch`, `helperLaunches`, `mode` and `allowLocalPaths` are accepted, not evaluated, and listed under `ignored`; `--emit-prepare-request` carries them through. The same request file is now valid for both commands.
|
|
8
|
+
- **The CLI renders the problem `key`** (for example `/bindings/messaging/responsibleHuman`) beside its message.
|
|
9
9
|
|
|
10
|
-
|
|
10
|
+
Known limit: OKF 2.1.1 and aweb 1.11.0 cannot be prepared together (OKF validated messaging's `wider` as a store locator); OKF 2.1.2 fixes it.
|
|
@@ -1,12 +1,8 @@
|
|
|
1
|
-
# OATS v0.24.5 — four small fixes
|
|
1
|
+
# OATS v0.24.5 — four small fixes
|
|
2
2
|
|
|
3
|
-
Kernel/Pi/Desktop **0.24.5**. No contract, schema or authority change.
|
|
3
|
+
Kernel/Pi/Desktop **0.24.5**. No contract, schema or authority change.
|
|
4
4
|
|
|
5
|
-
- **Retirement recovers a worktree on the branch it actually has.**
|
|
6
|
-
- **Captured launch: `ifInstalled` runtime rows are not hard blocks, and refusals are attributed.** A
|
|
7
|
-
- **Helper-injection refusal is attributed.** A capability that ships an `inject` without a `helperInjection` policy
|
|
8
|
-
- **`oats onboard --workspace`
|
|
9
|
-
|
|
10
|
-
Rule going forward (recorded in the maintainer's knowledge): **`prepare` never ends in a bare `needs-configuration` after selection** — every refusal is a problem with a slot/capability, or it is a kernel defect. Remaining bare sites are pre-selection input errors, record-shape guards and the skill-name collision, none reachable from a published edition.
|
|
11
|
-
|
|
12
|
-
Not in this release: `binding.keys` enforcement and the dotted-exact-key grammar (0.25); OKF `check` per-cause reasons (OKF 2.1.3, deferred with harvest).
|
|
5
|
+
- **Retirement recovers a worktree on the branch it actually has.** Recovery used the spawn-time branch from `instance.json`, so a worktree that had switched branches could not be retired by the normal path. Recovery now reads the branch from the worktree while it exists (a detached HEAD recovers at its exact commit), falls back to the recorded branch only when the worktree is gone, and records the difference in `recovery.json` (`branchDrift`). Fail-closed behavior is unchanged.
|
|
6
|
+
- **Captured launch: `ifInstalled` runtime rows are not hard blocks, and refusals are attributed.** A `requires` row marked `ifInstalled: true` (a version floor for an optional package) was treated as mandatory, so a Pi launch with aweb `delivery: session` could never publish a resolution. Such rows are now satisfied by absence. Remaining hard rows refuse with an ordinary preparation problem (`slot`, `capability`, `runtime`, `package`, and the manifest's `install` text).
|
|
7
|
+
- **Helper-injection refusal is attributed.** A capability that ships an `inject` without a `helperInjection` policy yields a preparation problem naming that capability, with `origins`.
|
|
8
|
+
- **`oats onboard --workspace` uses the workspace's catalog.** The bundled `package-catalog.json` is a snapshot at the kernel's tag and lags later `oats.framework` releases, so onboarding a current workspace edition refused as `integrity-drift`. Onboarding now reads the workspace repository's `package-catalog.json` at the observed revision; the bundled entry is the fallback and `OATS_PACKAGE_CATALOG` still overrides. The result reports `catalog.origin`, and a drift refusal names both integrities.
|
|
@@ -2,8 +2,5 @@
|
|
|
2
2
|
|
|
3
3
|
Kernel/Pi/Desktop **0.24.6**. No contract, schema or authority change.
|
|
4
4
|
|
|
5
|
-
- **`oats catalog [--json]
|
|
6
|
-
- **Desktop
|
|
7
|
-
- **CI**: the pull-request workflow now checks out full history — the workspace-layout guard reads pinned import revisions with `git cat-file`, and a shallow clone made main red from `f34207e9` to `475ea9bf`.
|
|
8
|
-
|
|
9
|
-
Direction for the rest of S8 is recorded in `docs/design/2026-09-22-desktop-parity-seams.md` (slices 1b–8; kernel seams K1–K8; provider seam P1) and the lifecycle/enrollment/permission/auto-PR decisions in the maintainer's knowledge base. Frames 05 Knowledge and 06 Tasks are excluded by direction.
|
|
5
|
+
- **`oats catalog [--json]`**: a read-only description of the effective official package catalog: its origin (`bundled` snapshot or `OATS_PACKAGE_CATALOG` override), every package with URL, ref, payload root and the exact `oats install` argv, and the capability-to-package alias map. Nothing is acquired, trusted or fetched. Catalog identity grants no executable trust, a bundled catalog may lag later package releases, and aliases are mappings, not an export inventory. See [the official catalog](../official-catalog.md).
|
|
6
|
+
- **Desktop sidebar**: more compact relation guides in the roster, **⌘F** reveals and focuses the filter, **⌘N** opens an explicit soul chooser (never auto-spawns), and shortcut hints follow user rebinds.
|
|
@@ -1,81 +1,52 @@
|
|
|
1
1
|
# OATS v0.24.7 — instance Git observation, soul declarations, and no hollow agents
|
|
2
2
|
|
|
3
|
-
Kernel/Pi/Desktop **0.24.7
|
|
4
|
-
(`instanceGitApi: 1`, `soulsApi: 1`),
|
|
5
|
-
first-team
|
|
3
|
+
Kernel/Pi/Desktop **0.24.7** (PR #57). Two additive read-only contracts for the
|
|
4
|
+
Desktop (`instanceGitApi: 1`, `soulsApi: 1`), a spawn refusal that closes a
|
|
5
|
+
first-team defect, and Desktop views built on them. The contracts are
|
|
6
|
+
described in the [Desktop CLI API](../desktop-cli-api.md).
|
|
6
7
|
|
|
7
8
|
## Kernel
|
|
8
9
|
|
|
9
10
|
- **`oats instance git <instance> [--home] [--dir] [--json]`** and
|
|
10
|
-
**`oats instance diff <instance> --file <id> --revision <rev> [--index-revision <idx>] [--json]
|
|
11
|
-
read-only Git observation of one instance's work tree.
|
|
12
|
-
the
|
|
13
|
-
`
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
`
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
`
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
→ re-observe, never rendered. The legacy background `gitState` collector —
|
|
53
|
-
which ran Git against every instance tree on every roster poll without helper
|
|
54
|
-
controls and substituted healthy zeros on failure — is **removed**. Desktop
|
|
55
|
-
Git reads are the K1 route only. GitHub/PR card is *unavailable* pending the
|
|
56
|
-
P1 decision: forge connections are an ADE/workstation integration, not a capability (working names `oats.git`/`oats.forge` retired).
|
|
57
|
-
- **3** Souls + Sources on K4: declarations, recorded provenance (`null` renders
|
|
58
|
-
*Unrecorded*, never *Local*), "Not declared" vs "Not reported" distinguished,
|
|
59
|
-
sources-installed ≠ Ready.
|
|
60
|
-
- **4** Capabilities: official catalog via `oats catalog` (0.24.6+) plus the
|
|
61
|
-
deployment's classic inventory; aliases are mappings not exports, refs are refs,
|
|
62
|
-
override catalogs conspicuously labelled; "Add capability" copies the schema's
|
|
63
|
-
exact `oats install <package>` argv and never executes it.
|
|
64
|
-
- **6a** Spawn modal to the redesign on existing seams: two-column layout,
|
|
65
|
-
grouped soul chooser, provider/model with reported-vs-assumed provenance,
|
|
66
|
-
launch configuration restored (an already-supported property the renderer had
|
|
67
|
-
regressed out of), fields that need K6 rendered disabled with their seam named.
|
|
68
|
-
- **7a** Active overview (frame 07) on the roster: anonymous count-labelled
|
|
69
|
-
relation groups (the roster reports no group names), activity `unknown` until K7.
|
|
70
|
-
|
|
71
|
-
Desktop CLI floor for the new views is **0.24.7** (`instanceGitApi`/`soulsApi`
|
|
72
|
-
gates); an older CLI renders those views as *unavailable*, never as empty-healthy.
|
|
73
|
-
|
|
74
|
-
## Also
|
|
75
|
-
|
|
76
|
-
- Board and seams doc dates corrected (2026-09-21, not 09-22 — lead clock error
|
|
77
|
-
caught by the second operator). Pinned SHAs unaffected.
|
|
78
|
-
- Second-operator `launch` re-run on 0.24.6 passed both halves (publish with an
|
|
79
|
-
executable launch selection; hard runtime row refuses attributed).
|
|
80
|
-
- OKF 2.1.3 bug list (deferred with harvest): `check` per-cause reasons; retire
|
|
81
|
-
leaves the per-source `okf-<id>` schedule definition enabled.
|
|
11
|
+
**`oats instance diff <instance> --file <id> --revision <rev> [--index-revision <idx>] [--json]`**:
|
|
12
|
+
read-only Git observation of one instance's work tree. It reports the branch
|
|
13
|
+
the tree is actually on (the spawn-recorded branch as `recorded`, with a
|
|
14
|
+
`drift` flag), status with renames, and upstream and default-branch
|
|
15
|
+
comparisons separately (no upstream is `null`). A diff refuses
|
|
16
|
+
`E_STALE_OBSERVATION` if HEAD, the index or the file moved; reads are bounded
|
|
17
|
+
at 256 KiB. Several homes with one name refuse `E_AMBIGUOUS_INSTANCE`; a
|
|
18
|
+
retired tree is `E_NO_WORKTREE`. The observed tree's repository config is
|
|
19
|
+
treated as untrusted input: external diff, textconv, fsmonitor and hooks are
|
|
20
|
+
disabled, the caller's Git environment and global config are not inherited,
|
|
21
|
+
and no object or index refresh is written (`readOnly` in the response).
|
|
22
|
+
- **`oats inspect --json` souls carry their declarations** (`soulsApi: 1`):
|
|
23
|
+
`declarations`, `provenance` (recorded by `oats onboard` from now on; `null`
|
|
24
|
+
means unrecorded), `readiness` (declared sources joined against the payload's
|
|
25
|
+
capability inventory, separate from launchability), and `result.sources`.
|
|
26
|
+
- **No hollow agents.** `oats create` declares `oats.core` by default, which
|
|
27
|
+
suppresses the kernel's legacy skills, but nothing activated the replacement,
|
|
28
|
+
so `spawn` produced an agent with no operational curriculum. `spawn` now
|
|
29
|
+
refuses `E_REQUIREMENT_INACTIVE` before creating anything, with the remedy
|
|
30
|
+
(`oats install oats.framework` if needed, then `oats use oats.core --soul
|
|
31
|
+
<name>`) and the opt-out (remove the declaration). `create` states the
|
|
32
|
+
activation step (`next-step` note, `declaredCapabilities` in `--json`).
|
|
33
|
+
|
|
34
|
+
## Desktop
|
|
35
|
+
|
|
36
|
+
- A shared contextual right panel (Instance, Git & GitHub, Soul) with a
|
|
37
|
+
collapsed rail, per-workspace preferences and a temporary focus mode.
|
|
38
|
+
- **Git & GitHub panel** on `oats instance git|diff`: worktree, branch and
|
|
39
|
+
drift, upstream and base named separately, file counts and rename paths, and
|
|
40
|
+
a bounded read-only diff; stale observations are re-read, never rendered. The
|
|
41
|
+
old background Git collector, which ran Git on every roster poll, is removed.
|
|
42
|
+
The GitHub/PR card is unavailable in this release.
|
|
43
|
+
- **Souls and Sources** on the new declarations: recorded provenance
|
|
44
|
+
(`null` renders *Unrecorded*), "Not declared" distinct from "Not reported".
|
|
45
|
+
- **Capabilities**: the official catalog via `oats catalog` plus the
|
|
46
|
+
deployment's inventory; override catalogs are labelled; "Add capability"
|
|
47
|
+
copies the exact `oats install <package>` argv and never executes it.
|
|
48
|
+
- **Spawn modal** redesigned: two-column layout, grouped soul chooser,
|
|
49
|
+
provider and model with their provenance, and launch configuration restored.
|
|
50
|
+
- **Active overview** of the roster, with activity shown as unknown.
|
|
51
|
+
|
|
52
|
+
The new views need CLI **0.24.7**; an older CLI renders them as unavailable.
|
|
@@ -1,107 +1,69 @@
|
|
|
1
1
|
# OATS v0.24.8 — lifecycle plans, readiness, spawn preview, instance events, and guarded Stop/Remove in the Desktop
|
|
2
2
|
|
|
3
|
-
Kernel/Pi/Desktop **0.24.8
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
`features[]` names and the API integers below — never on the version number,
|
|
8
|
-
never by optimistic invocation.
|
|
3
|
+
Kernel/Pi/Desktop **0.24.8** (PR #69). Every new contract is advertised:
|
|
4
|
+
consumers gate on `oats version --json` `features[]` names and API integers,
|
|
5
|
+
never on the version number. Full shapes are in the
|
|
6
|
+
[Desktop CLI API](../desktop-cli-api.md).
|
|
9
7
|
|
|
10
|
-
## Kernel
|
|
8
|
+
## Kernel
|
|
11
9
|
|
|
12
|
-
- **Lifecycle plans** (
|
|
13
|
-
`oats instance stop <i> --plan|--apply` and `oats retire <i> --plan`, then
|
|
14
|
-
|
|
15
|
-
[--discard-worktree] [--delete-branch]`. A plan states
|
|
16
|
-
targets
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
instead of deleting it; `--discard-worktree` removes; `--delete-branch`
|
|
24
|
-
deletes the branch the tree is **verified** to be on and implies discard.
|
|
25
|
-
Receipt `retention {worktree: retained|removed|absent, movedTo, branch,
|
|
26
|
-
recordedBranch, branchDeleted?, branchDeletionSkipped?}`; a failed move is
|
|
10
|
+
- **Lifecycle plans** (`lifecycleApi: 1`, feature `lifecycle-plans`):
|
|
11
|
+
`oats instance stop <i> --plan|--apply` and `oats retire <i> --plan`, then
|
|
12
|
+
the guarded apply `oats retire <i> --plan-revision <rev> --idempotency-key
|
|
13
|
+
<key> [--discard-worktree] [--delete-branch]`. A plan states the facts
|
|
14
|
+
(ordered targets, session and work facts, recorded children) under a
|
|
15
|
+
`planRevision`; apply refuses `E_PLAN_STALE` when they moved. A repeated key
|
|
16
|
+
replays its receipt instead of acting twice.
|
|
17
|
+
- **Retention by default** (feature `retire-retention`): a plain retire moves
|
|
18
|
+
the worktree to `<workspace>/.agents/worktrees/<repo>/<branch>` instead of
|
|
19
|
+
deleting it; `--discard-worktree` removes it; `--delete-branch` deletes the
|
|
20
|
+
branch the tree is verified to be on and implies discard. A failed move is
|
|
27
21
|
`E_WORK_PRESERVATION_FAILED` with the home kept.
|
|
28
|
-
- **Children first
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
with
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
`
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
creating anything. `--base <ref>` picks the base; `@native-default` names the
|
|
55
|
-
runtime's own default explicitly.
|
|
56
|
-
- **Instance events** (K7, `eventsApi: 1`, feature `instance-events`):
|
|
57
|
-
`oats instance events <i> [--limit] [--since] --json` — typed, producer-
|
|
58
|
-
attributed lifecycle events (spawned, launched, restarted, stopped,
|
|
59
|
-
stop-refused, retire-planned, retired, worktree-retained, branch-deleted,
|
|
60
|
-
child-spawn-refused, recomposed) from the home's log and the workspace's
|
|
61
|
-
retained copy; truncation and unreadable lines are visible, never smoothed.
|
|
62
|
-
- **Schedule run history** (K8, `scheduleApi: 2`, feature `schedule-history`):
|
|
63
|
-
schedules report `recentRuns` — settled runs only, producer order, ≤ 50.
|
|
22
|
+
- **Children first.** A guarded retire stops the plan's recorded children
|
|
23
|
+
(bounded SIGTERM, never escalated); a child still running refuses the whole
|
|
24
|
+
retirement with `E_CHILDREN_RUNNING`.
|
|
25
|
+
- Branch deletion is re-verified after hooks; a mismatch deletes nothing and
|
|
26
|
+
reports `branchDeletionSkipped`. Ambiguous parentage is reported, never
|
|
27
|
+
acted on.
|
|
28
|
+
- An older CLI does not understand `--plan` and would retire on it, so
|
|
29
|
+
consumers must gate on the feature.
|
|
30
|
+
- **Readiness** (`readinessApi: 1`): `oats readiness [--soul] [--home]
|
|
31
|
+
[--verify-signatures] [--policy] --json` reports installed, trusted,
|
|
32
|
+
configured and enrolled, each `pass|fail|unknown|not-applicable`, with items
|
|
33
|
+
and remedies. Signatures are `unknown` unless `--verify-signatures` is given.
|
|
34
|
+
- **Child spawn policy**: soul `children: {spawn: bool}` and spawn
|
|
35
|
+
`--allow-child-spawns|--no-child-spawns`, recorded in `instance.json`; a spawn
|
|
36
|
+
with `--parent` under a disabled policy refuses `E_CHILD_SPAWNS_DISABLED`.
|
|
37
|
+
- **Spawn preview** (`spawnPreviewApi: 1`): `oats spawn … --preview --json`
|
|
38
|
+
states the instance name, home, worktree, branch, base, runtime, model, launch
|
|
39
|
+
configuration, work mode and policy without creating anything. `--base <ref>`
|
|
40
|
+
picks the base; `@native-default` names the runtime's default.
|
|
41
|
+
- **Instance events** (`eventsApi: 1`, feature `instance-events`):
|
|
42
|
+
`oats instance events <i> [--limit] [--since] --json` returns typed lifecycle
|
|
43
|
+
events (spawned, launched, restarted, stopped, retired, worktree-retained,
|
|
44
|
+
branch-deleted, recomposed and others); truncation and unreadable lines are
|
|
45
|
+
visible.
|
|
46
|
+
- **Schedule run history** (`scheduleApi: 2`, feature `schedule-history`):
|
|
47
|
+
schedules report up to 50 settled `recentRuns`.
|
|
64
48
|
- **Instruction refresh** (feature `session-recompose`): `oats session recompose
|
|
65
|
-
--home <abs> [--dry-run] --json` recomposes a
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
nothing is restarted. An operator action for when a role changes and a
|
|
69
|
-
respawn is not possible or wanted.
|
|
70
|
-
- Remote workspaces: `oats instance git|diff` reach a remote instance through
|
|
71
|
-
the negotiated route (K1 remote), refusing rather than guessing where no
|
|
72
|
-
route exists.
|
|
49
|
+
--home <abs> [--dry-run] --json` recomposes a live home's `AGENTS.md` from its
|
|
50
|
+
current soul, keeps the previous text beside it, and restarts nothing.
|
|
51
|
+
- `oats instance git|diff` reach remote instances through the saved route.
|
|
73
52
|
|
|
74
|
-
## Desktop
|
|
53
|
+
## Desktop
|
|
75
54
|
|
|
76
|
-
- **
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
One guarded local route; the plan is read from the CLI, each confirmation
|
|
87
|
-
gets an opaque reference, the idempotency key is minted on the first
|
|
88
|
-
confirmation and kept for that intent's retries, one apply at a time; lost
|
|
89
|
-
responses are shown as **unknown outcome**, never "no effect". Stale plans
|
|
90
|
-
require a new confirmation; a refused child stop names the child. The old
|
|
91
|
-
unguarded retire route now answers `E_PLAN_REQUIRED`.
|
|
92
|
-
- Everything above is **unavailable** (not hidden, not guessed) when the
|
|
93
|
-
installed CLI does not advertise the corresponding feature.
|
|
94
|
-
|
|
95
|
-
## Also
|
|
96
|
-
|
|
97
|
-
- Lessons recorded: consumers gate on advertised features, never on
|
|
98
|
-
optimistic invocation; a declaration that suppresses a default must be
|
|
99
|
-
enforced; read-only Git observation is a security boundary.
|
|
100
|
-
- Verification budget: one full gate per change is PR CI; locally only the
|
|
101
|
-
affected suites. Desktop-only changes run the Desktop suites plus the
|
|
102
|
-
focused suite.
|
|
55
|
+
- **Connections**: Settings → Connections with "Connect GitHub" (device flow
|
|
56
|
+
through `gh`, which keeps the credential). The Git & GitHub panel gains an
|
|
57
|
+
informational PR card tied to the observed revision and branch.
|
|
58
|
+
- **Stop and Remove**: the instance menu offers *Stop…* and *Remove
|
|
59
|
+
instance…*, each with a plan-backed confirmation showing the kernel's targets,
|
|
60
|
+
children, session and work facts, the real branch and the retention choices.
|
|
61
|
+
Lost responses show an unknown outcome; stale plans need a new confirmation.
|
|
62
|
+
The old unguarded retire route answers `E_PLAN_REQUIRED`.
|
|
63
|
+
- Each control is unavailable when the installed CLI does not advertise its
|
|
64
|
+
feature.
|
|
103
65
|
|
|
104
66
|
## Upgrade
|
|
105
67
|
|
|
106
|
-
`npm i -g @awebai/oats@0.24.8`, then `oats doctor`. Desktops
|
|
107
|
-
|
|
68
|
+
`npm i -g @awebai/oats@0.24.8`, then `oats doctor`. Desktops on an older CLI
|
|
69
|
+
keep working; new controls appear as the CLI advertises their features.
|