@bongos/core 1.21.112 → 1.21.114

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 (265) hide show
  1. package/.bongos-core.json +616 -186
  2. package/.claude/skills/ask-for-help/SKILL.md +1 -1
  3. package/.claude/skills/bongos-feedback/SKILL.md +1 -1
  4. package/.claude/skills/builder-sequence/SKILL.md +1 -1
  5. package/.claude/skills/builder-ship/SKILL.md +1 -0
  6. package/GOVERNMENT.md +128 -11
  7. package/clients/bongos-client/README.md +1 -1
  8. package/clients/bongos-client/bongos-client.global.js +28 -0
  9. package/clients/bongos-client/index.cjs +28 -0
  10. package/clients/bongos-client/index.d.ts +45 -2
  11. package/clients/bongos-client/index.mjs +28 -0
  12. package/docs/adr/0372-an-ask-is-stored-per-docket-matter-and-the-server-refuses-slop.md +33 -0
  13. package/docs/adr/0373-an-ai-session-files-a-blocker-with-an-ask.md +31 -0
  14. package/docs/adr/0374-a-building-lead-is-a-held-position-appointed-by-a-people-matter.md +30 -0
  15. package/docs/adr/0375-who-may-build-without-a-vote-comes-from-the-form-of-government.md +38 -0
  16. package/docs/adr/0376-every-ask-is-routed-to-a-real-seat-on-the-server.md +30 -0
  17. package/docs/adr/0377-governance-is-a-held-position-read-on-me.md +24 -0
  18. package/docs/adr/0378-a-leads-build-outs-are-rows-built-at-once-or-by-a-passed-vote.md +33 -0
  19. package/docs/adr/0379-the-treasury-is-pots-per-goal-a-reserve-and-borrowing-over-real-spend.md +32 -0
  20. package/docs/adr/0380-a-strictness-preset-is-a-bundle-of-laws-switched-by-one-laws-vote.md +26 -0
  21. package/docs/adr/README.md +10 -1
  22. package/docs/api/openapi.json +989 -87
  23. package/docs/api-reference.md +18 -4
  24. package/docs/copy-inventory.md +343 -262
  25. package/docs/copy-registry.json +1223 -426
  26. package/docs/file-map.md +2 -1
  27. package/docs/module-api-changelog.md +4 -0
  28. package/docs/packs/engineer.md +2 -1
  29. package/docs/page-inventory.json +91 -6
  30. package/docs/page-readings.json +5017 -4458
  31. package/modules/builder-settings/law-locks.js +202 -0
  32. package/modules/builder-settings/routes/settings.js +66 -6
  33. package/modules/builder-settings/settings.js +7 -0
  34. package/modules/discord/ship-broadcast.js +22 -13
  35. package/modules/government/asks-db.js +54 -0
  36. package/modules/government/asks.js +269 -0
  37. package/modules/government/board-idea-reads.js +68 -0
  38. package/modules/government/board.js +21 -57
  39. package/modules/government/build-rights.js +148 -0
  40. package/modules/government/buildouts.js +160 -0
  41. package/modules/government/counts.js +81 -0
  42. package/modules/government/db.js +242 -0
  43. package/modules/government/decision-board.js +234 -8
  44. package/modules/government/decision-rules.js +2 -0
  45. package/modules/government/docket.js +114 -6
  46. package/modules/government/law-board.js +131 -0
  47. package/modules/government/laws.js +241 -0
  48. package/modules/government/leads.js +170 -0
  49. package/modules/government/migrations/government_027_laws.sql +143 -0
  50. package/modules/government/migrations/government_028_asks.sql +57 -0
  51. package/modules/government/migrations/government_029_leads.sql +135 -0
  52. package/modules/government/migrations/government_030_buildouts.sql +111 -0
  53. package/modules/government/migrations/government_031_treasury.sql +107 -0
  54. package/modules/government/module.json +2 -1
  55. package/modules/government/pollers/treasury-borrow.js +62 -0
  56. package/modules/government/positions.js +107 -0
  57. package/modules/government/presets.js +149 -0
  58. package/modules/government/routes/government.js +425 -2
  59. package/modules/government/routing.js +154 -0
  60. package/modules/government/treasury-db.js +166 -0
  61. package/modules/government/treasury.js +241 -0
  62. package/modules/hall-ui/public/atlas.html +2 -2
  63. package/modules/hall-ui/public/blockers.html +2 -2
  64. package/modules/hall-ui/public/board-room.html +2 -2
  65. package/modules/hall-ui/public/board-room.js +2 -0
  66. package/modules/hall-ui/public/city-draw.js +604 -11
  67. package/modules/hall-ui/public/city.css +157 -1
  68. package/modules/hall-ui/public/city.html +37 -7
  69. package/modules/hall-ui/public/city.js +441 -21
  70. package/modules/hall-ui/public/city.states.json +110 -5
  71. package/modules/hall-ui/public/collab.html +2 -2
  72. package/modules/hall-ui/public/commands.html +2 -2
  73. package/modules/hall-ui/public/copy-desk.html +2 -2
  74. package/modules/hall-ui/public/craft-mode.js +112 -29
  75. package/modules/hall-ui/public/deploy.html +2 -2
  76. package/modules/hall-ui/public/diagram-viewer.css +12 -0
  77. package/modules/hall-ui/public/diagram-viewer.js +4 -0
  78. package/modules/hall-ui/public/diagrams.html +2 -2
  79. package/modules/hall-ui/public/drachmae.html +2 -2
  80. package/modules/hall-ui/public/fleet.html +2 -2
  81. package/modules/hall-ui/public/gate.html +2 -2
  82. package/modules/hall-ui/public/goal-map.html +2 -2
  83. package/modules/hall-ui/public/goals.html +2 -2
  84. package/modules/hall-ui/public/gov-feeds.js +141 -0
  85. package/modules/hall-ui/public/gov-living.js +1002 -0
  86. package/modules/hall-ui/public/gov-positions.js +97 -0
  87. package/modules/hall-ui/public/government.html +2 -2
  88. package/modules/hall-ui/public/hall-render.js +3 -0
  89. package/modules/hall-ui/public/idea.html +2 -2
  90. package/modules/hall-ui/public/ideas.html +2 -2
  91. package/modules/hall-ui/public/index.html +3 -3
  92. package/modules/hall-ui/public/modules.html +2 -2
  93. package/modules/hall-ui/public/my-agents.css +334 -0
  94. package/modules/hall-ui/public/my-agents.html +72 -0
  95. package/modules/hall-ui/public/my-agents.js +603 -0
  96. package/modules/hall-ui/public/my-agents.states.json +37 -0
  97. package/modules/hall-ui/public/primer.html +2 -2
  98. package/modules/hall-ui/public/profile-connections.js +40 -28
  99. package/modules/hall-ui/public/profile.html +2 -2
  100. package/modules/hall-ui/public/project-settings.html +2 -2
  101. package/modules/hall-ui/public/ranks.html +2 -2
  102. package/modules/hall-ui/public/roadmap.html +2 -2
  103. package/modules/hall-ui/public/room.css +8 -0
  104. package/modules/hall-ui/public/roster.html +2 -2
  105. package/modules/hall-ui/public/sessions.html +2 -2
  106. package/modules/hall-ui/public/settings.html +2 -2
  107. package/modules/hall-ui/public/shell.js +116 -16
  108. package/modules/hall-ui/public/street-card.js +18 -1
  109. package/modules/hall-ui/public/street-deck.css +299 -0
  110. package/modules/hall-ui/public/street-deck.js +1145 -0
  111. package/modules/hall-ui/public/street-depth.js +712 -0
  112. package/modules/hall-ui/public/street-desk.js +5 -2
  113. package/modules/hall-ui/public/street-draw.js +109 -16
  114. package/modules/hall-ui/public/street-inside.js +137 -22
  115. package/modules/hall-ui/public/street-office.js +705 -0
  116. package/modules/hall-ui/public/street.css +161 -11
  117. package/modules/hall-ui/public/street.html +41 -11
  118. package/modules/hall-ui/public/street.js +78 -66
  119. package/modules/hall-ui/public/street.states.json +129 -21
  120. package/modules/hall-ui/public/studio.html +2 -2
  121. package/modules/hall-ui/public/style.css +5 -1
  122. package/modules/hall-ui/public/task.html +2 -2
  123. package/modules/hall-ui/public/thinking.html +2 -2
  124. package/modules/hall-ui/public/tweak-editor.html +2 -2
  125. package/modules/hall-ui/public/watch.html +2 -2
  126. package/modules/hall-ui/public/watch.js +14 -1
  127. package/modules/hall-ui/public/work.html +2 -2
  128. package/modules/hall-ui/records/living-city.md +57 -0
  129. package/modules/hall-ui/records/my-agents.md +21 -0
  130. package/modules/hall-ui/records/oversight-family.md +1 -0
  131. package/modules/hall-ui/records/profile-connections.md +10 -0
  132. package/modules/hall-ui/records/reading-rooms.md +2 -0
  133. package/modules/ideas/routes/blockers.js +92 -3
  134. package/modules/lifecycle/module.json +2 -1
  135. package/modules/lifecycle/moving.js +17 -1
  136. package/modules/lifecycle/routes/moving.js +6 -0
  137. package/modules/lifecycle/routes/project-settings.js +23 -0
  138. package/modules/onboarding/approval-broadcast.js +8 -0
  139. package/modules/onboarding/routes/access-requests.js +16 -6
  140. package/modules/platform-identity/connections.js +13 -2
  141. package/modules/platform-identity/routes/connections.js +7 -1
  142. package/modules/public-landing/public/account-private.states.json +2 -2
  143. package/modules/public-landing/public/account.html +65 -5
  144. package/modules/public-landing/public/account.states.json +3 -3
  145. package/modules/public-landing/public/assets/world/r2-bongos-chrome-b.jpg.json +1 -1
  146. package/modules/public-landing/public/assets/world/r2-bongos-chrome-b.webp +0 -0
  147. package/modules/public-landing/public/assets/world/r2-bongos-chrome-b.webp.json +13 -0
  148. package/modules/public-landing/public/assets/world/r2-chrome-blob-one.jpg.json +1 -1
  149. package/modules/public-landing/public/assets/world/r2-chrome-blob-one.webp +0 -0
  150. package/modules/public-landing/public/assets/world/r2-chrome-blob-one.webp.json +13 -0
  151. package/modules/public-landing/public/assets/world/r2-chrome-blobs-set.jpg.json +1 -1
  152. package/modules/public-landing/public/assets/world/r2-chrome-blobs-set.webp +0 -0
  153. package/modules/public-landing/public/assets/world/r2-chrome-blobs-set.webp.json +13 -0
  154. package/modules/public-landing/public/assets/world.css +4 -4
  155. package/modules/public-landing/public/connections-empty.states.json +14 -0
  156. package/modules/public-landing/public/connections-inactive.states.json +14 -0
  157. package/modules/public-landing/public/connections.html +450 -0
  158. package/modules/public-landing/public/connections.probes.json +414 -0
  159. package/modules/public-landing/public/connections.states.json +17 -0
  160. package/modules/public-landing/public/contact.html +2 -2
  161. package/modules/public-landing/public/guild.html +2 -2
  162. package/modules/public-landing/public/index.html +2 -2
  163. package/modules/public-landing/public/invitations.html +2 -2
  164. package/modules/public-landing/public/privacy.html +2 -2
  165. package/modules/public-landing/public/projects.html +2 -2
  166. package/modules/public-landing/public/projects.probes.json +6 -2
  167. package/modules/public-landing/public/terms.html +2 -2
  168. package/modules/ui-design/kit/fixtures/connections-empty.json +12 -0
  169. package/modules/ui-design/kit/fixtures/connections-inactive.json +7 -0
  170. package/modules/ui-design/kit/fixtures/connections.json +22 -0
  171. package/modules/ui-design/kit/serve.js +95 -0
  172. package/package-lock.json +2 -2
  173. package/package.json +1 -1
  174. package/release-notes.json +128 -0
  175. package/scripts/discord/README.md +8 -5
  176. package/scripts/discord/post.js +12 -1
  177. package/scripts/gds/artifact-audit.js +20 -3
  178. package/scripts/gds/ask.js +164 -0
  179. package/scripts/gds/autobongos-run.js +20 -5
  180. package/scripts/gds/autobongos-tweak-lane.js +262 -0
  181. package/scripts/gds/autobongos-verify.js +21 -2
  182. package/scripts/gds/claim.js +2 -0
  183. package/scripts/gds/government-walk.js +638 -4
  184. package/scripts/gds/pulse.js +9 -6
  185. package/scripts/gds/ship-escalation.js +22 -3
  186. package/scripts/gds/ship-finish.js +5 -4
  187. package/scripts/gds/ship-merge-gate.js +18 -6
  188. package/scripts/gds/tweak-halt.js +1 -0
  189. package/scripts/hall-preview/README.md +41 -1
  190. package/scripts/hall-preview/pref-writes.js +140 -0
  191. package/scripts/hall-preview/refresh-fixtures.js +101 -7
  192. package/scripts/hall-preview/scrub-identity.js +366 -7
  193. package/scripts/hall-preview/server.js +27 -1
  194. package/scripts/render-diagrams.sh +4 -2
  195. package/src/bongos/auth-idp.js +6 -1
  196. package/src/bongos/project-settings.js +41 -0
  197. package/src/bongos/route-rank-check.js +27 -0
  198. package/src/bongos/routes/me.js +68 -7
  199. package/src/bongos/serve-internal.js +5 -1
  200. package/src/module-api.js +7 -1
  201. package/src/platform-server.js +10 -0
  202. package/tests/application_lifecycle.mjs +47 -5
  203. package/tests/autobongos_tweak_lane.mjs +208 -0
  204. package/tests/conductor_main_e2e.mjs +21 -0
  205. package/tests/connections_api.mjs +18 -0
  206. package/tests/craft_mode_nav.mjs +5 -3
  207. package/tests/craft_mode_tallies.mjs +52 -16
  208. package/tests/discord_approvals.mjs +11 -0
  209. package/tests/discord_channels.mjs +20 -0
  210. package/tests/fixtures/gov-seated.mjs +64 -0
  211. package/tests/fixtures/government-ask-cards.json +1284 -0
  212. package/tests/government_act_alone_buildings.mjs +1 -0
  213. package/tests/government_agent_asks.mjs +322 -0
  214. package/tests/government_asks.mjs +408 -0
  215. package/tests/government_build_rights.mjs +253 -0
  216. package/tests/government_buildouts.mjs +382 -0
  217. package/tests/government_counts.mjs +143 -0
  218. package/tests/government_decision_rules.mjs +5 -1
  219. package/tests/government_laws.mjs +488 -0
  220. package/tests/government_laws_session.mjs +321 -0
  221. package/tests/government_leads.mjs +375 -0
  222. package/tests/government_positions.mjs +127 -0
  223. package/tests/government_presets.mjs +215 -0
  224. package/tests/government_routes.mjs +8 -1
  225. package/tests/government_routing.mjs +118 -0
  226. package/tests/government_seed.mjs +5 -0
  227. package/tests/government_treasury.mjs +394 -0
  228. package/tests/governor_docket.mjs +26 -2
  229. package/tests/hall_buildouts.mjs +208 -0
  230. package/tests/hall_city.mjs +14 -6
  231. package/tests/hall_city_living.mjs +617 -0
  232. package/tests/hall_gov_counts.mjs +336 -0
  233. package/tests/hall_gov_living.mjs +636 -0
  234. package/tests/hall_gov_real_site.mjs +655 -0
  235. package/tests/hall_matter_card.mjs +6 -1
  236. package/tests/hall_my_agents.mjs +481 -0
  237. package/tests/hall_nav.mjs +107 -4
  238. package/tests/hall_page_gate_map.mjs +4 -0
  239. package/tests/hall_preview_governor_fixtures.mjs +30 -3
  240. package/tests/hall_preview_scrub.mjs +59 -1
  241. package/tests/hall_preview_security.mjs +169 -0
  242. package/tests/hall_reading_world.mjs +44 -0
  243. package/tests/hall_roster_world.mjs +6 -2
  244. package/tests/hall_street.mjs +18 -2
  245. package/tests/hall_street_amend.mjs +1 -1
  246. package/tests/hall_street_deck.mjs +609 -0
  247. package/tests/hall_street_depth.mjs +559 -0
  248. package/tests/hall_street_desk.mjs +1 -1
  249. package/tests/hall_street_inside.mjs +29 -5
  250. package/tests/hall_tweak_editor.mjs +4 -1
  251. package/tests/hub_account_page.mjs +94 -3
  252. package/tests/hub_connections_page.mjs +507 -0
  253. package/tests/hub_invite_badge.mjs +1 -1
  254. package/tests/idp_device_exchange.mjs +18 -0
  255. package/tests/landing_legal_pages.mjs +8 -5
  256. package/tests/landing_page.mjs +23 -4
  257. package/tests/nav_permission_atoms.mjs +4 -1
  258. package/tests/profile_connections_ui.mjs +88 -25
  259. package/tests/projects_hub.mjs +15 -0
  260. package/tests/render_check.mjs +2 -2
  261. package/tests/ship_broadcast_routing.mjs +57 -16
  262. package/tests/ship_broadcast_server.mjs +40 -7
  263. package/tests/ship_merge_gate.mjs +19 -0
  264. package/tests/ui_design_kit.mjs +2 -2
  265. package/tests/watch_applications_queue.mjs +23 -0
@@ -42,7 +42,7 @@ They are **complementary, not alternatives.** An owner-only task (a credential r
42
42
 
43
43
  2. **Attach at most one context.** `task_id` **or** `goal_id`, never both (400 `two_contexts`). Neither is allowed — a general "who knows about X" has no context row.
44
44
 
45
- 3. **Write `what_is_stuck` so it is answerable without this session** (≤ 4000 chars). The recipient has none of your context. Cover:
45
+ 3. **Open `what_is_stuck` with the ask, then the detail.** The first lines are the card as `node scripts/gds/ask.js check <file>` prints it — one question, two or three answers, your pick, who it waits on, what happens if nobody answers — so the person can answer at a glance (agents ask like humans, task 1004704). Below it, write the detail so it is answerable without this session (≤ 4000 chars in all). The recipient has none of your context. Cover:
46
46
  - what is stuck, in plain words;
47
47
  - why it needs *this* person (rank, access, a call only they can make) — being asked without a reason reads as work being dumped;
48
48
  - the concrete steps, so the ask is actionable rather than a summons;
@@ -14,7 +14,7 @@ Sends a note about Bongos — the tool — straight to its maintainers (tasks 10
14
14
 
15
15
  **When.** File when the builder (a) labels it — "Bongos feedback: …", "tell the Bongos team" — that **is** the go; (b) wishes — "Bongos should…" (**Suggestions count**: send with `--idea`, even if you also fix it in their project); or (c) vents that Bongos is broken — **File it without being asked**, don't argue them out of it. Only about **Bongos itself** (a `bongos`/`/builder-*` command, claim, ship, grade, deploy, upgrade, hall, Settings, sign-in, credits, how it organises work). Not their own project's code, Claude, their laptop or GitHub, nor a rule working as designed. **One filing per distinct problem per session.**
16
16
 
17
- **Write it yourself — Never paste the rant.** First line = what went wrong (it becomes the title); then what they did, what they expected, what happened, the exact error line. No code, file contents, secrets or personal data.
17
+ **Write it yourself — Never paste the rant.** First line = what went wrong, in at most twelve words (it becomes the title); then what they did, what they expected, what happened, the exact error line. A wish (`--idea`) asks the maintainers to decide something, so it opens with the card `node scripts/gds/ask.js check <file>` prints, and the rest follows as detail (agents ask like humans, task 1004704). No code, file contents, secrets or personal data.
18
18
 
19
19
  **Send** (stdin, so nothing in the text is mangled by the shell):
20
20
 
@@ -83,7 +83,7 @@ Two more halts are yours to detect, not the script's:
83
83
  - **`ship_failed`** — the ship bounced, the grade failed, or the task did not reach `shipped`. Tell the two non-pass grade shapes apart first: **`GRADER UNAVAILABLE`** (`panel_outcome='unavailable'`) is **not a quality rejection** — the panel could not run, there is nothing to fix, and `node scripts/gds/ship.js <id> --regrade` re-runs the grade once the grader is reachable (a recoverable pause, not a halt). A genuine **`FAIL`** has findings: fix, commit, re-run `node scripts/gds/ship.js <id> --regrade`; if it still will not land, halt and report.
84
84
  - **`scope_surprise`** — the task turns out to need work outside its `touches[]`, or its premise is wrong (the thing it describes is already done, or no longer true). Do not quietly widen the scope; that is a new task.
85
85
 
86
- **On any halt:** leave the current task claimed, stop, and report — what you hit, which task, and what it needs from a human. Then say plainly what already landed. Everything shipped stays shipped; a halt costs the rest of the run, not the work done.
86
+ **On any halt:** leave the current task claimed, stop, and report — what you hit, which task, and what it needs from a human. What it needs from a human is an ask, not prose: write the card, run `node scripts/gds/ask.js check <file>`, paste what it prints (task 1004704). Then say plainly what already landed. Everything shipped stays shipped; a halt costs the rest of the run, not the work done.
87
87
 
88
88
  To inspect one task without running anything:
89
89
 
@@ -99,6 +99,7 @@ The CLI drives a **three-state lifecycle** with a subagent grader between states
99
99
  - If no visualization tool is available at all (headless / cron / a session without it), the **monospace card already printed IS the summary** — relay the `[otb-confirm]` line and stop there.
100
100
  - **Beyond that one line: do NOT add a free-form recap** of what shipped, credits, files, cost, or next steps. The card already carries all of it, and its built-in action ("Start next task" / "Land it" / "Fix & re-grade") is the next-step prompt — you don't need to restate it. This replaces the old per-ship prose summary the owner asked us to retire. (The `[otb-confirm]` line is the deliberate exception, and it is *one line* — that is what keeps the redundancy trivial when the card does paint.)
101
101
  - The ONLY thing you may add is a single **required** action the card can't express — e.g. a sandbox `🔍 REVIEW REQUIRED` URL from a review pause (see step 1), or a blocker that needs the owner. One line, then stop.
102
+ - **Something the person must decide or confirm is an ask, never a prose list** (task 1004704): write the card, run `node scripts/gds/ask.js check <file>`, and paste the card it prints — one per decision.
102
103
  - A Hero sound + Discord broadcast may still fire on a milestone (CLAUDE.md §2); that's automatic — no need to narrate it.
103
104
 
104
105
  ## Constraints
package/GOVERNMENT.md CHANGED
@@ -2,7 +2,17 @@
2
2
 
3
3
  > This is about **your project's** government. How Cloud Bongos itself is run is a different file: [`GOVERNANCE.md`](GOVERNANCE.md).
4
4
 
5
- Every project on Cloud Bongos has a government. It answers one question: when something needs deciding, who decides, and how? It's not a theme or a label on a page. It's the rules the server actually checks every time someone tries to do something, so the government you pick is the way your project gets steered. Pick it at the start, change it later by vote, and every change is on the record.
5
+ **Government is how your project steers its AI.** AI agents do the building. Your government decides what they must obey, who they ask when they're stuck, who answers for each part of the project, and how much they may spend. It's not a theme or a label on a page. It's the rules the server actually checks every time someone, or some agent, tries to do something. Pick it at the start, change it later by vote, and every change is on the record.
6
+
7
+ In one minute:
8
+
9
+ - **Laws** are the standing orders every agent reads first.
10
+ - **Asks** are how an agent asks a person for a decision: one short card, sent to the right seat.
11
+ - **Leads** answer for each of the nine buildings. The owner answers for any building without one.
12
+ - **The treasury** gives goals a monthly pot and lends from a reserve when one runs dry.
13
+ - **Votes** change all of the above. Nothing else can.
14
+
15
+ What you see in the hall is the real state of your project, never a sample. A new project's city shows the owner on every building, nothing built and no laws, because that's the truth until you vote otherwise.
6
16
 
7
17
  A few words you'll see a lot:
8
18
 
@@ -55,19 +65,19 @@ Honest note: the clock is built, but the walk below doesn't test a clock running
55
65
 
56
66
  ### Who decides in each building
57
67
 
58
- Your project's decisions are split into nine **buildings**, one per kind of decision. You'll find them on the street in the hall (`/street`).
68
+ Your project's decisions are split into nine **buildings**, one per kind of decision. You'll find them in the city (`/city`) and on the street (`/street`) in the hall.
59
69
 
60
70
  | Building | What it covers | Who decides as today |
61
71
  |---|---|---|
62
72
  | **Charter** | The government itself | Always the board, under the rules in force |
63
73
  | **Rules** | Project settings (when work counts as stale, ship mode) and editing work categories | Whoever may change project settings |
64
74
  | **Disputes** | Security reports: confirm, dispute, mark fixed | Whoever may judge reports |
65
- | **People** | Giving and taking custom ranks, access requests, invites | Whoever may manage ranks |
75
+ | **People** | Giving and taking custom ranks, access requests, invites, appointing Leads | Whoever may manage ranks |
66
76
  | **Planning** | Creating and ordering goals, new work categories, the focus version | Whoever may create goals |
67
77
  | **Automation** | Unattended building (AI agents working with nobody watching): on or off, which goals, priority, pausing a runner | Whoever may switch it on and off |
68
78
  | **Review** | Marking a goal's done-when check as met or not met | Whoever may mark work as meeting its checks |
69
79
  | **Release** | Clearing a PR's gate, override requests, putting a new version live, releases and deploys | Whoever may put a release live |
70
- | **Treasury** | Builders' monthly spending limits | Whoever may set spending limits |
80
+ | **Treasury** | Builders' monthly spending limits, goal pots and borrowing from the reserve, and the project's optional spend cap | Whoever may set spending limits |
71
81
 
72
82
  Every building except the Charter is in one of three states:
73
83
 
@@ -83,11 +93,13 @@ This is the part that matters. A passed vote doesn't just get recorded, it **doe
83
93
 
84
94
  | Building | What a passed vote carries out |
85
95
  |---|---|
86
- | **People** | Gives someone a custom rank, or takes it away |
96
+ | **Charter** | Changes the government, passes or repeals laws, switches the strictness preset |
97
+ | **People** | Gives someone a custom rank or takes it away; appoints, replaces or removes a Lead |
87
98
  | **Automation** | Switches unattended building on or off, or allows a goal to be built unattended |
88
99
  | **Release** | Approves an override request, or clears the gate on a PR |
89
100
  | **Review** | Signs off a done-when check |
90
101
  | **Treasury** | Sets a builder's monthly spending limit |
102
+ | **Any building** | Puts up a build-out that your form of government sends to a vote |
91
103
 
92
104
  Two more things the walk proved: a returned vote changes nothing, and someone the building doesn't seat can't vote on its matters.
93
105
 
@@ -97,7 +109,7 @@ At **Rules, Disputes and Planning** a vote stops people acting alone, but a pass
97
109
 
98
110
  **1. When you found the project.** Every project is born a Monarchy. At the decide step of founding you pick your form. That pick is filed as your first amendment, and your one yes as founder ratifies it. After that, the five founding stages (scope, strategize, charter, legalize, legislation) are each closed by a vote of the government you picked. Pick a Timocratic Republic and you can't close a stage alone: your trusted builders have to say yes too. A stage with unfinished tasks can't be put to a vote at all. Once all five pass the project comes alive, still governed by your pick.
99
111
 
100
- **2. Any time after: the Charter building.** Open the Charter on the street and hit "change how this works". The forms are one tap each. A Foundation needs its council rank first, and the forms that aren't ready yet are shown as later. Or pick who decides and how by hand. Add a reason and file it. That's an amendment, and your current government votes on it.
112
+ **2. Any time after: the Charter building.** Open the Charter and hit "change how this works". The forms are one tap each. A Foundation needs its council rank first, and the forms that aren't ready yet are shown as later. Or pick who decides and how by hand. Add a reason and file it. That's an amendment, and your current government votes on it.
101
113
 
102
114
  **3. Any building, the same way.** "Change how this works" on any building drafts a change to who decides there.
103
115
 
@@ -110,6 +122,104 @@ The rules every amendment follows:
110
122
  - If your change would take away your own vote, it stops and asks you to confirm first.
111
123
  - Every attempt, passed or returned, stays on the record.
112
124
 
125
+ ## Laws: the standing orders every AI agent obeys
126
+
127
+ A **law** is a short, one-line rule that every AI agent on your project follows, like "Stuck? Note it, skip it, keep going" or "Ask like a human". It can say in one more line what it means for an agent, and it can **lock** a personal setting it overrides (fix it to one value, or cap it).
128
+
129
+ - **Only a vote makes or ends a law.** Propose laws to pass, laws to repeal, or both at once. That's an amendment your current government votes on. A passed sitting writes the laws; a returned one changes nothing. The database refuses any law a passed vote didn't write.
130
+ - **On the record.** Each law keeps the vote that passed it, who proposed it, who said yes, and when. A repealed law stays on the record too.
131
+ - **Every agent reads them first.** The laws in force go into every AI session on your project, ahead of anyone's own settings. The server writes the words and the session gets them as they are, so nobody's local files can change or drop them. Pass or repeal a law and the next session reads the new book.
132
+
133
+ Your project starts with **no laws**. The first ones are yours to pass.
134
+
135
+ ### How strict: a preset
136
+
137
+ Instead of passing laws one by one, pick a **strictness preset**, a ready set of laws:
138
+
139
+ | Preset | What it means for your agents |
140
+ |---|---|
141
+ | **Open workshop** | One law: agents land their work; going live waits for a person. |
142
+ | **Guild** | The standard set: that, plus "stuck? note it and move on", and agents stay on the task. |
143
+ | **Factory** | Strict: agents never wander off the task, every model slot has a cap, every question is a short card, and nothing runs unattended. |
144
+
145
+ Switching presets is one vote. It passes the preset's laws, repeals the other presets' laws, and leaves any law you wrote yourself alone. Which preset you run is simply whatever your laws in force add up to. My agents and the Charter preview what each preset would lock before you put it to a vote. (Factory's "nothing runs unattended" is words agents read; it doesn't switch unattended building off by itself yet.)
146
+
147
+ ## Your agents and the project's agents
148
+
149
+ Each builder steers their own agents from **My agents** (under You in the hall): how technical replies are, how long, how far an agent may wander from its task, which model runs, and a few more. Every row is a real setting your agents obey.
150
+
151
+ The project's laws sit above that. If a law fixes or caps one of your settings, that's what your agents use, even if you'd chosen something else before the law passed. My agents shows the row locked and names the law, and won't save a value the law doesn't allow. **The project always wins.**
152
+
153
+ It works the other way too. If you've found a setting that works, **Make it a law** on My agents puts it to a vote, so every agent on the project follows it.
154
+
155
+ ## Asks: how an agent asks you something
156
+
157
+ When an agent needs a person to decide, it doesn't send a wall of text. It sends an **ask**: one card in a fixed shape.
158
+
159
+ - a question of twelve words or fewer
160
+ - two or three answers you can tap, each with one line saying what happens
161
+ - which one it would pick, and why
162
+ - who it's waiting on
163
+ - what happens if nobody answers
164
+
165
+ The server checks every ask and **refuses slop** (too long, no real choice, no fallback), naming each thing to fix. An AI session that files a blocker (work stuck on a person) without a proper ask is turned away, so nothing reaches you that you can't decide in one tap. Blocker cards answer with "go ahead", "need more" or "not now".
166
+
167
+ ### Who an ask goes to
168
+
169
+ Every ask is sent to a **seat**, not a person: a building's Lead, a building's board, or the owner. The server works out who holds that seat right now. A building without a Lead sends its asks to the owner.
170
+
171
+ - **To do** is what waits on you. It's the main number in the hall: "4 to do".
172
+ - **Wait on others** is what you're waiting on someone else for.
173
+ - **Pass it on.** If an ask waiting on you belongs with someone else, pass it on. It moves word for word. Only the person it waits on can pass it, and a board vote can't be passed.
174
+ - **Nobody answers?** An overdue ask settles the way its card said it would.
175
+
176
+ You answer asks one at a time on the **decision deck** (`/street#deck`): tap 1, 2 or 3, skip, or pass it on.
177
+
178
+ ## Leads: who answers for each building
179
+
180
+ Each of the nine buildings can have a **Lead**: one person in charge of it, with a one-line charter saying what they answer for, like "Goals, priorities and the order of work."
181
+
182
+ - **Appointed by vote.** A Lead is appointed, replaced or removed by a People vote, and nothing else. If People has a sitting of its own, that sitting decides; if not, your current government does.
183
+ - **On the building.** The city and the street show each Lead on their building. A building with no Lead shows the owner.
184
+ - **The owner answers for the rest.** A building with no Lead falls to the owner (every Archon on the project).
185
+ - **On the record.** Each appointment keeps the vote that made it, and when it ended. The database refuses a Lead a People vote didn't appoint.
186
+
187
+ Your project starts with no Leads, so every building starts with the owner. Being a Lead routes that building's asks to you and lets you build it out (below). It gives no other powers, and the charter is just words.
188
+
189
+ ## Governing is a position you hold
190
+
191
+ Governing isn't a craft you pick. It's a **seat you hold**: the owner, a building's Lead, a seat on a building's own sitting, or a place on the board. The server works out your seats on every request. If you hold one, the hall shows the City, the Board Room and the Government tabs, and names you by it ("Planning Lead"). If you hold none, those tabs are hidden. Hiding a tab is only tidiness: what you may actually do is still checked by the server every time.
192
+
193
+ ## Who may build without a vote
194
+
195
+ Whoever holds a building (its Lead, or the owner when it has none) can build it out: a committee room, a new floor, an annex, or growing it into a district of its own. Whether that goes up at once or goes to a vote depends on your **form of government**, never on the Lead or their charter.
196
+
197
+ | Form | A committee room, a new floor or an annex |
198
+ |---|---|
199
+ | **Monarchy / BDFL** | Goes up at once. The founder decides alone, and whoever holds a building acts for them in it. |
200
+ | **Timocratic Republic** | Goes up at once if the person holding the building sits on the board. If not, the board votes. |
201
+ | **Direct Democracy** | A vote. Every builder decides changes together. |
202
+ | **Foundation** | A vote. The council of trustees decides changes. |
203
+ | **Custom** | A vote. Settings that match no named form grant nothing beyond what they say. |
204
+
205
+ Three things come before the form:
206
+
207
+ - **A district is always a vote.** It's a new part of the city, not a change inside one building.
208
+ - **A building nobody holds builds nothing.**
209
+ - **A building with its own sitting follows that sitting.** A group that decides alone or on the first yes lets its members build at once; any other rule puts it to that group as a vote.
210
+
211
+ Inside a building, the holder sees **BUILD OUT** in the Lead's office, and each choice says whether it builds now or goes to a vote. Built at once, the city shows scaffolding and a crane for a day, then the new part stands. Sent to a vote, it shows as a dashed outline with the vote's count over it, and the vote card carries a picture of the building with the change drawn in, so the board votes on a picture. Everything built stays on the record: what it is, who asked, and the vote or rule that allowed it.
212
+
213
+ ## The treasury
214
+
215
+ The project's AI spend is its treasury. There is **no spend limit**. A project can switch on a spend cap (a project setting, off by default), but today it only reports going over; it doesn't stop work.
216
+
217
+ - **Pots.** Whoever answers for the Treasury (its Lead, or the owner) can give a goal a **pot**: a budget for the month. A pot's spending is the project's real spend on that goal's work this month.
218
+ - **The reserve.** Last month's real spend that no pot was given, less what it has lent.
219
+ - **Borrowing.** When a pot runs dry, it asks to borrow from the reserve: an ask card (lend it all, lend half, or say no) waiting on the Treasury. Saying no never stops work; the overspend shows as debt.
220
+
221
+ Nothing here moves real money.
222
+
113
223
  ## What can never be changed, and why
114
224
 
115
225
  Some things no vote can move, and that's on purpose.
@@ -117,7 +227,7 @@ Some things no vote can move, and that's on purpose.
117
227
  - **The Archon rank.** You can't edit it from the government page, so nobody can click the founder out of their own project.
118
228
  - **Pushing to main, touching protected files, and server access.** These are enforced outside the app, by git hooks and audits, not by the database. So no rank can ever be given them, not even by vote. A switch that looked like it granted them would be a switch that does nothing, so we don't show one.
119
229
  - **A file can't give anyone power.** Editing `CLAUDE.md`, a config file, your settings or your hooks gets you nothing. The server checks your rank against the live database on every request, with no caching.
120
- - **Nothing outside a vote changes the constitution.** Not an environment variable and not a hand edit. The only way in is an amendment.
230
+ - **Nothing outside a vote changes the constitution, the laws or the Leads.** Not an environment variable and not a hand edit. The only way in is a vote.
121
231
 
122
232
  These walls are proven by their own tests. The government walk below doesn't cover them.
123
233
 
@@ -126,15 +236,22 @@ These walls are proven by their own tests. The government walk below doesn't cov
126
236
  | | Today | Later |
127
237
  |---|---|---|
128
238
  | **Forms** | Monarchy / BDFL, Timocratic Republic, Direct Democracy, Foundation, and your own Custom mix | Presidential, Cooperative, Federation |
129
- | **Dials** | Who votes, how many must agree, the voting clock | Veto points (how many separate approvals a big change needs), whether the team can replace its leader by vote, judicial review (who can cancel a decision that breaks the charter), a government that changes as you grow |
130
- | **What a vote does** | People, Automation, Release, Review, Treasury carry out their actions | An action at Rules, Disputes and Planning; grade appeals; standing rules; votes on treasury spending |
239
+ | **Dials** | Who votes, how many must agree, the voting clock | Veto points (how many separate approvals a big change needs), replacing a leader by vote, judicial review (who can cancel a decision that breaks the charter), a government that changes as you grow |
240
+ | **What a vote does** | People, Automation, Release, Review and Treasury carry out their actions; laws and presets pass and repeal; Leads are appointed and removed; build-outs go up | An action at Rules, Disputes and Planning; grade appeals; votes on treasury spending |
241
+ | **Laws** | Read first by every agent; locks and caps enforced on personal settings; three presets | Factory's "nothing runs unattended" actually switching unattended runs off |
242
+ | **Asks** | One card shape, slop refused, AI blockers must carry one, sent to a seat, passed on, counted | Committees answering their own asks |
243
+ | **Leads** | Appointed by vote, shown on their building, asks routed to them, may build out | Deputies; people seated in committee rooms; an appoint button in the hall (today it's filed as a People vote) |
244
+ | **Build-outs** | At once or by vote, as your form decides | A cost from the building's pot; goals loosening or holding a building's build rights |
245
+ | **Treasury** | Pots, the reserve, borrowing by ask; spend cap reports only | A spend cap that stops work |
246
+ | **Positions** | Your seats decide which governing tabs you see | A seat granting its own powers |
247
+ | **The owner's call** | — | Starting laws for new projects, a restyled decision card, and taste seats (people who judge how the project looks and reads) are waiting on the owner |
131
248
  | **Proof** | The walk, in memory, re-run in CI | The same walk against a real database |
132
249
 
133
250
  ## How we know it works
134
251
 
135
- We don't take our own word for it. There's a walk: one repeatable run over a throwaway test project with six people. It founds the project, closes all five stages, switches through every form, puts every building to a vote and tries to act alone everywhere, then passes every kind of matter and checks the thing actually happened.
252
+ We don't take our own word for it. There's a walk: one repeatable run over a throwaway test project with six people. It founds the project, closes all five stages, switches through every form, puts every building to a vote and tries to act alone everywhere, then passes every kind of matter and checks the thing actually happened. It also passes and repeals laws and switches presets, appoints and removes a Lead, puts up build-outs under each form, files and routes asks, runs a pot dry and borrows from the reserve, and checks each person's seats. Then it takes everything down again.
136
253
 
137
- **119 checks, 119 pass.** Every request goes through the real code that makes every decision. One honest catch: the storage underneath is an in-memory stand-in for the database. A real-database run is later.
254
+ **169 checks, 169 pass.** Every request goes through the real code that makes every decision. One honest catch: the storage underneath is an in-memory stand-in for the database. A real-database run is later.
138
255
 
139
256
  Run it yourself:
140
257
 
@@ -5,7 +5,7 @@ A **generated**, zero-dependency typed client for the Bongos API — produced fr
5
5
  by hand; it regenerates when the spec changes, so it can never drift from the routes.
6
6
 
7
7
  - API version: **v1** (served at `/api/bongos/v1`)
8
- - 541 operations across 76 resource groups
8
+ - 555 operations across 76 resource groups
9
9
 
10
10
  ## Use it from your project
11
11
 
@@ -501,6 +501,12 @@ function createClient(opts = {}) {
501
501
  getGoalsSuggestions: (args) => request("GET", "/goals/suggestions", { hasBody: false }, args),
502
502
  },
503
503
  "government": {
504
+ // PUT /government/asks/{matterId} — rank: any-builder — PUT /government/asks/:matterId
505
+ putGovernmentAsksMatterId: (args) => request("PUT", "/government/asks/{matterId}", { hasBody: true }, args),
506
+ // POST /government/asks/{matterId}/pass — rank: any-builder — POST /government/asks/:matterId/pass
507
+ postGovernmentAsksMatterIdPass: (args) => request("POST", "/government/asks/{matterId}/pass", { hasBody: true }, args),
508
+ // POST /government/asks/check — rank: any-builder — POST /government/asks/check
509
+ postGovernmentAsksCheck: (args) => request("POST", "/government/asks/check", { hasBody: true }, args),
504
510
  // GET /government/assignments — rank: archon — GET /government/assignments
505
511
  getGovernmentAssignments: (args) => request("GET", "/government/assignments", { hasBody: false }, args),
506
512
  // POST /government/assignments — rank: archon — POST /government/assignments
@@ -521,14 +527,28 @@ function createClient(opts = {}) {
521
527
  postGovernmentBoardItemsItemIdVotes: (args) => request("POST", "/government/board/items/{itemId}/votes", { hasBody: true }, args),
522
528
  // POST /government/board/items/{itemId}/withdraw — rank: metic+archon — POST /government/board/items/:itemId/withdraw
523
529
  postGovernmentBoardItemsItemIdWithdraw: (args) => request("POST", "/government/board/items/{itemId}/withdraw", { hasBody: true }, args),
530
+ // POST /government/board/laws — rank: metic+archon — POST /government/board/laws
531
+ postGovernmentBoardLaws: (args) => request("POST", "/government/board/laws", { hasBody: true }, args),
524
532
  // POST /government/board/matters — rank: metic+archon — POST /government/board/matters
525
533
  postGovernmentBoardMatters: (args) => request("POST", "/government/board/matters", { hasBody: true }, args),
534
+ // POST /government/board/presets — rank: metic+archon — POST /government/board/presets
535
+ postGovernmentBoardPresets: (args) => request("POST", "/government/board/presets", { hasBody: true }, args),
536
+ // POST /government/buildouts — rank: any-builder — POST /government/buildouts
537
+ postGovernmentBuildouts: (args) => request("POST", "/government/buildouts", { hasBody: true }, args),
526
538
  // GET /government/constitution — rank: any-builder — GET /government/constitution
527
539
  getGovernmentConstitution: (args) => request("GET", "/government/constitution", { hasBody: false }, args),
540
+ // GET /government/counts — rank: any-builder — GET /government/counts
541
+ getGovernmentCounts: (args) => request("GET", "/government/counts", { hasBody: false }, args),
528
542
  // GET /government/docket — rank: any-builder — GET /government/docket
529
543
  getGovernmentDocket: (args) => request("GET", "/government/docket", { hasBody: false }, args),
544
+ // GET /government/laws — rank: any-builder — GET /government/laws
545
+ getGovernmentLaws: (args) => request("GET", "/government/laws", { hasBody: false }, args),
546
+ // GET /government/leads — rank: any-builder — GET /government/leads
547
+ getGovernmentLeads: (args) => request("GET", "/government/leads", { hasBody: false }, args),
530
548
  // GET /government/permissions — rank: archon — GET /government/permissions
531
549
  getGovernmentPermissions: (args) => request("GET", "/government/permissions", { hasBody: false }, args),
550
+ // GET /government/presets — rank: any-builder — GET /government/presets
551
+ getGovernmentPresets: (args) => request("GET", "/government/presets", { hasBody: false }, args),
532
552
  // POST /government/rank-sets/apply — rank: archon — POST /government/rank-sets/apply
533
553
  postGovernmentRankSetsApply: (args) => request("POST", "/government/rank-sets/apply", { hasBody: true }, args),
534
554
  // GET /government/ranks — rank: archon — GET /government/ranks
@@ -543,6 +563,12 @@ function createClient(opts = {}) {
543
563
  putGovernmentRanksRankKeyPermissionsPermissionKey: (args) => request("PUT", "/government/ranks/{rankKey}/permissions/{permissionKey}", { hasBody: true }, args),
544
564
  // POST /government/ranks/{rankKey}/reset — rank: archon — POST /government/ranks/:rankKey/reset
545
565
  postGovernmentRanksRankKeyReset: (args) => request("POST", "/government/ranks/{rankKey}/reset", { hasBody: true }, args),
566
+ // GET /government/treasury — rank: any-builder — GET /government/treasury
567
+ getGovernmentTreasury: (args) => request("GET", "/government/treasury", { hasBody: false }, args),
568
+ // POST /government/treasury/borrows/{borrowId}/answer — rank: any-builder — POST /government/treasury/borrows/:borrowId/answer
569
+ postGovernmentTreasuryBorrowsBorrowIdAnswer: (args) => request("POST", "/government/treasury/borrows/{borrowId}/answer", { hasBody: true }, args),
570
+ // PUT /government/treasury/pots/{goalId} — rank: any-builder — PUT /government/treasury/pots/:goalId
571
+ putGovernmentTreasuryPotsGoalId: (args) => request("PUT", "/government/treasury/pots/{goalId}", { hasBody: true }, args),
546
572
  },
547
573
  "grades": {
548
574
  // GET /grades/by-builder — rank: metic+archon — GET /grades/by-builder
@@ -871,6 +897,8 @@ function createClient(opts = {}) {
871
897
  getProjectSettingsShipMode: (args) => request("GET", "/project-settings/ship-mode", { hasBody: false }, args),
872
898
  // PATCH /project-settings/ship-mode — rank: metic+archon — PATCH /project-settings/ship-mode
873
899
  patchProjectSettingsShipMode: (args) => request("PATCH", "/project-settings/ship-mode", { hasBody: true }, args),
900
+ // PATCH /project-settings/spend-cap — rank: metic+archon — PATCH /project-settings/spend-cap
901
+ patchProjectSettingsSpendCap: (args) => request("PATCH", "/project-settings/spend-cap", { hasBody: true }, args),
874
902
  // GET /project-settings/tweak-autopickup — rank: any-builder — GET /project-settings/tweak-autopickup
875
903
  getProjectSettingsTweakAutopickup: (args) => request("GET", "/project-settings/tweak-autopickup", { hasBody: false }, args),
876
904
  // PATCH /project-settings/tweak-autopickup — rank: metic+archon — PATCH /project-settings/tweak-autopickup
@@ -500,6 +500,12 @@ function createClient(opts = {}) {
500
500
  getGoalsSuggestions: (args) => request("GET", "/goals/suggestions", { hasBody: false }, args),
501
501
  },
502
502
  "government": {
503
+ // PUT /government/asks/{matterId} — rank: any-builder — PUT /government/asks/:matterId
504
+ putGovernmentAsksMatterId: (args) => request("PUT", "/government/asks/{matterId}", { hasBody: true }, args),
505
+ // POST /government/asks/{matterId}/pass — rank: any-builder — POST /government/asks/:matterId/pass
506
+ postGovernmentAsksMatterIdPass: (args) => request("POST", "/government/asks/{matterId}/pass", { hasBody: true }, args),
507
+ // POST /government/asks/check — rank: any-builder — POST /government/asks/check
508
+ postGovernmentAsksCheck: (args) => request("POST", "/government/asks/check", { hasBody: true }, args),
503
509
  // GET /government/assignments — rank: archon — GET /government/assignments
504
510
  getGovernmentAssignments: (args) => request("GET", "/government/assignments", { hasBody: false }, args),
505
511
  // POST /government/assignments — rank: archon — POST /government/assignments
@@ -520,14 +526,28 @@ function createClient(opts = {}) {
520
526
  postGovernmentBoardItemsItemIdVotes: (args) => request("POST", "/government/board/items/{itemId}/votes", { hasBody: true }, args),
521
527
  // POST /government/board/items/{itemId}/withdraw — rank: metic+archon — POST /government/board/items/:itemId/withdraw
522
528
  postGovernmentBoardItemsItemIdWithdraw: (args) => request("POST", "/government/board/items/{itemId}/withdraw", { hasBody: true }, args),
529
+ // POST /government/board/laws — rank: metic+archon — POST /government/board/laws
530
+ postGovernmentBoardLaws: (args) => request("POST", "/government/board/laws", { hasBody: true }, args),
523
531
  // POST /government/board/matters — rank: metic+archon — POST /government/board/matters
524
532
  postGovernmentBoardMatters: (args) => request("POST", "/government/board/matters", { hasBody: true }, args),
533
+ // POST /government/board/presets — rank: metic+archon — POST /government/board/presets
534
+ postGovernmentBoardPresets: (args) => request("POST", "/government/board/presets", { hasBody: true }, args),
535
+ // POST /government/buildouts — rank: any-builder — POST /government/buildouts
536
+ postGovernmentBuildouts: (args) => request("POST", "/government/buildouts", { hasBody: true }, args),
525
537
  // GET /government/constitution — rank: any-builder — GET /government/constitution
526
538
  getGovernmentConstitution: (args) => request("GET", "/government/constitution", { hasBody: false }, args),
539
+ // GET /government/counts — rank: any-builder — GET /government/counts
540
+ getGovernmentCounts: (args) => request("GET", "/government/counts", { hasBody: false }, args),
527
541
  // GET /government/docket — rank: any-builder — GET /government/docket
528
542
  getGovernmentDocket: (args) => request("GET", "/government/docket", { hasBody: false }, args),
543
+ // GET /government/laws — rank: any-builder — GET /government/laws
544
+ getGovernmentLaws: (args) => request("GET", "/government/laws", { hasBody: false }, args),
545
+ // GET /government/leads — rank: any-builder — GET /government/leads
546
+ getGovernmentLeads: (args) => request("GET", "/government/leads", { hasBody: false }, args),
529
547
  // GET /government/permissions — rank: archon — GET /government/permissions
530
548
  getGovernmentPermissions: (args) => request("GET", "/government/permissions", { hasBody: false }, args),
549
+ // GET /government/presets — rank: any-builder — GET /government/presets
550
+ getGovernmentPresets: (args) => request("GET", "/government/presets", { hasBody: false }, args),
531
551
  // POST /government/rank-sets/apply — rank: archon — POST /government/rank-sets/apply
532
552
  postGovernmentRankSetsApply: (args) => request("POST", "/government/rank-sets/apply", { hasBody: true }, args),
533
553
  // GET /government/ranks — rank: archon — GET /government/ranks
@@ -542,6 +562,12 @@ function createClient(opts = {}) {
542
562
  putGovernmentRanksRankKeyPermissionsPermissionKey: (args) => request("PUT", "/government/ranks/{rankKey}/permissions/{permissionKey}", { hasBody: true }, args),
543
563
  // POST /government/ranks/{rankKey}/reset — rank: archon — POST /government/ranks/:rankKey/reset
544
564
  postGovernmentRanksRankKeyReset: (args) => request("POST", "/government/ranks/{rankKey}/reset", { hasBody: true }, args),
565
+ // GET /government/treasury — rank: any-builder — GET /government/treasury
566
+ getGovernmentTreasury: (args) => request("GET", "/government/treasury", { hasBody: false }, args),
567
+ // POST /government/treasury/borrows/{borrowId}/answer — rank: any-builder — POST /government/treasury/borrows/:borrowId/answer
568
+ postGovernmentTreasuryBorrowsBorrowIdAnswer: (args) => request("POST", "/government/treasury/borrows/{borrowId}/answer", { hasBody: true }, args),
569
+ // PUT /government/treasury/pots/{goalId} — rank: any-builder — PUT /government/treasury/pots/:goalId
570
+ putGovernmentTreasuryPotsGoalId: (args) => request("PUT", "/government/treasury/pots/{goalId}", { hasBody: true }, args),
545
571
  },
546
572
  "grades": {
547
573
  // GET /grades/by-builder — rank: metic+archon — GET /grades/by-builder
@@ -870,6 +896,8 @@ function createClient(opts = {}) {
870
896
  getProjectSettingsShipMode: (args) => request("GET", "/project-settings/ship-mode", { hasBody: false }, args),
871
897
  // PATCH /project-settings/ship-mode — rank: metic+archon — PATCH /project-settings/ship-mode
872
898
  patchProjectSettingsShipMode: (args) => request("PATCH", "/project-settings/ship-mode", { hasBody: true }, args),
899
+ // PATCH /project-settings/spend-cap — rank: metic+archon — PATCH /project-settings/spend-cap
900
+ patchProjectSettingsSpendCap: (args) => request("PATCH", "/project-settings/spend-cap", { hasBody: true }, args),
873
901
  // GET /project-settings/tweak-autopickup — rank: any-builder — GET /project-settings/tweak-autopickup
874
902
  getProjectSettingsTweakAutopickup: (args) => request("GET", "/project-settings/tweak-autopickup", { hasBody: false }, args),
875
903
  // PATCH /project-settings/tweak-autopickup — rank: metic+archon — PATCH /project-settings/tweak-autopickup
@@ -241,6 +241,8 @@ export interface PatchProjectSettingsRotDaysRequest { days: number }
241
241
  export interface PatchProjectSettingsRotDaysResponse { ok: boolean; rot_days: unknown; source: unknown; describe: unknown }
242
242
  export interface PatchProjectSettingsShipModeRequest { mode: string }
243
243
  export interface PatchProjectSettingsShipModeResponse { ok: boolean; mode: unknown; chosen: unknown; source: unknown; sentence: unknown }
244
+ export interface PatchProjectSettingsSpendCapRequest { usd?: unknown }
245
+ export interface PatchProjectSettingsSpendCapResponse { ok: boolean; on: unknown; usd: unknown; sentence: unknown }
244
246
  export interface PatchProjectSettingsTweakAutopickupRequest { mode?: string; cap?: number }
245
247
  export interface PatchProjectsIdFeaturedRequest { featured: boolean }
246
248
  export interface PatchProjectsIdFeaturedResponse { project: unknown }
@@ -289,8 +291,8 @@ export interface PostBackupTriggerResponse { ok: boolean; message: unknown; star
289
291
  export interface PostBlockersIdLinkRequest { task_id: StringifiableId }
290
292
  export interface PostBlockersIdLinkResponse { ok: boolean; blocked: unknown }
291
293
  export interface PostBlockersIdResolveRequest { resolution_note?: string }
292
- export interface PostBlockersRequest { title: string; body_md?: string; source?: string; source_ref?: string }
293
- export interface PostBlockersResponse { skipped?: boolean; reason?: unknown; blocker?: unknown }
294
+ export interface PostBlockersRequest { title: string; body_md?: string; source?: string; source_ref?: string; ask?: Record<string, unknown> }
295
+ export interface PostBlockersResponse { skipped?: boolean; reason?: unknown; blocker?: unknown; ask?: unknown; ask_saved?: boolean }
294
296
  export interface PostClaimsBatchReleaseRequest { claim_ids: unknown[]; force?: boolean }
295
297
  export interface PostClaimsBatchReleaseResponse { released: unknown; failures: unknown }
296
298
  export interface PostClaimsBatchRequest { task_ids: unknown[]; worktree_name?: string; bind_session?: boolean }
@@ -365,6 +367,9 @@ export interface PostGoalsReorderRequest { version_id: string; ordered_ids: numb
365
367
  export interface PostGoalsReorderResponse { ok: boolean; goals: unknown }
366
368
  export interface PostGoalsRequest { version_id: string; title: string; subtitle?: string; description?: string; scope_modules?: string[]; succeeds_goal_id?: number; category_id?: number; admit_reason?: string; spec_task?: boolean }
367
369
  export interface PostGoalsResponse { ok: boolean; goal: unknown; succeeds_goal_id: unknown; category_advisory: unknown; admitted: unknown; spec_task: unknown }
370
+ export interface PostGovernmentAsksCheckResponse { ok: boolean; ask: unknown; question_words: unknown; rules: unknown }
371
+ export interface PostGovernmentAsksMatterIdPassRequest { seat: string }
372
+ export interface PostGovernmentAsksMatterIdPassResponse { ok: boolean; matter_id: unknown; ask: unknown; route: unknown }
368
373
  export interface PostGovernmentAssignmentsRequest { builder_id: number; rank_key: string }
369
374
  export interface PostGovernmentBoardCharterRequest { form?: string; franchise?: string; council_rank?: string; pass_rule?: string; window_minutes?: unknown; rationale_md?: string; acknowledge_self_removal?: boolean }
370
375
  export interface PostGovernmentBoardCharterResponse { ok: boolean; amendment: unknown; item: unknown; reads_as: unknown }
@@ -374,13 +379,21 @@ export interface PostGovernmentBoardItemsItemIdVotesRequest { direction: string;
374
379
  export interface PostGovernmentBoardItemsItemIdWithdrawResponse { ok: boolean; item_closed: boolean; outcome: unknown; item: unknown }
375
380
  export interface PostGovernmentBoardItemsRequest { subject_type: string; proposal: Record<string, unknown>; rationale_md?: string; acknowledge_self_removal?: boolean }
376
381
  export interface PostGovernmentBoardItemsResponse { ok: boolean; amendment: unknown; item: unknown }
382
+ export interface PostGovernmentBoardLawsRequest { enact?: unknown[]; repeal?: unknown[]; rationale_md?: string }
383
+ export interface PostGovernmentBoardLawsResponse { ok: boolean; amendment: unknown; item: unknown; proposal: unknown }
377
384
  export interface PostGovernmentBoardMattersRequest { area: string; title: string; detail_md?: string; action?: Record<string, unknown> }
378
385
  export interface PostGovernmentBoardMattersResponse { ok: boolean; matter: unknown; item: unknown; decided: unknown }
386
+ export interface PostGovernmentBoardPresetsRequest { preset: string }
387
+ export interface PostGovernmentBoardPresetsResponse { ok: boolean; preset: unknown; amendment: unknown; item: unknown; proposal: unknown }
388
+ export interface PostGovernmentBuildoutsRequest { building: string; capsule: string; name?: string; line?: string }
389
+ export interface PostGovernmentBuildoutsResponse { ok: boolean; path: unknown; buildout?: unknown; rights: unknown; matter?: unknown; item?: unknown; decided?: unknown }
379
390
  export interface PostGovernmentRankSetsApplyRequest { type?: string; headcount: number }
380
391
  export interface PostGovernmentRankSetsApplyResponse { ok: boolean; type: unknown; size: unknown; created: unknown; skipped: unknown }
381
392
  export interface PostGovernmentRanksRankKeyResetResponse { ok: boolean; rank_key: unknown; seeded_rank: unknown; permission_count: unknown }
382
393
  export interface PostGovernmentRanksRequest { rank_key: string; label: string; description?: string }
383
394
  export interface PostGovernmentRanksResponse { rank: unknown }
395
+ export interface PostGovernmentTreasuryBorrowsBorrowIdAnswerRequest { key: string }
396
+ export interface PostGovernmentTreasuryBorrowsBorrowIdAnswerResponse { ok: boolean; borrow: unknown }
384
397
  export interface PostGuildRequestsIdAcceptRequest { visibility?: string; counted_in_totals?: unknown }
385
398
  export interface PostGuildRequestsIdAcceptResponse { status: unknown }
386
399
  export interface PostGuildsRequest { slug: string; name: string; description?: string; visibility: string }
@@ -565,7 +578,9 @@ export interface PutCopyDeskPagesPageIdDraftRequest { reading_hash: string; line
565
578
  export interface PutCopyDeskPagesPageIdDraftResponse { ok: boolean; outcome: unknown; page_id: unknown; round: unknown; draft: unknown; counter: unknown }
566
579
  export interface PutDoneWhenCriterionIdBackendOnlyRequest { backend_only: boolean }
567
580
  export interface PutDoneWhenCriterionIdBackendOnlyResponse { ok: boolean; criterion_id: unknown; backend_only: unknown }
581
+ export interface PutGovernmentAsksMatterIdResponse { ok: boolean; matter_id: unknown; ask: unknown }
568
582
  export interface PutGovernmentRanksRankKeyPermissionsPermissionKeyResponse { ok: boolean; rank_key: unknown; permission_key: unknown; granted: unknown }
583
+ export interface PutGovernmentTreasuryPotsGoalIdRequest { budget_usd?: unknown }
569
584
  export interface PutMingleOptInRequest { opted_in: boolean }
570
585
  export interface PutMingleOptInResponse { opted_in: unknown; updated_at: unknown }
571
586
  export interface PutMingleProjectRequest { enabled: boolean }
@@ -1011,6 +1026,12 @@ export interface BongosClient {
1011
1026
  getGoalsSuggestions(args?: RequestArgs): Promise<ApiResponse>;
1012
1027
  };
1013
1028
  "government": {
1029
+ /** PUT /government/asks/{matterId} — rank: any-builder */
1030
+ putGovernmentAsksMatterId(args?: RequestArgs): Promise<PutGovernmentAsksMatterIdResponse>;
1031
+ /** POST /government/asks/{matterId}/pass — rank: any-builder */
1032
+ postGovernmentAsksMatterIdPass(args: RequestArgs & { body: PostGovernmentAsksMatterIdPassRequest }): Promise<PostGovernmentAsksMatterIdPassResponse>;
1033
+ /** POST /government/asks/check — rank: any-builder */
1034
+ postGovernmentAsksCheck(args?: RequestArgs): Promise<PostGovernmentAsksCheckResponse>;
1014
1035
  /** GET /government/assignments — rank: archon */
1015
1036
  getGovernmentAssignments(args?: RequestArgs): Promise<GetGovernmentAssignmentsResponse>;
1016
1037
  /** POST /government/assignments — rank: archon */
@@ -1031,14 +1052,28 @@ export interface BongosClient {
1031
1052
  postGovernmentBoardItemsItemIdVotes(args: RequestArgs & { body: PostGovernmentBoardItemsItemIdVotesRequest }): Promise<ApiResponse>;
1032
1053
  /** POST /government/board/items/{itemId}/withdraw — rank: metic+archon */
1033
1054
  postGovernmentBoardItemsItemIdWithdraw(args?: RequestArgs): Promise<PostGovernmentBoardItemsItemIdWithdrawResponse>;
1055
+ /** POST /government/board/laws — rank: metic+archon */
1056
+ postGovernmentBoardLaws(args?: RequestArgs & { body?: PostGovernmentBoardLawsRequest }): Promise<PostGovernmentBoardLawsResponse>;
1034
1057
  /** POST /government/board/matters — rank: metic+archon */
1035
1058
  postGovernmentBoardMatters(args: RequestArgs & { body: PostGovernmentBoardMattersRequest }): Promise<PostGovernmentBoardMattersResponse>;
1059
+ /** POST /government/board/presets — rank: metic+archon */
1060
+ postGovernmentBoardPresets(args: RequestArgs & { body: PostGovernmentBoardPresetsRequest }): Promise<PostGovernmentBoardPresetsResponse>;
1061
+ /** POST /government/buildouts — rank: any-builder */
1062
+ postGovernmentBuildouts(args: RequestArgs & { body: PostGovernmentBuildoutsRequest }): Promise<PostGovernmentBuildoutsResponse>;
1036
1063
  /** GET /government/constitution — rank: any-builder */
1037
1064
  getGovernmentConstitution(args?: RequestArgs): Promise<ApiResponse>;
1065
+ /** GET /government/counts — rank: any-builder */
1066
+ getGovernmentCounts(args?: RequestArgs): Promise<ApiResponse>;
1038
1067
  /** GET /government/docket — rank: any-builder */
1039
1068
  getGovernmentDocket(args?: RequestArgs): Promise<ApiResponse>;
1069
+ /** GET /government/laws — rank: any-builder */
1070
+ getGovernmentLaws(args?: RequestArgs): Promise<ApiResponse>;
1071
+ /** GET /government/leads — rank: any-builder */
1072
+ getGovernmentLeads(args?: RequestArgs): Promise<ApiResponse>;
1040
1073
  /** GET /government/permissions — rank: archon */
1041
1074
  getGovernmentPermissions(args?: RequestArgs): Promise<GetGovernmentPermissionsResponse>;
1075
+ /** GET /government/presets — rank: any-builder */
1076
+ getGovernmentPresets(args?: RequestArgs): Promise<ApiResponse>;
1042
1077
  /** POST /government/rank-sets/apply — rank: archon */
1043
1078
  postGovernmentRankSetsApply(args: RequestArgs & { body: PostGovernmentRankSetsApplyRequest }): Promise<PostGovernmentRankSetsApplyResponse>;
1044
1079
  /** GET /government/ranks — rank: archon */
@@ -1053,6 +1088,12 @@ export interface BongosClient {
1053
1088
  putGovernmentRanksRankKeyPermissionsPermissionKey(args?: RequestArgs): Promise<PutGovernmentRanksRankKeyPermissionsPermissionKeyResponse>;
1054
1089
  /** POST /government/ranks/{rankKey}/reset — rank: archon */
1055
1090
  postGovernmentRanksRankKeyReset(args?: RequestArgs): Promise<PostGovernmentRanksRankKeyResetResponse>;
1091
+ /** GET /government/treasury — rank: any-builder */
1092
+ getGovernmentTreasury(args?: RequestArgs): Promise<ApiResponse>;
1093
+ /** POST /government/treasury/borrows/{borrowId}/answer — rank: any-builder */
1094
+ postGovernmentTreasuryBorrowsBorrowIdAnswer(args: RequestArgs & { body: PostGovernmentTreasuryBorrowsBorrowIdAnswerRequest }): Promise<PostGovernmentTreasuryBorrowsBorrowIdAnswerResponse>;
1095
+ /** PUT /government/treasury/pots/{goalId} — rank: any-builder */
1096
+ putGovernmentTreasuryPotsGoalId(args?: RequestArgs & { body?: PutGovernmentTreasuryPotsGoalIdRequest }): Promise<ApiResponse>;
1056
1097
  };
1057
1098
  "grades": {
1058
1099
  /** GET /grades/by-builder — rank: metic+archon */
@@ -1381,6 +1422,8 @@ export interface BongosClient {
1381
1422
  getProjectSettingsShipMode(args?: RequestArgs): Promise<GetProjectSettingsShipModeResponse>;
1382
1423
  /** PATCH /project-settings/ship-mode — rank: metic+archon */
1383
1424
  patchProjectSettingsShipMode(args: RequestArgs & { body: PatchProjectSettingsShipModeRequest }): Promise<PatchProjectSettingsShipModeResponse>;
1425
+ /** PATCH /project-settings/spend-cap — rank: metic+archon */
1426
+ patchProjectSettingsSpendCap(args?: RequestArgs & { body?: PatchProjectSettingsSpendCapRequest }): Promise<PatchProjectSettingsSpendCapResponse>;
1384
1427
  /** GET /project-settings/tweak-autopickup — rank: any-builder */
1385
1428
  getProjectSettingsTweakAutopickup(args?: RequestArgs): Promise<ApiResponse>;
1386
1429
  /** PATCH /project-settings/tweak-autopickup — rank: metic+archon */
@@ -497,6 +497,12 @@ export function createClient(opts = {}) {
497
497
  getGoalsSuggestions: (args) => request("GET", "/goals/suggestions", { hasBody: false }, args),
498
498
  },
499
499
  "government": {
500
+ // PUT /government/asks/{matterId} — rank: any-builder — PUT /government/asks/:matterId
501
+ putGovernmentAsksMatterId: (args) => request("PUT", "/government/asks/{matterId}", { hasBody: true }, args),
502
+ // POST /government/asks/{matterId}/pass — rank: any-builder — POST /government/asks/:matterId/pass
503
+ postGovernmentAsksMatterIdPass: (args) => request("POST", "/government/asks/{matterId}/pass", { hasBody: true }, args),
504
+ // POST /government/asks/check — rank: any-builder — POST /government/asks/check
505
+ postGovernmentAsksCheck: (args) => request("POST", "/government/asks/check", { hasBody: true }, args),
500
506
  // GET /government/assignments — rank: archon — GET /government/assignments
501
507
  getGovernmentAssignments: (args) => request("GET", "/government/assignments", { hasBody: false }, args),
502
508
  // POST /government/assignments — rank: archon — POST /government/assignments
@@ -517,14 +523,28 @@ export function createClient(opts = {}) {
517
523
  postGovernmentBoardItemsItemIdVotes: (args) => request("POST", "/government/board/items/{itemId}/votes", { hasBody: true }, args),
518
524
  // POST /government/board/items/{itemId}/withdraw — rank: metic+archon — POST /government/board/items/:itemId/withdraw
519
525
  postGovernmentBoardItemsItemIdWithdraw: (args) => request("POST", "/government/board/items/{itemId}/withdraw", { hasBody: true }, args),
526
+ // POST /government/board/laws — rank: metic+archon — POST /government/board/laws
527
+ postGovernmentBoardLaws: (args) => request("POST", "/government/board/laws", { hasBody: true }, args),
520
528
  // POST /government/board/matters — rank: metic+archon — POST /government/board/matters
521
529
  postGovernmentBoardMatters: (args) => request("POST", "/government/board/matters", { hasBody: true }, args),
530
+ // POST /government/board/presets — rank: metic+archon — POST /government/board/presets
531
+ postGovernmentBoardPresets: (args) => request("POST", "/government/board/presets", { hasBody: true }, args),
532
+ // POST /government/buildouts — rank: any-builder — POST /government/buildouts
533
+ postGovernmentBuildouts: (args) => request("POST", "/government/buildouts", { hasBody: true }, args),
522
534
  // GET /government/constitution — rank: any-builder — GET /government/constitution
523
535
  getGovernmentConstitution: (args) => request("GET", "/government/constitution", { hasBody: false }, args),
536
+ // GET /government/counts — rank: any-builder — GET /government/counts
537
+ getGovernmentCounts: (args) => request("GET", "/government/counts", { hasBody: false }, args),
524
538
  // GET /government/docket — rank: any-builder — GET /government/docket
525
539
  getGovernmentDocket: (args) => request("GET", "/government/docket", { hasBody: false }, args),
540
+ // GET /government/laws — rank: any-builder — GET /government/laws
541
+ getGovernmentLaws: (args) => request("GET", "/government/laws", { hasBody: false }, args),
542
+ // GET /government/leads — rank: any-builder — GET /government/leads
543
+ getGovernmentLeads: (args) => request("GET", "/government/leads", { hasBody: false }, args),
526
544
  // GET /government/permissions — rank: archon — GET /government/permissions
527
545
  getGovernmentPermissions: (args) => request("GET", "/government/permissions", { hasBody: false }, args),
546
+ // GET /government/presets — rank: any-builder — GET /government/presets
547
+ getGovernmentPresets: (args) => request("GET", "/government/presets", { hasBody: false }, args),
528
548
  // POST /government/rank-sets/apply — rank: archon — POST /government/rank-sets/apply
529
549
  postGovernmentRankSetsApply: (args) => request("POST", "/government/rank-sets/apply", { hasBody: true }, args),
530
550
  // GET /government/ranks — rank: archon — GET /government/ranks
@@ -539,6 +559,12 @@ export function createClient(opts = {}) {
539
559
  putGovernmentRanksRankKeyPermissionsPermissionKey: (args) => request("PUT", "/government/ranks/{rankKey}/permissions/{permissionKey}", { hasBody: true }, args),
540
560
  // POST /government/ranks/{rankKey}/reset — rank: archon — POST /government/ranks/:rankKey/reset
541
561
  postGovernmentRanksRankKeyReset: (args) => request("POST", "/government/ranks/{rankKey}/reset", { hasBody: true }, args),
562
+ // GET /government/treasury — rank: any-builder — GET /government/treasury
563
+ getGovernmentTreasury: (args) => request("GET", "/government/treasury", { hasBody: false }, args),
564
+ // POST /government/treasury/borrows/{borrowId}/answer — rank: any-builder — POST /government/treasury/borrows/:borrowId/answer
565
+ postGovernmentTreasuryBorrowsBorrowIdAnswer: (args) => request("POST", "/government/treasury/borrows/{borrowId}/answer", { hasBody: true }, args),
566
+ // PUT /government/treasury/pots/{goalId} — rank: any-builder — PUT /government/treasury/pots/:goalId
567
+ putGovernmentTreasuryPotsGoalId: (args) => request("PUT", "/government/treasury/pots/{goalId}", { hasBody: true }, args),
542
568
  },
543
569
  "grades": {
544
570
  // GET /grades/by-builder — rank: metic+archon — GET /grades/by-builder
@@ -867,6 +893,8 @@ export function createClient(opts = {}) {
867
893
  getProjectSettingsShipMode: (args) => request("GET", "/project-settings/ship-mode", { hasBody: false }, args),
868
894
  // PATCH /project-settings/ship-mode — rank: metic+archon — PATCH /project-settings/ship-mode
869
895
  patchProjectSettingsShipMode: (args) => request("PATCH", "/project-settings/ship-mode", { hasBody: true }, args),
896
+ // PATCH /project-settings/spend-cap — rank: metic+archon — PATCH /project-settings/spend-cap
897
+ patchProjectSettingsSpendCap: (args) => request("PATCH", "/project-settings/spend-cap", { hasBody: true }, args),
870
898
  // GET /project-settings/tweak-autopickup — rank: any-builder — GET /project-settings/tweak-autopickup
871
899
  getProjectSettingsTweakAutopickup: (args) => request("GET", "/project-settings/tweak-autopickup", { hasBody: false }, args),
872
900
  // PATCH /project-settings/tweak-autopickup — rank: metic+archon — PATCH /project-settings/tweak-autopickup