🤖 AI generated content
Bootstrap classes §5 "Group B: the classes streamer-driven reading gets wrong" lists the ROOT classes whose recorded streamer info is absent or does not describe their bytes, so a reader must hardcode them. These are missing from src/rootfilespec/bootstrap/__init__.py. Checklist (observations are from running rootfilespec on the spec fixtures under reference/root-io-spec/data/):
Covered elsewhere: TMatrixTSym → #73; TArrayL/TArrayL64 → #107.
Note Bootstrap §6 "The list cannot be closed": user classes can have hand-written streamers too (#69, #71), so the fallback of #98 / #74 matters as much as this list.
Severity / size: medium–high per class on files that contain them / S–M each; implement on demand, each with its spec fixture as the test vector.
Assisted-by: claude-code:claude-fable-5-1
Bootstrap classes §5 "Group B: the classes streamer-driven reading gets wrong" lists the ROOT classes whose recorded streamer info is absent or does not describe their bytes, so a reader must hardcode them. These are missing from
src/rootfilespec/bootstrap/__init__.py. Checklist (observations are from running rootfilespec on the spec fixtures underreference/root-io-spec/data/):TRef— References §3.serialization/references.root,ref-variants.root:Unknown type TRef(4 records)TRefArray— References §4ProcessID<n>key resolution — References §2.TProcessIDitself reads (streamer-info driven, aTNamedpayload), but nothing maps references to it; see TObject: fUniqueID is read signed and unmasked; pidf is never combined with fPidOffset or resolved to a ProcessID record #110TClonesArray— Collections §12 (two body encodings selected byfBitsbit 12kBypassStreamer).serialization/clones-array.root:Unknown type TClonesArrayTMap— Containers §1 (needs Object references are never resolved:instance_refsis never populated andRef(Some())is returned #104 for shared values)TExMap— Containers §2TBtree— Containers §3 (class version 0: needs StreamHeader uses thefByteCount >= 6heuristic to decide whether a checksum follows a version word of 0 #111).classes/containers.root: all three unknownTStringLong— Conventions §5.1.1 in00-conventions.md(four-byte count).serialization/stringlong.root:Expected position 662 but got 178TQObject/TCanvas— TCanvas (aTQObjectbase occupies zero bytes).classes/canvas.root:TVirtualPad depends on TQObject which is missingstd::bitset<N>— Collections §11 (count = number of bits, one byte per bit).src/rootfilespec/structutil.py:111-115raisesNotImplementedErrorstd::deque— Collections §1/§11.src/rootfilespec/container.py:291-296raisesNotImplementedErrorTTreeIndex— TTree auxiliary classes §2 in04-ttree/Auxiliary.md(the one class with no streamer info)TBranchClones— §13 of04-ttree/TBranchElement.mdTHashList— not hardcoded and currently reads only by accident of An object slot's class record and the object's own frame are conflated (pointers to non-TObject classes desync) #105; add an explicit testCovered elsewhere:
TMatrixTSym→ #73;TArrayL/TArrayL64→ #107.Note Bootstrap §6 "The list cannot be closed": user classes can have hand-written streamers too (#69, #71), so the fallback of #98 / #74 matters as much as this list.
Severity / size: medium–high per class on files that contain them / S–M each; implement on demand, each with its spec fixture as the test vector.
Assisted-by: claude-code:claude-fable-5-1