@bongos/core 1.19.209 → 1.19.211

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/.bongos-core.json CHANGED
@@ -2,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.209",
6
- "core_contract": "1.19.209",
7
- "source_commit": "7163dda884c4ff7ab746790988dd3612e1271681",
5
+ "core_version": "1.19.211",
6
+ "core_contract": "1.19.211",
7
+ "source_commit": "348da70b502ddf8be58aa20aeb71dcf7be94ec7c",
8
8
  "source_ref": "HEAD",
9
- "built_at": "2026-08-17T21:40:11.933Z",
9
+ "built_at": "2026-08-17T23:14:01.398Z",
10
10
  "redaction": {
11
11
  "model": "docs-redacted+functional-verbatim",
12
12
  "docs_redacted": 310,
13
13
  "agent_docs_stubbed": 21,
14
- "functional_verbatim": 1300,
14
+ "functional_verbatim": 1301,
15
15
  "rules": 3,
16
16
  "gate_literals": 3,
17
17
  "gate": "passed"
18
18
  },
19
- "file_count": 1631,
20
- "tree_sha256": "f933ba33ff7212d28d0d1b4447b760177e211576e00658e3050a7a72528c3bc5",
19
+ "file_count": 1632,
20
+ "tree_sha256": "5d3eac725354ec0e3bd3c1d91f38bcc539a355b8e2b137de56de74ddfbe2572f",
21
21
  "files": [
22
22
  {
23
23
  "path": ".claude/skills/blocker-review/SKILL.md",
@@ -347,12 +347,12 @@
347
347
  {
348
348
  "path": "clients/bongos-client/README.md",
349
349
  "mode": "0000644",
350
- "sha256": "2755203dec4a1450c5950c39a767bc093d1d1227f952193001cdfa94205e995f"
350
+ "sha256": "81ffa13d3b249b46c4ed62be26cf8e985102697f090a3cfbe7491ff728976028"
351
351
  },
352
352
  {
353
353
  "path": "clients/bongos-client/bongos-client.global.js",
354
354
  "mode": "0000644",
355
- "sha256": "7b4e5ecf6c6d12a3c9e603a0f5b4bd28ba8cd991399ed8941181b6aeae53772d"
355
+ "sha256": "23b9f9be8ed1276fa2422cb74ae185c0e37813672e83196aeb6810f091815c12"
356
356
  },
357
357
  {
358
358
  "path": "clients/bongos-client/examples/hello-world.mjs",
@@ -362,17 +362,17 @@
362
362
  {
363
363
  "path": "clients/bongos-client/index.cjs",
364
364
  "mode": "0000644",
365
- "sha256": "a92355ef21073634500f6806f1e495c955a0b67e889cf07264ed8d1169b119be"
365
+ "sha256": "0e38267f075a54b3695a40da4a54f366d5b42827027e4e3614713e6bcc19ca4a"
366
366
  },
367
367
  {
368
368
  "path": "clients/bongos-client/index.d.ts",
369
369
  "mode": "0000644",
370
- "sha256": "8fe97a3daefdceb9bf40a15a19dffb81fb6387c0acbe20041e58e63b24e80dd1"
370
+ "sha256": "004ad81d92eab45d5384876ce355b8f9208c32e202289f5c4fb1117932d27a14"
371
371
  },
372
372
  {
373
373
  "path": "clients/bongos-client/index.mjs",
374
374
  "mode": "0000644",
375
- "sha256": "adb2a36a9598c543adbf7c8011f36585f7c394bac7f4961718359ee7a29cb1dd"
375
+ "sha256": "661cd90af7bd8d0190cf9cef5614fee48dc48858d3cf9dea681da8b3fc99d170"
376
376
  },
377
377
  {
378
378
  "path": "clients/bongos-client/package.json",
@@ -1367,12 +1367,12 @@
1367
1367
  {
1368
1368
  "path": "docs/api-reference.md",
1369
1369
  "mode": "0000644",
1370
- "sha256": "52554cf7c8e5355c59594c872f30975581eb6c1b9a5bcb63efa1a1a19f2d3877"
1370
+ "sha256": "43f6538485af5153a0ce0fb82f103431fa869cc7d996f5b6694577c474b0f0fe"
1371
1371
  },
1372
1372
  {
1373
1373
  "path": "docs/api/openapi.json",
1374
1374
  "mode": "0000644",
1375
- "sha256": "825af2c499836301a34cff79192e41556cc863fe9a5378d9e5134c862769c2fa"
1375
+ "sha256": "274bd57fc6c0b83aba02cedb5cc6daa2fca4a9d74ae5268e527a81ebc10b50e0"
1376
1376
  },
1377
1377
  {
1378
1378
  "path": "docs/architecture.md",
@@ -2682,7 +2682,7 @@
2682
2682
  {
2683
2683
  "path": "modules/dev-box/app/src/vendor/bongos-client.cjs",
2684
2684
  "mode": "0000644",
2685
- "sha256": "a92355ef21073634500f6806f1e495c955a0b67e889cf07264ed8d1169b119be"
2685
+ "sha256": "0e38267f075a54b3695a40da4a54f366d5b42827027e4e3614713e6bcc19ca4a"
2686
2686
  },
2687
2687
  {
2688
2688
  "path": "modules/dev-box/app/test/unit.mjs",
@@ -3982,7 +3982,7 @@
3982
3982
  {
3983
3983
  "path": "modules/provisioning/routes/provisioning.js",
3984
3984
  "mode": "0000644",
3985
- "sha256": "78c89017e17dfba57ade2330fce293e6422aab316e9311f8215ff3eb9fdc3fe5"
3985
+ "sha256": "a4419bdd0693d0e1168051bd640721b615bf400b25f26478d786b9aac908ab5e"
3986
3986
  },
3987
3987
  {
3988
3988
  "path": "modules/provisioning/tests/liveness.mjs",
@@ -4282,12 +4282,12 @@
4282
4282
  {
4283
4283
  "path": "package-lock.json",
4284
4284
  "mode": "0000644",
4285
- "sha256": "9a096a5f5cadd3f8dab6e2c958402e36c857ff560a14364c756161c41d573ed3"
4285
+ "sha256": "aa3d213f3f3548f655bee0361f01e43ee380b54e958f8d11683ba7d94a098d2b"
4286
4286
  },
4287
4287
  {
4288
4288
  "path": "package.json",
4289
4289
  "mode": "0000644",
4290
- "sha256": "9b699cde73691611630459b846d40b8a887cb51099b8d4193d775fd76f1b9749"
4290
+ "sha256": "368f9931ba9dc39483dc3a9c488fb8df45342cccccab65d34b9a4d083fa530ed"
4291
4291
  },
4292
4292
  {
4293
4293
  "path": "public-docs/index.html",
@@ -4527,7 +4527,7 @@
4527
4527
  {
4528
4528
  "path": "public-landing/assets/cosmos.css",
4529
4529
  "mode": "0000644",
4530
- "sha256": "611050e8599be5791e89f9711b76ef6efc5b1e8bd703e2badc6a6418a9ed432b"
4530
+ "sha256": "bb8a74eaadebf0adf8e59dd03cab87f9c3cbd7faf21d1d6a5d47b460c032c28b"
4531
4531
  },
4532
4532
  {
4533
4533
  "path": "public-landing/assets/verro-medallion.png",
@@ -4547,7 +4547,7 @@
4547
4547
  {
4548
4548
  "path": "public-landing/projects.html",
4549
4549
  "mode": "0000644",
4550
- "sha256": "20dd4fcb471c8d5a4dced2788ca6fffecaba241207bc0087d918d15b60bcc1a1"
4550
+ "sha256": "790034f4256a31da114969853e14fdf47b43b0ad35907b4fcc14ff98897ec7d1"
4551
4551
  },
4552
4552
  {
4553
4553
  "path": "public-landing/world/assets/clouds/cloud-island-large.png",
@@ -5682,7 +5682,7 @@
5682
5682
  {
5683
5683
  "path": "src/bongos/github-repos.js",
5684
5684
  "mode": "0000644",
5685
- "sha256": "893a2eb6f2658942cee2043ff130a5ae38538007e47e2ec2665548e0d286e211"
5685
+ "sha256": "f34518361f15a20c4dc60a936878e72b4c81d99e41e00180270919dcbbd83008"
5686
5686
  },
5687
5687
  {
5688
5688
  "path": "src/bongos/goal-scope-check.js",
@@ -5807,7 +5807,7 @@
5807
5807
  {
5808
5808
  "path": "src/bongos/routes/github.js",
5809
5809
  "mode": "0000644",
5810
- "sha256": "2895aa72fbcef361a5edf07166e64e9902edcb5971eb2e496705b3bfddeabda1"
5810
+ "sha256": "d8674cd2358b63f8463d91484495feaa38219fafdc0d925ad52ddb206a2cc84a"
5811
5811
  },
5812
5812
  {
5813
5813
  "path": "src/bongos/routes/healthz.js",
@@ -5902,7 +5902,7 @@
5902
5902
  {
5903
5903
  "path": "src/module-api.js",
5904
5904
  "mode": "0000644",
5905
- "sha256": "efbf7edd3c80dbce81da9aa7473ae1903674c9018da9803e6ab0e807bcb616f0"
5905
+ "sha256": "5998d6f2561e88ca21f3f764a48fd496767d0b2f16aeaf1a1e7cf981333c4faf"
5906
5906
  },
5907
5907
  {
5908
5908
  "path": "src/module-loader/catalog.js",
@@ -6734,10 +6734,15 @@
6734
6734
  "mode": "0000644",
6735
6735
  "sha256": "850113ed91babc9eb54dc22231f194d283fd3f94cee9deef1e6e0bf6f3a969c2"
6736
6736
  },
6737
+ {
6738
+ "path": "tests/github_repo_visibility.mjs",
6739
+ "mode": "0000644",
6740
+ "sha256": "c2c428ade3a7cf802dfc46415c1d3c1e09fe826e223df71101e81d014cb5d69e"
6741
+ },
6737
6742
  {
6738
6743
  "path": "tests/github_repos_helpers.mjs",
6739
6744
  "mode": "0000644",
6740
- "sha256": "14d68c064218655bdbc04fe95dd7d03a8ac0d152301ac65c8c2c7b9fd93926ef"
6745
+ "sha256": "a450e5248b3b97ddaa11b1b9c79d768779df24b11cd1177174390ae80f5fe624"
6741
6746
  },
6742
6747
  {
6743
6748
  "path": "tests/github_token_store.mjs",
@@ -7522,7 +7527,7 @@
7522
7527
  {
7523
7528
  "path": "tests/projects_hub.mjs",
7524
7529
  "mode": "0000644",
7525
- "sha256": "5a3f724b4e84324d7560254517612b45fd4e4e31e57ebbb0b35a4021d712df6b"
7530
+ "sha256": "963b745e4b4ecd6a786f88758d57aee8680edd49d25f0cc84e3b563a5125be3b"
7526
7531
  },
7527
7532
  {
7528
7533
  "path": "tests/provision.mjs",
@@ -7552,7 +7557,7 @@
7552
7557
  {
7553
7558
  "path": "tests/provisioning_settings.mjs",
7554
7559
  "mode": "0000644",
7555
- "sha256": "bb800d2e15045efbac4fadbc62996054d33e163eb86e6a5e09087d409cc7fbfa"
7560
+ "sha256": "a525fdcfa2fde8edd2be3198ca7213b9b6bc43a12f748a718a570b7f993972b6"
7556
7561
  },
7557
7562
  {
7558
7563
  "path": "tests/provisioning_slug_available.mjs",
@@ -7572,7 +7577,7 @@
7572
7577
  {
7573
7578
  "path": "tests/public_landing_projects.mjs",
7574
7579
  "mode": "0000644",
7575
- "sha256": "ea3fc3b311115c765e7734e11cc33750a5ffde9f492d4635460b04cfc2108ad3"
7580
+ "sha256": "266f5936675c0f6eb8d64af713d215edea2b88bcab50153497ef2d23fec1ff65"
7576
7581
  },
7577
7582
  {
7578
7583
  "path": "tests/public_mirror_export.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
- - 278 operations across 46 resource groups
8
+ - 280 operations across 46 resource groups
9
9
 
10
10
  ## Install
11
11
 
@@ -283,6 +283,10 @@ function createClient(opts = {}) {
283
283
  postGateApprovalsPrApprove: (args) => request("POST", "/gate-approvals/{pr}/approve", { hasBody: true }, args),
284
284
  },
285
285
  "github": {
286
+ // GET /github/repo — rank: any-builder — GET /github/repo
287
+ getGithubRepo: (args) => request("GET", "/github/repo", { hasBody: false }, args),
288
+ // POST /github/repo/visibility — rank: any-builder — POST /github/repo/visibility
289
+ postGithubRepoVisibility: (args) => request("POST", "/github/repo/visibility", { hasBody: true }, args),
286
290
  // GET /github/repos — rank: any-builder — GET /github/repos
287
291
  getGithubRepos: (args) => request("GET", "/github/repos", { hasBody: false }, args),
288
292
  // POST /github/repos — rank: any-builder — POST /github/repos
@@ -282,6 +282,10 @@ function createClient(opts = {}) {
282
282
  postGateApprovalsPrApprove: (args) => request("POST", "/gate-approvals/{pr}/approve", { hasBody: true }, args),
283
283
  },
284
284
  "github": {
285
+ // GET /github/repo — rank: any-builder — GET /github/repo
286
+ getGithubRepo: (args) => request("GET", "/github/repo", { hasBody: false }, args),
287
+ // POST /github/repo/visibility — rank: any-builder — POST /github/repo/visibility
288
+ postGithubRepoVisibility: (args) => request("POST", "/github/repo/visibility", { hasBody: true }, args),
285
289
  // GET /github/repos — rank: any-builder — GET /github/repos
286
290
  getGithubRepos: (args) => request("GET", "/github/repos", { hasBody: false }, args),
287
291
  // POST /github/repos — rank: any-builder — POST /github/repos
@@ -35,6 +35,7 @@ export interface GetBuildersMePendingRankChangeResponse { change: unknown; greet
35
35
  export interface GetBuildersRosterResponse { builders: unknown; stale_hours: unknown }
36
36
  export interface GetDiscordChannelsPlanResponse { ok: boolean; guild_id: unknown; op_count: unknown; ops: unknown; warnings: unknown }
37
37
  export interface GetDoneWhenPendingReviewResponse { criteria: unknown; count: unknown }
38
+ export interface GetGithubRepoResponse { ok: boolean; repo: unknown; private_deployable: boolean }
38
39
  export interface GetGithubReposResponse { repos: unknown }
39
40
  export interface GetGoalsIdConflictsResponse { ok: boolean; goal_id: unknown; conflicts: unknown; cross_goals_considered: unknown }
40
41
  export interface GetGoalsIdRequestsResponse { requests: unknown }
@@ -199,6 +200,8 @@ export interface PostDoneWhenCriterionIdSatisfyRequest { satisfied_by_task_id?:
199
200
  export interface PostDoneWhenCriterionIdSatisfyResponse { criterion: unknown; goal_achieved: unknown; goal: unknown }
200
201
  export interface PostDoneWhenCriterionIdUnsatisfyResponse { criterion: unknown }
201
202
  export interface PostGateApprovalsPrApproveResponse { ok: boolean; pr: unknown; already_clear?: boolean; message: unknown; head_sha?: unknown; status_set?: boolean; recheck?: unknown }
203
+ export interface PostGithubRepoVisibilityRequest { repo: string; visibility: "public" | "private" }
204
+ export interface PostGithubRepoVisibilityResponse { ok: boolean; repo: unknown; private_deployable: boolean }
202
205
  export interface PostGithubReposRequest { name: string }
203
206
  export interface PostGithubReposResponse { repo: unknown }
204
207
  export interface PostGoalsIdArchiveResponse { ok: boolean; goal: unknown }
@@ -530,6 +533,10 @@ export interface BongosClient {
530
533
  postGateApprovalsPrApprove(args?: RequestArgs): Promise<PostGateApprovalsPrApproveResponse>;
531
534
  };
532
535
  "github": {
536
+ /** GET /github/repo — rank: any-builder */
537
+ getGithubRepo(args?: RequestArgs): Promise<GetGithubRepoResponse>;
538
+ /** POST /github/repo/visibility — rank: any-builder */
539
+ postGithubRepoVisibility(args: RequestArgs & { body: PostGithubRepoVisibilityRequest }): Promise<PostGithubRepoVisibilityResponse>;
533
540
  /** GET /github/repos — rank: any-builder */
534
541
  getGithubRepos(args?: RequestArgs): Promise<GetGithubReposResponse>;
535
542
  /** POST /github/repos — rank: any-builder */
@@ -279,6 +279,10 @@ export function createClient(opts = {}) {
279
279
  postGateApprovalsPrApprove: (args) => request("POST", "/gate-approvals/{pr}/approve", { hasBody: true }, args),
280
280
  },
281
281
  "github": {
282
+ // GET /github/repo — rank: any-builder — GET /github/repo
283
+ getGithubRepo: (args) => request("GET", "/github/repo", { hasBody: false }, args),
284
+ // POST /github/repo/visibility — rank: any-builder — POST /github/repo/visibility
285
+ postGithubRepoVisibility: (args) => request("POST", "/github/repo/visibility", { hasBody: true }, args),
282
286
  // GET /github/repos — rank: any-builder — GET /github/repos
283
287
  getGithubRepos: (args) => request("GET", "/github/repos", { hasBody: false }, args),
284
288
  // POST /github/repos — rank: any-builder — POST /github/repos
@@ -3641,6 +3641,93 @@
3641
3641
  ]
3642
3642
  }
3643
3643
  },
3644
+ "/github/repo": {
3645
+ "get": {
3646
+ "operationId": "get_github_repo",
3647
+ "tags": [
3648
+ "github"
3649
+ ],
3650
+ "summary": "GET /github/repo",
3651
+ "description": "reads one repo AS the caller's own GitHub credential sees it (the manage page's repo-visibility read, task 1003045). GitHub's 404 covers both \"no such repo\" and \"no access\" — forwarded as-is, no existence leak.\n\n**Rank:** `any-builder` — Any authenticated builder (row-level ownership enforced in-handler).",
3652
+ "x-rank": "any-builder",
3653
+ "x-source": "src/bongos/routes/github.js",
3654
+ "responses": {
3655
+ "200": {
3656
+ "description": "Success.",
3657
+ "content": {
3658
+ "application/json": {
3659
+ "schema": {
3660
+ "$ref": "#/components/schemas/GetGithubRepoResponse"
3661
+ }
3662
+ }
3663
+ }
3664
+ },
3665
+ "400": {
3666
+ "$ref": "#/components/responses/BadRequest"
3667
+ },
3668
+ "401": {
3669
+ "$ref": "#/components/responses/Unauthorized"
3670
+ },
3671
+ "403": {
3672
+ "$ref": "#/components/responses/Forbidden"
3673
+ }
3674
+ },
3675
+ "security": [
3676
+ {
3677
+ "builderSession": []
3678
+ }
3679
+ ]
3680
+ }
3681
+ },
3682
+ "/github/repo/visibility": {
3683
+ "post": {
3684
+ "operationId": "post_github_repo_visibility",
3685
+ "tags": [
3686
+ "github"
3687
+ ],
3688
+ "summary": "POST /github/repo/visibility",
3689
+ "description": "flips one of the caller's repos PUBLIC, with their own credential. The private direction is REFUSED here, before GitHub is ever called: the deploy pull still runs as the shared deploy key that cannot read a private repo (walk finding N4), so flipping private would break the project's next deploy — the refusal is the honest leg task 1003045 ships.\n\n**Rank:** `any-builder` — Any authenticated builder (row-level ownership enforced in-handler).",
3690
+ "x-rank": "any-builder",
3691
+ "x-source": "src/bongos/routes/github.js",
3692
+ "requestBody": {
3693
+ "required": true,
3694
+ "content": {
3695
+ "application/json": {
3696
+ "schema": {
3697
+ "$ref": "#/components/schemas/PostGithubRepoVisibilityRequest"
3698
+ }
3699
+ }
3700
+ },
3701
+ "x-validated": true
3702
+ },
3703
+ "responses": {
3704
+ "200": {
3705
+ "description": "Success.",
3706
+ "content": {
3707
+ "application/json": {
3708
+ "schema": {
3709
+ "$ref": "#/components/schemas/PostGithubRepoVisibilityResponse"
3710
+ }
3711
+ }
3712
+ }
3713
+ },
3714
+ "400": {
3715
+ "$ref": "#/components/responses/ValidationFailed"
3716
+ },
3717
+ "401": {
3718
+ "$ref": "#/components/responses/Unauthorized"
3719
+ },
3720
+ "403": {
3721
+ "$ref": "#/components/responses/Forbidden"
3722
+ }
3723
+ },
3724
+ "security": [
3725
+ {
3726
+ "builderSession": []
3727
+ }
3728
+ ]
3729
+ }
3730
+ },
3644
3731
  "/github/repos": {
3645
3732
  "get": {
3646
3733
  "operationId": "get_github_repos",
@@ -8725,7 +8812,7 @@
8725
8812
  "provisioning"
8726
8813
  ],
8727
8814
  "summary": "GET /provisioning/instances/:id",
8728
- "description": "GET /provisioning/instances/:id — read one of the caller's own instances. rank: any authenticated builder (own resource). 404 when the id isn't the caller's (own-scoped; does not leak another owner's instance existence).\n\n**Rank:** `any-builder` — Any authenticated builder (row-level ownership enforced in-handler).",
8815
+ "description": "GET /provisioning/instances/:id — read one instance (the manage page's read). rank: any authenticated builder (own resource; archon may read any — task 1003041). 404 otherwise — does not leak another owner's instance existence.\n\n**Rank:** `any-builder` — Any authenticated builder (row-level ownership enforced in-handler).",
8729
8816
  "x-rank": "any-builder",
8730
8817
  "x-source": "modules/provisioning/routes/provisioning.js",
8731
8818
  "parameters": [
@@ -13020,6 +13107,23 @@
13020
13107
  "count"
13021
13108
  ]
13022
13109
  },
13110
+ "GetGithubRepoResponse": {
13111
+ "type": "object",
13112
+ "properties": {
13113
+ "ok": {
13114
+ "type": "boolean"
13115
+ },
13116
+ "repo": {},
13117
+ "private_deployable": {
13118
+ "type": "boolean"
13119
+ }
13120
+ },
13121
+ "required": [
13122
+ "ok",
13123
+ "repo",
13124
+ "private_deployable"
13125
+ ]
13126
+ },
13023
13127
  "GetGithubReposResponse": {
13024
13128
  "type": "object",
13025
13129
  "properties": {
@@ -15323,6 +15427,44 @@
15323
15427
  "message"
15324
15428
  ]
15325
15429
  },
15430
+ "PostGithubRepoVisibilityRequest": {
15431
+ "type": "object",
15432
+ "properties": {
15433
+ "repo": {
15434
+ "type": "string",
15435
+ "maxLength": 140
15436
+ },
15437
+ "visibility": {
15438
+ "type": "string",
15439
+ "enum": [
15440
+ "public",
15441
+ "private"
15442
+ ]
15443
+ }
15444
+ },
15445
+ "required": [
15446
+ "repo",
15447
+ "visibility"
15448
+ ],
15449
+ "additionalProperties": false
15450
+ },
15451
+ "PostGithubRepoVisibilityResponse": {
15452
+ "type": "object",
15453
+ "properties": {
15454
+ "ok": {
15455
+ "type": "boolean"
15456
+ },
15457
+ "repo": {},
15458
+ "private_deployable": {
15459
+ "type": "boolean"
15460
+ }
15461
+ },
15462
+ "required": [
15463
+ "ok",
15464
+ "repo",
15465
+ "private_deployable"
15466
+ ]
15467
+ },
15326
15468
  "PostGithubReposRequest": {
15327
15469
  "type": "object",
15328
15470
  "properties": {
@@ -17587,9 +17729,9 @@
17587
17729
  "description": "A required dependency/feature is not configured or is temporarily down."
17588
17730
  }
17589
17731
  },
17590
- "x-endpoint-count": 278,
17591
- "x-schema-count": 314,
17732
+ "x-endpoint-count": 280,
17733
+ "x-schema-count": 317,
17592
17734
  "x-undocumented-bodies": 8,
17593
- "x-response-schemas": 212,
17735
+ "x-response-schemas": 214,
17594
17736
  "x-generated-by": "scripts/gds/gen-api-docs.js"
17595
17737
  }
@@ -2,7 +2,7 @@
2
2
 
3
3
  # Bongos API reference
4
4
 
5
- > **Generated from the live route files** — the route file is authoritative. 278 endpoints across 46 route files.
5
+ > **Generated from the live route files** — the route file is authoritative. 280 endpoints across 46 route files.
6
6
  > Machine-readable spec: [`docs/api/openapi.json`](api/openapi.json) (OpenAPI 3.1). Rendered docs site: **`/docs`** (e.g. `cloudbongos.com/docs`).
7
7
 
8
8
  Base path: `/api/bongos`. Ranks (enforced server-side, [ADR 0016](adr/<redacted>.md)): `public` < `any-builder` < `metic+archon` < `archon`.
@@ -178,10 +178,12 @@ Base path: `/api/bongos`. Ranks (enforced server-side, [ADR 0016](adr/<redacted>
178
178
  | GET | `/api/bongos/gate-approvals` | `metic+archon` | — | GET /gate-approvals — open PRs awaiting owner approval (gate-review red), with the verdict + per-file reasons + changed files + diff link. |
179
179
  | POST | `/api/bongos/gate-approvals/:pr/approve` | `archon` | — | POST /gate-approvals/:pr/approve — record owner approval for a stuck gate PR and re-run the gate-review check so it clears. |
180
180
 
181
- ## `github` (2)
181
+ ## `github` (4)
182
182
 
183
183
  | Method | Path | Rank | Body | Description |
184
184
  |---|---|---|---|---|
185
+ | GET | `/api/bongos/github/repo` | `any-builder` | — | reads one repo AS the caller's own GitHub credential sees it (the manage page's repo-visibility read, task 1003045). |
186
+ | POST | `/api/bongos/github/repo/visibility` | `any-builder` | `repo`, `visibility` | flips one of the caller's repos PUBLIC, with their own credential. |
185
187
  | GET | `/api/bongos/github/repos` | `any-builder` | — | acts only on the caller's OWN GitHub identity (the token they granted). |
186
188
  | POST | `/api/bongos/github/repos` | `any-builder` | `name` | creates a repo in the caller's OWN account. |
187
189
 
@@ -380,7 +382,7 @@ Base path: `/api/bongos`. Ranks (enforced server-side, [ADR 0016](adr/<redacted>
380
382
  | GET | `/api/bongos/provisioning/health` | `public` | — | GET /provisioning/health — liveness + the core version this module mounted against. |
381
383
  | GET | `/api/bongos/provisioning/instances` | `any-builder` | — | GET /provisioning/instances — the caller's own instances + each open intent. |
382
384
  | POST | `/api/bongos/provisioning/instances` | `any-builder` | `slug`, `target_ref`, `hosting_shape`, `domain`, `no_address`, `tier`, `onboard_mode`, `type` | POST /provisioning/instances — request a new instance. |
383
- | GET | `/api/bongos/provisioning/instances/:id` | `any-builder` | — | GET /provisioning/instances/:id — read one of the caller's own instances. |
385
+ | GET | `/api/bongos/provisioning/instances/:id` | `any-builder` | — | GET /provisioning/instances/:id — read one instance (the manage page's read). |
384
386
  | POST | `/api/bongos/provisioning/instances/:id/domain` | `any-builder` | `domain` | POST /provisioning/instances/:id/domain — give the caller's OWN instance its address (task 1002692, gap 5: no path existed to add a domai… |
385
387
  | POST | `/api/bongos/provisioning/instances/:id/force-teardown` | `metic+archon` | — | POST /provisioning/instances/:id/force-teardown — Archon tears down ANY instance. |
386
388
  | POST | `/api/bongos/provisioning/instances/:id/github-app` | `any-builder` | `account` | POST /provisioning/instances/:id/github-app — mint a GitHub-App-Manifest onboarding link for the caller's OWN instance (task 2080, ADR 01… |
@@ -282,6 +282,10 @@ function createClient(opts = {}) {
282
282
  postGateApprovalsPrApprove: (args) => request("POST", "/gate-approvals/{pr}/approve", { hasBody: true }, args),
283
283
  },
284
284
  "github": {
285
+ // GET /github/repo — rank: any-builder — GET /github/repo
286
+ getGithubRepo: (args) => request("GET", "/github/repo", { hasBody: false }, args),
287
+ // POST /github/repo/visibility — rank: any-builder — POST /github/repo/visibility
288
+ postGithubRepoVisibility: (args) => request("POST", "/github/repo/visibility", { hasBody: true }, args),
285
289
  // GET /github/repos — rank: any-builder — GET /github/repos
286
290
  getGithubRepos: (args) => request("GET", "/github/repos", { hasBody: false }, args),
287
291
  // POST /github/repos — rank: any-builder — POST /github/repos
@@ -569,15 +569,25 @@ module.exports = function provisioningRoutes() {
569
569
  }
570
570
  });
571
571
 
572
- // GET /provisioning/instances/:id — read one of the caller's own instances.
573
- // rank: any authenticated builder (own resource). 404 when the id isn't the
574
- // caller's (own-scoped; does not leak another owner's instance existence).
572
+ // Own-scoped with an Archon override: an owner manages their own project; an
573
+ // Archon may act on any (fleet support). 404 for everyone else — no existence
574
+ // leak. Guards the per-id read (the manage page, task 1003041) and both
575
+ // settings routes (task 1003040).
576
+ function instanceAccessDenied(inst, builder) {
577
+ if (!inst) return true;
578
+ if (builder.rank === 'archon') return false;
579
+ return String(inst.owner_builder_id) !== String(builder.id);
580
+ }
581
+
582
+ // GET /provisioning/instances/:id — read one instance (the manage page's read).
583
+ // rank: any authenticated builder (own resource; archon may read any — task
584
+ // 1003041). 404 otherwise — does not leak another owner's instance existence.
575
585
  router.get('/provisioning/instances/:id', auth.requireBuilder, async (req, res) => {
576
586
  const id = parseId(req, res); // (req, res) — parseId sends 400 bad_id + returns null on failure
577
587
  if (!id) return;
578
588
  try {
579
589
  const inst = await provisioning.getInstanceById(pool, id);
580
- if (!inst || String(inst.owner_builder_id) !== String(req.builder.id)) {
590
+ if (instanceAccessDenied(inst, req.builder)) {
581
591
  return res.fail('instance_not_found', 404);
582
592
  }
583
593
  const open = await provisioning.getOpenIntent(pool, id);
@@ -594,14 +604,8 @@ module.exports = function provisioningRoutes() {
594
604
  // ── Per-project settings (task 1003040, goal 1000058) ─────────────────────
595
605
  // The foundation the manage-page wave hangs off: effective settings are the
596
606
  // DEFAULTS (today's behavior — public surfaces, apply-to-join) overlaid with
597
- // the instance's stored keys. Own-scoped with an Archon override: the owner
598
- // manages their own project; an Archon may act on any (fleet support). 404
599
- // for everyone else — no existence leak (the GET-by-id precedent).
600
- function settingsAccessDenied(inst, builder) {
601
- if (!inst) return true;
602
- if (builder.rank === 'archon') return false;
603
- return String(inst.owner_builder_id) !== String(builder.id);
604
- }
607
+ // the instance's stored keys. Access: instanceAccessDenied above (own-scoped,
608
+ // Archon override, 404 otherwise — no existence leak).
605
609
 
606
610
  // GET /provisioning/instances/:id/settings — read a project's effective
607
611
  // settings + the allowed values (so a form can render its choices).
@@ -611,7 +615,7 @@ module.exports = function provisioningRoutes() {
611
615
  if (!id) return;
612
616
  try {
613
617
  const inst = await provisioning.getInstanceById(pool, id);
614
- if (settingsAccessDenied(inst, req.builder)) return res.fail('instance_not_found', 404);
618
+ if (instanceAccessDenied(inst, req.builder)) return res.fail('instance_not_found', 404);
615
619
  res.json({ ok: true, settings: provisioning.effectiveSettings(inst), options: provisioning.SETTINGS_VOCAB });
616
620
  } catch (err) {
617
621
  console.error('[provisioning] GET /provisioning/instances/:id/settings', err);
@@ -640,7 +644,7 @@ module.exports = function provisioningRoutes() {
640
644
  }
641
645
  try {
642
646
  const inst = await provisioning.getInstanceById(pool, id);
643
- if (settingsAccessDenied(inst, req.builder)) return res.fail('instance_not_found', 404);
647
+ if (instanceAccessDenied(inst, req.builder)) return res.fail('instance_not_found', 404);
644
648
  const updated = await provisioning.updateInstanceSettings(pool, id, patch);
645
649
  await provisioning.recordEvent(pool, {
646
650
  instanceId: id, ownerBuilderId: inst.owner_builder_id, event: 'settings',
package/package-lock.json CHANGED
@@ -1,12 +1,12 @@
1
1
  {
2
2
  "name": "@bongos/core",
3
- "version": "1.19.209",
3
+ "version": "1.19.211",
4
4
  "lockfileVersion": 3,
5
5
  "requires": true,
6
6
  "packages": {
7
7
  "": {
8
8
  "name": "@bongos/core",
9
- "version": "1.19.209",
9
+ "version": "1.19.211",
10
10
  "license": "AGPL-3.0-or-later",
11
11
  "dependencies": {
12
12
  "express": "^4.21.2",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@bongos/core",
3
- "version": "1.19.209",
3
+ "version": "1.19.211",
4
4
  "description": "Cloud Bongos — the AI-first build platform core (GDS + platform surfaces + module system), installed as a versioned dependency (ADR 0108).",
5
5
  "license": "AGPL-3.0-or-later",
6
6
  "main": "src/platform-server.js",
@@ -299,8 +299,6 @@ h1{font-family:var(--font-display);font-weight:700;font-size:clamp(24px,3.4vw,32
299
299
  card is there for — and the ghosted .orb stays the graphic cue. */
300
300
  .proj.gone{border-color:color-mix(in srgb,var(--line) 55%,var(--bg-card));}
301
301
  .proj.gone .projName{color:var(--ink-soft);}
302
- /* click-to-manage landing glow: the sky's owned orb hands focus to this card */
303
- .proj.anchored{border-color:var(--accent);box-shadow:0 0 0 3px color-mix(in srgb,var(--accent) 30%,transparent);}
304
302
  .projBody{flex:1;min-width:0;}
305
303
  .projHead{display:flex;align-items:center;gap:12px;flex-wrap:wrap;}
306
304
  .projName{font-family:var(--font-display);font-weight:700;font-size:19px;letter-spacing:-0.3px;}
@@ -319,6 +317,11 @@ h1{font-family:var(--font-display);font-weight:700;font-size:clamp(24px,3.4vw,32
319
317
  .projMsg.ok{color:var(--ok);}
320
318
  .projMsg.err{color:var(--err);}
321
319
  .projMsg a{color:var(--link-ink);font-weight:700;text-decoration:none;}
320
+ /* the manage view (task 1003041): its back link, meta repo link and the
321
+ honest empty-state links speak the same link ink as every other surface */
322
+ .projMeta a{color:var(--link-ink);font-weight:700;text-decoration:none;}
323
+ .backRow a{color:var(--link-ink);font-weight:700;text-decoration:none;}
324
+ .empty p a{color:var(--link-ink);font-weight:700;text-decoration:none;}
322
325
  .projMsg a:hover{text-decoration:underline;}
323
326
  .projMsg details{margin-top:8px;}
324
327
  .projMsg summary{cursor:pointer;font-size:12.5px;font-weight:700;color:var(--ink-faint);}