@wazir-dev/cli 1.1.0 → 1.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (138) hide show
  1. package/CHANGELOG.md +74 -10
  2. package/README.md +15 -15
  3. package/assets/demo.cast +47 -0
  4. package/assets/demo.gif +0 -0
  5. package/docs/anti-patterns/AP-23-skipping-enabled-workflows.md +28 -0
  6. package/docs/anti-patterns/AP-24-clarifier-deciding-scope.md +34 -0
  7. package/docs/concepts/architecture.md +1 -1
  8. package/docs/concepts/roles-and-workflows.md +2 -0
  9. package/docs/concepts/why-wazir.md +59 -0
  10. package/docs/decisions/2026-03-19-deferred-items.md +564 -0
  11. package/docs/decisions/2026-03-19-enhancement-decisions.md +300 -0
  12. package/docs/readmes/INDEX.md +21 -5
  13. package/docs/readmes/features/expertise/README.md +2 -2
  14. package/docs/readmes/features/exports/README.md +2 -2
  15. package/docs/readmes/features/hooks/pre-compact-summary.md +1 -1
  16. package/docs/readmes/features/schemas/README.md +3 -0
  17. package/docs/readmes/features/skills/README.md +17 -0
  18. package/docs/readmes/features/skills/clarifier.md +5 -0
  19. package/docs/readmes/features/skills/claude-cli.md +5 -0
  20. package/docs/readmes/features/skills/codex-cli.md +5 -0
  21. package/docs/readmes/features/skills/dispatching-parallel-agents.md +5 -0
  22. package/docs/readmes/features/skills/executing-plans.md +5 -0
  23. package/docs/readmes/features/skills/executor.md +5 -0
  24. package/docs/readmes/features/skills/finishing-a-development-branch.md +5 -0
  25. package/docs/readmes/features/skills/gemini-cli.md +5 -0
  26. package/docs/readmes/features/skills/humanize.md +5 -0
  27. package/docs/readmes/features/skills/init-pipeline.md +5 -0
  28. package/docs/readmes/features/skills/receiving-code-review.md +5 -0
  29. package/docs/readmes/features/skills/requesting-code-review.md +5 -0
  30. package/docs/readmes/features/skills/reviewer.md +5 -0
  31. package/docs/readmes/features/skills/subagent-driven-development.md +5 -0
  32. package/docs/readmes/features/skills/using-git-worktrees.md +5 -0
  33. package/docs/readmes/features/skills/wazir.md +5 -0
  34. package/docs/readmes/features/skills/writing-skills.md +5 -0
  35. package/docs/readmes/features/workflows/prepare-next.md +1 -1
  36. package/docs/reference/configuration-reference.md +47 -6
  37. package/docs/reference/hooks.md +1 -0
  38. package/docs/reference/launch-checklist.md +4 -4
  39. package/docs/reference/review-loop-pattern.md +119 -9
  40. package/docs/reference/roles-reference.md +1 -0
  41. package/docs/reference/skill-tiers.md +147 -0
  42. package/docs/reference/tooling-cli.md +3 -1
  43. package/docs/truth-claims.yaml +12 -0
  44. package/expertise/antipatterns/process/ai-coding-antipatterns.md +214 -1
  45. package/exports/hosts/claude/.claude/commands/plan-review.md +3 -1
  46. package/exports/hosts/claude/.claude/commands/verify.md +30 -1
  47. package/exports/hosts/claude/.claude/settings.json +9 -0
  48. package/exports/hosts/claude/CLAUDE.md +1 -1
  49. package/exports/hosts/claude/export.manifest.json +6 -4
  50. package/exports/hosts/claude/host-package.json +3 -1
  51. package/exports/hosts/codex/AGENTS.md +1 -1
  52. package/exports/hosts/codex/export.manifest.json +6 -4
  53. package/exports/hosts/codex/host-package.json +3 -1
  54. package/exports/hosts/cursor/.cursor/hooks.json +4 -0
  55. package/exports/hosts/cursor/.cursor/rules/wazir-core.mdc +1 -1
  56. package/exports/hosts/cursor/export.manifest.json +6 -4
  57. package/exports/hosts/cursor/host-package.json +3 -1
  58. package/exports/hosts/gemini/GEMINI.md +1 -1
  59. package/exports/hosts/gemini/export.manifest.json +6 -4
  60. package/exports/hosts/gemini/host-package.json +3 -1
  61. package/hooks/context-mode-router +191 -0
  62. package/hooks/definitions/context_mode_router.yaml +19 -0
  63. package/hooks/hooks.json +31 -6
  64. package/hooks/protected-path-write-guard +8 -0
  65. package/hooks/routing-matrix.json +45 -0
  66. package/hooks/session-start +62 -1
  67. package/llms-full.txt +937 -134
  68. package/package.json +2 -4
  69. package/schemas/hook.schema.json +2 -1
  70. package/schemas/phase-report.schema.json +89 -0
  71. package/schemas/usage.schema.json +25 -1
  72. package/schemas/wazir-manifest.schema.json +19 -0
  73. package/skills/brainstorming/SKILL.md +32 -157
  74. package/skills/clarifier/SKILL.md +289 -111
  75. package/skills/claude-cli/SKILL.md +320 -0
  76. package/skills/codex-cli/SKILL.md +260 -0
  77. package/skills/debugging/SKILL.md +13 -0
  78. package/skills/design/SKILL.md +13 -0
  79. package/skills/dispatching-parallel-agents/SKILL.md +13 -0
  80. package/skills/executing-plans/SKILL.md +13 -0
  81. package/skills/executor/SKILL.md +139 -19
  82. package/skills/finishing-a-development-branch/SKILL.md +13 -0
  83. package/skills/gemini-cli/SKILL.md +260 -0
  84. package/skills/humanize/SKILL.md +13 -0
  85. package/skills/init-pipeline/SKILL.md +72 -164
  86. package/skills/prepare-next/SKILL.md +81 -10
  87. package/skills/receiving-code-review/SKILL.md +13 -0
  88. package/skills/requesting-code-review/SKILL.md +13 -0
  89. package/skills/reviewer/SKILL.md +369 -24
  90. package/skills/run-audit/SKILL.md +13 -0
  91. package/skills/scan-project/SKILL.md +13 -0
  92. package/skills/self-audit/SKILL.md +217 -16
  93. package/skills/skill-research/SKILL.md +188 -0
  94. package/skills/subagent-driven-development/SKILL.md +13 -0
  95. package/skills/subagent-driven-development/code-quality-reviewer-prompt.md +2 -0
  96. package/skills/subagent-driven-development/implementer-prompt.md +8 -0
  97. package/skills/subagent-driven-development/spec-reviewer-prompt.md +7 -0
  98. package/skills/tdd/SKILL.md +13 -0
  99. package/skills/using-git-worktrees/SKILL.md +13 -0
  100. package/skills/using-skills/SKILL.md +13 -0
  101. package/skills/verification/SKILL.md +54 -3
  102. package/skills/wazir/SKILL.md +464 -381
  103. package/skills/writing-plans/SKILL.md +14 -1
  104. package/skills/writing-skills/SKILL.md +13 -0
  105. package/templates/artifacts/implementation-plan.md +3 -0
  106. package/templates/artifacts/tasks-template.md +133 -0
  107. package/templates/examples/phase-report.example.json +48 -0
  108. package/tooling/src/adapters/composition-engine.js +256 -0
  109. package/tooling/src/adapters/model-router.js +84 -0
  110. package/tooling/src/capture/command.js +41 -2
  111. package/tooling/src/capture/run-config.js +3 -1
  112. package/tooling/src/capture/store.js +56 -0
  113. package/tooling/src/capture/usage.js +106 -0
  114. package/tooling/src/capture/user-input.js +66 -0
  115. package/tooling/src/checks/ac-matrix.js +256 -0
  116. package/tooling/src/checks/command-registry.js +12 -0
  117. package/tooling/src/checks/docs-truth.js +1 -1
  118. package/tooling/src/checks/security-sensitivity.js +69 -0
  119. package/tooling/src/checks/skills.js +111 -0
  120. package/tooling/src/cli.js +31 -20
  121. package/tooling/src/commands/stats.js +161 -0
  122. package/tooling/src/commands/validate.js +5 -1
  123. package/tooling/src/export/compiler.js +33 -37
  124. package/tooling/src/gating/agent.js +145 -0
  125. package/tooling/src/guards/phase-prerequisite-guard.js +185 -0
  126. package/tooling/src/hooks/routing-logic.js +69 -0
  127. package/tooling/src/init/auto-detect.js +258 -0
  128. package/tooling/src/init/command.js +38 -170
  129. package/tooling/src/input/scanner.js +46 -0
  130. package/tooling/src/reports/command.js +103 -0
  131. package/tooling/src/reports/phase-report.js +323 -0
  132. package/tooling/src/state/command.js +160 -0
  133. package/tooling/src/state/db.js +287 -0
  134. package/tooling/src/status/command.js +58 -1
  135. package/tooling/src/verify/proof-collector.js +299 -0
  136. package/wazir.manifest.yaml +26 -14
  137. package/workflows/plan-review.md +3 -1
  138. package/workflows/verify.md +30 -1
@@ -3,7 +3,7 @@
3
3
  > AI coding agents produce code that compiles, passes superficial review, and reads authoritatively -- yet harbors systematic defects that human-written code rarely exhibits. These anti-patterns arise from the fundamental mechanics of next-token prediction operating without ground truth, persistent memory, or genuine understanding. A 2026 CodeRabbit analysis of 470 open-source repositories found AI-generated code contains 1.7x more bugs than human code, with 75% more logic errors and 57% more security findings per pull request. A USENIX Security 2025 study of 576,000 code samples found 20% of AI-recommended packages do not exist. This module catalogs the 20 most damaging patterns, grounded in documented incidents and empirical research.
4
4
 
5
5
  > **Domain:** Process -- AI-Assisted Development
6
- > **Anti-patterns covered:** 20
6
+ > **Anti-patterns covered:** 22
7
7
  > **Highest severity:** Critical
8
8
  > **Primary audience:** AI agents performing self-evaluation; human reviewers auditing AI output
9
9
 
@@ -823,6 +823,215 @@ An AI coding agent should ask itself these questions before submitting generated
823
823
 
824
824
  15. **Continuity check:** After a session break, have I reviewed existing code for conventions before generating new code?
825
825
 
826
+ ### AP-21: Pipeline Phase Skipping
827
+
828
+ **Also known as:** Rationalized Bypass, "The Spec Is Clear Enough", Shortcut Execution
829
+ **Frequency:** Common
830
+ **Severity:** Critical
831
+ **Detection difficulty:** Low
832
+
833
+ **What it looks like:**
834
+
835
+ The agent receives a detailed briefing or spec and jumps directly to implementation, skipping the pipeline's clarification, specification, design, and planning phases. Typical rationalization: "The input is already detailed enough — I don't need to clarify further."
836
+
837
+ ```
838
+ User: /wazir Build a caching layer for the API
839
+ Agent: [reads detailed input] This is clear. Let me start implementing...
840
+ [spawns parallel agents for implementation]
841
+ [skips clarify → specify → design → plan entirely]
842
+ ```
843
+
844
+ **Why AI agents do it:**
845
+
846
+ When the input appears complete, the agent's next-token prediction favors the most "productive" action: writing code. The pipeline phases (clarify, specify, design, plan) feel redundant when the input already describes what to build. The agent lacks the meta-awareness that the pipeline exists precisely to catch what the input does NOT say — unstated assumptions, missing edge cases, architectural trade-offs, and scope boundaries. Skipping phases is the single most damaging process failure because it invalidates every downstream quality gate.
847
+
848
+ **Detection signals:**
849
+
850
+ - Implementation starts without `clarification.md`, `spec-hardened.md`, `design.md`, or `execution-plan.md` artifacts in the run directory
851
+ - Agent jumps from input scanning to code writing without user checkpoints
852
+ - Rationalization language in conversation: "this is already clear", "the spec is detailed enough", "we can skip clarification"
853
+ - `wazir capture event --phase executor` returns exit 44 (phase prerequisite gate failed)
854
+ - No `phase_exit` events for clarifier phase in `events.ndjson`
855
+
856
+ **Root cause:**
857
+
858
+ No enforcement mechanism between pipeline phases. The agent can read the pipeline skill and choose to interpret it loosely. Without hard gates (file-existence checks, CLI validation), the pipeline is advisory, not mandatory.
859
+
860
+ **Remediation:**
861
+
862
+ 1. **Skill-level hard gates** — each phase skill contains a prerequisite check section that lists required artifacts and instructs the agent to STOP if any are missing
863
+ 2. **CLI-level validation** — `wazir capture event --phase executor` validates that prior phases completed before allowing `phase_enter`
864
+ 3. **Anti-rationalization instruction** — skill text explicitly names and blocks the rationalization pattern: "Do NOT skip phases because the input looks clear enough"
865
+
866
+ **Related:** Wazir pipeline enforcement (item #18), `skills/executor/SKILL.md` Phase Prerequisites section, `tooling/src/guards/phase-prerequisite-guard.js`
867
+
868
+ ---
869
+
870
+ ### AP-22: Autonomous Scope Reduction
871
+
872
+ **Also known as:** Silent Tiering, Unilateral Deferral, Scope Halving
873
+ **Frequency:** Common (observed in real pipeline runs)
874
+ **Severity:** Critical
875
+ **Detection difficulty:** Moderate
876
+
877
+ **What it looks like:**
878
+
879
+ The AI agent autonomously reduces the user's requested scope by tiering, deferring, or deprioritizing items without explicit user approval. The user asks for 10 items; the agent delivers 5 and calls the rest "future work."
880
+
881
+ **Why AI agents do it:**
882
+
883
+ Agent optimizes for completion over coverage. Large input overwhelms the context, and the agent triages by perceived difficulty. The agent confuses "prioritization suggestion" with "scope decision." No hard gate prevents the reduction.
884
+
885
+ **What goes wrong:**
886
+
887
+ User loses trust — they asked for X, got X/2. Repeated runs required to cover what should have been one run. Agent appears to make product decisions above its authority.
888
+
889
+ **Detection signals:**
890
+
891
+ - Input has N items, execution plan has fewer than N tasks
892
+ - Words like "deferred", "future tier", "out of scope for this run" appear without user approval
893
+ - Post-run review reveals missing deliverables
894
+
895
+ **The fix:**
896
+
897
+ 1. **Hard gate:** `items_in_plan >= items_in_input` enforced by scope coverage guard
898
+ 2. **Clarifier check:** Count input items vs plan items before presenting plan
899
+ 3. **Explicit approval required:** Agent can SUGGEST prioritization but CANNOT decide it
900
+ 4. **Anti-rationalization language:** "The input looks detailed enough to skip some items" is NOT valid reasoning
901
+
902
+ **Example:**
903
+
904
+ Bad:
905
+ ```
906
+ Input: "Implement items 1-10"
907
+ Plan: "Tier 1 (this run): items 1-5. Tier 2 (future): items 6-10."
908
+ ```
909
+
910
+ Good:
911
+ ```
912
+ Input: "Implement items 1-10"
913
+ Plan: "10 tasks covering all 10 items. Suggested order: [...]"
914
+ ```
915
+
916
+ **Related:** CrewAI Task Guardrails (mandatory task completion enforcement), AP-21 (Pipeline Phase Skipping — related pattern of skipping required steps), `tooling/src/guards/phase-prerequisite-guard.js` (`evaluateScopeCoverageGuard`)
917
+
918
+ ---
919
+
920
+ ### AP-23: Stale Documentation Counts
921
+
922
+ **Also known as:** Count Drift, Number Rot, Metric Desync
923
+ **Frequency:** Very Common
924
+ **Severity:** Medium
925
+ **Detection difficulty:** Low (mechanical)
926
+
927
+ **What it looks like:**
928
+
929
+ Documentation claims "268 expertise modules" when the actual count is 315. README says "7 hooks" when 8 exist. Counts in multiple files diverge from each other and from reality. The numbers were correct when written but drifted as the project grew.
930
+
931
+ **Why AI agents do it:**
932
+
933
+ Agents update the source of truth (add a new hook, write new expertise modules) but do not grep for every downstream reference. Each file is edited in isolation. No automated check enforces that prose counts match filesystem reality.
934
+
935
+ **What goes wrong:**
936
+
937
+ Users see contradictory numbers across docs and lose trust. Reviewers waste time verifying which number is correct. Launch materials ship with wrong counts, creating a first impression of sloppiness.
938
+
939
+ **Detection signals:**
940
+
941
+ - `find expertise -name '*.md' | wc -l` disagrees with counts in README, architecture docs, and readmes
942
+ - `ls hooks/definitions/ | wc -l` disagrees with hook count claims
943
+ - Different files claim different counts for the same metric
944
+
945
+ **The fix:**
946
+
947
+ 1. **Self-audit loop** — run `wazir validate docs` which cross-references prose claims against filesystem counts
948
+ 2. **Single source of truth** — reference manifest counts programmatically where possible; avoid hardcoding counts in prose
949
+ 3. **Grep sweep on every addition** — when adding a new module, hook, or skill, grep for the old count and update all references
950
+ 4. **CI enforcement** — `wazir validate docs` in CI catches drift before merge
951
+
952
+ **Example:**
953
+
954
+ Bad:
955
+ ```
956
+ README.md: "268 expertise modules"
957
+ architecture.md: "268 curated knowledge modules"
958
+ expertise/README.md: "268 knowledge modules"
959
+ Actual count: 315
960
+ ```
961
+
962
+ Good:
963
+ ```
964
+ README.md: "315 expertise modules"
965
+ architecture.md: "315 curated knowledge modules"
966
+ expertise/README.md: "315 knowledge modules"
967
+ Actual count: 315
968
+ All references match.
969
+ ```
970
+
971
+ **Related:** AP-06 (Partial Updates — same root cause applied to code), `wazir validate docs`, self-audit skill
972
+
973
+ ---
974
+
975
+ ### AP-24: Silent Checkpoint Bypass
976
+
977
+ **Also known as:** Gate Ghosting, Approval Amnesia, Review Skipping
978
+ **Frequency:** Common
979
+ **Severity:** Critical
980
+ **Detection difficulty:** Moderate
981
+
982
+ **What it looks like:**
983
+
984
+ The agent reaches an approval gate (spec-challenge, plan-review, or final review) and proceeds without obtaining explicit reviewer approval. The gate exists in the workflow definition but the agent treats it as advisory, not blocking. Review artifacts are either missing or contain self-generated approvals.
985
+
986
+ **Why AI agents do it:**
987
+
988
+ The agent conflates "review" with "self-review." Without a hard external gate (different model, different session, or user confirmation), the agent reviews its own work and approves it. Optimism bias means self-review almost never rejects. The agent also optimizes for speed, and gates are the slowest part of the pipeline.
989
+
990
+ **What goes wrong:**
991
+
992
+ Spec errors propagate to implementation. Design flaws survive to production. The entire adversarial review structure becomes theater — gates exist on paper but provide no actual quality assurance. Bugs caught in final review could have been caught in spec-challenge at 10x lower cost.
993
+
994
+ **Detection signals:**
995
+
996
+ - Review pass files authored by the same agent that authored the reviewed artifact
997
+ - Approval granted on the first pass with zero findings
998
+ - Missing review artifacts in the run state directory
999
+ - `wazir capture loop-check` shows 0 review iterations for a gate phase
1000
+
1001
+ **The fix:**
1002
+
1003
+ 1. **External reviewer enforcement** — gate phases must invoke a different model or require user confirmation via `AskUserQuestion`
1004
+ 2. **Minimum findings threshold** — first-pass reviews that report zero findings trigger a warning; real adversarial review almost always finds something
1005
+ 3. **Artifact validation** — `wazir validate runtime` checks that review artifacts exist and were not authored by the same role as the reviewed artifact
1006
+ 4. **Loop cap guard** — `hooks/loop-cap-guard` tracks review iterations; zero iterations at a gate phase is a validation failure
1007
+
1008
+ **Example:**
1009
+
1010
+ Bad:
1011
+ ```
1012
+ # spec-challenge pass 1
1013
+ Reviewer: executor (same agent)
1014
+ Findings: 0
1015
+ Decision: APPROVED
1016
+ ```
1017
+
1018
+ Good:
1019
+ ```
1020
+ # spec-challenge pass 1
1021
+ Reviewer: codex-cli (external model)
1022
+ Findings: 3 (ambiguous acceptance criteria, missing edge case, unclear priority)
1023
+ Decision: REVISE
1024
+
1025
+ # spec-challenge pass 2
1026
+ Reviewer: codex-cli (external model)
1027
+ Findings: 0 (all 3 resolved)
1028
+ Decision: APPROVED
1029
+ ```
1030
+
1031
+ **Related:** AP-21 (Pipeline Phase Skipping — bypassing the gate entirely vs. rubber-stamping it), AP-08 (Test Theater — similar pattern of going through motions without rigor), `docs/reference/review-loop-pattern.md`, `hooks/loop-cap-guard`
1032
+
1033
+ ---
1034
+
826
1035
  ## Code Smell Quick Reference
827
1036
 
828
1037
  | Anti-Pattern | Severity | Frequency | Key Signal | First Action |
@@ -847,6 +1056,10 @@ An AI coding agent should ask itself these questions before submitting generated
847
1056
  | AP-18 Fake Progress | High | Common | Hardcoded return values | Ban pass/TODO in production |
848
1057
  | AP-19 Over-Mocking | High | Common | More mocks than assertions | Require integration tests |
849
1058
  | AP-20 Resumption Errors | High | Common | Mixed ID types across files | Architecture file in every session |
1059
+ | AP-21 Pipeline Phase Skipping | Critical | Common | Missing clarified/* artifacts | Enforce hard gates in skills + CLI |
1060
+ | AP-22 Autonomous Scope Reduction | Critical | Common | Plan has fewer tasks than input items | Scope coverage guard + user approval |
1061
+ | AP-23 Stale Documentation Counts | Medium | Very Common | Doc counts disagree with filesystem | Grep sweep + `wazir validate docs` |
1062
+ | AP-24 Silent Checkpoint Bypass | Critical | Common | Self-approved gate with 0 findings | External reviewer + minimum findings |
850
1063
 
851
1064
  ---
852
1065
 
@@ -39,7 +39,9 @@ On completing this phase, run:
39
39
 
40
40
  ## Loop Structure
41
41
 
42
- Follows the review loop pattern in `docs/reference/review-loop-pattern.md` with plan dimensions. The planner role resolves findings. Pass count determined by depth. No extension.
42
+ Follows the review loop pattern in `docs/reference/review-loop-pattern.md` with 8 plan dimensions (including Input Coverage). The planner role resolves findings. Pass count determined by depth. No extension.
43
+
44
+ **Input Coverage dimension:** The reviewer reads the original input/briefing, counts distinct items, and compares against tasks in the plan. If `tasks_in_plan < items_in_input`, this is a HIGH finding listing the missing items. This prevents silent scope reduction where 21 input items become 5 tasks.
43
45
 
44
46
  ## Failure Conditions
45
47
 
@@ -14,6 +14,16 @@ On entering this phase, run:
14
14
  - changed files
15
15
  - claimed outcomes
16
16
  - acceptance criteria
17
+ - project type (detected via `detectRunnableType(projectRoot)` → web | api | cli | library, from `tooling/src/verify/proof-collector.js`)
18
+
19
+ ## Process
20
+
21
+ 1. **Detect project type:** Run `detectRunnableType(projectRoot)` to determine verification strategy
22
+ 2. **Collect evidence:** Run `collectProof(taskSpec, runConfig)` with the detected type
23
+ 3. **For runnable output (web/api/cli):** Run the application and capture runtime evidence (build output, screenshots, curl responses, CLI output)
24
+ 4. **For non-runnable output (library/config/skills):** Run lint, format check, type check, and tests — all must pass
25
+ 5. **Save evidence:** Write to `.wazir/runs/<id>/artifacts/proof-<task>.json`
26
+ 6. **Validate:** Ensure every acceptance criterion has at least one evidence item mapped to it
17
27
 
18
28
  ## Primary Role
19
29
 
@@ -21,7 +31,11 @@ On entering this phase, run:
21
31
 
22
32
  ## Outputs
23
33
 
24
- - verification proof artifact
34
+ - verification proof artifact (produced by `collectProof` from `tooling/src/verify/proof-collector.js`)
35
+
36
+ ## Proof Collection
37
+
38
+ Use `detectRunnableType` to classify the project, then `collectProof` to gather evidence. The proof-collector runs type-appropriate commands (build, test, lint, type-check) using `execFileSync` and returns structured `{ type, evidence }`.
25
39
 
26
40
  ## Approval Gate
27
41
 
@@ -32,6 +46,19 @@ On entering this phase, run:
32
46
  On completing this phase, run:
33
47
  `wazir capture event --run <run-id> --event phase_exit --phase <phase-name> --status completed`
34
48
 
49
+ ## Proof of Implementation
50
+
51
+ The verifier detects whether the project output is runnable and collects appropriate evidence:
52
+
53
+ | Project Type | Detection | Evidence Collected |
54
+ |-------------|-----------|-------------------|
55
+ | `web` | next/vite/react-scripts in deps | Build output, Playwright screenshot (if available), curl response |
56
+ | `api` | express/fastify/hono in deps | curl endpoint responses with status codes |
57
+ | `cli` | `bin` field in package.json | `--help` output, test run with sample args |
58
+ | `library` | default (no runnable markers) | npm test, tsc, eslint, prettier — all must pass |
59
+
60
+ Evidence is saved to `.wazir/runs/<id>/artifacts/proof-<task>.json` using `collectProof()` from `tooling/src/verify/proof-collector.js`.
61
+
35
62
  ## Relationship to Review Loops
36
63
 
37
64
  Verification is invoked per-task during execution, not as a review loop. It produces deterministic proof, not adversarial findings.
@@ -39,3 +66,5 @@ Verification is invoked per-task during execution, not as a review loop. It prod
39
66
  ## Failure Conditions
40
67
 
41
68
  - stale or partial verification
69
+ - proof-collector reports `status: "fail"` for any evidence item
70
+ - runnable type detected but no evidence collected
@@ -9,6 +9,15 @@
9
9
  "command": "./hooks/protected-path-write-guard"
10
10
  }
11
11
  ]
12
+ },
13
+ {
14
+ "matcher": "Bash",
15
+ "hooks": [
16
+ {
17
+ "type": "command",
18
+ "command": "./hooks/context-mode-router"
19
+ }
20
+ ]
12
21
  }
13
22
  ],
14
23
  "SessionStart": [
@@ -6,7 +6,7 @@ This host package is generated from the canonical Wazir sources.
6
6
 
7
7
  - project: Wazir
8
8
  - hosts: claude, codex, gemini, cursor
9
- - phases: clarify, discover, specify, spec_challenge, author, design, design_review, plan, plan_review, execute, verify, review, learn, prepare_next
9
+ - phases: init, clarifier, executor, final_review
10
10
  - roles: clarifier, researcher, specifier, content-author, designer, planner, executor, verifier, reviewer, learner
11
11
  - protected paths: input, roles, workflows, schemas, exports/hosts
12
12
  - state root default: ~/.wazir/projects/{project_slug}
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "host": "claude",
3
3
  "source_hashes": {
4
- "wazir.manifest.yaml": "ae49e943639828932d5289f34f2994f1efb67df4f552f5bfabbb1c823b662e43",
4
+ "wazir.manifest.yaml": "f00776eb08ed3332b8f855001a2fd0b866cd0b81d009c6fbb316149c398c51ca",
5
5
  "roles/clarifier.md": "1e1b8a2c05f1070fdcef485963cfcbffff62c4b2703a8d73fe51ac52d056e573",
6
6
  "roles/content-author.md": "cc20b80bd70ab68b3239a9cf56bf1ffc2c06843d38afc6b190844b35a1d73c3e",
7
7
  "roles/designer.md": "76cff5bda82975cfb4074de71681e7c8ba284e2e49d0cc98f90208642fef74fc",
@@ -19,20 +19,22 @@
19
19
  "workflows/discover.md": "0696add486f739a46ed4c2b71b67bdda3ab9fea2d1395e662191282529ed21d2",
20
20
  "workflows/execute.md": "33428704476877b2c8cf34c6eda3a56d1fd71e8bbea0f05c122bb3da2c6475a6",
21
21
  "workflows/learn.md": "9b1955a00eb0ea47af08a3639c3cbc2f15b8eab6cc02127e829bc8c83b0a52b5",
22
- "workflows/plan-review.md": "8696c472cb4605a171fd4ac8a9c51b7cf337807c4881ed163515dc56e61fd818",
22
+ "workflows/plan-review.md": "1dfe76dfe4fd9c32409d508e47654ad3b985b5429bd4616adde719b19fd606ac",
23
23
  "workflows/plan.md": "fd52737159ab13688af8cbcb1c3fa224b1a9dda441b9ab337ab98cbfb5c68fa5",
24
24
  "workflows/prepare-next.md": "8769b692be6d9fddf3b3f36fee6888159fb9fb2a5c31360cdbc9402e0f43fc27",
25
25
  "workflows/review.md": "aaeaf7ab4515e325084a77e75e18b325295f8d16799f71f8b7cd0ec67c52c0d6",
26
26
  "workflows/run-audit.md": "e582f767967dc3fb6aaeb938ad1672e7bed18bf044055ce8c45c2114251b787a",
27
27
  "workflows/spec-challenge.md": "dc99137c28c49a6f8312924709afb6077754d128e90466dc911150ce15737897",
28
28
  "workflows/specify.md": "53b84e74871f6dbd93cae22a881cc5907e398b29501d0a1fa08c7ed69df705cb",
29
- "workflows/verify.md": "45f9c189520dfe9d24c0bc340a15e6a80c988fca1b84dc187627032a6dbaee16",
29
+ "workflows/verify.md": "4eff7b9b1c94b9a2c4a6f65cae076a3cd5a278a86430109b6033cd958e1e8ab8",
30
+ "hooks/definitions/context_mode_router.yaml": "a10dc927418bc130b447eb33faf0f45669ecd9c7917f56947ddd74850a4e0e37",
30
31
  "hooks/definitions/loop_cap_guard.yaml": "f0fd220e028ab6fad3d8fd650602884fe500ca4899eff6e428cf217af058618d",
31
32
  "hooks/definitions/post_tool_capture.yaml": "a773cd6e18972dee8eef3b7cb06fd1d319a71de4588897cebfbe643f6781a3b2",
32
33
  "hooks/definitions/pre_compact_summary.yaml": "daa0175d79f3e0127c5ce86a7a2f8df0be3f58b5c94fe749da715a17c7b2d04e",
33
34
  "hooks/definitions/pre_tool_capture_route.yaml": "3c2663380ff3cd09f09de5b96bcf6123266fa74d8a03dfb2d6fbe40a43fb13cf",
34
35
  "hooks/definitions/protected_path_write_guard.yaml": "6683d41778b823e2a4e606065597569aa04363f091e135e165de9732f1fc2171",
35
36
  "hooks/definitions/session_start.yaml": "9383fcf1f8304c87e57726478a461706c0fc73dc62bcc4d8661f2eeffa43a82d",
36
- "hooks/definitions/stop_handoff_harvest.yaml": "67a3c0a8bb7cb66b88e77dc79e748082e964d278c47935662c453922a846482b"
37
+ "hooks/definitions/stop_handoff_harvest.yaml": "67a3c0a8bb7cb66b88e77dc79e748082e964d278c47935662c453922a846482b",
38
+ "hooks/hooks.json": "f255345793951b5cf6f6d8c9a8b6a6ad2d3140023453410127a6f70d8e110c26"
37
39
  }
38
40
  }
@@ -27,13 +27,15 @@
27
27
  "workflows/spec-challenge.md",
28
28
  "workflows/specify.md",
29
29
  "workflows/verify.md",
30
+ "hooks/definitions/context_mode_router.yaml",
30
31
  "hooks/definitions/loop_cap_guard.yaml",
31
32
  "hooks/definitions/post_tool_capture.yaml",
32
33
  "hooks/definitions/pre_compact_summary.yaml",
33
34
  "hooks/definitions/pre_tool_capture_route.yaml",
34
35
  "hooks/definitions/protected_path_write_guard.yaml",
35
36
  "hooks/definitions/session_start.yaml",
36
- "hooks/definitions/stop_handoff_harvest.yaml"
37
+ "hooks/definitions/stop_handoff_harvest.yaml",
38
+ "hooks/hooks.json"
37
39
  ],
38
40
  "files": [
39
41
  ".claude/agents/clarifier.md",
@@ -6,7 +6,7 @@ This host package is generated from the canonical Wazir sources.
6
6
 
7
7
  - project: Wazir
8
8
  - hosts: claude, codex, gemini, cursor
9
- - phases: clarify, discover, specify, spec_challenge, author, design, design_review, plan, plan_review, execute, verify, review, learn, prepare_next
9
+ - phases: init, clarifier, executor, final_review
10
10
  - roles: clarifier, researcher, specifier, content-author, designer, planner, executor, verifier, reviewer, learner
11
11
  - protected paths: input, roles, workflows, schemas, exports/hosts
12
12
  - state root default: ~/.wazir/projects/{project_slug}
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "host": "codex",
3
3
  "source_hashes": {
4
- "wazir.manifest.yaml": "ae49e943639828932d5289f34f2994f1efb67df4f552f5bfabbb1c823b662e43",
4
+ "wazir.manifest.yaml": "f00776eb08ed3332b8f855001a2fd0b866cd0b81d009c6fbb316149c398c51ca",
5
5
  "roles/clarifier.md": "1e1b8a2c05f1070fdcef485963cfcbffff62c4b2703a8d73fe51ac52d056e573",
6
6
  "roles/content-author.md": "cc20b80bd70ab68b3239a9cf56bf1ffc2c06843d38afc6b190844b35a1d73c3e",
7
7
  "roles/designer.md": "76cff5bda82975cfb4074de71681e7c8ba284e2e49d0cc98f90208642fef74fc",
@@ -19,20 +19,22 @@
19
19
  "workflows/discover.md": "0696add486f739a46ed4c2b71b67bdda3ab9fea2d1395e662191282529ed21d2",
20
20
  "workflows/execute.md": "33428704476877b2c8cf34c6eda3a56d1fd71e8bbea0f05c122bb3da2c6475a6",
21
21
  "workflows/learn.md": "9b1955a00eb0ea47af08a3639c3cbc2f15b8eab6cc02127e829bc8c83b0a52b5",
22
- "workflows/plan-review.md": "8696c472cb4605a171fd4ac8a9c51b7cf337807c4881ed163515dc56e61fd818",
22
+ "workflows/plan-review.md": "1dfe76dfe4fd9c32409d508e47654ad3b985b5429bd4616adde719b19fd606ac",
23
23
  "workflows/plan.md": "fd52737159ab13688af8cbcb1c3fa224b1a9dda441b9ab337ab98cbfb5c68fa5",
24
24
  "workflows/prepare-next.md": "8769b692be6d9fddf3b3f36fee6888159fb9fb2a5c31360cdbc9402e0f43fc27",
25
25
  "workflows/review.md": "aaeaf7ab4515e325084a77e75e18b325295f8d16799f71f8b7cd0ec67c52c0d6",
26
26
  "workflows/run-audit.md": "e582f767967dc3fb6aaeb938ad1672e7bed18bf044055ce8c45c2114251b787a",
27
27
  "workflows/spec-challenge.md": "dc99137c28c49a6f8312924709afb6077754d128e90466dc911150ce15737897",
28
28
  "workflows/specify.md": "53b84e74871f6dbd93cae22a881cc5907e398b29501d0a1fa08c7ed69df705cb",
29
- "workflows/verify.md": "45f9c189520dfe9d24c0bc340a15e6a80c988fca1b84dc187627032a6dbaee16",
29
+ "workflows/verify.md": "4eff7b9b1c94b9a2c4a6f65cae076a3cd5a278a86430109b6033cd958e1e8ab8",
30
+ "hooks/definitions/context_mode_router.yaml": "a10dc927418bc130b447eb33faf0f45669ecd9c7917f56947ddd74850a4e0e37",
30
31
  "hooks/definitions/loop_cap_guard.yaml": "f0fd220e028ab6fad3d8fd650602884fe500ca4899eff6e428cf217af058618d",
31
32
  "hooks/definitions/post_tool_capture.yaml": "a773cd6e18972dee8eef3b7cb06fd1d319a71de4588897cebfbe643f6781a3b2",
32
33
  "hooks/definitions/pre_compact_summary.yaml": "daa0175d79f3e0127c5ce86a7a2f8df0be3f58b5c94fe749da715a17c7b2d04e",
33
34
  "hooks/definitions/pre_tool_capture_route.yaml": "3c2663380ff3cd09f09de5b96bcf6123266fa74d8a03dfb2d6fbe40a43fb13cf",
34
35
  "hooks/definitions/protected_path_write_guard.yaml": "6683d41778b823e2a4e606065597569aa04363f091e135e165de9732f1fc2171",
35
36
  "hooks/definitions/session_start.yaml": "9383fcf1f8304c87e57726478a461706c0fc73dc62bcc4d8661f2eeffa43a82d",
36
- "hooks/definitions/stop_handoff_harvest.yaml": "67a3c0a8bb7cb66b88e77dc79e748082e964d278c47935662c453922a846482b"
37
+ "hooks/definitions/stop_handoff_harvest.yaml": "67a3c0a8bb7cb66b88e77dc79e748082e964d278c47935662c453922a846482b",
38
+ "hooks/hooks.json": "f255345793951b5cf6f6d8c9a8b6a6ad2d3140023453410127a6f70d8e110c26"
37
39
  }
38
40
  }
@@ -27,13 +27,15 @@
27
27
  "workflows/spec-challenge.md",
28
28
  "workflows/specify.md",
29
29
  "workflows/verify.md",
30
+ "hooks/definitions/context_mode_router.yaml",
30
31
  "hooks/definitions/loop_cap_guard.yaml",
31
32
  "hooks/definitions/post_tool_capture.yaml",
32
33
  "hooks/definitions/pre_compact_summary.yaml",
33
34
  "hooks/definitions/pre_tool_capture_route.yaml",
34
35
  "hooks/definitions/protected_path_write_guard.yaml",
35
36
  "hooks/definitions/session_start.yaml",
36
- "hooks/definitions/stop_handoff_harvest.yaml"
37
+ "hooks/definitions/stop_handoff_harvest.yaml",
38
+ "hooks/hooks.json"
37
39
  ],
38
40
  "files": [
39
41
  "AGENTS.md"
@@ -8,6 +8,10 @@
8
8
  "name": "loop-cap-guard",
9
9
  "command": "./hooks/loop-cap-guard"
10
10
  },
11
+ {
12
+ "name": "context-mode-router",
13
+ "command": "./hooks/context-mode-router"
14
+ },
11
15
  {
12
16
  "name": "session-start",
13
17
  "command": "./hooks/session-start"
@@ -6,7 +6,7 @@ This host package is generated from the canonical Wazir sources.
6
6
 
7
7
  - project: Wazir
8
8
  - hosts: claude, codex, gemini, cursor
9
- - phases: clarify, discover, specify, spec_challenge, author, design, design_review, plan, plan_review, execute, verify, review, learn, prepare_next
9
+ - phases: init, clarifier, executor, final_review
10
10
  - roles: clarifier, researcher, specifier, content-author, designer, planner, executor, verifier, reviewer, learner
11
11
  - protected paths: input, roles, workflows, schemas, exports/hosts
12
12
  - state root default: ~/.wazir/projects/{project_slug}
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "host": "cursor",
3
3
  "source_hashes": {
4
- "wazir.manifest.yaml": "ae49e943639828932d5289f34f2994f1efb67df4f552f5bfabbb1c823b662e43",
4
+ "wazir.manifest.yaml": "f00776eb08ed3332b8f855001a2fd0b866cd0b81d009c6fbb316149c398c51ca",
5
5
  "roles/clarifier.md": "1e1b8a2c05f1070fdcef485963cfcbffff62c4b2703a8d73fe51ac52d056e573",
6
6
  "roles/content-author.md": "cc20b80bd70ab68b3239a9cf56bf1ffc2c06843d38afc6b190844b35a1d73c3e",
7
7
  "roles/designer.md": "76cff5bda82975cfb4074de71681e7c8ba284e2e49d0cc98f90208642fef74fc",
@@ -19,20 +19,22 @@
19
19
  "workflows/discover.md": "0696add486f739a46ed4c2b71b67bdda3ab9fea2d1395e662191282529ed21d2",
20
20
  "workflows/execute.md": "33428704476877b2c8cf34c6eda3a56d1fd71e8bbea0f05c122bb3da2c6475a6",
21
21
  "workflows/learn.md": "9b1955a00eb0ea47af08a3639c3cbc2f15b8eab6cc02127e829bc8c83b0a52b5",
22
- "workflows/plan-review.md": "8696c472cb4605a171fd4ac8a9c51b7cf337807c4881ed163515dc56e61fd818",
22
+ "workflows/plan-review.md": "1dfe76dfe4fd9c32409d508e47654ad3b985b5429bd4616adde719b19fd606ac",
23
23
  "workflows/plan.md": "fd52737159ab13688af8cbcb1c3fa224b1a9dda441b9ab337ab98cbfb5c68fa5",
24
24
  "workflows/prepare-next.md": "8769b692be6d9fddf3b3f36fee6888159fb9fb2a5c31360cdbc9402e0f43fc27",
25
25
  "workflows/review.md": "aaeaf7ab4515e325084a77e75e18b325295f8d16799f71f8b7cd0ec67c52c0d6",
26
26
  "workflows/run-audit.md": "e582f767967dc3fb6aaeb938ad1672e7bed18bf044055ce8c45c2114251b787a",
27
27
  "workflows/spec-challenge.md": "dc99137c28c49a6f8312924709afb6077754d128e90466dc911150ce15737897",
28
28
  "workflows/specify.md": "53b84e74871f6dbd93cae22a881cc5907e398b29501d0a1fa08c7ed69df705cb",
29
- "workflows/verify.md": "45f9c189520dfe9d24c0bc340a15e6a80c988fca1b84dc187627032a6dbaee16",
29
+ "workflows/verify.md": "4eff7b9b1c94b9a2c4a6f65cae076a3cd5a278a86430109b6033cd958e1e8ab8",
30
+ "hooks/definitions/context_mode_router.yaml": "a10dc927418bc130b447eb33faf0f45669ecd9c7917f56947ddd74850a4e0e37",
30
31
  "hooks/definitions/loop_cap_guard.yaml": "f0fd220e028ab6fad3d8fd650602884fe500ca4899eff6e428cf217af058618d",
31
32
  "hooks/definitions/post_tool_capture.yaml": "a773cd6e18972dee8eef3b7cb06fd1d319a71de4588897cebfbe643f6781a3b2",
32
33
  "hooks/definitions/pre_compact_summary.yaml": "daa0175d79f3e0127c5ce86a7a2f8df0be3f58b5c94fe749da715a17c7b2d04e",
33
34
  "hooks/definitions/pre_tool_capture_route.yaml": "3c2663380ff3cd09f09de5b96bcf6123266fa74d8a03dfb2d6fbe40a43fb13cf",
34
35
  "hooks/definitions/protected_path_write_guard.yaml": "6683d41778b823e2a4e606065597569aa04363f091e135e165de9732f1fc2171",
35
36
  "hooks/definitions/session_start.yaml": "9383fcf1f8304c87e57726478a461706c0fc73dc62bcc4d8661f2eeffa43a82d",
36
- "hooks/definitions/stop_handoff_harvest.yaml": "67a3c0a8bb7cb66b88e77dc79e748082e964d278c47935662c453922a846482b"
37
+ "hooks/definitions/stop_handoff_harvest.yaml": "67a3c0a8bb7cb66b88e77dc79e748082e964d278c47935662c453922a846482b",
38
+ "hooks/hooks.json": "f255345793951b5cf6f6d8c9a8b6a6ad2d3140023453410127a6f70d8e110c26"
37
39
  }
38
40
  }
@@ -27,13 +27,15 @@
27
27
  "workflows/spec-challenge.md",
28
28
  "workflows/specify.md",
29
29
  "workflows/verify.md",
30
+ "hooks/definitions/context_mode_router.yaml",
30
31
  "hooks/definitions/loop_cap_guard.yaml",
31
32
  "hooks/definitions/post_tool_capture.yaml",
32
33
  "hooks/definitions/pre_compact_summary.yaml",
33
34
  "hooks/definitions/pre_tool_capture_route.yaml",
34
35
  "hooks/definitions/protected_path_write_guard.yaml",
35
36
  "hooks/definitions/session_start.yaml",
36
- "hooks/definitions/stop_handoff_harvest.yaml"
37
+ "hooks/definitions/stop_handoff_harvest.yaml",
38
+ "hooks/hooks.json"
37
39
  ],
38
40
  "files": [
39
41
  ".cursor/hooks.json",
@@ -6,7 +6,7 @@ This host package is generated from the canonical Wazir sources.
6
6
 
7
7
  - project: Wazir
8
8
  - hosts: claude, codex, gemini, cursor
9
- - phases: clarify, discover, specify, spec_challenge, author, design, design_review, plan, plan_review, execute, verify, review, learn, prepare_next
9
+ - phases: init, clarifier, executor, final_review
10
10
  - roles: clarifier, researcher, specifier, content-author, designer, planner, executor, verifier, reviewer, learner
11
11
  - protected paths: input, roles, workflows, schemas, exports/hosts
12
12
  - state root default: ~/.wazir/projects/{project_slug}
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "host": "gemini",
3
3
  "source_hashes": {
4
- "wazir.manifest.yaml": "ae49e943639828932d5289f34f2994f1efb67df4f552f5bfabbb1c823b662e43",
4
+ "wazir.manifest.yaml": "f00776eb08ed3332b8f855001a2fd0b866cd0b81d009c6fbb316149c398c51ca",
5
5
  "roles/clarifier.md": "1e1b8a2c05f1070fdcef485963cfcbffff62c4b2703a8d73fe51ac52d056e573",
6
6
  "roles/content-author.md": "cc20b80bd70ab68b3239a9cf56bf1ffc2c06843d38afc6b190844b35a1d73c3e",
7
7
  "roles/designer.md": "76cff5bda82975cfb4074de71681e7c8ba284e2e49d0cc98f90208642fef74fc",
@@ -19,20 +19,22 @@
19
19
  "workflows/discover.md": "0696add486f739a46ed4c2b71b67bdda3ab9fea2d1395e662191282529ed21d2",
20
20
  "workflows/execute.md": "33428704476877b2c8cf34c6eda3a56d1fd71e8bbea0f05c122bb3da2c6475a6",
21
21
  "workflows/learn.md": "9b1955a00eb0ea47af08a3639c3cbc2f15b8eab6cc02127e829bc8c83b0a52b5",
22
- "workflows/plan-review.md": "8696c472cb4605a171fd4ac8a9c51b7cf337807c4881ed163515dc56e61fd818",
22
+ "workflows/plan-review.md": "1dfe76dfe4fd9c32409d508e47654ad3b985b5429bd4616adde719b19fd606ac",
23
23
  "workflows/plan.md": "fd52737159ab13688af8cbcb1c3fa224b1a9dda441b9ab337ab98cbfb5c68fa5",
24
24
  "workflows/prepare-next.md": "8769b692be6d9fddf3b3f36fee6888159fb9fb2a5c31360cdbc9402e0f43fc27",
25
25
  "workflows/review.md": "aaeaf7ab4515e325084a77e75e18b325295f8d16799f71f8b7cd0ec67c52c0d6",
26
26
  "workflows/run-audit.md": "e582f767967dc3fb6aaeb938ad1672e7bed18bf044055ce8c45c2114251b787a",
27
27
  "workflows/spec-challenge.md": "dc99137c28c49a6f8312924709afb6077754d128e90466dc911150ce15737897",
28
28
  "workflows/specify.md": "53b84e74871f6dbd93cae22a881cc5907e398b29501d0a1fa08c7ed69df705cb",
29
- "workflows/verify.md": "45f9c189520dfe9d24c0bc340a15e6a80c988fca1b84dc187627032a6dbaee16",
29
+ "workflows/verify.md": "4eff7b9b1c94b9a2c4a6f65cae076a3cd5a278a86430109b6033cd958e1e8ab8",
30
+ "hooks/definitions/context_mode_router.yaml": "a10dc927418bc130b447eb33faf0f45669ecd9c7917f56947ddd74850a4e0e37",
30
31
  "hooks/definitions/loop_cap_guard.yaml": "f0fd220e028ab6fad3d8fd650602884fe500ca4899eff6e428cf217af058618d",
31
32
  "hooks/definitions/post_tool_capture.yaml": "a773cd6e18972dee8eef3b7cb06fd1d319a71de4588897cebfbe643f6781a3b2",
32
33
  "hooks/definitions/pre_compact_summary.yaml": "daa0175d79f3e0127c5ce86a7a2f8df0be3f58b5c94fe749da715a17c7b2d04e",
33
34
  "hooks/definitions/pre_tool_capture_route.yaml": "3c2663380ff3cd09f09de5b96bcf6123266fa74d8a03dfb2d6fbe40a43fb13cf",
34
35
  "hooks/definitions/protected_path_write_guard.yaml": "6683d41778b823e2a4e606065597569aa04363f091e135e165de9732f1fc2171",
35
36
  "hooks/definitions/session_start.yaml": "9383fcf1f8304c87e57726478a461706c0fc73dc62bcc4d8661f2eeffa43a82d",
36
- "hooks/definitions/stop_handoff_harvest.yaml": "67a3c0a8bb7cb66b88e77dc79e748082e964d278c47935662c453922a846482b"
37
+ "hooks/definitions/stop_handoff_harvest.yaml": "67a3c0a8bb7cb66b88e77dc79e748082e964d278c47935662c453922a846482b",
38
+ "hooks/hooks.json": "f255345793951b5cf6f6d8c9a8b6a6ad2d3140023453410127a6f70d8e110c26"
37
39
  }
38
40
  }
@@ -27,13 +27,15 @@
27
27
  "workflows/spec-challenge.md",
28
28
  "workflows/specify.md",
29
29
  "workflows/verify.md",
30
+ "hooks/definitions/context_mode_router.yaml",
30
31
  "hooks/definitions/loop_cap_guard.yaml",
31
32
  "hooks/definitions/post_tool_capture.yaml",
32
33
  "hooks/definitions/pre_compact_summary.yaml",
33
34
  "hooks/definitions/pre_tool_capture_route.yaml",
34
35
  "hooks/definitions/protected_path_write_guard.yaml",
35
36
  "hooks/definitions/session_start.yaml",
36
- "hooks/definitions/stop_handoff_harvest.yaml"
37
+ "hooks/definitions/stop_handoff_harvest.yaml",
38
+ "hooks/hooks.json"
37
39
  ],
38
40
  "files": [
39
41
  "GEMINI.md"