day11/doc: deterministic doc layer hashes computed bottom-up
Compile/doc-all/link hashes are now computed deterministically before
execution using a memoized bottom-up walk of the dep graph. Each
compile hash includes:
- build layer hash
- tool hashes (driver + odoc)
- blessed status
- dep compile hashes (recursive, sorted)
This ensures DAG construction hashes match execution hashes exactly,
fixing the cache miss bug where compile layers were never reused
because the DAG and execution computed different hashes.
The execution functions now receive dag_hash from the DAG node
instead of recomputing their own hash.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>