Skip to content
← Documentation

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/infrateam/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. validAt is 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:

  • id is 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.
  • since already encodes an interval. PlacementFact carries 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.