observer_slots.verdict() + resolve #383 (report-of does resolve slots)#437
Merged
Merged
Conversation
…ed (#383) #383 claimed `report of <name>` inside a function resolves the module binding differently from the observer predicates (falls to the value-fallback "as if the name had no slot"), and lib/observer_slots deferred a verdict() API on it. Reproduced-before-believing: it does NOT reproduce on current main. `report of g` inside a function returns the SLOT's regime, agreeing with the predicates — a descending signal reads "improving" (not the value-fallback "equilibrium"), single-file AND via load_file. The original "disagreement" (a constant reading "equilibrium" while `stable of g` returned 1) was consistent all along: equilibrium is a settled regime and also satisfies the `stable` predicate. The REPORT_NAME / PREDICATE_NAME handlers share identical env-slot resolution; the issue predated the Phase-3 B name-resolution path. So the deferred API ships: `observer_slots.verdict of i` returns the full regime string per slot, next to the boolean is_stable/is_diverging. Tests pin that verdict reads the slot (descending -> "improving") and agrees with the predicates (wedged constant -> "equilibrium" + is_stable 1); suite [50i] now 11. Suite 2517/2517; ASan clean. Closes #383 Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
29 tasks
InauguralPhysicist
added a commit
that referenced
this pull request
Jul 7, 2026
…ient (#412) (#465) * feat(observer): surface coherence — unity horizon + a real 'how' gradient (#412) Two settled decisions, closing OBSERVER.md's Rough Edges: 1. Unity is the HORIZON. entropy_of_num special-cased |x| == 1.0 to 0 — the opposite of the formula's own value there (H = 1.0, the smooth maximum) — so a value placed exactly at 1.0 reported converged immediately while 1.0000001 read maximally entropic. Special case dropped; |x| == 0 keeps H = 0 (the formula's home-point limit). A flat run at 1.0 now classifies equilibrium (steady, high entropy), never converged. 2. 'how' is a real 0-1 gradient: deadband-normalized settledness of the last observed step, 1 - min(1, |dH|/dh_zero), where dh_zero is the same settle threshold the converged window uses. Pure in the recorded dH — so 'how is x at L' reads identically from tape history (no tape format change) and the live/at parity pin in test_temporal holds by construction. It measures the ENTROPY trajectory like where/why; value-channel readings stay report_value's job (#294). The old 1 - entropy/last_entropy was degenerate (the observer refreshes last_entropy on every push: always 0 or 1). The #383 sub-item was already struck (observer_slots.verdict() landed in #437; the doubted divergence did not reproduce). test_observer_park.eigs settled on 1.0 incidentally — repointed at the home region (0.001); its park-reset intent is value-agnostic. New test_observer_coherence.eigs pins both decisions (10 checks). ouroboros AOT mirrors the 'how' formula at the next pin bump (aot_rt reads the same recorded dH), like every semantics train. Gates: release 2594/2594, ASan+UBSan detect_leaks=1 2594/2594. Closes #412 Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> * test(observer): regenerate the cross-repo corpus goldens for the #412 semantics The corpus gate did its job: 4 of 13 programs diverged, each traced to the two decided changes before regenerating — - EigenScript__structural_observer: prev_dH shifted by EXACTLY 1.0 (a structure member sits at 1.0; horizon entropy 0 -> 1.0) - dynamics__solve: Gauss-Seidel 10 -> 11 iters / power iteration 5 -> 6 (iterates converge toward [1,1,1] — entropy near the ridge changed) - dynamics__physics: one x-column predicate flag (samples at the ridge) - iLambdaAi__test_interrogative_spec: 'how' prints the real gradient (0 -> 1; the interrogative arithmetic sum follows) Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> --------- Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
What
#383 claimed
report of <name>inside a function resolves a module binding differently from the observer predicates — falling to the value-fallback "as if the name had no slot" — andlib/observer_slotsdeferred itsverdict()API waiting on it.Reproduce-before-believing: it doesn't reproduce
On current
main,report of ginside a function returns the slot's regime and agrees with the predicates:"improving"— not the value-fallback"equilibrium"— provingreport-of reads the slot (verified single-file and viaload_file);greading"equilibrium"whilestable of greturned1) was consistent all along:equilibriumis a settled regime that also satisfies thestablepredicate.The
REPORT_NAMEandPREDICATE_NAMEVM handlers share identicalenv_resolve_chainslot resolution; the issue predated the Phase-3 B name-resolution path. Like #241, a confident C-level hypothesis ("falls tobuiltin_report") that the language surface refutes.So the deferred API ships
observer_slots.verdict of ireturns the full regime string per slot, alongside the booleanis_stable/is_diverging. Tests pin thatverdictreads the slot (descending →"improving") and agrees with the predicates (wedged constant →"equilibrium"+is_stable1). Suite [50i] now 11 checks.Gates: suite 2517/2517; ASan clean.
Closes #383
🤖 Generated with Claude Code