@bongos/core 1.24.79 → 1.24.81

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 (413) hide show
  1. package/.bongos-core.json +554 -394
  2. package/.claude/skills/ask-for-help/SKILL.md +1 -1
  3. package/.claude/skills/builder-sequence/SKILL.md +1 -1
  4. package/.claude/skills/design/SKILL.md +1 -1
  5. package/.claude/skills/goal-create/SKILL.md +1 -1
  6. package/.claude/skills/planning-session/SKILL.md +1 -1
  7. package/clients/bongos-client/README.md +1 -1
  8. package/clients/bongos-client/bongos-client.global.js +8 -0
  9. package/clients/bongos-client/index.cjs +8 -0
  10. package/clients/bongos-client/index.d.ts +11 -0
  11. package/clients/bongos-client/index.mjs +8 -0
  12. package/docs/adr/0274-one-kernel-three-role-packs.md +2 -2
  13. package/docs/adr/0399-the-visor-is-glass-over-the-scene-and-owns-no-camera.md +91 -0
  14. package/docs/adr/0400-a-chain-reserves-work-and-each-sub-quest-is-still-claimed-alone.md +109 -0
  15. package/docs/adr/0401-one-options-menu-opens-every-settings-screen-in-a-frame.md +53 -0
  16. package/docs/adr/0402-helm-is-the-halls-look-and-the-hall-is-dark-only.md +142 -0
  17. package/docs/adr/README.md +4 -0
  18. package/docs/api/openapi.json +195 -3
  19. package/docs/api-reference.md +8 -4
  20. package/docs/architecture.md +7 -3
  21. package/docs/copy-inventory.md +393 -378
  22. package/docs/copy-registry.json +722 -578
  23. package/docs/design/characters/character-sprites-source.webp +0 -0
  24. package/docs/file-map.md +7 -8
  25. package/docs/module-api-changelog.md +4 -0
  26. package/docs/modules-contract.md +5 -0
  27. package/docs/onboarding/slash-commands.md +1 -1
  28. package/docs/packs/{engineer.md → artisan.md} +5 -5
  29. package/docs/packs/artist.md +50 -4
  30. package/docs/page-inventory.json +16 -7
  31. package/docs/page-readings.json +3184 -3338
  32. package/docs/{packs/ideator.md → recipes/ideation-playbook.md} +5 -48
  33. package/migrations/core_296_crafts_artisan_artist.sql +72 -0
  34. package/migrations/core_297_builder_character.sql +30 -0
  35. package/modules/copy-desk/proposals.js +1 -1
  36. package/modules/economy/credits-by-craft.js +29 -15
  37. package/modules/hall-ui/public/ai-studio.html +6 -4
  38. package/modules/hall-ui/public/ai-studio.states.json +1 -0
  39. package/modules/hall-ui/public/atlas.html +5 -5
  40. package/modules/hall-ui/public/atlas.js +3 -1
  41. package/modules/hall-ui/public/atlas.states.json +1 -0
  42. package/modules/hall-ui/public/blockers.html +5 -5
  43. package/modules/hall-ui/public/board-room.html +4 -4
  44. package/modules/hall-ui/public/board-room.states.json +1 -0
  45. package/modules/hall-ui/public/characters/artisan.png +0 -0
  46. package/modules/hall-ui/public/characters/artist.png +0 -0
  47. package/modules/hall-ui/public/characters/patron.png +0 -0
  48. package/modules/hall-ui/public/city.css +3 -4
  49. package/modules/hall-ui/public/city.html +9 -9
  50. package/modules/hall-ui/public/city.js +17 -56
  51. package/modules/hall-ui/public/city.states.json +7 -32
  52. package/modules/hall-ui/public/collab.html +4 -4
  53. package/modules/hall-ui/public/collab.states.json +1 -0
  54. package/modules/hall-ui/public/commands.html +4 -4
  55. package/modules/hall-ui/public/commands.states.json +1 -0
  56. package/modules/hall-ui/public/controls.css +63 -11
  57. package/modules/hall-ui/public/copy-desk.html +4 -4
  58. package/modules/hall-ui/public/copy-desk.states.json +1 -0
  59. package/modules/hall-ui/public/craft-mode.js +258 -64
  60. package/modules/hall-ui/public/deploy.html +4 -4
  61. package/modules/hall-ui/public/deploy.states.json +1 -0
  62. package/modules/hall-ui/public/diagram-viewer.js +2 -1
  63. package/modules/hall-ui/public/dom-utils.js +1 -1
  64. package/modules/hall-ui/public/goal-map.html +9 -6
  65. package/modules/hall-ui/public/goals.html +5 -5
  66. package/modules/hall-ui/public/goals.states.json +1 -0
  67. package/modules/hall-ui/public/government.html +4 -4
  68. package/modules/hall-ui/public/government.states.json +1 -0
  69. package/modules/hall-ui/public/hall-render.js +3 -1
  70. package/modules/hall-ui/public/home-city-draw.js +3 -3
  71. package/modules/hall-ui/public/home-city.css +4 -0
  72. package/modules/hall-ui/public/home-city.js +17 -9
  73. package/modules/hall-ui/public/home-gallery.js +8 -1
  74. package/modules/hall-ui/public/home-idea-box.css +2 -2
  75. package/modules/hall-ui/public/home-idea-box.js +3 -3
  76. package/modules/hall-ui/public/idea.html +5 -5
  77. package/modules/hall-ui/public/idea.states.json +1 -0
  78. package/modules/hall-ui/public/ideas.html +5 -5
  79. package/modules/hall-ui/public/ideas.states.json +1 -0
  80. package/modules/hall-ui/public/index-founding.states.json +1 -0
  81. package/modules/hall-ui/public/index-genesis-decide.states.json +1 -0
  82. package/modules/hall-ui/public/index-genesis-demo.states.json +1 -0
  83. package/modules/hall-ui/public/index-genesis.states.json +1 -0
  84. package/modules/hall-ui/public/index.html +11 -7
  85. package/modules/hall-ui/public/index.states.json +1 -0
  86. package/modules/hall-ui/public/market-watch-item.html +4 -4
  87. package/modules/hall-ui/public/market-watch-item.states.json +1 -0
  88. package/modules/hall-ui/public/market-watch-rules.html +4 -4
  89. package/modules/hall-ui/public/market-watch-rules.states.json +1 -0
  90. package/modules/hall-ui/public/market-watch.html +6 -9
  91. package/modules/hall-ui/public/market-watch.js +22 -45
  92. package/modules/hall-ui/public/market-watch.states.json +1 -0
  93. package/modules/hall-ui/public/modules.html +4 -4
  94. package/modules/hall-ui/public/modules.states.json +1 -0
  95. package/modules/hall-ui/public/money.html +4 -4
  96. package/modules/hall-ui/public/money.states.json +1 -0
  97. package/modules/hall-ui/public/my-agents.html +4 -4
  98. package/modules/hall-ui/public/my-agents.states.json +1 -0
  99. package/modules/hall-ui/public/options-menu.js +409 -0
  100. package/modules/hall-ui/public/paintbrush.js +3 -3
  101. package/modules/hall-ui/public/palette.js +11 -13
  102. package/modules/hall-ui/public/primer.html +5 -5
  103. package/modules/hall-ui/public/primer.states.json +1 -0
  104. package/modules/hall-ui/public/profile-crafts.js +1 -1
  105. package/modules/hall-ui/public/profile-roles.js +23 -19
  106. package/modules/hall-ui/public/profile.css +1 -1
  107. package/modules/hall-ui/public/profile.html +19 -18
  108. package/modules/hall-ui/public/profile.js +19 -18
  109. package/modules/hall-ui/public/profile.states.json +5 -4
  110. package/modules/hall-ui/public/project-settings.html +4 -4
  111. package/modules/hall-ui/public/roster.html +4 -4
  112. package/modules/hall-ui/public/roster.js +3 -3
  113. package/modules/hall-ui/public/roster.states.json +1 -0
  114. package/modules/hall-ui/public/settings.css +24 -4
  115. package/modules/hall-ui/public/settings.html +21 -17
  116. package/modules/hall-ui/public/settings.js +44 -44
  117. package/modules/hall-ui/public/settings.states.json +1 -0
  118. package/modules/hall-ui/public/shell-game.css +110 -0
  119. package/modules/hall-ui/public/shell-game.js +316 -3
  120. package/modules/hall-ui/public/shell.js +15 -66
  121. package/modules/hall-ui/public/sky-interaction.js +7 -0
  122. package/modules/hall-ui/public/speciality-tools.js +1 -2
  123. package/modules/hall-ui/public/street-card.states.json +1 -0
  124. package/modules/hall-ui/public/street-inside.js +3 -4
  125. package/modules/hall-ui/public/street.css +1 -5
  126. package/modules/hall-ui/public/street.html +6 -10
  127. package/modules/hall-ui/public/street.js +8 -59
  128. package/modules/hall-ui/public/street.states.json +7 -32
  129. package/modules/hall-ui/public/studio.html +5 -5
  130. package/modules/hall-ui/public/studio.states.json +1 -0
  131. package/modules/hall-ui/public/style.css +197 -112
  132. package/modules/hall-ui/public/task-detail.js +5 -4
  133. package/modules/hall-ui/public/task.html +5 -5
  134. package/modules/hall-ui/public/task.states.json +1 -0
  135. package/modules/hall-ui/public/thinking.css +10 -0
  136. package/modules/hall-ui/public/thinking.html +9 -6
  137. package/modules/hall-ui/public/thinking.states.json +1 -0
  138. package/modules/hall-ui/public/tweak-editor.html +5 -5
  139. package/modules/hall-ui/public/tweak-editor.js +5 -1
  140. package/modules/hall-ui/public/tweak-editor.states.json +1 -0
  141. package/modules/hall-ui/public/update-pill.js +91 -2
  142. package/modules/hall-ui/public/visor.css +80 -0
  143. package/modules/hall-ui/public/visor.js +316 -0
  144. package/modules/hall-ui/public/watch-repo-invite.js +159 -0
  145. package/modules/hall-ui/public/watch.html +6 -5
  146. package/modules/hall-ui/public/watch.js +17 -2
  147. package/modules/hall-ui/public/watch.states.json +1 -0
  148. package/modules/hall-ui/public/welcome-boot.js +15 -6
  149. package/modules/hall-ui/public/work-founding.states.json +1 -0
  150. package/modules/hall-ui/public/work.html +5 -5
  151. package/modules/hall-ui/public/work.states.json +1 -0
  152. package/modules/hall-ui/records/builders-roster.md +2 -2
  153. package/modules/hall-ui/records/craft-mode.md +13 -11
  154. package/modules/hall-ui/records/game-mode.md +2 -2
  155. package/modules/hall-ui/records/governor-street.md +1 -1
  156. package/modules/hall-ui/records/home-city.md +3 -1
  157. package/modules/hall-ui/records/market-watch-settings.md +2 -0
  158. package/modules/hall-ui/records/options-menu.md +15 -0
  159. package/modules/hall-ui/records/profile-roles.md +11 -11
  160. package/modules/hall-ui/records/sky.md +3 -3
  161. package/modules/hall-ui/records/start-screen.md +25 -0
  162. package/modules/hall-ui/records/tweak-editor.md +1 -1
  163. package/modules/hall-ui/records/update-pill.md +12 -0
  164. package/modules/hall-ui/records/visor.md +23 -0
  165. package/modules/hall-ui/records/welcome-tower.md +5 -5
  166. package/modules/hall-ui/specimens/components.states.json +2 -1
  167. package/modules/ideas/ideator-stats.js +3 -1
  168. package/modules/ideas/inbox.js +2 -2
  169. package/modules/lifecycle/activity.js +1 -1
  170. package/modules/lifecycle/cascade.js +4 -4
  171. package/modules/lifecycle/goal-spec-task.js +1 -1
  172. package/modules/lifecycle/help-requests.js +19 -15
  173. package/modules/lifecycle/kickoff-checklist.js +3 -3
  174. package/modules/lifecycle/kickoff-seed.js +1 -1
  175. package/modules/lifecycle/migrations/lifecycle_021_crafts_artisan_artist.sql +29 -0
  176. package/modules/lifecycle/mingle.js +4 -4
  177. package/modules/lifecycle/page-tweak-write.js +1 -1
  178. package/modules/lifecycle/routes/task-write-routes.js +3 -1
  179. package/modules/lifecycle/routes/tasks.js +3 -3
  180. package/modules/lifecycle/ship-card.js +2 -3
  181. package/modules/lifecycle/task-classifier.js +39 -29
  182. package/modules/lifecycle/tests/cascade.mjs +7 -7
  183. package/modules/onboarding/founding-mode.js +3 -0
  184. package/modules/onboarding/genesis-home.js +21 -1
  185. package/modules/onboarding/routes/onboarding.js +2 -0
  186. package/modules/page-notes/notes.js +3 -2
  187. package/modules/page-notes/split.js +1 -1
  188. package/modules/platform-identity/craft-rollup.js +35 -7
  189. package/modules/platform-identity/migrations/platform_identity_036_crafts_artisan_artist.sql +45 -0
  190. package/modules/platform-identity/platform-identity.js +2 -2
  191. package/modules/platform-identity/routes/community-leaderboard.js +2 -1
  192. package/modules/platform-identity/routes/community-search.js +2 -1
  193. package/modules/platform-identity/routes/sso.js +2 -1
  194. package/modules/platform-identity/tests/platform-identity.mjs +6 -6
  195. package/modules/public-landing/public/community.html +3 -5
  196. package/modules/public-landing/public/index.html +1 -1
  197. package/modules/public-landing/public/projects.html +1 -1
  198. package/modules/specialities/migrations/specialities_004_crafts_artisan_artist.sql +30 -0
  199. package/modules/specialities/routes/specialities.js +2 -2
  200. package/modules/status-ui/public/status.js +1 -1
  201. package/modules/ui-design/kit/fixtures/community-leaderboard.json +10 -10
  202. package/modules/ui-design/kit/fixtures/community-search.json +2 -2
  203. package/modules/ui-design/kit/fixtures/scouting-recruiter.json +1 -1
  204. package/modules/ui-design/public/brand.html +2 -2
  205. package/package-lock.json +2 -2
  206. package/package.json +1 -1
  207. package/release-notes.json +76 -0
  208. package/scripts/bongos/autobongos-loop.js +1 -1
  209. package/scripts/bongos/discipline-modes.json +7 -12
  210. package/scripts/bongos/fitness.js +1 -1
  211. package/scripts/bongos/gen-hall-sitemap.js +7 -7
  212. package/scripts/bongos/grade-smoke.js +2 -2
  213. package/scripts/bongos/init.js +2 -2
  214. package/scripts/bongos/newcomer-floor.config.json +1 -2
  215. package/scripts/bongos/newcomer-floor.js +4 -3
  216. package/scripts/bongos/newcomer-floor.templates.json +10 -12
  217. package/scripts/bongos/newcomer-floor.test.js +47 -38
  218. package/scripts/bongos/role-pack-guard.js +5 -4
  219. package/scripts/bongos/seed-tasks.example.json +3 -3
  220. package/scripts/bongos/setup.js +20 -107
  221. package/scripts/bongos/start.js +2 -2
  222. package/scripts/bongos/task.js +5 -4
  223. package/scripts/bongos/triage.js +1 -1
  224. package/scripts/bongos/worktree.js +16 -4
  225. package/scripts/hall-preview/README.md +2 -3
  226. package/scripts/setup-builder.js +6 -46
  227. package/src/bongos/auth-admission.js +8 -8
  228. package/src/bongos/craft-mode.js +2 -0
  229. package/src/bongos/db.js +39 -1
  230. package/src/bongos/github-repos.js +78 -0
  231. package/src/bongos/module-scope-map.js +22 -0
  232. package/src/bongos/role-stats.js +27 -11
  233. package/src/bongos/routes/github.js +100 -2
  234. package/src/bongos/routes/me.js +33 -0
  235. package/src/bongos/serve-internal.js +33 -11
  236. package/src/crafts.js +66 -0
  237. package/src/hall-helm.js +79 -0
  238. package/src/module-api.js +6 -1
  239. package/src/module-loader/manifest-schema.js +16 -0
  240. package/src/modules.js +2 -2
  241. package/src/role-responsibilities.js +6 -5
  242. package/tests/acclaim_feed_evidence_db.mjs +1 -1
  243. package/tests/activity_rollup_as_of.mjs +1 -1
  244. package/tests/api_alias_caller_ratchet.mjs +3 -3
  245. package/tests/application_lifecycle.mjs +1 -1
  246. package/tests/artist_review.mjs +1 -1
  247. package/tests/artist_review_goal.mjs +1 -1
  248. package/tests/blocker_hall_live_proof.mjs +1 -1
  249. package/tests/blocker_tasks_named_db.mjs +2 -2
  250. package/tests/canonical_profile_url.mjs +1 -1
  251. package/tests/cap_newcomer_tasks.mjs +13 -13
  252. package/tests/character_creation.mjs +294 -0
  253. package/tests/claim_gate_open_blocker.mjs +2 -2
  254. package/tests/claim_gate_rebase.mjs +6 -6
  255. package/tests/claude_materialize.mjs +1 -1
  256. package/tests/clawback_confirmed_backlog.mjs +3 -3
  257. package/tests/collab_page.mjs +8 -9
  258. package/tests/collab_self_settling.mjs +2 -2
  259. package/tests/community_leaderboard_route.mjs +13 -5
  260. package/tests/community_proof_db.mjs +3 -0
  261. package/tests/community_search_route.mjs +7 -6
  262. package/tests/conductor.mjs +1 -1
  263. package/tests/conductor_main_e2e.mjs +8 -8
  264. package/tests/copy_desk_flags_db.mjs +1 -1
  265. package/tests/copy_desk_page_approve.mjs +2 -2
  266. package/tests/copy_desk_page_claim.mjs +2 -2
  267. package/tests/copy_desk_page_next.mjs +1 -1
  268. package/tests/copy_desk_page_release.mjs +1 -1
  269. package/tests/copy_desk_page_submit.mjs +2 -2
  270. package/tests/core_258_box_session_claims_db.mjs +1 -1
  271. package/tests/craft_mode.mjs +48 -34
  272. package/tests/craft_mode_home.mjs +20 -20
  273. package/tests/craft_mode_looks.mjs +16 -15
  274. package/tests/craft_mode_nav.mjs +31 -29
  275. package/tests/craft_review_mode.mjs +46 -41
  276. package/tests/crafts_vocabulary.mjs +70 -0
  277. package/tests/cross_discipline_priority_direction.mjs +5 -5
  278. package/tests/design_reference.mjs +1 -1
  279. package/tests/fitness.mjs +7 -11
  280. package/tests/funded_project_pays_proof_db.mjs +1 -1
  281. package/tests/genesis_home.mjs +21 -1
  282. package/tests/github_chip.mjs +3 -3
  283. package/tests/github_repo_invite.mjs +379 -0
  284. package/tests/goal_criterion_confirm_ui.mjs +1 -1
  285. package/tests/goal_invite_consent.mjs +1 -1
  286. package/tests/goal_map_page.mjs +2 -2
  287. package/tests/goal_sort_staleness.mjs +1 -1
  288. package/tests/goal_spec_task.mjs +1 -1
  289. package/tests/goal_spec_task_db.mjs +3 -3
  290. package/tests/grade_engine.mjs +2 -2
  291. package/tests/grader_no_artifact.mjs +1 -1
  292. package/tests/grader_prompt_fencing.mjs +1 -1
  293. package/tests/grader_prompt_window_bound.mjs +1 -1
  294. package/tests/grader_reader_lens.mjs +2 -2
  295. package/tests/grader_severity_gate.mjs +1 -1
  296. package/tests/grader_unbacked_score.mjs +1 -1
  297. package/tests/hall_approval_queue.mjs +1 -1
  298. package/tests/hall_board_world.mjs +2 -2
  299. package/tests/hall_builders_page_pass.mjs +3 -2
  300. package/tests/hall_city.mjs +16 -30
  301. package/tests/hall_controls.mjs +52 -4
  302. package/tests/hall_fullscreen.mjs +27 -3
  303. package/tests/hall_helm.mjs +187 -0
  304. package/tests/hall_kit_charts.mjs +1 -1
  305. package/tests/hall_landing_boot.mjs +1 -1
  306. package/tests/hall_my_agents.mjs +16 -16
  307. package/tests/hall_nav.mjs +22 -15
  308. package/tests/hall_options_menu.mjs +247 -0
  309. package/tests/hall_oversight_world.mjs +1 -1
  310. package/tests/hall_palette.mjs +8 -9
  311. package/tests/hall_profile_world.mjs +3 -3
  312. package/tests/hall_record_world.mjs +6 -4
  313. package/tests/hall_settings_world.mjs +2 -1
  314. package/tests/hall_sitemap.mjs +6 -5
  315. package/tests/hall_start_screen.mjs +307 -0
  316. package/tests/hall_street.mjs +15 -28
  317. package/tests/hall_street_inside.mjs +17 -9
  318. package/tests/hall_studio_world.mjs +3 -3
  319. package/tests/hall_topbar_320.mjs +4 -2
  320. package/tests/hall_visor.mjs +224 -0
  321. package/tests/help_requests.mjs +47 -15
  322. package/tests/helpers.mjs +4 -4
  323. package/tests/home_city.mjs +6 -4
  324. package/tests/home_city_widget.mjs +33 -14
  325. package/tests/home_gallery_widget.mjs +4 -4
  326. package/tests/home_idea_box.mjs +6 -6
  327. package/tests/hub_community_page.mjs +3 -3
  328. package/tests/hub_craft_rollup.mjs +75 -36
  329. package/tests/hub_recent_ships.mjs +3 -2
  330. package/tests/idea_cascade.mjs +2 -2
  331. package/tests/idea_credit_streams_db.mjs +1 -1
  332. package/tests/idea_detail_page.mjs +1 -1
  333. package/tests/idea_ideate_full.mjs +5 -2
  334. package/tests/idea_spark_hall.mjs +1 -1
  335. package/tests/init.mjs +3 -3
  336. package/tests/instance_manifest.mjs +2 -2
  337. package/tests/kickoff_checklist.mjs +1 -1
  338. package/tests/leaderboard_roles.mjs +34 -25
  339. package/tests/lifecycle_claim_ladder_refs.mjs +55 -0
  340. package/tests/lightbulb.mjs +14 -10
  341. package/tests/main_discipline.mjs +8 -8
  342. package/tests/markdown_line_endings.mjs +1 -1
  343. package/tests/market_watch_pages.mjs +52 -74
  344. package/tests/me_streak_leaderboard_queries.mjs +3 -3
  345. package/tests/migration_allocation.mjs +1 -1
  346. package/tests/mingle.mjs +36 -21
  347. package/tests/module-scope-map.mjs +22 -2
  348. package/tests/module_api.mjs +1 -0
  349. package/tests/module_contributions.mjs +13 -13
  350. package/tests/module_manifest.mjs +29 -0
  351. package/tests/module_skills_hook.mjs +2 -2
  352. package/tests/modules.mjs +14 -7
  353. package/tests/nav_permission_atoms.mjs +2 -1
  354. package/tests/needs_rebase.mjs +1 -1
  355. package/tests/newcomer_restock.mjs +13 -13
  356. package/tests/page_notes_panel.mjs +22 -22
  357. package/tests/page_tweak_no_block.mjs +1 -1
  358. package/tests/paintbrush.mjs +7 -7
  359. package/tests/privacy_matrix.mjs +1 -0
  360. package/tests/profile_activity.mjs +20 -23
  361. package/tests/profile_earnings.mjs +1 -1
  362. package/tests/profile_nudge_prefs.mjs +4 -4
  363. package/tests/profile_role_headline.mjs +73 -46
  364. package/tests/profile_role_stats.mjs +55 -45
  365. package/tests/profile_rollup_consent.mjs +19 -6
  366. package/tests/profile_route.mjs +12 -12
  367. package/tests/profile_ui_cross_project.mjs +4 -4
  368. package/tests/project_invite_suggestions.mjs +2 -2
  369. package/tests/promote_goal_id.mjs +1 -1
  370. package/tests/publish_manifest.mjs +1 -1
  371. package/tests/rank_floor_wiring.mjs +1 -1
  372. package/tests/regrade_actual_minutes.mjs +1 -1
  373. package/tests/removal_proposal.mjs +2 -2
  374. package/tests/reward_gate.mjs +4 -4
  375. package/tests/reward_mode_cost_plus_only.mjs +1 -1
  376. package/tests/role_responsibilities.mjs +18 -12
  377. package/tests/role_stats_db.mjs +17 -16
  378. package/tests/scouting_rollup_fanout.mjs +5 -5
  379. package/tests/seed_tasks.mjs +5 -2
  380. package/tests/session_earnings_mirror_db.mjs +1 -1
  381. package/tests/session_reward_on_land_db.mjs +1 -1
  382. package/tests/session_reward_reconcile_db.mjs +2 -2
  383. package/tests/sessions_kit_pager.mjs +1 -1
  384. package/tests/settings_art_key_absent.mjs +2 -2
  385. package/tests/settings_main_role.mjs +21 -20
  386. package/tests/setup_flow.mjs +3 -3
  387. package/tests/setup_smoke.mjs +20 -0
  388. package/tests/ship_card.mjs +6 -6
  389. package/tests/specialities.mjs +16 -4
  390. package/tests/speciality_db_shape.mjs +6 -6
  391. package/tests/speciality_injection.mjs +17 -17
  392. package/tests/speciality_offer_ui.mjs +5 -5
  393. package/tests/speciality_offered.mjs +6 -5
  394. package/tests/speciality_session_skills.mjs +7 -7
  395. package/tests/speciality_skills.mjs +11 -11
  396. package/tests/speciality_walkthrough_ui.mjs +2 -2
  397. package/tests/sso_checkin_identity_spoof.mjs +2 -1
  398. package/tests/task_classifier_vocab.mjs +10 -0
  399. package/tests/task_cli.mjs +11 -3
  400. package/tests/task_criteria_unlink_db.mjs +2 -2
  401. package/tests/task_discipline_required.mjs +38 -16
  402. package/tests/task_goal_required.mjs +4 -4
  403. package/tests/task_needs_db.mjs +1 -1
  404. package/tests/tweak_replaces_artist_review.mjs +1 -1
  405. package/tests/update_pill.mjs +153 -2
  406. package/tests/upkeep_home.mjs +1 -1
  407. package/tests/v3_c1_options_proof.mjs +145 -0
  408. package/tests/visual_review.mjs +3 -3
  409. package/tests/watch_applications_queue.mjs +8 -5
  410. package/tests/watch_sealed_floor.mjs +3 -1
  411. package/tests/welcome_boot.mjs +12 -9
  412. package/tests/welcome_boot_browser.mjs +13 -13
  413. package/tests/worktree_helper.mjs +16 -1
package/docs/file-map.md CHANGED
@@ -55,10 +55,9 @@
55
55
  │ ├── handoff-template.md ← session-end template + Definition of Done
56
56
  │ ├── module-api-changelog.md ← the `CORE_VERSION` release ledger for the published doorway (ADR 0203, task 1003335). MOVED here out of src/module-api.js: the ADR 0161 CI carrier appends an entry on every release and pushes straight to main, which grew that .js file past the 1500-line oversized-file ratchet and turned `unit` red for main and every open PR. Markdown is exempt from the .js line budget. Written by scripts/bongos/bump-version.js (entries oldest-first, each inserted above the closing divider); the CORE_VERSION literal itself stays in src/module-api.js
57
57
  │ ├── google-chat-broadcast.md ← team-chat integration plan
58
- │ ├── packs/ ← the ROLE PACKS (task 1002990, criterion wa6-kernel-and-packs): the root CLAUDE.md is now a role-neutral KERNEL and each craft's operating playbook lives here. Bound to a discipline by scripts/bongos/discipline-modes.json (the role registry), printed by claim.js, and budgeted by scripts/bongos/role-pack-guard.js — which HARD-FAILS CI if a registry entry names a pack that isn't in the tree, because claim.js's own read fails open and would hide it. Replaces the deleted /dev, /ideate and /paint skills. Governor is deferred: three packs, not four
59
- │ │ ├── engineer.md ← code, infra, Bongos itself: the understand → scoped-change → verify → ship loop, the working rules, the session protocol, the daily cadence
60
- │ │ ├── artist.md ← how the project looks and reads: show-first, as little interpretation as possible, arrive precalculated — a place an artist wants to be, not a form
61
- │ │ └── ideator.md ← Claude as sounding board, not author: quick ideas stay one line, then the offer to develop one into a Full Idea (five questions drawn out of the conversation, scored on completeness). Contract pinned by tests/idea_ideate_full.mjs
58
+ │ ├── packs/ ← the ROLE PACKS (task 1002990, criterion wa6-kernel-and-packs): the root CLAUDE.md is now a role-neutral KERNEL and each craft's operating playbook lives here. Bound to a discipline by scripts/bongos/discipline-modes.json (the role registry), printed by claim.js, and budgeted by scripts/bongos/role-pack-guard.js — which HARD-FAILS CI if a registry entry names a pack that isn't in the tree, because claim.js's own read fails open and would hide it. Replaces the deleted /dev, /ideate and /paint skills. Two packs since task 1005141 (engineer became artisan, the ideator folded into the artist); Patron is identity, not a task craft, and has none
59
+ │ │ ├── artisan.md ← code, infra, Bongos itself: the understand → scoped-change → verify → ship loop, the working rules, the session protocol, the daily cadence
60
+ │ │ └── artist.md ← how the project looks and reads, AND its ideas: show-first, as little interpretation as possible, arrive precalculated — a place an artist wants to be, not a form. Its ideas half (Claude as sounding board, not author: quick ideas stay one line, then the offer to develop one into a Full Idea) keeps its detail in docs/recipes/ideation-playbook.md. Contract pinned by tests/idea_ideate_full.mjs, which reads both
62
61
  │ ├── pms-v1-deploy.md ← step-by-step runbook to deploy PMS-V1 + status subdomain
63
62
  │ ├── recipes/ ← long-form operational guides (formerly learnings/) — Postgres, Caddy, the pixel-art pipeline, etc.
64
63
  │ │ ├── README.md
@@ -127,7 +126,7 @@
127
126
  │ ├── character-anim/ ← consistent-character generative animation (ADR 0088) — graded painterly frame sets + manifest (its otb-character-review skill is the pixel-art module's since task 1004470). CLAUDE.md, module.json.
128
127
  │ ├── provisioning/ ← stands up + operates a Cloud Bongos instance's own infra (server/DB/domain/DNS/TLS) via the API (ADR 0111); web-tier request+state only, no cloud tokens — a separate control-plane runner drains the intents. Distinct from the `hosting` module (ADR 0092), which brokers compute workloads. CLAUDE.md, module.json.
129
128
  │ ├── government/ ← CORE-DOMAIN module (ADR 0151 / BV1 goal 1000030, renamed governance→government by ADR 0174, default-on): Discord-style configurable ranks + permissions. The PERMISSION is the atomic authority unit and the four ranks (xenos/thetes/metic/archon) are the positions in the government; the module owns the code-defined permission catalog — each key flagged `system` (trust-boundary), `substrate` (enforced out of band) or operational (delegable) — plus the compatibility seed that reproduces the old rank thresholds exactly. ADR 0016 is preserved: authority is still resolved server-side, per request, uncached. The word `role` is deliberately absent — it is reserved for the crafts. CLAUDE.md, module.json, catalog.js, ranks.js, resolver.js, config.js, db.js, board.js + board-membership.js + membership-predicate.js, session-scopes.{js,json}, protected-surfaces.json, routes/ (government + rank-sync), pollers/ (board-expiry), migrations/.
130
- │ ├── specialities/ ← CORE-DOMAIN module (task 1003855 / ADR 0296, default-on): role SUB-SPECIALITIES — a named bundle of knowledge, skills and an interaction contract sitting UNDER a craft. A craft says HOW you work (engineer/ideator/artist/ui); a speciality says WHAT you work on, and how a subject-matter expert wants to be engaged inside it. Deliberately thin over three surfaces that already exist — discipline-modes.json for craft→playbook, behavior_prefs.interaction for the per-session contract (a speciality contract rides the SAME GET /me → Conductor path rather than adding a second one), and the ADR 0083 manifest for declared skills; the only new machinery is the knowledge bundle. Training is two-fold: documents the builder supplied, plus learnings captured from sessions worked in the speciality (pointing at existing `learnings` rows, never a second corpus). Owned per-builder OR per-project, each carrying its owner's sharing decision (private/project/public) and a sellable flag that records INTENT only — ADR 0107 defers the marketplace, so there is nothing to list on. CLAUDE.md, module.json, specialities.js, db.js, routes/, migrations/.
129
+ │ ├── specialities/ ← CORE-DOMAIN module (task 1003855 / ADR 0296, default-on): role SUB-SPECIALITIES — a named bundle of knowledge, skills and an interaction contract sitting UNDER a craft. A craft says HOW you work (artisan/artist/ui); a speciality says WHAT you work on, and how a subject-matter expert wants to be engaged inside it. Deliberately thin over three surfaces that already exist — discipline-modes.json for craft→playbook, behavior_prefs.interaction for the per-session contract (a speciality contract rides the SAME GET /me → Conductor path rather than adding a second one), and the ADR 0083 manifest for declared skills; the only new machinery is the knowledge bundle. Training is two-fold: documents the builder supplied, plus learnings captured from sessions worked in the speciality (pointing at existing `learnings` rows, never a second corpus). Owned per-builder OR per-project, each carrying its owner's sharing decision (private/project/public) and a sellable flag that records INTENT only — ADR 0107 defers the marketplace, so there is nothing to list on. CLAUDE.md, module.json, specialities.js, db.js, routes/, migrations/.
131
130
  │ ├── agents/ ← declarative agent registry (BV1 goal 1000038 Phase 1) — the one module that ships `default:false`, so shipped is not enabled and an instance opts in per ADR 0083. `.claude/agents/*.md` are reconciled at deploy into `agents_definitions` plus the per-fire `agents_runs` ledger; files-are-source (an instance-authored DB row is never clobbered), and `author_rank` is stamped from the author's LIVE DB rank because a committed file cannot grant authority (ADR 0016). Spawns consume the EXISTING read-only `grade` port, so v1 agents are observe-and-report only — no write principals — and every fire bills through the shared LLM cost cache. `spend.requiresPayer` (task 1003884): a fire spends real money for whoever called it, so the core REFUSES to enable the module on an instance whose join door is `open` with no payer configured — an account created seconds ago would otherwise spend the instance's money with nobody to bill. lib/spend-ceiling.js is the per-payer monthly ceiling, failing closed when it is exhausted OR unreadable; lib/fire-budget.js is the separate RATE ceiling. CLAUDE.md, module.json, spawn.js, lib/, routes/, pollers/ (event-router), migrations/.
132
131
  │ └── demo/ ← BV1.R52 acceptance-proof module: one rank-gated write route + one namespaced migration proving the loader mounts a scaffolded module with zero core edits. CLAUDE.md, module.json.
133
132
  │
@@ -151,7 +150,7 @@
151
150
  │ │ ├── setup.js ← one-time GitHub Device Flow → ~/.config/otb/gds-session.json
152
151
  │ │ ├── start.js ← list claimable tasks + active claims (`/builder-start`)
153
152
  │ │ ├── claim.js ← atomic POST /api/bongos/claims (`/builder-claim`); runs the worktree-per-claim guard (worktree-claim-guard.js) BEFORE the session check and the POST; prints the claim-time context pack incl. next-free ADR/migration numbers (V4.R26); printRoleLine() prints the claimed craft's one role line from discipline-modes.json and lands a ui claim's module-owned skills (the full pack pointer is injected by the Conductor from GET /me, task 1002992)
154
- │ │ ├── discipline-modes.json ← the ROLE REGISTRY read by claim.js: engineer/artist/ideator → their role pack under docs/packs/, module-contributed ui → the /design skill; absence of an entry = the default build-and-ship loop, fail-open at claim time — but scripts/bongos/role-pack-guard.js hard-fails CI if an entry names a pack that is not in the tree ([#1267](https://example.com/builders#/task/1267))
153
+ │ │ ├── discipline-modes.json ← the ROLE REGISTRY read by claim.js: artisan/artist → their role pack under docs/packs/, module-contributed ui → the /design skill; absence of an entry = the default build-and-ship loop, fail-open at claim time — but scripts/bongos/role-pack-guard.js hard-fails CI if an entry names a pack that is not in the tree ([#1267](https://example.com/builders#/task/1267))
155
154
  │ │ ├── next-number.js ← deterministic next-free ADR + migration number from origin/main ∪ local working tree; supersedes the drift-prone claim-time DB counter (V4.R26, [#964](https://example.com/builders#/task/964)). `node scripts/bongos/next-number.js [--json]`
156
155
  │ │ ├── gen-repo-map.js ← Path B (ADR 0063, [#1224](https://example.com/builders#/task/1224)): zero-dep, deterministic symbol-skeleton generator → docs/repo-map.md + the generated factual block in each nested CLAUDE.md; ranks exported symbols by reference frequency. `--check` = CI gate; regenerated on deploy by ship.js regenerateRepoMap()
157
156
  │ │ ├── gen-file-map.js ← ADR 0066 ([#1276](https://example.com/builders#/task/1276)): generates the `.claude/skills/` + `.claude/scheduled-tasks/` sections of docs/file-map.md from disk; per-entry notes come from docs/file-map.notes.json; `--check` fails on drift OR a skill/routine with no note (CI gate via fitness.js); regenerated on deploy by ship.js regenerateFileMap()
@@ -202,7 +201,7 @@
202
201
  │ │ ├── architect-audit.js ← MAS Phase 5 (ADR 0024): the Architect's bounded first-principles `--scope`/`--paths` audit CLI → `docs/audits/`
203
202
  │ │ ├── module.js ← `bongos module new <key>` scaffolder + module CLI utilities (ADR 0083)
204
203
  │ │ ├── upgrade.js ← `bongos upgrade` — bump the installed `@bongos/core` package version with doorway/coreVersion pre-checks (ADR 0108)
205
- │ │ └── newcomer-floor.js ← deterministic on-claim replenisher for the evergreen newcomer chores (engineer/artist/ideator floor); no cron, restocks when one is claimed (task 1168)
204
+ │ │ └── newcomer-floor.js ← deterministic on-claim replenisher for the evergreen newcomer chores (artisan/artist floor); no cron, restocks when one is claimed (task 1168)
206
205
  │ └── gds/ ← @bongos-forwarder files only: one generated forwarder per executable at its old path, so installed units, cron and older hooks keep working (warns once; removed by task 1003706)
207
206
  │
208
207
  ├── src/
@@ -210,7 +209,7 @@
210
209
  │ ├── branding.js ← the branding contract resolver (env → config/branding.json → branding.neutral.json); single source for instance-identity strings + the configurable track set + db.database (ADR 0062 §3)
211
210
  │ ├── modules.js ← back-compat facade over src/module-loader/loader.js; stable exports: isModuleEnabled/enabledModules/enabledDisciplines/clientModules/resolveModules; vanilla=all off (ADR 0062 §4; ADR 0083; docs/modules-contract.md)
212
211
  │ ├── module-api.js ← THE PUBLISHED, SEMVER'D DOORWAY (ADR 0083): the ONLY core file a module may `require`. Re-exports kernel capabilities (auth gates, pool, db helpers, branding, seams, logger, CORE_VERSION). MINOR bump = additive export; MAJOR = breaking change; `bongos upgrade` pre-checks. The release ledger is NOT here — it moved to docs/module-api-changelog.md (ADR 0203); only the `const CORE_VERSION` literal lives in this file.
213
- │ ├── role-responsibilities.js ← the ONE source of each craft's written responsibility — the owner's verbatim sentences (fixed 2026-09-08, criterion `wa6-written-responsibilities`; task 1003732, ADR 0275). Three consumers and no second copy: the hall profile via clientModules() → window.__MODULES__, the grader via the module-api doorway, and the role packs via a GENERATED block (scripts/bongos/gen-role-responsibilities.js, freshness gated by role-pack-guard.js). A KERNEL_FILES entry (modules.js reads it) and exempt from the no-module-keys scan, because the ideator's statement contains the English word "ideas". Do not paraphrase the statements
212
+ │ ├── role-responsibilities.js ← the ONE source of each craft's written responsibility — the owner's verbatim sentences (fixed 2026-09-08, criterion `wa6-written-responsibilities`; task 1003732, ADR 0275). Three consumers and no second copy: the hall profile via clientModules() → window.__MODULES__, the grader via the module-api doorway, and the role packs via a GENERATED block (scripts/bongos/gen-role-responsibilities.js, freshness gated by role-pack-guard.js). A KERNEL_FILES entry (modules.js reads it) and exempt from the no-module-keys scan, because the artist's statement (the ideator's until task 1005141) contains the English word "ideas". Do not paraphrase the statements
214
213
  │ ├── module-seams.js ← kernel seam registry (ADR 0083 / design 04§1): PORTS (registerProvider/resolve/resolveOptional — single-provider required capabilities) + EVENTS (emit/on — optional reactions, isolated errors). Modules cooperate through here, never by importing each other. Re-exported through module-api.js.
215
214
  │ ├── module-loader/ ← the loader that makes `modules/<key>/` discoverable (BV1.R38–R41)
216
215
  │ │ ├── loader.js ← discover modules/*/module.json → validate manifest → coreVersion-check → enabled-filter → mount routes behind kernel auth → start pollers. <redacted> on empty modules/. Used by modules.js + routes.js.
@@ -3408,5 +3408,9 @@ is load-bearing: the script throws rather than guess if it is missing, and
3408
3408
  landed since 1.24.77 with no explicit bump. run 42746012589. (task 1002620)
3409
3409
  1.24.79 — CI auto-patch (publish-on-merge, ADR 0161): carrier for merges
3410
3410
  landed since 1.24.78 with no explicit bump. run 42747422335. (task 1002620)
3411
+ 1.24.80 — CI auto-patch (publish-on-merge, ADR 0161): carrier for merges
3412
+ landed since 1.24.79 with no explicit bump. run 43023445418. (task 1002620)
3413
+ 1.24.81 — CI auto-patch (publish-on-merge, ADR 0161): carrier for merges
3414
+ landed since 1.24.80 with no explicit bump. run 43072055060. (task 1002620)
3411
3415
  ---------------------------------------------------------------------------
3412
3416
  ```
@@ -83,6 +83,7 @@ Every module must have a `module.json` at its root (`modules/<key>/module.json`)
83
83
  // what update, rollout channels and re-assessment name (task 1003781).
84
84
  "coreVersion": "^1.4.0", // REQUIRED. semver range of CORE_VERSION this module supports.
85
85
  "default": false, // OPTIONAL (default false). Fail-safe when no config names it.
86
+ "language": "javascript", // OPTIONAL (default "javascript"). What the code is written in — see below.
86
87
  "category": { "parent": "communication", "sub": "team-chat" }, // OPTIONAL. Where it is browsed (ADR 0342):
87
88
  // parent is one of the eight; sub is an approved sub-category, absent while pending.
88
89
  "author": "…", // OPTIONAL. Attribution (ADR 0107 §2) — portable, not a cross-Bongos FK.
@@ -122,6 +123,10 @@ Every module must have a `module.json` at its root (`modules/<key>/module.json`)
122
123
 
123
124
  An unknown key throws at validate time — typos fail loud (top-level attribution fields have no closed allowlist; only `contributes` sub-keys do).
124
125
 
126
+ ### `language` — what the module's code is written in (task 1004794)
127
+
128
+ Optional; a manifest without it is a JavaScript module, which is every module today. The value must be one of `MODULE_LANGUAGES` in `src/module-loader/manifest-schema.js`, a closed list that holds only languages the core can actually run — currently just `"javascript"`. Anything else (`"python"`, a typo) fails validation, so the loader refuses the module with the reason instead of loading it as JavaScript. How a module written in another language runs beside Bongos is its own decision (task 1004797); that work adds its language to the list.
129
+
125
130
  ### `category` — where a module is browsed and compared ([ADR 0342](adr/0342-module-categories-are-eight-parents-with-approved-sub-categories.md))
126
131
 
127
132
  `"category": { "parent": "<key>", "sub": "<key>" }`. `parent` is one of eight fixed keys, and any
@@ -32,7 +32,7 @@ The four steps of `/owner-review` still answer to their old names — `/backlog-
32
32
 
33
33
  ### Discipline modes — not slash commands any more
34
34
 
35
- The three core crafts no longer have a slash command. `/dev`, `/paint` and `/ideate` were **deleted** when the root instructions split into a role-neutral kernel (`CLAUDE.md`) plus one **role pack** per craft: `docs/packs/engineer.md`, `docs/packs/artist.md`, `docs/packs/ideator.md`. A claimed task's discipline routes you to your pack — the Conductor injects its path into your session on the next prompt, and `claim.js` prints a one-line reminder — and you read it. A module-contributed discipline can still ship a skill, which is how `ui` → `/design` works.
35
+ The three core crafts no longer have a slash command. `/dev`, `/paint` and `/ideate` were **deleted** when the root instructions split into a role-neutral kernel (`CLAUDE.md`) plus one **role pack** per craft: `docs/packs/artisan.md` and `docs/packs/artist.md` (the ideator's pack folded into the artist's in task 1005141). A claimed task's discipline routes you to your pack — the Conductor injects its path into your session on the next prompt, and `claim.js` prints a one-line reminder — and you read it. A module-contributed discipline can still ship a skill, which is how `ui` → `/design` works.
36
36
 
37
37
  ### Commands that come with a module
38
38
 
@@ -1,8 +1,8 @@
1
- # Engineer pack
1
+ # Artisan pack
2
2
 
3
- > **The role pack for `discipline = engineer`.** The kernel ([`CLAUDE.md`](../../CLAUDE.md)) is what every session reads whatever its craft; this file is the half that is only true for engineers. Read it once at the top of an engineering session. Registered in [`scripts/bongos/discipline-modes.json`](../../scripts/bongos/discipline-modes.json); the Conductor injects this pointer into a session holding a claim of this craft (task 1002992).
3
+ > **The role pack for `discipline = artisan`** (the craft once called engineer; renamed for the game conversion, task 1005141). The kernel ([`CLAUDE.md`](../../CLAUDE.md)) is what every session reads whatever its craft; this file is the half that is only true for artisans. Read it once at the top of an engineering session. Registered in [`scripts/bongos/discipline-modes.json`](../../scripts/bongos/discipline-modes.json); the Conductor injects this pointer into a session holding a claim of this craft (task 1002992).
4
4
 
5
- Engineering is the project's **default loop**, so this pack introduces no new dynamic — its job is to make the standard explicit and keep you on it. Lean on it hardest when you are new here or running autonomously. (The Ideator pack flips *who drives*; the Artist pack flips *the medium*. This one is the baseline they invert from.)
5
+ Engineering is the project's **default loop**, so this pack introduces no new dynamic — its job is to make the standard explicit and keep you on it. Lean on it hardest when you are new here or running autonomously. (The Artist pack flips *the medium*, and its ideas half flips *who drives*. This one is the baseline they invert from.)
6
6
 
7
7
  ---
8
8
 
@@ -115,7 +115,7 @@ Subagent spawns via the `Agent` tool MUST set the `model` parameter explicitly
115
115
  <!-- BEGIN GENERATED ROLE RESPONSIBILITY (scripts/bongos/gen-role-responsibilities.js — do not hand-edit) -->
116
116
  ## What this craft is answerable for
117
117
 
118
- > Running and optimizing the running of Claude nonstop, and ensuring Ideators and Artists can continue to interface with that system effectively.
118
+ > Running and optimizing the running of Claude nonstop, and ensuring Artists can continue to interface with that system effectively.
119
119
 
120
- *The engineer's written responsibility — one source (`src/role-responsibilities.js`), shown on the hall profile, taught here, and referenced by the grader. Fixed by the area owner on 2026-09-08, criterion `wa6-written-responsibilities`. Generated: do not hand-edit, and do not paraphrase it elsewhere.*
120
+ *The artisan's written responsibility — one source (`src/role-responsibilities.js`), shown on the hall profile, taught here, and referenced by the grader. Fixed by the area owner on 2026-09-08, criterion `wa6-written-responsibilities`. Generated: do not hand-edit, and do not paraphrase it elsewhere.*
121
121
  <!-- END GENERATED ROLE RESPONSIBILITY -->
@@ -1,8 +1,8 @@
1
1
  # Artist pack
2
2
 
3
- > **The role pack for `discipline = artist`.** The kernel ([`CLAUDE.md`](../../CLAUDE.md)) is what every session reads whatever its craft; this file is the half that is only true for artists. Read the whole thing before acting — it changes how you *communicate* for the rest of the session. Registered in [`scripts/bongos/discipline-modes.json`](../../scripts/bongos/discipline-modes.json); the Conductor injects this pointer into a session holding a claim of this craft (task 1002992).
3
+ > **The role pack for `discipline = artist`** — since task 1005141 (BONGOS-V3) the artist craft holds two halves: how the project looks and reads (part one), and its ideas (part two, once the ideas half of this pack). The kernel ([`CLAUDE.md`](../../CLAUDE.md)) is what every session reads whatever its craft; this file is the half that is only true for artists. Read the whole thing before acting — it changes how you *communicate* for the rest of the session. Registered in [`scripts/bongos/discipline-modes.json`](../../scripts/bongos/discipline-modes.json); the Conductor injects this pointer into a session holding a claim of this craft (task 1002992).
4
4
 
5
- An art session is not the engineer's text-heavy build loop. The artist's subject is how the project **looks and reads** — its visuals, its copy, its voice, the feeling of the thing. A craft is an identity, not a toolchain ([ADR 0272](../adr/0272-a-craft-is-an-identity-not-a-toolchain.md)): an instance has artists whether or not it ships an art pipeline.
5
+ An art session is not the artisan's text-heavy build loop. The artist's subject is how the project **looks and reads** — its visuals, its copy, its voice, the feeling of the thing. A craft is an identity, not a toolchain ([ADR 0272](../adr/0272-a-craft-is-an-identity-not-a-toolchain.md)): an instance has artists whether or not it ships an art pipeline.
6
6
 
7
7
  ---
8
8
 
@@ -19,7 +19,7 @@ The artist's whole loop is one page in the hall, **`/builders/studio`**: Tweak M
19
19
 
20
20
  The studio's own words (the greeting and its sub-line) are the studio page itself: clicking them offers to take `builders:studio`, and then they type over them where they stand.
21
21
 
22
- **The editor: `/builders/tweak-editor?page=<id>`.** Every line of the page, in page order, on one sheet of paper, typed over in place and **autosaved**. A changed line keeps a faint "was:". A line marked "changes this on every page" is shared shell text; one marked "goes to an engineer" cannot be placed in the code, so submitting files it as an engineer task and the page does not wait for it. The top bar holds:
22
+ **The editor: `/builders/tweak-editor?page=<id>`.** Every line of the page, in page order, on one sheet of paper, typed over in place and **autosaved**. A changed line keeps a faint "was:". A line marked "changes this on every page" is shared shell text; one marked "goes to an artisan" cannot be placed in the code, so submitting files it as an artisan task and the page does not wait for it. The top bar holds:
23
23
 
24
24
  - **open the page ↗** — the live page in a new tab, to read it in place;
25
25
  - **download .docx / upload .docx** — work offline in Word, then upload; it merges into the draft, never straight to the site. Keep the paragraphs as they are: added, dropped or reordered lines are refused by name, and a page that changed since the download asks for a fresh one;
@@ -101,7 +101,53 @@ When the artist reacts — "too saturated", "that reads as modern" — don't jus
101
101
  <!-- BEGIN GENERATED ROLE RESPONSIBILITY (scripts/bongos/gen-role-responsibilities.js — do not hand-edit) -->
102
102
  ## What this craft is answerable for
103
103
 
104
- > No slop in the appearance and text of the project; the story, emotion and ideology of the project are communicated effectively; project purpose and gravitas are upheld.
104
+ > No slop in the appearance and text of the project; the story, emotion and ideology of the project are communicated effectively; project purpose and gravitas are upheld. Make good ideas; be a philosopher / thought leader for the project; enable Artisans to scope and Artists to create with maximum efficiency — a baseline for creating scopes of work.
105
105
 
106
106
  *The artist's written responsibility — one source (`src/role-responsibilities.js`), shown on the hall profile, taught here, and referenced by the grader. Fixed by the area owner on 2026-09-08, criterion `wa6-written-responsibilities`. Generated: do not hand-edit, and do not paraphrase it elsewhere.*
107
107
  <!-- END GENERATED ROLE RESPONSIBILITY -->
108
+
109
+ ---
110
+
111
+ ## Part two — ideas (the ideator craft, folded in)
112
+
113
+ > Ideation needs no claim. This half was the Ideator pack until the game conversion made one Artist character of the two crafts (task 1005141). Everything below applies whenever the work is an idea rather than a surface.
114
+
115
+ An ideation session is not the build-and-ship loop, and **it needs no claim**. "I'm just exploring" is a first-class state: an artist should never need a chore checked out to start thinking.
116
+
117
+ ---
118
+
119
+ ### The first rule: you are the instrument, not the author
120
+
121
+ In every other craft, Claude does the work and asks the human to approve it. **Here it is inverted.** The artist is the creative driver; you are the sounding board, the research arm, and the devil's advocate they reach for. Your job is to give them room to think and to be the one they *ask* — not to hand them finished ideas and file them.
122
+
123
+ - **Do not dump a batch of ideas.** Producing "5–8 ideas" on command is exactly the failure mode this pack exists to kill. Volume is not the goal; a developed, pressure-tested idea is.
124
+ - **Provoke, don't conclude.** Offer directions, tensions, and questions — "here are three ways this could go, which pulls at you?", "what's the version of this that scares you?", "here's why this might be a bad idea, talk me out of it." Let the human choose the thread.
125
+ - **Do the legwork they ask for, on demand.** Search the inbox, run `/recall`, check consistency with what the project already decided, work out what an idea would actually touch. They should never have to do the digging.
126
+ - **The human decides what gets filed.** You only capture an idea once they have blessed it. The conversation is the product; the filed idea is its residue.
127
+
128
+ ### Step 0 — is a human here?
129
+
130
+ - A normal interactive session (they are typing to you, you can ask and get an answer) → **interactive mode**.
131
+ - An autonomous, bypass-permissions, or scheduled run where no one will answer → **autonomous mode**.
132
+
133
+ If unsure, ask once: *"Are you here to ideate with me, or should I run this autonomously?"* If no answer comes, treat it as autonomous.
134
+
135
+ ### The two grades, and the question between them
136
+
137
+ An idea is filed at one of two grades, and **the step between them is a question you ask, never an assumption you make.**
138
+
139
+ #### A quick idea stays one line
140
+
141
+ A quick idea is a spark: one line of substance and nothing more. Do not pad it, do not "develop it up" into paragraphs, do not attach a plan. Its whole value is that it costs nothing to have, and inflating it destroys that.
142
+
143
+ **After a quick idea is filed, ask — every time — whether they want to develop it into a Full Idea.** One short question, then take their answer. "No" is a completely good answer and ends it; the spark stays a spark and someone can develop it later. Never develop one silently because it seemed promising.
144
+
145
+ ### The rest of the ideas playbook
146
+
147
+ The detail lives in [`docs/recipes/ideation-playbook.md`](../recipes/ideation-playbook.md) — **read it before you file, develop or score an idea**: being quiet about the machinery (report outcomes, not tool calls), loading the ground first (`/recall`, the inbox, the sky), the five Full Idea questions in the artist's own words, the one filing route (`capture.js`, the same route the hall form uses), threads bigger than one idea, someone else's spark, and autonomous mode's divergence-and-critique loop.
148
+
149
+ ### Trust boundary — filing is open, triage is not
150
+
151
+ Filing into the inbox is open to **any** authenticated builder, Xenos included. **Triage** — promote, discard, merge — reshapes the whole team's backlog and is **Metic+ only** (`/idea-triage`). So in this pack you *file*; you never verdict. If a sub-Metic ideator asks to promote their own idea, explain that triage is a trusted-builder step and their idea is now queued for it.
152
+
153
+ ---
@@ -13,7 +13,7 @@
13
13
  "pages": 45,
14
14
  "surfaces": 3,
15
15
  "with_states": 39,
16
- "states": 369
16
+ "states": 367
17
17
  },
18
18
  "surfaces": [
19
19
  {
@@ -205,6 +205,7 @@
205
205
  "files": [
206
206
  "modules/hall-ui/public/city.html",
207
207
  "modules/hall-ui/public/style.css",
208
+ "modules/hall-ui/public/visor.css",
208
209
  "modules/hall-ui/public/city.css",
209
210
  "modules/hall-ui/public/street-deck.css",
210
211
  "modules/hall-ui/public/dom-utils.js",
@@ -213,6 +214,7 @@
213
214
  "modules/hall-ui/public/craft-mode.js",
214
215
  "modules/hall-ui/public/shell.js",
215
216
  "modules/hall-ui/public/hall-dialog.js",
217
+ "modules/hall-ui/public/visor.js",
216
218
  "modules/hall-ui/public/palette.js",
217
219
  "modules/hall-ui/public/gov-living.js",
218
220
  "modules/hall-ui/public/gov-feeds.js",
@@ -233,7 +235,6 @@
233
235
  "states": [
234
236
  "city",
235
237
  "fullscreen",
236
- "switched",
237
238
  "focus",
238
239
  "pins",
239
240
  "living",
@@ -394,6 +395,7 @@
394
395
  "files": [
395
396
  "modules/hall-ui/public/goal-map.html",
396
397
  "modules/hall-ui/public/style.css",
398
+ "modules/hall-ui/public/visor.css",
397
399
  "modules/hall-ui/public/thinking.css",
398
400
  "modules/hall-ui/public/dom-utils.js",
399
401
  "modules/hall-ui/public/shell-game.js",
@@ -401,6 +403,7 @@
401
403
  "modules/hall-ui/public/craft-mode.js",
402
404
  "modules/hall-ui/public/shell.js",
403
405
  "modules/hall-ui/public/hall-dialog.js",
406
+ "modules/hall-ui/public/visor.js",
404
407
  "modules/hall-ui/public/palette.js",
405
408
  "modules/hall-ui/public/idea-objects.js",
406
409
  "modules/hall-ui/public/criterion-uat-ui.js",
@@ -537,7 +540,9 @@
537
540
  "files": [
538
541
  "modules/hall-ui/public/index.html",
539
542
  "modules/hall-ui/public/style.css",
543
+ "modules/hall-ui/public/visor.css",
540
544
  "modules/hall-ui/public/welcome-boot.css",
545
+ "modules/hall-ui/public/shell-game.css",
541
546
  "modules/hall-ui/public/hall-ask.css",
542
547
  "modules/hall-ui/public/home-city.css",
543
548
  "modules/hall-ui/public/home-gallery.css",
@@ -551,6 +556,7 @@
551
556
  "modules/hall-ui/public/craft-mode.js",
552
557
  "modules/hall-ui/public/shell.js",
553
558
  "modules/hall-ui/public/hall-dialog.js",
559
+ "modules/hall-ui/public/visor.js",
554
560
  "modules/hall-ui/public/palette.js",
555
561
  "modules/hall-ui/public/hall-visual.js",
556
562
  "modules/hall-ui/public/hall-kit.js",
@@ -966,10 +972,10 @@
966
972
  "activity",
967
973
  "yours",
968
974
  "activity-artist",
969
- "activity-ideator",
975
+ "activity-artist-ideas",
970
976
  "other",
971
977
  "artist",
972
- "ideator",
978
+ "artist-ideas",
973
979
  "out"
974
980
  ]
975
981
  },
@@ -1043,8 +1049,8 @@
1043
1049
  "module": "hall-ui",
1044
1050
  "page": "settings",
1045
1051
  "id_from": "data-page",
1046
- "title": "Settings",
1047
- "document_title": "Settings — {{worldName}}",
1052
+ "title": "Options",
1053
+ "document_title": "Options — {{worldName}}",
1048
1054
  "path": "/settings",
1049
1055
  "url": "https://builders.{apex}/settings",
1050
1056
  "files": [
@@ -1063,6 +1069,7 @@
1063
1069
  "modules/hall-ui/public/hall-kit.js",
1064
1070
  "modules/hall-ui/public/task-detail.js",
1065
1071
  "modules/hall-ui/public/settings-moved.js",
1072
+ "modules/hall-ui/public/options-menu.js",
1066
1073
  "modules/hall-ui/public/settings.js",
1067
1074
  "modules/hall-ui/public/settings-sessions.js",
1068
1075
  "modules/hall-ui/public/settings-passkeys.js",
@@ -1130,7 +1137,6 @@
1130
1137
  "street",
1131
1138
  "fullscreen",
1132
1139
  "card",
1133
- "switched",
1134
1140
  "focus",
1135
1141
  "here",
1136
1142
  "inside-rules",
@@ -1297,6 +1303,7 @@
1297
1303
  "files": [
1298
1304
  "modules/hall-ui/public/thinking.html",
1299
1305
  "modules/hall-ui/public/style.css",
1306
+ "modules/hall-ui/public/visor.css",
1300
1307
  "modules/hall-ui/public/thinking.css",
1301
1308
  "modules/hall-ui/public/dom-utils.js",
1302
1309
  "modules/hall-ui/public/shell-game.js",
@@ -1304,6 +1311,7 @@
1304
1311
  "modules/hall-ui/public/craft-mode.js",
1305
1312
  "modules/hall-ui/public/shell.js",
1306
1313
  "modules/hall-ui/public/hall-dialog.js",
1314
+ "modules/hall-ui/public/visor.js",
1307
1315
  "modules/hall-ui/public/palette.js",
1308
1316
  "modules/hall-ui/public/idea-objects.js",
1309
1317
  "modules/hall-ui/public/criterion-uat-ui.js",
@@ -1396,6 +1404,7 @@
1396
1404
  "modules/hall-ui/public/brand-apply.js",
1397
1405
  "modules/hall-ui/public/sessions.js",
1398
1406
  "modules/hall-ui/public/gate.js",
1407
+ "modules/hall-ui/public/watch-repo-invite.js",
1399
1408
  "modules/hall-ui/public/watch.js"
1400
1409
  ],
1401
1410
  "states_files": [