Merge pull request 'refactor(third-door): retire vacuous §3.3 grade-5 pseudoscalar gate (#19)' (#25) from feat/retire-pseudoscalar-gate into main
This commit is contained in:
commit
19b2c3a5a9
3 changed files with 55 additions and 26 deletions
|
|
@ -1,9 +1,18 @@
|
||||||
"""
|
"""
|
||||||
core/physics/goldtether.py
|
core/physics/goldtether.py
|
||||||
|
|
||||||
GoldTether — Coherence Residual Monitor + Dynamic Pseudoscalar Floor
|
GoldTether — Coherence Residual Monitor + Dynamic Autonomy Floor
|
||||||
ADR-0238
|
ADR-0238
|
||||||
|
|
||||||
|
Note (fidelity #19, RETIRED): an earlier draft borrowed grade-5 "pseudoscalar"
|
||||||
|
vocabulary from Super-Blueprint §3.3 for the autonomy floor and read ``F[31]``
|
||||||
|
into telemetry. That anchor is vacuous in odd-dim Cl(4,1) — field-state versors
|
||||||
|
are even (``F[31] ≡ 0``) and ``I₅`` is central (``V·I₅·Ṽ = I₅`` for every
|
||||||
|
versor), so no non-vacuous grade-5 transition invariant exists. The namesake is
|
||||||
|
removed; the integrity-anchor role is carried by versor closure + the harmonized
|
||||||
|
GoldTether residual + biography/identity holonomy. See
|
||||||
|
``docs/research/third-door-blueprint-fidelity.md`` §5.
|
||||||
|
|
||||||
Absolute mastery implementation on the live Cl(4,1) algebra kernel.
|
Absolute mastery implementation on the live Cl(4,1) algebra kernel.
|
||||||
All operators are pure where possible, dual-corrected, and enforce algebraic
|
All operators are pure where possible, dual-corrected, and enforce algebraic
|
||||||
closure on versor-valued outputs.
|
closure on versor-valued outputs.
|
||||||
|
|
@ -25,8 +34,7 @@ from algebra.versor import versor_condition, versor_unit_residual
|
||||||
|
|
||||||
_CLOSURE_TOL = 1e-6
|
_CLOSURE_TOL = 1e-6
|
||||||
_NEAR_ZERO = 1e-12
|
_NEAR_ZERO = 1e-12
|
||||||
_PSEUDOSCALAR_IDX = 31
|
_TELEMETRY_SCHEMA = "goldtether_coherence_v2" # v2: dropped vacuous grade-5 channel (#19)
|
||||||
_TELEMETRY_SCHEMA = "goldtether_coherence_v1"
|
|
||||||
_E4_IDX = 4
|
_E4_IDX = 4
|
||||||
_E5_IDX = 5
|
_E5_IDX = 5
|
||||||
|
|
||||||
|
|
@ -67,7 +75,6 @@ class CoherenceResidual:
|
||||||
dual: float
|
dual: float
|
||||||
combined: float
|
combined: float
|
||||||
kappa: float
|
kappa: float
|
||||||
pseudoscalar: float
|
|
||||||
|
|
||||||
|
|
||||||
@dataclass(frozen=True, slots=True)
|
@dataclass(frozen=True, slots=True)
|
||||||
|
|
@ -106,7 +113,7 @@ class GoldTetherMonitor:
|
||||||
Primary residual:
|
Primary residual:
|
||||||
R(t) = || F(t) * reverse(F(t)) - 1 ||_F
|
R(t) = || F(t) * reverse(F(t)) - 1 ||_F
|
||||||
|
|
||||||
Dynamic pseudoscalar floor rises only on proven epistemic elevation.
|
Dynamic autonomy floor rises only on proven epistemic elevation.
|
||||||
supervised_autonomy_level ∈ [0, 1] is the single gate for HITL relaxation
|
supervised_autonomy_level ∈ [0, 1] is the single gate for HITL relaxation
|
||||||
(exposed as ``autonomy``).
|
(exposed as ``autonomy``).
|
||||||
"""
|
"""
|
||||||
|
|
@ -158,8 +165,7 @@ class GoldTetherMonitor:
|
||||||
# Autonomy may never exceed the floor
|
# Autonomy may never exceed the floor
|
||||||
self.autonomy = min(self.autonomy + self.autonomy_step, self.floor)
|
self.autonomy = min(self.autonomy + self.autonomy_step, self.floor)
|
||||||
|
|
||||||
ps = float(_as_mv(F)[_PSEUDOSCALAR_IDX])
|
self.history.append((float(r), float(self.floor), float(self.autonomy)))
|
||||||
self.history.append((float(r), float(self.floor), float(self.autonomy), ps))
|
|
||||||
if len(self.history) > self.max_history:
|
if len(self.history) > self.max_history:
|
||||||
self.history.pop(0)
|
self.history.pop(0)
|
||||||
|
|
||||||
|
|
@ -169,7 +175,7 @@ class GoldTetherMonitor:
|
||||||
"""Hard gate: only true when residual is safe AND floor is high enough."""
|
"""Hard gate: only true when residual is safe AND floor is high enough."""
|
||||||
if not self.history:
|
if not self.history:
|
||||||
return False
|
return False
|
||||||
last_r, last_floor, last_auto, _ps = self.history[-1]
|
last_r, last_floor, last_auto = self.history[-1]
|
||||||
return (
|
return (
|
||||||
last_r < self.epsilon_drift
|
last_r < self.epsilon_drift
|
||||||
and last_floor >= self.hitl_floor_threshold
|
and last_floor >= self.hitl_floor_threshold
|
||||||
|
|
@ -296,7 +302,6 @@ class GoldTetherMonitor:
|
||||||
dual=dual,
|
dual=dual,
|
||||||
combined=float(combined),
|
combined=float(combined),
|
||||||
kappa=kappa,
|
kappa=kappa,
|
||||||
pseudoscalar=float(F_arr[_PSEUDOSCALAR_IDX]),
|
|
||||||
)
|
)
|
||||||
|
|
||||||
def decide(
|
def decide(
|
||||||
|
|
@ -371,18 +376,18 @@ class GoldTetherMonitor:
|
||||||
return out
|
return out
|
||||||
|
|
||||||
def telemetry(self) -> dict[str, Any]:
|
def telemetry(self) -> dict[str, Any]:
|
||||||
"""Workbench-safe projection (pseudoscalar floor channel)."""
|
"""Workbench-safe projection (autonomy floor channel)."""
|
||||||
last = self.history[-1] if self.history else (0.0, self.floor, self.autonomy, 0.0)
|
last = self.history[-1] if self.history else (0.0, self.floor, self.autonomy)
|
||||||
return {
|
return {
|
||||||
"schema_version": _TELEMETRY_SCHEMA,
|
"schema_version": _TELEMETRY_SCHEMA,
|
||||||
"residual": float(last[0]),
|
"residual": float(last[0]),
|
||||||
"pseudoscalar_floor": float(self.floor),
|
"autonomy_floor": float(self.floor),
|
||||||
"supervised_autonomy_level": float(self.autonomy),
|
"supervised_autonomy_level": float(self.autonomy),
|
||||||
"may_relax_hitl": bool(self.may_relax_hitl()),
|
"may_relax_hitl": bool(self.may_relax_hitl()),
|
||||||
"epsilon_drift": float(self.epsilon_drift),
|
"epsilon_drift": float(self.epsilon_drift),
|
||||||
"n_history": len(self.history),
|
"n_history": len(self.history),
|
||||||
"history_tail": [
|
"history_tail": [
|
||||||
{"r": h[0], "floor": h[1], "autonomy": h[2], "ps": h[3]}
|
{"r": h[0], "floor": h[1], "autonomy": h[2]}
|
||||||
for h in self.history[-16:]
|
for h in self.history[-16:]
|
||||||
],
|
],
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -30,7 +30,7 @@
|
||||||
| 2 | Cartan–Iwasawa decomposition | Super §2.2 | 🔴 replaced — raises ~45% | #16 |
|
| 2 | Cartan–Iwasawa decomposition | Super §2.2 | 🔴 replaced — raises ~45% | #16 |
|
||||||
| 3 | Conformal Procrustes | Super §3.1 | 🔴 replaced — degenerate | #17 |
|
| 3 | Conformal Procrustes | Super §3.1 | 🔴 replaced — degenerate | #17 |
|
||||||
| 4 | GoldTether residual + α law | Super §2.3, R&D §2.3/§5 | 🔴 half-missing | #18 |
|
| 4 | GoldTether residual + α law | Super §2.3, R&D §2.3/§5 | 🔴 half-missing | #18 |
|
||||||
| 5 | Grade-5 pseudoscalar invariant | Super §3.3 | 🔴 missing (namesake) | #19 |
|
| 5 | Grade-5 pseudoscalar invariant | Super §3.3 | ⚪ RETIRED — vacuous in odd-dim Cl(4,1) | #19 (closed) |
|
||||||
| 6 | Surprise residual operator | Super §3.2 | 🟡 partial / rewired | #20 |
|
| 6 | Surprise residual operator | Super §3.2 | 🟡 partial / rewired | #20 |
|
||||||
| 7 | Trajectory invariants + zero-fabrication | R&D §2.2 | ⚫ absent | #21 |
|
| 7 | Trajectory invariants + zero-fabrication | R&D §2.2 | ⚫ absent | #21 |
|
||||||
| 8 | ADR-DAG conformal embedding | R&D §2.4 | ⚫ absent | #21 |
|
| 8 | ADR-DAG conformal embedding | R&D §2.4 | ⚫ absent | #21 |
|
||||||
|
|
@ -106,16 +106,42 @@ Add `𝓘_gold` (seeded `n_o, n∞, 1`), the two-term harmonized residual, and `
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## 5. Grade-5 pseudoscalar invariant — 🔴 missing / namesake (#19)
|
## 5. Grade-5 pseudoscalar invariant — ⚪ RETIRED as vacuous (#19)
|
||||||
|
|
||||||
|
> **Resolution (2026-07-12):** three-agent R&D convergence (Opus 4.8 / Grok-4.5-HEAVY / GPT-5.6-Terra), ratified. The §3.3 gate is not "missing" — it is **mathematically vacuous in odd-dimensional Cl(4,1)** and cannot be built as specified. Issue #19 is closed. The namesake was removed from `goldtether.py` in the same change (see "What changed" below).
|
||||||
|
|
||||||
### Blueprint spec (Super §3.3)
|
### Blueprint spec (Super §3.3)
|
||||||
The pseudoscalar `I = e1∧e2∧e3∧e4∧e5` is the orientation of CORE's integrity. Every transition `F' = V·F·Ṽ` must preserve pseudoscalar sign **and** magnitude: `⟨F'·F̃'⟩₅ = ⟨F·F̃⟩₅`. Any optimization / contemplation promotion / autonomous self-authorship that would flip `sgn(I)` is **blocked at the boundary**. Called "the ultimate mathematical anchor for alignment."
|
The pseudoscalar `I₅ = e1∧e2∧e3∧e4∧e5` is the orientation of CORE's integrity. Every transition `F' = V·F·Ṽ` must preserve pseudoscalar sign **and** magnitude: `⟨F'·F̃'⟩₅ = ⟨F·F̃⟩₅`. Any optimization / contemplation promotion / autonomous self-authorship that would flip `sgn(I₅)` is **blocked at the boundary**. Called "the ultimate mathematical anchor for alignment."
|
||||||
|
|
||||||
### What landed
|
### Why it is vacuous (the proof that retired it)
|
||||||
`goldtether.py` uses `_PSEUDOSCALAR_IDX = 31` to read `F[31]` into telemetry/history, and calls the autonomy threshold a "pseudoscalar_floor." There is **no gate** enforcing `⟨F'·F̃'⟩₅` preservation. The namesake actively masks the absence.
|
The spec presumes a spacetime-like even-dimensional intuition. CORE's algebra is Cl(4,1) — **odd** total dimension (5) — where the grade-5 pseudoscalar behaves degenerately for exactly the quantities the gate inspects:
|
||||||
|
|
||||||
### Done right
|
1. **`I₅` is central.** In odd dimension the pseudoscalar commutes with every element, so for *any* versor `V` (including odd reflections, where `V·Ṽ = ±1`), the sandwich collapses: `V·I₅·Ṽ = I₅·(V·Ṽ) = ±I₅`. Orientation is invariant by construction — there is no map in the versor group that flips it, so there is nothing to "block."
|
||||||
A pure predicate `pseudoscalar_preserved(F, F') -> bool` (sign + magnitude of the grade-5 part within tolerance), wired as a fail-closed gate on transition / promotion / self-authorship, with a typed disclosure. Rename `pseudoscalar_floor → autonomy_floor`. Acceptance: sign-flipping transition refused; valid transition admitted.
|
2. **Field-state versors are even ⇒ `F[31] ≡ 0`.** Every state the monitor sees is built by the sanctioned constructors (`make_rotor_from_angle`, `word_transition_rotor`, geometric products thereof) which live in the **even subalgebra**. The grade-5 (odd) coefficient of an even multivector is identically zero. Reading `F[31]` returns a structural `0.0`, always.
|
||||||
|
3. **The gated quantity is identically zero.** For an even unit versor, `F·F̃ = 1` (a scalar), so `⟨F·F̃⟩₅ = 0` for the source **and** the target of every transition. The gate `⟨F'·F̃'⟩₅ = ⟨F·F̃⟩₅` compares `0 == 0`. It can never fire.
|
||||||
|
4. **The "even-versor parity gate" fix is also vacuous.** The natural repair — "reject any transition that injects odd-grade mass" — was *invalidated in the same review*: the even subalgebra is closed under the sandwich, so odd-grade mass `≡ 0` on every value the sanctioned path can produce. Parity guards nothing a versor could reach. (Empirically confirmed: on a composed 5-plane field versor, `‖⟨F·F̃⟩₅‖ = 0`, and total odd-grade mass `= 0`.)
|
||||||
|
|
||||||
|
The single **real** residual gap in this neighborhood is unrelated to grade-5: `algebra/versor.py::versor_condition` *accepts* an odd reflection such as `e1` (returns `0.0`), i.e. it gates "is a unit versor," not "is an even/orientation-preserving versor." That is a boundary-hardening concern about **admitting odd generators at all**, not about a grade-5 transition invariant, and it is out of scope for #19.
|
||||||
|
|
||||||
|
### What changed (this PR)
|
||||||
|
The namesake was removed, not left masking an absence:
|
||||||
|
- Deleted `_PSEUDOSCALAR_IDX` and every `F[31]` read (the dead `ps` history element and `CoherenceResidual.pseudoscalar`, both structural zeros).
|
||||||
|
- Renamed the telemetry channel `pseudoscalar_floor → autonomy_floor` (it was always `self.floor`, the earned-autonomy ceiling — never a pseudoscalar).
|
||||||
|
- Bumped the telemetry schema `goldtether_coherence_v1 → v2` (the shape changed: key renamed, dead `ps` dropped).
|
||||||
|
- Updated the module/class docstrings to state the retirement inline.
|
||||||
|
|
||||||
|
### Where the integrity-anchor role actually lives (subsumption)
|
||||||
|
The alignment intent behind §3.3 is real and is **already carried, non-vacuously**, by three built mechanisms:
|
||||||
|
1. **Versor closure** — `versor_condition(F') < 1e-6` is enforced on every transition (`supervised_blend` raises on breach). This is the genuine "the state stayed on the group" gate, checked at ~1e-13 over a 100k-step walk (see `project-l10-closure-by-construction`).
|
||||||
|
2. **GoldTether harmonized residual + α control (#24)** — drift term + distance-to-`𝓘_gold` + `α = Φ(R)`, the actual alignment-pressure signal, replacing the vacuous orientation check with a metric one that *can* move.
|
||||||
|
3. **Biography / identity holonomy (ADR-0240 + `engine_identity`)** — order-sensitive trajectory encoding + content-derived identity lineage: the "same continuous life, no confabulated self" anchor. This is where a *real* topological integrity invariant lives.
|
||||||
|
|
||||||
|
Grade-5 objects remain non-vacuous **only in the incidence layer** (5-blades as conformal geometric objects under meet/join in `algebra/cga.py`), never as a transition/promotion gate.
|
||||||
|
|
||||||
|
### Reusable meta-criterion (the session's key output)
|
||||||
|
> **"Would this gate ever fire on a value produced by the sanctioned construction path? If no → it is a namesake gate, not an anchor."**
|
||||||
|
|
||||||
|
This diagnostic is what killed §3.3, and it should be applied to every remaining `§-N` claim before any implementation effort is spent. Acceptance for #19 is therefore **negative**: no gate is built; the namesake is gone; the intent is shown to be subsumed.
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
|
|
@ -207,7 +233,7 @@ PY
|
||||||
| Real Cartan–Iwasawa via `n_o`/`n∞` | #16 |
|
| Real Cartan–Iwasawa via `n_o`/`n∞` | #16 |
|
||||||
| Kabsch-conformal Procrustes on point sets | #17 |
|
| Kabsch-conformal Procrustes on point sets | #17 |
|
||||||
| GoldTether gold-set + harmonized residual + α=Φ(R) | #18 |
|
| GoldTether gold-set + harmonized residual + α=Φ(R) | #18 |
|
||||||
| Grade-5 pseudoscalar preservation gate | #19 |
|
| Grade-5 pseudoscalar preservation gate — ⚪ RETIRED (vacuous; see §5) | #19 (closed) |
|
||||||
| Surprise: blade contraction + wiring + fix conjunct | #20 |
|
| Surprise: blade contraction + wiring + fix conjunct | #20 |
|
||||||
| Absent proposals: sensorimotor + ADR-DAG | #21 |
|
| Absent proposals: sensorimotor + ADR-DAG | #21 |
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -3,7 +3,6 @@
|
||||||
from __future__ import annotations
|
from __future__ import annotations
|
||||||
|
|
||||||
import numpy as np
|
import numpy as np
|
||||||
import pytest
|
|
||||||
from hypothesis import given, settings
|
from hypothesis import given, settings
|
||||||
from hypothesis import strategies as st
|
from hypothesis import strategies as st
|
||||||
|
|
||||||
|
|
@ -97,13 +96,12 @@ def test_serve_never_autonomous_band():
|
||||||
def test_lifelong_curve_telemetry_replay():
|
def test_lifelong_curve_telemetry_replay():
|
||||||
m1 = GoldTetherMonitor()
|
m1 = GoldTetherMonitor()
|
||||||
m2 = GoldTetherMonitor()
|
m2 = GoldTetherMonitor()
|
||||||
for i in range(5):
|
for _ in range(5):
|
||||||
F = make_rotor_from_angle(0.01 * i) if i else _id()
|
# identity always closed; deterministic elevation path
|
||||||
# identity always closed; elevation path
|
|
||||||
m1.update(_id(), epistemic_elevation=True)
|
m1.update(_id(), epistemic_elevation=True)
|
||||||
m2.update(_id(), epistemic_elevation=True)
|
m2.update(_id(), epistemic_elevation=True)
|
||||||
assert m1.telemetry()["history_tail"] == m2.telemetry()["history_tail"]
|
assert m1.telemetry()["history_tail"] == m2.telemetry()["history_tail"]
|
||||||
assert m1.telemetry()["schema_version"] == "goldtether_coherence_v1"
|
assert m1.telemetry()["schema_version"] == "goldtether_coherence_v2"
|
||||||
|
|
||||||
|
|
||||||
def test_supervised_blend_closure_and_endpoints():
|
def test_supervised_blend_closure_and_endpoints():
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue