From 309582bccccb02f321d2dd22e131bfefcfde1e43 Mon Sep 17 00:00:00 2001 From: Ola Skavhaug Date: Sat, 7 Nov 2026 12:26:42 +0100 Subject: [PATCH 1/2] As-built record for h40: Status line and ROADMAP row (@main) Co-Authored-By: Claude Opus 5.5 --- ROADMAP.md | 1 + docs/increments/h40-detached-runs.md | 5 +++++ 2 files changed, 6 insertions(+) diff --git a/ROADMAP.md b/ROADMAP.md index 253d25eb..cd289d99 100644 --- a/ROADMAP.md +++ b/ROADMAP.md @@ -125,6 +125,7 @@ increment that most needs a picture to check against | h35 | The question tool (Ola, 2026-10-27: "Like, a question tool, so I don't have to repeat how you should pose questions all the time :)"): `tools/questions.py` is the one place questions to Ola are formed, checked and listed: `add` refuses, with a plain reason, a question without a default, with two decisions, leaning on another question, carrying internal labels, relative paths or unexplained abbreviations, longer than two lines, or asked before; a second yes/no question waits until the first is answered; `taken` records a default taken; `list` prints the numbered block to copy to Ola; `answer N` stores his words verbatim | designed (about 185 counted lines, no governed file) | `docs/increments/h35-question-tool.md` | | h36 | Cut the rule text every agent loads by half (an outside review Ola adopted on 2026-10-27): each rule file keeps only its commands; the main session's dispatch rules, publishing and away-mode rules become three skills loaded only when needed; `docs/PRINCIPLES.md` folds into five lines; a new `tools/rebuild_core.py` replaces the extension-rebuild recipe. Ola's yes to the wider scope on 2026-10-28. Counted rule text 9,261 to 4,630 words; what an agent loads before its first act falls from 3,900-5,000 words to 1,550-1,780. One PR, about 37 counted lines; full proposed texts in `docs/increments/h36-proposed/`, rebased onto the rules merged on 2026-10-28 | designed (round 3, for design review) | `docs/increments/h36-rule-cut.md` | | h37 | Governance guard follow-ups left open by h33: zsh's overwrite and append redirects (`>!`, `>>|`, `&>!` and their kin) count as writes, so they ask before writing a rule file; paths into the harness record folder are judged after resolving `//`, `/./`, `..`, letter case, globs, links and expansions; rule files are matched regardless of letter case (the main session's default; Ola's call open); a script that builds the path itself stays open (only Claude Code's sandbox would close it) | built (red `4a9ecd11`, green `9649346b`, 48 counted lines); code review round 1 approved | `docs/increments/h37-guard-follow-ups.md` | +| h40 | Detached runs: a heavy model run goes out as a job in its own session, writing artifacts to disk, and the persona re-attaches by reading them (`tools/detach.py`), so the run survives the agent | **merged (#423, `3c571a8e`, 2026-11-02)**: red `e499476d`, green `dc8b2af5`, `@reviewer` approved `020cb607`; 219 net counted lines | `docs/increments/h40-detached-runs.md` | | pq | The 15-minute performance check (Ola, 2026-10-07: "a process to measure performance using maximum 15 minutes"): `tools/bench_quick.py run`, four fixed cases (the 1 m tile and quarter, Numedalslågen, and Lagan, which replaced Ljungan in `@perf`'s reading) judged per phase against a stored master baseline per power state, a band of the larger of 5 % and the baseline's own spread, a hard stop at 900 s inside the tool; a phase at 40 % or more of a run, or a call at 25 % or more in a profile, is a hotspot raised with Ola and ruled in `docs/benchmarks/quick/hotspots.toml`; a "why is it slow" question gets one profile first, by hand; the extensive acceptance runs before refine- or mesh-touching pushes, monthly on master and on Ola's ask. Deferred to a later PR: the timing lock and a `profile` subcommand. One PR | merged as #217 (`64481aae`): red `fa3e03ef` + `166f2528`, green `b3439629` + `db1ce78e`, 242 net production lines against about 220; two code review rounds; rule text proposed in the record, not applied. Follow-up PR (Ola, 2026-10-08: yes): record the shapely, GEOS, pyproj and PROJ versions in `bench.py`'s machine record, so an upgrade gives NO BASELINE; designed, about 9 lines; built: red `f8bd29bc`, green `05514d4c`, 9 net lines; review round 1 asked for this status fix; next round 2, then the push | `docs/increments/perf-quick-check.md` | | 33 | A vertical tolerance that varies with distance to named lines (Ola, 2026-10-08: "It's feature adaptive refinement, like 1m vtol resolution close to the railway from Oslo to Bergen, with 20m vtol resolution from 3 km radially away"): `--tolerance-near FILE N` and `--tolerance-ramp START END` beside `--tolerance F`; each triangle is held to the linear ramp at its own distance to the lines, so every DEM node meets the ramp at its own distance; the lines read and simplified in Python, the distance in C++ per scanned triangle, local per tile; without the flags every byte is today's. Demonstration: the Bergen Line from Bane NOR's open network data on DTM10, a 5 km corridor (about 1.4 million triangles estimated against 21.7 million at 1 m everywhere), first on Geilo to Ål | **merged (#220)** from branch `worktree-vtol-field`: 469 counted lines in one PR against the design's estimate of 310-425 (the command-line flags and building the field in `cli.py`, 105 against 40-60, are nearly all of the difference); eight questions for Ola with defaults, plus one default taken while Ola was away (a line coordinate that is not a finite number is refused, naming the file; reversible); design review round 3 approved; red step `6c64b120`; mutation record complete; code review rounds 1 to 4 recorded: round 1's five fixes and round 2's added test all in, round 3 approved, its suggestion (a GeoPackage with a polygon in reach and its lines out of reach is refused as a mixed file) built in `0b1235a7`, and round 4's two prose fixes made; `@perf` accepted (`21853bf1`) | `docs/increments/33-feature-tolerance.md` | | 34 | A tighter vertical tolerance where the ground is steep (Ola, 2026-10-08: "if the slope of a surface is steeper than a certain angle, we want a finer refinement"; "vtol means finer"): `--tolerance-slope N START END` beside `--tolerance F`, the tolerance F up to START degrees of slope and N from END, linear between; every DEM node is held to the tolerance at its own slope (Horn's slope at the DEM's own spacing, one byte per node, computed in C++), so a coarse triangle cannot hide a steep node; composes with increment 33's lines (the tighter of the two); without the flag every byte is today's. Demonstration: Romsdalen, DTM10 tile `6901_3`, estimated 1.4 to 3.5 million triangles against 0.6 million at 10 m and 5.9 million at 2 m | **merged (#226, 2026-10-10)** (branch `worktree-slope-tol`): designed at 376-533 counted lines, seven questions for Ola with defaults, design review rounds 1 to 4 asked for changes, answered, round 5 approved; red `3ce92a7e`, green `952bd1ee`, 512 counted lines (513 with code review round 1's suggestion S1, `d06a0a8c`), one PR; scaffolding removed `f68a9440`; mutation round `7d661ae9`, all nine planted faults (M1-M9) caught by the tests; code review rounds 1 and 2 asked for changes, answered; code review round 3 approved; `@perf` accepted (`2c88ddbe`: 1.039 times, slope phase 0.107 s, default meshes unchanged); next: the push on Ola's yes | `docs/increments/34-slope-tolerance.md` | diff --git a/docs/increments/h40-detached-runs.md b/docs/increments/h40-detached-runs.md index 58d989bd..f63fe160 100644 --- a/docs/increments/h40-detached-runs.md +++ b/docs/increments/h40-detached-runs.md @@ -1,5 +1,10 @@ # h40 — Detached runs: heavy model runs survive the agent +Status: **merged** (public PR #423, merge commit `3c571a8e`, 2026-11-02): full +lane, red `e499476d`, green `dc8b2af5`, `@reviewer` approved head `020cb607`; +219 net counted lines by `tools/count_loc.py` over the merge (the PR's 260 was +an earlier count). No C++, mesh or refine code, so no `@perf` run. + A heavy perf or land-surface-model (lsm) run goes out as a **detached job** — a process in its own session, writing artifacts to disk, that lives independently of the agent that launched it. The persona launches it and later From 10a38697b6c8e2944b2b06e9c2ddb39e0ccc2c78 Mon Sep 17 00:00:00 2001 From: Ola Skavhaug Date: Sat, 7 Nov 2026 12:29:24 +0100 Subject: [PATCH 2/2] Evidence: apply @reviewer's wordings exactly (@main) Co-Authored-By: Claude Opus 5.5 --- docs/increments/h40-detached-runs.md | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/docs/increments/h40-detached-runs.md b/docs/increments/h40-detached-runs.md index f63fe160..059c3151 100644 --- a/docs/increments/h40-detached-runs.md +++ b/docs/increments/h40-detached-runs.md @@ -2,8 +2,9 @@ Status: **merged** (public PR #423, merge commit `3c571a8e`, 2026-11-02): full lane, red `e499476d`, green `dc8b2af5`, `@reviewer` approved head `020cb607`; -219 net counted lines by `tools/count_loc.py` over the merge (the PR's 260 was -an earlier count). No C++, mesh or refine code, so no `@perf` run. +219 net counted lines by `tools/count_loc.py` over the merge (203 at green; the +PR text's 260 matches no commit in the PR). No C++, mesh or refine code, so no +`@perf` run. A heavy perf or land-surface-model (lsm) run goes out as a **detached job** — a process in its own session, writing artifacts to disk, that lives