# EM-FIN-05 — Frozen Semantic Audit (single independent run) ## Verdict **REJECT as a normative set. Adjudicated HOLD as a reviewable draft.** No freeze. The dossier's substantive boundary work is largely sound — the six-fact separation (quoted price / invoice amount / recognized cost / usage / allocated cost / valuation) survives audit, as does reuse of WM-FLW-015 for usage and WM-MAT-008 + Metric Definition for unit-cost observations. It fails as a normative set on four counts: three divergent invariant sets plus a fourth in the candidate record; a schema that cannot represent a residual at all; the absence of any period field on the run; and fixtures that are prose assertions over three mutually inconsistent, arithmetically broken scenarios. ### Adjudication of the central provider divergence — exact **Held shape: one cluster candidate with internal addressable identities.** Specifically: - **One** identifier-unassigned model/catalogue candidate, `Cost Allocation`, `modelId: null`, `registryId: null`, `allocationState: "unassigned"`. - **Four** object-level stable identities inside it: `CostAllocationRule` (`allocationRuleId`), `CostAllocationRuleRevision` (`allocationRuleId` + `revision`), `CostAllocationRun` (`allocationRunId`), `CostAllocationResult` (`allocationRunId` + `resultId`). - **Citation root = Run.** Derived Cost Records, audit trails and unit-cost observations cite `allocationRunId`, and a result line by the composite `(allocationRunId, resultId)`. - **Rule is cluster-owned but not run-contained.** A run pins one immutable revision *by reference*; one revision is reusable across many runs; the rule's lifecycle is independent of any execution. - **Results are run-contained *and* externally addressable.** Containment is a composite-key statement, not an addressability restriction. **Three separate identifier-unassigned model candidates are rejected.** Rule, Run and Result fail the independent-model test jointly: single mastership authority (cost-governance/finance-analytics) across all three; no demonstrated reuse of Run or Result by any consumer outside the cluster; `Result` has no lifecycle, no invariants and no meaning independent of its Run; `Run` has no interpretable content without a pinned Rule revision. Grok's only load-bearing argument for separation — that Rule is authored, approved, effective-dated and retired independently of execution, and is reusable across runs — is fully satisfied *inside* one cluster by object-level identity plus reference-by-revision. Independent authoring lifecycle justifies an **independent object identity**, not an independent **model entry**. **Grok's stated blocker is a category error and is rejected as stated.** "An identifier-unassigned aggregate cannot be cited by Cost Records" conflates two different identifier planes: | | Model / catalogue identifier | Object-level stable identifier | |---|---|---| | Names | a specification/model entry | an instance governed by that model | | Namespace | registry (`WM-…`/`EM-…`) | the model's own identity scheme (`allocationRunId`) | | Allocated by | registry governance, one time | the owning authority, per instance, at execution | | Cardinality | one per model | unbounded | | Cited by | relation rows, crosswalks, profiles | derived facts, audit, reports, metrics | | Present here | **absent by design** (`null`, pending) | **fully specified** in the candidate's `objects` block | A derived Cost Record cites `(allocationRunId, resultId)`. That key is minted by the owning authority under the model's declared identity scheme and does not depend on the registry having allocated a model identifier. Registry non-allocation blocks **publication, relation rows and installability** — all already held — not instance citation. Conversely, a model identifier is never a substitute for an instance key: three model identifiers would still leave Grok's citation requirement unmet, because nothing cites a model entry per-execution. Grok's position is additionally self-inconsistent and cannot be adopted verbatim: it demands "separate model identifiers" for Rule/Run/Result, then specifies "one Cost Allocation aggregate, root = Run", then closes "No model identifiers are assigned here." Its *substantive* requirements — Run as citation root, Rule referenced-by-version and not exclusively owned, result lines individually addressable, no second observation master, no implicit tag — are **accepted and carried into the held shape**. Its identifier-plane claim is **rejected**. Claude's shape is rejected in two places: it mints `UnitCostObservation` as a new identity (breaches the WM-MAT-008 + Metric Definition reuse guard) and mints `CommitmentInstrument` (breaches the no-identifier-for-missing-binding guard). Local's shape is accepted as the base, corrected per the defects below. **No allocation approval is inferred or conferred.** No rule in this dossier is approved; no run is authorized; this audit approves nothing. --- ## Material defects ### Identity and mastership **1. The model/object identifier planes are nowhere distinguished in the artefacts, so the divergence is unresolvable by a reader.** Evidence: `allocationState: "unassigned"` sits in the same record as `objects.*.identity: ["allocationRunId"]`, with no statement of what plane each occupies; Grok's blocker follows directly from the omission. Remediation: add to the candidate record, as a sibling of `identityTest`: `"identifierPlanes": {"modelIdentifier": {"plane":"registry-catalogue","value":null,"state":"unassigned","citedBy":["relation-rows","crosswalks","profiles"],"blocks":["publication","relation-assertion","installability"]}, "objectIdentifiers": {"plane":"instance","mintedBy":"owning authority under the declared identity scheme","independentOfModelAllocation":true,"citedBy":["derived cost records","audit","reports","unit-cost observations"]}}` and the invariant: *"A model identifier is never substituted for an object identifier, and object-level citation does not depend on registry allocation."* **2. No declared citation contract for derived facts; `CostRecord` is used normatively in all three studies and modelled nowhere.** Evidence: Local ("typed, run-scoped Cost Records"), Claude (`CostRecord` with mandatory `cost_basis`), Grok ("Cost Records are typed and derived; they cite a Result") — absent from `objects`, yet invariant 1 ("every cost assertion declares basis, period and currency") binds it. Remediation: either add `CostRecord` to `objects` with `identity: ["costRecordId"]`, `required: ["costBasis","period","currency","amount","citedRunRef","citedResultRef","sourceMasterRefs"]`, or delete every normative use of the term and restate invariant 1 over named modelled objects. Do not leave it half-modelled. **3. `AllocationResult.required.targetRef` makes a residual unrepresentable — a hard contradiction with the conservation invariant.** Evidence: invariants require residual to be *materialized as a result*; a residual has no allocation target; `targetRef` is unconditionally required. Remediation: add `residualKind` to the object with the closed enum `["untagged-base","unmapped-target","unused-reserved-capacity","rounding-remainder","held-discount","base-incompleteness"]`; make `targetRef` required **iff** `residualKind` is absent and forbidden when present; add Grok's `isResidual` as derived (`residualKind != null`), not stored. **4. `UnitCostObservation` has no owning plane.** Evidence: the candidate `excludes` metric-definition identity and lists WM-MAT-008 only as a reference; the profile merely *constrains* unit-cost observations; Claude mints it as a new identity. No artefact states who masters the observation act. Remediation: declare it in the profile, not the model: `"profiledObjects": {"UnitCostObservation": {"observationAct":"WM-MAT-008","ratioDefinition":"EM-DAT-05 Metric Definition (unassigned)","denominatorQuantity":"WM-FLW-015","newIdentity": false}}`, and strike Claude's "new derived-metric identity". **5. Reserved-capacity instrument mastership is left unresolved, with two incompatible dispositions in one dossier.** Evidence: Local — reuse contract/commitment authorities, "do not allocate another identifier merely because the dossier lacks their binding"; Claude — `CommitmentInstrument` **new**, in the minimal completion shape. Remediation: adopt Local. Strike `CommitmentInstrument` from the completion shape; add the hold *"Commitment-instrument mastership is unbound; no candidate may be raised until the commercial-contract authority is identified"*; represent commitment effects only as typed `sourceAmountDerivation` components with a `commitmentRef` whose target master is `null` + held. **6. `WM-ECO-012` is referenced by both the candidate and the profile and is discussed in none of the three studies, under a purpose string that conflates two different things.** Evidence: `{"target":"WM-ECO-012","purpose":"Budget or commitment context…"}`. A budget authority is not a commercial-commitment authority. Remediation: delete the row, or split it and cite the evidence that establishes each. Unevidenced reference rows may not survive into a frozen set. **7. A reference row is asserted to a base with no approved outgoing relations.** Evidence: Local hold — "WM-ECO-002 has no approved outgoing relations"; Claude — "a WM-ECO-002 edge cannot be relied on"; yet `boundary.references` carries a WM-ECO-002 row with no held marker. Remediation: add `"assertable": false, "heldOn": "no approved outgoing relations on WM-ECO-002"` to that row, and the same treatment to WM-MAT-008 pending its `boundary-review-required` resolution and the registry-plane/subject-kind mismatch Claude records. A reference you cannot assert must be marked, not listed silently. ### Lifecycle **8. `identityTest.independentLifecycle` fuses two incompatible state machines into one array.** Evidence: `["draft","approved","effective","executed","superseded","retired"]` — `draft→approved→effective→retired` is the Rule; `executed→superseded` is the Run. No object has this lifecycle. Remediation: replace with `"lifecycles": {"CostAllocationRule": ["draft","approved","effective","superseded","retired"], "CostAllocationRuleRevision": ["draft","approved","effective","superseded"], "CostAllocationRun": ["executing","closed","reconciled","superseded"], "CostAllocationResult": ["immutable"]}`. **9. `CostAllocationRule.lifecycle` contains `"suspended"`, which appears in no study and has no defined effect.** Remediation: either define it mechanically — *"suspension blocks new runs pinning any revision of this rule; in-flight runs complete; historical runs and results remain valid and resolvable"* — or delete the state. **10. Run is declared immutable yet carries a forward `successorRunRef` that can only be written after close.** Remediation: delete `successorRunRef` from `CostAllocationRun`. Record linkage on the successor: `required: ["supersedesRunRef","correctionReason"]` when the run is a correction, with `correctionReason` drawn from the closed enum `["restated-usage","corrected-invoice","credit-note","rule-defect","base-completeness-fix","target-remapping"]`. Any predecessor→successor index is a derived view, never run content. **11. `CostAllocationRule.required.currentRevisionRef` is a stored mutable pointer that contradicts effective-dating, and no invariant forbids overlapping revision intervals.** Remediation: delete `currentRevisionRef`; resolve revisions by as-of date against `effectiveFrom`/`effectiveTo`. Add the invariant *"Effective intervals of revisions of one rule are pairwise non-overlapping and gapless-or-explicitly-gapped"* and a machine check over the interval set. **12. Result lifecycle is unstated, and Claude's formulation contradicts predecessor preservation.** Evidence: `AllocationResult` has no lifecycle field; Claude — "immutable, lives and dies with its run." Remediation: state *"Results are immutable and remain resolvable after their run is superseded; supersession is not deletion."* Dying with the run would void metric-vintage preservation. **13. Axis may silently change across revisions of one rule.** Evidence: `axis` sits on `CostAllocationRule.required`, but revisions are the immutable unit and nothing forbids a revision changing it; conservation and non-additivity are run-scoped and inherit axis through the pin. Remediation: declare `axis` identity-fixing: *"A revision may not change the axis; an axis change requires a new rule identity."* ### Conservation, residual, multi-axis **14. `sourceAmount` has no basis discriminator, so the conservation equation is ambiguous between gross, invoice-net, amortized-effective and recognized.** Evidence: Grok makes discount timing a rule attribute with two legal outcomes (reduce source before allocation / carry discount as its own residual) — these produce *different source amounts for the same invoice*, and the schema cannot tell them apart. Remediation: add to `CostAllocationRun.required`: `sourceAmountBasis` ∈ `["gross-listed","invoice-net","amortized-effective","accrued-unbilled","recognized"]` and `sourceAmountDerivation` as a required ordered component list `[{componentKind, amount, sourceMasterRef}]` that must sum to `sourceAmount`. **15. `weight` is required on every result, which makes Σ weights ≤ 1 undecidable once residual is materialized.** Evidence: if residuals carry weights, Σ = 1 exactly; if not, Σ ≤ 1. Both readings are in the dossier. Remediation: define `weight` as share-of-**allocable-base**, present only on target results; residual results carry `residualShare` (share of source). Restate as: *"Σ(targetWeights) = 1 ± weightTolerance over the allocable base, and Σ(targetAmounts) + Σ(residualAmounts) = sourceAmount ± amountTolerance."* Two tolerances, separately declared. **16. `tolerance` is a single scalar with no unit, no kind, and no stated absorber of the rounding remainder.** Remediation: replace with `"tolerance": {"amountTolerance": {"value": …, "unit":"minor-currency-units"}, "weightTolerance": {"value": …, "unit":"ratio"}}`; add `roundingPolicy.remainderAbsorption` ∈ `["largest-remainder-to-targets","residual-rounding-remainder"]`; add the invariant *"A rounding remainder is materialized, never discarded."* **17. Non-additivity is undecidable because "the same source" is never defined.** Evidence: all three studies forbid summing parallel-axis runs "over the same source"; two runs may cite overlapping-but-unequal `sourceRecordRefs`. Remediation: define source identity as the digest of the canonical-ordered `sourceRecordRefs` ∪ `sourceAmountBasis` ∪ `sourcePeriod` ∪ `currency`, stored as `sourceDigest`; trigger the non-additivity rejection on **non-empty intersection** of `sourceRecordRefs`, not on digest equality. Equality-only triggering is trivially evaded. **18. Chained allocation is permitted implicitly and governed nowhere.** Evidence: Local routes unused capacity "to a declared shared pool, allocated by its own rule" — a second run whose source is a prior run's result. No `upstreamRunRef`, no acyclicity rule, no cross-chain double-count prohibition. Remediation: add `CostAllocationRun.optional: upstreamRunRef, upstreamResultRefs`; add invariants *"A chained run's source amount equals the cited upstream result amounts exactly"* and *"The run-chain graph is acyclic; a result may be the source of at most one non-superseded downstream run."* **19. Claude's unused-capacity treatment is internally contradictory.** Evidence: same paragraph offers "spread" as a treatment and then forbids being "silently absorbed into consumers' unit cost" — spreading *is* absorption into consumers. Remediation: closed treatment enum `["shared-pool-result","separate-chained-run","residual-unused-capacity"]`. "Spread across consumers" is removed. Grok's "waste result on the commitment" and Local's "shared pool" both map into this enum. **20. The shared pool is an allocation target with no master, while the candidate excludes target identity.** Remediation: add a reference row for the responsibility/pool target authority, or declare the pool a `residualKind: "unused-reserved-capacity"` result with no target. Do not let an unmastered target enter a conserved result set. **21. `reconciliation` is required but unstructured, and a within-tolerance variance has no recording obligation.** Evidence: Claude requires three independent ties "recorded with variance and reason rather than forced to zero"; the schema has one opaque field. Remediation: `"reconciliation": [{"tieKind": …, "expected": …, "actual": …, "variance": …, "varianceReason": …}]` with `tieKind` ∈ `["source-total","ledger-recognized-period","base-population-completeness"]`, all three required; add *"A non-zero variance within tolerance is recorded, not suppressed."* **22. The no-implicit-tag rule is in Grok's set only.** Evidence: Grok invariant 10; absent from Local, Claude and the candidate record. Without it, an "Unassigned" default target silently eliminates residual and satisfies conservation while destroying the residual signal. Remediation: carry it into the normative set as a first-class invariant with a negative fixture. ### Currency and time **23. `CostAllocationRun` has no period field at all, while invariant 1 requires period on every cost assertion.** Remediation: add `CostAllocationRun.required: sourcePeriod` as a closed date-only interval `{from, to, calendarAuthority}`; add `usageIntervalRefs`; add the invariant *"A date-only period is never widened to an instant, and run execution time is never substituted for the source period."* Claude states this in prose; it is in no invariant set. **24. Translation is mandated by invariant 10 and has no representation; results carry `amount` with no currency.** Remediation: results inherit run currency (state it). Add a derived `TranslatedResult` with `required: ["sourceResultRef","amount","currency","rate","rateType","rateDate","rateSourceAuthority"]`, plus *"A translated result is never an input to conservation or to a unit-cost numerator."* **25. Multi-currency sources are handled three incompatible ways.** Evidence: Grok — "cross-currency lines are out of scope until a conversion rule exists"; Local/Claude — translate results after allocation, silent on multi-currency sources. Remediation: adopt: *"A run has exactly one currency. A multi-currency source is sliced into one run per currency, each conserving independently; a cross-currency total is a translated presentation, never a run."* Add explicit run cardinality invariants: `|axis| = 1`, `|currency| = 1`. Local's invariant 4 only *scopes* the equation to one axis and currency — it does not forbid a two-axis run. ### Discount, unit economics, approval **26. Discount treatment has three different option sets and no normative one.** Evidence: Local — allowance identity retained, attribution basis added; Claude — follow-line / spread-on-base / shared-pool; Grok — reduce-source-before-allocation / discount-as-own-residual. Remediation: closed enum on the revision: `discountTreatment` ∈ `["follows-granted-line","reduces-source-before-allocation","spread-on-allocation-base","held-as-discount-residual"]`; `allowanceRef` required on every result whose amount is discount-affected; add Claude's invariant *"Gross and net allocated views are both reproducible from stored attribution"* — dropped from both Local and the candidate record. Silent netting is rejected under all four treatments. **27. The unit-cost denominator's master is contested.** Evidence: Claude — "functional unit taken from WM-FLW-015's normalizing variable"; Grok — "denominator is usage from WM-FLW-015", observation profiles WM-MAT-008; Local — "WM-MAT-008 plus Metric Definition". The candidate's WM-MAT-008 purpose string, *"Measured quantities and unit-cost observations"*, collapses the measurement act and the ratio definition into one row. Remediation: three separate required bindings on the observation: `denominatorQuantityRef` → WM-FLW-015; `observationActRef` → WM-MAT-008; `metricDefinitionRef` + `metricDefinitionVersion` → EM-DAT-05 Metric Definition. Exactly one denominator source per observation. Split the WM-MAT-008 purpose row accordingly. **28. `EM-DAT-05 Metric Definition` is load-bearing in invariant 14 and appears in neither the candidate's `references` nor the profile's `bases`.** Remediation: add it to both, marked `allocationState: "unassigned"` and held. **29. Denominator population completeness is not required, though base completeness is.** Evidence: `baseCompleteness` is required on the run; the unit-cost denominator has no equivalent, so a biased denominator passes every check. Remediation: add `denominatorCompleteness` to the observation with the same enum and coverage ratio as `baseCompleteness`. **30. The residual share is declared on unit cost but has no stated effect on comparability.** Remediation: add `residualTreatment` ∈ `["excluded-declared","grossed-up-declared"]`; add *"Two unit-cost observations are comparable only under the same residual treatment and the same metric-definition version."* **31. Approval is structurally inferable — the exact thing the brief forbids.** Evidence: `authorityRef` is required but there is no approval record, approver or approval timestamp; the rule lifecycle permits `approved → effective` with no evidencing event; `CostAllocationRun.actorRef` is **optional** on an object whose entire purpose is to be audit-citable. Remediation: make `CostAllocationRun.required: actorRef, authorizationRef`; add `CostAllocationRuleRevision.required: approvalRecord {approverRef, approvedAt, approvalAuthorityRef}`, required for any transition into `approved` or `effective`; add *"Approval is evidenced by an approval record; lifecycle state never implies approval."* No fixture may assert `approved` or `effective` state. No rule in this dossier carries an approval record. ### Naming **32. Object naming is inconsistent within and across planes.** Evidence: `CostAllocationRule` / `CostAllocationRuleRevision` / `CostAllocationRun` but `AllocationResult` (prefix dropped); Local prose "Allocation Rule / Allocation Run / Allocation Results"; Claude "AllocationRule / AllocationRun / AllocationResult"; Claude's `cost_basis` is snake_case against camelCase everywhere else. Remediation: canonical names `CostAllocationRule`, `CostAllocationRuleRevision`, `CostAllocationRun`, `CostAllocationResult`, `CostRecord`, `UnitCostObservation`; camelCase fields throughout (`costBasis`); apply across studies, candidate, profile and fixtures. **33. "Residual", "unallocated remainder", "waste" and "unassigned" are used interchangeably for four different things.** Remediation: `residual` is the only normative term; the four causes are distinguished by `residualKind` (defect 3). Delete "waste" and "unallocated remainder" from normative text. **34. The profile's name is broader than any plane that owns it.** Evidence: profile `"Enterprise Cost, Usage and Unit Economics Binding"` over the candidate `Cost Allocation`; unit economics is in the profile name, constrained by the profile, excluded from the model and mastered nowhere until defect 4 is applied. Remediation: apply defect 4, then the name is accurate. Until then the profile over-claims. ### Fixtures and record hygiene **35. No fixture in the dossier is machine-checkable.** Evidence: all seven cases are prose `input`/`expect` pairs with no numbers, no invariant references, no rejection codes, no asserted equalities, and no distinction between schema validation and semantic failure. Remediation: every case carries `invariantRefs`, structured `input`, an `expect` with explicit predicates, and `expectedCode`. See the fixture array below. **36. `missing-base-completeness` tests the schema, not the semantics.** Evidence: `baseCompleteness` is already `required` in `objects`; the case is satisfied by JSON-schema validation and exercises no allocation semantics. Remediation: reclassify as `kind: "schema-negative"`, and replace the semantic case with coverage-vs-residual consistency (`baseCompleteness: "partial"` with `residualAmount = 0` → reject). **37. `translate-before-allocation` conflates two independent rejection reasons.** Evidence: `"converted independently before allocation, producing inconsistent rounding"` — FX ordering and rounding are separate invariants; a single case cannot discriminate which one fired. Remediation: split into an FX-ordering case and a rounding-remainder case, each with its own code. **38. The acceptance scenario exists in three mutually inconsistent instantiations, and the arithmetic is wrong in two of them.** - Claude asserts an `amortized-effective` pool (90,000 + 20,000 − prepaid) then never states its value and conserves both runs against **90,000**, i.e. against `invoice-net`, not the declared basis. - Claude places 4,000 of **unused reserved capacity** inside a 90,000 conservation set sourced from a billed invoice; the unused capacity derives from the 20,000 commitment amortization, which is not in that 90,000. The basis is mixed mid-equation. - Claude's cross-axis rejection figure of **174,000** is computed on inconsistent bases: it is the project run in full (48,000 + 31,000 + 4,000 + 7,000 = 90,000) plus the product run **net of residual** (55,000 + 29,000 = 84,000). The consistent figures are 163,000 (targets only) or 180,000 (both runs in full). The dossier's single negative demonstration is therefore unreproducible. - Grok states **two incompatible** numeric scenarios: list 1,200 / discount 120 / billed 1,080 / commitment 600, then list 1,000 (600 + 400) / discount 100 / billed 900. It nominates "the shared-invoice scenario" as the acceptance test without saying which. - Grok's second scenario folds a 600 commitment **purchase** into the invoice list total and then amortizes it, conflating purchase, amortization and covered usage. - Local's acceptance scenario carries no numbers at all. Remediation: adopt exactly one normative numeric scenario, with the commitment on a separate prior document so the two bases are cleanly separable, and both cross-axis sums stated explicitly: > Invoice gross 110,000 EUR; invoice-level allowance 10,000; `invoice-net` = 100,000. Commitment amortization for the period 20,000 (prior separate prepayment; `prepaidOffsetInInvoiceNet` = 0), of which covered usage 16,000 and unused reserved capacity 4,000. `amortized-effective` = 120,000. Period 2026-07-01..2026-07-31, currency EUR. > **Run R1** — axis `project`, basis `amortized-effective`, source 120,000: Project A 72,000 (w 0.666667), Project B 36,000 (w 0.333333), residual `unused-reserved-capacity` 4,000, residual `untagged-base` 8,000. Σ = 120,000. Residual share 0.10. > **Run R2** — axis `product`, same `sourceRecordRefs`, same basis, source 120,000: Product X 76,000 (w 0.666667), Product Y 38,000 (w 0.333333), residual `unused-reserved-capacity` 4,000, residual `unmapped-target` 2,000. Σ = 120,000. Residual share 0.05. > **Rejected cross-axis sums**: targets-only 108,000 + 114,000 = 222,000; full runs 120,000 + 120,000 = 240,000. Both against a 120,000 source. > **Unit cost**: Product X — numerator basis `amortized-effective`, 76,000 from R2 result; denominator metric-definition v2 "billable requests", quantity 19,000,000 from WM-FLW-015 → **0.004 EUR/request**; `residualTreatment: "excluded-declared"`, residual share 0.05. **39. Four divergent invariant sets, where one normative set is required.** Evidence: Local (14), Claude (14), Grok (14), candidate record (15). Items present in exactly one set include Grok's no-implicit-tag (10), the candidate's non-recycling of retired identifiers (15), Claude's gross-and-net reproducibility (9), and decomposed confidence (absent from Grok). Remediation: freeze exactly one set, `I-01`–`I-24`, in the candidate record only; studies cite by identifier and carry no local lists. Normative set: `I-01` every cost assertion declares basis, period and currency · `I-02` the six facts are separately typed and never substituted · `I-03` a model identifier is never substituted for an object identifier, and object-level citation does not depend on registry allocation · `I-04` every run pins exactly one immutable rule revision · `I-05` a run has exactly one axis and exactly one currency · `I-06` revision effective intervals of one rule are pairwise non-overlapping · `I-07` axis is identity-fixing for a rule · `I-08` Σ(targetAmounts) + Σ(residualAmounts) = sourceAmount ± amountTolerance, within one run · `I-09` Σ(targetWeights) = 1 ± weightTolerance over the allocable base · `I-10` every residual carries a closed `residualKind`; a rounding remainder is materialized · `I-11` `sourceAmountBasis` is declared and `sourceAmountDerivation` sums to `sourceAmount` · `I-12` base kind, source and completeness are explicit; partial completeness implies non-zero residual · `I-13` untagged usage remains residual; no implicit default target · `I-14` parallel axes over intersecting source records are non-additive · `I-15` the run-chain graph is acyclic and a chained run conserves to its cited upstream results · `I-16` unused reserved capacity has an explicit treatment from the closed enum · `I-17` discount treatment is pinned on the revision, allowance identity is retained, and gross and net views are both reproducible · `I-18` allocation occurs in source currency; translated results carry rate metadata and never enter conservation · `I-19` allocated cost is never a ledger posting absent a separately authorized journal entry · `I-20` a result never mutates an invoice or journal master · `I-21` runs and results are immutable; corrections append successors with a reason and predecessors remain resolvable · `I-22` confidence remains decomposed into measurement uncertainty, representativeness, commitment-coverage certainty and residual share · `I-23` unit cost pins numerator basis, run reference, denominator quantity source, metric-definition version, denominator completeness and residual treatment · `I-24` retired identifiers remain resolvable and are never recycled. **40. Stale holds.** Evidence: candidate `holds` — "Independent Grok review is pending" (the Grok study is in the dossier); profile `holds` — "Independent Grok review and frozen audit are pending" (Grok delivered; this audit is the frozen audit and is now spent). Remediation: replace with `"Independent Grok review delivered; divergence adjudicated by the spent frozen audit."` and `"The single frozen audit is spent and must not be rerun."` Add the conditional hold: *"Unit-cost binding is blocked on WM-MAT-008 boundary review and its registry-plane/subject-kind mismatch."* Add: *"Jurisdictional cost-allocation, transfer-pricing and tax treatment are out of scope and unreviewed"* — present in Claude's holds only. --- ## Additional fixtures Handles prefixed `fx:` are fixture-local placeholders in a non-registry namespace. They are not identifiers of any kind and allocate nothing. `modelId` and `registryId` remain `null`. ```json [ {"id":"identity-plane-object-citation-under-unassigned-model","kind":"positive","invariantRefs":["I-03"],"input":{"modelId":null,"registryId":null,"allocationState":"unassigned","costRecord":{"costRecordId":"fx:cr/1","costBasis":"amortized-effective","period":{"from":"2026-07-01","to":"2026-07-31"},"currency":"EUR","amount":76000,"citedRunRef":"fx:run/R2","citedResultRef":["fx:run/R2","fx:res/X"]}},"expect":{"accepted":true,"assert":["citation resolves via (allocationRunId,resultId)","no model identifier is read during resolution","allocationState remains 'unassigned'"]},"expectedCode":null}, {"id":"identity-plane-model-id-substituted-for-object-key","kind":"negative","invariantRefs":["I-03"],"input":{"costRecord":{"costRecordId":"fx:cr/2","citedRunRef":"","citedResultRef":null}},"expect":{"accepted":false,"reason":"a model/catalogue identifier cannot serve as a run key; citation requires allocationRunId"},"expectedCode":"IDENTIFIER-PLANE-SUBSTITUTION"}, {"id":"identity-plane-invented-registry-identifier","kind":"negative","invariantRefs":["I-03"],"input":{"modelId":"","registryId":"","allocationState":"unassigned"},"expect":{"accepted":false,"reason":"identifiers may not be invented or allocated outside registry governance; allocationState 'unassigned' requires null on both planes"},"expectedCode":"IDENTIFIER-INVENTED"}, {"id":"rule-revision-reused-across-runs","kind":"positive","invariantRefs":["I-04"],"input":{"ruleRevision":["fx:rule/P","3"],"runs":[{"allocationRunId":"fx:run/R1a","ruleRevisionRef":["fx:rule/P","3"],"sourcePeriod":{"from":"2026-07-01","to":"2026-07-31"}},{"allocationRunId":"fx:run/R1b","ruleRevisionRef":["fx:rule/P","3"],"sourcePeriod":{"from":"2026-08-01","to":"2026-08-31"}}]},"expect":{"accepted":true,"assert":["one revision pinned by two runs","revision is not exclusively owned by either run","neither run mutates the revision"]},"expectedCode":null}, {"id":"project-axis-normative-conservation","kind":"positive","invariantRefs":["I-05","I-08","I-09","I-10","I-11","I-12"],"input":{"allocationRunId":"fx:run/R1","axis":"project","currency":"EUR","sourcePeriod":{"from":"2026-07-01","to":"2026-07-31","calendarAuthority":"fx:cal/gregorian-utc"},"sourceAmountBasis":"amortized-effective","sourceAmount":120000,"sourceAmountDerivation":[{"componentKind":"invoice-gross","amount":110000,"sourceMasterRef":"WM-ECO-008"},{"componentKind":"invoice-allowance","amount":-10000,"sourceMasterRef":"WM-ECO-008"},{"componentKind":"commitment-amortization","amount":20000,"sourceMasterRef":null,"heldOn":"commitment mastership unbound"}],"baseKind":"metered-usage","baseCompleteness":{"state":"partial","coverage":0.9333},"results":[{"resultId":"fx:res/A","targetRef":"fx:project/A","amount":72000,"weight":0.666667},{"resultId":"fx:res/B","targetRef":"fx:project/B","amount":36000,"weight":0.333333},{"resultId":"fx:res/unused","residualKind":"unused-reserved-capacity","amount":4000,"residualShare":0.033333},{"resultId":"fx:res/untagged","residualKind":"untagged-base","amount":8000,"residualShare":0.066667}]},"expect":{"accepted":true,"assert":["sum(targetAmounts)+sum(residualAmounts)==120000","sum(targetWeights)==1.000000 within weightTolerance","allocable base == 108000","total residualShare == 0.100000","every residual carries a residualKind","no residual carries a targetRef"]},"expectedCode":null}, {"id":"product-axis-independent-conservation","kind":"positive","invariantRefs":["I-05","I-08","I-14"],"input":{"allocationRunId":"fx:run/R2","axis":"product","currency":"EUR","sourceAmountBasis":"amortized-effective","sourceAmount":120000,"sourceRecordRefs":"identical to fx:run/R1","results":[{"resultId":"fx:res/X","targetRef":"fx:product/X","amount":76000,"weight":0.666667},{"resultId":"fx:res/Y","targetRef":"fx:product/Y","amount":38000,"weight":0.333333},{"resultId":"fx:res/unused","residualKind":"unused-reserved-capacity","amount":4000},{"resultId":"fx:res/unmapped","residualKind":"unmapped-target","amount":2000}]},"expect":{"accepted":true,"assert":["sum==120000 independently of fx:run/R1","total residualShare == 0.050000","run is flagged non-additive with fx:run/R1 on intersecting sourceRecordRefs"]},"expectedCode":null}, {"id":"cross-axis-sum-targets-only-rejected","kind":"negative","invariantRefs":["I-14"],"input":{"operation":"sum(targetAmounts of fx:run/R1, targetAmounts of fx:run/R2)","computed":222000,"sourceAmount":120000},"expect":{"accepted":false,"reason":"parallel-axis runs over intersecting source records are non-additive; 108000+114000=222000 against a 120000 source"},"expectedCode":"CROSS-AXIS-ADDITION"}, {"id":"cross-axis-sum-full-runs-rejected","kind":"negative","invariantRefs":["I-14"],"input":{"operation":"sum(fx:run/R1, fx:run/R2) including residuals","computed":240000,"sourceAmount":120000},"expect":{"accepted":false,"reason":"same rejection on the full-run basis; 120000+120000=240000"},"expectedCode":"CROSS-AXIS-ADDITION"}, {"id":"cross-axis-sum-mixed-basis-rejected","kind":"negative","invariantRefs":["I-08","I-14"],"input":{"operation":"sum(one run in full, other run net of residual)","computed":204000,"note":"reproduces the dossier's inconsistent 174000-style construction on normative figures"},"expect":{"accepted":false,"reason":"a cross-axis total computed on mixed bases is rejected before the non-additivity check; basis must be uniform"},"expectedCode":"MIXED-BASIS-AGGREGATION"}, {"id":"source-record-overlap-not-equality","kind":"negative","invariantRefs":["I-14"],"input":{"runA":{"sourceRecordRefs":["fx:line/1","fx:line/2","fx:line/3"]},"runB":{"sourceRecordRefs":["fx:line/3","fx:line/4"]},"operation":"sum(runA,runB)"},"expect":{"accepted":false,"reason":"non-additivity triggers on non-empty intersection, not digest equality"},"expectedCode":"CROSS-AXIS-ADDITION"}, {"id":"residual-without-target-accepted","kind":"positive","invariantRefs":["I-10"],"input":{"result":{"resultId":"fx:res/untagged","residualKind":"untagged-base","amount":8000,"targetRef":null}},"expect":{"accepted":true,"assert":["targetRef is forbidden when residualKind is present","result is representable"]},"expectedCode":null}, {"id":"residual-with-target-rejected","kind":"negative","invariantRefs":["I-10","I-13"],"input":{"result":{"resultId":"fx:res/untagged","residualKind":"untagged-base","amount":8000,"targetRef":"fx:project/Unassigned"}},"expect":{"accepted":false,"reason":"a residual carries no target; attaching one converts a residual into an implicit tag"},"expectedCode":"RESIDUAL-TARGETED"}, {"id":"implicit-default-tag-rejected","kind":"negative","invariantRefs":["I-13"],"input":{"baseCompleteness":{"state":"partial","coverage":0.9333},"results":[{"targetRef":"fx:project/A","amount":72000},{"targetRef":"fx:project/B","amount":36000},{"targetRef":"fx:project/Unassigned","amount":12000,"weight":0.1}],"residuals":[]},"expect":{"accepted":false,"reason":"untagged usage must remain residual; a default target satisfies conservation while destroying the residual signal"},"expectedCode":"IMPLICIT-DEFAULT-TARGET"}, {"id":"partial-completeness-zero-residual-rejected","kind":"negative","invariantRefs":["I-12"],"input":{"baseCompleteness":{"state":"partial","coverage":0.9333},"residualAmount":0},"expect":{"accepted":false,"reason":"declared partial base completeness requires a materialized non-zero residual"},"expectedCode":"COMPLETENESS-RESIDUAL-INCONSISTENT"}, {"id":"base-completeness-absent-schema","kind":"schema-negative","invariantRefs":["I-12"],"input":{"allocationRunId":"fx:run/R9","baseCompleteness":null},"expect":{"accepted":false,"reason":"baseCompleteness is a required field; this is schema validation, not a semantic case"},"expectedCode":"SCHEMA-REQUIRED-FIELD-MISSING"}, {"id":"weights-exceed-one-rejected","kind":"negative","invariantRefs":["I-09"],"input":{"targetWeights":[0.70,0.38],"sum":1.08,"weightTolerance":0.000001,"residuals":[]},"expect":{"accepted":false,"reason":"sum(targetWeights) exceeds 1 beyond weightTolerance"},"expectedCode":"WEIGHT-SUM-EXCEEDED"}, {"id":"rounding-remainder-materialized","kind":"positive","invariantRefs":["I-10"],"input":{"sourceAmount":100.00,"currency":"EUR","targets":3,"weights":[0.333333,0.333333,0.333333],"roundingPolicy":{"mode":"half-up","minorUnits":2,"remainderAbsorption":"residual-rounding-remainder"},"results":[{"amount":33.33},{"amount":33.33},{"amount":33.33},{"residualKind":"rounding-remainder","amount":0.01}]},"expect":{"accepted":true,"assert":["sum == 100.00 exactly","remainder is a typed residual, not discarded"]},"expectedCode":null}, {"id":"rounding-remainder-discarded-rejected","kind":"negative","invariantRefs":["I-08","I-10"],"input":{"sourceAmount":100.00,"results":[{"amount":33.33},{"amount":33.33},{"amount":33.33}],"residuals":[],"amountTolerance":{"value":0,"unit":"minor-currency-units"}},"expect":{"accepted":false,"reason":"0.01 remainder is unmaterialized and conservation fails at zero tolerance"},"expectedCode":"REMAINDER-DISCARDED"}, {"id":"within-tolerance-variance-must-be-recorded","kind":"negative","invariantRefs":["I-08"],"input":{"sourceAmount":120000.00,"allocatedPlusResidual":119999.99,"amountTolerance":{"value":5,"unit":"minor-currency-units"},"reconciliation":[{"tieKind":"source-total","expected":120000.00,"actual":119999.99,"variance":null,"varianceReason":null}]},"expect":{"accepted":false,"reason":"a non-zero variance within tolerance is recorded with variance and reason, never suppressed"},"expectedCode":"VARIANCE-SUPPRESSED"}, {"id":"reconciliation-ties-incomplete-rejected","kind":"negative","invariantRefs":["I-08","I-12"],"input":{"reconciliation":[{"tieKind":"source-total","expected":120000,"actual":120000,"variance":0,"varianceReason":"none"}]},"expect":{"accepted":false,"reason":"all three tieKinds are required: source-total, ledger-recognized-period, base-population-completeness"},"expectedCode":"RECONCILIATION-TIES-INCOMPLETE"}, {"id":"source-basis-undeclared-rejected","kind":"negative","invariantRefs":["I-11"],"input":{"sourceAmount":120000,"sourceAmountBasis":null,"sourceAmountDerivation":null},"expect":{"accepted":false,"reason":"sourceAmountBasis is required; conservation is otherwise ambiguous between gross, invoice-net, amortized-effective and recognized"},"expectedCode":"SOURCE-BASIS-UNDECLARED"}, {"id":"source-derivation-does-not-sum-rejected","kind":"negative","invariantRefs":["I-11"],"input":{"sourceAmount":120000,"sourceAmountDerivation":[{"componentKind":"invoice-gross","amount":110000},{"componentKind":"invoice-allowance","amount":-10000}]},"expect":{"accepted":false,"reason":"derivation sums to 100000 against a declared sourceAmount of 120000"},"expectedCode":"SOURCE-DERIVATION-MISMATCH"}, {"id":"commitment-amount-double-counted-rejected","kind":"negative","invariantRefs":["I-11","I-16"],"input":{"sourceAmountBasis":"invoice-net","sourceAmount":90000,"results":[{"residualKind":"unused-reserved-capacity","amount":4000}],"note":"unused capacity derives from commitment amortization, which is absent from invoice-net"},"expect":{"accepted":false,"reason":"a residual whose component is absent from sourceAmountDerivation cannot enter that run's conservation set; reproduces the dossier basis-mixing defect"},"expectedCode":"RESIDUAL-OUTSIDE-SOURCE-BASIS"}, {"id":"unused-capacity-treatment-undeclared-rejected","kind":"negative","invariantRefs":["I-16"],"input":{"commitmentAmortization":20000,"coveredUsage":16000,"unusedCapacity":4000,"ruleRevision":{"unusedCapacityTreatment":null}},"expect":{"accepted":false,"reason":"unusedCapacityTreatment must be one of shared-pool-result, separate-chained-run, residual-unused-capacity"},"expectedCode":"UNUSED-CAPACITY-TREATMENT-UNDECLARED"}, {"id":"unused-capacity-spread-to-consumers-rejected","kind":"negative","invariantRefs":["I-16"],"input":{"unusedCapacity":4000,"treatment":"spread-on-allocation-base","effect":"Project A 74666.67, Project B 37333.33, no unused-capacity residual"},"expect":{"accepted":false,"reason":"spreading unused capacity across consumers is absorption into consumer unit cost and is not an admissible treatment"},"expectedCode":"UNUSED-CAPACITY-ABSORBED"}, {"id":"chained-pool-run-conserves","kind":"positive","invariantRefs":["I-15"],"input":{"allocationRunId":"fx:run/R3","upstreamRunRef":"fx:run/R1","upstreamResultRefs":[["fx:run/R1","fx:res/unused"]],"sourceAmount":4000,"currency":"EUR","results":[{"targetRef":"fx:cc/platform","amount":2500},{"targetRef":"fx:cc/data","amount":1500}]},"expect":{"accepted":true,"assert":["sourceAmount equals cited upstream result amount exactly","chain graph remains acyclic","fx:res/unused is source to exactly one non-superseded downstream run"]},"expectedCode":null}, {"id":"chained-run-cycle-rejected","kind":"negative","invariantRefs":["I-15"],"input":{"chain":[{"run":"fx:run/R1","upstreamRunRef":"fx:run/R3"},{"run":"fx:run/R3","upstreamRunRef":"fx:run/R1"}]},"expect":{"accepted":false,"reason":"run-chain graph must be acyclic"},"expectedCode":"RUN-CHAIN-CYCLE"}, {"id":"chained-run-double-consumption-rejected","kind":"negative","invariantRefs":["I-15"],"input":{"downstreamRuns":[{"run":"fx:run/R3","upstreamResultRefs":[["fx:run/R1","fx:res/unused"]],"state":"reconciled"},{"run":"fx:run/R4","upstreamResultRefs":[["fx:run/R1","fx:res/unused"]],"state":"reconciled"}]},"expect":{"accepted":false,"reason":"one result may source at most one non-superseded downstream run; two reconciled consumers double-count 4000"},"expectedCode":"UPSTREAM-RESULT-DOUBLE-CONSUMED"}, {"id":"two-axes-in-one-run-rejected","kind":"negative","invariantRefs":["I-05"],"input":{"allocationRunId":"fx:run/R5","axis":["project","product"]},"expect":{"accepted":false,"reason":"a run has exactly one axis; scoping the conservation equation to one axis is insufficient"},"expectedCode":"RUN-AXIS-CARDINALITY"}, {"id":"multi-currency-source-sliced","kind":"positive","invariantRefs":["I-05","I-18"],"input":{"source":[{"amount":90000,"currency":"EUR"},{"amount":30000,"currency":"USD"}],"runs":[{"allocationRunId":"fx:run/R6","currency":"EUR","sourceAmount":90000},{"allocationRunId":"fx:run/R7","currency":"USD","sourceAmount":30000}]},"expect":{"accepted":true,"assert":["each run conserves independently in its own currency","no FX occurs inside either run","no cross-currency total enters conservation"]},"expectedCode":null}, {"id":"multi-currency-single-run-rejected","kind":"negative","invariantRefs":["I-05","I-18"],"input":{"allocationRunId":"fx:run/R8","currency":"EUR","sourceAmount":120000,"note":"30000 USD converted at run time into the EUR source"},"expect":{"accepted":false,"reason":"a run has exactly one currency and performs no implicit FX; multi-currency sources are sliced per currency"},"expectedCode":"RUN-CURRENCY-CARDINALITY"}, {"id":"translation-before-allocation-rejected","kind":"negative","invariantRefs":["I-18"],"input":{"order":["translate components to USD","allocate"],"sourceCurrency":"EUR"},"expect":{"accepted":false,"reason":"allocation occurs in source currency; a translated amount is never an allocation input"},"expectedCode":"FX-BEFORE-ALLOCATION"}, {"id":"translated-result-metadata-and-exclusion","kind":"positive","invariantRefs":["I-18"],"input":{"sourceResultRef":["fx:run/R2","fx:res/X"],"amount":83600,"currency":"USD","rate":1.10,"rateType":"period-average","rateDate":"2026-07-31","rateSourceAuthority":"fx:fx-auth/1"},"expect":{"accepted":true,"assert":["translated result carries rate, rateType, rateDate and authority","translated result is excluded from conservation","translated result is excluded from any unit-cost numerator"]},"expectedCode":null}, {"id":"translated-result-in-conservation-rejected","kind":"negative","invariantRefs":["I-18"],"input":{"conservationInputs":["EUR target results","USD translated result"]},"expect":{"accepted":false,"reason":"translated results are derived presentations and never conservation inputs"},"expectedCode":"TRANSLATED-RESULT-IN-CONSERVATION"}, {"id":"run-source-period-absent-rejected","kind":"negative","invariantRefs":["I-01"],"input":{"allocationRunId":"fx:run/R10","executedAt":"2026-08-03T09:00:00Z","sourcePeriod":null},"expect":{"accepted":false,"reason":"sourcePeriod is required; execution time is not a period"},"expectedCode":"SOURCE-PERIOD-ABSENT"}, {"id":"date-only-period-widened-rejected","kind":"negative","invariantRefs":["I-01"],"input":{"sourcePeriod":{"from":"2026-07-01T00:00:00Z","to":"2026-07-31T23:59:59.999Z"},"declaredGranularity":"date-only"},"expect":{"accepted":false,"reason":"a date-only period is never widened to instants"},"expectedCode":"PERIOD-GRANULARITY-WIDENED"}, {"id":"execution-time-substituted-for-period-rejected","kind":"negative","invariantRefs":["I-01"],"input":{"sourcePeriod":{"from":"2026-08-03","to":"2026-08-03"},"usageIntervalRefs":[{"from":"2026-07-01","to":"2026-07-31"}]},"expect":{"accepted":false,"reason":"run execution instant substituted for the source period; billing period, usage interval, posting date, commitment period, run time and observation time stay separate"},"expectedCode":"TIME-AXIS-CONFLATED"}, {"id":"overlapping-rule-revisions-rejected","kind":"negative","invariantRefs":["I-06"],"input":{"allocationRuleId":"fx:rule/P","revisions":[{"revision":"3","effectiveFrom":"2026-01-01","effectiveTo":"2026-06-30"},{"revision":"4","effectiveFrom":"2026-06-01","effectiveTo":null}]},"expect":{"accepted":false,"reason":"revision effective intervals of one rule must be pairwise non-overlapping"},"expectedCode":"REVISION-INTERVAL-OVERLAP"}, {"id":"stored-current-revision-pointer-rejected","kind":"negative","invariantRefs":["I-06"],"input":{"rule":{"allocationRuleId":"fx:rule/P","currentRevisionRef":["fx:rule/P","4"]},"asOf":"2026-03-15"},"expect":{"accepted":false,"reason":"revision resolution is by as-of date against effective intervals; a stored currentRevisionRef contradicts effective-dating"},"expectedCode":"STORED-CURRENT-REVISION-POINTER"}, {"id":"axis-change-within-revision-rejected","kind":"negative","invariantRefs":["I-07"],"input":{"allocationRuleId":"fx:rule/P","revision":"5","axisBefore":"project","axisAfter":"product"},"expect":{"accepted":false,"reason":"axis is identity-fixing; an axis change requires a new rule identity"},"expectedCode":"AXIS-CHANGED-IN-REVISION"}, {"id":"run-without-pinned-revision-rejected","kind":"negative","invariantRefs":["I-04"],"input":{"allocationRunId":"fx:run/R11","ruleRef":"fx:rule/P","ruleRevisionRef":null},"expect":{"accepted":false,"reason":"a run pins exactly one immutable revision, not a rule"},"expectedCode":"REVISION-NOT-PINNED"}, {"id":"correction-successor-run","kind":"positive","invariantRefs":["I-21"],"input":{"allocationRunId":"fx:run/R2p","supersedesRunRef":"fx:run/R2","correctionReason":"restated-usage","ruleRevisionRef":["fx:rule/Q","2"],"sourceAmount":120000},"expect":{"accepted":true,"assert":["fx:run/R2 remains resolvable and unmodified","linkage stored on the successor only","predecessor results remain immutable and resolvable"]},"expectedCode":null}, {"id":"predecessor-mutated-with-successor-pointer-rejected","kind":"negative","invariantRefs":["I-21"],"input":{"operation":"write successorRunRef='fx:run/R2p' into closed run fx:run/R2"},"expect":{"accepted":false,"reason":"a closed run is immutable; forward linkage is a derived view, not run content"},"expectedCode":"CLOSED-RUN-MUTATED"}, {"id":"correction-without-reason-rejected","kind":"negative","invariantRefs":["I-21"],"input":{"allocationRunId":"fx:run/R2q","supersedesRunRef":"fx:run/R2","correctionReason":null},"expect":{"accepted":false,"reason":"correctionReason is required from the closed enum when supersedesRunRef is present"},"expectedCode":"CORRECTION-REASON-ABSENT"}, {"id":"result-deleted-with-superseded-run-rejected","kind":"negative","invariantRefs":["I-21","I-24"],"input":{"operation":"delete results of fx:run/R2 upon supersession by fx:run/R2p"},"expect":{"accepted":false,"reason":"supersession is not deletion; results remain resolvable after their run is superseded"},"expectedCode":"SUPERSEDED-RESULT-DELETED"}, {"id":"retired-identifier-recycled-rejected","kind":"negative","invariantRefs":["I-24"],"input":{"operation":"mint a new rule reusing allocationRuleId 'fx:rule/P' after retirement"},"expect":{"accepted":false,"reason":"retired identifiers remain resolvable and are never recycled"},"expectedCode":"IDENTIFIER-RECYCLED"}, {"id":"discount-gross-and-net-reproducible","kind":"positive","invariantRefs":["I-17"],"input":{"ruleRevision":{"discountTreatment":"reduces-source-before-allocation"},"allowanceRef":"fx:allowance/vol-1","allowanceAmount":-10000,"grossView":130000,"netView":120000,"resultAllowanceRefs":"present on every discount-affected result"},"expect":{"accepted":true,"assert":["both gross 130000 and net 120000 views reconstructible from stored attribution","allowance identity remains WM-ECO-008-owned","attribution adds basis only, never a new allowance"]},"expectedCode":null}, {"id":"silent-netting-rejected","kind":"negative","invariantRefs":["I-17"],"input":{"sourceAmount":120000,"allowanceRef":null,"discountTreatment":null,"note":"discount already netted into the source with no allowance reference"},"expect":{"accepted":false,"reason":"discountTreatment must be pinned on the revision and allowanceRef retained; silent netting makes the gross view irreproducible"},"expectedCode":"SILENT-DISCOUNT-NETTING"}, {"id":"discount-reidentified-as-local-allowance-rejected","kind":"negative","invariantRefs":["I-02","I-17","I-20"],"input":{"operation":"mint a new allowance identity inside the allocation cluster for the invoiced volume discount"},"expect":{"accepted":false,"reason":"invoice allowance identity stays in WM-ECO-008; the cluster owns attribution basis only"},"expectedCode":"ALLOWANCE-REIDENTIFIED"}, {"id":"unit-cost-normative","kind":"positive","invariantRefs":["I-23"],"input":{"numeratorBasis":"amortized-effective","numeratorAmount":76000,"runRef":"fx:run/R2","resultRef":["fx:run/R2","fx:res/X"],"denominatorQuantityRef":{"master":"WM-FLW-015","quantity":19000000,"unit":"billable-request"},"observationActRef":{"master":"WM-MAT-008","heldOn":"boundary-review-required"},"metricDefinitionRef":{"candidate":"EM-DAT-05 Metric Definition","allocationState":"unassigned","version":"2"},"denominatorCompleteness":{"state":"complete","coverage":1.0},"currency":"EUR","period":{"from":"2026-07-01","to":"2026-07-31"},"targetScope":"fx:product/X","residualTreatment":"excluded-declared","residualShare":0.05},"expect":{"accepted":true,"assert":["value == 0.004 EUR per billable-request","no new observation identity is minted","denominator quantity sourced from WM-FLW-015 only","metric-definition version pinned","WM-MAT-008 binding carries its boundary hold"]},"expectedCode":null}, {"id":"unit-cost-new-observation-master-rejected","kind":"negative","invariantRefs":["I-23"],"input":{"UnitCostObservation":{"newIdentity":true,"mastersObservationAct":true}},"expect":{"accepted":false,"reason":"unit cost profiles WM-MAT-008 plus Metric Definition; a second observation master duplicates WM-MAT-008"},"expectedCode":"SECOND-OBSERVATION-MASTER"}, {"id":"unit-cost-denominator-master-ambiguous-rejected","kind":"negative","invariantRefs":["I-23"],"input":{"denominatorQuantityRef":["WM-FLW-015","WM-MAT-008"]},"expect":{"accepted":false,"reason":"exactly one denominator quantity source per observation; the measurement act and the quantity are separate bindings"},"expectedCode":"DENOMINATOR-SOURCE-AMBIGUOUS"}, {"id":"unit-cost-denominator-completeness-absent-rejected","kind":"negative","invariantRefs":["I-23"],"input":{"denominatorCompleteness":null},"expect":{"accepted":false,"reason":"denominatorCompleteness is required; base completeness alone does not bound denominator bias"},"expectedCode":"DENOMINATOR-COMPLETENESS-ABSENT"}, {"id":"unit-cost-metric-version-unpinned-rejected","kind":"negative","invariantRefs":["I-23"],"input":{"metricDefinitionRef":{"candidate":"EM-DAT-05 Metric Definition","version":null}},"expect":{"accepted":false,"reason":"the denominator definition version is pinned; changing the useful-result definition creates a new version, not a restated metric"},"expectedCode":"METRIC-VERSION-UNPINNED"}, {"id":"unit-cost-residual-treatment-mismatch-rejected","kind":"negative","invariantRefs":["I-23"],"input":{"comparison":[{"observation":"fx:obs/1","residualTreatment":"excluded-declared","value":0.004},{"observation":"fx:obs/2","residualTreatment":"grossed-up-declared","value":0.0042}]},"expect":{"accepted":false,"reason":"observations are comparable only under the same residual treatment and metric-definition version"},"expectedCode":"UNIT-COST-INCOMPARABLE"}, {"id":"unit-cost-translated-numerator-rejected","kind":"negative","invariantRefs":["I-18","I-23"],"input":{"numeratorAmount":83600,"numeratorCurrency":"USD","runCurrency":"EUR"},"expect":{"accepted":false,"reason":"a translated result is never a unit-cost numerator"},"expectedCode":"TRANSLATED-RESULT-AS-NUMERATOR"}, {"id":"metric-vintage-preserved-after-supersession","kind":"positive","invariantRefs":["I-21","I-23"],"input":{"sequence":["fx:obs/1 cites fx:run/R2 at 0.004","fx:run/R2 superseded by fx:run/R2p","fx:obs/2 cites fx:run/R2p at 0.0038"]},"expect":{"accepted":true,"assert":["fx:obs/1 remains resolvable at 0.004","fx:obs/1 is not restated in place","both vintages are distinguishable by run reference"]},"expectedCode":null}, {"id":"allocated-cost-posted-without-journal-rejected","kind":"negative","invariantRefs":["I-19"],"input":{"operation":"post fx:run/R1 results to WM-ECO-016 as recognized cost","authorizedJournalEntryRef":null},"expect":{"accepted":false,"reason":"allocated cost is an analytical attribution; posting requires a separately authorized journal entry in WM-ECO-016"},"expectedCode":"ALLOCATION-POSTED-WITHOUT-JOURNAL"}, {"id":"allocation-posting-with-authorized-journal","kind":"positive","invariantRefs":["I-19"],"input":{"authorizedJournalEntryRef":"fx:je/1","journalMaster":"WM-ECO-016","allocationRunRef":"fx:run/R1"},"expect":{"accepted":true,"assert":["the journal entry is a distinct object mastered by WM-ECO-016","the run and its results are unchanged","the posting cites the run; the run does not cite the posting as content"]},"expectedCode":null}, {"id":"result-mutates-invoice-master-rejected","kind":"negative","invariantRefs":["I-20"],"input":{"operation":"write allocated amount 72000 onto invoice line fx:line/1 in WM-ECO-008"},"expect":{"accepted":false,"reason":"a result never mutates an invoice master"},"expectedCode":"INVOICE-MASTER-MUTATED"}, {"id":"result-mutates-journal-master-rejected","kind":"negative","invariantRefs":["I-20"],"input":{"operation":"amend posting fx:post/1 in WM-ECO-016 from an allocation correction"},"expect":{"accepted":false,"reason":"ledger corrections are reversing entries in WM-ECO-016; an allocation correction never rewrites a posting"},"expectedCode":"JOURNAL-MASTER-MUTATED"}, {"id":"allocation-creates-usage-rejected","kind":"negative","invariantRefs":["I-02"],"input":{"operation":"mint a usage record inside the allocation cluster for untagged consumption"},"expect":{"accepted":false,"reason":"usage quantity is mastered only by WM-FLW-015; allocation never creates usage"},"expectedCode":"USAGE-MINTED-BY-ALLOCATION"}, {"id":"six-fact-substitution-rejected","kind":"negative","invariantRefs":["I-02"],"input":{"assertion":"invoice amount 120000 treated as recognized cost for the period"},"expect":{"accepted":false,"reason":"invoice amount and recognized cost are distinct; amortization, late credits and accruals make them legitimately unequal"},"expectedCode":"FACT-SUBSTITUTION"}, {"id":"valuation-as-cost-basis-rejected","kind":"negative","invariantRefs":["I-02"],"input":{"sourceAmountBasis":"valuation","sourceMasterRef":"WM-ECO-002"},"expect":{"accepted":false,"reason":"WM-ECO-002 is a price/valuation comparator only and masters no cost or allocation"},"expectedCode":"VALUATION-AS-COST-BASIS"}, {"id":"unassertable-reference-row-rejected","kind":"negative","invariantRefs":["I-02"],"input":{"referenceRow":{"target":"WM-ECO-002","purpose":"Price or valuation comparator only","assertable":true}},"expect":{"accepted":false,"reason":"WM-ECO-002 has no approved outgoing relations; the row must carry assertable=false with its hold"},"expectedCode":"UNASSERTABLE-REFERENCE-ASSERTED"}, {"id":"unevidenced-reference-row-rejected","kind":"negative","invariantRefs":["I-02"],"input":{"referenceRow":{"target":"WM-ECO-012","purpose":"Budget or commitment context","evidenceRefs":[]}},"expect":{"accepted":false,"reason":"reference rows require evidence, and budget and commitment authorities may not share one row"},"expectedCode":"REFERENCE-UNEVIDENCED"}, {"id":"commitment-instrument-minted-rejected","kind":"negative","invariantRefs":["I-16"],"input":{"newCandidate":"CommitmentInstrument","justification":"no contract master is bound in this dossier"},"expect":{"accepted":false,"reason":"a missing binding does not justify a candidate; commitment effects are typed derivation components with a held commitmentRef"},"expectedCode":"CANDIDATE-FOR-MISSING-BINDING"}, {"id":"run-authorization-absent-rejected","kind":"negative","invariantRefs":["I-04"],"input":{"allocationRunId":"fx:run/R12","actorRef":null,"authorizationRef":null},"expect":{"accepted":false,"reason":"an audit-citable run is attributable; actorRef and authorizationRef are required"},"expectedCode":"RUN-UNATTRIBUTED"}, {"id":"effective-state-without-approval-record-rejected","kind":"negative","invariantRefs":["I-04"],"input":{"ruleRevision":{"allocationRuleId":"fx:rule/P","revision":"3","lifecycle":"effective","approvalRecord":null}},"expect":{"accepted":false,"reason":"approval is evidenced by an approval record; lifecycle state never implies approval"},"expectedCode":"APPROVAL-INFERRED"}, {"id":"dossier-rules-asserted-approved-rejected","kind":"negative","invariantRefs":["I-04"],"input":{"assertion":"any rule in the EM-FIN-05 dossier is approved or effective"},"expect":{"accepted":false,"reason":"no rule in this dossier carries an approval record; the frozen audit confers no approval"},"expectedCode":"APPROVAL-INFERRED"}, {"id":"collapsed-confidence-rejected","kind":"negative","invariantRefs":["I-22"],"input":{"confidence":0.87},"expect":{"accepted":false,"reason":"confidence remains decomposed into measurement uncertainty, base representativeness, commitment-coverage certainty and residual share"},"expectedCode":"CONFIDENCE-COLLAPSED"}, {"id":"decomposed-confidence-accepted","kind":"positive","invariantRefs":["I-22"],"input":{"confidence":{"measurementUncertainty":"metered","baseRepresentativeness":"high","commitmentCoverageCertainty":"known","residualShare":0.10}},"expect":{"accepted":true,"assert":["four components present and separately readable","no collapsed scalar is derived for comparison"]},"expectedCode":null}, {"id":"local-invariant-set-divergence-rejected","kind":"negative","invariantRefs":["I-01"],"input":{"planes":{"localStudy":14,"claudeStudy":14,"grokStudy":14,"candidateRecord":15}},"expect":{"accepted":false,"reason":"exactly one normative invariant set I-01..I-24 lives in the candidate record; studies cite by identifier and carry no local lists"},"expectedCode":"MULTIPLE-INVARIANT-SETS"}, {"id":"object-naming-inconsistent-rejected","kind":"negative","invariantRefs":["I-01"],"input":{"names":["CostAllocationRule","CostAllocationRuleRevision","CostAllocationRun","AllocationResult"],"fields":["costBasis","cost_basis"]},"expect":{"accepted":false,"reason":"canonical names are CostAllocationRule, CostAllocationRuleRevision, CostAllocationRun, CostAllocationResult, CostRecord, UnitCostObservation, with camelCase fields throughout"},"expectedCode":"NAMING-INCONSISTENT"}, {"id":"unmodelled-normative-type-rejected","kind":"negative","invariantRefs":["I-01"],"input":{"term":"CostRecord","usedNormativelyIn":["local synthesis","claude study","grok study"],"presentInObjects":false},"expect":{"accepted":false,"reason":"a type bound by invariants is modelled in objects or removed from normative text"},"expectedCode":"UNMODELLED-NORMATIVE-TYPE"}, {"id":"stale-hold-rejected","kind":"negative","invariantRefs":["I-01"],"input":{"holds":["Independent Grok review is pending.","Independent Grok review and frozen audit are pending."]},"expect":{"accepted":false,"reason":"Grok review is delivered and the single frozen audit is spent; holds must state both and must not invite a rerun"},"expectedCode":"STALE-HOLD"}, {"id":"frozen-audit-rerun-rejected","kind":"negative","invariantRefs":["I-01"],"input":{"operation":"invoke a second frozen semantic audit for EM-FIN-05"},"expect":{"accepted":false,"reason":"the single independent frozen audit is spent; a rerun is not an admissible operation"},"expectedCode":"FROZEN-AUDIT-RERUN"}, {"id":"publication-claim-rejected","kind":"negative","invariantRefs":["I-01"],"input":{"claim":"EM-FIN-05 is publication-ready or installable"},"expect":{"accepted":false,"reason":"all bases are non-canonical reviewable drafts; registry allocation, crosswalks, immutable pins and comparison-track validation are absent"},"expectedCode":"PUBLICATION-CLAIM"} ] ``` --- ## Freeze decision **NOT FROZEN.** The dossier is held as a reviewable draft at the adjudicated shape: one identifier-unassigned `Cost Allocation` cluster candidate with four internally addressable object-level identities, Run as citation root, Rule referenced by revision. Gating items, all blocking: 1. Defects 3, 10, 11, 15, 23, 31 — schema corrections without which the candidate cannot represent a residual, a period, an immutable run, a decidable weight sum, or an unapproved rule. These are mechanical and non-negotiable. 2. Defect 39 — one normative invariant set `I-01`–`I-24` in the candidate record; the three study-local sets deleted and replaced by citations. 3. Defect 38 — one normative numeric acceptance scenario replacing three inconsistent ones; the two broken arithmetic constructions withdrawn. 4. Defects 35–37 plus the fixture array above — fixtures restated as machine-checkable cases with `invariantRefs` and `expectedCode`, and executed green before any freeze is reconsidered. 5. Defects 2, 4, 5, 28 — `CostRecord` either modelled or removed; `UnitCostObservation` placed in the profile plane; `CommitmentInstrument` struck; `EM-DAT-05 Metric Definition` added to both reference sets. 6. Defects 6, 7, 40 — unevidenced and unassertable reference rows marked; stale holds corrected; the WM-MAT-008 boundary-review hold recorded against the unit-cost binding. Registry allocation remains pending on both the `Cost Allocation` cluster and the `EM-DAT-05 Metric Definition` candidate. No identifier was invented, allocated, guessed or implied by this audit. No allocation approval was inferred or conferred; no rule in this dossier carries an approval record. Commitment-instrument mastership, FOCUS/FIBO/UBL/XBRL-ERP crosswalks, immutable source pins and comparison-track validation remain absent, and jurisdictional cost-allocation, transfer-pricing and tax treatment remain out of scope and unreviewed. **This audit is spent and must not be rerun.** No claim of canonical completeness, publication readiness or installability is made.