@xhulz/nina 0.53.3 → 0.55.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 (272) hide show
  1. package/README.md +1 -1
  2. package/package.json +1 -1
  3. package/releases/0.54.0/core/GAPS.md +125 -0
  4. package/releases/0.54.0/core/answered.json +68 -0
  5. package/releases/0.54.0/core/defaults/tree/.claude/agents/architect.md +1 -0
  6. package/releases/0.54.0/core/defaults/tree/.claude/agents/dba.md +3 -0
  7. package/releases/0.54.0/core/defaults/tree/.claude/agents/devops.md +1 -0
  8. package/releases/0.54.0/core/defaults/tree/.claude/agents/implementer.md +1 -0
  9. package/releases/0.54.0/core/defaults/tree/.claude/agents/integration-tester.md +3 -0
  10. package/releases/0.54.0/core/defaults/tree/.claude/agents/qa.md +7 -0
  11. package/releases/0.54.0/core/defaults/tree/.claude/agents/reviewer.md +3 -0
  12. package/releases/0.54.0/core/defaults/tree/.claude/agents/secops.md +3 -0
  13. package/releases/0.54.0/core/defaults/tree/.claude/agents/solidity-auditor.md +3 -0
  14. package/releases/0.54.0/core/defaults/tree/.claude/agents/solidity-dev.md +3 -0
  15. package/releases/0.54.0/core/tree/.claude/agents/architect.md +129 -0
  16. package/releases/0.54.0/core/tree/.claude/agents/dba.md +117 -0
  17. package/releases/0.54.0/core/tree/.claude/agents/devops.md +118 -0
  18. package/releases/0.54.0/core/tree/.claude/agents/implementer.md +163 -0
  19. package/releases/0.54.0/core/tree/.claude/agents/integration-tester.md +168 -0
  20. package/releases/0.54.0/core/tree/.claude/agents/planner.md +132 -0
  21. package/releases/0.54.0/core/tree/.claude/agents/qa.md +150 -0
  22. package/releases/0.54.0/core/tree/.claude/agents/reviewer.md +184 -0
  23. package/releases/0.54.0/core/tree/.claude/agents/secops.md +120 -0
  24. package/releases/0.54.0/core/tree/.claude/agents/solidity-auditor.md +126 -0
  25. package/releases/0.54.0/core/tree/.claude/agents/solidity-dev.md +123 -0
  26. package/releases/0.54.0/core/tree/.claude/agents-overview.md +64 -0
  27. package/releases/0.54.0/core/tree/.claude/frontend.md +10 -0
  28. package/releases/0.54.0/core/tree/.claude/graph.md +75 -0
  29. package/releases/0.54.0/core/tree/.claude/patterns.md +251 -0
  30. package/releases/0.54.0/core/tree/.claude/pills/README.md +150 -0
  31. package/releases/0.54.0/core/tree/.claude/pipeline.md +101 -0
  32. package/releases/0.54.0/core/tree/.claude/retrieval.md +103 -0
  33. package/releases/0.54.0/core/tree/.claude/router.md +202 -0
  34. package/releases/0.54.0/core/tree/.claude/templates/integration.md +48 -0
  35. package/releases/0.54.0/core/tree/CLAUDE.md +164 -0
  36. package/releases/0.54.0/core/tree/scripts/cost-watch.mjs +25 -0
  37. package/releases/0.54.0/core/tree/scripts/edit-guard.mjs +24 -0
  38. package/releases/0.54.0/core/tree/scripts/harness-check.mjs +71 -0
  39. package/releases/0.54.0/core/tree/scripts/loop-gate.mjs +19 -0
  40. package/releases/0.54.0/core/vocabulary.json +13 -0
  41. package/releases/0.54.0/surfaces/blockchain/tree/.claude/agents/architect.md +5 -0
  42. package/releases/0.54.0/surfaces/blockchain/tree/.claude/agents/devops.md +5 -0
  43. package/releases/0.54.0/surfaces/blockchain/tree/.claude/agents/reviewer.md +5 -0
  44. package/releases/0.54.0/surfaces/blockchain/tree/.claude/agents/solidity-auditor.md +18 -0
  45. package/releases/0.54.0/surfaces/blockchain/tree/.claude/agents/solidity-dev.md +16 -0
  46. package/releases/0.54.0/surfaces/blockchain/tree/.claude/agents-overview.md +6 -0
  47. package/releases/0.54.0/surfaces/blockchain/tree/.claude/graph.md +11 -0
  48. package/releases/0.54.0/surfaces/blockchain/tree/.claude/router.md +6 -0
  49. package/releases/0.54.0/surfaces/blockchain/tree/CLAUDE.md +12 -0
  50. package/releases/0.54.0/surfaces/d1/tree/.claude/agents/dba.md +15 -0
  51. package/releases/0.54.0/surfaces/d1/tree/.claude/agents/devops.md +2 -0
  52. package/releases/0.54.0/surfaces/d1/tree/.claude/agents/implementer.md +2 -0
  53. package/releases/0.54.0/surfaces/d1/tree/.claude/patterns.md +8 -0
  54. package/releases/0.54.0/surfaces/d1/tree/CLAUDE.md +2 -0
  55. package/releases/0.54.0/surfaces/db/tree/.claude/agents/architect.md +5 -0
  56. package/releases/0.54.0/surfaces/db/tree/.claude/agents/dba.md +54 -0
  57. package/releases/0.54.0/surfaces/db/tree/.claude/agents/devops.md +5 -0
  58. package/releases/0.54.0/surfaces/db/tree/.claude/agents/implementer.md +2 -0
  59. package/releases/0.54.0/surfaces/db/tree/.claude/agents/integration-tester.md +10 -0
  60. package/releases/0.54.0/surfaces/db/tree/.claude/agents/planner.md +2 -0
  61. package/releases/0.54.0/surfaces/db/tree/.claude/agents/reviewer.md +22 -0
  62. package/releases/0.54.0/surfaces/db/tree/.claude/agents/secops.md +2 -0
  63. package/releases/0.54.0/surfaces/db/tree/.claude/agents-overview.md +5 -0
  64. package/releases/0.54.0/surfaces/db/tree/.claude/graph.md +8 -0
  65. package/releases/0.54.0/surfaces/db/tree/.claude/patterns.md +22 -0
  66. package/releases/0.54.0/surfaces/db/tree/.claude/pipeline.md +13 -0
  67. package/releases/0.54.0/surfaces/db/tree/.claude/retrieval.md +5 -0
  68. package/releases/0.54.0/surfaces/db/tree/.claude/router.md +4 -0
  69. package/releases/0.54.0/surfaces/db/tree/CLAUDE.md +17 -0
  70. package/releases/0.54.0/surfaces/drizzle/tree/.claude/agents/dba.md +9 -0
  71. package/releases/0.54.0/surfaces/drizzle/tree/.claude/agents/devops.md +5 -0
  72. package/releases/0.54.0/surfaces/drizzle/tree/.claude/agents/implementer.md +2 -0
  73. package/releases/0.54.0/surfaces/drizzle/tree/.claude/patterns.md +7 -0
  74. package/releases/0.54.0/surfaces/edge-cf/tree/.claude/agents/architect.md +14 -0
  75. package/releases/0.54.0/surfaces/edge-cf/tree/.claude/agents/dba.md +2 -0
  76. package/releases/0.54.0/surfaces/edge-cf/tree/.claude/agents/devops.md +29 -0
  77. package/releases/0.54.0/surfaces/edge-cf/tree/.claude/agents/implementer.md +14 -0
  78. package/releases/0.54.0/surfaces/edge-cf/tree/.claude/agents/integration-tester.md +11 -0
  79. package/releases/0.54.0/surfaces/edge-cf/tree/.claude/agents/qa.md +3 -0
  80. package/releases/0.54.0/surfaces/edge-cf/tree/.claude/agents/reviewer.md +8 -0
  81. package/releases/0.54.0/surfaces/edge-cf/tree/.claude/agents/secops.md +8 -0
  82. package/releases/0.54.0/surfaces/edge-cf/tree/.claude/patterns.md +17 -0
  83. package/releases/0.54.0/surfaces/edge-cf/tree/.claude/retrieval.md +8 -0
  84. package/releases/0.54.0/surfaces/edge-cf/tree/CLAUDE.md +27 -0
  85. package/releases/0.54.0/surfaces/frontend/tree/.claude/agents/architect.md +20 -0
  86. package/releases/0.54.0/surfaces/frontend/tree/.claude/agents/devops.md +28 -0
  87. package/releases/0.54.0/surfaces/frontend/tree/.claude/agents/implementer.md +25 -0
  88. package/releases/0.54.0/surfaces/frontend/tree/.claude/agents/qa.md +17 -0
  89. package/releases/0.54.0/surfaces/frontend/tree/.claude/agents/reviewer.md +56 -0
  90. package/releases/0.54.0/surfaces/frontend/tree/.claude/patterns.md +8 -0
  91. package/releases/0.54.0/surfaces/frontend/tree/.claude/retrieval.md +2 -0
  92. package/releases/0.54.0/surfaces/frontend/tree/.claude/router.md +14 -0
  93. package/releases/0.54.0/surfaces/frontend/tree/CLAUDE.md +5 -0
  94. package/releases/0.54.0/surfaces/integrations/tree/.claude/agents/architect.md +16 -0
  95. package/releases/0.54.0/surfaces/integrations/tree/.claude/agents/implementer.md +12 -0
  96. package/releases/0.54.0/surfaces/integrations/tree/.claude/agents/integration-tester.md +20 -0
  97. package/releases/0.54.0/surfaces/integrations/tree/.claude/agents/planner.md +2 -0
  98. package/releases/0.54.0/surfaces/integrations/tree/.claude/agents/reviewer.md +21 -0
  99. package/releases/0.54.0/surfaces/integrations/tree/.claude/agents/secops.md +2 -0
  100. package/releases/0.54.0/surfaces/integrations/tree/.claude/agents-overview.md +8 -0
  101. package/releases/0.54.0/surfaces/integrations/tree/.claude/graph.md +10 -0
  102. package/releases/0.54.0/surfaces/integrations/tree/.claude/patterns.md +38 -0
  103. package/releases/0.54.0/surfaces/integrations/tree/.claude/pipeline.md +16 -0
  104. package/releases/0.54.0/surfaces/integrations/tree/.claude/retrieval.md +16 -0
  105. package/releases/0.54.0/surfaces/integrations/tree/.claude/router.md +6 -0
  106. package/releases/0.54.0/surfaces/integrations/tree/CLAUDE.md +17 -0
  107. package/releases/0.54.0/surfaces/money/tree/.claude/agents/architect.md +12 -0
  108. package/releases/0.54.0/surfaces/money/tree/.claude/agents/dba.md +14 -0
  109. package/releases/0.54.0/surfaces/money/tree/.claude/agents/implementer.md +11 -0
  110. package/releases/0.54.0/surfaces/money/tree/.claude/agents/integration-tester.md +3 -0
  111. package/releases/0.54.0/surfaces/money/tree/.claude/agents/reviewer.md +23 -0
  112. package/releases/0.54.0/surfaces/money/tree/.claude/agents/secops.md +5 -0
  113. package/releases/0.54.0/surfaces/money/tree/.claude/agents/solidity-auditor.md +4 -0
  114. package/releases/0.54.0/surfaces/money/tree/.claude/agents/solidity-dev.md +4 -0
  115. package/releases/0.54.0/surfaces/money/tree/.claude/graph.md +2 -0
  116. package/releases/0.54.0/surfaces/money/tree/.claude/patterns.md +49 -0
  117. package/releases/0.54.0/surfaces/money/tree/.claude/pipeline.md +2 -0
  118. package/releases/0.54.0/surfaces/money/tree/.claude/retrieval.md +2 -0
  119. package/releases/0.54.0/surfaces/money/tree/CLAUDE.md +11 -0
  120. package/releases/0.54.0/surfaces/pii/tree/.claude/agents/dba.md +2 -0
  121. package/releases/0.54.0/surfaces/pii/tree/.claude/agents/devops.md +8 -0
  122. package/releases/0.54.0/surfaces/pii/tree/.claude/agents/reviewer.md +8 -0
  123. package/releases/0.54.0/surfaces/pii/tree/.claude/agents/secops.md +2 -0
  124. package/releases/0.54.0/surfaces/pii/tree/.claude/agents/solidity-auditor.md +5 -0
  125. package/releases/0.54.0/surfaces/pii/tree/CLAUDE.md +5 -0
  126. package/releases/0.54.0/surfaces/prisma/tree/.claude/agents/architect.md +2 -0
  127. package/releases/0.54.0/surfaces/prisma/tree/.claude/agents/dba.md +42 -0
  128. package/releases/0.54.0/surfaces/prisma/tree/.claude/agents/devops.md +11 -0
  129. package/releases/0.54.0/surfaces/prisma/tree/.claude/agents/implementer.md +2 -0
  130. package/releases/0.54.0/surfaces/prisma/tree/.claude/agents/integration-tester.md +2 -0
  131. package/releases/0.54.0/surfaces/prisma/tree/.claude/agents/reviewer.md +2 -0
  132. package/releases/0.54.0/surfaces/prisma/tree/.claude/patterns.md +15 -0
  133. package/releases/0.54.0/surfaces/prisma/tree/CLAUDE.md +5 -0
  134. package/releases/0.55.0/core/GAPS.md +125 -0
  135. package/releases/0.55.0/core/answered.json +68 -0
  136. package/releases/0.55.0/core/defaults/tree/.claude/agents/architect.md +1 -0
  137. package/releases/0.55.0/core/defaults/tree/.claude/agents/dba.md +3 -0
  138. package/releases/0.55.0/core/defaults/tree/.claude/agents/devops.md +1 -0
  139. package/releases/0.55.0/core/defaults/tree/.claude/agents/implementer.md +1 -0
  140. package/releases/0.55.0/core/defaults/tree/.claude/agents/integration-tester.md +3 -0
  141. package/releases/0.55.0/core/defaults/tree/.claude/agents/qa.md +7 -0
  142. package/releases/0.55.0/core/defaults/tree/.claude/agents/reviewer.md +3 -0
  143. package/releases/0.55.0/core/defaults/tree/.claude/agents/secops.md +3 -0
  144. package/releases/0.55.0/core/defaults/tree/.claude/agents/solidity-auditor.md +3 -0
  145. package/releases/0.55.0/core/defaults/tree/.claude/agents/solidity-dev.md +3 -0
  146. package/releases/0.55.0/core/tree/.claude/agents/architect.md +130 -0
  147. package/releases/0.55.0/core/tree/.claude/agents/dba.md +119 -0
  148. package/releases/0.55.0/core/tree/.claude/agents/design-reviewer.md +75 -0
  149. package/releases/0.55.0/core/tree/.claude/agents/devops.md +118 -0
  150. package/releases/0.55.0/core/tree/.claude/agents/implementer.md +163 -0
  151. package/releases/0.55.0/core/tree/.claude/agents/integration-tester.md +170 -0
  152. package/releases/0.55.0/core/tree/.claude/agents/planner.md +132 -0
  153. package/releases/0.55.0/core/tree/.claude/agents/qa.md +150 -0
  154. package/releases/0.55.0/core/tree/.claude/agents/reviewer.md +187 -0
  155. package/releases/0.55.0/core/tree/.claude/agents/secops.md +120 -0
  156. package/releases/0.55.0/core/tree/.claude/agents/solidity-auditor.md +126 -0
  157. package/releases/0.55.0/core/tree/.claude/agents/solidity-dev.md +123 -0
  158. package/releases/0.55.0/core/tree/.claude/agents-overview.md +65 -0
  159. package/releases/0.55.0/core/tree/.claude/frontend.md +10 -0
  160. package/releases/0.55.0/core/tree/.claude/graph.md +79 -0
  161. package/releases/0.55.0/core/tree/.claude/patterns.md +251 -0
  162. package/releases/0.55.0/core/tree/.claude/pills/README.md +150 -0
  163. package/releases/0.55.0/core/tree/.claude/pipeline.md +101 -0
  164. package/releases/0.55.0/core/tree/.claude/retrieval.md +103 -0
  165. package/releases/0.55.0/core/tree/.claude/router.md +205 -0
  166. package/releases/0.55.0/core/tree/.claude/templates/integration.md +48 -0
  167. package/releases/0.55.0/core/tree/CLAUDE.md +166 -0
  168. package/releases/0.55.0/core/tree/scripts/cost-watch.mjs +25 -0
  169. package/releases/0.55.0/core/tree/scripts/edit-guard.mjs +24 -0
  170. package/releases/0.55.0/core/tree/scripts/harness-check.mjs +71 -0
  171. package/releases/0.55.0/core/tree/scripts/loop-gate.mjs +19 -0
  172. package/releases/0.55.0/core/vocabulary.json +14 -0
  173. package/releases/0.55.0/surfaces/blockchain/tree/.claude/agents/architect.md +5 -0
  174. package/releases/0.55.0/surfaces/blockchain/tree/.claude/agents/devops.md +5 -0
  175. package/releases/0.55.0/surfaces/blockchain/tree/.claude/agents/reviewer.md +5 -0
  176. package/releases/0.55.0/surfaces/blockchain/tree/.claude/agents/solidity-auditor.md +18 -0
  177. package/releases/0.55.0/surfaces/blockchain/tree/.claude/agents/solidity-dev.md +16 -0
  178. package/releases/0.55.0/surfaces/blockchain/tree/.claude/agents-overview.md +6 -0
  179. package/releases/0.55.0/surfaces/blockchain/tree/.claude/graph.md +11 -0
  180. package/releases/0.55.0/surfaces/blockchain/tree/.claude/router.md +6 -0
  181. package/releases/0.55.0/surfaces/blockchain/tree/CLAUDE.md +12 -0
  182. package/releases/0.55.0/surfaces/d1/tree/.claude/agents/dba.md +15 -0
  183. package/releases/0.55.0/surfaces/d1/tree/.claude/agents/devops.md +2 -0
  184. package/releases/0.55.0/surfaces/d1/tree/.claude/agents/implementer.md +2 -0
  185. package/releases/0.55.0/surfaces/d1/tree/.claude/patterns.md +8 -0
  186. package/releases/0.55.0/surfaces/d1/tree/CLAUDE.md +2 -0
  187. package/releases/0.55.0/surfaces/db/tree/.claude/agents/architect.md +5 -0
  188. package/releases/0.55.0/surfaces/db/tree/.claude/agents/dba.md +54 -0
  189. package/releases/0.55.0/surfaces/db/tree/.claude/agents/devops.md +5 -0
  190. package/releases/0.55.0/surfaces/db/tree/.claude/agents/implementer.md +2 -0
  191. package/releases/0.55.0/surfaces/db/tree/.claude/agents/integration-tester.md +10 -0
  192. package/releases/0.55.0/surfaces/db/tree/.claude/agents/planner.md +2 -0
  193. package/releases/0.55.0/surfaces/db/tree/.claude/agents/reviewer.md +22 -0
  194. package/releases/0.55.0/surfaces/db/tree/.claude/agents/secops.md +2 -0
  195. package/releases/0.55.0/surfaces/db/tree/.claude/agents-overview.md +5 -0
  196. package/releases/0.55.0/surfaces/db/tree/.claude/graph.md +8 -0
  197. package/releases/0.55.0/surfaces/db/tree/.claude/patterns.md +22 -0
  198. package/releases/0.55.0/surfaces/db/tree/.claude/pipeline.md +13 -0
  199. package/releases/0.55.0/surfaces/db/tree/.claude/retrieval.md +5 -0
  200. package/releases/0.55.0/surfaces/db/tree/.claude/router.md +4 -0
  201. package/releases/0.55.0/surfaces/db/tree/CLAUDE.md +17 -0
  202. package/releases/0.55.0/surfaces/drizzle/tree/.claude/agents/dba.md +9 -0
  203. package/releases/0.55.0/surfaces/drizzle/tree/.claude/agents/devops.md +5 -0
  204. package/releases/0.55.0/surfaces/drizzle/tree/.claude/agents/implementer.md +2 -0
  205. package/releases/0.55.0/surfaces/drizzle/tree/.claude/patterns.md +7 -0
  206. package/releases/0.55.0/surfaces/edge-cf/tree/.claude/agents/architect.md +14 -0
  207. package/releases/0.55.0/surfaces/edge-cf/tree/.claude/agents/dba.md +2 -0
  208. package/releases/0.55.0/surfaces/edge-cf/tree/.claude/agents/devops.md +29 -0
  209. package/releases/0.55.0/surfaces/edge-cf/tree/.claude/agents/implementer.md +14 -0
  210. package/releases/0.55.0/surfaces/edge-cf/tree/.claude/agents/integration-tester.md +11 -0
  211. package/releases/0.55.0/surfaces/edge-cf/tree/.claude/agents/qa.md +3 -0
  212. package/releases/0.55.0/surfaces/edge-cf/tree/.claude/agents/reviewer.md +8 -0
  213. package/releases/0.55.0/surfaces/edge-cf/tree/.claude/agents/secops.md +8 -0
  214. package/releases/0.55.0/surfaces/edge-cf/tree/.claude/patterns.md +17 -0
  215. package/releases/0.55.0/surfaces/edge-cf/tree/.claude/retrieval.md +8 -0
  216. package/releases/0.55.0/surfaces/edge-cf/tree/CLAUDE.md +27 -0
  217. package/releases/0.55.0/surfaces/frontend/tree/.claude/agents/architect.md +20 -0
  218. package/releases/0.55.0/surfaces/frontend/tree/.claude/agents/devops.md +28 -0
  219. package/releases/0.55.0/surfaces/frontend/tree/.claude/agents/implementer.md +25 -0
  220. package/releases/0.55.0/surfaces/frontend/tree/.claude/agents/qa.md +17 -0
  221. package/releases/0.55.0/surfaces/frontend/tree/.claude/agents/reviewer.md +56 -0
  222. package/releases/0.55.0/surfaces/frontend/tree/.claude/patterns.md +8 -0
  223. package/releases/0.55.0/surfaces/frontend/tree/.claude/retrieval.md +2 -0
  224. package/releases/0.55.0/surfaces/frontend/tree/.claude/router.md +14 -0
  225. package/releases/0.55.0/surfaces/frontend/tree/CLAUDE.md +5 -0
  226. package/releases/0.55.0/surfaces/integrations/tree/.claude/agents/architect.md +16 -0
  227. package/releases/0.55.0/surfaces/integrations/tree/.claude/agents/implementer.md +12 -0
  228. package/releases/0.55.0/surfaces/integrations/tree/.claude/agents/integration-tester.md +20 -0
  229. package/releases/0.55.0/surfaces/integrations/tree/.claude/agents/planner.md +2 -0
  230. package/releases/0.55.0/surfaces/integrations/tree/.claude/agents/reviewer.md +21 -0
  231. package/releases/0.55.0/surfaces/integrations/tree/.claude/agents/secops.md +2 -0
  232. package/releases/0.55.0/surfaces/integrations/tree/.claude/agents-overview.md +8 -0
  233. package/releases/0.55.0/surfaces/integrations/tree/.claude/graph.md +10 -0
  234. package/releases/0.55.0/surfaces/integrations/tree/.claude/patterns.md +38 -0
  235. package/releases/0.55.0/surfaces/integrations/tree/.claude/pipeline.md +16 -0
  236. package/releases/0.55.0/surfaces/integrations/tree/.claude/retrieval.md +16 -0
  237. package/releases/0.55.0/surfaces/integrations/tree/.claude/router.md +6 -0
  238. package/releases/0.55.0/surfaces/integrations/tree/CLAUDE.md +17 -0
  239. package/releases/0.55.0/surfaces/money/tree/.claude/agents/architect.md +12 -0
  240. package/releases/0.55.0/surfaces/money/tree/.claude/agents/dba.md +14 -0
  241. package/releases/0.55.0/surfaces/money/tree/.claude/agents/implementer.md +11 -0
  242. package/releases/0.55.0/surfaces/money/tree/.claude/agents/integration-tester.md +3 -0
  243. package/releases/0.55.0/surfaces/money/tree/.claude/agents/reviewer.md +23 -0
  244. package/releases/0.55.0/surfaces/money/tree/.claude/agents/secops.md +5 -0
  245. package/releases/0.55.0/surfaces/money/tree/.claude/agents/solidity-auditor.md +4 -0
  246. package/releases/0.55.0/surfaces/money/tree/.claude/agents/solidity-dev.md +4 -0
  247. package/releases/0.55.0/surfaces/money/tree/.claude/graph.md +2 -0
  248. package/releases/0.55.0/surfaces/money/tree/.claude/patterns.md +49 -0
  249. package/releases/0.55.0/surfaces/money/tree/.claude/pipeline.md +2 -0
  250. package/releases/0.55.0/surfaces/money/tree/.claude/retrieval.md +2 -0
  251. package/releases/0.55.0/surfaces/money/tree/CLAUDE.md +11 -0
  252. package/releases/0.55.0/surfaces/pii/tree/.claude/agents/dba.md +2 -0
  253. package/releases/0.55.0/surfaces/pii/tree/.claude/agents/devops.md +8 -0
  254. package/releases/0.55.0/surfaces/pii/tree/.claude/agents/reviewer.md +8 -0
  255. package/releases/0.55.0/surfaces/pii/tree/.claude/agents/secops.md +2 -0
  256. package/releases/0.55.0/surfaces/pii/tree/.claude/agents/solidity-auditor.md +5 -0
  257. package/releases/0.55.0/surfaces/pii/tree/CLAUDE.md +5 -0
  258. package/releases/0.55.0/surfaces/prisma/tree/.claude/agents/architect.md +2 -0
  259. package/releases/0.55.0/surfaces/prisma/tree/.claude/agents/dba.md +42 -0
  260. package/releases/0.55.0/surfaces/prisma/tree/.claude/agents/devops.md +11 -0
  261. package/releases/0.55.0/surfaces/prisma/tree/.claude/agents/implementer.md +2 -0
  262. package/releases/0.55.0/surfaces/prisma/tree/.claude/agents/integration-tester.md +2 -0
  263. package/releases/0.55.0/surfaces/prisma/tree/.claude/agents/reviewer.md +2 -0
  264. package/releases/0.55.0/surfaces/prisma/tree/.claude/patterns.md +15 -0
  265. package/releases/0.55.0/surfaces/prisma/tree/CLAUDE.md +5 -0
  266. package/src/commands/check.mjs +107 -6
  267. package/src/commands/learn.mjs +44 -17
  268. package/src/commands/pills.mjs +6 -2
  269. package/src/commands/stats.mjs +28 -9
  270. package/src/dashboard.html +3 -2
  271. package/src/office.html +2 -2
  272. package/src/transcripts.mjs +15 -2
@@ -459,7 +459,7 @@ const CYCLE_ENDS = { qa: 'PASS', devops: 'DEPLOYED', secops: 'SECURE' };
459
459
  * was captured under (`core`) carries it: over every round, "0 of 16 loop-backs named their issues" read
460
460
  * reports written before the rule existed as breaking it. Releases are never rewritten, so neither is this.
461
461
  */
462
- const RULE_SINCE = { issues: '0.22.0', stepFiles: '0.28.8' };
462
+ const RULE_SINCE = { issues: '0.22.0', stepFiles: '0.28.8', stepLines: '0.55.0' };
463
463
 
464
464
  /**
465
465
  * Whether a round ran under a release that carries a rule. One captured before rounds recorded their pin
@@ -558,8 +558,8 @@ export function cyclesOf(records) {
558
558
  *
559
559
  * @param {object[]} records - The runs in the window.
560
560
  */
561
- function proportionReport(records, stepLimit = () => null) {
562
- const d = proportionData(records, stepLimit);
561
+ function proportionReport(records, stepLimit = () => null, lineLimit = () => null) {
562
+ const d = proportionData(records, stepLimit, lineLimit);
563
563
  if (!d) return;
564
564
  console.log(
565
565
  heading(
@@ -584,6 +584,14 @@ function proportionReport(records, stepLimit = () => null) {
584
584
  ),
585
585
  );
586
586
  }
587
+ if (d.overLines) {
588
+ console.log(
589
+ note(
590
+ `${d.overLines.count} implementer round(s) wrote more lines than one step may (${d.overLines.limit}); the largest wrote ${d.overLines.largest}. The architect forecasts a step's lines and splits it past them.`,
591
+ 'warn',
592
+ ),
593
+ );
594
+ }
587
595
  }
588
596
 
589
597
  /**
@@ -593,8 +601,9 @@ function proportionReport(records, stepLimit = () => null) {
593
601
  *
594
602
  * @param {object[]} records - The rounds in the window.
595
603
  * @param {(project: string) => number|null} [stepLimit] - The most files one implementer run may write, by project.
604
+ * @param {(project: string) => number|null} [lineLimit] - The most lines, by project.
596
605
  */
597
- export function proportionData(records, stepLimit = () => null) {
606
+ export function proportionData(records, stepLimit = () => null, lineLimit = () => null) {
598
607
  const measured = records.filter((r) => WRITERS.has(r.role) && typeof r.files_touched === 'number');
599
608
  if (measured.length === 0) return null;
600
609
  const cycles = cyclesOf(records);
@@ -629,6 +638,14 @@ export function proportionData(records, stepLimit = () => null) {
629
638
  return limit !== null && r.files_touched > limit;
630
639
  });
631
640
  const largest = over.length ? over.reduce((a, b) => (b.files_touched > a.files_touched ? b : a)) : null;
641
+ // And its lines: a step forecast at about 640 lines came to 2,546 in three files, under the file limit, and every
642
+ // gate read each of its rounds.
643
+ const longer = records.filter((r) => {
644
+ if (r.role !== 'implementer' || typeof r.lines_written !== 'number' || !ranUnder(r, 'stepLines')) return false;
645
+ const limit = lineLimit(r.project);
646
+ return limit !== null && r.lines_written > limit;
647
+ });
648
+ const longest = longer.length ? longer.reduce((a, b) => (b.lines_written > a.lines_written ? b : a)) : null;
632
649
  return {
633
650
  rows: rows.map(({ label, cycles: n, designed }) => ({ label, cycles: n, designed })),
634
651
  built,
@@ -637,18 +654,20 @@ export function proportionData(records, stepLimit = () => null) {
637
654
  over: largest
638
655
  ? { count: over.length, limit: stepLimit(largest.project), largest: largest.files_touched, readM: typeof largest.tokens?.read === 'number' ? Math.round(largest.tokens.read / 1e6) : null }
639
656
  : null,
657
+ overLines: longest ? { count: longer.length, limit: lineLimit(longest.project), largest: longest.lines_written } : null,
640
658
  };
641
659
  }
642
660
 
643
661
  /**
644
662
  * The most files one implementer run may write in each measured project, as its pinned release states it
645
663
  * (`{{STEP_FILES}}`, which the project may declare to change), or null where the release has no such
646
- * limit or the project cannot be found.
664
+ * limit or the project cannot be found. With `STEP_LINES`, the most lines.
647
665
  *
648
666
  * @param {{root: string}} ctx - CLI context, for the releases.
667
+ * @param {'STEP_FILES'|'STEP_LINES'} [key] - Which limit.
649
668
  * @returns {(project: string) => number|null}
650
669
  */
651
- function stepLimitOf(ctx) {
670
+ function stepLimitOf(ctx, key = 'STEP_FILES') {
652
671
  const known = new Map();
653
672
  return (project) => {
654
673
  if (!known.has(project)) {
@@ -657,7 +676,7 @@ function stepLimitOf(ctx) {
657
676
  const found = decodeProjectDir(project);
658
677
  const profile = found ? JSON.parse(readFileSync(join(found, HARNESS, 'profile.json'), 'utf8')) : null;
659
678
  const layers = profile ? layerRootFor(ctx.root, profile.core) : null;
660
- const value = profile?.vocabulary?.STEP_FILES ?? (layers?.dir ? defaultVocabulary(layers.dir).STEP_FILES : undefined);
679
+ const value = profile?.vocabulary?.[key] ?? (layers?.dir ? defaultVocabulary(layers.dir)[key] : undefined);
661
680
  const n = Number(value);
662
681
  limit = value !== undefined && value !== null && value !== '' && Number.isFinite(n) && n > 0 ? n : null;
663
682
  } catch {
@@ -735,7 +754,7 @@ export function statsData(records, ctx) {
735
754
  stages: stageData(records),
736
755
  cost: costData(ran),
737
756
  context: contextData(ran),
738
- proportion: proportionData(ran, stepLimitOf(ctx)),
757
+ proportion: proportionData(ran, stepLimitOf(ctx), stepLimitOf(ctx, 'STEP_LINES')),
739
758
  };
740
759
  }
741
760
 
@@ -939,7 +958,7 @@ export async function stats(argv, ctx) {
939
958
  costReport(records.filter((r) => r.status !== 'denied'));
940
959
  contextReport(records.filter((r) => r.status !== 'denied'));
941
960
  modelReport(records.filter((r) => r.status !== 'denied'));
942
- proportionReport(records.filter((r) => r.status !== 'denied'), stepLimitOf(ctx));
961
+ proportionReport(records.filter((r) => r.status !== 'denied'), stepLimitOf(ctx), stepLimitOf(ctx, 'STEP_LINES'));
943
962
 
944
963
  // What the pipeline learned, against what it had to learn from. A loop-back is the raw
945
964
  // material and a pill is the product, so the two numbers belong on the same screen: the
@@ -308,7 +308,7 @@ const RENDER = {
308
308
  card('graduate · made rules?', `${d.open.length} open`, `${d.ready.length} at ${d.at}+ · ${d.madeHere} made a rule here${d.relapses.length ? ` · ${d.relapses.length} watched` : ''}`),
309
309
  card('loops', d.gated ? (d.activity ? String(d.activity.rounds) : '—') : 'no gate', d.activity ? `rounds on capped edges · ${d.activity.held} sent to you` : d.gated ? 'no ledger yet' : 'caps are instructions'),
310
310
  ),
311
- d.late.length ? [el('h3', {}, 'capture · sent back with nothing written down'), d.late.map((o) => el('div', { class: 'note' }, el('span', { class: 'role' }, o.role), ` ${o.count} loop-back(s) ${o.since ? `since its newest lesson (${o.since})` : 'and no lesson at all'}`, el('ul', { class: 'list soft' }, o.recent.map((r) => el('li', {}, `${when(r.ts)} · ${r.desc ?? '(no description)'}`)))))] : null,
311
+ d.late.length ? [el('h3', {}, 'capture · sent back with nothing written down'), d.late.map((o) => el('div', { class: 'note' }, el('span', { class: 'role' }, o.role), ` sent back ${o.count} time(s) ${o.since ? `since its newest lesson (${o.since})` : 'and no lesson at all'}`, el('ul', { class: 'list soft' }, o.recent.map((r) => el('li', {}, `${when(r.ts)} · ${r.desc ?? '(no description)'}`)))))] : null,
312
312
  el('h3', {}, 'verify · is each stage sent back less since its lessons?'),
313
313
  el('p', { class: 'note soft', style: 'margin-bottom:12px' }, `For each lesson, the share of its stage's rounds that a later stage sent back, in the ${d.window} days before it was written and the ${d.window} after — lower is better. A change is called only when it is larger than chance moves a share at that many rounds. The other stages, over the same days, say whether everything moved at once: then it was the work that changed, not the lesson.`),
314
314
  groups.length ? groups.map(comparison) : el('p', { class: 'note faint' }, 'No lesson could be measured yet.'),
@@ -358,7 +358,8 @@ const RENDER = {
358
358
  table(['stage', 'rounds', 'n', 'turns', 'calls/turn', 'starts at', 'peak', 'prompt'], d.context.rows.map((r, i, all) => [i > 0 && all[i - 1].role === r.role ? '' : el('span', { class: 'role' }, r.role), el('span', { class: 'faint' }, r.label), String(r.n), String(r.turns), r.callsPerTurn.toFixed(2), kTokens(r.start), kTokens(r.peak), r.prompt === null ? '—' : r.prompt.toLocaleString('en-US')]), [2, 3, 4, 5, 6, 7])] : null,
359
359
  d.proportion ? [el('h3', {}, 'proportion · the size of a change against its chain'),
360
360
  table(['largest write', 'cycles', 'with a planner or architect', ''], d.proportion.rows.map((r) => [r.label, String(r.cycles), r.cycles ? `${r.designed} (${pct(r.designed, r.cycles)})` : '—', bar([[r.cycles ? r.designed / r.cycles : 0, 'var(--pink)']])]), [1, 2]),
361
- d.proportion.over ? el('p', { class: 'note warn' }, `${d.proportion.over.count} implementer round(s) wrote more files than one step may (${d.proportion.over.limit}); the largest wrote ${d.proportion.over.largest}.`) : null] : null,
361
+ d.proportion.over ? el('p', { class: 'note warn' }, `${d.proportion.over.count} implementer round(s) wrote more files than one step may (${d.proportion.over.limit}); the largest wrote ${d.proportion.over.largest}.`) : null,
362
+ d.proportion.overLines ? el('p', { class: 'note warn' }, `${d.proportion.overLines.count} implementer round(s) wrote more lines than one step may (${d.proportion.overLines.limit}); the largest wrote ${d.proportion.overLines.largest}.`) : null] : null,
362
363
  );
363
364
  },
364
365
  };
package/src/office.html CHANGED
@@ -59,7 +59,7 @@
59
59
  * drawn here, in pixels, on a small canvas scaled up; nothing is fetched from anywhere else. The view starts close
60
60
  * enough to read and follows the work around the floor; dragging, the wheel and the buttons take it over.
61
61
  */
62
- const ROOM = /*NINA_ROOM*/null || { project: 'demo', stages: ['planner', 'architect', 'implementer', 'reviewer', 'qa', 'dba', 'integration-tester', 'devops', 'secops'], many: ['architect', 'implementer', 'reviewer'], owner: 'you', replay: false };
62
+ const ROOM = /*NINA_ROOM*/null || { project: 'demo', stages: ['planner', 'architect', 'design-reviewer', 'implementer', 'reviewer', 'qa', 'dba', 'integration-tester', 'devops', 'secops'], many: ['architect', 'implementer', 'reviewer'], owner: 'you', replay: false };
63
63
 
64
64
  // ─── palette and sprites ──────────────────────────────────────────────────────────────────────
65
65
  const C = {
@@ -163,7 +163,7 @@ const GARDEN = 52;
163
163
 
164
164
  /** The rooms, by phase, in the order the work moves through them. A stage not named here works in build. */
165
165
  const PHASES = [
166
- { key: 'design', name: 'design', side: 'left', roles: ['planner', 'architect'] },
166
+ { key: 'design', name: 'design', side: 'left', roles: ['planner', 'architect', 'design-reviewer'] },
167
167
  { key: 'build', name: 'build', side: 'left', roles: ['implementer', 'solidity-dev'] },
168
168
  { key: 'review', name: 'review & gates', side: 'right', roles: ['reviewer', 'dba', 'integration-tester', 'solidity-auditor'] },
169
169
  { key: 'lab', name: 'test lab', side: 'right', roles: ['qa'] },
@@ -75,6 +75,7 @@ const VERDICTS = [
75
75
  export const ROLE_TOKENS = {
76
76
  planner: ['PLAN-READY', 'BLOCKED'],
77
77
  architect: ['SPEC-READY', 'BLOCKED'],
78
+ 'design-reviewer': ['APPROVED', 'REJECTED'],
78
79
  implementer: ['DIFF-READY', 'BLOCKED'],
79
80
  'solidity-dev': ['DIFF-READY', 'BLOCKED'],
80
81
  reviewer: ['APPROVED', 'REJECTED'],
@@ -120,6 +121,9 @@ export function classifyVerdict(result, role) {
120
121
  /** The tools that write a file, and where each names it. */
121
122
  const WRITES = { Edit: 'file_path', Write: 'file_path', MultiEdit: 'file_path', NotebookEdit: 'notebook_path' };
122
123
 
124
+ /** How many lines a text written through an edit tool holds: none for an empty one, a last newline ending one. */
125
+ const linesIn = (text) => (typeof text === 'string' && text.length > 0 ? text.replace(/\n$/, '').split('\n').length : 0);
126
+
123
127
  /** The line under a declared verdict that names what the report sends back. */
124
128
  const ISSUES = /^\s*ISSUES:(.*)$/;
125
129
 
@@ -642,7 +646,7 @@ async function attachAgentDetail(projectDir, dispatches) {
642
646
  if (
643
647
  run.agent_read_bytes === size &&
644
648
  !('resumes' in run) &&
645
- [...records, ...later].every((r) => settled(r) && 'round' in r && 'lessons_read' in r && 'tokens' in r && 'files_touched' in r && 'effort' in r && 'turns' in r && 'prompt_chars' in r)
649
+ [...records, ...later].every((r) => settled(r) && 'round' in r && 'lessons_read' in r && 'tokens' in r && 'files_touched' in r && 'lines_written' in r && 'effort' in r && 'turns' in r && 'prompt_chars' in r)
646
650
  ) {
647
651
  continue;
648
652
  }
@@ -670,6 +674,11 @@ async function attachAgentDetail(projectDir, dispatches) {
670
674
  usage: new Map(),
671
675
  /** The files the round wrote through the edit tools. Only their number is kept. */
672
676
  written: new Set(),
677
+ /**
678
+ * The lines it wrote there, by file: a file's last whole write, and each edit's new text after it — what the
679
+ * run wrote, not its diff: an edit made twice counts twice, and a file a shell command changed not at all.
680
+ */
681
+ lines: new Map(),
673
682
  /** The tool calls the round made, by id: over its turns, how many calls each turn sent at once. */
674
683
  calls: new Set(),
675
684
  /** How long the prompt that opened the round was, in characters; never the prompt. */
@@ -708,7 +717,10 @@ async function attachAgentDetail(projectDir, dispatches) {
708
717
  try {
709
718
  for (const block of JSON.parse(line)?.message?.content ?? []) {
710
719
  const path = block?.type === 'tool_use' ? block.input?.[WRITES[block.name]] : null;
711
- if (typeof path === 'string') round.written.add(path);
720
+ if (typeof path !== 'string') continue;
721
+ round.written.add(path);
722
+ const added = { Edit: () => linesIn(block.input.new_string), MultiEdit: () => (Array.isArray(block.input.edits) ? block.input.edits : []).reduce((n, e) => n + linesIn(e?.new_string), 0), NotebookEdit: () => linesIn(block.input.new_source) }[block.name];
723
+ round.lines.set(path, block.name === 'Write' ? linesIn(block.input.content) : (round.lines.get(path) ?? 0) + (added?.() ?? 0));
712
724
  }
713
725
  } catch {
714
726
  // A torn line loses one edit, not the run's.
@@ -795,6 +807,7 @@ async function attachAgentDetail(projectDir, dispatches) {
795
807
  record.usage_model = spent.model;
796
808
  record.effort = spent.effort;
797
809
  record.files_touched = round.written.size;
810
+ record.lines_written = [...round.lines.values()].reduce((a, b) => a + b, 0);
798
811
  record.skills = [...round.skills];
799
812
  record.lessons_read = round.lessonsRead.size;
800
813
  record.lessons_listed = round.lessonsListed;