docs/degrees-of-freedom.md
Degrees of freedom
The matrix experiment falsified an implicit assumption. The class was correctly selected, the cells preserve the relation exactly, and the row ordering measured 57.6% reversed — worse than the 2-D embedding it replaced.
Representation correctness and realization correctness are independent.
src/lib/grammar/freedom.ts, tests/freedom.test.ts.
1. What a degree of freedom is
Every example in the brief — row order, camera position, colour assignment, animation timing, sibling order, label placement — is the same object:
A degree of freedom is a symmetry of the representation: a transformation under which the represented semantics is invariant.
Permuting rows does not change which cells are filled. Moving the camera does not change the scene graph. Recolouring does not change which category is which. The freedom is the symmetry group, and a realization is a choice of group element.
That is a universal structure, independent of representation class — which was the question. It does not come from the catalogue; the catalogue instantiates it.
2. The obligation follows without further assumption
If a transformation leaves the semantics invariant, then nothing semantic can be read off it. But a viewer reads it anyway — every positional axis asserts an ordering (representation-calculus.md).
Either bind the freedom to a semantic quantity — at which point it is no longer free — or ensure the viewer cannot read it as meaningful. A free channel that asserts is a claim with no owner.
3. No freedom is a symmetry of everything
The residue is where realizations fail while the representation stays correct:
| Freedom | Preserves | Leaks |
|---|---|---|
| row/column order | which cells are filled | block structure; adjacent rows read as similar |
| sibling order | ancestry | left-to-right reads as rank |
| node order in a layer | flows and magnitudes | crossings; vertical position reads as rank |
| camera | the scene graph | occlusion, foreshortening — a symmetry of the model, not the image |
| colour assignment | distinctness, given a legend | without a legend nothing survives |
| animation timing | the order of events | rate and duration — an eased tween invents acceleration |
| label placement | which label belongs to which mark | at density, association itself |
Two are worth stating separately because they show "symmetry" must be relative to something:
- Permuting only rows changes the relation. The group is the simultaneous row-and-column action, not either alone.
- The camera is a symmetry of the model and not of the image. That is why a camera can be "correct" and still hide half the scene.
4. Status is a property of (freedom, grounds)
Not of the representation. Same freedom, three worlds, three answers:
| Grounds | Status | Obligation |
|---|---|---|
| bound to a semantic quantity | derived | none — the symmetry is broken deliberately |
| a metric exists | measured | report the score. A measurable freedom left unmeasured is an unstated claim |
| a shared expectation exists | conventional | declare it — a convention cannot be false, only unuseful |
| nothing | arbitrary | if the channel asserts, neutralise or declare meaningless |
This mirrors coverage being delivered rather than advertised in selection.md: a property of the pairing, not of the class.
5. The matrix, decomposed
| Component | Status | Result |
|---|---|---|
| cell occupancy | derived — bound to the co-change relation | exact |
| row/column order | measured — a metric exists | 57.6% reversed |
The class was right and one of its internal freedoms was not. So matrix is not a terminal representation; it is a family of realizations, and the members differ in something the calculus above it cannot see.
Note that measured is not a pass. It obliges a number, and the number came
back worse than the thing it replaced. A realization that had chosen a seriation
and not measured it would have satisfied every layer above and still misled.
6. The defect class this layer names
An unowned claim: a freedom that is arbitrary, or measurable-and-unmeasured, while occupying a channel that asserts.
unowned claims: row/column order, camera position and rotation
Not flagged: label placement (channel asserts nothing), animation timing (bound to observed timestamps), colour assignment (convention declared). The audit separates the four cases rather than warning about everything.
The camera result applies to the existing renderer. WorldScene has a camera
with no semantic binding, no metric, and no declared convention — arbitrary, on a
channel that asserts. It was never audited because the channel audit examined
position, scale and colour, and the camera is not a channel. It is a
freedom, and this is the layer that can see it.
Standing
| Question | Answer |
|---|---|
| Do realizations have a universal structure? | yes — a freedom is a symmetry group |
| Independent of representation class? | yes — derived from invariance, not from the catalogue |
| Does the obligation follow? | yes — from invariance plus the asserting-channel law |
| Are the four statuses distinct? | yes, and status depends on grounds, not class |
| Is this orthogonal to the layers above? | yes — the matrix passes selection and fails realization |
What is still not established
- Seven freedoms is a sample. Aspect ratio, scale/zoom, projection type, easing curves and z-ordering are absent.
channelAssertsis declared per freedom, not derived from the channel it occupies. It should fall out of the representation calculus and currently does not.- The framework classifies and does not optimise, as directed. Nothing here chooses a better seriation or a better camera.
- The camera finding is not measured. It is a classification from the
grounds, and no instrument has yet scored what a
WorldScenecamera occludes.
194 → 201 tests, tsc clean.