spec(SHARD-WP-0005 T6): orthogonal core spectra + implied positions + interaction subset (§6.5)

Fixes D-1. ~6 independent core axes (substrate, write-granularity, opacity,
envelope, access, liveness) with the rest implied via published rules that
forbid impossible profiles; a small named axis-interaction table is the
degradation contract (proof obligation behind 'core logic written once').

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
2026-06-15 01:38:02 +02:00
parent af840576e9
commit 012d151fe8
2 changed files with 46 additions and 1 deletions

View File

@@ -262,6 +262,51 @@ only via export→files (I-12).
- **Absence is first-class** — the profile must express *can't* cleanly (Oddmuse floor), so
degradation paths are explicit, never guessed.
### 6.5 Orthogonal core, implied positions, and the interaction subset
Fifteen independent ordinal axes is *descriptively* right but would be *operationally* a mess
if treated as fifteen free dimensions: the axes are **not orthogonal**, and a degradation
function over all 15 jointly is the flat-checklist problem returning in higher dimensions
(review D-1). Three rules tame it.
**(a) A small orthogonal core; the rest are implied.** Most axes are *correlated* and collapse
to a few independent choices. The **core axes** an adapter must independently declare:
1. **Substrate** → drives attachment-mode, history, merge, and native-query positions together
(git-IS-store ⟹ history=git-native ⟹ merge=git/text ⟹ query=build-your-own-index;
relational-DB ⟹ direct-DB attach ⟹ DB-version-row history ⟹ DB query).
2. **Write granularity** → drives addressing granularity and the overlay/patch shape.
3. **Content opacity** → drives translation and (where encrypted) collapses native-query.
4. **Operational envelope** → drives freshness mode (§8.8) and rebuild expectations (§8.7).
5. **Access grant** → independent (authz, L5).
6. **Computational/liveness** → independent (projection kind, §8.5).
The remaining axes are **implied/derived** from these via published implication rules; an
adapter *may* override an implied position, but the default is computed, not hand-set. This
turns ~15 free dimensions into ~6 independent ones plus derivations — fewer things to get
wrong, and impossible combinations become unrepresentable.
**(b) Implication rules forbid impossible profiles.** E.g. `attachment=git-IS-store ⟹
history≥git-native`; `opacity=encrypted-whole-shard ⟹ native-query=none ∧ translation≤opaque`;
`merge=native-CRDT ⟹ history=CRDT-log ∧ envelope=realtime`. A profile that violates an
implication is rejected at registration — capability-as-data (I-3) with integrity constraints.
**(c) The degradation function reads a *named, small* interaction subset — not all pairs.**
"No per-backend code" is only credible if we say *which* axis interactions the generic logic
actually consults. They are:
| Operation | Axes consulted (jointly) |
|-----------|--------------------------|
| **write / overlay-apply** | write-granularity × merge-model × history × access-grant |
| **transclude / address a span** | addressing-granularity × write-granularity × identity-vs-placement |
| **project / cache** | operational-envelope × computational-liveness × content-opacity |
| **query** | native-query × content-opacity (encrypted ⇒ derive-index-or-none) |
| **translate** | translation × content-opacity × structure |
| **federate** | substrate × history × merge (per the §8.3 model) |
Everything else is a single-axis check. This table *is* the degradation contract: it is small,
enumerated, and testable — the proof obligation behind "core logic written once."
---
## 7. Top waist — the Wiki Page Model (L2)

View File

@@ -129,7 +129,7 @@ operational expectation).
```task
id: SHARD-WP-0005-T5
status: todo
status: done
priority: medium
state_hub_task_id: "b031715c-00d0-4a0a-99f1-4e74a236d04b"
```