docs← Back to article

Markdown for LLMs

Arxo normative change dossier 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 normative change dossier 0.1

Verifiable dossier of a normative change for the Arxo Change Protocol. Assembled from producer artifacts named by a change set; nothing is executed by the builder. dossierCore is deterministic and dossierCoreHash is the sha256 of its canonical bytes; receipt sits outside the hash. Sections in order: composition (1), differences (3), goals (4), population (6), transition (7), dependents (8), states (9), open (10), guarantees (11). Intent classification (2) is carried inside differences. A dossier proves only what is formalized: the formalization measure and the world boundary are printed in every dossier, and a draft is never presented as law.

## Versions

Accepted `schemaVersion`: `law.change-dossier/0.1`.

## Top-level fields

| name | type-or-$ref | required | description |
|---|---|---|---|
| `schemaVersion` | `"law.change-dossier/0.1"` | yes | — |
| `changeSetId` | `string` | yes | — |
| `changeSetHash` | [`#/$defs/Digest`](#digest) | yes | sha256 of the canonical bytes of the change-set document. |
| `dossierCore` | [`#/$defs/DossierCore`](#dossiercore) | yes | — |
| `dossierCoreHash` | [`#/$defs/Digest`](#digest) | yes | — |
| `receipt` | [`#/$defs/Receipt`](#receipt) | yes | — |

## Enumerations

| location | values |
|---|---|
| `properties/schemaVersion` | `"law.change-dossier/0.1"` |
| `$defs/LegalStatus` | `"draft"`, `"adopted"`, `"in-force"`, `"superseded"` |
| `$defs/MeasureSide/properties/status` | `"taken"`, `"not-taken"` |
| `$defs/SideSummary/properties/kind` | `"edition"`, `"draft"`, `"case-release"` |
| `$defs/Composition/properties/kind` | `"draft-amendment"`, `"edition-change"`, `"case-release"` |
| `$defs/Composition/properties/units/items/properties/subject` | `"package"`, `"case"` |
| `$defs/SemdiffEntry/properties/kind` | `"added"`, `"changed"`, `"removed"` |
| `$defs/Classification` | `"expected"`, `"outside-boundary"`, `"observed"`, `"unverified"` |
| `$defs/ResultView/properties/kind` | `"proposition"`, `"position-count"`, `"money"`, `"number"`, `"date"`, `"boolean"`, `"text"`, `"value"`, `"structured"`, `"collection"`, `"status"` |
| `$defs/Goals/properties/status` | `"evaluated"`, `"absent"` |
| `$defs/Population/properties/status` | `"present"`, `"absent"` |
| `$defs/Transition/properties/status` | `"declared"`, `"absent"` |
| `$defs/InstitutionalDependency/properties/kind` | `"act"`, `"parameter"`, `"database"`, `"registry"`, `"authority"`, `"form"`, `"methodology"`, `"other"` |
| `$defs/InstitutionalDependency/properties/provenance` | `"formal"`, `"reviewed"`, `"inferred"` |
| `$defs/Dependents/properties/rerun` | `"performed"`, `"not-performed"`, `"not-applicable"` |
| `$defs/States/properties/formalization/properties/differential/properties/status` | `"byte-identical"`, `"diverged"`, `"absent"` |
| `$defs/States/properties/operational/properties/status` | `"not-tracked"`, `"tracked"` |
| `$defs/ChannelState/properties/status` | `"current"`, `"stale"`, `"unknown"` |
| `$defs/ComputationEntry/properties/kind` | `"evaluation"`, `"clir"` |
| `$defs/ComputationEntry/properties/status` | `"current"`, `"stale"` |
| `$defs/ImplementationTask/properties/kind` | `"republish"`, `"repin"`, `"recompute"`, `"supply-fact"`, `"review"`, `"other"` |
| `$defs/ImplementationTask/properties/evidence` | `"none"`, `"attested"`, `"verified"` |
| `$defs/ObjectionResult/properties/class` | `"expert"`, `"approved-criterion"`, `"binding-decision"` |
| `$defs/ObjectionResult/properties/status` | `"open"`, `"accepted"`, `"rejected"`, `"superseded"` |
| `$defs/Guarantee/properties/kind` | `"source-correspondence"`, `"semantics-execution"`, `"proofs"`, `"trials"` |
| `$defs/Guarantee/properties/status` | `"covered"`, `"partial"`, `"absent"` |
| `$defs/Receipt/properties/reproduction/properties/status` | `"reproduced"`, `"not-attempted"`, `"failed"` |

## Raw schema

[`https://law.arxo.io/schema/change-dossier.schema.json`](https://law.arxo.io/schema/change-dossier.schema.json)

## `Digest`

Type: `string`.

## `Date`

Type: `string`.

## `Count`

Type: `integer`.

## `LegalStatus`

Values: `"draft"`, `"adopted"`, `"in-force"`, `"superseded"`.

## `Measure`

Formalization measure of an act: articles by level.

Type: `object`.
Required: `articles`, `executable`, `interpreted`, `anchored`, `sourceOnly`, `excluded`.

| name | type-or-$ref | description |
|---|---|---|
| `articles` | [`#/$defs/Count`](#count) | — |
| `executable` | [`#/$defs/Count`](#count) | — |
| `interpreted` | [`#/$defs/Count`](#count) | — |
| `anchored` | [`#/$defs/Count`](#count) | — |
| `sourceOnly` | [`#/$defs/Count`](#count) | — |
| `excluded` | [`#/$defs/Count`](#count) | — |
| `note` | `string` | — |

## `MeasureSide`

Measure of one side, or an explicit statement why it was not taken.

Type: `object`.
Required: `status`.

| name | type-or-$ref | description |
|---|---|---|
| `status` | enum (2) | — |
| `measure` | [`#/$defs/Measure`](#measure) | — |
| `note` | `string` | — |

## `PackageRef`

Type: `object`.
Required: `name`, `version`.

| name | type-or-$ref | description |
|---|---|---|
| `name` | `string` | — |
| `version` | `string` | — |
| `contentHash` | [`#/$defs/Digest`](#digest) | — |

## `SideSummary`

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

| name | type-or-$ref | description |
|---|---|---|
| `kind` | enum (3) | — |
| `label` | `string` | — |
| `edition` | `string` | — |
| `programHash` | [`#/$defs/Digest`](#digest) | — |
| `artifactHash` | [`#/$defs/Digest`](#digest) | — |
| `draftUnits` | [`#/$defs/Count`](#count) | — |
| `sources` | [`#/$defs/Count`](#count) | — |

## `Composition`

Section 1: what is compared, how deep it is formalized, and where the world ends.

Type: `object`.
Required: `kind`, `legalStatus`, `units`, `measure`, `world`.

| name | type-or-$ref | description |
|---|---|---|
| `kind` | enum (3) | — |
| `legalStatus` | [`#/$defs/LegalStatus`](#legalstatus) | — |
| `jurisdiction` | `string` | — |
| `units` | `array` | — |
| `measure` | `object` | — |
| `editions` | `object` | Edition axis of an edition-change: the projection date of each side and the lifecycle state of every edition of the root on that date. |
| `world` | `object` | — |

## `EditionSide`

Type: `object`.
Required: `legalTime`, `states`.

| name | type-or-$ref | description |
|---|---|---|
| `legalTime` | [`#/$defs/Date`](#date) | — |
| `states` | `array` | — |
| `undatedNodes` | [`#/$defs/Count`](#count) | — |

## `SemdiffEntry`

Type: `object`.
Required: `id`, `kind`, `classification`.

| name | type-or-$ref | description |
|---|---|---|
| `id` | `string` | — |
| `kind` | enum (3) | — |
| `hashBefore` | [`#/$defs/Digest`](#digest) | — |
| `hashAfter` | [`#/$defs/Digest`](#digest) | — |
| `classification` | [`#/$defs/Classification`](#classification) | — |

## `Classification`

expected: declared in intent and observed; outside-boundary: observed but not declared while an intent exists, or touching the protected scope; observed: observed by at least one scenario, no intent declared; unverified: touched by the diff and executed by no scenario on either side.

Values: `"expected"`, `"outside-boundary"`, `"observed"`, `"unverified"`.

## `ScenarioRow`

Type: `object`.
Required: `name`, `before`, `after`, `outcomeHashBefore`, `outcomeHashAfter`, `classification`.

| name | type-or-$ref | description |
|---|---|---|
| `name` | `string` | — |
| `legalTime` | `string` | — |
| `before` | `string` | — |
| `after` | `string` | — |
| `outcomeHashBefore` | [`#/$defs/Digest`](#digest) | — |
| `outcomeHashAfter` | [`#/$defs/Digest`](#digest) | — |
| `resultHashBefore` | [`#/$defs/Digest`](#digest) | — |
| `resultHashAfter` | [`#/$defs/Digest`](#digest) | — |
| `resultDeltas` | `array` | — |
| `classification` | [`#/$defs/Classification`](#classification) | — |

## `ResultDelta`

Type: `object`.
Required: `id`, `before`, `after`.

| name | type-or-$ref | description |
|---|---|---|
| `id` | `string` | — |
| `before` | anyOf (2) | — |
| `after` | anyOf (2) | — |

## `ResultView`

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

| name | type-or-$ref | description |
|---|---|---|
| `kind` | enum (11) | — |
| `value` | `string` | — |
| `unit` | `string` | — |
| `sourceType` | `string` | — |
| `resultKind` | `string` | — |
| `statusFields` | `object` | — |

## `Differences`

Section 3 with the intent classification of section 2.

Type: `object`.
Required: `verdict`, `semanticChange`, `semdiff`, `scenarios`, `classification`, `unobservedTouched`, `uncovered`.

| name | type-or-$ref | description |
|---|---|---|
| `verdict` | `string` | — |
| `semanticChange` | `boolean` | — |
| `semdiff` | `object` | — |
| `scenarios` | `object` | — |
| `classification` | `object` | — |
| `unobservedTouched` | `array` | Norms touched by the diff that no scenario executed on either side: for them 'outcome unchanged' is absence of observation, not a finding. |
| `uncovered` | `object` | — |

## `GoalRow`

Type: `object`.
Required: `goal`, `before`, `after`, `basisAfter`, `newlyFailingWorlds`, `repairedWorlds`, `counterexamplesAfter`.

| name | type-or-$ref | description |
|---|---|---|
| `goal` | `string` | — |
| `before` | `string` | — |
| `after` | `string` | — |
| `basisAfter` | `boolean` | — |
| `newlyFailingWorlds` | `array` | — |
| `repairedWorlds` | `array` | — |
| `counterexamplesAfter` | [`#/$defs/Count`](#count) | — |

## `Goals`

Section 4. Goals are formal properties over outcomes with a recorded basis; policy criteria and empirical hypotheses are not goals and never appear here.

Type: `object`.
Required: `status`, `rows`, `broken`, `alreadyFailed`.

| name | type-or-$ref | description |
|---|---|---|
| `status` | enum (2) | — |
| `verdict` | `string` | — |
| `worlds` | [`#/$defs/Count`](#count) | — |
| `rows` | `array` | — |
| `broken` | `array` | — |
| `alreadyFailed` | `array` | — |
| `note` | `string` | — |

## `Population`

Section 6. Statistics over a weighted bank is not a legal answer in any case.

Type: `object`.
Required: `status`, `note`.

| name | type-or-$ref | description |
|---|---|---|
| `status` | enum (2) | — |
| `reportCoreHash` | [`#/$defs/Digest`](#digest) | — |
| `verdict` | `string` | — |
| `note` | `string` | — |

## `Transition`

Section 7: the commencement regime as read, with its reading decision and status.

Type: `object`.
Required: `status`.

| name | type-or-$ref | description |
|---|---|---|
| `status` | enum (2) | — |
| `general` | [`#/$defs/Date`](#date) | — |
| `exceptions` | `array` | — |
| `readingDecision` | `string` | — |
| `boundaryScenarios` | `array` | Scenarios whose legal time lies on either side of a commencement date, by name. |

## `ConsumerRerun`

Type: `object`.
Required: `package`, `from`, `to`, `verdict`, `scenarios`, `changed`, `changedRows`.

| name | type-or-$ref | description |
|---|---|---|
| `package` | `string` | — |
| `label` | `string` | — |
| `from` | [`#/$defs/Date`](#date) | — |
| `to` | [`#/$defs/Date`](#date) | — |
| `verdict` | `string` | — |
| `scenarios` | [`#/$defs/Count`](#count) | — |
| `changed` | [`#/$defs/Count`](#count) | — |
| `rootEditions` | `object` | — |
| `changedRows` | `array` | — |
| `calendarSnapshotInjected` | `string` | — |
| `concat` | `array` | Packages added beyond the import closure for this rerun (replay as the family runs). |
| `health` | [`#/$defs/BankHealth`](#bankhealth) | — |
| `note` | `string` | — |

## `BankHealth`

Health of the scenario bank on both sides: healthy — results present and no blocking issue; vacuous — no result; blocked — a blocking issue (AMBIGUOUS_CALENDAR, EDITION_NOT_APPLICABLE, rejected input); error — the run failed. 'No change' is evidence only where both sides are healthy.

Type: `object`.
Required: `scenarios`, `healthyBothSides`, `vacuousBothSides`, `before`, `after`, `issues`.

| name | type-or-$ref | description |
|---|---|---|
| `scenarios` | [`#/$defs/Count`](#count) | — |
| `healthyBothSides` | [`#/$defs/Count`](#count) | — |
| `vacuousBothSides` | [`#/$defs/Count`](#count) | — |
| `before` | [`#/$defs/HealthTally`](#healthtally) | — |
| `after` | [`#/$defs/HealthTally`](#healthtally) | — |
| `issues` | `object` | — |

## `HealthTally`

Type: `object`.
Required: `healthy`, `vacuous`, `blocked`, `error`.

| name | type-or-$ref | description |
|---|---|---|
| `healthy` | [`#/$defs/Count`](#count) | — |
| `vacuous` | [`#/$defs/Count`](#count) | — |
| `blocked` | [`#/$defs/Count`](#count) | — |
| `error` | [`#/$defs/Count`](#count) | — |

## `InstitutionalDependency`

Type: `object`.
Required: `id`, `kind`, `name`, `provenance`, `inWorld`.

| name | type-or-$ref | description |
|---|---|---|
| `id` | `string` | — |
| `kind` | enum (8) | — |
| `name` | `string` | — |
| `provenance` | enum (3) | formal: an import or bridge in the lock; reviewed: named by the text and confirmed by a reviewer; inferred: found by search, not confirmed. Only formal dependencies enter any verdict. |
| `basis` | `string` | — |
| `inWorld` | `boolean` | — |

## `Dependents`

Section 8: packages of the corpus that import the changed package, whether they were re-run against the AFTER state, and the institutional dependencies wider than import with their provenance class.

Type: `object`.
Required: `consumers`, `rerun`.

| name | type-or-$ref | description |
|---|---|---|
| `consumers` | `array` | — |
| `rerun` | enum (3) | — |
| `reruns` | `array` | — |
| `institutional` | `array` | — |
| `institutionalByProvenance` | `object` | — |
| `note` | `string` | — |

## `CompositionLegResult`

Type: `object`.
Required: `label`, `from`, `to`, `scenarios`, `changed`, `verdict`.

| name | type-or-$ref | description |
|---|---|---|
| `label` | `string` | — |
| `from` | [`#/$defs/Date`](#date) | — |
| `to` | [`#/$defs/Date`](#date) | — |
| `scenarios` | [`#/$defs/Count`](#count) | — |
| `changed` | [`#/$defs/Count`](#count) | — |
| `verdict` | `string` | — |
| `changedScenarios` | `array` | — |

## `CompositionResult`

Composition of successive changes: transient — changed in some step but not end-to-end (a change that appears and is reverted, visible only stepwise); onlyEndToEnd — changed end-to-end but in no single step (an interaction of steps); inEveryStep — changed in every step.

Type: `object`.
Required: `steps`, `endToEnd`, `transient`, `onlyEndToEnd`, `inEveryStep`, `note`.

| name | type-or-$ref | description |
|---|---|---|
| `steps` | `array` | — |
| `endToEnd` | [`#/$defs/CompositionLegResult`](#compositionlegresult) | — |
| `transient` | `array` | — |
| `onlyEndToEnd` | `array` | — |
| `inEveryStep` | `array` | — |
| `note` | `string` | — |

## `CoverageResult`

Coverage of the finite product of declared axes by the scenario bank (profile read from the bank). A statement about the bank, not a legal answer.

Type: `object`.
Required: `axes`, `cells`, `covered`, `coveredCells`, `note`.

| name | type-or-$ref | description |
|---|---|---|
| `axes` | `array` | — |
| `cells` | [`#/$defs/Count`](#count) | — |
| `covered` | [`#/$defs/Count`](#count) | — |
| `coveredCells` | `array` | — |
| `scenariosWithoutAxis` | [`#/$defs/Count`](#count) | — |
| `note` | `string` | — |

## `States`

Section 9: three independent states and the gap between them. 'The act is in force, the model is incomplete' is a regular row, not an error.

Type: `object`.
Required: `legal`, `formalization`, `operational`, `gap`.

| name | type-or-$ref | description |
|---|---|---|
| `legal` | `object` | — |
| `formalization` | `object` | — |
| `operational` | `object` | — |
| `gap` | `array` | — |

## `ChannelState`

Type: `object`.
Required: `channel`, `status`.

| name | type-or-$ref | description |
|---|---|---|
| `channel` | `string` | — |
| `artifact` | `string` | — |
| `shippedArtifactHash` | [`#/$defs/Digest`](#digest) | — |
| `shippedSemanticHash` | [`#/$defs/Digest`](#digest) | — |
| `shippedSchemaVersion` | `string` | — |
| `status` | enum (3) | — |
| `formDrift` | `boolean` | The shipped document has another IR form (schemaVersion) than the current one: hashes differ even when norms do not. |
| `observedOn` | [`#/$defs/Date`](#date) | — |
| `note` | `string` | — |

## `ComputationEntry`

Type: `object`.
Required: `path`, `kind`, `status`.

| name | type-or-$ref | description |
|---|---|---|
| `path` | `string` | — |
| `kind` | enum (2) | — |
| `at` | `string` | — |
| `programHash` | [`#/$defs/Digest`](#digest) | — |
| `artifactHash` | [`#/$defs/Digest`](#digest) | — |
| `status` | enum (2) | — |

## `Computations`

Index of stored computations that name the changed package: a list to review when the model changes, never a rewrite of their legal fate.

Type: `object`.
Required: `scanned`, `entries`, `stale`, `current`, `note`.

| name | type-or-$ref | description |
|---|---|---|
| `roots` | `array` | — |
| `scanned` | [`#/$defs/Count`](#count) | — |
| `entries` | `array` | — |
| `stale` | [`#/$defs/Count`](#count) | — |
| `current` | [`#/$defs/Count`](#count) | — |
| `note` | `string` | — |

## `ImplementationTask`

Type: `object`.
Required: `addressee`, `kind`, `what`, `basis`, `evidence`.

| name | type-or-$ref | description |
|---|---|---|
| `addressee` | `string` | — |
| `kind` | enum (6) | — |
| `what` | `string` | — |
| `basis` | `string` | — |
| `evidence` | enum (3) | Readiness evidence: none until the addressee attests; the dossier never assumes readiness. |

## `Implementation`

Section 12: tasks derived from the dossier for those who must implement the change, with readiness evidence.

Type: `object`.
Required: `tasks`, `note`.

| name | type-or-$ref | description |
|---|---|---|
| `tasks` | `array` | — |
| `note` | `string` | — |

## `ReadingDivergence`

Type: `object`.
Required: `scenario`, `adopted`, `alternative`.

| name | type-or-$ref | description |
|---|---|---|
| `scenario` | `string` | — |
| `legalTime` | `string` | — |
| `adopted` | `string` | — |
| `alternative` | `string` | — |

## `ObjectionResult`

Type: `object`.
Required: `id`, `scenario`, `class`, `claim`, `status`, `history`.

| name | type-or-$ref | description |
|---|---|---|
| `id` | `string` | — |
| `scenario` | `string` | — |
| `class` | enum (3) | — |
| `claim` | `string` | — |
| `source` | `string` | — |
| `filedOn` | [`#/$defs/Date`](#date) | — |
| `underAdopted` | `string` | Outcome of the objection scenario under the adopted reading. |
| `underAlternative` | `string` | — |
| `status` | enum (4) | — |
| `history` | `array` | — |

## `Adversarial`

Section 5: competing readings compared by scenario classes and objections with a class and a recorded history. Entering the bank gives a scenario no legal force.

Type: `object`.
Required: `note`.

| name | type-or-$ref | description |
|---|---|---|
| `readings` | `object` | — |
| `objections` | `array` | — |
| `note` | `string` | — |

## `Open`

Section 10: what the dossier leaves open.

Type: `object`.
Required: `unresolvedFindings`, `openQuestions`, `limitations`, `externalGaps`.

| name | type-or-$ref | description |
|---|---|---|
| `unresolvedFindings` | `array` | — |
| `openQuestions` | `array` | — |
| `limitations` | `array` | — |
| `externalGaps` | `array` | — |

## `Guarantee`

Type: `object`.
Required: `kind`, `status`, `evidence`, `notCovered`.

| name | type-or-$ref | description |
|---|---|---|
| `kind` | enum (4) | — |
| `status` | enum (3) | — |
| `evidence` | `array` | — |
| `notCovered` | `string` | — |

## `DossierCore`

Type: `object`.
Required: `title`, `composition`, `differences`, `goals`, `population`, `transition`, `dependents`, `states`, `open`, `guarantees`.

| name | type-or-$ref | description |
|---|---|---|
| `title` | `object` | — |
| `composition` | [`#/$defs/Composition`](#composition) | — |
| `differences` | [`#/$defs/Differences`](#differences) | — |
| `goals` | [`#/$defs/Goals`](#goals) | — |
| `population` | [`#/$defs/Population`](#population) | — |
| `transition` | [`#/$defs/Transition`](#transition) | — |
| `dependents` | [`#/$defs/Dependents`](#dependents) | — |
| `chain` | [`#/$defs/CompositionResult`](#compositionresult) | — |
| `coverage` | [`#/$defs/CoverageResult`](#coverageresult) | — |
| `computations` | [`#/$defs/Computations`](#computations) | — |
| `adversarial` | [`#/$defs/Adversarial`](#adversarial) | — |
| `implementation` | [`#/$defs/Implementation`](#implementation) | — |
| `states` | [`#/$defs/States`](#states) | — |
| `open` | [`#/$defs/Open`](#open) | — |
| `guarantees` | `array` | Section 11: four guarantees printed separately, each with what it does not cover. |

## `Receipt`

Outside the core hash: who assembled the dossier from which bytes, and whether the producers were re-executed.

Type: `object`.
Required: `generator`, `inputs`, `reproduction`.

| name | type-or-$ref | description |
|---|---|---|
| `generator` | `string` | — |
| `generatorVersion` | `string` | — |
| `inputs` | `array` | — |
| `repository` | `object` | — |
| `reproduction` | `object` | — |