@bongos/core 1.19.408 → 1.19.410

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 (32) hide show
  1. package/.bongos-core.json +50 -35
  2. package/clients/bongos-client/README.md +1 -1
  3. package/clients/bongos-client/bongos-client.global.js +4 -0
  4. package/clients/bongos-client/index.cjs +4 -0
  5. package/clients/bongos-client/index.d.ts +6 -1
  6. package/clients/bongos-client/index.mjs +4 -0
  7. package/docs/api/openapi.json +124 -4
  8. package/docs/api-reference.md +5 -3
  9. package/docs/copy-inventory.md +43 -36
  10. package/docs/copy-registry.json +122 -39
  11. package/migrations/core_229_goals_accepting_requests.sql +37 -0
  12. package/modules/dev-box/app/src/vendor/bongos-client.cjs +4 -0
  13. package/modules/hall-ui/public/goals-page.js +26 -2
  14. package/modules/hall-ui/public/goals-render.js +35 -0
  15. package/modules/lifecycle/db-goals.js +22 -1
  16. package/modules/lifecycle/db.js +4 -1
  17. package/modules/lifecycle/goal-edits.js +40 -0
  18. package/modules/lifecycle/routes/goal-route-authz.js +51 -1
  19. package/modules/lifecycle/routes/goals.js +46 -1
  20. package/modules/platform-identity/migrations/platform_identity_012_recent_ships.sql +40 -0
  21. package/modules/platform-identity/platform-identity.js +87 -6
  22. package/modules/platform-identity/routes/sso.js +10 -0
  23. package/modules/platform-identity/tests/platform-identity.mjs +7 -2
  24. package/package-lock.json +2 -2
  25. package/package.json +1 -1
  26. package/src/bongos/auth-admission.js +89 -8
  27. package/src/bongos/route-rank-check.js +6 -0
  28. package/src/bongos/routes/auth.js +21 -0
  29. package/src/module-api.js +5 -1
  30. package/tests/goal_membership_requests.mjs +154 -1
  31. package/tests/hub_recent_ships.mjs +373 -0
  32. package/tests/prose_edits.mjs +8 -4
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.408",
6
- "core_contract": "1.19.408",
7
- "source_commit": "71369601472c7ae483a6ea2424d88b78bcb65cbb",
5
+ "core_version": "1.19.410",
6
+ "core_contract": "1.19.410",
7
+ "source_commit": "0af744151717afb828e5870e8a17c7c52f5e2f77",
8
8
  "source_ref": "HEAD",
9
- "built_at": "2026-08-28T22:26:12.724Z",
9
+ "built_at": "2026-08-28T22:39:19.306Z",
10
10
  "redaction": {
11
11
  "model": "docs-redacted+functional-verbatim",
12
12
  "docs_redacted": 352,
13
13
  "agent_docs_stubbed": 23,
14
- "functional_verbatim": 1664,
14
+ "functional_verbatim": 1667,
15
15
  "rules": 3,
16
16
  "gate_literals": 3,
17
17
  "gate": "passed"
18
18
  },
19
- "file_count": 2039,
20
- "tree_sha256": "0ea6ef5d0535e0aa9795fcebfdc4a776e146222d66075daed31f9eee36c3b9a9",
19
+ "file_count": 2042,
20
+ "tree_sha256": "c539332813cb188cef63c5f00a3633e3806b219150b0eae2c48ea5179f5a2c0c",
21
21
  "files": [
22
22
  {
23
23
  "path": ".claude/skills/blocker-review/SKILL.md",
@@ -352,12 +352,12 @@
352
352
  {
353
353
  "path": "clients/bongos-client/README.md",
354
354
  "mode": "0000644",
355
- "sha256": "96114ae5652241ae3bbc07b4b80cf744080d64831afaf684c4f8ec9b6f0da251"
355
+ "sha256": "80d3bb0a3dc011b0c2b16558b20c1ea2adc3e5345418a8d08f13a7cd2ac5eb9a"
356
356
  },
357
357
  {
358
358
  "path": "clients/bongos-client/bongos-client.global.js",
359
359
  "mode": "0000644",
360
- "sha256": "01949893edb52a4f393c3535159bf5ff8b93c7fad28fe451425cee73ea2a81d2"
360
+ "sha256": "833fecb6824cb535eb990a8f3a516528c6d560eee856323f5d824afe5bcf7932"
361
361
  },
362
362
  {
363
363
  "path": "clients/bongos-client/examples/hello-world.mjs",
@@ -367,17 +367,17 @@
367
367
  {
368
368
  "path": "clients/bongos-client/index.cjs",
369
369
  "mode": "0000644",
370
- "sha256": "d20f616bddbd837754dcd8809b4db17d304e94aca5fd001d528b8b50d2358292"
370
+ "sha256": "bf528220a1990c760111ef291e6d6d6543b62440ab62c3962a8772e897218c69"
371
371
  },
372
372
  {
373
373
  "path": "clients/bongos-client/index.d.ts",
374
374
  "mode": "0000644",
375
- "sha256": "f695402b7bd5f2db12f1c2415f452a575312d41d7a0c7ea57750c50573941222"
375
+ "sha256": "dd6fa5d218cefbb27478836ce57a46eb3ca2b2d1639dbf7349240af75af5e65d"
376
376
  },
377
377
  {
378
378
  "path": "clients/bongos-client/index.mjs",
379
379
  "mode": "0000644",
380
- "sha256": "a08520e80ffa8e11dfedcb83873cd3ad369dd9dcca9c4cf101449f73691fe42c"
380
+ "sha256": "b07a09551c9af7e526aaf2416e5340b112f7b8b8ffc28c49afe252092a215f9c"
381
381
  },
382
382
  {
383
383
  "path": "clients/bongos-client/package.json",
@@ -1522,12 +1522,12 @@
1522
1522
  {
1523
1523
  "path": "docs/api-reference.md",
1524
1524
  "mode": "0000644",
1525
- "sha256": "7c92e8f6e3c000dfd7620542606973cf25ce022ef9e5bfe124a7ff4912bc91d6"
1525
+ "sha256": "10be85740e8432f8a1979fc356981f3542aa622f4d001de508e7c7f1c129b832"
1526
1526
  },
1527
1527
  {
1528
1528
  "path": "docs/api/openapi.json",
1529
1529
  "mode": "0000644",
1530
- "sha256": "2fde31533808aeee53406bbbf9ee5c5bbf77947b6b2619eecf2b5f7608e30b6b"
1530
+ "sha256": "cf98b9af848cd0afc56d713ff39e37840b63d4e1548aa184838514e5eec02a64"
1531
1531
  },
1532
1532
  {
1533
1533
  "path": "docs/architecture.md",
@@ -1552,12 +1552,12 @@
1552
1552
  {
1553
1553
  "path": "docs/copy-inventory.md",
1554
1554
  "mode": "0000644",
1555
- "sha256": "f31eb17c518b831422d5685d315378da4078a588b79fc4eeb90dece1db935752"
1555
+ "sha256": "9190ff246dbc8abad78c67e603417e0dc46016f32f45406ba5cdc7904d863658"
1556
1556
  },
1557
1557
  {
1558
1558
  "path": "docs/copy-registry.json",
1559
1559
  "mode": "0000644",
1560
- "sha256": "93010c69bf1a366941e7bb226cf25aee4134423fe9bc4a0da5c0e9ce3317342e"
1560
+ "sha256": "9b85ab135b2fc5078dc5ec3d633d84a7700bfd45a6717844ee3475d3602a2282"
1561
1561
  },
1562
1562
  {
1563
1563
  "path": "docs/design/apex-pass-2-direction.md",
@@ -2779,6 +2779,11 @@
2779
2779
  "mode": "0000644",
2780
2780
  "sha256": "031f739e4e22e2bf9fa3480147f4b0f280d4ed8610d71d8d8a828a83b9cabca2"
2781
2781
  },
2782
+ {
2783
+ "path": "migrations/core_229_goals_accepting_requests.sql",
2784
+ "mode": "0000644",
2785
+ "sha256": "dd1f70a3414182ac1bfd6ff4a5bd4b18142d55e46d0e67eb708e334d5da6f393"
2786
+ },
2782
2787
  {
2783
2788
  "path": "modules/agents/migrations/agents_001_definitions.sql",
2784
2789
  "mode": "0000644",
@@ -3162,7 +3167,7 @@
3162
3167
  {
3163
3168
  "path": "modules/dev-box/app/src/vendor/bongos-client.cjs",
3164
3169
  "mode": "0000644",
3165
- "sha256": "d20f616bddbd837754dcd8809b4db17d304e94aca5fd001d528b8b50d2358292"
3170
+ "sha256": "bf528220a1990c760111ef291e6d6d6543b62440ab62c3962a8772e897218c69"
3166
3171
  },
3167
3172
  {
3168
3173
  "path": "modules/dev-box/app/test/unit.mjs",
@@ -3822,12 +3827,12 @@
3822
3827
  {
3823
3828
  "path": "modules/hall-ui/public/goals-page.js",
3824
3829
  "mode": "0000644",
3825
- "sha256": "968063dbbdbe060a855dde61d3e2db8ade8869f09ab1024dfb20582b1a15ceeb"
3830
+ "sha256": "3f401db6c8dbba4137f1c022e6abddacca6ccf20dfb3ba32eab590893b3e22e9"
3826
3831
  },
3827
3832
  {
3828
3833
  "path": "modules/hall-ui/public/goals-render.js",
3829
3834
  "mode": "0000644",
3830
- "sha256": "99c81d1ea257d64c312e0917379b4437ba9b645ae8ba74809a1a05a095280bba"
3835
+ "sha256": "709ce7ddbcd7b6964eefc251ef1941ed316002d22df7cba498cb47d187dd060f"
3831
3836
  },
3832
3837
  {
3833
3838
  "path": "modules/hall-ui/public/goals.css",
@@ -4297,7 +4302,7 @@
4297
4302
  {
4298
4303
  "path": "modules/lifecycle/db-goals.js",
4299
4304
  "mode": "0000644",
4300
- "sha256": "85a87c86496a9f022983a61e7f3642c8f0029c0b07467e27109095a6b98fce61"
4305
+ "sha256": "3ad7f78cbad987307d2203facbc91cec879565f398f9893a0218bbf29fc061bb"
4301
4306
  },
4302
4307
  {
4303
4308
  "path": "modules/lifecycle/db-grade.js",
@@ -4337,7 +4342,7 @@
4337
4342
  {
4338
4343
  "path": "modules/lifecycle/db.js",
4339
4344
  "mode": "0000644",
4340
- "sha256": "b7f0d36dc13ebad0206b94879262e661e6c2524539732f31e7cec25f61fd9fd6"
4345
+ "sha256": "1bcdab1b402f5222b7e05824fee64f3fbab895f3bd4f8ab17c1c0a5438353c53"
4341
4346
  },
4342
4347
  {
4343
4348
  "path": "modules/lifecycle/dead-deps.js",
@@ -4382,7 +4387,7 @@
4382
4387
  {
4383
4388
  "path": "modules/lifecycle/goal-edits.js",
4384
4389
  "mode": "0000644",
4385
- "sha256": "7115a27272fe2594b65e2e56a796f5bf97600cb94ba301bc21599c6bc4e60175"
4390
+ "sha256": "09ca2631bfa979f5948b6b669cfe478cc67db3d4e1fbacd4c6f2bbd5ce0ec618"
4386
4391
  },
4387
4392
  {
4388
4393
  "path": "modules/lifecycle/goal-rollup.js",
@@ -4492,12 +4497,12 @@
4492
4497
  {
4493
4498
  "path": "modules/lifecycle/routes/goal-route-authz.js",
4494
4499
  "mode": "0000644",
4495
- "sha256": "b796c445009803c3567ab1361ca33aed53c00044f7d8959fc72a2044231d15e7"
4500
+ "sha256": "be82985479547bd602dbad544b5e71a3c491cea3c7b0273394c136f1df675b37"
4496
4501
  },
4497
4502
  {
4498
4503
  "path": "modules/lifecycle/routes/goals.js",
4499
4504
  "mode": "0000644",
4500
- "sha256": "22c4d71ae825dc0601532d45c22d37bcd656cdd408ec2fc3e8e668a916541687"
4505
+ "sha256": "4b24b165d99f165c8407ee403b7abc898c842afc48137695add01fff694ca17b"
4501
4506
  },
4502
4507
  {
4503
4508
  "path": "modules/lifecycle/routes/help-requests.js",
@@ -4759,6 +4764,11 @@
4759
4764
  "mode": "0000644",
4760
4765
  "sha256": "48941621e5230a23785b832fa840e0c7f7b47f3dd1b01f7d254157482c4e3e6a"
4761
4766
  },
4767
+ {
4768
+ "path": "modules/platform-identity/migrations/platform_identity_012_recent_ships.sql",
4769
+ "mode": "0000644",
4770
+ "sha256": "297c6a01f7de133dd9b97daa082ed64465c32349d90ef6ddc6cbfacfac034da3"
4771
+ },
4762
4772
  {
4763
4773
  "path": "modules/platform-identity/module.json",
4764
4774
  "mode": "0000644",
@@ -4767,7 +4777,7 @@
4767
4777
  {
4768
4778
  "path": "modules/platform-identity/platform-identity.js",
4769
4779
  "mode": "0000644",
4770
- "sha256": "65edb9332915171309305bf610bdc2834a57913a1776cb5a9566a082115f82cd"
4780
+ "sha256": "ca7996877566727335979bf55fc6157ae130be9c54cdbf0210d3b906a3ac5f53"
4771
4781
  },
4772
4782
  {
4773
4783
  "path": "modules/platform-identity/pollers/code-sweep.js",
@@ -4807,12 +4817,12 @@
4807
4817
  {
4808
4818
  "path": "modules/platform-identity/routes/sso.js",
4809
4819
  "mode": "0000644",
4810
- "sha256": "68f2b69706f30de35c94749e8733a00da2737ecad37e93ea4965c7a45a6d7e5b"
4820
+ "sha256": "70e4d1d35964603ac40b459b9cb40a480bb9ec6aeb4cb6c0e93368fcc514f2dd"
4811
4821
  },
4812
4822
  {
4813
4823
  "path": "modules/platform-identity/tests/platform-identity.mjs",
4814
4824
  "mode": "0000644",
4815
- "sha256": "aeb251b84ee3c5cc789a540280bd8ecef0358d9384aac7e833dbe544b8008a54"
4825
+ "sha256": "5f1f05910d01d4a83e2134149311a9333aef8d93561cb37bcee1566fb2cfc1c7"
4816
4826
  },
4817
4827
  {
4818
4828
  "path": "modules/platform-identity/ui/.gitkeep",
@@ -5347,12 +5357,12 @@
5347
5357
  {
5348
5358
  "path": "package-lock.json",
5349
5359
  "mode": "0000644",
5350
- "sha256": "63b7f6feace1305778d1fa21b32d2d33ae1ee88aebf183bedaf9f9679534ea0f"
5360
+ "sha256": "82095eda38d2b9f3c87a291abd6fd0f8fadec30d215b6745d396e546ebc82f87"
5351
5361
  },
5352
5362
  {
5353
5363
  "path": "package.json",
5354
5364
  "mode": "0000644",
5355
- "sha256": "b1a7bc13880d04b8cd9826e67923adf4c17401981de557fdbb65d514b5d80610"
5365
+ "sha256": "c210dfbd1a63b82e3b3f5ef826a029fe363b9bac63dfe428b13b851e6e6e44eb"
5356
5366
  },
5357
5367
  {
5358
5368
  "path": "public-docs/index.html",
@@ -7092,7 +7102,7 @@
7092
7102
  {
7093
7103
  "path": "src/bongos/auth-admission.js",
7094
7104
  "mode": "0000644",
7095
- "sha256": "9978b10e2e675b6f7c1211dd74c8cf302395b2f47062eba5df376203ee77d341"
7105
+ "sha256": "46dc4adc21f138b4d9fdfe06c85f71d591a81357050d48d72b6272ba86a09d3b"
7096
7106
  },
7097
7107
  {
7098
7108
  "path": "src/bongos/auth-config.js",
@@ -7232,7 +7242,7 @@
7232
7242
  {
7233
7243
  "path": "src/bongos/route-rank-check.js",
7234
7244
  "mode": "0000644",
7235
- "sha256": "b387d8af3a47e209139f40437c5cd855f58d4e37871869efb23069d575ddd041"
7245
+ "sha256": "ebdf0cb4cb521fbf5aa7809c39e89ad4f776e77b194c734042fae72226511674"
7236
7246
  },
7237
7247
  {
7238
7248
  "path": "src/bongos/routes.js",
@@ -7257,7 +7267,7 @@
7257
7267
  {
7258
7268
  "path": "src/bongos/routes/auth.js",
7259
7269
  "mode": "0000644",
7260
- "sha256": "d4dc490ccf82f56d66f4d17e64f514632171480f22175bfa682dea9eb0e2e44a"
7270
+ "sha256": "ba9fbc7fb9d210d850578b81dd54bbbe777634988107e8d5791b37acd0fffa0d"
7261
7271
  },
7262
7272
  {
7263
7273
  "path": "src/bongos/routes/backup.js",
@@ -7367,7 +7377,7 @@
7367
7377
  {
7368
7378
  "path": "src/module-api.js",
7369
7379
  "mode": "0000644",
7370
- "sha256": "83a93bb955f0dfbd5c509b0d3285d9bbec9eb582217778564aa3e70805fc9316"
7380
+ "sha256": "1f17103055d4b6493af1e3cc0ac40b6865a844dd3aac8736c45423400f7315b3"
7371
7381
  },
7372
7382
  {
7373
7383
  "path": "src/module-loader/catalog.js",
@@ -8377,7 +8387,7 @@
8377
8387
  {
8378
8388
  "path": "tests/goal_membership_requests.mjs",
8379
8389
  "mode": "0000644",
8380
- "sha256": "bd29e6910bc741ddf18b4592eeeaeac02b45fb1dd321527a8f44203cd78bff18"
8390
+ "sha256": "bb1bc68167bc599082aaf2b582d4907461bdf62fd0d8cf0b6a80cdff75e51449"
8381
8391
  },
8382
8392
  {
8383
8393
  "path": "tests/goal_names.mjs",
@@ -8749,6 +8759,11 @@
8749
8759
  "mode": "0000644",
8750
8760
  "sha256": "ea992d1ab2ddedc27aaa5348a397356bef91a4c1ad9b295eb1a0ed1c4fc707e9"
8751
8761
  },
8762
+ {
8763
+ "path": "tests/hub_recent_ships.mjs",
8764
+ "mode": "0000644",
8765
+ "sha256": "9eff8102b1fce3f98ae2cc0f0fb7a640c3e13fba0d89814c2da3565445487f9e"
8766
+ },
8752
8767
  {
8753
8768
  "path": "tests/idea_capture_grades.mjs",
8754
8769
  "mode": "0000644",
@@ -9392,7 +9407,7 @@
9392
9407
  {
9393
9408
  "path": "tests/prose_edits.mjs",
9394
9409
  "mode": "0000644",
9395
- "sha256": "d5918a7f47e989355e2b78083710736278c6d5f75c13ac8434d5ad6fac6a3d03"
9410
+ "sha256": "a613b7cfa675db5231c44319146333d173d2dfa53da092654d5bd11a141483f4"
9396
9411
  },
9397
9412
  {
9398
9413
  "path": "tests/provision.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
- - 325 operations across 52 resource groups
8
+ - 327 operations across 52 resource groups
9
9
 
10
10
  ## Install
11
11
 
@@ -325,6 +325,8 @@ function createClient(opts = {}) {
325
325
  getGoalsId: (args) => request("GET", "/goals/{id}", { hasBody: false }, args),
326
326
  // PATCH /goals/{id} — rank: any-builder — PATCH /goals/:id
327
327
  patchGoalsId: (args) => request("PATCH", "/goals/{id}", { hasBody: true }, args),
328
+ // PATCH /goals/{id}/accepting-requests — rank: any-builder — PATCH /goals/:id/accepting-requests
329
+ patchGoalsIdAcceptingRequests: (args) => request("PATCH", "/goals/{id}/accepting-requests", { hasBody: true }, args),
328
330
  // POST /goals/{id}/archive — rank: metic+archon — POST /goals/:id/archive
329
331
  postGoalsIdArchive: (args) => request("POST", "/goals/{id}/archive", { hasBody: true }, args),
330
332
  // PATCH /goals/{id}/category — rank: any-builder — PATCH /goals/:id/category
@@ -335,6 +337,8 @@ function createClient(opts = {}) {
335
337
  postGoalsIdConflictsResolve: (args) => request("POST", "/goals/{id}/conflicts/resolve", { hasBody: true }, args),
336
338
  // POST /goals/{id}/invitations — rank: any-builder — POST /goals/:id/invitations
337
339
  postGoalsIdInvitations: (args) => request("POST", "/goals/{id}/invitations", { hasBody: true }, args),
340
+ // POST /goals/{id}/invitations/{reqId}/rescind — rank: any-builder — POST /goals/:id/invitations/:reqId/rescind
341
+ postGoalsIdInvitationsReqIdRescind: (args) => request("POST", "/goals/{id}/invitations/{reqId}/rescind", { hasBody: true }, args),
338
342
  // POST /goals/{id}/invitations/{reqId}/respond — rank: any-builder — POST /goals/:id/invitations/:reqId/respond
339
343
  postGoalsIdInvitationsReqIdRespond: (args) => request("POST", "/goals/{id}/invitations/{reqId}/respond", { hasBody: true }, args),
340
344
  // POST /goals/{id}/join — rank: any-builder — POST /goals/:id/join
@@ -324,6 +324,8 @@ function createClient(opts = {}) {
324
324
  getGoalsId: (args) => request("GET", "/goals/{id}", { hasBody: false }, args),
325
325
  // PATCH /goals/{id} — rank: any-builder — PATCH /goals/:id
326
326
  patchGoalsId: (args) => request("PATCH", "/goals/{id}", { hasBody: true }, args),
327
+ // PATCH /goals/{id}/accepting-requests — rank: any-builder — PATCH /goals/:id/accepting-requests
328
+ patchGoalsIdAcceptingRequests: (args) => request("PATCH", "/goals/{id}/accepting-requests", { hasBody: true }, args),
327
329
  // POST /goals/{id}/archive — rank: metic+archon — POST /goals/:id/archive
328
330
  postGoalsIdArchive: (args) => request("POST", "/goals/{id}/archive", { hasBody: true }, args),
329
331
  // PATCH /goals/{id}/category — rank: any-builder — PATCH /goals/:id/category
@@ -334,6 +336,8 @@ function createClient(opts = {}) {
334
336
  postGoalsIdConflictsResolve: (args) => request("POST", "/goals/{id}/conflicts/resolve", { hasBody: true }, args),
335
337
  // POST /goals/{id}/invitations — rank: any-builder — POST /goals/:id/invitations
336
338
  postGoalsIdInvitations: (args) => request("POST", "/goals/{id}/invitations", { hasBody: true }, args),
339
+ // POST /goals/{id}/invitations/{reqId}/rescind — rank: any-builder — POST /goals/:id/invitations/:reqId/rescind
340
+ postGoalsIdInvitationsReqIdRescind: (args) => request("POST", "/goals/{id}/invitations/{reqId}/rescind", { hasBody: true }, args),
337
341
  // POST /goals/{id}/invitations/{reqId}/respond — rank: any-builder — POST /goals/:id/invitations/:reqId/respond
338
342
  postGoalsIdInvitationsReqIdRespond: (args) => request("POST", "/goals/{id}/invitations/{reqId}/respond", { hasBody: true }, args),
339
343
  // POST /goals/{id}/join — rank: any-builder — POST /goals/:id/join
@@ -234,6 +234,7 @@ export interface PostGithubReposResponse { repo: unknown }
234
234
  export interface PostGoalsIdArchiveResponse { ok: boolean; goal: unknown }
235
235
  export interface PostGoalsIdConflictsResolveRequest { action: string; note?: string; touches?: string[]; first_task_id?: StringifiableId; then_task_id?: StringifiableId; task_id?: StringifiableId }
236
236
  export interface PostGoalsIdConflictsResolveResponse { ok: boolean; action: unknown; first_task_id?: unknown; then_task_id?: unknown; dependencies?: unknown; claim?: unknown; task_id?: unknown; touches?: unknown; requires_rank?: unknown }
237
+ export interface PostGoalsIdInvitationsReqIdRescindResponse { ok: boolean; request: unknown }
237
238
  export interface PostGoalsIdInvitationsReqIdRespondRequest { action: string }
238
239
  export interface PostGoalsIdInvitationsReqIdRespondResponse { ok: boolean; action: unknown; request: unknown; member?: unknown }
239
240
  export interface PostGoalsIdInvitationsRequest { note?: string; builder_id?: StringifiableId }
@@ -324,7 +325,7 @@ export interface PostSecurityScansResponse { ok: boolean; scan: unknown }
324
325
  export interface PostSessionOptimizeRequest { mode?: string; time_budget_min?: unknown; max_parallel?: unknown }
325
326
  export interface PostSessionsRequest { session_id: string; task_ids?: number[]; total_tokens?: number; duration_seconds?: number; started_at?: string; ended_at?: string; detail?: unknown[]; metrics?: Record<string, unknown>; model_usage?: Record<string, unknown> }
326
327
  export interface PostSessionsResponse { skipped?: boolean; reason?: unknown; session?: unknown; token_reward?: unknown }
327
- export interface PostSsoActivityRollupRequest { client_id: string; client_secret: string; github_id: StringifiableId; credits?: number; tasks_shipped?: number; karma?: number; rank?: string; disciplines?: unknown }
328
+ export interface PostSsoActivityRollupRequest { client_id: string; client_secret: string; github_id: StringifiableId; credits?: number; tasks_shipped?: number; karma?: number; rank?: string; disciplines?: unknown; recent_ships?: unknown }
328
329
  export interface PostSsoActivityRollupResponse { ok: boolean }
329
330
  export interface PostSsoDevicePollRequest { device_code: string }
330
331
  export interface PostSsoDeviceStartRequest { origin: string }
@@ -618,6 +619,8 @@ export interface BongosClient {
618
619
  getGoalsId(args?: RequestArgs): Promise<GetGoalsIdResponse>;
619
620
  /** PATCH /goals/{id} — rank: any-builder */
620
621
  patchGoalsId(args?: RequestArgs): Promise<ApiResponse>;
622
+ /** PATCH /goals/{id}/accepting-requests — rank: any-builder */
623
+ patchGoalsIdAcceptingRequests(args?: RequestArgs): Promise<ApiResponse>;
621
624
  /** POST /goals/{id}/archive — rank: metic+archon */
622
625
  postGoalsIdArchive(args?: RequestArgs): Promise<PostGoalsIdArchiveResponse>;
623
626
  /** PATCH /goals/{id}/category — rank: any-builder */
@@ -628,6 +631,8 @@ export interface BongosClient {
628
631
  postGoalsIdConflictsResolve(args: RequestArgs & { body: PostGoalsIdConflictsResolveRequest }): Promise<PostGoalsIdConflictsResolveResponse>;
629
632
  /** POST /goals/{id}/invitations — rank: any-builder */
630
633
  postGoalsIdInvitations(args?: RequestArgs & { body?: PostGoalsIdInvitationsRequest }): Promise<PostGoalsIdInvitationsResponse>;
634
+ /** POST /goals/{id}/invitations/{reqId}/rescind — rank: any-builder */
635
+ postGoalsIdInvitationsReqIdRescind(args?: RequestArgs): Promise<PostGoalsIdInvitationsReqIdRescindResponse>;
631
636
  /** POST /goals/{id}/invitations/{reqId}/respond — rank: any-builder */
632
637
  postGoalsIdInvitationsReqIdRespond(args: RequestArgs & { body: PostGoalsIdInvitationsReqIdRespondRequest }): Promise<PostGoalsIdInvitationsReqIdRespondResponse>;
633
638
  /** POST /goals/{id}/join — rank: any-builder */
@@ -321,6 +321,8 @@ export function createClient(opts = {}) {
321
321
  getGoalsId: (args) => request("GET", "/goals/{id}", { hasBody: false }, args),
322
322
  // PATCH /goals/{id} — rank: any-builder — PATCH /goals/:id
323
323
  patchGoalsId: (args) => request("PATCH", "/goals/{id}", { hasBody: true }, args),
324
+ // PATCH /goals/{id}/accepting-requests — rank: any-builder — PATCH /goals/:id/accepting-requests
325
+ patchGoalsIdAcceptingRequests: (args) => request("PATCH", "/goals/{id}/accepting-requests", { hasBody: true }, args),
324
326
  // POST /goals/{id}/archive — rank: metic+archon — POST /goals/:id/archive
325
327
  postGoalsIdArchive: (args) => request("POST", "/goals/{id}/archive", { hasBody: true }, args),
326
328
  // PATCH /goals/{id}/category — rank: any-builder — PATCH /goals/:id/category
@@ -331,6 +333,8 @@ export function createClient(opts = {}) {
331
333
  postGoalsIdConflictsResolve: (args) => request("POST", "/goals/{id}/conflicts/resolve", { hasBody: true }, args),
332
334
  // POST /goals/{id}/invitations — rank: any-builder — POST /goals/:id/invitations
333
335
  postGoalsIdInvitations: (args) => request("POST", "/goals/{id}/invitations", { hasBody: true }, args),
336
+ // POST /goals/{id}/invitations/{reqId}/rescind — rank: any-builder — POST /goals/:id/invitations/:reqId/rescind
337
+ postGoalsIdInvitationsReqIdRescind: (args) => request("POST", "/goals/{id}/invitations/{reqId}/rescind", { hasBody: true }, args),
334
338
  // POST /goals/{id}/invitations/{reqId}/respond — rank: any-builder — POST /goals/:id/invitations/:reqId/respond
335
339
  postGoalsIdInvitationsReqIdRespond: (args) => request("POST", "/goals/{id}/invitations/{reqId}/respond", { hasBody: true }, args),
336
340
  // POST /goals/{id}/join — rank: any-builder — POST /goals/:id/join
@@ -4644,6 +4644,51 @@
4644
4644
  ]
4645
4645
  }
4646
4646
  },
4647
+ "/goals/{id}/accepting-requests": {
4648
+ "patch": {
4649
+ "operationId": "patch_goals_id_accepting_requests",
4650
+ "tags": [
4651
+ "goals"
4652
+ ],
4653
+ "summary": "PATCH /goals/:id/accepting-requests",
4654
+ "description": "PATCH /goals/:id/accepting-requests { accepting_requests } — a private goal's lead closes or re-opens it to join-requests (task 1002971, spec D6). Closed refuses new asks with honest copy; INVITATIONS ARE UNAFFECTED, so a lead can still reach out. Handler in goal-edits.js beside the visibility toggle (the same gate, the same kind of write); only the registration lives here so route-rank-check still classifies it. rank: any-builder (requireBuilder) + the in-handler owner|manager|Archon gate.\n\n**Rank:** `any-builder` — Any authenticated builder (row-level ownership enforced in-handler).",
4655
+ "x-rank": "any-builder",
4656
+ "x-source": "modules/lifecycle/routes/goals.js",
4657
+ "parameters": [
4658
+ {
4659
+ "name": "id",
4660
+ "in": "path",
4661
+ "required": true,
4662
+ "schema": {
4663
+ "type": "string"
4664
+ },
4665
+ "description": "Path parameter `id`."
4666
+ }
4667
+ ],
4668
+ "responses": {
4669
+ "200": {
4670
+ "description": "Success."
4671
+ },
4672
+ "400": {
4673
+ "$ref": "#/components/responses/BadRequest"
4674
+ },
4675
+ "401": {
4676
+ "$ref": "#/components/responses/Unauthorized"
4677
+ },
4678
+ "403": {
4679
+ "$ref": "#/components/responses/Forbidden"
4680
+ },
4681
+ "404": {
4682
+ "$ref": "#/components/responses/NotFound"
4683
+ }
4684
+ },
4685
+ "security": [
4686
+ {
4687
+ "builderSession": []
4688
+ }
4689
+ ]
4690
+ }
4691
+ },
4647
4692
  "/goals/{id}/archive": {
4648
4693
  "post": {
4649
4694
  "operationId": "post_goals_id_archive",
@@ -4922,6 +4967,67 @@
4922
4967
  ]
4923
4968
  }
4924
4969
  },
4970
+ "/goals/{id}/invitations/{reqId}/rescind": {
4971
+ "post": {
4972
+ "operationId": "post_goals_id_invitations_reqId_rescind",
4973
+ "tags": [
4974
+ "goals"
4975
+ ],
4976
+ "summary": "POST /goals/:id/invitations/:reqId/rescind",
4977
+ "description": "POST /goals/:id/invitations/:reqId/rescind — an owner|manager|Archon takes back a PENDING invitation the goal sent (task 1002971): the manager-side mirror of the requester's withdraw, and the missing half of core_188's 'cancelled' state (\"withdrawn/rescinded by the opener\" — only the requester half existed). Sets status='cancelled', kept as the audit trail like a deny's 'rejected'; never touches a join-request row. rank: any-builder (requireBuilder) + the in-handler authorizeRescindInvitation.\n\n**Rank:** `any-builder` — Any authenticated builder (row-level ownership enforced in-handler).",
4978
+ "x-rank": "any-builder",
4979
+ "x-source": "modules/lifecycle/routes/goals.js",
4980
+ "parameters": [
4981
+ {
4982
+ "name": "id",
4983
+ "in": "path",
4984
+ "required": true,
4985
+ "schema": {
4986
+ "type": "string"
4987
+ },
4988
+ "description": "Path parameter `id`."
4989
+ },
4990
+ {
4991
+ "name": "reqId",
4992
+ "in": "path",
4993
+ "required": true,
4994
+ "schema": {
4995
+ "type": "string"
4996
+ },
4997
+ "description": "Path parameter `reqId`."
4998
+ }
4999
+ ],
5000
+ "responses": {
5001
+ "200": {
5002
+ "description": "Success.",
5003
+ "content": {
5004
+ "application/json": {
5005
+ "schema": {
5006
+ "$ref": "#/components/schemas/PostGoalsIdInvitationsReqIdRescindResponse"
5007
+ }
5008
+ }
5009
+ }
5010
+ },
5011
+ "400": {
5012
+ "$ref": "#/components/responses/BadRequest"
5013
+ },
5014
+ "401": {
5015
+ "$ref": "#/components/responses/Unauthorized"
5016
+ },
5017
+ "403": {
5018
+ "$ref": "#/components/responses/Forbidden"
5019
+ },
5020
+ "404": {
5021
+ "$ref": "#/components/responses/NotFound"
5022
+ }
5023
+ },
5024
+ "security": [
5025
+ {
5026
+ "builderSession": []
5027
+ }
5028
+ ]
5029
+ }
5030
+ },
4925
5031
  "/goals/{id}/invitations/{reqId}/respond": {
4926
5032
  "post": {
4927
5033
  "operationId": "post_goals_id_invitations_reqId_respond",
@@ -18032,6 +18138,19 @@
18032
18138
  "action"
18033
18139
  ]
18034
18140
  },
18141
+ "PostGoalsIdInvitationsReqIdRescindResponse": {
18142
+ "type": "object",
18143
+ "properties": {
18144
+ "ok": {
18145
+ "type": "boolean"
18146
+ },
18147
+ "request": {}
18148
+ },
18149
+ "required": [
18150
+ "ok",
18151
+ "request"
18152
+ ]
18153
+ },
18035
18154
  "PostGoalsIdInvitationsReqIdRespondRequest": {
18036
18155
  "type": "object",
18037
18156
  "properties": {
@@ -19660,7 +19779,8 @@
19660
19779
  "type": "string",
19661
19780
  "maxLength": 32
19662
19781
  },
19663
- "disciplines": {}
19782
+ "disciplines": {},
19783
+ "recent_ships": {}
19664
19784
  },
19665
19785
  "required": [
19666
19786
  "client_id",
@@ -20531,9 +20651,9 @@
20531
20651
  "description": "A required dependency/feature is not configured or is temporarily down."
20532
20652
  }
20533
20653
  },
20534
- "x-endpoint-count": 325,
20535
- "x-schema-count": 360,
20654
+ "x-endpoint-count": 327,
20655
+ "x-schema-count": 361,
20536
20656
  "x-undocumented-bodies": 9,
20537
- "x-response-schemas": 243,
20657
+ "x-response-schemas": 244,
20538
20658
  "x-generated-by": "scripts/gds/gen-api-docs.js"
20539
20659
  }
@@ -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. 325 endpoints across 52 route files.
5
+ > **Generated from the live route files** — the route file is authoritative. 327 endpoints across 52 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`.
@@ -207,7 +207,7 @@ Base path: `/api/bongos`. Ranks (enforced server-side, [ADR 0016](adr/<redacted>
207
207
  | GET | `/api/bongos/github/repos` | `any-builder` | — | acts only on the caller's OWN GitHub identity (the token they granted). |
208
208
  | POST | `/api/bongos/github/repos` | `any-builder` | `name` | creates a repo in the caller's OWN account. |
209
209
 
210
- ## `goals` (28)
210
+ ## `goals` (30)
211
211
 
212
212
  | Method | Path | Rank | Body | Description |
213
213
  |---|---|---|---|---|
@@ -215,11 +215,13 @@ Base path: `/api/bongos`. Ranks (enforced server-side, [ADR 0016](adr/<redacted>
215
215
  | POST | `/api/bongos/goals` | `metic+archon` | `version_id`, `title`, `subtitle`, `description`, `scope_modules`, `succeeds_goal_id`, `category_id` | POST /goals — create a goal. |
216
216
  | GET | `/api/bongos/goals/:id` | `any-builder` | — | GET /goals/:id — one goal with its members + linked criteria (read). |
217
217
  | PATCH | `/api/bongos/goals/:id` | `any-builder` | — | PATCH /goals/:id — correct a goal's own title/subtitle/description (tasks 1003102, 1003224). |
218
+ | PATCH | `/api/bongos/goals/:id/accepting-requests` | `any-builder` | — | PATCH /goals/:id/accepting-requests { accepting_requests } — a private goal's lead closes or re-opens it to join-requests (task 1002971, … |
218
219
  | POST | `/api/bongos/goals/:id/archive` | `metic+archon` | — | POST /goals/:id/archive — retire a goal (open\|achieved → archived). |
219
220
  | PATCH | `/api/bongos/goals/:id/category` | `any-builder` | — | PATCH /goals/:id/category — body { category_id } (null clears it). |
220
221
  | GET | `/api/bongos/goals/:id/conflicts` | `any-builder` | — | GET /goals/:id/conflicts — the server-side task-conflict view (task 1736). |
221
222
  | POST | `/api/bongos/goals/:id/conflicts/resolve` | `any-builder` | `action`, `note`, `touches`, `first_task_id`, `then_task_id`, `task_id` | POST /goals/:id/conflicts/resolve — the owner/manager resolution actions for a detected conflict (task 1736; authority model ADR 0106): s… |
222
223
  | POST | `/api/bongos/goals/:id/invitations` | `any-builder` | `note`, `builder_id` | POST /goals/:id/invitations { builder_id, note? } — an owner\|manager\|Archon invites a builder (task 1952). |
224
+ | POST | `/api/bongos/goals/:id/invitations/:reqId/rescind` | `any-builder` | — | POST /goals/:id/invitations/:reqId/rescind — an owner\|manager\|Archon takes back a PENDING invitation the goal sent (task 1002971): the ma… |
223
225
  | POST | `/api/bongos/goals/:id/invitations/:reqId/respond` | `any-builder` | `action` | POST /goals/:id/invitations/:reqId/respond { action: accept\|decline } — ONLY the invited builder resolves their OWN pending invite (task … |
224
226
  | POST | `/api/bongos/goals/:id/join` | `any-builder` | — | POST /goals/:id/join — join an open goal. |
225
227
  | POST | `/api/bongos/goals/:id/leave` | `any-builder` | — | POST /goals/:id/leave — leave a goal you're in. |
@@ -515,7 +517,7 @@ Base path: `/api/bongos`. Ranks (enforced server-side, [ADR 0016](adr/<redacted>
515
517
 
516
518
  | Method | Path | Rank | Body | Description |
517
519
  |---|---|---|---|---|
518
- | POST | `/api/bongos/sso/activity/rollup` | `public` | `client_id`, `client_secret`, `github_id`, `credits`, `tasks_shipped`, `karma`, `rank`, `disciplines` | POST /sso/activity/rollup — a federated instance reports a builder's activity snapshot (ADR 0141 §4). |
520
+ | POST | `/api/bongos/sso/activity/rollup` | `public` | `client_id`, `client_secret`, `github_id`, `credits`, `tasks_shipped`, `karma`, `rank`, `disciplines`, `recent_ships` | POST /sso/activity/rollup — a federated instance reports a builder's activity snapshot (ADR 0141 §4). |
519
521
  | GET | `/api/bongos/sso/authorize` | `public` | — | GET /sso/authorize?client_id=&redirect_uri=&state= — the browser authorize leg. |
520
522
  | POST | `/api/bongos/sso/device/poll` | `public` | `device_code` | POST /sso/device/poll — poll the hub device flow. |
521
523
  | POST | `/api/bongos/sso/device/start` | `public` | `origin` | POST /sso/device/start — begin CLI federation. |