File size: 5,044 Bytes
ff63ba1
9f9fbec
ff63ba1
 
 
1bb3265
42650ec
b3d11b8
4a79e5b
9f9fbec
 
463bcbe
 
 
 
6d68f94
9f9fbec
 
42650ec
b3d11b8
42650ec
 
 
ff63ba1
b3d11b8
ff63ba1
463bcbe
42650ec
b3d11b8
ff63ba1
463bcbe
ff63ba1
b3d11b8
42650ec
 
 
b3d11b8
ff63ba1
393bb89
ff63ba1
9f9fbec
ff63ba1
393bb89
42650ec
463bcbe
42650ec
463bcbe
42650ec
 
 
 
 
b3d11b8
42650ec
b3d11b8
42650ec
b3d11b8
ff63ba1
393bb89
ff63ba1
 
 
393bb89
ff63ba1
393bb89
ff63ba1
b3d11b8
ff63ba1
463bcbe
42650ec
6d68f94
ff63ba1
6d68f94
42650ec
6d68f94
42650ec
6d68f94
42650ec
6d68f94
42650ec
6d68f94
ff63ba1
 
 
 
 
b3d11b8
ff63ba1
393bb89
ff63ba1
 
 
 
 
393bb89
42650ec
ff63ba1
 
 
 
 
 
 
42650ec
ff63ba1
 
 
b3d11b8
ff63ba1
6d68f94
ff63ba1
 
 
 
 
 
b3d11b8
ff63ba1
b3d11b8
ff63ba1
 
 
 
 
b3d11b8
ff63ba1
b3d11b8
ff63ba1
 
 
 
 
 
 
 
393bb89
42650ec
b3d11b8
ff63ba1
 
 
b3d11b8
ff63ba1
 
 
 
463bcbe
ff63ba1
463bcbe
42650ec
463bcbe
42650ec
463bcbe
ff63ba1
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
# FeatureLens v0.10 validation

v0.10 does **not** change paraphrase robustness, layer trajectory, feature-set interventions, dose-response inference, cue × context, or the in-place focus implementation. Do not spend ZeroGPU quota rerunning those paths.

The only new live behavior is the **association-to-causality synthesis** computed after the existing discovery + candidate-triage workflow.

## 1. Local release gate — no HF GPU

From the repository root:

```bash
python3 -m pytest -q && \
python3 -m compileall -q app.py featurelens experiments scripts && \
python3 -m ruff check app.py featurelens experiments tests scripts && \
python3 scripts/ui_smoke.py && \
python3 scripts/release_check.py
```

Expected high-level result:

- all tests pass;
- Ruff reports `All checks passed!`;
- `FeatureLens UI launch smoke: PASS`;
- release check ends with `release: v0.10.0`.

Stop if any local gate fails.

---

# HF acceptance — two GPU calls total

Use the existing Workbench context:

- **Workbench → Prompt:** `The derivative of x squared is`
- **Workbench → Residual layer:** `14`
- **Workbench → Prompt token index:** `-1`

You do **not** need to click **Inspect sparse features** first.

## 2. GPU call 1 — causal-ready mathematics discovery

Exact path:

**Feature evidence → A. Concept-guided candidate discovery**

Set exactly:

- **Target concept:** `mathematics`
- **Residual layer:** `14`
- **Prompts per concept:** `4`
- **Candidate features:** `12`
- **Candidate ranking:** `Causal-ready at current token`

Click:

**Discover concept-associated candidates**

Expected regression behavior from v0.9:

- the summary should say `12/12` displayed candidates are active at the selected Workbench token;
- **Candidate features to screen** should auto-populate with the first five returned feature IDs;
- no additional UI/focus regression testing is required because that code was not changed in v0.10.

For the current canonical prompt, the v0.9 result began with candidates `16369`, `5712`, `26112`, `25992`, `21670`. Exact floating-point values can vary slightly, but a major ordering change should be reported.

## 3. GPU call 2 — triage + association-to-causality synthesis

Exact path:

**Feature evidence → B. Batched causal candidate triage**

Leave the five auto-populated candidates selected.

Set:

- **Screen target continuation:** `2x`

Click:

**Screen candidate ablations**

The normal **Candidate ablation screen** should appear first.

Immediately below it, without another GPU action, v0.10 should populate:

### `Association vs causal influence`

with:

1. a descriptive summary;
2. **Discovery–causality alignment** table;
3. **Association evidence vs target effect** scatter plot.

### Required alignment-table columns

- `Feature id`
- `Discovery rank`
- `Target-effect rank`
- `Distribution-shift rank`
- `Candidate score`
- `Selectivity`
- `Current token activation`
- `|Δ mean log p/token|`
- `Next-token JS`
- `Discovery→target rank shift`

### Required summary behavior

The summary must identify separately:

- top discovery candidate;
- strongest target-effect candidate;
- strongest next-token distribution-shift candidate;
- Spearman `ρ(candidate score, |target effect|)`;
- Spearman `ρ(candidate score, next-token JS)`;
- an explicit warning that the live correlations are descriptive because the screened set is small and triage has no random-control ensemble.

For the exact v0.9 values you reported, the expected qualitative pattern is:

- discovery rank #1: feature `16369`;
- strongest target effect: feature `25992`;
- strongest next-token JS shift: feature `16369`;
- discovery score versus target-effect magnitude: strongly negative descriptive rank correlation;
- discovery score versus JS: positive but weaker descriptive rank correlation.

Do not require exact decimals as a pass condition.

### Rank-shift sanity check

For the v0.9 ordering:

- feature `25992`: discovery rank `4`, target-effect rank `1``Discovery→target rank shift = +3`;
- feature `16369`: discovery rank `1`, target-effect rank `5` → rank shift `-4`.

This is the most important v0.10 regression check because it demonstrates that concept-evidence rank and target-causal rank are not interchangeable.

---

## 4. What to send back

Only send:

1. the v0.10 **Candidate ablation screen** if it changed materially from v0.9;
2. the new **Discovery–causality alignment** table;
3. the new association/causality summary with the two Spearman values;
4. optionally a screenshot of **Association evidence vs target effect** if the plot looks wrong.

Do **not** rerun identity paraphrase, layer trajectory, 1/3/5 sweep, dose response, cue × context, or focus behavior for v0.10. Those implementations were not changed.

---

# Final hardening later

The broad adversarial/release suite remains deferred until the live feature set is frozen. After v0.10 acceptance, the next high-value step should be the real offline held-out benchmark rather than another round of unrelated live widgets.