@xhulz/nina 0.68.2 → 0.70.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (270) hide show
  1. package/bin/nina.mjs +2 -1
  2. package/package.json +1 -1
  3. package/releases/0.69.0/core/GAPS.md +125 -0
  4. package/releases/0.69.0/core/answered.json +83 -0
  5. package/releases/0.69.0/core/defaults/tree/.claude/agents/architect.md +1 -0
  6. package/releases/0.69.0/core/defaults/tree/.claude/agents/dba.md +3 -0
  7. package/releases/0.69.0/core/defaults/tree/.claude/agents/devops.md +1 -0
  8. package/releases/0.69.0/core/defaults/tree/.claude/agents/implementer.md +1 -0
  9. package/releases/0.69.0/core/defaults/tree/.claude/agents/integration-tester.md +3 -0
  10. package/releases/0.69.0/core/defaults/tree/.claude/agents/qa.md +7 -0
  11. package/releases/0.69.0/core/defaults/tree/.claude/agents/reviewer.md +3 -0
  12. package/releases/0.69.0/core/defaults/tree/.claude/agents/secops.md +3 -0
  13. package/releases/0.69.0/core/defaults/tree/.claude/agents/solidity-auditor.md +3 -0
  14. package/releases/0.69.0/core/defaults/tree/.claude/agents/solidity-dev.md +3 -0
  15. package/releases/0.69.0/core/tree/.claude/agents/architect.md +135 -0
  16. package/releases/0.69.0/core/tree/.claude/agents/dba.md +119 -0
  17. package/releases/0.69.0/core/tree/.claude/agents/design-reviewer.md +78 -0
  18. package/releases/0.69.0/core/tree/.claude/agents/devops.md +118 -0
  19. package/releases/0.69.0/core/tree/.claude/agents/implementer.md +178 -0
  20. package/releases/0.69.0/core/tree/.claude/agents/integration-tester.md +170 -0
  21. package/releases/0.69.0/core/tree/.claude/agents/planner.md +132 -0
  22. package/releases/0.69.0/core/tree/.claude/agents/qa.md +150 -0
  23. package/releases/0.69.0/core/tree/.claude/agents/reviewer.md +187 -0
  24. package/releases/0.69.0/core/tree/.claude/agents/secops.md +120 -0
  25. package/releases/0.69.0/core/tree/.claude/agents/solidity-auditor.md +126 -0
  26. package/releases/0.69.0/core/tree/.claude/agents/solidity-dev.md +123 -0
  27. package/releases/0.69.0/core/tree/.claude/agents-overview.md +65 -0
  28. package/releases/0.69.0/core/tree/.claude/frontend.md +10 -0
  29. package/releases/0.69.0/core/tree/.claude/graph.md +79 -0
  30. package/releases/0.69.0/core/tree/.claude/patterns.md +252 -0
  31. package/releases/0.69.0/core/tree/.claude/pills/README.md +150 -0
  32. package/releases/0.69.0/core/tree/.claude/pipeline.md +101 -0
  33. package/releases/0.69.0/core/tree/.claude/retrieval.md +103 -0
  34. package/releases/0.69.0/core/tree/.claude/router.md +219 -0
  35. package/releases/0.69.0/core/tree/.claude/templates/integration.md +48 -0
  36. package/releases/0.69.0/core/tree/CLAUDE.md +166 -0
  37. package/releases/0.69.0/core/tree/scripts/cost-watch.mjs +25 -0
  38. package/releases/0.69.0/core/tree/scripts/edit-guard.mjs +24 -0
  39. package/releases/0.69.0/core/tree/scripts/harness-check.mjs +81 -0
  40. package/releases/0.69.0/core/tree/scripts/loop-gate.mjs +19 -0
  41. package/releases/0.69.0/core/vocabulary.json +14 -0
  42. package/releases/0.69.0/surfaces/blockchain/tree/.claude/agents/architect.md +5 -0
  43. package/releases/0.69.0/surfaces/blockchain/tree/.claude/agents/devops.md +5 -0
  44. package/releases/0.69.0/surfaces/blockchain/tree/.claude/agents/reviewer.md +5 -0
  45. package/releases/0.69.0/surfaces/blockchain/tree/.claude/agents/solidity-auditor.md +18 -0
  46. package/releases/0.69.0/surfaces/blockchain/tree/.claude/agents/solidity-dev.md +16 -0
  47. package/releases/0.69.0/surfaces/blockchain/tree/.claude/agents-overview.md +6 -0
  48. package/releases/0.69.0/surfaces/blockchain/tree/.claude/graph.md +11 -0
  49. package/releases/0.69.0/surfaces/blockchain/tree/.claude/router.md +6 -0
  50. package/releases/0.69.0/surfaces/blockchain/tree/CLAUDE.md +12 -0
  51. package/releases/0.69.0/surfaces/d1/tree/.claude/agents/dba.md +15 -0
  52. package/releases/0.69.0/surfaces/d1/tree/.claude/agents/devops.md +2 -0
  53. package/releases/0.69.0/surfaces/d1/tree/.claude/agents/implementer.md +2 -0
  54. package/releases/0.69.0/surfaces/d1/tree/.claude/patterns.md +8 -0
  55. package/releases/0.69.0/surfaces/d1/tree/CLAUDE.md +2 -0
  56. package/releases/0.69.0/surfaces/db/tree/.claude/agents/architect.md +5 -0
  57. package/releases/0.69.0/surfaces/db/tree/.claude/agents/dba.md +54 -0
  58. package/releases/0.69.0/surfaces/db/tree/.claude/agents/devops.md +5 -0
  59. package/releases/0.69.0/surfaces/db/tree/.claude/agents/implementer.md +2 -0
  60. package/releases/0.69.0/surfaces/db/tree/.claude/agents/integration-tester.md +10 -0
  61. package/releases/0.69.0/surfaces/db/tree/.claude/agents/planner.md +2 -0
  62. package/releases/0.69.0/surfaces/db/tree/.claude/agents/reviewer.md +22 -0
  63. package/releases/0.69.0/surfaces/db/tree/.claude/agents/secops.md +2 -0
  64. package/releases/0.69.0/surfaces/db/tree/.claude/agents-overview.md +5 -0
  65. package/releases/0.69.0/surfaces/db/tree/.claude/graph.md +8 -0
  66. package/releases/0.69.0/surfaces/db/tree/.claude/patterns.md +22 -0
  67. package/releases/0.69.0/surfaces/db/tree/.claude/pipeline.md +13 -0
  68. package/releases/0.69.0/surfaces/db/tree/.claude/retrieval.md +5 -0
  69. package/releases/0.69.0/surfaces/db/tree/.claude/router.md +4 -0
  70. package/releases/0.69.0/surfaces/db/tree/CLAUDE.md +17 -0
  71. package/releases/0.69.0/surfaces/drizzle/tree/.claude/agents/dba.md +9 -0
  72. package/releases/0.69.0/surfaces/drizzle/tree/.claude/agents/devops.md +5 -0
  73. package/releases/0.69.0/surfaces/drizzle/tree/.claude/agents/implementer.md +2 -0
  74. package/releases/0.69.0/surfaces/drizzle/tree/.claude/patterns.md +7 -0
  75. package/releases/0.69.0/surfaces/edge-cf/tree/.claude/agents/architect.md +14 -0
  76. package/releases/0.69.0/surfaces/edge-cf/tree/.claude/agents/dba.md +2 -0
  77. package/releases/0.69.0/surfaces/edge-cf/tree/.claude/agents/devops.md +29 -0
  78. package/releases/0.69.0/surfaces/edge-cf/tree/.claude/agents/implementer.md +14 -0
  79. package/releases/0.69.0/surfaces/edge-cf/tree/.claude/agents/integration-tester.md +11 -0
  80. package/releases/0.69.0/surfaces/edge-cf/tree/.claude/agents/qa.md +3 -0
  81. package/releases/0.69.0/surfaces/edge-cf/tree/.claude/agents/reviewer.md +8 -0
  82. package/releases/0.69.0/surfaces/edge-cf/tree/.claude/agents/secops.md +8 -0
  83. package/releases/0.69.0/surfaces/edge-cf/tree/.claude/patterns.md +17 -0
  84. package/releases/0.69.0/surfaces/edge-cf/tree/.claude/retrieval.md +8 -0
  85. package/releases/0.69.0/surfaces/edge-cf/tree/CLAUDE.md +27 -0
  86. package/releases/0.69.0/surfaces/frontend/tree/.claude/agents/architect.md +20 -0
  87. package/releases/0.69.0/surfaces/frontend/tree/.claude/agents/devops.md +28 -0
  88. package/releases/0.69.0/surfaces/frontend/tree/.claude/agents/implementer.md +25 -0
  89. package/releases/0.69.0/surfaces/frontend/tree/.claude/agents/qa.md +17 -0
  90. package/releases/0.69.0/surfaces/frontend/tree/.claude/agents/reviewer.md +56 -0
  91. package/releases/0.69.0/surfaces/frontend/tree/.claude/patterns.md +8 -0
  92. package/releases/0.69.0/surfaces/frontend/tree/.claude/retrieval.md +2 -0
  93. package/releases/0.69.0/surfaces/frontend/tree/.claude/router.md +14 -0
  94. package/releases/0.69.0/surfaces/frontend/tree/CLAUDE.md +5 -0
  95. package/releases/0.69.0/surfaces/integrations/tree/.claude/agents/architect.md +16 -0
  96. package/releases/0.69.0/surfaces/integrations/tree/.claude/agents/implementer.md +12 -0
  97. package/releases/0.69.0/surfaces/integrations/tree/.claude/agents/integration-tester.md +20 -0
  98. package/releases/0.69.0/surfaces/integrations/tree/.claude/agents/planner.md +2 -0
  99. package/releases/0.69.0/surfaces/integrations/tree/.claude/agents/reviewer.md +21 -0
  100. package/releases/0.69.0/surfaces/integrations/tree/.claude/agents/secops.md +2 -0
  101. package/releases/0.69.0/surfaces/integrations/tree/.claude/agents-overview.md +8 -0
  102. package/releases/0.69.0/surfaces/integrations/tree/.claude/graph.md +10 -0
  103. package/releases/0.69.0/surfaces/integrations/tree/.claude/patterns.md +38 -0
  104. package/releases/0.69.0/surfaces/integrations/tree/.claude/pipeline.md +16 -0
  105. package/releases/0.69.0/surfaces/integrations/tree/.claude/retrieval.md +16 -0
  106. package/releases/0.69.0/surfaces/integrations/tree/.claude/router.md +6 -0
  107. package/releases/0.69.0/surfaces/integrations/tree/CLAUDE.md +17 -0
  108. package/releases/0.69.0/surfaces/money/tree/.claude/agents/architect.md +12 -0
  109. package/releases/0.69.0/surfaces/money/tree/.claude/agents/dba.md +14 -0
  110. package/releases/0.69.0/surfaces/money/tree/.claude/agents/implementer.md +11 -0
  111. package/releases/0.69.0/surfaces/money/tree/.claude/agents/integration-tester.md +3 -0
  112. package/releases/0.69.0/surfaces/money/tree/.claude/agents/reviewer.md +23 -0
  113. package/releases/0.69.0/surfaces/money/tree/.claude/agents/secops.md +5 -0
  114. package/releases/0.69.0/surfaces/money/tree/.claude/agents/solidity-auditor.md +4 -0
  115. package/releases/0.69.0/surfaces/money/tree/.claude/agents/solidity-dev.md +4 -0
  116. package/releases/0.69.0/surfaces/money/tree/.claude/graph.md +2 -0
  117. package/releases/0.69.0/surfaces/money/tree/.claude/patterns.md +49 -0
  118. package/releases/0.69.0/surfaces/money/tree/.claude/pipeline.md +2 -0
  119. package/releases/0.69.0/surfaces/money/tree/.claude/retrieval.md +2 -0
  120. package/releases/0.69.0/surfaces/money/tree/CLAUDE.md +11 -0
  121. package/releases/0.69.0/surfaces/pii/tree/.claude/agents/dba.md +2 -0
  122. package/releases/0.69.0/surfaces/pii/tree/.claude/agents/devops.md +8 -0
  123. package/releases/0.69.0/surfaces/pii/tree/.claude/agents/reviewer.md +8 -0
  124. package/releases/0.69.0/surfaces/pii/tree/.claude/agents/secops.md +2 -0
  125. package/releases/0.69.0/surfaces/pii/tree/.claude/agents/solidity-auditor.md +5 -0
  126. package/releases/0.69.0/surfaces/pii/tree/CLAUDE.md +5 -0
  127. package/releases/0.69.0/surfaces/prisma/tree/.claude/agents/architect.md +2 -0
  128. package/releases/0.69.0/surfaces/prisma/tree/.claude/agents/dba.md +42 -0
  129. package/releases/0.69.0/surfaces/prisma/tree/.claude/agents/devops.md +11 -0
  130. package/releases/0.69.0/surfaces/prisma/tree/.claude/agents/implementer.md +2 -0
  131. package/releases/0.69.0/surfaces/prisma/tree/.claude/agents/integration-tester.md +2 -0
  132. package/releases/0.69.0/surfaces/prisma/tree/.claude/agents/reviewer.md +2 -0
  133. package/releases/0.69.0/surfaces/prisma/tree/.claude/patterns.md +15 -0
  134. package/releases/0.69.0/surfaces/prisma/tree/CLAUDE.md +5 -0
  135. package/releases/0.70.0/core/GAPS.md +125 -0
  136. package/releases/0.70.0/core/answered.json +89 -0
  137. package/releases/0.70.0/core/defaults/tree/.claude/agents/architect.md +1 -0
  138. package/releases/0.70.0/core/defaults/tree/.claude/agents/dba.md +3 -0
  139. package/releases/0.70.0/core/defaults/tree/.claude/agents/devops.md +1 -0
  140. package/releases/0.70.0/core/defaults/tree/.claude/agents/implementer.md +1 -0
  141. package/releases/0.70.0/core/defaults/tree/.claude/agents/integration-tester.md +3 -0
  142. package/releases/0.70.0/core/defaults/tree/.claude/agents/qa.md +7 -0
  143. package/releases/0.70.0/core/defaults/tree/.claude/agents/reviewer.md +3 -0
  144. package/releases/0.70.0/core/defaults/tree/.claude/agents/secops.md +3 -0
  145. package/releases/0.70.0/core/defaults/tree/.claude/agents/solidity-auditor.md +3 -0
  146. package/releases/0.70.0/core/defaults/tree/.claude/agents/solidity-dev.md +3 -0
  147. package/releases/0.70.0/core/tree/.claude/agents/architect.md +135 -0
  148. package/releases/0.70.0/core/tree/.claude/agents/dba.md +119 -0
  149. package/releases/0.70.0/core/tree/.claude/agents/design-reviewer.md +78 -0
  150. package/releases/0.70.0/core/tree/.claude/agents/devops.md +118 -0
  151. package/releases/0.70.0/core/tree/.claude/agents/implementer.md +178 -0
  152. package/releases/0.70.0/core/tree/.claude/agents/integration-tester.md +170 -0
  153. package/releases/0.70.0/core/tree/.claude/agents/planner.md +132 -0
  154. package/releases/0.70.0/core/tree/.claude/agents/qa.md +150 -0
  155. package/releases/0.70.0/core/tree/.claude/agents/reviewer.md +187 -0
  156. package/releases/0.70.0/core/tree/.claude/agents/secops.md +120 -0
  157. package/releases/0.70.0/core/tree/.claude/agents/solidity-auditor.md +126 -0
  158. package/releases/0.70.0/core/tree/.claude/agents/solidity-dev.md +123 -0
  159. package/releases/0.70.0/core/tree/.claude/agents-overview.md +65 -0
  160. package/releases/0.70.0/core/tree/.claude/frontend.md +10 -0
  161. package/releases/0.70.0/core/tree/.claude/graph.md +79 -0
  162. package/releases/0.70.0/core/tree/.claude/patterns.md +252 -0
  163. package/releases/0.70.0/core/tree/.claude/pills/README.md +150 -0
  164. package/releases/0.70.0/core/tree/.claude/pipeline.md +101 -0
  165. package/releases/0.70.0/core/tree/.claude/retrieval.md +103 -0
  166. package/releases/0.70.0/core/tree/.claude/router.md +221 -0
  167. package/releases/0.70.0/core/tree/.claude/templates/integration.md +48 -0
  168. package/releases/0.70.0/core/tree/CLAUDE.md +167 -0
  169. package/releases/0.70.0/core/tree/scripts/cost-watch.mjs +25 -0
  170. package/releases/0.70.0/core/tree/scripts/edit-guard.mjs +24 -0
  171. package/releases/0.70.0/core/tree/scripts/harness-check.mjs +82 -0
  172. package/releases/0.70.0/core/tree/scripts/loop-gate.mjs +19 -0
  173. package/releases/0.70.0/core/vocabulary.json +14 -0
  174. package/releases/0.70.0/surfaces/blockchain/tree/.claude/agents/architect.md +5 -0
  175. package/releases/0.70.0/surfaces/blockchain/tree/.claude/agents/devops.md +5 -0
  176. package/releases/0.70.0/surfaces/blockchain/tree/.claude/agents/reviewer.md +5 -0
  177. package/releases/0.70.0/surfaces/blockchain/tree/.claude/agents/solidity-auditor.md +18 -0
  178. package/releases/0.70.0/surfaces/blockchain/tree/.claude/agents/solidity-dev.md +16 -0
  179. package/releases/0.70.0/surfaces/blockchain/tree/.claude/agents-overview.md +6 -0
  180. package/releases/0.70.0/surfaces/blockchain/tree/.claude/graph.md +11 -0
  181. package/releases/0.70.0/surfaces/blockchain/tree/.claude/router.md +6 -0
  182. package/releases/0.70.0/surfaces/blockchain/tree/CLAUDE.md +12 -0
  183. package/releases/0.70.0/surfaces/d1/tree/.claude/agents/dba.md +15 -0
  184. package/releases/0.70.0/surfaces/d1/tree/.claude/agents/devops.md +2 -0
  185. package/releases/0.70.0/surfaces/d1/tree/.claude/agents/implementer.md +2 -0
  186. package/releases/0.70.0/surfaces/d1/tree/.claude/patterns.md +8 -0
  187. package/releases/0.70.0/surfaces/d1/tree/CLAUDE.md +2 -0
  188. package/releases/0.70.0/surfaces/db/tree/.claude/agents/architect.md +5 -0
  189. package/releases/0.70.0/surfaces/db/tree/.claude/agents/dba.md +54 -0
  190. package/releases/0.70.0/surfaces/db/tree/.claude/agents/devops.md +5 -0
  191. package/releases/0.70.0/surfaces/db/tree/.claude/agents/implementer.md +2 -0
  192. package/releases/0.70.0/surfaces/db/tree/.claude/agents/integration-tester.md +10 -0
  193. package/releases/0.70.0/surfaces/db/tree/.claude/agents/planner.md +2 -0
  194. package/releases/0.70.0/surfaces/db/tree/.claude/agents/reviewer.md +22 -0
  195. package/releases/0.70.0/surfaces/db/tree/.claude/agents/secops.md +2 -0
  196. package/releases/0.70.0/surfaces/db/tree/.claude/agents-overview.md +5 -0
  197. package/releases/0.70.0/surfaces/db/tree/.claude/graph.md +8 -0
  198. package/releases/0.70.0/surfaces/db/tree/.claude/patterns.md +22 -0
  199. package/releases/0.70.0/surfaces/db/tree/.claude/pipeline.md +13 -0
  200. package/releases/0.70.0/surfaces/db/tree/.claude/retrieval.md +5 -0
  201. package/releases/0.70.0/surfaces/db/tree/.claude/router.md +4 -0
  202. package/releases/0.70.0/surfaces/db/tree/CLAUDE.md +17 -0
  203. package/releases/0.70.0/surfaces/drizzle/tree/.claude/agents/dba.md +9 -0
  204. package/releases/0.70.0/surfaces/drizzle/tree/.claude/agents/devops.md +5 -0
  205. package/releases/0.70.0/surfaces/drizzle/tree/.claude/agents/implementer.md +2 -0
  206. package/releases/0.70.0/surfaces/drizzle/tree/.claude/patterns.md +7 -0
  207. package/releases/0.70.0/surfaces/edge-cf/tree/.claude/agents/architect.md +14 -0
  208. package/releases/0.70.0/surfaces/edge-cf/tree/.claude/agents/dba.md +2 -0
  209. package/releases/0.70.0/surfaces/edge-cf/tree/.claude/agents/devops.md +29 -0
  210. package/releases/0.70.0/surfaces/edge-cf/tree/.claude/agents/implementer.md +14 -0
  211. package/releases/0.70.0/surfaces/edge-cf/tree/.claude/agents/integration-tester.md +11 -0
  212. package/releases/0.70.0/surfaces/edge-cf/tree/.claude/agents/qa.md +3 -0
  213. package/releases/0.70.0/surfaces/edge-cf/tree/.claude/agents/reviewer.md +8 -0
  214. package/releases/0.70.0/surfaces/edge-cf/tree/.claude/agents/secops.md +8 -0
  215. package/releases/0.70.0/surfaces/edge-cf/tree/.claude/patterns.md +17 -0
  216. package/releases/0.70.0/surfaces/edge-cf/tree/.claude/retrieval.md +8 -0
  217. package/releases/0.70.0/surfaces/edge-cf/tree/CLAUDE.md +29 -0
  218. package/releases/0.70.0/surfaces/frontend/tree/.claude/agents/architect.md +20 -0
  219. package/releases/0.70.0/surfaces/frontend/tree/.claude/agents/devops.md +28 -0
  220. package/releases/0.70.0/surfaces/frontend/tree/.claude/agents/implementer.md +25 -0
  221. package/releases/0.70.0/surfaces/frontend/tree/.claude/agents/qa.md +17 -0
  222. package/releases/0.70.0/surfaces/frontend/tree/.claude/agents/reviewer.md +56 -0
  223. package/releases/0.70.0/surfaces/frontend/tree/.claude/patterns.md +8 -0
  224. package/releases/0.70.0/surfaces/frontend/tree/.claude/retrieval.md +2 -0
  225. package/releases/0.70.0/surfaces/frontend/tree/.claude/router.md +14 -0
  226. package/releases/0.70.0/surfaces/frontend/tree/CLAUDE.md +5 -0
  227. package/releases/0.70.0/surfaces/integrations/tree/.claude/agents/architect.md +16 -0
  228. package/releases/0.70.0/surfaces/integrations/tree/.claude/agents/implementer.md +12 -0
  229. package/releases/0.70.0/surfaces/integrations/tree/.claude/agents/integration-tester.md +20 -0
  230. package/releases/0.70.0/surfaces/integrations/tree/.claude/agents/planner.md +2 -0
  231. package/releases/0.70.0/surfaces/integrations/tree/.claude/agents/reviewer.md +21 -0
  232. package/releases/0.70.0/surfaces/integrations/tree/.claude/agents/secops.md +2 -0
  233. package/releases/0.70.0/surfaces/integrations/tree/.claude/agents-overview.md +8 -0
  234. package/releases/0.70.0/surfaces/integrations/tree/.claude/graph.md +10 -0
  235. package/releases/0.70.0/surfaces/integrations/tree/.claude/patterns.md +38 -0
  236. package/releases/0.70.0/surfaces/integrations/tree/.claude/pipeline.md +16 -0
  237. package/releases/0.70.0/surfaces/integrations/tree/.claude/retrieval.md +16 -0
  238. package/releases/0.70.0/surfaces/integrations/tree/.claude/router.md +6 -0
  239. package/releases/0.70.0/surfaces/integrations/tree/CLAUDE.md +17 -0
  240. package/releases/0.70.0/surfaces/money/tree/.claude/agents/architect.md +12 -0
  241. package/releases/0.70.0/surfaces/money/tree/.claude/agents/dba.md +14 -0
  242. package/releases/0.70.0/surfaces/money/tree/.claude/agents/implementer.md +11 -0
  243. package/releases/0.70.0/surfaces/money/tree/.claude/agents/integration-tester.md +3 -0
  244. package/releases/0.70.0/surfaces/money/tree/.claude/agents/reviewer.md +23 -0
  245. package/releases/0.70.0/surfaces/money/tree/.claude/agents/secops.md +5 -0
  246. package/releases/0.70.0/surfaces/money/tree/.claude/agents/solidity-auditor.md +4 -0
  247. package/releases/0.70.0/surfaces/money/tree/.claude/agents/solidity-dev.md +4 -0
  248. package/releases/0.70.0/surfaces/money/tree/.claude/graph.md +2 -0
  249. package/releases/0.70.0/surfaces/money/tree/.claude/patterns.md +49 -0
  250. package/releases/0.70.0/surfaces/money/tree/.claude/pipeline.md +2 -0
  251. package/releases/0.70.0/surfaces/money/tree/.claude/retrieval.md +2 -0
  252. package/releases/0.70.0/surfaces/money/tree/CLAUDE.md +11 -0
  253. package/releases/0.70.0/surfaces/pii/tree/.claude/agents/dba.md +2 -0
  254. package/releases/0.70.0/surfaces/pii/tree/.claude/agents/devops.md +8 -0
  255. package/releases/0.70.0/surfaces/pii/tree/.claude/agents/reviewer.md +8 -0
  256. package/releases/0.70.0/surfaces/pii/tree/.claude/agents/secops.md +2 -0
  257. package/releases/0.70.0/surfaces/pii/tree/.claude/agents/solidity-auditor.md +5 -0
  258. package/releases/0.70.0/surfaces/pii/tree/CLAUDE.md +5 -0
  259. package/releases/0.70.0/surfaces/prisma/tree/.claude/agents/architect.md +2 -0
  260. package/releases/0.70.0/surfaces/prisma/tree/.claude/agents/dba.md +42 -0
  261. package/releases/0.70.0/surfaces/prisma/tree/.claude/agents/devops.md +11 -0
  262. package/releases/0.70.0/surfaces/prisma/tree/.claude/agents/implementer.md +2 -0
  263. package/releases/0.70.0/surfaces/prisma/tree/.claude/agents/integration-tester.md +2 -0
  264. package/releases/0.70.0/surfaces/prisma/tree/.claude/agents/reviewer.md +2 -0
  265. package/releases/0.70.0/surfaces/prisma/tree/.claude/patterns.md +15 -0
  266. package/releases/0.70.0/surfaces/prisma/tree/CLAUDE.md +5 -0
  267. package/src/commands/learn.mjs +44 -13
  268. package/src/commands/sizes.mjs +94 -24
  269. package/src/commands/upgrade.mjs +1 -1
  270. package/src/gate.mjs +10 -4
@@ -75,6 +75,23 @@ export function forecastIn(text) {
75
75
  return { lines: Number(m[1].replace(/,/g, '')), files: files ? Number(files[1]) : null };
76
76
  }
77
77
 
78
+ /**
79
+ * What a step file's `Size:` line says when {@link forecastIn} reads no forecast from it, or null when it reads one or
80
+ * the file has no such line. A step whose line was rewritten into prose — "round 1 landed +498/−95 against ~272" — was
81
+ * left out of every rate without a word. The label opens its line, as `Kind:` does: `font-size:` in a step's CSS and a
82
+ * sentence that names the `Size:` line are no line of their own.
83
+ *
84
+ * @param {string} text - A step file.
85
+ * @returns {string|null} The line after `Size:`, shortened.
86
+ */
87
+ export function unreadSize(text) {
88
+ if (forecastIn(text)) return null;
89
+ const m = /^[\s>*_-]*Size:[*_ \t]*([^\n]*)/im.exec(text);
90
+ if (!m) return null;
91
+ const said = m[1].trim();
92
+ return said.length > 72 ? `${said.slice(0, 71)}…` : said;
93
+ }
94
+
78
95
  /** Runs git in the project, or says it could not. */
79
96
  function git(dir, args) {
80
97
  const r = spawnSync('git', ['-C', dir, ...args], { encoding: 'utf8', maxBuffer: 256 * 1024 * 1024 });
@@ -178,7 +195,8 @@ const median = (xs) => {
178
195
  * Every step with a forecast, landed or not: what it was forecast before it was built, and what its commits added.
179
196
  *
180
197
  * @param {string} dir - The project.
181
- * @returns {{steps: object[], limit: number}|null} Null outside a git repository.
198
+ * @returns {{steps: object[], limit: number, unread: object[]}|null} Null outside a git repository. `unread` is each step
199
+ * file whose `Size:` line reads as no forecast, with what it says (`said`).
182
200
  */
183
201
  export function measure(dir) {
184
202
  const profile = (() => {
@@ -191,7 +209,7 @@ export function measure(dir) {
191
209
  const limit = Number(profile?.vocabulary?.STEP_LINES) || Number(defaultVocabulary(PACKAGE).STEP_LINES) || 400;
192
210
  // It runs every turn: a project with no step file does not pay for its history.
193
211
  const files = stepFiles(dir);
194
- if (files.length === 0) return git(dir, ['rev-parse', '--verify', '--quiet', 'HEAD']) === null ? null : { steps: [], limit };
212
+ if (files.length === 0) return git(dir, ['rev-parse', '--verify', '--quiet', 'HEAD']) === null ? null : { steps: [], limit, unread: [] };
195
213
  const log = git(dir, ['log', '--format=%H%x09%ct%x09%cI%x09%s', 'HEAD']);
196
214
  if (log === null) return null;
197
215
  // Times as instants: an ISO time carries its zone, and two zones compared as text order wrongly.
@@ -227,23 +245,36 @@ export function measure(dir) {
227
245
  return when;
228
246
  };
229
247
  const steps = [];
248
+ // Step files whose `Size:` line reads as no forecast: left out of every rate, so said rather than skipped.
249
+ const unread = [];
230
250
  for (const file of files) {
231
251
  const current = readFileSync(join(dir, file.path), 'utf8');
232
252
  const now = forecastIn(current);
233
253
  const kind = kindIn(current);
234
254
  const landings = named.get(file.path).filter((c) => code.get(c.hash)?.size > 0);
235
255
  if (landings.length === 0) {
236
- if (!now) continue;
256
+ if (!now) {
257
+ const said = unreadSize(current);
258
+ if (said !== null) unread.push({ ...file, landed: false, said });
259
+ continue;
260
+ }
237
261
  // Forecast again in the working tree, it is newer than every commit.
238
262
  const since = at('HEAD', file.path)?.lines === now.lines ? writtenAt(file.path, Infinity, now.lines) : Infinity;
239
- steps.push({ ...file, kind, landed: false, forecast: now, since });
263
+ // What it was first forecast at: a forecast restated at a rate carries that rate over it, and rates multiplied
264
+ // onto one another — another kind's among them — put one project's steps at ×2.54 of their count.
265
+ const original = changes.get(file.path).map((c) => at(c.hash, file.path)).filter(Boolean).at(-1) ?? null;
266
+ steps.push({ ...file, kind, landed: false, forecast: now, since, original: original && original.lines !== now.lines ? original : null });
240
267
  continue;
241
268
  }
242
269
  // The forecast the step was built to: its file before its first commit, or as that commit wrote it.
243
270
  const first = landings[0];
244
271
  const before = at(`${first.hash}^`, file.path);
245
272
  const forecast = before ?? at(first.hash, file.path);
246
- if (!forecast) continue;
273
+ if (!forecast) {
274
+ const said = unreadSize(text.get(`${first.hash}^:${file.path}`) ?? '') ?? unreadSize(text.get(`${first.hash}:${file.path}`) ?? '');
275
+ if (said !== null) unread.push({ ...file, landed: true, said, hash: first.hash });
276
+ continue;
277
+ }
247
278
  const since = (before ? writtenAt(file.path, order.get(first.hash), forecast.lines) : null) ?? first.t;
248
279
  const lines = new Map();
249
280
  for (const c of landings) for (const [path, added] of code.get(c.hash)) lines.set(path, (lines.get(path) ?? 0) + added);
@@ -272,7 +303,7 @@ export function measure(dir) {
272
303
  hash: last.hash,
273
304
  });
274
305
  }
275
- return { steps, limit };
306
+ return { steps, limit, unread };
276
307
  }
277
308
 
278
309
  /**
@@ -294,6 +325,20 @@ export function rateOf(steps, { spec, since, kind = null }) {
294
325
  return over.length ? { rate: median(over.map((s) => s.measured ?? s.ratio)), over: over.length, kind: mine.length ? kind : null } : null;
295
326
  }
296
327
 
328
+ /**
329
+ * What a spec's newest landed steps of one kind missed by, whenever they were forecast: set beside a step to land that
330
+ * carries more over its first forecast than its kind ever missed by, which reads as rates carried from elsewhere.
331
+ *
332
+ * @param {object[]} steps
333
+ * @param {{spec: string, kind?: string|null}} step - Its spec and kind.
334
+ * @returns {number|null}
335
+ */
336
+ export function kindRate(steps, { spec, kind = null }) {
337
+ if (!kind) return null;
338
+ const over = steps.filter((s) => s.landed && s.spec === spec && s.kind === kind).sort((a, b) => a.t - b.t).slice(-RATE_OVER);
339
+ return over.length ? median(over.map((s) => s.measured ?? s.ratio)) : null;
340
+ }
341
+
297
342
  /**
298
343
  * What the detector says: the newest landed step, when it overran, and the steps of its spec still forecast as they
299
344
  * were when it landed — until one of them is forecast again. The next step to go out is forecast again at its turn, and
@@ -336,7 +381,7 @@ export async function sizes(argv) {
336
381
  else console.error(' not a git repository, or one with no commit yet: a step is measured by its commits\n');
337
382
  return check ? 0 : 1;
338
383
  }
339
- const { steps, limit } = measured;
384
+ const { steps, limit, unread } = measured;
340
385
  if (check) {
341
386
  // During `nina upgrade --apply`: a step that overran is the project's history, not the move — and the release that
342
387
  // first shipped this detector rolled itself back in the project that asked for it. The move says it after.
@@ -344,30 +389,50 @@ export async function sizes(argv) {
344
389
  console.log('sizes: current');
345
390
  return 0;
346
391
  }
392
+ const said = [];
347
393
  const found = overrun(measured);
348
- if (!found) {
394
+ if (found) {
395
+ const { step, stale } = found;
396
+ const again = stale.slice(0, 4).map((s) => {
397
+ const rate = rateOf(steps, s);
398
+ const next = Math.round(s.forecast.lines * (rate?.rate ?? 1));
399
+ return `${s.step} ~${s.forecast.lines} → ~${next}${rate?.kind ? ` (${rate.kind})` : ''}${next > limit ? ` past ${limit}` : ''}`;
400
+ });
401
+ const first = step.first === null ? '' : `, ${step.first} in its first round (${times(step.measured)})`;
402
+ said.push(
403
+ `step ${step.step} of ${step.spec} landed ${step.lines} lines against ~${step.forecast.lines} (${times(step.ratio)}${first}); ` +
404
+ `before the next of its ${stale.length} step(s) forecast when it was goes out, forecast that one again — a \`Size:\` line at the rate \`nina sizes\` gives it — ` +
405
+ `and split it if that puts it past ${limit}; the rest at their turn: ${again.join(', ')}${stale.length > again.length ? ', …' : ''}`,
406
+ );
407
+ }
408
+ // Only a step still to land: its line can be written again now, and once it lands, the line it carried is history.
409
+ for (const u of unread.filter((x) => !x.landed)) {
410
+ // "~215 raw lines" opens with a number too: what reads is the forecast it is measured by, followed by `lines`.
411
+ said.push(`step ${u.step} of ${u.spec}: no forecast it can read in its \`Size:\` line ("${u.said}") — write it as \`Size: ~N lines in M files\`, the forecast the step is measured by followed by \`lines\`, before the step lands, or no rate counts it`);
412
+ }
413
+ if (said.length === 0) {
349
414
  console.log('sizes: current');
350
415
  return 0;
351
416
  }
352
- const { step, stale } = found;
353
- const again = stale.slice(0, 4).map((s) => {
354
- const rate = rateOf(steps, s);
355
- const next = Math.round(s.forecast.lines * (rate?.rate ?? 1));
356
- return `${s.step} ~${s.forecast.lines} → ~${next}${rate?.kind ? ` (${rate.kind})` : ''}${next > limit ? ` past ${limit}` : ''}`;
357
- });
358
- const first = step.first === null ? '' : `, ${step.first} in its first round (${times(step.measured)})`;
359
- console.log(
360
- `step ${step.step} of ${step.spec} landed ${step.lines} lines against ~${step.forecast.lines} (${times(step.ratio)}${first}); ` +
361
- `before the next of its ${stale.length} step(s) forecast when it was goes out, forecast that one again — a \`Size:\` line at the rate \`nina sizes\` gives it — ` +
362
- `and split it if that puts it past ${limit}; the rest at their turn: ${again.join(', ')}${stale.length > again.length ? ', …' : ''}`,
363
- );
417
+ for (const line of said) console.log(line);
364
418
  return 1;
365
419
  }
366
- if (steps.length === 0) {
420
+ if (steps.length === 0 && unread.length === 0) {
367
421
  console.log(` no step file under ${SPECS} states a \`Size:\` line yet\n`);
368
422
  return 0;
369
423
  }
370
- for (const spec of [...new Set(steps.map((s) => s.spec))]) {
424
+ // What a step to land carries over its first forecast, beside what its kind's landed steps missed by: rates multiplied
425
+ // onto one another, another kind's among them, read as one step's own.
426
+ const carried = (s) => {
427
+ if (!s.original) return '';
428
+ const factor = s.forecast.lines / s.original.lines;
429
+ const own = kindRate(steps, s);
430
+ const note = ` · first forecast ~${s.original.lines}, ${times(factor)} since`;
431
+ if (own === null) return dim(note);
432
+ const beside = `${note}; its ${s.kind} steps missed by ${times(own)}`;
433
+ return factor > own * OVERRUN ? amber(beside) : dim(beside);
434
+ };
435
+ for (const spec of [...new Set([...steps, ...unread].map((s) => s.spec))]) {
371
436
  const mine = steps.filter((s) => s.spec === spec);
372
437
  console.log(`\n ${bold(pink(spec))}${dim(` landed against the forecast it was built to; limit ${limit} lines`)}`);
373
438
  for (const s of mine.filter((x) => x.landed).sort((a, b) => a.t - b.t)) {
@@ -382,16 +447,21 @@ export async function sizes(argv) {
382
447
  for (const s of mine.filter((x) => !x.landed)) {
383
448
  const rate = rateOf(steps, s);
384
449
  if (!rate) {
385
- console.log(` ${s.step.padEnd(10)} ~${String(s.forecast.lines).padEnd(5)} ${dim('to land — forecast after every step that landed, so none measures it yet')}`);
450
+ console.log(` ${s.step.padEnd(10)} ~${String(s.forecast.lines).padEnd(5)} ${dim('to land — forecast after every step that landed, so none measures it yet')}${carried(s)}`);
386
451
  continue;
387
452
  }
388
453
  const next = Math.round(s.forecast.lines * rate.rate);
389
454
  console.log(
390
455
  ` ${s.step.padEnd(10)} ~${String(s.forecast.lines).padEnd(5)} → ~${String(next).padEnd(5)} ` +
391
456
  dim(`to land, at ${times(rate.rate)} over ${rate.over} ${rate.kind ? `${rate.kind} ` : ''}step(s) forecast as it was`) +
392
- (next > limit ? amber(` past ${limit}: split`) : ''),
457
+ (next > limit ? amber(` past ${limit}: split`) : '') +
458
+ carried(s),
393
459
  );
394
460
  }
461
+ for (const u of unread.filter((x) => x.spec === spec)) {
462
+ const where = u.landed ? `before ${u.hash.slice(0, 7)}, the commit that landed it,` : 'to land,';
463
+ console.log(` ${u.step.padEnd(10)} ${amber('no forecast it can read')} ${dim(`— its \`Size:\` line ${where} says "${u.said}", so no rate counts it`)}`);
464
+ }
395
465
  }
396
466
  console.log('');
397
467
  return 0;
@@ -633,7 +633,7 @@ export async function upgrade(argv, ctx) {
633
633
  }
634
634
  const forecasts = nina(ctx, target, ['sizes', '--project', target, '--check']);
635
635
  if (!forecasts.ok && forecasts.out.trim()) {
636
- console.log('\n a step landed past its forecast — not caused by this move, now visible:');
636
+ console.log('\n the step forecasts have something to act on — not caused by this move, now visible:');
637
637
  for (const line of forecasts.out.trim().split('\n')) console.log(` ${line}`);
638
638
  }
639
639
  // The move is done and the tree is sound, but it is not finished: until these are written
package/src/gate.mjs CHANGED
@@ -268,6 +268,8 @@ function append(path, entry) {
268
268
  *
269
269
  * - a rejection is cancelled by a pass launched after a fix went out for it: that review saw the fix. A
270
270
  * sibling launched with it, or a reviewer launched after it that saw no fix, cancels nothing;
271
+ * - a rejection is withdrawn by a later completion of the agent that made it, passing with no fix sent between:
272
+ * the same review judged again, which nothing else would settle;
271
273
  * - a rejection from a review that was already running when the edge's last round went out belongs to
272
274
  * that round, and makes no new one;
273
275
  * - the rest make this dispatch a round on the edge: one more than the rounds since the loop last
@@ -335,12 +337,15 @@ export function replay(entries, loops, forward = new Map()) {
335
337
  };
336
338
 
337
339
  /**
338
- * A source's waiting verdicts, settled: the rejections no later review of a fix cancelled, and whether a pass
339
- * closes its loops — one that began after the latest fix, with no rejection running beside it.
340
+ * A source's waiting verdicts, settled: the rejections no later review of a fix cancelled and no later completion of
341
+ * their own agent withdrew, and whether a pass closes its loops — one that began after the latest fix, with no
342
+ * rejection running beside it.
340
343
  */
341
344
  const settle = (source, batch) => {
342
345
  const passes = batch.filter((v) => !isLoopBack(v.verdict));
343
- const live = batch.filter((v) => isLoopBack(v.verdict) && !passes.some((p) => p.launch > v.at && fixBetween(source, v.at, p.launch)));
346
+ const live = batch.filter(
347
+ (v) => isLoopBack(v.verdict) && !passes.some((p) => p.launch > v.at && (p.agent === v.agent || fixBetween(source, v.at, p.launch))),
348
+ );
344
349
  return { live, closes: passes.some((p) => p.launch > (lastFix.get(source) ?? -1) && !live.some((v) => v.launch < p.at)) };
345
350
  };
346
351
 
@@ -461,7 +466,8 @@ export function replay(entries, loops, forward = new Map()) {
461
466
  const onward = [...forward].filter(([, sources]) => sources.has(source)).map(([stage]) => stage);
462
467
  return { source, token, rounds: s.n, cap, given: grace.get(key) ?? 0, issues, closing, targets: [...targetsOf(source)], onward };
463
468
  });
464
- const waiting = [...pending.entries()].flatMap(([source, batch]) => batch.filter((v) => isLoopBack(v.verdict)).map((v) => ({ source, verdict: v.verdict, issues: v.issues ?? [], index: v.at })));
469
+ // A rejection its own agent withdrew waits on no fix: counted as waiting, the next session inherited it.
470
+ const waiting = [...pending.entries()].flatMap(([source, batch]) => settle(source, batch).live.map((v) => ({ source, verdict: v.verdict, issues: v.issues ?? [], index: v.at })));
465
471
  return { effect: (to) => effect(to, entries.length), rounds: made, open, waiting };
466
472
  }
467
473