CAUGHT no O_NOFOLLOW + no lstat symlink -> F7: a symlinked file and a symlinked directory component are refused, ; F8: a file swapped for a symlink after the catalogue is refused
CAUGHT dir components unchecked -> F7: a symlinked file and a symlinked directory component are refused, 
CAUGHT listing follows symlinks -> F7: a symlinked file and a symlinked directory component are refused, ; F8: a file swapped for a symlink after the catalogue is refused
CAUGHT no prefix digest check -> F4: a same-inode rewrite of the prefix refuses old cursors with reconc
CAUGHT no dev/ino check -> F3: a replaced file
MISSED no shorter check -> 
CAUGHT cwd always in project -> F10: a header cwd naming another project is refused
CAUGHT relative cwd accepted -> F10: a header cwd naming another project is refused
CAUGHT no char cap -> F14: long strings split into fragments and parts, reassemble exactly, ; every page and cursor is a valid CHAT-01 record
CAUGHT no page byte cap -> F14: long strings split into fragments and parts, reassemble exactly, 
CAUGHT no block cap -> F14: long strings split into fragments and parts, reassemble exactly, ; every page and cursor is a valid CHAT-01 record
CAUGHT no foreign check -> F6: unknown, foreign and expired cursors refuse and leave the cursor u
CAUGHT no branch binding -> F6: unknown, foreign and expired cursors refuse and leave the cursor u
CAUGHT no expiry -> F6: unknown, foreign and expired cursors refuse and leave the cursor u
CAUGHT no parentSession notice -> F11: parentSession renders with a marker and the parent is never opene
CAUGHT branch param ignored -> F12: a second root; F12: two leaves: the default leaf is shown and the other branch reads ; F1: a missing parent stops the history with a notice that names the un
CAUGHT unknown branch served -> F12: two leaves: the default leaf is shown and the other branch reads 
CAUGHT registration harness ignored -> F15: a Claude seat is an unsupported-harness placeholder whose directo
CAUGHT no placeholder roots -> F15: a Claude seat is an unsupported-harness placeholder whose directo
CAUGHT malformed notices dropped -> F1: a file whose entries are all unreadable shows a notice per line; F1: a follow stays on its branch when the next entry's parent is unrea; F1: a malformed line is an unavailable part at its position, and readi; F1: a missing parent stops the history with a notice that names the un
CAUGHT bridge restored -> F1: a follow stays on its branch when the next entry's parent is unrea; F1: a missing parent stops the history with a notice that names the un; F1: an unreadable fork is never merged into another branch's history
CAUGHT missing-parent lines not named -> F1: a follow stays on its branch when the next entry's parent is unrea; F1: a missing parent stops the history with a notice that names the un; F1: an unreadable fork is never merged into another branch's history
CAUGHT trailing malformed only on default -> F1: a follow stays on its branch when the next entry's parent is unrea; F1: a missing parent stops the history with a notice that names the un
CAUGHT branch named by leaf -> F12: a follow refuses when an appended duplicate id changes the branch; F12: a second root; F12: two leaves: the default leaf is shown and the other branch reads ; F1: a follow stays on its branch when the next entry's parent is unrea; F1: a missing parent stops the history with a notice that names 
CAUGHT later child continues branch -> F12: two leaves: the default leaf is shown and the other branch reads 
CAUGHT first root not main -> F12: a follow refuses when an appended duplicate id changes the branch; F12: a second root; F12: two leaves: the default leaf is shown and the other branch reads ; F1: a follow stays on its branch when the next entry's parent is unrea; F1: a missing parent stops the history with a notice that names 
CAUGHT no empty main -> F1: a file whose entries are all unreadable shows a notice per line; unknown conversations, empty files and non-Pi files refuse
CAUGHT redacted thinking shown -> native entries map to blocks: tools, thinking, bash, notices, ids that
CAUGHT EACCES on a component rethrown -> a seat directory without search permission refuses that root, not the 
CAUGHT incomplete never set -> F2: a truncated trailing line marks the view incomplete, not an error; F5: growth between pages keeps the epoch and the page stops at the pin
CAUGHT next re-reads fresh -> F12: a second root; F12: two leaves: the default leaf is shown and the other branch reads ; F1: a follow stays on its branch when the next entry's parent is unrea; F2: a truncated trailing line marks the view incomplete, not an error; F5: growth between pages keeps the epoch and the page stops at th
CAUGHT follow skips history check -> F12: a follow refuses when an appended duplicate id changes the branch
CAUGHT follow skips the id digest -> F12: a follow refuses when an appended duplicate id changes the branch
CAUGHT follow reads the default branch -> F12: two leaves: the default leaf is shown and the other branch reads ; F1: a follow stays on its branch when the next entry's parent is unrea
CAUGHT catalogue writes a file -> F10: a header cwd naming another project is refused; F15: a Claude seat is an unsupported-harness placeholder whose directo; F1: a malformed line is an unavailable part at its position, and readi; F7: a symlinked file and a symlinked directory component are refused, ; F8: a file swapped for a symlin
CAUGHT thinking visibility wrong -> native entries map to blocks: tools, thinking, bash, notices, ids that
CAUGHT raw tool ids -> every page and cursor is a valid CHAT-01 record; native entries map to blocks: tools, thinking, bash, notices, ids that
CAUGHT id namespaces dropped -> F1: a malformed line is an unavailable part at its position, and readi
CAUGHT surrogate split -> fragments never cut a surrogate pair and keep an empty string
