@bongos/core 1.19.298 → 1.19.300

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.298",
6
- "core_contract": "1.19.298",
7
- "source_commit": "89c91526e13db0ef8a1fbc4091e6691df74f71fc",
5
+ "core_version": "1.19.300",
6
+ "core_contract": "1.19.300",
7
+ "source_commit": "975a9a5ecbd9e058cba42fd6b4ef791683457146",
8
8
  "source_ref": "HEAD",
9
- "built_at": "2026-08-22T20:51:27.946Z",
9
+ "built_at": "2026-08-22T22:07:30.654Z",
10
10
  "redaction": {
11
11
  "model": "docs-redacted+functional-verbatim",
12
12
  "docs_redacted": 322,
13
13
  "agent_docs_stubbed": 22,
14
- "functional_verbatim": 1401,
14
+ "functional_verbatim": 1409,
15
15
  "rules": 3,
16
16
  "gate_literals": 3,
17
17
  "gate": "passed"
18
18
  },
19
- "file_count": 1745,
20
- "tree_sha256": "885d55252052de946b48981a842f0b6230d156fbb900f77f02c2e1daf0e0d511",
19
+ "file_count": 1753,
20
+ "tree_sha256": "3d78ec8c3f4e7c717955de2fb6d45df88560cbd63e515b745f76aa56601b686d",
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": "6e44e5da05194cc5aae1784d591d5f560dc36527939eda359de794e3d29fdb37"
350
+ "sha256": "162edc8df3b6354b06337ad981f473ea798151002d6c2eda728b25c0545ea70c"
351
351
  },
352
352
  {
353
353
  "path": "clients/bongos-client/bongos-client.global.js",
354
354
  "mode": "0000644",
355
- "sha256": "b05f34f719999b987f9ea6dcecec7bed016a0486ffb43a2ba95fcabbbe7457db"
355
+ "sha256": "f8df65df7eaaccb15fe2a1aeda1c690e377cecc3617b408c4ff8a71f4c79edea"
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": "5fbf0ea8c5b9eba86cc1d471407d8f4bb1df23af72d4fe7a618576bf67233a14"
365
+ "sha256": "53dec4d0e2958ddb66fe794b74cdc0bb8823fa7d8a5da90a4c2dd731a1bb0e04"
366
366
  },
367
367
  {
368
368
  "path": "clients/bongos-client/index.d.ts",
369
369
  "mode": "0000644",
370
- "sha256": "db6c391a39f2caea99486c5f03993b0cc52e3506835d750a28a4a0b2108bb441"
370
+ "sha256": "85041b30fb2113ca5b3684ae961e67dc2bd5dfdb152064b151af3f0a93a29f31"
371
371
  },
372
372
  {
373
373
  "path": "clients/bongos-client/index.mjs",
374
374
  "mode": "0000644",
375
- "sha256": "5ef5dcc11f3713394c6a6225c4206ef8955b27b17c95a47fd51ca43b7965729f"
375
+ "sha256": "f01af61309e843cf15fc8b5c4cb01e8383927890ea1734d91a2ed490424d2d77"
376
376
  },
377
377
  {
378
378
  "path": "clients/bongos-client/package.json",
@@ -1417,12 +1417,12 @@
1417
1417
  {
1418
1418
  "path": "docs/api-reference.md",
1419
1419
  "mode": "0000644",
1420
- "sha256": "0c2b5d0fd5e05cbe3b3c06ab10baf7e6af0414d85599519e3ef2eb289008b672"
1420
+ "sha256": "d545aada2bc0127be904c5df12c393c3ab8756f84ef86cc7bcee1348074769f9"
1421
1421
  },
1422
1422
  {
1423
1423
  "path": "docs/api/openapi.json",
1424
1424
  "mode": "0000644",
1425
- "sha256": "f77f37d52d726cf7df447b7988416e5eca802cc2da0398ac1e6e1df212ba664e"
1425
+ "sha256": "828558b3bd6cc8d7c9c720eef962e098e4f886ab33360833b2c6d3946acbd1d1"
1426
1426
  },
1427
1427
  {
1428
1428
  "path": "docs/architecture.md",
@@ -1447,12 +1447,12 @@
1447
1447
  {
1448
1448
  "path": "docs/copy-inventory.md",
1449
1449
  "mode": "0000644",
1450
- "sha256": "8cb5bb088aae803e6889571712cc4439fc870c88e104b1bb81dbd5fd1f9b9bd3"
1450
+ "sha256": "b022ab5699be0a961df29b558ce88d499f0d303308169805a67e0428e90ba413"
1451
1451
  },
1452
1452
  {
1453
1453
  "path": "docs/copy-registry.json",
1454
1454
  "mode": "0000644",
1455
- "sha256": "18599cab2b3de43e33513c20cfaa241d3fe0545b861a27942d7f63d11f646750"
1455
+ "sha256": "1b35d6d68ab180bc952ee4693d44952811d2d4b8e4c22edbb0b55d08f339bd4c"
1456
1456
  },
1457
1457
  {
1458
1458
  "path": "docs/design-contract.md",
@@ -1557,7 +1557,7 @@
1557
1557
  {
1558
1558
  "path": "docs/file-map.md",
1559
1559
  "mode": "0000644",
1560
- "sha256": "b017e7a4425f92cc5cbec8d0a5fc192e3225794fb97955acb3689b12dc0de667"
1560
+ "sha256": "64e5a48bcbfe18cd396ad04d0bd631bb694d038c873858730ea0add6c84fbb3f"
1561
1561
  },
1562
1562
  {
1563
1563
  "path": "docs/handoff-template.md",
@@ -2812,7 +2812,7 @@
2812
2812
  {
2813
2813
  "path": "modules/dev-box/app/src/vendor/bongos-client.cjs",
2814
2814
  "mode": "0000644",
2815
- "sha256": "5fbf0ea8c5b9eba86cc1d471407d8f4bb1df23af72d4fe7a618576bf67233a14"
2815
+ "sha256": "53dec4d0e2958ddb66fe794b74cdc0bb8823fa7d8a5da90a4c2dd731a1bb0e04"
2816
2816
  },
2817
2817
  {
2818
2818
  "path": "modules/dev-box/app/test/unit.mjs",
@@ -3469,6 +3469,36 @@
3469
3469
  "mode": "0000644",
3470
3470
  "sha256": "7a102f4fd675910b0c80416c3ed05397d38f977e647fffb00c593732d05a3712"
3471
3471
  },
3472
+ {
3473
+ "path": "modules/hall-ui/public/idea.css",
3474
+ "mode": "0000644",
3475
+ "sha256": "5927a5a97951b448e8e22ccca694dfd49f31c143a662e962c94160f3d6e9a14a"
3476
+ },
3477
+ {
3478
+ "path": "modules/hall-ui/public/idea.html",
3479
+ "mode": "0000644",
3480
+ "sha256": "d4a5e69f13e8f7da480829fc0e76ec07657f691109ef30d5ae3455411d8129c3"
3481
+ },
3482
+ {
3483
+ "path": "modules/hall-ui/public/idea.js",
3484
+ "mode": "0000644",
3485
+ "sha256": "657b6d731bfdbe35a7e4137202ac00574a114550adfac6bdcedacd27eaa19a2f"
3486
+ },
3487
+ {
3488
+ "path": "modules/hall-ui/public/ideas.css",
3489
+ "mode": "0000644",
3490
+ "sha256": "ee6e640e9e23a7e724a3876171fe20ca9d758458f90bb443968f761d296500f1"
3491
+ },
3492
+ {
3493
+ "path": "modules/hall-ui/public/ideas.html",
3494
+ "mode": "0000644",
3495
+ "sha256": "ad1ef56e043b2c1a93996b93ff098c4ca9555cdcb063df6387ba1d2c92a825e1"
3496
+ },
3497
+ {
3498
+ "path": "modules/hall-ui/public/ideas.js",
3499
+ "mode": "0000644",
3500
+ "sha256": "34a9250d23c020e383f6c09688c1c781c12444b96cc4022ca3c1854de7cd9d62"
3501
+ },
3472
3502
  {
3473
3503
  "path": "modules/hall-ui/public/index.html",
3474
3504
  "mode": "0000644",
@@ -3637,7 +3667,7 @@
3637
3667
  {
3638
3668
  "path": "modules/hall-ui/public/shell.js",
3639
3669
  "mode": "0000644",
3640
- "sha256": "bfaa74784ee0578fe8e950f55585522a39c892c58f663330a3b724f34a8a0603"
3670
+ "sha256": "cc9fd3033b528ca2e5761054219653926341a6c10ee27ab10b42779cfc3b46a3"
3641
3671
  },
3642
3672
  {
3643
3673
  "path": "modules/hall-ui/public/style.css",
@@ -3647,7 +3677,7 @@
3647
3677
  {
3648
3678
  "path": "modules/hall-ui/public/task-detail.js",
3649
3679
  "mode": "0000644",
3650
- "sha256": "e2c0702ec2eaa2c2d63de4d181f6118295a28e743f0df52722e5e717c3e96b72"
3680
+ "sha256": "e549efef4a7453709830769b3f224811ee5f0a1342a362c05d5601df82e7e938"
3651
3681
  },
3652
3682
  {
3653
3683
  "path": "modules/hall-ui/public/task-lib.js",
@@ -3712,7 +3742,7 @@
3712
3742
  {
3713
3743
  "path": "modules/ideas/inbox.js",
3714
3744
  "mode": "0000644",
3715
- "sha256": "ceaa172a8e0338dd9202dae6abea8a5278594937bd980ddaf9ac2b2017b555a4"
3745
+ "sha256": "d862199e649f817cc95e95bb57a0a5d7262acac37d3315df1ec916b983547e0d"
3716
3746
  },
3717
3747
  {
3718
3748
  "path": "modules/ideas/migrations/ideas_001_grades.sql",
@@ -3752,7 +3782,7 @@
3752
3782
  {
3753
3783
  "path": "modules/ideas/routes/inbox.js",
3754
3784
  "mode": "0000644",
3755
- "sha256": "44e918d0fe82a22a986f66b33e1165c1f30d3e67b04cde9019a6c293d42f1f72"
3785
+ "sha256": "33a5eadf8400285304e3a1958f25ca104b67c7c5a8c1ac59698cff64b4c70589"
3756
3786
  },
3757
3787
  {
3758
3788
  "path": "modules/ideas/routing.js",
@@ -4547,12 +4577,12 @@
4547
4577
  {
4548
4578
  "path": "package-lock.json",
4549
4579
  "mode": "0000644",
4550
- "sha256": "56a2a9e3416c259a9ee31664dae5bb5509baa1410c40e6e6b0fceca4b3bff209"
4580
+ "sha256": "c5b34a1affd82a4fe7874592b8334feb00dbfb428b976657344b7e6644f52a34"
4551
4581
  },
4552
4582
  {
4553
4583
  "path": "package.json",
4554
4584
  "mode": "0000644",
4555
- "sha256": "b58f5b7eddb94b3ec917dfe1694957f1da4f7154c4ad655b4aed06bafaf033ac"
4585
+ "sha256": "cddc9c5e243d2e9823ee7db6e024f8fb1942f50fdb856dc18162acd0ef8dc7c0"
4556
4586
  },
4557
4587
  {
4558
4588
  "path": "public-docs/index.html",
@@ -6172,7 +6202,7 @@
6172
6202
  {
6173
6203
  "path": "src/bongos/serve-internal.js",
6174
6204
  "mode": "0000644",
6175
- "sha256": "2ce782b00c80482ef9b9d3e4a54a634e73c6d956e13e32cc7e3d2ff63e8282cd"
6205
+ "sha256": "d960192ab5e0f6880f94cd45e33c81e5913810a907d16fdec7f48d166240e267"
6176
6206
  },
6177
6207
  {
6178
6208
  "path": "src/bongos/stealth-gate.js",
@@ -6207,7 +6237,7 @@
6207
6237
  {
6208
6238
  "path": "src/module-api.js",
6209
6239
  "mode": "0000644",
6210
- "sha256": "3a94110af825d5235724b6d1552ae99b13f90f74ff9b8e82e4ada09885c8b3fd"
6240
+ "sha256": "daf3c045e9ceca117a15eaa668fac7fc92389ecb091f77173ca3cdf2bdeb2c59"
6211
6241
  },
6212
6242
  {
6213
6243
  "path": "src/module-loader/catalog.js",
@@ -7437,7 +7467,7 @@
7437
7467
  {
7438
7468
  "path": "tests/hall_nav.mjs",
7439
7469
  "mode": "0000644",
7440
- "sha256": "7ab365a19909a0a73b446339d5109f8f1f818dd6fdc49c8792a42bde5757e5ed"
7470
+ "sha256": "59de791cd5497e7d73e3d34841f5e816efe36bc34d1580f3e9afbae3055f2f5c"
7441
7471
  },
7442
7472
  {
7443
7473
  "path": "tests/hall_page_gate_map.mjs",
@@ -7499,6 +7529,11 @@
7499
7529
  "mode": "0000644",
7500
7530
  "sha256": "fd96eb0dd472810854d9e0a7ee29725764cf0c3f4ad502c57d6d4a324da25ef5"
7501
7531
  },
7532
+ {
7533
+ "path": "tests/idea_detail_page.mjs",
7534
+ "mode": "0000644",
7535
+ "sha256": "f1bd19f69e28ed1244f25b9722dc87dac9b04784cd3a7ffafb46e17d9623281c"
7536
+ },
7502
7537
  {
7503
7538
  "path": "tests/idea_develop_spark.mjs",
7504
7539
  "mode": "0000644",
@@ -7519,6 +7554,11 @@
7519
7554
  "mode": "0000644",
7520
7555
  "sha256": "07cacc97990f0e775342f8b30171c87128e0acb1abd38d64c683c3f257927ebd"
7521
7556
  },
7557
+ {
7558
+ "path": "tests/idea_hall_composer.mjs",
7559
+ "mode": "0000644",
7560
+ "sha256": "cf3071e8180dbb1bdacbafb7a1b40569691afe32b053db0f8de908a5726ca8fe"
7561
+ },
7522
7562
  {
7523
7563
  "path": "tests/idea_quick_guard.mjs",
7524
7564
  "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
- - 298 operations across 47 resource groups
8
+ - 300 operations across 47 resource groups
9
9
 
10
10
  ## Install
11
11
 
@@ -417,8 +417,12 @@ function createClient(opts = {}) {
417
417
  postInboxIdSpark: (args) => request("POST", "/inbox/{id}/spark", { hasBody: true }, args),
418
418
  // GET /inbox/awaiting-nod — rank: metic+archon — GET /inbox/awaiting-nod
419
419
  getInboxAwaitingNod: (args) => request("GET", "/inbox/awaiting-nod", { hasBody: false }, args),
420
+ // POST /inbox/score — rank: any-builder — POST /inbox/score
421
+ postInboxScore: (args) => request("POST", "/inbox/score", { hasBody: true }, args),
420
422
  // GET /inbox/sparks — rank: any-builder — GET /inbox/sparks
421
423
  getInboxSparks: (args) => request("GET", "/inbox/sparks", { hasBody: false }, args),
424
+ // GET /inbox/template — rank: any-builder — GET /inbox/template
425
+ getInboxTemplate: (args) => request("GET", "/inbox/template", { hasBody: false }, args),
422
426
  },
423
427
  "instance": {
424
428
  // GET /instance — rank: public — GET /instance
@@ -416,8 +416,12 @@ function createClient(opts = {}) {
416
416
  postInboxIdSpark: (args) => request("POST", "/inbox/{id}/spark", { hasBody: true }, args),
417
417
  // GET /inbox/awaiting-nod — rank: metic+archon — GET /inbox/awaiting-nod
418
418
  getInboxAwaitingNod: (args) => request("GET", "/inbox/awaiting-nod", { hasBody: false }, args),
419
+ // POST /inbox/score — rank: any-builder — POST /inbox/score
420
+ postInboxScore: (args) => request("POST", "/inbox/score", { hasBody: true }, args),
419
421
  // GET /inbox/sparks — rank: any-builder — GET /inbox/sparks
420
422
  getInboxSparks: (args) => request("GET", "/inbox/sparks", { hasBody: false }, args),
423
+ // GET /inbox/template — rank: any-builder — GET /inbox/template
424
+ getInboxTemplate: (args) => request("GET", "/inbox/template", { hasBody: false }, args),
421
425
  },
422
426
  "instance": {
423
427
  // GET /instance — rank: public — GET /instance
@@ -51,6 +51,7 @@ export interface GetInboxAwaitingNodResponse { awaiting: unknown; count: unknown
51
51
  export interface GetInboxIdResponse { idea: unknown }
52
52
  export interface GetInboxResponse { ideas: unknown; open_count: unknown }
53
53
  export interface GetInboxSparksResponse { sparks: unknown; count: unknown }
54
+ export interface GetInboxTemplateResponse { template: unknown }
54
55
  export interface GetLeaderboardResponse { leaderboard: unknown; page: unknown }
55
56
  export interface GetLearningsResponse { learnings: unknown }
56
57
  export interface GetMeAchievementsResponse { unlocked: unknown }
@@ -251,6 +252,8 @@ export interface PostInboxIdRatifyRequest { notes_md?: string }
251
252
  export interface PostInboxIdResubmitRequest { field_values: Record<string, unknown>; template_key?: string }
252
253
  export interface PostInboxIdSparkResponse { idea: unknown; sparked: boolean; unchanged: boolean }
253
254
  export interface PostInboxRequest { title: string; body_md?: string; kind?: string; suggested_version?: string; suggested_priority?: number; goal_id?: number; grade?: string; template_key?: string; field_values?: Record<string, unknown> }
255
+ export interface PostInboxScoreRequest { field_values: Record<string, unknown>; template_key?: string }
256
+ export interface PostInboxScoreResponse { score: unknown; fields: unknown; template_key: unknown }
254
257
  export interface PostLearningsRequest { title: string; body_md: string; tags?: string[]; related_files?: string[]; source?: string; source_ref?: string; task_id?: number }
255
258
  export interface PostLearningsResponse { skipped?: boolean; reason?: unknown; learning?: unknown }
256
259
  export interface PostLlmCacheLookupRequest { cache_key?: unknown; tokens_saved_est?: unknown }
@@ -681,8 +684,12 @@ export interface BongosClient {
681
684
  postInboxIdSpark(args?: RequestArgs): Promise<PostInboxIdSparkResponse>;
682
685
  /** GET /inbox/awaiting-nod — rank: metic+archon */
683
686
  getInboxAwaitingNod(args?: RequestArgs): Promise<GetInboxAwaitingNodResponse>;
687
+ /** POST /inbox/score — rank: any-builder */
688
+ postInboxScore(args: RequestArgs & { body: PostInboxScoreRequest }): Promise<PostInboxScoreResponse>;
684
689
  /** GET /inbox/sparks — rank: any-builder */
685
690
  getInboxSparks(args?: RequestArgs): Promise<GetInboxSparksResponse>;
691
+ /** GET /inbox/template — rank: any-builder */
692
+ getInboxTemplate(args?: RequestArgs): Promise<GetInboxTemplateResponse>;
686
693
  };
687
694
  "instance": {
688
695
  /** GET /instance — rank: public */
@@ -413,8 +413,12 @@ export function createClient(opts = {}) {
413
413
  postInboxIdSpark: (args) => request("POST", "/inbox/{id}/spark", { hasBody: true }, args),
414
414
  // GET /inbox/awaiting-nod — rank: metic+archon — GET /inbox/awaiting-nod
415
415
  getInboxAwaitingNod: (args) => request("GET", "/inbox/awaiting-nod", { hasBody: false }, args),
416
+ // POST /inbox/score — rank: any-builder — POST /inbox/score
417
+ postInboxScore: (args) => request("POST", "/inbox/score", { hasBody: true }, args),
416
418
  // GET /inbox/sparks — rank: any-builder — GET /inbox/sparks
417
419
  getInboxSparks: (args) => request("GET", "/inbox/sparks", { hasBody: false }, args),
420
+ // GET /inbox/template — rank: any-builder — GET /inbox/template
421
+ getInboxTemplate: (args) => request("GET", "/inbox/template", { hasBody: false }, args),
418
422
  },
419
423
  "instance": {
420
424
  // GET /instance — rank: public — GET /instance
@@ -6307,6 +6307,55 @@
6307
6307
  ]
6308
6308
  }
6309
6309
  },
6310
+ "/inbox/score": {
6311
+ "post": {
6312
+ "operationId": "post_inbox_score",
6313
+ "tags": [
6314
+ "inbox"
6315
+ ],
6316
+ "summary": "POST /inbox/score",
6317
+ "description": "**Rank:** `any-builder` — Any authenticated builder (row-level ownership enforced in-handler).",
6318
+ "x-rank": "any-builder",
6319
+ "x-source": "modules/ideas/routes/inbox.js",
6320
+ "requestBody": {
6321
+ "required": true,
6322
+ "content": {
6323
+ "application/json": {
6324
+ "schema": {
6325
+ "$ref": "#/components/schemas/PostInboxScoreRequest"
6326
+ }
6327
+ }
6328
+ },
6329
+ "x-validated": true
6330
+ },
6331
+ "responses": {
6332
+ "200": {
6333
+ "description": "Success.",
6334
+ "content": {
6335
+ "application/json": {
6336
+ "schema": {
6337
+ "$ref": "#/components/schemas/PostInboxScoreResponse"
6338
+ }
6339
+ }
6340
+ }
6341
+ },
6342
+ "400": {
6343
+ "$ref": "#/components/responses/ValidationFailed"
6344
+ },
6345
+ "401": {
6346
+ "$ref": "#/components/responses/Unauthorized"
6347
+ },
6348
+ "403": {
6349
+ "$ref": "#/components/responses/Forbidden"
6350
+ }
6351
+ },
6352
+ "security": [
6353
+ {
6354
+ "builderSession": []
6355
+ }
6356
+ ]
6357
+ }
6358
+ },
6310
6359
  "/inbox/sparks": {
6311
6360
  "get": {
6312
6361
  "operationId": "get_inbox_sparks",
@@ -6345,6 +6394,44 @@
6345
6394
  ]
6346
6395
  }
6347
6396
  },
6397
+ "/inbox/template": {
6398
+ "get": {
6399
+ "operationId": "get_inbox_template",
6400
+ "tags": [
6401
+ "inbox"
6402
+ ],
6403
+ "summary": "GET /inbox/template",
6404
+ "description": "----------------------------------------------------------------------- The two reads the hall's Full Idea composer is built from (task 1002928 / BV1.R152, goal 1000062). The done-when says the live meter must reflect THE REAL SCORER, \"not a second copy of the rules\". A browser cannot require() this module — completeness.js and templates.js are CJS and templates.js reaches inbox.js for DEFAULT_TEMPLATE_KEY, which reaches the pool — so the choice is between re-implementing the arithmetic in page JS and asking the server. These two routes are that ask, and they are why the composer contains no rules at all: GET /inbox/template → what the five fields ARE (so the FORM is rendered from the R141 declaration, not from five <textarea> elements hand-written into the HTML — a hard-coded form is the same \"second copy\" defect as a hard-coded scorer, one step earlier, and it would silently ignore a per-project template (R156)). POST /inbox/score → what it is WORTH right now (the R142 scorer itself, per-field, in template order). BOTH ARE PURE. No DB read, no write, no idea id: they describe and score a payload the caller already holds. That is what makes a debounced call on every keystroke reasonable, and why scoring carries no rank beyond sign-in — it tells you nothing you did not just type. DECLARED BEFORE `GET /inbox/:id`, and for GET /inbox/template that ordering is LOAD-BEARING: Express matches in declaration order, so with `:id` first the literal \"/inbox/template\" binds id='template' and parseId 400s it. Same trap as /inbox/sparks and /inbox/awaiting-nod above. rank: any-builder — filing a Full Idea is open to every role by the goal's own settled decision (\"no permission gate on Full Ideas; completeness scoring and triage do the filtering\"), so describing and scoring one must be too. Deliberately NOT pinned in route-rank-check: neither has a gate to protect.\n\n**Rank:** `any-builder` — Any authenticated builder (row-level ownership enforced in-handler).",
6405
+ "x-rank": "any-builder",
6406
+ "x-source": "modules/ideas/routes/inbox.js",
6407
+ "responses": {
6408
+ "200": {
6409
+ "description": "Success.",
6410
+ "content": {
6411
+ "application/json": {
6412
+ "schema": {
6413
+ "$ref": "#/components/schemas/GetInboxTemplateResponse"
6414
+ }
6415
+ }
6416
+ }
6417
+ },
6418
+ "400": {
6419
+ "$ref": "#/components/responses/BadRequest"
6420
+ },
6421
+ "401": {
6422
+ "$ref": "#/components/responses/Unauthorized"
6423
+ },
6424
+ "403": {
6425
+ "$ref": "#/components/responses/Forbidden"
6426
+ }
6427
+ },
6428
+ "security": [
6429
+ {
6430
+ "builderSession": []
6431
+ }
6432
+ ]
6433
+ }
6434
+ },
6348
6435
  "/inbox/{id}": {
6349
6436
  "get": {
6350
6437
  "operationId": "get_inbox_id",
@@ -14133,6 +14220,15 @@
14133
14220
  "count"
14134
14221
  ]
14135
14222
  },
14223
+ "GetInboxTemplateResponse": {
14224
+ "type": "object",
14225
+ "properties": {
14226
+ "template": {}
14227
+ },
14228
+ "required": [
14229
+ "template"
14230
+ ]
14231
+ },
14136
14232
  "GetLeaderboardResponse": {
14137
14233
  "type": "object",
14138
14234
  "properties": {
@@ -17157,6 +17253,34 @@
17157
17253
  ],
17158
17254
  "additionalProperties": false
17159
17255
  },
17256
+ "PostInboxScoreRequest": {
17257
+ "type": "object",
17258
+ "properties": {
17259
+ "field_values": {
17260
+ "type": "object"
17261
+ },
17262
+ "template_key": {
17263
+ "type": "string"
17264
+ }
17265
+ },
17266
+ "required": [
17267
+ "field_values"
17268
+ ],
17269
+ "additionalProperties": false
17270
+ },
17271
+ "PostInboxScoreResponse": {
17272
+ "type": "object",
17273
+ "properties": {
17274
+ "score": {},
17275
+ "fields": {},
17276
+ "template_key": {}
17277
+ },
17278
+ "required": [
17279
+ "score",
17280
+ "fields",
17281
+ "template_key"
17282
+ ]
17283
+ },
17160
17284
  "PostLearningsRequest": {
17161
17285
  "type": "object",
17162
17286
  "properties": {
@@ -18828,9 +18952,9 @@
18828
18952
  "description": "A required dependency/feature is not configured or is temporarily down."
18829
18953
  }
18830
18954
  },
18831
- "x-endpoint-count": 298,
18832
- "x-schema-count": 331,
18955
+ "x-endpoint-count": 300,
18956
+ "x-schema-count": 334,
18833
18957
  "x-undocumented-bodies": 8,
18834
- "x-response-schemas": 221,
18958
+ "x-response-schemas": 223,
18835
18959
  "x-generated-by": "scripts/gds/gen-api-docs.js"
18836
18960
  }
@@ -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. 298 endpoints across 47 route files.
5
+ > **Generated from the live route files** — the route file is authoritative. 300 endpoints across 47 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`.
@@ -258,7 +258,7 @@ Base path: `/api/bongos`. Ranks (enforced server-side, [ADR 0016](adr/<redacted>
258
258
  |---|---|---|---|---|
259
259
  | GET | `/api/bongos/healthz` | `public` | — | liveness probe; status.example.com hits this anonymously. |
260
260
 
261
- ## `inbox` (12)
261
+ ## `inbox` (14)
262
262
 
263
263
  | Method | Path | Rank | Body | Description |
264
264
  |---|---|---|---|---|
@@ -273,7 +273,9 @@ Base path: `/api/bongos`. Ranks (enforced server-side, [ADR 0016](adr/<redacted>
273
273
  | POST | `/api/bongos/inbox/:id/spark` | `any-builder` | — | Mark a Quick Idea as a Big Idea Spark — "I have the spark but not the full picture, someone develop this". |
274
274
  | DELETE | `/api/bongos/inbox/:id/spark` | `any-builder` | — | Withdraw the Big Idea Spark mark — the reversibility half of R144. |
275
275
  | GET | `/api/bongos/inbox/awaiting-nod` | `metic+archon` | — | GET /inbox/awaiting-nod — the NOD QUEUE (task 1003066, BV1.R05). |
276
+ | POST | `/api/bongos/inbox/score` | `any-builder` | `field_values`, `template_key` | |
276
277
  | GET | `/api/bongos/inbox/sparks` | `any-builder` | — | GET /inbox/sparks — THE SPARK QUEUE (task 1002921 / BV1.R145, goal 1000062). |
278
+ | GET | `/api/bongos/inbox/template` | `any-builder` | — | ----------------------------------------------------------------------- The two reads the hall's Full Idea composer is built from (task 1… |
277
279
 
278
280
  ## `instance` (1)
279
281