@cleocode/core 2026.4.6 → 2026.4.7

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 (647) hide show
  1. package/package.json +7 -7
  2. package/dist/cant/approval.d.ts +0 -110
  3. package/dist/cant/approval.d.ts.map +0 -1
  4. package/dist/cant/context-builder.d.ts +0 -79
  5. package/dist/cant/context-builder.d.ts.map +0 -1
  6. package/dist/cant/discretion.d.ts +0 -95
  7. package/dist/cant/discretion.d.ts.map +0 -1
  8. package/dist/cant/index.d.ts +0 -25
  9. package/dist/cant/index.d.ts.map +0 -1
  10. package/dist/cant/parallel-runner.d.ts +0 -38
  11. package/dist/cant/parallel-runner.d.ts.map +0 -1
  12. package/dist/cant/types.d.ts +0 -127
  13. package/dist/cant/types.d.ts.map +0 -1
  14. package/dist/cant/workflow-executor.d.ts +0 -105
  15. package/dist/cant/workflow-executor.d.ts.map +0 -1
  16. package/src/__tests__/audit-prune.test.d.ts.map +0 -1
  17. package/src/__tests__/audit-prune.test.js +0 -162
  18. package/src/__tests__/audit-prune.test.js.map +0 -1
  19. package/src/__tests__/caamp-skill-install.test.d.ts.map +0 -1
  20. package/src/__tests__/caamp-skill-install.test.js +0 -147
  21. package/src/__tests__/caamp-skill-install.test.js.map +0 -1
  22. package/src/__tests__/cli-parity.test.d.ts.map +0 -1
  23. package/src/__tests__/cli-parity.test.js +0 -209
  24. package/src/__tests__/cli-parity.test.js.map +0 -1
  25. package/src/__tests__/config.test.d.ts.map +0 -1
  26. package/src/__tests__/config.test.js +0 -144
  27. package/src/__tests__/config.test.js.map +0 -1
  28. package/src/__tests__/core-parity.test.d.ts.map +0 -1
  29. package/src/__tests__/core-parity.test.js +0 -645
  30. package/src/__tests__/core-parity.test.js.map +0 -1
  31. package/src/__tests__/error-catalog.test.d.ts.map +0 -1
  32. package/src/__tests__/error-catalog.test.js +0 -127
  33. package/src/__tests__/error-catalog.test.js.map +0 -1
  34. package/src/__tests__/golden-parity.test.d.ts.map +0 -1
  35. package/src/__tests__/golden-parity.test.js +0 -212
  36. package/src/__tests__/golden-parity.test.js.map +0 -1
  37. package/src/__tests__/hooks.test.d.ts.map +0 -1
  38. package/src/__tests__/hooks.test.js +0 -201
  39. package/src/__tests__/hooks.test.js.map +0 -1
  40. package/src/__tests__/human-output.test.d.ts.map +0 -1
  41. package/src/__tests__/human-output.test.js +0 -158
  42. package/src/__tests__/human-output.test.js.map +0 -1
  43. package/src/__tests__/index-api-compat.test.d.ts.map +0 -1
  44. package/src/__tests__/index-api-compat.test.js +0 -16
  45. package/src/__tests__/index-api-compat.test.js.map +0 -1
  46. package/src/__tests__/init-e2e.test.d.ts.map +0 -1
  47. package/src/__tests__/init-e2e.test.js +0 -221
  48. package/src/__tests__/init-e2e.test.js.map +0 -1
  49. package/src/__tests__/injection-chain.test.d.ts.map +0 -1
  50. package/src/__tests__/injection-chain.test.js +0 -234
  51. package/src/__tests__/injection-chain.test.js.map +0 -1
  52. package/src/__tests__/injection-mvi-tiers.test.d.ts.map +0 -1
  53. package/src/__tests__/injection-mvi-tiers.test.js +0 -116
  54. package/src/__tests__/injection-mvi-tiers.test.js.map +0 -1
  55. package/src/__tests__/injection-shared.test.d.ts.map +0 -1
  56. package/src/__tests__/injection-shared.test.js +0 -194
  57. package/src/__tests__/injection-shared.test.js.map +0 -1
  58. package/src/__tests__/lafs-conformance.test.d.ts.map +0 -1
  59. package/src/__tests__/lafs-conformance.test.js +0 -786
  60. package/src/__tests__/lafs-conformance.test.js.map +0 -1
  61. package/src/__tests__/logger.test.d.ts.map +0 -1
  62. package/src/__tests__/logger.test.js +0 -75
  63. package/src/__tests__/logger.test.js.map +0 -1
  64. package/src/__tests__/paths.test.d.ts.map +0 -1
  65. package/src/__tests__/paths.test.js +0 -327
  66. package/src/__tests__/paths.test.js.map +0 -1
  67. package/src/__tests__/project-info.test.d.ts.map +0 -1
  68. package/src/__tests__/project-info.test.js +0 -156
  69. package/src/__tests__/project-info.test.js.map +0 -1
  70. package/src/__tests__/rcsd-pipeline-e2e.test.d.ts.map +0 -1
  71. package/src/__tests__/rcsd-pipeline-e2e.test.js +0 -263
  72. package/src/__tests__/rcsd-pipeline-e2e.test.js.map +0 -1
  73. package/src/__tests__/remote.test.d.ts.map +0 -1
  74. package/src/__tests__/remote.test.js +0 -149
  75. package/src/__tests__/remote.test.js.map +0 -1
  76. package/src/__tests__/scaffold.test.d.ts.map +0 -1
  77. package/src/__tests__/scaffold.test.js +0 -474
  78. package/src/__tests__/scaffold.test.js.map +0 -1
  79. package/src/__tests__/schema-management.test.d.ts.map +0 -1
  80. package/src/__tests__/schema-management.test.js +0 -287
  81. package/src/__tests__/schema-management.test.js.map +0 -1
  82. package/src/__tests__/schema.test.d.ts.map +0 -1
  83. package/src/__tests__/schema.test.js +0 -51
  84. package/src/__tests__/schema.test.js.map +0 -1
  85. package/src/__tests__/sharing.test.d.ts.map +0 -1
  86. package/src/__tests__/sharing.test.js +0 -160
  87. package/src/__tests__/sharing.test.js.map +0 -1
  88. package/src/__tests__/snapshot.test.d.ts.map +0 -1
  89. package/src/__tests__/snapshot.test.js +0 -72
  90. package/src/__tests__/snapshot.test.js.map +0 -1
  91. package/src/__tests__/upgrade.test.d.ts.map +0 -1
  92. package/src/__tests__/upgrade.test.js +0 -321
  93. package/src/__tests__/upgrade.test.js.map +0 -1
  94. package/src/adapters/__tests__/discovery.test.d.ts.map +0 -1
  95. package/src/adapters/__tests__/discovery.test.js +0 -56
  96. package/src/adapters/__tests__/discovery.test.js.map +0 -1
  97. package/src/adapters/__tests__/manager.test.d.ts.map +0 -1
  98. package/src/adapters/__tests__/manager.test.js +0 -260
  99. package/src/adapters/__tests__/manager.test.js.map +0 -1
  100. package/src/agents/__tests__/agent-registry.test.d.ts.map +0 -1
  101. package/src/agents/__tests__/agent-registry.test.js +0 -262
  102. package/src/agents/__tests__/agent-registry.test.js.map +0 -1
  103. package/src/agents/__tests__/capacity.test.d.ts.map +0 -1
  104. package/src/agents/__tests__/capacity.test.js +0 -173
  105. package/src/agents/__tests__/capacity.test.js.map +0 -1
  106. package/src/agents/__tests__/execution-learning.test.d.ts.map +0 -1
  107. package/src/agents/__tests__/execution-learning.test.js +0 -533
  108. package/src/agents/__tests__/execution-learning.test.js.map +0 -1
  109. package/src/agents/__tests__/health-monitor.test.d.ts.map +0 -1
  110. package/src/agents/__tests__/health-monitor.test.js +0 -259
  111. package/src/agents/__tests__/health-monitor.test.js.map +0 -1
  112. package/src/agents/__tests__/registry.test.d.ts.map +0 -1
  113. package/src/agents/__tests__/registry.test.js +0 -373
  114. package/src/agents/__tests__/registry.test.js.map +0 -1
  115. package/src/agents/__tests__/retry.test.d.ts.map +0 -1
  116. package/src/agents/__tests__/retry.test.js +0 -225
  117. package/src/agents/__tests__/retry.test.js.map +0 -1
  118. package/src/cant/__tests__/cant-agent-parse.test.d.ts.map +0 -1
  119. package/src/cant/__tests__/cant-agent-parse.test.js +0 -77
  120. package/src/cant/__tests__/cant-agent-parse.test.js.map +0 -1
  121. package/src/cant/__tests__/cant-agent-parse.test.ts +0 -94
  122. package/src/cant/approval.ts +0 -218
  123. package/src/cant/context-builder.ts +0 -135
  124. package/src/cant/discretion.ts +0 -149
  125. package/src/cant/index.ts +0 -58
  126. package/src/cant/parallel-runner.ts +0 -205
  127. package/src/cant/types.ts +0 -158
  128. package/src/cant/workflow-executor.ts +0 -618
  129. package/src/compliance/__tests__/sync.test.d.ts.map +0 -1
  130. package/src/compliance/__tests__/sync.test.js +0 -119
  131. package/src/compliance/__tests__/sync.test.js.map +0 -1
  132. package/src/conduit/__tests__/local-credential-flow.test.d.ts.map +0 -1
  133. package/src/conduit/__tests__/local-credential-flow.test.js +0 -185
  134. package/src/conduit/__tests__/local-credential-flow.test.js.map +0 -1
  135. package/src/conduit/__tests__/local-transport.test.d.ts.map +0 -1
  136. package/src/conduit/__tests__/local-transport.test.js +0 -404
  137. package/src/conduit/__tests__/local-transport.test.js.map +0 -1
  138. package/src/conduit/__tests__/sse-transport.test.d.ts.map +0 -1
  139. package/src/conduit/__tests__/sse-transport.test.js +0 -291
  140. package/src/conduit/__tests__/sse-transport.test.js.map +0 -1
  141. package/src/hooks/__tests__/provider-hooks.test.d.ts.map +0 -1
  142. package/src/hooks/__tests__/provider-hooks.test.js +0 -33
  143. package/src/hooks/__tests__/provider-hooks.test.js.map +0 -1
  144. package/src/hooks/__tests__/registry.test.d.ts.map +0 -1
  145. package/src/hooks/__tests__/registry.test.js +0 -37
  146. package/src/hooks/__tests__/registry.test.js.map +0 -1
  147. package/src/hooks/handlers/__tests__/error-hooks.test.d.ts.map +0 -1
  148. package/src/hooks/handlers/__tests__/error-hooks.test.js +0 -90
  149. package/src/hooks/handlers/__tests__/error-hooks.test.js.map +0 -1
  150. package/src/hooks/handlers/__tests__/file-hooks.test.d.ts.map +0 -1
  151. package/src/hooks/handlers/__tests__/file-hooks.test.js +0 -128
  152. package/src/hooks/handlers/__tests__/file-hooks.test.js.map +0 -1
  153. package/src/hooks/handlers/__tests__/hook-automation-e2e.test.d.ts.map +0 -1
  154. package/src/hooks/handlers/__tests__/hook-automation-e2e.test.js +0 -503
  155. package/src/hooks/handlers/__tests__/hook-automation-e2e.test.js.map +0 -1
  156. package/src/hooks/handlers/__tests__/session-hooks.test.d.ts.map +0 -1
  157. package/src/hooks/handlers/__tests__/session-hooks.test.js +0 -54
  158. package/src/hooks/handlers/__tests__/session-hooks.test.js.map +0 -1
  159. package/src/hooks/handlers/__tests__/task-hooks.test.d.ts.map +0 -1
  160. package/src/hooks/handlers/__tests__/task-hooks.test.js +0 -77
  161. package/src/hooks/handlers/__tests__/task-hooks.test.js.map +0 -1
  162. package/src/intelligence/__tests__/adaptive-validation.test.d.ts.map +0 -1
  163. package/src/intelligence/__tests__/adaptive-validation.test.js +0 -517
  164. package/src/intelligence/__tests__/adaptive-validation.test.js.map +0 -1
  165. package/src/intelligence/__tests__/impact.test.d.ts.map +0 -1
  166. package/src/intelligence/__tests__/impact.test.js +0 -515
  167. package/src/intelligence/__tests__/impact.test.js.map +0 -1
  168. package/src/intelligence/__tests__/patterns.test.d.ts.map +0 -1
  169. package/src/intelligence/__tests__/patterns.test.js +0 -370
  170. package/src/intelligence/__tests__/patterns.test.js.map +0 -1
  171. package/src/intelligence/__tests__/prediction.test.d.ts.map +0 -1
  172. package/src/intelligence/__tests__/prediction.test.js +0 -314
  173. package/src/intelligence/__tests__/prediction.test.js.map +0 -1
  174. package/src/lib/__tests__/retry.test.d.ts.map +0 -1
  175. package/src/lib/__tests__/retry.test.js +0 -225
  176. package/src/lib/__tests__/retry.test.js.map +0 -1
  177. package/src/lifecycle/__tests__/chain-store.test.d.ts.map +0 -1
  178. package/src/lifecycle/__tests__/chain-store.test.js +0 -243
  179. package/src/lifecycle/__tests__/chain-store.test.js.map +0 -1
  180. package/src/lifecycle/__tests__/consolidate-rcasd.test.d.ts.map +0 -1
  181. package/src/lifecycle/__tests__/consolidate-rcasd.test.js +0 -210
  182. package/src/lifecycle/__tests__/consolidate-rcasd.test.js.map +0 -1
  183. package/src/lifecycle/__tests__/default-chain.test.d.ts.map +0 -1
  184. package/src/lifecycle/__tests__/default-chain.test.js +0 -74
  185. package/src/lifecycle/__tests__/default-chain.test.js.map +0 -1
  186. package/src/lifecycle/__tests__/frontmatter.test.d.ts.map +0 -1
  187. package/src/lifecycle/__tests__/frontmatter.test.js +0 -229
  188. package/src/lifecycle/__tests__/frontmatter.test.js.map +0 -1
  189. package/src/lifecycle/__tests__/lifecycle.test.d.ts.map +0 -1
  190. package/src/lifecycle/__tests__/lifecycle.test.js +0 -126
  191. package/src/lifecycle/__tests__/lifecycle.test.js.map +0 -1
  192. package/src/lifecycle/__tests__/pipeline.integration.test.d.ts.map +0 -1
  193. package/src/lifecycle/__tests__/pipeline.integration.test.js +0 -977
  194. package/src/lifecycle/__tests__/pipeline.integration.test.js.map +0 -1
  195. package/src/lifecycle/__tests__/rcasd-paths.test.d.ts.map +0 -1
  196. package/src/lifecycle/__tests__/rcasd-paths.test.js +0 -206
  197. package/src/lifecycle/__tests__/rcasd-paths.test.js.map +0 -1
  198. package/src/lifecycle/__tests__/resume-schema-contract.test.d.ts.map +0 -1
  199. package/src/lifecycle/__tests__/resume-schema-contract.test.js +0 -246
  200. package/src/lifecycle/__tests__/resume-schema-contract.test.js.map +0 -1
  201. package/src/lifecycle/__tests__/stage-record-provenance.integration.test.d.ts.map +0 -1
  202. package/src/lifecycle/__tests__/stage-record-provenance.integration.test.js +0 -95
  203. package/src/lifecycle/__tests__/stage-record-provenance.integration.test.js.map +0 -1
  204. package/src/lifecycle/__tests__/tessera-engine.test.d.ts.map +0 -1
  205. package/src/lifecycle/__tests__/tessera-engine.test.js +0 -392
  206. package/src/lifecycle/__tests__/tessera-engine.test.js.map +0 -1
  207. package/src/memory/__tests__/auto-extract.test.d.ts.map +0 -1
  208. package/src/memory/__tests__/auto-extract.test.js +0 -197
  209. package/src/memory/__tests__/auto-extract.test.js.map +0 -1
  210. package/src/memory/__tests__/brain-automation.test.d.ts.map +0 -1
  211. package/src/memory/__tests__/brain-automation.test.js +0 -730
  212. package/src/memory/__tests__/brain-automation.test.js.map +0 -1
  213. package/src/memory/__tests__/brain-embedding.test.d.ts.map +0 -1
  214. package/src/memory/__tests__/brain-embedding.test.js +0 -92
  215. package/src/memory/__tests__/brain-embedding.test.js.map +0 -1
  216. package/src/memory/__tests__/brain-links.test.d.ts.map +0 -1
  217. package/src/memory/__tests__/brain-links.test.js +0 -221
  218. package/src/memory/__tests__/brain-links.test.js.map +0 -1
  219. package/src/memory/__tests__/brain-migration.test.d.ts.map +0 -1
  220. package/src/memory/__tests__/brain-migration.test.js +0 -180
  221. package/src/memory/__tests__/brain-migration.test.js.map +0 -1
  222. package/src/memory/__tests__/brain-retrieval.test.d.ts.map +0 -1
  223. package/src/memory/__tests__/brain-retrieval.test.js +0 -701
  224. package/src/memory/__tests__/brain-retrieval.test.js.map +0 -1
  225. package/src/memory/__tests__/brain-search.test.d.ts.map +0 -1
  226. package/src/memory/__tests__/brain-search.test.js +0 -180
  227. package/src/memory/__tests__/brain-search.test.js.map +0 -1
  228. package/src/memory/__tests__/claude-mem-migration.test.d.ts.map +0 -1
  229. package/src/memory/__tests__/claude-mem-migration.test.js +0 -424
  230. package/src/memory/__tests__/claude-mem-migration.test.js.map +0 -1
  231. package/src/memory/__tests__/decisions.test.d.ts.map +0 -1
  232. package/src/memory/__tests__/decisions.test.js +0 -253
  233. package/src/memory/__tests__/decisions.test.js.map +0 -1
  234. package/src/memory/__tests__/engine-compat.test.d.ts.map +0 -1
  235. package/src/memory/__tests__/engine-compat.test.js +0 -331
  236. package/src/memory/__tests__/engine-compat.test.js.map +0 -1
  237. package/src/memory/__tests__/memory-bridge.test.d.ts.map +0 -1
  238. package/src/memory/__tests__/memory-bridge.test.js +0 -231
  239. package/src/memory/__tests__/memory-bridge.test.js.map +0 -1
  240. package/src/memory/__tests__/pipeline-manifest-sqlite.test.d.ts.map +0 -1
  241. package/src/memory/__tests__/pipeline-manifest-sqlite.test.js +0 -516
  242. package/src/memory/__tests__/pipeline-manifest-sqlite.test.js.map +0 -1
  243. package/src/memory/__tests__/session-memory.test.d.ts.map +0 -1
  244. package/src/memory/__tests__/session-memory.test.js +0 -387
  245. package/src/memory/__tests__/session-memory.test.js.map +0 -1
  246. package/src/metrics/__tests__/model-provider-registry.test.d.ts.map +0 -1
  247. package/src/metrics/__tests__/model-provider-registry.test.js +0 -45
  248. package/src/metrics/__tests__/model-provider-registry.test.js.map +0 -1
  249. package/src/metrics/__tests__/provider-detection.test.d.ts.map +0 -1
  250. package/src/metrics/__tests__/provider-detection.test.js +0 -123
  251. package/src/metrics/__tests__/provider-detection.test.js.map +0 -1
  252. package/src/migration/__tests__/checksum.test.d.ts.map +0 -1
  253. package/src/migration/__tests__/checksum.test.js +0 -216
  254. package/src/migration/__tests__/checksum.test.js.map +0 -1
  255. package/src/migration/__tests__/logger.test.d.ts.map +0 -1
  256. package/src/migration/__tests__/logger.test.js +0 -256
  257. package/src/migration/__tests__/logger.test.js.map +0 -1
  258. package/src/migration/__tests__/migration-failure.integration.test.d.ts.map +0 -1
  259. package/src/migration/__tests__/migration-failure.integration.test.js +0 -515
  260. package/src/migration/__tests__/migration-failure.integration.test.js.map +0 -1
  261. package/src/migration/__tests__/migration.test.d.ts.map +0 -1
  262. package/src/migration/__tests__/migration.test.js +0 -82
  263. package/src/migration/__tests__/migration.test.js.map +0 -1
  264. package/src/migration/__tests__/state.test.d.ts.map +0 -1
  265. package/src/migration/__tests__/state.test.js +0 -330
  266. package/src/migration/__tests__/state.test.js.map +0 -1
  267. package/src/migration/__tests__/validate.test.d.ts.map +0 -1
  268. package/src/migration/__tests__/validate.test.js +0 -258
  269. package/src/migration/__tests__/validate.test.js.map +0 -1
  270. package/src/nexus/__tests__/deps.test.d.ts.map +0 -1
  271. package/src/nexus/__tests__/deps.test.js +0 -283
  272. package/src/nexus/__tests__/deps.test.js.map +0 -1
  273. package/src/nexus/__tests__/nexus-e2e.test.d.ts.map +0 -1
  274. package/src/nexus/__tests__/nexus-e2e.test.js +0 -1220
  275. package/src/nexus/__tests__/nexus-e2e.test.js.map +0 -1
  276. package/src/nexus/__tests__/permissions.test.d.ts.map +0 -1
  277. package/src/nexus/__tests__/permissions.test.js +0 -119
  278. package/src/nexus/__tests__/permissions.test.js.map +0 -1
  279. package/src/nexus/__tests__/query.test.d.ts.map +0 -1
  280. package/src/nexus/__tests__/query.test.js +0 -168
  281. package/src/nexus/__tests__/query.test.js.map +0 -1
  282. package/src/nexus/__tests__/reconcile.test.d.ts.map +0 -1
  283. package/src/nexus/__tests__/reconcile.test.js +0 -135
  284. package/src/nexus/__tests__/reconcile.test.js.map +0 -1
  285. package/src/nexus/__tests__/registry.test.d.ts.map +0 -1
  286. package/src/nexus/__tests__/registry.test.js +0 -229
  287. package/src/nexus/__tests__/registry.test.js.map +0 -1
  288. package/src/nexus/__tests__/transfer.test.d.ts.map +0 -1
  289. package/src/nexus/__tests__/transfer.test.js +0 -372
  290. package/src/nexus/__tests__/transfer.test.js.map +0 -1
  291. package/src/observability/__tests__/index.test.d.ts.map +0 -1
  292. package/src/observability/__tests__/index.test.js +0 -288
  293. package/src/observability/__tests__/index.test.js.map +0 -1
  294. package/src/observability/__tests__/log-filter.test.d.ts.map +0 -1
  295. package/src/observability/__tests__/log-filter.test.js +0 -151
  296. package/src/observability/__tests__/log-filter.test.js.map +0 -1
  297. package/src/observability/__tests__/log-parser.test.d.ts.map +0 -1
  298. package/src/observability/__tests__/log-parser.test.js +0 -170
  299. package/src/observability/__tests__/log-parser.test.js.map +0 -1
  300. package/src/observability/__tests__/log-reader.test.d.ts.map +0 -1
  301. package/src/observability/__tests__/log-reader.test.js +0 -150
  302. package/src/observability/__tests__/log-reader.test.js.map +0 -1
  303. package/src/orchestration/__tests__/autonomous-spec.test.d.ts.map +0 -1
  304. package/src/orchestration/__tests__/autonomous-spec.test.js +0 -419
  305. package/src/orchestration/__tests__/autonomous-spec.test.js.map +0 -1
  306. package/src/orchestration/__tests__/orchestration.test.d.ts.map +0 -1
  307. package/src/orchestration/__tests__/orchestration.test.js +0 -205
  308. package/src/orchestration/__tests__/orchestration.test.js.map +0 -1
  309. package/src/orchestration/__tests__/protocol-validators.test.d.ts.map +0 -1
  310. package/src/orchestration/__tests__/protocol-validators.test.js +0 -602
  311. package/src/orchestration/__tests__/protocol-validators.test.js.map +0 -1
  312. package/src/phases/__tests__/deps.test.d.ts.map +0 -1
  313. package/src/phases/__tests__/deps.test.js +0 -210
  314. package/src/phases/__tests__/deps.test.js.map +0 -1
  315. package/src/phases/__tests__/phases.test.d.ts.map +0 -1
  316. package/src/phases/__tests__/phases.test.js +0 -215
  317. package/src/phases/__tests__/phases.test.js.map +0 -1
  318. package/src/release/__tests__/artifacts.test.d.ts.map +0 -1
  319. package/src/release/__tests__/artifacts.test.js +0 -65
  320. package/src/release/__tests__/artifacts.test.js.map +0 -1
  321. package/src/release/__tests__/cancel-release.test.d.ts.map +0 -1
  322. package/src/release/__tests__/cancel-release.test.js +0 -154
  323. package/src/release/__tests__/cancel-release.test.js.map +0 -1
  324. package/src/release/__tests__/changelog-writer.test.d.ts.map +0 -1
  325. package/src/release/__tests__/changelog-writer.test.js +0 -132
  326. package/src/release/__tests__/changelog-writer.test.js.map +0 -1
  327. package/src/release/__tests__/push-policy.test.d.ts.map +0 -1
  328. package/src/release/__tests__/push-policy.test.js +0 -142
  329. package/src/release/__tests__/push-policy.test.js.map +0 -1
  330. package/src/release/__tests__/release.test.d.ts.map +0 -1
  331. package/src/release/__tests__/release.test.js +0 -25
  332. package/src/release/__tests__/release.test.js.map +0 -1
  333. package/src/sequence/__tests__/allocate.test.d.ts.map +0 -1
  334. package/src/sequence/__tests__/allocate.test.js +0 -113
  335. package/src/sequence/__tests__/allocate.test.js.map +0 -1
  336. package/src/sessions/__tests__/briefing-blocked.test.d.ts.map +0 -1
  337. package/src/sessions/__tests__/briefing-blocked.test.js +0 -117
  338. package/src/sessions/__tests__/briefing-blocked.test.js.map +0 -1
  339. package/src/sessions/__tests__/briefing.test.d.ts.map +0 -1
  340. package/src/sessions/__tests__/briefing.test.js +0 -336
  341. package/src/sessions/__tests__/briefing.test.js.map +0 -1
  342. package/src/sessions/__tests__/handoff-integration.test.d.ts.map +0 -1
  343. package/src/sessions/__tests__/handoff-integration.test.js +0 -264
  344. package/src/sessions/__tests__/handoff-integration.test.js.map +0 -1
  345. package/src/sessions/__tests__/handoff.test.d.ts.map +0 -1
  346. package/src/sessions/__tests__/handoff.test.js +0 -435
  347. package/src/sessions/__tests__/handoff.test.js.map +0 -1
  348. package/src/sessions/__tests__/index.test.d.ts.map +0 -1
  349. package/src/sessions/__tests__/index.test.js +0 -82
  350. package/src/sessions/__tests__/index.test.js.map +0 -1
  351. package/src/sessions/__tests__/session-cleanup.test.d.ts.map +0 -1
  352. package/src/sessions/__tests__/session-cleanup.test.js +0 -201
  353. package/src/sessions/__tests__/session-cleanup.test.js.map +0 -1
  354. package/src/sessions/__tests__/session-edge-cases.test.d.ts.map +0 -1
  355. package/src/sessions/__tests__/session-edge-cases.test.js +0 -251
  356. package/src/sessions/__tests__/session-edge-cases.test.js.map +0 -1
  357. package/src/sessions/__tests__/session-find.test.d.ts.map +0 -1
  358. package/src/sessions/__tests__/session-find.test.js +0 -210
  359. package/src/sessions/__tests__/session-find.test.js.map +0 -1
  360. package/src/sessions/__tests__/session-grade.integration.test.d.ts.map +0 -1
  361. package/src/sessions/__tests__/session-grade.integration.test.js +0 -287
  362. package/src/sessions/__tests__/session-grade.integration.test.js.map +0 -1
  363. package/src/sessions/__tests__/session-grade.test.d.ts.map +0 -1
  364. package/src/sessions/__tests__/session-grade.test.js +0 -630
  365. package/src/sessions/__tests__/session-grade.test.js.map +0 -1
  366. package/src/sessions/__tests__/session-memory-bridge.test.d.ts.map +0 -1
  367. package/src/sessions/__tests__/session-memory-bridge.test.js +0 -52
  368. package/src/sessions/__tests__/session-memory-bridge.test.js.map +0 -1
  369. package/src/sessions/__tests__/sessions.test.d.ts.map +0 -1
  370. package/src/sessions/__tests__/sessions.test.js +0 -113
  371. package/src/sessions/__tests__/sessions.test.js.map +0 -1
  372. package/src/skills/__tests__/discovery.test.d.ts.map +0 -1
  373. package/src/skills/__tests__/discovery.test.js +0 -171
  374. package/src/skills/__tests__/discovery.test.js.map +0 -1
  375. package/src/skills/__tests__/dispatch.test.d.ts.map +0 -1
  376. package/src/skills/__tests__/dispatch.test.js +0 -99
  377. package/src/skills/__tests__/dispatch.test.js.map +0 -1
  378. package/src/skills/__tests__/dynamic-skill-generator.test.d.ts.map +0 -1
  379. package/src/skills/__tests__/dynamic-skill-generator.test.js +0 -77
  380. package/src/skills/__tests__/dynamic-skill-generator.test.js.map +0 -1
  381. package/src/skills/__tests__/manifests.test.d.ts.map +0 -1
  382. package/src/skills/__tests__/manifests.test.js +0 -121
  383. package/src/skills/__tests__/manifests.test.js.map +0 -1
  384. package/src/skills/__tests__/precedence.test.d.ts.map +0 -1
  385. package/src/skills/__tests__/precedence.test.js +0 -325
  386. package/src/skills/__tests__/precedence.test.js.map +0 -1
  387. package/src/skills/__tests__/routing-table.test.d.ts.map +0 -1
  388. package/src/skills/__tests__/routing-table.test.js +0 -91
  389. package/src/skills/__tests__/routing-table.test.js.map +0 -1
  390. package/src/skills/__tests__/skill-paths.test.d.ts.map +0 -1
  391. package/src/skills/__tests__/skill-paths.test.js +0 -71
  392. package/src/skills/__tests__/skill-paths.test.js.map +0 -1
  393. package/src/skills/__tests__/test-utility.test.d.ts.map +0 -1
  394. package/src/skills/__tests__/test-utility.test.js +0 -59
  395. package/src/skills/__tests__/test-utility.test.js.map +0 -1
  396. package/src/skills/__tests__/token.test.d.ts.map +0 -1
  397. package/src/skills/__tests__/token.test.js +0 -135
  398. package/src/skills/__tests__/token.test.js.map +0 -1
  399. package/src/skills/__tests__/validation.test.d.ts.map +0 -1
  400. package/src/skills/__tests__/validation.test.js +0 -108
  401. package/src/skills/__tests__/validation.test.js.map +0 -1
  402. package/src/skills/__tests__/version.test.d.ts.map +0 -1
  403. package/src/skills/__tests__/version.test.js +0 -71
  404. package/src/skills/__tests__/version.test.js.map +0 -1
  405. package/src/skills/injection/__tests__/subagent.test.d.ts.map +0 -1
  406. package/src/skills/injection/__tests__/subagent.test.js +0 -122
  407. package/src/skills/injection/__tests__/subagent.test.js.map +0 -1
  408. package/src/skills/orchestrator/__tests__/spawn-tier.test.d.ts.map +0 -1
  409. package/src/skills/orchestrator/__tests__/spawn-tier.test.js +0 -228
  410. package/src/skills/orchestrator/__tests__/spawn-tier.test.js.map +0 -1
  411. package/src/spawn/__tests__/adapter-registry.test.d.ts.map +0 -1
  412. package/src/spawn/__tests__/adapter-registry.test.js +0 -76
  413. package/src/spawn/__tests__/adapter-registry.test.js.map +0 -1
  414. package/src/stats/__tests__/stats.test.d.ts.map +0 -1
  415. package/src/stats/__tests__/stats.test.js +0 -374
  416. package/src/stats/__tests__/stats.test.js.map +0 -1
  417. package/src/sticky/__tests__/purge.test.d.ts.map +0 -1
  418. package/src/sticky/__tests__/purge.test.js +0 -64
  419. package/src/sticky/__tests__/purge.test.js.map +0 -1
  420. package/src/store/__tests__/atomic.test.d.ts.map +0 -1
  421. package/src/store/__tests__/atomic.test.js +0 -81
  422. package/src/store/__tests__/atomic.test.js.map +0 -1
  423. package/src/store/__tests__/backup.test.d.ts.map +0 -1
  424. package/src/store/__tests__/backup.test.js +0 -131
  425. package/src/store/__tests__/backup.test.js.map +0 -1
  426. package/src/store/__tests__/brain-accessor-pageindex.test.d.ts.map +0 -1
  427. package/src/store/__tests__/brain-accessor-pageindex.test.js +0 -179
  428. package/src/store/__tests__/brain-accessor-pageindex.test.js.map +0 -1
  429. package/src/store/__tests__/brain-accessor.test.d.ts.map +0 -1
  430. package/src/store/__tests__/brain-accessor.test.js +0 -398
  431. package/src/store/__tests__/brain-accessor.test.js.map +0 -1
  432. package/src/store/__tests__/brain-pageindex.test.d.ts.map +0 -1
  433. package/src/store/__tests__/brain-pageindex.test.js +0 -137
  434. package/src/store/__tests__/brain-pageindex.test.js.map +0 -1
  435. package/src/store/__tests__/brain-schema.test.d.ts.map +0 -1
  436. package/src/store/__tests__/brain-schema.test.js +0 -137
  437. package/src/store/__tests__/brain-schema.test.js.map +0 -1
  438. package/src/store/__tests__/brain-vec.test.d.ts.map +0 -1
  439. package/src/store/__tests__/brain-vec.test.js +0 -100
  440. package/src/store/__tests__/brain-vec.test.js.map +0 -1
  441. package/src/store/__tests__/collision-detection.test.d.ts.map +0 -1
  442. package/src/store/__tests__/collision-detection.test.js +0 -165
  443. package/src/store/__tests__/collision-detection.test.js.map +0 -1
  444. package/src/store/__tests__/data-safety-central.test.d.ts.map +0 -1
  445. package/src/store/__tests__/data-safety-central.test.js +0 -408
  446. package/src/store/__tests__/data-safety-central.test.js.map +0 -1
  447. package/src/store/__tests__/db-helpers.test.d.ts.map +0 -1
  448. package/src/store/__tests__/db-helpers.test.js +0 -101
  449. package/src/store/__tests__/db-helpers.test.js.map +0 -1
  450. package/src/store/__tests__/e2e-safety-integration.test.d.ts.map +0 -1
  451. package/src/store/__tests__/e2e-safety-integration.test.js +0 -402
  452. package/src/store/__tests__/e2e-safety-integration.test.js.map +0 -1
  453. package/src/store/__tests__/git-checkpoint.test.d.ts.map +0 -1
  454. package/src/store/__tests__/git-checkpoint.test.js +0 -133
  455. package/src/store/__tests__/git-checkpoint.test.js.map +0 -1
  456. package/src/store/__tests__/idempotent-migration.test.d.ts.map +0 -1
  457. package/src/store/__tests__/idempotent-migration.test.js +0 -172
  458. package/src/store/__tests__/idempotent-migration.test.js.map +0 -1
  459. package/src/store/__tests__/import-logging.test.d.ts.map +0 -1
  460. package/src/store/__tests__/import-logging.test.js +0 -92
  461. package/src/store/__tests__/import-logging.test.js.map +0 -1
  462. package/src/store/__tests__/import-sort.test.d.ts.map +0 -1
  463. package/src/store/__tests__/import-sort.test.js +0 -109
  464. package/src/store/__tests__/import-sort.test.js.map +0 -1
  465. package/src/store/__tests__/json.test.d.ts.map +0 -1
  466. package/src/store/__tests__/json.test.js +0 -98
  467. package/src/store/__tests__/json.test.js.map +0 -1
  468. package/src/store/__tests__/lifecycle-schema-parity.test.d.ts.map +0 -1
  469. package/src/store/__tests__/lifecycle-schema-parity.test.js +0 -90
  470. package/src/store/__tests__/lifecycle-schema-parity.test.js.map +0 -1
  471. package/src/store/__tests__/migration-integration.test.d.ts.map +0 -1
  472. package/src/store/__tests__/migration-integration.test.js +0 -238
  473. package/src/store/__tests__/migration-integration.test.js.map +0 -1
  474. package/src/store/__tests__/migration-retry.test.d.ts.map +0 -1
  475. package/src/store/__tests__/migration-retry.test.js +0 -178
  476. package/src/store/__tests__/migration-retry.test.js.map +0 -1
  477. package/src/store/__tests__/migration-safety.test.d.ts.map +0 -1
  478. package/src/store/__tests__/migration-safety.test.js +0 -756
  479. package/src/store/__tests__/migration-safety.test.js.map +0 -1
  480. package/src/store/__tests__/migration-sqlite.test.d.ts.map +0 -1
  481. package/src/store/__tests__/migration-sqlite.test.js +0 -544
  482. package/src/store/__tests__/migration-sqlite.test.js.map +0 -1
  483. package/src/store/__tests__/performance-safety.test.d.ts.map +0 -1
  484. package/src/store/__tests__/performance-safety.test.js +0 -157
  485. package/src/store/__tests__/performance-safety.test.js.map +0 -1
  486. package/src/store/__tests__/project-detect.test.d.ts.map +0 -1
  487. package/src/store/__tests__/project-detect.test.js +0 -609
  488. package/src/store/__tests__/project-detect.test.js.map +0 -1
  489. package/src/store/__tests__/project-registry.test.d.ts.map +0 -1
  490. package/src/store/__tests__/project-registry.test.js +0 -28
  491. package/src/store/__tests__/project-registry.test.js.map +0 -1
  492. package/src/store/__tests__/provider.test.d.ts.map +0 -1
  493. package/src/store/__tests__/provider.test.js +0 -15
  494. package/src/store/__tests__/provider.test.js.map +0 -1
  495. package/src/store/__tests__/relations.test.d.ts.map +0 -1
  496. package/src/store/__tests__/relations.test.js +0 -318
  497. package/src/store/__tests__/relations.test.js.map +0 -1
  498. package/src/store/__tests__/safety-accessor.test.d.ts.map +0 -1
  499. package/src/store/__tests__/safety-accessor.test.js +0 -219
  500. package/src/store/__tests__/safety-accessor.test.js.map +0 -1
  501. package/src/store/__tests__/sequence-validation.test.d.ts.map +0 -1
  502. package/src/store/__tests__/sequence-validation.test.js +0 -94
  503. package/src/store/__tests__/sequence-validation.test.js.map +0 -1
  504. package/src/store/__tests__/session-store.test.d.ts.map +0 -1
  505. package/src/store/__tests__/session-store.test.js +0 -463
  506. package/src/store/__tests__/session-store.test.js.map +0 -1
  507. package/src/store/__tests__/sqlite-backup.test.d.ts.map +0 -1
  508. package/src/store/__tests__/sqlite-backup.test.js +0 -72
  509. package/src/store/__tests__/sqlite-backup.test.js.map +0 -1
  510. package/src/store/__tests__/sqlite.test.d.ts.map +0 -1
  511. package/src/store/__tests__/sqlite.test.js +0 -256
  512. package/src/store/__tests__/sqlite.test.js.map +0 -1
  513. package/src/store/__tests__/task-store.test.d.ts.map +0 -1
  514. package/src/store/__tests__/task-store.test.js +0 -514
  515. package/src/store/__tests__/task-store.test.js.map +0 -1
  516. package/src/store/__tests__/test-db-helper.d.ts.map +0 -1
  517. package/src/store/__tests__/test-db-helper.js +0 -110
  518. package/src/store/__tests__/test-db-helper.js.map +0 -1
  519. package/src/store/__tests__/write-verification.test.d.ts.map +0 -1
  520. package/src/store/__tests__/write-verification.test.js +0 -185
  521. package/src/store/__tests__/write-verification.test.js.map +0 -1
  522. package/src/system/__tests__/cleanup.test.d.ts.map +0 -1
  523. package/src/system/__tests__/cleanup.test.js +0 -87
  524. package/src/system/__tests__/cleanup.test.js.map +0 -1
  525. package/src/system/__tests__/health.test.d.ts.map +0 -1
  526. package/src/system/__tests__/health.test.js +0 -55
  527. package/src/system/__tests__/health.test.js.map +0 -1
  528. package/src/task-work/__tests__/start-deps.test.d.ts.map +0 -1
  529. package/src/task-work/__tests__/start-deps.test.js +0 -152
  530. package/src/task-work/__tests__/start-deps.test.js.map +0 -1
  531. package/src/tasks/__tests__/add.test.d.ts.map +0 -1
  532. package/src/tasks/__tests__/add.test.js +0 -226
  533. package/src/tasks/__tests__/add.test.js.map +0 -1
  534. package/src/tasks/__tests__/archive.test.d.ts.map +0 -1
  535. package/src/tasks/__tests__/archive.test.js +0 -196
  536. package/src/tasks/__tests__/archive.test.js.map +0 -1
  537. package/src/tasks/__tests__/assignee.test.d.ts.map +0 -1
  538. package/src/tasks/__tests__/assignee.test.js +0 -125
  539. package/src/tasks/__tests__/assignee.test.js.map +0 -1
  540. package/src/tasks/__tests__/atomicity.test.d.ts.map +0 -1
  541. package/src/tasks/__tests__/atomicity.test.js +0 -192
  542. package/src/tasks/__tests__/atomicity.test.js.map +0 -1
  543. package/src/tasks/__tests__/cancel-ops.test.d.ts.map +0 -1
  544. package/src/tasks/__tests__/cancel-ops.test.js +0 -115
  545. package/src/tasks/__tests__/cancel-ops.test.js.map +0 -1
  546. package/src/tasks/__tests__/complete-unblocks.test.d.ts.map +0 -1
  547. package/src/tasks/__tests__/complete-unblocks.test.js +0 -151
  548. package/src/tasks/__tests__/complete-unblocks.test.js.map +0 -1
  549. package/src/tasks/__tests__/complete.test.d.ts.map +0 -1
  550. package/src/tasks/__tests__/complete.test.js +0 -230
  551. package/src/tasks/__tests__/complete.test.js.map +0 -1
  552. package/src/tasks/__tests__/delete.test.d.ts.map +0 -1
  553. package/src/tasks/__tests__/delete.test.js +0 -183
  554. package/src/tasks/__tests__/delete.test.js.map +0 -1
  555. package/src/tasks/__tests__/dependency-check.test.d.ts.map +0 -1
  556. package/src/tasks/__tests__/dependency-check.test.js +0 -293
  557. package/src/tasks/__tests__/dependency-check.test.js.map +0 -1
  558. package/src/tasks/__tests__/deps-ready.test.d.ts.map +0 -1
  559. package/src/tasks/__tests__/deps-ready.test.js +0 -68
  560. package/src/tasks/__tests__/deps-ready.test.js.map +0 -1
  561. package/src/tasks/__tests__/epic-enforcement.test.d.ts.map +0 -1
  562. package/src/tasks/__tests__/epic-enforcement.test.js +0 -669
  563. package/src/tasks/__tests__/epic-enforcement.test.js.map +0 -1
  564. package/src/tasks/__tests__/find.test.d.ts.map +0 -1
  565. package/src/tasks/__tests__/find.test.js +0 -163
  566. package/src/tasks/__tests__/find.test.js.map +0 -1
  567. package/src/tasks/__tests__/graph-ops.test.d.ts.map +0 -1
  568. package/src/tasks/__tests__/graph-ops.test.js +0 -174
  569. package/src/tasks/__tests__/graph-ops.test.js.map +0 -1
  570. package/src/tasks/__tests__/hierarchy-policy.test.d.ts.map +0 -1
  571. package/src/tasks/__tests__/hierarchy-policy.test.js +0 -399
  572. package/src/tasks/__tests__/hierarchy-policy.test.js.map +0 -1
  573. package/src/tasks/__tests__/hierarchy.test.d.ts.map +0 -1
  574. package/src/tasks/__tests__/hierarchy.test.js +0 -302
  575. package/src/tasks/__tests__/hierarchy.test.js.map +0 -1
  576. package/src/tasks/__tests__/id-generator.test.d.ts.map +0 -1
  577. package/src/tasks/__tests__/id-generator.test.js +0 -59
  578. package/src/tasks/__tests__/id-generator.test.js.map +0 -1
  579. package/src/tasks/__tests__/labels.test.d.ts.map +0 -1
  580. package/src/tasks/__tests__/labels.test.js +0 -173
  581. package/src/tasks/__tests__/labels.test.js.map +0 -1
  582. package/src/tasks/__tests__/list.test.d.ts.map +0 -1
  583. package/src/tasks/__tests__/list.test.js +0 -272
  584. package/src/tasks/__tests__/list.test.js.map +0 -1
  585. package/src/tasks/__tests__/minimal-test.test.d.ts.map +0 -1
  586. package/src/tasks/__tests__/minimal-test.test.js +0 -25
  587. package/src/tasks/__tests__/minimal-test.test.js.map +0 -1
  588. package/src/tasks/__tests__/phase-tracking.test.d.ts.map +0 -1
  589. package/src/tasks/__tests__/phase-tracking.test.js +0 -209
  590. package/src/tasks/__tests__/phase-tracking.test.js.map +0 -1
  591. package/src/tasks/__tests__/pipeline-stage.test.d.ts.map +0 -1
  592. package/src/tasks/__tests__/pipeline-stage.test.js +0 -277
  593. package/src/tasks/__tests__/pipeline-stage.test.js.map +0 -1
  594. package/src/tasks/__tests__/plan-priority.test.d.ts.map +0 -1
  595. package/src/tasks/__tests__/plan-priority.test.js +0 -133
  596. package/src/tasks/__tests__/plan-priority.test.js.map +0 -1
  597. package/src/tasks/__tests__/priority-normalization.test.d.ts.map +0 -1
  598. package/src/tasks/__tests__/priority-normalization.test.js +0 -117
  599. package/src/tasks/__tests__/priority-normalization.test.js.map +0 -1
  600. package/src/tasks/__tests__/relates.test.d.ts.map +0 -1
  601. package/src/tasks/__tests__/relates.test.js +0 -84
  602. package/src/tasks/__tests__/relates.test.js.map +0 -1
  603. package/src/tasks/__tests__/show-deps.test.d.ts.map +0 -1
  604. package/src/tasks/__tests__/show-deps.test.js +0 -182
  605. package/src/tasks/__tests__/show-deps.test.js.map +0 -1
  606. package/src/tasks/__tests__/show.test.d.ts.map +0 -1
  607. package/src/tasks/__tests__/show.test.js +0 -126
  608. package/src/tasks/__tests__/show.test.js.map +0 -1
  609. package/src/tasks/__tests__/staleness.test.d.ts.map +0 -1
  610. package/src/tasks/__tests__/staleness.test.js +0 -154
  611. package/src/tasks/__tests__/staleness.test.js.map +0 -1
  612. package/src/tasks/__tests__/task-ops-depends.test.d.ts.map +0 -1
  613. package/src/tasks/__tests__/task-ops-depends.test.js +0 -118
  614. package/src/tasks/__tests__/task-ops-depends.test.js.map +0 -1
  615. package/src/tasks/__tests__/update.test.d.ts.map +0 -1
  616. package/src/tasks/__tests__/update.test.js +0 -320
  617. package/src/tasks/__tests__/update.test.js.map +0 -1
  618. package/src/validation/__tests__/chain-validation.test.d.ts.map +0 -1
  619. package/src/validation/__tests__/chain-validation.test.js +0 -204
  620. package/src/validation/__tests__/chain-validation.test.js.map +0 -1
  621. package/src/validation/__tests__/compliance.test.d.ts.map +0 -1
  622. package/src/validation/__tests__/compliance.test.js +0 -83
  623. package/src/validation/__tests__/compliance.test.js.map +0 -1
  624. package/src/validation/__tests__/docs-sync.test.d.ts.map +0 -1
  625. package/src/validation/__tests__/docs-sync.test.js +0 -243
  626. package/src/validation/__tests__/docs-sync.test.js.map +0 -1
  627. package/src/validation/__tests__/doctor-gitignore.test.d.ts.map +0 -1
  628. package/src/validation/__tests__/doctor-gitignore.test.js +0 -154
  629. package/src/validation/__tests__/doctor-gitignore.test.js.map +0 -1
  630. package/src/validation/__tests__/doctor-injection.test.d.ts.map +0 -1
  631. package/src/validation/__tests__/doctor-injection.test.js +0 -230
  632. package/src/validation/__tests__/doctor-injection.test.js.map +0 -1
  633. package/src/validation/__tests__/doctor.test.d.ts.map +0 -1
  634. package/src/validation/__tests__/doctor.test.js +0 -202
  635. package/src/validation/__tests__/doctor.test.js.map +0 -1
  636. package/src/validation/__tests__/engine.test.d.ts.map +0 -1
  637. package/src/validation/__tests__/engine.test.js +0 -346
  638. package/src/validation/__tests__/engine.test.js.map +0 -1
  639. package/src/validation/__tests__/manifest.test.d.ts.map +0 -1
  640. package/src/validation/__tests__/manifest.test.js +0 -244
  641. package/src/validation/__tests__/manifest.test.js.map +0 -1
  642. package/src/validation/__tests__/protocol-common.test.d.ts.map +0 -1
  643. package/src/validation/__tests__/protocol-common.test.js +0 -112
  644. package/src/validation/__tests__/protocol-common.test.js.map +0 -1
  645. package/src/validation/__tests__/verification.test.d.ts.map +0 -1
  646. package/src/validation/__tests__/verification.test.js +0 -277
  647. package/src/validation/__tests__/verification.test.js.map +0 -1
@@ -1,630 +0,0 @@
1
- /**
2
- * Unit tests for session-grade rubric scoring.
3
- * @task T4916
4
- */
5
- import { mkdir, mkdtemp, readFile, rm } from 'node:fs/promises';
6
- import { tmpdir } from 'node:os';
7
- import { join } from 'node:path';
8
- import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest';
9
- // We need to mock two modules: queryAudit (to inject test data) and
10
- // getCleoDirAbsolute (to redirect file writes to temp dirs).
11
- // Use vi.hoisted to create stable fn references for the mocks.
12
- const mocks = vi.hoisted(() => ({
13
- queryAudit: vi.fn(),
14
- tempCleoDir: { value: '' },
15
- }));
16
- vi.mock('../../audit.js', () => ({
17
- queryAudit: mocks.queryAudit,
18
- }));
19
- vi.mock('../../paths.js', () => ({
20
- getCleoDirAbsolute: (cwd) => (cwd ? join(cwd, '.cleo') : mocks.tempCleoDir.value),
21
- }));
22
- // Import after mocks are set up
23
- import { gradeSession, readGrades } from '../session-grade.js';
24
- // ---- Helpers ----
25
- const T = '2026-03-01T12:00:00.000Z';
26
- function ts(offsetMs) {
27
- return new Date(new Date(T).getTime() + offsetMs).toISOString();
28
- }
29
- /** Build a minimal AuditEntry for testing. */
30
- function entry(overrides) {
31
- return {
32
- timestamp: overrides.timestamp ?? T,
33
- sessionId: overrides.sessionId ?? 'test-session',
34
- domain: overrides.domain,
35
- operation: overrides.operation,
36
- params: overrides.params ?? {},
37
- result: overrides.result ?? { success: true, exitCode: 0, duration: 10 },
38
- metadata: overrides.metadata ?? { source: 'cli' },
39
- error: overrides.error,
40
- };
41
- }
42
- // ---- Test Suites ----
43
- describe('gradeSession', () => {
44
- let tempDir;
45
- beforeEach(async () => {
46
- tempDir = await mkdtemp(join(tmpdir(), 'cleo-grade-'));
47
- mocks.tempCleoDir.value = join(tempDir, '.cleo');
48
- await mkdir(join(tempDir, '.cleo', 'metrics'), { recursive: true });
49
- mocks.queryAudit.mockReset().mockResolvedValue([]);
50
- });
51
- afterEach(async () => {
52
- try {
53
- const { closeBrainDb } = await import('../../store/brain-sqlite.js');
54
- closeBrainDb();
55
- }
56
- catch {
57
- /* may not be loaded */
58
- }
59
- try {
60
- const { closeDb } = await import('../../store/sqlite.js');
61
- closeDb();
62
- }
63
- catch {
64
- /* may not be loaded */
65
- }
66
- await rm(tempDir, { recursive: true, force: true, maxRetries: 5, retryDelay: 200 });
67
- });
68
- // ------ Edge cases ------
69
- describe('edge cases', () => {
70
- it('scores 0/100 for empty audit entries', async () => {
71
- mocks.queryAudit.mockResolvedValue([]);
72
- const result = await gradeSession('empty-session', tempDir);
73
- expect(result.totalScore).toBe(0);
74
- expect(result.maxScore).toBe(100);
75
- expect(result.entryCount).toBe(0);
76
- expect(result.flags).toContain('No audit entries found for session (use --grade flag when starting session)');
77
- });
78
- it('scores 100/100 for all-perfect entries', async () => {
79
- mocks.queryAudit.mockResolvedValue([
80
- entry({ domain: 'session', operation: 'list', timestamp: ts(0) }),
81
- entry({
82
- domain: 'admin',
83
- operation: 'help',
84
- timestamp: ts(100),
85
- metadata: { source: 'cli', gateway: 'query' },
86
- }),
87
- entry({
88
- domain: 'tasks',
89
- operation: 'find',
90
- timestamp: ts(200),
91
- metadata: { source: 'cli', gateway: 'query' },
92
- }),
93
- entry({
94
- domain: 'tasks',
95
- operation: 'show',
96
- timestamp: ts(300),
97
- metadata: { source: 'cli', gateway: 'query' },
98
- }),
99
- entry({ domain: 'tasks', operation: 'exists', timestamp: ts(400) }),
100
- entry({
101
- domain: 'tasks',
102
- operation: 'add',
103
- timestamp: ts(500),
104
- params: { title: 'New task', description: 'A real description', parent: 'T100' },
105
- result: { success: true, exitCode: 0, duration: 10 },
106
- }),
107
- entry({ domain: 'session', operation: 'end', timestamp: ts(600) }),
108
- ]);
109
- const result = await gradeSession('perfect-session', tempDir);
110
- expect(result.totalScore).toBe(100);
111
- expect(result.dimensions.sessionDiscipline.score).toBe(20);
112
- expect(result.dimensions.discoveryEfficiency.score).toBe(20);
113
- expect(result.dimensions.taskHygiene.score).toBe(20);
114
- expect(result.dimensions.errorProtocol.score).toBe(20);
115
- expect(result.dimensions.disclosureUse.score).toBe(20);
116
- });
117
- });
118
- // ------ S1: Session Discipline ------
119
- describe('S1 Session Discipline (20pts)', () => {
120
- it('awards 10pts when session.list called before task ops', async () => {
121
- mocks.queryAudit.mockResolvedValue([
122
- entry({ domain: 'session', operation: 'list', timestamp: ts(0) }),
123
- entry({ domain: 'tasks', operation: 'find', timestamp: ts(100) }),
124
- ]);
125
- const result = await gradeSession('s1-test', tempDir);
126
- expect(result.dimensions.sessionDiscipline.score).toBe(10);
127
- expect(result.dimensions.sessionDiscipline.evidence).toContain('session.list called before first task op');
128
- });
129
- it('flags when session.list called after task ops', async () => {
130
- mocks.queryAudit.mockResolvedValue([
131
- entry({ domain: 'tasks', operation: 'find', timestamp: ts(0) }),
132
- entry({ domain: 'session', operation: 'list', timestamp: ts(100) }),
133
- ]);
134
- const result = await gradeSession('s1-late', tempDir);
135
- expect(result.dimensions.sessionDiscipline.score).toBe(0);
136
- expect(result.flags).toContain('session.list called after task ops (should check sessions first)');
137
- });
138
- it('flags when session.list never called', async () => {
139
- mocks.queryAudit.mockResolvedValue([
140
- entry({ domain: 'tasks', operation: 'find', timestamp: ts(0) }),
141
- ]);
142
- const result = await gradeSession('s1-none', tempDir);
143
- expect(result.flags).toContain('session.list never called (check existing sessions before starting)');
144
- });
145
- it('awards 10pts for session.end called', async () => {
146
- mocks.queryAudit.mockResolvedValue([
147
- entry({ domain: 'session', operation: 'end', timestamp: ts(0) }),
148
- ]);
149
- const result = await gradeSession('s1-end', tempDir);
150
- expect(result.dimensions.sessionDiscipline.score).toBe(10);
151
- expect(result.dimensions.sessionDiscipline.evidence).toContain('session.end called');
152
- });
153
- it('flags when session.end never called', async () => {
154
- mocks.queryAudit.mockResolvedValue([
155
- entry({ domain: 'tasks', operation: 'find', timestamp: ts(0) }),
156
- ]);
157
- const result = await gradeSession('s1-noend', tempDir);
158
- expect(result.flags).toContain('session.end never called (always end sessions when done)');
159
- });
160
- it('awards 20pts for both session.list (before) and session.end', async () => {
161
- mocks.queryAudit.mockResolvedValue([
162
- entry({ domain: 'session', operation: 'list', timestamp: ts(0) }),
163
- entry({ domain: 'tasks', operation: 'find', timestamp: ts(100) }),
164
- entry({ domain: 'session', operation: 'end', timestamp: ts(200) }),
165
- ]);
166
- const result = await gradeSession('s1-perfect', tempDir);
167
- expect(result.dimensions.sessionDiscipline.score).toBe(20);
168
- });
169
- });
170
- // ------ S2: Discovery Efficiency ------
171
- describe('S2 Discovery Efficiency (20pts)', () => {
172
- it('awards 15pts when find:list ratio >= 80%', async () => {
173
- mocks.queryAudit.mockResolvedValue([
174
- entry({ domain: 'tasks', operation: 'find', timestamp: ts(0) }),
175
- entry({ domain: 'tasks', operation: 'find', timestamp: ts(100) }),
176
- entry({ domain: 'tasks', operation: 'find', timestamp: ts(200) }),
177
- entry({ domain: 'tasks', operation: 'find', timestamp: ts(300) }),
178
- ]);
179
- const result = await gradeSession('s2-find', tempDir);
180
- expect(result.dimensions.discoveryEfficiency.score).toBe(15);
181
- expect(result.dimensions.discoveryEfficiency.evidence).toEqual(expect.arrayContaining([expect.stringMatching(/find:list ratio 100% >= 80%/)]));
182
- });
183
- it('reduces score proportionally when find ratio < 80%', async () => {
184
- mocks.queryAudit.mockResolvedValue([
185
- entry({ domain: 'tasks', operation: 'find', timestamp: ts(0) }),
186
- entry({ domain: 'tasks', operation: 'list', timestamp: ts(100) }),
187
- // 1 find, 1 list = 50% ratio -> round(15 * 0.5) = 8
188
- ]);
189
- const result = await gradeSession('s2-mixed', tempDir);
190
- expect(result.dimensions.discoveryEfficiency.score).toBe(8);
191
- expect(result.flags).toEqual(expect.arrayContaining([expect.stringMatching(/tasks\.list used 1x/)]));
192
- });
193
- it('awards 10pts when no discovery calls needed', async () => {
194
- mocks.queryAudit.mockResolvedValue([
195
- entry({ domain: 'session', operation: 'list', timestamp: ts(0) }),
196
- ]);
197
- const result = await gradeSession('s2-none', tempDir);
198
- expect(result.dimensions.discoveryEfficiency.score).toBe(10);
199
- expect(result.dimensions.discoveryEfficiency.evidence).toContain('No discovery calls needed');
200
- });
201
- it('adds +5 bonus for tasks.show usage', async () => {
202
- mocks.queryAudit.mockResolvedValue([
203
- entry({ domain: 'tasks', operation: 'find', timestamp: ts(0) }),
204
- entry({ domain: 'tasks', operation: 'show', timestamp: ts(100) }),
205
- ]);
206
- const result = await gradeSession('s2-show', tempDir);
207
- // 15 (100% find ratio) + 5 (show bonus) = 20
208
- expect(result.dimensions.discoveryEfficiency.score).toBe(20);
209
- expect(result.dimensions.discoveryEfficiency.evidence).toEqual(expect.arrayContaining([expect.stringMatching(/tasks\.show used 1x/)]));
210
- });
211
- it('caps discovery score at 20', async () => {
212
- mocks.queryAudit.mockResolvedValue([
213
- entry({ domain: 'tasks', operation: 'find', timestamp: ts(0) }),
214
- entry({ domain: 'tasks', operation: 'show', timestamp: ts(100) }),
215
- entry({ domain: 'tasks', operation: 'show', timestamp: ts(200) }),
216
- entry({ domain: 'tasks', operation: 'show', timestamp: ts(300) }),
217
- ]);
218
- const result = await gradeSession('s2-cap', tempDir);
219
- expect(result.dimensions.discoveryEfficiency.score).toBeLessThanOrEqual(20);
220
- });
221
- it('awards 15 (zero-call bonus + show) for no discovery + show', async () => {
222
- // No find or list, but show is present -> 10 (zero-call) + 5 (show) = 15
223
- mocks.queryAudit.mockResolvedValue([
224
- entry({ domain: 'tasks', operation: 'show', timestamp: ts(0) }),
225
- ]);
226
- const result = await gradeSession('s2-nodisc-show', tempDir);
227
- expect(result.dimensions.discoveryEfficiency.score).toBe(15);
228
- });
229
- });
230
- // ------ S3: Task Hygiene ------
231
- describe('S3 Task Hygiene (20pts)', () => {
232
- it('starts at 20pts with no add calls', async () => {
233
- mocks.queryAudit.mockResolvedValue([
234
- entry({ domain: 'tasks', operation: 'find', timestamp: ts(0) }),
235
- ]);
236
- const result = await gradeSession('s3-noadd', tempDir);
237
- expect(result.dimensions.taskHygiene.score).toBe(20);
238
- });
239
- it('deducts -5 per add without description', async () => {
240
- mocks.queryAudit.mockResolvedValue([
241
- entry({
242
- domain: 'tasks',
243
- operation: 'add',
244
- params: { title: 'No desc task' },
245
- result: { success: true, exitCode: 0, duration: 10 },
246
- metadata: { source: 'cli', taskId: 'T1' },
247
- }),
248
- entry({
249
- domain: 'tasks',
250
- operation: 'add',
251
- params: { title: 'Another no desc' },
252
- result: { success: true, exitCode: 0, duration: 10 },
253
- metadata: { source: 'cli', taskId: 'T2' },
254
- }),
255
- ]);
256
- const result = await gradeSession('s3-nodesc', tempDir);
257
- // 20 - 5 - 5 = 10
258
- expect(result.dimensions.taskHygiene.score).toBe(10);
259
- const descFlags = result.flags.filter((f) => f.includes('tasks.add without description'));
260
- expect(descFlags).toHaveLength(2);
261
- });
262
- it('deducts -5 for empty string description', async () => {
263
- mocks.queryAudit.mockResolvedValue([
264
- entry({
265
- domain: 'tasks',
266
- operation: 'add',
267
- params: { title: 'Empty desc', description: ' ' },
268
- result: { success: true, exitCode: 0, duration: 10 },
269
- }),
270
- ]);
271
- const result = await gradeSession('s3-emptydesc', tempDir);
272
- expect(result.dimensions.taskHygiene.score).toBe(15);
273
- });
274
- it('does not deduct for failed add calls', async () => {
275
- mocks.queryAudit.mockResolvedValue([
276
- entry({
277
- domain: 'tasks',
278
- operation: 'add',
279
- params: { title: 'Failed task' },
280
- result: { success: false, exitCode: 1, duration: 10 },
281
- }),
282
- ]);
283
- const result = await gradeSession('s3-failed', tempDir);
284
- expect(result.dimensions.taskHygiene.score).toBe(20);
285
- });
286
- it('deducts -3 for subtasks without parent check', async () => {
287
- mocks.queryAudit.mockResolvedValue([
288
- entry({
289
- domain: 'tasks',
290
- operation: 'add',
291
- params: { title: 'Subtask', description: 'A subtask', parent: 'T100' },
292
- result: { success: true, exitCode: 0, duration: 10 },
293
- }),
294
- ]);
295
- const result = await gradeSession('s3-noparent', tempDir);
296
- // 20 - 3 = 17
297
- expect(result.dimensions.taskHygiene.score).toBe(17);
298
- expect(result.flags).toContain('Subtasks created without tasks.exists parent check');
299
- });
300
- it('does not deduct when subtasks have exists check', async () => {
301
- mocks.queryAudit.mockResolvedValue([
302
- entry({ domain: 'tasks', operation: 'exists', timestamp: ts(0) }),
303
- entry({
304
- domain: 'tasks',
305
- operation: 'add',
306
- timestamp: ts(100),
307
- params: { title: 'Subtask', description: 'A subtask', parent: 'T100' },
308
- result: { success: true, exitCode: 0, duration: 10 },
309
- }),
310
- ]);
311
- const result = await gradeSession('s3-withcheck', tempDir);
312
- expect(result.dimensions.taskHygiene.score).toBe(20);
313
- expect(result.dimensions.taskHygiene.evidence).toContain('Parent existence verified before subtask creation');
314
- });
315
- it('floors hygiene score at 0', async () => {
316
- const adds = Array.from({ length: 5 }, (_, i) => entry({
317
- domain: 'tasks',
318
- operation: 'add',
319
- timestamp: ts(i * 100),
320
- params: { title: `Task ${i}` },
321
- result: { success: true, exitCode: 0, duration: 10 },
322
- }));
323
- mocks.queryAudit.mockResolvedValue(adds);
324
- const result = await gradeSession('s3-floor', tempDir);
325
- expect(result.dimensions.taskHygiene.score).toBe(0);
326
- });
327
- it('adds evidence when all adds have descriptions', async () => {
328
- mocks.queryAudit.mockResolvedValue([
329
- entry({
330
- domain: 'tasks',
331
- operation: 'add',
332
- params: { title: 'Good task', description: 'Has a description' },
333
- result: { success: true, exitCode: 0, duration: 10 },
334
- }),
335
- ]);
336
- const result = await gradeSession('s3-alldesc', tempDir);
337
- expect(result.dimensions.taskHygiene.evidence).toContain('All 1 tasks.add calls had descriptions');
338
- });
339
- });
340
- // ------ S4: Error Protocol ------
341
- describe('S4 Error Protocol (20pts)', () => {
342
- it('starts at 20pts with no errors', async () => {
343
- mocks.queryAudit.mockResolvedValue([
344
- entry({ domain: 'tasks', operation: 'find', timestamp: ts(0) }),
345
- ]);
346
- const result = await gradeSession('s4-clean', tempDir);
347
- expect(result.dimensions.errorProtocol.score).toBe(20);
348
- expect(result.dimensions.errorProtocol.evidence).toContain('No error protocol violations');
349
- });
350
- it('deducts -5 per unrecovered E_NOT_FOUND', async () => {
351
- mocks.queryAudit.mockResolvedValue([
352
- entry({
353
- domain: 'tasks',
354
- operation: 'show',
355
- timestamp: ts(0),
356
- result: { success: false, exitCode: 4, duration: 10 },
357
- }),
358
- entry({ domain: 'session', operation: 'end', timestamp: ts(100) }),
359
- ]);
360
- const result = await gradeSession('s4-norecover', tempDir);
361
- expect(result.dimensions.errorProtocol.score).toBe(15);
362
- expect(result.flags).toEqual(expect.arrayContaining([expect.stringMatching(/E_NOT_FOUND.*not followed by recovery/)]));
363
- });
364
- it('does not deduct when E_NOT_FOUND is followed by recovery find', async () => {
365
- mocks.queryAudit.mockResolvedValue([
366
- entry({
367
- domain: 'tasks',
368
- operation: 'show',
369
- timestamp: ts(0),
370
- result: { success: false, exitCode: 4, duration: 10 },
371
- }),
372
- entry({ domain: 'tasks', operation: 'find', timestamp: ts(100) }),
373
- ]);
374
- const result = await gradeSession('s4-recover-find', tempDir);
375
- expect(result.dimensions.errorProtocol.score).toBe(20);
376
- expect(result.dimensions.errorProtocol.evidence).toContain('E_NOT_FOUND followed by recovery lookup');
377
- });
378
- it('does not deduct when E_NOT_FOUND is followed by recovery exists', async () => {
379
- mocks.queryAudit.mockResolvedValue([
380
- entry({
381
- domain: 'tasks',
382
- operation: 'show',
383
- timestamp: ts(0),
384
- result: { success: false, exitCode: 4, duration: 10 },
385
- }),
386
- entry({ domain: 'tasks', operation: 'exists', timestamp: ts(100) }),
387
- ]);
388
- const result = await gradeSession('s4-recover-exists', tempDir);
389
- expect(result.dimensions.errorProtocol.score).toBe(20);
390
- });
391
- it('checks recovery within next 4 entries only', async () => {
392
- mocks.queryAudit.mockResolvedValue([
393
- entry({
394
- domain: 'tasks',
395
- operation: 'show',
396
- timestamp: ts(0),
397
- result: { success: false, exitCode: 4, duration: 10 },
398
- }),
399
- entry({ domain: 'session', operation: 'list', timestamp: ts(100) }),
400
- entry({ domain: 'session', operation: 'list', timestamp: ts(200) }),
401
- entry({ domain: 'session', operation: 'list', timestamp: ts(300) }),
402
- entry({ domain: 'session', operation: 'list', timestamp: ts(400) }),
403
- entry({ domain: 'session', operation: 'list', timestamp: ts(500) }),
404
- entry({ domain: 'tasks', operation: 'find', timestamp: ts(600) }),
405
- ]);
406
- const result = await gradeSession('s4-late-recovery', tempDir);
407
- expect(result.dimensions.errorProtocol.score).toBe(15);
408
- });
409
- it('deducts -5 for duplicate task creates', async () => {
410
- mocks.queryAudit.mockResolvedValue([
411
- entry({
412
- domain: 'tasks',
413
- operation: 'add',
414
- timestamp: ts(0),
415
- params: { title: 'Same Title', description: 'Desc 1' },
416
- result: { success: true, exitCode: 0, duration: 10 },
417
- }),
418
- entry({
419
- domain: 'tasks',
420
- operation: 'add',
421
- timestamp: ts(100),
422
- params: { title: 'Same Title', description: 'Desc 2' },
423
- result: { success: true, exitCode: 0, duration: 10 },
424
- }),
425
- ]);
426
- const result = await gradeSession('s4-dup', tempDir);
427
- expect(result.dimensions.errorProtocol.score).toBe(15);
428
- expect(result.flags).toEqual(expect.arrayContaining([expect.stringMatching(/potentially duplicate task create/)]));
429
- });
430
- it('detects duplicate creates case-insensitively', async () => {
431
- mocks.queryAudit.mockResolvedValue([
432
- entry({
433
- domain: 'tasks',
434
- operation: 'add',
435
- params: { title: 'My Task', description: 'Desc' },
436
- result: { success: true, exitCode: 0, duration: 10 },
437
- }),
438
- entry({
439
- domain: 'tasks',
440
- operation: 'add',
441
- params: { title: 'my task', description: 'Desc 2' },
442
- result: { success: true, exitCode: 0, duration: 10 },
443
- }),
444
- ]);
445
- const result = await gradeSession('s4-dup-case', tempDir);
446
- expect(result.dimensions.errorProtocol.score).toBe(15);
447
- });
448
- it('floors error score at 0', async () => {
449
- const errors = Array.from({ length: 5 }, (_, i) => entry({
450
- domain: 'tasks',
451
- operation: 'show',
452
- timestamp: ts(i * 1000),
453
- result: { success: false, exitCode: 4, duration: 10 },
454
- }));
455
- mocks.queryAudit.mockResolvedValue(errors);
456
- const result = await gradeSession('s4-floor', tempDir);
457
- expect(result.dimensions.errorProtocol.score).toBe(0);
458
- });
459
- });
460
- // ------ S5: Progressive Disclosure Use ------
461
- describe('S5 Progressive Disclosure Use (20pts)', () => {
462
- it('awards +10 for admin.help calls', async () => {
463
- mocks.queryAudit.mockResolvedValue([
464
- entry({ domain: 'admin', operation: 'help', timestamp: ts(0) }),
465
- ]);
466
- const result = await gradeSession('s5-help', tempDir);
467
- expect(result.dimensions.disclosureUse.score).toBe(10);
468
- expect(result.dimensions.disclosureUse.evidence).toEqual(expect.arrayContaining([expect.stringMatching(/Progressive disclosure used/)]));
469
- });
470
- it('awards +10 for skills.list calls', async () => {
471
- mocks.queryAudit.mockResolvedValue([
472
- entry({ domain: 'skills', operation: 'list', timestamp: ts(0) }),
473
- ]);
474
- const result = await gradeSession('s5-skills', tempDir);
475
- expect(result.dimensions.disclosureUse.score).toBe(10);
476
- });
477
- it('awards +10 for skills.show calls', async () => {
478
- mocks.queryAudit.mockResolvedValue([
479
- entry({ domain: 'skills', operation: 'show', timestamp: ts(0) }),
480
- ]);
481
- const result = await gradeSession('s5-skill-show', tempDir);
482
- expect(result.dimensions.disclosureUse.score).toBe(10);
483
- });
484
- it('awards +10 for tools.skill.show calls', async () => {
485
- mocks.queryAudit.mockResolvedValue([
486
- entry({ domain: 'tools', operation: 'skill.show', timestamp: ts(0) }),
487
- ]);
488
- const result = await gradeSession('s5-tools-skill', tempDir);
489
- expect(result.dimensions.disclosureUse.score).toBe(10);
490
- });
491
- it('awards +10 for tools.skill.list calls', async () => {
492
- mocks.queryAudit.mockResolvedValue([
493
- entry({ domain: 'tools', operation: 'skill.list', timestamp: ts(0) }),
494
- ]);
495
- const result = await gradeSession('s5-tools-list', tempDir);
496
- expect(result.dimensions.disclosureUse.score).toBe(10);
497
- });
498
- it('awards +10 for query gateway usage', async () => {
499
- mocks.queryAudit.mockResolvedValue([
500
- entry({
501
- domain: 'tasks',
502
- operation: 'find',
503
- timestamp: ts(0),
504
- metadata: { source: 'cli', gateway: 'query' },
505
- }),
506
- ]);
507
- const result = await gradeSession('s5-mcp', tempDir);
508
- expect(result.dimensions.disclosureUse.score).toBe(10);
509
- expect(result.dimensions.disclosureUse.evidence).toEqual(expect.arrayContaining([expect.stringMatching(/query.*used/)]));
510
- });
511
- it('awards 20pts for both help + query', async () => {
512
- mocks.queryAudit.mockResolvedValue([
513
- entry({ domain: 'admin', operation: 'help', timestamp: ts(0) }),
514
- entry({
515
- domain: 'tasks',
516
- operation: 'find',
517
- timestamp: ts(100),
518
- metadata: { source: 'cli', gateway: 'query' },
519
- }),
520
- ]);
521
- const result = await gradeSession('s5-perfect', tempDir);
522
- expect(result.dimensions.disclosureUse.score).toBe(20);
523
- });
524
- it('flags when no help or skill lookups', async () => {
525
- mocks.queryAudit.mockResolvedValue([
526
- entry({ domain: 'tasks', operation: 'find', timestamp: ts(0) }),
527
- ]);
528
- const result = await gradeSession('s5-nohelp', tempDir);
529
- expect(result.flags).toContain('No admin.help or skill lookup calls (load ct-cleo for guidance)');
530
- });
531
- it('flags when no query gateway calls', async () => {
532
- mocks.queryAudit.mockResolvedValue([
533
- entry({ domain: 'tasks', operation: 'find', timestamp: ts(0) }),
534
- ]);
535
- const result = await gradeSession('s5-nomcp', tempDir);
536
- expect(result.flags).toContain('No query gateway calls (use query operations for programmatic access)');
537
- });
538
- });
539
- // ------ Total score ------
540
- describe('total score calculation', () => {
541
- it('sums all dimension scores', async () => {
542
- mocks.queryAudit.mockResolvedValue([
543
- entry({ domain: 'session', operation: 'list', timestamp: ts(0) }),
544
- entry({ domain: 'session', operation: 'end', timestamp: ts(100) }),
545
- ]);
546
- const result = await gradeSession('total-test', tempDir);
547
- const expected = result.dimensions.sessionDiscipline.score +
548
- result.dimensions.discoveryEfficiency.score +
549
- result.dimensions.taskHygiene.score +
550
- result.dimensions.errorProtocol.score +
551
- result.dimensions.disclosureUse.score;
552
- expect(result.totalScore).toBe(expected);
553
- });
554
- });
555
- // ------ GRADES.jsonl output ------
556
- describe('appendGradeResult (via gradeSession)', () => {
557
- it('writes to GRADES.jsonl with evaluator field', async () => {
558
- mocks.queryAudit.mockResolvedValue([]);
559
- await gradeSession('write-test', tempDir);
560
- const content = await readFile(join(tempDir, '.cleo', 'metrics', 'GRADES.jsonl'), 'utf8');
561
- const lines = content.trim().split('\n');
562
- expect(lines).toHaveLength(1);
563
- const parsed = JSON.parse(lines[0]);
564
- expect(parsed.sessionId).toBe('write-test');
565
- expect(parsed.evaluator).toBe('auto');
566
- expect(parsed.totalScore).toBe(0);
567
- expect(parsed.dimensions).toBeDefined();
568
- });
569
- it('appends multiple grades to same file', async () => {
570
- mocks.queryAudit.mockResolvedValue([]);
571
- await gradeSession('session-1', tempDir);
572
- await gradeSession('session-2', tempDir);
573
- const content = await readFile(join(tempDir, '.cleo', 'metrics', 'GRADES.jsonl'), 'utf8');
574
- const lines = content.trim().split('\n');
575
- expect(lines).toHaveLength(2);
576
- expect(JSON.parse(lines[0]).sessionId).toBe('session-1');
577
- expect(JSON.parse(lines[1]).sessionId).toBe('session-2');
578
- });
579
- });
580
- });
581
- // ------ readGrades ------
582
- describe('readGrades', () => {
583
- let tempDir;
584
- beforeEach(async () => {
585
- tempDir = await mkdtemp(join(tmpdir(), 'cleo-grades-read-'));
586
- mocks.tempCleoDir.value = join(tempDir, '.cleo');
587
- await mkdir(join(tempDir, '.cleo', 'metrics'), { recursive: true });
588
- mocks.queryAudit.mockReset().mockResolvedValue([]);
589
- });
590
- afterEach(async () => {
591
- try {
592
- const { closeBrainDb } = await import('../../store/brain-sqlite.js');
593
- closeBrainDb();
594
- }
595
- catch {
596
- /* may not be loaded */
597
- }
598
- try {
599
- const { closeDb } = await import('../../store/sqlite.js');
600
- closeDb();
601
- }
602
- catch {
603
- /* may not be loaded */
604
- }
605
- await rm(tempDir, { recursive: true, force: true, maxRetries: 5, retryDelay: 200 });
606
- });
607
- it('returns empty array when GRADES.jsonl does not exist', async () => {
608
- const grades = await readGrades(undefined, tempDir);
609
- expect(grades).toEqual([]);
610
- });
611
- it('reads all grades when no sessionId filter', async () => {
612
- await gradeSession('read-1', tempDir);
613
- await gradeSession('read-2', tempDir);
614
- const grades = await readGrades(undefined, tempDir);
615
- expect(grades).toHaveLength(2);
616
- });
617
- it('filters by sessionId', async () => {
618
- await gradeSession('filter-a', tempDir);
619
- await gradeSession('filter-b', tempDir);
620
- const grades = await readGrades('filter-a', tempDir);
621
- expect(grades).toHaveLength(1);
622
- expect(grades[0].sessionId).toBe('filter-a');
623
- });
624
- it('returns empty when sessionId has no matches', async () => {
625
- await gradeSession('exists-session', tempDir);
626
- const grades = await readGrades('nonexistent', tempDir);
627
- expect(grades).toEqual([]);
628
- });
629
- });
630
- //# sourceMappingURL=session-grade.test.js.map