@pzy560117/codex-harness 0.1.3 → 0.1.5

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 (386) hide show
  1. package/README.md +164 -27
  2. package/bin/harness.js +7 -7
  3. package/lib/commands/doctor.js +12 -12
  4. package/lib/commands/init.js +105 -105
  5. package/lib/commands/run.js +22 -22
  6. package/lib/commands/verify.js +12 -12
  7. package/lib/main.js +62 -62
  8. package/lib/powershell/find-powershell.js +20 -20
  9. package/lib/powershell/invoke-script.js +34 -34
  10. package/lib/project/assert-initialized.js +20 -20
  11. package/lib/project/detect-project-root.js +5 -5
  12. package/lib/release/cache-layout.js +34 -34
  13. package/lib/release/download-release.js +25 -25
  14. package/lib/release/package-source-layout.js +13 -13
  15. package/lib/release/release-config.js +6 -6
  16. package/lib/release/release-manifest.js +76 -76
  17. package/lib/release/resolve-package-source.js +21 -21
  18. package/lib/release/resolve-version.js +26 -26
  19. package/lib/release/unpack-zip.js +25 -25
  20. package/lib/release/verify-sha256.js +16 -16
  21. package/package-source/AGENTS.md +48 -57
  22. package/package-source/PACKAGE.md +7 -7
  23. package/package-source/README.md +85 -81
  24. package/package-source/docs/codex-harness-engineering/templates/AGENTS.md +51 -0
  25. package/package-source/docs/codex-harness-engineering/templates/README.md +21 -20
  26. package/package-source/docs/codex-harness-engineering/templates/bootstrap-codex-harness.ps1 +144 -110
  27. package/package-source/docs/codex-harness-engineering/templates/ci/AGENTS.md +15 -0
  28. package/package-source/docs/codex-harness-engineering/templates/ci/github-action-codex-review.yml +110 -110
  29. package/package-source/docs/codex-harness-engineering/templates/config/AGENTS.md +19 -0
  30. package/package-source/docs/codex-harness-engineering/templates/config/agents/architect.toml +18 -17
  31. package/package-source/docs/codex-harness-engineering/templates/config/agents/backend-worker.toml +15 -14
  32. package/package-source/docs/codex-harness-engineering/templates/config/agents/docs-researcher.toml +13 -12
  33. package/package-source/docs/codex-harness-engineering/templates/config/agents/docs-worker.toml +16 -15
  34. package/package-source/docs/codex-harness-engineering/templates/config/agents/explorer.toml +15 -14
  35. package/package-source/docs/codex-harness-engineering/templates/config/agents/failure-triage.toml +19 -18
  36. package/package-source/docs/codex-harness-engineering/templates/config/agents/frontend-worker.toml +15 -14
  37. package/package-source/docs/codex-harness-engineering/templates/config/agents/harness-writer.toml +16 -15
  38. package/package-source/docs/codex-harness-engineering/templates/config/agents/planner.toml +16 -15
  39. package/package-source/docs/codex-harness-engineering/templates/config/agents/readonly-research.toml +14 -13
  40. package/package-source/docs/codex-harness-engineering/templates/config/agents/reviewer.toml +13 -12
  41. package/package-source/docs/codex-harness-engineering/templates/config/agents/security-reviewer.toml +16 -15
  42. package/package-source/docs/codex-harness-engineering/templates/config/agents/stage1-reviewer.toml +15 -14
  43. package/package-source/docs/codex-harness-engineering/templates/config/agents/stage2-reviewer.toml +16 -15
  44. package/package-source/docs/codex-harness-engineering/templates/config/agents/test-planner.toml +18 -17
  45. package/package-source/docs/codex-harness-engineering/templates/config/agents/test-runner.toml +15 -14
  46. package/package-source/docs/codex-harness-engineering/templates/config/agents/visual-reviewer.toml +16 -15
  47. package/package-source/docs/codex-harness-engineering/templates/config/codex-agent-roles.md +24 -24
  48. package/package-source/docs/codex-harness-engineering/templates/config/codex-config.toml +12 -12
  49. package/package-source/docs/codex-harness-engineering/templates/config/codex-readme.md +6 -6
  50. package/package-source/docs/codex-harness-engineering/templates/config/env-check.ps1 +44 -40
  51. package/package-source/docs/codex-harness-engineering/templates/config/env.example +13 -12
  52. package/package-source/docs/codex-harness-engineering/templates/config/global-AGENTS.md +40 -40
  53. package/package-source/docs/codex-harness-engineering/templates/config/global-config.toml +19 -19
  54. package/package-source/docs/codex-harness-engineering/templates/config/rules/agents.md +118 -115
  55. package/package-source/docs/codex-harness-engineering/templates/config/rules/coding-style.md +57 -74
  56. package/package-source/docs/codex-harness-engineering/templates/config/rules/constitution.md +4 -4
  57. package/package-source/docs/codex-harness-engineering/templates/config/rules/git.rules +41 -41
  58. package/package-source/docs/codex-harness-engineering/templates/config/rules/harness.rules +29 -29
  59. package/package-source/docs/codex-harness-engineering/templates/config/rules/safety.rules +35 -35
  60. package/package-source/docs/codex-harness-engineering/templates/context/AGENTS.md +19 -0
  61. package/package-source/docs/codex-harness-engineering/templates/context/API_MAP.md +18 -0
  62. package/package-source/docs/codex-harness-engineering/templates/context/CHANGELOG_AI.md +11 -0
  63. package/package-source/docs/codex-harness-engineering/templates/context/CURRENT_TASK.md +114 -0
  64. package/package-source/docs/codex-harness-engineering/templates/context/DB_SCHEMA.md +14 -0
  65. package/package-source/docs/codex-harness-engineering/templates/context/DECISIONS.md +12 -0
  66. package/package-source/docs/codex-harness-engineering/templates/context/KNOWN_ISSUES.md +12 -0
  67. package/package-source/docs/codex-harness-engineering/templates/context/PROJECT_CONTEXT.md +14 -0
  68. package/package-source/docs/codex-harness-engineering/templates/context/architecture-brief.md +58 -58
  69. package/package-source/docs/codex-harness-engineering/templates/context/dev-plan.md +89 -83
  70. package/package-source/docs/codex-harness-engineering/templates/context/feature-pack.md +101 -101
  71. package/package-source/docs/codex-harness-engineering/templates/context/repo-map.md +102 -78
  72. package/package-source/docs/codex-harness-engineering/templates/context/service-dependency-matrix.yaml +25 -25
  73. package/package-source/docs/codex-harness-engineering/templates/contracts/AGENTS.md +17 -0
  74. package/package-source/docs/codex-harness-engineering/templates/contracts/README.md +24 -16
  75. package/package-source/docs/codex-harness-engineering/templates/contracts/openapi.yaml +182 -182
  76. package/package-source/docs/codex-harness-engineering/templates/contracts/orval.config.ts +20 -20
  77. package/package-source/docs/codex-harness-engineering/templates/contracts/prism-usage.md +41 -34
  78. package/package-source/docs/codex-harness-engineering/templates/design/AGENTS.md +21 -0
  79. package/package-source/docs/codex-harness-engineering/templates/design/ai-image-brief.md +122 -122
  80. package/package-source/docs/codex-harness-engineering/templates/design/component-map.md +45 -31
  81. package/package-source/docs/codex-harness-engineering/templates/design/design-brief.md +183 -178
  82. package/package-source/docs/codex-harness-engineering/templates/design/design-tokens.json +88 -88
  83. package/package-source/docs/codex-harness-engineering/templates/design/frontend-architecture.md +164 -146
  84. package/package-source/docs/codex-harness-engineering/templates/design/image-to-frontend-spec.md +64 -52
  85. package/package-source/docs/codex-harness-engineering/templates/design/screen-states.md +157 -122
  86. package/package-source/docs/codex-harness-engineering/templates/design/visual-parity-review.md +21 -21
  87. package/package-source/docs/codex-harness-engineering/templates/docs/AGENTS.md +19 -0
  88. package/package-source/docs/codex-harness-engineering/templates/docs/architecture-constraints.md +97 -83
  89. package/package-source/docs/codex-harness-engineering/templates/docs/code-semantics-and-navigation.md +54 -0
  90. package/package-source/docs/codex-harness-engineering/templates/docs/code-style-and-naming.md +116 -0
  91. package/package-source/docs/codex-harness-engineering/templates/docs/directory-structure-template.md +88 -0
  92. package/package-source/docs/codex-harness-engineering/templates/docs/env-and-deployment-template.md +60 -0
  93. package/package-source/docs/codex-harness-engineering/templates/docs/frontend-quality-rules.md +165 -138
  94. package/package-source/docs/codex-harness-engineering/templates/docs/governance-auto-repair.md +82 -80
  95. package/package-source/docs/codex-harness-engineering/templates/docs/harness-architecture.md +78 -78
  96. package/package-source/docs/codex-harness-engineering/templates/docs/install-manifest-governance.md +16 -16
  97. package/package-source/docs/codex-harness-engineering/templates/docs/knowledge-architecture.md +241 -219
  98. package/package-source/docs/codex-harness-engineering/templates/docs/knowledge-import.md +108 -108
  99. package/package-source/docs/codex-harness-engineering/templates/docs/knowledge-lint.md +98 -98
  100. package/package-source/docs/codex-harness-engineering/templates/docs/mcp-knowledge-governance.md +24 -0
  101. package/package-source/docs/codex-harness-engineering/templates/docs/new-project-checklist.md +7 -7
  102. package/package-source/docs/codex-harness-engineering/templates/docs/new-project-usage.md +107 -43
  103. package/package-source/docs/codex-harness-engineering/templates/docs/project-agents-template.md +211 -154
  104. package/package-source/docs/codex-harness-engineering/templates/docs/prompt-knowledge-integration.md +100 -89
  105. package/package-source/docs/codex-harness-engineering/templates/docs/regression-rules.md +47 -45
  106. package/package-source/docs/codex-harness-engineering/templates/docs/requirement-prep-kit/README.md +3 -3
  107. package/package-source/docs/codex-harness-engineering/templates/docs/rule-governance.md +98 -98
  108. package/package-source/docs/codex-harness-engineering/templates/docs/service-dependency-matrix.md +70 -55
  109. package/package-source/docs/codex-harness-engineering/templates/docs/task-session-strategy.md +133 -116
  110. package/package-source/docs/codex-harness-engineering/templates/docs/team-knowledge-sync.md +187 -187
  111. package/package-source/docs/codex-harness-engineering/templates/docs/trace-format.md +44 -32
  112. package/package-source/docs/codex-harness-engineering/templates/governance/AGENTS.md +18 -0
  113. package/package-source/docs/codex-harness-engineering/templates/governance/branch-protection-checklist.md +50 -50
  114. package/package-source/docs/codex-harness-engineering/templates/governance/feedback-evolution-loop.md +55 -55
  115. package/package-source/docs/codex-harness-engineering/templates/governance/retry-budget.yaml +30 -30
  116. package/package-source/docs/codex-harness-engineering/templates/governance/risk-levels.yaml +53 -53
  117. package/package-source/docs/codex-harness-engineering/templates/governance/sandbox-policy.md +13 -13
  118. package/package-source/docs/codex-harness-engineering/templates/hooks/AGENTS.md +15 -0
  119. package/package-source/docs/codex-harness-engineering/templates/hooks/hook-stop-verify.ps1 +171 -118
  120. package/package-source/docs/codex-harness-engineering/templates/hooks/hooks.json +40 -40
  121. package/package-source/docs/codex-harness-engineering/templates/knowledge/AGENTS.md +16 -0
  122. package/package-source/docs/codex-harness-engineering/templates/knowledge/catalog.md +6 -6
  123. package/package-source/docs/codex-harness-engineering/templates/knowledge/decisions/DECISION-HARNESS-001.md +39 -39
  124. package/package-source/docs/codex-harness-engineering/templates/knowledge/guidelines/GUIDELINE-RULES-001.md +30 -30
  125. package/package-source/docs/codex-harness-engineering/templates/knowledge/knowledge-catalog.md +41 -41
  126. package/package-source/docs/codex-harness-engineering/templates/package-assets/.specify/templates/plan-template.md +252 -252
  127. package/package-source/docs/codex-harness-engineering/templates/package-assets/.specify/templates/spec-template.md +145 -145
  128. package/package-source/docs/codex-harness-engineering/templates/package-assets/.specify/templates/tasks-template.md +47 -47
  129. package/package-source/docs/codex-harness-engineering/templates/package-assets/AGENTS.md +19 -0
  130. package/package-source/docs/codex-harness-engineering/templates/package-assets/docs/codex-harness-engineering/AGENTS.md +25 -0
  131. package/package-source/docs/codex-harness-engineering/templates/package-assets/docs/codex-harness-engineering/README.md +118 -42
  132. package/package-source/docs/codex-harness-engineering/templates/package-assets/docs/codex-harness-engineering/START-HERE.md +66 -53
  133. package/package-source/docs/codex-harness-engineering/templates/package-assets/docs/codex-harness-engineering/agent-ecosystem-practices.md +140 -140
  134. package/package-source/docs/codex-harness-engineering/templates/package-assets/docs/codex-harness-engineering/best-practices.md +9 -9
  135. package/package-source/docs/codex-harness-engineering/templates/package-assets/docs/codex-harness-engineering/codex-global-rules-example.md +48 -48
  136. package/package-source/docs/codex-harness-engineering/templates/package-assets/docs/codex-harness-engineering/examples/AGENTS.md +14 -0
  137. package/package-source/docs/codex-harness-engineering/templates/package-assets/docs/codex-harness-engineering/examples/goal-templates.md +380 -380
  138. package/package-source/docs/codex-harness-engineering/templates/package-assets/docs/codex-harness-engineering/examples/ticket-filter-demo/AGENTS.md +14 -0
  139. package/package-source/docs/codex-harness-engineering/templates/package-assets/docs/codex-harness-engineering/examples/ticket-filter-demo/README.md +64 -64
  140. package/package-source/docs/codex-harness-engineering/templates/package-assets/docs/codex-harness-engineering/examples/ticket-filter-demo/contracts/openapi.yaml +25 -25
  141. package/package-source/docs/codex-harness-engineering/templates/package-assets/docs/codex-harness-engineering/examples/ticket-filter-demo/contracts/orval.config.ts +20 -20
  142. package/package-source/docs/codex-harness-engineering/templates/package-assets/docs/codex-harness-engineering/examples/ticket-filter-demo/docs/design/ai-image-brief.md +44 -44
  143. package/package-source/docs/codex-harness-engineering/templates/package-assets/docs/codex-harness-engineering/examples/ticket-filter-demo/docs/design/component-map.md +17 -17
  144. package/package-source/docs/codex-harness-engineering/templates/package-assets/docs/codex-harness-engineering/examples/ticket-filter-demo/docs/design/design-brief.md +58 -58
  145. package/package-source/docs/codex-harness-engineering/templates/package-assets/docs/codex-harness-engineering/examples/ticket-filter-demo/docs/design/frontend-architecture.md +106 -106
  146. package/package-source/docs/codex-harness-engineering/templates/package-assets/docs/codex-harness-engineering/examples/ticket-filter-demo/docs/design/image-to-frontend-spec.md +72 -72
  147. package/package-source/docs/codex-harness-engineering/templates/package-assets/docs/codex-harness-engineering/examples/ticket-filter-demo/docs/design/screen-states.md +25 -25
  148. package/package-source/docs/codex-harness-engineering/templates/package-assets/docs/codex-harness-engineering/examples/ticket-filter-demo/docs/design/ui-image-review.md +38 -38
  149. package/package-source/docs/codex-harness-engineering/templates/package-assets/docs/codex-harness-engineering/examples/ticket-filter-demo/docs/product/difficulty-research.md +39 -39
  150. package/package-source/docs/codex-harness-engineering/templates/package-assets/docs/codex-harness-engineering/examples/ticket-filter-demo/docs/product/page-inventory.md +5 -5
  151. package/package-source/docs/codex-harness-engineering/templates/package-assets/docs/codex-harness-engineering/examples/ticket-filter-demo/docs/product/prd-lite.md +41 -41
  152. package/package-source/docs/codex-harness-engineering/templates/package-assets/docs/codex-harness-engineering/examples/ticket-filter-demo/docs/product/requirement-interface-matrix.md +32 -32
  153. package/package-source/docs/codex-harness-engineering/templates/package-assets/docs/codex-harness-engineering/examples/ticket-filter-demo/docs/product/state-matrix.yaml +14 -14
  154. package/package-source/docs/codex-harness-engineering/templates/package-assets/docs/codex-harness-engineering/examples/ticket-filter-demo/packages/api-client/generated/model/Ticket.ts +6 -6
  155. package/package-source/docs/codex-harness-engineering/templates/package-assets/docs/codex-harness-engineering/examples/ticket-filter-demo/packages/api-client/generated/ticket-api.ts +35 -35
  156. package/package-source/docs/codex-harness-engineering/templates/package-assets/docs/codex-harness-engineering/examples/ticket-filter-demo/packages/api-client/http-client.ts +8 -8
  157. package/package-source/docs/codex-harness-engineering/templates/package-assets/docs/codex-harness-engineering/examples/ticket-filter-demo/packages/ui/TicketFilterBar.tsx +72 -72
  158. package/package-source/docs/codex-harness-engineering/templates/package-assets/docs/codex-harness-engineering/examples/ticket-filter-demo/plans/features/ticket-filter.dev-plan.md +48 -48
  159. package/package-source/docs/codex-harness-engineering/templates/package-assets/docs/codex-harness-engineering/examples/ticket-filter-demo/progress.txt +1 -1
  160. package/package-source/docs/codex-harness-engineering/templates/package-assets/docs/codex-harness-engineering/examples/ticket-filter-demo/stories/TicketFilterBar.stories.tsx +33 -33
  161. package/package-source/docs/codex-harness-engineering/templates/package-assets/docs/codex-harness-engineering/examples/ticket-filter-demo/task.json +54 -54
  162. package/package-source/docs/codex-harness-engineering/templates/package-assets/docs/codex-harness-engineering/examples/ticket-filter-demo/verify.ps1 +42 -42
  163. package/package-source/docs/codex-harness-engineering/templates/package-assets/docs/codex-harness-engineering/global-rules-and-bootstrap.md +157 -157
  164. package/package-source/docs/codex-harness-engineering/templates/package-assets/docs/codex-harness-engineering/goal-harness-integration-guide.md +364 -364
  165. package/package-source/docs/codex-harness-engineering/templates/package-assets/docs/codex-harness-engineering/implementation-flow.md +7 -5
  166. package/package-source/docs/codex-harness-engineering/templates/package-assets/docs/codex-harness-engineering/implementation-guide.md +25 -25
  167. package/package-source/docs/codex-harness-engineering/templates/package-assets/docs/codex-harness-engineering/knowledge-surface-map.md +186 -0
  168. package/package-source/docs/codex-harness-engineering/templates/package-assets/docs/codex-harness-engineering/mode-matrix.md +57 -57
  169. package/package-source/docs/codex-harness-engineering/templates/package-assets/docs/codex-harness-engineering/new-project-usage.md +176 -0
  170. package/package-source/docs/codex-harness-engineering/templates/package-assets/docs/codex-harness-engineering/project-agents-template.md +168 -154
  171. package/package-source/docs/codex-harness-engineering/templates/package-assets/docs/codex-harness-engineering/superpowers-codex-solo-builder-playbook.md +676 -676
  172. package/package-source/docs/codex-harness-engineering/templates/package-assets/docs/codex-harness-engineering/templates/AGENTS.md +22 -0
  173. package/package-source/docs/codex-harness-engineering/templates/package-assets/docs/codex-harness-engineering/templates/context/AGENTS.md +14 -0
  174. package/package-source/docs/codex-harness-engineering/templates/package-assets/docs/codex-harness-engineering/templates/context/API_MAP.md +18 -0
  175. package/package-source/docs/codex-harness-engineering/templates/package-assets/docs/codex-harness-engineering/templates/context/CURRENT_TASK.md +89 -0
  176. package/package-source/docs/codex-harness-engineering/templates/package-assets/docs/codex-harness-engineering/templates/context/dev-plan.md +166 -0
  177. package/package-source/docs/codex-harness-engineering/templates/package-assets/docs/codex-harness-engineering/templates/contracts/AGENTS.md +14 -0
  178. package/package-source/docs/codex-harness-engineering/templates/package-assets/docs/codex-harness-engineering/templates/contracts/README.md +24 -0
  179. package/package-source/docs/codex-harness-engineering/templates/package-assets/docs/codex-harness-engineering/templates/contracts/prism-usage.md +41 -0
  180. package/package-source/docs/codex-harness-engineering/templates/package-assets/docs/codex-harness-engineering/templates/design/AGENTS.md +14 -0
  181. package/package-source/docs/codex-harness-engineering/templates/package-assets/docs/codex-harness-engineering/templates/design/component-map.md +45 -31
  182. package/package-source/docs/codex-harness-engineering/templates/package-assets/docs/codex-harness-engineering/templates/design/design-brief.md +183 -178
  183. package/package-source/docs/codex-harness-engineering/templates/package-assets/docs/codex-harness-engineering/templates/design/design-tokens.json +88 -88
  184. package/package-source/docs/codex-harness-engineering/templates/package-assets/docs/codex-harness-engineering/templates/design/frontend-architecture.md +164 -146
  185. package/package-source/docs/codex-harness-engineering/templates/package-assets/docs/codex-harness-engineering/templates/design/image-to-frontend-spec.md +64 -52
  186. package/package-source/docs/codex-harness-engineering/templates/package-assets/docs/codex-harness-engineering/templates/design/screen-states.md +157 -122
  187. package/package-source/docs/codex-harness-engineering/templates/package-assets/docs/codex-harness-engineering/templates/design/visual-parity-review.md +21 -21
  188. package/package-source/docs/codex-harness-engineering/templates/package-assets/docs/codex-harness-engineering/templates/docs/AGENTS.md +14 -0
  189. package/package-source/docs/codex-harness-engineering/templates/package-assets/docs/codex-harness-engineering/templates/docs/env-and-deployment-template.md +60 -0
  190. package/package-source/docs/codex-harness-engineering/templates/package-assets/docs/codex-harness-engineering/templates/docs/frontend-quality-rules.md +161 -138
  191. package/package-source/docs/codex-harness-engineering/templates/package-assets/docs/codex-harness-engineering/templates/docs/regression-rules.md +47 -0
  192. package/package-source/docs/codex-harness-engineering/templates/package-assets/docs/codex-harness-engineering/templates/docs/trace-format.md +86 -0
  193. package/package-source/docs/codex-harness-engineering/templates/package-assets/docs/codex-harness-engineering/templates/product/AGENTS.md +14 -0
  194. package/package-source/docs/codex-harness-engineering/templates/package-assets/docs/codex-harness-engineering/templates/product/prd-lite.md +166 -0
  195. package/package-source/docs/codex-harness-engineering/templates/package-assets/docs/codex-harness-engineering/templates/product/state-matrix.yaml +116 -0
  196. package/package-source/docs/codex-harness-engineering/templates/package-assets/docs/codex-harness-engineering/templates/prompts/AGENTS.md +14 -0
  197. package/package-source/docs/codex-harness-engineering/templates/package-assets/docs/codex-harness-engineering/templates/prompts/implement-one-task.md +150 -0
  198. package/package-source/docs/codex-harness-engineering/templates/package-assets/docs/codex-harness-engineering/templates/prompts/repair-one-finding.md +70 -0
  199. package/package-source/docs/codex-harness-engineering/templates/package-assets/docs/codex-harness-engineering/templates/spec/11-security-design.md +43 -0
  200. package/package-source/docs/codex-harness-engineering/templates/package-assets/docs/codex-harness-engineering/templates/spec/AGENTS.md +14 -0
  201. package/package-source/docs/codex-harness-engineering/templates/package-assets/docs/codex-harness-engineering/templates/testing/AGENTS.md +14 -0
  202. package/package-source/docs/codex-harness-engineering/templates/package-assets/docs/codex-harness-engineering/templates/testing/EVIDENCE_PROTOCOL.md +54 -0
  203. package/package-source/docs/codex-harness-engineering/templates/package-assets/docs/codex-harness-engineering/templates/testing/NATURAL_LANGUAGE_TEST_CASES.md +690 -0
  204. package/package-source/docs/codex-harness-engineering/templates/package-assets/docs/codex-harness-engineering/templates/testing/REGRESSION_PLAN.md +28 -0
  205. package/package-source/docs/codex-harness-engineering/templates/package-assets/docs/codex-harness-engineering/templates/testing/TEST_STRATEGY.md +98 -0
  206. package/package-source/docs/codex-harness-engineering/templates/package-assets/docs/codex-harness-engineering/templates/testing/TRACEABILITY_MATRIX.md +23 -0
  207. package/package-source/docs/codex-harness-engineering/templates/package-assets/docs/codex-harness-engineering/templates/testing/verify-matrix.md +51 -0
  208. package/package-source/docs/codex-harness-engineering/templates/package-assets/docs/ecc-zh-CN/README.md +10 -10
  209. package/package-source/docs/codex-harness-engineering/templates/package-assets/docs/ecc-zh-CN/commands/e2e.md +30 -30
  210. package/package-source/docs/codex-harness-engineering/templates/package-assets/docs/external-knowledge/README.md +60 -60
  211. package/package-source/docs/codex-harness-engineering/templates/package-assets/docs/external-knowledge/app/Mobile_App_Production_Readiness_Framework_/347/247/273/345/212/250/347/253/257/345/205/250/345/271/263/345/217/260/347/224/237/344/272/247/345/217/257/344/270/212/347/272/277/350/247/204/350/214/203.md +2457 -2457
  212. package/package-source/docs/codex-harness-engineering/templates/package-assets/docs/external-knowledge/app/catalog.md +33 -33
  213. package/package-source/docs/codex-harness-engineering/templates/package-assets/docs/external-knowledge/architecture.md +358 -358
  214. package/package-source/docs/codex-harness-engineering/templates/package-assets/docs/external-knowledge/common/AI_Coding_Production_Control_Framework_AI/345/206/231/345/256/214/347/232/204/344/273/243/347/240/201/345/246/202/344/275/225/344/270/215/345/244/261/346/216/247.md +2055 -2055
  215. package/package-source/docs/codex-harness-engineering/templates/package-assets/docs/external-knowledge/common/catalog.md +34 -34
  216. package/package-source/docs/codex-harness-engineering/templates/package-assets/docs/external-knowledge/initial-content.md +296 -296
  217. package/package-source/docs/codex-harness-engineering/templates/package-assets/docs/external-knowledge/integration-roadmap.md +221 -221
  218. package/package-source/docs/codex-harness-engineering/templates/package-assets/docs/harness/architecture-constraints.md +95 -83
  219. package/package-source/docs/codex-harness-engineering/templates/package-assets/docs/harness/code-semantics-and-navigation.md +17 -0
  220. package/package-source/docs/codex-harness-engineering/templates/package-assets/docs/harness/code-style-and-naming.md +116 -0
  221. package/package-source/docs/codex-harness-engineering/templates/package-assets/docs/harness/frontend-quality-rules.md +138 -138
  222. package/package-source/docs/codex-harness-engineering/templates/package-assets/docs/harness/governance-auto-repair.md +82 -80
  223. package/package-source/docs/codex-harness-engineering/templates/package-assets/docs/harness/mcp-knowledge-governance.md +24 -0
  224. package/package-source/docs/codex-harness-engineering/templates/package-assets/docs/harness/service-dependency-matrix.md +55 -55
  225. package/package-source/docs/codex-harness-engineering/templates/package-assets/docs/harness/speckit-requirements-gate.md +124 -124
  226. package/package-source/docs/codex-harness-engineering/templates/package-assets/root/PACKAGE.md +7 -7
  227. package/package-source/docs/codex-harness-engineering/templates/package-assets/root/README.md +52 -52
  228. package/package-source/docs/codex-harness-engineering/templates/package-assets/root/install-agent-here.ps1 +57 -57
  229. package/package-source/docs/codex-harness-engineering/templates/package-assets/rules/agents.md +115 -115
  230. package/package-source/docs/codex-harness-engineering/templates/package-assets/rules/coding-style.md +57 -74
  231. package/package-source/docs/codex-harness-engineering/templates/package-assets/rules/constitution.md +4 -4
  232. package/package-source/docs/codex-harness-engineering/templates/package-assets/rules/git.rules +41 -41
  233. package/package-source/docs/codex-harness-engineering/templates/package-assets/rules/harness.rules +29 -29
  234. package/package-source/docs/codex-harness-engineering/templates/package-assets/rules/safety.rules +35 -35
  235. package/package-source/docs/codex-harness-engineering/templates/package-assets/scripts/ai-workflow/check-ai-sync-drift.ps1 +205 -205
  236. package/package-source/docs/codex-harness-engineering/templates/package-assets/scripts/ai-workflow/sync-ai-config-to-targets.ps1 +826 -826
  237. package/package-source/docs/codex-harness-engineering/templates/package-assets/scripts/ai-workflow/sync-targets.example.json +35 -35
  238. package/package-source/docs/codex-harness-engineering/templates/package-assets/scripts/harness/harness-governance-check.ps1 +864 -366
  239. package/package-source/docs/codex-harness-engineering/templates/package-assets/skills/HOW_TO_USE_SKILLS.md +79 -79
  240. package/package-source/docs/codex-harness-engineering/templates/package-assets/skills/academic-mermaid-diagrams/SKILL.md +172 -172
  241. package/package-source/docs/codex-harness-engineering/templates/package-assets/skills/ai-config-git-sync/SKILL.md +152 -152
  242. package/package-source/docs/codex-harness-engineering/templates/package-assets/skills/ai-config-git-sync/references/command-recipes.md +92 -92
  243. package/package-source/docs/codex-harness-engineering/templates/package-assets/skills/auto-commit/SKILL.md +324 -322
  244. package/package-source/docs/codex-harness-engineering/templates/package-assets/skills/better-icons/SKILL.md +3 -3
  245. package/package-source/docs/codex-harness-engineering/templates/package-assets/skills/claude-openrouter-clash-debug/SKILL.md +100 -100
  246. package/package-source/docs/codex-harness-engineering/templates/package-assets/skills/claude-openrouter-clash-debug/references/windows-openrouter-clash-playbook.md +94 -94
  247. package/package-source/docs/codex-harness-engineering/templates/package-assets/skills/claude-openrouter-clash-debug/scripts/diagnose-openrouter-route.ps1 +282 -282
  248. package/package-source/docs/codex-harness-engineering/templates/package-assets/skills/claude-openrouter-clash-debug/scripts/ensure-openrouter-rule.ps1 +101 -101
  249. package/package-source/docs/codex-harness-engineering/templates/package-assets/skills/fixing-metadata/SKILL.md +6 -6
  250. package/package-source/docs/codex-harness-engineering/templates/package-assets/skills/frontend-design/SKILL.md +37 -37
  251. package/package-source/docs/codex-harness-engineering/templates/package-assets/skills/git-xianyu-analyzer/SKILL.md +3 -3
  252. package/package-source/docs/codex-harness-engineering/templates/package-assets/skills/harness-surface-sync/SKILL.md +204 -188
  253. package/package-source/docs/codex-harness-engineering/templates/package-assets/skills/harness-surface-sync/references/current-repo-sync-matrix.md +150 -110
  254. package/package-source/docs/codex-harness-engineering/templates/package-assets/skills/harness-surface-sync/references/stale-patterns.md +65 -65
  255. package/package-source/docs/codex-harness-engineering/templates/package-assets/skills/init-autopilot/SKILL.md +17 -15
  256. package/package-source/docs/codex-harness-engineering/templates/package-assets/skills/log-analysis-optimization/SKILL.md +5 -5
  257. package/package-source/docs/codex-harness-engineering/templates/package-assets/skills/prd-writer-skill/SKILL.md +28 -28
  258. package/package-source/docs/codex-harness-engineering/templates/package-assets/skills/qa-e2e-planner/SKILL.md +11 -11
  259. package/package-source/docs/codex-harness-engineering/templates/package-assets/skills/qa-e2e-runner/SKILL.md +6 -6
  260. package/package-source/docs/codex-harness-engineering/templates/package-assets/skills/qa-mock-cleaner/SKILL.md +4 -4
  261. package/package-source/docs/codex-harness-engineering/templates/package-assets/skills/qoder-codex-api-config/SKILL.md +67 -67
  262. package/package-source/docs/codex-harness-engineering/templates/package-assets/skills/qoder-codex-api-config/agents/openai.yaml +7 -7
  263. package/package-source/docs/codex-harness-engineering/templates/package-assets/skills/qoder-codex-api-config/scripts/configure-qoder-codex-api.ps1 +278 -278
  264. package/package-source/docs/codex-harness-engineering/templates/package-assets/skills/requirements-design-template/SKILL.md +87 -87
  265. package/package-source/docs/codex-harness-engineering/templates/package-assets/skills/skills-index.md +12 -12
  266. package/package-source/docs/codex-harness-engineering/templates/package-assets/skills/speckit-analyze/SKILL.md +34 -34
  267. package/package-source/docs/codex-harness-engineering/templates/package-assets/skills/speckit-checklist/SKILL.md +8 -8
  268. package/package-source/docs/codex-harness-engineering/templates/package-assets/skills/speckit-clarify/SKILL.md +28 -28
  269. package/package-source/docs/codex-harness-engineering/templates/package-assets/skills/speckit-e2e-tasks/SKILL.md +12 -12
  270. package/package-source/docs/codex-harness-engineering/templates/package-assets/skills/speckit-implement/SKILL.md +37 -37
  271. package/package-source/docs/codex-harness-engineering/templates/package-assets/skills/speckit-plan/SKILL.md +140 -138
  272. package/package-source/docs/codex-harness-engineering/templates/package-assets/skills/speckit-specify/SKILL.md +100 -100
  273. package/package-source/docs/codex-harness-engineering/templates/package-assets/skills/speckit-tasks/SKILL.md +86 -86
  274. package/package-source/docs/codex-harness-engineering/templates/package-assets/skills/speckit-verify/SKILL.md +144 -142
  275. package/package-source/docs/codex-harness-engineering/templates/package-assets/skills/sync-project-root-docs/SKILL.md +145 -143
  276. package/package-source/docs/codex-harness-engineering/templates/package-assets/skills/sync-project-root-docs/references/current-repo-notes.md +42 -41
  277. package/package-source/docs/codex-harness-engineering/templates/package-assets/skills/sync-project-root-docs/references/github-samples.md +33 -33
  278. package/package-source/docs/codex-harness-engineering/templates/package-assets/skills/sync-project-root-docs/scripts/collect-root-doc-facts.ps1 +174 -145
  279. package/package-source/docs/codex-harness-engineering/templates/package-assets/skills/thesis-writing/references/ai-integrity-and-originality.md +191 -191
  280. package/package-source/docs/codex-harness-engineering/templates/package-assets/skills/thesis-writing/references/citation-templates.md +99 -99
  281. package/package-source/docs/codex-harness-engineering/templates/package-assets/skills/thesis-writing/references/final-checklist.md +60 -60
  282. package/package-source/docs/codex-harness-engineering/templates/package-assets/skills/thesis-writing/references/photographer-booking-paper.md +85 -85
  283. package/package-source/docs/codex-harness-engineering/templates/package-assets/skills/thesis-writing/references/test-result-templates.md +22 -22
  284. package/package-source/docs/codex-harness-engineering/templates/package-assets/skills/thesis-writing/references/thesis-analysis-template.md +63 -63
  285. package/package-source/docs/codex-harness-engineering/templates/package-assets/skills/update-codemaps/SKILL.md +31 -31
  286. package/package-source/docs/codex-harness-engineering/templates/package-assets/workflows/README.md +15 -15
  287. package/package-source/docs/codex-harness-engineering/templates/package-assets/workflows/speckit.analyze.md +60 -60
  288. package/package-source/docs/codex-harness-engineering/templates/package-assets/workflows/speckit.checklist.md +8 -8
  289. package/package-source/docs/codex-harness-engineering/templates/package-assets/workflows/speckit.clarify.md +28 -28
  290. package/package-source/docs/codex-harness-engineering/templates/package-assets/workflows/speckit.e2e-testing.md +10 -10
  291. package/package-source/docs/codex-harness-engineering/templates/package-assets/workflows/speckit.implement.md +56 -56
  292. package/package-source/docs/codex-harness-engineering/templates/package-assets/workflows/speckit.plan.md +137 -134
  293. package/package-source/docs/codex-harness-engineering/templates/package-assets/workflows/speckit.specify.md +100 -100
  294. package/package-source/docs/codex-harness-engineering/templates/package-assets/workflows/speckit.tasks.md +86 -86
  295. package/package-source/docs/codex-harness-engineering/templates/package-assets/workflows/speckit.verify.md +130 -130
  296. package/package-source/docs/codex-harness-engineering/templates/product/AGENTS.md +19 -0
  297. package/package-source/docs/codex-harness-engineering/templates/product/acceptance-criteria.md +47 -47
  298. package/package-source/docs/codex-harness-engineering/templates/product/difficulty-research.md +47 -47
  299. package/package-source/docs/codex-harness-engineering/templates/product/page-inventory.md +21 -21
  300. package/package-source/docs/codex-harness-engineering/templates/product/prd-lite.md +166 -158
  301. package/package-source/docs/codex-harness-engineering/templates/product/requirement-interface-matrix.md +37 -37
  302. package/package-source/docs/codex-harness-engineering/templates/product/state-matrix.yaml +116 -105
  303. package/package-source/docs/codex-harness-engineering/templates/prompts/AGENTS.md +15 -0
  304. package/package-source/docs/codex-harness-engineering/templates/prompts/controller-loop.md +88 -88
  305. package/package-source/docs/codex-harness-engineering/templates/prompts/failure-triage.md +71 -69
  306. package/package-source/docs/codex-harness-engineering/templates/prompts/harness-audit.md +54 -52
  307. package/package-source/docs/codex-harness-engineering/templates/prompts/implement-one-task.md +150 -148
  308. package/package-source/docs/codex-harness-engineering/templates/prompts/repair-one-finding.md +70 -67
  309. package/package-source/docs/codex-harness-engineering/templates/prompts/review-one-task.md +45 -43
  310. package/package-source/docs/codex-harness-engineering/templates/prompts/review-stage1-spec.md +111 -109
  311. package/package-source/docs/codex-harness-engineering/templates/prompts/review-stage2-quality.md +82 -80
  312. package/package-source/docs/codex-harness-engineering/templates/prompts/visual-evaluator.md +80 -78
  313. package/package-source/docs/codex-harness-engineering/templates/prompts/worker-role/backend-worker.md +41 -41
  314. package/package-source/docs/codex-harness-engineering/templates/prompts/worker-role/docs-worker.md +28 -28
  315. package/package-source/docs/codex-harness-engineering/templates/prompts/worker-role/frontend-worker.md +46 -46
  316. package/package-source/docs/codex-harness-engineering/templates/prompts/worker-role/harness-writer.md +40 -40
  317. package/package-source/docs/codex-harness-engineering/templates/prompts/worker-role/test-runner.md +27 -27
  318. package/package-source/docs/codex-harness-engineering/templates/runtime/AGENTS.md +66 -50
  319. package/package-source/docs/codex-harness-engineering/templates/runtime/codex-loop.ps1 +2129 -231
  320. package/package-source/docs/codex-harness-engineering/templates/runtime/doctor.ps1 +224 -224
  321. package/package-source/docs/codex-harness-engineering/templates/runtime/project-task-template.json +42 -39
  322. package/package-source/docs/codex-harness-engineering/templates/runtime/scripts/test-install-modes.ps1 +2 -2
  323. package/package-source/docs/codex-harness-engineering/templates/runtime/smoke-task.json +52 -52
  324. package/package-source/docs/codex-harness-engineering/templates/runtime/task-run-profile.json +86 -86
  325. package/package-source/docs/codex-harness-engineering/templates/runtime/task.json +11 -8
  326. package/package-source/docs/codex-harness-engineering/templates/runtime/verify.ps1 +21 -21
  327. package/package-source/docs/codex-harness-engineering/templates/scripts/AGENTS.md +15 -0
  328. package/package-source/docs/codex-harness-engineering/templates/scripts/ai-workflow/check-ai-sync-drift.ps1 +205 -205
  329. package/package-source/docs/codex-harness-engineering/templates/scripts/harness/harness-governance-check.ps1 +864 -366
  330. package/package-source/docs/codex-harness-engineering/templates/spec/10-data-model.md +23 -7
  331. package/package-source/docs/codex-harness-engineering/templates/spec/11-security-design.md +30 -13
  332. package/package-source/docs/codex-harness-engineering/templates/spec/AGENTS.md +15 -0
  333. package/package-source/docs/codex-harness-engineering/templates/testing/ACCEPTANCE_CRITERIA.md +39 -39
  334. package/package-source/docs/codex-harness-engineering/templates/testing/ACCEPTANCE_EXAMPLES.md +37 -37
  335. package/package-source/docs/codex-harness-engineering/templates/testing/AGENTS.md +19 -0
  336. package/package-source/docs/codex-harness-engineering/templates/testing/EVIDENCE_PROTOCOL.md +54 -48
  337. package/package-source/docs/codex-harness-engineering/templates/testing/NATURAL_LANGUAGE_TEST_CASES.md +5 -4
  338. package/package-source/docs/codex-harness-engineering/templates/testing/REGRESSION_PLAN.md +28 -20
  339. package/package-source/docs/codex-harness-engineering/templates/testing/RISK_BASED_TEST_PLAN.md +16 -16
  340. package/package-source/docs/codex-harness-engineering/templates/testing/TEST_STRATEGY.md +98 -97
  341. package/package-source/docs/codex-harness-engineering/templates/testing/TRACEABILITY_MATRIX.md +6 -5
  342. package/package-source/docs/codex-harness-engineering/templates/testing/coverage-policy.md +25 -25
  343. package/package-source/docs/codex-harness-engineering/templates/testing/e2e-plan.md +139 -139
  344. package/package-source/docs/codex-harness-engineering/templates/testing/failure-findings.example.json +3 -3
  345. package/package-source/docs/codex-harness-engineering/templates/testing/failure-triage.md +62 -62
  346. package/package-source/docs/codex-harness-engineering/templates/testing/test-data-plan.md +36 -36
  347. package/package-source/docs/codex-harness-engineering/templates/testing/test-report.md +85 -41
  348. package/package-source/docs/codex-harness-engineering/templates/testing/verify-matrix.md +15 -5
  349. package/package-source/docs/codex-harness-engineering/templates/tools/AGENTS.md +14 -0
  350. package/package-source/docs/codex-harness-engineering/templates/tools/harness/acceptance-lint.ps1 +37 -0
  351. package/package-source/docs/codex-harness-engineering/templates/tools/harness/architecture-lint.ps1 +150 -0
  352. package/package-source/docs/codex-harness-engineering/templates/tools/harness/backend-lint.ps1 +137 -0
  353. package/package-source/docs/codex-harness-engineering/templates/tools/harness/business-lint.ps1 +148 -0
  354. package/package-source/docs/codex-harness-engineering/templates/tools/harness/component-lint.ps1 +148 -0
  355. package/package-source/docs/codex-harness-engineering/templates/tools/harness/config-lint.ps1 +159 -0
  356. package/package-source/docs/codex-harness-engineering/templates/tools/harness/context-lint.ps1 +187 -0
  357. package/package-source/docs/codex-harness-engineering/templates/tools/harness/contract-lint.ps1 +148 -0
  358. package/package-source/docs/codex-harness-engineering/templates/tools/harness/data-lint.ps1 +37 -0
  359. package/package-source/docs/codex-harness-engineering/templates/tools/harness/directory-lint.ps1 +152 -0
  360. package/package-source/docs/codex-harness-engineering/templates/tools/harness/docs-lint.ps1 +40 -0
  361. package/package-source/docs/codex-harness-engineering/templates/tools/harness/impact-lint.ps1 +148 -0
  362. package/package-source/docs/codex-harness-engineering/templates/tools/harness/integration-lint.ps1 +37 -0
  363. package/package-source/docs/codex-harness-engineering/templates/tools/harness/mobile-lint.ps1 +37 -0
  364. package/package-source/docs/codex-harness-engineering/templates/tools/harness/observability-lint.ps1 +137 -0
  365. package/package-source/docs/codex-harness-engineering/templates/tools/harness/performance-lint.ps1 +148 -0
  366. package/package-source/docs/codex-harness-engineering/templates/tools/harness/refactor-lint.ps1 +137 -0
  367. package/package-source/docs/codex-harness-engineering/templates/tools/harness/security-lint.ps1 +159 -0
  368. package/package-source/docs/codex-harness-engineering/templates/tools/harness/session-lint.ps1 +126 -0
  369. package/package-source/docs/codex-harness-engineering/templates/tools/harness/spec-lint.ps1 +285 -0
  370. package/package-source/docs/codex-harness-engineering/templates/tools/harness/state-lint.ps1 +137 -0
  371. package/package-source/docs/codex-harness-engineering/templates/tools/harness/style-lint.ps1 +155 -0
  372. package/package-source/docs/codex-harness-engineering/templates/tools/harness/testing-lint.ps1 +192 -0
  373. package/package-source/docs/codex-harness-engineering/templates/tools/harness/ui-lint.ps1 +148 -0
  374. package/package-source/docs/codex-harness-engineering/templates/trace/AGENTS.md +16 -0
  375. package/package-source/docs/codex-harness-engineering/templates/trace/eval-case.yaml +24 -24
  376. package/package-source/docs/codex-harness-engineering/templates/trace/trace.schema.json +101 -101
  377. package/package-source/install-manifest.json +149 -79
  378. package/package-source/tools/install/ai-workflow/check-ai-sync-drift.ps1 +205 -205
  379. package/package-source/tools/install/ai-workflow/sync-ai-config-to-targets.ps1 +826 -826
  380. package/package-source/tools/install/ai-workflow/sync-targets.example.json +35 -35
  381. package/package-source/tools/install/bootstrap-codex-harness.ps1 +145 -129
  382. package/package-source/tools/install/env-check.ps1 +40 -40
  383. package/package-source/tools/install/init-project.ps1 +1 -1
  384. package/package-source/tools/install/install-agent-here.ps1 +57 -57
  385. package/package-source/tools/install/install-agent.ps1 +33 -31
  386. package/package.json +23 -23
@@ -1,366 +1,864 @@
1
- param(
2
- [string]$ProjectRoot = (Get-Location).Path,
3
- [switch]$WriteExperience
4
- )
5
-
6
- Set-StrictMode -Version Latest
7
- $ErrorActionPreference = "Stop"
8
-
9
- function Get-ObjectPropertyValue {
10
- param(
11
- [object]$InputObject,
12
- [string]$Name,
13
- [object]$Default = $null
14
- )
15
-
16
- if ($null -eq $InputObject) {
17
- return $Default
18
- }
19
-
20
- $property = $InputObject.PSObject.Properties[$Name]
21
- if ($null -eq $property) {
22
- return $Default
23
- }
24
-
25
- return $property.Value
26
- }
27
-
28
- function Add-Finding {
29
- param(
30
- [System.Collections.Generic.List[object]]$Findings,
31
- [string]$Severity,
32
- [string]$Category,
33
- [string]$Message,
34
- [string]$RepairMode,
35
- [string]$TargetDoc = "docs/harness/governance-auto-repair.md"
36
- )
37
-
38
- $Findings.Add([pscustomobject]@{
39
- severity = $Severity
40
- category = $Category
41
- message = $Message
42
- repair_mode = $RepairMode
43
- target_doc = $TargetDoc
44
- })
45
- }
46
-
47
- function Get-RelativePathCompat {
48
- param(
49
- [string]$Root,
50
- [string]$Path
51
- )
52
-
53
- $rootFull = ([System.IO.Path]::GetFullPath($Root)).TrimEnd('\', '/') + '\'
54
- $pathFull = [System.IO.Path]::GetFullPath($Path)
55
- if ($pathFull.StartsWith($rootFull, [System.StringComparison]::OrdinalIgnoreCase)) {
56
- return $pathFull.Substring($rootFull.Length).Replace('\', '/')
57
- }
58
-
59
- return $pathFull.Replace('\', '/')
60
- }
61
-
62
- function Test-MergeMarkers {
63
- param(
64
- [string]$Root,
65
- [System.Collections.Generic.List[object]]$Findings
66
- )
67
-
68
- $scanRoots = @(
69
- "AGENTS.md",
70
- ".codex",
71
- "docs/harness",
72
- "docs/codex-harness-engineering"
73
- )
74
-
75
- foreach ($scanRoot in $scanRoots) {
76
- $fullPath = Join-Path $Root $scanRoot
77
- if (-not (Test-Path -LiteralPath $fullPath)) {
78
- continue
79
- }
80
-
81
- $files = if (Test-Path -LiteralPath $fullPath -PathType Leaf) {
82
- @(Get-Item -LiteralPath $fullPath)
83
- }
84
- else {
85
- @(Get-ChildItem -LiteralPath $fullPath -Recurse -File -Include *.md,*.json,*.toml,*.ps1,*.rules)
86
- }
87
-
88
- foreach ($file in $files) {
89
- $content = Get-Content -LiteralPath $file.FullName -Raw -ErrorAction SilentlyContinue
90
- if ($content -match '(?m)^(<<<<<<<|=======|>>>>>>>)') {
91
- Add-Finding `
92
- -Findings $Findings `
93
- -Severity "block" `
94
- -Category "merge_marker" `
95
- -Message ("Merge marker found in {0}." -f (Get-RelativePathCompat -Root $Root -Path $file.FullName)) `
96
- -RepairMode "agent_repair" `
97
- -TargetDoc "docs/harness/rule-governance.md"
98
- }
99
- }
100
- }
101
- }
102
-
103
- function Test-HookSurface {
104
- param(
105
- [string]$Root,
106
- [System.Collections.Generic.List[object]]$Findings
107
- )
108
-
109
- $hookConfigPath = Join-Path $Root ".codex\hooks.json"
110
- if (-not (Test-Path -LiteralPath $hookConfigPath)) {
111
- return
112
- }
113
-
114
- $hookText = Get-Content -LiteralPath $hookConfigPath -Raw
115
- if ($hookText.Contains("hook-stop-verify.ps1")) {
116
- $activeScript = Join-Path $Root "scripts\harness\hook-stop-verify.ps1"
117
- $templateScript = Join-Path $Root "docs\codex-harness-engineering\templates\hooks\hook-stop-verify.ps1"
118
- $installedTemplateScript = Join-Path $Root ".agents\docs\codex-harness-engineering\templates\hooks\hook-stop-verify.ps1"
119
-
120
- if (-not (Test-Path -LiteralPath $activeScript)) {
121
- $repairMode = if ((Test-Path -LiteralPath $templateScript) -or (Test-Path -LiteralPath $installedTemplateScript)) {
122
- "deterministic_repair"
123
- }
124
- else {
125
- "agent_repair"
126
- }
127
-
128
- Add-Finding `
129
- -Findings $Findings `
130
- -Severity "block" `
131
- -Category "missing_stop_hook_script" `
132
- -Message "hooks.json references tools/harness/hook-stop-verify.ps1, but the script is missing." `
133
- -RepairMode $repairMode `
134
- -TargetDoc "docs/harness/governance-auto-repair.md"
135
- }
136
- }
137
- }
138
-
139
- function Test-RulesSurface {
140
- param(
141
- [string]$Root,
142
- [System.Collections.Generic.List[object]]$Findings
143
- )
144
-
145
- $rulesDir = Join-Path $Root ".codex\rules"
146
- if (-not (Test-Path -LiteralPath $rulesDir)) {
147
- return
148
- }
149
-
150
- $rulesFiles = @(Get-ChildItem -LiteralPath $rulesDir -File -Filter "*.rules" -ErrorAction SilentlyContinue)
151
- if ($rulesFiles.Count -eq 0) {
152
- Add-Finding `
153
- -Findings $Findings `
154
- -Severity "warn" `
155
- -Category "missing_execpolicy_rules" `
156
- -Message ".codex/rules contains semantic Markdown rules but no official *.rules execution policy files." `
157
- -RepairMode "deterministic_repair" `
158
- -TargetDoc "docs/harness/rule-governance.md"
159
- }
160
- }
161
-
162
- function Test-ConfigSurface {
163
- param(
164
- [string]$Root,
165
- [System.Collections.Generic.List[object]]$Findings
166
- )
167
-
168
- $configPath = Join-Path $Root ".codex\config.toml"
169
- if (-not (Test-Path -LiteralPath $configPath)) {
170
- return
171
- }
172
-
173
- $configText = Get-Content -LiteralPath $configPath -Raw
174
- if ($configText -match "project_doc_fallback_filenames") {
175
- $hasAgents = Test-Path -LiteralPath (Join-Path $Root "AGENTS.md")
176
- $hasTeamGuide = Test-Path -LiteralPath (Join-Path $Root "TEAM_GUIDE.md")
177
- $hasDotAgents = Test-Path -LiteralPath (Join-Path $Root ".agents.md")
178
- if ($hasAgents -and (-not $hasTeamGuide) -and (-not $hasDotAgents)) {
179
- Add-Finding `
180
- -Findings $Findings `
181
- -Severity "warn" `
182
- -Category "stale_fallback_config" `
183
- -Message "project_doc_fallback_filenames is configured, but AGENTS.md exists and fallback files are missing." `
184
- -RepairMode "agent_repair" `
185
- -TargetDoc "docs/harness/rule-governance.md"
186
- }
187
- }
188
- }
189
-
190
- function Get-LatestTraceFile {
191
- param([string]$Root)
192
-
193
- $traceDir = Join-Path $Root "traces"
194
- if (-not (Test-Path -LiteralPath $traceDir)) {
195
- return $null
196
- }
197
-
198
- return @(Get-ChildItem -LiteralPath $traceDir -Recurse -File -Filter "*.json" -ErrorAction SilentlyContinue |
199
- Sort-Object LastWriteTimeUtc -Descending |
200
- Select-Object -First 1)[0]
201
- }
202
-
203
- function New-ExperienceFromTrace {
204
- param([string]$Root)
205
-
206
- $traceFile = Get-LatestTraceFile -Root $Root
207
- if ($null -eq $traceFile) {
208
- return $null
209
- }
210
-
211
- try {
212
- $trace = Get-Content -LiteralPath $traceFile.FullName -Raw | ConvertFrom-Json
213
- }
214
- catch {
215
- return $null
216
- }
217
-
218
- $status = [string](Get-ObjectPropertyValue -InputObject $trace -Name "status" -Default "")
219
- if ($status -eq "passed") {
220
- return $null
221
- }
222
-
223
- $taskId = [string](Get-ObjectPropertyValue -InputObject $trace -Name "task_id" -Default "unknown")
224
- $failedStage = [string](Get-ObjectPropertyValue -InputObject $trace -Name "failed_stage" -Default "")
225
- $blockedReason = [string](Get-ObjectPropertyValue -InputObject $trace -Name "blocked_reason" -Default "")
226
- $relativeTrace = Get-RelativePathCompat -Root $Root -Path $traceFile.FullName
227
- $summary = "Task $taskId ended with status=$status"
228
- if (-not [string]::IsNullOrWhiteSpace($failedStage)) {
229
- $summary += ", failed_stage=$failedStage"
230
- }
231
- if (-not [string]::IsNullOrWhiteSpace($blockedReason)) {
232
- $summary += ", blocked_reason=$blockedReason"
233
- }
234
-
235
- $targetDoc = "docs/harness/governance-auto-repair.md"
236
- if ($failedStage -match "stage1|spec|design") {
237
- $targetDoc = "docs/harness/rule-governance.md"
238
- }
239
- elseif ($failedStage -match "stage2|review|test|verify") {
240
- $targetDoc = "docs/testing/failure-triage.md"
241
- }
242
-
243
- $hashInput = "$relativeTrace|$summary"
244
- $bytes = [System.Text.Encoding]::UTF8.GetBytes($hashInput)
245
- $sha = [System.Security.Cryptography.SHA256]::Create()
246
- try {
247
- $hash = ([System.BitConverter]::ToString($sha.ComputeHash($bytes))).Replace("-", "").Substring(0, 16).ToLowerInvariant()
248
- }
249
- finally {
250
- $sha.Dispose()
251
- }
252
-
253
- return [pscustomobject]@{
254
- hash = $hash
255
- task_id = $taskId
256
- status = $status
257
- failed_stage = $failedStage
258
- blocked_reason = $blockedReason
259
- trace = $relativeTrace
260
- summary = $summary
261
- target_doc = $targetDoc
262
- }
263
- }
264
-
265
- function Write-ExperienceEntry {
266
- param(
267
- [string]$Root,
268
- [object]$Experience
269
- )
270
-
271
- if ($null -eq $Experience) {
272
- return $false
273
- }
274
-
275
- $docPath = Join-Path $Root "docs\harness\governance-auto-repair.md"
276
- $docDir = Split-Path -Parent $docPath
277
- if (-not (Test-Path -LiteralPath $docDir)) {
278
- New-Item -ItemType Directory -Force -Path $docDir | Out-Null
279
- }
280
-
281
- $marker = "<!-- stop-hook-experience:$($Experience.hash) -->"
282
- if (Test-Path -LiteralPath $docPath) {
283
- $existing = Get-Content -LiteralPath $docPath -Raw
284
- if ($existing.Contains($marker)) {
285
- return $false
286
- }
287
- }
288
- else {
289
- @"
290
- # Governance Auto Repair
291
-
292
- 本文件由 Stop hook 治理检查维护,用于记录自动化闭环中反复出现的失败原因、修复去向和后续规则提升候选。这里不是硬规则入口;只有经过复验和维护者确认后,才可提升到 `AGENTS.md`、`.codex/rules/*.md`、prompt 或 `.rules`。
293
-
294
- "@ | Set-Content -LiteralPath $docPath -Encoding UTF8
295
- }
296
-
297
- $entry = @"
298
-
299
- ## Stop Hook Experience - $($Experience.task_id)
300
-
301
- $marker
302
-
303
- - Time: $(Get-Date -Format o)
304
- - Summary: $($Experience.summary)
305
- - Trace: `$($Experience.trace)`
306
- - Suggested target doc: `$($Experience.target_doc)`
307
- - Next action: review the trace, repair the root cause, then promote only reusable lessons to the target doc.
308
-
309
- "@
310
-
311
- Add-Content -LiteralPath $docPath -Value $entry -Encoding UTF8
312
- return $true
313
- }
314
-
315
- try {
316
- $resolvedRoot = (Resolve-Path -LiteralPath $ProjectRoot).Path
317
- $findings = New-Object System.Collections.Generic.List[object]
318
-
319
- Test-MergeMarkers -Root $resolvedRoot -Findings $findings
320
- Test-HookSurface -Root $resolvedRoot -Findings $findings
321
- Test-RulesSurface -Root $resolvedRoot -Findings $findings
322
- Test-ConfigSurface -Root $resolvedRoot -Findings $findings
323
-
324
- $experience = New-ExperienceFromTrace -Root $resolvedRoot
325
- $experienceWritten = $false
326
- if ($WriteExperience -and $null -ne $experience) {
327
- $experienceWritten = Write-ExperienceEntry -Root $resolvedRoot -Experience $experience
328
- }
329
-
330
- if ($null -ne $experience) {
331
- Add-Finding `
332
- -Findings $findings `
333
- -Severity "block" `
334
- -Category "failed_trace_experience" `
335
- -Message $experience.summary `
336
- -RepairMode "agent_repair" `
337
- -TargetDoc $experience.target_doc
338
- }
339
-
340
- $hasBlockingFinding = @($findings | Where-Object { $_.severity -eq "block" }).Count -gt 0
341
- $status = if ($hasBlockingFinding) { "fail" } else { "pass" }
342
-
343
- [pscustomobject]@{
344
- status = $status
345
- findings = @($findings.ToArray())
346
- experience = $experience
347
- experience_written = $experienceWritten
348
- next_action = "Read AGENTS.md, docs/harness/governance-auto-repair.md, docs/harness/rule-governance.md, and .codex/rules/agents.md; use harness-writer for semantic repairs and rerun tools/harness/verify.ps1."
349
- } | ConvertTo-Json -Depth 8 -Compress
350
- }
351
- catch {
352
- $line = if ($null -ne $_.InvocationInfo) { [string]$_.InvocationInfo.ScriptLineNumber } else { "" }
353
- [pscustomobject]@{
354
- status = "fail"
355
- findings = @([pscustomobject]@{
356
- severity = "block"
357
- category = "governance_check_error"
358
- message = if ([string]::IsNullOrWhiteSpace($line)) { $_.Exception.Message } else { "$($_.Exception.Message) at line $line" }
359
- repair_mode = "agent_repair"
360
- target_doc = "docs/harness/governance-auto-repair.md"
361
- })
362
- experience = $null
363
- experience_written = $false
364
- next_action = "Inspect scripts/harness/harness-governance-check.ps1 and rerun tools/harness/verify.ps1."
365
- } | ConvertTo-Json -Depth 8 -Compress
366
- }
1
+ param(
2
+ [string]$ProjectRoot = (Get-Location).Path,
3
+ [switch]$WriteExperience
4
+ )
5
+
6
+ Set-StrictMode -Version Latest
7
+ $ErrorActionPreference = "Stop"
8
+
9
+ $managedAgentsStartMarker = "<!-- BEGIN AUTO-MODULE-FACTS -->"
10
+ $managedAgentsEndMarker = "<!-- END AUTO-MODULE-FACTS -->"
11
+ $moduleAgentsTargetNames = @("src", "app", "apps", "packages", "services", "modules", "features", "frontend", "backend", "tests", "test")
12
+ $moduleAgentsIgnoredPrefixes = @(
13
+ ".git/",
14
+ ".codex/",
15
+ ".codex-harness/",
16
+ ".agents/",
17
+ "docs/",
18
+ "traces/",
19
+ "artifacts/",
20
+ "dist/",
21
+ "build/",
22
+ "coverage/",
23
+ "node_modules/"
24
+ )
25
+ $moduleApiFilePatterns = @(
26
+ '(^|/)(index|main|app|mod|entry)\.',
27
+ '/(api|services|controllers|routes|router|hooks|store|models|components|pages|views)/'
28
+ )
29
+
30
+ function Get-ObjectPropertyValue {
31
+ param(
32
+ [object]$InputObject,
33
+ [string]$Name,
34
+ [object]$Default = $null
35
+ )
36
+
37
+ if ($null -eq $InputObject) {
38
+ return $Default
39
+ }
40
+
41
+ $property = $InputObject.PSObject.Properties[$Name]
42
+ if ($null -eq $property) {
43
+ return $Default
44
+ }
45
+
46
+ return $property.Value
47
+ }
48
+
49
+ function Add-Finding {
50
+ param(
51
+ [System.Collections.Generic.List[object]]$Findings,
52
+ [string]$Severity,
53
+ [string]$Category,
54
+ [string]$Message,
55
+ [string]$RepairMode,
56
+ [string]$TargetDoc = "docs/harness/governance-auto-repair.md"
57
+ )
58
+
59
+ $Findings.Add([pscustomobject]@{
60
+ severity = $Severity
61
+ category = $Category
62
+ message = $Message
63
+ repair_mode = $RepairMode
64
+ target_doc = $TargetDoc
65
+ })
66
+ }
67
+
68
+ function Get-RelativePathCompat {
69
+ param(
70
+ [string]$Root,
71
+ [string]$Path
72
+ )
73
+
74
+ $rootFull = ([System.IO.Path]::GetFullPath($Root)).TrimEnd('\', '/') + '\'
75
+ $pathFull = [System.IO.Path]::GetFullPath($Path)
76
+ if ($pathFull.StartsWith($rootFull, [System.StringComparison]::OrdinalIgnoreCase)) {
77
+ return $pathFull.Substring($rootFull.Length).Replace('\', '/')
78
+ }
79
+
80
+ return $pathFull.Replace('\', '/')
81
+ }
82
+
83
+ function ConvertTo-StringArray {
84
+ param([object]$Value)
85
+
86
+ if ($null -eq $Value) {
87
+ return @()
88
+ }
89
+
90
+ if ($Value -is [string]) {
91
+ if ([string]::IsNullOrWhiteSpace($Value)) {
92
+ return @()
93
+ }
94
+
95
+ return @($Value)
96
+ }
97
+
98
+ $items = @()
99
+ foreach ($item in $Value) {
100
+ if ($null -ne $item) {
101
+ $text = [string]$item
102
+ if (-not [string]::IsNullOrWhiteSpace($text)) {
103
+ $items += $text
104
+ }
105
+ }
106
+ }
107
+
108
+ return $items
109
+ }
110
+
111
+ function ConvertTo-BulletLines {
112
+ param(
113
+ [string[]]$Items,
114
+ [string]$EmptyLine = "- (none)"
115
+ )
116
+
117
+ $normalized = @($Items | Where-Object { -not [string]::IsNullOrWhiteSpace($_) } | Select-Object -Unique)
118
+ if ($normalized.Count -eq 0) {
119
+ return $EmptyLine
120
+ }
121
+
122
+ return (($normalized | ForEach-Object { "- $_" }) -join "`n")
123
+ }
124
+
125
+ function Get-TrackedOrModifiedFiles {
126
+ param([string]$Root)
127
+
128
+ $statusLines = & git -C $Root status --short --untracked-files=all 2>$null
129
+ if ($LASTEXITCODE -ne 0) {
130
+ return @()
131
+ }
132
+
133
+ $paths = @()
134
+ foreach ($line in @($statusLines)) {
135
+ if ([string]::IsNullOrWhiteSpace($line)) {
136
+ continue
137
+ }
138
+
139
+ $relativePath = if ($line.Length -ge 4) { $line.Substring(3).Trim() } else { $line.Trim() }
140
+ if ([string]::IsNullOrWhiteSpace($relativePath)) {
141
+ continue
142
+ }
143
+
144
+ if ($relativePath.Contains(" -> ")) {
145
+ $relativePath = ($relativePath -split " -> ")[-1].Trim()
146
+ }
147
+
148
+ $paths += $relativePath.Replace('\', '/')
149
+ }
150
+
151
+ return @($paths | Select-Object -Unique)
152
+ }
153
+
154
+ function Read-TaskDocument {
155
+ param([string]$Root)
156
+
157
+ $taskPath = Join-Path $Root "task.json"
158
+ if (-not (Test-Path -LiteralPath $taskPath)) {
159
+ return $null
160
+ }
161
+
162
+ try {
163
+ return (Get-Content -LiteralPath $taskPath -Raw | ConvertFrom-Json)
164
+ }
165
+ catch {
166
+ return $null
167
+ }
168
+ }
169
+
170
+ function Test-IgnoredModulePath {
171
+ param([string]$Path)
172
+
173
+ foreach ($prefix in $moduleAgentsIgnoredPrefixes) {
174
+ if ($Path.StartsWith($prefix, [System.StringComparison]::OrdinalIgnoreCase)) {
175
+ return $true
176
+ }
177
+ }
178
+
179
+ return $false
180
+ }
181
+
182
+ function Resolve-NearestManagedAgentsDirectory {
183
+ param(
184
+ [string]$Root,
185
+ [string]$RelativePath
186
+ )
187
+
188
+ $segments = @($RelativePath.Replace('\', '/').Split('/', [System.StringSplitOptions]::RemoveEmptyEntries))
189
+ if ($segments.Count -lt 2) {
190
+ return $null
191
+ }
192
+
193
+ $candidateCount = $segments.Count - 1
194
+ for ($length = $candidateCount; $length -ge 1; $length--) {
195
+ $candidateSegments = $segments[0..($length - 1)]
196
+ $candidateRelative = ($candidateSegments -join '/')
197
+ $leafName = $candidateSegments[-1]
198
+ if ($leafName -notin $moduleAgentsTargetNames) {
199
+ continue
200
+ }
201
+
202
+ $candidateFull = Join-Path $Root $candidateRelative
203
+ if (Test-Path -LiteralPath $candidateFull -PathType Container) {
204
+ return [pscustomobject]@{
205
+ RelativePath = $candidateRelative
206
+ FullPath = $candidateFull
207
+ }
208
+ }
209
+ }
210
+
211
+ return $null
212
+ }
213
+
214
+ function Get-OwnedPathModuleCandidates {
215
+ param([string]$Root)
216
+
217
+ $taskDocument = Read-TaskDocument -Root $Root
218
+ if ($null -eq $taskDocument) {
219
+ return @()
220
+ }
221
+
222
+ $candidates = @()
223
+ $tasks = @(Get-ObjectPropertyValue -InputObject $taskDocument -Name "tasks" -Default @())
224
+ foreach ($task in $tasks) {
225
+ $ownedPaths = @(ConvertTo-StringArray -Value (Get-ObjectPropertyValue -InputObject $task -Name "owned_paths" -Default @()))
226
+ foreach ($ownedPath in $ownedPaths) {
227
+ $normalizedOwnedPath = $ownedPath.Replace('\', '/').Trim('/')
228
+ if ([string]::IsNullOrWhiteSpace($normalizedOwnedPath)) {
229
+ continue
230
+ }
231
+
232
+ if (Test-IgnoredModulePath -Path ($normalizedOwnedPath + '/')) {
233
+ continue
234
+ }
235
+
236
+ $fullPath = Join-Path $Root $normalizedOwnedPath
237
+ if (Test-Path -LiteralPath $fullPath -PathType Container) {
238
+ $candidates += [pscustomobject]@{
239
+ RelativePath = $normalizedOwnedPath
240
+ FullPath = $fullPath
241
+ Source = "owned_paths"
242
+ }
243
+ }
244
+ }
245
+ }
246
+
247
+ return @($candidates | Sort-Object RelativePath -Unique)
248
+ }
249
+
250
+ function Get-RepoMapModuleCandidates {
251
+ param([string]$Root)
252
+
253
+ $repoMapPath = Join-Path $Root "docs\ai\repo-map.md"
254
+ if (-not (Test-Path -LiteralPath $repoMapPath)) {
255
+ return @()
256
+ }
257
+
258
+ $content = Get-Content -LiteralPath $repoMapPath -Raw
259
+ $matches = [System.Text.RegularExpressions.Regex]::Matches($content, '`([^`]+)`')
260
+ $candidates = @()
261
+ foreach ($match in $matches) {
262
+ $candidate = $match.Groups[1].Value.Replace('\', '/').Trim('/')
263
+ if ([string]::IsNullOrWhiteSpace($candidate)) {
264
+ continue
265
+ }
266
+
267
+ if (
268
+ $candidate -match '[*?"<>|]' -or
269
+ $candidate.Contains(': ') -or
270
+ $candidate.Contains(' -> ') -or
271
+ $candidate.Contains(',') -or
272
+ $candidate.Contains('`') -or
273
+ $candidate.Contains('$') -or
274
+ $candidate.Contains('(') -or
275
+ $candidate.Contains(')') -or
276
+ $candidate.Contains('\') -or
277
+ $candidate -notmatch '^[A-Za-z0-9._/\-]+$'
278
+ ) {
279
+ continue
280
+ }
281
+
282
+ if (Test-IgnoredModulePath -Path ($candidate + '/')) {
283
+ continue
284
+ }
285
+
286
+ $fullPath = Join-Path $Root $candidate
287
+ if (Test-Path -LiteralPath $fullPath -PathType Container) {
288
+ $candidates += [pscustomobject]@{
289
+ RelativePath = $candidate
290
+ FullPath = $fullPath
291
+ Source = "repo_map"
292
+ }
293
+ }
294
+ }
295
+
296
+ return @($candidates | Sort-Object RelativePath -Unique)
297
+ }
298
+
299
+ function Resolve-NearestModuleCandidate {
300
+ param(
301
+ [string]$RelativePath,
302
+ [object[]]$Candidates
303
+ )
304
+
305
+ $normalizedPath = $RelativePath.Replace('\', '/')
306
+ $best = $null
307
+ foreach ($candidate in @($Candidates)) {
308
+ $candidatePath = [string]$candidate.RelativePath
309
+ if ([string]::IsNullOrWhiteSpace($candidatePath)) {
310
+ continue
311
+ }
312
+
313
+ if (
314
+ $normalizedPath.Equals($candidatePath, [System.StringComparison]::OrdinalIgnoreCase) -or
315
+ $normalizedPath.StartsWith($candidatePath + '/', [System.StringComparison]::OrdinalIgnoreCase)
316
+ ) {
317
+ if ($null -eq $best -or $candidatePath.Length -gt ([string]$best.RelativePath).Length) {
318
+ $best = $candidate
319
+ }
320
+ }
321
+ }
322
+
323
+ return $best
324
+ }
325
+
326
+ function Get-ModuleAgentsTargets {
327
+ param([string]$Root)
328
+
329
+ $candidateDirectories = @()
330
+ $candidateDirectories += Get-OwnedPathModuleCandidates -Root $Root
331
+ $candidateDirectories += Get-RepoMapModuleCandidates -Root $Root
332
+
333
+ $changedPaths = Get-TrackedOrModifiedFiles -Root $Root
334
+ $targets = @()
335
+ foreach ($path in $changedPaths) {
336
+ if ([string]::IsNullOrWhiteSpace($path)) {
337
+ continue
338
+ }
339
+
340
+ if ($path.EndsWith("/AGENTS.md", [System.StringComparison]::OrdinalIgnoreCase) -or $path -eq "AGENTS.md") {
341
+ continue
342
+ }
343
+
344
+ if (Test-IgnoredModulePath -Path $path) {
345
+ continue
346
+ }
347
+
348
+ $target = Resolve-NearestModuleCandidate -RelativePath $path -Candidates $candidateDirectories
349
+ if ($null -eq $target) {
350
+ $target = Resolve-NearestManagedAgentsDirectory -Root $Root -RelativePath $path
351
+ }
352
+
353
+ if ($null -ne $target) {
354
+ $targets += $target
355
+ }
356
+ }
357
+
358
+ return @($targets | Sort-Object RelativePath -Unique)
359
+ }
360
+
361
+ function Get-ModuleFilesForDirectory {
362
+ param(
363
+ [string]$Root,
364
+ [string]$ModuleRelativePath
365
+ )
366
+
367
+ $prefix = $ModuleRelativePath.TrimEnd('/') + '/'
368
+ return @(
369
+ Get-TrackedOrModifiedFiles -Root $Root |
370
+ Where-Object {
371
+ $_.StartsWith($prefix, [System.StringComparison]::OrdinalIgnoreCase) -and
372
+ -not $_.EndsWith("/AGENTS.md", [System.StringComparison]::OrdinalIgnoreCase)
373
+ } |
374
+ Select-Object -Unique
375
+ )
376
+ }
377
+
378
+ function Get-ValidationCommandForModule {
379
+ param(
380
+ [string]$Root,
381
+ [string]$ModuleRelativePath
382
+ )
383
+
384
+ $taskPath = Join-Path $Root "task.json"
385
+ if (-not (Test-Path -LiteralPath $taskPath)) {
386
+ return "git diff --check"
387
+ }
388
+
389
+ try {
390
+ $taskDocument = Get-Content -LiteralPath $taskPath -Raw | ConvertFrom-Json
391
+ }
392
+ catch {
393
+ return "git diff --check"
394
+ }
395
+
396
+ $tasks = @(Get-ObjectPropertyValue -InputObject $taskDocument -Name "tasks" -Default @())
397
+ foreach ($task in $tasks) {
398
+ $ownedPaths = @(ConvertTo-StringArray -Value (Get-ObjectPropertyValue -InputObject $task -Name "owned_paths" -Default @()))
399
+ foreach ($ownedPath in $ownedPaths) {
400
+ $normalizedOwnedPath = $ownedPath.Replace('\', '/').TrimEnd('/')
401
+ if ([string]::IsNullOrWhiteSpace($normalizedOwnedPath)) {
402
+ continue
403
+ }
404
+
405
+ if (
406
+ $ModuleRelativePath.Equals($normalizedOwnedPath, [System.StringComparison]::OrdinalIgnoreCase) -or
407
+ $ModuleRelativePath.StartsWith($normalizedOwnedPath + '/', [System.StringComparison]::OrdinalIgnoreCase) -or
408
+ $normalizedOwnedPath.StartsWith($ModuleRelativePath + '/', [System.StringComparison]::OrdinalIgnoreCase)
409
+ ) {
410
+ $command = [string](Get-ObjectPropertyValue -InputObject $task -Name "test_command" -Default "")
411
+ if (-not [string]::IsNullOrWhiteSpace($command)) {
412
+ return $command.Trim()
413
+ }
414
+
415
+ $developmentValidation = Get-ObjectPropertyValue -InputObject $task -Name "development_validation"
416
+ $candidate = [string](Get-ObjectPropertyValue -InputObject $developmentValidation -Name "command" -Default "")
417
+ if (-not [string]::IsNullOrWhiteSpace($candidate)) {
418
+ return $candidate.Trim()
419
+ }
420
+
421
+ $acceptanceValidation = Get-ObjectPropertyValue -InputObject $task -Name "acceptance_validation"
422
+ $candidate = [string](Get-ObjectPropertyValue -InputObject $acceptanceValidation -Name "command" -Default "")
423
+ if (-not [string]::IsNullOrWhiteSpace($candidate)) {
424
+ return $candidate.Trim()
425
+ }
426
+ }
427
+ }
428
+ }
429
+
430
+ return "git diff --check"
431
+ }
432
+
433
+ function Build-ManagedModuleFactsBlock {
434
+ param(
435
+ [string]$Root,
436
+ [string]$ModuleRelativePath
437
+ )
438
+
439
+ $moduleFiles = Get-ModuleFilesForDirectory -Root $Root -ModuleRelativePath $ModuleRelativePath
440
+ $entryPoints = @(
441
+ $moduleFiles |
442
+ Where-Object {
443
+ $matched = $false
444
+ foreach ($pattern in $moduleApiFilePatterns) {
445
+ if ($_ -match $pattern) {
446
+ $matched = $true
447
+ break
448
+ }
449
+ }
450
+ $matched
451
+ } |
452
+ Select-Object -First 8
453
+ )
454
+ $validationCommand = Get-ValidationCommandForModule -Root $Root -ModuleRelativePath $ModuleRelativePath
455
+
456
+ return @"
457
+ $managedAgentsStartMarker
458
+ ## Auto Module Facts
459
+
460
+ - Scope: `$ModuleRelativePath/`
461
+ - Last auto refresh: $(Get-Date -Format "yyyy-MM-dd HH:mm:ss zzz")
462
+ - Refresh source: changed paths under this directory
463
+
464
+ ## Changed Files
465
+ $(ConvertTo-BulletLines -Items $moduleFiles)
466
+
467
+ ## Likely Entry Points
468
+ $(ConvertTo-BulletLines -Items $entryPoints)
469
+
470
+ ## Validation
471
+ - Preferred command: `$validationCommand`
472
+
473
+ ## Maintenance Notes
474
+ - This block is maintained by `scripts/harness/harness-governance-check.ps1`.
475
+ - Keep hand-written rules outside this block.
476
+ $managedAgentsEndMarker
477
+ "@
478
+ }
479
+
480
+ function Update-ManagedModuleAgents {
481
+ param(
482
+ [string]$Root,
483
+ [string]$ModuleRelativePath,
484
+ [string]$ModuleFullPath
485
+ )
486
+
487
+ $agentsPath = Join-Path $ModuleFullPath "AGENTS.md"
488
+ $managedBlock = Build-ManagedModuleFactsBlock -Root $Root -ModuleRelativePath $ModuleRelativePath
489
+
490
+ if (Test-Path -LiteralPath $agentsPath) {
491
+ $existing = Get-Content -LiteralPath $agentsPath -Raw
492
+ if ($existing.Contains($managedAgentsStartMarker) -and $existing.Contains($managedAgentsEndMarker)) {
493
+ $updated = [System.Text.RegularExpressions.Regex]::Replace(
494
+ $existing,
495
+ "(?s)<!-- BEGIN AUTO-MODULE-FACTS -->.*?<!-- END AUTO-MODULE-FACTS -->",
496
+ [System.Text.RegularExpressions.MatchEvaluator]{ param($match) $managedBlock.TrimEnd() }
497
+ )
498
+ if ($updated -ne $existing) {
499
+ Set-Content -LiteralPath $agentsPath -Value $updated -Encoding UTF8
500
+ return "updated"
501
+ }
502
+
503
+ return "kept"
504
+ }
505
+
506
+ $updated = ($existing.TrimEnd() + "`r`n`r`n" + $managedBlock.Trim() + "`r`n")
507
+ Set-Content -LiteralPath $agentsPath -Value $updated -Encoding UTF8
508
+ return "appended"
509
+ }
510
+
511
+ $content = @"
512
+ # $ModuleRelativePath AGENTS.md
513
+
514
+ ## 作用范围
515
+
516
+ - 本文件只适用于 `$ModuleRelativePath/` 下的改动。
517
+ - 根 `AGENTS.md` 仍然有效;本文件只补充本目录特有规则。
518
+
519
+ $managedBlock
520
+ "@
521
+ Set-Content -LiteralPath $agentsPath -Value $content.Trim() -Encoding UTF8
522
+ return "created"
523
+ }
524
+
525
+ function Sync-ModuleAgents {
526
+ param(
527
+ [string]$Root,
528
+ [System.Collections.Generic.List[object]]$Findings
529
+ )
530
+
531
+ $targets = Get-ModuleAgentsTargets -Root $Root
532
+ $updates = @()
533
+ foreach ($target in $targets) {
534
+ $result = Update-ManagedModuleAgents -Root $Root -ModuleRelativePath $target.RelativePath -ModuleFullPath $target.FullPath
535
+ if ($result -ne "kept") {
536
+ $updates += [pscustomobject]@{
537
+ module = $target.RelativePath
538
+ result = $result
539
+ agents = "$($target.RelativePath)/AGENTS.md"
540
+ }
541
+ }
542
+ }
543
+
544
+ foreach ($update in $updates) {
545
+ Add-Finding `
546
+ -Findings $Findings `
547
+ -Severity "warn" `
548
+ -Category "module_agents_auto_refresh" `
549
+ -Message ("Auto-refreshed {0} ({1})." -f $update.agents, $update.result) `
550
+ -RepairMode "deterministic_repair" `
551
+ -TargetDoc $update.agents
552
+ }
553
+
554
+ return @($updates)
555
+ }
556
+
557
+ function Test-MergeMarkers {
558
+ param(
559
+ [string]$Root,
560
+ [System.Collections.Generic.List[object]]$Findings
561
+ )
562
+
563
+ $scanRoots = @(
564
+ "AGENTS.md",
565
+ ".codex",
566
+ "docs/harness",
567
+ "docs/codex-harness-engineering"
568
+ )
569
+
570
+ foreach ($scanRoot in $scanRoots) {
571
+ $fullPath = Join-Path $Root $scanRoot
572
+ if (-not (Test-Path -LiteralPath $fullPath)) {
573
+ continue
574
+ }
575
+
576
+ $files = if (Test-Path -LiteralPath $fullPath -PathType Leaf) {
577
+ @(Get-Item -LiteralPath $fullPath)
578
+ }
579
+ else {
580
+ @(Get-ChildItem -LiteralPath $fullPath -Recurse -File -Include *.md,*.json,*.toml,*.ps1,*.rules)
581
+ }
582
+
583
+ foreach ($file in $files) {
584
+ $content = Get-Content -LiteralPath $file.FullName -Raw -ErrorAction SilentlyContinue
585
+ if ($content -match '(?m)^(<<<<<<<|=======|>>>>>>>)') {
586
+ Add-Finding `
587
+ -Findings $Findings `
588
+ -Severity "block" `
589
+ -Category "merge_marker" `
590
+ -Message ("Merge marker found in {0}." -f (Get-RelativePathCompat -Root $Root -Path $file.FullName)) `
591
+ -RepairMode "agent_repair" `
592
+ -TargetDoc "docs/harness/rule-governance.md"
593
+ }
594
+ }
595
+ }
596
+ }
597
+
598
+ function Test-HookSurface {
599
+ param(
600
+ [string]$Root,
601
+ [System.Collections.Generic.List[object]]$Findings
602
+ )
603
+
604
+ $hookConfigPath = Join-Path $Root ".codex\hooks.json"
605
+ if (-not (Test-Path -LiteralPath $hookConfigPath)) {
606
+ return
607
+ }
608
+
609
+ $hookText = Get-Content -LiteralPath $hookConfigPath -Raw
610
+ if ($hookText.Contains("hook-stop-verify.ps1")) {
611
+ $activeScript = Join-Path $Root "tools\harness\hook-stop-verify.ps1"
612
+ $templateScript = Join-Path $Root "docs\codex-harness-engineering\templates\hooks\hook-stop-verify.ps1"
613
+ $installedTemplateScript = Join-Path $Root ".agents\docs\codex-harness-engineering\templates\hooks\hook-stop-verify.ps1"
614
+
615
+ if (-not (Test-Path -LiteralPath $activeScript)) {
616
+ $repairMode = if ((Test-Path -LiteralPath $templateScript) -or (Test-Path -LiteralPath $installedTemplateScript)) {
617
+ "deterministic_repair"
618
+ }
619
+ else {
620
+ "agent_repair"
621
+ }
622
+
623
+ Add-Finding `
624
+ -Findings $Findings `
625
+ -Severity "block" `
626
+ -Category "missing_stop_hook_script" `
627
+ -Message "hooks.json references tools/harness/hook-stop-verify.ps1, but the script is missing." `
628
+ -RepairMode $repairMode `
629
+ -TargetDoc "docs/harness/governance-auto-repair.md"
630
+ }
631
+ }
632
+ }
633
+
634
+ function Test-RulesSurface {
635
+ param(
636
+ [string]$Root,
637
+ [System.Collections.Generic.List[object]]$Findings
638
+ )
639
+
640
+ $rulesDir = Join-Path $Root ".codex\rules"
641
+ if (-not (Test-Path -LiteralPath $rulesDir)) {
642
+ return
643
+ }
644
+
645
+ $rulesFiles = @(Get-ChildItem -LiteralPath $rulesDir -File -Filter "*.rules" -ErrorAction SilentlyContinue)
646
+ if ($rulesFiles.Count -eq 0) {
647
+ Add-Finding `
648
+ -Findings $Findings `
649
+ -Severity "warn" `
650
+ -Category "missing_execpolicy_rules" `
651
+ -Message ".codex/rules contains semantic Markdown rules but no official *.rules execution policy files." `
652
+ -RepairMode "deterministic_repair" `
653
+ -TargetDoc "docs/harness/rule-governance.md"
654
+ }
655
+ }
656
+
657
+ function Test-ConfigSurface {
658
+ param(
659
+ [string]$Root,
660
+ [System.Collections.Generic.List[object]]$Findings
661
+ )
662
+
663
+ $configPath = Join-Path $Root ".codex\config.toml"
664
+ if (-not (Test-Path -LiteralPath $configPath)) {
665
+ return
666
+ }
667
+
668
+ $configText = Get-Content -LiteralPath $configPath -Raw
669
+ if ($configText -match "project_doc_fallback_filenames") {
670
+ $hasAgents = Test-Path -LiteralPath (Join-Path $Root "AGENTS.md")
671
+ $hasTeamGuide = Test-Path -LiteralPath (Join-Path $Root "TEAM_GUIDE.md")
672
+ $hasDotAgents = Test-Path -LiteralPath (Join-Path $Root ".agents.md")
673
+ if ($hasAgents -and (-not $hasTeamGuide) -and (-not $hasDotAgents)) {
674
+ Add-Finding `
675
+ -Findings $Findings `
676
+ -Severity "warn" `
677
+ -Category "stale_fallback_config" `
678
+ -Message "project_doc_fallback_filenames is configured, but AGENTS.md exists and fallback files are missing." `
679
+ -RepairMode "agent_repair" `
680
+ -TargetDoc "docs/harness/rule-governance.md"
681
+ }
682
+ }
683
+ }
684
+
685
+ function Get-LatestTraceFile {
686
+ param([string]$Root)
687
+
688
+ $traceDir = Join-Path $Root "traces"
689
+ if (-not (Test-Path -LiteralPath $traceDir)) {
690
+ return $null
691
+ }
692
+
693
+ return @(Get-ChildItem -LiteralPath $traceDir -Recurse -File -Filter "*.json" -ErrorAction SilentlyContinue |
694
+ Sort-Object LastWriteTimeUtc -Descending |
695
+ Select-Object -First 1)[0]
696
+ }
697
+
698
+ function New-ExperienceFromTrace {
699
+ param([string]$Root)
700
+
701
+ $traceFile = Get-LatestTraceFile -Root $Root
702
+ if ($null -eq $traceFile) {
703
+ return $null
704
+ }
705
+
706
+ try {
707
+ $trace = Get-Content -LiteralPath $traceFile.FullName -Raw | ConvertFrom-Json
708
+ }
709
+ catch {
710
+ return $null
711
+ }
712
+
713
+ $status = [string](Get-ObjectPropertyValue -InputObject $trace -Name "status" -Default "")
714
+ if ($status -eq "passed") {
715
+ return $null
716
+ }
717
+
718
+ $taskId = [string](Get-ObjectPropertyValue -InputObject $trace -Name "task_id" -Default "unknown")
719
+ $failedStage = [string](Get-ObjectPropertyValue -InputObject $trace -Name "failed_stage" -Default "")
720
+ $blockedReason = [string](Get-ObjectPropertyValue -InputObject $trace -Name "blocked_reason" -Default "")
721
+ $relativeTrace = Get-RelativePathCompat -Root $Root -Path $traceFile.FullName
722
+ $summary = "Task $taskId ended with status=$status"
723
+ if (-not [string]::IsNullOrWhiteSpace($failedStage)) {
724
+ $summary += ", failed_stage=$failedStage"
725
+ }
726
+ if (-not [string]::IsNullOrWhiteSpace($blockedReason)) {
727
+ $summary += ", blocked_reason=$blockedReason"
728
+ }
729
+
730
+ $targetDoc = "docs/harness/governance-auto-repair.md"
731
+ if ($failedStage -match "stage1|spec|design") {
732
+ $targetDoc = "docs/harness/rule-governance.md"
733
+ }
734
+ elseif ($failedStage -match "stage2|review|test|verify") {
735
+ $targetDoc = "docs/testing/failure-triage.md"
736
+ }
737
+
738
+ $hashInput = "$relativeTrace|$summary"
739
+ $bytes = [System.Text.Encoding]::UTF8.GetBytes($hashInput)
740
+ $sha = [System.Security.Cryptography.SHA256]::Create()
741
+ try {
742
+ $hash = ([System.BitConverter]::ToString($sha.ComputeHash($bytes))).Replace("-", "").Substring(0, 16).ToLowerInvariant()
743
+ }
744
+ finally {
745
+ $sha.Dispose()
746
+ }
747
+
748
+ return [pscustomobject]@{
749
+ hash = $hash
750
+ task_id = $taskId
751
+ status = $status
752
+ failed_stage = $failedStage
753
+ blocked_reason = $blockedReason
754
+ trace = $relativeTrace
755
+ summary = $summary
756
+ target_doc = $targetDoc
757
+ }
758
+ }
759
+
760
+ function Write-ExperienceEntry {
761
+ param(
762
+ [string]$Root,
763
+ [object]$Experience
764
+ )
765
+
766
+ if ($null -eq $Experience) {
767
+ return $false
768
+ }
769
+
770
+ $docPath = Join-Path $Root "docs\harness\governance-auto-repair.md"
771
+ $docDir = Split-Path -Parent $docPath
772
+ if (-not (Test-Path -LiteralPath $docDir)) {
773
+ New-Item -ItemType Directory -Force -Path $docDir | Out-Null
774
+ }
775
+
776
+ $marker = "<!-- stop-hook-experience:$($Experience.hash) -->"
777
+ if (Test-Path -LiteralPath $docPath) {
778
+ $existing = Get-Content -LiteralPath $docPath -Raw
779
+ if ($existing.Contains($marker)) {
780
+ return $false
781
+ }
782
+ }
783
+ else {
784
+ @"
785
+ # Governance Auto Repair
786
+
787
+ 本文件由 Stop hook 治理检查维护,用于记录自动化闭环中反复出现的失败原因、修复去向和后续规则提升候选。这里不是硬规则入口;只有经过复验和维护者确认后,才可提升到 `AGENTS.md`、`.codex/rules/*.md`、prompt 或 `.rules`。
788
+
789
+ "@ | Set-Content -LiteralPath $docPath -Encoding UTF8
790
+ }
791
+
792
+ $entry = @"
793
+
794
+ ## Stop Hook Experience - $($Experience.task_id)
795
+
796
+ $marker
797
+
798
+ - Time: $(Get-Date -Format o)
799
+ - Summary: $($Experience.summary)
800
+ - Trace: `$($Experience.trace)`
801
+ - Suggested target doc: `$($Experience.target_doc)`
802
+ - Next action: review the trace, repair the root cause, then promote only reusable lessons to the target doc.
803
+
804
+ "@
805
+
806
+ Add-Content -LiteralPath $docPath -Value $entry -Encoding UTF8
807
+ return $true
808
+ }
809
+
810
+ try {
811
+ $resolvedRoot = (Resolve-Path -LiteralPath $ProjectRoot).Path
812
+ $findings = New-Object System.Collections.Generic.List[object]
813
+
814
+ $moduleAgentsUpdates = Sync-ModuleAgents -Root $resolvedRoot -Findings $findings
815
+ Test-MergeMarkers -Root $resolvedRoot -Findings $findings
816
+ Test-HookSurface -Root $resolvedRoot -Findings $findings
817
+ Test-RulesSurface -Root $resolvedRoot -Findings $findings
818
+ Test-ConfigSurface -Root $resolvedRoot -Findings $findings
819
+
820
+ $experience = New-ExperienceFromTrace -Root $resolvedRoot
821
+ $experienceWritten = $false
822
+ if ($WriteExperience -and $null -ne $experience) {
823
+ $experienceWritten = Write-ExperienceEntry -Root $resolvedRoot -Experience $experience
824
+ }
825
+
826
+ if ($null -ne $experience) {
827
+ Add-Finding `
828
+ -Findings $findings `
829
+ -Severity "block" `
830
+ -Category "failed_trace_experience" `
831
+ -Message $experience.summary `
832
+ -RepairMode "agent_repair" `
833
+ -TargetDoc $experience.target_doc
834
+ }
835
+
836
+ $hasBlockingFinding = @($findings | Where-Object { $_.severity -eq "block" }).Count -gt 0
837
+ $status = if ($hasBlockingFinding) { "fail" } else { "pass" }
838
+
839
+ [pscustomobject]@{
840
+ status = $status
841
+ findings = @($findings.ToArray())
842
+ experience = $experience
843
+ experience_written = $experienceWritten
844
+ module_agents_updates = @($moduleAgentsUpdates)
845
+ next_action = "Read AGENTS.md, docs/harness/governance-auto-repair.md, docs/harness/rule-governance.md, and .codex/rules/agents.md; use harness-writer for semantic repairs and rerun tools/harness/verify.ps1."
846
+ } | ConvertTo-Json -Depth 8 -Compress
847
+ }
848
+ catch {
849
+ $line = if ($null -ne $_.InvocationInfo) { [string]$_.InvocationInfo.ScriptLineNumber } else { "" }
850
+ [pscustomobject]@{
851
+ status = "fail"
852
+ findings = @([pscustomobject]@{
853
+ severity = "block"
854
+ category = "governance_check_error"
855
+ message = if ([string]::IsNullOrWhiteSpace($line)) { $_.Exception.Message } else { "$($_.Exception.Message) at line $line" }
856
+ repair_mode = "agent_repair"
857
+ target_doc = "docs/harness/governance-auto-repair.md"
858
+ })
859
+ experience = $null
860
+ experience_written = $false
861
+ module_agents_updates = @()
862
+ next_action = "Inspect scripts/harness/harness-governance-check.ps1 and rerun tools/harness/verify.ps1."
863
+ } | ConvertTo-Json -Depth 8 -Compress
864
+ }