You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
- Test Coverage: 1687 tests passing (server run `d85b3750`, 2026-06-11; 8 pre-existing failures + 1 error, identical by test identity to the documented baseline; 248 invariance tests)
46
-
- Lines of Code: ~14,150 (AliasDataFrame.py)
47
-
- Features: 49 in taxonomy (30 verified, 14 smoke-only, 4 broken, 1 planned — CM Verified↔Broken counts flip run-to-run with the parallel-flake set: `test_K2_3`, `test_parquet_roundtrip`, `test_arrow_vs_numpy_performance` (timing threshold, first seen run 095125; architect: "stochastic — we should fix it later")); DISPATCH.adf_routing ✅ 28/28 + DISPATCH.error_visibility ✅ 15/15 registered and Verified (Phase 13.56.ADF)
Closes the silent loss of subframes on the lazy read path: `read_tree_lazy` built an ADF without reading TTree UserInfo, so lazily-read files lost their subframes (`lazy_subframes == []`) while eager reads kept them.
**Tests**: 15 (5 invariance + 10 functional; 5 ROOT-only). Taxonomy 49→50 (`LAZY.userinfo_backcompat`). FM#12 key-path regression test fails pre-fix via the same public API.
714
+
715
+
**Closing run** (`SUMMARY_20260616_083550`, commit `566a9257`): **1701 passed / 9F / 1E / 9 skipped**. The 8 deterministic pre-existing failures (K1_3, K2_3, I2_6, I4_2, I4_3, RDF×3 friend-tree) plus the `schema_serialization` error are unchanged; the 9th failure, `test_parquet_roundtrip`, is the documented parallel-flake cluster (`BUG_AliasDataFrame_20260526_parallel_flake_compression`, stochastic), not a 13.59 regression. CM: 50 features, 253 invariance, 1700 matched; `LAZY.userinfo_backcompat` ✅ Verified (Verified↔Broken flips with the parquet flake per the documented set).
716
+
717
+
**Deferred → Phase 13.61**: the same gap on the lazy **chain** path (`read_chain_lazy`), filed as `BUG_AliasDataFrame_20260615_lazy_chain_UserInfo_gap`. A chain subframe is a chain of sibling trees across all files, needing a chain-aware subframe reader + `register_subframe_lazy` extension (>200 lines) — the substance of 13.61. Architect re-ack (2026-06-16): *"Chain we can postpone but we have to properly explain why."*
718
+
719
+
**Lessons learned**:
720
+
-**Test isolation under `pytest-parallel`**: an early key-fallback test nulled the module-global `AliasDataFrame.ROOT` to force the no-ROOT branch. A module global is shared across threads under the parallel runner, so it leaked into concurrently running ROOT-path tests (`test_save_and_load_integrity`, `test_backward_compatibility_no_compression_info`) — 3 spurious failures on the intermediate commit `1ee957e8`. Fixed by exercising the production no-ROOT writer (`_write_all_metadata_to_key`) directly. Rule: never mutate a module global in a parallel-collected test.
721
+
-**Closure gate (FM#13 + no `--amend`)**: the clean run must carry the closing commit's SHA. An intermediate clean run carried the broken commit's hash; closure waited for a fresh full run on `566a9257`.
722
+
-**Proposal-Completeness Matrix**: every deliverable and AC reconciled before closure; the chain item was explicitly deferred-with-reason, not silently omitted.
`read_tree_lazy` constructed the ADF without reading TTree UserInfo, so lazily-read files silently lost their subframes (`lazy_subframes == []`) even though the file's UserInfo defined them; eager reads were unaffected. Fix: AD-3 read-precedence resolver (UserInfo → uproot UserInfo → `__adfmeta__` key → names-only) with subframe registration in `read_tree_lazy`. Regression guard: `test_keypath_lazy_registration_invariance` (FM#12 — same public API, fails pre-fix). See Phase 13.59.ADF.
**Status**: 🔄 Open — deferred to Phase 13.61 (architect re-acked)
755
+
**Discovered**: 2026-06-15 (Phase 13.59.ADF panel; sibling of the single-tree gap above)
756
+
757
+
The same metadata gap on the lazy **chain** path: `read_chain_lazy` builds the chain reader and an empty-DataFrame ADF but never consumes per-file metadata to register subframes, so a lazily-read chain silently has no subframes. Not a mirror of the single-tree fix — a chain subframe is a chain of sibling trees `<tree>__subframe__<name>` across all files, requiring a chain-aware subframe reader (own `LazyChainReader` with offset/index handling) and an extension of `register_subframe_lazy` (today single file+tree), >200 lines = the substance of 13.61. Filed: `BUG_AliasDataFrame_20260615_lazy_chain_UserInfo_gap.md`. Architect re-ack: *"Chain we can postpone but we have to properly explain why."*
0 commit comments