---
name: structural-fact-must-survive-rederivation
description: Proving a structural source is not proving the structural fact survives every downstream re-derivation; a forbidden heuristic can re-enter through a helper (resolve_perch_path classifies by name first).
metadata: 
  node_type: memory
  type: project
  originSessionId: 520cc386-a467-49d9-b1f9-c90853dfed9b
  modified: 2026-08-02T11:43:45.858Z
---

todlando's #98 leg 3: the nested-perch scan was proven structural (directory relation, never name), but the render re-derived each child's PATH from its ID via `resolve_perch_path` — which classifies an id by NAME before consulting any parent hint. An oddly-named nested child resolved to the flat top-level path, missed its info.json, and vanished. The name rule the ruling forbade came back through the path resolver, while the enumerator's unit test stayed green (it proved the scan, never that a row survives to the render). Only a live run against a real owlery showed it (W4, 2026-08-02).

**Why:** a property proven at the source is silently re-decided at every downstream conversion; helpers embed the old heuristic. Unit tests scoped to the source stage cannot see the loss.

**How to apply:** when a ruling bans a heuristic in favor of a structural fact, sweep every downstream RE-DERIVATION of that fact (path/id/key conversions) for the banned heuristic; carry the structural artifact (the directory, the record) end to end instead of round-tripping through an id; add a regression row whose fixture violates the banned heuristic's expectation (e.g. a child whose name carries no kind suffix). Related: [[key-must-ride-the-crossing-artifact]], [[single-source-discriminant-marker]].
