@bongos/core 1.24.23 → 1.24.24

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 (78) hide show
  1. package/.bongos-core.json +208 -53
  2. package/clients/bongos-client/README.md +1 -1
  3. package/clients/bongos-client/bongos-client.global.js +42 -0
  4. package/clients/bongos-client/index.cjs +42 -0
  5. package/clients/bongos-client/index.d.ts +55 -1
  6. package/clients/bongos-client/index.mjs +42 -0
  7. package/docs/api/openapi.json +1181 -207
  8. package/docs/api-reference.md +30 -5
  9. package/docs/architecture.md +42 -0
  10. package/docs/copy-inventory.md +18 -8
  11. package/docs/copy-registry.json +99 -9
  12. package/docs/module-api-changelog.md +2 -0
  13. package/docs/page-readings.json +64 -25
  14. package/migrations/core_291_payout_nda_tax.sql +75 -0
  15. package/migrations/core_292_module_sale_payouts.sql +170 -0
  16. package/migrations/core_293_cash_outs.sql +184 -0
  17. package/migrations/core_294_cash_out_attempts_sent_by_time.sql +21 -0
  18. package/modules/economy/ledger-check.js +360 -0
  19. package/modules/economy/migrations/economy_003_user_balances.sql +116 -0
  20. package/modules/economy/migrations/economy_004_module_share_payouts.sql +22 -0
  21. package/modules/economy/migrations/economy_005_project_account_holds_index.sql +20 -0
  22. package/modules/economy/migrations/economy_006_ledger_checks.sql +68 -0
  23. package/modules/economy/module.json +1 -1
  24. package/modules/economy/outflow.js +209 -0
  25. package/modules/economy/pollers/ledger-check.js +87 -0
  26. package/modules/economy/project-account.js +92 -7
  27. package/modules/economy/routes/balances.js +79 -0
  28. package/modules/economy/routes/project-account.js +40 -2
  29. package/modules/economy/user-balances.js +308 -0
  30. package/modules/government/decision-rules.js +1 -0
  31. package/modules/hall-ui/public/project-settings.css +18 -0
  32. package/modules/hall-ui/public/project-settings.html +15 -2
  33. package/modules/hall-ui/public/project-settings.js +142 -0
  34. package/modules/ideas/module.json +2 -1
  35. package/modules/ideas/routes/blockers.js +26 -0
  36. package/modules/lifecycle/db-claims.js +22 -0
  37. package/modules/lifecycle/db-ship.js +5 -5
  38. package/modules/lifecycle/funding-wall.js +253 -0
  39. package/modules/lifecycle/module.json +2 -1
  40. package/modules/lifecycle/routes/claims.js +9 -0
  41. package/modules/lifecycle/routes/pay-type-gates.js +7 -0
  42. package/modules/lifecycle/routes/project-settings.js +59 -2
  43. package/package-lock.json +2 -2
  44. package/package.json +1 -1
  45. package/release-notes.json +38 -0
  46. package/scripts/bongos/government-walk.js +1 -0
  47. package/scripts/bongos/plain-cards.js +18 -0
  48. package/scripts/bongos/run-unit-tests.js +28 -0
  49. package/src/bongos/builder-payouts.js +6 -1
  50. package/src/bongos/cash-outs.js +399 -0
  51. package/src/bongos/module-payouts.js +432 -0
  52. package/src/bongos/payout-approvals.js +5 -2
  53. package/src/bongos/payout-gates.js +44 -7
  54. package/src/bongos/project-settings.js +2 -0
  55. package/src/bongos/routes/module-payouts.js +114 -0
  56. package/src/bongos/routes/my-cash-outs.js +103 -0
  57. package/src/bongos/routes/payout-gates.js +42 -1
  58. package/src/bongos/routes.js +6 -0
  59. package/src/module-api.js +1 -1
  60. package/tests/builder_payouts_db.mjs +1 -0
  61. package/tests/cash_outs.mjs +96 -0
  62. package/tests/cash_outs_db.mjs +205 -0
  63. package/tests/funded_project_pays_proof_db.mjs +181 -0
  64. package/tests/funding_wall.mjs +205 -0
  65. package/tests/funding_wall_db.mjs +174 -0
  66. package/tests/government_act_alone_buildings.mjs +1 -0
  67. package/tests/ledger_check.mjs +189 -0
  68. package/tests/ledger_check_db.mjs +119 -0
  69. package/tests/module_payouts.mjs +295 -0
  70. package/tests/module_payouts_db.mjs +140 -0
  71. package/tests/own_scope_guard.mjs +5 -0
  72. package/tests/payout_gates.mjs +67 -6
  73. package/tests/payout_gates_db.mjs +23 -1
  74. package/tests/project_account_db.mjs +5 -2
  75. package/tests/project_outflow.mjs +103 -0
  76. package/tests/project_outflow_db.mjs +100 -0
  77. package/tests/user_balances.mjs +241 -0
  78. package/tests/user_balances_db.mjs +137 -0
@@ -2,7 +2,7 @@
2
2
 
3
3
  # Bongos API reference
4
4
 
5
- > **Generated from the live route files** — the route file is authoritative. 659 endpoints across 111 route files.
5
+ > **Generated from the live route files** — the route file is authoritative. 679 endpoints across 114 route files.
6
6
  > Machine-readable spec: [`docs/api/openapi.json`](api/openapi.json) (OpenAPI 3.1). Rendered docs site: **`/docs`** (e.g. `cloudbongos.com/docs`).
7
7
 
8
8
  Base path: `/api/bongos`. Ranks (enforced server-side, [ADR 0016](adr/0016-trust-boundary-server-enforced-permissions.md)): `public` < `any-builder` < `metic+archon` < `archon`.
@@ -128,6 +128,15 @@ Base path: `/api/bongos`. Ranks (enforced server-side, [ADR 0016](adr/0016-trust
128
128
  | GET | `/api/bongos/backup/status` | `metic+archon` | — | any working builder may check or trigger a backup. |
129
129
  | POST | `/api/bongos/backup/trigger` | `metic+archon` | — | kicks off a fresh dump; same gate as the status read. |
130
130
 
131
+ ## `balances` (4)
132
+
133
+ | Method | Path | Rank | Body | Description |
134
+ |---|---|---|---|---|
135
+ | POST | `/api/bongos/balances/fund-project` | `any-builder` | — | a person funds this project from their own account, on their own web session. |
136
+ | GET | `/api/bongos/balances/me` | `any-builder` | — | the signed-in person's own balance and their own payments. |
137
+ | POST | `/api/bongos/balances/pay` | `any-builder` | — | a person pays another member of this project from their own account. |
138
+ | GET | `/api/bongos/balances/project` | `any-builder` | — | the project's balance figure, so a member can see whether it needs funding. |
139
+
131
140
  ## `blockers` (6)
132
141
 
133
142
  | Method | Path | Rank | Body | Description |
@@ -538,13 +547,17 @@ Base path: `/api/bongos`. Ranks (enforced server-side, [ADR 0016](adr/0016-trust
538
547
  | PUT | `/api/bongos/market-watch/settings/key` | `metic+archon` | `key` | |
539
548
  | DELETE | `/api/bongos/market-watch/settings/key` | `metic+archon` | — | |
540
549
 
541
- ## `me` (56)
550
+ ## `me` (60)
542
551
 
543
552
  | Method | Path | Rank | Body | Description |
544
553
  |---|---|---|---|---|
545
554
  | GET | `/api/bongos/me` | `any-builder` | — | PMS-V2 task 188: response now also carries `unlocked` (server-joined achievement metadata) + `locked_with_progress` (server-computed huma… |
546
555
  | GET | `/api/bongos/me/achievements` | `any-builder` | — | The builder's unlocked achievements (joined to achievement metadata). |
547
556
  | POST | `/api/bongos/me/anthropic-link` | `any-builder` | `anthropic_email`, `anthropic_user_id` | V3.R10 (task 235), criterion C3 — link the authed builder's Anthropic account. |
557
+ | GET | `/api/bongos/me/cash-outs` | `any-builder` | — | GET /api/bongos/me/cash-outs — my withdrawals and where each stands. |
558
+ | POST | `/api/bongos/me/cash-outs` | `any-builder` | `amount_cents`, `instruction_id` | POST /api/bongos/me/cash-outs — ask to take amount_cents of my balance to my bank. |
559
+ | POST | `/api/bongos/me/cash-outs/:id/cancel` | `any-builder` | — | POST /api/bongos/me/cash-outs/:id/cancel — withdraw one of my requests that has not been sent. |
560
+ | POST | `/api/bongos/me/cash-outs/:id/retry` | `any-builder` | — | POST /api/bongos/me/cash-outs/:id/retry — try one of my unfinished withdrawals again. |
548
561
  | PATCH | `/api/bongos/me/checkout-freshness` | `any-builder` | `behind`, `branch`, `reason` | How far behind this builder's local project folder is (task 1005021, checkout-freshness.js). |
549
562
  | PATCH | `/api/bongos/me/core-move-seen` | `any-builder` | `id` | The core move this builder has been told about (task 1004731, core-move-seen.js): closing the hall's "Upgraded to core X" notice stores t… |
550
563
  | GET | `/api/bongos/me/credits` | `any-builder` | — | GET /me/credits — the caller's own ledger. |
@@ -708,7 +721,7 @@ Base path: `/api/bongos`. Ranks (enforced server-side, [ADR 0016](adr/0016-trust
708
721
  | GET | `/api/bongos/pay-type-gates` | `any-builder` | — | for met/missing (the same pay information `GET /pay-terms` shows, no person's money); the evidence references and who cleared each requir… |
709
722
  | PUT | `/api/bongos/pay-type-gates/:payType/:requirement` | `archon` | `state`, `evidence_ref`, `acknowledged` | .approve (archon floor). |
710
723
 
711
- ## `payouts` (18)
724
+ ## `payouts` (26)
712
725
 
713
726
  | Method | Path | Rank | Body | Description |
714
727
  |---|---|---|---|---|
@@ -723,6 +736,13 @@ Base path: `/api/bongos`. Ranks (enforced server-side, [ADR 0016](adr/0016-trust
723
736
  | GET | `/api/bongos/payouts/gates/:builderId` | `archon` | — | GET /api/bongos/payouts/gates/:builderId — may this builder be paid now, and why not. |
724
737
  | POST | `/api/bongos/payouts/grants` | `archon` | — | POST /api/bongos/payouts/grants — sign ONE equity grant. |
725
738
  | POST | `/api/bongos/payouts/guardians` | `archon` | `builder_id`, `guardian_id`, `guardian_account`, `active` | POST /api/bongos/payouts/guardians — link (or unlink) a 16-17 builder's guardian and the account the guardian controls. |
739
+ | POST | `/api/bongos/payouts/module-sales` | `archon` | `processor_sale_ref` | POST /api/bongos/payouts/module-sales — record ONE sale the processor reports, and write every share as owed. |
740
+ | GET | `/api/bongos/payouts/module-shares` | `archon` | — | GET /api/bongos/payouts/module-shares — every share and where it stands. |
741
+ | POST | `/api/bongos/payouts/module-shares/:id/pay` | `archon` | `approval_id` | POST /api/bongos/payouts/module-shares/:id/pay — send ONE share under ONE approval. |
742
+ | GET | `/api/bongos/payouts/module-shares/mine` | `any-builder` | — | GET /api/bongos/payouts/module-shares/mine — the signed-in builder's own shares. |
743
+ | GET | `/api/bongos/payouts/module-splits/:moduleKey` | `archon` | — | GET /api/bongos/payouts/module-splits/:moduleKey — the module's split rule and the contributors' weights it would use now. |
744
+ | POST | `/api/bongos/payouts/module-splits/:moduleKey` | `archon` | `seller_id`, `seller_bps`, `contributors_bps`, `credit_row_kinds` | POST /api/bongos/payouts/module-splits/:moduleKey — record the project's rule. |
745
+ | POST | `/api/bongos/payouts/ndas` | `archon` | `builder_id`, `status`, `nda_version`, `reference` | POST /api/bongos/payouts/ndas — record that a builder's signed NDA is on file (or withdrawn), and where the signed copy lives. |
726
746
  | GET | `/api/bongos/payouts/rules` | `archon` | — | GET /api/bongos/payouts/rules — every standing rule with its current terms. |
727
747
  | POST | `/api/bongos/payouts/rules` | `archon` | `terms`, `note` | POST /api/bongos/payouts/rules — sign a standing payout rule. |
728
748
  | POST | `/api/bongos/payouts/rules/:id/narrow` | `archon` | `terms`, `note` | POST /api/bongos/payouts/rules/:id/narrow — tighten a rule. |
@@ -730,6 +750,7 @@ Base path: `/api/bongos`. Ranks (enforced server-side, [ADR 0016](adr/0016-trust
730
750
  | POST | `/api/bongos/payouts/rules/:id/runs` | `archon` | `run_key`, `payouts`, `note` | POST /api/bongos/payouts/rules/:id/runs — notice a run under a rule, opening its pause window. |
731
751
  | POST | `/api/bongos/payouts/rules/:id/runs/:runKey/hold` | `archon` | `note` | POST /api/bongos/payouts/rules/:id/runs/:runKey/hold — a person stops a run in its pause window. |
732
752
  | POST | `/api/bongos/payouts/screenings` | `archon` | `builder_id`, `result`, `reference`, `valid_days` | POST /api/bongos/payouts/screenings — record a sanctions screening a person ran. |
753
+ | POST | `/api/bongos/payouts/tax-details` | `archon` | `builder_id`, `status`, `reference` | POST /api/bongos/payouts/tax-details — record that the processor's onboarding has (or has not) collected a builder's identity and tax det… |
733
754
 
734
755
  ## `profiles` (1)
735
756
 
@@ -743,17 +764,21 @@ Base path: `/api/bongos`. Ranks (enforced server-side, [ADR 0016](adr/0016-trust
743
764
  |---|---|---|---|---|
744
765
  | GET | `/api/bongos/project/manage-link` | `archon` | — | GET /project/manage-link — the hub's page for THIS project, where its owner takes it offline or disconnects it (task 1004570). |
745
766
 
746
- ## `project-account` (1)
767
+ ## `project-account` (3)
747
768
 
748
769
  | Method | Path | Rank | Body | Description |
749
770
  |---|---|---|---|---|
750
771
  | GET | `/api/bongos/project-account` | `archon` | — | .approve (archon floor) — the owner. |
772
+ | GET | `/api/bongos/project-account/ledger-checks` | `archon` | — | GET /project-account/ledger-checks?limit=10 — the daily check of our record against the processor's (task 1004912, ADR 0397 D7): each che… |
773
+ | GET | `/api/bongos/project-account/outflow` | `archon` | — | GET /project-account/outflow?months=12 — where the money went (task 1003184, criterion money-outflow-visible): spend and money out per mo… |
751
774
 
752
- ## `project-settings` (8)
775
+ ## `project-settings` (10)
753
776
 
754
777
  | Method | Path | Rank | Body | Description |
755
778
  |---|---|---|---|---|
756
779
  | GET | `/api/bongos/project-settings` | `metic+archon` | — | GET /project-settings — all five rows in ONE read. |
780
+ | GET | `/api/bongos/project-settings/funding-wall` | `any-builder` | — | |
781
+ | PATCH | `/api/bongos/project-settings/funding-wall` | `metic+archon` | `mode` | PATCH /project-settings/funding-wall — body { mode: 'hold_at_claim' \| 'refuse_at_completion' \| 'carry_on' }. |
757
782
  | PATCH | `/api/bongos/project-settings/pay-terms` | `metic+archon` | `terms` | PATCH /project-settings/pay-terms — body { terms: [{ pay_type, amount?, unit?, note? }] } (task 1004990; ADR 0385 decision 3 and the owne… |
758
783
  | PATCH | `/api/bongos/project-settings/rot-days` | `metic+archon` | `days` | PATCH /project-settings/rot-days — body { days }. |
759
784
  | GET | `/api/bongos/project-settings/ship-mode` | `any-builder` | — | GET /project-settings/ship-mode — the ship mode alone, for the CLI and the AI. |
@@ -306,6 +306,16 @@ payout_guardian_cosigns(id, builder_id, guardian_id, approval_id | rule_id+run_k
306
306
  -- ALL APPEND-ONLY by trigger; latest row wins. Triggers also refuse an appeal
307
307
  -- by anyone but the frozen person, a decision by them, anything after a lift,
308
308
  -- and a co-signature by anyone but the current guardian.
309
+ payout_ndas(id, builder_id, status on_file|withdrawn, nda_version, reference,
310
+ recorded_by, recorded_at) -- core_291, task 1004908
311
+ payout_tax_details(id, builder_id, status collected|incomplete, collected_by processor:*|person:*,
312
+ reference, recorded_by, recorded_at) -- core_291, task 1004908
313
+ -- contractor papers: no payout until an NDA is on file and the processor's
314
+ -- onboarding has collected tax details (holds nda_missing / tax_details_missing).
315
+ -- Records THAT they exist, never their contents: no NDA text, no tax-id
316
+ -- column, and a reference shaped like a tax id is refused. Neither row may
317
+ -- be recorded by the person it is about. Approver routes:
318
+ -- POST /payouts/ndas, POST /payouts/tax-details (payout.approve + web session).
309
319
  ```
310
320
 
311
321
  Builder payouts (migration `core_290`, task 1003183, [ADR 0397](adr/0397-the-payment-rail-is-stripe-connect-with-one-connected-account-per-project.md) D7 — a builder is paid for a task exactly once; `src/bongos/builder-payouts.js`, routes `GET`/`POST /payouts/builder-payouts` gated `payout.approve` plus the person's own web session for the POST; the `payout` movement is booked through the economy module's `economy.account` port in the same transaction. No processor adapter exists yet, so every payout is recorded owed and held `no_processor`):
@@ -323,6 +333,38 @@ builder_payout_attempts(id, owed_id FK, outcome sent|failed|held, processor_ref,
323
333
  -- unknown outcome gets the same transfer back.
324
334
  ```
325
335
 
336
+ The funding wall (task 1003185, [ADR 0386](adr/0386-the-funding-wall-is-a-per-project-rule-claim-time-hold-by-default.md) — no new table): the project's rule is `project_settings['funding.wall']` (`hold_at_claim` default · `refuse_at_completion` · `carry_on`); a held task's cash pay is a `hold` row in `economy_project_account_movements`, counted only while its task is `active`/`completed`/`confirmed` and closed by a `hold_release` row at the next claim or resolve. Only cash pay terms are walled. `modules/lifecycle/funding-wall.js`; routes `GET`/`PATCH /project-settings/funding-wall`.
337
+
338
+ User balances and fee-free transfers (migration `economy_003`, task 1004907, ADR 0397 D2/D3 — a balance is the processor's figure, never a sum of these rows; `modules/economy/user-balances.js`, routes `GET /balances/me`, `GET /balances/project`, `POST /balances/fund-project`, `POST /balances/pay`, the POSTs on the person's own web session. Isolation is per project database: every account a transfer names is read from this project's table, and a link needs this project's processor to confirm it opened the account. No adapter yet, so instructions are recorded and held `no_processor`):
339
+
340
+ ```
341
+ economy_member_accounts(id, builder_id FK, processor_account UNIQUE, linked_by FK, created_at)
342
+ -- one account, one person; the latest row per builder is their account.
343
+ economy_user_transfers(id, kind fund_project|pay_user, from_builder_id FK, to_builder_id FK NULL,
344
+ from_account, to_account, amount_cents, currency='USD', platform_fee_cents=0,
345
+ instruction_id, note, created_at)
346
+ -- UNIQUE (from_builder_id, instruction_id); fee CHECKed to 0; no self-payment.
347
+ economy_user_transfer_attempts(id, transfer_id FK, outcome sent|failed|held, processor_ref, reason, created_at)
348
+ -- at most one `sent`; ALL THREE APPEND-ONLY by trigger. Idempotency key
349
+ -- `bongos-user-transfer-<id>`; a sent funding also books a project-account `funding` row.
350
+ ```
351
+
352
+ Module-sale payouts (migrations `core_292` + `economy_004`, task 1004910, [ADR 0388](adr/0388-a-module-sale-is-split-by-the-project-the-buyer-pays-the-platform-fee.md) — a module sale is split by the project's own rule and each share is paid exactly once; `src/bongos/module-payouts.js`, routes `/payouts/module-splits/:moduleKey`, `/payouts/module-sales`, `/payouts/module-shares` (+ `/mine`, `/:id/pay`) gated `payout.approve` plus the person's own web session for every write, except `/mine`, which any builder reads for their own shares). Tables `module_split_rules`, `module_sales`, `module_sale_shares_owed`, `module_share_approvals`, `module_share_attempts`, all append-only; one approval pays one thing across task payouts and shares (a trigger on each side, serialised by a per-approval transaction lock). The contributors' weight read is index-served: `idx_tasks_shipped_module`, `idx_session_records_task_ids` (GIN), `idx_credit_log_session`, plus `idx_credit_log_task` (core_189). Nothing moves until the lifecycle's `module_share` pay-type gate (standard licence, takedown contact, payee onboarding) is cleared, read through the `lifecycle.payTypeGates` port. A share's `payout` movement names `module_share_id` instead of a task. No processor adapter exists yet, so no sale can be read and every share is held `no_processor`.
353
+ Cash-out (migration `core_293`, task 1004911, ADR 0397 D2/D7 — a person withdraws their own processor-held balance to their bank; Bongos holds none of it. `src/bongos/cash-outs.js`, routes `GET`/`POST /me/cash-outs`, `POST /me/cash-outs/:id/retry`, `POST /me/cash-outs/:id/cancel`, own-scoped, every POST on the person's own web session. Each withdrawal is the person's own logged `cashout_approved` row in `payout_approvals` (approver = recipient, by CHECK) and passes the N10 gates again at send time; minimum $10. The account it pays from is read through the `economy.account` port's `memberAccount`. No adapter yet, so every withdrawal is recorded and held `no_processor`):
354
+
355
+ ```
356
+ cash_outs(id, builder_id FK, approval_id FK payout_approvals UNIQUE, from_account, amount_cents,
357
+ currency, instruction_id, created_at)
358
+ -- UNIQUE (builder_id, instruction_id); a trigger refuses any approval but the person's
359
+ -- own cashout_approved for exactly this amount.
360
+ cash_out_attempts(id, cash_out_id FK, try_no, outcome held|failed|refused|sent|paid|returned|cancelled,
361
+ processor_ref, reason, actor_id, created_at)
362
+ -- BOTH APPEND-ONLY. Key `bongos-cashout-<id>-<try>`; the trigger computes <try> as
363
+ -- 1 + refused/returned tries, so a timeout (`failed`) retries on the SAME key and
364
+ -- only a definite no or a bank return gets a new one; while a try is sent, only
365
+ -- paid/returned may follow; nothing follows a cancel.
366
+ ```
367
+
326
368
  Store sub-categories (migration `core_280`, task 1004355, [ADR 0342](adr/0342-module-categories-are-eight-parents-with-approved-sub-categories.md) D3 — an author proposes one at publish, a Metic+ person approves, renames or merges it; `src/bongos/module-subcategories.js`):
327
369
 
328
370
  ```
@@ -4,13 +4,13 @@
4
4
  > Deterministic on a given tree — regenerate and commit rather than hand-editing.
5
5
  > Machine-readable twin: [`copy-registry.json`](copy-registry.json).
6
6
 
7
- **3282 strings** across 3 surfaces · 2598 distinct pieces of copy · 3282 certain, 0 heuristic · 276 shown in more than one place.
7
+ **3292 strings** across 3 surfaces · 2608 distinct pieces of copy · 3292 certain, 0 heuristic · 276 shown in more than one place.
8
8
 
9
9
  ## Surfaces
10
10
 
11
11
  | surface | lives at | files | strings |
12
12
  |---|---|---|---|
13
- | `builders-hall` | `modules/hall-ui/public` | 172 | 2169 |
13
+ | `builders-hall` | `modules/hall-ui/public` | 172 | 2179 |
14
14
  | `status-dashboard` | `modules/status-ui/public` | 4 | 91 |
15
15
  | `landing` | `modules/public-landing/public` | 10 | 1022 |
16
16
 
@@ -78,7 +78,7 @@ Identical copy within one surface. Sometimes right (a repeated button), sometime
78
78
  | `72a29648399b` | 4x | Tweak a page | modules/hall-ui/public/tweak-editor.html:32, modules/hall-ui/public/tweak-editor.html:32, modules/hall-ui/public/tweak-editor.html:55 |
79
79
  | … | | _236 more in the JSON registry_ | |
80
80
 
81
- ## `builders-hall` — 2169 strings
81
+ ## `builders-hall` — 2179 strings
82
82
 
83
83
  | id | conf | text | where |
84
84
  |---|---|---|---|
@@ -283,6 +283,7 @@ Identical copy within one surface. Sometimes right (a repeated button), sometime
283
283
  | `46b33550d52b` | certain | Bulk claim | `modules/hall-ui/public/work.html:164` |
284
284
  | `6d6d626fc518` | certain | Bulk release | `modules/hall-ui/public/goals.html:186` |
285
285
  | `6d6d626fc518` | certain | Bulk release | `modules/hall-ui/public/work.html:165` |
286
+ | `fa9356114e6b` | certain | By builder | `modules/hall-ui/public/project-settings.js:493` |
286
287
  | `181cfa50b127` | certain | By the numbers | `modules/hall-ui/public/profile.html:64` |
287
288
  | `a015a43bfc7f` | certain | CLI access | `modules/hall-ui/public/settings.html:166` |
288
289
  | `09e863eb90af` | certain | Can: {…} | `modules/hall-ui/public/government.js:911` |
@@ -479,7 +480,8 @@ Identical copy within one surface. Sometimes right (a repeated button), sometime
479
480
  | `e91a4d2e3e1c` | certain | Created rank {…}. | `modules/hall-ui/public/government.js:480` |
480
481
  | `a55e423263f0` | certain | Cross-project record | `modules/hall-ui/public/profile.html:98` |
481
482
  | `24013a074724` | certain | Custom rank | `modules/hall-ui/public/government.html:111` |
482
- | `13b22e48d9fb` | certain | Danger zone | `modules/hall-ui/public/project-settings.html:56` |
483
+ | `f6c83d014e49` | certain | Daily check against the payment processor | `modules/hall-ui/public/project-settings.js:537` |
484
+ | `13b22e48d9fb` | certain | Danger zone | `modules/hall-ui/public/project-settings.html:69` |
483
485
  | `cf7d7d5d5e83` | certain | Database behind. | `modules/hall-ui/public/deploy.js:599` |
484
486
  | `6744aed3d15e` | certain | Dated exploit-detail engagement reports — kept out of the repo (threat-model §6.3) and served only to Archons. | `modules/hall-ui/public/watch.html:132` |
485
487
  | `d388906f550b` | certain | Declared files overlap: {…} (advisory) | `modules/hall-ui/public/task-lib.js:69` |
@@ -493,7 +495,7 @@ Identical copy within one surface. Sometimes right (a repeated button), sometime
493
495
  | `0a4fe7150971` | certain | Develop this idea | `modules/hall-ui/public/ideas.js:921` |
494
496
  | `11b8266d6aab` | certain | Developing a Big Idea Spark | `modules/hall-ui/public/ideas.html:164` |
495
497
  | `65322ac89221` | certain | Discard draft | `modules/hall-ui/public/ideas.html:197` |
496
- | `d3efd513694b` | certain | Disconnect from Bongos entirely | `modules/hall-ui/public/project-settings.html:60` |
498
+ | `d3efd513694b` | certain | Disconnect from Bongos entirely | `modules/hall-ui/public/project-settings.html:73` |
497
499
  | `0f685daf1bd5` | certain | Discord connected ✓ | `modules/hall-ui/public/settings.js:720` |
498
500
  | `d8017b5ca98f` | certain | Discord unlinked. | `modules/hall-ui/public/settings.js:739` |
499
501
  | `f3e09453374f` | certain | Dismissed — looked at, leaving it as it is | `modules/hall-ui/public/copy-desk.html:123` |
@@ -512,6 +514,7 @@ Identical copy within one surface. Sometimes right (a repeated button), sometime
512
514
  | `39f897eaff3c` | certain | Drop sketches, pictures or a PDF here, paste a picture, | `modules/hall-ui/public/ai-studio.js:180` |
513
515
  | `67f09099c2d3` | certain | Duplicate — should be said once, in one place | `modules/hall-ui/public/copy-desk.html:93` |
514
516
  | `1de61111bc00` | certain | Each builder's runner | `modules/hall-ui/public/gate.js:406` |
517
+ | `1f3b826a05d4` | certain | Each month is recorded spend ({…} over these {…} months) plus payouts and fees out of the project account. Rea | `modules/hall-ui/public/project-settings.js:513` |
515
518
  | `3a6916fa79d4` | certain | Each one links back to this page. | `modules/hall-ui/public/lightbulb.js:103` |
516
519
  | `2bd1c7fb3955` | certain | Each rank opens more of the system. Yours and the one above are shown in full; the rest open as you get closer | `modules/hall-ui/public/ranks.html:50` |
517
520
  | `7f1b1c32d360` | certain | Each slash-command can run on a different model. The system has a default for every skill; choose another to o | `modules/hall-ui/public/settings.html:414` |
@@ -748,6 +751,7 @@ Identical copy within one surface. Sometimes right (a repeated button), sometime
748
751
  | `9be8b839eff8` | certain | Last 7 days | `modules/hall-ui/public/hall-widgets.js:170` |
749
752
  | `59f0bc78a28f` | certain | Last 90 days | `modules/hall-ui/public/hall-widgets.js:171` |
750
753
  | `13bae4dfb28e` | certain | Last claimed by | `modules/hall-ui/public/task.js:683` |
754
+ | `165c5f26ef60` | certain | Last try | `modules/hall-ui/public/project-settings.js:477` |
751
755
  | `9e8828d602bc` | certain | Lay your thoughts over the project map. | `modules/hall-ui/public/goal-map.html:75` |
752
756
  | `0f467c1359d7` | certain | Leaderboard place | `modules/hall-ui/public/hall-render.js:626` |
753
757
  | `7c9b7a89353b` | certain | Leave goal | `modules/hall-ui/public/goals-render.js:961` |
@@ -847,6 +851,7 @@ Identical copy within one surface. Sometimes right (a repeated button), sometime
847
851
  | `9af4b7a3a36f` | certain | Module truth | `modules/hall-ui/public/atlas.html:46` |
848
852
  | `319e9db996ea` | certain | Modules — {{worldName}} | `modules/hall-ui/public/modules.html:6` |
849
853
  | `319e9db996ea` | certain | Modules — {{worldName}} | `modules/hall-ui/public/modules.html:6` |
854
+ | `8a30ab62ad1d` | certain | Money out, by month | `modules/hall-ui/public/project-settings.js:513` |
850
855
  | `3f12fb7c0f79` | certain | Monthly tweak rounds: {…} for the project. | `modules/hall-ui/public/project-settings.js:316` |
851
856
  | `e8aa008d01a7` | certain | More detail (optional) | `modules/hall-ui/public/blockers.js:319` |
852
857
  | `9dacaf382dc8` | certain | More ways to open the page | `modules/hall-ui/public/tweak-editor.html:59` |
@@ -1061,6 +1066,8 @@ Identical copy within one surface. Sometimes right (a repeated button), sometime
1061
1066
  | `d89d1923ecf9` | certain | Over the last {…} days | `modules/hall-ui/public/watch.js:1287` |
1062
1067
  | `695ffff13730` | certain | Over time | `modules/hall-ui/public/profile.html:76` |
1063
1068
  | `5ded44da0cc5` | certain | Override requests | `modules/hall-ui/public/watch.html:137` |
1069
+ | `eae3165eaaa0` | certain | Owed but not paid | `modules/hall-ui/public/project-settings.js:477` |
1070
+ | `0ba40083f03e` | certain | Owed since | `modules/hall-ui/public/project-settings.js:477` |
1064
1071
  | `0e7cdd7b472c` | certain | Owner only | `modules/hall-ui/public/market-watch-settings.html:31` |
1065
1072
  | `0046e08db06a` | certain | Owner’s bill / month (est.) | `modules/hall-ui/public/fleet-costs.js:71` |
1066
1073
  | `15a49bf15007` | certain | Page {…} of {…} | `modules/hall-ui/public/hall-kit.js:110` |
@@ -1344,6 +1351,7 @@ Identical copy within one surface. Sometimes right (a repeated button), sometime
1344
1351
  | `490f4bbbc75b` | certain | Sounds are switched off for now. Nothing plays when a task ships, when {{currency}} arrive, or when Claude fin | `modules/hall-ui/public/settings.html:435` |
1345
1352
  | `d03aa6752970` | certain | Specialities this project recommends. Nothing here is switched on — read what each one adds to your sessions, | `modules/hall-ui/public/settings-specialities.js:384` |
1346
1353
  | `01f1d2b03eb4` | certain | Speciality created. | `modules/hall-ui/public/settings-specialities.js:554` |
1354
+ | `a553a7f1f108` | certain | Spent is the recorded cost of each builder’s sessions (API, compute). Paid, owed and approved are payouts. | `modules/hall-ui/public/project-settings.js:502` |
1347
1355
  | `ccca0c49fdc4` | certain | Splitting into ideas… | `modules/hall-ui/public/lightbulb.js:146` |
1348
1356
  | `aee9d47c6b99` | certain | Splitting your feedback into ideas… | `modules/hall-ui/public/page-notes.js:275` |
1349
1357
  | `f2a4d855d82d` | certain | Stale claims | `modules/hall-ui/public/watch.html:49` |
@@ -1378,7 +1386,7 @@ Identical copy within one surface. Sometimes right (a repeated button), sometime
1378
1386
  | `59fcf7f5ac27` | certain | Switch to light mode | `modules/hall-ui/public/street.html:95` |
1379
1387
  | `93fa2e97dd35` | certain | System default for this skill | `modules/hall-ui/public/settings.js:72` |
1380
1388
  | `94d60e9e56e6` | certain | Take it | `modules/hall-ui/public/ai-studio.js:180` |
1381
- | `da9da6e866bd` | certain | Take it offline | `modules/hall-ui/public/project-settings.html:59` |
1389
+ | `da9da6e866bd` | certain | Take it offline | `modules/hall-ui/public/project-settings.html:72` |
1382
1390
  | `aa8da34fe237` | certain | Take the next page, or pick one from the studio. | `modules/hall-ui/public/tweak-editor.js:576` |
1383
1391
  | `fc53e250e86f` | certain | Take this page | `modules/hall-ui/public/paintbrush.js:116` |
1384
1392
  | `8b3cdb88b0f4` | certain | Taken out of the store. Your copy keeps working, but it will get no more updates. | `modules/hall-ui/public/modules.js:134` |
@@ -1655,6 +1663,7 @@ Identical copy within one surface. Sometimes right (a repeated button), sometime
1655
1663
  | `e179870922a3` | certain | What the session did, derived from its own transcript: whether it wrote files, used tools, and how many prompt | `modules/hall-ui/public/sessions.html:72` |
1656
1664
  | `868cf4bbe616` | certain | What the start-it markers mean | `modules/hall-ui/public/commands.html:32` |
1657
1665
  | `5a58392783fd` | certain | What this brings in | `modules/hall-ui/public/deploy.js:558` |
1666
+ | `b857cc458c6f` | certain | What this project has spent, what each builder has been paid, and what it has promised but not paid yet. A bal | `modules/hall-ui/public/project-settings.html:58` |
1658
1667
  | `32d675a2b022` | certain | What this rank is for (optional) | `modules/hall-ui/public/government.html:88` |
1659
1668
  | `04b3ff4c4f4c` | certain | What users can see | `modules/hall-ui/public/deploy.html:49` |
1660
1669
  | `db435ff49441` | certain | What will be true when it is done | `modules/hall-ui/public/goal-author.js:38` |
@@ -1674,6 +1683,7 @@ Identical copy within one surface. Sometimes right (a repeated button), sometime
1674
1683
  | `ec1a438eee3f` | certain | Where each comes from and where each goes. {{Currency}} = credits; karma is a separate peer-trust signal, not | `modules/hall-ui/public/diagrams.html:65` |
1675
1684
  | `c44892e8870d` | certain | Where it went | `modules/hall-ui/public/drachmae.js:218` |
1676
1685
  | `5999540bb2da` | certain | Where the asks stand | `modules/hall-ui/public/collab.html:43` |
1686
+ | `197969e4126a` | certain | Where the money went | `modules/hall-ui/public/project-settings.html:57` |
1677
1687
  | `4052378c3e04` | certain | Where the words stand | `modules/hall-ui/public/copy-desk.html:38` |
1678
1688
  | `158499e38ceb` | certain | Where you stand | `modules/hall-ui/public/ranks.html:30` |
1679
1689
  | `efdd4f022cf0` | certain | Where your pages are | `modules/hall-ui/public/studio.js:777` |
@@ -2202,7 +2212,7 @@ Identical copy within one surface. Sometimes right (a repeated button), sometime
2202
2212
  | `a6ae9cbdee30` | certain | — all builders — | `modules/hall-ui/public/builders.js:698` |
2203
2213
  | `729d4ce22b99` | certain | — any — | `modules/hall-ui/public/hall-widgets.js:173` |
2204
2214
  | `d2c30a1ee74e` | certain | — decide — | `modules/hall-ui/public/goals-render.js:1000` |
2205
- | `d9ad3ee37a88` | certain | — erases the project’s server, its database and every backup, and releases its name and web address. Your repo | `modules/hall-ui/public/project-settings.html:60` |
2215
+ | `d9ad3ee37a88` | certain | — erases the project’s server, its database and every backup, and releases its name and web address. Your repo | `modules/hall-ui/public/project-settings.html:73` |
2206
2216
  | `e31a588bb9e1` | certain | — moved {…}, and the box confirmed it. | `modules/hall-ui/public/deploy.js:400` |
2207
2217
  | `417adabd1a00` | certain | — no goal suggested — open the goal board and pick one — | `modules/hall-ui/public/task-detail.js:410` |
2208
2218
  | `1f9504667df5` | certain | — none — | `modules/hall-ui/public/goal-author.js:38` |
@@ -2210,7 +2220,7 @@ Identical copy within one surface. Sometimes right (a repeated button), sometime
2210
2220
  | `b1ca53ebfc10` | certain | — pick a goal — | `modules/hall-ui/public/goal-author.js:38` |
2211
2221
  | `b1ca53ebfc10` | certain | — pick a goal — | `modules/hall-ui/public/goal-author.js:112` |
2212
2222
  | `825930577f01` | certain | — pick a version — | `modules/hall-ui/public/goal-author.js:125` |
2213
- | `61ebc5d684fd` | certain | — stops the project and its nightly backups but keeps everything: its database, its backups and your repositor | `modules/hall-ui/public/project-settings.html:59` |
2223
+ | `61ebc5d684fd` | certain | — stops the project and its nightly backups but keeps everything: its database, its backups and your repositor | `modules/hall-ui/public/project-settings.html:72` |
2214
2224
  | `e5c5e94152b3` | certain | — that's all the tooling you need up front. | `modules/hall-ui/public/hall-render.js:841` |
2215
2225
  | `85f1dd2ee732` | certain | — the whole project | `modules/hall-ui/public/goal-map.html:69` |
2216
2226
  | `ff7514f48a7b` | certain | — untouched {…}+ days | `modules/hall-ui/public/goal-inbox.js:479` |
@@ -3,9 +3,9 @@
3
3
  "generator": "scripts/bongos/copy-inventory.js",
4
4
  "goal": 1000074,
5
5
  "counts": {
6
- "strings": 3282,
7
- "unique_ids": 2598,
8
- "certain": 3282,
6
+ "strings": 3292,
7
+ "unique_ids": 2608,
8
+ "certain": 3292,
9
9
  "heuristic": 0,
10
10
  "duplicate_ids": 276
11
11
  },
@@ -13,7 +13,7 @@
13
13
  "builders-hall": {
14
14
  "at": "modules/hall-ui/public",
15
15
  "files": 172,
16
- "strings": 2169
16
+ "strings": 2179
17
17
  },
18
18
  "status-dashboard": {
19
19
  "at": "modules/status-ui/public",
@@ -5017,6 +5017,15 @@
5017
5017
  "origin": "html-text",
5018
5018
  "confidence": "certain"
5019
5019
  },
5020
+ {
5021
+ "id": "fa9356114e6b",
5022
+ "surface": "builders-hall",
5023
+ "text": "By builder",
5024
+ "file": "modules/hall-ui/public/project-settings.js",
5025
+ "line": 493,
5026
+ "origin": "js-markup",
5027
+ "confidence": "certain"
5028
+ },
5020
5029
  {
5021
5030
  "id": "181cfa50b127",
5022
5031
  "surface": "builders-hall",
@@ -6781,12 +6790,21 @@
6781
6790
  "origin": "html-text",
6782
6791
  "confidence": "certain"
6783
6792
  },
6793
+ {
6794
+ "id": "f6c83d014e49",
6795
+ "surface": "builders-hall",
6796
+ "text": "Daily check against the payment processor",
6797
+ "file": "modules/hall-ui/public/project-settings.js",
6798
+ "line": 537,
6799
+ "origin": "js-markup",
6800
+ "confidence": "certain"
6801
+ },
6784
6802
  {
6785
6803
  "id": "13b22e48d9fb",
6786
6804
  "surface": "builders-hall",
6787
6805
  "text": "Danger zone",
6788
6806
  "file": "modules/hall-ui/public/project-settings.html",
6789
- "line": 56,
6807
+ "line": 69,
6790
6808
  "origin": "html-text",
6791
6809
  "confidence": "certain"
6792
6810
  },
@@ -6912,7 +6930,7 @@
6912
6930
  "surface": "builders-hall",
6913
6931
  "text": "Disconnect from Bongos entirely",
6914
6932
  "file": "modules/hall-ui/public/project-settings.html",
6915
- "line": 60,
6933
+ "line": 73,
6916
6934
  "origin": "html-text",
6917
6935
  "confidence": "certain"
6918
6936
  },
@@ -7078,6 +7096,15 @@
7078
7096
  "origin": "js-markup",
7079
7097
  "confidence": "certain"
7080
7098
  },
7099
+ {
7100
+ "id": "1f3b826a05d4",
7101
+ "surface": "builders-hall",
7102
+ "text": "Each month is recorded spend ({…} over these {…} months) plus payouts and fees out of the project account. Read from the cost log and the account’s own record.",
7103
+ "file": "modules/hall-ui/public/project-settings.js",
7104
+ "line": 513,
7105
+ "origin": "js-markup",
7106
+ "confidence": "certain"
7107
+ },
7081
7108
  {
7082
7109
  "id": "3a6916fa79d4",
7083
7110
  "surface": "builders-hall",
@@ -9202,6 +9229,15 @@
9202
9229
  "origin": "js-markup",
9203
9230
  "confidence": "certain"
9204
9231
  },
9232
+ {
9233
+ "id": "165c5f26ef60",
9234
+ "surface": "builders-hall",
9235
+ "text": "Last try",
9236
+ "file": "modules/hall-ui/public/project-settings.js",
9237
+ "line": 477,
9238
+ "origin": "js-markup",
9239
+ "confidence": "certain"
9240
+ },
9205
9241
  {
9206
9242
  "id": "9e8828d602bc",
9207
9243
  "surface": "builders-hall",
@@ -10093,6 +10129,15 @@
10093
10129
  "origin": "html-title",
10094
10130
  "confidence": "certain"
10095
10131
  },
10132
+ {
10133
+ "id": "8a30ab62ad1d",
10134
+ "surface": "builders-hall",
10135
+ "text": "Money out, by month",
10136
+ "file": "modules/hall-ui/public/project-settings.js",
10137
+ "line": 513,
10138
+ "origin": "js-markup",
10139
+ "confidence": "certain"
10140
+ },
10096
10141
  {
10097
10142
  "id": "3f12fb7c0f79",
10098
10143
  "surface": "builders-hall",
@@ -12019,6 +12064,24 @@
12019
12064
  "origin": "html-text",
12020
12065
  "confidence": "certain"
12021
12066
  },
12067
+ {
12068
+ "id": "eae3165eaaa0",
12069
+ "surface": "builders-hall",
12070
+ "text": "Owed but not paid",
12071
+ "file": "modules/hall-ui/public/project-settings.js",
12072
+ "line": 477,
12073
+ "origin": "js-markup",
12074
+ "confidence": "certain"
12075
+ },
12076
+ {
12077
+ "id": "0ba40083f03e",
12078
+ "surface": "builders-hall",
12079
+ "text": "Owed since",
12080
+ "file": "modules/hall-ui/public/project-settings.js",
12081
+ "line": 477,
12082
+ "origin": "js-markup",
12083
+ "confidence": "certain"
12084
+ },
12022
12085
  {
12023
12086
  "id": "0e7cdd7b472c",
12024
12087
  "surface": "builders-hall",
@@ -14566,6 +14629,15 @@
14566
14629
  "origin": "js-notice",
14567
14630
  "confidence": "certain"
14568
14631
  },
14632
+ {
14633
+ "id": "a553a7f1f108",
14634
+ "surface": "builders-hall",
14635
+ "text": "Spent is the recorded cost of each builder’s sessions (API, compute). Paid, owed and approved are payouts.",
14636
+ "file": "modules/hall-ui/public/project-settings.js",
14637
+ "line": 502,
14638
+ "origin": "js-markup",
14639
+ "confidence": "certain"
14640
+ },
14569
14641
  {
14570
14642
  "id": "ccca0c49fdc4",
14571
14643
  "surface": "builders-hall",
@@ -14877,7 +14949,7 @@
14877
14949
  "surface": "builders-hall",
14878
14950
  "text": "Take it offline",
14879
14951
  "file": "modules/hall-ui/public/project-settings.html",
14880
- "line": 59,
14952
+ "line": 72,
14881
14953
  "origin": "html-text",
14882
14954
  "confidence": "certain"
14883
14955
  },
@@ -17365,6 +17437,15 @@
17365
17437
  "origin": "js-markup",
17366
17438
  "confidence": "certain"
17367
17439
  },
17440
+ {
17441
+ "id": "b857cc458c6f",
17442
+ "surface": "builders-hall",
17443
+ "text": "What this project has spent, what each builder has been paid, and what it has promised but not paid yet. A balance only means something after those promises.",
17444
+ "file": "modules/hall-ui/public/project-settings.html",
17445
+ "line": 58,
17446
+ "origin": "html-text",
17447
+ "confidence": "certain"
17448
+ },
17368
17449
  {
17369
17450
  "id": "32d675a2b022",
17370
17451
  "surface": "builders-hall",
@@ -17536,6 +17617,15 @@
17536
17617
  "origin": "html-attr:aria-label",
17537
17618
  "confidence": "certain"
17538
17619
  },
17620
+ {
17621
+ "id": "197969e4126a",
17622
+ "surface": "builders-hall",
17623
+ "text": "Where the money went",
17624
+ "file": "modules/hall-ui/public/project-settings.html",
17625
+ "line": 57,
17626
+ "origin": "html-text",
17627
+ "confidence": "certain"
17628
+ },
17539
17629
  {
17540
17630
  "id": "4052378c3e04",
17541
17631
  "surface": "builders-hall",
@@ -22293,7 +22383,7 @@
22293
22383
  "surface": "builders-hall",
22294
22384
  "text": "— erases the project’s server, its database and every backup, and releases its name and web address. Your repository on GitHub is kept. This cannot be undone.",
22295
22385
  "file": "modules/hall-ui/public/project-settings.html",
22296
- "line": 60,
22386
+ "line": 73,
22297
22387
  "origin": "html-text",
22298
22388
  "confidence": "certain"
22299
22389
  },
@@ -22365,7 +22455,7 @@
22365
22455
  "surface": "builders-hall",
22366
22456
  "text": "— stops the project and its nightly backups but keeps everything: its database, its backups and your repository on GitHub. You can bring it back.",
22367
22457
  "file": "modules/hall-ui/public/project-settings.html",
22368
- "line": 59,
22458
+ "line": 72,
22369
22459
  "origin": "html-text",
22370
22460
  "confidence": "certain"
22371
22461
  },
@@ -3302,5 +3302,7 @@ is load-bearing: the script throws rather than guess if it is missing, and
3302
3302
  landed since 1.24.21 with no explicit bump. run 41366737579. (task 1002620)
3303
3303
  1.24.23 — CI auto-patch (publish-on-merge, ADR 0161): carrier for merges
3304
3304
  landed since 1.24.22 with no explicit bump. run 41370306880. (task 1002620)
3305
+ 1.24.24 — CI auto-patch (publish-on-merge, ADR 0161): carrier for merges
3306
+ landed since 1.24.23 with no explicit bump. run 41558735984. (task 1002620)
3305
3307
  ---------------------------------------------------------------------------
3306
3308
  ```