@bongos/core 1.25.20 → 1.25.22

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 (99) hide show
  1. package/.bongos-core.json +213 -78
  2. package/clients/bongos-client/README.md +1 -1
  3. package/clients/bongos-client/bongos-client.global.js +18 -0
  4. package/clients/bongos-client/index.cjs +18 -0
  5. package/clients/bongos-client/index.d.ts +34 -8
  6. package/clients/bongos-client/index.mjs +18 -0
  7. package/docs/adr/0406-every-project-gets-a-sandbox-that-follows-main-and-live-moves-only-when-a-person-promotes.md +18 -0
  8. package/docs/adr/0407-a-project-grant-is-made-by-the-owner-not-witnessed-at-sign-in.md +3 -1
  9. package/docs/api/openapi.json +693 -125
  10. package/docs/api-reference.md +13 -4
  11. package/docs/copy-inventory.md +432 -427
  12. package/docs/copy-registry.json +571 -526
  13. package/docs/file-map.md +1 -0
  14. package/docs/module-api-changelog.md +4 -0
  15. package/docs/page-readings.json +350 -344
  16. package/modules/government/board.js +8 -7
  17. package/modules/government/charter-advice.js +10 -3
  18. package/modules/government/charter.js +88 -4
  19. package/modules/government/migrations/government_039_vote_cast_via_filed.sql +22 -0
  20. package/modules/government/routes/government.js +12 -12
  21. package/modules/government/sole-member.js +75 -0
  22. package/modules/hall-ui/public/genesis-home.js +12 -5
  23. package/modules/lifecycle/kickoff-checklist.js +1 -1
  24. package/modules/lifecycle/routes/pay-type-gates.js +7 -2
  25. package/modules/onboarding/genesis-home.js +14 -2
  26. package/modules/onboarding/project-facts.js +318 -0
  27. package/modules/onboarding/routes/genesis-work.js +16 -0
  28. package/modules/platform-identity/module.json +1 -1
  29. package/modules/platform-identity/project-standing.js +49 -0
  30. package/modules/platform-identity/routes/my-projects.js +8 -0
  31. package/modules/provisioning/grants.js +126 -0
  32. package/modules/provisioning/migrations/provisioning_038_render_promote.sql +43 -0
  33. package/modules/provisioning/migrations/provisioning_039_project_grants.sql +40 -0
  34. package/modules/provisioning/module.json +2 -1
  35. package/modules/provisioning/project-facts.js +55 -0
  36. package/modules/provisioning/project-refusal.js +107 -0
  37. package/modules/provisioning/provisioning.js +6 -3
  38. package/modules/provisioning/render-lookup.js +36 -1
  39. package/modules/provisioning/render-promote.js +80 -0
  40. package/modules/provisioning/render-sandbox.js +6 -0
  41. package/modules/provisioning/route-helpers.js +70 -16
  42. package/modules/provisioning/routes/env-manifest.js +21 -5
  43. package/modules/provisioning/routes/grants.js +141 -0
  44. package/modules/provisioning/routes/provisioning.js +8 -7
  45. package/modules/provisioning/routes/render-standup.js +82 -3
  46. package/modules/public-landing/public/projects.html +290 -32
  47. package/package-lock.json +2 -2
  48. package/package.json +2 -1
  49. package/release-notes.json +32 -0
  50. package/scripts/bongos/genesis.js +49 -3
  51. package/scripts/bongos/government-walk-sole.js +41 -0
  52. package/scripts/bongos/government-walk.js +15 -16
  53. package/scripts/bongos/init.js +13 -0
  54. package/scripts/bongos/package-core.js +2 -0
  55. package/scripts/bongos/provision-render-common.js +48 -0
  56. package/scripts/bongos/provision-render-promote.js +93 -0
  57. package/scripts/bongos/provision-render-sandbox.js +19 -3
  58. package/scripts/bongos/provision-render.js +4 -36
  59. package/scripts/bongos/provision.js +1 -0
  60. package/scripts/bongos/render-api.js +17 -2
  61. package/scripts/bongos/render-payload.js +5 -2
  62. package/scripts/gds/government-walk-sole.js +6 -0
  63. package/scripts/gds/provision-render-common.js +6 -0
  64. package/scripts/gds/provision-render-promote.js +6 -0
  65. package/src/bongos/folder-upload.js +243 -0
  66. package/src/bongos/routes/github.js +109 -16
  67. package/src/bongos/routes.js +3 -0
  68. package/src/branding.js +4 -0
  69. package/src/module-api.js +1 -1
  70. package/src/sandbox/gate.js +164 -0
  71. package/src/sandbox/index.js +144 -0
  72. package/tests/fleet_cost_view.mjs +2 -0
  73. package/tests/folder_upload_project.mjs +396 -0
  74. package/tests/genesis_government.mjs +5 -1
  75. package/tests/genesis_home.mjs +17 -0
  76. package/tests/genesis_work_routes.mjs +25 -1
  77. package/tests/government_charter_advice.mjs +49 -0
  78. package/tests/government_charter_forms.mjs +14 -3
  79. package/tests/government_seed.mjs +1 -0
  80. package/tests/government_sole_member.mjs +153 -0
  81. package/tests/project_catalog_routes.mjs +2 -0
  82. package/tests/project_facts.mjs +158 -0
  83. package/tests/projects_hub.mjs +1 -1
  84. package/tests/provision_settings_apply.mjs +2 -1
  85. package/tests/provisioning_env_manifest.mjs +4 -0
  86. package/tests/provisioning_env_manifest_edit_delete.mjs +2 -0
  87. package/tests/provisioning_project_grants.mjs +458 -0
  88. package/tests/provisioning_project_owner_gate.mjs +3 -1
  89. package/tests/provisioning_project_refusal.mjs +316 -0
  90. package/tests/provisioning_render_route.mjs +1 -1
  91. package/tests/provisioning_restart.mjs +2 -0
  92. package/tests/provisioning_settings.mjs +2 -0
  93. package/tests/provisioning_settings_apply.mjs +1 -1
  94. package/tests/provisioning_settings_env.mjs +2 -2
  95. package/tests/provisioning_teardown_intent.mjs +2 -2
  96. package/tests/public_landing_projects.mjs +27 -5
  97. package/tests/render_promote.mjs +309 -0
  98. package/tests/render_sandbox.mjs +16 -8
  99. package/tests/sandbox_gate.mjs +182 -0
@@ -8125,6 +8125,77 @@
8125
8125
  ]
8126
8126
  }
8127
8127
  },
8128
+ "/founding/facts": {
8129
+ "get": {
8130
+ "operationId": "get_founding_facts",
8131
+ "tags": [
8132
+ "founding"
8133
+ ],
8134
+ "summary": "GET /founding/facts",
8135
+ "description": "The project's own facts and the legalize stage's options (task 1005129, ../project-facts.js): any builder reads them; the facts are the owner's to change, like every genesis write.\n\n**Rank:** `any-builder` — Any authenticated builder (row-level ownership enforced in-handler).",
8136
+ "x-rank": "any-builder",
8137
+ "x-source": "modules/onboarding/routes/genesis-work.js",
8138
+ "responses": {
8139
+ "200": {
8140
+ "description": "Success."
8141
+ },
8142
+ "400": {
8143
+ "$ref": "#/components/responses/BadRequest"
8144
+ },
8145
+ "401": {
8146
+ "$ref": "#/components/responses/Unauthorized"
8147
+ },
8148
+ "403": {
8149
+ "$ref": "#/components/responses/Forbidden"
8150
+ }
8151
+ },
8152
+ "security": [
8153
+ {
8154
+ "builderSession": []
8155
+ }
8156
+ ]
8157
+ },
8158
+ "put": {
8159
+ "operationId": "put_founding_facts",
8160
+ "tags": [
8161
+ "founding"
8162
+ ],
8163
+ "summary": "PUT /founding/facts",
8164
+ "description": "**Rank:** `any-builder` — Any authenticated builder (row-level ownership enforced in-handler).",
8165
+ "x-rank": "any-builder",
8166
+ "x-source": "modules/onboarding/routes/genesis-work.js",
8167
+ "requestBody": {
8168
+ "required": true,
8169
+ "content": {
8170
+ "application/json": {
8171
+ "schema": {
8172
+ "$ref": "#/components/schemas/PutFoundingFactsRequest"
8173
+ }
8174
+ }
8175
+ },
8176
+ "x-validated": true
8177
+ },
8178
+ "responses": {
8179
+ "200": {
8180
+ "description": "Success."
8181
+ },
8182
+ "400": {
8183
+ "$ref": "#/components/responses/ValidationFailed"
8184
+ },
8185
+ "401": {
8186
+ "$ref": "#/components/responses/Unauthorized"
8187
+ },
8188
+ "403": {
8189
+ "$ref": "#/components/responses/Forbidden"
8190
+ }
8191
+ },
8192
+ "security": [
8193
+ {
8194
+ "builderSession": []
8195
+ }
8196
+ ]
8197
+ }
8198
+ },
8128
8199
  "/founding/genesis": {
8129
8200
  "get": {
8130
8201
  "operationId": "get_founding_genesis",
@@ -8156,6 +8227,37 @@
8156
8227
  ]
8157
8228
  }
8158
8229
  },
8230
+ "/founding/legalize/options": {
8231
+ "get": {
8232
+ "operationId": "get_founding_legalize_options",
8233
+ "tags": [
8234
+ "founding"
8235
+ ],
8236
+ "summary": "GET /founding/legalize/options",
8237
+ "description": "**Rank:** `any-builder` — Any authenticated builder (row-level ownership enforced in-handler).",
8238
+ "x-rank": "any-builder",
8239
+ "x-source": "modules/onboarding/routes/genesis-work.js",
8240
+ "responses": {
8241
+ "200": {
8242
+ "description": "Success."
8243
+ },
8244
+ "400": {
8245
+ "$ref": "#/components/responses/BadRequest"
8246
+ },
8247
+ "401": {
8248
+ "$ref": "#/components/responses/Unauthorized"
8249
+ },
8250
+ "403": {
8251
+ "$ref": "#/components/responses/Forbidden"
8252
+ }
8253
+ },
8254
+ "security": [
8255
+ {
8256
+ "builderSession": []
8257
+ }
8258
+ ]
8259
+ }
8260
+ },
8159
8261
  "/founding/plan": {
8160
8262
  "post": {
8161
8263
  "operationId": "post_founding_plan",
@@ -9454,6 +9556,55 @@
9454
9556
  ]
9455
9557
  }
9456
9558
  },
9559
+ "/github/repos/upload": {
9560
+ "post": {
9561
+ "operationId": "post_github_repos_upload",
9562
+ "tags": [
9563
+ "github"
9564
+ ],
9565
+ "summary": "POST /github/repos/upload",
9566
+ "description": "create a project's repository FROM A FOLDER the person uploaded (task 1005282): papers, artwork or scaffolding, for someone with no repository. The whole upload is checked first (folder-upload.js: sizes, refused types, path safety), and a refusal comes back with each file's plain reason BEFORE the repo exists. Then the private repo is made exactly as POST /github/repos makes it, and the files go in as one commit on main, pushed with the caller's OWN token. The files are never read for meaning and never sent to an AI service. If the push fails after the repo was made, the same builder may retry into THAT repo (`into`), and no other.\n\n**Rank:** `any-builder` — Any authenticated builder (row-level ownership enforced in-handler).",
9567
+ "x-rank": "any-builder",
9568
+ "x-source": "src/bongos/routes/github.js",
9569
+ "requestBody": {
9570
+ "required": false,
9571
+ "content": {
9572
+ "application/json": {
9573
+ "schema": {
9574
+ "$ref": "#/components/schemas/PostGithubReposUploadRequest"
9575
+ }
9576
+ }
9577
+ },
9578
+ "x-validated": true
9579
+ },
9580
+ "responses": {
9581
+ "200": {
9582
+ "description": "Success.",
9583
+ "content": {
9584
+ "application/json": {
9585
+ "schema": {
9586
+ "$ref": "#/components/schemas/PostGithubReposUploadResponse"
9587
+ }
9588
+ }
9589
+ }
9590
+ },
9591
+ "400": {
9592
+ "$ref": "#/components/responses/ValidationFailed"
9593
+ },
9594
+ "401": {
9595
+ "$ref": "#/components/responses/Unauthorized"
9596
+ },
9597
+ "403": {
9598
+ "$ref": "#/components/responses/Forbidden"
9599
+ }
9600
+ },
9601
+ "security": [
9602
+ {
9603
+ "builderSession": []
9604
+ }
9605
+ ]
9606
+ }
9607
+ },
9457
9608
  "/goal-task-relevance/pending": {
9458
9609
  "get": {
9459
9610
  "operationId": "get_goal_task_relevance_pending",
@@ -24658,14 +24809,7 @@
24658
24809
  ],
24659
24810
  "responses": {
24660
24811
  "200": {
24661
- "description": "Success.",
24662
- "content": {
24663
- "application/json": {
24664
- "schema": {
24665
- "$ref": "#/components/schemas/GetProvisioningInstancesIdResponse"
24666
- }
24667
- }
24668
- }
24812
+ "description": "Success."
24669
24813
  },
24670
24814
  "400": {
24671
24815
  "$ref": "#/components/responses/BadRequest"
@@ -25433,6 +25577,173 @@
25433
25577
  ]
25434
25578
  }
25435
25579
  },
25580
+ "/provisioning/instances/{id}/grants": {
25581
+ "get": {
25582
+ "operationId": "get_provisioning_instances_id_grants",
25583
+ "tags": [
25584
+ "provisioning"
25585
+ ],
25586
+ "summary": "GET /provisioning/instances/:id/grants",
25587
+ "description": "GET /provisioning/instances/:id/grants — the project's live grants. rank: any authenticated builder, own resource (owner; archon may read any). 404 otherwise.\n\n**Rank:** `any-builder` — Any authenticated builder (row-level ownership enforced in-handler).",
25588
+ "x-rank": "any-builder",
25589
+ "x-source": "modules/provisioning/routes/grants.js",
25590
+ "parameters": [
25591
+ {
25592
+ "name": "id",
25593
+ "in": "path",
25594
+ "required": true,
25595
+ "schema": {
25596
+ "type": "string"
25597
+ },
25598
+ "description": "Path parameter `id`."
25599
+ }
25600
+ ],
25601
+ "responses": {
25602
+ "200": {
25603
+ "description": "Success.",
25604
+ "content": {
25605
+ "application/json": {
25606
+ "schema": {
25607
+ "$ref": "#/components/schemas/GetProvisioningInstancesIdGrantsResponse"
25608
+ }
25609
+ }
25610
+ }
25611
+ },
25612
+ "400": {
25613
+ "$ref": "#/components/responses/BadRequest"
25614
+ },
25615
+ "401": {
25616
+ "$ref": "#/components/responses/Unauthorized"
25617
+ },
25618
+ "403": {
25619
+ "$ref": "#/components/responses/Forbidden"
25620
+ },
25621
+ "404": {
25622
+ "$ref": "#/components/responses/NotFound"
25623
+ }
25624
+ },
25625
+ "security": [
25626
+ {
25627
+ "builderSession": []
25628
+ }
25629
+ ]
25630
+ },
25631
+ "post": {
25632
+ "operationId": "post_provisioning_instances_id_grants",
25633
+ "tags": [
25634
+ "provisioning"
25635
+ ],
25636
+ "summary": "POST /provisioning/instances/:id/grants",
25637
+ "description": "POST /provisioning/instances/:id/grants { github_login } — give a person access. rank: any authenticated builder, own resource, OWNER ONLY (no archon override). 404 for anyone else, so a stranger learns nothing about the id.\n\n**Rank:** `any-builder` — Any authenticated builder (row-level ownership enforced in-handler).",
25638
+ "x-rank": "any-builder",
25639
+ "x-source": "modules/provisioning/routes/grants.js",
25640
+ "parameters": [
25641
+ {
25642
+ "name": "id",
25643
+ "in": "path",
25644
+ "required": true,
25645
+ "schema": {
25646
+ "type": "string"
25647
+ },
25648
+ "description": "Path parameter `id`."
25649
+ }
25650
+ ],
25651
+ "requestBody": {
25652
+ "required": true,
25653
+ "content": {
25654
+ "application/json": {
25655
+ "schema": {
25656
+ "$ref": "#/components/schemas/PostProvisioningInstancesIdGrantsRequest"
25657
+ }
25658
+ }
25659
+ },
25660
+ "x-validated": true
25661
+ },
25662
+ "responses": {
25663
+ "200": {
25664
+ "description": "Success."
25665
+ },
25666
+ "400": {
25667
+ "$ref": "#/components/responses/ValidationFailed"
25668
+ },
25669
+ "401": {
25670
+ "$ref": "#/components/responses/Unauthorized"
25671
+ },
25672
+ "403": {
25673
+ "$ref": "#/components/responses/Forbidden"
25674
+ },
25675
+ "404": {
25676
+ "$ref": "#/components/responses/NotFound"
25677
+ }
25678
+ },
25679
+ "security": [
25680
+ {
25681
+ "builderSession": []
25682
+ }
25683
+ ]
25684
+ }
25685
+ },
25686
+ "/provisioning/instances/{id}/grants/{grantId}": {
25687
+ "delete": {
25688
+ "operationId": "delete_provisioning_instances_id_grants_grantId",
25689
+ "tags": [
25690
+ "provisioning"
25691
+ ],
25692
+ "summary": "DELETE /provisioning/instances/:id/grants/:grantId",
25693
+ "description": "DELETE /provisioning/instances/:id/grants/:grantId — take access back. rank: any authenticated builder: the project's owner, an archon, or the grantee removing their OWN grant — decided in the handler, because \"whose grant is it\" is a fact of the row. Anyone else gets the same 404 a missing project gets.\n\n**Rank:** `any-builder` — Any authenticated builder (row-level ownership enforced in-handler).",
25694
+ "x-rank": "any-builder",
25695
+ "x-source": "modules/provisioning/routes/grants.js",
25696
+ "parameters": [
25697
+ {
25698
+ "name": "id",
25699
+ "in": "path",
25700
+ "required": true,
25701
+ "schema": {
25702
+ "type": "string"
25703
+ },
25704
+ "description": "Path parameter `id`."
25705
+ },
25706
+ {
25707
+ "name": "grantId",
25708
+ "in": "path",
25709
+ "required": true,
25710
+ "schema": {
25711
+ "type": "string"
25712
+ },
25713
+ "description": "Path parameter `grantId`."
25714
+ }
25715
+ ],
25716
+ "responses": {
25717
+ "200": {
25718
+ "description": "Success.",
25719
+ "content": {
25720
+ "application/json": {
25721
+ "schema": {
25722
+ "$ref": "#/components/schemas/DeleteProvisioningInstancesIdGrantsGrantIdResponse"
25723
+ }
25724
+ }
25725
+ }
25726
+ },
25727
+ "400": {
25728
+ "$ref": "#/components/responses/BadRequest"
25729
+ },
25730
+ "401": {
25731
+ "$ref": "#/components/responses/Unauthorized"
25732
+ },
25733
+ "403": {
25734
+ "$ref": "#/components/responses/Forbidden"
25735
+ },
25736
+ "404": {
25737
+ "$ref": "#/components/responses/NotFound"
25738
+ }
25739
+ },
25740
+ "security": [
25741
+ {
25742
+ "builderSession": []
25743
+ }
25744
+ ]
25745
+ }
25746
+ },
25436
25747
  "/provisioning/instances/{id}/invite-suggestions": {
25437
25748
  "get": {
25438
25749
  "operationId": "get_provisioning_instances_id_invite_suggestions",
@@ -25512,61 +25823,167 @@
25512
25823
  "application/json": {
25513
25824
  "schema": {
25514
25825
  "$ref": "#/components/schemas/PutProvisioningInstancesIdLogoRequest"
25515
- }
25516
- }
25517
- },
25518
- "x-validated": true
25519
- },
25520
- "responses": {
25521
- "200": {
25522
- "description": "Success."
25523
- },
25524
- "400": {
25525
- "$ref": "#/components/responses/ValidationFailed"
25526
- },
25527
- "401": {
25528
- "$ref": "#/components/responses/Unauthorized"
25529
- },
25530
- "403": {
25531
- "$ref": "#/components/responses/Forbidden"
25532
- },
25533
- "404": {
25534
- "$ref": "#/components/responses/NotFound"
25535
- }
25536
- },
25537
- "security": [
25538
- {
25539
- "builderSession": []
25540
- }
25541
- ]
25542
- },
25543
- "delete": {
25544
- "operationId": "delete_provisioning_instances_id_logo",
25545
- "tags": [
25546
- "provisioning"
25547
- ],
25548
- "summary": "DELETE /provisioning/instances/:id/logo",
25549
- "description": "DELETE …/logo — rank: any authenticated builder (own resource; archon may change any).\n\n**Rank:** `any-builder` — Any authenticated builder (row-level ownership enforced in-handler).",
25550
- "x-rank": "any-builder",
25551
- "x-source": "modules/provisioning/routes/look.js",
25552
- "parameters": [
25553
- {
25554
- "name": "id",
25555
- "in": "path",
25556
- "required": true,
25557
- "schema": {
25558
- "type": "string"
25559
- },
25560
- "description": "Path parameter `id`."
25561
- }
25562
- ],
25563
- "requestBody": {
25564
- "required": false,
25565
- "content": {
25566
- "application/json": {
25567
- "schema": {
25568
- "type": "object",
25569
- "additionalProperties": true
25826
+ }
25827
+ }
25828
+ },
25829
+ "x-validated": true
25830
+ },
25831
+ "responses": {
25832
+ "200": {
25833
+ "description": "Success."
25834
+ },
25835
+ "400": {
25836
+ "$ref": "#/components/responses/ValidationFailed"
25837
+ },
25838
+ "401": {
25839
+ "$ref": "#/components/responses/Unauthorized"
25840
+ },
25841
+ "403": {
25842
+ "$ref": "#/components/responses/Forbidden"
25843
+ },
25844
+ "404": {
25845
+ "$ref": "#/components/responses/NotFound"
25846
+ }
25847
+ },
25848
+ "security": [
25849
+ {
25850
+ "builderSession": []
25851
+ }
25852
+ ]
25853
+ },
25854
+ "delete": {
25855
+ "operationId": "delete_provisioning_instances_id_logo",
25856
+ "tags": [
25857
+ "provisioning"
25858
+ ],
25859
+ "summary": "DELETE /provisioning/instances/:id/logo",
25860
+ "description": "DELETE …/logo — rank: any authenticated builder (own resource; archon may change any).\n\n**Rank:** `any-builder` — Any authenticated builder (row-level ownership enforced in-handler).",
25861
+ "x-rank": "any-builder",
25862
+ "x-source": "modules/provisioning/routes/look.js",
25863
+ "parameters": [
25864
+ {
25865
+ "name": "id",
25866
+ "in": "path",
25867
+ "required": true,
25868
+ "schema": {
25869
+ "type": "string"
25870
+ },
25871
+ "description": "Path parameter `id`."
25872
+ }
25873
+ ],
25874
+ "requestBody": {
25875
+ "required": false,
25876
+ "content": {
25877
+ "application/json": {
25878
+ "schema": {
25879
+ "type": "object",
25880
+ "additionalProperties": true
25881
+ }
25882
+ }
25883
+ },
25884
+ "x-validated": true
25885
+ },
25886
+ "responses": {
25887
+ "200": {
25888
+ "description": "Success."
25889
+ },
25890
+ "400": {
25891
+ "$ref": "#/components/responses/ValidationFailed"
25892
+ },
25893
+ "401": {
25894
+ "$ref": "#/components/responses/Unauthorized"
25895
+ },
25896
+ "403": {
25897
+ "$ref": "#/components/responses/Forbidden"
25898
+ },
25899
+ "404": {
25900
+ "$ref": "#/components/responses/NotFound"
25901
+ }
25902
+ },
25903
+ "security": [
25904
+ {
25905
+ "builderSession": []
25906
+ }
25907
+ ]
25908
+ }
25909
+ },
25910
+ "/provisioning/instances/{id}/look": {
25911
+ "get": {
25912
+ "operationId": "get_provisioning_instances_id_look",
25913
+ "tags": [
25914
+ "provisioning"
25915
+ ],
25916
+ "summary": "GET /provisioning/instances/:id/look",
25917
+ "description": "GET — rank: any authenticated builder (own resource; archon may read any).\n\n**Rank:** `any-builder` — Any authenticated builder (row-level ownership enforced in-handler).",
25918
+ "x-rank": "any-builder",
25919
+ "x-source": "modules/provisioning/routes/look.js",
25920
+ "parameters": [
25921
+ {
25922
+ "name": "id",
25923
+ "in": "path",
25924
+ "required": true,
25925
+ "schema": {
25926
+ "type": "string"
25927
+ },
25928
+ "description": "Path parameter `id`."
25929
+ }
25930
+ ],
25931
+ "responses": {
25932
+ "200": {
25933
+ "description": "Success.",
25934
+ "content": {
25935
+ "application/json": {
25936
+ "schema": {
25937
+ "$ref": "#/components/schemas/GetProvisioningInstancesIdLookResponse"
25938
+ }
25939
+ }
25940
+ }
25941
+ },
25942
+ "400": {
25943
+ "$ref": "#/components/responses/BadRequest"
25944
+ },
25945
+ "401": {
25946
+ "$ref": "#/components/responses/Unauthorized"
25947
+ },
25948
+ "403": {
25949
+ "$ref": "#/components/responses/Forbidden"
25950
+ },
25951
+ "404": {
25952
+ "$ref": "#/components/responses/NotFound"
25953
+ }
25954
+ },
25955
+ "security": [
25956
+ {
25957
+ "builderSession": []
25958
+ }
25959
+ ]
25960
+ },
25961
+ "patch": {
25962
+ "operationId": "patch_provisioning_instances_id_look",
25963
+ "tags": [
25964
+ "provisioning"
25965
+ ],
25966
+ "summary": "PATCH /provisioning/instances/:id/look",
25967
+ "description": "PATCH — rank: any authenticated builder (own resource; archon may change any). A custom look needs an accent, sent now or already stored; the stored one is the ADJUSTED colour, and `adjusted` in the reply says when it differs from what came in.\n\n**Rank:** `any-builder` — Any authenticated builder (row-level ownership enforced in-handler).",
25968
+ "x-rank": "any-builder",
25969
+ "x-source": "modules/provisioning/routes/look.js",
25970
+ "parameters": [
25971
+ {
25972
+ "name": "id",
25973
+ "in": "path",
25974
+ "required": true,
25975
+ "schema": {
25976
+ "type": "string"
25977
+ },
25978
+ "description": "Path parameter `id`."
25979
+ }
25980
+ ],
25981
+ "requestBody": {
25982
+ "required": false,
25983
+ "content": {
25984
+ "application/json": {
25985
+ "schema": {
25986
+ "$ref": "#/components/schemas/PatchProvisioningInstancesIdLookRequest"
25570
25987
  }
25571
25988
  }
25572
25989
  },
@@ -25596,16 +26013,16 @@
25596
26013
  ]
25597
26014
  }
25598
26015
  },
25599
- "/provisioning/instances/{id}/look": {
26016
+ "/provisioning/instances/{id}/render": {
25600
26017
  "get": {
25601
- "operationId": "get_provisioning_instances_id_look",
26018
+ "operationId": "get_provisioning_instances_id_render",
25602
26019
  "tags": [
25603
26020
  "provisioning"
25604
26021
  ],
25605
- "summary": "GET /provisioning/instances/:id/look",
25606
- "description": "GET — rank: any authenticated builder (own resource; archon may read any).\n\n**Rank:** `any-builder` — Any authenticated builder (row-level ownership enforced in-handler).",
26022
+ "summary": "GET /provisioning/instances/:id/render",
26023
+ "description": "GET /provisioning/instances/:id/render — rank: any authenticated builder, and OWNER ONLY, like the POST (task 1004353). Where the project's app setup on Render stands: the stage, the app's address, the Render links, a failure as one sentence with the answers a Retry re-sends, and the env var NAMES still to set there (task 1004062's manifest — never a value; this platform holds none). Read from the row alone: nothing here calls Render, and there is no key to hold. `app` is null when the project's app has no platform chosen.\n\n**Rank:** `any-builder` — Any authenticated builder (row-level ownership enforced in-handler).",
25607
26024
  "x-rank": "any-builder",
25608
- "x-source": "modules/provisioning/routes/look.js",
26025
+ "x-source": "modules/provisioning/routes/render-standup.js",
25609
26026
  "parameters": [
25610
26027
  {
25611
26028
  "name": "id",
@@ -25623,7 +26040,7 @@
25623
26040
  "content": {
25624
26041
  "application/json": {
25625
26042
  "schema": {
25626
- "$ref": "#/components/schemas/GetProvisioningInstancesIdLookResponse"
26043
+ "$ref": "#/components/schemas/GetProvisioningInstancesIdRenderResponse"
25627
26044
  }
25628
26045
  }
25629
26046
  }
@@ -25647,15 +26064,15 @@
25647
26064
  }
25648
26065
  ]
25649
26066
  },
25650
- "patch": {
25651
- "operationId": "patch_provisioning_instances_id_look",
26067
+ "post": {
26068
+ "operationId": "post_provisioning_instances_id_render",
25652
26069
  "tags": [
25653
26070
  "provisioning"
25654
26071
  ],
25655
- "summary": "PATCH /provisioning/instances/:id/look",
25656
- "description": "PATCH — rank: any authenticated builder (own resource; archon may change any). A custom look needs an accent, sent now or already stored; the stored one is the ADJUSTED colour, and `adjusted` in the reply says when it differs from what came in.\n\n**Rank:** `any-builder` — Any authenticated builder (row-level ownership enforced in-handler).",
26072
+ "summary": "POST /provisioning/instances/:id/render",
26073
+ "description": "POST /provisioning/instances/:id/render — rank: any authenticated builder, and OWNER ONLY: the key is the owner's and so is the account it acts in, so an archon on someone else's project gets the same 404 as a stranger. The reply is a receipt; nothing has happened on Render when it is sent.\n\n**Rank:** `any-builder` — Any authenticated builder (row-level ownership enforced in-handler).",
25657
26074
  "x-rank": "any-builder",
25658
- "x-source": "modules/provisioning/routes/look.js",
26075
+ "x-source": "modules/provisioning/routes/render-standup.js",
25659
26076
  "parameters": [
25660
26077
  {
25661
26078
  "name": "id",
@@ -25668,11 +26085,11 @@
25668
26085
  }
25669
26086
  ],
25670
26087
  "requestBody": {
25671
- "required": false,
26088
+ "required": true,
25672
26089
  "content": {
25673
26090
  "application/json": {
25674
26091
  "schema": {
25675
- "$ref": "#/components/schemas/PatchProvisioningInstancesIdLookRequest"
26092
+ "$ref": "#/components/schemas/PostProvisioningInstancesIdRenderRequest"
25676
26093
  }
25677
26094
  }
25678
26095
  },
@@ -25680,7 +26097,14 @@
25680
26097
  },
25681
26098
  "responses": {
25682
26099
  "200": {
25683
- "description": "Success."
26100
+ "description": "Success.",
26101
+ "content": {
26102
+ "application/json": {
26103
+ "schema": {
26104
+ "$ref": "#/components/schemas/PostProvisioningInstancesIdRenderResponse"
26105
+ }
26106
+ }
26107
+ }
25684
26108
  },
25685
26109
  "400": {
25686
26110
  "$ref": "#/components/responses/ValidationFailed"
@@ -25702,14 +26126,14 @@
25702
26126
  ]
25703
26127
  }
25704
26128
  },
25705
- "/provisioning/instances/{id}/render": {
25706
- "get": {
25707
- "operationId": "get_provisioning_instances_id_render",
26129
+ "/provisioning/instances/{id}/render/promote": {
26130
+ "post": {
26131
+ "operationId": "post_provisioning_instances_id_render_promote",
25708
26132
  "tags": [
25709
26133
  "provisioning"
25710
26134
  ],
25711
- "summary": "GET /provisioning/instances/:id/render",
25712
- "description": "GET /provisioning/instances/:id/render — rank: any authenticated builder, and OWNER ONLY, like the POST (task 1004353). Where the project's app setup on Render stands: the stage, the app's address, the Render links, a failure as one sentence with the answers a Retry re-sends, and the env var NAMES still to set there (task 1004062's manifest — never a value; this platform holds none). Read from the row alone: nothing here calls Render, and there is no key to hold. `app` is null when the project's app has no platform chosen.\n\n**Rank:** `any-builder` — Any authenticated builder (row-level ownership enforced in-handler).",
26135
+ "summary": "POST /provisioning/instances/:id/render/promote",
26136
+ "description": "POST /provisioning/instances/:id/render/promote — rank: any authenticated builder, and OWNER ONLY: the key and the live app are the owner's, so the server decides only the owner may move it (an archon on someone else's project gets the stranger's 404). Takes the change the owner chose (`commit_id`) and the change live ran when they looked (`expect_live_commit`); the runner refuses if either moved. This is the ONLY way Bongos moves a live app that has a sandbox, and the reply is a receipt: nothing is live yet.\n\n**Rank:** `any-builder` — Any authenticated builder (row-level ownership enforced in-handler).",
25713
26137
  "x-rank": "any-builder",
25714
26138
  "x-source": "modules/provisioning/routes/render-standup.js",
25715
26139
  "parameters": [
@@ -25723,19 +26147,30 @@
25723
26147
  "description": "Path parameter `id`."
25724
26148
  }
25725
26149
  ],
26150
+ "requestBody": {
26151
+ "required": true,
26152
+ "content": {
26153
+ "application/json": {
26154
+ "schema": {
26155
+ "$ref": "#/components/schemas/PostProvisioningInstancesIdRenderPromoteRequest"
26156
+ }
26157
+ }
26158
+ },
26159
+ "x-validated": true
26160
+ },
25726
26161
  "responses": {
25727
26162
  "200": {
25728
26163
  "description": "Success.",
25729
26164
  "content": {
25730
26165
  "application/json": {
25731
26166
  "schema": {
25732
- "$ref": "#/components/schemas/GetProvisioningInstancesIdRenderResponse"
26167
+ "$ref": "#/components/schemas/PostProvisioningInstancesIdRenderPromoteResponse"
25733
26168
  }
25734
26169
  }
25735
26170
  }
25736
26171
  },
25737
26172
  "400": {
25738
- "$ref": "#/components/responses/BadRequest"
26173
+ "$ref": "#/components/responses/ValidationFailed"
25739
26174
  },
25740
26175
  "401": {
25741
26176
  "$ref": "#/components/responses/Unauthorized"
@@ -25752,14 +26187,16 @@
25752
26187
  "builderSession": []
25753
26188
  }
25754
26189
  ]
25755
- },
26190
+ }
26191
+ },
26192
+ "/provisioning/instances/{id}/render/promote/look": {
25756
26193
  "post": {
25757
- "operationId": "post_provisioning_instances_id_render",
26194
+ "operationId": "post_provisioning_instances_id_render_promote_look",
25758
26195
  "tags": [
25759
26196
  "provisioning"
25760
26197
  ],
25761
- "summary": "POST /provisioning/instances/:id/render",
25762
- "description": "POST /provisioning/instances/:id/render — rank: any authenticated builder, and OWNER ONLY: the key is the owner's and so is the account it acts in, so an archon on someone else's project gets the same 404 as a stranger. The reply is a receipt; nothing has happened on Render when it is sent.\n\n**Rank:** `any-builder` — Any authenticated builder (row-level ownership enforced in-handler).",
26198
+ "summary": "POST /provisioning/instances/:id/render/promote/look",
26199
+ "description": "POST /provisioning/instances/:id/render/promote/look — rank: any authenticated builder, and OWNER ONLY. What is waiting on the sandbox to go live (ADR 0406 §2, task 1005290): the change the live app runs, and every change that has run on the sandbox since, newest first. A read-only look at Render on the owner's key held for this one request (ADR 0348 as widened by ADR 0406 §11): GET only, never stored, logged or sent back.\n\n**Rank:** `any-builder` — Any authenticated builder (row-level ownership enforced in-handler).",
25763
26200
  "x-rank": "any-builder",
25764
26201
  "x-source": "modules/provisioning/routes/render-standup.js",
25765
26202
  "parameters": [
@@ -25778,7 +26215,7 @@
25778
26215
  "content": {
25779
26216
  "application/json": {
25780
26217
  "schema": {
25781
- "$ref": "#/components/schemas/PostProvisioningInstancesIdRenderRequest"
26218
+ "$ref": "#/components/schemas/PostProvisioningInstancesIdRenderPromoteLookRequest"
25782
26219
  }
25783
26220
  }
25784
26221
  },
@@ -25786,14 +26223,7 @@
25786
26223
  },
25787
26224
  "responses": {
25788
26225
  "200": {
25789
- "description": "Success.",
25790
- "content": {
25791
- "application/json": {
25792
- "schema": {
25793
- "$ref": "#/components/schemas/PostProvisioningInstancesIdRenderResponse"
25794
- }
25795
- }
25796
- }
26226
+ "description": "Success."
25797
26227
  },
25798
26228
  "400": {
25799
26229
  "$ref": "#/components/responses/ValidationFailed"
@@ -34224,6 +34654,21 @@
34224
34654
  "message"
34225
34655
  ]
34226
34656
  },
34657
+ "DeleteProvisioningInstancesIdGrantsGrantIdResponse": {
34658
+ "type": "object",
34659
+ "properties": {
34660
+ "ok": {
34661
+ "type": "boolean"
34662
+ },
34663
+ "revoked": {
34664
+ "type": "boolean"
34665
+ }
34666
+ },
34667
+ "required": [
34668
+ "ok",
34669
+ "revoked"
34670
+ ]
34671
+ },
34227
34672
  "DeleteSpecialitiesIdDocumentsDocIdResponse": {
34228
34673
  "type": "object",
34229
34674
  "properties": {
@@ -36079,6 +36524,19 @@
36079
36524
  "note"
36080
36525
  ]
36081
36526
  },
36527
+ "GetProvisioningInstancesIdGrantsResponse": {
36528
+ "type": "object",
36529
+ "properties": {
36530
+ "grants": {},
36531
+ "levels": {},
36532
+ "limit": {}
36533
+ },
36534
+ "required": [
36535
+ "grants",
36536
+ "levels",
36537
+ "limit"
36538
+ ]
36539
+ },
36082
36540
  "GetProvisioningInstancesIdInviteSuggestionsResponse": {
36083
36541
  "type": "object",
36084
36542
  "properties": {
@@ -36118,6 +36576,7 @@
36118
36576
  },
36119
36577
  "app": {},
36120
36578
  "sandbox": {},
36579
+ "promote": {},
36121
36580
  "env_vars": {},
36122
36581
  "values_held": {
36123
36582
  "type": "boolean"
@@ -36127,25 +36586,11 @@
36127
36586
  "ok",
36128
36587
  "app",
36129
36588
  "sandbox",
36589
+ "promote",
36130
36590
  "env_vars",
36131
36591
  "values_held"
36132
36592
  ]
36133
36593
  },
36134
- "GetProvisioningInstancesIdResponse": {
36135
- "type": "object",
36136
- "properties": {
36137
- "instance": {},
36138
- "open_intent": {},
36139
- "github_app": {},
36140
- "github_setup": {}
36141
- },
36142
- "required": [
36143
- "instance",
36144
- "open_intent",
36145
- "github_app",
36146
- "github_setup"
36147
- ]
36148
- },
36149
36594
  "GetProvisioningInstancesIdSettingsResponse": {
36150
36595
  "type": "object",
36151
36596
  "properties": {
@@ -39686,6 +40131,38 @@
39686
40131
  "repo"
39687
40132
  ]
39688
40133
  },
40134
+ "PostGithubReposUploadRequest": {
40135
+ "type": "object",
40136
+ "properties": {
40137
+ "name": {
40138
+ "type": "string",
40139
+ "maxLength": 100
40140
+ },
40141
+ "org": {
40142
+ "type": "string",
40143
+ "maxLength": 39
40144
+ },
40145
+ "into": {
40146
+ "type": "string",
40147
+ "maxLength": 140
40148
+ },
40149
+ "files": {
40150
+ "type": "array"
40151
+ }
40152
+ },
40153
+ "additionalProperties": false
40154
+ },
40155
+ "PostGithubReposUploadResponse": {
40156
+ "type": "object",
40157
+ "properties": {
40158
+ "repo": {},
40159
+ "uploaded": {}
40160
+ },
40161
+ "required": [
40162
+ "repo",
40163
+ "uploaded"
40164
+ ]
40165
+ },
39689
40166
  "PostGoalTaskRelevanceIdDecideRequest": {
39690
40167
  "type": "object",
39691
40168
  "properties": {
@@ -40397,13 +40874,17 @@
40397
40874
  },
40398
40875
  "amendment": {},
40399
40876
  "item": {},
40400
- "reads_as": {}
40877
+ "reads_as": {},
40878
+ "what_happens_next": {},
40879
+ "decided": {}
40401
40880
  },
40402
40881
  "required": [
40403
40882
  "ok",
40404
40883
  "amendment",
40405
40884
  "item",
40406
- "reads_as"
40885
+ "reads_as",
40886
+ "what_happens_next",
40887
+ "decided"
40407
40888
  ]
40408
40889
  },
40409
40890
  "PostGovernmentBoardDecisionRulesRequest": {
@@ -40430,13 +40911,15 @@
40430
40911
  },
40431
40912
  "amendment": {},
40432
40913
  "item": {},
40433
- "rules": {}
40914
+ "rules": {},
40915
+ "decided": {}
40434
40916
  },
40435
40917
  "required": [
40436
40918
  "ok",
40437
40919
  "amendment",
40438
40920
  "item",
40439
- "rules"
40921
+ "rules",
40922
+ "decided"
40440
40923
  ]
40441
40924
  },
40442
40925
  "PostGovernmentBoardItemsItemIdVotesRequest": {
@@ -40510,12 +40993,14 @@
40510
40993
  "type": "boolean"
40511
40994
  },
40512
40995
  "amendment": {},
40513
- "item": {}
40996
+ "item": {},
40997
+ "decided": {}
40514
40998
  },
40515
40999
  "required": [
40516
41000
  "ok",
40517
41001
  "amendment",
40518
- "item"
41002
+ "item",
41003
+ "decided"
40519
41004
  ]
40520
41005
  },
40521
41006
  "PostGovernmentBoardLawsRequest": {
@@ -40542,13 +41027,15 @@
40542
41027
  },
40543
41028
  "amendment": {},
40544
41029
  "item": {},
40545
- "proposal": {}
41030
+ "proposal": {},
41031
+ "decided": {}
40546
41032
  },
40547
41033
  "required": [
40548
41034
  "ok",
40549
41035
  "amendment",
40550
41036
  "item",
40551
- "proposal"
41037
+ "proposal",
41038
+ "decided"
40552
41039
  ]
40553
41040
  },
40554
41041
  "PostGovernmentBoardMattersRequest": {
@@ -40615,14 +41102,16 @@
40615
41102
  "preset": {},
40616
41103
  "amendment": {},
40617
41104
  "item": {},
40618
- "proposal": {}
41105
+ "proposal": {},
41106
+ "decided": {}
40619
41107
  },
40620
41108
  "required": [
40621
41109
  "ok",
40622
41110
  "preset",
40623
41111
  "amendment",
40624
41112
  "item",
40625
- "proposal"
41113
+ "proposal",
41114
+ "decided"
40626
41115
  ]
40627
41116
  },
40628
41117
  "PostGovernmentBuildoutsRequest": {
@@ -42881,6 +43370,73 @@
42881
43370
  "expires_at"
42882
43371
  ]
42883
43372
  },
43373
+ "PostProvisioningInstancesIdGrantsRequest": {
43374
+ "type": "object",
43375
+ "properties": {
43376
+ "github_login": {
43377
+ "type": "string",
43378
+ "maxLength": 39
43379
+ }
43380
+ },
43381
+ "required": [
43382
+ "github_login"
43383
+ ],
43384
+ "additionalProperties": false
43385
+ },
43386
+ "PostProvisioningInstancesIdRenderPromoteLookRequest": {
43387
+ "type": "object",
43388
+ "properties": {
43389
+ "key": {
43390
+ "type": "string",
43391
+ "maxLength": 200
43392
+ }
43393
+ },
43394
+ "required": [
43395
+ "key"
43396
+ ],
43397
+ "additionalProperties": false
43398
+ },
43399
+ "PostProvisioningInstancesIdRenderPromoteRequest": {
43400
+ "type": "object",
43401
+ "properties": {
43402
+ "key": {
43403
+ "type": "string",
43404
+ "maxLength": 200
43405
+ },
43406
+ "commit_id": {
43407
+ "type": "string",
43408
+ "maxLength": 64
43409
+ },
43410
+ "expect_live_commit": {
43411
+ "type": "string",
43412
+ "maxLength": 64
43413
+ }
43414
+ },
43415
+ "required": [
43416
+ "key",
43417
+ "commit_id"
43418
+ ],
43419
+ "additionalProperties": false
43420
+ },
43421
+ "PostProvisioningInstancesIdRenderPromoteResponse": {
43422
+ "type": "object",
43423
+ "properties": {
43424
+ "ok": {
43425
+ "type": "boolean"
43426
+ },
43427
+ "queued": {
43428
+ "type": "boolean"
43429
+ },
43430
+ "action": {},
43431
+ "message": {}
43432
+ },
43433
+ "required": [
43434
+ "ok",
43435
+ "queued",
43436
+ "action",
43437
+ "message"
43438
+ ]
43439
+ },
42884
43440
  "PostProvisioningInstancesIdRenderRequest": {
42885
43441
  "type": "object",
42886
43442
  "properties": {
@@ -45177,6 +45733,18 @@
45177
45733
  },
45178
45734
  "additionalProperties": false
45179
45735
  },
45736
+ "PutFoundingFactsRequest": {
45737
+ "type": "object",
45738
+ "properties": {
45739
+ "facts": {
45740
+ "type": "object"
45741
+ }
45742
+ },
45743
+ "required": [
45744
+ "facts"
45745
+ ],
45746
+ "additionalProperties": false
45747
+ },
45180
45748
  "PutFoundingWorkStageAnswersQuestionRequest": {
45181
45749
  "type": "object",
45182
45750
  "properties": {
@@ -45622,9 +46190,9 @@
45622
46190
  "description": "A required dependency/feature is not configured or is temporarily down."
45623
46191
  }
45624
46192
  },
45625
- "x-endpoint-count": 731,
45626
- "x-schema-count": 759,
46193
+ "x-endpoint-count": 740,
46194
+ "x-schema-count": 767,
45627
46195
  "x-undocumented-bodies": 12,
45628
- "x-response-schemas": 473,
46196
+ "x-response-schemas": 476,
45629
46197
  "x-generated-by": "scripts/bongos/gen-api-docs.js"
45630
46198
  }