Skip to content
Merged
6 changes: 3 additions & 3 deletions ROADMAP.md

Large diffs are not rendered by default.

14 changes: 14 additions & 0 deletions docs/benchmarks/quick/hotspots.toml
Original file line number Diff line number Diff line change
Expand Up @@ -10,3 +10,17 @@ phase = "features clip"
share = 40.7
date = "2026-10-07"
ruling = """Asked: "The clip hotspot: features clip is now 41 % of Lagan's run. Record it as expected for now." Ola: "4: yes\""""

# Measured by @perf: features clip 6.000 s of 8.829 s (head, medians of 3, AC),
# docs/benchmarks/2026-10-11/cleanup-speed/README.md; the profile behind it is
# docs/benchmarks/2026-10-11/cleanup-profile/README.md (its three largest
# sub-steps are 80 % of the step: the outline rule 41 %, mostly GEOS union_all
# and make_valid; the two clips 21 %; coverage_clean 18 %).
# The fix Ola named is the cached repaired extract per area of interest (his
# private ideas file, "Repair CORINE once per area of interest").
[[hotspot]]
case = "numedalslagen"
phase = "features clip"
share = 68.0
date = "2026-10-12"
ruling = """Asked: "For the hotspots file, my proposal is to rule it expected at the current 6 s and let the cached-extract idea be the fix when you pick it." Ola: "Rule it expected at 6 s, cached extract is the fix\""""
2 changes: 1 addition & 1 deletion docs/increments/26-land-cover.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
# Increment 26: land cover for the São Francisco basin — water bodies as constraints, class fractions per triangle

Status: **26a built** on branch `worktree-mapbiomas-26a` (red `cb5f254b`, `@tester`, 48 tests; green `8eec354b`, `@developer`, 163 net production lines by `python3 tools/count_loc.py de9b6c03 HEAD` against the estimate of 170; no mutation round, section 9; section 13 is the as-built record; `@perf`'s quick check `38f86930` ACCEPTED; code review rounds 1 and 2, APPROVED; next the push on Ola's yes). 26b onward not built. The design: **by `@architect`, 2026-10-03, at Ola's request; ruled by
Status: **26a merged (#232, 2026-10-12)** from branch `worktree-mapbiomas-26a` (red `cb5f254b`, `@tester`, 48 tests; green `8eec354b`, `@developer`, 163 net production lines by `python3 tools/count_loc.py de9b6c03 HEAD` against the estimate of 170; no mutation round, section 9; section 13 is the as-built record; `@perf`'s quick check `38f86930` ACCEPTED; code review rounds 1 and 2, APPROVED; master merged in as `5f28292c` for a docstring conflict with #231; 26b red in progress on `worktree-mapbiomas-26b`). 26b onward not built. The design: **by `@architect`, 2026-10-03, at Ola's request; ruled by
Ola, 2026-10-04** (all eleven questions; "Ruled by Ola, 2026-10-04", below,
and each question marked). Q8 was ruled against the recommendation:
triangles inside a lake carry the raster's own mix, nothing is forced to
Expand Down
12 changes: 10 additions & 2 deletions docs/increments/35-cleanup-speed.md
Original file line number Diff line number Diff line change
@@ -1,11 +1,11 @@
# Increment 35 — the land-cover clean-up step, made faster

Status: **built** on branch `worktree-cleanup-speed` (design `7da1d663`, review
Status: **merged (#229, 2026-10-11)** from branch `worktree-cleanup-speed` (design `7da1d663`, review
round 1 approved `7218dfb7`; red `c4130194` (`@tester`), green `e805d37f`
(`@developer`, 23 net production lines by `python3 tools/count_loc.py c7dba32e
HEAD`: `crs.py` +14, `feature_input.py` +9), mutation round `7621a99e` (M1-M4
all killed, one count-based test added for M3); section 11 is the as-built
record; `@perf`'s quick check `2cf224a6` ACCEPTED, section 11; code review round 1 APPROVED, Review section). Next: the push on Ola's yes. Master
record; `@perf`'s quick check `2cf224a6` ACCEPTED, section 11; code review round 1 APPROVED, Review section; Numedalslagen's 68 % hotspot ruled expected by Ola 2026-10-12, `docs/benchmarks/quick/hotspots.toml`). Master
`c7dba32e` is `@perf`'s profile commit
(`docs/benchmarks/2026-10-11/cleanup-profile/README.md`). Every `file:line`
below is pinned to `c7dba32e`. Every figure was measured on this worktree's
Expand Down Expand Up @@ -368,6 +368,10 @@ venv's numpy 2.5.4 differed from its 2.5.3). Hotspots: Lagan features clip
Numedalslagen features clip 68 %, unruled, GEOS overlay time (section 4).
Decided on defaults while Ola was away: the 68 % is recorded as expected here;
the `hotspots.toml` entry and the Lagan 40.7 % ruling wait for Ola's word.
Ruled by Ola 2026-10-12 ("Rule it expected at 6 s, cached extract is the fix"):
the entry is in `docs/benchmarks/quick/hotspots.toml` at 68.0 %; the fix is the
cached repaired extract per area of interest, when picked. Lagan's 43.6 % is
within 10 points of its 40.7 % ruling, so the tool is quiet; no new entry.
Lesson: a stored quick-check baseline goes stale when a merge changes outputs
without a refresh (32 merged without one).

Expand All @@ -376,3 +380,7 @@ without a refresh (32 merged without one).
Design review round 1, 2026-10-11, @reviewer (7da1d663, prose only, 0 counted lines): APPROVED. Every figure in sections 2, 4 and 7 matches /Users/skavhaug/projects/rasputin/.claude/worktrees/cleanup-speed/docs/increments/35-probes/README.md@7da1d663 and the profile README; every feature_input.py and crs.py citation quotes the pinned code; both mesh digests recorded; check_citations clean. The relate pattern `T**F**FF*` read in words: the line's interior meets the domain's interior and neither its boundary nor its exterior, and no end lies outside; a line touching the outline only at an interior vertex is excluded, which is necessary since GEOS nodes it there. One correction applied in this recording commit: /Users/skavhaug/projects/rasputin/.claude/worktrees/cleanup-speed/docs/increments/35-cleanup-speed.md@7da1d663:234 claimed `along-the-outline` kills M1; it does not (measured, GEOS 3.14.1), M1 is killed by `along-then-inside`, `domain-vertex-on-the-line` and `touching-a-hole`. Nit applied: the comprehension cited at `:450` is at `:448`. Ideas for @tester: add `end-on-a-hole` to test 3 (new rule True, GEOS returns the line unchanged, measured); M4 cannot be killed on a one-core runner, so the mutation round stays local. Lesson: a claimed mutant kill is checked by running the fixture table against the mutant.

Code review round 1, 2026-10-11, @reviewer (3e6f87eb..4de504af, 23 net counted lines by count_loc.py from both 3e6f87eb and c7dba32e, estimate about 20; not pushed, no CI yet): APPROVED. The green diff touches only the two production files and does exactly the four section-3 changes plus the three section-11 pins; the pattern is `relate_pattern(domain, line, "T**F**FF*")` with the domain first (/Users/skavhaug/projects/rasputin/.claude/worktrees/cleanup-speed/src_python/tin_engine/feature_input.py@4de504af:255); chunking cannot change bits (same Transformer per thread, `np.array_split` keeps order, PROJ maps point by point, arrays under 500k take the old single call: /Users/skavhaug/projects/rasputin/.claude/worktrees/cleanup-speed/src_python/tin_engine/crs.py@4de504af:57-72); one threading.local per closure, the pool opened and closed inside `apply`; every mutant M1-M4 names an existing test and fixture row (/Users/skavhaug/projects/rasputin/.claude/worktrees/cleanup-speed/tests/python/test_feature_input.py@4de504af:1274-1295, 1680-1717; /Users/skavhaug/projects/rasputin/.claude/worktrees/cleanup-speed/tests/python/test_crs.py@4de504af:219-237); no red-step scaffolding; the acceptance README's figures equal the raw medians in its base and head records; check_citations clean; the two test files 291 passed. Correction applied in this recording commit: the ROADMAP row's stale "next @tester" phrase. Non-blocking note: `_finite` on cover polygons runs after the loop (/Users/skavhaug/projects/rasputin/.claude/worktrees/cleanup-speed/src_python/tin_engine/feature_input.py@4de504af:381-386), so when a cover polygon and a later line feature are both unmappable, the fid named is the line's.

Ruling-record review round 1, 2026-10-12, @reviewer (`origin/master..bc7639fb`, 0 counted lines): CHANGES REQUESTED, two prose claims, applied in this recording commit: /Users/skavhaug/projects/rasputin/.claude/worktrees/hotspot-ruling/ROADMAP.md@bc7639fb:69 said "code review rounds 1 and 2 APPROVED" for 35, which had one design round and one code round; /Users/skavhaug/projects/rasputin/.claude/worktrees/hotspot-ruling/docs/benchmarks/quick/hotspots.toml@bc7639fb:16 said "about 85 % GEOS calls", the profile README gives the three largest sub-steps 80 % of the step with about 60 % in GEOS proper. Verified: PR merges and dates, every hash, 6.000 s of 8.829 s = 68.0 %, Lagan 43.6 under 40.7 + 10 (`tools/bench_quick.py:166`), TOML loads and the shipped-file tests pass, check_citations exit 0. Suggestion applied: increment 36's Status line said "built ... Next: the push", now merged (#231). Lesson: a percentage in a comment names the README line it sums from.

Ruling-record review round 2, 2026-10-12, @reviewer (`origin/master..0dfca860`, 0 counted lines): CHANGES REQUESTED, one blocker, the reviewer's exact wording applied in this recording commit: /Users/skavhaug/projects/rasputin/.claude/worktrees/hotspot-ruling/docs/increments/36-geopackage-output.md@0dfca860:10 said #231 merged "on top of #229 and #230"; by the parents (`git log -1 --format=%P fa6e4855`) it sits on #229's merge and #230's `a1aec506` sits on it, so "on top of #229, ahead of #230". Round 1's wordings verified against their sources; 41/21/18 % = 80 % matches the profile README; #231 merged 2026-10-12T05:01Z; TOML parses, 11 hotspot tests pass; check_citations exit 0. Lesson: a merge-order claim is checked with the commit's parents, not the merge timestamps. Pushed on the reviewer's wording without a third round, as the recording-commit practice allows (retrospective 2026-10-12, P1).
4 changes: 2 additions & 2 deletions docs/increments/36-geopackage-output.md
Original file line number Diff line number Diff line change
@@ -1,13 +1,13 @@
# Increment 36: GeoPackage output

**Status: **built** on branch `worktree-gpkg-out` (design `01118660`, fixes
**Status: **merged (#231, 2026-10-12)** from branch `worktree-gpkg-out` (design `01118660`, fixes
`0233d1e3`, design review rounds 1 and 2 recorded; red `87f41c3d` (`@tester`,
42 tests), green `c59246e5` + `0943a7a5` (`@developer`), layering rows
`4e7901ee`, mutation round `dddce8e8` (ten mutants, all killed, record in its
commit message), fix-up `7085dddf` (the `.part` housekeeping moved to the
CLI); 377 net production lines by `python3 tools/count_loc.py 81a551b3 HEAD` (the merge base; `3e6f87eb` gives the same count)
against the design's about 305; section 11 is the as-built record; `@perf`'s
acceptance `57c25074` ACCEPTED). Code review round 1 CHANGES REQUESTED (one blocker, Review section), fixed: red test `55cc3c3e` (`@tester`), guard `18442b27` (`@developer`), 378 net lines; code review round 2 APPROVED. Next: the push on Ola's yes, then a merge of master (#229, increment 35) before the queue.
acceptance `57c25074` ACCEPTED). Code review round 1 CHANGES REQUESTED (one blocker, Review section), fixed: red test `55cc3c3e` (`@tester`), guard `18442b27` (`@developer`), 378 net lines; code review round 2 APPROVED. Merged by the queue on top of #229, ahead of #230, 2026-10-12.

## 1. What Ola asked

Expand Down
Loading