New crates:
- colibri-zfs: Snapshot::list(), destroy(), destroy_all(), older_than()
Structured ZFS snapshot lifecycle without shell parsing
- colibri-pf: list_rules(), list_states()
Structured PF firewall state inspection
New MCP tools (6):
- colibri_zfs_list_snapshots: list snapshots for a dataset
- colibri_zfs_destroy_snapshot: destroy a snapshot by name
- colibri_pf_list_rules: active PF firewall rules
- colibri_pf_list_states: PF state table entries
- colibri_wiki_search: search wiki pages with line excerpts
- colibri_wiki_page: read wiki page content in full
Tool count: 12 → 18
- task_costs: add screenshot_uuid TEXT column + migration
- daemon push_cost_to_mother: read COLIBRI_TASK_SCREENSHOT_UUID
env var, attach to payload if set
- colibri-mcp-ssh report-task-cost: INSERT screenshot_uuid
via NULLIF, accepts missing key gracefully
Sets up the cross-reference between cost rows and tmux-screenshot
captures. No breaking change — UUID is optional everywhere.
Sam & Hermes
- colibri-mcp-ssh: subquery on hive_nodes to resolve
node_hostname to node_id for FK integrity
- wiki/mother-hive.md: new §Per-task cost aggregation
documents push vs pull, separate table rationale,
hostname-not-id decision
Sam & Hermes