# Arxo population impact report 0.1 Report of the population-impact comparison. reportCore is deterministic and reproducible: reportCoreHash is the sha256 of its canonical bytes; receipt is the execution receipt outside the core and the hash. Row classes are a mechanical projection of closed evaluation documents by a fixed classification matrix, not a legal answer; changing the matrix requires a new schemaVersion. ## Versions No accepted version marker is declared. ## Top-level fields | name | type-or-$ref | required | description | |---|---|---|---| | `reportCore` | [`#/$defs/ReportCore`](#reportcore) | yes | — | | `reportCoreHash` | [`#/$defs/Digest`](#digest) | yes | — | | `receipt` | [`#/$defs/Receipt`](#receipt) | yes | — | ## Enumerations | location | values | |---|---| | `$defs/RowClass` | `"VALUE_ON_BOTH"`, `"VALUE_BEFORE_ONLY"`, `"VALUE_AFTER_ONLY"`, `"NO_COMPARABLE_VALUE"`, `"EXCLUDED"`, `"FAILED"` | | `$defs/ReportCore/properties/schemaVersion` | `"law.population.impact-report/0.1"`, `"law.population.impact-report/0.2"` | | `$defs/ReportCore/properties/proofMode` | `"omitted"` | | `$defs/ReportCore/allOf/0/if/properties/schemaVersion` | `"law.population.impact-report/0.2"` | | `$defs/ReportCore/if/properties/verdict/properties/verdict` | `"INCOMPLETE"` | | `$defs/Row/properties/unrankedReason` | `"RANK_NO_VALUE"`, `"RANK_SIZE"`, `"RANK_FAILED"` | | `$defs/Row/allOf/0/if/properties/class` | `"EXCLUDED"` | | `$defs/Row/allOf/1/if/properties/class` | `"VALUE_ON_BOTH"` | | `$defs/Side/properties/state` | `"VALUE"`, `"NO_VALUE"`, `"EXCLUDED"`, `"FAILED"` | | `$defs/Side/allOf/0/if/properties/state` | `"FAILED"` | | `$defs/Side/allOf/1/if/properties/state` | `"VALUE"` | | `$defs/Side/allOf/2/if/properties/state` | `"EXCLUDED"` | | `$defs/Verdict/properties/verdict` | `"INCOMPLETE"`, `"CHANGE"`, `"NO_COMPARABLE_WEIGHT"`, `"NO_WEIGHTED_CHANGE"` | | `$defs/Verdict/properties/exitCode` | `4`, `1`, `3`, `0` | | `$defs/Verdict/allOf/0/if/properties/verdict` | `"INCOMPLETE"` | | `$defs/Verdict/allOf/0/then/properties/exitCode` | `4` | | `$defs/Verdict/allOf/1/if/properties/verdict` | `"CHANGE"` | | `$defs/Verdict/allOf/1/then/properties/exitCode` | `1` | | `$defs/Verdict/allOf/2/if/properties/verdict` | `"NO_COMPARABLE_WEIGHT"` | | `$defs/Verdict/allOf/2/then/properties/exitCode` | `3` | | `$defs/Verdict/allOf/3/if/properties/verdict` | `"NO_WEIGHTED_CHANGE"` | | `$defs/Verdict/allOf/3/then/properties/exitCode` | `0` | | `$defs/SemanticDiff/properties/entries/items/properties/kind` | `"added"`, `"removed"`, `"changed"`, `"renamed"`, `"presentation"` | | `$defs/Receipt/properties/implementation` | `"lawref"`, `"lawc"` | | `$defs/Receipt/properties/schemaVersions/properties/bank` | `"law.population.bank/0.1"`, `"law.population.bank/0.2"` | | `$defs/Receipt/properties/schemaVersions/properties/report` | `"law.population.impact-report/0.1"`, `"law.population.impact-report/0.2"` | | `$defs/Receipt/properties/storeMode` | `"full"`, `"none"` | | `$defs/Receipt/properties/failures/items/properties/side` | `"before"`, `"after"` | | `$defs/AuxState` | `"VALUE"`, `"NO_VALUE"`, `"EXCLUDED"`, `"FAILED"` | | `$defs/Distribution/properties/basis` | `"before"` | ## Raw schema [`https://law.arxo.io/schema/population-impact-report.schema.json`](https://law.arxo.io/schema/population-impact-report.schema.json) ## `Digest` Type: `string`. ## `Decimal` Canonical decimal string, not less than zero. Type: `string`. ## `SignedDecimal` Canonical signed decimal string, without negative zero. Type: `string`. ## `Tally` Type: `object`. Required: `rows`, `weight`. | name | type-or-$ref | description | |---|---|---| | `rows` | `integer` | — | | `weight` | [`#/$defs/Decimal`](#decimal) | — | ## `RowClass` Values: `"VALUE_ON_BOTH"`, `"VALUE_BEFORE_ONLY"`, `"VALUE_AFTER_ONLY"`, `"NO_COMPARABLE_VALUE"`, `"EXCLUDED"`, `"FAILED"`. ## `ReportCore` Type: `object`. Required: `schemaVersion`, `bank`, `worlds`, `measure`, `rows`, `coverage`, `verdict`, `semdiff`. | name | type-or-$ref | description | |---|---|---| | `schemaVersion` | enum (2) | — | | `proofMode` | `"omitted"` | Proof-omitted mode (`--no-proof`): the documents' proof graph was neither encoded nor hashed; sides have no documentRef, the record address is outcomeHash. The field is absent in full mode. | | `bank` | [`#/$defs/BankSection`](#banksection) | — | | `worlds` | `object` | — | | `measure` | [`population-bank.schema.json#/$defs/Measure`](/protocols/schemas/population-bank/#measure) | — | | `rows` | `array` | Rows in the byte order of rowId of the canonical form. | | `coverage` | [`#/$defs/Coverage`](#coverage) | — | | `aggregate` | [`#/$defs/Aggregate`](#aggregate) | — | | `verdict` | [`#/$defs/Verdict`](#verdict) | — | | `semdiff` | [`#/$defs/SemanticDiff`](#semanticdiff) | — | | `distribution` | [`#/$defs/Distribution`](#distribution) | — | ## `BankSection` Type: `object`. Required: `bankId`, `contentHash`, `rows`, `weightTotal`, `legalTime`. | name | type-or-$ref | description | |---|---|---| | `bankId` | [`population-bank.schema.json#/$defs/Name`](/protocols/schemas/population-bank/#name) | — | | `contentHash` | [`#/$defs/Digest`](#digest) | — | | `rows` | `integer` | — | | `weightTotal` | [`#/$defs/Decimal`](#decimal) | — | | `legalTime` | `object` | Distribution of legalTime across row cases: minimum, maximum, and the number of distinct values; null means no row supplied a date. | ## `Row` Type: `object`. Required: `rowId`, `case`, `weight`, `legalTime`, `class`, `parameterGap`, `before`, `after`. | name | type-or-$ref | description | |---|---|---| | `rowId` | [`population-bank.schema.json#/$defs/Name`](/protocols/schemas/population-bank/#name) | — | | `case` | [`population-bank.schema.json#/$defs/CaseName`](/protocols/schemas/population-bank/#casename) | — | | `weight` | [`#/$defs/Decimal`](#decimal) | — | | `legalTime` | `string` or `null` | — | | `class` | [`#/$defs/RowClass`](#rowclass) | — | | `excludedKey` | `string` | Key of the EXCLUDED class: side and state (when both sides are excluded — before). | | `parameterGap` | `boolean` | MISSING_PARAMETER_VALUE in the document of at least one side. | | `outcomeUnchanged` | `boolean` | The sides' outcomeHash matched; present only when both sides have a document. Not the same as the aggregate unchanged tally. | | `rank` | [`#/$defs/Side`](#side) | State of the auxiliary rank query on the basis side: a separate ask document with its own documentRef, classified by the same row matrix, value is Money in the currency of distribution.rank. | | `size` | `object` | — | | `group` | `integer` | Group number from 1 to the group count for a rankable row; absent for an unrankable one. | | `unrankedReason` | enum (3) | — | | `delta` | [`#/$defs/SignedDecimal`](#signeddecimal) | after − before; present only for VALUE_ON_BOTH. | | `before` | [`#/$defs/Side`](#side) | — | | `after` | [`#/$defs/Side`](#side) | — | ## `Side` Type: `object`. Required: `state`. | name | type-or-$ref | description | |---|---|---| | `state` | enum (4) | — | | `excluded` | `string` | [/], COMPUTED/, AMBIGUOUS_MEASURE, MEASURE_KIND (element is not Money), or MEASURE_CURRENCY (different currency). | | `evaluationStatus` | [`evaluation.schema.json#/$defs/EvaluationStatus`](/protocols/schemas/evaluation/#evaluationstatus) | — | | `elements` | `integer` | Number of quantity elements in the result (0 or 1 for a term). | | `value` | [`#/$defs/SignedDecimal`](#signeddecimal) | Sum of the side's Money in the measure's currency. | | `blockingIssues` | `array` | Codes of the document's error- and fatal-level issues, in document order. | | `outcomeHash` | [`#/$defs/Digest`](#digest) | — | | `documentRef` | [`#/$defs/Digest`](#digest) | — | | `error` | `object` | — | ## `Coverage` Type: `object`. Required: `rows`, `weight`, `classes`, `excluded`, `parameterGap`. | name | type-or-$ref | description | |---|---|---| | `rows` | `integer` | — | | `weight` | [`#/$defs/Decimal`](#decimal) | — | | `classes` | [`#/$defs/ClassTallies`](#classtallies) | — | | `excluded` | `object` | EXCLUDED rows keyed by excludedKey. | | `parameterGap` | [`#/$defs/Tally`](#tally) | — | ## `Aggregate` Sums over VALUE_ON_BOTH rows; winners/losers/unchanged are by the sign of the delta, unchanged being VALUE_ON_BOTH rows with a zero delta (not the same as the row's outcomeUnchanged flag); comparableWeight is the weight of VALUE_ON_BOTH. Type: `object`. Required: `comparableWeight`, `weightedSignedDelta`, `weightedAbsoluteDelta`, `winners`, `losers`, `unchanged`. | name | type-or-$ref | description | |---|---|---| | `comparableWeight` | [`#/$defs/Decimal`](#decimal) | — | | `weightedSignedDelta` | [`#/$defs/SignedDecimal`](#signeddecimal) | — | | `weightedAbsoluteDelta` | [`#/$defs/Decimal`](#decimal) | — | | `winners` | [`#/$defs/Tally`](#tally) | — | | `losers` | [`#/$defs/Tally`](#tally) | — | | `unchanged` | [`#/$defs/Tally`](#tally) | — | ## `Verdict` Verdict precedence: 4, then 1, then 3, then 0 (refusal 2 is not printed in the report). Type: `object`. Required: `verdict`, `exitCode`. | name | type-or-$ref | description | |---|---|---| | `verdict` | enum (4) | — | | `exitCode` | enum (4) | — | ## `SemanticDiff` Semantic difference of the sides' linked worlds: which rules, norms, and texts were added, removed, changed, or renamed. Type: `object`. Required: `entries`, `semanticChange`. | name | type-or-$ref | description | |---|---|---| | `entries` | `array` | — | | `semanticChange` | `boolean` | — | ## `Receipt` Execution receipt: outside the core and the hash, mandatory. Completion order, chunk size, and worker count do not affect the core. Type: `object`. Required: `implementation`, `build`, `schemaVersions`, `workers`, `startedAt`, `finishedAt`. | name | type-or-$ref | description | |---|---|---| | `implementation` | enum (2) | — | | `build` | `string` | — | | `schemaVersions` | `object` | — | | `workers` | `integer` | — | | `storeMode` | enum (2) | Run storage mode: full means documents are recorded by documentRef; none means only addresses are kept, and the document is reproduced by replaying the population from the bank's pins. Outside the core and the hash. | | `startedAt` | [`evaluation.schema.json#/$defs/Instant`](/protocols/schemas/evaluation/#instant) | — | | `failures` | `array` | Details of FAILED sides, outside the core: compiler diagnostic text, system error, or crash. In reportCore, a FAILED side carries only code and a fixed message keyed by the code. The field is present only when a FAILED occurred. | | `finishedAt` | [`evaluation.schema.json#/$defs/Instant`](/protocols/schemas/evaluation/#instant) | — | ## `ClassTallies` Type: `object`. Required: `VALUE_ON_BOTH`, `VALUE_BEFORE_ONLY`, `VALUE_AFTER_ONLY`, `NO_COMPARABLE_VALUE`, `EXCLUDED`, `FAILED`. | name | type-or-$ref | description | |---|---|---| | `VALUE_ON_BOTH` | [`#/$defs/Tally`](#tally) | — | | `VALUE_BEFORE_ONLY` | [`#/$defs/Tally`](#tally) | — | | `VALUE_AFTER_ONLY` | [`#/$defs/Tally`](#tally) | — | | `NO_COMPARABLE_VALUE` | [`#/$defs/Tally`](#tally) | — | | `EXCLUDED` | [`#/$defs/Tally`](#tally) | — | | `FAILED` | [`#/$defs/Tally`](#tally) | — | ## `AuxState` Values: `"VALUE"`, `"NO_VALUE"`, `"EXCLUDED"`, `"FAILED"`. ## `SizeSide` State of the size.adults / size.children query: the same document projection as Side, but value is an integer of zero or more. Type: `object`. Required: `state`. | name | type-or-$ref | description | |---|---|---| | `state` | [`#/$defs/AuxState`](#auxstate) | — | | `evaluationStatus` | [`evaluation.schema.json#/$defs/EvaluationStatus`](/protocols/schemas/evaluation/#evaluationstatus) | — | | `blockingIssues` | `array` | — | | `outcomeHash` | [`#/$defs/Digest`](#digest) | — | | `excluded` | `string` | — | | `value` | `integer` | — | | `documentRef` | [`#/$defs/Digest`](#digest) | — | | `error` | `object` | — | ## `Rational` Exact rational pair of reduced integers: denominator above zero. Type: `object`. Required: `numerator`, `denominator`. | name | type-or-$ref | description | |---|---|---| | `numerator` | `string` | — | | `denominator` | `string` | — | ## `Group` Distribution group: aggregate sums run over the group's VALUE_ON_BOTH rows; no sums when INCOMPLETE. Type: `object`. Required: `index`, `rows`, `weight`, `bounds`, `classes`. | name | type-or-$ref | description | |---|---|---| | `index` | `integer` | — | | `rows` | `integer` | — | | `weight` | [`#/$defs/Decimal`](#decimal) | — | | `bounds` | `object` | — | | `classes` | [`#/$defs/ClassTallies`](#classtallies) | — | | `comparableWeight` | [`#/$defs/Decimal`](#decimal) | — | | `weightedSignedDelta` | [`#/$defs/SignedDecimal`](#signeddecimal) | — | | `weightedAbsoluteDelta` | [`#/$defs/Decimal`](#decimal) | — | | `winners` | [`#/$defs/Tally`](#tally) | — | | `losers` | [`#/$defs/Tally`](#tally) | — | | `unchanged` | [`#/$defs/Tally`](#tally) | — | | `meanSignedDelta` | oneOf (2) | — | ## `Distribution` Income-group distribution section of form 0.2 of the impact comparison. Type: `object`. Required: `basis`, `groups`, `scale`, `rankMeasure`, `byGroup`, `unranked`, `ties`. | name | type-or-$ref | description | |---|---|---| | `basis` | `"before"` | — | | `groups` | `integer` | — | | `scale` | [`population-bank.schema.json#/$defs/ScalePin`](/protocols/schemas/population-bank/#scalepin) | — | | `rankMeasure` | `object` | — | | `byGroup` | `array` | — | | `unranked` | `object` | — | | `ties` | `object` | — |