@bongos/core 1.25.16 → 1.25.17

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 (45) hide show
  1. package/.bongos-core.json +95 -40
  2. package/bin/bongos.js +1 -0
  3. package/clients/bongos-client/README.md +1 -1
  4. package/clients/bongos-client/bongos-client.global.js +14 -0
  5. package/clients/bongos-client/index.cjs +14 -0
  6. package/clients/bongos-client/index.d.ts +22 -2
  7. package/clients/bongos-client/index.mjs +14 -0
  8. package/docs/adr/0406-every-project-gets-a-sandbox-that-follows-main-and-live-moves-only-when-a-person-promotes.md +8 -0
  9. package/docs/api/openapi.json +415 -3
  10. package/docs/api-reference.md +13 -2
  11. package/docs/module-api-changelog.md +2 -0
  12. package/docs/page-readings.json +1 -1
  13. package/modules/government/decision-rules.js +1 -0
  14. package/modules/lifecycle/first-read-db.js +152 -0
  15. package/modules/lifecycle/first-read.js +265 -0
  16. package/modules/lifecycle/kickoff-checklist.js +12 -3
  17. package/modules/lifecycle/migrations/lifecycle_022_repo_maps.sql +44 -0
  18. package/modules/lifecycle/module.json +2 -1
  19. package/modules/lifecycle/routes/first-read.js +79 -0
  20. package/modules/provisioning/pollers/app-liveness.js +23 -1
  21. package/modules/provisioning/render-sandbox.js +113 -0
  22. package/modules/provisioning/render-standup.js +3 -1
  23. package/modules/provisioning/routes/provisioning.js +4 -1
  24. package/modules/provisioning/routes/render-standup.js +49 -1
  25. package/modules/public-landing/public/projects.html +101 -4
  26. package/package-lock.json +2 -2
  27. package/package.json +1 -1
  28. package/release-notes.json +10 -0
  29. package/scripts/bongos/first-read.js +116 -0
  30. package/scripts/bongos/government-walk.js +4 -4
  31. package/scripts/bongos/provision-render-sandbox.js +171 -0
  32. package/scripts/bongos/provision-render.js +37 -2
  33. package/scripts/bongos/provision-teardown.js +1 -1
  34. package/scripts/bongos/render-api.js +33 -3
  35. package/scripts/bongos/render-payload.js +39 -1
  36. package/scripts/gds/first-read.js +7 -0
  37. package/scripts/gds/provision-render-sandbox.js +6 -0
  38. package/src/module-api.js +1 -1
  39. package/tests/first_read.mjs +303 -0
  40. package/tests/government_act_alone_buildings.mjs +2 -0
  41. package/tests/provisioning_app_status.mjs +3 -2
  42. package/tests/provisioning_render_route.mjs +1 -1
  43. package/tests/provisioning_teardown_intent.mjs +50 -0
  44. package/tests/render_api.mjs +5 -2
  45. package/tests/render_sandbox.mjs +447 -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.25.16",
6
- "core_contract": "1.25.16",
7
- "source_commit": "87657600284a6e0ae62774b866084e49a53a23a9",
5
+ "core_version": "1.25.17",
6
+ "core_contract": "1.25.17",
7
+ "source_commit": "4d82356e09b31b29523333015523fe298f800e33",
8
8
  "source_ref": "HEAD",
9
- "built_at": "2026-11-13T20:43:00.195Z",
9
+ "built_at": "2026-11-13T20:59:20.063Z",
10
10
  "redaction": {
11
11
  "model": "docs-redacted+functional-verbatim",
12
12
  "docs_redacted": 658,
13
13
  "agent_docs_stubbed": 33,
14
- "functional_verbatim": 4030,
14
+ "functional_verbatim": 4041,
15
15
  "rules": 3,
16
16
  "gate_literals": 3,
17
17
  "gate": "passed"
18
18
  },
19
- "file_count": 4722,
20
- "tree_sha256": "6d525893d7d0909074a7e205dba47c7573e56466879c9b2cd9270364c31452cb",
19
+ "file_count": 4733,
20
+ "tree_sha256": "0877e8afbc0c421516832d1a5816604348309aab2a8cb70ae044e0d7d744101b",
21
21
  "files": [
22
22
  {
23
23
  "path": ".claude/skills/ask-for-help/SKILL.md",
@@ -327,17 +327,17 @@
327
327
  {
328
328
  "path": "bin/bongos.js",
329
329
  "mode": "0000755",
330
- "sha256": "b8f304da0098250c62760dcba255fc6cd01850d082d52cf8ae1284eb4bbe02bc"
330
+ "sha256": "1346261403a377b39588b80034534b3b7871137de84155219b25ca64a11f8726"
331
331
  },
332
332
  {
333
333
  "path": "clients/bongos-client/README.md",
334
334
  "mode": "0000644",
335
- "sha256": "ce4ff25a43869980ffb784024927a73c20805d804ebf31d8b4a6f7fe64a14a7e"
335
+ "sha256": "1dc599c062a4797d55110a4a5638a12ebd9aa1621c23f251869f6ad4d6a45258"
336
336
  },
337
337
  {
338
338
  "path": "clients/bongos-client/bongos-client.global.js",
339
339
  "mode": "0000644",
340
- "sha256": "c552be01ea8b1ac046ddd144e8416ca63fcf02a6657bf189a1021a5f952897a2"
340
+ "sha256": "4166ca6d02c2539f07d759dfaf8de90aef1bf7b2b1c776bec385da8de07eae0f"
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": "b73ce847b707bc562470adf7df24d88e841d9f4d3d18cbbec78a601d49502f86"
350
+ "sha256": "9bbb1ca2dcec5cbbfbaeb92f2934dba13243481dc8f08b002337bb499f4042f9"
351
351
  },
352
352
  {
353
353
  "path": "clients/bongos-client/index.d.ts",
354
354
  "mode": "0000644",
355
- "sha256": "0f71811021df44a69be49ff5f6dc42d2d80df6b97019c68b41eecf509135e019"
355
+ "sha256": "b1056b77b78f13d370cea282a328871adbc79b0e9a5ea559353f3ba6c4398ba6"
356
356
  },
357
357
  {
358
358
  "path": "clients/bongos-client/index.mjs",
359
359
  "mode": "0000644",
360
- "sha256": "36e2c1964aacc3e49592ec55f483b8dade28d5f0636a0b64d0c58498b67112cf"
360
+ "sha256": "7b3d2ced71916aadad01c576a53db97c98f8c6b882ebb4d26d8c6c013b8c8abc"
361
361
  },
362
362
  {
363
363
  "path": "clients/bongos-client/package.json",
@@ -2492,7 +2492,7 @@
2492
2492
  {
2493
2493
  "path": "docs/adr/0406-every-project-gets-a-sandbox-that-follows-main-and-live-moves-only-when-a-person-promotes.md",
2494
2494
  "mode": "0000644",
2495
- "sha256": "aedd6b7dc8ba2955c48d44dd6d7ee24b42219b22ef034db1f1b27e23bc04f30c"
2495
+ "sha256": "6061a69b1775f2200c22fdd3c5d657d308d8a14ff51d06ee2b4a2fdb1e628d5f"
2496
2496
  },
2497
2497
  {
2498
2498
  "path": "docs/adr/0407-a-project-grant-is-made-by-the-owner-not-witnessed-at-sign-in.md",
@@ -2512,12 +2512,12 @@
2512
2512
  {
2513
2513
  "path": "docs/api-reference.md",
2514
2514
  "mode": "0000644",
2515
- "sha256": "86488f35d4427223edf9788643d9f2065e4bb21616773d9f2ae8f44eda53bda2"
2515
+ "sha256": "19f9416cb37cfc35d9d4c28b34684ff2e1c93c1235bebae4b787d411317cfae3"
2516
2516
  },
2517
2517
  {
2518
2518
  "path": "docs/api/openapi.json",
2519
2519
  "mode": "0000644",
2520
- "sha256": "10f998180cc5a4479c6299762280d31933cb30db0bda31137d5b82b4f897e328"
2520
+ "sha256": "0770727270ba1adcc90bfa106a74bfd71ca38839175f69269777101123e0c410"
2521
2521
  },
2522
2522
  {
2523
2523
  "path": "docs/architecture.md",
@@ -3102,7 +3102,7 @@
3102
3102
  {
3103
3103
  "path": "docs/module-api-changelog.md",
3104
3104
  "mode": "0000644",
3105
- "sha256": "c0da14c1fc9c48400766725c400c478ff088f8fab63423aec00501bbad4589c3"
3105
+ "sha256": "884a37039834034f7c23f936653eb312b3ad17d483368dc2eeef892c718e5b01"
3106
3106
  },
3107
3107
  {
3108
3108
  "path": "docs/modules-contract.md",
@@ -3187,7 +3187,7 @@
3187
3187
  {
3188
3188
  "path": "docs/page-readings.json",
3189
3189
  "mode": "0000644",
3190
- "sha256": "97b7de0591ebd5da5a6edd5dc4c538874b2f234e5ed5ca5d8b8fa91bb262aa1d"
3190
+ "sha256": "ce9891e2273f7e7e85689d1c388a6c444e4827d7dce560d9a0025e343593e64e"
3191
3191
  },
3192
3192
  {
3193
3193
  "path": "docs/project-context.template.md",
@@ -5702,7 +5702,7 @@
5702
5702
  {
5703
5703
  "path": "modules/government/decision-rules.js",
5704
5704
  "mode": "0000644",
5705
- "sha256": "0a7d55d4a6da2253b0cf4a7daf687918e2f58f461218a4f82c9415f297339156"
5705
+ "sha256": "6077bd52297bd1e46359ac63b072775236b5f9a96925eb82d39d46549c568b1b"
5706
5706
  },
5707
5707
  {
5708
5708
  "path": "modules/government/docket-floors.js",
@@ -8409,6 +8409,16 @@
8409
8409
  "mode": "0000644",
8410
8410
  "sha256": "70be81206f577910d250e70ed0841466bbe329691324156b5b15bb75abcd93d3"
8411
8411
  },
8412
+ {
8413
+ "path": "modules/lifecycle/first-read-db.js",
8414
+ "mode": "0000644",
8415
+ "sha256": "a33013f832e43e34bdc2de89071d55eb62ea4f94053311510eedf7b9a5d228ec"
8416
+ },
8417
+ {
8418
+ "path": "modules/lifecycle/first-read.js",
8419
+ "mode": "0000644",
8420
+ "sha256": "63a5314db23312d690d3adeb0a43dc8be53bba11a359516eaff5e9d03acb1f8d"
8421
+ },
8412
8422
  {
8413
8423
  "path": "modules/lifecycle/funding-wall.js",
8414
8424
  "mode": "0000644",
@@ -8532,7 +8542,7 @@
8532
8542
  {
8533
8543
  "path": "modules/lifecycle/kickoff-checklist.js",
8534
8544
  "mode": "0000644",
8535
- "sha256": "9f610f826d9fcd2dd5785ad9da50feee7f3a07bc0580df67679f794b013e2af9"
8545
+ "sha256": "43d5f3c3bab9c9b3fddab524d111224215d0661a48fce782d0d7980b1c333ee7"
8536
8546
  },
8537
8547
  {
8538
8548
  "path": "modules/lifecycle/kickoff-seed.js",
@@ -8664,6 +8674,11 @@
8664
8674
  "mode": "0000644",
8665
8675
  "sha256": "4607e8fe5207c4854f02a5eca666023c76d5c3890ba8e45e0c3bb034d9cd5486"
8666
8676
  },
8677
+ {
8678
+ "path": "modules/lifecycle/migrations/lifecycle_022_repo_maps.sql",
8679
+ "mode": "0000644",
8680
+ "sha256": "d50075f65fccdf09367421408909072c527c61b8bb1ac0ec61e5803f24385f26"
8681
+ },
8667
8682
  {
8668
8683
  "path": "modules/lifecycle/mingle.js",
8669
8684
  "mode": "0000644",
@@ -8677,7 +8692,7 @@
8677
8692
  {
8678
8693
  "path": "modules/lifecycle/module.json",
8679
8694
  "mode": "0000644",
8680
- "sha256": "b5ca000540d3d478860271d8206204efc9dc761c3d7fa8b9c9a91ab4632974bf"
8695
+ "sha256": "272b0a6cd073c72894eaa79c00ff1679d05bb8027da9bc743106fedd0c34cc3c"
8681
8696
  },
8682
8697
  {
8683
8698
  "path": "modules/lifecycle/moving.js",
@@ -8819,6 +8834,11 @@
8819
8834
  "mode": "0000644",
8820
8835
  "sha256": "22d015052c9d4870491101ad1170f5e784a372de6e49732b39f449dee1cf2b8e"
8821
8836
  },
8837
+ {
8838
+ "path": "modules/lifecycle/routes/first-read.js",
8839
+ "mode": "0000644",
8840
+ "sha256": "b10e8eed0a419d54aa5194d73d424a4a14612d51063fe9524e5d84fab4de9f13"
8841
+ },
8822
8842
  {
8823
8843
  "path": "modules/lifecycle/routes/goal-move.js",
8824
8844
  "mode": "0000644",
@@ -10282,7 +10302,7 @@
10282
10302
  {
10283
10303
  "path": "modules/provisioning/pollers/app-liveness.js",
10284
10304
  "mode": "0000644",
10285
- "sha256": "d9e2cc5fe73250ecd1584335bc8364985c2dcc958940efbc5e90d8f2a9ba7b98"
10305
+ "sha256": "773e1b46487d99b0deb1835bb055633d62757f4cc83123d884a364ffc1f91c88"
10286
10306
  },
10287
10307
  {
10288
10308
  "path": "modules/provisioning/pollers/catalog-backfill.js",
@@ -10334,10 +10354,15 @@
10334
10354
  "mode": "0000644",
10335
10355
  "sha256": "c7861ce5ec0fbb8d570842ad3bfaa862d338c94f7fcfab324910c69c0aeefb0d"
10336
10356
  },
10357
+ {
10358
+ "path": "modules/provisioning/render-sandbox.js",
10359
+ "mode": "0000644",
10360
+ "sha256": "4bae78107ff351f73d27162aa9462215f383918a44f5ffda649a01e42ea2c558"
10361
+ },
10337
10362
  {
10338
10363
  "path": "modules/provisioning/render-standup.js",
10339
10364
  "mode": "0000644",
10340
- "sha256": "dbf5c53e2ce11b517715d476e87171a54a21af1d08de465d150ff0d3bb6b8ad2"
10365
+ "sha256": "b0ca62f43953d381bcd5add2fff27a0a85f50f12c655c033811442a5c2582af2"
10341
10366
  },
10342
10367
  {
10343
10368
  "path": "modules/provisioning/repo-private.js",
@@ -10392,12 +10417,12 @@
10392
10417
  {
10393
10418
  "path": "modules/provisioning/routes/provisioning.js",
10394
10419
  "mode": "0000644",
10395
- "sha256": "88f82ef09c322fb865b2bad3382baf9844ce9def08ab4e6e87b961b2bf8c6218"
10420
+ "sha256": "9b503fb09ea9dd60e4064e55b7e4fe1c2b8bf72d81a85f1bc52ab6c1f505ac5f"
10396
10421
  },
10397
10422
  {
10398
10423
  "path": "modules/provisioning/routes/render-standup.js",
10399
10424
  "mode": "0000644",
10400
- "sha256": "e22297ace96f621bf3864316079e00bab4750e5f03e2e9173416b51616d1aa97"
10425
+ "sha256": "866f81b1770ba3851ede919e6504c727c3d44d4aa55bceb18724c127eea46929"
10401
10426
  },
10402
10427
  {
10403
10428
  "path": "modules/provisioning/routes/repo-private.js",
@@ -11297,7 +11322,7 @@
11297
11322
  {
11298
11323
  "path": "modules/public-landing/public/projects.html",
11299
11324
  "mode": "0000644",
11300
- "sha256": "90ac7326bed042f9bd995d336eebb5701057d45d792227b5990039a8a1fdb261"
11325
+ "sha256": "2a5cdf3d7aec3ecb4a23bdd1761a3beaea5be9cc4fe6029fd7a93282105e3daa"
11301
11326
  },
11302
11327
  {
11303
11328
  "path": "modules/public-landing/public/projects.probes.json",
@@ -12367,12 +12392,12 @@
12367
12392
  {
12368
12393
  "path": "package-lock.json",
12369
12394
  "mode": "0000644",
12370
- "sha256": "6371e242fa415e6424d9a5e3212e837354f9de224fc12dc7705057f230fb3317"
12395
+ "sha256": "58a4990b0e8d114b20008738488af69b11be6dd19248145a44a3838e5715bdf7"
12371
12396
  },
12372
12397
  {
12373
12398
  "path": "package.json",
12374
12399
  "mode": "0000644",
12375
- "sha256": "18cf559d07d7ed63be23d55814d2e58695b266b8306a6c8b971268302dd34ef3"
12400
+ "sha256": "814eba9317e16541fab1ec86d72a34ffdf05af7dfdde060ea2bb694a2eb57c01"
12376
12401
  },
12377
12402
  {
12378
12403
  "path": "public-docs/index.html",
@@ -12392,7 +12417,7 @@
12392
12417
  {
12393
12418
  "path": "release-notes.json",
12394
12419
  "mode": "0000644",
12395
- "sha256": "6e70870bd035c6647548cd04b4fb3a6b9049603612fbe98db83fb91ad77ddda1"
12420
+ "sha256": "1d456ece9bc57494d1bb9aec0463a1be4bc5af890e33a9615e1a8f517bdd12b8"
12396
12421
  },
12397
12422
  {
12398
12423
  "path": "scripts/bongos/CLAUDE.md",
@@ -12904,6 +12929,11 @@
12904
12929
  "mode": "0000644",
12905
12930
  "sha256": "bb236875f6a505f4db83390f7f47ff5c013e5632621259acfcc84ab9a11207d7"
12906
12931
  },
12932
+ {
12933
+ "path": "scripts/bongos/first-read.js",
12934
+ "mode": "0000644",
12935
+ "sha256": "70bde5984224deebeec889b676979638ac80a4cb659f4a02e332ddfc5bd82772"
12936
+ },
12907
12937
  {
12908
12938
  "path": "scripts/bongos/fitness-checks-error-envelope.js",
12909
12939
  "mode": "0000644",
@@ -13077,7 +13107,7 @@
13077
13107
  {
13078
13108
  "path": "scripts/bongos/government-walk.js",
13079
13109
  "mode": "0000644",
13080
- "sha256": "f8a788f7e323900d5d9fff48669ebf7243dd259d195c8beab04be851db291627"
13110
+ "sha256": "d1dc26d9761802d80323a4b3ef0546745e8667b3ebceed87e2fa942c5fcf8324"
13081
13111
  },
13082
13112
  {
13083
13113
  "path": "scripts/bongos/grade-correlation-audit.js",
@@ -13484,10 +13514,15 @@
13484
13514
  "mode": "0000644",
13485
13515
  "sha256": "10430a95addbd737df7314663946622029b75fc940f3e939bda5e20b152b5ce7"
13486
13516
  },
13517
+ {
13518
+ "path": "scripts/bongos/provision-render-sandbox.js",
13519
+ "mode": "0000644",
13520
+ "sha256": "6493e4aa80235a76e4f66c867f0ded23da4cc987e62c7313d1d36b22ef121a29"
13521
+ },
13487
13522
  {
13488
13523
  "path": "scripts/bongos/provision-render.js",
13489
13524
  "mode": "0000644",
13490
- "sha256": "01b85187a3194c29d0c51a9a3fe6b7b7be26034a8528598e53f5d4453668f806"
13525
+ "sha256": "f417261b526290faea34ac462cf5c2eb81dc3feaccf6fbebd566d764ddec6bee"
13491
13526
  },
13492
13527
  {
13493
13528
  "path": "scripts/bongos/provision-repo-auth.js",
@@ -13507,7 +13542,7 @@
13507
13542
  {
13508
13543
  "path": "scripts/bongos/provision-teardown.js",
13509
13544
  "mode": "0000644",
13510
- "sha256": "eca5ebb6a796e336b3e5c542de171923488a3f4edd24e2e5da07d0a53f239c23"
13545
+ "sha256": "dc96c90dc61b1bab74f7431ddd91086c8c97134dc7e49a868d1bab84059e65e1"
13511
13546
  },
13512
13547
  {
13513
13548
  "path": "scripts/bongos/provision-units.js",
@@ -13607,7 +13642,7 @@
13607
13642
  {
13608
13643
  "path": "scripts/bongos/render-api.js",
13609
13644
  "mode": "0000644",
13610
- "sha256": "453beaf0828c93570c8cbdb6d0d333850177440dca9592454be387105c3d716f"
13645
+ "sha256": "624be27cc9586657dbe73147e4e2b961368db3bcb9e32062a6f65408a2a74ea2"
13611
13646
  },
13612
13647
  {
13613
13648
  "path": "scripts/bongos/render-check.js",
@@ -13622,7 +13657,7 @@
13622
13657
  {
13623
13658
  "path": "scripts/bongos/render-payload.js",
13624
13659
  "mode": "0000644",
13625
- "sha256": "5551bcb1a18e2fcee52ab25026d858283aacc37661c8b8a51277d82f3a5b7a51"
13660
+ "sha256": "31b53f494f011ce8eb0de4058b60842eca72a843f885f2619e9db8f99490958a"
13626
13661
  },
13627
13662
  {
13628
13663
  "path": "scripts/bongos/repo-metrics.js",
@@ -14614,6 +14649,11 @@
14614
14649
  "mode": "0000644",
14615
14650
  "sha256": "b010bd3c74f92096d1027a8560f18d1a49e7673f2a6c5717fce97348fbceb0a6"
14616
14651
  },
14652
+ {
14653
+ "path": "scripts/gds/first-read.js",
14654
+ "mode": "0000644",
14655
+ "sha256": "c97f9b873197ad9498af681dbd93653e58385fb72d4961227a2584d2475c3fc7"
14656
+ },
14617
14657
  {
14618
14658
  "path": "scripts/gds/fitness-checks-error-envelope.js",
14619
14659
  "mode": "0000644",
@@ -15149,6 +15189,11 @@
15149
15189
  "mode": "0000644",
15150
15190
  "sha256": "36be61cce43aea708eace29034973bdf4d5c7906d52665ae1d19452f9a67f5a6"
15151
15191
  },
15192
+ {
15193
+ "path": "scripts/gds/provision-render-sandbox.js",
15194
+ "mode": "0000644",
15195
+ "sha256": "934284fea1ea798f1299b767d5181c363b6434421b2414b26f38b1eb222fb0f4"
15196
+ },
15152
15197
  {
15153
15198
  "path": "scripts/gds/provision-render.js",
15154
15199
  "mode": "0000644",
@@ -16412,7 +16457,7 @@
16412
16457
  {
16413
16458
  "path": "src/module-api.js",
16414
16459
  "mode": "0000644",
16415
- "sha256": "51341bea39ee164dbbca72d02bf722098e078d6b33e2bfb14b2558818ccda566"
16460
+ "sha256": "f7be4952c9b5ddb5facc839689456cdce48be5c758b8d0c912ec9f4bec80a4ef"
16416
16461
  },
16417
16462
  {
16418
16463
  "path": "src/module-loader/catalog.js",
@@ -18259,6 +18304,11 @@
18259
18304
  "mode": "0000644",
18260
18305
  "sha256": "88b3d0c7fb278e560850f440ec6721655efb62bcafcd983deb7e9ddb25103b65"
18261
18306
  },
18307
+ {
18308
+ "path": "tests/first_read.mjs",
18309
+ "mode": "0000644",
18310
+ "sha256": "c74c7e7f9972432aef264619f5745581a07ee51c66125fffb8f0cffd597ed180"
18311
+ },
18262
18312
  {
18263
18313
  "path": "tests/first_run_engine_check.mjs",
18264
18314
  "mode": "0000644",
@@ -18832,7 +18882,7 @@
18832
18882
  {
18833
18883
  "path": "tests/government_act_alone_buildings.mjs",
18834
18884
  "mode": "0000644",
18835
- "sha256": "12a31fab05c763cd26560ba507ded9a635d026b1e7ea0a8d04992061c222988c"
18885
+ "sha256": "f40f57c1a4a11308847afee5ac192e89fedb96b0346f8db83baecd24d48be599"
18836
18886
  },
18837
18887
  {
18838
18888
  "path": "tests/government_agent_asks.mjs",
@@ -21747,7 +21797,7 @@
21747
21797
  {
21748
21798
  "path": "tests/provisioning_app_status.mjs",
21749
21799
  "mode": "0000644",
21750
- "sha256": "f94e4e42659ce2890b429dfcad95d387d6d618b844857a1368ce4e2ceda42dc5"
21800
+ "sha256": "1686c46bd3eb705cd0897c0f1da09ed5a6aa7b82f9b62e80306192534da7492e"
21751
21801
  },
21752
21802
  {
21753
21803
  "path": "tests/provisioning_callback_page.mjs",
@@ -21862,7 +21912,7 @@
21862
21912
  {
21863
21913
  "path": "tests/provisioning_render_route.mjs",
21864
21914
  "mode": "0000644",
21865
- "sha256": "e26786c0d12bd322cc7fd407baabe6e73fb33d665f2a112dfdd8aa699289ca92"
21915
+ "sha256": "a95e7524f5f765c3abeb47763fc090180a7d17a4d5cfacef7d672055dba68aa3"
21866
21916
  },
21867
21917
  {
21868
21918
  "path": "tests/provisioning_repo_private_route.mjs",
@@ -21907,7 +21957,7 @@
21907
21957
  {
21908
21958
  "path": "tests/provisioning_teardown_intent.mjs",
21909
21959
  "mode": "0000644",
21910
- "sha256": "4d06c5fd13f8cc81c050c2ed6940c91db5cdd95dea9f26ad7b8d6a8089c0254a"
21960
+ "sha256": "13251f3878cfb0705d39932684bcb58186eedc52c7e78326a830c450e6f2feb3"
21911
21961
  },
21912
21962
  {
21913
21963
  "path": "tests/provisioning_teardown_states.mjs",
@@ -22137,7 +22187,7 @@
22137
22187
  {
22138
22188
  "path": "tests/render_api.mjs",
22139
22189
  "mode": "0000644",
22140
- "sha256": "361208df72761e9f7d7d0d67551e9f1035155573665be88ad79dec59b122c27f"
22190
+ "sha256": "1c431675af02a761010d84698b502913f29d85771e09c2ba0fc1fcf018ce50a9"
22141
22191
  },
22142
22192
  {
22143
22193
  "path": "tests/render_check.mjs",
@@ -22154,6 +22204,11 @@
22154
22204
  "mode": "0000644",
22155
22205
  "sha256": "1a73c1fd81f1eb4f3cce98fb1ffd291c2f78ec5ba718a7b9109953565d2d694c"
22156
22206
  },
22207
+ {
22208
+ "path": "tests/render_sandbox.mjs",
22209
+ "mode": "0000644",
22210
+ "sha256": "f861943337808fc8195316aefab2ef1f8fac6448630a21f5087b89ae8a3895f1"
22211
+ },
22157
22212
  {
22158
22213
  "path": "tests/repo_info_binding.mjs",
22159
22214
  "mode": "0000644",
package/bin/bongos.js CHANGED
@@ -82,6 +82,7 @@ const VERBS = {
82
82
  status: { script: 'status.js', group: 'work', summary: 'Version / criterion progress (bongos status C8)', selfHelp: true },
83
83
  recall: { script: 'recall.js', group: 'work', summary: 'Search the docs + project knowledge (bongos recall "x")' },
84
84
  cost: { script: 'cost.js', group: 'work', summary: 'Log a cost entry' },
85
+ 'first-read': { script: 'first-read.js', group: 'work', summary: 'First read-through of an existing project: check, submit and accept the repository map your own AI wrote' },
85
86
  howto: { script: 'howto.js', group: 'work', summary: 'The how-to guide: show the unread steps for a moment (bongos howto moment first_open)' },
86
87
  genesis: { script: 'genesis.js', group: 'work', summary: 'The founder\'s genesis answers: show, answer, or read them for planning (bongos genesis context)' },
87
88
 
@@ -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
- - 719 operations across 86 resource groups
8
+ - 725 operations across 87 resource groups
9
9
 
10
10
  ## Use it from your project
11
11
 
@@ -468,6 +468,18 @@ function createClient(opts = {}) {
468
468
  // GET /feedback/receipt/{id} — rank: public — GET /feedback/receipt/:id
469
469
  getFeedbackReceiptId: (args) => request("GET", "/feedback/receipt/{id}", { hasBody: false }, args),
470
470
  },
471
+ "firstRead": {
472
+ // POST /first-read/maps — rank: metic+archon — POST /first-read/maps
473
+ postFirstReadMaps: (args) => request("POST", "/first-read/maps", { hasBody: true }, args),
474
+ // GET /first-read/maps/{id} — rank: metic+archon — GET /first-read/maps/:id
475
+ getFirstReadMapsId: (args) => request("GET", "/first-read/maps/{id}", { hasBody: false }, args),
476
+ // POST /first-read/maps/{id}/accept — rank: metic+archon — POST /first-read/maps/:id/accept
477
+ postFirstReadMapsIdAccept: (args) => request("POST", "/first-read/maps/{id}/accept", { hasBody: true }, args),
478
+ // POST /first-read/maps/{id}/reject — rank: metic+archon — POST /first-read/maps/:id/reject
479
+ postFirstReadMapsIdReject: (args) => request("POST", "/first-read/maps/{id}/reject", { hasBody: true }, args),
480
+ // GET /first-read/prompt — rank: any-builder — GET /first-read/prompt
481
+ getFirstReadPrompt: (args) => request("GET", "/first-read/prompt", { hasBody: false }, args),
482
+ },
471
483
  "founding": {
472
484
  // POST /founding/alive — rank: any-builder — POST /founding/alive
473
485
  postFoundingAlive: (args) => request("POST", "/founding/alive", { hasBody: true }, args),
@@ -1307,6 +1319,8 @@ function createClient(opts = {}) {
1307
1319
  getProvisioningInstancesIdRender: (args) => request("GET", "/provisioning/instances/{id}/render", { hasBody: false }, args),
1308
1320
  // POST /provisioning/instances/{id}/render — rank: any-builder — POST /provisioning/instances/:id/render
1309
1321
  postProvisioningInstancesIdRender: (args) => request("POST", "/provisioning/instances/{id}/render", { hasBody: true }, args),
1322
+ // POST /provisioning/instances/{id}/render/sandbox — rank: any-builder — POST /provisioning/instances/:id/render/sandbox
1323
+ postProvisioningInstancesIdRenderSandbox: (args) => request("POST", "/provisioning/instances/{id}/render/sandbox", { hasBody: true }, args),
1310
1324
  // POST /provisioning/instances/{id}/repo-private — rank: any-builder — POST /provisioning/instances/:id/repo-private
1311
1325
  postProvisioningInstancesIdRepoPrivate: (args) => request("POST", "/provisioning/instances/{id}/repo-private", { hasBody: true }, args),
1312
1326
  // POST /provisioning/instances/{id}/restart — rank: any-builder — POST /provisioning/instances/:id/restart
@@ -467,6 +467,18 @@ function createClient(opts = {}) {
467
467
  // GET /feedback/receipt/{id} — rank: public — GET /feedback/receipt/:id
468
468
  getFeedbackReceiptId: (args) => request("GET", "/feedback/receipt/{id}", { hasBody: false }, args),
469
469
  },
470
+ "firstRead": {
471
+ // POST /first-read/maps — rank: metic+archon — POST /first-read/maps
472
+ postFirstReadMaps: (args) => request("POST", "/first-read/maps", { hasBody: true }, args),
473
+ // GET /first-read/maps/{id} — rank: metic+archon — GET /first-read/maps/:id
474
+ getFirstReadMapsId: (args) => request("GET", "/first-read/maps/{id}", { hasBody: false }, args),
475
+ // POST /first-read/maps/{id}/accept — rank: metic+archon — POST /first-read/maps/:id/accept
476
+ postFirstReadMapsIdAccept: (args) => request("POST", "/first-read/maps/{id}/accept", { hasBody: true }, args),
477
+ // POST /first-read/maps/{id}/reject — rank: metic+archon — POST /first-read/maps/:id/reject
478
+ postFirstReadMapsIdReject: (args) => request("POST", "/first-read/maps/{id}/reject", { hasBody: true }, args),
479
+ // GET /first-read/prompt — rank: any-builder — GET /first-read/prompt
480
+ getFirstReadPrompt: (args) => request("GET", "/first-read/prompt", { hasBody: false }, args),
481
+ },
470
482
  "founding": {
471
483
  // POST /founding/alive — rank: any-builder — POST /founding/alive
472
484
  postFoundingAlive: (args) => request("POST", "/founding/alive", { hasBody: true }, args),
@@ -1306,6 +1318,8 @@ function createClient(opts = {}) {
1306
1318
  getProvisioningInstancesIdRender: (args) => request("GET", "/provisioning/instances/{id}/render", { hasBody: false }, args),
1307
1319
  // POST /provisioning/instances/{id}/render — rank: any-builder — POST /provisioning/instances/:id/render
1308
1320
  postProvisioningInstancesIdRender: (args) => request("POST", "/provisioning/instances/{id}/render", { hasBody: true }, args),
1321
+ // POST /provisioning/instances/{id}/render/sandbox — rank: any-builder — POST /provisioning/instances/:id/render/sandbox
1322
+ postProvisioningInstancesIdRenderSandbox: (args) => request("POST", "/provisioning/instances/{id}/render/sandbox", { hasBody: true }, args),
1309
1323
  // POST /provisioning/instances/{id}/repo-private — rank: any-builder — POST /provisioning/instances/:id/repo-private
1310
1324
  postProvisioningInstancesIdRepoPrivate: (args) => request("POST", "/provisioning/instances/{id}/repo-private", { hasBody: true }, args),
1311
1325
  // POST /provisioning/instances/{id}/restart — rank: any-builder — POST /provisioning/instances/:id/restart
@@ -75,6 +75,7 @@ export interface GetCoreUpgradesResponse { ok: boolean; running: unknown; limit:
75
75
  export interface GetDiscordChannelsPlanResponse { ok: boolean; guild_id: unknown; op_count: unknown; ops: unknown; warnings: unknown }
76
76
  export interface GetDiscordChannelsSnapshotResponse { ok: boolean; guild_id: unknown; config: unknown; warnings: unknown }
77
77
  export interface GetDoneWhenPendingReviewResponse { criteria: unknown; count: unknown }
78
+ export interface GetFirstReadPromptResponse { schema: unknown; file: unknown; prompt: unknown; example: unknown; limits: unknown }
78
79
  export interface GetFrontDoorGuideMineResponse { ok: boolean; conversation: unknown }
79
80
  export interface GetGithubOrgsOrgResponse { org: unknown }
80
81
  export interface GetGithubRepoResponse { ok: boolean; repo: unknown; private_deployable: boolean }
@@ -164,7 +165,7 @@ export interface GetProvisioningHealthResponse { module: unknown; ok: boolean; c
164
165
  export interface GetProvisioningInstancesIdEnvManifestResponse { instance: unknown; env_vars: unknown; environments: unknown; values_held: boolean; note: unknown }
165
166
  export interface GetProvisioningInstancesIdInviteSuggestionsResponse { suggested: unknown; seeking: unknown; reason: unknown; unavailable?: unknown }
166
167
  export interface GetProvisioningInstancesIdLookResponse { ok: boolean; look: unknown; options: unknown; logo_max_bytes: unknown }
167
- export interface GetProvisioningInstancesIdRenderResponse { ok: boolean; app: unknown; env_vars: unknown; values_held: boolean }
168
+ export interface GetProvisioningInstancesIdRenderResponse { ok: boolean; app: unknown; sandbox: unknown; env_vars: unknown; values_held: boolean }
168
169
  export interface GetProvisioningInstancesIdResponse { instance: unknown; open_intent: unknown; github_app: unknown; github_setup: unknown }
169
170
  export interface GetProvisioningInstancesIdSettingsResponse { ok: boolean; settings: unknown; planet: unknown; options: unknown }
170
171
  export interface GetProvisioningInstancesResponse { instances: unknown }
@@ -389,6 +390,9 @@ export interface PostDoneWhenCriterionIdUnsatisfyRequest { reason?: string }
389
390
  export interface PostDoneWhenCriterionIdUnsatisfyResponse { criterion: unknown }
390
391
  export interface PostFeedbackReceiptRequest { sha256: string; kind?: "bug" | "idea" }
391
392
  export interface PostFeedbackReceiptResponse { ok: boolean; receipt: unknown; hub: unknown }
393
+ export interface PostFirstReadMapsIdAcceptRequest { all?: boolean; items?: string[] }
394
+ export interface PostFirstReadMapsRequest { map: Record<string, unknown> }
395
+ export interface PostFirstReadMapsResponse { map_id: unknown; status: unknown; items: unknown; next: unknown }
392
396
  export interface PostFoundingPlanRequest { days?: Record<string, unknown>; passes?: number; advisors?: string; government?: string; expected_builders?: number; existing?: boolean }
393
397
  export interface PostFrontDoorGuideConversationsIdAttachRequest { token: string }
394
398
  export interface PostFrontDoorGuideConversationsIdAttachResponse { ok: boolean; conversation: unknown }
@@ -607,9 +611,11 @@ export interface PostProvisioningInstancesIdGithubAppRequest { account?: string;
607
611
  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 }
608
612
  export interface PostProvisioningInstancesIdRenderRequest { key: string; owner_id: string; mode: string; service_id?: string; web_plan?: string; db_plan?: string; region?: string; runtime?: string; build_command?: string; start_command?: string; database?: boolean }
609
613
  export interface PostProvisioningInstancesIdRenderResponse { ok: boolean; queued: boolean; action: unknown; mode: unknown; with_setup: boolean; message: unknown }
614
+ export interface PostProvisioningInstancesIdRenderSandboxRequest { key: string }
615
+ export interface PostProvisioningInstancesIdRenderSandboxResponse { ok: boolean; queued: boolean; action: unknown; sandbox: boolean; message: unknown }
610
616
  export interface PostProvisioningInstancesIdRepoPrivateResponse { ok: boolean; queued: unknown; action: unknown; status: unknown; message: unknown }
611
617
  export interface PostProvisioningInstancesIdRestartResponse { ok: boolean; queued: unknown; action: unknown; status: unknown; message: unknown }
612
- export interface PostProvisioningInstancesIdTeardownResponse { ok: boolean; queued: unknown; action: unknown; status: unknown; superseded: unknown; message: unknown }
618
+ export interface PostProvisioningInstancesIdTeardownResponse { ok: boolean; queued: unknown; action: unknown; status: unknown; superseded: unknown; sandbox_key_lent: unknown; message: unknown }
613
619
  export interface PostProvisioningInstancesIdUpdateSubscriptionRequest { subscribed: boolean }
614
620
  export interface PostProvisioningInstancesIdUpdateSubscriptionResponse { ok: boolean; update_subscribed: unknown; previous: unknown; changed: unknown }
615
621
  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[]; terms_acknowledged?: boolean; demo?: Record<string, unknown>; ship_mode?: "auto" | "manual"; genesis?: boolean; test?: boolean }
@@ -1150,6 +1156,18 @@ export interface BongosClient {
1150
1156
  /** GET /feedback/receipt/{id} — rank: public */
1151
1157
  getFeedbackReceiptId(args?: RequestArgs): Promise<ApiResponse>;
1152
1158
  };
1159
+ "firstRead": {
1160
+ /** POST /first-read/maps — rank: metic+archon */
1161
+ postFirstReadMaps(args: RequestArgs & { body: PostFirstReadMapsRequest }): Promise<PostFirstReadMapsResponse>;
1162
+ /** GET /first-read/maps/{id} — rank: metic+archon */
1163
+ getFirstReadMapsId(args?: RequestArgs): Promise<ApiResponse>;
1164
+ /** POST /first-read/maps/{id}/accept — rank: metic+archon */
1165
+ postFirstReadMapsIdAccept(args?: RequestArgs & { body?: PostFirstReadMapsIdAcceptRequest }): Promise<ApiResponse>;
1166
+ /** POST /first-read/maps/{id}/reject — rank: metic+archon */
1167
+ postFirstReadMapsIdReject(args?: RequestArgs): Promise<ApiResponse>;
1168
+ /** GET /first-read/prompt — rank: any-builder */
1169
+ getFirstReadPrompt(args?: RequestArgs): Promise<GetFirstReadPromptResponse>;
1170
+ };
1153
1171
  "founding": {
1154
1172
  /** POST /founding/alive — rank: any-builder */
1155
1173
  postFoundingAlive(args?: RequestArgs): Promise<ApiResponse>;
@@ -1989,6 +2007,8 @@ export interface BongosClient {
1989
2007
  getProvisioningInstancesIdRender(args?: RequestArgs): Promise<GetProvisioningInstancesIdRenderResponse>;
1990
2008
  /** POST /provisioning/instances/{id}/render — rank: any-builder */
1991
2009
  postProvisioningInstancesIdRender(args: RequestArgs & { body: PostProvisioningInstancesIdRenderRequest }): Promise<PostProvisioningInstancesIdRenderResponse>;
2010
+ /** POST /provisioning/instances/{id}/render/sandbox — rank: any-builder */
2011
+ postProvisioningInstancesIdRenderSandbox(args: RequestArgs & { body: PostProvisioningInstancesIdRenderSandboxRequest }): Promise<PostProvisioningInstancesIdRenderSandboxResponse>;
1992
2012
  /** POST /provisioning/instances/{id}/repo-private — rank: any-builder */
1993
2013
  postProvisioningInstancesIdRepoPrivate(args?: RequestArgs): Promise<PostProvisioningInstancesIdRepoPrivateResponse>;
1994
2014
  /** POST /provisioning/instances/{id}/restart — rank: any-builder */
@@ -464,6 +464,18 @@ export function createClient(opts = {}) {
464
464
  // GET /feedback/receipt/{id} — rank: public — GET /feedback/receipt/:id
465
465
  getFeedbackReceiptId: (args) => request("GET", "/feedback/receipt/{id}", { hasBody: false }, args),
466
466
  },
467
+ "firstRead": {
468
+ // POST /first-read/maps — rank: metic+archon — POST /first-read/maps
469
+ postFirstReadMaps: (args) => request("POST", "/first-read/maps", { hasBody: true }, args),
470
+ // GET /first-read/maps/{id} — rank: metic+archon — GET /first-read/maps/:id
471
+ getFirstReadMapsId: (args) => request("GET", "/first-read/maps/{id}", { hasBody: false }, args),
472
+ // POST /first-read/maps/{id}/accept — rank: metic+archon — POST /first-read/maps/:id/accept
473
+ postFirstReadMapsIdAccept: (args) => request("POST", "/first-read/maps/{id}/accept", { hasBody: true }, args),
474
+ // POST /first-read/maps/{id}/reject — rank: metic+archon — POST /first-read/maps/:id/reject
475
+ postFirstReadMapsIdReject: (args) => request("POST", "/first-read/maps/{id}/reject", { hasBody: true }, args),
476
+ // GET /first-read/prompt — rank: any-builder — GET /first-read/prompt
477
+ getFirstReadPrompt: (args) => request("GET", "/first-read/prompt", { hasBody: false }, args),
478
+ },
467
479
  "founding": {
468
480
  // POST /founding/alive — rank: any-builder — POST /founding/alive
469
481
  postFoundingAlive: (args) => request("POST", "/founding/alive", { hasBody: true }, args),
@@ -1303,6 +1315,8 @@ export function createClient(opts = {}) {
1303
1315
  getProvisioningInstancesIdRender: (args) => request("GET", "/provisioning/instances/{id}/render", { hasBody: false }, args),
1304
1316
  // POST /provisioning/instances/{id}/render — rank: any-builder — POST /provisioning/instances/:id/render
1305
1317
  postProvisioningInstancesIdRender: (args) => request("POST", "/provisioning/instances/{id}/render", { hasBody: true }, args),
1318
+ // POST /provisioning/instances/{id}/render/sandbox — rank: any-builder — POST /provisioning/instances/:id/render/sandbox
1319
+ postProvisioningInstancesIdRenderSandbox: (args) => request("POST", "/provisioning/instances/{id}/render/sandbox", { hasBody: true }, args),
1306
1320
  // POST /provisioning/instances/{id}/repo-private — rank: any-builder — POST /provisioning/instances/:id/repo-private
1307
1321
  postProvisioningInstancesIdRepoPrivate: (args) => request("POST", "/provisioning/instances/{id}/repo-private", { hasBody: true }, args),
1308
1322
  // POST /provisioning/instances/{id}/restart — rank: any-builder — POST /provisioning/instances/:id/restart
@@ -106,3 +106,11 @@ Each sibling task's description now opens with a dated note, *"Re-read against A
106
106
  | [task 1005291](https://cloudbongos.com/builders#/task/1005291) | A read-only key is the floor; the gate is an outbound wrapper in the starter active under `BONGOS_SANDBOX=1`, with its limit said plainly; free plan blocks mail ports. |
107
107
  | [task 1005292](https://cloudbongos.com/builders#/task/1005292) | Same rule over the release pin; a second instance takes every release and carries a throwaway test project; owner choice 2 and the patch auto-move question are asked here. |
108
108
  | [task 1005293](https://cloudbongos.com/builders#/task/1005293) | Added checks: no live deploy after a ship, promote refuses without the key, the sandbox band shows, sandbox data is fake, and the lent key is confirmed read-only. |
109
+
110
+ ## 10. Amendment — what setting it up found (2026-11-13, [task 1005289](https://cloudbongos.com/builders#/task/1005289))
111
+
112
+ - **A second database in one server is allowed.** Render's own page ([render.com/docs/postgresql-creating-connecting](https://render.com/docs/postgresql-creating-connecting), section "Adding multiple databases to a single instance", read 2026-11-13) says extra databases can be made in an instance, with plain SQL (`CREATE DATABASE`) over a psql session, and reached on the instance's same addresses with the new name as the last part. Render's API has no call for it, so the runner makes it with SQL over the server's external address. The page names no plan limit and no count limit. **Not yet tried on a real Render account** — no account was available to the session that built it; the walk ([task 1005293](https://cloudbongos.com/builders#/task/1005293)) is the first real run. Owner choice 1 in §6 therefore does not arise unless that run says otherwise; if the database stage fails, the sandbox runs with no database and says why, and nothing paid is bought in its place.
113
+ - **The database starts empty.** The app's own seed fills it (the starter's job under `BONGOS_SANDBOX=1`); the platform cannot know an app's tables.
114
+ - **The live service's switch to manual deploys is left to the promote task** ([task 1005290](https://cloudbongos.com/builders#/task/1005290)), so that live never stops updating before there is a button that moves it.
115
+ - **Teardown needs the owner's key to remove the sandbox**, typed on the teardown screen and used once. The Render client gains one delete, `deleteSandboxService`, which refuses anything not named `…-sandbox` on the free plan. Without the key the sandbox stays on the owner's account and the owner is told exactly what to remove.
116
+