.nornir/notes/migrated-2026-05-31-todo.log.ndjson
{"kind":"IdeaSubmitted","id":"i-001","source":"bootstrap","text":"build the idea-intake funnel itself","refs":[".nornir/notes/2026-05-31-funnel-dag-handoff.md"],"ts":"2026-05-31T11:33:25.004049026Z"}
{"kind":"PlanCreated","id":"p-001","idea_id":"i-001","summary":"ship the funnel MVP: events, store, topo, demo, mcp","planner":"bootstrap","ts":"2026-05-31T11:33:25.004190525Z"}
{"kind":"PlanStatusChanged","plan_id":"p-001","status":"active","why":null,"ts":"2026-05-31T11:33:25.004218508Z"}
{"kind":"NodeAdded","plan_id":"p-001","node_id":"n-001","node_kind":"rust:design","params":{"label":"event_types"},"targets":["src/funnel/event.rs"],"prompt_excerpt":"Build event_types: implement src/funnel/event.rs","ts":"2026-05-31T11:33:25.004239398Z"}
{"kind":"NodeAdded","plan_id":"p-001","node_id":"n-002","node_kind":"rust:impl","params":{"label":"store_ndjson"},"targets":["src/funnel/store.rs"],"prompt_excerpt":"Build store_ndjson: implement src/funnel/store.rs","ts":"2026-05-31T11:33:25.004274354Z"}
{"kind":"EdgeAdded","plan_id":"p-001","from_node":"n-001","to_node":"n-002","ts":"2026-05-31T11:33:25.004304381Z"}
{"kind":"NodeAdded","plan_id":"p-001","node_id":"n-003","node_kind":"rust:impl","params":{"label":"topo_dispatch"},"targets":["src/funnel/topo.rs"],"prompt_excerpt":"Build topo_dispatch: implement src/funnel/topo.rs","ts":"2026-05-31T11:33:25.004322546Z"}
{"kind":"EdgeAdded","plan_id":"p-001","from_node":"n-002","to_node":"n-003","ts":"2026-05-31T11:33:25.004347704Z"}
{"kind":"NodeAdded","plan_id":"p-001","node_id":"n-004","node_kind":"rust:example","params":{"label":"demo_cli"},"targets":["examples/funnel_demo.rs"],"prompt_excerpt":"Build demo_cli: implement examples/funnel_demo.rs","ts":"2026-05-31T11:33:25.004365948Z"}
{"kind":"EdgeAdded","plan_id":"p-001","from_node":"n-003","to_node":"n-004","ts":"2026-05-31T11:33:25.004393731Z"}
{"kind":"NodeAdded","plan_id":"p-001","node_id":"n-005","node_kind":"rust:mcp","params":{"label":"mcp_tools"},"targets":["src/mcp/funnel.rs"],"prompt_excerpt":"Build mcp_tools: implement src/mcp/funnel.rs","ts":"2026-05-31T11:33:25.004411074Z"}
{"kind":"EdgeAdded","plan_id":"p-001","from_node":"n-004","to_node":"n-005","ts":"2026-05-31T11:33:25.004435691Z"}
{"kind":"NodeStatusChanged","plan_id":"p-001","node_id":"n-001","status":"done","why":"built in scaffolding chunk 1","ts":"2026-05-31T11:33:25.004452533Z"}
{"kind":"NodeStatusChanged","plan_id":"p-001","node_id":"n-002","status":"done","why":"built in scaffolding chunk 1","ts":"2026-05-31T11:33:25.004470687Z"}
{"kind":"NodeStatusChanged","plan_id":"p-001","node_id":"n-003","status":"done","why":"built in scaffolding chunk 1","ts":"2026-05-31T11:33:25.004488050Z"}
{"kind":"NodeStatusChanged","plan_id":"p-001","node_id":"n-004","status":"done","why":"demo_cli built and smoke-tested","ts":"2026-05-31T11:33:29.773358836Z"}
{"kind":"NodeStatusChanged","plan_id":"p-001","node_id":"n-005","status":"blocked","why":"waiting on iceberg backend (p-002)","ts":"2026-05-31T11:45:08.731121444Z"}
{"kind":"IdeaSubmitted","id":"i-002","source":"rickard","text":"switch funnel store backend from ndjson to iceberg","refs":[],"ts":"2026-05-31T11:45:09.011426120Z"}
{"kind":"PlanCreated","id":"p-002","idea_id":"i-002","summary":"iceberg-backed funnel: schema + writer + reader + store wrap + migrate","planner":"rickard","ts":"2026-05-31T11:45:09.285481356Z"}
{"kind":"PlanStatusChanged","plan_id":"p-002","status":"active","why":"auto-activated by demo CLI","ts":"2026-05-31T11:45:09.285536310Z"}
{"kind":"NodeAdded","plan_id":"p-002","node_id":"n-006","node_kind":"iceberg:schema","params":{},"targets":["src/warehouse/iceberg_schema.rs"],"prompt_excerpt":null,"ts":"2026-05-31T11:45:19.551584810Z"}
{"kind":"NodeAdded","plan_id":"p-002","node_id":"n-007","node_kind":"iceberg:register","params":{},"targets":["src/warehouse/iceberg.rs"],"prompt_excerpt":null,"ts":"2026-05-31T11:45:19.836401578Z"}
{"kind":"EdgeAdded","plan_id":"p-002","from_node":"n-006","to_node":"n-007","ts":"2026-05-31T11:45:19.836467994Z"}
{"kind":"NodeAdded","plan_id":"p-002","node_id":"n-008","node_kind":"iceberg:writer","params":{},"targets":["src/warehouse/funnel.rs"],"prompt_excerpt":null,"ts":"2026-05-31T11:45:20.115276959Z"}
{"kind":"EdgeAdded","plan_id":"p-002","from_node":"n-007","to_node":"n-008","ts":"2026-05-31T11:45:20.115343144Z"}
{"kind":"NodeAdded","plan_id":"p-002","node_id":"n-009","node_kind":"iceberg:reader","params":{},"targets":["src/warehouse/funnel.rs"],"prompt_excerpt":null,"ts":"2026-05-31T11:45:20.396475768Z"}
{"kind":"EdgeAdded","plan_id":"p-002","from_node":"n-008","to_node":"n-009","ts":"2026-05-31T11:45:20.396531363Z"}
{"kind":"NodeAdded","plan_id":"p-002","node_id":"n-010","node_kind":"funnel:store-rewire","params":{},"targets":["src/funnel/store.rs"],"prompt_excerpt":null,"ts":"2026-05-31T11:45:20.679330081Z"}
{"kind":"EdgeAdded","plan_id":"p-002","from_node":"n-009","to_node":"n-010","ts":"2026-05-31T11:45:20.679392930Z"}
{"kind":"NodeAdded","plan_id":"p-002","node_id":"n-011","node_kind":"funnel:migrate-log","params":{},"targets":[".nornir/todo.log"],"prompt_excerpt":null,"ts":"2026-05-31T11:45:20.960101712Z"}
{"kind":"EdgeAdded","plan_id":"p-002","from_node":"n-010","to_node":"n-011","ts":"2026-05-31T11:45:20.960168829Z"}
{"kind":"NodeAdded","plan_id":"p-002","node_id":"n-012","node_kind":"funnel:demo-update","params":{},"targets":["examples/funnel_demo.rs"],"prompt_excerpt":null,"ts":"2026-05-31T11:45:21.243831171Z"}
{"kind":"EdgeAdded","plan_id":"p-002","from_node":"n-010","to_node":"n-012","ts":"2026-05-31T11:45:21.243887538Z"}
{"kind":"NodeAdded","plan_id":"p-002","node_id":"n-013","node_kind":"funnel:mcp-rewire","params":{},"targets":["src/bin/nornir-mcp.rs"],"prompt_excerpt":null,"ts":"2026-05-31T11:45:21.529869582Z"}
{"kind":"EdgeAdded","plan_id":"p-002","from_node":"n-010","to_node":"n-013","ts":"2026-05-31T11:45:21.529931129Z"}
{"kind":"NodeAdded","plan_id":"p-002","node_id":"n-014","node_kind":"funnel:smoke-test","params":{},"targets":["ALL"],"prompt_excerpt":null,"ts":"2026-05-31T11:45:21.807970146Z"}
{"kind":"EdgeAdded","plan_id":"p-002","from_node":"n-011","to_node":"n-014","ts":"2026-05-31T11:45:21.808023267Z"}
{"kind":"EdgeAdded","plan_id":"p-002","from_node":"n-012","to_node":"n-014","ts":"2026-05-31T11:45:21.808041070Z"}
{"kind":"EdgeAdded","plan_id":"p-002","from_node":"n-013","to_node":"n-014","ts":"2026-05-31T11:45:21.808056820Z"}
{"kind":"IdeaSubmitted","id":"i-003","source":"rickard","text":"implement GraphAr in pure Rust so CSR/CSC graph format can be stored as Iceberg rows (future spike: enables neighbor-retrieval without joins for dep_graph + callgraph when they grow large; current funnel is too small to need it)","refs":[],"ts":"2026-05-31T11:46:47.235749232Z"}
{"kind":"NodeStatusChanged","plan_id":"p-002","node_id":"n-006","status":"done","why":"iceberg_schema::funnel_events() with list<string> + list<struct{repo,sha}>","ts":"2026-05-31T11:47:09.682574774Z"}
{"kind":"NodeStatusChanged","plan_id":"p-002","node_id":"n-007","status":"done","why":"registered TABLE_FUNNEL_EVENTS in ensure_layout","ts":"2026-05-31T11:47:09.958893064Z"}
{"kind":"NodeStatusChanged","plan_id":"p-002","node_id":"n-008","status":"done","why":"append_event writes typed rows incl list<string> + list<struct{repo,sha}>","ts":"2026-05-31T11:54:21.156362996Z"}
{"kind":"NodeStatusChanged","plan_id":"p-002","node_id":"n-009","status":"done","why":"load_all_events scans + reconstructs all 7 Event variants; roundtrip test green","ts":"2026-05-31T11:54:21.434702617Z"}