@bongos/core 1.19.252 → 1.19.253

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.
package/.bongos-core.json CHANGED
@@ -2,11 +2,11 @@
2
2
  "artifact": "bongos-core",
3
3
  "manifest_schema": 1,
4
4
  "generator": "scripts/gds/package-core.js",
5
- "core_version": "1.19.252",
6
- "core_contract": "1.19.252",
7
- "source_commit": "202060eb7fde831d0bc2dad4f0cc70546998cf92",
5
+ "core_version": "1.19.253",
6
+ "core_contract": "1.19.253",
7
+ "source_commit": "7e98077a8a33b1ef861ab40823c1db64acffc71d",
8
8
  "source_ref": "HEAD",
9
- "built_at": "2026-08-19T01:31:20.217Z",
9
+ "built_at": "2026-08-19T01:42:12.781Z",
10
10
  "redaction": {
11
11
  "model": "docs-redacted+functional-verbatim",
12
12
  "docs_redacted": 315,
@@ -17,7 +17,7 @@
17
17
  "gate": "passed"
18
18
  },
19
19
  "file_count": 1682,
20
- "tree_sha256": "a092898c2eb209b9c8782c4151ebdf913230930e12e439783a2e77ee73fbceba",
20
+ "tree_sha256": "942f711051e57b17995dbd18b2ee81dee4466440acb5c3559659f72b4e0291ba",
21
21
  "files": [
22
22
  {
23
23
  "path": ".claude/skills/blocker-review/SKILL.md",
@@ -1417,12 +1417,12 @@
1417
1417
  {
1418
1418
  "path": "docs/copy-inventory.md",
1419
1419
  "mode": "0000644",
1420
- "sha256": "68e4fc5231a55b272b1da464e07232dc0386f1a41614ee8a412718b082520e08"
1420
+ "sha256": "46a8ae1438d900645252af1e71da65863b247920899bf9fdb941a7f5f2b09b60"
1421
1421
  },
1422
1422
  {
1423
1423
  "path": "docs/copy-registry.json",
1424
1424
  "mode": "0000644",
1425
- "sha256": "08b322d9f873384a7ea946a78b55566642ff3d30d09c8c693b94a3bbe805af37"
1425
+ "sha256": "7d1918a10be54cf4fedf58152c50950b89e548a2c5bc8d04a553523b5263058b"
1426
1426
  },
1427
1427
  {
1428
1428
  "path": "docs/design-contract.md",
@@ -2987,7 +2987,7 @@
2987
2987
  {
2988
2988
  "path": "modules/government/board.js",
2989
2989
  "mode": "0000644",
2990
- "sha256": "c446f18a8aebc4de0656d7fddeb508c8ec242ce76b243c1c787be7e94e47e49e"
2990
+ "sha256": "e6e01e38328eb6d234c76d7f5aa9e96589fd2c9ef89c105216495303ac1e3fdd"
2991
2991
  },
2992
2992
  {
2993
2993
  "path": "modules/government/catalog.js",
@@ -3382,7 +3382,7 @@
3382
3382
  {
3383
3383
  "path": "modules/hall-ui/public/government.js",
3384
3384
  "mode": "0000644",
3385
- "sha256": "81fed1dde594d91206b596d4e3cc03bd8aef50627eecaba8f4f400b6e9e10a70"
3385
+ "sha256": "7f8a1ab330391d564e88420fc3577e861869269e71eccaec4d1924f9544b5889"
3386
3386
  },
3387
3387
  {
3388
3388
  "path": "modules/hall-ui/public/hall-kit.js",
@@ -4432,12 +4432,12 @@
4432
4432
  {
4433
4433
  "path": "package-lock.json",
4434
4434
  "mode": "0000644",
4435
- "sha256": "6c248030c970ef5fe5c0a3216cb9b0f23e12bdc74cbb4c3ad78a0addf7a19b64"
4435
+ "sha256": "ade08bd4afada8f234fdb5bd155ad37628bc01040f76de7a378356d338933721"
4436
4436
  },
4437
4437
  {
4438
4438
  "path": "package.json",
4439
4439
  "mode": "0000644",
4440
- "sha256": "1c22f0d309c5ae2531eb8c106c63ebb49f087186625def216e3d941e269f4fbe"
4440
+ "sha256": "2278bb9510a79406d9ee34e9662df8a81273343075d382d7241b0f360650d199"
4441
4441
  },
4442
4442
  {
4443
4443
  "path": "public-docs/index.html",
@@ -6057,7 +6057,7 @@
6057
6057
  {
6058
6058
  "path": "src/module-api.js",
6059
6059
  "mode": "0000644",
6060
- "sha256": "8995e188b10a782e44879050b5342f0b6c664e3657524be0c90f8d2ec6760244"
6060
+ "sha256": "a12419c00b425a6b98a646cb98e5d20584863185779453e88c52c7036ac1ff62"
6061
6061
  },
6062
6062
  {
6063
6063
  "path": "src/module-loader/catalog.js",
@@ -7052,7 +7052,7 @@
7052
7052
  {
7053
7053
  "path": "tests/government_charter_library.mjs",
7054
7054
  "mode": "0000644",
7055
- "sha256": "9a52ac8fbbc9e7b0fc4b45841b9dbf831615e5d64eb1e3f0d9c446fc70552629"
7055
+ "sha256": "947af198213dea4f041c7391c1deb28e1db62347d2cbdf18d8be6a4cc252f805"
7056
7056
  },
7057
7057
  {
7058
7058
  "path": "tests/government_claim_eligibility.mjs",
@@ -109,7 +109,7 @@ Identical copy within one surface. Sometimes right (a repeated button), sometime
109
109
  | `646fab1157fe` | certain | + {…} more project{…} not publicly listed. | `modules/hall-ui/public/profile.js:230` |
110
110
  | `9a663ca57b14` | certain | , claiming, and shipping show — render as rich in-feed widgets or as plain text. Widgets are prettier but spen | `modules/hall-ui/public/settings.html:230` |
111
111
  | `ac57fe1ccd6e` | certain | , follow its acceptance criteria, stay within touches[], /builder-ship | `modules/hall-ui/public/work.js:797` |
112
- | `d36226548dc9` | certain | , membership | `modules/hall-ui/public/government.js:756` |
112
+ | `d36226548dc9` | certain | , membership | `modules/hall-ui/public/government.js:786` |
113
113
  | `741e355954ac` | certain | , not at ship). | `modules/hall-ui/public/diagrams.html:61` |
114
114
  | `b31a6bd7edc5` | certain | , or | `modules/hall-ui/public/profile.js:265` |
115
115
  | `c7c9b0afc38e` | certain | , then mark it as read on the Home page. | `modules/hall-ui/public/work.html:40` |
@@ -143,7 +143,7 @@ Identical copy within one surface. Sometimes right (a repeated button), sometime
143
143
  | `b38c01691857` | certain | All your work → | `modules/hall-ui/public/hall-widgets.js:110` |
144
144
  | `e99cc5d37404` | certain | Already a member? | `modules/hall-ui/public/builders.js:553` |
145
145
  | `200a83529fa6` | certain | Already acknowledged — you're all set. | `modules/hall-ui/public/primer.html:68` |
146
- | `d11477f287b7` | certain | An objection returns the idea to its author with your reason and the section it faults \u2014 the feedback the | `modules/hall-ui/public/government.js:711` |
146
+ | `d11477f287b7` | certain | An objection returns the idea to its author with your reason and the section it faults \u2014 the feedback the | `modules/hall-ui/public/government.js:741` |
147
147
  | `69f0ca4a4d84` | certain | Analytics scope | `modules/hall-ui/public/builders.js:1572` |
148
148
  | `52ed0e2e3470` | certain | Any rank | `modules/hall-ui/public/goals-page.js:528` |
149
149
  | `52ed0e2e3470` | certain | Any rank | `modules/hall-ui/public/work.js:250` |
@@ -162,7 +162,7 @@ Identical copy within one surface. Sometimes right (a repeated button), sometime
162
162
  | `4195d0d114e4` | certain | Archons only. | `modules/hall-ui/public/harbor.js:314` |
163
163
  | `4195d0d114e4` | certain | Archons only. | `modules/hall-ui/public/sessions.js:97` |
164
164
  | `4195d0d114e4` | certain | Archons only. | `modules/hall-ui/public/watch.js:838` |
165
- | `5fcfdf8975cf` | certain | As configuration: | `modules/hall-ui/public/government.js:603` |
165
+ | `5fcfdf8975cf` | certain | As configuration: | `modules/hall-ui/public/government.js:633` |
166
166
  | `b2656d0b2402` | certain | Asked {…} | `modules/hall-ui/public/watch.js:205` |
167
167
  | `8c8ec2597036` | certain | Assigned {…} to builder {…}. | `modules/hall-ui/public/government.js:401` |
168
168
  | `46714066f2da` | certain | Audit log | `modules/hall-ui/public/watch.html:127` |
@@ -189,14 +189,14 @@ Identical copy within one surface. Sometimes right (a repeated button), sometime
189
189
  | `181cfa50b127` | certain | By the numbers | `modules/hall-ui/public/profile.html:37` |
190
190
  | `a015a43bfc7f` | certain | CLI access | `modules/hall-ui/public/settings.html:116` |
191
191
  | `25de6150fc93` | certain | Capabilities held by a machine identity, never by a person or a rank. Shown for completeness — nothing here ca | `modules/hall-ui/public/government.html:84` |
192
- | `bdca1f219e6f` | certain | Cast objection | `modules/hall-ui/public/government.js:711` |
192
+ | `bdca1f219e6f` | certain | Cast objection | `modules/hall-ui/public/government.js:741` |
193
193
  | `0279db21e29a` | certain | Change in Settings → | `modules/hall-ui/public/builders.js:771` |
194
194
  | `26f23453fd9d` | certain | Changed files ({…}): {…}{…} | `modules/hall-ui/public/gate.js:119` |
195
195
  | `906c2947dfc1` | certain | Changes save at once and take effect the next time you start a session on this machine. | `modules/hall-ui/public/settings.html:277` |
196
196
  | `52384bdc035c` | certain | Changes save at once. Your new choice plays the next time that event fires. | `modules/hall-ui/public/settings.html:290` |
197
197
  | `cab7a9526ca1` | certain | Changes save the moment you pick. “Default” clears your override and falls back to the system's choice. | `modules/hall-ui/public/settings.html:259` |
198
198
  | `4b714191b423` | certain | Changes touching protected build surfaces, held for your approval. | `modules/hall-ui/public/gate.js:226` |
199
- | `e6982a9ff948` | certain | Charter library | `modules/hall-ui/public/government.js:580` |
199
+ | `e6982a9ff948` | certain | Charter library | `modules/hall-ui/public/government.js:610` |
200
200
  | `f8725cf3ba62` | certain | Checking dependency order… | `modules/hall-ui/public/work.js:758` |
201
201
  | `7a41b18c0de8` | certain | Checking for conflicts… | `modules/hall-ui/public/work.js:737` |
202
202
  | `aa3ba7d28a76` | certain | Checking your key… | `modules/hall-ui/public/settings.js:1013` |
@@ -222,7 +222,7 @@ Identical copy within one surface. Sometimes right (a repeated button), sometime
222
222
  | `512ab32e3bf2` | certain | Close box | `modules/hall-ui/public/box-panel.js:226` |
223
223
  | `70f6a704d504` | certain | Close it | `modules/hall-ui/public/copy-desk.html:127` |
224
224
  | `d12a2fb5730d` | certain | Close this flag | `modules/hall-ui/public/copy-desk.html:113` |
225
- | `49002c30f585` | certain | Closed sittings | `modules/hall-ui/public/government.js:782` |
225
+ | `49002c30f585` | certain | Closed sittings | `modules/hall-ui/public/government.js:812` |
226
226
  | `3d148e19e03a` | certain | Closed. | `modules/hall-ui/public/copy-desk.js:314` |
227
227
  | `2654dc3ded21` | certain | Closing is a judgement too — say what you decided, so the next person does not re-litigate it. | `modules/hall-ui/public/copy-desk.js:299` |
228
228
  | `f8a914076098` | certain | Closing the terminal tab keeps your session running — reopen to resume right where you left off. To shut the b | `modules/hall-ui/public/box-panel.js:226` |
@@ -270,14 +270,14 @@ Identical copy within one surface. Sometimes right (a repeated button), sometime
270
270
  | `01f0308c66e0` | certain | Could not invite that builder just now. | `modules/hall-ui/public/goals-page.js:1542` |
271
271
  | `0adbf0652899` | certain | Could not load #{…} | `modules/hall-ui/public/task.js:303` |
272
272
  | `dec4b11f316d` | certain | Could not load dev boxes just now. | `modules/hall-ui/public/harbor.js:288` |
273
- | `0f7c244312b1` | certain | Could not load government data just now. | `modules/hall-ui/public/government.js:853` |
273
+ | `0f7c244312b1` | certain | Could not load government data just now. | `modules/hall-ui/public/government.js:883` |
274
274
  | `cd00bf198661` | certain | Could not load held pull requests just now. | `modules/hall-ui/public/gate.js:180` |
275
275
  | `192c893fc64e` | certain | Could not load modules. | `modules/hall-ui/public/modules.js:226` |
276
276
  | `4e09b612c6b7` | certain | Could not load modules. Return to the hall and try again. | `modules/hall-ui/public/modules.js:225` |
277
277
  | `7775fec0fa85` | certain | Could not load sessions. | `modules/hall-ui/public/sessions.js:168` |
278
278
  | `7775fec0fa85` | certain | Could not load sessions. | `modules/hall-ui/public/sessions.js:207` |
279
- | `5420bb0b8475` | certain | Could not load the Board Room just now. | `modules/hall-ui/public/government.js:774` |
280
- | `3f82d4f29e5b` | certain | Could not load the constitution just now. | `modules/hall-ui/public/government.js:598` |
279
+ | `5420bb0b8475` | certain | Could not load the Board Room just now. | `modules/hall-ui/public/government.js:804` |
280
+ | `3f82d4f29e5b` | certain | Could not load the constitution just now. | `modules/hall-ui/public/government.js:628` |
281
281
  | `8f597eabf4ac` | certain | Could not load the drachmae guide. | `modules/hall-ui/public/drachmae.js:162` |
282
282
  | `6264ebc9ede0` | certain | Could not load the primer. | `modules/hall-ui/public/primer.js:620` |
283
283
  | `7604af13c40e` | certain | Could not load the profile. | `modules/hall-ui/public/profile.js:330` |
@@ -321,7 +321,7 @@ Identical copy within one surface. Sometimes right (a repeated button), sometime
321
321
  | `3db890b074a7` | certain | Could not update visibility just now. | `modules/hall-ui/public/goals-page.js:1575` |
322
322
  | `112d12b24879` | certain | Could not verify your access. Go back and try again. | `modules/hall-ui/public/watch.js:883` |
323
323
  | `6bd74fd20311` | certain | Could not verify your access. Try again. | `modules/hall-ui/public/sessions.js:206` |
324
- | `278e8281c82f` | certain | Could not vote: {…} | `modules/hall-ui/public/government.js:738` |
324
+ | `278e8281c82f` | certain | Could not vote: {…} | `modules/hall-ui/public/government.js:768` |
325
325
  | `a48e9f098392` | certain | Could not {…} just now. | `modules/hall-ui/public/goals-page.js:1559` |
326
326
  | `cb09ee26014f` | certain | Could not {…}: {…} | `modules/hall-ui/public/government.js:266` |
327
327
  | `7f600651bbf1` | certain | Couldn’t load your projects right now. | `modules/hall-ui/public/my-projects.js:115` |
@@ -391,7 +391,7 @@ Identical copy within one surface. Sometimes right (a repeated button), sometime
391
391
  | `42cee5cb3584` | certain | Fold this idea into # | `modules/hall-ui/public/task-detail.js:369` |
392
392
  | `647bcfcfdb03` | certain | Fresh CLI token issued. Paste it in your terminal: | `modules/hall-ui/public/settings.js:885` |
393
393
  | `55c71d76a94c` | certain | From creation to production — and the exact step where {{currency}} are awarded (at | `modules/hall-ui/public/diagrams.html:61` |
394
- | `a025080147a1` | certain | Full Idea | `modules/hall-ui/public/government.js:639` |
394
+ | `a025080147a1` | certain | Full Idea | `modules/hall-ui/public/government.js:669` |
395
395
  | `ecae3916bf01` | certain | Gate — {{worldName}} | `modules/hall-ui/public/gate.html:6` |
396
396
  | `ecae3916bf01` | certain | Gate — {{worldName}} | `modules/hall-ui/public/gate.html:6` |
397
397
  | `4638e024f0af` | certain | Generated from the code on the last deploy · | `modules/hall-ui/public/atlas.js:333` |
@@ -420,16 +420,16 @@ Identical copy within one surface. Sometimes right (a repeated button), sometime
420
420
  | `53eb8a07e0f8` | certain | Harbor — {{worldName}} | `modules/hall-ui/public/harbor.html:6` |
421
421
  | `43c704d58dc2` | certain | Hover an island to light its links · click one for details | `modules/hall-ui/public/atlas.html:40` |
422
422
  | `68382894d8f9` | certain | How a planning session seeds each version's task pool, and how a version closes and archives its scope. | `modules/hall-ui/public/diagrams.html:94` |
423
- | `8b72aee97071` | certain | How a project moves between structures over time — summarized from the synthesis: | `modules/hall-ui/public/government.js:580` |
423
+ | `8b72aee97071` | certain | How a project moves between structures over time — summarized from the synthesis: | `modules/hall-ui/public/government.js:610` |
424
424
  | `0bab9286ea38` | certain | How each builder's shipped work has been graded over the past thirty days. | `modules/hall-ui/public/watch.html:68` |
425
- | `fb7489e8b67c` | certain | How it has changed | `modules/hall-ui/public/government.js:603` |
425
+ | `fb7489e8b67c` | certain | How it has changed | `modules/hall-ui/public/government.js:633` |
426
426
  | `ec3f26ff8137` | certain | How planning sessions feed each version's task pool and how a version closes. | `modules/hall-ui/public/diagrams.html:93` |
427
427
  | `0bae5deb899d` | certain | How readily Claude opens a | `modules/hall-ui/public/settings.html:212` |
428
428
  | `868cf6930d64` | certain | How task estimates compare with the time work actually took. | `modules/hall-ui/public/watch.html:134` |
429
429
  | `06cb721a03e1` | certain | How the system works — {{worldName}} | `modules/hall-ui/public/diagrams.html:6` |
430
430
  | `06cb721a03e1` | certain | How the system works — {{worldName}} | `modules/hall-ui/public/diagrams.html:6` |
431
431
  | `4f3802e6c81e` | certain | How the whole build is doing — the program at a glance, then each version. Shipped work stays out of the way. | `modules/hall-ui/public/roadmap.js:375` |
432
- | `446790e82765` | certain | How this project is governed — the constitution it runs, the Board Room, and the ranks & permissions that admi | `modules/hall-ui/public/government.js:840` |
432
+ | `446790e82765` | certain | How this project is governed — the constitution it runs, the Board Room, and the ranks & permissions that admi | `modules/hall-ui/public/government.js:870` |
433
433
  | `2d156231e9fe` | certain | How you advance | `modules/hall-ui/public/ranks.html:48` |
434
434
  | `06f02922691d` | certain | How you get paid, and how you earn trust — the reward model in plain language. About a five-minute read. | `modules/hall-ui/public/drachmae.html:28` |
435
435
  | `4c247368c384` | certain | How you got here, what you'd build | `modules/hall-ui/public/builders.js:553` |
@@ -549,13 +549,13 @@ Identical copy within one surface. Sometimes right (a repeated button), sometime
549
549
  | `9f73b3f3dad0` | certain | No rank floor — any builder can claim this task | `modules/hall-ui/public/goals-page.js:528` |
550
550
  | `9f73b3f3dad0` | certain | No rank floor — any builder can claim this task | `modules/hall-ui/public/work.js:250` |
551
551
  | `bef9fe43ba84` | certain | No sessions recorded yet. They land here as builders ship and end sessions. | `modules/hall-ui/public/sessions.js:69` |
552
- | `772cf8472ac2` | certain | No sitting has closed yet. | `modules/hall-ui/public/government.js:783` |
552
+ | `772cf8472ac2` | certain | No sitting has closed yet. | `modules/hall-ui/public/government.js:813` |
553
553
  | `e30ff7d92be7` | certain | No tasks are in progress right now. | `modules/hall-ui/public/work.js:147` |
554
554
  | `712b64d8273f` | certain | No tasks match these filters. Try widening them. | `modules/hall-ui/public/work.js:334` |
555
555
  | `950e6eebc171` | certain | No tasks yet | `modules/hall-ui/public/goals-page.js:344` |
556
556
  | `78f78d1d1e1f` | certain | No version is in flight right now. | `modules/hall-ui/public/roadmap.js:355` |
557
557
  | `c9800f8b6bc8` | certain | No versions declared yet. | `modules/hall-ui/public/roadmap.js:369` |
558
- | `51db1ff37a28` | certain | No votes yet{…}. | `modules/hall-ui/public/government.js:657` |
558
+ | `51db1ff37a28` | certain | No votes yet{…}. | `modules/hall-ui/public/government.js:687` |
559
559
  | `4654849396a3` | certain | No work reviewed yet. | `modules/hall-ui/public/hall-widgets.js:150` |
560
560
  | `3fd79013ae4a` | certain | None on disk. | `modules/hall-ui/public/modules.html:49` |
561
561
  | `c72e0bdb834a` | certain | Not declared in module.json — this is who ships the module. | `modules/hall-ui/public/modules.js:49` |
@@ -636,7 +636,7 @@ Identical copy within one surface. Sometimes right (a repeated button), sometime
636
636
  | `e5c292c8b361` | certain | Provides (seams) | `modules/hall-ui/public/atlas.js:273` |
637
637
  | `b9c6def6b120` | certain | Rank set to {…}. | `modules/hall-ui/public/watch.js:512` |
638
638
  | `ff50a1395cbc` | certain | Rank: {…} | `modules/hall-ui/public/profile.js:38` |
639
- | `084261c45654` | certain | Ranks & Permissions is the Archon administration surface. The Constitution and the Board Room are yours to rea | `modules/hall-ui/public/government.js:824` |
639
+ | `084261c45654` | certain | Ranks & Permissions is the Archon administration surface. The Constitution and the Board Room are yours to rea | `modules/hall-ui/public/government.js:854` |
640
640
  | `6824ec470f99` | certain | Ranks — {{worldName}} | `modules/hall-ui/public/ranks.html:6` |
641
641
  | `6824ec470f99` | certain | Ranks — {{worldName}} | `modules/hall-ui/public/ranks.html:6` |
642
642
  | `e60039795803` | certain | Re-issue CLI token | `modules/hall-ui/public/settings.html:123` |
@@ -685,7 +685,7 @@ Identical copy within one surface. Sometimes right (a repeated button), sometime
685
685
  | `9d9567d1dead` | certain | Reset {…} to its default permissions?\n\nEvery change you've made to this rank is discarded, and it takes effe | `modules/hall-ui/public/government.js:245` |
686
686
  | `3ef9382d4726` | certain | Resolved — the copy was changed | `modules/hall-ui/public/copy-desk.html:117` |
687
687
  | `0887725744f2` | certain | Restricted. | `modules/hall-ui/public/gate.js:205` |
688
- | `0887725744f2` | certain | Restricted. | `modules/hall-ui/public/government.js:812` |
688
+ | `0887725744f2` | certain | Restricted. | `modules/hall-ui/public/government.js:842` |
689
689
  | `feb48b0d462c` | certain | Return to the Dev Box app and click “Connect” again for a fresh code. | `modules/hall-ui/public/pair.js:32` |
690
690
  | `f1b2b158c3b1` | certain | Review quality | `modules/hall-ui/public/watch.html:74` |
691
691
  | `4e062d4f8d69` | certain | Reviews by builder | `modules/hall-ui/public/watch.html:67` |
@@ -718,7 +718,7 @@ Identical copy within one surface. Sometimes right (a repeated button), sometime
718
718
  | `582bdd9435eb` | certain | Select task {…} for bulk actions | `modules/hall-ui/public/work.js:367` |
719
719
  | `d91c8e9be76c` | certain | Select task {…} for bulk claim | `modules/hall-ui/public/goals-page.js:612` |
720
720
  | `7e1d54119e08` | certain | Select task {…} for bulk release | `modules/hall-ui/public/work.js:166` |
721
- | `ae43a132699b` | certain | Selectable today | `modules/hall-ui/public/government.js:580` |
721
+ | `ae43a132699b` | certain | Selectable today | `modules/hall-ui/public/government.js:610` |
722
722
  | `3f8f6c62adb8` | certain | Session pages | `modules/hall-ui/public/sessions.html:55` |
723
723
  | `cccb362bd6da` | certain | Sessions — {{worldName}} | `modules/hall-ui/public/sessions.html:6` |
724
724
  | `cccb362bd6da` | certain | Sessions — {{worldName}} | `modules/hall-ui/public/sessions.html:6` |
@@ -784,7 +784,7 @@ Identical copy within one surface. Sometimes right (a repeated button), sometime
784
784
  | `4462dcaaaa7d` | certain | The artist reads this instead of guessing. A pointer with no judgement costs them a look and tells them nothin | `modules/hall-ui/public/copy-desk.html:99` |
785
785
  | `716a303927d6` | certain | The box you turn on has a | `modules/hall-ui/public/box-panel.js:339` |
786
786
  | `520da1cd5dcc` | certain | The complete architecture: your device (screen only), the dev box (worker, code, and local memory), the server | `modules/hall-ui/public/diagrams.html:85` |
787
- | `bac12faf3328` | certain | The developmental ladder: {…}. Formality is adopted only where informal coordination breaks. | `modules/hall-ui/public/government.js:586` |
787
+ | `bac12faf3328` | certain | The developmental ladder: {…}. Formality is adopted only where informal coordination breaks. | `modules/hall-ui/public/government.js:616` |
788
788
  | `6e2554615883` | certain | The event sounds could not be loaded. Reload the page to try again. | `modules/hall-ui/public/settings.js:386` |
789
789
  | `797f02fa8295` | certain | The hosted machine your work runs on. Open it in your browser (the online terminal) or connect over SSH — whic | `modules/hall-ui/public/settings.html:157` |
790
790
  | `9f45c63c9697` | certain | The kinds of work you prefer. Task suggestions lean toward your choices — pick one, several, or none. | `modules/hall-ui/public/settings.html:99` |
@@ -803,7 +803,7 @@ Identical copy within one surface. Sometimes right (a repeated button), sometime
803
803
  | `cd4ceb6e7e48` | certain | The seeded plan | `modules/hall-ui/public/roadmap.js:170` |
804
804
  | `d01d36a596b0` | certain | The session log could not be loaded. Try again. | `modules/hall-ui/public/sessions.js:167` |
805
805
  | `09053c8a6284` | certain | The session log is available to Archons only. | `modules/hall-ui/public/sessions.html:29` |
806
- | `af664a644b13` | certain | The seven government structures, for getting a team up to speed before deciding when to flip a switch. | `modules/hall-ui/public/government.js:580` |
806
+ | `af664a644b13` | certain | The seven government structures, for getting a team up to speed before deciding when to flip a switch. | `modules/hall-ui/public/government.js:610` |
807
807
  | `6360a5988f26` | certain | The shape and health of the codebase. | `modules/hall-ui/public/watch.html:102` |
808
808
  | `fc422cced9e3` | certain | The shared goals you’ve joined. Browse, join, and leave goals — and read their criteria — on the | `modules/hall-ui/public/goals.js:94` |
809
809
  | `5f631f51f29e` | certain | The skill list could not be loaded. Reload the page to try again. | `modules/hall-ui/public/settings.js:129` |
@@ -828,7 +828,7 @@ Identical copy within one surface. Sometimes right (a repeated button), sometime
828
828
  | `448beb98e1c3` | certain | This is the builders' hub for {…} — where builders claim work, earn {…}, and track their standing. Access is i | `modules/hall-ui/public/builders.js:553` |
829
829
  | `7cf191cb9a4a` | certain | This is the environment you will build in — no SSH, nothing to install. | `modules/hall-ui/public/builders.js:984` |
830
830
  | `23f531302e9e` | certain | This is you — | `modules/hall-ui/public/profile.js:200` |
831
- | `e901434bebd7` | certain | This is your idea \u2014 its author does not vote on it. The board decides; a return comes back to you with it | `modules/hall-ui/public/government.js:707` |
831
+ | `e901434bebd7` | certain | This is your idea \u2014 its author does not vote on it. The board decides; a return comes back to you with it | `modules/hall-ui/public/government.js:737` |
832
832
  | `c4a7e427e82c` | certain | This one | `modules/hall-ui/public/settings.html:179` |
833
833
  | `c4a7e427e82c` | certain | This one | `modules/hall-ui/public/settings.html:180` |
834
834
  | `bfecd6bbd655` | certain | This page is available to Archons only. | `modules/hall-ui/public/watch.html:32` |
@@ -852,7 +852,7 @@ Identical copy within one surface. Sometimes right (a repeated button), sometime
852
852
  | `71c09cda8246` | certain | Voice for {…} | `modules/hall-ui/public/settings.js:76` |
853
853
  | `2940b7828d26` | certain | Volume {…}%. | `modules/hall-ui/public/settings.js:211` |
854
854
  | `6905f2ee5702` | certain | Vote on this work | `modules/hall-ui/public/builders.js:1756` |
855
- | `b2937e14ee9b` | certain | Vote yes | `modules/hall-ui/public/government.js:711` |
855
+ | `b2937e14ee9b` | certain | Vote yes | `modules/hall-ui/public/government.js:741` |
856
856
  | `8cc425582984` | certain | Vulnerability reports | `modules/hall-ui/public/watch.html:117` |
857
857
  | `b1e63e33f739` | certain | Vulnerability reports, engagement reports, override requests, and the audit log. | `modules/hall-ui/public/watch.html:115` |
858
858
  | `3a9cd9a27a84` | certain | Walk the full ladder → | `modules/hall-ui/public/builders.js:209` |
@@ -867,7 +867,7 @@ Identical copy within one surface. Sometimes right (a repeated button), sometime
867
867
  | `70dc106494cf` | certain | What is wrong with it, and what would better look like? | `modules/hall-ui/public/copy-desk.html:101` |
868
868
  | `ae44a375e814` | certain | What it unlocks | `modules/hall-ui/public/ranks.js:109` |
869
869
  | `00dc1f0f83e1` | certain | What kind of wrong? | `modules/hall-ui/public/copy-desk.html:89` |
870
- | `41b2aef03c03` | certain | What this project runs today | `modules/hall-ui/public/government.js:603` |
870
+ | `41b2aef03c03` | certain | What this project runs today | `modules/hall-ui/public/government.js:633` |
871
871
  | `3dade88f0584` | certain | What your box would cost: | `modules/hall-ui/public/box-panel.js:235` |
872
872
  | `b8743d16eab8` | certain | What {…} unlocks | `modules/hall-ui/public/builders.js:207` |
873
873
  | `259574f84e4c` | certain | Where a Full Idea that cleared the completeness grade comes to be ratified — and where the constitution itself | `modules/hall-ui/public/government.html:47` |
@@ -879,7 +879,7 @@ Identical copy within one surface. Sometimes right (a repeated button), sometime
879
879
  | `8f5954c06daa` | certain | Whether your session cards — what | `modules/hall-ui/public/settings.html:229` |
880
880
  | `f9ab9eb870a6` | certain | While you wait: install the Claude desktop app at | `modules/hall-ui/public/builders.js:640` |
881
881
  | `045c629729b7` | certain | Who’s on this goal, and what they’ve contributed to it. | `modules/hall-ui/public/goals.html:166` |
882
- | `6e8a3151ec76` | certain | Why \u2014 the reason the author will act on | `modules/hall-ui/public/government.js:711` |
882
+ | `6e8a3151ec76` | certain | Why \u2014 the reason the author will act on | `modules/hall-ui/public/government.js:741` |
883
883
  | `a3ac116b499a` | certain | Why? | `modules/hall-ui/public/copy-desk.html:99` |
884
884
  | `6108c16edece` | certain | Window: last {…} days. | `modules/hall-ui/public/watch.js:628` |
885
885
  | `0dcb485477b6` | certain | Windows (ARM) | `modules/hall-ui/public/builders.js:984` |
@@ -895,10 +895,10 @@ Identical copy within one surface. Sometimes right (a repeated button), sometime
895
895
  | `b31fc908c962` | certain | You claimed #{…}. Open a terminal to start work. | `modules/hall-ui/public/goals-page.js:978` |
896
896
  | `b31fc908c962` | certain | You claimed #{…}. Open a terminal to start work. | `modules/hall-ui/public/work.js:809` |
897
897
  | `b31fc908c962` | certain | You claimed #{…}. Open a terminal to start work. | `modules/hall-ui/public/work.js:874` |
898
- | `3e5b3271bdb4` | certain | You have not voted on this item. Casting arrives with the vote form. | `modules/hall-ui/public/government.js:755` |
898
+ | `3e5b3271bdb4` | certain | You have not voted on this item. Casting arrives with the vote form. | `modules/hall-ui/public/government.js:785` |
899
899
  | `6b759151f722` | certain | You have reached the end. The button below is now active. | `modules/hall-ui/public/primer.js:529` |
900
900
  | `6d5a4ca58dd6` | certain | You haven’t joined any goals yet. | `modules/hall-ui/public/goals.js:83` |
901
- | `e82ec651f80a` | certain | You voted | `modules/hall-ui/public/government.js:754` |
901
+ | `e82ec651f80a` | certain | You voted | `modules/hall-ui/public/government.js:784` |
902
902
  | `8e1915b19274` | certain | You're in the {…} server with your rank role. | `modules/hall-ui/public/settings.js:820` |
903
903
  | `6a4ca8ccf466` | certain | You're not signed in yet. Sign in to manage your preferences. | `modules/hall-ui/public/settings.html:34` |
904
904
  | `59a66b5ac5dd` | certain | Your box is up — waiting for the terminal to come online (a few seconds after boot)… | `modules/hall-ui/public/box-panel.js:282` |
@@ -932,7 +932,7 @@ Identical copy within one surface. Sometimes right (a repeated button), sometime
932
932
  | `44e6e402db94` | certain | account, then open | `modules/hall-ui/public/builders.js:984` |
933
933
  | `ae43396446ed` | certain | account. | `modules/hall-ui/public/builders.js:984` |
934
934
  | `9612c983451f` | certain | achieved · | `modules/hall-ui/public/roadmap.js:238` |
935
- | `dbfc9e6e921b` | certain | active builder{…}: {…} | `modules/hall-ui/public/government.js:580` |
935
+ | `dbfc9e6e921b` | certain | active builder{…}: {…} | `modules/hall-ui/public/government.js:610` |
936
936
  | `644bc22a6ca6` | certain | already flagged | `modules/hall-ui/public/copy-desk.js:112` |
937
937
  | `644bc22a6ca6` | certain | already flagged | `modules/hall-ui/public/copy-desk.js:130` |
938
938
  | `754babaae931` | certain | and ask in | `modules/hall-ui/public/builders.js:982` |
@@ -941,7 +941,7 @@ Identical copy within one surface. Sometimes right (a repeated button), sometime
941
941
  | `b867876e8b6c` | certain | and press Enter. | `modules/hall-ui/public/builders.js:984` |
942
942
  | `ce58e109946a` | certain | and try again. | `modules/hall-ui/public/drachmae.js:162` |
943
943
  | `ce58e109946a` | certain | and try again. | `modules/hall-ui/public/primer.js:620` |
944
- | `d7c511423bc0` | certain | as configuration: {…} | `modules/hall-ui/public/government.js:574` |
944
+ | `d7c511423bc0` | certain | as configuration: {…} | `modules/hall-ui/public/government.js:604` |
945
945
  | `63bd14f73960` | certain | author trusted | `modules/hall-ui/public/gate.js:126` |
946
946
  | `93438b9ffa98` | certain | below or type | `modules/hall-ui/public/box-panel.js:226` |
947
947
  | `1f5e924adf9d` | certain | box — | `modules/hall-ui/public/box-panel.js:336` |
@@ -957,7 +957,7 @@ Identical copy within one surface. Sometimes right (a repeated button), sometime
957
957
  | `b2ed350c2c2c` | certain | criteria planned · no tasks yet | `modules/hall-ui/public/roadmap.js:181` |
958
958
  | `563e03d200c6` | certain | designed, task-tracked, not yet built | `modules/hall-ui/public/diagrams.html:52` |
959
959
  | `de71820e0a5a` | certain | dev box | `modules/hall-ui/public/diagrams.html:83` |
960
- | `21d1993bcb15` | certain | documented for later | `modules/hall-ui/public/government.js:572` |
960
+ | `21d1993bcb15` | certain | documented for later | `modules/hall-ui/public/government.js:602` |
961
961
  | `16d18b40bd23` | certain | drag to pan · ⌘/ctrl + scroll to zoom · ⤢ fullscreen | `modules/hall-ui/public/diagram-viewer.js:121` |
962
962
  | `1f80614e6960` | certain | drag to pan, scroll to zoom, or open it fullscreen | `modules/hall-ui/public/diagrams.html:83` |
963
963
  | `77b0b2b446a1` | certain | e.g. octocat | `modules/hall-ui/public/builders.js:553` |
@@ -992,7 +992,7 @@ Identical copy within one surface. Sometimes right (a repeated button), sometime
992
992
  | `8c22f0ee5edb` | certain | looked at | `modules/hall-ui/public/copy-desk.js:114` |
993
993
  | `754bdec368ed` | certain | lowest credits | `modules/hall-ui/public/hall-widgets.js:136` |
994
994
  | `cffba8409070` | certain | manage its visibility in Settings → Cross-project record | `modules/hall-ui/public/profile.js:200` |
995
- | `5c3fdd34cd02` | certain | means expressible through the real configuration — a rank-based membership plus a pass rule — with no new code | `modules/hall-ui/public/government.js:580` |
995
+ | `5c3fdd34cd02` | certain | means expressible through the real configuration — a rank-based membership plus a pass rule — with no new code | `modules/hall-ui/public/government.js:610` |
996
996
  | `70c234985d42` | certain | most recent first | `modules/hall-ui/public/hall-widgets.js:134` |
997
997
  | `7421250dc155` | certain | name, author, origin project, or licence… | `modules/hall-ui/public/modules.html:30` |
998
998
  | `f61d8fc1516d` | certain | new SSH identity | `modules/hall-ui/public/harbor.js:122` |
@@ -1006,7 +1006,7 @@ Identical copy within one surface. Sometimes right (a repeated button), sometime
1006
1006
  | `3916a3dc8e98` | certain | not started | `modules/hall-ui/public/roadmap.js:101` |
1007
1007
  | `3916a3dc8e98` | certain | not started | `modules/hall-ui/public/roadmap.js:238` |
1008
1008
  | `e2c643fbf4d6` | certain | npm install | `modules/hall-ui/public/builders.js:1025` |
1009
- | `e90b5601ce16` | certain | objected to | `modules/hall-ui/public/government.js:664` |
1009
+ | `e90b5601ce16` | certain | objected to | `modules/hall-ui/public/government.js:694` |
1010
1010
  | `351d56b80a6c` | certain | of all in-flight tasks shipped | `modules/hall-ui/public/roadmap.js:248` |
1011
1011
  | `99f88f2af2ee` | certain | of work — a tangent, an investigation, an unprompted suggestion — instead of staying on your claimed task. It | `modules/hall-ui/public/settings.html:213` |
1012
1012
  | `5e7a2220c6a9` | certain | of {…} | `modules/hall-ui/public/roadmap.js:238` |
@@ -1022,17 +1022,17 @@ Identical copy within one surface. Sometimes right (a repeated button), sometime
1022
1022
  | `40087f68554c` | certain | pending — People tab | `modules/hall-ui/public/watch.html:38` |
1023
1023
  | `80ddf28baee7` | certain | rank-key (kebab-case) | `modules/hall-ui/public/government.html:59` |
1024
1024
  | `c5c105e9c27a` | certain | ready to claim | `modules/hall-ui/public/goals-page.js:395` |
1025
- | `f5657c77fa8a` | certain | recommended at your headcount | `modules/hall-ui/public/government.js:573` |
1025
+ | `f5657c77fa8a` | certain | recommended at your headcount | `modules/hall-ui/public/government.js:603` |
1026
1026
  | `16c43dc44f8f` | certain | recorded — Operations tab | `modules/hall-ui/public/watch.html:41` |
1027
1027
  | `26da1df6fd4a` | certain | reflects it. | `modules/hall-ui/public/settings.html:108` |
1028
1028
  | `594962dc9ec3` | certain | s into the view containers below (falling back to | `modules/hall-ui/public/index.html:43` |
1029
1029
  | `2a42549b34ae` | certain | said, when flagged: | `modules/hall-ui/public/copy-desk.js:85` |
1030
1030
  | `9bec9eb4829e` | certain | scope: {…} | `modules/hall-ui/public/goals-page.js:1301` |
1031
- | `fac041ec6dd7` | certain | selectable today | `modules/hall-ui/public/government.js:571` |
1031
+ | `fac041ec6dd7` | certain | selectable today | `modules/hall-ui/public/government.js:601` |
1032
1032
  | `a6f55d7aa6f7` | certain | shipped (live) | `modules/hall-ui/public/roadmap.js:248` |
1033
1033
  | `026ba1289d4d` | certain | shipped · | `modules/hall-ui/public/goals-page.js:1218` |
1034
1034
  | `ec6d8c900bc8` | certain | sign in | `modules/hall-ui/public/profile.js:265` |
1035
- | `cfc61d8cabe6` | certain | tally: {…} yes · {…} no — sitting under | `modules/hall-ui/public/government.js:756` |
1035
+ | `cfc61d8cabe6` | certain | tally: {…} yes · {…} no — sitting under | `modules/hall-ui/public/government.js:786` |
1036
1036
  | `129ed842096b` | certain | target gone | `modules/hall-ui/public/copy-desk.js:63` |
1037
1037
  | `4d8ee7d68974` | certain | task {…} | `modules/hall-ui/public/gate.js:123` |
1038
1038
  | `a41659dc2bee` | certain | tasks remaining | `modules/hall-ui/public/roadmap.js:248` |
@@ -1056,7 +1056,7 @@ Identical copy within one surface. Sometimes right (a repeated button), sometime
1056
1056
  | `4109de2e0bb9` | certain | whole surface | `modules/hall-ui/public/copy-desk.js:251` |
1057
1057
  | `143f77e2b782` | certain | why these are the same | `modules/hall-ui/public/task-detail.js:373` |
1058
1058
  | `ec7c228cb4ce` | certain | why this isn’t worth doing | `modules/hall-ui/public/task-detail.js:424` |
1059
- | `66d979d0db89` | certain | your vote | `modules/hall-ui/public/government.js:661` |
1059
+ | `66d979d0db89` | certain | your vote | `modules/hall-ui/public/government.js:691` |
1060
1060
  | `7e2f2aac0645` | certain | {…} You always see your own numbers here. | `modules/hall-ui/public/settings.js:580` |
1061
1061
  | `43b99dd1b755` | certain | {…} You can also ask in Discord #support. | `modules/hall-ui/public/box-panel.js:358` |
1062
1062
  | `43b99dd1b755` | certain | {…} You can also ask in Discord #support. | `modules/hall-ui/public/box-panel.js:377` |
@@ -1111,7 +1111,7 @@ Identical copy within one surface. Sometimes right (a repeated button), sometime
1111
1111
  | `a63451a6db06` | certain | — to start and stop your dev box on your behalf. | `modules/hall-ui/public/pair.js:53` |
1112
1112
  | `392afc533191` | certain | — type | `modules/hall-ui/public/builders.js:984` |
1113
1113
  | `68b547166d48` | certain | — {…} confirmed {…} can't land yet, so {…} reward is pending (it lands on ship). Rebase + re-ship or release { | `modules/hall-ui/public/builders.js:752` |
1114
- | `ff6b84565e10` | certain | — {…}{…} | `modules/hall-ui/public/government.js:575` |
1114
+ | `ff6b84565e10` | certain | — {…}{…} | `modules/hall-ui/public/government.js:605` |
1115
1115
  | `5b9fa7cb4fb0` | certain | …and {…} more waiting — | `modules/hall-ui/public/goal-inbox.js:121` |
1116
1116
  | `e35f11bdc5d7` | certain | …{…} more open ideas — triage clears them one at a time. | `modules/hall-ui/public/builders.js:1874` |
1117
1117
  | `de8fa5223aee` | certain | ‹ Prev | `modules/hall-ui/public/hall-kit.js:71` |
@@ -996,7 +996,7 @@
996
996
  "occurrences": 2,
997
997
  "at": [
998
998
  "modules/hall-ui/public/gate.js:205",
999
- "modules/hall-ui/public/government.js:812"
999
+ "modules/hall-ui/public/government.js:842"
1000
1000
  ]
1001
1001
  },
1002
1002
  {
@@ -1549,7 +1549,7 @@
1549
1549
  "surface": "builders-hall",
1550
1550
  "text": ", membership",
1551
1551
  "file": "modules/hall-ui/public/government.js",
1552
- "line": 756,
1552
+ "line": 786,
1553
1553
  "origin": "js-markup",
1554
1554
  "confidence": "certain"
1555
1555
  },
@@ -1855,7 +1855,7 @@
1855
1855
  "surface": "builders-hall",
1856
1856
  "text": "An objection returns the idea to its author with your reason and the section it faults \\u2014 the feedback they revise against.",
1857
1857
  "file": "modules/hall-ui/public/government.js",
1858
- "line": 711,
1858
+ "line": 741,
1859
1859
  "origin": "js-markup",
1860
1860
  "confidence": "certain"
1861
1861
  },
@@ -2026,7 +2026,7 @@
2026
2026
  "surface": "builders-hall",
2027
2027
  "text": "As configuration:",
2028
2028
  "file": "modules/hall-ui/public/government.js",
2029
- "line": 603,
2029
+ "line": 633,
2030
2030
  "origin": "js-markup",
2031
2031
  "confidence": "certain"
2032
2032
  },
@@ -2269,7 +2269,7 @@
2269
2269
  "surface": "builders-hall",
2270
2270
  "text": "Cast objection",
2271
2271
  "file": "modules/hall-ui/public/government.js",
2272
- "line": 711,
2272
+ "line": 741,
2273
2273
  "origin": "js-markup",
2274
2274
  "confidence": "certain"
2275
2275
  },
@@ -2332,7 +2332,7 @@
2332
2332
  "surface": "builders-hall",
2333
2333
  "text": "Charter library",
2334
2334
  "file": "modules/hall-ui/public/government.js",
2335
- "line": 580,
2335
+ "line": 610,
2336
2336
  "origin": "js-markup",
2337
2337
  "confidence": "certain"
2338
2338
  },
@@ -2566,7 +2566,7 @@
2566
2566
  "surface": "builders-hall",
2567
2567
  "text": "Closed sittings",
2568
2568
  "file": "modules/hall-ui/public/government.js",
2569
- "line": 782,
2569
+ "line": 812,
2570
2570
  "origin": "js-markup",
2571
2571
  "confidence": "certain"
2572
2572
  },
@@ -2998,7 +2998,7 @@
2998
2998
  "surface": "builders-hall",
2999
2999
  "text": "Could not load government data just now.",
3000
3000
  "file": "modules/hall-ui/public/government.js",
3001
- "line": 853,
3001
+ "line": 883,
3002
3002
  "origin": "js-markup",
3003
3003
  "confidence": "certain"
3004
3004
  },
@@ -3052,7 +3052,7 @@
3052
3052
  "surface": "builders-hall",
3053
3053
  "text": "Could not load the Board Room just now.",
3054
3054
  "file": "modules/hall-ui/public/government.js",
3055
- "line": 774,
3055
+ "line": 804,
3056
3056
  "origin": "js-markup",
3057
3057
  "confidence": "certain"
3058
3058
  },
@@ -3061,7 +3061,7 @@
3061
3061
  "surface": "builders-hall",
3062
3062
  "text": "Could not load the constitution just now.",
3063
3063
  "file": "modules/hall-ui/public/government.js",
3064
- "line": 598,
3064
+ "line": 628,
3065
3065
  "origin": "js-markup",
3066
3066
  "confidence": "certain"
3067
3067
  },
@@ -3457,7 +3457,7 @@
3457
3457
  "surface": "builders-hall",
3458
3458
  "text": "Could not vote: {…}",
3459
3459
  "file": "modules/hall-ui/public/government.js",
3460
- "line": 738,
3460
+ "line": 768,
3461
3461
  "origin": "js-notice",
3462
3462
  "confidence": "certain"
3463
3463
  },
@@ -4087,7 +4087,7 @@
4087
4087
  "surface": "builders-hall",
4088
4088
  "text": "Full Idea",
4089
4089
  "file": "modules/hall-ui/public/government.js",
4090
- "line": 639,
4090
+ "line": 669,
4091
4091
  "origin": "js-markup",
4092
4092
  "confidence": "certain"
4093
4093
  },
@@ -4348,7 +4348,7 @@
4348
4348
  "surface": "builders-hall",
4349
4349
  "text": "How a project moves between structures over time — summarized from the synthesis:",
4350
4350
  "file": "modules/hall-ui/public/government.js",
4351
- "line": 580,
4351
+ "line": 610,
4352
4352
  "origin": "js-markup",
4353
4353
  "confidence": "certain"
4354
4354
  },
@@ -4366,7 +4366,7 @@
4366
4366
  "surface": "builders-hall",
4367
4367
  "text": "How it has changed",
4368
4368
  "file": "modules/hall-ui/public/government.js",
4369
- "line": 603,
4369
+ "line": 633,
4370
4370
  "origin": "js-markup",
4371
4371
  "confidence": "certain"
4372
4372
  },
@@ -4429,7 +4429,7 @@
4429
4429
  "surface": "builders-hall",
4430
4430
  "text": "How this project is governed — the constitution it runs, the Board Room, and the ranks & permissions that administer it.",
4431
4431
  "file": "modules/hall-ui/public/government.js",
4432
- "line": 840,
4432
+ "line": 870,
4433
4433
  "origin": "js-text-assign",
4434
4434
  "confidence": "certain"
4435
4435
  },
@@ -5509,7 +5509,7 @@
5509
5509
  "surface": "builders-hall",
5510
5510
  "text": "No sitting has closed yet.",
5511
5511
  "file": "modules/hall-ui/public/government.js",
5512
- "line": 783,
5512
+ "line": 813,
5513
5513
  "origin": "js-markup",
5514
5514
  "confidence": "certain"
5515
5515
  },
@@ -5563,7 +5563,7 @@
5563
5563
  "surface": "builders-hall",
5564
5564
  "text": "No votes yet{…}.",
5565
5565
  "file": "modules/hall-ui/public/government.js",
5566
- "line": 657,
5566
+ "line": 687,
5567
5567
  "origin": "js-markup",
5568
5568
  "confidence": "certain"
5569
5569
  },
@@ -6292,7 +6292,7 @@
6292
6292
  "surface": "builders-hall",
6293
6293
  "text": "Ranks & Permissions is the Archon administration surface. The Constitution and the Board Room are yours to read.",
6294
6294
  "file": "modules/hall-ui/public/government.js",
6295
- "line": 824,
6295
+ "line": 854,
6296
6296
  "origin": "js-markup",
6297
6297
  "confidence": "certain"
6298
6298
  },
@@ -6733,7 +6733,7 @@
6733
6733
  "surface": "builders-hall",
6734
6734
  "text": "Restricted.",
6735
6735
  "file": "modules/hall-ui/public/government.js",
6736
- "line": 812,
6736
+ "line": 842,
6737
6737
  "origin": "js-text-assign",
6738
6738
  "confidence": "certain"
6739
6739
  },
@@ -7030,7 +7030,7 @@
7030
7030
  "surface": "builders-hall",
7031
7031
  "text": "Selectable today",
7032
7032
  "file": "modules/hall-ui/public/government.js",
7033
- "line": 580,
7033
+ "line": 610,
7034
7034
  "origin": "js-markup",
7035
7035
  "confidence": "certain"
7036
7036
  },
@@ -7624,7 +7624,7 @@
7624
7624
  "surface": "builders-hall",
7625
7625
  "text": "The developmental ladder: {…}. Formality is adopted only where informal coordination breaks.",
7626
7626
  "file": "modules/hall-ui/public/government.js",
7627
- "line": 586,
7627
+ "line": 616,
7628
7628
  "origin": "js-markup",
7629
7629
  "confidence": "certain"
7630
7630
  },
@@ -7795,7 +7795,7 @@
7795
7795
  "surface": "builders-hall",
7796
7796
  "text": "The seven government structures, for getting a team up to speed before deciding when to flip a switch.",
7797
7797
  "file": "modules/hall-ui/public/government.js",
7798
- "line": 580,
7798
+ "line": 610,
7799
7799
  "origin": "js-markup",
7800
7800
  "confidence": "certain"
7801
7801
  },
@@ -8020,7 +8020,7 @@
8020
8020
  "surface": "builders-hall",
8021
8021
  "text": "This is your idea \\u2014 its author does not vote on it. The board decides; a return comes back to you with its reason.",
8022
8022
  "file": "modules/hall-ui/public/government.js",
8023
- "line": 707,
8023
+ "line": 737,
8024
8024
  "origin": "js-markup",
8025
8025
  "confidence": "certain"
8026
8026
  },
@@ -8236,7 +8236,7 @@
8236
8236
  "surface": "builders-hall",
8237
8237
  "text": "Vote yes",
8238
8238
  "file": "modules/hall-ui/public/government.js",
8239
- "line": 711,
8239
+ "line": 741,
8240
8240
  "origin": "js-markup",
8241
8241
  "confidence": "certain"
8242
8242
  },
@@ -8371,7 +8371,7 @@
8371
8371
  "surface": "builders-hall",
8372
8372
  "text": "What this project runs today",
8373
8373
  "file": "modules/hall-ui/public/government.js",
8374
- "line": 603,
8374
+ "line": 633,
8375
8375
  "origin": "js-markup",
8376
8376
  "confidence": "certain"
8377
8377
  },
@@ -8479,7 +8479,7 @@
8479
8479
  "surface": "builders-hall",
8480
8480
  "text": "Why \\u2014 the reason the author will act on",
8481
8481
  "file": "modules/hall-ui/public/government.js",
8482
- "line": 711,
8482
+ "line": 741,
8483
8483
  "origin": "js-markup",
8484
8484
  "confidence": "certain"
8485
8485
  },
@@ -8623,7 +8623,7 @@
8623
8623
  "surface": "builders-hall",
8624
8624
  "text": "You have not voted on this item. Casting arrives with the vote form.",
8625
8625
  "file": "modules/hall-ui/public/government.js",
8626
- "line": 755,
8626
+ "line": 785,
8627
8627
  "origin": "js-markup",
8628
8628
  "confidence": "certain"
8629
8629
  },
@@ -8650,7 +8650,7 @@
8650
8650
  "surface": "builders-hall",
8651
8651
  "text": "You voted",
8652
8652
  "file": "modules/hall-ui/public/government.js",
8653
- "line": 754,
8653
+ "line": 784,
8654
8654
  "origin": "js-markup",
8655
8655
  "confidence": "certain"
8656
8656
  },
@@ -8956,7 +8956,7 @@
8956
8956
  "surface": "builders-hall",
8957
8957
  "text": "active builder{…}: {…}",
8958
8958
  "file": "modules/hall-ui/public/government.js",
8959
- "line": 580,
8959
+ "line": 610,
8960
8960
  "origin": "js-markup",
8961
8961
  "confidence": "certain"
8962
8962
  },
@@ -9037,7 +9037,7 @@
9037
9037
  "surface": "builders-hall",
9038
9038
  "text": "as configuration: {…}",
9039
9039
  "file": "modules/hall-ui/public/government.js",
9040
- "line": 574,
9040
+ "line": 604,
9041
9041
  "origin": "js-markup",
9042
9042
  "confidence": "certain"
9043
9043
  },
@@ -9181,7 +9181,7 @@
9181
9181
  "surface": "builders-hall",
9182
9182
  "text": "documented for later",
9183
9183
  "file": "modules/hall-ui/public/government.js",
9184
- "line": 572,
9184
+ "line": 602,
9185
9185
  "origin": "js-markup",
9186
9186
  "confidence": "certain"
9187
9187
  },
@@ -9496,7 +9496,7 @@
9496
9496
  "surface": "builders-hall",
9497
9497
  "text": "means expressible through the real configuration — a rank-based membership plus a pass rule — with no new code. This project has",
9498
9498
  "file": "modules/hall-ui/public/government.js",
9499
- "line": 580,
9499
+ "line": 610,
9500
9500
  "origin": "js-markup",
9501
9501
  "confidence": "certain"
9502
9502
  },
@@ -9622,7 +9622,7 @@
9622
9622
  "surface": "builders-hall",
9623
9623
  "text": "objected to",
9624
9624
  "file": "modules/hall-ui/public/government.js",
9625
- "line": 664,
9625
+ "line": 694,
9626
9626
  "origin": "js-markup",
9627
9627
  "confidence": "certain"
9628
9628
  },
@@ -9766,7 +9766,7 @@
9766
9766
  "surface": "builders-hall",
9767
9767
  "text": "recommended at your headcount",
9768
9768
  "file": "modules/hall-ui/public/government.js",
9769
- "line": 573,
9769
+ "line": 603,
9770
9770
  "origin": "js-markup",
9771
9771
  "confidence": "certain"
9772
9772
  },
@@ -9820,7 +9820,7 @@
9820
9820
  "surface": "builders-hall",
9821
9821
  "text": "selectable today",
9822
9822
  "file": "modules/hall-ui/public/government.js",
9823
- "line": 571,
9823
+ "line": 601,
9824
9824
  "origin": "js-markup",
9825
9825
  "confidence": "certain"
9826
9826
  },
@@ -9856,7 +9856,7 @@
9856
9856
  "surface": "builders-hall",
9857
9857
  "text": "tally: {…} yes · {…} no — sitting under",
9858
9858
  "file": "modules/hall-ui/public/government.js",
9859
- "line": 756,
9859
+ "line": 786,
9860
9860
  "origin": "js-markup",
9861
9861
  "confidence": "certain"
9862
9862
  },
@@ -10072,7 +10072,7 @@
10072
10072
  "surface": "builders-hall",
10073
10073
  "text": "your vote",
10074
10074
  "file": "modules/hall-ui/public/government.js",
10075
- "line": 661,
10075
+ "line": 691,
10076
10076
  "origin": "js-markup",
10077
10077
  "confidence": "certain"
10078
10078
  },
@@ -10567,7 +10567,7 @@
10567
10567
  "surface": "builders-hall",
10568
10568
  "text": "— {…}{…}",
10569
10569
  "file": "modules/hall-ui/public/government.js",
10570
- "line": 575,
10570
+ "line": 605,
10571
10571
  "origin": "js-markup",
10572
10572
  "confidence": "certain"
10573
10573
  },
@@ -664,7 +664,12 @@ async function boardRoomView({ closedLimit = 20 } = {}) {
664
664
  function recommendedCharter(headcount) {
665
665
  const n = Number(headcount) || 0;
666
666
  if (n <= 2) return { key: 'monarchy', rung: 'solo/pair', why: 'informal coordination has nothing to break yet — the founding monarchy is the honest shape' };
667
- if (n <= 8) return { key: 'direct-democracy', rung: 'circle (3–8)', why: 'a consent circle of all trusted members — the rung this ladder was written on' };
667
+ // "all trusted members" was not expressible under the pre-1003094 exact-match
668
+ // grammar, so at this headcount the library recommended a charter it could not
669
+ // state (task 1003095). It is expressible now — `rank:xenos+` seats every
670
+ // builder — and the wording says the thing the predicate actually does rather
671
+ // than a phrase with no predicate behind it.
672
+ if (n <= 8) return { key: 'direct-democracy', rung: 'circle (3–8)', why: 'a consent circle of every builder (rank:xenos+) — the rung this ladder was written on' };
668
673
  if (n <= 49) return { key: 'presidential', rung: '~9: name an executive', why: 'past ~9, naming an executive beats everyone coordinating with everyone' };
669
674
  if (n <= 149) return { key: 'foundation', rung: '~50: written charter + council', why: 'past ~50, the charter must be written down and a council carries it' };
670
675
  return { key: 'federation', rung: '~150: adjudication separates — federate beyond', why: 'past ~150, one body cannot both govern and adjudicate; federate' };
@@ -539,15 +539,40 @@
539
539
  // config — a rank-predicate membership plus first_ratifier|consent — so nobody
540
540
  // is misled about what a settings change can and cannot reach. Source: the
541
541
  // Six-Variables synthesis (Verro Labs, Aug 2026), Parts III–IV, via the spec.
542
+ // EVERY SELECTABLE CHARTER CARRIES A MACHINE-CHECKABLE PREDICATE (task 1003095).
543
+ //
544
+ // This library is the ONLY place in the product that tells an owner what to
545
+ // type. That makes a wrong `how` line worse than no library at all — and two
546
+ // of them were wrong. Under the pre-1003094 exact-match grammar,
547
+ // `membership rank:xenos (everyone)` seated NEWCOMERS ONLY: an owner who
548
+ // followed this page handed the board to the least-trusted tier and locked
549
+ // themselves out. Timocratic Republic was true as far as it went and silent
550
+ // about the same surprise.
551
+ //
552
+ // So the claim is no longer prose. `predicate` is the exact string an owner
553
+ // types, and `seatsRanks` is what it must resolve to — checked in
554
+ // tests/government_charter_library.mjs against the REAL parser
555
+ // (modules/government/membership-predicate.js), not against a copy of the
556
+ // intent. If the grammar ever changes underneath this file again, that test
557
+ // reds instead of the page quietly lying.
558
+ //
559
+ // `predicate: null` means the predicate is the owner's to choose (Foundation
560
+ // names their own custom rank), which is honest rather than unchecked — the
561
+ // test asserts such a charter says so in its `how`.
542
562
  const CHARTERS = [
543
563
  { key: 'monarchy', name: 'Monarchy / BDFL', selectable: true,
544
- how: "membership rank:archon · first ratifier · no clock — the shipped default",
564
+ predicate: 'rank:archon', seatsRanks: ['archon'],
565
+ how: 'membership rank:archon · first ratifier · no clock — the shipped default',
545
566
  blurb: 'One trusted executive decides. Fast, legible, and honest at founding scale; the shape every project actually starts in.' },
546
567
  { key: 'timocratic-republic', name: 'Timocratic Republic', selectable: true,
547
- how: 'membership by a trusted rank (e.g. rank:metic) · consent · a timed sitting',
568
+ predicate: 'rank:metic+', seatsRanks: ['metic', 'archon'],
569
+ how: 'membership rank:metic+ (metic and above — Archons included) · consent · a timed sitting',
548
570
  blurb: 'Standing accrues to those actively building: the franchise follows earned rank, not headcount.' },
549
571
  { key: 'direct-democracy', name: 'Direct Democracy', selectable: true,
550
- how: 'membership rank:xenos (everyone) · consent · a timed sitting',
572
+ predicate: 'rank:xenos+', seatsRanks: ['xenos', 'thetes', 'metic', 'archon'],
573
+ // The `+` is load-bearing and is why it is spelled out: a bare rank:xenos
574
+ // seats newcomers ONLY, which is what this line used to say.
575
+ how: 'membership rank:xenos+ (every builder — the + is what makes it everyone) · consent · a timed sitting',
551
576
  blurb: 'Every builder sits on the board. Consent keeps it unblockable: silence passes, one reasoned objection returns.' },
552
577
  { key: 'presidential', name: 'Presidential', selectable: false,
553
578
  blurb: 'An ELECTED executive with a fixed term. Needs election machinery this system does not have yet — documented for later.' },
@@ -556,7 +581,12 @@
556
581
  { key: 'federation', name: 'Federation', selectable: false,
557
582
  blurb: 'Multiple chambers or sub-projects, each self-governing, coordinating through a compact. The >150 shape — documented for later.' },
558
583
  { key: 'foundation', name: 'Foundation', selectable: true,
559
- how: 'a CUSTOM rank as the trustee body (the Ranks tab creates it) · consent · a timed sitting',
584
+ // The one selectable charter whose predicate the OWNER names — a custom
585
+ // rank is a DB row this page cannot know. Deliberately null rather than a
586
+ // made-up example, and the `how` says so: `+` does not apply to a custom
587
+ // rank (it has no ladder position), so a bare key is the correct form here.
588
+ predicate: null, seatsRanks: null,
589
+ how: 'membership rank:<your-trustee-rank> — a CUSTOM rank you create on the Ranks tab, named exactly (no +, a custom rank has no ladder position) · consent · a timed sitting',
560
590
  blurb: 'A written charter carried by a small appointed council. Expressible today by governing through a custom rank.' },
561
591
  ];
562
592
  const TRAJECTORIES = [
package/package-lock.json CHANGED
@@ -1,12 +1,12 @@
1
1
  {
2
2
  "name": "@bongos/core",
3
- "version": "1.19.252",
3
+ "version": "1.19.253",
4
4
  "lockfileVersion": 3,
5
5
  "requires": true,
6
6
  "packages": {
7
7
  "": {
8
8
  "name": "@bongos/core",
9
- "version": "1.19.252",
9
+ "version": "1.19.253",
10
10
  "license": "AGPL-3.0-or-later",
11
11
  "dependencies": {
12
12
  "express": "^4.21.2",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@bongos/core",
3
- "version": "1.19.252",
3
+ "version": "1.19.253",
4
4
  "description": "Cloud Bongos — the AI-first build platform core (GDS + platform surfaces + module system), installed as a versioned dependency (ADR 0108).",
5
5
  "license": "AGPL-3.0-or-later",
6
6
  "main": "src/platform-server.js",
package/src/module-api.js CHANGED
@@ -931,8 +931,10 @@ const { validateOrRespond, LIMITS, parseId, asyncHandler, corsPublicGet, parsePa
931
931
  // landed since 1.19.250 with no explicit bump. run 32204008770. (task 1002620)
932
932
  // 1.19.252 — CI auto-patch (publish-on-merge, ADR 0161): carrier for merges
933
933
  // landed since 1.19.251 with no explicit bump. run 32205191350. (task 1002620)
934
+ // 1.19.253 — CI auto-patch (publish-on-merge, ADR 0161): carrier for merges
935
+ // landed since 1.19.252 with no explicit bump. run 32205833181. (task 1002620)
934
936
  // ---------------------------------------------------------------------------
935
- const CORE_VERSION = '1.19.252'; // CI auto-patch carrier (ADR 0161); see changelog above
937
+ const CORE_VERSION = '1.19.253'; // CI auto-patch carrier (ADR 0161); see changelog above
936
938
 
937
939
  // A namespaced logger so a module's log lines are attributable + consistent.
938
940
  // Usage: const log = api.logger('dev-box'); log.info('mounted');
@@ -67,7 +67,12 @@ test('the library presents all seven structures with honest selectable marks (cl
67
67
  assert.equal(selectableTrue, 4, 'monarchy, timocratic republic, direct democracy, foundation — the config-expressible four');
68
68
  const trueBlocks = lib.split('selectable: true').slice(1);
69
69
  for (const b of trueBlocks) {
70
- assert.ok(b.slice(0, 200).includes('how:'), 'a selectable structure names its configuration');
70
+ // Window widened from 200 (task 1003095): a selectable entry now also carries
71
+ // `predicate` + `seatsRanks` ahead of `how`, which the test below checks
72
+ // against the real parser. Cut to the next entry rather than a magic length,
73
+ // so adding another field cannot silently push `how` out of view again.
74
+ const entry = b.split('{ key:')[0];
75
+ assert.ok(entry.includes('how:'), 'a selectable structure names its configuration');
71
76
  }
72
77
  assert.match(client, /recommended at your headcount/, 'the one live datum is rendered');
73
78
  assert.match(client, /c\.key === recommendedKey/, "the pill is driven by the SERVER's recommendation, never re-derived client-side");
@@ -75,3 +80,104 @@ test('the library presents all seven structures with honest selectable marks (cl
75
80
  assert.ok(client.includes(`name: '${t}'`), `trajectory ${t} present`);
76
81
  }
77
82
  });
83
+
84
+
85
+ // ── R26's ask, made mechanical (task 1003095) ───────────────────────────────
86
+ //
87
+ // The library is the ONLY place in the product that tells an owner WHAT TO TYPE.
88
+ // That makes a wrong `how` line worse than no library: an owner who followed
89
+ // `membership rank:xenos (everyone)` under the old exact-match grammar handed
90
+ // the board to newcomers and locked themselves out. R26's done-when asks for
91
+ // "selectable-today is honestly marked" — prose cannot be honest by assertion,
92
+ // so this checks every selectable charter's predicate against the REAL parser.
93
+ //
94
+ // Deliberately NOT a copy of the intent: it imports
95
+ // modules/government/membership-predicate.js, the same module the resolver and
96
+ // the config sanitizer use. If the grammar moves underneath this page again,
97
+ // this test reds instead of the page quietly lying.
98
+
99
+ function charterEntries() {
100
+ const client = fs.readFileSync(path.join(ROOT, 'modules/hall-ui/public/government.js'), 'utf8');
101
+ const lib = client.slice(client.indexOf('const CHARTERS'), client.indexOf('const TRAJECTORIES'));
102
+ const out = [];
103
+ for (const block of lib.split('{ key:').slice(1)) {
104
+ const key = /^\s*'([a-z-]+)'/.exec(block);
105
+ if (!key) continue;
106
+ const selectable = /selectable: (true|false)/.exec(block);
107
+ const predicate = /predicate: (?:'([^']*)'|null)/.exec(block);
108
+ const seats = /seatsRanks: (?:\[([^\]]*)\]|null)/.exec(block);
109
+ const how = /how: '([^']*)'/.exec(block) || /how: "([^"]*)"/.exec(block);
110
+ out.push({
111
+ key: key[1],
112
+ selectable: selectable ? selectable[1] === 'true' : null,
113
+ predicate: predicate ? (predicate[1] ?? null) : undefined,
114
+ seatsRanks: seats ? (seats[1] ? seats[1].split(',').map((x) => x.trim().replace(/'/g, '')) : null) : undefined,
115
+ how: how ? how[1] : null,
116
+ });
117
+ }
118
+ return out;
119
+ }
120
+
121
+ test('every SELECTABLE charter names a predicate the real resolver would actually seat as described', () => {
122
+ const { parseMembershipPredicate } = require(path.join(GOV, 'membership-predicate.js'));
123
+ const entries = charterEntries();
124
+ assert.equal(entries.length, 7, 'sanity: parsed all seven structures');
125
+
126
+ for (const c of entries.filter((e) => e.selectable)) {
127
+ assert.notEqual(c.predicate, undefined, `${c.key}: a selectable charter must declare a predicate field (null = owner-chosen)`);
128
+ assert.notEqual(c.seatsRanks, undefined, `${c.key}: a selectable charter must declare seatsRanks`);
129
+
130
+ if (c.predicate === null) {
131
+ // Owner-chosen (Foundation's custom trustee rank). Honest rather than
132
+ // unchecked: it must SAY the predicate is theirs to name.
133
+ assert.equal(c.seatsRanks, null, `${c.key}: an owner-chosen predicate cannot claim a fixed seat list`);
134
+ assert.match(c.how, /custom/i, `${c.key}: must say the rank is one the owner creates`);
135
+ continue;
136
+ }
137
+
138
+ const parsed = parseMembershipPredicate(c.predicate);
139
+ assert.ok(parsed, `${c.key}: "${c.predicate}" does not parse — this page would tell an owner to type something that seats NOBODY`);
140
+ assert.deepEqual([...parsed.rankKeys], c.seatsRanks,
141
+ `${c.key}: "${c.predicate}" seats ${JSON.stringify([...parsed.rankKeys])}, but the library claims ${JSON.stringify(c.seatsRanks)}`);
142
+ assert.ok(c.how.includes(c.predicate),
143
+ `${c.key}: the how-line must contain the exact predicate an owner types (expected "${c.predicate}" in "${c.how}")`);
144
+ }
145
+ });
146
+
147
+ test('THE REGRESSION: the two lines that were untrue now seat what they say', () => {
148
+ const { parseMembershipPredicate } = require(path.join(GOV, 'membership-predicate.js'));
149
+ const by = Object.fromEntries(charterEntries().map((c) => [c.key, c]));
150
+
151
+ // Direct Democracy said "rank:xenos (everyone)" and seated NEWCOMERS ONLY.
152
+ const dd = by['direct-democracy'];
153
+ assert.equal(dd.predicate, 'rank:xenos+');
154
+ assert.deepEqual([...parseMembershipPredicate(dd.predicate).rankKeys], ['xenos', 'thetes', 'metic', 'archon'],
155
+ 'every builder, which is what "everyone" has to mean');
156
+ assert.ok(!/rank:xenos[^+]/.test(dd.how), 'the how-line must not show the bare form that caused the bug');
157
+
158
+ // Timocratic Republic was true as far as it went and silent about Archons.
159
+ const tr = by['timocratic-republic'];
160
+ assert.equal(tr.predicate, 'rank:metic+');
161
+ assert.deepEqual([...parseMembershipPredicate(tr.predicate).rankKeys], ['metic', 'archon']);
162
+ assert.match(tr.how, /Archons included/i, 'the omission that made it quietly surprising is now stated');
163
+ });
164
+
165
+ test('the recommendation names a charter the config can actually express', () => {
166
+ // The library recommended "a consent circle of all trusted members" at
167
+ // headcount 3–8 — a phrase with no predicate behind it under exact-match. The
168
+ // recommendation must point at a charter this page can tell an owner to type.
169
+ const by = Object.fromEntries(charterEntries().map((c) => [c.key, c]));
170
+ for (const n of [1, 3, 8, 9, 50, 150]) {
171
+ const rec = recommendedCharter(n);
172
+ const charter = by[rec.key];
173
+ assert.ok(charter, `headcount ${n} recommends "${rec.key}", which is not in the library`);
174
+ if (charter.selectable) {
175
+ assert.ok(charter.predicate !== undefined,
176
+ `headcount ${n} recommends selectable "${rec.key}" — it must carry a checkable predicate`);
177
+ }
178
+ }
179
+ const circle = recommendedCharter(3);
180
+ assert.equal(circle.key, 'direct-democracy');
181
+ assert.match(circle.why, /rank:xenos\+/,
182
+ 'the why must name the predicate that delivers it, not a phrase with nothing behind it');
183
+ });