avoigt1121 Claude Opus 5 commited on
Commit
125b8a5
·
1 Parent(s): 819da30

docs(memory): the regression I shipped in 23d37b6, the three-way measurement, and why colors_in_legend was never cosmetic

Browse files
Files changed (2) hide show
  1. TODO.md +11 -0
  2. memory.md +43 -0
TODO.md CHANGED
@@ -130,6 +130,17 @@ the design doc's M0–M4 is the intent behind it — see that doc's §0).
130
  Numbers reflect the profiled-subset denominator fix. The whole path (orchestrator → this
131
  Space → machine-auth gate → curated artifact) is now proven in production.
132
 
 
 
 
 
 
 
 
 
 
 
 
133
  ## Open — the dev lane cannot be click-through verified while private
134
 
135
  - [ ] **Decide: make `pdac-genomics-agent-dev` public, or accept that UI verification happens on prod
 
130
  Numbers reflect the profiled-subset denominator fix. The whole path (orchestrator → this
131
  Space → machine-auth gate → curated artifact) is now proven in production.
132
 
133
+ ## Open — a chart regression is LIVE on prod; the fix is committed but not deployed
134
+
135
+ - [ ] **DEPLOY `819da30`.** Prod (`23d37b6`) has a regression shipped 2026-08-05: a query that
136
+ NARROWS the gene set leaves the previous answer's bars under the new answer's caution for one
137
+ render. Self-corrects on a second click and never shows a wrong *number*, but it does show one
138
+ cohort's bars beneath another cohort's warning. `819da30` fixes it (handler now blanks the
139
+ chart before yielding the answer) and is verified in BOTH directions on a single click — the
140
+ check whose absence caused this. 234 tests pass. Not deployed: needs Annie's go-ahead.
141
+ **Do not "clean up" `colors_in_legend` back in** — it looks cosmetic and is not; see `memory.md`
142
+ 2026-08-05 (latest) for the three-way measurement.
143
+
144
  ## Open — the dev lane cannot be click-through verified while private
145
 
146
  - [ ] **Decide: make `pdac-genomics-agent-dev` public, or accept that UI verification happens on prod
memory.md CHANGED
@@ -4,6 +4,49 @@ Current status + history. Architecture → `CLAUDE.md`. Backlog → `TODO.md`.
4
 
5
  ---
6
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
7
  ## 2026-08-05 — first signed-in click-through since 2026-07-27; two display bugs found (`6c7b8cc`, NOT deployed)
8
 
9
  Everything shipped that day had been verified only by reading the deployed tree over `resolve/main`
 
4
 
5
  ---
6
 
7
+ ## 2026-08-05 (latest) — I shipped a regression to prod and caught it in the post-deploy click-through (`819da30`, NOT deployed)
8
+
9
+ `23d37b6` went to prod and fixed the three real bugs. It also introduced a fourth, which the
10
+ post-deploy click-through found: **on a query that NARROWED the gene set, the chart body lagged one
11
+ render behind** — caution and legend updated, the bars kept the previous answer's data. One cohort's
12
+ numbers under another cohort's warning, which is the same class of wrong answer the whole change set
13
+ existed to remove.
14
+
15
+ **`colors_in_legend` was the cause, and I had added it as the *cosmetic* half of the fix.** Passing a
16
+ value that CHANGES between renders is what forced the colour scale to rebuild — which is what fixed
17
+ the narrow→wide direction. It was never cosmetic; it was load-bearing for a reason I had not
18
+ understood. Measured, each against `40ab3dd` as control:
19
+
20
+ | build | narrow → wide | wide → narrow |
21
+ |---|---|---|
22
+ | `40ab3dd` (before) | marks dropped | correct |
23
+ | `23d37b6` (`colors_in_legend`) | correct | **stale one render** |
24
+ | `color_map` alone | marks dropped | correct |
25
+
26
+ So the two configurations I had were **the same bug pointing in opposite directions**, and the
27
+ direction I happened to test first was the one that looked fixed.
28
+
29
+ **Also tried and rejected:** holding the modality categories open with NaN placeholder rows so the
30
+ domain never changes shape. NaN poisons the y extent — no bars and no axis render at all. (Zeros
31
+ would have worked visually and were never an option: NRG1 is not 0% mutated, it is unassayed.)
32
+
33
+ **The fix stops relying on the plot diffing correctly.** `_ui_variant_status` is now a generator: it
34
+ blanks the chart, then yields the answer. The worst intermediate state a reader can catch is an
35
+ EMPTY chart, which claims nothing, rather than a stale one, which claims something false. Both
36
+ directions verified repainting on a single click. `test_ui_handler_gating` reads the final frame via
37
+ `_final()`; the ADR-0004 assertions are untouched and a denied path still yields exactly one frame.
38
+
39
+ **Three process lessons, all of them mine:**
40
+ 1. **I explained away the symptom the first time.** I saw the stale chart locally, guessed "my click
41
+ missed the button", and moved on. It had not missed. A surprising observation deserves one cheap
42
+ check before a comfortable explanation.
43
+ 2. **A fix verified in one direction is not verified.** Both bugs here are the same scale-rebuild
44
+ fault; testing narrow→wide only was the whole gap.
45
+ 3. **Green tests proved nothing about either.** Every version passed its own tests, because the tests
46
+ asserted the payload and the hypothesis, not the rendered result across a SEQUENCE of renders.
47
+
48
+ ---
49
+
50
  ## 2026-08-05 — first signed-in click-through since 2026-07-27; two display bugs found (`6c7b8cc`, NOT deployed)
51
 
52
  Everything shipped that day had been verified only by reading the deployed tree over `resolve/main`