opennori 0.1.8 → 0.1.10

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 (396) hide show
  1. package/.opennori/protocol.md +335 -79
  2. package/README.md +1114 -67
  3. package/dashboard/assets/index-CdtzA7LJ.css +2 -0
  4. package/dashboard/assets/index-DQKOVUPr.js +17 -0
  5. package/dashboard/index.html +15 -0
  6. package/dist/bin/opennori.js +1 -1
  7. package/dist/bin/opennori.js.map +1 -1
  8. package/dist/src/acceptance.d.ts +29 -11
  9. package/dist/src/acceptance.d.ts.map +1 -1
  10. package/dist/src/acceptance.js +169 -282
  11. package/dist/src/acceptance.js.map +1 -1
  12. package/dist/src/agent-next.d.ts +12 -0
  13. package/dist/src/agent-next.d.ts.map +1 -0
  14. package/dist/src/agent-next.js +340 -0
  15. package/dist/src/agent-next.js.map +1 -0
  16. package/dist/src/architecture/agent-surface.d.ts.map +1 -1
  17. package/dist/src/architecture/agent-surface.js +34 -14
  18. package/dist/src/architecture/agent-surface.js.map +1 -1
  19. package/dist/src/architecture/apply.d.ts +20 -0
  20. package/dist/src/architecture/apply.d.ts.map +1 -0
  21. package/dist/src/architecture/apply.js +157 -0
  22. package/dist/src/architecture/apply.js.map +1 -0
  23. package/dist/src/architecture/baseline.d.ts.map +1 -1
  24. package/dist/src/architecture/baseline.js +92 -1
  25. package/dist/src/architecture/baseline.js.map +1 -1
  26. package/dist/src/architecture/profile.d.ts.map +1 -1
  27. package/dist/src/architecture/profile.js +232 -0
  28. package/dist/src/architecture/profile.js.map +1 -1
  29. package/dist/src/architecture/report.d.ts.map +1 -1
  30. package/dist/src/architecture/report.js +22 -1
  31. package/dist/src/architecture/report.js.map +1 -1
  32. package/dist/src/architecture/requirement.d.ts +13 -0
  33. package/dist/src/architecture/requirement.d.ts.map +1 -0
  34. package/dist/src/architecture/requirement.js +76 -0
  35. package/dist/src/architecture/requirement.js.map +1 -0
  36. package/dist/src/architecture/shared.d.ts +4 -0
  37. package/dist/src/architecture/shared.d.ts.map +1 -1
  38. package/dist/src/architecture/shared.js +12 -1
  39. package/dist/src/architecture/shared.js.map +1 -1
  40. package/dist/src/architecture/state.d.ts.map +1 -1
  41. package/dist/src/architecture/state.js +18 -1
  42. package/dist/src/architecture/state.js.map +1 -1
  43. package/dist/src/architecture.d.ts +3 -1
  44. package/dist/src/architecture.d.ts.map +1 -1
  45. package/dist/src/architecture.js +3 -1
  46. package/dist/src/architecture.js.map +1 -1
  47. package/dist/src/cli/bootstrap.d.ts.map +1 -1
  48. package/dist/src/cli/bootstrap.js +6 -3
  49. package/dist/src/cli/bootstrap.js.map +1 -1
  50. package/dist/src/cli/command-tree.d.ts +1 -0
  51. package/dist/src/cli/command-tree.d.ts.map +1 -1
  52. package/dist/src/cli/command-tree.js +118 -10
  53. package/dist/src/cli/command-tree.js.map +1 -1
  54. package/dist/src/cli/commands/acceptance/approval.d.ts +11 -2
  55. package/dist/src/cli/commands/acceptance/approval.d.ts.map +1 -1
  56. package/dist/src/cli/commands/acceptance/approval.js +58 -7
  57. package/dist/src/cli/commands/acceptance/approval.js.map +1 -1
  58. package/dist/src/cli/commands/acceptance/brainstorm.d.ts +18 -2
  59. package/dist/src/cli/commands/acceptance/brainstorm.d.ts.map +1 -1
  60. package/dist/src/cli/commands/acceptance/brainstorm.js +32 -8
  61. package/dist/src/cli/commands/acceptance/brainstorm.js.map +1 -1
  62. package/dist/src/cli/commands/acceptance/criterion.d.ts +74 -3
  63. package/dist/src/cli/commands/acceptance/criterion.d.ts.map +1 -1
  64. package/dist/src/cli/commands/acceptance/criterion.js +123 -13
  65. package/dist/src/cli/commands/acceptance/criterion.js.map +1 -1
  66. package/dist/src/cli/commands/acceptance/draft.d.ts +9 -12
  67. package/dist/src/cli/commands/acceptance/draft.d.ts.map +1 -1
  68. package/dist/src/cli/commands/acceptance/draft.js +54 -65
  69. package/dist/src/cli/commands/acceptance/draft.js.map +1 -1
  70. package/dist/src/cli/commands/acceptance/runtime-status.d.ts +31 -9
  71. package/dist/src/cli/commands/acceptance/runtime-status.d.ts.map +1 -1
  72. package/dist/src/cli/commands/acceptance/runtime-status.js +37 -20
  73. package/dist/src/cli/commands/acceptance/runtime-status.js.map +1 -1
  74. package/dist/src/cli/commands/acceptance.d.ts +1 -1
  75. package/dist/src/cli/commands/acceptance.d.ts.map +1 -1
  76. package/dist/src/cli/commands/acceptance.js +1 -1
  77. package/dist/src/cli/commands/acceptance.js.map +1 -1
  78. package/dist/src/cli/commands/activity.d.ts +138 -0
  79. package/dist/src/cli/commands/activity.d.ts.map +1 -0
  80. package/dist/src/cli/commands/activity.js +202 -0
  81. package/dist/src/cli/commands/activity.js.map +1 -0
  82. package/dist/src/cli/commands/architecture/apply.d.ts +52 -0
  83. package/dist/src/cli/commands/architecture/apply.d.ts.map +1 -0
  84. package/dist/src/cli/commands/architecture/apply.js +131 -0
  85. package/dist/src/cli/commands/architecture/apply.js.map +1 -0
  86. package/dist/src/cli/commands/architecture/baseline.d.ts.map +1 -1
  87. package/dist/src/cli/commands/architecture/baseline.js +37 -11
  88. package/dist/src/cli/commands/architecture/baseline.js.map +1 -1
  89. package/dist/src/cli/commands/architecture/build-vs-buy.d.ts.map +1 -1
  90. package/dist/src/cli/commands/architecture/build-vs-buy.js +8 -1
  91. package/dist/src/cli/commands/architecture/build-vs-buy.js.map +1 -1
  92. package/dist/src/cli/commands/architecture/profile.js +1 -1
  93. package/dist/src/cli/commands/architecture/profile.js.map +1 -1
  94. package/dist/src/cli/commands/architecture/requirement.d.ts +39 -0
  95. package/dist/src/cli/commands/architecture/requirement.d.ts.map +1 -0
  96. package/dist/src/cli/commands/architecture/requirement.js +103 -0
  97. package/dist/src/cli/commands/architecture/requirement.js.map +1 -0
  98. package/dist/src/cli/commands/architecture.d.ts +2 -0
  99. package/dist/src/cli/commands/architecture.d.ts.map +1 -1
  100. package/dist/src/cli/commands/architecture.js +2 -0
  101. package/dist/src/cli/commands/architecture.js.map +1 -1
  102. package/dist/src/cli/commands/changes.d.ts.map +1 -1
  103. package/dist/src/cli/commands/changes.js +17 -10
  104. package/dist/src/cli/commands/changes.js.map +1 -1
  105. package/dist/src/cli/commands/check.d.ts +7 -2
  106. package/dist/src/cli/commands/check.d.ts.map +1 -1
  107. package/dist/src/cli/commands/check.js +84 -29
  108. package/dist/src/cli/commands/check.js.map +1 -1
  109. package/dist/src/cli/commands/context.d.ts +20 -6
  110. package/dist/src/cli/commands/context.d.ts.map +1 -1
  111. package/dist/src/cli/commands/context.js +8 -23
  112. package/dist/src/cli/commands/context.js.map +1 -1
  113. package/dist/src/cli/commands/dashboard.d.ts +38 -0
  114. package/dist/src/cli/commands/dashboard.d.ts.map +1 -0
  115. package/dist/src/cli/commands/dashboard.js +69 -0
  116. package/dist/src/cli/commands/dashboard.js.map +1 -0
  117. package/dist/src/cli/commands/evidence/add.d.ts +14 -3
  118. package/dist/src/cli/commands/evidence/add.d.ts.map +1 -1
  119. package/dist/src/cli/commands/evidence/add.js +34 -9
  120. package/dist/src/cli/commands/evidence/add.js.map +1 -1
  121. package/dist/src/cli/commands/evidence/prune.d.ts +42 -0
  122. package/dist/src/cli/commands/evidence/prune.d.ts.map +1 -0
  123. package/dist/src/cli/commands/evidence/prune.js +56 -0
  124. package/dist/src/cli/commands/evidence/prune.js.map +1 -0
  125. package/dist/src/cli/commands/evidence/source-parsing.d.ts.map +1 -1
  126. package/dist/src/cli/commands/evidence/source-parsing.js +21 -0
  127. package/dist/src/cli/commands/evidence/source-parsing.js.map +1 -1
  128. package/dist/src/cli/commands/evidence.d.ts +1 -0
  129. package/dist/src/cli/commands/evidence.d.ts.map +1 -1
  130. package/dist/src/cli/commands/evidence.js +1 -0
  131. package/dist/src/cli/commands/evidence.js.map +1 -1
  132. package/dist/src/cli/commands/list.d.ts.map +1 -1
  133. package/dist/src/cli/commands/list.js +23 -12
  134. package/dist/src/cli/commands/list.js.map +1 -1
  135. package/dist/src/cli/commands/plugin.d.ts +27 -0
  136. package/dist/src/cli/commands/plugin.d.ts.map +1 -0
  137. package/dist/src/cli/commands/plugin.js +43 -0
  138. package/dist/src/cli/commands/plugin.js.map +1 -0
  139. package/dist/src/cli/commands/profile/add.d.ts +7 -2
  140. package/dist/src/cli/commands/profile/add.d.ts.map +1 -1
  141. package/dist/src/cli/commands/profile/add.js +11 -2
  142. package/dist/src/cli/commands/profile/add.js.map +1 -1
  143. package/dist/src/cli/commands/profile/check.d.ts +7 -2
  144. package/dist/src/cli/commands/profile/check.d.ts.map +1 -1
  145. package/dist/src/cli/commands/profile/check.js +10 -1
  146. package/dist/src/cli/commands/profile/check.js.map +1 -1
  147. package/dist/src/cli/commands/profile/evidence.d.ts +7 -2
  148. package/dist/src/cli/commands/profile/evidence.d.ts.map +1 -1
  149. package/dist/src/cli/commands/profile/evidence.js +10 -1
  150. package/dist/src/cli/commands/profile/evidence.js.map +1 -1
  151. package/dist/src/cli/commands/profile/show.d.ts +7 -2
  152. package/dist/src/cli/commands/profile/show.d.ts.map +1 -1
  153. package/dist/src/cli/commands/profile/show.js +1 -1
  154. package/dist/src/cli/commands/profile/show.js.map +1 -1
  155. package/dist/src/cli/commands/reporting.d.ts +18 -6
  156. package/dist/src/cli/commands/reporting.d.ts.map +1 -1
  157. package/dist/src/cli/commands/reporting.js +40 -27
  158. package/dist/src/cli/commands/reporting.js.map +1 -1
  159. package/dist/src/cli/commands/setup.d.ts +35 -0
  160. package/dist/src/cli/commands/setup.d.ts.map +1 -0
  161. package/dist/src/cli/commands/setup.js +51 -0
  162. package/dist/src/cli/commands/setup.js.map +1 -0
  163. package/dist/src/cli/commands/upgrade.js +1 -1
  164. package/dist/src/cli/commands/upgrade.js.map +1 -1
  165. package/dist/src/cli/human-output.d.ts +9 -0
  166. package/dist/src/cli/human-output.d.ts.map +1 -0
  167. package/dist/src/cli/human-output.js +211 -0
  168. package/dist/src/cli/human-output.js.map +1 -0
  169. package/dist/src/cli/init.d.ts +9 -0
  170. package/dist/src/cli/init.d.ts.map +1 -0
  171. package/dist/src/cli/init.js +113 -0
  172. package/dist/src/cli/init.js.map +1 -0
  173. package/dist/src/cli/runtime.d.ts +32 -2
  174. package/dist/src/cli/runtime.d.ts.map +1 -1
  175. package/dist/src/cli/runtime.js +95 -16
  176. package/dist/src/cli/runtime.js.map +1 -1
  177. package/dist/src/cli/setup.d.ts +11 -0
  178. package/dist/src/cli/setup.d.ts.map +1 -0
  179. package/dist/src/cli/setup.js +107 -0
  180. package/dist/src/cli/setup.js.map +1 -0
  181. package/dist/src/cli.d.ts.map +1 -1
  182. package/dist/src/cli.js +39 -5
  183. package/dist/src/cli.js.map +1 -1
  184. package/dist/src/core/contract.d.ts +2 -1
  185. package/dist/src/core/contract.d.ts.map +1 -1
  186. package/dist/src/core/contract.js +102 -199
  187. package/dist/src/core/contract.js.map +1 -1
  188. package/dist/src/core/evidence.d.ts +15 -6
  189. package/dist/src/core/evidence.d.ts.map +1 -1
  190. package/dist/src/core/evidence.js +188 -73
  191. package/dist/src/core/evidence.js.map +1 -1
  192. package/dist/src/core/profile.d.ts.map +1 -1
  193. package/dist/src/core/profile.js +10 -0
  194. package/dist/src/core/profile.js.map +1 -1
  195. package/dist/src/core/report.d.ts +19 -4
  196. package/dist/src/core/report.d.ts.map +1 -1
  197. package/dist/src/core/report.js +372 -36
  198. package/dist/src/core/report.js.map +1 -1
  199. package/dist/src/core/shared.d.ts +26 -4
  200. package/dist/src/core/shared.d.ts.map +1 -1
  201. package/dist/src/core/shared.js +283 -17
  202. package/dist/src/core/shared.js.map +1 -1
  203. package/dist/src/core.d.ts +3 -0
  204. package/dist/src/core.d.ts.map +1 -1
  205. package/dist/src/core.js +3 -0
  206. package/dist/src/core.js.map +1 -1
  207. package/dist/src/kernel/activity.d.ts +12 -0
  208. package/dist/src/kernel/activity.d.ts.map +1 -0
  209. package/dist/src/kernel/activity.js +223 -0
  210. package/dist/src/kernel/activity.js.map +1 -0
  211. package/dist/src/kernel/events.d.ts +10 -0
  212. package/dist/src/kernel/events.d.ts.map +1 -0
  213. package/dist/src/kernel/events.js +138 -0
  214. package/dist/src/kernel/events.js.map +1 -0
  215. package/dist/src/kernel/http/app.d.ts +7 -0
  216. package/dist/src/kernel/http/app.d.ts.map +1 -0
  217. package/dist/src/kernel/http/app.js +113 -0
  218. package/dist/src/kernel/http/app.js.map +1 -0
  219. package/dist/src/kernel/server.d.ts +14 -0
  220. package/dist/src/kernel/server.d.ts.map +1 -0
  221. package/dist/src/kernel/server.js +51 -0
  222. package/dist/src/kernel/server.js.map +1 -0
  223. package/dist/src/kernel/snapshot.d.ts +10 -0
  224. package/dist/src/kernel/snapshot.d.ts.map +1 -0
  225. package/dist/src/kernel/snapshot.js +194 -0
  226. package/dist/src/kernel/snapshot.js.map +1 -0
  227. package/dist/src/language.d.ts +11 -0
  228. package/dist/src/language.d.ts.map +1 -0
  229. package/dist/src/language.js +35 -0
  230. package/dist/src/language.js.map +1 -0
  231. package/dist/src/lifecycle/bootstrap.d.ts.map +1 -1
  232. package/dist/src/lifecycle/bootstrap.js +11 -2
  233. package/dist/src/lifecycle/bootstrap.js.map +1 -1
  234. package/dist/src/lifecycle/context-export.d.ts +3 -0
  235. package/dist/src/lifecycle/context-export.d.ts.map +1 -1
  236. package/dist/src/lifecycle/context-export.js +13 -7
  237. package/dist/src/lifecycle/context-export.js.map +1 -1
  238. package/dist/src/lifecycle/doctor/active-goals.d.ts +2 -0
  239. package/dist/src/lifecycle/doctor/active-goals.d.ts.map +1 -1
  240. package/dist/src/lifecycle/doctor/active-goals.js +95 -27
  241. package/dist/src/lifecycle/doctor/active-goals.js.map +1 -1
  242. package/dist/src/lifecycle/doctor/manifest-health.js +9 -9
  243. package/dist/src/lifecycle/doctor/manifest-health.js.map +1 -1
  244. package/dist/src/lifecycle/doctor/plugin-health.js +1 -1
  245. package/dist/src/lifecycle/doctor/plugin-health.js.map +1 -1
  246. package/dist/src/lifecycle/doctor/project-health.d.ts.map +1 -1
  247. package/dist/src/lifecycle/doctor/project-health.js +14 -11
  248. package/dist/src/lifecycle/doctor/project-health.js.map +1 -1
  249. package/dist/src/lifecycle/doctor/shared.d.ts.map +1 -1
  250. package/dist/src/lifecycle/doctor/shared.js +5 -2
  251. package/dist/src/lifecycle/doctor/shared.js.map +1 -1
  252. package/dist/src/lifecycle/doctor.d.ts.map +1 -1
  253. package/dist/src/lifecycle/doctor.js +9 -3
  254. package/dist/src/lifecycle/doctor.js.map +1 -1
  255. package/dist/src/lifecycle/install.d.ts.map +1 -1
  256. package/dist/src/lifecycle/install.js +4 -6
  257. package/dist/src/lifecycle/install.js.map +1 -1
  258. package/dist/src/lifecycle/manifest.d.ts.map +1 -1
  259. package/dist/src/lifecycle/manifest.js +16 -8
  260. package/dist/src/lifecycle/manifest.js.map +1 -1
  261. package/dist/src/lifecycle/plugin-sync.d.ts +46 -0
  262. package/dist/src/lifecycle/plugin-sync.d.ts.map +1 -0
  263. package/dist/src/lifecycle/plugin-sync.js +216 -0
  264. package/dist/src/lifecycle/plugin-sync.js.map +1 -0
  265. package/dist/src/lifecycle/setup.d.ts +47 -0
  266. package/dist/src/lifecycle/setup.d.ts.map +1 -0
  267. package/dist/src/lifecycle/setup.js +279 -0
  268. package/dist/src/lifecycle/setup.js.map +1 -0
  269. package/dist/src/lifecycle/shared.d.ts.map +1 -1
  270. package/dist/src/lifecycle/shared.js +4 -2
  271. package/dist/src/lifecycle/shared.js.map +1 -1
  272. package/dist/src/lifecycle/uninstall.d.ts.map +1 -1
  273. package/dist/src/lifecycle/uninstall.js +1 -1
  274. package/dist/src/lifecycle/uninstall.js.map +1 -1
  275. package/dist/src/lifecycle.d.ts +2 -0
  276. package/dist/src/lifecycle.d.ts.map +1 -1
  277. package/dist/src/lifecycle.js +2 -0
  278. package/dist/src/lifecycle.js.map +1 -1
  279. package/dist/src/skills.d.ts.map +1 -1
  280. package/dist/src/skills.js +1 -0
  281. package/dist/src/skills.js.map +1 -1
  282. package/dist/src/types.d.ts +299 -3
  283. package/dist/src/types.d.ts.map +1 -1
  284. package/dist/src/validation.d.ts +4 -0
  285. package/dist/src/validation.d.ts.map +1 -1
  286. package/dist/src/validation.js +4 -0
  287. package/dist/src/validation.js.map +1 -1
  288. package/examples/opennori-self.json +60 -12
  289. package/package.json +39 -7
  290. package/plugins/opennori/.codex-plugin/plugin.json +12 -5
  291. package/plugins/opennori/skills/nori/SKILL.md +187 -25
  292. package/plugins/opennori/skills/nori-acceptance/SKILL.md +396 -19
  293. package/plugins/opennori/skills/nori-architecture-apply/SKILL.md +100 -13
  294. package/plugins/opennori/skills/nori-architecture-brainstorm/SKILL.md +163 -19
  295. package/plugins/opennori/skills/nori-architecture-challenge/SKILL.md +81 -10
  296. package/plugins/opennori/skills/nori-autogoal/SKILL.md +313 -0
  297. package/plugins/opennori/skills/nori-build-vs-buy/SKILL.md +91 -9
  298. package/plugins/opennori/skills/nori-capability-profile/SKILL.md +110 -11
  299. package/plugins/opennori/skills/nori-evidence/SKILL.md +113 -11
  300. package/plugins/opennori/skills/nori-project-health/SKILL.md +137 -31
  301. package/plugins/opennori/skills/nori-reporting/SKILL.md +116 -18
  302. package/schemas/architecture-apply.schema.json +52 -0
  303. package/schemas/architecture-baseline.schema.json +82 -0
  304. package/schemas/architecture-requirement.schema.json +29 -0
  305. package/schemas/contract.schema.json +34 -0
  306. package/schemas/evidence-payload.schema.json +1 -1
  307. package/schemas/ledger.schema.json +36 -0
  308. package/schemas/manifest.schema.json +10 -0
  309. package/src/acceptance.ts +189 -288
  310. package/src/agent-next.ts +385 -0
  311. package/src/architecture/agent-surface.ts +33 -14
  312. package/src/architecture/apply.ts +173 -0
  313. package/src/architecture/baseline.ts +99 -1
  314. package/src/architecture/profile.ts +237 -0
  315. package/src/architecture/report.ts +22 -1
  316. package/src/architecture/requirement.ts +88 -0
  317. package/src/architecture/shared.ts +14 -1
  318. package/src/architecture/state.ts +18 -1
  319. package/src/architecture.ts +14 -0
  320. package/src/cli/bootstrap.ts +6 -3
  321. package/src/cli/command-tree.ts +128 -10
  322. package/src/cli/commands/acceptance/approval.ts +68 -8
  323. package/src/cli/commands/acceptance/brainstorm.ts +33 -9
  324. package/src/cli/commands/acceptance/criterion.ts +132 -16
  325. package/src/cli/commands/acceptance/draft.ts +61 -71
  326. package/src/cli/commands/acceptance/runtime-status.ts +40 -22
  327. package/src/cli/commands/acceptance.ts +2 -0
  328. package/src/cli/commands/activity.ts +222 -0
  329. package/src/cli/commands/architecture/apply.ts +138 -0
  330. package/src/cli/commands/architecture/baseline.ts +37 -11
  331. package/src/cli/commands/architecture/build-vs-buy.ts +8 -1
  332. package/src/cli/commands/architecture/profile.ts +1 -1
  333. package/src/cli/commands/architecture/requirement.ts +119 -0
  334. package/src/cli/commands/architecture.ts +8 -0
  335. package/src/cli/commands/changes.ts +18 -10
  336. package/src/cli/commands/check.ts +77 -23
  337. package/src/cli/commands/context.ts +8 -23
  338. package/src/cli/commands/dashboard.ts +75 -0
  339. package/src/cli/commands/evidence/add.ts +39 -10
  340. package/src/cli/commands/evidence/prune.ts +66 -0
  341. package/src/cli/commands/evidence/source-parsing.ts +20 -0
  342. package/src/cli/commands/evidence.ts +4 -0
  343. package/src/cli/commands/list.ts +24 -12
  344. package/src/cli/commands/plugin.ts +45 -0
  345. package/src/cli/commands/profile/add.ts +12 -1
  346. package/src/cli/commands/profile/check.ts +11 -0
  347. package/src/cli/commands/profile/evidence.ts +11 -0
  348. package/src/cli/commands/profile/show.ts +1 -1
  349. package/src/cli/commands/reporting.ts +42 -28
  350. package/src/cli/commands/setup.ts +66 -0
  351. package/src/cli/commands/upgrade.ts +1 -1
  352. package/src/cli/human-output.ts +214 -0
  353. package/src/cli/init.ts +154 -0
  354. package/src/cli/runtime.ts +131 -17
  355. package/src/cli/setup.ts +163 -0
  356. package/src/cli.ts +38 -5
  357. package/src/core/contract.ts +105 -206
  358. package/src/core/evidence.ts +201 -77
  359. package/src/core/profile.ts +7 -0
  360. package/src/core/report.ts +393 -36
  361. package/src/core/shared.ts +375 -18
  362. package/src/core.ts +3 -0
  363. package/src/dashboard/index.html +14 -0
  364. package/src/dashboard/src/App.tsx +505 -0
  365. package/src/dashboard/src/api.ts +44 -0
  366. package/src/dashboard/src/components/AcceptanceLoop.tsx +145 -0
  367. package/src/dashboard/src/components/AcceptanceRadarNet.tsx +505 -0
  368. package/src/dashboard/src/components/InspectNodePanel.tsx +597 -0
  369. package/src/dashboard/src/main.tsx +16 -0
  370. package/src/dashboard/src/selection.ts +161 -0
  371. package/src/dashboard/src/styles.css +158 -0
  372. package/src/dashboard/src/types.ts +177 -0
  373. package/src/kernel/activity.ts +241 -0
  374. package/src/kernel/events.ts +144 -0
  375. package/src/kernel/http/app.ts +128 -0
  376. package/src/kernel/server.ts +68 -0
  377. package/src/kernel/snapshot.ts +199 -0
  378. package/src/language.ts +39 -0
  379. package/src/lifecycle/bootstrap.ts +13 -3
  380. package/src/lifecycle/context-export.ts +15 -9
  381. package/src/lifecycle/doctor/active-goals.ts +105 -32
  382. package/src/lifecycle/doctor/manifest-health.ts +11 -11
  383. package/src/lifecycle/doctor/plugin-health.ts +1 -1
  384. package/src/lifecycle/doctor/project-health.ts +20 -11
  385. package/src/lifecycle/doctor/shared.ts +5 -2
  386. package/src/lifecycle/doctor.ts +11 -5
  387. package/src/lifecycle/install.ts +5 -6
  388. package/src/lifecycle/manifest.ts +21 -10
  389. package/src/lifecycle/plugin-sync.ts +309 -0
  390. package/src/lifecycle/setup.ts +387 -0
  391. package/src/lifecycle/shared.ts +4 -2
  392. package/src/lifecycle/uninstall.ts +2 -1
  393. package/src/lifecycle.ts +2 -0
  394. package/src/skills.ts +1 -0
  395. package/src/types.ts +365 -2
  396. package/src/validation.ts +4 -0
@@ -18,6 +18,16 @@ For non-trivial goals, OpenNori also carries an Architecture Baseline. Product A
18
18
  human user must be able to accept. Architecture Baseline answers what technical architecture the
19
19
  agent must follow while producing that outcome. These are reported together but kept separate.
20
20
 
21
+ OpenNori is installed and used as one agent capability bundle:
22
+
23
+ - Codex Plugin distributes and discovers packaged OpenNori Skills.
24
+ - Skills define the agent behavior protocols and natural-language routing.
25
+ - `opennori` is the deterministic state layer those Skills call.
26
+ - `.opennori/` is the project-local contract, evidence, profile, architecture, health, and report store.
27
+
28
+ Do not present Plugin, Skills, CLI, or `.opennori` state as separate user workflows. Direct CLI use
29
+ is an advanced, automation, or debugging route for the same state layer.
30
+
21
31
  ## Layered Acceptance Criteria v1
22
32
 
23
33
  OpenNori itself is accepted only when it satisfies user-tool-operation acceptance criteria.
@@ -42,10 +52,10 @@ current gap, risk gate, and report.
42
52
 
43
53
  | ID | Tool / entrypoint | User operation | User acceptance criterion | Passing threshold |
44
54
  | --- | --- | --- | --- | --- |
45
- | AC-P-1 | Editor / file browser | Open the active Nori Contract | The user understands goal, layered ACs, each status, and the current gap. | No chat history or implementation explanation required; understandable within 60 seconds. |
55
+ | AC-P-1 | Editor / file browser | Open the current Nori Contract | The user understands goal, layered ACs, each status, and the current gap. | No chat history or implementation explanation required; understandable within 60 seconds. |
46
56
  | AC-P-2 | CLI | Run `opennori check` | The user can reject technical implementation details masquerading as ACs. | Files, fields, commands, tests, or modules cannot be accepted as user ACs by themselves. |
47
57
  | AC-P-3 | CLI | Run `opennori next` or `opennori status` | The user sees the current acceptance gap and completion answer, not a process-step list. | Output answers which AC is missing, whether complete, and whether human action is required. |
48
- | AC-P-4 | CLI / report | Inspect a high-risk AC | The user sees that weak evidence cannot make it passing. | High-risk passing cannot rely only on agent self-summary. |
58
+ | AC-P-4 | CLI / report | Inspect a high-risk AC | The user sees review risk when high-risk passing evidence is only an agent observation. | CLI preserves the submitted objective result but exposes confidence and evidence_health review warnings instead of pretending agent self-summary is confidently complete. |
49
59
  | AC-P-5 | CLI / Codex | Trigger `opennori report` | The user sees goal, layered AC statuses, evidence summaries, current gap, intervention, and conclusion. | Report is organized by acceptance state and evidence, not process steps. |
50
60
  | AC-P-6 | CLI / report | Inspect evidence basis | The user can tell what evidence supports passing, blocked, or waived ACs. | Report/status shows evidence summary, basis, confidence, and limitations, not only an agent conclusion. |
51
61
  | AC-P-7 | CLI / report | Review evidence sources | The user can review evidence sources without constraining how the agent gathered them. | Sources can be commands, artifacts, URLs, screenshots, diffs, human confirmations, or other reviewable references. |
@@ -62,13 +72,15 @@ The operator layer proves that Codex can actually use OpenNori as the work proto
62
72
  | --- | --- | --- | --- | --- |
63
73
  | AC-O-1 | Codex conversation | Start a task with "use OpenNori for this goal" | The user sees a draft Nori Contract written from the user's perspective. | Draft ACs describe user actions or judgments; user can approve or revise. |
64
74
  | AC-O-2 | Codex conversation | Approve or revise the acceptance criteria | The user controls what "done" means. | Agent cannot decide completion before user-confirmed criteria exist. |
65
- | AC-O-3 | New Codex session | Ask to continue OpenNori | The agent restores the active goal and current acceptance gap. | Recovery uses repo files, not old chat context. |
75
+ | AC-O-3 | New Codex session | Ask to continue OpenNori | The agent restores the current goal and current acceptance gap. | Recovery uses repo files, not old chat context. |
66
76
  | AC-O-4 | Codex conversation | Ask "is it done?" | The agent answers only from required AC status and evidence. | Complete is allowed only when required ACs are all `passing` or `waived`. |
67
77
  | AC-O-5 | Codex conversation | Ask "what do I need to do?" | If blocked, the user sees a concrete human action. | Blocked output asks for a decision, input, permission, cost approval, or similar human action. |
68
78
  | AC-O-6 | Codex conversation | Revise an AC after new facts appear | The changed acceptance basis is preserved. | Updated ACs become the basis for `current_gap` and completion; old criteria are not silently reused. |
69
79
  | AC-O-7 | Codex conversation | Ask OpenNori to brainstorm a fuzzy idea | The user sees selectable acceptance directions without remembering CLI syntax. | Brainstorm candidates describe user value, observable acceptance direction, and risk; they are not treated as a contract or completion evidence. |
70
80
  | AC-O-8 | Codex conversation | State required Skills, preferred stacks, avoided tools, or execution constraints | The agent records a Nori Profile without making the user remember CLI syntax. | Must/avoid profile items are shown in contract and report; unsatisfied must items or violated avoid items block completion unless waived. |
71
81
  | AC-O-9 | Codex conversation | Ask OpenNori to use a good architecture for a non-trivial goal | The user sees Product AC and an Architecture Baseline before implementation starts. | The baseline is not a plan; it names the architecture profile, boundaries, build-vs-buy policy, and challenge rule. |
82
+ | AC-O-14 | Codex conversation | Review a newly generated Nori Contract Draft | The user can tell whether the agent understood every AC before approving. | After draft generation, the agent shows a compact overview and then reviews one AC at a time: exact user entry, object or field, visible state/message/result, non-passing examples, and specific evidence object for the current AC; the user confirms or revises that AC before the next AC; final approval is requested only after every AC has been confirmed one by one. If the explanation is generic, adds or changes completion meaning, or cannot be made specific from the draft, the draft is revised instead of approved. |
83
+ | AC-O-18 | Codex conversation | Give the agent a visible product goal such as UI, CRUD, dashboard, form, list, settings, or admin work | The agent models the actual user operation path before drafting, recording evidence, or reporting confident completion. | The Skill-owned Acceptance Surface Model identifies actor, entry, visible trigger, object, action, interaction surface, required information, feedback, state change, persistence, destructive boundary, and evidence shape; broad outcome AC such as "CRUD works" or "dashboard shows state" are routed back to acceptance revision, not treated as confidently acceptable. |
72
84
 
73
85
  ### L3 Productization AC
74
86
 
@@ -78,21 +90,23 @@ a durable workflow asset.
78
90
  | ID | Tool / entrypoint | User operation | User acceptance criterion | Passing threshold |
79
91
  | --- | --- | --- | --- | --- |
80
92
  | AC-Z-1 | Codex Plugin / package assets | Install or inspect the OpenNori package | The user's agent can discover focused OpenNori Skills without the user memorizing CLI flags. | `.agents/plugins/marketplace.json` points to `./plugins/opennori`; `plugins/opennori/.codex-plugin/plugin.json` points to package-local `skills/`; the `nori` Skill routes natural-language work through acceptance, evidence, profile, architecture, health, and reporting. |
81
- | AC-Z-2 | CLI | Run `opennori install` | The user can install OpenNori into a project without unexpected overwrites. | Install shows created/skipped assets; existing user content is not overwritten by default. |
93
+ | AC-Z-2 | CLI | Run `opennori init` or `opennori install` | The user can initialize OpenNori project state without unexpected overwrites. | Init/install shows created/skipped assets; existing user content is not overwritten by default. |
82
94
  | AC-Z-3 | Git / PR diff | Review the agent's changes | The user can separate acceptance evidence changes from implementation noise. | Summary defaults to AC status changes, evidence changes, and user impact. |
83
- | AC-Z-4 | CLI | Run `opennori list` and select a goal | The user can see multiple active goals and choose one explicitly. | Multiple active goals are listed with status, gap, and paths; `--goal` selects the target. |
84
- | AC-Z-5 | CLI | Archive a completed or blocked goal | The user removes it from active work while preserving evidence and report. | Active no longer lists the goal; contract, ledger, and report remain recoverable. |
95
+ | AC-Z-4 | CLI | Run `opennori list` | The user can distinguish the single current goal, draft contracts, completed history, blocked history, and legacy recovery state. | Drafts are listed separately and are not executable; multiple current goals are reported as broken state rather than a normal choice. |
96
+ | AC-Z-5 | CLI | Archive a completed or blocked goal | The user removes it from current work while preserving evidence and report. | Current no longer lists the goal; contract, ledger, and report remain recoverable in completed or blocked history. |
85
97
  | AC-Z-6 | Project file browser | Inspect the project after running OpenNori | The user sees OpenNori-owned state under `.opennori/` instead of a generic project `process/` directory. | Install, draft, brainstorm, report, and archive write OpenNori state under `.opennori/` by default. |
86
- | AC-Z-7 | CLI / project file browser | Run `opennori install` | The user can inspect project OpenNori registration and judge version, managed entries, active goals, Plugin Skill availability, and protocol capabilities. | Install output uses create, skip, overwrite, or update semantics; `.opennori/manifest.json` records version, managed files, active goals, Plugin state, architecture state, and capabilities. |
87
- | AC-Z-8 | CLI | Run `opennori doctor` | The user can judge whether the project is `ready`, `needs-action`, or `broken`, and see the next recovery action. | Doctor checks `.opennori` structure, manifest consistency, active goal recoverability, packaged Plugin Skills, CLI runtime, and recovery suggestions. |
98
+ | AC-Z-7 | CLI / project file browser | Run `opennori install` | The user can inspect project OpenNori registration and judge version, managed entries, current/draft/history goals, Plugin Skill availability, and protocol capabilities. | Install output uses create, skip, overwrite, or update semantics; `.opennori/manifest.json` records version, managed files, current/draft/history goals, Plugin state, architecture state, and capabilities. |
99
+ | AC-Z-8 | CLI | Run `opennori doctor` | The user can judge whether the project is `ready`, `needs-action`, or `broken`, and see the next recovery action. | Doctor checks `.opennori` structure, manifest consistency, current goal recoverability, legacy active recovery, packaged Plugin Skills, CLI runtime, and recovery suggestions. |
88
100
  | AC-Z-9 | CLI | Preview install with `opennori install --dry-run` | The user can judge what OpenNori would create, skip, update, or overwrite before writing to the project. | Install plan lists action, kind, managed status, write intent, destructive flag, and reason; dry-run reports zero actual writes. |
89
101
  | AC-Z-10 | CLI | Apply force install | The user must preview and explicitly confirm destructive install actions before files are overwritten. | Real `opennori install --force` fails without confirmation; dry-run previews destructive overwrites; confirmed force install may write. |
90
102
  | AC-Z-11 | CLI | Preview and apply uninstall | The user can uninstall OpenNori entry assets without losing acceptance state by default. | Uninstall plan shows removals and preserved state; real uninstall requires confirmation; `.opennori` state is deleted only with `--include-state --confirm`. |
91
- | AC-Z-12 | Codex Plugin / Codex Skills | Use OpenNori Plugin Skills | The agent gets focused OpenNori Skills for acceptance, evidence, Nori Profile, architecture, project health, and reporting while the user keeps using natural language. | The npm package ships `.agents/plugins/marketplace.json`, `plugins/opennori/.codex-plugin/plugin.json`, and `plugins/opennori/skills/nori*/SKILL.md`; install does not copy Skills into the project; manifest records `plugin`; doctor detects missing packaged Plugin Skills. |
103
+ | AC-Z-12 | Codex Plugin / Codex Skills | Use OpenNori Plugin Skills | The agent gets focused OpenNori Skills for acceptance, evidence, Nori Profile, architecture, project health, reporting, and next-loop handoff while the user keeps using natural language. | The npm package ships `.agents/plugins/marketplace.json`, `plugins/opennori/.codex-plugin/plugin.json`, and `plugins/opennori/skills/nori*/SKILL.md`; each Skill is an agent behavior protocol with trigger semantics, state reading, natural-language mapping, state write boundaries, handoffs, user reply shape, and misuse guards; install does not copy Skills into the project; manifest records `plugin`; doctor detects missing packaged Plugin Skills. |
92
104
  | AC-Z-13 | CLI / project file browser | Establish an Architecture Baseline | The user can see what architecture the agent must follow while implementing Product AC. | `.opennori/architecture/baseline.json`, `.opennori/architecture/baseline.md`, and `.opennori/agent-guide.md` expose the baseline to agents and reviewers. |
93
- | AC-Z-14 | CLI / project file browser | Add a project Architecture Profile | The user can extend built-in profiles with a reviewed project profile. | `opennori architecture profile --from <profile.json>` writes `.opennori/architecture/profiles/<id>.json`; `architecture profiles` lists it before built-ins. |
105
+ | AC-Z-14 | CLI / project file browser | Add a project Architecture Profile | The user can extend built-in profiles with a reviewed project profile without polluting architecture evidence. | `opennori architecture profile --from <profile.json>` writes `.opennori/architecture/profiles/<id>.json`; `architecture profiles` lists it before built-ins; `.opennori/architecture/evidence/` is not used for profile source or duplicate profile files. |
94
106
  | AC-Z-15 | CLI / report | Challenge a baseline | The user can review evidence before an agent changes architecture. | `opennori architecture challenge` records current baseline, conflict evidence, recommendation, and user confirmation requirement. |
95
107
  | AC-Z-16 | CLI / report | Record build-vs-buy decisions | The user can see whether existing dependencies, standard libraries, official SDKs, and mature OSS were checked before self-building infrastructure. | `opennori architecture build-vs-buy` records the decision under `.opennori/architecture/decisions/` and status/report summarize it. |
108
+ | AC-Z-18 | README / website / Plugin description | First read the OpenNori entry material | The user understands OpenNori as one agent capability bundle: Plugin discovery, packaged Skills, deterministic CLI state layer, and `.opennori` project state work together. | README Install/Quick Start, website Start, Plugin longDescription, and nori/project-health Skills do not present Plugin, Skills, or CLI as separate user paths; they explain that missing bundle parts should be recovered through doctor/health rather than used as a half-installed workflow. |
109
+ | AC-Z-19 | CLI / Codex / npm | Run `npx opennori setup`, then use `opennori init` in projects | The user installs the complete OpenNori capability bundle from one explicit setup entry and can initialize projects with the global CLI. | Setup previews Codex Plugin registration, packaged Skill availability, global CLI install, project `.opennori` initialization, and doctor; unconfirmed setup writes nothing; confirmed setup uses official `codex plugin` and npm commands plus OpenNori project initialization. |
96
110
 
97
111
  ## Required Artifact Pair
98
112
 
@@ -103,13 +117,34 @@ OpenNori writes its project-local state under `.opennori/`.
103
117
  manifest.json
104
118
  protocol.md
105
119
  agent-guide.md
106
- active/
107
- <goal>.acceptance.md
108
- <goal>.evidence.json
120
+ current/
121
+ <goal>/
122
+ contract.json
123
+ ledger.json
124
+ README.md
125
+ criteria/
126
+ <AC-id>/
127
+ criterion.json
128
+ status.json
129
+ README.md
130
+ evidence/
131
+ artifacts/
132
+ drafts/
133
+ <goal>/
134
+ contract.json
135
+ ledger.json
136
+ README.md
137
+ criteria/
109
138
  completed/
110
139
  blocked/
111
140
  reports/
112
141
  brainstorms/
142
+ events/
143
+ events.jsonl
144
+ activity/
145
+ current.json
146
+ snapshots/
147
+ current.json
113
148
  architecture/
114
149
  baseline.json
115
150
  baseline.md
@@ -119,24 +154,66 @@ OpenNori writes its project-local state under `.opennori/`.
119
154
  evidence/
120
155
  ```
121
156
 
122
- Each active goal has:
157
+ Each current or draft goal has:
123
158
 
124
- - `<goal>.acceptance.md` for human review
125
- - `<goal>.evidence.json` for deterministic agent/tool updates
159
+ - `<goal>/contract.json` as the goal-level Nori Contract source of truth
160
+ - `<goal>/ledger.json` as the deterministic aggregate evidence/status ledger
161
+ - `<goal>/README.md` as the human/agent review surface for the goal
162
+ - `<goal>/criteria/<AC-id>/criterion.json` as each AC source of truth
163
+ - `<goal>/criteria/<AC-id>/status.json` as a rebuildable status projection
164
+ - `<goal>/criteria/<AC-id>/README.md` as the per-AC review surface
165
+ - `<goal>/criteria/<AC-id>/evidence/*.json` for reviewable evidence records
126
166
 
127
167
  `.opennori/manifest.json` records the project-local OpenNori registration:
128
168
 
129
169
  - manifest schema and OpenNori protocol version
130
170
  - OpenNori package version
131
171
  - managed `.opennori` files and directories
132
- - active goals recoverable from `.opennori/active`
172
+ - the single current goal, draft goals, completed/blocked history, and legacy `.opennori/active` recovery state
133
173
  - OpenNori Plugin and package Skill asset state
134
174
  - Architecture Baseline, profile, challenge, build-vs-buy, and agent-readable surface state
135
175
  - protocol capabilities exposed by this CLI
136
176
 
137
- `opennori install` creates or refreshes the manifest. State-changing OpenNori commands refresh it when
177
+ `opennori init` creates project state through the same preview-first lifecycle used by install.
178
+ `opennori install` remains a deterministic project-asset command for agents and automation.
179
+ State-changing OpenNori commands refresh the manifest when
138
180
  `.opennori/` already exists.
139
181
 
182
+ ## Event, Activity, And Dashboard State
183
+
184
+ OpenNori may maintain a local observation surface for users:
185
+
186
+ - `.opennori/events/events.jsonl` is an append-only event ledger for important
187
+ OpenNori state changes and live activity signals.
188
+ - `.opennori/activity/current.json` is the latest agent activity signal.
189
+ - `.opennori/snapshots/current.json` is a projection for the dashboard.
190
+
191
+ These files are not Product AC, not implementation plans, and not completion
192
+ evidence. They help users observe the acceptance loop while it runs. The source
193
+ of truth for completion remains the current Nori Contract, evidence ledger,
194
+ Nori Profile, Architecture Baseline, and report state.
195
+
196
+ `opennori dashboard --root <project>` starts a local loopback HTTP/SSE kernel
197
+ and serves a static visual dashboard. `opennori activity ...` lets an agent
198
+ publish whether it is thinking, working, verifying, waiting for the user, or
199
+ blocked. Activity can explain what the agent is doing, but it cannot mark an AC
200
+ passing.
201
+
202
+ Dashboard is an observation surface, not a confirmation surface. It may show
203
+ that a user decision, waiver, Architecture Baseline confirmation, AC approval,
204
+ or report acceptance is needed, but it must direct that decision back to the
205
+ agent conversation. Product AC, evidence, profile, architecture, report, waiver,
206
+ and completion state are written through OpenNori Skills and CLI, not dashboard
207
+ buttons or control endpoints.
208
+
209
+ CLI JSON `data.agent_next.dashboard_activity` is the preferred Skill-facing
210
+ hint for live dashboard publishing. If a Skill does not have that hint, it may
211
+ call `opennori activity start|heartbeat|finish` with only root, Skill, state,
212
+ and summary; the CLI can infer the unique current goal/gap. If no current goal
213
+ exists, activity must not bind to drafts. If multiple current goals exist,
214
+ activity publishing must fail closed and route to doctor because current state
215
+ is broken.
216
+
140
217
  `opennori install --dry-run` returns an install plan. The plan uses deterministic action semantics:
141
218
 
142
219
  - `create`: missing OpenNori asset would be created
@@ -159,10 +236,12 @@ directory requires both `--include-state` and `--confirm`.
159
236
 
160
237
  ## OpenNori Plugin Skills
161
238
 
162
- OpenNori exposes Codex Skills through its Plugin and package assets. The user should not need to
163
- remember these Skill names; the root `nori` Skill routes natural-language requests to focused Skills:
239
+ OpenNori exposes Codex Skills through its Plugin and package assets. These Skills are agent
240
+ behavior protocols, not CLI manuals for users. The user should not need to remember Skill names or
241
+ command flags; the root `nori` Skill routes natural-language requests to focused Skills:
164
242
 
165
243
  - `nori`: root router for OpenNori turns
244
+ - `nori-autogoal`: converge a rough idea into a standard Nori Contract Draft without creating a separate autogoal artifact
166
245
  - `nori-acceptance`: discover AC gaps, brainstorm, draft, approve, and revise human-facing ACs
167
246
  - `nori-evidence`: record reviewable evidence without forcing fixed adapters
168
247
  - `nori-capability-profile`: record required Skills, preferred stacks, avoided tools, and install policy
@@ -171,7 +250,82 @@ remember these Skill names; the root `nori` Skill routes natural-language reques
171
250
  - `nori-architecture-challenge`: raise evidence-backed requests to revise a baseline
172
251
  - `nori-build-vs-buy`: record dependency/library/self-build decisions before infrastructure work
173
252
  - `nori-project-health`: install, upgrade, uninstall, doctor, manifest, Plugin health, and project recoverability
174
- - `nori-reporting`: status, report, current gap, user intervention, and changes
253
+ - `nori-reporting`: status, report, current gap, user intervention, changes, and context export
254
+
255
+ Each packaged Skill states its mission, starting state reads, natural-language mapping, allowed
256
+ state writes, handoff rules, user-facing reply shape, and misuse guards. This lets agents use
257
+ OpenNori from natural language while the CLI remains a deterministic state layer.
258
+
259
+ Visible product surfaces require Acceptance Surface Modeling before the agent
260
+ drafts Product AC, records confident passing evidence, or reports confident
261
+ completion. The model is an agent runtime contract, not a CLI validator. For
262
+ UI screens, CRUD objects, dashboards, lists, tables, forms, settings, editors,
263
+ inspectors, previews, management consoles, desktop windows, CLI prompts,
264
+ MCP/tool-facing user flows, and similar workflows, the agent identifies:
265
+
266
+ - actor
267
+ - entry
268
+ - visible trigger
269
+ - object
270
+ - action
271
+ - interaction surface
272
+ - required information
273
+ - feedback
274
+ - state change
275
+ - persistence
276
+ - destructive boundary
277
+ - evidence shape
278
+
279
+ When a goal says "project CRUD", "manage projects", "settings are editable",
280
+ or "dashboard shows state", the agent splits create, view/select, edit,
281
+ delete/unlink/archive, cancel, recover, and preview flows when their controls,
282
+ fields, feedback, persistence, destructive boundary, or evidence differs. If a
283
+ model item changes the meaning of done and is unknown, the agent asks one
284
+ completion-changing question or records a clear assumption for the AC Review
285
+ Loop. This must not become a fixed target-type word list, implementation plan,
286
+ or hard CLI quality gate.
287
+
288
+ The model is only useful when it changes the draft criteria. Coverage notes or
289
+ agent prose that say "Acceptance Surface Modeling was considered" are not
290
+ enough. For visible product surfaces, each relevant criterion carries its
291
+ operation path in the criterion itself:
292
+
293
+ - `user_story`: user role, entry, object, and operation or judgment
294
+ - `measurement`: entry, visible trigger, interaction surface, object/action,
295
+ and required information or states
296
+ - `threshold`: visible feedback, immediate state change, persistence or
297
+ destructive boundary, failure/recovery behavior, and evidence shape
298
+
299
+ If the operation path is present only in coverage summary, private reasoning,
300
+ architecture notes, evidence notes, or future implementation plans, the draft
301
+ is not ready for approval and evidence/reporting cannot treat it as confidently
302
+ acceptable.
303
+
304
+ Acceptance Surface Modeling is a cross-Skill gate. Architecture, profile,
305
+ build-vs-buy, health, evidence, and reporting Skills must not bypass it:
306
+
307
+ - `nori-architecture-brainstorm` may decide runtime/state/module/dependency
308
+ boundaries only after the visible Product AC names the user operation path.
309
+ - `nori-architecture-apply` must stop implementation when the current visible
310
+ Product AC is still a broad outcome.
311
+ - `nori-architecture-challenge` must distinguish real architecture drift from
312
+ missing AC detail; missing controls, fields, feedback, persistence, or
313
+ delete semantics route to `nori-acceptance`.
314
+ - `nori-build-vs-buy` may choose reusable infrastructure, but it cannot decide
315
+ what the user accepts on the product surface.
316
+ - `nori-capability-profile` records Skill/stack/tool constraints separately;
317
+ satisfying them does not prove the visible workflow.
318
+ - `nori-project-health` reports bundle/state readiness only; it routes broad
319
+ AC meaning back to acceptance review instead of treating readiness as
320
+ completion.
321
+
322
+ If a user and agent are already discussing goal and AC before OpenNori is initialized or before a
323
+ contract is approved, the agent should not restart the user through autogoal or a full discovery
324
+ questionnaire. The `nori-acceptance` Skill adopts the current conversation into a standard draft
325
+ Nori Contract by preparing a brief with `acceptance_basis.status: "draft"` and
326
+ `acceptance_basis.source: "conversation"`, then calling `opennori draft --brief`. The result stays
327
+ under `.opennori/drafts/` until the user approves or revises it. Conversation notes are not
328
+ completion evidence, and adoption must not start implementation or move the contract to current.
175
329
 
176
330
  The package ships `.agents/plugins/marketplace.json` pointing to `./plugins/opennori`, where
177
331
  `plugins/opennori/.codex-plugin/plugin.json` declares `skills: "./skills/"`. `opennori install`
@@ -180,13 +334,17 @@ The manifest records `plugin` state, and `opennori doctor` checks whether packag
180
334
  present and whether the manifest Plugin state is stale.
181
335
 
182
336
  When upgrading an existing OpenNori project, upgrade entry assets first, then run `opennori check`.
183
- `check` validates active Nori Contracts, reports `acceptance_quality` warnings for vague ACs
184
- such as "modify profile fields" or "show an error", and reports `architecture_check` warnings when
185
- the active goal has no confirmed Architecture Baseline, stale agent-readable surface, or unresolved
186
- Architecture Challenges. It also reports `evidence_health` warnings when a complete-looking goal
187
- relies on stale, broad, source-free, or non-reviewable evidence. It does not rewrite existing
188
- contracts, evidence, reports, archives, brainstorms, or baselines. The user decides whether to
189
- revise affected criteria, architecture, or evidence.
337
+ `check` validates current Nori Contract integrity as hard state structure and reports objective
338
+ architecture, build-vs-buy, profile, and evidence-health state. It must not be treated as a
339
+ subjective AC-quality judge. Vague or possibly implementation-centered ACs such as "modify profile
340
+ fields" or "show an error" are handled by the OpenNori Skills and the agent/user conversation. The
341
+ agent may use `opennori discover` as a scratch question source, but gap ids and question wording are
342
+ not protocol-level acceptance truth. `check` reports `architecture_check` warnings when the current
343
+ goal has no confirmed Architecture Baseline, stale agent-readable surface, or unresolved
344
+ Architecture Challenges. It reports `evidence_health` warnings when a complete-looking goal relies
345
+ on stale, broad, source-free, or non-reviewable evidence. It does not rewrite existing contracts,
346
+ evidence, reports, archives, brainstorms, or baselines. The user decides whether to revise affected
347
+ criteria, confirm assumptions, accept review risk, revise architecture, or refresh evidence.
190
348
 
191
349
  ## Nori Profile
192
350
 
@@ -209,20 +367,55 @@ Profile items have:
209
367
  Completion rules:
210
368
 
211
369
  - `must` blocks completion until satisfied or waived.
212
- - `prefer` is reported but does not block completion.
370
+ - `prefer` does not block objective completion, but unknown or violated preferences become `profile_review` risk before confident completion.
213
371
  - `avoid` blocks completion if violated.
214
372
 
215
373
  Agents translate the user's natural-language preferences into profile records. Users should not
216
374
  need to remember `opennori profile` commands.
217
375
 
376
+ ## Language Preference
377
+
378
+ Language preference is presentation metadata, not Product AC. OpenNori stores
379
+ `presentation.language` on brainstorms, discoveries, and Nori Contracts so
380
+ generated goals, acceptance checks, discovery questions, and next loop
381
+ candidates stay in the language the user expects. The same preference is carried
382
+ by Skills into user-reviewable Nori Profile and project Architecture Profile
383
+ wording.
384
+
385
+ Only human-readable values follow the presentation language. Stable ids,
386
+ protocol field names, enum-like values such as `must`, `prefer`, `avoid`, and
387
+ import paths remain stable. If a project profile was created in the wrong
388
+ language, the agent revises or recreates that profile after user review.
389
+ OpenNori should not add a hard-coded language ratio validator or CLI
390
+ auto-translation layer.
391
+
218
392
  ## Architecture Baseline
219
393
 
220
394
  Architecture Baseline is separate from Product AC. It is not a plan, phase list, task list, or
221
- implementation checklist. It is sticky architecture guidance for agents and maintainers:
395
+ implementation checklist. It is sticky architecture guidance for agents and maintainers.
396
+
397
+ It has two layers:
398
+
399
+ 1. Architecture Charter: product boundary, agent behavior constraints, challenge rule, and
400
+ build-vs-buy policy.
401
+ 2. Technical Architecture Baseline: concrete runtime topology, source-of-truth model,
402
+ module/package boundaries, CLI/MCP/API/IPC contract surfaces, data flows, dependency decisions,
403
+ reference mappings, and verification.
404
+
405
+ A baseline that only lists broad principles, preferred libraries, or governance constraints is not
406
+ concrete enough for non-trivial implementation. Agents should challenge or revise it before coding.
222
407
 
223
408
  - selected Architecture Profile
224
409
  - goal it applies to
225
410
  - architecture principles and boundaries
411
+ - technical runtime topology
412
+ - source-of-truth and cache/projection boundaries
413
+ - module/package ownership boundaries
414
+ - CLI/MCP/API/IPC contract surfaces
415
+ - implementation data flows
416
+ - dependency decisions with reasons
417
+ - reference mappings from mature projects or official SDKs
418
+ - verification commands or review methods
226
419
  - Architecture Checks for maintainers or agents
227
420
  - preferred libraries or technologies
228
421
  - avoid policy
@@ -238,10 +431,24 @@ OpenNori includes built-in profiles and supports project profiles under:
238
431
 
239
432
  Use `opennori architecture profiles --root <project> --json` to list built-ins and project profiles.
240
433
  The output is intentionally reviewable before baseline confirmation: each profile includes suitable
241
- use cases, reference sources, architecture principles, checks, preferred libraries, avoid
242
- boundaries, validation issues, and build-vs-buy policy.
434
+ use cases, reference sources, architecture principles, concrete technical baseline sections,
435
+ checks, preferred libraries, avoid boundaries, validation issues, and build-vs-buy policy.
243
436
  Use `opennori architecture profile --root <project> --from <profile.json> --json` to add a reviewed
244
437
  project profile. Existing profiles are not overwritten unless the agent uses `--force` after review.
438
+ The managed project profile is `.opennori/architecture/profiles/<id>.json`.
439
+ Do not place profile source JSON, profile drafts, or baseline previews under
440
+ `.opennori/architecture/evidence/`; that directory is reserved for
441
+ architecture apply records.
442
+
443
+ Project Architecture Profile field names and stable ids stay English for the
444
+ protocol, but project profile user-readable values should follow the user's
445
+ language. When a current or draft Nori Contract has `presentation.language:
446
+ zh-CN`, agent-created project profile values such as title, summary, sources,
447
+ checks, technical baseline decisions, dependency reasons, preferred library
448
+ policy text, avoid boundaries, and build-vs-buy explanations should be written
449
+ in Chinese unless the user explicitly requests English. Built-in profiles may
450
+ remain in the package language. The CLI stores and validates profile structure;
451
+ it does not automatically translate profile prose.
245
452
 
246
453
  Use `opennori architecture baseline --root <project> --goal "<goal>" --profile <profile-id> --json`
247
454
  to preview a baseline. Preview has no side effect. After the user accepts it, rerun with `--confirm`.
@@ -253,7 +460,7 @@ Once confirmed, the baseline is written to:
253
460
  - `.opennori/agent-guide.md`
254
461
 
255
462
  Agent route files such as `AGENTS.md` or `CLAUDE.md` should point new sessions to these surfaces.
256
- `opennori doctor` checks that the baseline exists when an active goal requires it, that the schema is
463
+ `opennori doctor` checks that the baseline exists when a current goal requires it, that the schema is
257
464
  valid, and that at least one agent route references `.opennori/architecture/baseline.md`.
258
465
 
259
466
  If project evidence conflicts with a confirmed baseline, the agent must create an Architecture
@@ -264,7 +471,7 @@ or project architecture:
264
471
  opennori architecture challenge --root <project> --summary "<conflict>" --evidence "<evidence>" --recommendation "<change>" --json
265
472
  ```
266
473
 
267
- Build-vs-buy decisions are first-class architecture evidence. Before self-building infrastructure,
474
+ Build-vs-buy decisions are first-class architecture decisions. Before self-building infrastructure,
268
475
  the agent checks current project dependencies, standard libraries, official SDKs, mature
269
476
  open-source libraries, and documented reference projects:
270
477
 
@@ -272,6 +479,18 @@ open-source libraries, and documented reference projects:
272
479
  opennori architecture build-vs-buy --root <project> --area "<area>" --need "<need>" --recommendation <reuse|buy|self-build> --summary "<decision>" --json
273
480
  ```
274
481
 
482
+ Architecture state affects completion confidence, not Product AC shape. The agent/user first records
483
+ Architecture Requirement as `unknown`, `required`, `not_required`, or `waived`; CLI must not infer
484
+ non-triviality from the existence of a goal or from natural-language text. When every required
485
+ Product AC is `passing` or `waived` but the requirement is still `unknown`, OpenNori reports
486
+ `architecture_requirement` review risk. When requirement is `required` and the goal has a
487
+ missing/draft/invalid/challenged baseline, stale agent-readable architecture surface, invalid
488
+ architecture apply records, or unhealthy build-vs-buy decisions, OpenNori reports
489
+ `architecture_review`, `architecture_evidence`, or `build_vs_buy` review risk. When
490
+ requirement is `waived`, OpenNori reports `architecture_waived` with the recorded reason. It must
491
+ not create synthetic ARCH acceptance criteria or replace `current_gap` unless a real Product AC or
492
+ blocking Profile item is still incomplete.
493
+
275
494
  ## Status Model
276
495
 
277
496
  - `unknown`: no user-understandable evidence exists
@@ -282,32 +501,32 @@ opennori architecture build-vs-buy --root <project> --area "<area>" --need "<nee
282
501
 
283
502
  The workflow ledger is complete only when every required criterion is `passing` or `waived`.
284
503
  The user-facing completion answer is not confidently complete while `evidence_health` has review
285
- findings, even if the ledger status is already `complete`.
504
+ findings, `profile_review` is unresolved, `architecture_requirement`, `architecture_review`, or
505
+ `architecture_waived` remains, or `build_vs_buy` is unhealthy, even if the ledger status is already
506
+ `complete`.
507
+
508
+ When a goal is confidently complete, `agent_next.state` becomes `ready_for_next_loop`.
509
+ OpenNori CLI does not invent product candidate goals. If the user asks to continue, the Skill uses
510
+ the completed contract context, project evidence, and user intent to prepare the next
511
+ human-facing NoriBrief, then stores it with `opennori draft --brief`.
512
+ Next-loop suggestions are not phases, task lists, approved acceptance criteria, or completion
513
+ evidence. A new loop starts only after the Skill creates a standard draft Nori Contract and the user
514
+ approves or revises it.
286
515
 
287
516
  ## Risk Gate
288
517
 
289
- OpenNori separates acceptance status from evidence strength.
290
-
291
- For `high` risk criteria, weak evidence cannot make an AC `passing`. If an agent submits
292
- `passing` evidence with a weak kind, OpenNori downgrades the criterion to `failing` with
293
- `confidence: strong-evidence-required`.
294
-
295
- Strong evidence kinds:
296
-
297
- - `test-summary`
298
- - `screenshot`
299
- - `artifact`
300
- - `review-result`
301
- - `human-confirmation`
302
- - `protocol-v1`
303
-
304
- Strong explicit confidence values:
518
+ OpenNori separates objective acceptance status from confidence and review risk.
305
519
 
306
- - `verified`
307
- - `reviewed`
308
- - `human-confirmed`
520
+ If an agent submits `passing` evidence for a high-risk criterion, the CLI preserves the objective
521
+ result that was submitted. It does not use a hard-coded strong/weak evidence word list to rewrite
522
+ subjective sufficiency. Instead, `confidence` and `evidence_health` surface risk: high-risk passing
523
+ evidence based only on `agent-observation`, missing reviewable sources, missing reviewability, or
524
+ missing limitations makes completion objectively complete with review risk rather than confidently
525
+ complete.
309
526
 
310
- This keeps high-risk completion from relying on agent self-summary.
527
+ The only downgrade in the core state layer is objective: architecture/context-only sources cannot
528
+ prove Product AC by themselves, so passing evidence made only of context sources is downgraded to
529
+ product-evidence-required. Product evidence sufficiency remains an agent/user review judgment.
311
530
 
312
531
  ## Free Evidence Structure
313
532
 
@@ -328,52 +547,89 @@ When the agent submits evidence, the user-facing record should explain:
328
547
  The shape is intentionally open. OpenNori should preserve arbitrary source metadata instead of forcing
329
548
  all evidence through a narrow adapter taxonomy.
330
549
  `evidence_health` audits that reviewability surface without forcing an adapter taxonomy: it warns
331
- about missing sources, missing reviewability, missing limitations, stale timestamps, and broad batch
332
- summaries.
550
+ about missing sources, missing reviewability, missing limitations, stale timestamps, missing local
551
+ artifacts, and high-risk passing evidence based only on agent observation.
333
552
 
334
553
  ## Agent Rule
335
554
 
336
555
  On every turn:
337
556
 
338
- 1. If the user gives a fuzzy goal or candidate AC, run `opennori discover --goal "<goal>" --root <repo> --json` before drafting.
557
+ 1. If the user gives a fuzzy goal or candidate AC, use `nori-acceptance` to inspect the goal and prepare the missing acceptance questions. Optionally store those Skill-prepared questions with `opennori discover --goal "<goal>" --questions '<questions.json>' --root <repo> --json` before drafting.
558
+ 1a. If the user asks for autogoal or wants fewer clarification rounds from a rough idea, use `nori-autogoal`: the Skill reads context, preserves the full user intent, infers assumptions, asks only completion-changing questions, and creates a standard Nori Contract Draft through `opennori draft --brief`. Autogoal is not a new contract type and must not shrink a broad idea into MVP, first version, prototype, phases, or task lists.
559
+ 1a-i. If the user asks for enhanced autogoal, self-grill, "agent grill yourself", or gives a rough idea such as a todolist and expects OpenNori to flesh out all usage scenarios, `nori-autogoal` must run Enhanced Discovery before drafting. The agent internally expands user roles, entrypoints, scenarios, data objects, rules, state transitions, invalid input, success feedback, persistence, failure/recovery, UI/UX, review methods, assumptions, and out-of-scope boundaries. It then shows a compact `Enhanced Discovery checked` section and only the critical questions that change completion meaning. The Skill-prepared brief must persist `acceptance_basis.source: "autogoal"`, `acceptance_basis.mode: "enhanced"`, `coverage_summary`, `assumptions`, `open_questions`, and optional `out_of_scope` so draft/status/report reveal that enhanced discovery was used. This remains Skill behavior and reviewable contract basis metadata, not a CLI hard validator, new artifact, phase list, process log, or task plan.
560
+ 1b. If the user asks for a complete product, complete feature loop, full app, full dashboard, full workbench, or explicitly says not MVP, the Skill must define the full acceptance surface before approval instead of compressing the goal into a compact starter AC set. Cover user roles, entry/navigation, core workflows, state transitions, data rules, permissions and boundaries, failure/recovery, persistence, UI/UX when visible, and report/review method. AC count may grow with the real product surface; execution still advances one current gap at a time. Only shrink the completion definition when the user explicitly chooses a prototype, MVP, first version, or narrower scope.
561
+ 1b-i. For complete-product autogoal or draft revision, the Skill must run a coverage self-check before asking for approval. It should map product surfaces to planned AC boundaries and split unrelated user judgments instead of bundling them into a few broad AC. Typical separate surfaces include project selection, overview, object list/detail, read-only preview, source/version/audit, memory, capabilities, external knowledge, search/index, timeline/audit, permissions/security boundary, state feedback, persistence, failure recovery, and final review/report. This remains Skill/user review behavior, not a CLI hard validator or natural-language quality test.
562
+ 1c. If the goal includes a visible interface such as a page, app, Dashboard, Desktop, workbench, form, settings screen, or admin console, the Skill must discover UI/UX acceptance as Product AC. It should cover entry/navigation, information hierarchy, empty/loading/error/success states, operation feedback, readability, visual and interaction consistency, recovery paths, and UI boundaries. This is Skill/user review behavior, not a CLI hard validator.
563
+ 1d. If the goal or AC includes UI, CRUD, Dashboard, list, table, form, settings,
564
+ admin, desktop, CLI prompt, MCP tool flow, preview, inspector, or management
565
+ surface behavior, build an Acceptance Surface Model before drafting,
566
+ approving, recording confident passing evidence, or reporting confident
567
+ completion. Model actor, entry, visible trigger, object, action, interaction
568
+ surface, required information, feedback, state change, persistence, destructive
569
+ boundary, and evidence shape. Do not accept broad outcome AC such as "CRUD
570
+ works", "manage items", "settings are editable", or "dashboard shows state";
571
+ split the underlying user operations when their entry, control, fields,
572
+ feedback, persistence, destructive boundary, or evidence differs.
573
+ 1d-a. The modeled operation path must be written into the Nori Contract
574
+ criterion, not only mentioned in coverage notes. For visible product surfaces,
575
+ `measurement` should name the entry, visible trigger, interaction surface,
576
+ object/action, and required information or states; `threshold` should name
577
+ feedback, state change, persistence or destructive boundary, failure/recovery,
578
+ and evidence shape. If those fields remain broad, revise the draft through
579
+ `nori-acceptance` before approval, confident evidence, architecture apply, or
580
+ completion reporting.
581
+ 1d-i. Apply that rule across all OpenNori Skills. Do not preview/confirm an
582
+ architecture baseline, record architecture apply, file an architecture
583
+ challenge, choose a dependency, mark profile compliance, report project health,
584
+ or answer completion in a way that hides the fact that visible Product AC lacks
585
+ user operation-path detail. Route those cases to `nori-acceptance`.
339
586
  2. Ask only the discovery questions that affect completion judgment. Do not turn discovery gaps into implementation tasks or completion evidence.
340
- 3. If the user wants to discuss, brainstorm, explore, or is not ready to define acceptance criteria, run `opennori brainstorm --idea "<idea>" --root <repo> --json`.
587
+ 3. If the user wants to discuss, brainstorm, explore, or is not ready to define acceptance criteria, prepare candidate directions as the Skill and optionally store them with `opennori brainstorm --idea "<idea>" --candidates '<candidates.json>' --root <repo> --json`.
341
588
  4. Show only candidate acceptance directions and ask the user to choose or revise a direction. Brainstorm output is not a contract or completion evidence.
342
- 5. If the user chooses a candidate, run `opennori draft --from-brainstorm <brainstorm-id> --candidate <A|B|C> --root <repo> --json`.
343
- 6. If the user starts with "use OpenNori" / "用 OpenNori 跑这个任务" and discovery gaps are answered or explicitly accepted as assumptions, run `opennori draft --goal "<goal>" --root <repo> --json`.
344
- 7. Show the draft acceptance criteria and ask the user to approve or revise them.
345
- 8. After approval, run `opennori approve --root <repo> --summary "<approval>" --json`.
589
+ 5. If the user chooses a candidate, convert the chosen direction into a full NoriBrief with concrete user operations, visible results, boundaries, and review method.
590
+ 6. If the user starts with "use OpenNori" / "用 OpenNori 跑这个任务" and discovery questions are answered or explicitly accepted as assumptions, prepare a full NoriBrief and run `opennori draft --brief <brief.json> --root <repo> --json`.
591
+ 7. Show a compact draft overview, then start the AC Review Loop. Review one AC at a time with concrete user entry, visible trigger, interaction surface, object/action, required information or states, visible result, persistence or destructive boundary, non-passing cases, and evidence type. Ask the user to `confirm AC-<n>` or `revise AC-<n>: ...` before moving to the next AC. If the explanation is more specific than the criterion text, revise the draft criterion first so completion semantics live in the Nori Contract, not only in chat.
592
+ 8. Only after every AC has been confirmed one by one, ask for final approval and run `opennori approve --root <repo> --summary "<approval>" --json`.
346
593
  9. If the user states required Skills, preferred stacks, avoided tools, install policy, or execution constraints, run `opennori profile add --root <repo> ... --json` and keep those items out of the user acceptance criteria.
347
594
  10. For non-trivial goals, run `opennori architecture profiles --root <repo> --json`, preview a baseline, show it to the user, and confirm it before implementation.
348
595
  11. If the user provides a preferred architecture, add it with `opennori architecture profile --root <repo> --from <profile.json> --json` before previewing the baseline.
349
596
  12. Before implementing an acceptance gap, read `.opennori/architecture/baseline.md` and keep Product AC separate from Architecture Checks.
350
597
  13. Before self-building infrastructure, record a build-vs-buy decision.
351
598
  14. If project evidence conflicts with the baseline, run `opennori architecture challenge`; do not silently replace the baseline.
352
- 15. If the user revises a criterion later, run `opennori criterion update --root <repo> --criterion <id> ... --json`; old evidence for the changed criterion is cleared.
353
- 16. If the user asks to update an existing OpenNori project, run `opennori doctor`, use `opennori upgrade --dry-run/--confirm` for manifest/protocol/guide refreshes, then run `opennori check`; ask the user before revising any existing AC flagged by `acceptance_quality`. If packaged Plugin Skills are missing, reinstall or update the OpenNori package instead of copying Skills into the project.
354
- 17. Run `opennori resume --root <repo>` or `opennori next --root <repo>` to recover the active goal and current acceptance gap from repository files.
355
- 18. Work only to produce evidence for that gap under the confirmed Architecture Baseline.
356
- 19. Add acceptance evidence with `opennori evidence add`; choose any suitable verification method, but record basis, sources, reviewability, confidence, and limitations. Add profile compliance evidence with `opennori profile evidence` when profile items exist.
357
- 15. Run `opennori evaluate`.
358
- 16. Report acceptance state, profile compliance, and evidence, not implementation steps.
599
+ 15. If the user adds a new acceptance boundary while reviewing a draft, run `opennori criterion add --root <repo> --from-draft --goal <goal-id> --id <id> ... --json`; the draft remains unapproved, the new criterion becomes part of the draft review surface, and the CLI keeps the draft contract, evidence ledger, goal README, per-criterion dossier, and manifest in sync. Do not patch the draft files manually unless the CLI is broken and project-health recovery has failed.
600
+ 16. If the user adds a new acceptance boundary after approval, run `opennori criterion add --root <repo> --id <id> ... --json`; the new criterion becomes an evidence gap without forcing the agent to edit state files manually.
601
+ 17. If the user revises a criterion while reviewing a draft, run `opennori criterion update --root <repo> --from-draft --goal <goal-id> --criterion <id> ... --json`; the draft remains unapproved and the AC Review Loop restarts from the changed AC. If the user revises an already approved current contract, run `opennori criterion update --root <repo> --criterion <id> ... --json`; old evidence for the changed criterion is cleared and the revised AC becomes the current evidence gap.
602
+ 18. If the user asks to update an existing OpenNori project, run `opennori doctor`, use `opennori upgrade --dry-run/--confirm` for manifest/protocol/guide refreshes, then run `opennori check`; use `nori-acceptance` to review existing AC wording with the user instead of relying on fixed CLI quality gaps. If packaged Plugin Skills are missing, reinstall or update the OpenNori package instead of copying Skills into the project.
603
+ 19. Run `opennori resume --root <repo>` or `opennori next --root <repo>` to recover the current goal and current acceptance gap from repository files.
604
+ 20. Work only to produce evidence for that gap under the confirmed Architecture Baseline.
605
+ 21. Add acceptance evidence with `opennori evidence add`; choose any suitable verification method, but record basis, sources, reviewability, confidence, and limitations. For visible product surfaces, evidence should name the modeled operation path: entry, visible trigger, object/action, interaction surface, required information, feedback, state change, persistence or destructive boundary, and evidence shape. If existing evidence is invalid or obsolete, run `opennori evidence prune` first so stale proof does not occupy current context. Add profile compliance evidence with `opennori profile evidence` when profile items exist.
606
+ 22. If a dashboard is useful, publish live activity from `agent_next.dashboard_activity` or `opennori activity start/heartbeat/finish`; do not treat that activity as acceptance evidence or use dashboard controls for confirmation. If no current goal exists, do not bind activity to drafts; if multiple current goals exist, run doctor/project-health because the state is broken.
607
+ 23. Run `opennori evaluate`.
608
+ 24. Report acceptance state, profile compliance, and evidence, not implementation steps. If objective evidence exists but a visible product AC lacks Acceptance Surface Modeling, report it as objectively evidenced but not confidently acceptable yet and route back to `nori-acceptance`.
609
+ 25. If the goal is complete and the user asked to continue, infer or ask for the next human-facing outcome from the completed context and user intent, prepare a full NoriBrief, then run `opennori draft --brief <brief.json> --root <repo> --json`. Do not treat next-loop suggestions as approved AC, phases, task lists, or evidence.
359
610
 
360
611
  Useful commands:
361
612
 
362
- - `opennori brainstorm --idea "<idea>" --root <repo>`: create selectable acceptance directions before a contract exists.
363
- - `opennori discover --goal "<goal>" --root <repo>`: find underspecified acceptance gaps before drafting a contract.
364
- - `opennori draft --goal "<goal>" --root <repo>`: create a draft Nori Contract that needs user approval.
365
- - `opennori draft --from-brainstorm <brainstorm-id> --candidate <A|B|C> --root <repo>`: convert a selected brainstorm direction into a draft contract.
613
+ - `opennori brainstorm --idea "<idea>" --candidates '<candidates.json>' --root <repo>`: store Skill-prepared selectable acceptance directions before a contract exists.
614
+ - `opennori discover --goal "<goal>" --questions '<questions.json>' --root <repo>`: store a Skill-prepared question source before drafting a contract; the agent still decides which questions matter for the user.
615
+ - `opennori draft --brief <brief.json> --root <repo>`: create a standard draft Nori Contract from a Skill-prepared brief, including autogoal convergence output.
366
616
  - `opennori approve --root <repo>`: mark the acceptance basis as approved so completion can be decided.
367
- - `opennori criterion update --root <repo> --criterion <id> ...`: preserve a user revision as the new acceptance basis.
617
+ - `opennori criterion add --root <repo> --from-draft --goal <goal-id> --id <id> ...`: add a missing AC to a draft while keeping the draft unapproved and synchronizing the contract, ledger, markdown, and manifest.
618
+ - `opennori criterion add --root <repo> --id <id> ...`: add a newly confirmed acceptance boundary to the current contract and ledger.
619
+ - `opennori criterion update --root <repo> --from-draft --goal <goal-id> --criterion <id> ...`: revise a draft AC while keeping the acceptance basis unapproved.
620
+ - `opennori criterion update --root <repo> --criterion <id> ...`: revise an approved current AC and clear stale evidence for that AC.
368
621
  - `opennori evidence add --root <repo> --criterion <id> --kind <kind> --summary "<summary>" --result <passing|failing|blocked|waived> --basis <basis> --source '<json-or-label>' --reviewability "<how to review>" --limitations "<known limits>"`: attach user-understandable, reviewable evidence without forcing a fixed adapter.
622
+ - `opennori evidence prune --root <repo> --criterion <id> --reason "<reason>"`: remove invalid or obsolete evidence from a current criterion so reports and context exports only carry current proof.
369
623
  - `opennori profile add --root <repo> --type <skill|stack|constraint> --name "<name>" --strength <must|prefer|avoid>`: record user execution preferences separately from ACs.
370
624
  - `opennori profile evidence --root <repo> --item <item-id> --result <satisfied|violated|waived>`: record whether the agent followed the profile.
371
625
  - `opennori profile show --root <repo>`: show profile compliance and blocking items.
372
- - `opennori list --root <repo>`: list active OpenNori goals.
626
+ - `opennori list --root <repo>`: list the current goal, drafts, completed/blocked history, and legacy active recovery state.
373
627
  - `opennori install --root <repo>`: create or refresh project-local OpenNori assets and manifest.
374
- - `opennori upgrade --root <repo>`: preview and refresh project-local OpenNori assets without rewriting active contracts or evidence.
628
+ - `opennori upgrade --root <repo>`: preview and refresh project-local OpenNori assets without rewriting current/draft/history contracts or evidence.
375
629
  - `opennori doctor --root <repo>`: inspect project OpenNori health and recovery actions.
376
- - `opennori check --root <repo>`: validate active contract structure, audit active ACs for underspecified acceptance quality, surface Architecture Baseline health for the active goal, and report evidence health.
377
- - `opennori resume --root <repo>`: recover the active goal, current gap, completion answer, and intervention state.
630
+ - `opennori check --root <repo>`: validate current contract structure, surface Architecture Baseline health for the current goal, and report evidence health.
631
+ - `opennori dashboard --root <repo>`: start a local visual dashboard over OpenNori state.
632
+ - `opennori activity start|heartbeat|finish --root <repo>`: publish live agent activity for the dashboard; this is not evidence. Goal/gap may be inferred only when unique.
633
+ - `opennori resume --root <repo>`: recover the current goal, current gap, completion answer, and intervention state.
378
634
  - `opennori status --root <repo>`: answer whether the goal is complete and whether the user needs to act.
379
635
  - `opennori report --root <repo>`: generate the human acceptance report.