Tom Boucher
dacc23137a
feat(3347): opt-in auto-update of knowledge graph after main HEAD advances
...
Closes #3347
Config:
- Add graphify.auto_update (default false) to manifests:
sdk/shared/config-defaults.manifest.json, config-schema.manifest.json
Hook:
- hooks/gsd-graphify-update.sh — PostToolUse Bash matcher
- Gates: tool_name=Bash, HEAD-advancing git op, CI=unset, in git repo,
current branch == default branch (git.base_branch override or main/
master/trunk fallback), graphify.enabled && graphify.auto_update both
true, graphify on PATH, no live PID lock
- Writes .planning/graphs/.last-build-status.json with status=running
synchronously, then detaches hooks/lib/gsd-graphify-rebuild.sh
- hooks/lib/gsd-graphify-rebuild.sh — detached rebuild runner
- PID-lock acquire + trap-on-exit cleanup
- graphify update . then cp graphify-out/* → .planning/graphs/
- Status file rewritten to status=ok|failed with exit_code, duration_ms,
head_at_build
- Portable detach (subshell + disown, no setsid dependency)
Installer:
- bin/install.js: register hook as PostToolUse Bash matcher (5s timeout)
- Add to gsdHooks uninstall list and expectedShHooks warning list
Planner / researcher status surface (issue #3347 reviewer must-have AC):
- agents/gsd-planner.md and agents/gsd-phase-researcher.md
load_graph_context steps now read .last-build-status.json and surface:
running → "rebuild in flight"; failed → "auto-rebuild FAILED at {ts},
context is from prior build"; ok with stale head_at_build → "HEAD has
advanced since last build"
Settings:
- get-shit-done/workflows/settings.md adds "Graph auto-update" question
with No-Recommended default; bullets and update_config block updated
Inventory:
- docs/INVENTORY.md hook count 12 → 13 with new row
- docs/INVENTORY-MANIFEST.json regenerated
Tests:
- tests/feat-3347-graphify-auto-update-config.test.cjs (8 tests):
isValidConfigKey accepts graphify.auto_update, CANONICAL_CONFIG_DEFAULTS
default false, config-set round-trip, sibling key preservation
- tests/feat-3347-graphify-auto-update-hook.test.cjs (18 tests):
all bail paths (non-Bash, non-HEAD-advancing, enabled=false,
auto_update=false, CI=true, non-default-branch, missing graphify bin,
live-PID lock), dispatch path with mock graphify bin (sync running
status + detached transition to ok/failed), stale-PID lock, all five
HEAD-advancing command matchers, git.base_branch override
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com >
2026-05-15 11:59:43 -04:00
..
2026-05-14 15:46:35 -04:00
2026-05-06 21:55:45 -04:00
2026-05-14 07:46:56 -04:00
2026-05-06 21:51:38 -04:00
2026-05-06 11:56:27 -04:00
2026-05-06 11:59:53 -04:00
2026-05-06 21:51:32 -04:00
2026-05-06 21:51:29 -04:00
2026-05-13 21:19:47 -04:00
2026-05-09 11:46:40 -04:00
2026-05-09 11:39:31 -04:00
2026-05-09 11:46:28 -04:00
2026-05-09 11:47:15 -04:00
2026-05-09 14:21:42 -04:00
2026-05-14 10:43:09 -04:00
2026-05-15 11:59:43 -04:00
2026-05-11 21:13:07 -04:00
2026-05-12 20:15:43 -04:00
2026-05-14 08:28:11 -04:00
2026-05-14 07:47:18 -04:00
2026-05-14 09:56:36 -04:00
2026-05-14 07:52:51 -04:00
2026-05-14 17:22:34 -04:00
2026-05-14 23:17:38 -04:00
2026-05-15 09:16:41 -04:00
2026-05-15 08:31:19 -04:00
2026-05-15 09:36:47 -04:00
2026-05-05 15:36:45 -04:00
2026-05-06 15:41:37 -04:00
2026-05-03 18:11:38 -04:00
2026-05-08 09:06:37 -04:00
2026-05-03 08:20:05 -04:00
2026-05-03 15:29:34 -04:00
2026-05-08 08:40:53 -04:00
2026-05-03 16:31:48 -04:00
2026-05-12 21:20:54 -04:00
2026-05-06 23:35:16 -04:00
2026-05-02 00:29:43 -04:00
2026-05-08 23:53:27 -04:00
2026-05-01 21:13:25 -04:00
2026-05-11 23:01:34 -04:00
2026-05-01 22:37:48 -04:00
2026-05-13 22:27:15 -04:00
2026-05-10 14:44:23 -05:00
2026-05-02 11:45:30 -04:00
2026-05-02 11:45:36 -04:00
2026-05-11 15:32:21 -04:00
2026-05-11 15:27:44 -04:00
2026-05-03 15:57:01 -04:00
2026-05-11 21:12:29 -04:00
2026-05-02 09:38:34 -04:00
2026-05-15 10:14:37 -04:00
2026-05-13 14:10:15 -04:00
2026-05-14 12:09:55 -04:00
2026-05-03 07:33:27 -04:00
2026-05-02 14:26:35 -04:00
2026-05-05 19:40:33 -04:00
2026-05-09 19:27:36 -04:00
2026-05-01 18:12:20 -04:00
2026-05-13 14:11:02 -04:00
2026-05-12 18:16:36 -04:00
2026-05-13 12:45:16 -04:00
2026-05-13 12:45:16 -04:00
2026-05-08 10:25:59 -04:00
2026-05-09 23:29:11 -04:00
2026-05-04 23:30:35 -04:00
2026-05-04 23:28:20 -04:00
2026-05-04 23:28:52 -04:00
2026-05-05 15:02:03 -04:00
2026-05-04 23:29:45 -04:00
2026-05-04 23:27:38 -04:00
2026-05-05 15:02:23 -04:00
2026-05-05 15:02:26 -04:00
2026-05-05 15:02:19 -04:00
2026-05-05 15:02:34 -04:00
2026-05-05 15:02:11 -04:00
2026-05-05 15:02:30 -04:00
2026-05-05 15:02:07 -04:00
2026-05-05 15:02:15 -04:00
2026-05-05 15:01:59 -04:00
2026-05-05 15:02:38 -04:00
2026-05-05 18:53:35 -04:00
2026-05-05 18:34:42 -04:00
2026-05-06 21:51:38 -04:00
2026-05-06 22:01:45 -04:00
2026-05-06 21:51:42 -04:00
2026-05-08 21:25:37 -04:00
2026-05-10 17:37:55 -04:00
2026-05-09 23:28:25 -04:00
2026-05-10 11:20:06 -04:00
2026-05-10 17:38:40 -04:00
2026-05-10 17:38:03 -04:00
2026-05-10 17:40:11 -04:00
2026-05-10 17:40:39 -04:00
2026-05-10 17:38:36 -04:00
2026-05-10 17:39:06 -04:00
2026-05-10 20:25:42 -04:00
2026-05-10 19:48:28 -04:00
2026-05-14 12:44:25 -04:00
2026-05-06 21:51:38 -04:00
2026-05-06 22:06:56 -04:00
2026-05-08 09:06:43 -04:00
2026-05-02 17:44:52 -04:00
2026-05-08 08:40:47 -04:00
2026-05-05 15:30:05 -03:00
2026-05-08 08:40:30 -04:00
2026-05-10 23:10:10 -04:00
2026-05-09 11:46:34 -04:00
2026-05-13 19:25:14 -04:00
2026-05-14 19:02:53 -04:00
2026-05-08 09:08:06 -04:00
2026-05-11 22:09:59 -04:00
2026-05-02 00:29:34 -04:00
2026-05-09 01:53:50 -04:00
2026-05-03 13:57:32 -04:00
2026-05-02 11:45:33 -04:00
2026-05-03 13:57:32 -04:00
2026-05-08 23:53:32 -04:00
2026-05-02 11:45:39 -04:00
2026-05-02 16:57:42 -04:00
2026-05-02 00:29:34 -04:00
2026-05-02 00:40:09 -04:00
2026-05-14 19:08:08 -04:00
2026-05-01 21:13:45 -04:00
2026-05-09 07:40:56 -04:00
2026-05-04 22:06:22 -04:00
2026-05-02 09:30:58 -04:00
2026-05-02 15:24:26 -04:00
2026-05-09 07:42:22 -04:00
2026-05-02 00:17:45 -04:00
2026-05-02 00:29:31 -04:00
2026-05-01 20:01:04 -04:00
2026-05-03 13:57:32 -04:00
2026-05-10 22:24:47 -04:00
2026-05-06 21:51:38 -04:00
2026-05-06 21:51:38 -04:00
2026-05-11 15:27:35 -04:00
2026-05-08 08:40:24 -04:00
2026-05-09 00:15:04 -04:00
2026-05-13 13:54:30 -04:00
2026-05-03 13:57:32 -04:00
2026-05-05 13:19:10 -04:00
2026-05-13 19:34:53 -04:00
2026-05-09 00:25:05 -04:00
2026-05-15 08:25:06 -04:00
2026-05-02 13:19:15 -04:00
2026-05-11 10:46:22 -04:00
2026-05-12 18:50:50 -04:00
2026-05-01 21:14:14 -04:00
2026-05-12 19:19:04 -04:00
2026-05-02 00:17:45 -04:00
2026-05-01 21:13:45 -04:00
2026-05-04 21:49:40 -04:00
2026-05-06 20:32:12 -04:00
2026-05-04 23:32:15 -04:00
2026-05-04 23:32:14 -04:00
2026-05-04 23:32:12 -04:00
2026-05-04 23:32:11 -04:00
2026-05-04 23:32:09 -04:00
2026-05-04 23:32:07 -04:00
2026-05-04 23:32:06 -04:00
2026-05-04 23:49:00 -04:00
2026-05-12 20:49:43 -04:00
2026-05-03 13:57:32 -04:00
2026-05-08 09:39:33 -04:00
2026-05-12 21:53:24 -04:00
2026-05-03 13:57:32 -04:00
2026-05-01 18:12:20 -04:00
2026-05-02 23:12:50 -04:00
2026-05-05 11:05:17 -04:00
2026-05-02 17:23:44 -04:00
2026-05-11 15:27:32 -04:00
2026-05-14 19:43:59 -04:00
2026-05-08 23:53:21 -04:00
2026-05-13 20:46:02 -04:00
2026-05-13 19:34:23 -04:00
2026-05-13 17:12:53 -04:00
2026-05-13 18:33:32 -04:00
2026-05-08 08:40:36 -04:00
2026-05-09 02:03:57 -04:00
2026-05-02 00:29:43 -04:00
2026-05-12 18:50:35 -04:00
2026-05-01 19:50:10 -04:00
2026-05-13 19:24:07 -04:00
2026-05-09 07:40:17 -04:00
2026-05-03 14:30:27 -04:00
2026-05-12 19:02:18 -04:00
2026-05-10 23:26:45 -04:00
2026-05-08 09:26:35 -04:00
2026-05-03 13:57:32 -04:00
2026-05-09 11:39:24 -04:00
2026-05-09 23:28:52 -04:00
2026-05-08 08:40:41 -04:00
2026-05-11 15:27:40 -04:00
2026-05-09 13:54:06 -04:00
2026-05-09 11:39:15 -04:00
2026-05-14 19:44:01 -04:00
2026-05-06 12:44:48 -04:00
2026-05-09 00:14:54 -04:00
2026-05-13 19:25:33 -04:00
2026-05-09 13:35:57 -04:00
2026-05-04 21:49:38 -04:00
2026-05-02 09:27:23 -04:00
2026-05-02 16:33:16 -04:00
2026-05-10 11:19:50 -04:00
2026-05-11 10:02:02 -04:00
2026-05-06 20:53:57 -04:00
2026-05-06 15:21:29 -04:00
2026-05-12 18:50:19 -04:00
2026-05-06 15:21:24 -04:00
2026-05-09 23:28:10 -04:00
2026-05-09 07:32:31 -04:00
2026-05-02 00:29:45 -04:00
2026-05-02 00:29:31 -04:00
2026-05-06 15:21:30 -04:00
2026-05-13 21:20:08 -04:00
2026-05-02 00:40:09 -04:00
2026-05-01 19:50:10 -04:00
2026-05-12 17:32:50 -04:00