From 61d3819daeb0946006a73783e3852b047ccf397f Mon Sep 17 00:00:00 2001 From: wassname <1103714+wassname@users.noreply.github.com> Date: Tue, 9 Jun 2026 13:39:15 +0000 Subject: [PATCH] docs: README/figs name the current arm routeV, not the dropped route2 The cleanup removed the v1 route and route2 arms (Config is now none|erase|routeV) but left README calling the live arm route2 with its old binary-tau gate description. Rename to routeV, describe the banded cosine gate (per-rollout/per-token, per-token best), and fix the deploy line (held-out test n=119 knob-off, not n=64). figs.py keeps the route2/routing2 display map for historical run artifacts. Co-Authored-By: Claudypoo <288921227+claudypoo@users.noreply.github.com> --- README.md | 17 ++++++++++++----- src/vgrout/figs.py | 2 +- 2 files changed, 13 insertions(+), 6 deletions(-) diff --git a/README.md b/README.md index 4021220..018b52c 100644 --- a/README.md +++ b/README.md @@ -75,13 +75,20 @@ Three active arms, identical model and teacher pool, differing only in the gradi - **vanilla** -- no intervention; the emergence reference. - **erase** -- subtract the v_hack component from the live `delta_S` gradient (one-sided). -- **route2** -- current routing arm. Per-rollout gate `cos(g_rollout, v_grad) > tau` (tau calibrated each step from the hack-vs-clean cosine gap) decides whether a rollout's whole gradient routes into a scale-matched, distinct-basis `delta_S_hack`. An exploration floor (`rollout_ablate_frac`) generates a fraction of rollouts knob-off so the deployed knob always sees solve signal even if the full policy saturates on hacking. +- **routeV** -- current routing arm. A banded cosine gate `cos(g, v_grad) ∈ band` (band + calibrated from the hack-vs-clean cosine gap, either from the pairs or a live rolling + quantile) decides how much of a gradient routes into a scale-matched, distinct-basis + `delta_S_hack`. The gate runs per-rollout or per-token (`routeV_gate`); per-token is the + current best. An exploration floor (`rollout_ablate_frac`) generates a fraction of + rollouts knob-off so the deployed knob always sees solve signal even if the full policy + saturates on hacking. -Deploy hack/solve is measured the same way for every arm now: knob-off forward -(`ablate_quarantine` for route2, the trained model itself for vanilla/erase), -n=64 prompts*group, sampled at T=0.7. So the per-arm deploy numbers are apples-to-apples. +Deploy hack/solve is measured the same way for every arm: knob-off forward +(`ablate_quarantine` for routeV, the trained model itself for vanilla/erase) on the +held-out test set (n=119), sampled at T=0.7. So the per-arm deploy numbers are +apples-to-apples. -The frozen-vs-refresh distinction is orthogonal: erase and route2 can re-extract +The frozen-vs-refresh distinction is orthogonal: erase and routeV can re-extract their pair-derived direction every N steps on the current adapter. ## Quick start diff --git a/src/vgrout/figs.py b/src/vgrout/figs.py index 3cb5e97..048efe4 100644 --- a/src/vgrout/figs.py +++ b/src/vgrout/figs.py @@ -17,7 +17,7 @@ from pathlib import Path FIGS_DIR = Path("docs/figs") # Reader-facing arm names. Code/log tags carry our internal vocabulary -# (route2 = the current routing arm; "knob" = the delta_S adapter); plots must +# (routeV = the current routing arm; "knob" = the delta_S adapter); plots must # not. Map every internal tag to the word a paper reader sees. Anything missing # falls through to its raw tag, so a new arm shows up loud rather than silently # mislabelled.