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>
76 lines
2.6 KiB
JSON
76 lines
2.6 KiB
JSON
{
|
|
"_comment": "Canonical CONFIG_DEFAULTS for the Configuration Module. Nested shape is canonical. CJS flat projection (branching_strategy, sub_repos, etc.) is handled by consumers at the boundary. Security keys (security_enforcement, security_asvs_level, security_block_on) and post_planning_gaps live in workflow.* as their canonical location. resolve_model_ids, context_window, phase_naming are CJS-originated top-level keys included here. brave_search, firecrawl, exa_search default to false in the manifest; at runtime buildNewProjectConfig detects API keys. The plan_checker (CJS flat) → workflow.plan_check (canonical nested) divergence is resolved: canonical name is workflow.plan_check. _auto_chain_active is a runtime-state field included for completeness.",
|
|
"model_profile": "balanced",
|
|
"commit_docs": true,
|
|
"parallelization": true,
|
|
"search_gitignored": false,
|
|
"brave_search": false,
|
|
"firecrawl": false,
|
|
"exa_search": false,
|
|
"resolve_model_ids": false,
|
|
"context_window": 200000,
|
|
"phase_naming": "sequential",
|
|
"project_code": null,
|
|
"mode": "interactive",
|
|
"claude_md_path": "./CLAUDE.md",
|
|
"git": {
|
|
"branching_strategy": "none",
|
|
"create_tag": true,
|
|
"base_branch": null,
|
|
"phase_branch_template": "gsd/phase-{phase}-{slug}",
|
|
"milestone_branch_template": "gsd/{milestone}-{slug}",
|
|
"quick_branch_template": null
|
|
},
|
|
"workflow": {
|
|
"research": true,
|
|
"plan_check": true,
|
|
"verifier": true,
|
|
"nyquist_validation": true,
|
|
"ai_integration_phase": true,
|
|
"tdd_mode": false,
|
|
"human_verify_mode": "end-of-phase",
|
|
"auto_advance": false,
|
|
"_auto_chain_active": false,
|
|
"node_repair": true,
|
|
"node_repair_budget": 2,
|
|
"ui_phase": true,
|
|
"ui_safety_gate": true,
|
|
"text_mode": false,
|
|
"research_before_questions": false,
|
|
"discuss_mode": "discuss",
|
|
"skip_discuss": false,
|
|
"max_discuss_passes": 3,
|
|
"subagent_timeout": 300000,
|
|
"context_coverage_gate": true,
|
|
"code_review": true,
|
|
"code_review_depth": "standard",
|
|
"code_review_command": null,
|
|
"pattern_mapper": true,
|
|
"plan_bounce": false,
|
|
"plan_bounce_script": null,
|
|
"plan_bounce_passes": 2,
|
|
"auto_prune_state": false,
|
|
"post_planning_gaps": true,
|
|
"security_enforcement": true,
|
|
"security_asvs_level": 1,
|
|
"security_block_on": "high"
|
|
},
|
|
"planning": {
|
|
"commit_docs": true,
|
|
"search_gitignored": false,
|
|
"sub_repos": [],
|
|
"granularity": "standard"
|
|
},
|
|
"hooks": {
|
|
"context_warnings": true,
|
|
"workflow_guard": false
|
|
},
|
|
"ship": {
|
|
"pr_body_sections": []
|
|
},
|
|
"graphify": {
|
|
"auto_update": false
|
|
},
|
|
"agent_skills": {}
|
|
}
|