Repository navigation
Commit bb40ab0
Supersedes #230 and #235. This branch is #235 (which already carried
#230 merged onto `main`) fast-forwarded onto current `main` (`1f8701d`,
incl. #237), plus the fixes below. No merge conflicts remain: the
seven-file conflict set documented on #235 was resolved there, and this
branch merges cleanly.
## Disposition of every app finding on #230 / #235
| Finding | Status |
|---|---|
| Codex P1 — unplaced mass renormalised away by UniFrac (#230) | Fixed
on #230/#235 (`totals`/`total_a`/`total_b` library-size denominators);
carried here, verified present |
| Codex P2 — fully unmapped ASVs not counted as unplaced (#230) | Fixed
on #230/#235 (`unplaced_reads` = library size − tree-carried mass);
carried here |
| CodeRabbit — unplaced-reads copy reversed the calculation (#230) |
Fixed on #235 (panel + `api/types.ts` now say: excluded from tip
abundances, included in the library-size denominator); carried here |
| CodeRabbit — emptied clade kept stale activity (#230) | Fixed on #235
(`_reaggregate_after_move` recomputes from `direct_count`); carried here
|
| Codex P2 — vacated clade kept stale `residual_count` (#235) | Already
fixed on #235 by `58848d9`; verified present here, no duplicate change |
| CodeRabbit — emptied internal clade still counted as a taxon tip
(#235) | **Fixed in this PR**: `count_leaf_taxa!` and the leaf branch of
`_reaggregate_after_move` now share one tip-eligibility rule (direct
reads, or terminal `tip`/`ASV` rank). New regression assertion:
two-domain move scenario where root purity is 0.5 with the fix vs 0.6 if
the wrapper counts as a fifth tip |
| CodeRabbit `occursin` route assertions (#235) | Addressed on #235
(whole method+path pairs); carried here |
The unresolved review threads on #230 and #235 are being resolved with
pointers to this PR; Codex is at its usage limit (per its own comments
on #230), so no re-review was available from it.
## Hypatia / DEED (K9-format estate governance)
- **DEED lane: 🟢 conformant** on #235's head and unchanged here (no
`.deed` file touched). Local contract check:
`scripts/check-governance-contract.sh` — all 20 checks pass.
- **Hypatia grid: 🟣 critical (45C/61H/35M)** — unchanged in kind. The
criticals are `cicd_rules/banned_language_file` against the upstream
TypeScript frontend: this fork's deed states the frontend is
upstream-owned, so rewriting it is out of scope and a
`.hypatia-baseline.json` acknowledgement is an owner decision —
deliberately **not** committed here, because committing one (with
`scripts/apply-baseline.sh`) arms the blocking gate in
`hypatia-scan-reusable.yml`, and that gate cannot be exercised locally
(no Elixir/Julia toolchain in this environment). Arming an untested
blocking gate would risk turning every PR red.
- Real findings fixed here anyway (panic-attack `InputBoundary`,
advisory): SSE handlers in `frontend/src/api/events.ts` no longer throw
on malformed frames; `parseJplace` in `frontend/src/tree/model.ts`
reports invalid JSON as a jplace error. Also fixed the pons
`string-concat-in-loop` in the Newick quoted-label reader.
- Left as documented false positives / follow-ups:
`JSON.parse(JSON.stringify(...))` deep-clones in
`charts.ts`/`alphaMetrics.tsx` (cannot throw on malformed input — the
input is a live object), the remaining pons string-concat heuristics in
`TreeShapes.tsx` path building, and panic-attack's per-file `JSON3.read`
try-block counts on Julia routes (requests are handled behind the
routes' error boundary; changing six route files blind, without a Julia
runtime, is riskier than the finding).
## Validation
- Frontend: `tsc --noEmit -p .` clean.
- `git diff --check` clean; governance contract script passes (20/20).
- Julia is not installable in this environment (as on #230/#235), so the
Julia changes are static-checked and rely on this PR's Julia CI job as
the real check — watching it before merge.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
---------
Signed-off-by: Jonathan D.A. Jewell <6759885+hyperpolymath@users.noreply.github.com>
Co-authored-by: Arena Agent <agent@arena.ai>
Co-authored-by: arena-agent <297053741+arena-agent@users.noreply.github.com>
Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com>
1 parent 1f8701d commit bb40ab0
10 files changed
Lines changed: 562 additions & 66 deletions
File tree
- frontend/src
- api
- components
- tree
- scripts
- src
- analysis
- server/routes
- test
- unit
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
13 | 13 | | |
14 | 14 | | |
15 | 15 | | |
| 16 | + | |
| 17 | + | |
| 18 | + | |
| 19 | + | |
| 20 | + | |
| 21 | + | |
| 22 | + | |
| 23 | + | |
| 24 | + | |
| 25 | + | |
| 26 | + | |
16 | 27 | | |
17 | | - | |
| 28 | + | |
| 29 | + | |
18 | 30 | | |
19 | 31 | | |
20 | 32 | | |
21 | | - | |
| 33 | + | |
| 34 | + | |
22 | 35 | | |
23 | 36 | | |
24 | 37 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
968 | 968 | | |
969 | 969 | | |
970 | 970 | | |
| 971 | + | |
| 972 | + | |
| 973 | + | |
| 974 | + | |
| 975 | + | |
| 976 | + | |
| 977 | + | |
| 978 | + | |
| 979 | + | |
| 980 | + | |
| 981 | + | |
971 | 982 | | |
972 | 983 | | |
973 | 984 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
33 | 33 | | |
34 | 34 | | |
35 | 35 | | |
| 36 | + | |
| 37 | + | |
| 38 | + | |
| 39 | + | |
| 40 | + | |
36 | 41 | | |
37 | 42 | | |
38 | 43 | | |
| |||
249 | 254 | | |
250 | 255 | | |
251 | 256 | | |
| 257 | + | |
| 258 | + | |
| 259 | + | |
252 | 260 | | |
253 | 261 | | |
254 | 262 | | |
| |||
708 | 716 | | |
709 | 717 | | |
710 | 718 | | |
| 719 | + | |
| 720 | + | |
| 721 | + | |
| 722 | + | |
| 723 | + | |
| 724 | + | |
| 725 | + | |
| 726 | + | |
| 727 | + | |
| 728 | + | |
711 | 729 | | |
712 | 730 | | |
713 | | - | |
714 | | - | |
| 731 | + | |
| 732 | + | |
| 733 | + | |
| 734 | + | |
| 735 | + | |
| 736 | + | |
| 737 | + | |
715 | 738 | | |
716 | 739 | | |
717 | 740 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
112 | 112 | | |
113 | 113 | | |
114 | 114 | | |
115 | | - | |
| 115 | + | |
116 | 116 | | |
117 | 117 | | |
118 | | - | |
| 118 | + | |
119 | 119 | | |
120 | | - | |
| 120 | + | |
121 | 121 | | |
122 | | - | |
| 122 | + | |
123 | 123 | | |
124 | 124 | | |
125 | 125 | | |
| |||
209 | 209 | | |
210 | 210 | | |
211 | 211 | | |
212 | | - | |
| 212 | + | |
| 213 | + | |
| 214 | + | |
| 215 | + | |
| 216 | + | |
| 217 | + | |
| 218 | + | |
| 219 | + | |
| 220 | + | |
| 221 | + | |
| 222 | + | |
| 223 | + | |
213 | 224 | | |
214 | 225 | | |
215 | 226 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
20 | 20 | | |
21 | 21 | | |
22 | 22 | | |
| 23 | + | |
| 24 | + | |
| 25 | + | |
| 26 | + | |
| 27 | + | |
| 28 | + | |
23 | 29 | | |
24 | | - | |
| 30 | + | |
| 31 | + | |
25 | 32 | | |
26 | 33 | | |
27 | 34 | | |
| |||
0 commit comments