docs/identity-axes.md
Falsifying the identity law, axis by axis
The law proposed in identity-law.md:
identity(fact) = (subjects, dimension, validAt)
Each component attacked independently, plus coincident observation, plus a role classification of every field.
Result: two components survive. validAt is falsified. Not because time is
absent from identity, but because the instant is not the primitive. And the
replacement is not universal either — which is the sharper finding.
Axis 1 — subjects: survives
Two attacks, neither fatal, both leaving an obligation.
Aliasing. A subject renamed (team/infra → team/platform) produces two
observations with different subject tuples that are the same fact. This does not
show subjects are outside identity — it shows subject identifiers are not
subjects. Identity is over the referent; the URN is a name for it. So identity
requires an equivalence relation on names before it can be computed. That
relation does not exist in core today.
Direction. exchange: a → b of 5 and exchange: b → a of −5 are the same
event. The ordered pair is therefore not identity-bearing on its own; the pair
and the sign must be normalised together.
Both are canonicalization obligations on the inputs to identity, not refutations. Subjects stay in identity.
Axis 2 — dimension: survives, and absorbs kind
Unit conversion. duration = 60 min and duration = 1 h are one fact.
So unit must not be in identity — it belongs to the value. Current code
already excludes it. Correct by accident or by design, but correct.
Threshold collapse. Is condition: degraded the same fact as
measure: health = 0.3? No. Deriving the condition needs a threshold, which is
information present in neither the measure nor the world. They are different
facts, and one is a lossy derivation of the other where a threshold exists.
Dimension survives.
But kind does not. condition, measure, placement differ only in the
type of their value — categorical presence, number, categorical place. The
dimension determines the value type. kind is therefore derived from
dimension, not independent of it, and is redundant in identity.
Axis 3 — validAt: falsified
The decisive case is one the ledger did not contain: a polling sensor.
instant-law episode-law semantic
polling sensor, same value ×3 3 1 1
oscillation 1,5,1 3 3 3
same transfer twice (EVENT) 2 1 2
coincident sensors, agree 1 1 1 (2 evidence)
coincident sensors, DISAGREE 1 2 contested
A sensor reporting degraded every second for an hour does not create 3,600
facts. It creates one episode with 3,600 pieces of evidence. The instant law
over-splits by exactly the polling rate — the precise mirror of the current
implementation's over-merging.
So the third component is not the instant. It is the episode: a maximal run of equal value with no differing value observed between.
The deeper primitive is not time
If identity is "same value, nothing different in between", then time contributes only one thing: the order needed to say "between". Quantised windows, sequence numbers, causal order and interval semantics all supply that order and all satisfy the law identically.
The primitive is observational separation, not time.
validAtis one implementation of an ordering, and the law should be stated over the ordering.
This matters practically: it dissolves the clock-skew problem recorded in identity-law.md. Under episode identity, two observers reporting the same value milliseconds apart fall in one episode regardless of skew, because no differing value separates them. Skew only matters when it reorders observations across a change.
But the replacement is not universal either
Row 3 kills it. Two identical transfers at different times are two facts. Episode identity merges them, because their values are equal.
The partition is state versus event:
State facts (condition, measure, placement) |
Event facts (exchange) |
|
|---|---|---|
| what it asserts | a level that persists | a change that occurs |
| repeated equal observation | same fact, more evidence | distinct facts |
| separation | delimited by a differing value | every occurrence separate |
Could exchange be derived from levels, restoring universality? No — measured
reasoning: two simultaneous transfers a→b and c→b of 5 produce the same net
levels as one transfer of 10. Exchange carries information levels cannot
recover. It is primitive.
A single formula still holds, but its computation is not uniform:
identity = (subjects, dimension, separation-ordinal)
where the ordinal is the episode index for levels and the occurrence index for changes. Universal in form; two rules in content. That is weaker than what identity-law.md claimed, and it is a correction to it.
Axis 4 — coincident observations
Two sensors, same measure, same instant, same value: one semantic fact, two
evidence entries. Both laws agree, and this is what evidence exists for. It
confirms that semantic identity is over asserted content, while observational
identity is over reports. The current code gets this right, and the comment in
fact.ts about never keying on the observer is the reason.
Two sensors, same identity, different values: neither law works. The instant law says one fact and silently discards a value; the episode law fabricates a change that never occurred. The truth is neither — the quantity is contested.
Fact has one value field per identity. It cannot hold a disputed quantity.
This is the first candidate that is not a canonicalization defect: no
identity rule fixes it, because the shortfall is in the type, not the key. It is
recorded here as a candidate and not promoted — one unhandled case is not yet a
demonstrated ontology failure, and the same claim has been made and withdrawn
before.
Field roles
The law should emerge from these, not from the implementation.
| Field | Role | Note |
|---|---|---|
subject, from, to, moved |
identity | after alias resolution and direction normalisation |
condition, metric |
identity | the dimension |
validAt |
identity | but only as an ordering, not as an instant |
value, magnitude |
state | |
unit |
state | proven by unit conversion |
at (placement) |
state | ⚠️ currently in identity — this is the two-places-at-once defect |
limit, enforced |
state | arguably a second dimension conflated into measure |
evidence |
evidence | never emptied by collapse; correct |
recordedAt |
provenance | when it became knowable |
id |
provenance | ⚠️ see below |
kind |
derived | determined by the dimension |
since (placement) |
derived | the episode start — redundant under episode identity |
Two consequences fall out that no axis attack produced:
idis a second identity. It is documented as "stable identity — two observers of one fact produce one id", which is a content-derived identity assigned by a connector. That is the same defect class as dual semantic ownership: two authorities for one quantity, free to disagree, with no mechanism that detects disagreement. Identity is derived or it is assigned; it cannot be both.sincealready encodes an interval.PlacementFactcarries an episode start today. The one family whose identity is most wrong is the one that already had the field the correct law needs.
Classification
| Axis | Verdict |
|---|---|
| subjects | survives — with alias-resolution and direction-normalisation obligations |
| dimension | survives — and absorbs kind; unit is state |
validAt as instant |
falsified — polling over-splits by the polling rate |
| time as the primitive | falsified — the primitive is observational separation; any ordering serves |
| the law as universal | falsified — state and event separate by different rules |
| coincident, agreeing | law holds; evidence is the right mechanism |
| coincident, disagreeing | neither law holds; candidate ontology gap, not promoted |
The identity law is not promoted. It survived three axes and failed the fourth in a way that also weakens its universality claim. What survived is narrower and better stated:
Identity is
(subjects, dimension, separation). Separation is observational, not temporal. Levels separate on change; occurrences separate always.
Nothing implemented. The identity-law.md claim that the law was universal is
superseded by this document.