@aria_asi/cli 0.2.40 → 0.2.41

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 (802) hide show
  1. package/bin/aria.js +236 -34
  2. package/dist/aria-connector/src/action-ledger-core.d.ts +387 -0
  3. package/dist/aria-connector/src/action-ledger-core.d.ts.map +1 -0
  4. package/dist/aria-connector/src/action-ledger-core.js +638 -0
  5. package/dist/aria-connector/src/action-ledger-core.js.map +1 -0
  6. package/dist/aria-connector/src/chat.d.ts.map +1 -1
  7. package/dist/aria-connector/src/chat.js +5 -6
  8. package/dist/aria-connector/src/chat.js.map +1 -1
  9. package/dist/aria-connector/src/codebase-scanner.d.ts +1 -1
  10. package/dist/aria-connector/src/codebase-scanner.d.ts.map +1 -1
  11. package/dist/aria-connector/src/connectors/claude-code.d.ts +1 -0
  12. package/dist/aria-connector/src/connectors/claude-code.d.ts.map +1 -1
  13. package/dist/aria-connector/src/connectors/claude-code.js +152 -14
  14. package/dist/aria-connector/src/connectors/claude-code.js.map +1 -1
  15. package/dist/aria-connector/src/connectors/codebase-awareness.d.ts +10 -0
  16. package/dist/aria-connector/src/connectors/codebase-awareness.d.ts.map +1 -1
  17. package/dist/aria-connector/src/connectors/codebase-awareness.js +276 -27
  18. package/dist/aria-connector/src/connectors/codebase-awareness.js.map +1 -1
  19. package/dist/aria-connector/src/connectors/codex.d.ts +3 -1
  20. package/dist/aria-connector/src/connectors/codex.d.ts.map +1 -1
  21. package/dist/aria-connector/src/connectors/codex.js +1223 -41
  22. package/dist/aria-connector/src/connectors/codex.js.map +1 -1
  23. package/dist/aria-connector/src/connectors/cursor.d.ts.map +1 -1
  24. package/dist/aria-connector/src/connectors/cursor.js +7 -0
  25. package/dist/aria-connector/src/connectors/cursor.js.map +1 -1
  26. package/dist/aria-connector/src/connectors/governed-adapter.d.ts +30 -0
  27. package/dist/aria-connector/src/connectors/governed-adapter.d.ts.map +1 -0
  28. package/dist/aria-connector/src/connectors/governed-adapter.js +132 -0
  29. package/dist/aria-connector/src/connectors/governed-adapter.js.map +1 -0
  30. package/dist/aria-connector/src/connectors/opencode.d.ts +3 -1
  31. package/dist/aria-connector/src/connectors/opencode.d.ts.map +1 -1
  32. package/dist/aria-connector/src/connectors/opencode.js +18 -2
  33. package/dist/aria-connector/src/connectors/opencode.js.map +1 -1
  34. package/dist/aria-connector/src/connectors/repo-guard.d.ts.map +1 -1
  35. package/dist/aria-connector/src/connectors/repo-guard.js +25 -14
  36. package/dist/aria-connector/src/connectors/repo-guard.js.map +1 -1
  37. package/dist/aria-connector/src/connectors/runtime.d.ts.map +1 -1
  38. package/dist/aria-connector/src/connectors/runtime.js +92 -2
  39. package/dist/aria-connector/src/connectors/runtime.js.map +1 -1
  40. package/dist/aria-connector/src/connectors/shell.d.ts.map +1 -1
  41. package/dist/aria-connector/src/connectors/shell.js +123 -7
  42. package/dist/aria-connector/src/connectors/shell.js.map +1 -1
  43. package/dist/aria-connector/src/cross-cli-hive-binding.d.ts +63 -0
  44. package/dist/aria-connector/src/cross-cli-hive-binding.d.ts.map +1 -0
  45. package/dist/aria-connector/src/cross-cli-hive-binding.js +205 -0
  46. package/dist/aria-connector/src/cross-cli-hive-binding.js.map +1 -0
  47. package/dist/aria-connector/src/garden-control-plane.d.ts +6 -1
  48. package/dist/aria-connector/src/garden-control-plane.d.ts.map +1 -1
  49. package/dist/aria-connector/src/garden-control-plane.js +8 -2
  50. package/dist/aria-connector/src/garden-control-plane.js.map +1 -1
  51. package/dist/aria-connector/src/governed-surface-runner.d.ts +189 -0
  52. package/dist/aria-connector/src/governed-surface-runner.d.ts.map +1 -0
  53. package/dist/aria-connector/src/governed-surface-runner.js +1022 -0
  54. package/dist/aria-connector/src/governed-surface-runner.js.map +1 -0
  55. package/dist/aria-connector/src/index.d.ts +10 -1
  56. package/dist/aria-connector/src/index.d.ts.map +1 -1
  57. package/dist/aria-connector/src/index.js +5 -0
  58. package/dist/aria-connector/src/index.js.map +1 -1
  59. package/dist/aria-connector/src/task-runner.d.ts +3 -0
  60. package/dist/aria-connector/src/task-runner.d.ts.map +1 -0
  61. package/dist/aria-connector/src/task-runner.js +3526 -0
  62. package/dist/aria-connector/src/task-runner.js.map +1 -0
  63. package/dist/aria-web/src/lib/codebase-scanner.d.ts +21 -2
  64. package/dist/aria-web/src/lib/codebase-scanner.d.ts.map +1 -1
  65. package/dist/aria-web/src/lib/codebase-scanner.js +59 -14
  66. package/dist/aria-web/src/lib/codebase-scanner.js.map +1 -1
  67. package/dist/assets/hooks/README.md +58 -0
  68. package/dist/assets/hooks/aria-agent-handoff.mjs +147 -2
  69. package/dist/assets/hooks/aria-agent-ledger-merge.mjs +31 -7
  70. package/dist/assets/hooks/aria-architect-fallback.mjs +10 -2
  71. package/dist/assets/hooks/aria-claim-evidence-stop-gate.mjs +240 -0
  72. package/dist/assets/hooks/aria-cognition-substrate-binding.mjs +84 -10
  73. package/dist/assets/hooks/aria-first-class-coach.mjs +305 -10
  74. package/dist/assets/hooks/aria-harness-via-sdk.mjs +93 -16
  75. package/dist/assets/hooks/aria-import-resolution-gate.mjs +106 -20
  76. package/dist/assets/hooks/aria-outcome-record.mjs +56 -20
  77. package/dist/assets/hooks/aria-pre-emit-autoload.mjs +1809 -0
  78. package/dist/assets/hooks/aria-pre-emit-autoload.mjs.before-orchestration-redesign +1400 -0
  79. package/dist/assets/hooks/aria-pre-emit-dryrun.mjs +22 -3
  80. package/dist/assets/hooks/aria-pre-text-gate.mjs +11 -2
  81. package/dist/assets/hooks/aria-pre-tool-gate.mjs +477 -81
  82. package/dist/assets/hooks/aria-pre-tool-use.mjs +70 -6
  83. package/dist/assets/hooks/aria-preprompt-consult.mjs +23 -4
  84. package/dist/assets/hooks/aria-repo-doctrine-gate.mjs +29 -3
  85. package/dist/assets/hooks/aria-stop-gate.mjs +585 -76
  86. package/dist/assets/hooks/aria-trigger-autolearn.mjs +17 -3
  87. package/dist/assets/hooks/aria-universal-turn-packet.mjs +1165 -0
  88. package/dist/assets/hooks/aria-userprompt-abandon-detect.mjs +9 -1
  89. package/dist/assets/hooks/canonical-settings-block.json +172 -0
  90. package/dist/assets/hooks/codex-native/aria-harness-ticker-sidecar.mjs +92 -0
  91. package/dist/assets/hooks/codex-native/aria-hive-wal-consumer.mjs +86 -0
  92. package/dist/assets/hooks/codex-native/aria-live-ticker.mjs +38 -0
  93. package/dist/assets/hooks/codex-native/aria-post-tool-use.mjs +236 -0
  94. package/dist/assets/hooks/codex-native/aria-pre-tool-use.mjs +362 -0
  95. package/dist/assets/hooks/codex-native/aria-stop.mjs +691 -0
  96. package/dist/assets/hooks/codex-native/aria-userprompt-submit.mjs +623 -0
  97. package/dist/assets/hooks/codex-native/atlas-session-context.mjs +121 -0
  98. package/dist/assets/hooks/codex-native/lib/evaluate-with-kernel.mjs +257 -0
  99. package/dist/assets/hooks/codex-native/lib/hive-wal-consumer.mjs +452 -0
  100. package/dist/assets/hooks/codex-native/lib/kernel/deterministic-cognitive-kernel.mjs +914 -0
  101. package/dist/assets/hooks/codex-native/lib/project-boundary-cognition.mjs +143 -0
  102. package/dist/assets/hooks/codex-native/lib/runtime-client.mjs +3567 -0
  103. package/dist/assets/hooks/codex-native/lib/task-project-ledger.mjs +294 -0
  104. package/dist/assets/hooks/doctrine_trigger_map.json +236 -25
  105. package/dist/assets/hooks/doctrine_trigger_map.schema.json +46 -0
  106. package/dist/assets/hooks/install.sh +84 -0
  107. package/dist/assets/hooks/lib/action-ledger-core.mjs +269 -0
  108. package/dist/assets/hooks/lib/aria-gate-ledger.mjs +143 -0
  109. package/dist/assets/hooks/lib/ast-stub-shape-detector.mjs +107 -0
  110. package/dist/assets/hooks/lib/atlas-dossier-client.mjs +151 -0
  111. package/dist/assets/hooks/lib/atlas-orchestrator-postwire.mjs +221 -0
  112. package/dist/assets/hooks/lib/canonical-lenses.mjs +83 -6
  113. package/dist/assets/hooks/lib/coach-intent-classifier.mjs +248 -0
  114. package/dist/assets/hooks/lib/cognitive-block-parser.mjs +111 -0
  115. package/dist/assets/hooks/lib/doctrine-trigger-map-loader.mjs +137 -0
  116. package/dist/assets/hooks/lib/domain-output-quality.mjs +132 -3
  117. package/dist/assets/hooks/lib/empty-catch-scanner.mjs +91 -0
  118. package/dist/assets/hooks/lib/end-phase-qa-autofire.mjs +426 -0
  119. package/dist/assets/hooks/lib/evaluate-with-kernel.mjs +133 -0
  120. package/dist/assets/hooks/lib/first-class-coach.mjs +454 -19
  121. package/dist/assets/hooks/lib/gate-audit.mjs +12 -2
  122. package/dist/assets/hooks/lib/gate-loop-state.mjs +11 -2
  123. package/dist/assets/hooks/lib/goal-contract-quality.mjs +302 -0
  124. package/dist/assets/hooks/lib/hook-message-window.mjs +101 -9
  125. package/dist/assets/hooks/lib/invocation-required-verifier.mjs +184 -0
  126. package/dist/assets/hooks/lib/kernel/deterministic-cognitive-kernel.mjs +906 -0
  127. package/dist/assets/hooks/lib/obligation-ledger.mjs +147 -0
  128. package/dist/assets/hooks/lib/orchestration-manifest-extract.mjs +217 -0
  129. package/dist/assets/hooks/lib/owner-authorizations.mjs +269 -0
  130. package/dist/assets/hooks/lib/probe-discipline-scanner.mjs +142 -0
  131. package/dist/assets/hooks/lib/project-boundary-cognition.mjs +143 -0
  132. package/dist/assets/hooks/lib/recovery-context.mjs +151 -0
  133. package/dist/assets/hooks/lib/recovery-template-loader.mjs +154 -0
  134. package/dist/assets/hooks/lib/self-doctrine-check.mjs +321 -0
  135. package/dist/assets/hooks/lib/sensitive-shape-detector.mjs +64 -0
  136. package/dist/assets/hooks/lib/skill-autoload-gate-impl.mjs +226 -1
  137. package/dist/assets/hooks/lib/stop-hook-protocol.mjs +166 -0
  138. package/dist/assets/hooks/lib/surface-caught.mjs +94 -0
  139. package/dist/assets/hooks/recovery-templates/force-reauthor.md +67 -0
  140. package/dist/assets/hooks/recovery-templates/handoff-recovery.md +25 -0
  141. package/dist/assets/hooks/scripts/check-hard-risk-prefix.mjs +99 -0
  142. package/dist/assets/hooks/skills/aria-conversational-doctrine-discipline/SKILL.md +101 -0
  143. package/dist/assets/hooks/test-aria-preturn-memory-gate.mjs +2 -2
  144. package/dist/assets/hooks/test-tier-lens-labeling.mjs +14 -3
  145. package/dist/assets/opencode-plugins/harness-context/index.js +39 -6
  146. package/dist/assets/opencode-plugins/harness-context/task-project-ledger.mjs +5 -1
  147. package/dist/assets/opencode-plugins/harness-gate/index.js +36 -0
  148. package/dist/assets/opencode-plugins/harness-gate/lib/atlas-dossier-client.js +1 -0
  149. package/dist/assets/opencode-plugins/harness-gate/lib/recovery-grants.js +79 -0
  150. package/dist/assets/opencode-plugins/harness-outcome/index.js +12 -0
  151. package/dist/assets/opencode-plugins/harness-stop/index.js +97 -2
  152. package/dist/assets/opencode-plugins/harness-stop/lib/atlas-dossier-client.js +1 -0
  153. package/dist/assets/opencode-plugins/harness-stop/lib/domain-output-quality.js +15 -2
  154. package/dist/assets/opencode-plugins/lib/coach.js +148 -0
  155. package/dist/runtime/coach-kernel.mjs +144 -7
  156. package/dist/runtime/codex-bridge.mjs +254 -8
  157. package/dist/runtime/discipline/doctrine_trigger_map.json +236 -25
  158. package/dist/runtime/discipline/skills/aria-cognition/34-frameworks-unified/SKILL.md +42 -0
  159. package/dist/runtime/discipline/skills/aria-cognition/aria-aristotle-cognitives/SKILL.md +128 -0
  160. package/dist/runtime/discipline/skills/aria-cognition/aria-aristotle-intra-phase/SKILL.md +99 -0
  161. package/dist/runtime/discipline/skills/aria-cognition/aria-aristotle-post-phase/SKILL.md +118 -0
  162. package/dist/runtime/discipline/skills/aria-cognition/aria-aristotle-pre-phase/SKILL.md +117 -0
  163. package/dist/runtime/discipline/skills/aria-cognition/aria-axioms-first-principles/SKILL.md +202 -0
  164. package/dist/runtime/discipline/skills/aria-cognition/aria-axioms-first-principles/agents/openai.yaml +4 -0
  165. package/dist/runtime/discipline/skills/aria-cognition/aria-axioms-first-principles/references/source-map.md +130 -0
  166. package/dist/runtime/discipline/skills/aria-cognition/aria-backend-architect/SKILL.md +124 -0
  167. package/dist/runtime/discipline/skills/aria-cognition/aria-backend-architect/references/backend-cookbook.md +417 -0
  168. package/dist/runtime/discipline/skills/aria-cognition/aria-business-audit/SKILL.md +133 -0
  169. package/dist/runtime/discipline/skills/aria-cognition/aria-business-audit/references/audit-cookbook.md +247 -0
  170. package/dist/runtime/discipline/skills/aria-cognition/aria-business-frame/SKILL.md +138 -0
  171. package/dist/runtime/discipline/skills/aria-cognition/aria-business-frame/references/business-cookbook.md +154 -0
  172. package/dist/runtime/discipline/skills/aria-cognition/aria-chat/SKILL.md +84 -0
  173. package/dist/runtime/discipline/skills/aria-cognition/aria-chat/scripts/aria-chat.sh +57 -0
  174. package/dist/runtime/discipline/skills/aria-cognition/aria-cognition-autofire/SKILL.md +137 -0
  175. package/dist/runtime/discipline/skills/aria-cognition/aria-cognition-batch/SKILL.md +264 -0
  176. package/dist/runtime/discipline/skills/aria-cognition/aria-decision-mizan/SKILL.md +136 -0
  177. package/dist/runtime/discipline/skills/aria-cognition/aria-decision-mizan/references/decision-frameworks.md +287 -0
  178. package/dist/runtime/discipline/skills/aria-cognition/aria-first-class-operating-contract/SKILL.md +104 -0
  179. package/dist/runtime/discipline/skills/aria-cognition/aria-frontend-architect/SKILL.md +123 -0
  180. package/dist/runtime/discipline/skills/aria-cognition/aria-frontend-architect/references/frontend-cookbook.md +358 -0
  181. package/dist/runtime/discipline/skills/aria-cognition/aria-fullstack-orchestrator/SKILL.md +127 -0
  182. package/dist/runtime/discipline/skills/aria-cognition/aria-fullstack-orchestrator/references/fullstack-cookbook.md +383 -0
  183. package/dist/runtime/discipline/skills/aria-cognition/aria-gtm-architect/SKILL.md +126 -0
  184. package/dist/runtime/discipline/skills/aria-cognition/aria-gtm-architect/references/gtm-cookbook.md +235 -0
  185. package/dist/runtime/discipline/skills/aria-cognition/aria-harness-deploy/SKILL.md +145 -0
  186. package/dist/runtime/discipline/skills/aria-cognition/aria-harness-no-stripping/SKILL.md +135 -0
  187. package/dist/runtime/discipline/skills/aria-cognition/aria-harness-onboarding/SKILL.md +130 -0
  188. package/dist/runtime/discipline/skills/aria-cognition/aria-harness-output-discipline/SKILL.md +120 -0
  189. package/dist/runtime/discipline/skills/aria-cognition/aria-harness-substrate-binding/SKILL.md +139 -0
  190. package/dist/runtime/discipline/skills/aria-cognition/aria-http-harness-client/SKILL.md +85 -0
  191. package/dist/runtime/discipline/skills/aria-cognition/aria-http-harness-client/scripts/smoke.mjs +47 -0
  192. package/dist/runtime/discipline/skills/aria-cognition/aria-k8s-deploy/SKILL.md +174 -0
  193. package/dist/runtime/discipline/skills/aria-cognition/aria-k8s-deploy/agents/openai.yaml +3 -0
  194. package/dist/runtime/discipline/skills/aria-cognition/aria-ladduniframe/SKILL.md +60 -0
  195. package/dist/runtime/discipline/skills/aria-cognition/aria-ledger-fleet-execution/SKILL.md +126 -0
  196. package/dist/runtime/discipline/skills/aria-cognition/aria-live-ops/SKILL.md +54 -0
  197. package/dist/runtime/discipline/skills/aria-cognition/aria-mac-ssh-ops/SKILL.md +100 -0
  198. package/dist/runtime/discipline/skills/aria-cognition/aria-memory-index/SKILL.md +42 -0
  199. package/dist/runtime/discipline/skills/aria-cognition/aria-noor-cognitives/SKILL.md +120 -0
  200. package/dist/runtime/discipline/skills/aria-cognition/aria-ops/SKILL.md +60 -0
  201. package/dist/runtime/discipline/skills/aria-cognition/aria-ops/references/live-endpoints.md +59 -0
  202. package/dist/runtime/discipline/skills/aria-cognition/aria-quality-audit/SKILL.md +133 -0
  203. package/dist/runtime/discipline/skills/aria-cognition/aria-readable-output/SKILL.md +239 -0
  204. package/dist/runtime/discipline/skills/aria-cognition/aria-readable-output/references/layout-cookbook.md +366 -0
  205. package/dist/runtime/discipline/skills/aria-cognition/aria-reasoning/SKILL.md +67 -0
  206. package/dist/runtime/discipline/skills/aria-cognition/aria-reasoning/references/core-principles.md +42 -0
  207. package/dist/runtime/discipline/skills/aria-cognition/aria-repo-audit/SKILL.md +135 -0
  208. package/dist/runtime/discipline/skills/aria-cognition/aria-repo-audit/references/repo-audit-cookbook.md +375 -0
  209. package/dist/runtime/discipline/skills/aria-cognition/aria-research-orchestrator/SKILL.md +138 -0
  210. package/dist/runtime/discipline/skills/aria-cognition/aria-research-orchestrator/references/research-patterns.md +270 -0
  211. package/dist/runtime/discipline/skills/aria-cognition/aria-retention-engine/SKILL.md +120 -0
  212. package/dist/runtime/discipline/skills/aria-cognition/aria-retention-engine/references/retention-cookbook.md +271 -0
  213. package/dist/runtime/discipline/skills/aria-cognition/aria-revenue-engine/SKILL.md +128 -0
  214. package/dist/runtime/discipline/skills/aria-cognition/aria-revenue-engine/references/revenue-cookbook.md +227 -0
  215. package/dist/runtime/discipline/skills/aria-cognition/aria-senior-code-audit/SKILL.md +233 -0
  216. package/dist/runtime/discipline/skills/aria-cognition/aria-senior-code-audit/references/audit-checklist.md +369 -0
  217. package/dist/runtime/discipline/skills/aria-cognition/aria-senior-code-cookbook/SKILL.md +288 -0
  218. package/dist/runtime/discipline/skills/aria-cognition/aria-senior-code-cookbook/references/engineering-cookbook.md +489 -0
  219. package/dist/runtime/discipline/skills/aria-cognition/aria-soul-principles/SKILL.md +42 -0
  220. package/dist/runtime/discipline/skills/aria-cognition/aria-task-codex-executor/SKILL.md +86 -0
  221. package/dist/runtime/discipline/skills/aria-cognition/aristotle-engine/SKILL.md +42 -0
  222. package/dist/runtime/discipline/skills/aria-cognition/cross-domain-24/SKILL.md +42 -0
  223. package/dist/runtime/discipline/skills/aria-cognition/deepsoul-emotional/SKILL.md +42 -0
  224. package/dist/runtime/discipline/skills/aria-cognition/fitrah-guard/SKILL.md +78 -0
  225. package/dist/runtime/discipline/skills/aria-cognition/ghazali-8lens/SKILL.md +227 -29
  226. package/dist/runtime/discipline/skills/aria-cognition/ghazali-8lens/references/ghazali-8lens-cookbook.md +797 -0
  227. package/dist/runtime/discipline/skills/aria-cognition/ijtihad-novel/SKILL.md +42 -0
  228. package/dist/runtime/discipline/skills/aria-cognition/ilham-intuition/SKILL.md +42 -0
  229. package/dist/runtime/discipline/skills/aria-cognition/never-guess/SKILL.md +77 -0
  230. package/dist/runtime/discipline/skills/aria-cognition/noor-recognition/SKILL.md +45 -0
  231. package/dist/runtime/discipline/skills/aria-cognition/qiyas-analogy/SKILL.md +174 -14
  232. package/dist/runtime/discipline/skills/aria-cognition/ruh-basis/SKILL.md +42 -0
  233. package/dist/runtime/discipline/skills/aria-cognition/tadabbur/SKILL.md +506 -0
  234. package/dist/runtime/discipline/skills/aria-cognition/tadabbur/references/tadabbur-cookbook.md +921 -0
  235. package/dist/runtime/discipline/skills/aria-cognition/tadabbur-ops/SKILL.md +42 -0
  236. package/dist/runtime/discipline/skills/aria-cognition/tafakkur/SKILL.md +104 -0
  237. package/dist/runtime/doctrine_trigger_map.json +236 -25
  238. package/dist/runtime/embedded-public-key.mjs +27 -0
  239. package/dist/runtime/gated-ledger.mjs +41 -14
  240. package/dist/runtime/harness-daemon.mjs +85 -10
  241. package/dist/runtime/hive-wal-publisher.mjs +292 -0
  242. package/dist/runtime/hooks/README.md +58 -0
  243. package/dist/runtime/hooks/aria-agent-handoff.mjs +147 -2
  244. package/dist/runtime/hooks/aria-agent-ledger-merge.mjs +31 -7
  245. package/dist/runtime/hooks/aria-architect-fallback.mjs +10 -2
  246. package/dist/runtime/hooks/aria-claim-evidence-stop-gate.mjs +240 -0
  247. package/dist/runtime/hooks/aria-cognition-substrate-binding.mjs +84 -10
  248. package/dist/runtime/hooks/aria-first-class-coach.mjs +305 -10
  249. package/dist/runtime/hooks/aria-harness-via-sdk.mjs +93 -16
  250. package/dist/runtime/hooks/aria-import-resolution-gate.mjs +106 -20
  251. package/dist/runtime/hooks/aria-outcome-record.mjs +56 -20
  252. package/dist/runtime/hooks/aria-pre-emit-autoload.mjs +1809 -0
  253. package/dist/runtime/hooks/aria-pre-emit-autoload.mjs.before-orchestration-redesign +1400 -0
  254. package/dist/runtime/hooks/aria-pre-emit-dryrun.mjs +22 -3
  255. package/dist/runtime/hooks/aria-pre-text-gate.mjs +11 -2
  256. package/dist/runtime/hooks/aria-pre-tool-gate.mjs +477 -81
  257. package/dist/runtime/hooks/aria-pre-tool-use.mjs +70 -6
  258. package/dist/runtime/hooks/aria-preprompt-consult.mjs +23 -4
  259. package/dist/runtime/hooks/aria-repo-doctrine-gate.mjs +29 -3
  260. package/dist/runtime/hooks/aria-stop-gate.mjs +585 -76
  261. package/dist/runtime/hooks/aria-trigger-autolearn.mjs +17 -3
  262. package/dist/runtime/hooks/aria-universal-turn-packet.mjs +1165 -0
  263. package/dist/runtime/hooks/aria-userprompt-abandon-detect.mjs +9 -1
  264. package/dist/runtime/hooks/canonical-settings-block.json +172 -0
  265. package/dist/runtime/hooks/codex-native/aria-harness-ticker-sidecar.mjs +92 -0
  266. package/dist/runtime/hooks/codex-native/aria-hive-wal-consumer.mjs +86 -0
  267. package/dist/runtime/hooks/codex-native/aria-live-ticker.mjs +38 -0
  268. package/dist/runtime/hooks/codex-native/aria-post-tool-use.mjs +236 -0
  269. package/dist/runtime/hooks/codex-native/aria-pre-tool-use.mjs +362 -0
  270. package/dist/runtime/hooks/codex-native/aria-stop.mjs +691 -0
  271. package/dist/runtime/hooks/codex-native/aria-userprompt-submit.mjs +623 -0
  272. package/dist/runtime/hooks/codex-native/atlas-session-context.mjs +121 -0
  273. package/dist/runtime/hooks/codex-native/lib/evaluate-with-kernel.mjs +257 -0
  274. package/dist/runtime/hooks/codex-native/lib/hive-wal-consumer.mjs +452 -0
  275. package/dist/runtime/hooks/codex-native/lib/kernel/deterministic-cognitive-kernel.mjs +914 -0
  276. package/dist/runtime/hooks/codex-native/lib/project-boundary-cognition.mjs +143 -0
  277. package/dist/runtime/hooks/codex-native/lib/runtime-client.mjs +3567 -0
  278. package/dist/runtime/hooks/codex-native/lib/task-project-ledger.mjs +294 -0
  279. package/dist/runtime/hooks/doctrine_trigger_map.json +236 -25
  280. package/dist/runtime/hooks/doctrine_trigger_map.schema.json +46 -0
  281. package/dist/runtime/hooks/install.sh +84 -0
  282. package/dist/runtime/hooks/lib/action-ledger-core.mjs +269 -0
  283. package/dist/runtime/hooks/lib/aria-gate-ledger.mjs +143 -0
  284. package/dist/runtime/hooks/lib/ast-stub-shape-detector.mjs +107 -0
  285. package/dist/runtime/hooks/lib/atlas-dossier-client.mjs +151 -0
  286. package/dist/runtime/hooks/lib/atlas-orchestrator-postwire.mjs +221 -0
  287. package/dist/runtime/hooks/lib/canonical-lenses.mjs +83 -6
  288. package/dist/runtime/hooks/lib/coach-intent-classifier.mjs +248 -0
  289. package/dist/runtime/hooks/lib/cognitive-block-parser.mjs +111 -0
  290. package/dist/runtime/hooks/lib/doctrine-trigger-map-loader.mjs +137 -0
  291. package/dist/runtime/hooks/lib/domain-output-quality.mjs +132 -3
  292. package/dist/runtime/hooks/lib/empty-catch-scanner.mjs +91 -0
  293. package/dist/runtime/hooks/lib/end-phase-qa-autofire.mjs +426 -0
  294. package/dist/runtime/hooks/lib/evaluate-with-kernel.mjs +133 -0
  295. package/dist/runtime/hooks/lib/first-class-coach.mjs +454 -19
  296. package/dist/runtime/hooks/lib/gate-audit.mjs +12 -2
  297. package/dist/runtime/hooks/lib/gate-loop-state.mjs +11 -2
  298. package/dist/runtime/hooks/lib/goal-contract-quality.mjs +302 -0
  299. package/dist/runtime/hooks/lib/hook-message-window.mjs +101 -9
  300. package/dist/runtime/hooks/lib/invocation-required-verifier.mjs +184 -0
  301. package/dist/runtime/hooks/lib/kernel/deterministic-cognitive-kernel.mjs +906 -0
  302. package/dist/runtime/hooks/lib/obligation-ledger.mjs +147 -0
  303. package/dist/runtime/hooks/lib/orchestration-manifest-extract.mjs +217 -0
  304. package/dist/runtime/hooks/lib/owner-authorizations.mjs +269 -0
  305. package/dist/runtime/hooks/lib/probe-discipline-scanner.mjs +142 -0
  306. package/dist/runtime/hooks/lib/project-boundary-cognition.mjs +143 -0
  307. package/dist/runtime/hooks/lib/recovery-context.mjs +151 -0
  308. package/dist/runtime/hooks/lib/recovery-template-loader.mjs +154 -0
  309. package/dist/runtime/hooks/lib/self-doctrine-check.mjs +321 -0
  310. package/dist/runtime/hooks/lib/sensitive-shape-detector.mjs +64 -0
  311. package/dist/runtime/hooks/lib/skill-autoload-gate-impl.mjs +226 -1
  312. package/dist/runtime/hooks/lib/stop-hook-protocol.mjs +166 -0
  313. package/dist/runtime/hooks/lib/surface-caught.mjs +94 -0
  314. package/dist/runtime/hooks/recovery-templates/force-reauthor.md +67 -0
  315. package/dist/runtime/hooks/recovery-templates/handoff-recovery.md +25 -0
  316. package/dist/runtime/hooks/scripts/check-hard-risk-prefix.mjs +99 -0
  317. package/dist/runtime/hooks/skills/aria-conversational-doctrine-discipline/SKILL.md +101 -0
  318. package/dist/runtime/hooks/test-aria-preturn-memory-gate.mjs +2 -2
  319. package/dist/runtime/hooks/test-tier-lens-labeling.mjs +14 -3
  320. package/dist/runtime/lib/evaluate-with-kernel.mjs +133 -0
  321. package/dist/runtime/lib/kernel/deterministic-cognitive-kernel.mjs +906 -0
  322. package/dist/runtime/local-phase.mjs +10 -5
  323. package/dist/runtime/manifest.json +8 -8
  324. package/dist/runtime/packet-verifier.mjs +166 -0
  325. package/dist/runtime/provider-proxy.mjs +13 -0
  326. package/dist/runtime/quality-enforcer.mjs +40 -23
  327. package/dist/runtime/runtime-rails/registry.mjs +252 -0
  328. package/dist/runtime/sdk/BUNDLED.json +2 -2
  329. package/dist/runtime/sdk/index.d.ts +119 -4
  330. package/dist/runtime/sdk/index.js +138 -12
  331. package/dist/runtime/sdk/index.js.map +1 -1
  332. package/dist/runtime/service.mjs +8036 -764
  333. package/dist/runtime/sub-agent-enforcer.mjs +201 -0
  334. package/dist/runtime/task-project-ledger.mjs +5 -1
  335. package/dist/sdk/BUNDLED.json +2 -2
  336. package/dist/sdk/index.d.ts +119 -4
  337. package/dist/sdk/index.js +138 -12
  338. package/dist/sdk/index.js.map +1 -1
  339. package/hooks/README.md +58 -0
  340. package/hooks/aria-agent-handoff.mjs +147 -2
  341. package/hooks/aria-agent-ledger-merge.mjs +31 -7
  342. package/hooks/aria-architect-fallback.mjs +10 -2
  343. package/hooks/aria-claim-evidence-stop-gate.mjs +240 -0
  344. package/hooks/aria-cognition-substrate-binding.mjs +84 -10
  345. package/hooks/aria-first-class-coach.mjs +305 -10
  346. package/hooks/aria-harness-via-sdk.mjs +93 -16
  347. package/hooks/aria-import-resolution-gate.mjs +106 -20
  348. package/hooks/aria-outcome-record.mjs +56 -20
  349. package/hooks/aria-pre-emit-autoload.mjs +1809 -0
  350. package/hooks/aria-pre-emit-autoload.mjs.before-orchestration-redesign +1400 -0
  351. package/hooks/aria-pre-emit-dryrun.mjs +22 -3
  352. package/hooks/aria-pre-text-gate.mjs +11 -2
  353. package/hooks/aria-pre-tool-gate.mjs +477 -81
  354. package/hooks/aria-pre-tool-use.mjs +70 -6
  355. package/hooks/aria-preprompt-consult.mjs +23 -4
  356. package/hooks/aria-repo-doctrine-gate.mjs +29 -3
  357. package/hooks/aria-stop-gate.mjs +585 -76
  358. package/hooks/aria-trigger-autolearn.mjs +17 -3
  359. package/hooks/aria-universal-turn-packet.mjs +1165 -0
  360. package/hooks/aria-userprompt-abandon-detect.mjs +9 -1
  361. package/hooks/canonical-settings-block.json +172 -0
  362. package/hooks/codex-native/aria-harness-ticker-sidecar.mjs +92 -0
  363. package/hooks/codex-native/aria-hive-wal-consumer.mjs +86 -0
  364. package/hooks/codex-native/aria-live-ticker.mjs +38 -0
  365. package/hooks/codex-native/aria-post-tool-use.mjs +236 -0
  366. package/hooks/codex-native/aria-pre-tool-use.mjs +362 -0
  367. package/hooks/codex-native/aria-stop.mjs +691 -0
  368. package/hooks/codex-native/aria-userprompt-submit.mjs +623 -0
  369. package/hooks/codex-native/atlas-session-context.mjs +121 -0
  370. package/hooks/codex-native/lib/evaluate-with-kernel.mjs +257 -0
  371. package/hooks/codex-native/lib/hive-wal-consumer.mjs +452 -0
  372. package/hooks/codex-native/lib/kernel/deterministic-cognitive-kernel.mjs +914 -0
  373. package/hooks/codex-native/lib/project-boundary-cognition.mjs +143 -0
  374. package/hooks/codex-native/lib/runtime-client.mjs +3567 -0
  375. package/hooks/codex-native/lib/task-project-ledger.mjs +294 -0
  376. package/hooks/doctrine_trigger_map.json +236 -25
  377. package/hooks/doctrine_trigger_map.schema.json +46 -0
  378. package/hooks/install.sh +84 -0
  379. package/hooks/lib/action-ledger-core.mjs +269 -0
  380. package/hooks/lib/aria-gate-ledger.mjs +143 -0
  381. package/hooks/lib/ast-stub-shape-detector.mjs +107 -0
  382. package/hooks/lib/atlas-dossier-client.mjs +151 -0
  383. package/hooks/lib/atlas-orchestrator-postwire.mjs +221 -0
  384. package/hooks/lib/canonical-lenses.mjs +83 -6
  385. package/hooks/lib/coach-intent-classifier.mjs +248 -0
  386. package/hooks/lib/cognitive-block-parser.mjs +111 -0
  387. package/hooks/lib/doctrine-trigger-map-loader.mjs +137 -0
  388. package/hooks/lib/domain-output-quality.mjs +132 -3
  389. package/hooks/lib/empty-catch-scanner.mjs +91 -0
  390. package/hooks/lib/end-phase-qa-autofire.mjs +426 -0
  391. package/hooks/lib/evaluate-with-kernel.mjs +133 -0
  392. package/hooks/lib/first-class-coach.mjs +454 -19
  393. package/hooks/lib/gate-audit.mjs +12 -2
  394. package/hooks/lib/gate-loop-state.mjs +11 -2
  395. package/hooks/lib/goal-contract-quality.mjs +302 -0
  396. package/hooks/lib/hook-message-window.mjs +101 -9
  397. package/hooks/lib/invocation-required-verifier.mjs +184 -0
  398. package/hooks/lib/kernel/deterministic-cognitive-kernel.mjs +906 -0
  399. package/hooks/lib/obligation-ledger.mjs +147 -0
  400. package/hooks/lib/orchestration-manifest-extract.mjs +217 -0
  401. package/hooks/lib/owner-authorizations.mjs +269 -0
  402. package/hooks/lib/probe-discipline-scanner.mjs +142 -0
  403. package/hooks/lib/project-boundary-cognition.mjs +143 -0
  404. package/hooks/lib/recovery-context.mjs +151 -0
  405. package/hooks/lib/recovery-template-loader.mjs +154 -0
  406. package/hooks/lib/self-doctrine-check.mjs +321 -0
  407. package/hooks/lib/sensitive-shape-detector.mjs +64 -0
  408. package/hooks/lib/skill-autoload-gate-impl.mjs +226 -1
  409. package/hooks/lib/stop-hook-protocol.mjs +166 -0
  410. package/hooks/lib/surface-caught.mjs +94 -0
  411. package/hooks/recovery-templates/force-reauthor.md +67 -0
  412. package/hooks/recovery-templates/handoff-recovery.md +25 -0
  413. package/hooks/scripts/check-hard-risk-prefix.mjs +99 -0
  414. package/hooks/skills/aria-conversational-doctrine-discipline/SKILL.md +101 -0
  415. package/hooks/test-aria-preturn-memory-gate.mjs +2 -2
  416. package/hooks/test-tier-lens-labeling.mjs +14 -3
  417. package/opencode-plugins/harness-context/index.js +39 -6
  418. package/opencode-plugins/harness-context/task-project-ledger.mjs +5 -1
  419. package/opencode-plugins/harness-gate/index.js +36 -0
  420. package/opencode-plugins/harness-gate/lib/atlas-dossier-client.js +1 -0
  421. package/opencode-plugins/harness-gate/lib/recovery-grants.js +79 -0
  422. package/opencode-plugins/harness-outcome/index.js +12 -0
  423. package/opencode-plugins/harness-stop/index.js +97 -2
  424. package/opencode-plugins/harness-stop/lib/atlas-dossier-client.js +1 -0
  425. package/opencode-plugins/harness-stop/lib/domain-output-quality.js +15 -2
  426. package/opencode-plugins/lib/coach.js +148 -0
  427. package/package.json +71 -5
  428. package/runtime-src/coach-kernel.mjs +144 -7
  429. package/runtime-src/codex-bridge.mjs +254 -8
  430. package/runtime-src/embedded-public-key.mjs +27 -0
  431. package/runtime-src/gated-ledger.mjs +41 -14
  432. package/runtime-src/harness-daemon.mjs +85 -10
  433. package/runtime-src/hive-wal-publisher.mjs +292 -0
  434. package/runtime-src/lib/evaluate-with-kernel.mjs +133 -0
  435. package/runtime-src/lib/kernel/deterministic-cognitive-kernel.mjs +906 -0
  436. package/runtime-src/local-phase.mjs +10 -5
  437. package/runtime-src/packet-verifier.mjs +166 -0
  438. package/runtime-src/provider-proxy.mjs +13 -0
  439. package/runtime-src/quality-enforcer.mjs +40 -23
  440. package/runtime-src/runtime-rails/registry.mjs +252 -0
  441. package/runtime-src/service.mjs +8036 -764
  442. package/runtime-src/sub-agent-enforcer.mjs +201 -0
  443. package/scripts/aria-ledger-append.mjs +337 -0
  444. package/scripts/aria-task-cheap-worker-dispatch.mjs +234 -0
  445. package/scripts/audit-of-audit-prior-tasks.mjs +194 -0
  446. package/scripts/audit-of-audit-this-turn.mjs +116 -0
  447. package/scripts/bundle-sdk.mjs +31 -5
  448. package/scripts/check-cli-wrapper-provider-contract.mjs +160 -0
  449. package/scripts/check-client-compatibility.mjs +15 -5
  450. package/scripts/check-client-smoke.mjs +297 -0
  451. package/scripts/check-codex-orchestrator-adoption.mjs +150 -0
  452. package/scripts/check-glm-env-wired.mjs +131 -0
  453. package/scripts/check-hive-local-storage-contract.mjs +91 -0
  454. package/scripts/check-hook-mirror.mjs +150 -0
  455. package/scripts/check-install-sh-drift.mjs +152 -0
  456. package/scripts/check-kernel-sync.mjs +101 -0
  457. package/scripts/check-package-artifact.mjs +152 -0
  458. package/scripts/check-registry-mirror.mjs +71 -0
  459. package/scripts/drain-owner-airtable-sync-queue.mjs +287 -0
  460. package/scripts/export-owner-status-sheets.mjs +589 -0
  461. package/scripts/live-sidecar-receipt-canary.mjs +347 -0
  462. package/scripts/qiyas-tadabbur-model-matrix.mjs +970 -0
  463. package/scripts/quality-ab-live-provider.mjs +913 -0
  464. package/scripts/self-test-action-ledger-core.mjs +190 -0
  465. package/scripts/self-test-approval-receipt-binding.mjs +122 -0
  466. package/scripts/self-test-autofire-quality-output.mjs +110 -0
  467. package/scripts/self-test-claude-code-action-ledger.mjs +132 -0
  468. package/scripts/self-test-claude-code-mechanical-autofire-hive.mjs +138 -0
  469. package/scripts/self-test-claude-code-mechanical-autofire.mjs +234 -0
  470. package/scripts/self-test-codebase-awareness-atlas-delta.mjs +159 -0
  471. package/scripts/self-test-codebase-awareness-delta-ingest.mjs +179 -0
  472. package/scripts/self-test-codex-live-hook-parity.mjs +84 -0
  473. package/scripts/self-test-codex-native-action-ledger.mjs +167 -0
  474. package/scripts/self-test-codex-native-hook-json-contract.mjs +74 -0
  475. package/scripts/self-test-codex-orchestrator-continuity.mjs +113 -0
  476. package/scripts/self-test-codex-readable-recovery.mjs +94 -0
  477. package/scripts/self-test-codex-self-harness.mjs +538 -0
  478. package/scripts/self-test-compiled-workunit.mjs +214 -0
  479. package/scripts/self-test-continuation-output-smoke.mjs +101 -0
  480. package/scripts/self-test-cross-cli-fleet-ticker.mjs +85 -0
  481. package/scripts/self-test-cross-cli-hive-adoption.mjs +125 -0
  482. package/scripts/self-test-cross-cli-hive-learning.mjs +146 -0
  483. package/scripts/self-test-cross-phase-tool-failure.mjs +110 -0
  484. package/scripts/self-test-cross-surface-action-ledger.mjs +149 -0
  485. package/scripts/self-test-end-of-phase-qa-court.mjs +616 -0
  486. package/scripts/self-test-evaluate-with-kernel.mjs +111 -0
  487. package/scripts/self-test-first-class-output-delta-proof.mjs +307 -0
  488. package/scripts/self-test-goal-contract-output-qa.mjs +73 -0
  489. package/scripts/self-test-goal-contract.mjs +35 -0
  490. package/scripts/self-test-governed-adapters.mjs +105 -0
  491. package/scripts/self-test-governed-surface-runner.mjs +198 -0
  492. package/scripts/self-test-harness-gates.mjs +15 -12
  493. package/scripts/self-test-harness-ticker-sidecar.mjs +153 -0
  494. package/scripts/self-test-hive-org-kernel.mjs +233 -0
  495. package/scripts/self-test-hive-session-coordination.mjs +156 -0
  496. package/scripts/self-test-hive-wal-consumer.mjs +111 -0
  497. package/scripts/self-test-kernel-a3-a4-selection.mjs +179 -0
  498. package/scripts/self-test-ledger-append.mjs +175 -0
  499. package/scripts/self-test-live-codex-posttool-packet-smoke.mjs +111 -0
  500. package/scripts/self-test-live-codex-pretool-packet-smoke.mjs +101 -0
  501. package/scripts/self-test-live-codex-stop-qa-kernel-smoke.mjs +43 -0
  502. package/scripts/self-test-live-wrapper-substrate-inventory.mjs +149 -0
  503. package/scripts/self-test-local-main-sync-script.mjs +47 -0
  504. package/scripts/self-test-mechanical-autofire-resolver.mjs +296 -0
  505. package/scripts/self-test-no-consult-cognitive-skills-output.mjs +135 -0
  506. package/scripts/self-test-owner-airtable-sync-queue.mjs +196 -0
  507. package/scripts/self-test-owner-airtable-sync.mjs +181 -0
  508. package/scripts/self-test-owner-sheets-action-ledger.mjs +100 -0
  509. package/scripts/self-test-production-preflight.mjs +78 -0
  510. package/scripts/self-test-project-boundary-cognition.mjs +79 -0
  511. package/scripts/self-test-qa-exec-kernel.mjs +34 -0
  512. package/scripts/self-test-qa-recovery-learning-loop.mjs +113 -0
  513. package/scripts/self-test-qiyas-label-alignment.mjs +94 -0
  514. package/scripts/self-test-recovery-context.mjs +110 -0
  515. package/scripts/self-test-repo-guard.mjs +10 -0
  516. package/scripts/self-test-runtime-health-self-heal.mjs +161 -0
  517. package/scripts/self-test-runtime-postcondition.mjs +70 -0
  518. package/scripts/self-test-soul-precommit-hook.mjs +39 -0
  519. package/scripts/self-test-stop-gate-kernel-guards.mjs +185 -0
  520. package/scripts/self-test-stop-gate.mjs +128 -0
  521. package/scripts/self-test-substrate-kernel-execution-receipt.mjs +130 -0
  522. package/scripts/self-test-substrate-open-skill-floor.mjs +87 -0
  523. package/scripts/self-test-substrate-output-quality-eval.mjs +171 -0
  524. package/scripts/self-test-task-closeout-drift.mjs +97 -0
  525. package/scripts/self-test-task-project-ledger-readiness.mjs +43 -0
  526. package/scripts/self-test-task-runner-phase-consumer.mjs +134 -0
  527. package/scripts/self-test-task-worker-lane.mjs +256 -0
  528. package/scripts/self-test-turn-substrate-qa-kernel.mjs +188 -0
  529. package/scripts/self-test-universal-action-capture.mjs +153 -0
  530. package/scripts/self-test-universal-turn-packet-entrypoints.mjs +252 -0
  531. package/scripts/self-test-universal-turn-packet.mjs +320 -0
  532. package/scripts/session-quality-backfill.mjs +253 -0
  533. package/scripts/smoke-autofire-100-prompts.mjs +481 -0
  534. package/scripts/sync-local-main-on-task-complete.mjs +278 -0
  535. package/scripts/sync-owner-status-airtable.mjs +1158 -0
  536. package/scripts/validate-skill-prompts.mjs +12 -1
  537. package/scripts/verify-codex-native-mirror.mjs +262 -0
  538. package/skills/34-frameworks-unified/SKILL.md +42 -0
  539. package/skills/api-design/SKILL.md +123 -0
  540. package/skills/architecture-decision/SKILL.md +105 -0
  541. package/skills/aria-aristotle-cognitives/SKILL.md +128 -0
  542. package/skills/aria-aristotle-intra-phase/SKILL.md +99 -0
  543. package/skills/aria-aristotle-post-phase/SKILL.md +116 -0
  544. package/skills/aria-aristotle-pre-phase/SKILL.md +117 -0
  545. package/skills/aria-axioms-first-principles/SKILL.md +202 -0
  546. package/skills/aria-axioms-first-principles/agents/openai.yaml +4 -0
  547. package/skills/aria-axioms-first-principles/references/source-map.md +130 -0
  548. package/skills/aria-chat/SKILL.md +84 -0
  549. package/skills/aria-chat/scripts/aria-chat.sh +57 -0
  550. package/skills/aria-cognition/34-frameworks-unified/SKILL.md +42 -0
  551. package/skills/aria-cognition/aria-aristotle-cognitives/SKILL.md +128 -0
  552. package/skills/aria-cognition/aria-aristotle-intra-phase/SKILL.md +99 -0
  553. package/skills/aria-cognition/aria-aristotle-post-phase/SKILL.md +118 -0
  554. package/skills/aria-cognition/aria-aristotle-pre-phase/SKILL.md +117 -0
  555. package/skills/aria-cognition/aria-axioms-first-principles/SKILL.md +202 -0
  556. package/skills/aria-cognition/aria-axioms-first-principles/agents/openai.yaml +4 -0
  557. package/skills/aria-cognition/aria-axioms-first-principles/references/source-map.md +130 -0
  558. package/skills/aria-cognition/aria-backend-architect/SKILL.md +124 -0
  559. package/skills/aria-cognition/aria-backend-architect/references/backend-cookbook.md +417 -0
  560. package/skills/aria-cognition/aria-business-audit/SKILL.md +133 -0
  561. package/skills/aria-cognition/aria-business-audit/references/audit-cookbook.md +247 -0
  562. package/skills/aria-cognition/aria-business-frame/SKILL.md +138 -0
  563. package/skills/aria-cognition/aria-business-frame/references/business-cookbook.md +154 -0
  564. package/skills/aria-cognition/aria-chat/SKILL.md +84 -0
  565. package/skills/aria-cognition/aria-chat/scripts/aria-chat.sh +57 -0
  566. package/skills/aria-cognition/aria-cognition-autofire/SKILL.md +137 -0
  567. package/skills/aria-cognition/aria-cognition-batch/SKILL.md +264 -0
  568. package/skills/aria-cognition/aria-decision-mizan/SKILL.md +136 -0
  569. package/skills/aria-cognition/aria-decision-mizan/references/decision-frameworks.md +287 -0
  570. package/skills/aria-cognition/aria-first-class-operating-contract/SKILL.md +104 -0
  571. package/skills/aria-cognition/aria-frontend-architect/SKILL.md +123 -0
  572. package/skills/aria-cognition/aria-frontend-architect/references/frontend-cookbook.md +358 -0
  573. package/skills/aria-cognition/aria-fullstack-orchestrator/SKILL.md +127 -0
  574. package/skills/aria-cognition/aria-fullstack-orchestrator/references/fullstack-cookbook.md +383 -0
  575. package/skills/aria-cognition/aria-gtm-architect/SKILL.md +126 -0
  576. package/skills/aria-cognition/aria-gtm-architect/references/gtm-cookbook.md +235 -0
  577. package/skills/aria-cognition/aria-harness-deploy/SKILL.md +145 -0
  578. package/skills/aria-cognition/aria-harness-no-stripping/SKILL.md +135 -0
  579. package/skills/aria-cognition/aria-harness-onboarding/SKILL.md +130 -0
  580. package/skills/aria-cognition/aria-harness-output-discipline/SKILL.md +120 -0
  581. package/skills/aria-cognition/aria-harness-substrate-binding/SKILL.md +139 -0
  582. package/skills/aria-cognition/aria-http-harness-client/SKILL.md +85 -0
  583. package/skills/aria-cognition/aria-http-harness-client/scripts/smoke.mjs +47 -0
  584. package/skills/aria-cognition/aria-k8s-deploy/SKILL.md +174 -0
  585. package/skills/aria-cognition/aria-k8s-deploy/agents/openai.yaml +3 -0
  586. package/skills/aria-cognition/aria-ladduniframe/SKILL.md +60 -0
  587. package/skills/aria-cognition/aria-ledger-fleet-execution/SKILL.md +126 -0
  588. package/skills/aria-cognition/aria-live-ops/SKILL.md +54 -0
  589. package/skills/aria-cognition/aria-mac-ssh-ops/SKILL.md +100 -0
  590. package/skills/aria-cognition/aria-memory-index/SKILL.md +42 -0
  591. package/skills/aria-cognition/aria-noor-cognitives/SKILL.md +120 -0
  592. package/skills/aria-cognition/aria-ops/SKILL.md +60 -0
  593. package/skills/aria-cognition/aria-ops/references/live-endpoints.md +59 -0
  594. package/skills/aria-cognition/aria-quality-audit/SKILL.md +133 -0
  595. package/skills/aria-cognition/aria-readable-output/SKILL.md +239 -0
  596. package/skills/aria-cognition/aria-readable-output/references/layout-cookbook.md +366 -0
  597. package/skills/aria-cognition/aria-reasoning/SKILL.md +67 -0
  598. package/skills/aria-cognition/aria-reasoning/references/core-principles.md +42 -0
  599. package/skills/aria-cognition/aria-repo-audit/SKILL.md +135 -0
  600. package/skills/aria-cognition/aria-repo-audit/references/repo-audit-cookbook.md +375 -0
  601. package/skills/aria-cognition/aria-research-orchestrator/SKILL.md +138 -0
  602. package/skills/aria-cognition/aria-research-orchestrator/references/research-patterns.md +270 -0
  603. package/skills/aria-cognition/aria-retention-engine/SKILL.md +120 -0
  604. package/skills/aria-cognition/aria-retention-engine/references/retention-cookbook.md +271 -0
  605. package/skills/aria-cognition/aria-revenue-engine/SKILL.md +128 -0
  606. package/skills/aria-cognition/aria-revenue-engine/references/revenue-cookbook.md +227 -0
  607. package/skills/aria-cognition/aria-senior-code-audit/SKILL.md +233 -0
  608. package/skills/aria-cognition/aria-senior-code-audit/references/audit-checklist.md +369 -0
  609. package/skills/aria-cognition/aria-senior-code-cookbook/SKILL.md +288 -0
  610. package/skills/aria-cognition/aria-senior-code-cookbook/references/engineering-cookbook.md +489 -0
  611. package/skills/aria-cognition/aria-soul-principles/SKILL.md +42 -0
  612. package/skills/aria-cognition/aria-task-codex-executor/SKILL.md +86 -0
  613. package/skills/aria-cognition/aristotle-engine/SKILL.md +42 -0
  614. package/skills/aria-cognition/cross-domain-24/SKILL.md +42 -0
  615. package/skills/aria-cognition/deepsoul-emotional/SKILL.md +42 -0
  616. package/skills/aria-cognition/fitrah-guard/SKILL.md +78 -0
  617. package/skills/aria-cognition/ghazali-8lens/SKILL.md +227 -29
  618. package/skills/aria-cognition/ghazali-8lens/references/ghazali-8lens-cookbook.md +797 -0
  619. package/skills/aria-cognition/ijtihad-novel/SKILL.md +42 -0
  620. package/skills/aria-cognition/ilham-intuition/SKILL.md +42 -0
  621. package/skills/aria-cognition/never-guess/SKILL.md +77 -0
  622. package/skills/aria-cognition/noor-recognition/SKILL.md +45 -0
  623. package/skills/aria-cognition/qiyas-analogy/SKILL.md +174 -14
  624. package/skills/aria-cognition/ruh-basis/SKILL.md +42 -0
  625. package/skills/aria-cognition/tadabbur/SKILL.md +506 -0
  626. package/skills/aria-cognition/tadabbur/references/tadabbur-cookbook.md +921 -0
  627. package/skills/aria-cognition/tadabbur-ops/SKILL.md +42 -0
  628. package/skills/aria-cognition/tafakkur/SKILL.md +104 -0
  629. package/skills/aria-cognition-autofire/SKILL.md +109 -0
  630. package/skills/aria-cognition-batch/SKILL.md +264 -0
  631. package/skills/aria-conversational-doctrine-discipline/SKILL.md +125 -0
  632. package/skills/aria-essence/SKILL.md +81 -0
  633. package/skills/aria-essence/references/domain-matrix.md +80 -0
  634. package/skills/aria-essence/references/evolution-loop.md +30 -0
  635. package/skills/aria-essence/references/readable-cognition.md +27 -0
  636. package/skills/aria-first-class-operating-contract/SKILL.md +104 -0
  637. package/skills/aria-forge-guardrails/SKILL.md +53 -0
  638. package/skills/aria-forge-guardrails/references/checklist.md +31 -0
  639. package/skills/aria-harness-deploy/SKILL.md +145 -0
  640. package/skills/aria-harness-no-stripping/SKILL.md +135 -0
  641. package/skills/aria-harness-onboarding/SKILL.md +130 -0
  642. package/skills/aria-harness-output-discipline/SKILL.md +120 -0
  643. package/skills/aria-harness-substrate-binding/SKILL.md +139 -0
  644. package/skills/aria-http-harness-client/SKILL.md +85 -0
  645. package/skills/aria-http-harness-client/scripts/smoke.mjs +47 -0
  646. package/skills/aria-k8s-deploy/SKILL.md +174 -0
  647. package/skills/aria-k8s-deploy/agents/openai.yaml +3 -0
  648. package/skills/aria-ladduniframe/SKILL.md +60 -0
  649. package/skills/aria-ledger-fleet-execution/SKILL.md +126 -0
  650. package/skills/aria-live-ops/SKILL.md +54 -0
  651. package/skills/aria-mac-ssh-ops/SKILL.md +100 -0
  652. package/skills/aria-memory-index/SKILL.md +42 -0
  653. package/skills/aria-noor-cognitives/SKILL.md +120 -0
  654. package/skills/aria-ops/SKILL.md +60 -0
  655. package/skills/aria-ops/references/live-endpoints.md +59 -0
  656. package/skills/aria-quality-audit/SKILL.md +133 -0
  657. package/skills/aria-reasoning/SKILL.md +67 -0
  658. package/skills/aria-reasoning/references/core-principles.md +42 -0
  659. package/skills/aria-repo-doctrine/SKILL.md +57 -0
  660. package/skills/aria-soul-principles/SKILL.md +42 -0
  661. package/skills/aria-task-codex-executor/SKILL.md +86 -0
  662. package/skills/aristotle-engine/SKILL.md +42 -0
  663. package/skills/ci-cd-pipeline/SKILL.md +116 -0
  664. package/skills/code-review/SKILL.md +131 -0
  665. package/skills/cross-domain-24/SKILL.md +42 -0
  666. package/skills/database-design/SKILL.md +124 -0
  667. package/skills/deepsoul-emotional/SKILL.md +42 -0
  668. package/skills/deno-kv-raft-pubsub/SKILL.md +561 -0
  669. package/skills/deno-kv-raft-pubsub/reference/maelstrom-integration.md +393 -0
  670. package/skills/deno-kv-raft-pubsub/reference/pubsub-api.md +376 -0
  671. package/skills/deno-kv-raft-pubsub/reference/raft-spec.md +402 -0
  672. package/skills/deno-kv-raft-pubsub/reference/state-machine.md +182 -0
  673. package/skills/error-handling/SKILL.md +159 -0
  674. package/skills/firecrawl/SKILL.md +165 -0
  675. package/skills/firecrawl/rules/install.md +82 -0
  676. package/skills/firecrawl/rules/security.md +26 -0
  677. package/skills/firecrawl-agent/SKILL.md +86 -0
  678. package/skills/firecrawl-build-interact/SKILL.md +96 -0
  679. package/skills/firecrawl-build-onboarding/SKILL.md +131 -0
  680. package/skills/firecrawl-build-onboarding/references/auth-flow.md +39 -0
  681. package/skills/firecrawl-build-onboarding/references/project-setup.md +20 -0
  682. package/skills/firecrawl-build-onboarding/references/sdk-installation.md +17 -0
  683. package/skills/firecrawl-build-scrape/SKILL.md +97 -0
  684. package/skills/firecrawl-build-search/SKILL.md +97 -0
  685. package/skills/firecrawl-clone/SKILL.md +419 -0
  686. package/skills/firecrawl-crawl/SKILL.md +87 -0
  687. package/skills/firecrawl-download/SKILL.md +98 -0
  688. package/skills/firecrawl-interact/SKILL.md +112 -0
  689. package/skills/firecrawl-map/SKILL.md +79 -0
  690. package/skills/firecrawl-scrape/SKILL.md +97 -0
  691. package/skills/firecrawl-search/SKILL.md +88 -0
  692. package/skills/fitrah-guard/SKILL.md +78 -0
  693. package/skills/forge-quality-rules/SKILL.md +61 -0
  694. package/skills/ghazali-8lens/SKILL.md +56 -0
  695. package/skills/ijtihad-novel/SKILL.md +42 -0
  696. package/skills/ilham-intuition/SKILL.md +42 -0
  697. package/skills/imagegen/LICENSE.txt +201 -0
  698. package/skills/imagegen/SKILL.md +374 -0
  699. package/skills/imagegen/agents/openai.yaml +6 -0
  700. package/skills/imagegen/assets/imagegen-small.svg +5 -0
  701. package/skills/imagegen/assets/imagegen.png +0 -0
  702. package/skills/imagegen/references/cli.md +242 -0
  703. package/skills/imagegen/references/codex-network.md +33 -0
  704. package/skills/imagegen/references/image-api.md +90 -0
  705. package/skills/imagegen/references/prompting.md +118 -0
  706. package/skills/imagegen/references/sample-prompts.md +433 -0
  707. package/skills/imagegen/scripts/image_gen.py +995 -0
  708. package/skills/imagegen/scripts/remove_chroma_key.py +440 -0
  709. package/skills/istiqra-induction/SKILL.md +44 -0
  710. package/skills/ladunni-22/SKILL.md +53 -0
  711. package/skills/mizan/SKILL.md +90 -0
  712. package/skills/nadia/SKILL.md +56 -0
  713. package/skills/nadia-psi/SKILL.md +56 -0
  714. package/skills/never-guess/SKILL.md +75 -0
  715. package/skills/noor-recognition/SKILL.md +45 -0
  716. package/skills/observability/SKILL.md +133 -0
  717. package/skills/openai-docs/LICENSE.txt +201 -0
  718. package/skills/openai-docs/SKILL.md +100 -0
  719. package/skills/openai-docs/agents/openai.yaml +14 -0
  720. package/skills/openai-docs/assets/openai-small.svg +3 -0
  721. package/skills/openai-docs/assets/openai.png +0 -0
  722. package/skills/openai-docs/references/latest-model.md +37 -0
  723. package/skills/openai-docs/references/prompting-guide.md +244 -0
  724. package/skills/openai-docs/references/upgrade-guide.md +181 -0
  725. package/skills/openai-docs/scripts/resolve-latest-model-info.js +147 -0
  726. package/skills/pdf/LICENSE.txt +201 -0
  727. package/skills/pdf/SKILL.md +85 -0
  728. package/skills/pdf/agents/openai.yaml +5 -0
  729. package/skills/pdf/assets/pdf.png +0 -0
  730. package/skills/playwright/LICENSE.txt +201 -0
  731. package/skills/playwright/NOTICE.txt +14 -0
  732. package/skills/playwright/SKILL.md +165 -0
  733. package/skills/playwright/agents/openai.yaml +6 -0
  734. package/skills/playwright/assets/playwright-small.svg +3 -0
  735. package/skills/playwright/assets/playwright.png +0 -0
  736. package/skills/playwright/references/cli.md +116 -0
  737. package/skills/playwright/references/workflows.md +95 -0
  738. package/skills/playwright/scripts/playwright_cli.sh +25 -0
  739. package/skills/plugin-creator/SKILL.md +178 -0
  740. package/skills/plugin-creator/agents/openai.yaml +6 -0
  741. package/skills/plugin-creator/assets/plugin-creator-small.svg +3 -0
  742. package/skills/plugin-creator/assets/plugin-creator.png +0 -0
  743. package/skills/plugin-creator/references/plugin-json-spec.md +170 -0
  744. package/skills/plugin-creator/scripts/create_basic_plugin.py +301 -0
  745. package/skills/predictor/SKILL.md +43 -0
  746. package/skills/qiyas-analogy/SKILL.md +204 -0
  747. package/skills/refactoring/SKILL.md +137 -0
  748. package/skills/ruh-basis/SKILL.md +42 -0
  749. package/skills/security-review/SKILL.md +129 -0
  750. package/skills/skill-creator/SKILL.md +434 -0
  751. package/skills/skill-creator/agents/openai.yaml +5 -0
  752. package/skills/skill-creator/assets/skill-creator-small.svg +3 -0
  753. package/skills/skill-creator/assets/skill-creator.png +0 -0
  754. package/skills/skill-creator/license.txt +202 -0
  755. package/skills/skill-creator/references/openai_yaml.md +49 -0
  756. package/skills/skill-creator/scripts/generate_openai_yaml.py +226 -0
  757. package/skills/skill-creator/scripts/init_skill.py +400 -0
  758. package/skills/skill-creator/scripts/quick_validate.py +101 -0
  759. package/skills/skill-installer/LICENSE.txt +202 -0
  760. package/skills/skill-installer/SKILL.md +76 -0
  761. package/skills/skill-installer/agents/openai.yaml +5 -0
  762. package/skills/skill-installer/assets/skill-installer-small.svg +3 -0
  763. package/skills/skill-installer/assets/skill-installer.png +0 -0
  764. package/skills/skill-installer/scripts/github_utils.py +21 -0
  765. package/skills/skill-installer/scripts/install-skill-from-github.py +308 -0
  766. package/skills/skill-installer/scripts/list-skills.py +107 -0
  767. package/skills/skills-and-hooks-reference/SKILL.md +196 -0
  768. package/skills/soul-domains/SKILL.md +43 -0
  769. package/skills/tadabbur/SKILL.md +232 -0
  770. package/skills/tadabbur-ops/SKILL.md +42 -0
  771. package/skills/tafakkur/SKILL.md +104 -0
  772. package/skills/testing-strategy/SKILL.md +122 -0
  773. package/src/action-ledger-core.ts +1054 -0
  774. package/src/chat.ts +5 -6
  775. package/src/codebase-scanner.ts +2 -0
  776. package/src/connectors/claude-code.ts +149 -12
  777. package/src/connectors/codebase-awareness.ts +325 -25
  778. package/src/connectors/codex.ts +1225 -41
  779. package/src/connectors/cursor.ts +8 -0
  780. package/src/connectors/governed-adapter.ts +174 -0
  781. package/src/connectors/opencode.ts +18 -2
  782. package/src/connectors/repo-guard.ts +24 -12
  783. package/src/connectors/runtime.ts +99 -2
  784. package/src/connectors/shell.ts +125 -7
  785. package/src/cross-cli-hive-binding.ts +290 -0
  786. package/src/garden-control-plane.ts +24 -1
  787. package/src/governed-surface-runner.ts +1227 -0
  788. package/src/index.ts +104 -1
  789. package/src/task-runner.ts +3794 -0
  790. package/dist/aria-connector/src/install-hooks.d.ts +0 -18
  791. package/dist/aria-connector/src/install-hooks.d.ts.map +0 -1
  792. package/dist/aria-connector/src/install-hooks.js +0 -224
  793. package/dist/aria-connector/src/install-hooks.js.map +0 -1
  794. package/dist/aria-connector/src/onboarding-wizard.d.ts +0 -5
  795. package/dist/aria-connector/src/onboarding-wizard.d.ts.map +0 -1
  796. package/dist/aria-connector/src/onboarding-wizard.js +0 -188
  797. package/dist/aria-connector/src/onboarding-wizard.js.map +0 -1
  798. package/dist/cli-0.2.38.tgz +0 -0
  799. package/dist/install.sh +0 -13
  800. package/src/__tests__/anthropic-oauth.test.ts +0 -186
  801. package/src/__tests__/auth-commands.test.ts +0 -132
  802. package/src/__tests__/owner-login.test.ts +0 -311
@@ -0,0 +1,142 @@
1
+ /**
2
+ * probe-discipline-scanner.mjs — no-timeouts doctrine enforcement at the
3
+ * pre-tool-gate Bash surface. Doctrine: feedback_no_timeouts_doctrine.md
4
+ * + no_timeouts_decision_tree_rule (aria-hardening-worker/src/watcher.ts:6).
5
+ * Deadline-based escape from retry loops forbidden; use bounded retry by
6
+ * error count + LOUD failure surfaces.
7
+ *
8
+ * Scanned: shell-position `timeout N` wrapper (^timeout, | timeout, &&
9
+ * timeout, ; timeout, $( timeout). NOT scanned: tool-internal flags like
10
+ * curl --max-time, which are legitimate tool-bounded probes.
11
+ *
12
+ * Behavior: warn 1st-2nd occurrence in session, HARD-BLOCK at 3+ via
13
+ * ARIA_PROBE_DISCIPLINE_BYPASS=1 escape hatch. Both warn and block paths
14
+ * log to ~/.claude/aria-discoveries-<session>.jsonl so the hardening
15
+ * worker (F2) accumulates cross-session signal.
16
+ */
17
+
18
+ import { appendFileSync, existsSync, mkdirSync, readFileSync } from 'node:fs';
19
+ import { dirname } from 'node:path';
20
+ import { homedir } from 'node:os';
21
+
22
+ const HOME = homedir();
23
+ const COUNTER_PATH = `${HOME}/.claude/.aria-probe-discipline-counter.jsonl`;
24
+ const DISCOVERY_LEDGER_PREFIX = `${HOME}/.claude/aria-discoveries-`;
25
+ const TIMEOUT_WRAPPER_RX = /(?:^|\||&&|;|\$\()\s*timeout\s+\d+(?:[smhd])?\b/g;
26
+ const HARD_BLOCK_THRESHOLD = 3;
27
+ const SESSION_RECENT_WINDOW_MS = 30 * 60 * 1000;
28
+
29
+ export function scanProbeDiscipline(cmd, sessionId) {
30
+ const result = {
31
+ matched: false,
32
+ matchCount: 0,
33
+ sessionCount: 0,
34
+ blocked: false,
35
+ bypassed: false,
36
+ blockReason: null,
37
+ warned: false,
38
+ };
39
+ if (typeof cmd !== 'string' || cmd.length === 0) return result;
40
+ TIMEOUT_WRAPPER_RX.lastIndex = 0;
41
+ const matches = cmd.match(TIMEOUT_WRAPPER_RX) || [];
42
+ if (matches.length === 0) return result;
43
+
44
+ result.matched = true;
45
+ result.matchCount = matches.length;
46
+ const bypassed = /^(?:1|true|yes|on)$/i.test(String(process.env.ARIA_PROBE_DISCIPLINE_BYPASS || ''));
47
+ result.bypassed = bypassed;
48
+
49
+ const now = Date.now();
50
+ const ts = new Date(now).toISOString();
51
+ const entry = {
52
+ ts,
53
+ sessionId: String(sessionId || 'unknown'),
54
+ matches: matches.map((m) => m.trim()).slice(0, 5),
55
+ cmdPreview: cmd.slice(0, 120).replace(/\s+/g, ' '),
56
+ bypassed,
57
+ };
58
+ try {
59
+ if (!existsSync(dirname(COUNTER_PATH))) mkdirSync(dirname(COUNTER_PATH), { recursive: true });
60
+ appendFileSync(COUNTER_PATH, JSON.stringify(entry) + '\n');
61
+ } catch (err) {
62
+ process.stderr.write(`[probe-discipline:counter-write] caught: ${err?.message || err}\n`);
63
+ }
64
+
65
+ let sessionCount = 0;
66
+ try {
67
+ if (existsSync(COUNTER_PATH)) {
68
+ const raw = readFileSync(COUNTER_PATH, 'utf-8');
69
+ const cutoff = now - SESSION_RECENT_WINDOW_MS;
70
+ for (const line of raw.split('\n')) {
71
+ if (!line.trim()) continue;
72
+ let row;
73
+ try { row = JSON.parse(line); } catch { continue; }
74
+ if (row.sessionId !== entry.sessionId) continue;
75
+ const ms = new Date(row.ts).getTime();
76
+ if (!Number.isFinite(ms) || ms < cutoff) continue;
77
+ sessionCount++;
78
+ }
79
+ }
80
+ } catch (err) {
81
+ process.stderr.write(`[probe-discipline:counter-read] caught: ${err?.message || err}\n`);
82
+ sessionCount = 1;
83
+ }
84
+ result.sessionCount = sessionCount;
85
+
86
+ const discoveryPath = `${DISCOVERY_LEDGER_PREFIX}${String(sessionId || 'unknown').replace(/[^a-zA-Z0-9_-]/g, '_')}.jsonl`;
87
+ const discoveryRow = {
88
+ ts,
89
+ kind: 'probe_discipline_violation',
90
+ resolution_status: 'open',
91
+ pattern: 'shell_timeout_wrapper',
92
+ sessionCount,
93
+ bypassed,
94
+ cmdPreview: entry.cmdPreview,
95
+ doctrine: 'feedback_no_timeouts_doctrine.md / no_timeouts_decision_tree_rule',
96
+ counterAction: 'bounded retry by error count + LOUD failure; never deadline-based escape',
97
+ };
98
+ try {
99
+ if (!existsSync(dirname(discoveryPath))) mkdirSync(dirname(discoveryPath), { recursive: true });
100
+ appendFileSync(discoveryPath, JSON.stringify(discoveryRow) + '\n');
101
+ } catch (err) {
102
+ process.stderr.write(`[probe-discipline:ledger-write] caught: ${err?.message || err}\n`);
103
+ }
104
+
105
+ if (bypassed) {
106
+ process.stderr.write(
107
+ `[probe-discipline:BYPASS-APPLIED] cmd-match=${matches[0]} sessionCount=${sessionCount} ARIA_PROBE_DISCIPLINE_BYPASS=1 — allowing this turn; bypass logged to ledger\n`,
108
+ );
109
+ result.warned = true;
110
+ return result;
111
+ }
112
+
113
+ if (sessionCount >= HARD_BLOCK_THRESHOLD) {
114
+ result.blocked = true;
115
+ result.blockReason = `Aria pre-tool gate: PROBE-DISCIPLINE hard-block.
116
+
117
+ The command contains a shell-position 'timeout N' wrapper (matched: ${matches.slice(0, 3).join(', ')}).
118
+ This is the ${sessionCount}-th such invocation in this session within the last 30 minutes.
119
+
120
+ Doctrine 'no_timeouts_decision_tree_rule' (feedback_no_timeouts_doctrine.md): deadline-based escape from a retry loop is forbidden. Use bounded retry by error count + LOUD failure surfaces + explicit recovery, never an opaque deadline.
121
+
122
+ Legitimate alternatives:
123
+ - curl --max-time N ... (tool-bounded probe, NOT shell wrapper)
124
+ - fs.watchFile(...) (OS-level polling, no deadline)
125
+ - bounded retry-by-error-count (per Recovery Contract)
126
+
127
+ To bypass for an explicitly authorized probe: ARIA_PROBE_DISCIPLINE_BYPASS=1 <your-command>
128
+ (Bypass usage is logged to the discovery ledger; operator gets full audit trail.)
129
+
130
+ Next action: rewrite the command using a legitimate alternative OR set the bypass env var explicitly.`;
131
+ process.stderr.write(
132
+ `[probe-discipline:HARD-BLOCK] sessionCount=${sessionCount}/${HARD_BLOCK_THRESHOLD} matches=${matches.join(',')}\n`,
133
+ );
134
+ return result;
135
+ }
136
+
137
+ result.warned = true;
138
+ process.stderr.write(
139
+ `[probe-discipline:WARN] shell-position timeout wrapper detected (sessionCount=${sessionCount}/${HARD_BLOCK_THRESHOLD}) matches=${matches.slice(0, 3).join(',')} — doctrine: no_timeouts_decision_tree_rule. Hard-block at ${HARD_BLOCK_THRESHOLD}+. Bypass: ARIA_PROBE_DISCIPLINE_BYPASS=1\n`,
140
+ );
141
+ return result;
142
+ }
@@ -0,0 +1,143 @@
1
+ const PROJECT_WORK_RX = /\b(?:project|phase|implement|wire|upgrade|fix|repair|continue|finish|execute|end[-\s]?to[-\s]?end|qa|test|verify|ledger|connector|terminal|runtime|hook|skill|autofire|atlas|repo|codebase|first[-\s]?class|symptom\s+fix|doctrine|harness)\b/i;
2
+ const COMPLETION_CLAIM_RX = /\b(?:done|complete|completed|ready|verified|fixed|finished|shipped|implemented|wired|first[-\s]?class|end[-\s]?to[-\s]?end)\b/i;
3
+ const OWNER_CORRECTION_RX = /\b(?:you(?:\s+are|'re| were)?\s+right|u\s+r\s+right|i\s+am\s+right|another\s+failure|that'?s\s+(?:a\s+)?failure|ledger\s+failur\w*|symptom\s+fix|not\s+(?:a\s+)?first[-\s]?class|why\s+(?:not|haven'?t|didn'?t)|self[-\s]?audit|auto[-\s]?trigg\w*|fire\s+(?:the\s+)?skills?|fix\s+what\s+u?\s*found|corrected[\s\S]{0,40}\b\d+(?:k|\+)?\s+times)\b/i;
4
+ const ASSISTANT_CORRECTION_ACK_RX = /\b(?:you(?:\s+are|'re| were)?\s+right|i\s+should\s+have|i\s+missed|i\s+was\s+wrong|that\s+was\s+(?:a\s+)?miss|i\s+failed\s+to)\b/i;
5
+
6
+ export const PROJECT_START_TADABBUR_QUESTIONS = Object.freeze([
7
+ 'What is the exact project object under reflection, not the surface request?',
8
+ 'Which owner, doctrine, runtime, repo, and no-harm constraints bind the first action?',
9
+ 'What evidence is missing before action, and what source will be checked first?',
10
+ 'What repeated correction or hidden mechanism failure could recur if not handled now?',
11
+ 'What observable predicate will prove the start action and final closeout succeeded?',
12
+ ]);
13
+
14
+ // Aligned 1:1 to atlas kernel QIYAS_PERSPECTIVES (deterministic-cognitive-kernel.mjs:18)
15
+ // for consistency across all project-boundary + end-phase QA receipts. 2026-05-17 F2.
16
+ export const PROJECT_END_QIYAS_PERSPECTIVES = Object.freeze([
17
+ 'Owner-Hamza-now',
18
+ 'Owner-Hamza-future',
19
+ 'operator-client',
20
+ 'investor-or-buyer',
21
+ 'LLM-consumer',
22
+ 'human-end-user',
23
+ 'skeptic',
24
+ 'compliance',
25
+ 'engineering-quality',
26
+ 'cognitive-load',
27
+ 'scale',
28
+ 'Islamic-scholar',
29
+ 'clinical-scholar',
30
+ 'red-team-attacker',
31
+ 'future-self',
32
+ ]);
33
+
34
+ export function detectProjectBoundaryNeed(userText = '', assistantText = '') {
35
+ const user = String(userText || '');
36
+ const assistant = String(assistantText || '');
37
+ const projectLike = PROJECT_WORK_RX.test(user) || user.length >= 180;
38
+ const completionClaim = COMPLETION_CLAIM_RX.test(assistant);
39
+ const ownerCorrection = OWNER_CORRECTION_RX.test(user) || ASSISTANT_CORRECTION_ACK_RX.test(assistant);
40
+ return {
41
+ required: projectLike || completionClaim || ownerCorrection,
42
+ projectLike,
43
+ completionClaim,
44
+ ownerCorrection,
45
+ };
46
+ }
47
+
48
+ export function buildProjectStartBoundary({
49
+ userText = '',
50
+ cognitiveRuntimeReceipts = null,
51
+ source = 'project-start-boundary',
52
+ } = {}) {
53
+ const need = detectProjectBoundaryNeed(userText);
54
+ const tadabbur = cognitiveRuntimeReceipts?.tadabbur || {};
55
+ const qiyas = cognitiveRuntimeReceipts?.qiyas || {};
56
+ const tadabburOk = tadabbur.ok === true && tadabbur.stageCount === 12;
57
+ return {
58
+ schema: 'aria.project_boundary_cognition.v1',
59
+ phase: 'project_start',
60
+ source,
61
+ required: need.required,
62
+ ok: !need.required || tadabburOk,
63
+ trigger: need,
64
+ startTadabbur: {
65
+ required: need.required,
66
+ ok: !need.required || tadabburOk,
67
+ expectedStages: 12,
68
+ observedStages: Number(tadabbur.stageCount || 0),
69
+ mode: tadabbur.mode || null,
70
+ questions: [...PROJECT_START_TADABBUR_QUESTIONS],
71
+ },
72
+ endQiyasContract: {
73
+ requiredAtClose: need.required,
74
+ expectedPerspectives: PROJECT_END_QIYAS_PERSPECTIVES.length,
75
+ preloadedPerspectives: Number(qiyas.perspectiveCount || 0),
76
+ status: need.required ? 'pending_phase_close' : 'not_required',
77
+ },
78
+ };
79
+ }
80
+
81
+ export function evaluateProjectEndBoundary({
82
+ userText = '',
83
+ assistantText = '',
84
+ endPhaseQaAutofire = null,
85
+ source = 'project-end-boundary',
86
+ } = {}) {
87
+ const need = detectProjectBoundaryNeed(userText, assistantText);
88
+ const receipt = endPhaseQaAutofire?.receipt || endPhaseQaAutofire || {};
89
+ const qiyasPass = Array.isArray(receipt.qiyas_15_pass) && receipt.qiyas_15_pass.length === PROJECT_END_QIYAS_PERSPECTIVES.length;
90
+ const qiyasPerspectiveCount = Number(receipt.cognitive_qiyas_15?.perspectives || 0);
91
+ const tadabburStageCount = Number(receipt.cognitive_tadabbur_12?.stages || 0);
92
+ const claimVerdict = receipt.claim_gate?.verdict || null;
93
+ const claimOk = !claimVerdict || ['verified', 'verified_narrowly'].includes(claimVerdict);
94
+ const missing = [];
95
+ if (need.required && qiyasPerspectiveCount !== PROJECT_END_QIYAS_PERSPECTIVES.length) missing.push('qiyas_15_perspective_count');
96
+ if (need.required && !qiyasPass) missing.push('qiyas_15_pass_entries');
97
+ if (need.required && tadabburStageCount !== 12) missing.push('tadabbur_12_closeout_count');
98
+ if (need.required && !claimOk) missing.push('claim_gate_verified_or_narrowly_verified');
99
+ return {
100
+ schema: 'aria.project_boundary_cognition.v1',
101
+ phase: 'project_end',
102
+ source,
103
+ required: need.required,
104
+ ok: !need.required || missing.length === 0,
105
+ trigger: need,
106
+ endQiyas: {
107
+ required: need.required,
108
+ ok: !need.required || (qiyasPerspectiveCount === PROJECT_END_QIYAS_PERSPECTIVES.length && qiyasPass),
109
+ expectedPerspectives: PROJECT_END_QIYAS_PERSPECTIVES.length,
110
+ observedPerspectives: qiyasPerspectiveCount,
111
+ passEntries: Array.isArray(receipt.qiyas_15_pass) ? receipt.qiyas_15_pass.length : 0,
112
+ },
113
+ closeoutTadabbur: {
114
+ expectedStages: 12,
115
+ observedStages: tadabburStageCount,
116
+ },
117
+ claimGate: {
118
+ verdict: claimVerdict,
119
+ ok: claimOk,
120
+ },
121
+ missing,
122
+ };
123
+ }
124
+
125
+ export function formatProjectBoundaryPrompt(boundary) {
126
+ if (!boundary?.required) return 'Project boundary: not required for this turn.';
127
+ return [
128
+ 'Project boundary: start Tadabbur-12 is required before action; end Qiyas-15 is required before closeout.',
129
+ `Start Tadabbur: ${boundary.startTadabbur?.ok ? 'pass' : 'missing'} (${boundary.startTadabbur?.observedStages || 0}/${boundary.startTadabbur?.expectedStages || 12})`,
130
+ 'Automatic start questions:',
131
+ ...PROJECT_START_TADABBUR_QUESTIONS.map((question, index) => `${index + 1}. ${question}`),
132
+ `End Qiyas pending: ${boundary.endQiyasContract?.expectedPerspectives || 15} perspectives at phase close.`,
133
+ ].join('\n');
134
+ }
135
+
136
+ export function formatProjectBoundaryBlock(boundary) {
137
+ return [
138
+ 'Project boundary cognition failed before release.',
139
+ `phase: ${boundary?.phase || 'unknown'}`,
140
+ `missing: ${(boundary?.missing || []).join(', ') || 'project_start_tadabbur_12'}`,
141
+ 'required repair: run Tadabbur-12 at project start and Qiyas-15 at phase close, then re-check the claim gate from evidence.',
142
+ ].join('\n');
143
+ }
@@ -0,0 +1,151 @@
1
+ // Recovery context loader (M1.2 — Bug B fix).
2
+ //
3
+ // Doctrine bind:
4
+ // - feedback_no_graceful_degradation.md — recovery contracts written to disk by
5
+ // stop-gate / cognition-substrate-binding MUST be delivered to the next-turn
6
+ // model. Writing to disk and never reading is graceful degradation.
7
+ // - aria-repo-doctrine — real implementation; archive on pickup so the contract
8
+ // doesn't re-fire indefinitely.
9
+ //
10
+ // Lifted from packages/aria-connector/opencode-plugins/harness-context/inject-context.mjs:90
11
+ // to make the same delivery channel available to the Claude Code surface (was missing,
12
+ // see audit ledger Layer 4 / Bug B).
13
+ //
14
+ // Used by:
15
+ // - ops/claude-hooks/aria-harness-via-sdk.mjs (SessionStart + UserPromptSubmit)
16
+ // - packages/aria-connector/hooks/aria-harness-via-sdk.mjs (mirror)
17
+
18
+ import { existsSync, mkdirSync, readFileSync, renameSync, statSync } from 'node:fs';
19
+ import { homedir } from 'node:os';
20
+ import { dirname, join } from 'node:path';
21
+
22
+ const HOME = homedir();
23
+ const RECOVERY_PATH = join(HOME, '.aria', 'governance-recovery-current.json');
24
+ const ARCHIVE_DIR = join(HOME, '.aria', 'governance-recovery-archive');
25
+
26
+ // M0.H.X9 (2026-05-06) — Phase 0 audit Cluster H finding M0.H.19:
27
+ // recovery contracts now schema-versioned. Writers (aria-stop-gate +
28
+ // aria-cognition-substrate-binding) emit `schema: 'aria.governance_
29
+ // recovery_current.v1'`. This reader checks the schema field on read
30
+ // and surfaces version mismatch via stderr — operator sees if a
31
+ // contract was written by an out-of-date writer (e.g., a stale
32
+ // connector hooks installation) before consuming.
33
+ //
34
+ // M0.SELFREVIEW.11 (2026-05-06) — fail-CLOSED on unsupported schema.
35
+ // Previous behavior was consume-with-warn for missing/unknown schema;
36
+ // a malformed or spoofed recovery contract could feed misleading state
37
+ // to the model. Now: missing schema OR unsupported schema = reject,
38
+ // quarantine the contract, return empty block. Operator gets a stderr
39
+ // message naming the schema actually seen vs supported. The quarantine
40
+ // dir prevents the same bad contract from re-firing every turn.
41
+ const SUPPORTED_RECOVERY_SCHEMAS = Object.freeze([
42
+ 'aria.governance_recovery_current.v1',
43
+ ]);
44
+ const QUARANTINE_DIR = join(HOME, '.aria', 'governance-recovery-quarantine');
45
+
46
+ /**
47
+ * Read the current governance recovery contract (if any) and format it as
48
+ * a system-prompt block for injection into the next turn's additionalContext.
49
+ *
50
+ * Returns empty string when no recovery is pending or the file is malformed —
51
+ * malformed/parse errors are surfaced via stderr (no silent swallow per
52
+ * feedback_no_graceful_degradation.md).
53
+ *
54
+ * @returns {{ block: string, pickupId: string | null }} block text + pickup
55
+ * identifier. The pickup id is the recovery fingerprint; pass it to
56
+ * archiveRecoveryAfterPickup() once delivered to the model.
57
+ */
58
+ export function readGovernanceRecoveryContext() {
59
+ if (!existsSync(RECOVERY_PATH)) return { block: '', pickupId: null };
60
+ let recovery;
61
+ try {
62
+ recovery = JSON.parse(readFileSync(RECOVERY_PATH, 'utf8'));
63
+ } catch (error) {
64
+ process.stderr.write(`[recovery-context] malformed recovery file ignored (${error.message})\n`);
65
+ return { block: '', pickupId: null };
66
+ }
67
+ // M0.SELFREVIEW.11 (2026-05-06): schema-version check now fail-CLOSED.
68
+ // Missing schema field OR unsupported schema = reject the contract +
69
+ // quarantine the file (so it doesn't re-fire each turn) + return empty.
70
+ // This is the defensive direction on safety contracts: a malformed or
71
+ // spoofed contract should NOT shape model state. Operator sees the
72
+ // quarantine + stderr line; if they intentionally want to restore the
73
+ // contract, they can move it back from the quarantine dir manually.
74
+ const schema = String(recovery.schema || '').trim();
75
+ if (!schema || !SUPPORTED_RECOVERY_SCHEMAS.includes(schema)) {
76
+ const reason = !schema
77
+ ? 'no schema field'
78
+ : `unsupported schema: ${schema} (supported: ${SUPPORTED_RECOVERY_SCHEMAS.join(', ')})`;
79
+ process.stderr.write(`[recovery-context] recovery contract REJECTED — ${reason} (M0.SELFREVIEW.11 fail-CLOSED); quarantining\n`);
80
+ try {
81
+ if (!existsSync(QUARANTINE_DIR)) {
82
+ mkdirSync(QUARANTINE_DIR, { recursive: true, mode: 0o700 });
83
+ }
84
+ const ts = new Date().toISOString().replace(/[:.]/g, '-');
85
+ renameSync(RECOVERY_PATH, join(QUARANTINE_DIR, `recovery-rejected-${ts}.json`));
86
+ } catch (err) {
87
+ process.stderr.write(`[recovery-context:quarantine] caught: ${err instanceof Error ? err.message : String(err)}\n`);
88
+ }
89
+ return { block: '', pickupId: null };
90
+ }
91
+ const mode = String(recovery.governanceMode || '').trim();
92
+ if (!mode || mode === 'allow') return { block: '', pickupId: null };
93
+
94
+ const loop = recovery.recoveryLoop && typeof recovery.recoveryLoop === 'object' ? recovery.recoveryLoop : {};
95
+ const contract = recovery.recoveryContract && typeof recovery.recoveryContract === 'object' ? recovery.recoveryContract : {};
96
+ const fingerprint = loop.fingerprint || null;
97
+
98
+ const block = [
99
+ '--- CURRENT GOVERNANCE RECOVERY CONTEXT ---',
100
+ `Mode: ${mode}`,
101
+ `Decision: ${recovery.decision || 'block'}`,
102
+ `Fingerprint: ${fingerprint || 'unknown'}`,
103
+ `Allowed recovery attempts: ${loop.allowedRecoveryAttempts ?? 1}`,
104
+ `Prior recovery attempts: ${loop.priorRecoveryAttempts ?? 0}`,
105
+ `Remaining recovery attempts: ${loop.remainingRecoveryAttempts ?? 0}`,
106
+ `Next step: ${loop.nextStep || 'execute recovery contract before claiming completion'}`,
107
+ `Architect fallback: ${loop.architectFallback || contract.fallbackWhenAriaUnavailable || 'if Aria consult is unavailable, use the strongest available client LLM under the architect harness'}`,
108
+ `Load skills first: ${(contract.loadSkillsFirst || []).join(', ') || '(none)'}`,
109
+ `Repair recovery cycle: ${(contract.repairRecoveryCycle || []).join(', ') || '(none)'}`,
110
+ `Retest: ${contract.retest || 'run the concrete verification probe'}`,
111
+ 'Mandatory behavior: this is system-prompt recovery state; execute it before final output.',
112
+ ].join('\n');
113
+
114
+ return { block, pickupId: fingerprint };
115
+ }
116
+
117
+ /**
118
+ * Move the current recovery file to the archive directory after the contract
119
+ * has been delivered to the model. Prevents the same recovery contract from
120
+ * re-firing on every subsequent turn forever.
121
+ *
122
+ * Per feedback_no_graceful_degradation.md, archive errors are surfaced via
123
+ * stderr (never silent). The recovery file is left in place if archiving
124
+ * fails — it WILL re-fire next turn, which is the correct conservative
125
+ * behavior (the contract hasn't been actually consumed if archiving failed).
126
+ *
127
+ * @param {string | null} pickupId the fingerprint returned by
128
+ * readGovernanceRecoveryContext(). If null/empty, this is a no-op.
129
+ */
130
+ export function archiveRecoveryAfterPickup(pickupId) {
131
+ if (!pickupId) return;
132
+ if (!existsSync(RECOVERY_PATH)) return;
133
+
134
+ try {
135
+ if (!existsSync(ARCHIVE_DIR)) {
136
+ mkdirSync(ARCHIVE_DIR, { recursive: true, mode: 0o700 });
137
+ }
138
+ const ts = new Date().toISOString().replace(/[:.]/g, '-');
139
+ const archivePath = join(ARCHIVE_DIR, `recovery-${ts}-${pickupId.slice(0, 12)}.json`);
140
+ renameSync(RECOVERY_PATH, archivePath);
141
+ } catch (error) {
142
+ process.stderr.write(`[recovery-context] archive failed (${error.message}) — recovery will re-fire next turn (conservative)\n`);
143
+ }
144
+ }
145
+
146
+ /**
147
+ * Path to the live recovery file. Exported for callers that want to inspect
148
+ * it directly (e.g. coach kernel reading recovery state for pre_turn phase).
149
+ */
150
+ export const RECOVERY_FILE_PATH = RECOVERY_PATH;
151
+ export const RECOVERY_ARCHIVE_DIR = ARCHIVE_DIR;
@@ -0,0 +1,154 @@
1
+ #!/usr/bin/env node
2
+ // ── doctrine-self-check-file: M0.SELFREVIEW.1+2 (2026-05-06) ──
3
+ // Session added comments describing prior antipatterns being migrated.
4
+ // Each comment names a trigger pattern; file-level ack covers them all.
5
+ // doctrine-self-check-file: (?:based on|from|by) (?:the )?(?:name|function name)|sounds like|looks like (?:a|an)|just memory search|just a search|just a cache|just a wrapper session-added-comments-describing-prior-state-or-migration
6
+
7
+ /**
8
+ * recovery-template-loader.mjs — hot-reloading recovery prose templates.
9
+ *
10
+ * Phase 0 audit Tier D Meta-X5: extracts hardcoded teaching/recovery
11
+ * strings from hook source code into editable .md template files.
12
+ * Operator edits to the template files take effect on next hook
13
+ * invocation (mtime-based reload) — no redeploy / npm publish / client
14
+ * reinstall required.
15
+ *
16
+ * Closes:
17
+ * - M0.H.16 buildForceReauthorReason 70-line template baked in source
18
+ * - M0.H.X11 config-driven recovery messages
19
+ * - M0.G.X4 (partial) retire hardcoded fallback voice builders —
20
+ * applies the same pattern to stop-gate templates first;
21
+ * voice-side fallback prose retires in M0.G.X4 follow-up.
22
+ *
23
+ * Templating: simple {{variable}} substitution. NOT a full mustache
24
+ * implementation — just literal string replace. Comments rendered with
25
+ * {{!-- ... --}} are stripped before output.
26
+ *
27
+ * Doctrine bind:
28
+ * - clean_cognition (single helper for one concern)
29
+ * - feedback_no_flag_without_fix.md (closes the "buildForceReauthorReason
30
+ * baked in source" flag with a hot-reloadable fix)
31
+ *
32
+ * Mirror: this file MUST be byte-identical between
33
+ * ops/claude-hooks/lib/recovery-template-loader.mjs
34
+ * packages/aria-connector/hooks/lib/recovery-template-loader.mjs
35
+ */
36
+
37
+ import { existsSync, readFileSync, statSync } from 'node:fs';
38
+ import { dirname, join, resolve } from 'node:path';
39
+ import { fileURLToPath } from 'node:url';
40
+
41
+ const HERE = dirname(fileURLToPath(import.meta.url));
42
+ // Templates live one directory up, in `recovery-templates/`.
43
+ const TEMPLATES_DIR = resolve(HERE, '..', 'recovery-templates');
44
+
45
+ // Cache: { name → { content, mtimeMs } }. Re-read when mtime changes.
46
+ const _cache = new Map();
47
+
48
+ /**
49
+ * Load a template by name (without extension). Hot-reloads when the
50
+ * file's mtime changes since last read.
51
+ *
52
+ * @param {string} name e.g., 'force-reauthor', 'handoff-recovery'
53
+ * @returns {string} template content (with comments stripped); empty
54
+ * string if template missing (caller should handle).
55
+ */
56
+ export function loadTemplate(name) {
57
+ const path = join(TEMPLATES_DIR, `${name}.md`);
58
+ if (!existsSync(path)) {
59
+ process.stderr.write(`[recovery-template-loader] template missing: ${path}\n`);
60
+ return '';
61
+ }
62
+ let stat;
63
+ try {
64
+ stat = statSync(path);
65
+ } catch (err) {
66
+ process.stderr.write(`[recovery-template-loader:stat] caught: ${err instanceof Error ? err.message : String(err)}\n`);
67
+ return '';
68
+ }
69
+ const cached = _cache.get(name);
70
+ if (cached && cached.mtimeMs === stat.mtimeMs) return cached.content;
71
+ let raw;
72
+ try {
73
+ raw = readFileSync(path, 'utf8');
74
+ } catch (err) {
75
+ process.stderr.write(`[recovery-template-loader:read] caught: ${err instanceof Error ? err.message : String(err)}\n`);
76
+ return '';
77
+ }
78
+ // Strip {{!-- ... --}} comment blocks (mustache-style block comments).
79
+ const stripped = raw.replace(/\{\{!--[\s\S]*?--\}\}\s*/g, '');
80
+ _cache.set(name, { content: stripped, mtimeMs: stat.mtimeMs });
81
+ return stripped;
82
+ }
83
+
84
+ /**
85
+ * Render a template with variable substitution.
86
+ *
87
+ * @param {string} name template name
88
+ * @param {Object} vars { varName: value } — values coerced to string
89
+ * @returns {string} rendered template, or empty string if template missing
90
+ */
91
+ export function renderTemplate(name, vars = {}) {
92
+ let body = loadTemplate(name);
93
+ if (!body) return '';
94
+ for (const [k, v] of Object.entries(vars)) {
95
+ const value = v === null || v === undefined ? '' : String(v);
96
+ // Escape regex meta in key (keys are normally [a-z_] but defensive).
97
+ const re = new RegExp(`\\{\\{${k.replace(/[.*+?^${}()|[\]\\]/g, '\\$&')}\\}\\}`, 'g');
98
+ body = body.replace(re, value);
99
+ }
100
+ // Strip any remaining {{...}} placeholders (variables not provided)
101
+ // so the output doesn't contain mustache leakage. Operator-side
102
+ // tip: any unsubstituted variable reaches stderr at debug level.
103
+ const remaining = body.match(/\{\{[a-z_][a-z0-9_]*\}\}/gi);
104
+ if (remaining && remaining.length > 0) {
105
+ process.stderr.write(`[recovery-template-loader:${name}] unsubstituted variables: ${remaining.join(', ')}\n`);
106
+ body = body.replace(/\{\{[a-z_][a-z0-9_]*\}\}/gi, '');
107
+ }
108
+ return body.trim();
109
+ }
110
+
111
+ /**
112
+ * Required-template variant — throws if missing. Use for highest-stakes
113
+ * recovery prose where a missing template should fail-CLOSED rather
114
+ * than fall back to a weaker hardcoded string.
115
+ *
116
+ * M0.SELFREVIEW.10 — when `force-reauthor.md` (or other safety-critical
117
+ * templates) goes missing, the prior best-effort fallback returned a
118
+ * minimal placeholder that gave the model a weaker recovery contract
119
+ * than the real template. An attacker who deletes the template would
120
+ * silently weaken the gate. This variant fails-CLOSED so the caller
121
+ * can emit a clear "template missing" block instead.
122
+ *
123
+ * @param {string} name
124
+ * @returns {string} template body (non-empty, comments stripped)
125
+ * @throws {Error} when template file missing or unreadable
126
+ */
127
+ export function loadTemplateRequired(name) {
128
+ const body = loadTemplate(name);
129
+ if (!body) {
130
+ throw new Error(`recovery-template-loader: required template missing: ${name} (M0.SELFREVIEW.10 fail-CLOSED)`);
131
+ }
132
+ return body;
133
+ }
134
+
135
+ /**
136
+ * Render a required template with variable substitution. Throws if
137
+ * template missing OR if any variable left unsubstituted (the strict
138
+ * variant — operator-tier templates should not contain unbound vars).
139
+ */
140
+ export function renderTemplateRequired(name, vars = {}) {
141
+ let body = loadTemplateRequired(name);
142
+ for (const [k, v] of Object.entries(vars)) {
143
+ const value = v === null || v === undefined ? '' : String(v);
144
+ const re = new RegExp(`\\{\\{${k.replace(/[.*+?^${}()|[\]\\]/g, '\\$&')}\\}\\}`, 'g');
145
+ body = body.replace(re, value);
146
+ }
147
+ const remaining = body.match(/\{\{[a-z_][a-z0-9_]*\}\}/gi);
148
+ if (remaining && remaining.length > 0) {
149
+ throw new Error(`recovery-template-loader: required template ${name} has unsubstituted variables: ${remaining.join(', ')}`);
150
+ }
151
+ return body.trim();
152
+ }
153
+
154
+ export default { loadTemplate, renderTemplate, loadTemplateRequired, renderTemplateRequired };