Temporal QA across four watershed groups from the published annual series (#62) - #65
Merged
Merged
Conversation
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01XcFmzirEsjTxQd3jzGdnPZ
data-raw/break_class_groups.R reads the seven classified_<year> COGs each stac-floodplains-bc item publishes (bulk, necr, lnth, kotl; PINE was dropped upstream), verifies them against file:checksum, and runs the BULK pipeline minus the fetch: classify, dft_rast_break_class(), the category crosstab, patches with artifact tags and per-patch zonal, plus floodplain-shape rows for Q3 and per-year class frequencies. A summarize stage assembles one row per group into summary_groups.csv/.md and a BULK reconciliation row, and refuses to finish if the note's copy of the tables differs. data-raw/break_class_groups-run.sh starts Rscript alone so the RSS sampler reads R's PID, not a wrapper shell. The per-stream _by_blue_line_key layer was rejected for Q3 before the run: its polygons overlap 1.7-2.2x and kotl has none (plan review). Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01XcFmzirEsjTxQd3jzGdnPZ
bulk, kotl, lnth, necr run 2026-09-05 on m1 from the published COGs: per-group CSVs, RSS traces (13.7-16.3 GiB peak, 100-323 s wall), summary_groups.csv/.md and the BULK reconciliation against the #9 run (three shares identical to one decimal on the published grid). Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01XcFmzirEsjTxQd3jzGdnPZ
inst/notes/temporal-qa-groups.md answers the four questions: the sustained share of 2017-2023 change is 19.7-31.0%, flicker 39.6-48.5% and the largest category everywhere; 2017 is the odd endpoint more often than 2023 in every group (ratio 1.09-1.25); flicker moves 9 points across a 2.5x width range, so it is mostly the classifier's; the geometric and temporal legs are independent to nearly independent. Tables are summary_groups.md verbatim. Follow-ups filed with the numbers: #64 (corrected annual series) and stac_floodplains_bc#67 (break_n_flips / break_year assets). Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01XcFmzirEsjTxQd3jzGdnPZ
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01XcFmzirEsjTxQd3jzGdnPZ
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
data-raw/break_class_groups.Rrunsdft_rast_break_class()on the published seven-year IO LULC series of every group that has one —bulk_co_ff04,necr_ch_ff04,lnth_ch_ff04,kotl_bt_ff04— straight from the stac-floodplains-bc hrefs (verified againstfile:checksum), then the Detect geometric edge/misregistration artifacts in transitions (sliver width, boundary-hugging, reciprocal pairs) #44 patch pipeline and floodplain-shape rows. Itssummarizestage emits every number the note quotes and refuses to finish if the note's tables differ from the generated file.inst/notes/temporal-qa-groups.mdanswers the four questions in Temporal QA across five watershed groups from the published annual series: does the BULK split generalise? #62: the sustained share of 2017-2023 change is 19.7 / 31.0 / 20.6 / 24.7 % (bulk / necr / lnth / kotl), flicker 44.0 / 39.6 / 48.5 / 42.3 % and the largest category everywhere, sotransition_2017_2023overstates sustained change 3.2-5.1x; 2017 is the odd endpoint more often than 2023 in every group (ratio 1.09-1.25); flicker moves 9 points across a 2.5x width range, so it is mostly the classifier's; the geometric and temporal legs are independent to nearly independent. Between-group spread is confounded with producer path (the two cube-cut groups flicker least) and the note says so.data-raw/logs/break_class_groups/(per-group CSVs, RSS traces,summary_groups.csv/.md, BULK reconciliation). Nothing inR/changes. Five groups became four: PINE was dropped upstream (floodplains#76); issue Temporal QA across five watershed groups from the published annual series: does the BULK split generalise? #62's body was edited before the run.Related Issues
break_n_flips/break_yearassets)Scale run (m1, 64 GB, terra 1.9.34, file-backed inputs)
Peak RSS sits at 14-16 GiB whatever the grid size — terra sizing its working set to available RAM — and the #9 run's 8.5-20 GB in-memory input floor is gone. BULK re-measured on the published grid against the #9 run: +71 valid cells, +4.62 ha changed, shares within 0.03 of a point (
summary_bulk_reconcile.csv).Test plan
devtools::test(): 867 pass, 0 fail, 13 skip (noR/change)planning/archive/2026-09-issue-62-temporal-qa-groups/review-round{1..4}.md. The plan review rejected the per-stream segment design for Q3 before the run; rounds 2-4 each found the same mechanism one artifact further out (a prose number typed from a reading of the table, a derived cell downstream of a display rounding), reaching a filed issue body; the loop ended by enumerating every artifact that carries a number fromsummary_groups.csv.summarizere-run after every edit; note tables verified verbatim by the scriptNotes
area_km22 dp,area_ha1 dp) thatff06_over_ff02andpct_area_artifactthen divide; recomputed from unrounded sources all eight cells are unchanged. Recorded in the evidence README to fix on the next per-group run rather than re-running the batch for no change in any reported value.data-raw/break_class_groups-run.shstarts Rscript alone so the RSS sampler reads R's PID; a first sampler had caught the wrapper shell.🤖 Generated with Claude Code
https://claude.ai/code/session_01XcFmzirEsjTxQd3jzGdnPZ