@bongos/core 1.19.514 → 1.19.516
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 +81 -36
- package/clients/bongos-client/README.md +1 -1
- package/clients/bongos-client/bongos-client.global.js +12 -0
- package/clients/bongos-client/index.cjs +12 -0
- package/clients/bongos-client/index.d.ts +22 -2
- package/clients/bongos-client/index.mjs +12 -0
- package/docs/adr/0240-a-skipped-module-picker-stores-nothing-and-resolves-the-bundle-on-read.md +157 -0
- package/docs/adr/README.md +1 -0
- package/docs/api/openapi.json +362 -6
- package/docs/api-reference.md +12 -2
- package/docs/copy-inventory.md +224 -218
- package/docs/copy-registry.json +357 -291
- package/docs/module-api-changelog.md +4 -0
- package/modules/dev-box/app/src/vendor/bongos-client.cjs +12 -0
- package/modules/government/catalog.js +6 -0
- package/modules/government/migrations/government_009_mingle_manage.sql +55 -0
- package/modules/lifecycle/migrations/lifecycle_007_mingle.sql +134 -0
- package/modules/lifecycle/mingle.js +337 -0
- package/modules/lifecycle/module.json +1 -0
- package/modules/lifecycle/routes/mingle.js +116 -0
- package/modules/provisioning/migrations/provisioning_014_module_selection.sql +60 -0
- package/modules/provisioning/provisioning.js +24 -4
- package/modules/provisioning/routes/provisioning.js +59 -2
- package/modules/provisioning/starter-bundles.js +91 -0
- package/modules/public-landing/public/assets/cosmos.css +1 -1
- package/modules/public-landing/public/projects.html +230 -35
- package/modules/public-landing/public/projects.probes.json +2 -2
- package/modules/public-landing/public/projects.states.json +5 -4
- package/modules/ui-design/kit/serve.js +32 -0
- package/package-lock.json +2 -2
- package/package.json +1 -1
- package/src/module-api.js +1 -1
- package/tests/government_seed.mjs +35 -0
- package/tests/mingle.mjs +370 -0
- package/tests/projects_hub.mjs +72 -7
- package/tests/projects_hub_module_picker.mjs +369 -0
- package/tests/provisioning_module_selection.mjs +286 -0
- package/tests/provisioning_starter_bundles.mjs +131 -0
package/.bongos-core.json
CHANGED
|
@@ -2,22 +2,22 @@
|
|
|
2
2
|
"artifact": "bongos-core",
|
|
3
3
|
"manifest_schema": 1,
|
|
4
4
|
"generator": "scripts/gds/package-core.js",
|
|
5
|
-
"core_version": "1.19.
|
|
6
|
-
"core_contract": "1.19.
|
|
7
|
-
"source_commit": "
|
|
5
|
+
"core_version": "1.19.516",
|
|
6
|
+
"core_contract": "1.19.516",
|
|
7
|
+
"source_commit": "b92f5957bf6d2995db7633b965ea029192fb05df",
|
|
8
8
|
"source_ref": "HEAD",
|
|
9
|
-
"built_at": "2026-09-03T19:
|
|
9
|
+
"built_at": "2026-09-03T19:52:58.155Z",
|
|
10
10
|
"redaction": {
|
|
11
11
|
"model": "docs-redacted+functional-verbatim",
|
|
12
|
-
"docs_redacted":
|
|
12
|
+
"docs_redacted": 431,
|
|
13
13
|
"agent_docs_stubbed": 24,
|
|
14
|
-
"functional_verbatim":
|
|
14
|
+
"functional_verbatim": 1966,
|
|
15
15
|
"rules": 3,
|
|
16
16
|
"gate_literals": 3,
|
|
17
17
|
"gate": "passed"
|
|
18
18
|
},
|
|
19
|
-
"file_count":
|
|
20
|
-
"tree_sha256": "
|
|
19
|
+
"file_count": 2421,
|
|
20
|
+
"tree_sha256": "d9225673c69711642ce6ca8ae5ec201351c431974565132d756573f715a2c62e",
|
|
21
21
|
"files": [
|
|
22
22
|
{
|
|
23
23
|
"path": ".claude/skills/blocker-review/SKILL.md",
|
|
@@ -362,12 +362,12 @@
|
|
|
362
362
|
{
|
|
363
363
|
"path": "clients/bongos-client/README.md",
|
|
364
364
|
"mode": "0000644",
|
|
365
|
-
"sha256": "
|
|
365
|
+
"sha256": "7a346b2474cdde1c10c16c55defddb37ea43f462cee07b6b0bb8262114fa4296"
|
|
366
366
|
},
|
|
367
367
|
{
|
|
368
368
|
"path": "clients/bongos-client/bongos-client.global.js",
|
|
369
369
|
"mode": "0000644",
|
|
370
|
-
"sha256": "
|
|
370
|
+
"sha256": "1ca4f95d1d9dbd9edacdee3731182fcd7bee8f5fe247d681028657c3a4481cb5"
|
|
371
371
|
},
|
|
372
372
|
{
|
|
373
373
|
"path": "clients/bongos-client/examples/hello-world.mjs",
|
|
@@ -377,17 +377,17 @@
|
|
|
377
377
|
{
|
|
378
378
|
"path": "clients/bongos-client/index.cjs",
|
|
379
379
|
"mode": "0000644",
|
|
380
|
-
"sha256": "
|
|
380
|
+
"sha256": "8243bbb4887f66a4e6f25ed22b664d3ee123ebaa015271d01ae61dbc7d05112c"
|
|
381
381
|
},
|
|
382
382
|
{
|
|
383
383
|
"path": "clients/bongos-client/index.d.ts",
|
|
384
384
|
"mode": "0000644",
|
|
385
|
-
"sha256": "
|
|
385
|
+
"sha256": "2f810adf74673288b2c564c1624f06c5c320e4fe050af55b0cc8bc671ec10143"
|
|
386
386
|
},
|
|
387
387
|
{
|
|
388
388
|
"path": "clients/bongos-client/index.mjs",
|
|
389
389
|
"mode": "0000644",
|
|
390
|
-
"sha256": "
|
|
390
|
+
"sha256": "c64f0c9b8f785680f2f2ee47307dde71c69d8b0f05bcffc1777d55a059b63fd5"
|
|
391
391
|
},
|
|
392
392
|
{
|
|
393
393
|
"path": "clients/bongos-client/package.json",
|
|
@@ -1704,20 +1704,25 @@
|
|
|
1704
1704
|
"mode": "0000644",
|
|
1705
1705
|
"sha256": "42b20cd6d2e8a8d76c980df73087fd404487e4c479034dbe34d8297677bd9387"
|
|
1706
1706
|
},
|
|
1707
|
+
{
|
|
1708
|
+
"path": "docs/adr/0240-a-skipped-module-picker-stores-nothing-and-resolves-the-bundle-on-read.md",
|
|
1709
|
+
"mode": "0000644",
|
|
1710
|
+
"sha256": "d8bffd4c66cfddfeadd3c734d029e357f05a8eb804a79e5c3cad4014c9417b56"
|
|
1711
|
+
},
|
|
1707
1712
|
{
|
|
1708
1713
|
"path": "docs/adr/README.md",
|
|
1709
1714
|
"mode": "0000644",
|
|
1710
|
-
"sha256": "
|
|
1715
|
+
"sha256": "e3bb2c282df45ec41150fd041df3c2525d653184858c2bb0a6c7fff670f4b85c"
|
|
1711
1716
|
},
|
|
1712
1717
|
{
|
|
1713
1718
|
"path": "docs/api-reference.md",
|
|
1714
1719
|
"mode": "0000644",
|
|
1715
|
-
"sha256": "
|
|
1720
|
+
"sha256": "b137673ee16cd6f7d32b0b24d12b6c8e844a2e6e415a8118a4d458c382e5724f"
|
|
1716
1721
|
},
|
|
1717
1722
|
{
|
|
1718
1723
|
"path": "docs/api/openapi.json",
|
|
1719
1724
|
"mode": "0000644",
|
|
1720
|
-
"sha256": "
|
|
1725
|
+
"sha256": "fd2bf9ee3b86b31bff72933594b984324c4387b36a369a6cbb3998389aaa2bcf"
|
|
1721
1726
|
},
|
|
1722
1727
|
{
|
|
1723
1728
|
"path": "docs/architecture.md",
|
|
@@ -1742,12 +1747,12 @@
|
|
|
1742
1747
|
{
|
|
1743
1748
|
"path": "docs/copy-inventory.md",
|
|
1744
1749
|
"mode": "0000644",
|
|
1745
|
-
"sha256": "
|
|
1750
|
+
"sha256": "e6aba956f5d6f056788f8d43f52dfcf4e242a9dff3bc348f312c875b4cd04be2"
|
|
1746
1751
|
},
|
|
1747
1752
|
{
|
|
1748
1753
|
"path": "docs/copy-registry.json",
|
|
1749
1754
|
"mode": "0000644",
|
|
1750
|
-
"sha256": "
|
|
1755
|
+
"sha256": "5d0fca4e1e8b63e3679fe656ad773e914f944fa93fac66defeb46bb3642a6d74"
|
|
1751
1756
|
},
|
|
1752
1757
|
{
|
|
1753
1758
|
"path": "docs/design/apex-pass-2-direction.md",
|
|
@@ -2592,7 +2597,7 @@
|
|
|
2592
2597
|
{
|
|
2593
2598
|
"path": "docs/module-api-changelog.md",
|
|
2594
2599
|
"mode": "0000644",
|
|
2595
|
-
"sha256": "
|
|
2600
|
+
"sha256": "98e8b564cdaccd042553e8337d0d67222911bdf7958f02e168f1b200da2183a9"
|
|
2596
2601
|
},
|
|
2597
2602
|
{
|
|
2598
2603
|
"path": "docs/modules-contract.md",
|
|
@@ -3962,7 +3967,7 @@
|
|
|
3962
3967
|
{
|
|
3963
3968
|
"path": "modules/dev-box/app/src/vendor/bongos-client.cjs",
|
|
3964
3969
|
"mode": "0000644",
|
|
3965
|
-
"sha256": "
|
|
3970
|
+
"sha256": "8243bbb4887f66a4e6f25ed22b664d3ee123ebaa015271d01ae61dbc7d05112c"
|
|
3966
3971
|
},
|
|
3967
3972
|
{
|
|
3968
3973
|
"path": "modules/dev-box/app/test/unit.mjs",
|
|
@@ -4202,7 +4207,7 @@
|
|
|
4202
4207
|
{
|
|
4203
4208
|
"path": "modules/government/catalog.js",
|
|
4204
4209
|
"mode": "0000644",
|
|
4205
|
-
"sha256": "
|
|
4210
|
+
"sha256": "36914d187c0dfe9d87d8d82b19111aa1d338de15b64724275dd8ecc005eead13"
|
|
4206
4211
|
},
|
|
4207
4212
|
{
|
|
4208
4213
|
"path": "modules/government/config.js",
|
|
@@ -4294,6 +4299,11 @@
|
|
|
4294
4299
|
"mode": "0000644",
|
|
4295
4300
|
"sha256": "2392050b4295f9fdb4105b8434a4c44833b5f0e850f11b41afe82ea1860fef34"
|
|
4296
4301
|
},
|
|
4302
|
+
{
|
|
4303
|
+
"path": "modules/government/migrations/government_009_mingle_manage.sql",
|
|
4304
|
+
"mode": "0000644",
|
|
4305
|
+
"sha256": "986be40845d7a5d786d088dc9c0b8d6f9990062299418edb648c246c5a49fb07"
|
|
4306
|
+
},
|
|
4297
4307
|
{
|
|
4298
4308
|
"path": "modules/government/module.json",
|
|
4299
4309
|
"mode": "0000644",
|
|
@@ -5429,10 +5439,20 @@
|
|
|
5429
5439
|
"mode": "0000644",
|
|
5430
5440
|
"sha256": "52c140f39410d4feaf6facd9b2c53b6a5d93ac12d44a0a71fcb81fc5aa1b5c3a"
|
|
5431
5441
|
},
|
|
5442
|
+
{
|
|
5443
|
+
"path": "modules/lifecycle/migrations/lifecycle_007_mingle.sql",
|
|
5444
|
+
"mode": "0000644",
|
|
5445
|
+
"sha256": "0d17971d88c2f75a61a5646325ebab121fd4406cdd39324a1128a5e610ce6d7d"
|
|
5446
|
+
},
|
|
5447
|
+
{
|
|
5448
|
+
"path": "modules/lifecycle/mingle.js",
|
|
5449
|
+
"mode": "0000644",
|
|
5450
|
+
"sha256": "0b64c29f05955182bb0b767cd09d48d80143016ffc77bc16ff56a8b7fde1ebd9"
|
|
5451
|
+
},
|
|
5432
5452
|
{
|
|
5433
5453
|
"path": "modules/lifecycle/module.json",
|
|
5434
5454
|
"mode": "0000644",
|
|
5435
|
-
"sha256": "
|
|
5455
|
+
"sha256": "41da723fe35c3ca3db6226a1ff2208c5256c71eebe3a3768437aeff1fb070312"
|
|
5436
5456
|
},
|
|
5437
5457
|
{
|
|
5438
5458
|
"path": "modules/lifecycle/pollers/publish-reconciler.js",
|
|
@@ -5504,6 +5524,11 @@
|
|
|
5504
5524
|
"mode": "0000644",
|
|
5505
5525
|
"sha256": "637c442875fbe297e3aba54f4b6b16f9d06b740782e3506f65c58f34b67ea81d"
|
|
5506
5526
|
},
|
|
5527
|
+
{
|
|
5528
|
+
"path": "modules/lifecycle/routes/mingle.js",
|
|
5529
|
+
"mode": "0000644",
|
|
5530
|
+
"sha256": "a68f85eb06a620ae7cacd2d04d3056a46191c347e0d975681ab594f7316e8cd6"
|
|
5531
|
+
},
|
|
5507
5532
|
{
|
|
5508
5533
|
"path": "modules/lifecycle/routes/recommendations.js",
|
|
5509
5534
|
"mode": "0000644",
|
|
@@ -5969,6 +5994,11 @@
|
|
|
5969
5994
|
"mode": "0000644",
|
|
5970
5995
|
"sha256": "7abe41633cd7f98712c39960fba7175f0bb3340c4568bfbfdc640af911a31e15"
|
|
5971
5996
|
},
|
|
5997
|
+
{
|
|
5998
|
+
"path": "modules/provisioning/migrations/provisioning_014_module_selection.sql",
|
|
5999
|
+
"mode": "0000644",
|
|
6000
|
+
"sha256": "f4562bd90fdae26c5f7c51851bd2ad7752535bd0dcfb62dd567c11e76330c42b"
|
|
6001
|
+
},
|
|
5972
6002
|
{
|
|
5973
6003
|
"path": "modules/provisioning/module.json",
|
|
5974
6004
|
"mode": "0000644",
|
|
@@ -5987,7 +6017,7 @@
|
|
|
5987
6017
|
{
|
|
5988
6018
|
"path": "modules/provisioning/provisioning.js",
|
|
5989
6019
|
"mode": "0000644",
|
|
5990
|
-
"sha256": "
|
|
6020
|
+
"sha256": "8745258599d655b34204e5878b413308ae48a012b0306bde3297e98e452b3686"
|
|
5991
6021
|
},
|
|
5992
6022
|
{
|
|
5993
6023
|
"path": "modules/provisioning/rate-limit.js",
|
|
@@ -6002,12 +6032,12 @@
|
|
|
6002
6032
|
{
|
|
6003
6033
|
"path": "modules/provisioning/routes/provisioning.js",
|
|
6004
6034
|
"mode": "0000644",
|
|
6005
|
-
"sha256": "
|
|
6035
|
+
"sha256": "6e78e87a2112974db6db804280c346daa7c38684adace638e3c5734fe6d1ca72"
|
|
6006
6036
|
},
|
|
6007
6037
|
{
|
|
6008
6038
|
"path": "modules/provisioning/starter-bundles.js",
|
|
6009
6039
|
"mode": "0000644",
|
|
6010
|
-
"sha256": "
|
|
6040
|
+
"sha256": "9dd1fe5bd16d22245d62dae05aefb0c74c82772a937da155f1e8d2403f911886"
|
|
6011
6041
|
},
|
|
6012
6042
|
{
|
|
6013
6043
|
"path": "modules/provisioning/tests/liveness.mjs",
|
|
@@ -6257,7 +6287,7 @@
|
|
|
6257
6287
|
{
|
|
6258
6288
|
"path": "modules/public-landing/public/assets/cosmos.css",
|
|
6259
6289
|
"mode": "0000644",
|
|
6260
|
-
"sha256": "
|
|
6290
|
+
"sha256": "f10975893b3522accc6592246af0b07645c8d910c7637ecc5a006064a0988057"
|
|
6261
6291
|
},
|
|
6262
6292
|
{
|
|
6263
6293
|
"path": "modules/public-landing/public/assets/verro-medallion.png",
|
|
@@ -6517,17 +6547,17 @@
|
|
|
6517
6547
|
{
|
|
6518
6548
|
"path": "modules/public-landing/public/projects.html",
|
|
6519
6549
|
"mode": "0000644",
|
|
6520
|
-
"sha256": "
|
|
6550
|
+
"sha256": "a93dbf381a39bde8d4424bd3f241d24a72d9ed915e7da48bdb125d15085f6fef"
|
|
6521
6551
|
},
|
|
6522
6552
|
{
|
|
6523
6553
|
"path": "modules/public-landing/public/projects.probes.json",
|
|
6524
6554
|
"mode": "0000644",
|
|
6525
|
-
"sha256": "
|
|
6555
|
+
"sha256": "5801951d08323e2f59aa4e9435e0a7d82c712714a6d1c925768dcfd2bd9a6525"
|
|
6526
6556
|
},
|
|
6527
6557
|
{
|
|
6528
6558
|
"path": "modules/public-landing/public/projects.states.json",
|
|
6529
6559
|
"mode": "0000644",
|
|
6530
|
-
"sha256": "
|
|
6560
|
+
"sha256": "16fbd27a36c9c32696539c74a815dc9b3f187f5b539b393e3bee7f7dabc4e2a6"
|
|
6531
6561
|
},
|
|
6532
6562
|
{
|
|
6533
6563
|
"path": "modules/public-landing/public/terms.html",
|
|
@@ -6952,7 +6982,7 @@
|
|
|
6952
6982
|
{
|
|
6953
6983
|
"path": "modules/ui-design/kit/serve.js",
|
|
6954
6984
|
"mode": "0000644",
|
|
6955
|
-
"sha256": "
|
|
6985
|
+
"sha256": "4c52462cf61559e9a424107398eca58aa56b3783338827dda6110200fcdfd00a"
|
|
6956
6986
|
},
|
|
6957
6987
|
{
|
|
6958
6988
|
"path": "modules/ui-design/kit/tells.js",
|
|
@@ -7262,12 +7292,12 @@
|
|
|
7262
7292
|
{
|
|
7263
7293
|
"path": "package-lock.json",
|
|
7264
7294
|
"mode": "0000644",
|
|
7265
|
-
"sha256": "
|
|
7295
|
+
"sha256": "d137b5fec77d066d3e93b56a0af042e80252513dfa759872ae352a99b92170f6"
|
|
7266
7296
|
},
|
|
7267
7297
|
{
|
|
7268
7298
|
"path": "package.json",
|
|
7269
7299
|
"mode": "0000644",
|
|
7270
|
-
"sha256": "
|
|
7300
|
+
"sha256": "a212fc90527071642d6693ca0ea6dae91c8ad9c9452a8c19d550f2bf452d1e92"
|
|
7271
7301
|
},
|
|
7272
7302
|
{
|
|
7273
7303
|
"path": "public-docs/index.html",
|
|
@@ -8937,7 +8967,7 @@
|
|
|
8937
8967
|
{
|
|
8938
8968
|
"path": "src/module-api.js",
|
|
8939
8969
|
"mode": "0000644",
|
|
8940
|
-
"sha256": "
|
|
8970
|
+
"sha256": "ec17c796e1498bc12b3ecce4d194f7a4026081373d7d209fbfb49343368b5498"
|
|
8941
8971
|
},
|
|
8942
8972
|
{
|
|
8943
8973
|
"path": "src/module-loader/catalog.js",
|
|
@@ -10227,7 +10257,7 @@
|
|
|
10227
10257
|
{
|
|
10228
10258
|
"path": "tests/government_seed.mjs",
|
|
10229
10259
|
"mode": "0000644",
|
|
10230
|
-
"sha256": "
|
|
10260
|
+
"sha256": "ab6404171b072748798728cba7c5b1a6f759170996d8fea8be5ab26a033b7ac1"
|
|
10231
10261
|
},
|
|
10232
10262
|
{
|
|
10233
10263
|
"path": "tests/government_session_scope.mjs",
|
|
@@ -10824,6 +10854,11 @@
|
|
|
10824
10854
|
"mode": "0000644",
|
|
10825
10855
|
"sha256": "db4bbcfea38c91611947c99ca057c15b5e567d04ad9d267b9eee41981bc9418a"
|
|
10826
10856
|
},
|
|
10857
|
+
{
|
|
10858
|
+
"path": "tests/mingle.mjs",
|
|
10859
|
+
"mode": "0000644",
|
|
10860
|
+
"sha256": "ec5aaf634a70a100b6acb0f28b5b5256865d6d71d1a310dc7384295e133303ed"
|
|
10861
|
+
},
|
|
10827
10862
|
{
|
|
10828
10863
|
"path": "tests/mirror_lineage_fulltree.mjs",
|
|
10829
10864
|
"mode": "0000644",
|
|
@@ -11142,7 +11177,12 @@
|
|
|
11142
11177
|
{
|
|
11143
11178
|
"path": "tests/projects_hub.mjs",
|
|
11144
11179
|
"mode": "0000644",
|
|
11145
|
-
"sha256": "
|
|
11180
|
+
"sha256": "f8e557372a86d42dc0433414a1d5821a350dc545056fcc8104aa151b51e939f7"
|
|
11181
|
+
},
|
|
11182
|
+
{
|
|
11183
|
+
"path": "tests/projects_hub_module_picker.mjs",
|
|
11184
|
+
"mode": "0000644",
|
|
11185
|
+
"sha256": "5eaa61295f2a22f5b10cb365cee58e485390ccb763a14be15fec00f23aa23087"
|
|
11146
11186
|
},
|
|
11147
11187
|
{
|
|
11148
11188
|
"path": "tests/projects_hub_pre_uat.mjs",
|
|
@@ -11189,6 +11229,11 @@
|
|
|
11189
11229
|
"mode": "0000644",
|
|
11190
11230
|
"sha256": "dd53361cf8bd7e517e886701753d64c05c3235995785991558805f493cde529c"
|
|
11191
11231
|
},
|
|
11232
|
+
{
|
|
11233
|
+
"path": "tests/provisioning_module_selection.mjs",
|
|
11234
|
+
"mode": "0000644",
|
|
11235
|
+
"sha256": "48fc7c59efae4b7d1b9ab565882473483d7b4d8a40635583a789d0749da16578"
|
|
11236
|
+
},
|
|
11192
11237
|
{
|
|
11193
11238
|
"path": "tests/provisioning_onboard_mode.mjs",
|
|
11194
11239
|
"mode": "0000644",
|
|
@@ -11227,7 +11272,7 @@
|
|
|
11227
11272
|
{
|
|
11228
11273
|
"path": "tests/provisioning_starter_bundles.mjs",
|
|
11229
11274
|
"mode": "0000644",
|
|
11230
|
-
"sha256": "
|
|
11275
|
+
"sha256": "9ecf7cda8e47a6e17bbc73afdb0c30c867ab967cea66943082cbe15502fd63bc"
|
|
11231
11276
|
},
|
|
11232
11277
|
{
|
|
11233
11278
|
"path": "tests/provisioning_teardown_intent.mjs",
|
|
@@ -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
|
-
-
|
|
8
|
+
- 352 operations across 54 resource groups
|
|
9
9
|
|
|
10
10
|
## Install
|
|
11
11
|
|
|
@@ -588,6 +588,18 @@ function createClient(opts = {}) {
|
|
|
588
588
|
// POST /memory/sync — rank: any-builder — POST /memory/sync
|
|
589
589
|
postMemorySync: (args) => request("POST", "/memory/sync", { hasBody: true }, args),
|
|
590
590
|
},
|
|
591
|
+
"mingle": {
|
|
592
|
+
// GET /mingle — rank: any-builder — GET /mingle
|
|
593
|
+
getMingle: (args) => request("GET", "/mingle", { hasBody: false }, args),
|
|
594
|
+
// PUT /mingle/opt-in — rank: any-builder — PUT /mingle/opt-in
|
|
595
|
+
putMingleOptIn: (args) => request("PUT", "/mingle/opt-in", { hasBody: true }, args),
|
|
596
|
+
// POST /mingle/pairs/{id}/decide — rank: any-builder — POST /mingle/pairs/:id/decide
|
|
597
|
+
postMinglePairsIdDecide: (args) => request("POST", "/mingle/pairs/{id}/decide", { hasBody: true }, args),
|
|
598
|
+
// PUT /mingle/project — rank: metic+archon — PUT /mingle/project
|
|
599
|
+
putMingleProject: (args) => request("PUT", "/mingle/project", { hasBody: true }, args),
|
|
600
|
+
// POST /mingle/round — rank: metic+archon — POST /mingle/round
|
|
601
|
+
postMingleRound: (args) => request("POST", "/mingle/round", { hasBody: true }, args),
|
|
602
|
+
},
|
|
591
603
|
"modules": {
|
|
592
604
|
// GET /modules — rank: any-builder — GET /modules
|
|
593
605
|
getModules: (args) => request("GET", "/modules", { hasBody: false }, args),
|
|
@@ -587,6 +587,18 @@ function createClient(opts = {}) {
|
|
|
587
587
|
// POST /memory/sync — rank: any-builder — POST /memory/sync
|
|
588
588
|
postMemorySync: (args) => request("POST", "/memory/sync", { hasBody: true }, args),
|
|
589
589
|
},
|
|
590
|
+
"mingle": {
|
|
591
|
+
// GET /mingle — rank: any-builder — GET /mingle
|
|
592
|
+
getMingle: (args) => request("GET", "/mingle", { hasBody: false }, args),
|
|
593
|
+
// PUT /mingle/opt-in — rank: any-builder — PUT /mingle/opt-in
|
|
594
|
+
putMingleOptIn: (args) => request("PUT", "/mingle/opt-in", { hasBody: true }, args),
|
|
595
|
+
// POST /mingle/pairs/{id}/decide — rank: any-builder — POST /mingle/pairs/:id/decide
|
|
596
|
+
postMinglePairsIdDecide: (args) => request("POST", "/mingle/pairs/{id}/decide", { hasBody: true }, args),
|
|
597
|
+
// PUT /mingle/project — rank: metic+archon — PUT /mingle/project
|
|
598
|
+
putMingleProject: (args) => request("PUT", "/mingle/project", { hasBody: true }, args),
|
|
599
|
+
// POST /mingle/round — rank: metic+archon — POST /mingle/round
|
|
600
|
+
postMingleRound: (args) => request("POST", "/mingle/round", { hasBody: true }, args),
|
|
601
|
+
},
|
|
590
602
|
"modules": {
|
|
591
603
|
// GET /modules — rank: any-builder — GET /modules
|
|
592
604
|
getModules: (args) => request("GET", "/modules", { hasBody: false }, args),
|
|
@@ -82,6 +82,7 @@ export interface GetMemoryBuildersBuilderIdFileResponse { builder_id: unknown; f
|
|
|
82
82
|
export interface GetMemoryBuildersBuilderIdFilesResponse { builder_id: unknown; forensic: boolean; count: unknown; files: unknown }
|
|
83
83
|
export interface GetMemoryFileResponse { builder_id: unknown; path: unknown; content: unknown; sha256: unknown; byte_len: unknown; mtime: unknown; updated_at: unknown; created_at: unknown }
|
|
84
84
|
export interface GetMemoryFilesResponse { builder_id: unknown; count: unknown; files: unknown }
|
|
85
|
+
export interface GetMingleResponse { mingle: unknown; open_pairs: unknown; matching: unknown }
|
|
85
86
|
export interface GetModulesResponse { modules: unknown; own_built: unknown; core_loaded: unknown; catalog: unknown; submit_pipeline_live: boolean }
|
|
86
87
|
export interface GetModulesSubmissionsResponse { submissions: unknown }
|
|
87
88
|
export interface GetMyProjectsInvitesResponse { invites: unknown }
|
|
@@ -99,7 +100,7 @@ export interface GetProvisioningInstancesResponse { instances: unknown }
|
|
|
99
100
|
export interface GetProvisioningOnboardPlanResponse { mode: unknown; steps: unknown }
|
|
100
101
|
export interface GetProvisioningRecommendationsResponse { recommendations: unknown }
|
|
101
102
|
export interface GetProvisioningSlugAvailableResponse { slug: unknown; available: unknown; reason: unknown; address: unknown }
|
|
102
|
-
export interface GetProvisioningStarterBundlesResponse { core: unknown; bundles: unknown }
|
|
103
|
+
export interface GetProvisioningStarterBundlesResponse { core: unknown; bundles: unknown; optional: unknown }
|
|
103
104
|
export interface GetPublicBlockersIdResponse { blocker: unknown }
|
|
104
105
|
export interface GetPublicBountyTableResponse { table: unknown; currency: unknown }
|
|
105
106
|
export interface GetPublicGradesResponse { window_days: unknown; rolling: unknown; trend: unknown; attempts: unknown; threshold: unknown; grader_version: unknown }
|
|
@@ -304,6 +305,10 @@ export interface PostMeSessionsRevokeResponse { ok: boolean; revoked: unknown }
|
|
|
304
305
|
export interface PostMemoryBuildersBuilderIdBfgWriteRequest { kind?: string; slug?: string; title?: string; body_md?: string; rationale?: string; karma_delta?: unknown }
|
|
305
306
|
export interface PostMemoryBuildersBuilderIdBfgWriteResponse { ok: boolean; builder_id: unknown; path: unknown; kind: unknown; author: unknown; audit_id: unknown; karma_id: unknown; sha256: unknown; byte_len: unknown; updated_at: unknown }
|
|
306
307
|
export interface PostMemorySyncRequest { files?: unknown[] }
|
|
308
|
+
export interface PostMinglePairsIdDecideRequest { decision: "accepted" | "declined" }
|
|
309
|
+
export interface PostMinglePairsIdDecideResponse { pair: unknown }
|
|
310
|
+
export interface PostMingleRoundRequest { limit?: number }
|
|
311
|
+
export interface PostMingleRoundResponse { paired: unknown; count: unknown; skipped: unknown }
|
|
307
312
|
export interface PostModulesKeyEnableRequest { enabled?: unknown }
|
|
308
313
|
export interface PostModulesKeyEnableResponse { ok: boolean; key: unknown; enabled: unknown; note: unknown }
|
|
309
314
|
export interface PostModulesKeySubmitRequest { signed_by?: string }
|
|
@@ -324,7 +329,7 @@ export interface PostProvisioningInstancesIdGithubAppRequest { account?: string
|
|
|
324
329
|
export interface PostProvisioningInstancesIdGithubAppResponse { state: unknown; account: unknown; post_url: unknown; personal_url: unknown; org_url: unknown; org_login: unknown; manifest: unknown; redirect_url: unknown; expires_at: unknown }
|
|
325
330
|
export interface PostProvisioningInstancesIdRestartResponse { ok: boolean; queued: unknown; action: unknown; status: unknown; message: unknown }
|
|
326
331
|
export interface PostProvisioningInstancesIdTeardownResponse { ok: boolean; queued: unknown; action: unknown; status: unknown; superseded: unknown; message: unknown }
|
|
327
|
-
export interface PostProvisioningInstancesRequest { slug: string; target_ref?: string; hosting_shape?: string; domain?: string; no_address?: boolean; tier?: string; onboard_mode?: string; type?: string; description?: string; detail?: Record<string, unknown
|
|
332
|
+
export interface PostProvisioningInstancesRequest { slug: string; target_ref?: string; hosting_shape?: string; domain?: string; no_address?: boolean; tier?: string; onboard_mode?: string; type?: string; description?: string; detail?: Record<string, unknown>; modules?: string[] }
|
|
328
333
|
export interface PostSearchMarkRequest { chunk_id?: StringifiableId; useful?: unknown }
|
|
329
334
|
export interface PostSearchRequest { expand?: unknown; q?: string; source_kind?: string; limit?: unknown }
|
|
330
335
|
export interface PostSearchResponse { expand?: unknown; chunk?: unknown; query?: unknown; count?: unknown; total_full_tokens?: unknown; results?: unknown; corpus?: unknown }
|
|
@@ -380,6 +385,9 @@ export interface PostVersionsIdDoneWhenResponse { ok: boolean; criterion: unknow
|
|
|
380
385
|
export interface PostVersionsRequest { id: string; name: string; status?: string; track?: string; done_when?: string; scope_doc_path?: string; criteria?: unknown[] }
|
|
381
386
|
export interface PostVersionsResponse { version: unknown; criteria: unknown }
|
|
382
387
|
export interface PutGovernmentRanksRankKeyPermissionsPermissionKeyResponse { ok: boolean; rank_key: unknown; permission_key: unknown; granted: unknown }
|
|
388
|
+
export interface PutMingleOptInRequest { opted_in: boolean }
|
|
389
|
+
export interface PutMingleOptInResponse { opted_in: unknown; updated_at: unknown }
|
|
390
|
+
export interface PutMingleProjectRequest { enabled: boolean }
|
|
383
391
|
export interface PutTasksIdDependenciesRequest { depends_on_task_ids: unknown[] }
|
|
384
392
|
export interface PutTasksIdDependenciesResponse { ok: boolean; written: unknown; dependencies: unknown }
|
|
385
393
|
export type StringifiableId = number | string;
|
|
@@ -900,6 +908,18 @@ export interface BongosClient {
|
|
|
900
908
|
/** POST /memory/sync — rank: any-builder */
|
|
901
909
|
postMemorySync(args?: RequestArgs & { body?: PostMemorySyncRequest }): Promise<ApiResponse>;
|
|
902
910
|
};
|
|
911
|
+
"mingle": {
|
|
912
|
+
/** GET /mingle — rank: any-builder */
|
|
913
|
+
getMingle(args?: RequestArgs): Promise<GetMingleResponse>;
|
|
914
|
+
/** PUT /mingle/opt-in — rank: any-builder */
|
|
915
|
+
putMingleOptIn(args: RequestArgs & { body: PutMingleOptInRequest }): Promise<PutMingleOptInResponse>;
|
|
916
|
+
/** POST /mingle/pairs/{id}/decide — rank: any-builder */
|
|
917
|
+
postMinglePairsIdDecide(args: RequestArgs & { body: PostMinglePairsIdDecideRequest }): Promise<PostMinglePairsIdDecideResponse>;
|
|
918
|
+
/** PUT /mingle/project — rank: metic+archon */
|
|
919
|
+
putMingleProject(args: RequestArgs & { body: PutMingleProjectRequest }): Promise<ApiResponse>;
|
|
920
|
+
/** POST /mingle/round — rank: metic+archon */
|
|
921
|
+
postMingleRound(args?: RequestArgs & { body?: PostMingleRoundRequest }): Promise<PostMingleRoundResponse>;
|
|
922
|
+
};
|
|
903
923
|
"modules": {
|
|
904
924
|
/** GET /modules — rank: any-builder */
|
|
905
925
|
getModules(args?: RequestArgs): Promise<GetModulesResponse>;
|
|
@@ -584,6 +584,18 @@ export function createClient(opts = {}) {
|
|
|
584
584
|
// POST /memory/sync — rank: any-builder — POST /memory/sync
|
|
585
585
|
postMemorySync: (args) => request("POST", "/memory/sync", { hasBody: true }, args),
|
|
586
586
|
},
|
|
587
|
+
"mingle": {
|
|
588
|
+
// GET /mingle — rank: any-builder — GET /mingle
|
|
589
|
+
getMingle: (args) => request("GET", "/mingle", { hasBody: false }, args),
|
|
590
|
+
// PUT /mingle/opt-in — rank: any-builder — PUT /mingle/opt-in
|
|
591
|
+
putMingleOptIn: (args) => request("PUT", "/mingle/opt-in", { hasBody: true }, args),
|
|
592
|
+
// POST /mingle/pairs/{id}/decide — rank: any-builder — POST /mingle/pairs/:id/decide
|
|
593
|
+
postMinglePairsIdDecide: (args) => request("POST", "/mingle/pairs/{id}/decide", { hasBody: true }, args),
|
|
594
|
+
// PUT /mingle/project — rank: metic+archon — PUT /mingle/project
|
|
595
|
+
putMingleProject: (args) => request("PUT", "/mingle/project", { hasBody: true }, args),
|
|
596
|
+
// POST /mingle/round — rank: metic+archon — POST /mingle/round
|
|
597
|
+
postMingleRound: (args) => request("POST", "/mingle/round", { hasBody: true }, args),
|
|
598
|
+
},
|
|
587
599
|
"modules": {
|
|
588
600
|
// GET /modules — rank: any-builder — GET /modules
|
|
589
601
|
getModules: (args) => request("GET", "/modules", { hasBody: false }, args),
|
package/docs/adr/0240-a-skipped-module-picker-stores-nothing-and-resolves-the-bundle-on-read.md
ADDED
|
@@ -0,0 +1,157 @@
|
|
|
1
|
+
# 0240 — A skipped module picker stores nothing, and the bundle is resolved on read
|
|
2
|
+
|
|
3
|
+
- **Status:** Accepted
|
|
4
|
+
- **Date:** 2026-09-03
|
|
5
|
+
- **Tasks:** [#1002339](https://cloudbongos.com/builders#/task/1002339) (this decision — BV1.R20)
|
|
6
|
+
- **Goal:** [#1000046](https://cloudbongos.com/builders#/goal/1000046) — Project creation: visibility and
|
|
7
|
+
customization, criterion `proj-module-select` ("during setup a default set of modules is pre-selected…")
|
|
8
|
+
- **Related:** [ADR 0237](<redacted>.md)
|
|
9
|
+
(R19 — the bundles this picker renders, and the file that closed with "where a chosen selection lands
|
|
10
|
+
is R20's decision"), [ADR 0182](<redacted>.md) D4 (the publish bar a module set
|
|
11
|
+
may not join), [ADR 0083](<redacted>.md) (the one-way import rule),
|
|
12
|
+
[ADR 0111](<redacted>.md) (the enqueue-only web tier), migration
|
|
13
|
+
`provisioning_013` (the `detail` column this deliberately does not use)
|
|
14
|
+
|
|
15
|
+
## 1. The problem
|
|
16
|
+
|
|
17
|
+
R19 declared the starter bundles and served them; nothing rendered them. R20 is the
|
|
18
|
+
picker: the owner sees what their declared project type preselects, switches
|
|
19
|
+
individual modules on or off, and the answer has to survive into the project.
|
|
20
|
+
|
|
21
|
+
Three questions had no answer yet, and the first is the one everything else hangs
|
|
22
|
+
off:
|
|
23
|
+
|
|
24
|
+
1. **Where does a chosen selection live?** ADR 0237 §6: *"Nothing is stored yet…
|
|
25
|
+
there is still no module-selection column on any table."*
|
|
26
|
+
2. **What does *skipping* mean?** The picker is optional like the About step
|
|
27
|
+
before it. "Skip = you get the preselect" is easy to say and easy to get
|
|
28
|
+
subtly wrong.
|
|
29
|
+
3. **Where does the picker learn what may be chosen?** A bundle names module
|
|
30
|
+
keys; a picker has to render a name and a sentence per key, for an owner who
|
|
31
|
+
has met none of them.
|
|
32
|
+
|
|
33
|
+
## 2. Three-valued, or the skip is unreadable forever
|
|
34
|
+
|
|
35
|
+
A new nullable `modules jsonb` column on `provisioning_instances`
|
|
36
|
+
(`provisioning_014`), read through `effectiveModules(row)`:
|
|
37
|
+
|
|
38
|
+
| stored | means | what the project gets |
|
|
39
|
+
|---|---|---|
|
|
40
|
+
| `NULL` | nobody answered — the picker was skipped, or the caller does not ask | the declared type's starter bundle, resolved at read time |
|
|
41
|
+
| `[]` | the owner switched them all off | the always-on core, and nothing else |
|
|
42
|
+
| `["dev-box",…]` | what they picked | exactly that |
|
|
43
|
+
|
|
44
|
+
The temptation was `NOT NULL DEFAULT '[]'`, and it is the mistake: it collapses
|
|
45
|
+
rows 1 and 2, so a project that skipped and a project that deliberately declined
|
|
46
|
+
everything become the same row and no later surface can tell them apart. That is
|
|
47
|
+
the rule `PROJECT_DETAIL_VOCAB` already states out loud — *"a detail answer is
|
|
48
|
+
something the owner SAID… Absent stays absent, and skipped stays skipped"* — and
|
|
49
|
+
it applies here for the same reason: R23 ("add modules later") and R24 (the proof
|
|
50
|
+
walk) both need to know whether an owner has ever been asked.
|
|
51
|
+
|
|
52
|
+
**Skipping is safe because the preselect and the fallback are the same
|
|
53
|
+
declaration.** The panel preselects `bundleForProjectType(type).bundle`; an
|
|
54
|
+
omitted `modules` key makes the server resolve `bundleForProjectType(type).bundle`.
|
|
55
|
+
Not two lists kept in agreement — one function, called twice. That is what lets
|
|
56
|
+
the panel promise "skip and you get the suggested set" without the promise being
|
|
57
|
+
a thing anyone has to maintain.
|
|
58
|
+
|
|
59
|
+
It also means **`bongos onboard` and any API caller inherit the bundle for free**.
|
|
60
|
+
Neither asks the question, both omit the field, and both get the type's preselect.
|
|
61
|
+
So the canonical onboarding sequence (`onboard-plan.js`) grows **no new step** —
|
|
62
|
+
the picker is a refinement of an answer already in the sequence (`type`), not a
|
|
63
|
+
new question in it. `tests/onboard.mjs` says one optional step keeps that flag
|
|
64
|
+
meaningful; it still does.
|
|
65
|
+
|
|
66
|
+
## 3. Not `detail`, not `settings`
|
|
67
|
+
|
|
68
|
+
`provisioning_013`'s own comment named R19 as a reason `detail` was jsonb, so
|
|
69
|
+
`detail.modules` was the obvious home. It is the wrong one:
|
|
70
|
+
|
|
71
|
+
- `detail` holds the **interview's** answers under `PROJECT_DETAIL_VOCAB`, a
|
|
72
|
+
closed map of scalar vocabularies that `normalizeProjectDetail` filters
|
|
73
|
+
key-by-value and `badProjectDetail` 400s on. A list of module keys is not that
|
|
74
|
+
shape. Carrying it there means teaching a normalizer, a route guard and a read
|
|
75
|
+
projection about a value type none of them have — in order to store something
|
|
76
|
+
ADR 0237 §2 already ruled the interview must not ask.
|
|
77
|
+
- `settings` is worse: a setting is a **policy the running instance obeys**. It
|
|
78
|
+
rides `web.env`, queues a `settings-apply` intent and restarts the service.
|
|
79
|
+
A module selection is a declaration made before the instance exists.
|
|
80
|
+
|
|
81
|
+
A column is the honest shape, and it is additive + namespaced (ADR 0083 §5), so
|
|
82
|
+
the previous release still runs against the schema and every pre-existing row
|
|
83
|
+
reads as its bundle rather than as an error.
|
|
84
|
+
|
|
85
|
+
## 4. The picker's catalog is declared beside the bundles
|
|
86
|
+
|
|
87
|
+
The picker needs, per opt-in module, a label and one owner-facing line. Neither
|
|
88
|
+
existing source can give it:
|
|
89
|
+
|
|
90
|
+
- `module.json`'s `title`/`description` are written for a builder reading a
|
|
91
|
+
module list. *"Outbound ship broadcast + the inbound #ideas/#bugs bot +
|
|
92
|
+
role-sync + channel management + account-link state. Mirror only, never
|
|
93
|
+
authority (ADR 0033)"* is true, and it is not copy you put in front of someone
|
|
94
|
+
who has not built anything yet.
|
|
95
|
+
- `GET /modules` needs a session and imports the live catalog; the create wizard
|
|
96
|
+
is read **signed out**, and a module may not import `src/module-loader/catalog.js`
|
|
97
|
+
(ADR 0083's one-way rule).
|
|
98
|
+
- `GET /public/modules` serves booleans, not copy.
|
|
99
|
+
|
|
100
|
+
So `OPTIONAL_MODULES` joins `STARTER_BUNDLES` in `starter-bundles.js` — the same
|
|
101
|
+
decision ADR 0237 §3 made for the bundle keys, extended to the choices, and kept
|
|
102
|
+
honest the same way: `tests/provisioning_starter_bundles.mjs` reads every
|
|
103
|
+
`modules/*/module.json` and fails the build if the declared opt-in set drifts from
|
|
104
|
+
the on-disk `default: false` set (minus the two hub-only modules). **A new opt-in
|
|
105
|
+
module therefore cannot ship without owner-facing copy**, which is the property
|
|
106
|
+
worth buying.
|
|
107
|
+
|
|
108
|
+
`GET /provisioning/starter-bundles` gains `optional` alongside `core` and
|
|
109
|
+
`bundles`. **One read, one declaration**: a picker that fetched its preselect and
|
|
110
|
+
its catalog separately could preselect a key it has no row for.
|
|
111
|
+
|
|
112
|
+
## 5. Loud at the boundary, quiet at the store
|
|
113
|
+
|
|
114
|
+
`normalizeModuleSelection` drops an unknown, always-on or hub-only key on the way
|
|
115
|
+
to storage. The **route refuses it** (`400 bad_modules`, naming the choices)
|
|
116
|
+
rather than dropping it silently — `badProjectDetail`'s rule, for `badProjectDetail`'s
|
|
117
|
+
reason: a caller who names a module that does not exist has made a mistake, and
|
|
118
|
+
being told nothing and handed a project without it is the silent-drop failure the
|
|
119
|
+
strict validator exists to prevent. A re-request reports `modules_ignored`, the
|
|
120
|
+
same honesty `type_ignored` carries.
|
|
121
|
+
|
|
122
|
+
## 6. Consequences
|
|
123
|
+
|
|
124
|
+
- **The picker cannot block a create.** A failed catalog fetch renders a
|
|
125
|
+
"couldn't load" clause, leaves the answer unsaid, and the create still files —
|
|
126
|
+
the server applies the bundle. A picker that could stop a project from existing
|
|
127
|
+
would be worse than no picker.
|
|
128
|
+
- **A module selection is still not a publish precondition** (ADR 0182 D4,
|
|
129
|
+
restated by ADR 0237 §6). Taking or declining a bundle cannot move a project's
|
|
130
|
+
dark-matter state.
|
|
131
|
+
- **The column is a DECLARATION, not yet an input to the runner.** It is held on
|
|
132
|
+
the platform row exactly as `type` and `description` are, until a catalog row
|
|
133
|
+
materializes. `provisioning_intents` carries no payload, and turning a stored
|
|
134
|
+
selection into the child instance's own `config/modules.json` is separate work —
|
|
135
|
+
named here so nobody reads the stored array as already-provisioned.
|
|
136
|
+
- **The wizard renumbered a third time** (gate 0 · name 1 · type 2 · about 3 ·
|
|
137
|
+
**modules 4** · home 5 · address 6 · review 7 · done 8), so `DRAFT_KEY` moved to
|
|
138
|
+
`-v4`: a draft replayed under the old numbering lands on the wrong panel.
|
|
139
|
+
|
|
140
|
+
## 7. Rejected
|
|
141
|
+
|
|
142
|
+
- **`NOT NULL DEFAULT '[]'`** — collapses "skipped" into "declined everything",
|
|
143
|
+
permanently.
|
|
144
|
+
- **Storing the preselect when the owner skips** — it writes down an answer
|
|
145
|
+
nobody gave, and freezes today's bundle onto a project whose owner never
|
|
146
|
+
expressed a view. Read-time resolution is what `effectiveSettings` already does
|
|
147
|
+
for the same reason.
|
|
148
|
+
- **`detail.modules`** — the interview's vocabulary is scalar by construction, and
|
|
149
|
+
ADR 0237 §2 ruled the interview does not ask this question.
|
|
150
|
+
- **A new step in `onboardPlan`** — the CLI and the skill would have to ask a
|
|
151
|
+
question whose answer they already get by omission. The sequence gains nothing;
|
|
152
|
+
`tests/onboard.mjs`'s "one optional step keeps the flag meaningful" stands.
|
|
153
|
+
- **Rendering the always-on core as sixteen disabled toggles** — a disabled
|
|
154
|
+
control reads as a choice the owner failed to make. The core was never a
|
|
155
|
+
choice, so it is a clause: visible, counted, and outside the band.
|
|
156
|
+
- **Reading the manifests at request time to build the catalog** — costs the
|
|
157
|
+
purity ADR 0237 §3 bought, for copy that is fixed at build time anyway.
|