Shay
|
1feec74b1c
|
feat(anchor_lens): ADR-0073d — L1.4 telemetry, CLI flag, tour demo
L1.4 closes the anchor-lens inside-out arc (L1.1→L1.4 mirroring
R1→R5). Substantive axis is now operator-observable,
operator-driven, and demo-falsifiable — exactly what R5 did for
the register subsystem.
Telemetry extension
- TurnEvent + ChatResponse gain anchor_lens_id +
anchor_lens_mode_label (both default "" → pre-L1.4
byte-identical).
- serialize_turn_event surfaces both fields in every JSONL line.
- Mode-label extracted via _ANCHOR_LENS_ANNOTATION_RE from the
PRE-decoration surface (so register decoration cannot interfere
with anchor-lens telemetry). Composer remains the sole source
of truth for engagement; the runtime helper is read-only.
Operator surface
- core chat --anchor-lens <id> CLI flag threads into
RuntimeConfig.anchor_lens_id.
- Invalid id → AnchorLensError caught at cmd_chat and surfaced
as _die("invalid --anchor-lens pack id: ...", code=2) before
the REPL launches.
- Composes with --register (both flags wire through
_runtime_config_from_args).
Narrative demo
- evals/anchor_lens_tour/run_tour.py walks 2 prompts × 3
ratified lenses ({default_unanchored_v1, grc_logos_v1,
he_logos_v1}). Asserts four claims:
* lens_ids_recorded_per_turn
* trace_hashes_distinct_across_lenses (OPPOSITE of
register-tour's identical-hash claim)
* surface_propositions_distinct_across_lenses
* no_substrate_glyph_leak (block-scoped Greek/Hebrew/
Syriac/Arabic; stylistic punct allowed)
- Exit code 0 iff all four hold.
- Bundled into `core demo` choices + EPILOG.
Tests (30 new)
- tests/test_anchor_lens_telemetry.py (16) — TurnEvent shape,
serializer keys, runtime emits per lens / per engagement
state, ChatResponse mirrors event, mode-label extractor unit.
- tests/test_anchor_lens_cli.py (9) — _runtime_config_from_args
threading, invalid id fail-fast, parser flag wiring, parser
composes with --register.
- tests/test_anchor_lens_tour_demo.py (9) — four seam claims
pinned individually + all_claims_supported + per-cell
anchor_lens_id + unanchored cells empty mode + engaged cells
carry mode label.
Lane evidence
- 30 new L1.4 tests pass.
- core demo anchor-lens-tour --json → all_claims_supported: True.
- core demo register-tour --json → all_claims_supported: True.
Both tours pass simultaneously — orthogonality CI-pinned.
- python -m core.cli eval cognition → public 100/100/91.7/100
byte-identical (lens=None / default_unanchored_v1).
- Full lane: 2736 passed / 4 skipped / 1 pre-existing failure
(+30 over L1.3's 2706; the one failure remains
test_all_preamble_explains_combined_run, unrelated).
Live demo (canonical proof)
P1: 'What is knowledge?'
default_unanchored_v1 trace=17c9aabe… mode=(none)
grc_logos_v1 trace=0198ad4c… mode=systematic
he_logos_v1 trace=17c9aabe… mode=(none)
P2: 'What is truth?'
default_unanchored_v1 trace=2557f3e8… mode=(none)
grc_logos_v1 trace=2557f3e8… mode=(none)
he_logos_v1 trace=ec8d84aa… mode=covenant-verity
Engagement is substrate-scoped: grc never touches truth, he
never touches knowledge. Trace hashes diverge exactly where the
lens engages.
Trust boundaries
- --anchor-lens flag does not bypass ratification; loader still
enforces companion mastery report self-seal + ratify-time
substrate-atom existence check (ADR-0073b/c).
- Mode-label extraction is read-only regex parse; can't forge
annotations the composer didn't emit.
- Telemetry stays redact-safe — both fields are identifiers /
mode labels, not content. include_content=False emits them
unconditionally.
- No new mutation surface; pack files unchanged.
Closes the anchor-lens inside-out arc
L1.1 content prerequisite ✓ (ADR-0073a)
L1.2 class + loader + unanchored sentinel ✓ (ADR-0073b)
L1.3 first lenses + composer wiring ✓ (ADR-0073c)
L1.4 telemetry + CLI + tour demo ✓ (this commit)
Mirrors the R1→R5 register cadence exactly. Both axes are now
operator-observable, CI-falsifiable, audit-traceable, and
composable via the orthogonality claim pinned in both tours.
|
2026-05-19 20:21:41 -07:00 |
|