@bongos/core 1.23.1 → 1.23.3

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/bongos/package-core.js",
5
- "core_version": "1.23.1",
6
- "core_contract": "1.23.1",
7
- "source_commit": "0d508b4325781d8f18af3c19307562f8645da4eb",
5
+ "core_version": "1.23.3",
6
+ "core_contract": "1.23.3",
7
+ "source_commit": "a0b45cd71b45f91da068da6eb3e6afef687897c6",
8
8
  "source_ref": "HEAD",
9
- "built_at": "2026-10-26T04:44:59.306Z",
9
+ "built_at": "2026-10-26T21:16:36.258Z",
10
10
  "redaction": {
11
11
  "model": "docs-redacted+functional-verbatim",
12
12
  "docs_redacted": 616,
13
13
  "agent_docs_stubbed": 29,
14
- "functional_verbatim": 3547,
14
+ "functional_verbatim": 3551,
15
15
  "rules": 3,
16
16
  "gate_literals": 3,
17
17
  "gate": "passed"
18
18
  },
19
- "file_count": 4193,
20
- "tree_sha256": "8e6ded4e4373594cfce4f50eece842671319dd157c1ee92efc32ee38695ab58f",
19
+ "file_count": 4197,
20
+ "tree_sha256": "929094e8d49dd75a5e74b18f58a1b869fc50dbc5df600af9e861981227cdb40c",
21
21
  "files": [
22
22
  {
23
23
  "path": ".claude/skills/ask-for-help/SKILL.md",
@@ -317,12 +317,12 @@
317
317
  {
318
318
  "path": "clients/bongos-client/README.md",
319
319
  "mode": "0000644",
320
- "sha256": "18f98f4bd88ad4ae7f4f6ad02dfb11e320382dab75e8005a692d7d6e6d715a22"
320
+ "sha256": "8537c645efe282dc1ee9a620b555ac6bbd8919eaf8747c1be84df7c99007a48a"
321
321
  },
322
322
  {
323
323
  "path": "clients/bongos-client/bongos-client.global.js",
324
324
  "mode": "0000644",
325
- "sha256": "e208fa1f1c1e63db794e415d5c7f51e4afc6e63b2d5a5f9c1a9d7c5d780b1815"
325
+ "sha256": "8554475255239e0e2a5c84f1287c09e93d54c4dab513248c13f243f5d21fda1d"
326
326
  },
327
327
  {
328
328
  "path": "clients/bongos-client/examples/hello-world.mjs",
@@ -332,17 +332,17 @@
332
332
  {
333
333
  "path": "clients/bongos-client/index.cjs",
334
334
  "mode": "0000644",
335
- "sha256": "13f7a3dda499a461f6901742377de291cf8028064478ae190ca1d9b612242748"
335
+ "sha256": "34b88b9a4038b95a62f4528a83aa5bfe25f504ab545417c8edeea2a2afbfef69"
336
336
  },
337
337
  {
338
338
  "path": "clients/bongos-client/index.d.ts",
339
339
  "mode": "0000644",
340
- "sha256": "5a1de1049b40fd96b76d30c2f04d531585d8641c40ac920ec229943abdfce4bd"
340
+ "sha256": "a30cb8c16c64fd7b3eba677268411c31b0c98df4a207d5a60745bca5235d8c15"
341
341
  },
342
342
  {
343
343
  "path": "clients/bongos-client/index.mjs",
344
344
  "mode": "0000644",
345
- "sha256": "56bc729ffbd649b03715b27abb6d7ffae6509990de1234dcd5e160b93166e133"
345
+ "sha256": "29badc2ef299498e66224b7ee031be479d10cfcacd8a752c3e06eb05f1d1e64e"
346
346
  },
347
347
  {
348
348
  "path": "clients/bongos-client/package.json",
@@ -2172,7 +2172,7 @@
2172
2172
  {
2173
2173
  "path": "docs/adr/0342-module-categories-are-eight-parents-with-approved-sub-categories.md",
2174
2174
  "mode": "0000644",
2175
- "sha256": "f847a769842c5c57a86ef8951e685da3b61474029b54b6620046713de7c6c93c"
2175
+ "sha256": "147fb9513dc05ad242c09162ac37ccd2cbb9457693170b3d0a4427d9d27bbb77"
2176
2176
  },
2177
2177
  {
2178
2178
  "path": "docs/adr/0343-a-module-score-is-a-security-gate-then-an-average-of-visible-parts.md",
@@ -2392,17 +2392,17 @@
2392
2392
  {
2393
2393
  "path": "docs/api-reference.md",
2394
2394
  "mode": "0000644",
2395
- "sha256": "8c12aef17ad99c34c4d4cddcbdcd26808a7db092b646be8ac92a22a392b4d984"
2395
+ "sha256": "fbad9b37dd44c344ef532638550d666cf94de9813c0df8d4f2e004e0b7f62582"
2396
2396
  },
2397
2397
  {
2398
2398
  "path": "docs/api/openapi.json",
2399
2399
  "mode": "0000644",
2400
- "sha256": "482952364793f2dc91ef709fdce1741b92bed62ced1a89ce43ae02d5e1a8acbb"
2400
+ "sha256": "10545c86dc834e1c0654ff6da45caecded2e547a00818b221e16c9e60c16b8b5"
2401
2401
  },
2402
2402
  {
2403
2403
  "path": "docs/architecture.md",
2404
2404
  "mode": "0000644",
2405
- "sha256": "6e7e0203b4fa5c25e9746d8a71f2fc15ce2070fa23f7944bd52f6755661c06d6"
2405
+ "sha256": "02e9d3d3fe5b69494f4294ee716ac605ce6090b20d48bc4fb72ddead829d6701"
2406
2406
  },
2407
2407
  {
2408
2408
  "path": "docs/branding-contract.md",
@@ -2937,12 +2937,12 @@
2937
2937
  {
2938
2938
  "path": "docs/module-api-changelog.md",
2939
2939
  "mode": "0000644",
2940
- "sha256": "616c5eaf2a82c232848f5c61a81b9a9fe99971bd4397d4615b4a9b3dfd28b03d"
2940
+ "sha256": "298fea75cd1590bf6dbb3ad5baedf0ec6c81d2eb811cf59a3d138bd15144c021"
2941
2941
  },
2942
2942
  {
2943
2943
  "path": "docs/modules-contract.md",
2944
2944
  "mode": "0000644",
2945
- "sha256": "9f75271481d22854d944a73ea7b9d5572198e3278c035b3620e82c3c5fbee577"
2945
+ "sha256": "28cbf7f3d10bd67ef74880112746d182fac27a7659c52694c315b17efe5cb325"
2946
2946
  },
2947
2947
  {
2948
2948
  "path": "docs/onboarding/diagrams/01-task-lifecycle.mmd",
@@ -4189,6 +4189,11 @@
4189
4189
  "mode": "0000644",
4190
4190
  "sha256": "088b129b53a87454b574b2bc8b38c672e460fc618730a8bbf20a404aa970a682"
4191
4191
  },
4192
+ {
4193
+ "path": "migrations/core_280_store_subcategories.sql",
4194
+ "mode": "0000644",
4195
+ "sha256": "b795f6a5596ebd12a0fbcf8d98f40b24e12fb819ec5abe5d42ca592147db32bc"
4196
+ },
4192
4197
  {
4193
4198
  "path": "modules/agents/CLAUDE.md",
4194
4199
  "mode": "0000644",
@@ -5087,7 +5092,7 @@
5087
5092
  {
5088
5093
  "path": "modules/government/catalog.js",
5089
5094
  "mode": "0000644",
5090
- "sha256": "c3af1d48040b3bd8373eb623ef311e5b66e0675130672f44b8ced4a55686d6f9"
5095
+ "sha256": "9a3d3fee34144d44b5af811fc8e81e7bec74559eae538cf1e6015a2d54321df3"
5091
5096
  },
5092
5097
  {
5093
5098
  "path": "modules/government/charter.js",
@@ -5354,6 +5359,11 @@
5354
5359
  "mode": "0000644",
5355
5360
  "sha256": "e0c7dc39dabc43a32df40215c67f48acf25f2da0200ed7efe74242f652948dca"
5356
5361
  },
5362
+ {
5363
+ "path": "modules/government/migrations/government_034_module_subcategory_review.sql",
5364
+ "mode": "0000644",
5365
+ "sha256": "9dac59401fbb83f74c9a0e6f1f594bff9f2be667dbc3516b70a542e33b677241"
5366
+ },
5357
5367
  {
5358
5368
  "path": "modules/government/module.json",
5359
5369
  "mode": "0000644",
@@ -10822,12 +10832,12 @@
10822
10832
  {
10823
10833
  "path": "package-lock.json",
10824
10834
  "mode": "0000644",
10825
- "sha256": "e680995ae6ac5c976e99fa19ab0dd56b8b56de9b722583fb8fff1579e5a12c26"
10835
+ "sha256": "4a12dc099ad30270a9f2144f9f243b7183b968c6f9761736c2a10a4471ca08ee"
10826
10836
  },
10827
10837
  {
10828
10838
  "path": "package.json",
10829
10839
  "mode": "0000644",
10830
- "sha256": "ef3e77d8c2eafe7b3e741ff751a23b854640dd14fb1b1b8561041e0f774b24dc"
10840
+ "sha256": "975226f43368c946a43c0ae434ba6132e404175ba6b4960c45fb72b6d109e715"
10831
10841
  },
10832
10842
  {
10833
10843
  "path": "public-docs/index.html",
@@ -10847,7 +10857,7 @@
10847
10857
  {
10848
10858
  "path": "release-notes.json",
10849
10859
  "mode": "0000644",
10850
- "sha256": "fed9dfc00b9b4e03e7d398d48b72407d7e03006d7c7e8b4cc1ec6d364d7be35d"
10860
+ "sha256": "de9343583c3ac62144354a65b34a4a44bb4d9442c4abd1b77fafc16558c70f9c"
10851
10861
  },
10852
10862
  {
10853
10863
  "path": "scripts/bongos/CLAUDE.md",
@@ -14417,7 +14427,7 @@
14417
14427
  {
14418
14428
  "path": "src/bongos/module-listing.js",
14419
14429
  "mode": "0000644",
14420
- "sha256": "f0edc88d351578171d9b4e28fc4f54fb7a2fa3b3f75a2c4d9ca790d242fd902b"
14430
+ "sha256": "3f7013b4e59f72fc89663461d6d5457e412624ae3d4c1df1d2a3b9a8d9168d02"
14421
14431
  },
14422
14432
  {
14423
14433
  "path": "src/bongos/module-overrides.js",
@@ -14442,7 +14452,12 @@
14442
14452
  {
14443
14453
  "path": "src/bongos/module-store.js",
14444
14454
  "mode": "0000644",
14445
- "sha256": "60446713ba9693befb4c5367ba033eb64f3fbe0ffe4ca6a5fe080e1a9673d70a"
14455
+ "sha256": "1f7fc7251a2b77c80da33b471fcb5ff180bbbd969407a0c636e9085b654dc525"
14456
+ },
14457
+ {
14458
+ "path": "src/bongos/module-subcategories.js",
14459
+ "mode": "0000644",
14460
+ "sha256": "02c02d75c24c9cce5c724ff4af27b5de22edaf3df9dc99dc790fdd92133cee4b"
14446
14461
  },
14447
14462
  {
14448
14463
  "path": "src/bongos/module-submissions.js",
@@ -14522,7 +14537,7 @@
14522
14537
  {
14523
14538
  "path": "src/bongos/route-rank-check.js",
14524
14539
  "mode": "0000644",
14525
- "sha256": "505a6ba2f4e493078e1b24e5fcebfa42dddb6a5926fb5e86aed88d6e8f729f5d"
14540
+ "sha256": "249ff48a954c7e904d705e636766b92924203dae3a6c08f688cbc68d0734dcb4"
14526
14541
  },
14527
14542
  {
14528
14543
  "path": "src/bongos/routes.js",
@@ -14607,7 +14622,7 @@
14607
14622
  {
14608
14623
  "path": "src/bongos/routes/modules.js",
14609
14624
  "mode": "0000644",
14610
- "sha256": "74751f74d08ad4feb8a788e59382b2a11b11146e4a588bf6696ad4d4aefe3958"
14625
+ "sha256": "4a210c0d6fe7e5f29612c4b7616ed34c1805f69c7618062ebcc50d0586a320dc"
14611
14626
  },
14612
14627
  {
14613
14628
  "path": "src/bongos/routes/my-passkeys.js",
@@ -14697,7 +14712,7 @@
14697
14712
  {
14698
14713
  "path": "src/module-api.js",
14699
14714
  "mode": "0000644",
14700
- "sha256": "0d8326ea93d83814b2405d263386b53c0aa9e0f69f94f2e2840e965c47e83693"
14715
+ "sha256": "f87d7162b505fb241f2c33e6dfeaa86cb97d085c6f822384b2b7d923d4eadd1a"
14701
14716
  },
14702
14717
  {
14703
14718
  "path": "src/module-loader/catalog.js",
@@ -14717,7 +14732,7 @@
14717
14732
  {
14718
14733
  "path": "src/module-loader/manifest-schema.js",
14719
14734
  "mode": "0000644",
14720
- "sha256": "a0ecb41fc1b510d635b0b9407ed3953b81a48b39c665a17913ee07b9556e0fb4"
14735
+ "sha256": "8b5185ba1ac863232971a0241d925e21d1572e9dc2a1cff9bdc37025aa423835"
14721
14736
  },
14722
14737
  {
14723
14738
  "path": "src/module-loader/provenance.js",
@@ -16007,7 +16022,7 @@
16007
16022
  {
16008
16023
  "path": "tests/deploy_divergence_line.mjs",
16009
16024
  "mode": "0000644",
16010
- "sha256": "d9ffe06b3a75ebd31e45ff2faf3f7f88af0d878d592fa3461d8703b73b3cb190"
16025
+ "sha256": "ac3e754b29f10019b58f7b3995b9b145fd8ab25073c4dde3095793291fd72835"
16011
16026
  },
16012
16027
  {
16013
16028
  "path": "tests/deploy_instance.mjs",
@@ -18482,12 +18497,12 @@
18482
18497
  {
18483
18498
  "path": "tests/module_store_instance_root.mjs",
18484
18499
  "mode": "0000644",
18485
- "sha256": "aa66cdb054eeaef8c3c8babf5238f029d13b668a45a97230efe5f8cfa8908d48"
18500
+ "sha256": "fea6bafeeb548ac1b928a2843325dcae60a126ac8614116610cb979b69159f36"
18486
18501
  },
18487
18502
  {
18488
18503
  "path": "tests/module_store_listing.mjs",
18489
18504
  "mode": "0000644",
18490
- "sha256": "5ff78feca75178ee59114da484a6746e4aa13aa0d1e080f838f18548e5c6b3e6"
18505
+ "sha256": "5f0cb9cb6e3faf90d342e1d9e1767699b677b8630d874f1c2af9cb7f713ef530"
18491
18506
  },
18492
18507
  {
18493
18508
  "path": "tests/module_store_publish.mjs",
@@ -18509,6 +18524,11 @@
18509
18524
  "mode": "0000644",
18510
18525
  "sha256": "9ed254da26adabfa05a766d8e4dc7f69da9364ca477b19b88c3c76314b94937e"
18511
18526
  },
18527
+ {
18528
+ "path": "tests/module_store_subcategories.mjs",
18529
+ "mode": "0000644",
18530
+ "sha256": "ad29d45c767e14f0dcef7ccd44107545fa3ab54182ad8b0cf7b51bf00243eac5"
18531
+ },
18512
18532
  {
18513
18533
  "path": "tests/module_submissions.mjs",
18514
18534
  "mode": "0000644",
@@ -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
- - 578 operations across 76 resource groups
8
+ - 582 operations across 76 resource groups
9
9
 
10
10
  ## Use it from your project
11
11
 
@@ -1269,6 +1269,14 @@ function createClient(opts = {}) {
1269
1269
  getStoreModulesKeyVersionsVersionTarball: (args) => request("GET", "/store/modules/{key}/versions/{version}/tarball", { hasBody: false }, args),
1270
1270
  // GET /store/modules/latest — rank: any-builder — GET /store/modules/latest
1271
1271
  getStoreModulesLatest: (args) => request("GET", "/store/modules/latest", { hasBody: false }, args),
1272
+ // GET /store/subcategories — rank: any-builder — GET /store/subcategories
1273
+ getStoreSubcategories: (args) => request("GET", "/store/subcategories", { hasBody: false }, args),
1274
+ // POST /store/subcategories/{id}/approve — rank: metic+archon — POST /store/subcategories/:id/approve
1275
+ postStoreSubcategoriesIdApprove: (args) => request("POST", "/store/subcategories/{id}/approve", { hasBody: true }, args),
1276
+ // POST /store/subcategories/{id}/merge — rank: metic+archon — POST /store/subcategories/:id/merge
1277
+ postStoreSubcategoriesIdMerge: (args) => request("POST", "/store/subcategories/{id}/merge", { hasBody: true }, args),
1278
+ // GET /store/subcategories/queue — rank: metic+archon — GET /store/subcategories/queue
1279
+ getStoreSubcategoriesQueue: (args) => request("GET", "/store/subcategories/queue", { hasBody: false }, args),
1272
1280
  // GET /store/usage-reporting — rank: any-builder — GET /store/usage-reporting
1273
1281
  getStoreUsageReporting: (args) => request("GET", "/store/usage-reporting", { hasBody: false }, args),
1274
1282
  // POST /store/usage-reporting — rank: any-builder — POST /store/usage-reporting
@@ -1268,6 +1268,14 @@ function createClient(opts = {}) {
1268
1268
  getStoreModulesKeyVersionsVersionTarball: (args) => request("GET", "/store/modules/{key}/versions/{version}/tarball", { hasBody: false }, args),
1269
1269
  // GET /store/modules/latest — rank: any-builder — GET /store/modules/latest
1270
1270
  getStoreModulesLatest: (args) => request("GET", "/store/modules/latest", { hasBody: false }, args),
1271
+ // GET /store/subcategories — rank: any-builder — GET /store/subcategories
1272
+ getStoreSubcategories: (args) => request("GET", "/store/subcategories", { hasBody: false }, args),
1273
+ // POST /store/subcategories/{id}/approve — rank: metic+archon — POST /store/subcategories/:id/approve
1274
+ postStoreSubcategoriesIdApprove: (args) => request("POST", "/store/subcategories/{id}/approve", { hasBody: true }, args),
1275
+ // POST /store/subcategories/{id}/merge — rank: metic+archon — POST /store/subcategories/:id/merge
1276
+ postStoreSubcategoriesIdMerge: (args) => request("POST", "/store/subcategories/{id}/merge", { hasBody: true }, args),
1277
+ // GET /store/subcategories/queue — rank: metic+archon — GET /store/subcategories/queue
1278
+ getStoreSubcategoriesQueue: (args) => request("GET", "/store/subcategories/queue", { hasBody: false }, args),
1271
1279
  // GET /store/usage-reporting — rank: any-builder — GET /store/usage-reporting
1272
1280
  getStoreUsageReporting: (args) => request("GET", "/store/usage-reporting", { hasBody: false }, args),
1273
1281
  // POST /store/usage-reporting — rank: any-builder — POST /store/usage-reporting
@@ -562,13 +562,15 @@ export interface PostStoreModulesKeyAcquiredRequest { version: string }
562
562
  export interface PostStoreModulesKeyAcquiredResponse { ok: boolean; entitlement: unknown }
563
563
  export interface PostStoreModulesKeyDelistRequest { reason?: string }
564
564
  export interface PostStoreModulesKeyDelistResponse { ok: boolean; module_key: unknown; status: unknown; delisted_at: unknown }
565
- export interface PostStoreModulesKeyVersionsResponse { ok: boolean; created_module: unknown; version: unknown; channel: unknown }
565
+ export interface PostStoreModulesKeyVersionsResponse { ok: boolean; created_module: unknown; version: unknown; channel: unknown; category: unknown }
566
566
  export interface PostStoreModulesKeyVersionsVersionErrorCountRequest { day: string; count: number }
567
567
  export interface PostStoreModulesKeyVersionsVersionInstallReportRequest { ok: boolean; error_code?: string }
568
568
  export interface PostStoreModulesKeyVersionsVersionReassessRequest { reason?: string }
569
569
  export interface PostStoreModulesKeyVersionsVersionReassessResponse { ok: boolean; queued: boolean; module_key: unknown; version: unknown; version_id: unknown }
570
570
  export interface PostStoreModulesKeyVersionsVersionReleaseRequest { reason?: string }
571
571
  export interface PostStoreModulesKeyVersionsVersionReleaseResponse { ok: boolean; module_key: unknown; version: unknown; channel: unknown; reason: unknown }
572
+ export interface PostStoreSubcategoriesIdApproveRequest { label?: string; sub_key?: string }
573
+ export interface PostStoreSubcategoriesIdMergeRequest { into?: unknown }
572
574
  export interface PostStoreUsageReportingRequest { enabled: boolean }
573
575
  export interface PostStoreUsageReportingResponse { ok: boolean; enabled: unknown }
574
576
  export interface PostTaskRecommendationsRequest { task_id: number; recommended_to: number; reason: string }
@@ -1824,6 +1826,14 @@ export interface BongosClient {
1824
1826
  getStoreModulesKeyVersionsVersionTarball(args?: RequestArgs): Promise<ApiResponse>;
1825
1827
  /** GET /store/modules/latest — rank: any-builder */
1826
1828
  getStoreModulesLatest(args?: RequestArgs): Promise<GetStoreModulesLatestResponse>;
1829
+ /** GET /store/subcategories — rank: any-builder */
1830
+ getStoreSubcategories(args?: RequestArgs): Promise<ApiResponse>;
1831
+ /** POST /store/subcategories/{id}/approve — rank: metic+archon */
1832
+ postStoreSubcategoriesIdApprove(args?: RequestArgs & { body?: PostStoreSubcategoriesIdApproveRequest }): Promise<ApiResponse>;
1833
+ /** POST /store/subcategories/{id}/merge — rank: metic+archon */
1834
+ postStoreSubcategoriesIdMerge(args?: RequestArgs & { body?: PostStoreSubcategoriesIdMergeRequest }): Promise<ApiResponse>;
1835
+ /** GET /store/subcategories/queue — rank: metic+archon */
1836
+ getStoreSubcategoriesQueue(args?: RequestArgs): Promise<ApiResponse>;
1827
1837
  /** GET /store/usage-reporting — rank: any-builder */
1828
1838
  getStoreUsageReporting(args?: RequestArgs): Promise<GetStoreUsageReportingResponse>;
1829
1839
  /** POST /store/usage-reporting — rank: any-builder */
@@ -1265,6 +1265,14 @@ export function createClient(opts = {}) {
1265
1265
  getStoreModulesKeyVersionsVersionTarball: (args) => request("GET", "/store/modules/{key}/versions/{version}/tarball", { hasBody: false }, args),
1266
1266
  // GET /store/modules/latest — rank: any-builder — GET /store/modules/latest
1267
1267
  getStoreModulesLatest: (args) => request("GET", "/store/modules/latest", { hasBody: false }, args),
1268
+ // GET /store/subcategories — rank: any-builder — GET /store/subcategories
1269
+ getStoreSubcategories: (args) => request("GET", "/store/subcategories", { hasBody: false }, args),
1270
+ // POST /store/subcategories/{id}/approve — rank: metic+archon — POST /store/subcategories/:id/approve
1271
+ postStoreSubcategoriesIdApprove: (args) => request("POST", "/store/subcategories/{id}/approve", { hasBody: true }, args),
1272
+ // POST /store/subcategories/{id}/merge — rank: metic+archon — POST /store/subcategories/:id/merge
1273
+ postStoreSubcategoriesIdMerge: (args) => request("POST", "/store/subcategories/{id}/merge", { hasBody: true }, args),
1274
+ // GET /store/subcategories/queue — rank: metic+archon — GET /store/subcategories/queue
1275
+ getStoreSubcategoriesQueue: (args) => request("GET", "/store/subcategories/queue", { hasBody: false }, args),
1268
1276
  // GET /store/usage-reporting — rank: any-builder — GET /store/usage-reporting
1269
1277
  getStoreUsageReporting: (args) => request("GET", "/store/usage-reporting", { hasBody: false }, args),
1270
1278
  // POST /store/usage-reporting — rank: any-builder — POST /store/usage-reporting
@@ -66,8 +66,10 @@ scarce.
66
66
  - **Task 1003784** (nested category in the manifest and both catalog surfaces) builds to this:
67
67
  `category: { parent, sub }`. `parent` is one of the eight keys, and `sub` is the key of an
68
68
  approved sub-category or absent while a proposal is pending.
69
- - **An approval queue** for proposed sub-categories is new work, not yet filed. It needs a
70
- Metic+ permission key and follows the same pattern as the score override (task 1003796).
69
+ - **An approval queue** for proposed sub-categories — built in task 1004355: `core_278`'s
70
+ `store_subcategories` + `store_module_categories`, the Metic+ atom
71
+ `module.subcategory.review` (`government_033`), and `/store/subcategories/*` (see
72
+ docs/modules-contract.md, "Getting listed").
71
73
  - **Core modules get categories too**, so the catalog is consistent. The table in D1 is their
72
74
  starting assignment.
73
75
  - **The cap (task 1003809)** counts listed modules per approved sub-category, never per parent.
@@ -24344,6 +24344,189 @@
24344
24344
  ]
24345
24345
  }
24346
24346
  },
24347
+ "/store/subcategories": {
24348
+ "get": {
24349
+ "operationId": "get_store_subcategories",
24350
+ "tags": [
24351
+ "store"
24352
+ ],
24353
+ "summary": "GET /store/subcategories",
24354
+ "description": "GET /api/bongos/store/subcategories — the approved sub-categories under each of the eight parents (task 1004355, ADR 0342 D3): what an author names in module.json's `category.sub`. A key not on this list is proposed at publish. rank: any-builder — public store metadata; nothing changed.\n\n**Rank:** `any-builder` — Any authenticated builder (row-level ownership enforced in-handler).",
24355
+ "x-rank": "any-builder",
24356
+ "x-source": "src/bongos/routes/modules.js",
24357
+ "responses": {
24358
+ "200": {
24359
+ "description": "Success."
24360
+ },
24361
+ "400": {
24362
+ "$ref": "#/components/responses/BadRequest"
24363
+ },
24364
+ "401": {
24365
+ "$ref": "#/components/responses/Unauthorized"
24366
+ },
24367
+ "403": {
24368
+ "$ref": "#/components/responses/Forbidden"
24369
+ }
24370
+ },
24371
+ "security": [
24372
+ {
24373
+ "builderSession": []
24374
+ }
24375
+ ]
24376
+ }
24377
+ },
24378
+ "/store/subcategories/queue": {
24379
+ "get": {
24380
+ "operationId": "get_store_subcategories_queue",
24381
+ "tags": [
24382
+ "store"
24383
+ ],
24384
+ "summary": "GET /store/subcategories/queue",
24385
+ "description": "GET /api/bongos/store/subcategories/queue — the proposals waiting on a Metic+ decision, oldest first, each with the modules that named it and the near-duplicate names beside it (\"Stripe\" next to \"Stripe payments\"), since stopping near-duplicates is the point of the queue (ADR 0342 D3).\n\n**Rank:** `metic+archon` — Metic or Archon rank (review/triage powers).\n\n**Permissions:** `module.subcategory.review` (all required).",
24386
+ "x-rank": "metic+archon",
24387
+ "x-source": "src/bongos/routes/modules.js",
24388
+ "x-permissions": [
24389
+ "module.subcategory.review"
24390
+ ],
24391
+ "responses": {
24392
+ "200": {
24393
+ "description": "Success."
24394
+ },
24395
+ "400": {
24396
+ "$ref": "#/components/responses/BadRequest"
24397
+ },
24398
+ "401": {
24399
+ "$ref": "#/components/responses/Unauthorized"
24400
+ },
24401
+ "403": {
24402
+ "$ref": "#/components/responses/Forbidden"
24403
+ }
24404
+ },
24405
+ "security": [
24406
+ {
24407
+ "builderSession": []
24408
+ }
24409
+ ]
24410
+ }
24411
+ },
24412
+ "/store/subcategories/{id}/approve": {
24413
+ "post": {
24414
+ "operationId": "post_store_subcategories_id_approve",
24415
+ "tags": [
24416
+ "store"
24417
+ ],
24418
+ "summary": "POST /store/subcategories/:id/approve",
24419
+ "description": "POST /api/bongos/store/subcategories/:id/approve { label?, sub_key? } — make a proposal live, optionally renamed first. A rename onto a key that already exists under the parent is refused with the merge to run instead.\n\n**Rank:** `metic+archon` — Metic or Archon rank (review/triage powers).\n\n**Permissions:** `module.subcategory.review` (all required).",
24420
+ "x-rank": "metic+archon",
24421
+ "x-source": "src/bongos/routes/modules.js",
24422
+ "x-permissions": [
24423
+ "module.subcategory.review"
24424
+ ],
24425
+ "parameters": [
24426
+ {
24427
+ "name": "id",
24428
+ "in": "path",
24429
+ "required": true,
24430
+ "schema": {
24431
+ "type": "string"
24432
+ },
24433
+ "description": "Path parameter `id`."
24434
+ }
24435
+ ],
24436
+ "requestBody": {
24437
+ "required": false,
24438
+ "content": {
24439
+ "application/json": {
24440
+ "schema": {
24441
+ "$ref": "#/components/schemas/PostStoreSubcategoriesIdApproveRequest"
24442
+ }
24443
+ }
24444
+ },
24445
+ "x-validated": true
24446
+ },
24447
+ "responses": {
24448
+ "200": {
24449
+ "description": "Success."
24450
+ },
24451
+ "400": {
24452
+ "$ref": "#/components/responses/ValidationFailed"
24453
+ },
24454
+ "401": {
24455
+ "$ref": "#/components/responses/Unauthorized"
24456
+ },
24457
+ "403": {
24458
+ "$ref": "#/components/responses/Forbidden"
24459
+ },
24460
+ "404": {
24461
+ "$ref": "#/components/responses/NotFound"
24462
+ }
24463
+ },
24464
+ "security": [
24465
+ {
24466
+ "builderSession": []
24467
+ }
24468
+ ]
24469
+ }
24470
+ },
24471
+ "/store/subcategories/{id}/merge": {
24472
+ "post": {
24473
+ "operationId": "post_store_subcategories_id_merge",
24474
+ "tags": [
24475
+ "store"
24476
+ ],
24477
+ "summary": "POST /store/subcategories/:id/merge",
24478
+ "description": "POST /api/bongos/store/subcategories/:id/merge { into } — fold a proposal (or an approved duplicate) into an approved sub-category. Every module under it moves to the target.\n\n**Rank:** `metic+archon` — Metic or Archon rank (review/triage powers).\n\n**Permissions:** `module.subcategory.review` (all required).",
24479
+ "x-rank": "metic+archon",
24480
+ "x-source": "src/bongos/routes/modules.js",
24481
+ "x-permissions": [
24482
+ "module.subcategory.review"
24483
+ ],
24484
+ "parameters": [
24485
+ {
24486
+ "name": "id",
24487
+ "in": "path",
24488
+ "required": true,
24489
+ "schema": {
24490
+ "type": "string"
24491
+ },
24492
+ "description": "Path parameter `id`."
24493
+ }
24494
+ ],
24495
+ "requestBody": {
24496
+ "required": false,
24497
+ "content": {
24498
+ "application/json": {
24499
+ "schema": {
24500
+ "$ref": "#/components/schemas/PostStoreSubcategoriesIdMergeRequest"
24501
+ }
24502
+ }
24503
+ },
24504
+ "x-validated": true
24505
+ },
24506
+ "responses": {
24507
+ "200": {
24508
+ "description": "Success."
24509
+ },
24510
+ "400": {
24511
+ "$ref": "#/components/responses/ValidationFailed"
24512
+ },
24513
+ "401": {
24514
+ "$ref": "#/components/responses/Unauthorized"
24515
+ },
24516
+ "403": {
24517
+ "$ref": "#/components/responses/Forbidden"
24518
+ },
24519
+ "404": {
24520
+ "$ref": "#/components/responses/NotFound"
24521
+ }
24522
+ },
24523
+ "security": [
24524
+ {
24525
+ "builderSession": []
24526
+ }
24527
+ ]
24528
+ }
24529
+ },
24347
24530
  "/store/usage-reporting": {
24348
24531
  "get": {
24349
24532
  "operationId": "get_store_usage_reporting",
@@ -35803,13 +35986,15 @@
35803
35986
  },
35804
35987
  "created_module": {},
35805
35988
  "version": {},
35806
- "channel": {}
35989
+ "channel": {},
35990
+ "category": {}
35807
35991
  },
35808
35992
  "required": [
35809
35993
  "ok",
35810
35994
  "created_module",
35811
35995
  "version",
35812
- "channel"
35996
+ "channel",
35997
+ "category"
35813
35998
  ]
35814
35999
  },
35815
36000
  "PostStoreModulesKeyVersionsVersionErrorCountRequest": {
@@ -35905,6 +36090,27 @@
35905
36090
  "reason"
35906
36091
  ]
35907
36092
  },
36093
+ "PostStoreSubcategoriesIdApproveRequest": {
36094
+ "type": "object",
36095
+ "properties": {
36096
+ "label": {
36097
+ "type": "string",
36098
+ "maxLength": 80
36099
+ },
36100
+ "sub_key": {
36101
+ "type": "string",
36102
+ "maxLength": 80
36103
+ }
36104
+ },
36105
+ "additionalProperties": false
36106
+ },
36107
+ "PostStoreSubcategoriesIdMergeRequest": {
36108
+ "type": "object",
36109
+ "properties": {
36110
+ "into": {}
36111
+ },
36112
+ "additionalProperties": false
36113
+ },
35908
36114
  "PostStoreUsageReportingRequest": {
35909
36115
  "type": "object",
35910
36116
  "properties": {
@@ -36980,8 +37186,8 @@
36980
37186
  "description": "A required dependency/feature is not configured or is temporarily down."
36981
37187
  }
36982
37188
  },
36983
- "x-endpoint-count": 578,
36984
- "x-schema-count": 622,
37189
+ "x-endpoint-count": 582,
37190
+ "x-schema-count": 624,
36985
37191
  "x-undocumented-bodies": 12,
36986
37192
  "x-response-schemas": 404,
36987
37193
  "x-generated-by": "scripts/bongos/gen-api-docs.js"
@@ -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. 578 endpoints across 98 route files.
5
+ > **Generated from the live route files** — the route file is authoritative. 582 endpoints across 98 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/0016-trust-boundary-server-enforced-permissions.md)): `public` < `any-builder` < `metic+archon` < `archon`.
@@ -863,7 +863,7 @@ Base path: `/api/bongos`. Ranks (enforced server-side, [ADR 0016](adr/0016-trust
863
863
  | GET | `/api/bongos/sso/pubkey` | `public` | — | GET /sso/pubkey — the hub's Ed25519 assertion-verification key (public). |
864
864
  | POST | `/api/bongos/sso/token` | `public` | `client_id`, `client_secret`, `code`, `redirect_uri` | POST /sso/token — server-to-server code redemption. |
865
865
 
866
- ## `store` (18)
866
+ ## `store` (22)
867
867
 
868
868
  | Method | Path | Rank | Body | Description |
869
869
  |---|---|---|---|---|
@@ -883,6 +883,10 @@ Base path: `/api/bongos`. Ranks (enforced server-side, [ADR 0016](adr/0016-trust
883
883
  | POST | `/api/bongos/store/modules/:key/versions/:version/release` | `metic+archon` | `reason` | POST /api/bongos/store/modules/:key/versions/:version/release — a Metic+ person releases a version the promotion gate HELD on tester (a t… |
884
884
  | GET | `/api/bongos/store/modules/:key/versions/:version/tarball` | `any-builder` | — | |
885
885
  | GET | `/api/bongos/store/modules/latest` | `any-builder` | — | The newest published version of each named module — what `bongos upgrade` compares an instance's installed store modules against to repor… |
886
+ | GET | `/api/bongos/store/subcategories` | `any-builder` | — | GET /api/bongos/store/subcategories — the approved sub-categories under each of the eight parents (task 1004355, ADR 0342 D3): what an au… |
887
+ | POST | `/api/bongos/store/subcategories/:id/approve` | `metic+archon` | `label`, `sub_key` | POST /api/bongos/store/subcategories/:id/approve { label?, sub_key? } — make a proposal live, optionally renamed first. |
888
+ | POST | `/api/bongos/store/subcategories/:id/merge` | `metic+archon` | `into` | POST /api/bongos/store/subcategories/:id/merge { into } — fold a proposal (or an approved duplicate) into an approved sub-category. |
889
+ | GET | `/api/bongos/store/subcategories/queue` | `metic+archon` | — | GET /api/bongos/store/subcategories/queue — the proposals waiting on a Metic+ decision, oldest first, each with the modules that named it… |
886
890
  | GET | `/api/bongos/store/usage-reporting` | `any-builder` | — | The caller's own reporting switch (Settings → Profile and privacy). |
887
891
  | POST | `/api/bongos/store/usage-reporting` | `any-builder` | `enabled` | |
888
892