@cynodia/axiom 0.15.0-alpha.2 → 0.15.0-alpha.3
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 +2 -2
- package/docs/ACTIONS_TRANSACTIONS.md +1 -1
- package/docs/AGENT_API.md +1 -1
- package/docs/AGENT_REFERENCE.md +16 -5
- package/docs/ANTI_PATTERNS.md +1 -1
- package/docs/AUTHORITY.md +1 -1
- package/docs/AUTHORIZATION.md +49 -24
- package/docs/CONSTRAINTS.md +1 -1
- package/docs/DISTRIBUTED_AUTHORITY.md +1 -1
- package/docs/EFFECTS.md +1 -1
- package/docs/EVENTS.md +1 -1
- package/docs/EXPRESSIONS.md +11 -8
- package/docs/GRAPH_MODEL.md +1 -1
- package/docs/INTEGRATIONS.md +1 -1
- package/docs/LIVE_QUERIES.md +1 -1
- package/docs/LOCATIONS.md +1 -1
- package/docs/MIGRATIONS.md +1 -1
- package/docs/PRESENTATION.md +1 -1
- package/docs/QUERIES.md +1 -1
- package/docs/RUNTIME.md +1 -1
- package/docs/SEMANTIC_CONTRACT.md +1 -1
- package/docs/STATE.md +1 -1
- package/docs/STORAGE.md +1 -1
- package/docs/SUBSCRIPTIONS.md +1 -1
- package/docs/TRIGGERS.md +1 -1
- package/docs/UI.md +1 -1
- package/docs/VALIDATION.md +1 -1
- package/docs/WORKFLOWS.md +2 -2
- package/llms.txt +1 -1
- package/package.json +5 -5
package/README.md
CHANGED
|
@@ -33,7 +33,7 @@ Shorter forms of the same routing: [`AGENTS.md`](AGENTS.md) and [`llms.txt`](llm
|
|
|
33
33
|
at this package's root.
|
|
34
34
|
|
|
35
35
|
**Status: experimental / alpha.** The API may change between alpha releases. The
|
|
36
|
-
documentation in `docs/` describes this exact version, `0.15.0-alpha.
|
|
36
|
+
documentation in `docs/` describes this exact version, `0.15.0-alpha.3`.
|
|
37
37
|
|
|
38
38
|
## Installation
|
|
39
39
|
|
|
@@ -47,7 +47,7 @@ Every release of this project is a pre-release and npm's `latest` tag points at
|
|
|
47
47
|
plain command above installs the current version. **There is no `alpha` dist-tag** — the tag
|
|
48
48
|
was removed once it stopped tracking releases, and `npm install @cynodia/axiom@alpha` now
|
|
49
49
|
fails with a 404. Pin the exact version instead when one is needed:
|
|
50
|
-
`npm install @cynodia/axiom@0.15.0-alpha.
|
|
50
|
+
`npm install @cynodia/axiom@0.15.0-alpha.3`.
|
|
51
51
|
|
|
52
52
|
These are ES modules compiled to ES2022; import them with `import`, not `require`. There is
|
|
53
53
|
no published Axiom CLI. `@cynodia/axiom-server`'s SQLite persistence adapter additionally
|
package/docs/AGENT_API.md
CHANGED
package/docs/AGENT_REFERENCE.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# Agent reference
|
|
2
2
|
|
|
3
|
-
Axiom 0.15.0-alpha.
|
|
3
|
+
Axiom 0.15.0-alpha.3. Compressed operational contract. Read this plus the `.d.ts`
|
|
4
4
|
declarations before authoring or modifying an Axiom application.
|
|
5
5
|
|
|
6
6
|
Formal guarantees: [`SEMANTIC_CONTRACT.md`](SEMANTIC_CONTRACT.md). Mistakes that compile:
|
|
@@ -1263,12 +1263,16 @@ reference is now enforced; `AUTHORIZATION_ENFORCEMENT_UNAVAILABLE` /
|
|
|
1263
1263
|
One authorization language. An `AuthorizationPolicyDef` (graph node kind
|
|
1264
1264
|
`authorization-policy`) is a single boolean `allow` `Expression`. Exactly `true` ⇒ ALLOW;
|
|
1265
1265
|
`false`, an absent policy, or **any** evaluation error ⇒ DENY (fail closed). **A missing
|
|
1266
|
-
PRINCIPAL / RESOURCE field never satisfies a rule** (spec15pt2
|
|
1266
|
+
PRINCIPAL / RESOURCE field never satisfies a rule** (spec15pt2 for policies; spec15pt3 for
|
|
1267
|
+
the legacy `ActionDef.authorization` expression — one canonical
|
|
1268
|
+
`evaluateAuthorizationExpression`, so both surfaces behave the same): the evaluator is
|
|
1267
1269
|
three-valued (concrete / security-absence / error), so `PRINCIPAL.role != "banned"`,
|
|
1268
1270
|
`NOT(PRINCIPAL.role == "banned")` and `RESOURCE.ownerId == PRINCIPAL.id` all DENY when the
|
|
1269
|
-
named field is absent or the caller is anonymous — `neq` / `not` / `or`
|
|
1270
|
-
into authority
|
|
1271
|
-
|
|
1271
|
+
named field is absent or the caller is anonymous — `neq` / `not` / `or` / comparison cannot
|
|
1272
|
+
turn absence into authority, and an error keeps its provenance through `not`. **Yes,
|
|
1273
|
+
`ActionDef.authorization` fails closed if a referenced principal attribute is missing.**
|
|
1274
|
+
`literal(true)` stays a genuine constant (explicit public still admits anonymous). Ordinary
|
|
1275
|
+
`Expression` semantics elsewhere are unchanged. Closed
|
|
1272
1276
|
expression scope — the three reserved ids exported from core: `ref(PRINCIPAL)`
|
|
1273
1277
|
(`'axiom_principal'`, the id `ActionDef.authorization` already uses), `ref(RESOURCE)`
|
|
1274
1278
|
(`'axiom_resource'` — for `action.invoke`, a `{ id, kind }` descriptor), `ref(OPERATION)`
|
|
@@ -1290,6 +1294,13 @@ document it always did. Totality: every validate/compile/analyze surface is tota
|
|
|
1290
1294
|
`null` / non-object policy / non-plain `allow` — structured diagnostic, never a native
|
|
1291
1295
|
`TypeError`.
|
|
1292
1296
|
|
|
1297
|
+
Runtime evaluator version is authority-compatibility identity, **not** graph identity. The
|
|
1298
|
+
`AuthorityCompatibilityKey` carries an `authorizationRuntime` discriminator (`axiom.authz.v3`
|
|
1299
|
+
in this build) whenever the IR carries an authorization *decision* — an `AuthorizationPolicyDef`
|
|
1300
|
+
reference **or** a legacy `ActionDef.authorization` expression. A cluster mixing evaluator
|
|
1301
|
+
versions (`alpha.2` ↔ `alpha.3`) over such a graph is fail-closed incompatible;
|
|
1302
|
+
`semanticFingerprint` is unchanged.
|
|
1303
|
+
|
|
1293
1304
|
Static analysis: `AgentAPI.analyzeAuthorization()` → what protects every action / query /
|
|
1294
1305
|
workflow surface, per-policy dependencies + a secret-free rule `summary`, the `unprotected`
|
|
1295
1306
|
list (surfaces with no explicit boundary), and per-workflow `privilegeReviewActions`
|
package/docs/ANTI_PATTERNS.md
CHANGED
package/docs/AUTHORITY.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# Authority
|
|
2
2
|
|
|
3
|
-
Axiom 0.15.0-alpha.
|
|
3
|
+
Axiom 0.15.0-alpha.3. How an application crosses the trust boundary.
|
|
4
4
|
|
|
5
5
|
Until 0.5.x an Axiom application executed locally. 0.6 adds an **authority**: a generic
|
|
6
6
|
runtime that owns state, decides mutations and persists them. The same semantic graph
|
package/docs/AUTHORIZATION.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# Authorization
|
|
2
2
|
|
|
3
|
-
Axiom 0.15.0-alpha.
|
|
3
|
+
Axiom 0.15.0-alpha.3. The operational contract for **authorization completeness** — the 0.15
|
|
4
4
|
milestone (spec15). Whether a principal may perform a semantic operation is part of the
|
|
5
5
|
graph's executable meaning — not a runtime concern, not UI visibility, not something that
|
|
6
6
|
varies by transport, provider, process, retry path or authority topology. `axiom.server.v9`
|
|
@@ -11,12 +11,16 @@ prior contract.
|
|
|
11
11
|
> outside portable application semantics. **Authorization** answers *may this principal
|
|
12
12
|
> perform this semantic operation?* — that is what this document defines.
|
|
13
13
|
|
|
14
|
-
0.15 landed in nine phases (A–I); `0.15.0-alpha.2` (spec15pt2)
|
|
15
|
-
authorization **absent-value safety** (a
|
|
16
|
-
authority), `validateGraph` totality over a
|
|
17
|
-
`host.authenticate` exception boundary.
|
|
18
|
-
|
|
19
|
-
|
|
14
|
+
0.15 landed in nine phases (A–I); `0.15.0-alpha.2` (spec15pt2) and `0.15.0-alpha.3`
|
|
15
|
+
(spec15pt3) are corrective passes. **spec15pt2**: authorization **absent-value safety** (a
|
|
16
|
+
missing PRINCIPAL / RESOURCE field never grants authority), `validateGraph` totality over a
|
|
17
|
+
malformed `allow` tree, a fail-closed `host.authenticate` exception boundary. **spec15pt3**:
|
|
18
|
+
the same fail-closed absent-value semantics now also cover the **legacy
|
|
19
|
+
`ActionDef.authorization` expression** (F1-legacy) — one canonical evaluator for every
|
|
20
|
+
authorization expression, so `PRINCIPAL.role != "banned"` / `NOT(PRINCIPAL.role == "banned")`
|
|
21
|
+
no longer allow an anonymous or attribute-less caller through that surface either. This
|
|
22
|
+
document describes the **model** (stable) and marks which phase delivered each surface.
|
|
23
|
+
External adversarial validation precedes the semantic freeze (spec15 §134).
|
|
20
24
|
|
|
21
25
|
| Phase | Delivers | State |
|
|
22
26
|
| --- | --- | --- |
|
|
@@ -70,16 +74,30 @@ graph.addNode<AuthorizationPolicyDef>({
|
|
|
70
74
|
- **ALLOW / DENY, fail closed.** `allow` evaluating to exactly `true` is **ALLOW**. `false`,
|
|
71
75
|
an absent policy field, or *any evaluation error* is **DENY** — the safe direction for a
|
|
72
76
|
failed access check is always refusal (spec15 §8, §123).
|
|
73
|
-
- **A missing PRINCIPAL / RESOURCE field never satisfies a rule** (spec15pt2 F1
|
|
74
|
-
evaluator is three-valued — a concrete
|
|
75
|
-
scope object does not carry), or an
|
|
77
|
+
- **A missing PRINCIPAL / RESOURCE field never satisfies a rule** (spec15pt2 F1,
|
|
78
|
+
spec15pt3 F1-legacy). The authorization-expression evaluator is three-valued — a concrete
|
|
79
|
+
value, **security-scope absence** (a field the scope object does not carry), or an
|
|
80
|
+
evaluation error. A comparison, `not`, `neq`, `lt`, `contains`, `or` or any composition
|
|
76
81
|
whose truth would depend on absence is *not satisfied*, so `PRINCIPAL.role != "banned"` /
|
|
77
82
|
`NOT(PRINCIPAL.role == "banned")` / `RESOURCE.ownerId == PRINCIPAL.id` all **DENY** when
|
|
78
|
-
the named field is absent or the caller is anonymous.
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
+
the named field is absent or the caller is anonymous. An evaluation error keeps its
|
|
84
|
+
provenance through `not` / `or`, so it can never be negated back to ALLOW. This is
|
|
85
|
+
authorization-evaluation semantics only; ordinary `Expression` equality / nullish behaviour
|
|
86
|
+
elsewhere is unchanged (spec15pt2 §4, spec15pt3 §6, §31). An `OR` branch that is
|
|
87
|
+
*concretely* true still allows even if the other branch is absent-dependent. `literal(true)`
|
|
88
|
+
is a genuine constant — an explicitly public rule still admits an anonymous caller; the
|
|
89
|
+
invariant is "missing referenced security fields cannot create authority", **not**
|
|
90
|
+
"anonymous is forbidden" (spec15pt3 §17).
|
|
91
|
+
- **This applies to both authorization expressions Axiom supports** (spec15pt3 §74, §128):
|
|
92
|
+
the modern `AuthorizationPolicyDef.allow` **and** the retained legacy
|
|
93
|
+
`ActionDef.authorization` boolean expression. They share one canonical security-absence
|
|
94
|
+
primitive (`evaluateAuthorizationExpression`); they differ only in the *final*
|
|
95
|
+
interpretation applied downstream — a policy allows on exactly `true`, legacy keeps its
|
|
96
|
+
historical truthiness — never in how absence, boolean composition or errors propagate. So
|
|
97
|
+
yes: `ActionDef.authorization` **fails closed if a referenced principal attribute is
|
|
98
|
+
missing.** The legacy expression's historical scope (which could also read an ordinary
|
|
99
|
+
`StateDef`) is preserved; an unresolvable ref fails closed exactly as a throwing evaluation
|
|
100
|
+
did before.
|
|
83
101
|
- **Referenced by id.** A protected surface points at a policy:
|
|
84
102
|
- `ActionDef.authorizationPolicy` — `action.invoke`
|
|
85
103
|
- `QueryDef.authorizationPolicy` — `query.read` (distinct from `readPolicyId`, which
|
|
@@ -134,13 +152,18 @@ architecture, preserved). Therefore:
|
|
|
134
152
|
A graph with **no** authorization vocabulary compiles to the byte-identical v1–v8 document
|
|
135
153
|
it always did and its fingerprint is unchanged (spec15 §39, §132).
|
|
136
154
|
|
|
137
|
-
**Evaluator version.**
|
|
138
|
-
differently
|
|
139
|
-
`
|
|
140
|
-
`
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
155
|
+
**Evaluator version.** Successive builds evaluate the *same* authorization expression
|
|
156
|
+
differently — `alpha.1` → `alpha.2` for policies (spec15pt2 F1), `alpha.2` → `alpha.3` for
|
|
157
|
+
the legacy `ActionDef.authorization` expression (spec15pt3 F1-legacy) — yet the graph, and
|
|
158
|
+
its `semanticFingerprint`, is identical (runtime evaluator version is
|
|
159
|
+
authority-compatibility identity, not graph identity). So the `AuthorityCompatibilityKey`
|
|
160
|
+
carries an `authorizationRuntime` discriminator (`alpha.2` = `axiom.authz.v2`, `alpha.3` =
|
|
161
|
+
`axiom.authz.v3`), present whenever the IR carries an authorization *decision* — an
|
|
162
|
+
`AuthorizationPolicyDef` reference **or** a legacy `ActionDef.authorization` expression. A
|
|
163
|
+
mixed cluster across evaluator versions, over any such graph, is fail-closed
|
|
164
|
+
**incompatible** (present-vs-absent and any string difference are both mismatches;
|
|
165
|
+
spec15pt2 §35, spec15pt3 §37-§42). A graph with **no** authorization decision never carries
|
|
166
|
+
the field and rolls every upgrade unaffected.
|
|
144
167
|
|
|
145
168
|
---
|
|
146
169
|
|
|
@@ -153,7 +176,7 @@ effect retry) reconstructs it from durable identity, never a process-local objec
|
|
|
153
176
|
|
|
154
177
|
| Operation | Kind | Resource | Effective principal | Pre-0.15 behaviour | 0.15 target |
|
|
155
178
|
| --- | --- | --- | --- | --- | --- |
|
|
156
|
-
| `handle({kind:'invoke'})` / `ActionDef` | execute | `ActionDef` (`{id,kind}`) | caller credential | `ActionDef.authorization` expr, or public | **C ✅** — `action.invoke` policy ∧ legacy expr, re-evaluated on every invocation against current policy |
|
|
179
|
+
| `handle({kind:'invoke'})` / `ActionDef` | execute | `ActionDef` (`{id,kind}`) | caller credential | `ActionDef.authorization` expr, or public | **C ✅** — `action.invoke` policy ∧ legacy expr (both through the one security-absence-aware evaluator, spec15pt3), re-evaluated on every invocation against current policy |
|
|
157
180
|
| workflow `action` step | execute | `ActionDef` | **workflow's start principal** | inherits action's `authorization`, re-evaluated per step (0.14) | **C ✅** — same `authorize()` as a direct call; workflow start never amplifies privilege (§101); denial is terminal not retried (§109) |
|
|
158
181
|
| trigger / scheduler / event → action | execute | `ActionDef` | semantic object that scheduled it (no ambient SYSTEM) | `source: 'system'`, `invocation.allowedSources` | **C ✅** — policy under the canonical effective principal; `'system'` source is not privilege (§26, §102) |
|
|
159
182
|
| `handle({kind:'query'})` / `QueryDef` | read | `QueryDef` | caller credential | `ReadPolicyDef` row filter, or public | **D ✅** — `query.read` policy gates the whole query before any provider call; `ReadPolicyDef` still filters rows, AND-ed into the effective filter so `filter`/`sort`/`limit`/aggregate see the authorized dataset (§18, §81, §82) |
|
|
@@ -186,7 +209,9 @@ stream serves no further data. Its `details` carry the canonical `operation`, a
|
|
|
186
209
|
machine `reason` —
|
|
187
210
|
`policy-denied` (the policy is not exactly `true`), `policy-error` (the policy threw — an
|
|
188
211
|
evaluation error is DENY, never ALLOW, spec15 §123), `legacy-denied` / `legacy-error` (the
|
|
189
|
-
legacy `authorization` expression
|
|
212
|
+
legacy `ActionDef.authorization` expression — `legacy-denied` covers the spec15pt3 case
|
|
213
|
+
where the decision depended on a missing security-scope field), or (for workflow instance
|
|
214
|
+
ops with no policy declared)
|
|
190
215
|
`owner-mismatch`, or (spec15pt2 F3, when `host.authenticate` itself threw)
|
|
191
216
|
`authentication-error` with `operation: 'authentication'` — plus `actionId` / `queryId`
|
|
192
217
|
where applicable. A denied `query` operation
|
package/docs/CONSTRAINTS.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# Distributed authority
|
|
2
2
|
|
|
3
|
-
*This document describes Axiom `0.15.0-alpha.
|
|
3
|
+
*This document describes Axiom `0.15.0-alpha.3`.*
|
|
4
4
|
|
|
5
5
|
The authoritative runtime (`docs/AUTHORITY.md`) may run as **more than one process at the
|
|
6
6
|
same time**, over one shared persistence provider, without any change to the
|
package/docs/EFFECTS.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# Effects
|
|
2
2
|
|
|
3
|
-
Axiom 0.15.0-alpha.
|
|
3
|
+
Axiom 0.15.0-alpha.3. External effects are not rollback-capable state mutations. This file
|
|
4
4
|
is the delivery model; [`AUTHORITY.md`](AUTHORITY.md#external-effects) is the load-bearing
|
|
5
5
|
statement of why, and [`INTEGRATIONS.md`](INTEGRATIONS.md) is the operation vocabulary this
|
|
6
6
|
builds on.
|
package/docs/EVENTS.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# Events
|
|
2
2
|
|
|
3
|
-
Axiom 0.15.0-alpha.
|
|
3
|
+
Axiom 0.15.0-alpha.3. An event is a typed fact — something that happened — never work
|
|
4
4
|
itself. [`AUTHORITY.md`](AUTHORITY.md#external-events) is the load-bearing statement;
|
|
5
5
|
this file is the vocabulary and the webhook delivery mechanism. A **subscription** is the
|
|
6
6
|
other way an external fact becomes an `EventDef` payload — see
|
package/docs/EXPRESSIONS.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# Expressions
|
|
2
2
|
|
|
3
|
-
Axiom 0.15.0-alpha.
|
|
3
|
+
Axiom 0.15.0-alpha.3. An expression describes **what value is computed**. It is a tree of
|
|
4
4
|
plain data, never source text and never a callback. Evaluation is pure: an expression MUST
|
|
5
5
|
NOT change state.
|
|
6
6
|
|
|
@@ -103,13 +103,16 @@ object([
|
|
|
103
103
|
- `not` → `!truthy(operand)`.
|
|
104
104
|
- `negate` → `-Number(operand ?? 0)`.
|
|
105
105
|
|
|
106
|
-
> **
|
|
107
|
-
> `AuthorizationPolicyDef.allow`
|
|
108
|
-
> `
|
|
109
|
-
>
|
|
110
|
-
>
|
|
111
|
-
>
|
|
112
|
-
>
|
|
106
|
+
> **An expression evaluated as an authorization decision evaluates differently for a
|
|
107
|
+
> missing security field.** Both `AuthorizationPolicyDef.allow` **and** the legacy
|
|
108
|
+
> `ActionDef.authorization` expression are run by one dedicated three-valued evaluator
|
|
109
|
+
> (`evaluateAuthorizationExpression`): a `field(ref(PRINCIPAL) | ref(RESOURCE), F)` read of a
|
|
110
|
+
> field the scope object does not carry is **security-scope absence**, not an ordinary
|
|
111
|
+
> `undefined`. A comparison, `not`, `neq`, `or` or any composition whose truth would depend
|
|
112
|
+
> on absence is *not satisfied*, so the decision DENIES (spec15pt2 F1, spec15pt3 F1-legacy).
|
|
113
|
+
> This is scoped to authorization evaluation only — the general expression semantics above
|
|
114
|
+
> are unchanged everywhere else, and unchanged for the *ordinary* (non-authorization)
|
|
115
|
+
> evaluation of any expression.
|
|
113
116
|
|
|
114
117
|
### `call(fn, ...args)`
|
|
115
118
|
|
package/docs/GRAPH_MODEL.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# Graph model
|
|
2
2
|
|
|
3
|
-
Axiom 0.15.0-alpha.
|
|
3
|
+
Axiom 0.15.0-alpha.3. The `ApplicationGraph` is the authoritative representation of an
|
|
4
4
|
application. Everything else — the IR, the page, the DOM — is derived from it and is never
|
|
5
5
|
edited.
|
|
6
6
|
|
package/docs/INTEGRATIONS.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# Integrations
|
|
2
2
|
|
|
3
|
-
Axiom 0.15.0-alpha.
|
|
3
|
+
Axiom 0.15.0-alpha.3. How an application declares and calls an external system, without
|
|
4
4
|
embedding a transport, an SDK or a secret in the graph. The authority boundary this
|
|
5
5
|
depends on is [`AUTHORITY.md`](AUTHORITY.md#external-systems); this file is the vocabulary.
|
|
6
6
|
|
package/docs/LIVE_QUERIES.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# Realtime — live canonical queries
|
|
2
2
|
|
|
3
|
-
Axiom 0.15.0-alpha.
|
|
3
|
+
Axiom 0.15.0-alpha.3. The operational contract for **observing a `QueryDef` result over
|
|
4
4
|
time**: subscribe once, receive an initial coherent result, then receive canonical changes
|
|
5
5
|
as authoritative committed state moves — through any compatible authority, across
|
|
6
6
|
reconnects. `axiom.server.v7` (0.13 adds no IR vocabulary).
|
package/docs/LOCATIONS.md
CHANGED
package/docs/MIGRATIONS.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# Schema evolution & semantic migrations
|
|
2
2
|
|
|
3
|
-
Axiom 0.15.0-alpha.
|
|
3
|
+
Axiom 0.15.0-alpha.3. The operational contract for evolving a deployed application's
|
|
4
4
|
semantic model and its persisted canonical data over time — adding a required field,
|
|
5
5
|
splitting one field into two, removing an obsolete one, migrating millions of
|
|
6
6
|
provider-backed rows — **without** an application-authored SQL migration, an ORM migration,
|
package/docs/PRESENTATION.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# Presentation
|
|
2
2
|
|
|
3
|
-
Axiom 0.15.0-alpha.
|
|
3
|
+
Axiom 0.15.0-alpha.3. Presentation is **semantic UX intent**, expressed as data on a UI
|
|
4
4
|
node. It names roles, tokens and device classes. It never names a colour, a length, a media
|
|
5
5
|
query or a CSS property.
|
|
6
6
|
|
package/docs/QUERIES.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# Semantic data access & the query layer
|
|
2
2
|
|
|
3
|
-
Axiom 0.15.0-alpha.
|
|
3
|
+
Axiom 0.15.0-alpha.3. The operational contract for demand-driven reads over authoritative
|
|
4
4
|
data that is too large to materialize as a `StateDef` — 500,000 orders, 5,000,000 order
|
|
5
5
|
lines, years of audit rows. `axiom.server.v6`.
|
|
6
6
|
|
package/docs/RUNTIME.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# Semantic contract
|
|
2
2
|
|
|
3
|
-
Axiom 0.15.0-alpha.
|
|
3
|
+
Axiom 0.15.0-alpha.3. Runtime guarantees, stated formally. This file defines behavior; it
|
|
4
4
|
does not teach. Where this file and any specification in `../specs/` disagree, this file
|
|
5
5
|
describes the implementation and is authoritative.
|
|
6
6
|
|
package/docs/STATE.md
CHANGED
package/docs/STORAGE.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# Storage and blobs
|
|
2
2
|
|
|
3
|
-
Axiom 0.15.0-alpha.
|
|
3
|
+
Axiom 0.15.0-alpha.3. How an application stores, references, serves and deletes binary data —
|
|
4
4
|
an attachment, a document, a photograph, a diagnostic log — with no filesystem path, no
|
|
5
5
|
upload route and no download route anywhere in it.
|
|
6
6
|
|
package/docs/SUBSCRIPTIONS.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# Subscriptions
|
|
2
2
|
|
|
3
|
-
Axiom 0.15.0-alpha.
|
|
3
|
+
Axiom 0.15.0-alpha.3. How an application receives a stream of external events — an MQTT
|
|
4
4
|
topic, a WebSocket feed, a queue consumer, a filesystem watcher, a serial port — without a
|
|
5
5
|
client, a socket or a callback anywhere in the graph.
|
|
6
6
|
|
package/docs/TRIGGERS.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# Triggers
|
|
2
2
|
|
|
3
|
-
Axiom 0.15.0-alpha.
|
|
3
|
+
Axiom 0.15.0-alpha.3. A `TriggerDef` says **when** an action should be invoked, without
|
|
4
4
|
embedding callback code. `docs/AUTHORITY.md`
|
|
5
5
|
[§ Triggers](AUTHORITY.md#triggers) is the load-bearing statement of the execution model;
|
|
6
6
|
this file is the vocabulary.
|
package/docs/UI.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# UI
|
|
2
2
|
|
|
3
|
-
Axiom 0.15.0-alpha.
|
|
3
|
+
Axiom 0.15.0-alpha.3. Eleven semantic UI node kinds describe **what exists and what it does**.
|
|
4
4
|
How it looks is [presentation](PRESENTATION.md).
|
|
5
5
|
|
|
6
6
|
All eleven share `UIBase`:
|
package/docs/VALIDATION.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# Validation
|
|
2
2
|
|
|
3
|
-
Axiom 0.15.0-alpha.
|
|
3
|
+
Axiom 0.15.0-alpha.3. Validation is authoring-time structural checking. It is not the same
|
|
4
4
|
as runtime constraint evaluation — see [`CONSTRAINTS.md`](CONSTRAINTS.md) for the four
|
|
5
5
|
layers of correctness.
|
|
6
6
|
|
package/docs/WORKFLOWS.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# Durable workflows
|
|
2
2
|
|
|
3
|
-
Axiom 0.15.0-alpha.
|
|
3
|
+
Axiom 0.15.0-alpha.3. The operational contract for **long-running semantic computations with
|
|
4
4
|
a durable control position** — orchestration that survives process death, authority
|
|
5
5
|
failover, retries, timer delivery, event delivery and ordinary distributed contention
|
|
6
6
|
without application-owned infrastructure. `axiom.server.v8`.
|
|
@@ -255,7 +255,7 @@ step's argument expressions / `retry` policy, a `wait-event` step's `where` / `b
|
|
|
255
255
|
or binding migration, and none is inferred ("closest step" recovery never happens).
|
|
256
256
|
- A graph with **no** `WorkflowDef` compiles to the byte-identical `axiom.server.v1`–`v7`
|
|
257
257
|
document it always did, and its `semanticFingerprint` / `schemaFingerprint` are unchanged.
|
|
258
|
-
- Pre-`0.15.0-alpha.
|
|
258
|
+
- Pre-`0.15.0-alpha.3` instances carry a compatibility key computed before `WorkflowDef`
|
|
259
259
|
participated; a corrected authority treats them as incompatible and fails closed (these
|
|
260
260
|
are pre-freeze alpha releases — silent reinterpretation is the only unacceptable
|
|
261
261
|
outcome).
|
package/llms.txt
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# Axiom
|
|
2
2
|
|
|
3
|
-
> AI-native semantic application framework, version 0.15.0-alpha.
|
|
3
|
+
> AI-native semantic application framework, version 0.15.0-alpha.3. An Axiom application is a
|
|
4
4
|
> typed semantic graph — state, behavior, constraints, UI structure, presentation and
|
|
5
5
|
> authority as structured data — executed by generic runtimes. The JavaScript, HTML and CSS
|
|
6
6
|
> that reach a browser are compiler output and are never authored or edited. The primary
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@cynodia/axiom",
|
|
3
|
-
"version": "0.15.0-alpha.
|
|
3
|
+
"version": "0.15.0-alpha.3",
|
|
4
4
|
"description": "AI-native semantic web application framework.",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"author": "AskTech AS",
|
|
@@ -34,10 +34,10 @@
|
|
|
34
34
|
}
|
|
35
35
|
},
|
|
36
36
|
"dependencies": {
|
|
37
|
-
"@cynodia/axiom-core": "0.15.0-alpha.
|
|
38
|
-
"@cynodia/axiom-runtime": "0.15.0-alpha.
|
|
39
|
-
"@cynodia/axiom-compiler": "0.15.0-alpha.
|
|
40
|
-
"@cynodia/axiom-agent-api": "0.15.0-alpha.
|
|
37
|
+
"@cynodia/axiom-core": "0.15.0-alpha.3",
|
|
38
|
+
"@cynodia/axiom-runtime": "0.15.0-alpha.3",
|
|
39
|
+
"@cynodia/axiom-compiler": "0.15.0-alpha.3",
|
|
40
|
+
"@cynodia/axiom-agent-api": "0.15.0-alpha.3"
|
|
41
41
|
},
|
|
42
42
|
"scripts": {
|
|
43
43
|
"build": "tsc -b tsconfig.json"
|