Brian caught that the spec stated a frame and then violated it. The test is
'does it produce or derive facts -> BIT; does it require knowing Brian -> Lyra.'
The git observer produces facts and knows nothing about Brian; cadence health
derives from BIT's own time_logs and goal fields. Both belong in BIT.
Putting them in Lyra would have made BIT's data true only while Lyra was
running -- the exact coupling the separable frame exists to prevent. It also
makes BIT better standalone: auto-logged time plus cadence on the project
cards, which today show only a creation date.
Restructured into Part A (BIT, deterministic, no LLM) and Part B (Lyra, the
pick and the surfacing). Observer ships in BIT's repo but runs on the host and
POSTs over HTTP, so repos need no volume mounts.