@bongos/core 1.24.94 → 1.24.96

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 (56) hide show
  1. package/.bongos-core.json +143 -43
  2. package/clients/bongos-client/README.md +1 -1
  3. package/clients/bongos-client/bongos-client.global.js +2 -0
  4. package/clients/bongos-client/index.cjs +2 -0
  5. package/clients/bongos-client/index.d.ts +2 -0
  6. package/clients/bongos-client/index.mjs +2 -0
  7. package/docs/adr/0405-each-character-has-one-colour-and-the-visor-wears-it.md +31 -0
  8. package/docs/adr/README.md +1 -0
  9. package/docs/api/openapi.json +49 -1
  10. package/docs/api-reference.md +3 -2
  11. package/docs/copy-inventory.md +12 -12
  12. package/docs/copy-registry.json +12 -12
  13. package/docs/design/characters/v2/artisan-visor.png +0 -0
  14. package/docs/design/characters/v2/artisan.png +0 -0
  15. package/docs/design/characters/v2/artist-visor.png +0 -0
  16. package/docs/design/characters/v2/artist.png +0 -0
  17. package/docs/design/characters/v2/draw-characters.js +465 -0
  18. package/docs/design/characters/v2/patron-visor.png +0 -0
  19. package/docs/design/characters/v2/patron.png +0 -0
  20. package/docs/design/characters/v2/sheet.html +114 -0
  21. package/docs/module-api-changelog.md +4 -0
  22. package/docs/page-inventory.json +2 -0
  23. package/docs/page-readings.json +35 -35
  24. package/modules/autonomy/db.js +48 -0
  25. package/modules/autonomy/routes/autonomy.js +15 -0
  26. package/modules/government/catalog.js +1 -1
  27. package/modules/hall-ui/public/characters/artisan-face.png +0 -0
  28. package/modules/hall-ui/public/characters/artisan-visor.png +0 -0
  29. package/modules/hall-ui/public/characters/artisan.png +0 -0
  30. package/modules/hall-ui/public/characters/artist-face.png +0 -0
  31. package/modules/hall-ui/public/characters/artist-visor.png +0 -0
  32. package/modules/hall-ui/public/characters/artist.png +0 -0
  33. package/modules/hall-ui/public/characters/patron-face.png +0 -0
  34. package/modules/hall-ui/public/characters/patron-visor.png +0 -0
  35. package/modules/hall-ui/public/characters/patron.png +0 -0
  36. package/modules/hall-ui/public/craft-mode.js +15 -4
  37. package/modules/hall-ui/public/home-city-draw.js +24 -2
  38. package/modules/hall-ui/public/home-city.css +15 -0
  39. package/modules/hall-ui/public/home-city.js +3 -1
  40. package/modules/hall-ui/public/home-runner.js +248 -0
  41. package/modules/hall-ui/public/index.html +8 -5
  42. package/modules/hall-ui/public/style.css +18 -5
  43. package/modules/hall-ui/public/visor.css +47 -5
  44. package/modules/hall-ui/public/visor.js +71 -5
  45. package/modules/hall-ui/records/characters.md +19 -0
  46. package/modules/hall-ui/records/home-runner.md +19 -0
  47. package/modules/hall-ui/records/visor.md +7 -0
  48. package/package-lock.json +2 -2
  49. package/package.json +1 -1
  50. package/release-notes.json +12 -0
  51. package/scripts/hall-preview/server.js +4 -0
  52. package/src/module-api.js +1 -1
  53. package/tests/autonomy_runner_goal_stats.mjs +92 -0
  54. package/tests/character_creation.mjs +44 -7
  55. package/tests/hall_visor.mjs +48 -2
  56. package/tests/home_runner.mjs +115 -0
package/.bongos-core.json CHANGED
@@ -2,22 +2,22 @@
2
2
  "artifact": "bongos-core",
3
3
  "manifest_schema": 1,
4
4
  "generator": "scripts/bongos/package-core.js",
5
- "core_version": "1.24.94",
6
- "core_contract": "1.24.94",
7
- "source_commit": "6a898f9254ca27fd22797dec8c2f6c309e491bff",
5
+ "core_version": "1.24.96",
6
+ "core_contract": "1.24.96",
7
+ "source_commit": "c971214e6127a91182508964726d83892c1139e6",
8
8
  "source_ref": "HEAD",
9
- "built_at": "2026-11-12T20:40:39.447Z",
9
+ "built_at": "2026-11-12T21:09:14.570Z",
10
10
  "redaction": {
11
11
  "model": "docs-redacted+functional-verbatim",
12
- "docs_redacted": 651,
12
+ "docs_redacted": 654,
13
13
  "agent_docs_stubbed": 32,
14
- "functional_verbatim": 3968,
14
+ "functional_verbatim": 3985,
15
15
  "rules": 3,
16
16
  "gate_literals": 3,
17
17
  "gate": "passed"
18
18
  },
19
- "file_count": 4652,
20
- "tree_sha256": "6dc7ece8c2d5151842e7d7b02d1a13e17634fc2e8a67c3d9c2a4a295d4f42d8c",
19
+ "file_count": 4672,
20
+ "tree_sha256": "6149ea852a37da683a1c3d47ffad0b9a72c10d4913887680ef968cca7ae02242",
21
21
  "files": [
22
22
  {
23
23
  "path": ".claude/skills/ask-for-help/SKILL.md",
@@ -332,12 +332,12 @@
332
332
  {
333
333
  "path": "clients/bongos-client/README.md",
334
334
  "mode": "0000644",
335
- "sha256": "3bc1103b8d91e1e507f5a8b85d7c942e1ef16e00d5f065aca6a793307c44c972"
335
+ "sha256": "4ff75ca0d2adee84f957a5633719a2de60590b0b7f6c03b0138038f91adfe2a4"
336
336
  },
337
337
  {
338
338
  "path": "clients/bongos-client/bongos-client.global.js",
339
339
  "mode": "0000644",
340
- "sha256": "2a46c5f4565c5f02e0a3d3985060cf661183f569236895f9c2479f1f9196b85f"
340
+ "sha256": "ce8e19a56c11cd71d19e61fabfe4361f0bfbf4705e0e6c07e5e9dbecd277f8b0"
341
341
  },
342
342
  {
343
343
  "path": "clients/bongos-client/examples/hello-world.mjs",
@@ -347,17 +347,17 @@
347
347
  {
348
348
  "path": "clients/bongos-client/index.cjs",
349
349
  "mode": "0000644",
350
- "sha256": "975426f96560c6626972a516815460491f179d45c74e04b14c0806c813d91cb0"
350
+ "sha256": "80b738abcb74d37cabb297eb0dda73be947bfe6af941410054b8294ece66f977"
351
351
  },
352
352
  {
353
353
  "path": "clients/bongos-client/index.d.ts",
354
354
  "mode": "0000644",
355
- "sha256": "61118835fbddfe0f7a64113ccc4b9e2f79ea095b4c7bef0b079250a83871f652"
355
+ "sha256": "19fa175cadcef67ccf418470f7bdd3bd666f67e11ad85bb17bf082c66b4d49e1"
356
356
  },
357
357
  {
358
358
  "path": "clients/bongos-client/index.mjs",
359
359
  "mode": "0000644",
360
- "sha256": "9a28e5de6e9ea8b7899ec698be08d55f266827ac7e5196805d2b8badb8e28878"
360
+ "sha256": "9c2e999dedc65cf0574bb6b8bd1d5022a8c222ffcb444cd12969872db327642d"
361
361
  },
362
362
  {
363
363
  "path": "clients/bongos-client/package.json",
@@ -2484,20 +2484,25 @@
2484
2484
  "mode": "0000644",
2485
2485
  "sha256": "b383c189cf0069b724ee895d984592ec5bc04aded9deef32ea7129f7ce3381da"
2486
2486
  },
2487
+ {
2488
+ "path": "docs/adr/0405-each-character-has-one-colour-and-the-visor-wears-it.md",
2489
+ "mode": "0000644",
2490
+ "sha256": "1d8b8c6782ca394e6f85072355140136eff97e1a26ace0fcf392f1206b7a77ec"
2491
+ },
2487
2492
  {
2488
2493
  "path": "docs/adr/README.md",
2489
2494
  "mode": "0000644",
2490
- "sha256": "cf5bfe36cd688b813a79d08b7020ff32323dd77edb1bcdbc8a9e70ca1cae02b6"
2495
+ "sha256": "567b8b3dcf30ff69de7c484aa84e142bccd2753c9c89fd1c1ab941c9519a0560"
2491
2496
  },
2492
2497
  {
2493
2498
  "path": "docs/api-reference.md",
2494
2499
  "mode": "0000644",
2495
- "sha256": "dd3ab48cc4735ba7af87f656b299ede977c38623318350b6b32191538c6f8b52"
2500
+ "sha256": "e1e8deb350c6725b9514d99cffb21dfc04cfaf6b80e45ea35aa6f5a9683fa919"
2496
2501
  },
2497
2502
  {
2498
2503
  "path": "docs/api/openapi.json",
2499
2504
  "mode": "0000644",
2500
- "sha256": "8004732e03a7d1cead9cba35155c8336015e23f509fcd2b1ef13fbf887a549ec"
2505
+ "sha256": "758e4fd2a3d52e4d3b3a1527c9c3ff1864715389600132d8f5c9457292b74ad7"
2501
2506
  },
2502
2507
  {
2503
2508
  "path": "docs/architecture.md",
@@ -2522,12 +2527,12 @@
2522
2527
  {
2523
2528
  "path": "docs/copy-inventory.md",
2524
2529
  "mode": "0000644",
2525
- "sha256": "4f561c4c13b185d12c1cb4c2dce8d7f4415bf22fd3d9f6969556e21335a1f643"
2530
+ "sha256": "94fedf8bca9d202551ac01582ae236b9fc3d4dd38805f079023b8c61dab8c34a"
2526
2531
  },
2527
2532
  {
2528
2533
  "path": "docs/copy-registry.json",
2529
2534
  "mode": "0000644",
2530
- "sha256": "e2fd36ea4e5ba73c38737e07f3ced678d330356bd803cb52ecbb65063e85e457"
2535
+ "sha256": "3b9b2e2d1549748d240c2de55c53e8a8440241581a3cc848554993303dda3c5f"
2531
2536
  },
2532
2537
  {
2533
2538
  "path": "docs/design/apex-pass-2-direction.md",
@@ -2539,6 +2544,46 @@
2539
2544
  "mode": "0000644",
2540
2545
  "sha256": "23b1de77bb1cfa998257fbad37b4dd64235ddd5b8e17f53bc83d77d9c6fdd6a8"
2541
2546
  },
2547
+ {
2548
+ "path": "docs/design/characters/v2/artisan-visor.png",
2549
+ "mode": "0000644",
2550
+ "sha256": "6a1ee297f0cc7ff159cc71f7c78df927999893767803d9a005a3068853167d84"
2551
+ },
2552
+ {
2553
+ "path": "docs/design/characters/v2/artisan.png",
2554
+ "mode": "0000644",
2555
+ "sha256": "75efc5fa7efca72582c3354709bbc7de8a70ac9c5b6eac04d3349dc771a267aa"
2556
+ },
2557
+ {
2558
+ "path": "docs/design/characters/v2/artist-visor.png",
2559
+ "mode": "0000644",
2560
+ "sha256": "48250f3529f8cb6644cba99c6e3faeaab0c096838ca472bc7ba5e618569421bc"
2561
+ },
2562
+ {
2563
+ "path": "docs/design/characters/v2/artist.png",
2564
+ "mode": "0000644",
2565
+ "sha256": "e33cae66d718fdc39f22dc634f4c4ac466b119685f5f5a2d8e81534f27e19d31"
2566
+ },
2567
+ {
2568
+ "path": "docs/design/characters/v2/draw-characters.js",
2569
+ "mode": "0000644",
2570
+ "sha256": "3b9a6c07f8e2261c992f3d4f5e4b28e396c146ed3881a7c57c477a1a2e8389ad"
2571
+ },
2572
+ {
2573
+ "path": "docs/design/characters/v2/patron-visor.png",
2574
+ "mode": "0000644",
2575
+ "sha256": "9f95dedffdce4358a3e4f6f97c72b88ce065e4083ae1a9b4566a4a8ea8d7dcf1"
2576
+ },
2577
+ {
2578
+ "path": "docs/design/characters/v2/patron.png",
2579
+ "mode": "0000644",
2580
+ "sha256": "6fc2e84bafe99cb0cf040166bdaeec1431d5fb7d93c3f4900462c2dc2cf9fd53"
2581
+ },
2582
+ {
2583
+ "path": "docs/design/characters/v2/sheet.html",
2584
+ "mode": "0000644",
2585
+ "sha256": "b56308d99dee2d606475bbe6a4d9ca1efc472e18a8e0293d2d70a568bff9e887"
2586
+ },
2542
2587
  {
2543
2588
  "path": "docs/design/craft-mode-direction.md",
2544
2589
  "mode": "0000644",
@@ -3042,7 +3087,7 @@
3042
3087
  {
3043
3088
  "path": "docs/module-api-changelog.md",
3044
3089
  "mode": "0000644",
3045
- "sha256": "cb17eae6ff2bd4b1a362a0b1040306eb251eaf7bcd94926b4c1055f850e762e0"
3090
+ "sha256": "c407cd3900edf80b63e96c178fa53e015e4ba6b10aefdd1b6a7dd002387b3fba"
3046
3091
  },
3047
3092
  {
3048
3093
  "path": "docs/modules-contract.md",
@@ -3122,12 +3167,12 @@
3122
3167
  {
3123
3168
  "path": "docs/page-inventory.json",
3124
3169
  "mode": "0000644",
3125
- "sha256": "4b063630995768d45aa24d10d484607495ce6732fbf279488bbba89cccb1c17c"
3170
+ "sha256": "c4ecf3b3c06f25fbbc46f5f424e1cb5d5328533c7ce677143acd825753e0a0ae"
3126
3171
  },
3127
3172
  {
3128
3173
  "path": "docs/page-readings.json",
3129
3174
  "mode": "0000644",
3130
- "sha256": "82aaee617c4aa382cd3dfc4c5c0d8a36fa6e25c78b1fe0466c5000f40936fe9f"
3175
+ "sha256": "e45541ce7f58c185af5290f210c3e6e1fec64ae19a4e2b9336ab9d1c2021b3d9"
3131
3176
  },
3132
3177
  {
3133
3178
  "path": "docs/project-context.template.md",
@@ -4577,7 +4622,7 @@
4577
4622
  {
4578
4623
  "path": "modules/autonomy/db.js",
4579
4624
  "mode": "0000644",
4580
- "sha256": "ff139cf1247d7075df13ef675c18a14a2b4fe0eb17cf7017df607c77146c0631"
4625
+ "sha256": "4736f40dcaff9ef838bcc15d392b9959e6864bb18a9a6299b830254d2e6e7c20"
4581
4626
  },
4582
4627
  {
4583
4628
  "path": "modules/autonomy/digest.js",
@@ -4657,7 +4702,7 @@
4657
4702
  {
4658
4703
  "path": "modules/autonomy/routes/autonomy.js",
4659
4704
  "mode": "0000644",
4660
- "sha256": "a31996f000c079421a8e726d0cba1d17974721f331c8d46330195cab5e3970db"
4705
+ "sha256": "1e0004468ef311b3f029bd40f52a5125097f32eec064cc32e38f3e65fcb2c32c"
4661
4706
  },
4662
4707
  {
4663
4708
  "path": "modules/autonomy/runner-health.js",
@@ -5512,7 +5557,7 @@
5512
5557
  {
5513
5558
  "path": "modules/government/catalog.js",
5514
5559
  "mode": "0000644",
5515
- "sha256": "41856f1f6b0d3ccc928396ab24e36f79405f0d36251452d27efb113dde75f991"
5560
+ "sha256": "a929b7e3def626817ad15db97fbc9d916bf86f6ccbfc0223504387c2327b44b8"
5516
5561
  },
5517
5562
  {
5518
5563
  "path": "modules/government/charter.js",
@@ -6189,20 +6234,50 @@
6189
6234
  "mode": "0000644",
6190
6235
  "sha256": "efe0b6cfb43766e6d72f416df070a170ffc4254495ddcb27c36c8d6ff63582d3"
6191
6236
  },
6237
+ {
6238
+ "path": "modules/hall-ui/public/characters/artisan-face.png",
6239
+ "mode": "0000644",
6240
+ "sha256": "8639879d7613c953cc22436d052b3b199401098b653cba98fa626d0407c0fd45"
6241
+ },
6242
+ {
6243
+ "path": "modules/hall-ui/public/characters/artisan-visor.png",
6244
+ "mode": "0000644",
6245
+ "sha256": "83b4a196eb9e92b360a7a8556fc00f3ed70ce47d8d2d06b29b7f7075ff47dfac"
6246
+ },
6192
6247
  {
6193
6248
  "path": "modules/hall-ui/public/characters/artisan.png",
6194
6249
  "mode": "0000644",
6195
- "sha256": "68fc4927c4e3addd4c0d71419cd36ce0adc9bf125946c3c1cede26ec51c91144"
6250
+ "sha256": "75efc5fa7efca72582c3354709bbc7de8a70ac9c5b6eac04d3349dc771a267aa"
6251
+ },
6252
+ {
6253
+ "path": "modules/hall-ui/public/characters/artist-face.png",
6254
+ "mode": "0000644",
6255
+ "sha256": "20dd36710c52f164ece07da65104b827472ac47df8c5eeb966e56afac143a6d8"
6256
+ },
6257
+ {
6258
+ "path": "modules/hall-ui/public/characters/artist-visor.png",
6259
+ "mode": "0000644",
6260
+ "sha256": "f1124a72857581e2b2df36600aac2c0ea4bc5a0f02e95dfa92cc2e93797b525b"
6196
6261
  },
6197
6262
  {
6198
6263
  "path": "modules/hall-ui/public/characters/artist.png",
6199
6264
  "mode": "0000644",
6200
- "sha256": "d75f3b2c0d90be3ca4d2d26ee3c8cedb34bd22015eca55c992361534fdaa1cf5"
6265
+ "sha256": "e33cae66d718fdc39f22dc634f4c4ac466b119685f5f5a2d8e81534f27e19d31"
6266
+ },
6267
+ {
6268
+ "path": "modules/hall-ui/public/characters/patron-face.png",
6269
+ "mode": "0000644",
6270
+ "sha256": "09199a2663190ce07dcd4583acd6a857b7c2f066ac630c53a08e2f25320be5b2"
6271
+ },
6272
+ {
6273
+ "path": "modules/hall-ui/public/characters/patron-visor.png",
6274
+ "mode": "0000644",
6275
+ "sha256": "22d0bea9159a1960f7237af708a0327409c630b88b40e259f22e0976ce5df81c"
6201
6276
  },
6202
6277
  {
6203
6278
  "path": "modules/hall-ui/public/characters/patron.png",
6204
6279
  "mode": "0000644",
6205
- "sha256": "88742f5047d183b74718276c83bc36a22646e58484c6cd5713459c0fdaaaf82a"
6280
+ "sha256": "6fc2e84bafe99cb0cf040166bdaeec1431d5fb7d93c3f4900462c2dc2cf9fd53"
6206
6281
  },
6207
6282
  {
6208
6283
  "path": "modules/hall-ui/public/chime.wav",
@@ -6337,7 +6412,7 @@
6337
6412
  {
6338
6413
  "path": "modules/hall-ui/public/craft-mode.js",
6339
6414
  "mode": "0000644",
6340
- "sha256": "15dc97554ec17cde2938078650290333d5d15a847654688381d5a9b218d90b9f"
6415
+ "sha256": "97673df1b505c56d8265ac49896eb96479fe81b5dfc2fa2e694364ed4614122b"
6341
6416
  },
6342
6417
  {
6343
6418
  "path": "modules/hall-ui/public/craft-review.css",
@@ -6642,17 +6717,17 @@
6642
6717
  {
6643
6718
  "path": "modules/hall-ui/public/home-city-draw.js",
6644
6719
  "mode": "0000644",
6645
- "sha256": "44f2ed3188b8c5a6151af070ba62a9dee284e9b3a4b68bb67e51a5dcf54a3e46"
6720
+ "sha256": "84ccd325a3363d1520f0d1de31f324d15bede0aa13dc0065f6f4b2fcdaf31f29"
6646
6721
  },
6647
6722
  {
6648
6723
  "path": "modules/hall-ui/public/home-city.css",
6649
6724
  "mode": "0000644",
6650
- "sha256": "c06eeb9cc6e40a77afa79371b8adf93459ba92d54856ef48c6b7496ec68c96e5"
6725
+ "sha256": "9d89ae9e8007c2ed557556e30de91a7e0b94dd7d0471ece96af2b8e20f5ad348"
6651
6726
  },
6652
6727
  {
6653
6728
  "path": "modules/hall-ui/public/home-city.js",
6654
6729
  "mode": "0000644",
6655
- "sha256": "9a8a5b5eeae1af57285b0f352e6c01a721ea2d0b5a0310e3efd7197344eb5d05"
6730
+ "sha256": "a526129b2053eb7e310c9822d3bff9a2b273d34b2fa617d8c97c77153af458b0"
6656
6731
  },
6657
6732
  {
6658
6733
  "path": "modules/hall-ui/public/home-gallery.css",
@@ -6674,6 +6749,11 @@
6674
6749
  "mode": "0000644",
6675
6750
  "sha256": "ba591c9f7d6d730a65de6e97bcb4f83a387bfdc840c2920a11ff1d7d4b433e3f"
6676
6751
  },
6752
+ {
6753
+ "path": "modules/hall-ui/public/home-runner.js",
6754
+ "mode": "0000644",
6755
+ "sha256": "147f9fb3cfc600bbbfda24d072627bb20e62b365a16c04c38d0bba678f62c795"
6756
+ },
6677
6757
  {
6678
6758
  "path": "modules/hall-ui/public/home-studio.css",
6679
6759
  "mode": "0000644",
@@ -6752,7 +6832,7 @@
6752
6832
  {
6753
6833
  "path": "modules/hall-ui/public/index.html",
6754
6834
  "mode": "0000644",
6755
- "sha256": "096d3ecb9aa3c473ea6c7a02e457941f0716a9cffb3df2adf8ab339b2a89f6a4"
6835
+ "sha256": "ca9e4265fb4b6e93674326f7375625acb2a51b8348bfd9dea7a969d27059732b"
6756
6836
  },
6757
6837
  {
6758
6838
  "path": "modules/hall-ui/public/index.states.json",
@@ -7357,7 +7437,7 @@
7357
7437
  {
7358
7438
  "path": "modules/hall-ui/public/style.css",
7359
7439
  "mode": "0000644",
7360
- "sha256": "d42939b4e5777cd304c272caa057f6723b8cff8a372b4275a7caa6dade7200b4"
7440
+ "sha256": "ee20d5dc4b74f5d2568ae49ce1ad83ab9380d95415a0ef859056888109f4be97"
7361
7441
  },
7362
7442
  {
7363
7443
  "path": "modules/hall-ui/public/task-detail.js",
@@ -7447,12 +7527,12 @@
7447
7527
  {
7448
7528
  "path": "modules/hall-ui/public/visor.css",
7449
7529
  "mode": "0000644",
7450
- "sha256": "8c7c3088fb756d2e6fddc6d9d9df81fb67ada498628dc3a9ff67a8cbb97ab3e6"
7530
+ "sha256": "c83040444d5d5e4256aa6f6d58481cf34344095cb16f8e36ba6d4fa846f82ae8"
7451
7531
  },
7452
7532
  {
7453
7533
  "path": "modules/hall-ui/public/visor.js",
7454
7534
  "mode": "0000644",
7455
- "sha256": "ce6b2a68e041a0e529fed8270405dcd15bb300e1ec5bf1d3c6afbf561ee53936"
7535
+ "sha256": "4bf7299fd961c12f15e355b9898d779c0c4a3f258817fd712ec12d1a2d70fb6a"
7456
7536
  },
7457
7537
  {
7458
7538
  "path": "modules/hall-ui/public/vote-control.js",
@@ -7564,6 +7644,11 @@
7564
7644
  "mode": "0000644",
7565
7645
  "sha256": "d3911fb48be461f005561fb69af5ca1124af02db909b751fbe4c2bc98b301850"
7566
7646
  },
7647
+ {
7648
+ "path": "modules/hall-ui/records/characters.md",
7649
+ "mode": "0000644",
7650
+ "sha256": "0ed7c25438fac16e87a78aff0786792d8a54fd69d207fc52bbd12c2ed4c6fff8"
7651
+ },
7567
7652
  {
7568
7653
  "path": "modules/hall-ui/records/collaboration.md",
7569
7654
  "mode": "0000644",
@@ -7639,6 +7724,11 @@
7639
7724
  "mode": "0000644",
7640
7725
  "sha256": "481e60fa9b7af43f092339ed897a6c8716fc7712d7b66584a8cdc245b7443ffb"
7641
7726
  },
7727
+ {
7728
+ "path": "modules/hall-ui/records/home-runner.md",
7729
+ "mode": "0000644",
7730
+ "sha256": "e2c014f1ef513877c0857262e540451a930276dfc4dcf74a2e71a199f3af88b5"
7731
+ },
7642
7732
  {
7643
7733
  "path": "modules/hall-ui/records/karma-vote-control.md",
7644
7734
  "mode": "0000644",
@@ -7762,7 +7852,7 @@
7762
7852
  {
7763
7853
  "path": "modules/hall-ui/records/visor.md",
7764
7854
  "mode": "0000644",
7765
- "sha256": "1ff5b06dcefb1effa6e73de9b398a100b8653e1f4f94b60a6aca87f4b9033a9e"
7855
+ "sha256": "e8392fa5d8ec56cffd336101ed8a247b377be8172cea7d54e40c887548114607"
7766
7856
  },
7767
7857
  {
7768
7858
  "path": "modules/hall-ui/records/welcome-tower.md",
@@ -12112,12 +12202,12 @@
12112
12202
  {
12113
12203
  "path": "package-lock.json",
12114
12204
  "mode": "0000644",
12115
- "sha256": "a7d4b6e236dd9fa054bf6ba03cc20cc48a78c090982223f80563f98cc07fd949"
12205
+ "sha256": "697de440abc4cffd9b894fc7c7f08e8c37e1fe8c69fd6acb154e0d0a7eddacc4"
12116
12206
  },
12117
12207
  {
12118
12208
  "path": "package.json",
12119
12209
  "mode": "0000644",
12120
- "sha256": "a2ce5ef571d953e85a478027aba5552ee7995b53be50fdd9a8f06eccf972fd43"
12210
+ "sha256": "e710e107598205dc3a2306c2419cd4f71612786eb8fc1eaa22016b6874a9e027"
12121
12211
  },
12122
12212
  {
12123
12213
  "path": "public-docs/index.html",
@@ -12137,7 +12227,7 @@
12137
12227
  {
12138
12228
  "path": "release-notes.json",
12139
12229
  "mode": "0000644",
12140
- "sha256": "7db7b72229854c69c6dc688f9b1f9ea60292e892bb4df79cbf9a8dec9cfee379"
12230
+ "sha256": "70c359af2be71410e07c6573cd7874a6b62116723900fcd359577495299096cf"
12141
12231
  },
12142
12232
  {
12143
12233
  "path": "scripts/bongos/CLAUDE.md",
@@ -15517,7 +15607,7 @@
15517
15607
  {
15518
15608
  "path": "scripts/hall-preview/server.js",
15519
15609
  "mode": "0000644",
15520
- "sha256": "ee40f6c6aaadc2eec3ccab6f64c1f064ac57255eb4b003e70357f1cd03f593bb"
15610
+ "sha256": "f7ed5826f99a9bc2e47700f94b9c54f6709680c74a44fcfd670f8ebef01c435c"
15521
15611
  },
15522
15612
  {
15523
15613
  "path": "scripts/hall-preview/task-visual.js",
@@ -16142,7 +16232,7 @@
16142
16232
  {
16143
16233
  "path": "src/module-api.js",
16144
16234
  "mode": "0000644",
16145
- "sha256": "7fb7ef1aeae573ed959000ac2876a210b4f0607e7d231a65e33516c6ccbd1acc"
16235
+ "sha256": "63a269e6861762c64af55a0c8eb8b63d8c4a1a5c71de9840bd38cdf721383886"
16146
16236
  },
16147
16237
  {
16148
16238
  "path": "src/module-loader/catalog.js",
@@ -16794,6 +16884,11 @@
16794
16884
  "mode": "0000644",
16795
16885
  "sha256": "0678a9c76e1d82dad997995d8d8bebef568d8aa085fefbc5e4d6142cb4ec06f2"
16796
16886
  },
16887
+ {
16888
+ "path": "tests/autonomy_runner_goal_stats.mjs",
16889
+ "mode": "0000644",
16890
+ "sha256": "49829df62edd7f0d27798f0e6fb5daad69323ff8993e320bb46ae2ed36e87b86"
16891
+ },
16797
16892
  {
16798
16893
  "path": "tests/autonomy_runner_health.mjs",
16799
16894
  "mode": "0000644",
@@ -17077,7 +17172,7 @@
17077
17172
  {
17078
17173
  "path": "tests/character_creation.mjs",
17079
17174
  "mode": "0000644",
17080
- "sha256": "ce048c8ba8a60d5725feb4a9a9961b6a2a9561b16cddca54f48354644262cc51"
17175
+ "sha256": "0631568f7aea189a66537eaabeedc2edbcfca5f031c419810d44e8842293c8a7"
17081
17176
  },
17082
17177
  {
17083
17178
  "path": "tests/city_card_context.mjs",
@@ -19407,7 +19502,7 @@
19407
19502
  {
19408
19503
  "path": "tests/hall_visor.mjs",
19409
19504
  "mode": "0000644",
19410
- "sha256": "7cebc92c9a8c34eb1d11ef0316767fd0ff3fc01dfe20917f7b4194f89174830c"
19505
+ "sha256": "48de1d859b2e3dacb7f8aa693e55b405923c65621bd995278af4227861099290"
19411
19506
  },
19412
19507
  {
19413
19508
  "path": "tests/hall_work_history_id.mjs",
@@ -19479,6 +19574,11 @@
19479
19574
  "mode": "0000644",
19480
19575
  "sha256": "1291addd83b15112c0013e040d8a619ccfadd9a63a192be1b2b4add1eb477b3f"
19481
19576
  },
19577
+ {
19578
+ "path": "tests/home_runner.mjs",
19579
+ "mode": "0000644",
19580
+ "sha256": "998496d45fd2368a8450e5a417ffb16099330f349cc02aea969920d399242e5f"
19581
+ },
19482
19582
  {
19483
19583
  "path": "tests/home_studio.mjs",
19484
19584
  "mode": "0000644",
@@ -5,7 +5,7 @@ A **generated**, zero-dependency typed client for the Bongos API — produced fr
5
5
  by hand; it regenerates when the spec changes, so it can never drift from the routes.
6
6
 
7
7
  - API version: **v1** (served at `/api/bongos/v1`)
8
- - 696 operations across 85 resource groups
8
+ - 697 operations across 85 resource groups
9
9
 
10
10
  ## Use it from your project
11
11
 
@@ -227,6 +227,8 @@ function createClient(opts = {}) {
227
227
  postAutonomyHeartbeat: (args) => request("POST", "/autonomy/heartbeat", { hasBody: true }, args),
228
228
  // PUT /autonomy/me/goals — rank: metic+archon — PUT /autonomy/me/goals
229
229
  putAutonomyMeGoals: (args) => request("PUT", "/autonomy/me/goals", { hasBody: true }, args),
230
+ // GET /autonomy/me/goals/{goalId}/stats — rank: metic+archon — GET /autonomy/me/goals/:goalId/stats
231
+ getAutonomyMeGoalsGoalIdStats: (args) => request("GET", "/autonomy/me/goals/{goalId}/stats", { hasBody: false }, args),
230
232
  // GET /autonomy/precheck — rank: metic+archon — GET /autonomy/precheck
231
233
  getAutonomyPrecheck: (args) => request("GET", "/autonomy/precheck", { hasBody: false }, args),
232
234
  // GET /autonomy/runner-setup.ps1 — rank: public — GET /autonomy/runner-setup.ps1
@@ -226,6 +226,8 @@ function createClient(opts = {}) {
226
226
  postAutonomyHeartbeat: (args) => request("POST", "/autonomy/heartbeat", { hasBody: true }, args),
227
227
  // PUT /autonomy/me/goals — rank: metic+archon — PUT /autonomy/me/goals
228
228
  putAutonomyMeGoals: (args) => request("PUT", "/autonomy/me/goals", { hasBody: true }, args),
229
+ // GET /autonomy/me/goals/{goalId}/stats — rank: metic+archon — GET /autonomy/me/goals/:goalId/stats
230
+ getAutonomyMeGoalsGoalIdStats: (args) => request("GET", "/autonomy/me/goals/{goalId}/stats", { hasBody: false }, args),
229
231
  // GET /autonomy/precheck — rank: metic+archon — GET /autonomy/precheck
230
232
  getAutonomyPrecheck: (args) => request("GET", "/autonomy/precheck", { hasBody: false }, args),
231
233
  // GET /autonomy/runner-setup.ps1 — rank: public — GET /autonomy/runner-setup.ps1
@@ -891,6 +891,8 @@ export interface BongosClient {
891
891
  postAutonomyHeartbeat(args: RequestArgs & { body: PostAutonomyHeartbeatRequest }): Promise<PostAutonomyHeartbeatResponse>;
892
892
  /** PUT /autonomy/me/goals — rank: metic+archon */
893
893
  putAutonomyMeGoals(args: RequestArgs & { body: PutAutonomyMeGoalsRequest }): Promise<PutAutonomyMeGoalsResponse>;
894
+ /** GET /autonomy/me/goals/{goalId}/stats — rank: metic+archon */
895
+ getAutonomyMeGoalsGoalIdStats(args?: RequestArgs): Promise<ApiResponse>;
894
896
  /** GET /autonomy/precheck — rank: metic+archon */
895
897
  getAutonomyPrecheck(args?: RequestArgs): Promise<ApiResponse>;
896
898
  /** GET /autonomy/runner-setup.ps1 — rank: public */
@@ -223,6 +223,8 @@ export function createClient(opts = {}) {
223
223
  postAutonomyHeartbeat: (args) => request("POST", "/autonomy/heartbeat", { hasBody: true }, args),
224
224
  // PUT /autonomy/me/goals — rank: metic+archon — PUT /autonomy/me/goals
225
225
  putAutonomyMeGoals: (args) => request("PUT", "/autonomy/me/goals", { hasBody: true }, args),
226
+ // GET /autonomy/me/goals/{goalId}/stats — rank: metic+archon — GET /autonomy/me/goals/:goalId/stats
227
+ getAutonomyMeGoalsGoalIdStats: (args) => request("GET", "/autonomy/me/goals/{goalId}/stats", { hasBody: false }, args),
226
228
  // GET /autonomy/precheck — rank: metic+archon — GET /autonomy/precheck
227
229
  getAutonomyPrecheck: (args) => request("GET", "/autonomy/precheck", { hasBody: false }, args),
228
230
  // GET /autonomy/runner-setup.ps1 — rank: public — GET /autonomy/runner-setup.ps1
@@ -0,0 +1,31 @@
1
+ # 0405 — Each character has one colour, and the visor wears it
2
+
3
+ - **Status:** Accepted
4
+ - **Date:** 2026-11-12
5
+ - **Decided by:** the owner, in the brief for [task 1005218](https://cloudbongos.com/builders#/task/1005218) (2026-11-11) and on the picture sheet `docs/design/characters/v2/sheet.png` (2026-11-12).
6
+ - **Goal:** [goal 1000142](https://cloudbongos.com/builders#/goal/1000142) — the V3 game conversion.
7
+ - **Builds on:** [ADR 0399](0399-the-visor-is-glass-over-the-scene-and-owns-no-camera.md) (the visor), [ADR 0402](0402-helm-is-the-halls-look-and-the-hall-is-dark-only.md) (Helm), [ADR 0403](0403-in-game-mode-the-visor-is-the-control-and-the-scene-is-the-view.md) (the visor is the control).
8
+
9
+ ## 1. The decision
10
+
11
+ The three characters each have **one colour**: the Artisan ember, the Artist violet, the Patron gold. In game mode **the visor wears the held character's colour**: the frame's lines, the sight, the character's name, the rim of your picture, and the accent on the glass (the one button, the segment being built, a hovered row). Your picture on the glass is your character **wearing the visor**, its rim in the same colour.
12
+
13
+ The characters themselves are redrawn (the "second look"): 64 by 64 pixel art, still two animals in one body, as space-faring aliens in the Helm night rather than figures from ancient Egypt. One animal gives the whole head and the other the whole body: a ram on a lizard (Artisan), an ibis on an octopus (Artist), a falcon on a lion (Patron).
14
+
15
+ ## 2. How it sits with the design rules
16
+
17
+ - **The Fifteen Rule holds.** No colour is typed in. `--char-artisan` is `--accent`; `--char-artist` is a mix of `--sea`, `--accent` and `--ink`; `--char-patron` is a mix of `--warn` and `--ink` (`modules/hall-ui/public/style.css`). A host that overrides its accent or sea moves the characters' colours with it.
18
+ - **The One Warm Thing Rule is narrowed, on the glass only.** The hall still has one accent, and it still marks only what you can act on. On the visor that accent **is** the character's colour (`visor.css` re-points `--accent` under `.visor[data-character]`), so there is still one lit colour on the glass at a time; it is yours rather than the hall's. An Artisan's glass is unchanged, because the Artisan's colour is the accent. Classic mode and every hall page outside the glass are untouched.
19
+ - **The Patron's gold is made from the status amber.** It is lighter than `--warn` and never appears as a status, but the two are neighbours. If a Patron's glass is ever read as a warning, the fix is a different mix here, not a new literal.
20
+
21
+ ## 3. What was considered and not done
22
+
23
+ - **Two new typed-in colours** (`#c59bff`, `#ffd166`, the values the pictures are drawn in). Refused by the design-count ratchet, correctly: the baseline is never raised to pass. The mixes land close to them.
24
+ - **Tinting the whole hall** by character. Not asked for; the brief names the visor.
25
+
26
+ ## 4. Consequences
27
+
28
+ - The pictures are **drawn by a script**, `docs/design/characters/v2/draw-characters.js --hall`, which writes the hall's nine files (`<id>.png`, `<id>-face.png`, `<id>-visor.png`). A change to a character is an edit there and a re-run, never a hand-edited PNG. The script's header holds the six rules the owner's feedback set.
29
+ - The pictures use their own fixed colours (they are art, not UI), so a host that re-themes its accent will see the Artisan's glass move while the Artisan's picture keeps its ember trim.
30
+ - A scene's own buttons still wear the hall's accent (the Governor City's "decide" button stays salmon under a violet or gold glass). ADR 0403 already moves those onto the visor.
31
+ - The old Egyptian sheet stays at `docs/design/characters/character-sprites-source.webp` as the record of the first look.
@@ -520,3 +520,4 @@ These 20 numbers are each shared by exactly two files. They are **accepted histo
520
520
  | 0402 | [**Helm is the hall's look, and the hall is dark only** ([task 1005192](https://cloudbongos.com/builders#/task/1005192)). The game (the hall, everything after sign-in) wears Helm; the landing, the hub and the status page keep the chrome world. The kit: two voices (Barlow Condensed in wide capitals names a thing, Barlow says everything else), four colours with one job each (Night the ground, Ice what you read, White names and numbers, the accent only what you can act on), three shapes (the cut corner for anything pressable, the segment for progress, the arc for the visor). The values live in the hall's token block; `src/hall-helm.js` recognises a hall page by the sheet it links, pins it dark and hands it the Helm faces unless its pack chose its own. The light/dark switch is gone; the light tier stays until its own removal. The shared button spends every Helm token with the old pill as the fallback, so the status page does not move.](0402-helm-is-the-halls-look-and-the-hall-is-dark-only.md) | design system / hall |
521
521
  | 0403 | [**In game mode the visor is the control and the scene is the view** ([task 1005203](https://cloudbongos.com/builders#/task/1005203), goal 1000142; owner 2026-11-11). Every main call to action you can see in game mode lives on the visor (the accent button, the key hints, the Actions sheet); the city, the sky and Home only show the project and can be moved through, never carry buttons of their own. A scene offers its actions to the visor through `OTBVisor.scene`. Found not yet keeping it: the city's decide button and door, the sky's top row and composer, Home's gallery links, the Artist's feedback tab.](0403-in-game-mode-the-visor-is-the-control-and-the-scene-is-the-view.md) | hall / game frame |
522
522
  | 0404 | [**A party is a room, and rooms register as kinds** ([task 1005220](https://cloudbongos.com/builders#/task/1005220), goal 1000148). Any group that talks together is a room: a free-form party (cap 8), a chain party (ADR 0400), a scoping session (cap 40, owned by `lifecycle`) or a decision room (cap 40, `government`). Each owner contributes its kind to the `room.kinds` contribution point (a port is single-provider, so four owners would fail the boot) with `members`/`isMember`/optional `invite`/`accept`, and fires `room.opened`/`room.member.joined`/`room.member.left`/`room.closed`; consumers never read an owner's tables and reconcile against `members()`. Free-form party: one per builder, leader handover to the longest-standing member, disband on last leave. A chain room follows an open `chain_party` row. Unlinked players get everything but voice. V3 polls (3 s, cursor + 304, paused when hidden, per-builder limiter) rather than pushing through `/live`. With discord off, no voice key or voice state; chat still works. A room is never authority. Rejected: one port, a port per kind, a rooms module reading other modules' tables, a second party roster, push via `/live`, speaking indicators.](0404-a-party-is-a-room-and-rooms-register-as-kinds.md) | game frame / modules / Discord |
523
+ | 0405 | [**Each character has one colour, and the visor wears it** ([task 1005218](https://cloudbongos.com/builders#/task/1005218), goal 1000142; owner 2026-11-12). The Artisan is ember (the accent), the Artist violet, the Patron gold, each mixed from the hall’s tokens and none typed in. In game mode the visor’s lines, name, picture rim and accent are the held character’s colour, and your picture on the glass is your character wearing the visor. The characters are redrawn at 64 by 64 as two-animal aliens, drawn by a script.](0405-each-character-has-one-colour-and-the-visor-wears-it.md) | hall / game frame |
@@ -2946,6 +2946,54 @@
2946
2946
  ]
2947
2947
  }
2948
2948
  },
2949
+ "/autonomy/me/goals/{goalId}/stats": {
2950
+ "get": {
2951
+ "operationId": "get_autonomy_me_goals_goalId_stats",
2952
+ "tags": [
2953
+ "autonomy"
2954
+ ],
2955
+ "summary": "GET /autonomy/me/goals/:goalId/stats",
2956
+ "description": "ONE GOAL, SEEN FROM THE CALLER'S RUNNER (task 1005243): the game's runner card on Home — tasks it shipped there, the tokens they took, the average task length and what is left, so the card can say roughly how long the rest takes. Read-only and the caller's own, behind `autonomy.run` like the picks.\n\n**Rank:** `metic+archon` — Metic or Archon rank (review/triage powers).\n\n**Permissions:** `autonomy.run` (all required).",
2957
+ "x-rank": "metic+archon",
2958
+ "x-source": "modules/autonomy/routes/autonomy.js",
2959
+ "x-permissions": [
2960
+ "autonomy.run"
2961
+ ],
2962
+ "parameters": [
2963
+ {
2964
+ "name": "goalId",
2965
+ "in": "path",
2966
+ "required": true,
2967
+ "schema": {
2968
+ "type": "string"
2969
+ },
2970
+ "description": "Path parameter `goalId`."
2971
+ }
2972
+ ],
2973
+ "responses": {
2974
+ "200": {
2975
+ "description": "Success."
2976
+ },
2977
+ "400": {
2978
+ "$ref": "#/components/responses/BadRequest"
2979
+ },
2980
+ "401": {
2981
+ "$ref": "#/components/responses/Unauthorized"
2982
+ },
2983
+ "403": {
2984
+ "$ref": "#/components/responses/Forbidden"
2985
+ },
2986
+ "404": {
2987
+ "$ref": "#/components/responses/NotFound"
2988
+ }
2989
+ },
2990
+ "security": [
2991
+ {
2992
+ "builderSession": []
2993
+ }
2994
+ ]
2995
+ }
2996
+ },
2949
2997
  "/autonomy/precheck": {
2950
2998
  "get": {
2951
2999
  "operationId": "get_autonomy_precheck",
@@ -43561,7 +43609,7 @@
43561
43609
  "description": "A required dependency/feature is not configured or is temporarily down."
43562
43610
  }
43563
43611
  },
43564
- "x-endpoint-count": 696,
43612
+ "x-endpoint-count": 697,
43565
43613
  "x-schema-count": 731,
43566
43614
  "x-undocumented-bodies": 12,
43567
43615
  "x-response-schemas": 462,
@@ -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. 696 endpoints across 117 route files.
5
+ > **Generated from the live route files** — the route file is authoritative. 697 endpoints across 117 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`.
@@ -106,7 +106,7 @@ Base path: `/api/bongos`. Ranks (enforced server-side, [ADR 0016](adr/0016-trust
106
106
  | GET | `/api/bongos/auth/web/handoff` | `public` | — | GET /auth/web/handoff?code=&return= — the far side of the one-time session handoff (task 1004357). |
107
107
  | GET | `/api/bongos/auth/web/start` | `public` | — | /auth/web — browser flow (used by the /builders page). |
108
108
 
109
- ## `autonomy` (16)
109
+ ## `autonomy` (17)
110
110
 
111
111
  | Method | Path | Rank | Body | Description |
112
112
  |---|---|---|---|---|
@@ -118,6 +118,7 @@ Base path: `/api/bongos`. Ranks (enforced server-side, [ADR 0016](adr/0016-trust
118
118
  | POST | `/api/bongos/autonomy/fence/priority` | `archon` | `goal_id` | The priority goal (task 1004453): which allowlisted goal the runner works first. |
119
119
  | POST | `/api/bongos/autonomy/heartbeat` | `any-builder` | `host`, `pid`, `started_at`, `mode`, `consecutive_failures`, `last_event`, `working_task_id`, `working_goal_id`, `head`, `disk_head`, `main_head`, `claude_account`, `hold_until` | The runner's check-in, once per loop. |
120
120
  | PUT | `/api/bongos/autonomy/me/goals` | `metic+archon` | `goal_ids` | A builder picks which allowlisted goals THEIR runner works. |
121
+ | GET | `/api/bongos/autonomy/me/goals/:goalId/stats` | `metic+archon` | — | ONE GOAL, SEEN FROM THE CALLER'S RUNNER (task 1005243): the game's runner card on Home — tasks it shipped there, the tokens they took, th… |
121
122
  | GET | `/api/bongos/autonomy/precheck` | `metic+archon` | — | |
122
123
  | GET | `/api/bongos/autonomy/runner-setup.ps1` | `public` | — | the Windows first lines; see the note above. |
123
124
  | GET | `/api/bongos/autonomy/runner-setup.sh` | `public` | — | the Mac first lines; see the note above. |