Commit graph

15 commits

Author SHA1 Message Date
Claude
199dc72d90
docs(specs): the four posture statements — and R-11's measurement dissolves its own question
The last docket item. Three decisions that cost nothing to make and something
real to leave silent, plus one proposal withdrawn because instrumentation showed
it could not be built as specified.

docs/specs/postures.md. Each posture names the CRITERION that would change it,
because an unstated boundary reads as an unexamined one and a future reader
cannot tell a deliberate limit from an accident.

P-1 (R-1 A, G-12) — efferent action deferred, in scope eventually. No efferent
surface beyond typed trace-folded tool operators until (i) the chooser exists
and is governed AND (ii) an efferent falsification bench exists. Both halves are
load-bearing: without (i) CORE acts with no account of what it should do next;
without (ii) it acts with no way to be shown wrong. ADR-0211's bench-level
prohibition is narrower than this and remains in force.

P-2 (R-5 A, G-11) — identity enforcement stays scoring-only until a named
held-out benign/adversarial corpus shows separation on the certified metric at a
floor named BEFORE the run. Same pre-registration discipline that made the §5
NO-GO full credit, for the same reason: a refusal gate authorized on a floor
chosen after seeing the numbers is not evidence, and identity refusal is
expensive to get wrong in both directions.

P-3 (R-6 A, G-17) — non-text ingest deferred, with the falsification bench as
the standard. A modality enters serving on the SAME terms text did: named
held-out corpus, holds/bites predicates, wrong=0-or-refuse. No modality is
admitted because the substrate can represent it. That makes the 59 sensorium
modules a capability awaiting evidence rather than an unexplained absence.

P-4 (R-11 B -> second ruling) — THE INTERIM FABRICATION GATE IS WITHDRAWN.

R-11 ruled "measure first, then re-ask". The measurement ran over 11,199
distinct serving-path inputs and 23,562 clauses and returned ZERO outside the
verified inventory — which is not a clean bill of health. It has a cause:

  atom_fact's template is "{p}" — one slot, no literal anchor. It matches ANY
  string, and it is one of the 19 verified constructions.

So "outside the verified inventory" is NOT A WELL-DEFINED PROPERTY. Nothing is
outside it. The proposed gate would have refused nothing while presenting as a
safety mechanism — a mechanism whose failure state is indistinguishable from its
success state, which is this repository's dominant defect class.

This reframes G-2, and the reframing is the finding. "every dog is a mammal" ->
member(every_dog, mammal) is not the reader ADMITTING an out-of-inventory
construction. The surface is admissible; the reader assigns it the WRONG
RELATION. The defect is in the mapping, not the admissibility set, and no gate
over the admissibility set can catch it.

Second ruling, delegated: option A is WITHDRAWN as unimplementable as specified,
NOT deferred — a deferred option is one that could be built later, and this one
cannot be built at all against the inventory as it stands. Option C is
operative. The fabrication ADR inherits the boundary question: either atom_fact
is narrowed so admissibility is decidable, or the guarantee moves from
admissibility to MAPPING CORRECTNESS. The evidence points at the second.

METHOD NOTE, recorded because the number nearly shipped wrong. Two earlier
passes were both invalid and both looked fine. The first matched templates
against whole multi-sentence inputs and reported 100% out-of-inventory when
every clause was in-inventory. The second misread the sentence-splitter's tuple
and measured "." 23,562 times. The catch-all was found only by a NON-VACUITY
CHECK — asserting the matcher could still say no to "most birds can fly" — and
it could not. A measurement that cannot fail is not a measurement, and that is
the same standard this arc applied to every pin it shipped.

Closes G-11, G-12, G-17. The entire adopted docket is now executed:
R-7 -> R-12 -> R-3+R-4 -> R-9+R-2 -> R-13 -> R-8 -> R-1/R-5/R-6/R-11.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Wcw2pnMBwyvmNyQg4uPEt4
2026-07-28 08:26:48 +00:00
Claude
6c67e88df1
feat(config,specs,tests): PR-5 — the flag register, profiles as units, and the daemon's missing fourth flag (R-3 + R-4)
Rank 3 on the docket. RuntimeConfig carries 32 boolean fields and nothing in
the repository stated that set, distinguished a capability flag from a posture
flag from a deployment knob, or recorded what evidence would flip any of them.
Two independent counts of the same set differed by eleven — the assessment said
"seventeen capability flags," N-7 measured 28 default-off plus 4 default-on —
and neither was wrong about what it looked at. They counted different things
because nothing declared what the set was.

R-3 (ruled A — incomplete flag set). accrue_realized_knowledge joins
CONTINUOUS_LIFE_CONFIG_FLAGS. Step D consolidates the realized facts Step B
writes, and the daemon forced the consumer without the producer: a continuous
life consolidating an empty set, which the mastery framework calls "garbage at
high speed." It shipped that way for six weeks.

The decisive evidence was in the code, not the documents. BOTH flags' comment
blocks in core/config.py already described the corrected profile —
accrue_realized_knowledge says "the production L10 process enables it alongside
persist_session_state", consolidate_determinations says "...alongside
accrue_realized_knowledge + persist_session_state". Three records (two
docstrings and the 07-25 verification doc) agreed with each other and disagreed
with four lines of code. Dormancy was a coherent ruling and would have cost
correcting three records that were RIGHT about the design; incompleteness cost
one line.

So the planned "N-6 docstring correction" deliverable DISSOLVED rather than
shipping: adding the flag made both docstrings true. Recorded explicitly,
because a PR that quietly ships less than it promised is the same divergence
class this arc exists to close.

R-4 (ruled A) — docs/specs/flag_register.md. All 32 booleans with class,
governing ADR or an honest "none", recorded rationale, and what evidence would
flip it. The classification is the load-bearing half and is stated as a
taxonomy rather than a label:
  CAPABILITY — what CORE can do; engineering may flip it on named evidence
  POSTURE    — what CORE serves or refuses AS TRUE; the wrong=0 boundary,
               ruling-only
  DEPLOYMENT — cost, lifecycle, process shape; per-deployment
estimation_enabled and composed_surface are both "= False" and are not the same
kind of thing. Nothing said so before.

Profiles are declared as the UNIT of decision (R-4's mechanism): one-shot/eval
and continuous-life. The absence of a SERVING profile is stated deliberately —
the four POSTURE serving flags each ride their own license, and grouping them
before the ledger is sealed would license by association, the outcome R-8
exists to prevent.

tests/test_flag_register.py, on the gate. BIDIRECTIONAL, because either
direction alone would have passed through both failures it exists to prevent:
a flag added to config.py and not registered fails; a register row outliving
its flag fails. The counts the register's prose states (32 / 4 ON) are pinned,
since a stale count is how this register came to be needed. Four sabotages
observed red — new unregistered flag, deleted row, orphaned row, and a flag
silently flipped ON, the last caught by two independent pins.

THREE FINDINGS THE ITEM DID NOT ANTICIPATE, all from measuring rather than
reading.

1. Accumulated permissiveness, not just hesitancy. Of the four default-ON
   flags, ONE has a governing ADR (deduction_serving_enabled / ADR-0256) and
   TWO have no recorded reason of any kind — allow_cross_language_recall and
   use_salience carry no comment block, no ADR, no criterion. In an
   architecture built on earned licenses, two permanently-on capability flags
   with no recorded decision is G-8's question inverted. Registered and
   deliberately NOT fixed: writing a rationale after the fact would invent a
   decision nobody made, which is worse than recording the absence.

2. A hollow gate inside the governance pin itself.
   test_default_on_flag_is_not_governed_by_a_proposed_adr is parameterized over
   (default-ON flag x cited ADR), so the three uncited ON flags contribute ZERO
   cases — it covered exactly one flag. Its non-vacuity guard asserted only
   that SOME flag cites an ADR, which default-off flags satisfy in abundance.
   One reformatted comment away from zero coverage with everything green: the
   failure state indistinguishable from the success state, inside the module
   written to prevent exactly that. Guard tightened to require a non-empty
   parametrization, and observed red by stripping ADR-0256's citation.

3. The daemon's own tests ran on no gate. R-3 changes what the always-on
   process does every beat, and tests/test_l10_always_on_daemon.py was in no
   curated suite — so this behaviour change would have shipped guarded solely
   by tests no gate invokes, which is the hollow-gate pattern landing on the
   exact file covering the change. Promoted to smoke WITH the change it guards.
   Measured +9.4s, +4.3% of smoke — paid deliberately, not estimated. Removed
   from full_only_baseline.txt in the same edit (both-directions ratchet; the
   baseline shrank 747 -> 746).

Red before green throughout: the assertion cfg.accrue_realized_knowledge is
True was added to the daemon test and OBSERVED FAILING before the flag existed.

H-8(c) closed by AMENDING the correction note rather than deleting it, and the
amendment is the more useful artifact. PR-1's note said the 07-25 document's
claim was false; R-3 then made that claim TRUE, so the correction note itself
went stale — in the direction nobody guards, a correction made wrong by its own
subject being fixed. Both notes now carry the commit window they apply to. A
dated correction survives its subject changing; an undated "this is false" does
not.

Also delivered, from the 2026-07-28 external-assessment triage: §5, the
declared-table index. Eight single-source-of-truth tables and the pin that makes
each true. A reader's aid, explicitly NOT a central contracts.toml — that would
add a fifth copy needing agreement with four generators and put four different
authorities in one merge surface.

Handed forward to PR-11: the 5000-beat soak recorded in
evals/l10_always_on/contract.md (2026-07-19) predates this change and therefore
describes a configuration that NO LONGER SHIPS. PR-11's re-run is the first soak
of the corrected profile, and Step B feeding Step D is exactly what a long
horizon stresses.

Closes G-6, G-8, H-6, H-8(c), H-8(d) — and H-8 in full. Wave 4's F-6 half-gate
is lifted; the Track C half is untouched.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Wcw2pnMBwyvmNyQg4uPEt4
2026-07-28 06:47:21 +00:00
Claude
39331dbce1
docs(specs): the M2 trust-boundary table — measured, and three boundaries CLOSED (PR-7, H-7)
formation/ declares its trust boundary explicitly (forge.py's five ordered
rules + hashing.py's content-addressing, no-floats, no-pickle, self-sealing).
ingest/gate.py — the PRODUCTION boundary, the only point where raw data enters
the versor manifold, facing untrusted user text every turn — had no comparable
table. H-7: asymmetric rigor invites the assumption that the un-tabled boundary
is the less important one, when it is the opposite.

Written per H-7's authority: documentation first, evidence decides whether code
follows. Every row measured against the code at edf6c2a4, not assumed — and the
measurement reframes the entry.

  ALREADY MET (2)   no floats in hashed payloads — _stable_digest hashes
                    salt + name, both UTF-8 strings, no float reaches a digest
                    no pickle — absent from all of ingest/

  CATEGORY          content-addressed artifacts, self-sealing, source
  DIFFERENCE (3)    allow-list. All three presuppose a PERSISTED ARTIFACT WITH
                    CITATIONS. formation validates artifacts it will store; the
                    gate transforms text it will not. Recording these as owed
                    obligations would have manufactured three hardening tasks
                    that cannot be done, and sent a future reader to do them.
                    Closing them is the load-bearing half of this table.

  REAL DELTA (1)    no audit record per rejection. The gate refuses with typed
                    exceptions (KeyError :235/:286, RuntimeError :318/:424) and
                    records nothing about what it refused;
                    vocab.record_unknown_token :331 records OOV observation,
                    which is not a rejection record.

On the delta, stated so it is not over-read: it is NOT a containment hole —
refusal is fail-closed and nothing unvalidated crosses into the manifold. It
costs forensics. It is the same failure class as H-11, which PR-9 closed on the
turn spine hours ago: a guard that works correctly and leaves no trace of having
worked. And it has a named downstream consumer — a widening program (G-3) must
be able to ask "what shapes is this boundary refusing, and how often", which
today it cannot.

Hardening for B6 is a separate PR per this entry's own authority, sized against
whether anything consumes gate-rejection telemetry today.

AGENTS.md §Security-and-trust-boundaries defaults also checked row by row for
completeness: four are n/a to a component that executes nothing, touches no
filesystem, and mutates nothing; the display/log default is met.

Docs only. Registers: H-7 CLOSED, PR-7 marked LANDED.

Co-Authored-By: Claude <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Wcw2pnMBwyvmNyQg4uPEt4
2026-07-28 04:30:00 +00:00
Shay
bb95dfbe67 fix(runtime): defer the turn-event sink emission to the serve boundary (R7)
Audit-ledger R7, implementing docs/handoff/curriculum-license-loop-2026-07/
E1-R7-ASSERTION-SPEC.md. `ChatRuntime.chat` seals a TurnEvent before the
surface authority is known; `CognitiveTurnPipeline` back-stamps the resolved
surface and canonical trace_hash onto `turn_log[-1]` after `chat` returns. So
the in-memory log ended up correct and the DURABLE stream carried the
pre-override record — the thing that persists was the wrong one.

Mechanism, per the spec's M1-M3:

- M1 — stage an INDEX into `turn_log`, never the TurnEvent. The flush re-reads
  the log, so every back-stamp is picked up by construction and the staged
  record cannot go stale. Capturing the event object would be the original
  defect with extra steps.
- M2 — `attach_telemetry_sink` does NOT flush a staged turn event, the
  opposite of what it correctly does for `_pending_reboot_payload`. The reboot
  payload is final when buffered; a staged turn event is mid-flight. Flushing
  on attach would silently restore the defect.
- M3 — deferral is opt-in. The pipeline wraps the runtime rather than the
  reverse, so the runtime cannot detect whether a pipeline will run. A runtime
  used directly (eval and demo paths) emits inline, byte-identically and at
  the same moment as before.

The `finally` at the serve boundary is load-bearing (I5): a pipeline that
raises after `chat` returns must still flush, or an error path silently
swallows a telemetry record — worse than the staleness being fixed.

TWO CORRECTIONS TO MY OWN SPEC, reported rather than quietly absorbed:

1. I2 bullet 3 and I3 assert on an emitted `trace_hash`. There is no such
   field — `chat/telemetry.py` never serializes `TurnEvent.trace_hash`, so the
   sink never carried a trace_hash, stale or otherwise. R7 repairs the SURFACE
   only. Pinned by `test_trace_hash_is_not_in_the_wire_format_at_all` so the
   claim cannot be re-asserted; the replay-not-recomputation ruling is kept on
   the object that does carry the hash.
2. The surface divergence is unreachable under the DEFAULT config:
   `finalize_turn_surface` is a no-op on all 36 turns probed, because the
   runtime's own surface already wins the resolver. It fires under
   `realizer_grounded_authority` — 24 divergences over 84 turns. A test on the
   default config would have passed while proving nothing, exactly as the spec
   warned, so the fixture pins that flag and asserts the pre-fix divergence
   exists before asserting it is gone.

[Verification]: in-worktree on canonical CPython 3.12.13 with `uv sync
--locked`: smoke 591 (569 + 22), deductive 291 (unchanged). All seven existing
sink test files pass UNCHANGED (80 tests). warmed_session_consistency
telemetry_consistency_rate = 1.0. Mutation-checked all three mechanisms:
staging the event instead of the index -> 3 I2 tests red; flushing on attach ->
the M2 test red; dropping the `finally` -> the I5 test red. Registered in
`smoke` and `cognition`.
2026-07-26 10:56:03 -07:00
Claude
71bf04fb44
feat(provenance,teaching): close the lateral gaps the assessment actually found
Squashes the arc's work into one commit; the workflow-file edit it originally
carried is excluded (see the end of this message).

## Lane 1 — Workbench recorded a proved answer as ungrounded

With deduction_serving_enabled ratified ON (ADR-0256), workbench/api.py's live
chat route builds a bare ChatRuntime(), so the deduction composer decides
Workbench turns and stamps grounding_source="deduction" — but
_coerce_grounding_source carried a hand-copied whitelist of the six pre-arc
labels and silently rewrote anything else to "none". The runtime comment
reasoned this was inert because "REPL turns do not flow through Workbench's
CognitivePipelineRecord path". True, and irrelevant: the traffic flows the
other way. Stale since 2026-07-24.

Scope is one field. workbench/api.py:818 prefers TurnEvent.epistemic_state,
which read epistemic_state_needed — honest. So the UNregistered path degraded
honestly while the hand-copied whitelist asserted a falsehood; a second copy of
a closed enum was worse than no copy. Hence registration AND derivation:
GROUNDING_SOURCES exposes the Literal's members, and the coercion reads it.
workbench-ui badges/tokens/snapshot follow; enumCoverage.test.ts forces atomicity.

## Lane 2 — the ratification ceremony

The discovery loop was instrumented but not closed. teaching/ratification.py
turns a reviewed decision into a chain record, a corpus commit, and a receipt.

Its design turns on one observation: _ratified_rows DROPS unadmissible rows
silently — correct when serving, a trap when ratifying, because the file grows,
the commit lands, and the band count does not move. So the ceremony refuses to
call an append a ratification until it has re-read the curriculum through the
real loader and seen the chain arrive; a non-admitted append is rolled back.
Validation is a pre-flight courtesy, admission is the proof.

Arena queue entry and ledger reseal are deliberately NOT performed (bridge rule
1); the receipt names them. Front door: `core proposal-queue ratify`, a sibling
of `review` rather than a flag on it.

## Lane 3 — structural closures

- ADR-0263 gains rule 5: absence policy is DECLARED in CAPABILITY_LEDGERS, not
  passed at the call site. An AST-matched test fails if a serving path passes
  missing_ok again.
- Deductive suite added WHOLE to the pre-push gate: 285 tests in 29s against
  smoke's 216 in 62s, so no coverage trade was needed.
- Smoke/CI parity assertion made bidirectional. It was one-directional, and had
  drifted.
- test_prior_surface_deduction_binding.py pins correction binding on the
  deduction path. The review's diagnosis did NOT reproduce — hash_surface moves
  in lockstep — so it pins what is there. Mutation-checked.
- Domain-keyed ADR index over 312 flat-numbered files, explicitly partial.
- Arc-close brief template, plus this arc's own brief filled in against it.

## Lanes 4 and 5 — two premises falsified by measurement, one of them mine

Math 4.2: baseline reproduced (correct=5 wrong=0 refused=495); all four named
cases traced to one seam with each gap isolated by one-variable probes. Then the
number that changes the recommendation: the gap blocking case 0000 affects 1
case in 500, the 'than' gap blocking 0001 affects 2. ADR-0251's prohibition on
per-case growth now rests on a count. No reader change made.

CGA: versor_condition is 0.22% of a turn, not the "~10x proof latency" I claimed
— that multiplied an isolated microbenchmark by a call count and compared it to
a single verdict's latency. The real cost is geometric_product at 33,986
calls/turn (~73%) via cga_inner in search paths. The obvious closed form is NOT
bit-exact (954/4000 in f32); backend.vault_recall's serial fold IS (3000/3000,
worst-rel 0) and is the correct target. cargo test could not run —
static.crates.io is denied by the sandbox network policy — so the Rust parity
question stays open and the typestate lane is carried forward, not shipped
uncompiled.

## Not landed: three lines owed to .github/workflows/smoke.yml

The CI smoke gate is narrower than the local one —
test_pack_draft_serve_boundary.py (ADR-0253 INV-33) has been local-only, unseen
because the parity pin checked one direction. The edit was authored and rejected
at push for lacking the `workflow` OAuth scope, so it is recorded as a named,
dated PENDING_IN_CI exception rather than dropped: the assertion still fires on
any new divergence, and a second guard fires once the three land.

[Verification]: pre-push gates all green — smoke 236 passed, warmed_session 10
passed, deductive 285 passed. Ratification 14, ADR index 5, CLI suites 10.
Grounding/epistemic sweep 741 passed 1 skipped. workbench-ui 598 passed across
73 files, tsc -b clean. capability index 11 passed, digest unchanged. Math
holdout correct=5 wrong=0 refused=495. Committed chain corpora byte-unchanged
after the tests that write to them.
Environment caveat: the repo pins requires-python ==3.12.13, which uv cannot
fetch for linux-x86_64, so `uv sync --locked` fails. All Python runs used a
scratch venv on 3.12.11 with declared deps — not the locked universe, not the
full ~12k suite. The pin was left untouched. Re-run on a 3.12.13 host before
treating this as merge evidence.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01FduW6Krm3PPQv3P5iwBYtx
2026-07-25 04:51:15 +00:00
Shay
1293f77c14 docs(governance): weekly-audit rulings T1/T7/T8/T9 — INV-32/33/34 registration, ADR-0243 fold, residual escalation, path sweep, prune ledger 2026-07-22 19:18:59 -07:00
Shay
44f7258b16 fix(algebra): P11a physics hot paths via algebra.backend (Rust-ready)
Some checks failed
smoke / smoke (-m "not quarantine") (pull_request) Successful in 5m57s
lane-shas / verify pinned lane SHAs (pull_request) Failing after 1h43m22s
Stop wave/Third-Door physics from bypassing native dispatch:

- Route geometric_product / versor_apply / versor_condition / cga_inner
  through algebra.backend in wave_manifold, goldtether, trajectory,
  dynamic_manifold, surprise, holographic_vault, atlas_packing,
  biography, self_authorship.
- Backend: dtype-aware Rust use — f32 workloads use core_rs; f64 wave
  residual pins keep Python SOT until f64 GP parity exists. Coerce
  arrays for PyO3 bindings; fail soft to Python.
- AST hygiene pin: tests/test_physics_backend_dispatch_hygiene.py
- Docs: RUST.md, runtime_contracts, fidelity (ADR-0235 / UMA hygiene).

Verified: wave + cohesion suites green default and CORE_BACKEND=rust
(with core_rs built). MLX still exploratory off-serve.
2026-07-14 21:08:02 -07:00
Shay
db6430ed4e feat(adr-0242): macro-phase V2–V5 + sensorium feed (Drive gap close)
Parallel implementation of remaining Drive ADR-0242 vectors on PR #38:

D3 V2 — multi_scale_energy: E_n(t)=E0·exp(-age/(F_n·τ0)), dyadic baseline,
        comparative helpers; not production FieldEnergyOperator default.
D5 V4 — fibonacci_word_schedule: W0=B,W1=A,W_{n+1}=W_n W_{n-1}; telemetry only.
D6 V5 — algebra/topological_reasoning quarantine + production AST pin.
D7    — sensorium_wave_feed: packet→ψ, superpose, ρ via WaveManifold only.

Serve quarantine extended for all new modules. Fidelity + ADR-0242 +
runtime_contracts honesty pass. Suite: 118 related tests green.

Single macro-phase commit per plan policy (no micro-PRs).
2026-07-14 21:08:02 -07:00
Shay
9d543f6a9c docs(governance): P12 cohesion close — contracts, checklist, ready-for-accept
ADR-0241 cohesion package P12 (governance):
- runtime_contracts: off-serve quarantine, holographic SPECULATIVE/COHERENT,
  hypothesis vs evidence reconstruct, crystallization, entity suite pins.
- docs/audit/adr_0241_cohesion_acceptance_checklist.md maps C0–C8 → tests.
- ADRs remain Proposed + ready for Joshua acceptance (no self-Accept).
- Fidelity §12 honesty: P0–P10 green; human Accepted is the gate.
- tests/test_adr_0241_governance_p12.py pins inventory + status honesty.

CLAIMS.md Tier-2 lanes unchanged (I-01…I-05 are suite pins, not lane SHAs).
2026-07-14 21:08:02 -07:00
Shay
c1e723f185 feat: integrate 3-core-language depth into PropositionGraph spine for bidirectional unification
- Add LexicalResolution dataclass + resolve_entry() in chat/pack_resolver.py
  that returns language, root, morphology_id, gloss, semantic_domains from
  he/grc/en packs (lru-cached, first-match, full depth support).

- Extend GraphNode (generate/graph_planner.py) with optional language/root/
  morphology_id fields (defaults preserve all call sites). Update as_dict()
  to include them conditionally. ground_graph() now propagates depth.

- Generalize enrichment in core/cognition/pipeline.py:
  - Per-subject resolution map using depth packs.
  - Enrich all matching nodes before ground (subject→node map).
  - Pass depth alongside recalled_words to ground_graph().

- Consume depth on articulation side:
  - realize_semantic() and render_semantic() now accept/use language+root
    for etymological/Logos framing on Hebrew/Greek nodes (e.g. "אמת (Hebrew
    root: א-מ-ן) is defined as..."). English unchanged.

- Enrich oov_geometric_context with node_depths for future geometric
  anti-unification using roots.

- Extend recognition/connector.py to forward depth from EpistemicNode
  paths into GraphNode.

- Add full Hebrew turn test under realizer_grounded_authority flag.
- Update related tests (semantic realizer, OOV context, surface resolution).
- Cleaned legacy type() hack immediately on discovery (hard-stop rule).

All targeted tests green (52+ in slices), broad relevant suite 581 passed.
Invariants preserved: versor only at owned boundaries, exact recall,
immutable updates, no new legacy parsers. 3 pillars upheld.

Work continues tomorrow from this checkpoint.
2026-07-06 09:01:43 -07:00
Shay
f6c1f01a13 Lane 4: Registry Consolidation (language_packs to packs) 2026-07-04 15:11:28 -07:00
Shay
54e6bfc0d0
docs: reorganize docs landscape
Implements the 4-phase documentation reorganization master plan.

- Consolidation: Merged brief/, handoff/, planning/, and decisions/ into briefs/, handoffs/, plans/, and adr/ respectively (101 ADRs relocated)
- Root Cleanup: Relocated HANDOFF-gpt55-*.md and key top-level docs (runtime_contracts.md, etc.) to canonical folders. Added superseded alerts.
- Indices & Navigation: Created docs/README.md navigation document, docs/sessions/README.md index, docs/adr/README.md index
- Note: Also includes prior commit adding ADR-0200+ corpus hygiene governance (ADR-0225, dependency map, backfilled cross-references)
2026-06-30 16:59:36 -07:00
Shay
d5543e425a
docs(kernel): authorize unary state-change delta slice (#854) 2026-06-20 22:19:35 -07:00
Shay
ad0bae2948
docs(kernel): authorize quantity-entity foundational implementation slice (#845) 2026-06-20 17:15:02 -07:00
Shay
5cd377b1b8
docs(substrate): add foundational family specification appendices (#839)
* docs(substrate): add foundational family specification appendices

* docs(substrate): clarify family spec capability wording

* chore: retrigger required checks
2026-06-20 13:49:29 -07:00