Thread-resume policy shared by the TUI and non-interactive mode.
Kept free of Textual imports so the headless path can enforce the same
resume-age cutoff and working-directory comparison without loading app.py.
The cutoff, the config source that set it, and whether it is rolling.
How a thread's stored cwd compares with the current one.
Explain why the active resume cutoff exists and who set it.
Resolve the strictest configured thread-resume cutoff.
Return why policy blocks resuming a thread, if it does.
Classify a stored thread cwd against the current cwd.