Skip to content

Commit 547a19d

Browse files
committed
feat: publish planning artifacts and CLI contracts
1 parent 3fbb5db commit 547a19d

15 files changed

Lines changed: 1952 additions & 193 deletions

CHANGELOG.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
## 0.2.0 - 2026-08-02
33
- Added canonical world and manifest digests, revision lineage, semantic change sets, offline observed-state evidence, mandate-aware admission, explicit risks and approvals, and deterministic provider-neutral reconciliation plans.
44
- Added `diff`, `admit`, and `plan` commands. Planning is deliberately non-executable and keeps canonical intent, capabilities, provider bindings, and observed drift separate.
5+
- Added explicit admission/approval states, typed mandate constraints and observation outcomes, lineage validation, separate intent/materialization digests, lifecycle policy, typed plan predicates, semantic dependency graphs, and published planning artifact schemas.
56

67
## 0.1.0 - 2026-08-01
78
- Added the v0alpha2 provider-neutral world model, semantic diagnostics, defaults, manifest, graph, resolver derivation, CLI, examples, schema, and documentation.

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,4 +20,4 @@ netsovereign plan current.yaml proposed.yaml --observed observed.json
2020
The change commands compare meaning, evaluate declared mandates, classify approval risks and offline
2121
drift, and describe convergence without executing providers or touching infrastructure.
2222

23-
See [the domain guide](docs/domain-model.md), [v0alpha2 schema guide](docs/schema-v0alpha2.md), and [roadmap](docs/roadmap.md). The broader example is illustrative: assurance claims and provider-shaped seams are declarations, not implemented guarantees.
23+
See [the domain guide](docs/domain-model.md), [v0.2 change-planning guide](docs/change-planning-v0.2.md), [v0alpha2 schema guide](docs/schema-v0alpha2.md), and [roadmap](docs/roadmap.md). The broader example is illustrative: assurance claims and provider-shaped seams are declarations, not implemented guarantees.

docs/change-planning-v0.2.md

Lines changed: 61 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,61 @@
1+
# Sovereign change planning v0.2
2+
3+
v0.2 is an offline decision surface. It compares declarations, evaluates the authority already
4+
accepted by the current world, classifies evidence, and emits a provider-neutral plan. It never
5+
loads providers, contacts a network, invokes a subprocess, or mutates infrastructure.
6+
7+
## Artifact identities
8+
9+
Every revision exposes separate SHA-256 identities:
10+
11+
- **declaration digest** covers the normalized complete declaration;
12+
- **canonical-intent digest** excludes revision metadata and replaceable provider bindings;
13+
- **materialization digest** covers capabilities and provider bindings;
14+
- **manifest digest** exists only for a semantically valid manifest.
15+
16+
A proposal may provide its expected parent revision and declaration digest. A mismatch is rejected
17+
as stale lineage. Change and drift identifiers use full content digests, so approvals bind to the
18+
exact reviewed before/after values.
19+
20+
## Admission states and time
21+
22+
Admission has three outcomes: `rejected`, `pending_approval`, and `admitted`. An approval-gated
23+
proposal is not admitted until matching approval evidence is supplied. `evaluated_at` is an explicit
24+
input used for mandate validity; observation timestamps describe evidence and never select the
25+
admission time.
26+
27+
Mandates are matched against authority, governed action, resource classes, jurisdiction, validity,
28+
and typed constraints (`operations`, `paths`, and `subject_ids`). Current accepted state is validated
29+
before it can authorise a proposal.
30+
31+
## Observations and plans
32+
33+
Facts use stable semantic paths such as `resources/root-zone`, and distinguish `present`, `absent`,
34+
`unknown`, and `unreadable`. Unknown or unreadable evidence does not manufacture drift. Actionable
35+
drift carries its authority and mandate into a convergence step.
36+
37+
Plan preconditions and expected outcomes are typed JSON objects rather than prose. Dependencies form
38+
a deterministic semantic DAG: for example, a changed provider binding depends on its changed
39+
capability, while unrelated changes remain independent. Reversibility is explicitly classified and
40+
remains `unknown` unless v0.2 can justify a stronger provider-neutral statement.
41+
42+
Schemas are published at:
43+
44+
- `schemas/observed-v0.2.schema.json`;
45+
- `schemas/admission-v0.2.schema.json`;
46+
- `schemas/plan-v0.2.schema.json`.
47+
48+
## CLI contract
49+
50+
```console
51+
netsovereign diff current.yaml proposed.yaml
52+
netsovereign admit current.yaml proposed.yaml \
53+
--evaluated-at 2026-08-02T12:00:00Z \
54+
--parent-revision 7 --parent-digest sha256:... \
55+
--observed observed.json --approval approval.yaml
56+
netsovereign plan current.yaml proposed.yaml --format yaml --output plan.yaml
57+
```
58+
59+
`admit` and `plan` exit with `0` when admitted, `1` when rejected, `2` for malformed input or CLI
60+
usage, and `3` while approval is pending. `--format json|yaml`, `--compact`, and `--output` control
61+
serialization without changing artifact identity.

0 commit comments

Comments
 (0)