monopam: nested monorepos auto-detected, three-layer push wired up
Two changes that work together to make nested monorepos invisible
papercut-free:
1. Auto-detect nested monorepos. A subtree is treated as a nested
monorepo iff its directory contains its own sources.toml. The old
`mono = true` flag in the outer sources.toml is gone — no field, no
codec entry, no manual marker. The detection happens in a new
Ctx.nested_monos helper that walks the immediate children of the
monorepo and pairs each "is a monorepo" subtree with its outer
sources entry (if any). push.ml and pull.ml use this helper instead
of Sources_registry.mono_entries.
2. Three-layer depth-first push. The previous implementation pushed
inner subtrees (lib.git) but skipped the middle layer (open-mono.git).
Push now does both: first the inner subtrees of each nested mono,
then a regular subtree push of the nested mono itself to its own
remote. Order is depth-first as the README promises.
Together these mean: a fix in product/open-mono/lib/ flows out to
lib.git AND open-mono.git in a single monopam push, with no flag
to forget.
Removed:
- Sources_registry.entry.mono : bool
- Sources_registry.mono_entries
- Sources_registry.codec_legacy and is_legacy_format
- test_sources_registry test cases for the dropped field
Tests:
- nested_mono.t setup no longer writes mono = true and asserts both
lib.git AND open-mono.git receive the change.
- test_sources_registry / test_pkg / test_deps helpers shrink to
match the smaller record.