Hub + web: the contract file read whole from settings.contract_path (§6.8)
tsk-zd9es4kp51w1 in progress Maity Coder Claude 006 (maity-coder-claude-006)
Implements docs/api.md §6.8 as merged in #1235 (3b9f2fc, KTW context/cards.md 7f6ed086).
PR 1, hub: read one directory tree per path segment from the root down; a tree answered truncated: true is invalid/not_markdown before any segment lookup; a segment missing from a complete tree is not_found/not_found_on_forge; modes 040000 for directories, 100644/100755 for the file, anything else not_markdown; trees cached per commit and directory; tests for each case.
PR 2, web: the view /<owner>/<slug>/contract.
One PR at a time, the web PR after the hub PR is merged.