aether-colony 3.1.17 → 5.1.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 (378) hide show
  1. package/.aether/aether-utils.sh +5354 -0
  2. package/.aether/agents-claude/aether-ambassador.md +265 -0
  3. package/.aether/agents-claude/aether-archaeologist.md +327 -0
  4. package/.aether/agents-claude/aether-architect.md +236 -0
  5. package/.aether/agents-claude/aether-auditor.md +271 -0
  6. package/.aether/agents-claude/aether-builder.md +224 -0
  7. package/.aether/agents-claude/aether-chaos.md +269 -0
  8. package/.aether/agents-claude/aether-chronicler.md +305 -0
  9. package/.aether/agents-claude/aether-gatekeeper.md +330 -0
  10. package/.aether/agents-claude/aether-includer.md +374 -0
  11. package/.aether/agents-claude/aether-keeper.md +272 -0
  12. package/.aether/agents-claude/aether-measurer.md +322 -0
  13. package/.aether/agents-claude/aether-oracle.md +237 -0
  14. package/.aether/agents-claude/aether-probe.md +211 -0
  15. package/.aether/agents-claude/aether-queen.md +330 -0
  16. package/.aether/agents-claude/aether-route-setter.md +178 -0
  17. package/.aether/agents-claude/aether-sage.md +418 -0
  18. package/.aether/agents-claude/aether-scout.md +179 -0
  19. package/.aether/agents-claude/aether-surveyor-disciplines.md +417 -0
  20. package/.aether/agents-claude/aether-surveyor-nest.md +355 -0
  21. package/.aether/agents-claude/aether-surveyor-pathogens.md +289 -0
  22. package/.aether/agents-claude/aether-surveyor-provisions.md +360 -0
  23. package/.aether/agents-claude/aether-tracker.md +270 -0
  24. package/.aether/agents-claude/aether-watcher.md +280 -0
  25. package/.aether/agents-claude/aether-weaver.md +248 -0
  26. package/.aether/commands/archaeology.yaml +653 -0
  27. package/.aether/commands/build.yaml +1221 -0
  28. package/.aether/commands/chaos.yaml +653 -0
  29. package/.aether/commands/colonize.yaml +438 -0
  30. package/.aether/commands/continue.yaml +1484 -0
  31. package/.aether/commands/council.yaml +304 -0
  32. package/.aether/commands/data-clean.yaml +80 -0
  33. package/.aether/commands/dream.yaml +275 -0
  34. package/.aether/commands/entomb.yaml +863 -0
  35. package/.aether/commands/export-signals.yaml +64 -0
  36. package/.aether/commands/feedback.yaml +158 -0
  37. package/.aether/commands/flag.yaml +160 -0
  38. package/.aether/commands/flags.yaml +177 -0
  39. package/.aether/commands/focus.yaml +112 -0
  40. package/.aether/commands/help.yaml +167 -0
  41. package/.aether/commands/history.yaml +137 -0
  42. package/.aether/commands/import-signals.yaml +79 -0
  43. package/.aether/commands/init.yaml +469 -0
  44. package/.aether/commands/insert-phase.yaml +98 -0
  45. package/.aether/commands/interpret.yaml +285 -0
  46. package/.aether/commands/lay-eggs.yaml +224 -0
  47. package/.aether/commands/maturity.yaml +122 -0
  48. package/.aether/commands/memory-details.yaml +74 -0
  49. package/.aether/commands/migrate-state.yaml +174 -0
  50. package/.aether/commands/oracle.yaml +1224 -0
  51. package/.aether/commands/organize.yaml +446 -0
  52. package/.aether/commands/patrol.yaml +621 -0
  53. package/.aether/commands/pause-colony.yaml +424 -0
  54. package/.aether/commands/phase.yaml +124 -0
  55. package/.aether/commands/pheromones.yaml +153 -0
  56. package/.aether/commands/plan.yaml +1313 -0
  57. package/.aether/commands/preferences.yaml +63 -0
  58. package/.aether/commands/redirect.yaml +123 -0
  59. package/.aether/commands/resume-colony.yaml +373 -0
  60. package/.aether/commands/resume.yaml +398 -0
  61. package/.aether/commands/run.yaml +193 -0
  62. package/.aether/commands/seal.yaml +1205 -0
  63. package/.aether/commands/skill-create.yaml +337 -0
  64. package/.aether/commands/status.yaml +364 -0
  65. package/.aether/commands/swarm.yaml +352 -0
  66. package/.aether/commands/tunnels.yaml +814 -0
  67. package/.aether/commands/update.yaml +131 -0
  68. package/.aether/commands/verify-castes.yaml +159 -0
  69. package/.aether/commands/watch.yaml +454 -0
  70. package/.aether/docs/INCIDENT_TEMPLATE.md +32 -0
  71. package/.aether/docs/QUEEN-SYSTEM.md +211 -0
  72. package/.aether/docs/README.md +98 -0
  73. package/.aether/docs/caste-system.md +48 -0
  74. package/.aether/docs/command-playbooks/README.md +23 -0
  75. package/.aether/docs/command-playbooks/build-complete.md +349 -0
  76. package/.aether/docs/command-playbooks/build-context.md +282 -0
  77. package/.aether/docs/command-playbooks/build-full.md +1682 -0
  78. package/.aether/docs/command-playbooks/build-prep.md +283 -0
  79. package/.aether/docs/command-playbooks/build-verify.md +405 -0
  80. package/.aether/docs/command-playbooks/build-wave.md +749 -0
  81. package/.aether/docs/command-playbooks/continue-advance.md +524 -0
  82. package/.aether/docs/command-playbooks/continue-finalize.md +447 -0
  83. package/.aether/docs/command-playbooks/continue-full.md +1724 -0
  84. package/.aether/docs/command-playbooks/continue-gates.md +686 -0
  85. package/.aether/docs/command-playbooks/continue-verify.md +406 -0
  86. package/.aether/docs/context-continuity.md +84 -0
  87. package/{runtime → .aether/docs/disciplines}/DISCIPLINES.md +13 -11
  88. package/.aether/docs/error-codes.md +268 -0
  89. package/.aether/docs/known-issues.md +94 -0
  90. package/{runtime → .aether}/docs/pheromones.md +86 -6
  91. package/.aether/docs/plans/pheromone-display-plan.md +257 -0
  92. package/.aether/docs/queen-commands.md +98 -0
  93. package/.aether/docs/source-of-truth-map.md +132 -0
  94. package/.aether/docs/xml-utilities.md +47 -0
  95. package/{runtime → .aether}/exchange/pheromone-xml.sh +2 -1
  96. package/{runtime → .aether}/exchange/registry-xml.sh +7 -3
  97. package/{runtime → .aether}/exchange/wisdom-xml.sh +11 -4
  98. package/.aether/rules/aether-colony.md +144 -0
  99. package/.aether/schemas/example-prompt-builder.xml +234 -0
  100. package/.aether/scripts/incident-test-add.sh +47 -0
  101. package/.aether/scripts/weekly-audit.sh +79 -0
  102. package/.aether/skills/.index.json +649 -0
  103. package/.aether/skills/colony/.manifest.json +16 -0
  104. package/.aether/skills/colony/build-discipline/SKILL.md +78 -0
  105. package/.aether/skills/colony/colony-interaction/SKILL.md +56 -0
  106. package/.aether/skills/colony/colony-lifecycle/SKILL.md +77 -0
  107. package/.aether/skills/colony/colony-visuals/SKILL.md +112 -0
  108. package/.aether/skills/colony/context-management/SKILL.md +80 -0
  109. package/.aether/skills/colony/error-presentation/SKILL.md +99 -0
  110. package/.aether/skills/colony/pheromone-protocol/SKILL.md +79 -0
  111. package/.aether/skills/colony/pheromone-visibility/SKILL.md +81 -0
  112. package/.aether/skills/colony/state-safety/SKILL.md +84 -0
  113. package/.aether/skills/colony/worker-priming/SKILL.md +82 -0
  114. package/.aether/skills/domain/.manifest.json +24 -0
  115. package/.aether/skills/domain/README.md +33 -0
  116. package/.aether/skills/domain/django/SKILL.md +49 -0
  117. package/.aether/skills/domain/docker/SKILL.md +52 -0
  118. package/.aether/skills/domain/golang/SKILL.md +52 -0
  119. package/.aether/skills/domain/graphql/SKILL.md +51 -0
  120. package/.aether/skills/domain/html-css/SKILL.md +48 -0
  121. package/.aether/skills/domain/nextjs/SKILL.md +45 -0
  122. package/.aether/skills/domain/nodejs/SKILL.md +53 -0
  123. package/.aether/skills/domain/postgresql/SKILL.md +53 -0
  124. package/.aether/skills/domain/prisma/SKILL.md +59 -0
  125. package/.aether/skills/domain/python/SKILL.md +50 -0
  126. package/.aether/skills/domain/rails/SKILL.md +52 -0
  127. package/.aether/skills/domain/react/SKILL.md +45 -0
  128. package/.aether/skills/domain/rest-api/SKILL.md +58 -0
  129. package/.aether/skills/domain/svelte/SKILL.md +47 -0
  130. package/.aether/skills/domain/tailwind/SKILL.md +45 -0
  131. package/.aether/skills/domain/testing/SKILL.md +53 -0
  132. package/.aether/skills/domain/typescript/SKILL.md +58 -0
  133. package/.aether/skills/domain/vue/SKILL.md +49 -0
  134. package/.aether/templates/QUEEN.md.template +61 -0
  135. package/.aether/templates/colony-state-reset.jq.template +23 -0
  136. package/.aether/templates/colony-state.template.json +39 -0
  137. package/.aether/templates/constraints.template.json +9 -0
  138. package/.aether/templates/crowned-anthill.template.md +36 -0
  139. package/.aether/templates/handoff-build-error.template.md +30 -0
  140. package/.aether/templates/handoff-build-success.template.md +39 -0
  141. package/.aether/templates/handoff.template.md +40 -0
  142. package/.aether/templates/learning-observations.template.json +6 -0
  143. package/.aether/templates/midden.template.json +13 -0
  144. package/.aether/templates/pheromones.template.json +6 -0
  145. package/.aether/templates/session.template.json +9 -0
  146. package/{runtime → .aether}/utils/atomic-write.sh +68 -22
  147. package/{runtime → .aether}/utils/chamber-compare.sh +23 -10
  148. package/.aether/utils/chamber-utils.sh +440 -0
  149. package/.aether/utils/emoji-audit.sh +166 -0
  150. package/{runtime → .aether}/utils/error-handler.sh +34 -8
  151. package/.aether/utils/file-lock.sh +313 -0
  152. package/.aether/utils/flag.sh +267 -0
  153. package/.aether/utils/hive.sh +572 -0
  154. package/.aether/utils/learning.sh +1928 -0
  155. package/.aether/utils/midden.sh +342 -0
  156. package/.aether/utils/oracle/oracle.md +168 -0
  157. package/.aether/utils/oracle/oracle.sh +1023 -0
  158. package/.aether/utils/pheromone.sh +2029 -0
  159. package/.aether/utils/queen.sh +1698 -0
  160. package/.aether/utils/scan.sh +860 -0
  161. package/.aether/utils/semantic-cli.sh +415 -0
  162. package/.aether/utils/session.sh +552 -0
  163. package/.aether/utils/skills.sh +509 -0
  164. package/.aether/utils/spawn-tree.sh +260 -0
  165. package/.aether/utils/spawn.sh +260 -0
  166. package/.aether/utils/state-api.sh +199 -0
  167. package/{runtime → .aether}/utils/state-loader.sh +8 -6
  168. package/.aether/utils/suggest.sh +611 -0
  169. package/{runtime → .aether}/utils/swarm-display.sh +10 -1
  170. package/.aether/utils/swarm.sh +1004 -0
  171. package/{runtime → .aether}/utils/watch-spawn-tree.sh +11 -2
  172. package/{runtime → .aether}/utils/xml-compose.sh +9 -3
  173. package/.aether/utils/xml-convert.sh +277 -0
  174. package/{runtime → .aether}/utils/xml-core.sh +5 -9
  175. package/.aether/utils/xml-query.sh +201 -0
  176. package/.aether/utils/xml-utils.sh +110 -0
  177. package/{runtime → .aether}/workers.md +97 -81
  178. package/.claude/agents/ant/aether-ambassador.md +265 -0
  179. package/.claude/agents/ant/aether-archaeologist.md +327 -0
  180. package/.claude/agents/ant/aether-architect.md +236 -0
  181. package/.claude/agents/ant/aether-auditor.md +271 -0
  182. package/.claude/agents/ant/aether-builder.md +224 -0
  183. package/.claude/agents/ant/aether-chaos.md +269 -0
  184. package/.claude/agents/ant/aether-chronicler.md +305 -0
  185. package/.claude/agents/ant/aether-gatekeeper.md +330 -0
  186. package/.claude/agents/ant/aether-includer.md +374 -0
  187. package/.claude/agents/ant/aether-keeper.md +272 -0
  188. package/.claude/agents/ant/aether-measurer.md +322 -0
  189. package/.claude/agents/ant/aether-oracle.md +237 -0
  190. package/.claude/agents/ant/aether-probe.md +211 -0
  191. package/.claude/agents/ant/aether-queen.md +330 -0
  192. package/.claude/agents/ant/aether-route-setter.md +178 -0
  193. package/.claude/agents/ant/aether-sage.md +418 -0
  194. package/.claude/agents/ant/aether-scout.md +179 -0
  195. package/.claude/agents/ant/aether-surveyor-disciplines.md +417 -0
  196. package/.claude/agents/ant/aether-surveyor-nest.md +355 -0
  197. package/.claude/agents/ant/aether-surveyor-pathogens.md +289 -0
  198. package/.claude/agents/ant/aether-surveyor-provisions.md +360 -0
  199. package/.claude/agents/ant/aether-tracker.md +270 -0
  200. package/.claude/agents/ant/aether-watcher.md +280 -0
  201. package/.claude/agents/ant/aether-weaver.md +248 -0
  202. package/.claude/commands/ant/archaeology.md +16 -14
  203. package/.claude/commands/ant/build.md +43 -1028
  204. package/.claude/commands/ant/chaos.md +19 -23
  205. package/.claude/commands/ant/colonize.md +52 -31
  206. package/.claude/commands/ant/continue.md +40 -1016
  207. package/.claude/commands/ant/council.md +21 -18
  208. package/.claude/commands/ant/data-clean.md +81 -0
  209. package/.claude/commands/ant/dream.md +27 -15
  210. package/.claude/commands/ant/entomb.md +317 -225
  211. package/.claude/commands/ant/export-signals.md +57 -0
  212. package/.claude/commands/ant/feedback.md +48 -26
  213. package/.claude/commands/ant/flag.md +30 -10
  214. package/.claude/commands/ant/flags.md +34 -12
  215. package/.claude/commands/ant/focus.md +45 -19
  216. package/.claude/commands/ant/help.md +50 -8
  217. package/.claude/commands/ant/history.md +13 -0
  218. package/.claude/commands/ant/import-signals.md +71 -0
  219. package/.claude/commands/ant/init.md +345 -194
  220. package/.claude/commands/ant/insert-phase.md +101 -0
  221. package/.claude/commands/ant/interpret.md +26 -4
  222. package/.claude/commands/ant/lay-eggs.md +184 -127
  223. package/.claude/commands/ant/maturity.md +32 -11
  224. package/.claude/commands/ant/memory-details.md +77 -0
  225. package/.claude/commands/ant/migrate-state.md +20 -2
  226. package/.claude/commands/ant/oracle.md +337 -74
  227. package/.claude/commands/ant/organize.md +39 -25
  228. package/.claude/commands/ant/patrol.md +620 -0
  229. package/.claude/commands/ant/pause-colony.md +23 -27
  230. package/.claude/commands/ant/phase.md +40 -42
  231. package/.claude/commands/ant/pheromones.md +156 -0
  232. package/.claude/commands/ant/plan.md +185 -51
  233. package/.claude/commands/ant/preferences.md +65 -0
  234. package/.claude/commands/ant/redirect.md +45 -30
  235. package/.claude/commands/ant/resume-colony.md +51 -27
  236. package/.claude/commands/ant/resume.md +314 -94
  237. package/.claude/commands/ant/run.md +195 -0
  238. package/.claude/commands/ant/seal.md +650 -221
  239. package/.claude/commands/ant/skill-create.md +286 -0
  240. package/.claude/commands/ant/status.md +196 -31
  241. package/.claude/commands/ant/swarm.md +16 -46
  242. package/.claude/commands/ant/tunnels.md +280 -105
  243. package/.claude/commands/ant/update.md +73 -89
  244. package/.claude/commands/ant/verify-castes.md +100 -42
  245. package/.claude/commands/ant/watch.md +14 -12
  246. package/.opencode/agents/aether-ambassador.md +63 -20
  247. package/.opencode/agents/aether-archaeologist.md +29 -12
  248. package/.opencode/agents/aether-architect.md +103 -36
  249. package/.opencode/agents/aether-auditor.md +51 -18
  250. package/.opencode/agents/aether-builder.md +70 -20
  251. package/.opencode/agents/aether-chaos.md +29 -12
  252. package/.opencode/agents/aether-chronicler.md +60 -18
  253. package/.opencode/agents/aether-gatekeeper.md +27 -18
  254. package/.opencode/agents/aether-includer.md +27 -18
  255. package/.opencode/agents/aether-keeper.md +89 -18
  256. package/.opencode/agents/aether-measurer.md +27 -18
  257. package/.opencode/agents/aether-oracle.md +137 -0
  258. package/.opencode/agents/aether-probe.md +60 -18
  259. package/.opencode/agents/aether-queen.md +172 -24
  260. package/.opencode/agents/aether-route-setter.md +57 -12
  261. package/.opencode/agents/aether-sage.md +26 -18
  262. package/.opencode/agents/aether-scout.md +28 -20
  263. package/.opencode/agents/aether-surveyor-disciplines.md +59 -2
  264. package/.opencode/agents/aether-surveyor-nest.md +59 -2
  265. package/.opencode/agents/aether-surveyor-pathogens.md +57 -2
  266. package/.opencode/agents/aether-surveyor-provisions.md +59 -2
  267. package/.opencode/agents/aether-tracker.md +64 -18
  268. package/.opencode/agents/aether-watcher.md +66 -19
  269. package/.opencode/agents/aether-weaver.md +61 -18
  270. package/.opencode/commands/ant/archaeology.md +7 -14
  271. package/.opencode/commands/ant/build.md +437 -257
  272. package/.opencode/commands/ant/chaos.md +7 -24
  273. package/.opencode/commands/ant/colonize.md +8 -17
  274. package/.opencode/commands/ant/continue.md +661 -142
  275. package/.opencode/commands/ant/council.md +11 -22
  276. package/.opencode/commands/ant/data-clean.md +77 -0
  277. package/.opencode/commands/ant/dream.md +15 -17
  278. package/.opencode/commands/ant/entomb.md +133 -62
  279. package/.opencode/commands/ant/export-signals.md +54 -0
  280. package/.opencode/commands/ant/feedback.md +24 -5
  281. package/.opencode/commands/ant/flag.md +16 -4
  282. package/.opencode/commands/ant/flags.md +24 -10
  283. package/.opencode/commands/ant/focus.md +22 -5
  284. package/.opencode/commands/ant/help.md +41 -8
  285. package/.opencode/commands/ant/history.md +9 -0
  286. package/.opencode/commands/ant/import-signals.md +68 -0
  287. package/.opencode/commands/ant/init.md +374 -167
  288. package/.opencode/commands/ant/insert-phase.md +107 -0
  289. package/.opencode/commands/ant/interpret.md +16 -0
  290. package/.opencode/commands/ant/lay-eggs.md +184 -112
  291. package/.opencode/commands/ant/maturity.md +18 -2
  292. package/.opencode/commands/ant/memory-details.md +83 -0
  293. package/.opencode/commands/ant/migrate-state.md +12 -0
  294. package/.opencode/commands/ant/oracle.md +322 -67
  295. package/.opencode/commands/ant/organize.md +18 -16
  296. package/.opencode/commands/ant/patrol.md +626 -0
  297. package/.opencode/commands/ant/pause-colony.md +12 -29
  298. package/.opencode/commands/ant/phase.md +30 -40
  299. package/.opencode/commands/ant/pheromones.md +162 -0
  300. package/.opencode/commands/ant/plan.md +184 -56
  301. package/.opencode/commands/ant/preferences.md +71 -0
  302. package/.opencode/commands/ant/redirect.md +22 -5
  303. package/.opencode/commands/ant/resume-colony.md +38 -27
  304. package/.opencode/commands/ant/resume.md +385 -0
  305. package/.opencode/commands/ant/run.md +201 -0
  306. package/.opencode/commands/ant/seal.md +259 -45
  307. package/.opencode/commands/ant/skill-create.md +63 -0
  308. package/.opencode/commands/ant/status.md +135 -31
  309. package/.opencode/commands/ant/swarm.md +3 -345
  310. package/.opencode/commands/ant/tunnels.md +152 -9
  311. package/.opencode/commands/ant/update.md +70 -91
  312. package/.opencode/commands/ant/verify-castes.md +96 -42
  313. package/.opencode/commands/ant/watch.md +7 -0
  314. package/CHANGELOG.md +356 -0
  315. package/README.md +203 -573
  316. package/bin/cli.js +455 -527
  317. package/bin/generate-commands.js +186 -0
  318. package/bin/generate-commands.sh +127 -88
  319. package/bin/lib/init.js +13 -3
  320. package/bin/lib/spawn-logger.js +0 -15
  321. package/bin/lib/update-transaction.js +392 -140
  322. package/bin/npx-install.js +178 -0
  323. package/bin/sync-to-runtime.sh +5 -137
  324. package/bin/validate-package.sh +166 -0
  325. package/package.json +14 -7
  326. package/.opencode/agents/aether-guardian.md +0 -107
  327. package/.opencode/agents/workers.md +0 -1034
  328. package/bin/lib/model-profiles.js +0 -445
  329. package/bin/lib/model-verify.js +0 -288
  330. package/bin/lib/proxy-health.js +0 -253
  331. package/bin/lib/telemetry.js +0 -441
  332. package/runtime/CONTEXT.md +0 -160
  333. package/runtime/QUEEN_ANT_ARCHITECTURE.md +0 -402
  334. package/runtime/aether-utils.sh +0 -3879
  335. package/runtime/data/signatures.json +0 -41
  336. package/runtime/docs/AETHER-2.0-IMPLEMENTATION-PLAN.md +0 -1343
  337. package/runtime/docs/AETHER-PHEROMONE-SYSTEM-MASTER-SPEC.md +0 -2642
  338. package/runtime/docs/PHEROMONE-INJECTION.md +0 -240
  339. package/runtime/docs/PHEROMONE-INTEGRATION.md +0 -192
  340. package/runtime/docs/PHEROMONE-SYSTEM-DESIGN.md +0 -426
  341. package/runtime/docs/README.md +0 -94
  342. package/runtime/docs/VISUAL-OUTPUT-SPEC.md +0 -219
  343. package/runtime/docs/biological-reference.md +0 -272
  344. package/runtime/docs/codebase-review.md +0 -399
  345. package/runtime/docs/command-sync.md +0 -164
  346. package/runtime/docs/constraints.md +0 -116
  347. package/runtime/docs/implementation-learnings.md +0 -89
  348. package/runtime/docs/known-issues.md +0 -217
  349. package/runtime/docs/namespace.md +0 -148
  350. package/runtime/docs/pathogen-schema-example.json +0 -36
  351. package/runtime/docs/pathogen-schema.md +0 -111
  352. package/runtime/docs/planning-discipline.md +0 -159
  353. package/runtime/docs/progressive-disclosure.md +0 -184
  354. package/runtime/lib/queen-utils.sh +0 -729
  355. package/runtime/model-profiles.yaml +0 -100
  356. package/runtime/planning.md +0 -159
  357. package/runtime/recover.sh +0 -136
  358. package/runtime/templates/QUEEN.md.template +0 -79
  359. package/runtime/utils/chamber-utils.sh +0 -285
  360. package/runtime/utils/file-lock.sh +0 -122
  361. package/runtime/utils/spawn-tree.sh +0 -428
  362. package/runtime/utils/spawn-with-model.sh +0 -56
  363. package/runtime/utils/xml-utils.sh +0 -2196
  364. package/runtime/workers-new-castes.md +0 -516
  365. /package/{runtime → .aether/docs/disciplines}/coding-standards.md +0 -0
  366. /package/{runtime → .aether/docs/disciplines}/debugging.md +0 -0
  367. /package/{runtime → .aether/docs/disciplines}/learning.md +0 -0
  368. /package/{runtime → .aether/docs/disciplines}/tdd.md +0 -0
  369. /package/{runtime → .aether/docs/disciplines}/verification-loop.md +0 -0
  370. /package/{runtime → .aether/docs/disciplines}/verification.md +0 -0
  371. /package/{runtime → .aether}/schemas/aether-types.xsd +0 -0
  372. /package/{runtime → .aether}/schemas/colony-registry.xsd +0 -0
  373. /package/{runtime → .aether}/schemas/pheromone.xsd +0 -0
  374. /package/{runtime → .aether}/schemas/prompt.xsd +0 -0
  375. /package/{runtime → .aether}/schemas/queen-wisdom.xsd +0 -0
  376. /package/{runtime → .aether}/schemas/worker-priming.xsd +0 -0
  377. /package/{runtime → .aether}/utils/colorize-log.sh +0 -0
  378. /package/{runtime → .aether}/utils/queen-to-md.xsl +0 -0
@@ -0,0 +1,71 @@
1
+ <!-- Generated from .aether/commands/preferences.yaml - DO NOT EDIT DIRECTLY -->
2
+ ---
3
+ name: ant:preferences
4
+ description: "📝🐜👑🐜📝 Add or list user preferences in hub QUEEN.md"
5
+ ---
6
+
7
+ ### Step -1: Normalize Arguments
8
+
9
+ Run: `normalized_args=$(bash .aether/aether-utils.sh normalize-args "$@")`
10
+
11
+ This ensures arguments work correctly in both Claude Code and OpenCode. Use `$normalized_args` throughout this command.
12
+
13
+ You are the **Queen**. Manage user preferences in the hub `~/.aether/QUEEN.md`.
14
+
15
+ ## Instructions
16
+
17
+ The input is: `$normalized_args`
18
+
19
+ ### Step 1: Validate
20
+
21
+ If `$normalized_args` empty -> show usage: `/ant:preferences "preference text"` or `/ant:preferences --list`, stop.
22
+
23
+ ### Step 2: Route
24
+
25
+ - `$normalized_args` is `--list` -> **List mode**
26
+ - Otherwise -> **Add mode**
27
+
28
+ ### List Mode
29
+
30
+ Read `~/.aether/QUEEN.md`. If missing -> "No hub QUEEN.md found. Run /ant:init to create one.", stop.
31
+
32
+ Find the `## User Preferences` section (with or without emoji). Extract bullet lines (`- ...`) between that heading and the next `---`.
33
+
34
+ If user-added bullets exist, output each. Otherwise:
35
+ ```
36
+ No user preferences set yet.
37
+ Add one with: /ant:preferences "your preference"
38
+ ```
39
+ Stop.
40
+
41
+ ### Add Mode
42
+
43
+ Set `PREF` to `$normalized_args` (strip surrounding quotes).
44
+ If length > 500 chars -> "Preference too long (max 500 chars)", stop.
45
+
46
+ Read `~/.aether/QUEEN.md`. If missing -> "No hub QUEEN.md found. Run /ant:init to create one.", stop.
47
+
48
+ **If `## User Preferences` section exists** (with or without emoji):
49
+ 1. Remove `*No user preferences recorded yet.*` placeholder if present
50
+ 2. Append `- $PREF` at end of section (before next `---`)
51
+
52
+ **If section missing** (migration case):
53
+ 1. Insert before `## Evolution Log` (with or without emoji):
54
+ ```
55
+ ## User Preferences
56
+
57
+ - $PREF
58
+
59
+ ---
60
+
61
+ ```
62
+
63
+ Update METADATA comment: increment `stats.total_user_prefs` by 1.
64
+
65
+ ### Confirm
66
+
67
+ Output (2 lines, no banners):
68
+ ```
69
+ Preference saved to hub QUEEN.md
70
+ "$PREF"
71
+ ```
@@ -1,18 +1,22 @@
1
+ <!-- Generated from .aether/commands/redirect.yaml - DO NOT EDIT DIRECTLY -->
1
2
  ---
2
3
  name: ant:redirect
3
4
  description: "⚠️🐜🚧🐜⚠️ Emit REDIRECT signal to warn colony away from patterns"
4
5
  ---
5
6
 
6
- You are the **Queen**. Add an AVOID constraint.
7
-
8
- ## Instructions
9
-
10
7
  ### Step -1: Normalize Arguments
11
8
 
12
9
  Run: `normalized_args=$(bash .aether/aether-utils.sh normalize-args "$@")`
13
10
 
14
11
  This ensures arguments work correctly in both Claude Code and OpenCode. Use `$normalized_args` throughout this command.
15
12
 
13
+
14
+
15
+ You are the **Queen**. Add an AVOID constraint.
16
+
17
+
18
+ ## Instructions
19
+
16
20
  The pattern to avoid is: `$normalized_args`
17
21
 
18
22
  ### Step 1: Validate
@@ -20,11 +24,15 @@ The pattern to avoid is: `$normalized_args`
20
24
  If `$normalized_args` empty -> show usage: `/ant:redirect <pattern to avoid>`, stop.
21
25
  If content > 500 chars -> "Redirect content too long (max 500 chars)", stop.
22
26
 
23
- ### Step 2: Read + Update Constraints
27
+
28
+
29
+ ### Step 2: Write Signal
24
30
 
25
31
  Read `.aether/data/COLONY_STATE.json`.
26
32
  If `goal: null` -> "No colony initialized.", stop.
27
33
 
34
+
35
+
28
36
  Read `.aether/data/constraints.json`. If file doesn't exist, create it with:
29
37
  ```json
30
38
  {"version": "1.0", "focus": [], "constraints": []}
@@ -47,6 +55,12 @@ If `constraints` array exceeds 10 entries, remove the oldest entries to keep onl
47
55
 
48
56
  Write constraints.json.
49
57
 
58
+ **Write pheromone signal and update context:**
59
+ ```bash
60
+ bash .aether/aether-utils.sh pheromone-write REDIRECT "$normalized_args" --strength 0.9 --reason "User warned colony away from pattern" 2>/dev/null || true
61
+ bash .aether/aether-utils.sh context-update constraint redirect "$normalized_args" "user" 2>/dev/null || true
62
+ ```
63
+
50
64
  ### Step 3: Confirm
51
65
 
52
66
  Output header:
@@ -65,3 +79,6 @@ Then output:
65
79
 
66
80
  🐜 Colony warned away from this pattern.
67
81
  ```
82
+
83
+
84
+
@@ -1,34 +1,23 @@
1
+ <!-- Generated from .aether/commands/resume-colony.yaml - DO NOT EDIT DIRECTLY -->
1
2
  ---
2
3
  name: ant:resume-colony
3
4
  description: "🚦➡️🐜💨💨 Resume colony from saved session - restores all state"
4
5
  ---
5
6
 
6
- You are the **Queen Ant Colony**. Restore state from a paused session.
7
-
8
- ## Instructions
9
-
10
7
  ### Step -1: Normalize Arguments
11
8
 
12
9
  Run: `normalized_args=$(bash .aether/aether-utils.sh normalize-args "$@")`
13
10
 
14
11
  This ensures arguments work correctly in both Claude Code and OpenCode. Use `$normalized_args` throughout this command.
15
12
 
13
+ You are the **Queen Ant Colony**. Restore state from a paused session.
14
+
15
+ ## Instructions
16
+
16
17
  Parse `$normalized_args`:
17
18
  - If contains `--no-visual`: set `visual_mode = false` (visual is ON by default)
18
19
  - Otherwise: set `visual_mode = true`
19
20
 
20
- ### Step 0: Initialize Visual Mode (if enabled)
21
-
22
- If `visual_mode` is true:
23
- ```bash
24
- # Generate session ID
25
- resume_id="resume-$(date +%s)"
26
-
27
- # Initialize swarm display
28
- bash .aether/aether-utils.sh swarm-display-init "$resume_id"
29
- bash .aether/aether-utils.sh swarm-display-update "Queen" "prime" "excavating" "Resuming colony" "Colony" '{"read":0,"grep":0,"edit":0,"bash":0}' 0 "fungus_garden" 0
30
- ```
31
-
32
21
  ### Step 0.5: Version Check (Non-blocking)
33
22
 
34
23
  Run using the Bash tool: `bash .aether/aether-utils.sh version-check 2>/dev/null || true`
@@ -49,13 +38,35 @@ Keep state loaded (don't unload yet) - we'll need it for the full display.
49
38
 
50
39
  ### Step 2: Compute Active Signals
51
40
 
52
- Read active signals from COLONY_STATE.json `signals` array (already loaded in Step 1).
41
+ Run using the Bash tool:
42
+ ```bash
43
+ bash .aether/aether-utils.sh pheromone-read
44
+ ```
45
+
46
+ Use `.result.signals` as the active signal list (already decay-filtered by runtime logic).
47
+ If empty, treat as "no active pheromones."
53
48
 
54
- Filter signals where:
55
- - `expires_at` is null (permanent signals like INIT), OR
56
- - `expires_at` > current timestamp (not expired)
49
+ ### Step 2.5: Load Survey Context (Advisory)
57
50
 
58
- If `signals` array is empty or all expired, treat as "no active pheromones."
51
+ Run:
52
+ ```bash
53
+ survey_docs=$(ls -1 .aether/data/survey/*.md 2>/dev/null | wc -l | tr -d ' ')
54
+ survey_latest=$(ls -t .aether/data/survey/*.md 2>/dev/null | head -1)
55
+ if [[ -n "$survey_latest" ]]; then
56
+ now_epoch=$(date +%s)
57
+ modified_epoch=$(stat -f %m "$survey_latest" 2>/dev/null || stat -c %Y "$survey_latest" 2>/dev/null || echo 0)
58
+ survey_age_days=$(( (now_epoch - modified_epoch) / 86400 ))
59
+ else
60
+ survey_age_days=-1
61
+ fi
62
+ echo "survey_docs=$survey_docs"
63
+ echo "survey_age_days=$survey_age_days"
64
+ ```
65
+
66
+ Interpretation:
67
+ - `survey_docs == 0` => survey missing
68
+ - `survey_age_days > 14` => survey stale
69
+ - otherwise survey fresh
59
70
 
60
71
  ### Step 3: Display Restored State
61
72
 
@@ -93,18 +104,18 @@ PHASE PROGRESS
93
104
  Phase <id>: <name> [<status>]
94
105
  (list all phases from plan.phases)
95
106
 
107
+ SURVEY CONTEXT
108
+ Docs: <survey_docs>
109
+ Age: <survey_age_days> days
110
+ Status: <fresh|stale|missing>
111
+ Recommendation: <if missing or stale, suggest /ant:colonize --force-resurvey>
112
+
96
113
  CONTEXT FROM HANDOFF
97
114
  <summarize what was happening from .aether/HANDOFF.md>
98
115
 
99
116
  NEXT ACTIONS
100
117
  ```
101
118
 
102
- **If visual_mode is true, render final swarm display:**
103
- ```bash
104
- bash .aether/aether-utils.sh swarm-display-update "Queen" "prime" "completed" "Colony resumed" "Colony" '{"read":3,"grep":0,"edit":2,"bash":1}' 100 "fungus_garden" 100
105
- bash .aether/aether-utils.sh swarm-display-render "$resume_id"
106
- ```
107
-
108
119
  Route to next action based on state:
109
120
  - If state is `READY` and there's a pending phase -> suggest `/ant:build <phase>`
110
121
  - If state is `EXECUTING` -> note that a build was interrupted, suggest restarting with `/ant:build <phase>`
@@ -0,0 +1,385 @@
1
+ <!-- Generated from .aether/commands/resume.yaml - DO NOT EDIT DIRECTLY -->
2
+ ---
3
+ name: ant:resume
4
+ description: "Resume Previous Session"
5
+ ---
6
+
7
+ ### Step -1: Normalize Arguments
8
+
9
+ Run: `normalized_args=$(bash .aether/aether-utils.sh normalize-args "$@")`
10
+
11
+ This ensures arguments work correctly in both Claude Code and OpenCode. Use `$normalized_args` throughout this command.
12
+
13
+ # /ant:resume — Resume Previous Session
14
+
15
+ Resume work after `/clear` or in a new session. Reads colony state, detects codebase drift, and gives you a clear "do this next" recommendation.
16
+
17
+ ## Usage
18
+
19
+ ```bash
20
+ /ant:resume
21
+ ```
22
+
23
+ ---
24
+
25
+ ## Implementation
26
+
27
+ Execute the following steps in order when the user runs `/ant:resume`.
28
+
29
+ ---
30
+
31
+ ### Step 1: Read Session State
32
+
33
+ Run::
34
+ ```bash
35
+ bash .aether/aether-utils.sh session-read
36
+ ```
37
+
38
+ Parse the JSON result.
39
+
40
+ - If `exists` is `false`: display the following and **stop**:
41
+
42
+ ```
43
+
44
+ ═══════════════════════════════════════════════════
45
+ RESUME SESSION
46
+
47
+ No previous session found.
48
+
49
+ Start fresh: /ant:init "your goal"
50
+ Or check: /ant:status
51
+
52
+ ═══════════════════════════════════════════════════
53
+ ```
54
+
55
+ - If `exists` is `true`: extract from the session data:
56
+ - `colony_goal`
57
+ - `current_phase`
58
+ - `last_command`
59
+ - `suggested_next`
60
+ - `baseline_commit`
61
+ - `session_id`
62
+
63
+ ---
64
+
65
+ ### Step 2: Read COLONY_STATE.json (Authoritative Source)
66
+
67
+ Use the Read tool to read `.aether/data/COLONY_STATE.json`.
68
+
69
+ COLONY_STATE.json is the authoritative source for goal and state (session.json may be stale). Extract:
70
+ - `goal` (use this as authoritative, overriding session.json colony_goal)
71
+ - `state` (READY, PLANNING, EXECUTING, PAUSED)
72
+ - `current_phase`
73
+ - `plan.phases` (array with id, name, status for each phase)
74
+ - `plan.generated_at`
75
+ - `memory.decisions` (flat list — do NOT distinguish user vs Claude origin)
76
+ - `events` (last 5 for recent activity context)
77
+
78
+ If the file is missing or the JSON cannot be parsed, **stop immediately** and display:
79
+
80
+ ```
81
+ State file missing or corrupted.
82
+
83
+ Options:
84
+ 1. Start fresh with /ant:init "goal"
85
+ 2. Try to recover (I'll look for backup files)
86
+
87
+ What would you like to do?
88
+ ```
89
+
90
+ Do NOT proceed with stale or fabricated data.
91
+
92
+ ---
93
+
94
+ ### Step 3: Read Pheromone Signals
95
+
96
+
97
+
98
+ Run::
99
+ ```bash
100
+ bash .aether/aether-utils.sh pheromone-read all
101
+ ```
102
+
103
+ Parse the JSON result. Extract `.result.signals` array.
104
+
105
+ - If `ok` is `true` and `.result.signals` is non-empty: store signals for dashboard rendering in Step 8
106
+ - If `ok` is `true` and `.result.signals` is empty: no active pheromones (skip in dashboard)
107
+ - If the command fails or returns an error: skip silently (no pheromones active)
108
+
109
+ Note: pheromone-read applies decay calculation automatically. The `effective_strength` field reflects current signal strength after time-based decay. Signals below 0.1 effective strength are already filtered out.
110
+
111
+
112
+ ---
113
+
114
+ ### Step 4: Read CONTEXT.md
115
+
116
+ Use the Read tool to read `.aether/CONTEXT.md` if it exists.
117
+
118
+ If missing: fall back to COLONY_STATE.json for narrative context. Note: "Context document not found — reconstructing from state."
119
+
120
+ ---
121
+
122
+ ### Step 5: Drift Detection
123
+
124
+ Extract `baseline_commit` from the session.json data read in Step 1.
125
+
126
+ ```bash
127
+ current_commit=$(git rev-parse HEAD 2>/dev/null || echo "")
128
+ ```
129
+
130
+ If `baseline_commit` is non-empty and differs from `current_commit`:
131
+
132
+ ```bash
133
+ commit_count=$(git rev-list --count "$baseline_commit..HEAD" 2>/dev/null || echo "0")
134
+ changed_count=$(git diff --stat "$baseline_commit" HEAD 2>/dev/null | tail -1 | grep -oE '[0-9]+ file' | grep -oE '[0-9]+' || echo "0")
135
+ ```
136
+
137
+ Store `drift_detected=true`, `commit_count`, `changed_count` for dashboard rendering.
138
+
139
+ If `baseline_commit` is empty or matches `current_commit`: set `drift_detected=false`.
140
+
141
+ Restore identically regardless of time elapsed — no warnings about session age.
142
+
143
+ ---
144
+
145
+ ### Step 6: Compute Workflow Position and Next-Step Guidance
146
+
147
+ Compute `suggested_next` dynamically from COLONY_STATE.json data. Do not use the static value from session.json.
148
+
149
+ Use this decision tree:
150
+
151
+ ```
152
+ Case 1 — No plan created yet:
153
+ Check: plan.phases is empty AND plan.generated_at is null
154
+ recommended = "/ant:plan"
155
+ reason = "No plan created yet"
156
+ alternatives = ["/ant:colonize — analyze codebase first"]
157
+
158
+ Case 2 — Plan ready, first phase not started:
159
+ Check: plan.phases is not empty AND state == "READY" AND current_phase == 0
160
+ recommended = "/ant:build 1"
161
+ reason = "Plan ready, first phase not started"
162
+ alternatives = ["/ant:plan — review or regenerate plan"]
163
+
164
+ Case 3 — Build in progress:
165
+ Check: state == "EXECUTING"
166
+ recommended = "/ant:continue"
167
+ reason = "Build in progress"
168
+ alternatives = ["/ant:build {current_phase} — rebuild current phase", "/ant:flags — check for blockers"]
169
+
170
+ Case 4 — Phase complete, next phase available:
171
+ Check: state == "READY" AND current_phase > 0 AND current_phase < plan.phases.length
172
+ next = current_phase + 1
173
+ recommended = "/ant:build {next}"
174
+ reason = "Phase {current_phase} complete, ready for next"
175
+ alternatives = ["/ant:plan — regenerate plan", "/ant:phase {next} — preview next phase"]
176
+
177
+ Case 5 — All phases complete:
178
+ Check: state == "READY" AND current_phase > 0 AND current_phase >= plan.phases.length
179
+ recommended = "/ant:seal"
180
+ reason = "All phases complete"
181
+ alternatives = ["/ant:status — view final state"]
182
+
183
+ Case 6 — Colony paused:
184
+ Check: state == "PAUSED"
185
+ recommended = "/ant:resume-colony"
186
+ reason = "Colony is paused"
187
+ alternatives = ["/ant:status — check state first"]
188
+
189
+ Default:
190
+ recommended = "/ant:status"
191
+ reason = "Check colony status"
192
+ alternatives = []
193
+ ```
194
+
195
+ ---
196
+
197
+ ### Step 7: Workflow-Step Blocking (Early-Return Guards)
198
+
199
+ Run these guards BEFORE rendering the dashboard. If a blocking condition is detected, output the block message and STOP. Do not render the dashboard. Do not offer alternative commands.
200
+
201
+ **BLOCK CONDITION 1: No plan exists**
202
+
203
+ Check: plan.phases is empty AND plan.generated_at is null
204
+
205
+ Output and STOP:
206
+
207
+ ```
208
+ BLOCKED: No plan exists yet.
209
+ Required: Run /ant:plan to create a build plan.
210
+ Goal: {goal}
211
+ ```
212
+
213
+ Stop here — do not continue to Step 8 or render the dashboard.
214
+
215
+ ---
216
+
217
+ **BLOCK CONDITION 2: Plan attempted but failed**
218
+
219
+ Check: plan.phases is empty AND plan.generated_at is not null
220
+
221
+ Output and STOP:
222
+
223
+ ```
224
+ BLOCKED: Plan was attempted but has no phases.
225
+ Required: Run /ant:plan to regenerate the plan.
226
+ Goal: {goal}
227
+ ```
228
+
229
+ Stop here — do not continue to Step 8 or render the dashboard.
230
+
231
+ ---
232
+
233
+ **BLOCK CONDITION 3: Build interrupted**
234
+
235
+ Check: state == "EXECUTING" AND the last 3 events show no recent build activity
236
+
237
+ Output and STOP:
238
+
239
+ ```
240
+ BLOCKED: Build may have been interrupted.
241
+ Required: Run /ant:continue to check and advance.
242
+ Goal: {goal}
243
+ ```
244
+
245
+ Stop here — do not continue to Step 8 or render the dashboard.
246
+
247
+ ---
248
+
249
+ ### Step 8: Render Dashboard
250
+
251
+ Lead with the next-step recommendation. Context follows underneath ("straight to action" ordering).
252
+
253
+ ```
254
+
255
+ ═══════════════════════════════════════════════════
256
+ RESUME SESSION
257
+
258
+ Next: {recommended}
259
+ {reason}
260
+ {if alternatives exist:}
261
+ Also: {alternatives, comma-separated}
262
+ {end}
263
+
264
+ {if drift_detected:}
265
+ Note: Codebase changed since last session ({commit_count} commit(s), {changed_count} file(s) modified)
266
+ {end}
267
+
268
+ Goal: {goal}
269
+ State: {state}
270
+ Phase: {current_phase}/{total_phases}
271
+
272
+ Phase Progress:
273
+ {for each phase in plan.phases:}
274
+ [{status_icon}] Phase {id}: {name}
275
+ {end}
276
+ ```
277
+
278
+ Status icons:
279
+ - completed: `v` (checkmark)
280
+ - in_progress: `~` (tilde)
281
+ - pending: ` ` (space)
282
+
283
+ ```
284
+ {if memory.decisions is not empty:}
285
+ Recent Decisions:
286
+ {for each of the last 5 decisions:}
287
+ - {decision text}
288
+ {end}
289
+ {end}
290
+
291
+ {if signals array from Step 3 is not empty:}
292
+ Active Signals:
293
+
294
+
295
+ {for each signal in signals:}
296
+ {signal.type}: "{signal.content}" [{signal.effective_strength * 100 | floor}%]
297
+ {end}
298
+
299
+ {end}
300
+ ```
301
+
302
+ ---
303
+
304
+ ### Step 8.5: Display Memory Health (Secondary)
305
+
306
+ Run::
307
+ ```bash
308
+ bash .aether/aether-utils.sh resume-dashboard
309
+ ```
310
+
311
+ Extract memory_health from the JSON result:
312
+ - wisdom_count
313
+ - pending_promotions
314
+ - recent_failures
315
+
316
+ Display after the main dashboard:
317
+ ```
318
+ 📊 Memory Health
319
+ Wisdom: {wisdom_count} entries | Pending: {pending_promotions} promotions | Failures: {recent_failures} recent
320
+
321
+ Run /ant:memory-details for full breakdown
322
+ ```
323
+
324
+ If all counts are 0, show:
325
+ ```
326
+ 📊 Memory Health
327
+ No accumulated wisdom yet. Complete phases to build colony memory.
328
+ ```
329
+
330
+ Last Command: {last_command}
331
+ Session: {session_id}
332
+ ```
333
+
334
+ ---
335
+
336
+ ### Step 9: Mark Session Resumed
337
+
338
+ Run::
339
+ ```bash
340
+ bash .aether/aether-utils.sh session-mark-resumed
341
+ ```
342
+
343
+ ### Step 10: Next Up
344
+
345
+ Generate the state-based Next Up block by Run::
346
+ ```bash
347
+ state=$(jq -r '.state // "IDLE"' .aether/data/COLONY_STATE.json)
348
+ current_phase=$(jq -r '.current_phase // 0' .aether/data/COLONY_STATE.json)
349
+ total_phases=$(jq -r '.plan.phases | length' .aether/data/COLONY_STATE.json)
350
+ bash .aether/aether-utils.sh print-next-up "$state" "$current_phase" "$total_phases"
351
+ ```
352
+
353
+ ---
354
+
355
+ ## Error Handling Reference
356
+
357
+ | Condition | Response |
358
+ |-----------|----------|
359
+ | session.json missing (exists=false) | "No previous session found" — offer /ant:init and /ant:status |
360
+ | COLONY_STATE.json missing or corrupted | Pause, ask user: start fresh or recover |
361
+
362
+
363
+ | pheromone-read fails | Skip silently (no pheromones) |
364
+
365
+ | CONTEXT.md missing | Fall back to COLONY_STATE.json narrative |
366
+ | No plan phases, no generated_at | BLOCK — redirect to /ant:plan |
367
+ | Plan attempted but no phases | BLOCK — redirect to /ant:plan |
368
+ | State EXECUTING, events show no activity | BLOCK — redirect to /ant:continue |
369
+ | baseline_commit matches current HEAD | No drift warning shown |
370
+ | baseline_commit differs from current HEAD | Show informational drift note |
371
+
372
+ ---
373
+
374
+ ## Key Constraints
375
+
376
+
377
+
378
+ - Use Read tool for COLONY_STATE.json (not bash cat/jq). Use Bash tool for pheromone-read (applies decay calculation).
379
+
380
+ - Use Bash tool only for aether-utils.sh commands and git commands
381
+ - Handle ALL missing/corrupted file cases gracefully
382
+ - Time-agnostic: restore identically regardless of how long ago the session was
383
+ - Decisions shown as flat list — no user vs Claude distinction
384
+ - Blocking guards run BEFORE dashboard rendering (early-return pattern)
385
+ - Drift detection is informational only — not alarming, not a blocker