docs← Back to article

Markdown for LLMs

Arxo A3 decision table 0.1

The source Markdown for this article. Copy it into your assistant or download it as a text file.

Download this articlePlain text ↗
# Arxo A3 decision table 0.1

Canonical typed decision table: the authoring surface of the A3 format.

## Versions

Accepted `schemaVersion`: `law.decision/0.1`.

## Top-level fields

| name | type-or-$ref | required | description |
|---|---|---|---|
| `schemaVersion` | `"law.decision/0.1"` | yes | — |
| `kind` | `"decision-table"` | yes | — |
| `id` | [`#/$defs/StableId`](#stableid) | yes | — |
| `mode` | enum (2) | yes | — |
| `hitPolicy` | enum (6) | yes | — |
| `priorityOrder` | `array` | no | — |
| `total` | `boolean` | yes | — |
| `aggregation` | enum (5) | no | — |
| `inputs` | `array` | yes | — |
| `outputs` | `array` | yes | — |
| `emit` | [`#/$defs/EmitTarget`](#emittarget) | no | — |
| `rows` | `array` | yes | — |
| `labels` | `array` | no | Labels of the table ITSELF — they propagate to its symbol_decl. They do not spill onto rows: a row has its own carrier, because the table generates a node for each row, and the table label would give them all the same name. |
| `metadata` | `object` | no | — |

## Enumerations

| location | values |
|---|---|
| `properties/schemaVersion` | `"law.decision/0.1"` |
| `properties/kind` | `"decision-table"` |
| `properties/mode` | `"function"`, `"rules"` |
| `properties/hitPolicy` | `"unique"`, `"first"`, `"any"`, `"priority"`, `"collect"`, `"multiple"` |
| `properties/aggregation` | `"list"`, `"count"`, `"sum"`, `"min"`, `"max"` |
| `allOf/0/if/properties/hitPolicy` | `"priority"` |
| `allOf/1/if/properties/mode` | `"rules"` |
| `allOf/2/if/properties/hitPolicy` | `"collect"` |
| `$defs/LiteralTerm/properties/kind` | `"value"` |
| `$defs/Operand/oneOf/1/properties/kind` | `"parameter"` |
| `$defs/Condition/oneOf/0/properties/kind` | `"any"` |
| `$defs/Condition/oneOf/1/properties/kind` | `"comparison"` |
| `$defs/Condition/oneOf/1/properties/op` | `"eq"`, `"neq"`, `"lt"`, `"lte"`, `"gt"`, `"gte"` |
| `$defs/Condition/oneOf/2/properties/kind` | `"interval"` |
| `$defs/Condition/oneOf/3/properties/kind` | `"in"` |
| `$defs/Condition/oneOf/4/properties/kind` | `"and"` |
| `$defs/Label/properties/status` | `"official"`, `"unofficial"`, `"translation"` |
| `$defs/EmitArgument/oneOf/0/properties/kind` | `"input"` |
| `$defs/EmitArgument/oneOf/1/properties/kind` | `"output"` |
| `$defs/EmitArgument/oneOf/2/properties/kind` | `"literal"` |
| `$defs/EmitTarget/properties/polarity` | `"positive"`, `"negative"` |

## Raw schema

[`https://law.arxo.io/schema/decision-table.schema.json`](https://law.arxo.io/schema/decision-table.schema.json)

## `StableId`

Type: `string`.

## `LocalId`

Type: `string`.

## `TypeRef`

Type: `object`.
Required: `name`.

| name | type-or-$ref | description |
|---|---|---|
| `name` | [`#/$defs/StableId`](#stableid) | — |
| `args` | `array` | — |
| `optional` | `boolean` | — |

## `JsonValue`

Definition `JsonValue`.

## `LiteralTerm`

Type: `object`.
Required: `kind`, `type`.

| name | type-or-$ref | description |
|---|---|---|
| `currency` | `string` | — |
| `display` | `string` | — |
| `kind` | `"value"` | — |
| `type` | [`#/$defs/TypeRef`](#typeref) | — |
| `unit` | `string` | — |
| `value` | [`#/$defs/JsonValue`](#jsonvalue) | — |
| `factors` | `array` | The multiset of base units of a quantity. `unit` is not parsed on read but is CHECKED against its rendering: the "base _per_ base" grammar is ambiguous. |
| `lower` | `string` | Lower bound of the interval, an irreducible fraction `<n>/<d>`. |
| `upper` | `string` | Upper bound of the interval. |
| `derivation` | `string` | The derivation canon. The bounds are RECOMPUTED from it, not checked field by field. |
| `poly` | `array` | Algebraic minimal-polynomial coefficients in ascending order, as ASCII-int decimal strings; verified through the canon funnel on read, never trusted. |
| `root` | `integer` | 1-based index of the real root in ascending order; range-checked against the Sturm count on read. |
| `expr` | `string` | Real-expression canon string; verified through the constructor funnel on read, never trusted. |

## `Operand`

Definition `Operand`.

## `Condition`

Definition `Condition`.

## `InputColumn`

Type: `object`.
Required: `id`, `type`.

| name | type-or-$ref | description |
|---|---|---|
| `id` | [`#/$defs/LocalId`](#localid) | — |
| `name` | `string` | — |
| `type` | [`#/$defs/TypeRef`](#typeref) | — |

## `OutputColumn`

Type: `object`.
Required: `id`, `type`.

| name | type-or-$ref | description |
|---|---|---|
| `id` | [`#/$defs/LocalId`](#localid) | — |
| `name` | `string` | — |
| `type` | [`#/$defs/TypeRef`](#typeref) | — |

## `InputCell`

Type: `object`.
Required: `input`, `condition`.

| name | type-or-$ref | description |
|---|---|---|
| `input` | [`#/$defs/LocalId`](#localid) | — |
| `condition` | [`#/$defs/Condition`](#condition) | — |

## `OutputCell`

Type: `object`.
Required: `output`, `value`.

| name | type-or-$ref | description |
|---|---|---|
| `output` | [`#/$defs/LocalId`](#localid) | — |
| `value` | [`#/$defs/Operand`](#operand) | — |

## `DecisionRow`

Type: `object`.
Required: `id`, `when`, `then`, `anchors`.

| name | type-or-$ref | description |
|---|---|---|
| `id` | [`#/$defs/LocalId`](#localid) | — |
| `when` | `array` | — |
| `then` | `array` | — |
| `anchors` | `array` | — |
| `labels` | `array` | Labels of a table row. They propagate to the nodes generated by THIS row (in mode=rules — to its rule, in mode=function — to its helper symbol); the table label does NOT spill onto rows, otherwise every row would be named after the table. Outside the semantic hash, inside the content hash of the node. |

## `LanguageTag`

Type: `string`.

## `Label`

A copy of the label definition from the intermediate-representation schema: A3 schemas are self-contained and do not borrow even their own primitives (StableId, LiteralTerm, TypeRef).

Type: `object`.
Required: `language`, `status`, `text`.

| name | type-or-$ref | description |
|---|---|---|
| `grammaticalForms` | `object` | Morphological forms of the label; the key is a slot from the closed dictionary of its language tag, the value is a non-empty form. |
| `language` | [`#/$defs/LanguageTag`](#languagetag) | — |
| `status` | enum (3) | — |
| `text` | `string` | — |

## `EmitArgument`

Definition `EmitArgument`.

## `EmitTarget`

Type: `object`.
Required: `predicate`, `polarity`, `args`.

| name | type-or-$ref | description |
|---|---|---|
| `predicate` | [`#/$defs/StableId`](#stableid) | — |
| `polarity` | enum (2) | — |
| `args` | `array` | — |