Summary
While validating #223 on PARS, we found that the tunnel-free bcfp reference
(fresh.streams_vw_bcfp) flags only 67% of PARS as dam-downstream
(dam_dnstr_ind = TRUE), not 100% — even though the entire Parsnip watershed group
drains to Williston Reservoir and out through the W.A.C. Bennett / Peace Canyon dams.
link faithfully reproduces this (66.2%), so it is a characteristic of the bcfp
reference data, not a link defect. We do not yet understand the exact propagation
rule, and this issue records what we know so it isn't lost.
This does NOT affect #223. PARS BT accessible_km is exact vs bcfp (−0.01%),
mapping-code matched, and the link-vs-bcfp dam_dnstr_ind difference is a tiny
second-order segmentation effect (−1.25%), not a missed dam.
The numbers (bcfp reference, fresh.streams_vw_bcfp, PARS)
| metric |
km |
% of total |
| total stream |
13,867.5 |
100% |
dam_dnstr_ind = TRUE (bcfp) |
9,293.3 |
67.0% |
dam_dnstr_ind = TRUE (link) |
9,176.7 |
66.2% |
dam-free (FALSE) |
4,574.2 |
33.0% |
dam_hydro_dnstr_ind is identical to dam_dnstr_ind here (67%), i.e. the relevant
dams are the hydro dams.
Separately, the mapping-code ;DAM token is even narrower — only ~4,299 km
(31%) of segments carry ;DAM in mapping_code_bt, i.e. ;DAM-in-code ≠
dam_dnstr_ind. 4,995 km have a dam downstream but no ;DAM label. So the map's
"dam" symbology and the dam_dnstr_ind boolean are two different things.
What the dam-free 33% is — hypotheses tested and RULED OUT
- Isolated / wetland reaches — NO. 93% (4,270 of 4,574 km) are edge_type 1000
(ordinary single-line streams), not connectors or wetland reaches.
- Broken network / doesn't connect to the mainstem — NO.
whse_basemapping.fwa_downstream confirms the dammed Parsnip mainstem
(blk 359567332) IS downstream of a sampled dam-free tributary (blk 359564429),
and the tributary's wscode nests cleanly under the mainstem's
(200.948755.936902.347759.954138 <@ 200.948755.936902). They connect.
- Headwaters only — PARTIAL. Dam-free is concentrated in low order (order 1:
3,194 km) and there are zero dam-free segments at order ≥ 5 — but orders 1–4
are a mix of dam-free and dam-ds, so order alone doesn't explain it.
- Inaccessible network (above barriers) — NO. Dam-free splits ~evenly across
accessible (2,521 km) and blocked/absent (2,053 km); blocked streams are if
anything more likely to be dam-ds (4,992 km). Uncorrelated with access_bt.
What it appears to be
Whole contiguous sub-basins draining toward Williston Reservoir. The dammed
"Parsnip mainstem" (blk 359567332) is actually a 199 km reservoir reach
(waterbody_key 329725048, edge_type 1250), entirely dam-ds. The dam flag propagates
along the main channels + reservoir but not up into certain whole tributary
sub-basins that feed the reservoir. The spatial pattern is clearly contiguous
sub-basins (map rendered in-session: purple = dam-ds, orange = dam-free), not
scattered segments — which points at a topological rule in bcfp's dam-downstream
propagation, likely at the stream→reservoir interface.
Next step to get the definitive mechanism
Read smnorris/bcfishpass's dam-downstream computation (the SQL that populates
barriers_dams_dnstr / dam_dnstr_ind) at the pinned reference version
smnorris/bcfishpass@v0.7.15-41-g2917790 (head_sha 29177906, date_completed
2026-07-01) — the source of truth for why those specific sub-basins are unflagged.
Inferring further from the output is circular. If confirmed as an under-flag of
reservoir-inflow tributaries, raise upstream with Simon (fish in those tributaries
would in fact hit the dam going downstream, so dam_dnstr = false looks wrong).
References / repro
Summary
While validating #223 on PARS, we found that the tunnel-free bcfp reference
(
fresh.streams_vw_bcfp) flags only 67% of PARS as dam-downstream(
dam_dnstr_ind = TRUE), not 100% — even though the entire Parsnip watershed groupdrains to Williston Reservoir and out through the W.A.C. Bennett / Peace Canyon dams.
link faithfully reproduces this (66.2%), so it is a characteristic of the bcfp
reference data, not a link defect. We do not yet understand the exact propagation
rule, and this issue records what we know so it isn't lost.
This does NOT affect #223. PARS BT
accessible_kmis exact vs bcfp (−0.01%),mapping-code matched, and the link-vs-bcfp
dam_dnstr_inddifference is a tinysecond-order segmentation effect (−1.25%), not a missed dam.
The numbers (bcfp reference,
fresh.streams_vw_bcfp, PARS)dam_dnstr_ind = TRUE(bcfp)dam_dnstr_ind = TRUE(link)FALSE)dam_hydro_dnstr_indis identical todam_dnstr_indhere (67%), i.e. the relevantdams are the hydro dams.
Separately, the mapping-code
;DAMtoken is even narrower — only ~4,299 km(31%) of segments carry
;DAMinmapping_code_bt, i.e.;DAM-in-code ≠dam_dnstr_ind. 4,995 km have a dam downstream but no;DAMlabel. So the map's"dam" symbology and the
dam_dnstr_indboolean are two different things.What the dam-free 33% is — hypotheses tested and RULED OUT
(ordinary single-line streams), not connectors or wetland reaches.
whse_basemapping.fwa_downstreamconfirms the dammed Parsnip mainstem(blk 359567332) IS downstream of a sampled dam-free tributary (blk 359564429),
and the tributary's
wscodenests cleanly under the mainstem's(
200.948755.936902.347759.954138 <@ 200.948755.936902). They connect.3,194 km) and there are zero dam-free segments at order ≥ 5 — but orders 1–4
are a mix of dam-free and dam-ds, so order alone doesn't explain it.
accessible (2,521 km) and blocked/absent (2,053 km); blocked streams are if
anything more likely to be dam-ds (4,992 km). Uncorrelated with
access_bt.What it appears to be
Whole contiguous sub-basins draining toward Williston Reservoir. The dammed
"Parsnip mainstem" (blk 359567332) is actually a 199 km reservoir reach
(waterbody_key 329725048, edge_type 1250), entirely dam-ds. The dam flag propagates
along the main channels + reservoir but not up into certain whole tributary
sub-basins that feed the reservoir. The spatial pattern is clearly contiguous
sub-basins (map rendered in-session: purple = dam-ds, orange = dam-free), not
scattered segments — which points at a topological rule in bcfp's dam-downstream
propagation, likely at the stream→reservoir interface.
Next step to get the definitive mechanism
Read
smnorris/bcfishpass's dam-downstream computation (the SQL that populatesbarriers_dams_dnstr/dam_dnstr_ind) at the pinned reference versionsmnorris/bcfishpass@v0.7.15-41-g2917790(head_sha 29177906, date_completed2026-07-01) — the source of truth for why those specific sub-basins are unflagged.
Inferring further from the output is circular. If confirmed as an under-flag of
reservoir-inflow tributaries, raise upstream with Simon (fish in those tributaries
would in fact hit the dam going downstream, so
dam_dnstr = falselooks wrong).References / repro
smnorris/bcfishpass@v0.7.15-41-g2917790, viewfresh.streams_vw_bcfp(loaded bydata-raw/snapshot_bcfp.sh).