@bongos/core 1.21.172 → 1.21.174

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 (35) hide show
  1. package/.bongos-core.json +53 -38
  2. package/docs/adr/0343-a-module-score-is-a-security-gate-then-an-average-of-visible-parts.md +10 -0
  3. package/docs/api/openapi.json +1 -1
  4. package/docs/copy-inventory.md +75 -72
  5. package/docs/copy-registry.json +117 -90
  6. package/docs/module-api-changelog.md +4 -0
  7. package/docs/modules-contract.md +2 -1
  8. package/docs/page-readings.json +122 -120
  9. package/modules/copy-desk/routes/copy-desk.js +4 -4
  10. package/modules/hall-ui/public/city-decide.js +36 -2
  11. package/modules/hall-ui/public/city.css +8 -2
  12. package/modules/hall-ui/public/city.html +5 -5
  13. package/modules/lifecycle/artist-review-goal.js +103 -0
  14. package/modules/lifecycle/db-tasks.js +17 -1
  15. package/modules/lifecycle/db-versions.js +5 -1
  16. package/modules/lifecycle/page-tweak-claim.js +3 -3
  17. package/modules/lifecycle/page-tweak-write.js +12 -4
  18. package/modules/public-landing/public/index.html +9 -1
  19. package/package-lock.json +2 -2
  20. package/package.json +1 -1
  21. package/release-notes.json +24 -0
  22. package/src/bongos/auth-github.js +6 -1
  23. package/src/bongos/module-listing.js +76 -11
  24. package/src/bongos/routes/auth.js +6 -2
  25. package/src/bongos/routes/modules.js +15 -1
  26. package/src/module-api.js +1 -1
  27. package/tests/artist_review_goal.mjs +119 -0
  28. package/tests/auth_switch_account.mjs +38 -0
  29. package/tests/copy_desk_page_claim.mjs +6 -1
  30. package/tests/copy_desk_page_submit.mjs +1 -1
  31. package/tests/fixtures/page-ledger.mjs +13 -0
  32. package/tests/hall_city_rewording.mjs +11 -0
  33. package/tests/module_store_listing.mjs +105 -5
  34. package/tests/speciality_injection.mjs +20 -0
  35. package/tests/task_goal_required.mjs +12 -2
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.21.172",
6
- "core_contract": "1.21.172",
7
- "source_commit": "a5b5fc89c2bddcd402af46f6271b80c329759d8f",
5
+ "core_version": "1.21.174",
6
+ "core_contract": "1.21.174",
7
+ "source_commit": "adfd7c27e23529361ee07bbaf4ef49077e4111d1",
8
8
  "source_ref": "HEAD",
9
- "built_at": "2026-10-23T17:54:54.483Z",
9
+ "built_at": "2026-10-23T18:25:19.708Z",
10
10
  "redaction": {
11
11
  "model": "docs-redacted+functional-verbatim",
12
12
  "docs_redacted": 609,
13
13
  "agent_docs_stubbed": 28,
14
- "functional_verbatim": 3193,
14
+ "functional_verbatim": 3196,
15
15
  "rules": 3,
16
16
  "gate_literals": 3,
17
17
  "gate": "passed"
18
18
  },
19
- "file_count": 3831,
20
- "tree_sha256": "3f3467a2aa833a4abbd6faf317d2656fb98738368a7376cdd163964d5f34a529",
19
+ "file_count": 3834,
20
+ "tree_sha256": "caab1743d1725c9a840734341335be349f8c978cf2d458f1ba9effab69975d30",
21
21
  "files": [
22
22
  {
23
23
  "path": ".claude/skills/ask-for-help/SKILL.md",
@@ -2177,7 +2177,7 @@
2177
2177
  {
2178
2178
  "path": "docs/adr/0343-a-module-score-is-a-security-gate-then-an-average-of-visible-parts.md",
2179
2179
  "mode": "0000644",
2180
- "sha256": "db41e62093dd09e5ed3f9bb4628c98ea0255b487bb5b94191bbb4adc0651636b"
2180
+ "sha256": "35f757210a8f2279da301ac294d4939f78e7976fc6ac50db894a2eb973341636"
2181
2181
  },
2182
2182
  {
2183
2183
  "path": "docs/adr/0344-a-tester-is-a-project-that-opts-in-once.md",
@@ -2387,7 +2387,7 @@
2387
2387
  {
2388
2388
  "path": "docs/api/openapi.json",
2389
2389
  "mode": "0000644",
2390
- "sha256": "01aa4a0660af5c27d90556aa30b440fb1236caeb75ea3ce2f0020437bbe11542"
2390
+ "sha256": "d6fa7d73228ff1d2420ca0201047511d8ffcc54c8243d34b245b765aa594964b"
2391
2391
  },
2392
2392
  {
2393
2393
  "path": "docs/architecture.md",
@@ -2412,12 +2412,12 @@
2412
2412
  {
2413
2413
  "path": "docs/copy-inventory.md",
2414
2414
  "mode": "0000644",
2415
- "sha256": "eec10b588ffe284a8e52e0f5e167b24ffee253b336454d980906d1d299f789c2"
2415
+ "sha256": "c75fc40e23e292f5f95de5218c44861ea53ef2d0f691afbd2e8c3383c3e77a09"
2416
2416
  },
2417
2417
  {
2418
2418
  "path": "docs/copy-registry.json",
2419
2419
  "mode": "0000644",
2420
- "sha256": "f537f321c123a47d6c8a7e026293bac969b79ab648462f1fbaa51929c8282584"
2420
+ "sha256": "16a9f7fc63e3c592067ed0286a9faaf52fc7c07fb88d0eb5b1e9ef966822b741"
2421
2421
  },
2422
2422
  {
2423
2423
  "path": "docs/design/apex-pass-2-direction.md",
@@ -2927,12 +2927,12 @@
2927
2927
  {
2928
2928
  "path": "docs/module-api-changelog.md",
2929
2929
  "mode": "0000644",
2930
- "sha256": "af6395d2e0df7248fff770ebe525441b4af0ba73ff474328bfb69ace36f3180b"
2930
+ "sha256": "8c7c1a18bb466eb86c4e6ed6d7b39b433111e99562b04f444671c455bb96ac62"
2931
2931
  },
2932
2932
  {
2933
2933
  "path": "docs/modules-contract.md",
2934
2934
  "mode": "0000644",
2935
- "sha256": "73757f66afb17289933edd12b20e0c8d903b37d74a004a622826adf09742401f"
2935
+ "sha256": "4aa9233a5d700f046ec30f6f37c282cb1a97db7873899d19226cb702be4b7ecb"
2936
2936
  },
2937
2937
  {
2938
2938
  "path": "docs/onboarding/diagrams/01-task-lifecycle.mmd",
@@ -3017,7 +3017,7 @@
3017
3017
  {
3018
3018
  "path": "docs/page-readings.json",
3019
3019
  "mode": "0000644",
3020
- "sha256": "4a1fa9bbf1b952ebabc5587a38f634de6fdee2678ba6b9c8ef6a6e0862dff820"
3020
+ "sha256": "9ec7d9542b85b8232622692dbe007a852da947e6f674172b2aa51f961acf17d4"
3021
3021
  },
3022
3022
  {
3023
3023
  "path": "docs/project-context.template.md",
@@ -4517,7 +4517,7 @@
4517
4517
  {
4518
4518
  "path": "modules/copy-desk/routes/copy-desk.js",
4519
4519
  "mode": "0000644",
4520
- "sha256": "2f88b12c9a8ce90f5a153407cb492d342dd6beda43f8b21c1e15a42cb2d8f899"
4520
+ "sha256": "c29c4015b09ed16ee0ae929077f077f4490b33e5a8055f9d331e097e1aabcf97"
4521
4521
  },
4522
4522
  {
4523
4523
  "path": "modules/copy-desk/skills/tweak/SKILL.md",
@@ -5652,7 +5652,7 @@
5652
5652
  {
5653
5653
  "path": "modules/hall-ui/public/city-decide.js",
5654
5654
  "mode": "0000644",
5655
- "sha256": "dff181b388393cca09bc7ab4c2949eff95c63c2795fef0f8348f49a3387b5c59"
5655
+ "sha256": "de7085b284e4ed6bfd8f5703074934ec962697ae1d9cf9d7e31ec3ef81952fc2"
5656
5656
  },
5657
5657
  {
5658
5658
  "path": "modules/hall-ui/public/city-draw.js",
@@ -5667,12 +5667,12 @@
5667
5667
  {
5668
5668
  "path": "modules/hall-ui/public/city.css",
5669
5669
  "mode": "0000644",
5670
- "sha256": "2b4bebeeef82ec53a21bbcff83925b185e81afa356a889722ab8bd2206c162bd"
5670
+ "sha256": "bc2b6e59862ada8af0fc125ccff4f875c916ca5624d46d5fb1493a8d849c154c"
5671
5671
  },
5672
5672
  {
5673
5673
  "path": "modules/hall-ui/public/city.html",
5674
5674
  "mode": "0000644",
5675
- "sha256": "e20c167df8c5f7e630ba394ab5e39f274de8aed428f3d41f2fa987c8b340047d"
5675
+ "sha256": "48d8eacaf02f0f6da2959da09f0d56245d718ef26efe2753012dee0f0b64bcb1"
5676
5676
  },
5677
5677
  {
5678
5678
  "path": "modules/hall-ui/public/city.js",
@@ -7154,6 +7154,11 @@
7154
7154
  "mode": "0000644",
7155
7155
  "sha256": "e7c7db8a6faf50f3b75cb26ac33caa8357c462293e64318212ace69b0b654507"
7156
7156
  },
7157
+ {
7158
+ "path": "modules/lifecycle/artist-review-goal.js",
7159
+ "mode": "0000644",
7160
+ "sha256": "e2e9318d76c337b6339b0685cd2585c9d58cd13c7ec1bac8186e614a60a31be4"
7161
+ },
7157
7162
  {
7158
7163
  "path": "modules/lifecycle/autopickup-files.js",
7159
7164
  "mode": "0000644",
@@ -7292,12 +7297,12 @@
7292
7297
  {
7293
7298
  "path": "modules/lifecycle/db-tasks.js",
7294
7299
  "mode": "0000644",
7295
- "sha256": "710e4c97c0b67a3b258d6997ba9dc485e42bb57a0988777c0f10f8391b952489"
7300
+ "sha256": "29b4ced94d5fc5721dcb0c17ecbd9171b90e5444f0c526f3d8498f6e99b22fc6"
7296
7301
  },
7297
7302
  {
7298
7303
  "path": "modules/lifecycle/db-versions.js",
7299
7304
  "mode": "0000644",
7300
- "sha256": "7ffd6ca56a6621a933abf854589e836260cd749c6148a278542ab4ae89eb6b13"
7305
+ "sha256": "e5328df4be96e980fd22486f441f0f2a47abe5572a1b34ae47caed96965dadc9"
7301
7306
  },
7302
7307
  {
7303
7308
  "path": "modules/lifecycle/db.js",
@@ -7577,7 +7582,7 @@
7577
7582
  {
7578
7583
  "path": "modules/lifecycle/page-tweak-claim.js",
7579
7584
  "mode": "0000644",
7580
- "sha256": "4b9f9c23161a961381857a01fc810ce1b960e2b89b74e616fa17d34a403b592f"
7585
+ "sha256": "a3adde93c8bdef716f68aa09b9c60a81fa55f65520980d9686447db95647eecf"
7581
7586
  },
7582
7587
  {
7583
7588
  "path": "modules/lifecycle/page-tweak-hold.js",
@@ -7592,7 +7597,7 @@
7592
7597
  {
7593
7598
  "path": "modules/lifecycle/page-tweak-write.js",
7594
7599
  "mode": "0000644",
7595
- "sha256": "a13c01e96c5ae09837b9d599a66b23765f6d6f16cc29b11ca897da4f497d0b0d"
7600
+ "sha256": "c6b5cb868778d1043029c0f17640caa4e2124e13783319e33cbdb56b0135ba45"
7596
7601
  },
7597
7602
  {
7598
7603
  "path": "modules/lifecycle/pg-constraint-fail.js",
@@ -9727,7 +9732,7 @@
9727
9732
  {
9728
9733
  "path": "modules/public-landing/public/index.html",
9729
9734
  "mode": "0000644",
9730
- "sha256": "3f5f17cb00337d9dfb0e96ae00f8ad64ba2a0495d4addef0a02d81dcc76b67fd"
9735
+ "sha256": "88a9131f1bd1876bc049898d4185b76f699eb73d3eeb8866ff8f1f7577300d7f"
9731
9736
  },
9732
9737
  {
9733
9738
  "path": "modules/public-landing/public/index.probes.json",
@@ -10602,12 +10607,12 @@
10602
10607
  {
10603
10608
  "path": "package-lock.json",
10604
10609
  "mode": "0000644",
10605
- "sha256": "11e80d0bbd4cbe40847b4b7b3185243caca27ca1eb62a23d16af9244aedf7d5f"
10610
+ "sha256": "0a8aad85242c815483d937f464a70e0635a6f82f3e0bbd1d53e0007c4f391599"
10606
10611
  },
10607
10612
  {
10608
10613
  "path": "package.json",
10609
10614
  "mode": "0000644",
10610
- "sha256": "ac557c163c39ef7b845595788a40b41a256fa82143a06632ac9a0805479a8285"
10615
+ "sha256": "d875bd84ad023a7e1a802a045ae88ef86e835f82ebd527db9ec1a82134a72e31"
10611
10616
  },
10612
10617
  {
10613
10618
  "path": "public-docs/index.html",
@@ -10627,7 +10632,7 @@
10627
10632
  {
10628
10633
  "path": "release-notes.json",
10629
10634
  "mode": "0000644",
10630
- "sha256": "a0f68aef51f5fbd8e741303c53f90c1342c0c9cc19f99d8c9de37fce33edb894"
10635
+ "sha256": "23c78c80dcbd8687b941dbae2186b92c9c5842b381dbbc7549cb8780b6cf7cb5"
10631
10636
  },
10632
10637
  {
10633
10638
  "path": "scripts/cron/style_guide_audit.sh",
@@ -12622,7 +12627,7 @@
12622
12627
  {
12623
12628
  "path": "src/bongos/auth-github.js",
12624
12629
  "mode": "0000644",
12625
- "sha256": "9c6c67956fc3f16e0e3da71237ff875592bd9933cbab74337522ed871d0487e2"
12630
+ "sha256": "68cfb2207be1faa76b6f0f2bb26a47045f5f38a6b4b0a00cf08c62dd00c0d581"
12626
12631
  },
12627
12632
  {
12628
12633
  "path": "src/bongos/auth-idp.js",
@@ -12737,7 +12742,7 @@
12737
12742
  {
12738
12743
  "path": "src/bongos/module-listing.js",
12739
12744
  "mode": "0000644",
12740
- "sha256": "2f2ac4e04af85579c9c2bfd6e6b8e880cff46cadf49ad3791948c9bca03c8d72"
12745
+ "sha256": "8d08e9bed1b5320e2762d65173fb67671253d1adc29084a9223ad204b7572d06"
12741
12746
  },
12742
12747
  {
12743
12748
  "path": "src/bongos/module-overrides.js",
@@ -12867,7 +12872,7 @@
12867
12872
  {
12868
12873
  "path": "src/bongos/routes/auth.js",
12869
12874
  "mode": "0000644",
12870
- "sha256": "39673ba55974dc86bb4aa04e68c8315dcca6144270847e396074b7e5eb4bdc6d"
12875
+ "sha256": "71af24af695acdb8ff03bb457359ac06bb29d69ec8f50691c8a2479f8090373a"
12871
12876
  },
12872
12877
  {
12873
12878
  "path": "src/bongos/routes/backup.js",
@@ -12927,7 +12932,7 @@
12927
12932
  {
12928
12933
  "path": "src/bongos/routes/modules.js",
12929
12934
  "mode": "0000644",
12930
- "sha256": "7ac9ce1a3d82549db000176970670d551a3c9b61994dc68d1f122b346dfb0878"
12935
+ "sha256": "37a089df1c2907dc989e1d77ad5cb8ad9783ca4adfc4cfc2704b57d44dbce41e"
12931
12936
  },
12932
12937
  {
12933
12938
  "path": "src/bongos/routes/my-passkeys.js",
@@ -13017,7 +13022,7 @@
13017
13022
  {
13018
13023
  "path": "src/module-api.js",
13019
13024
  "mode": "0000644",
13020
- "sha256": "d91f9c6725d2c369f3af694a4e9b1ecada83994a2208961414c7814f0bf65b48"
13025
+ "sha256": "2a6426c050bd5aad4518c4ff3613fac041993deb0eebc6cab7d79184ff120159"
13021
13026
  },
13022
13027
  {
13023
13028
  "path": "src/module-loader/catalog.js",
@@ -13374,6 +13379,11 @@
13374
13379
  "mode": "0000644",
13375
13380
  "sha256": "370b54d4e323e144ef8f9e382b873a4ff803b7727844c0e2d6b9e5cdfeb0fbe1"
13376
13381
  },
13382
+ {
13383
+ "path": "tests/artist_review_goal.mjs",
13384
+ "mode": "0000644",
13385
+ "sha256": "ce9b9035338a7dbfb316277ac3d881bb7c36560f93d50dd811ea8f6b2ce2ec7c"
13386
+ },
13377
13387
  {
13378
13388
  "path": "tests/asset_version.mjs",
13379
13389
  "mode": "0000644",
@@ -13459,6 +13469,11 @@
13459
13469
  "mode": "0000644",
13460
13470
  "sha256": "e4c3309248873ac816ecf9111cc08e4c9e3e6c318a2e925434f1cc490c71b734"
13461
13471
  },
13472
+ {
13473
+ "path": "tests/auth_switch_account.mjs",
13474
+ "mode": "0000644",
13475
+ "sha256": "3826cfb52ee2977bb9ba77312b098a8d466b58420a2cb8234587911d219ae46a"
13476
+ },
13462
13477
  {
13463
13478
  "path": "tests/auth_web_recovery.mjs",
13464
13479
  "mode": "0000644",
@@ -13987,7 +14002,7 @@
13987
14002
  {
13988
14003
  "path": "tests/copy_desk_page_claim.mjs",
13989
14004
  "mode": "0000644",
13990
- "sha256": "af6cdac77b90aad511a603757e12d7ffefaa7fdbcdd14aefd70ad49e3cd193fe"
14005
+ "sha256": "f8bf52b346895367eca47dc9b0d169439296f908c504e7b3dc25f3e76a62250b"
13991
14006
  },
13992
14007
  {
13993
14008
  "path": "tests/copy_desk_page_docx.mjs",
@@ -14012,7 +14027,7 @@
14012
14027
  {
14013
14028
  "path": "tests/copy_desk_page_submit.mjs",
14014
14029
  "mode": "0000644",
14015
- "sha256": "7f5d5b9b9054b5dc6a066253af93864e8ea1332ca32b8300f217832d6640cabf"
14030
+ "sha256": "c21159c1d8dcf82128120362232f72d4c7d6cf0bdc8726517788f5c6b18f5bd2"
14016
14031
  },
14017
14032
  {
14018
14033
  "path": "tests/copy_guarded_lines.mjs",
@@ -14637,7 +14652,7 @@
14637
14652
  {
14638
14653
  "path": "tests/fixtures/page-ledger.mjs",
14639
14654
  "mode": "0000644",
14640
- "sha256": "b36096f0bc3f6ea645c5e29e8bc1c769d7fb78fa8cd6d4985ab573a5a3cb0e88"
14655
+ "sha256": "b0a8f277883957ea314ad6efd16fc3109729726a75c28136bdd890c1570749b1"
14641
14656
  },
14642
14657
  {
14643
14658
  "path": "tests/fixtures/session-506-digest.json",
@@ -15552,7 +15567,7 @@
15552
15567
  {
15553
15568
  "path": "tests/hall_city_rewording.mjs",
15554
15569
  "mode": "0000644",
15555
- "sha256": "93fc45e48ecf65029f5eaae33b001474bf4fc147becc3df3a7fcd56288d350d5"
15570
+ "sha256": "88dc75df0b62ed23ff0aa110d6fa3eb362ccc05e8ac6c0999dcc064c315e6962"
15556
15571
  },
15557
15572
  {
15558
15573
  "path": "tests/hall_city_switchboard.mjs",
@@ -16737,7 +16752,7 @@
16737
16752
  {
16738
16753
  "path": "tests/module_store_listing.mjs",
16739
16754
  "mode": "0000644",
16740
- "sha256": "be639096f82a9750e25b57c7612e94754b6109ef13507144be9ceb384628eb91"
16755
+ "sha256": "5afd95a04dc8e22e91dc8d5a7091d76add5d917a39ee5172cf7024ee7797c3eb"
16741
16756
  },
16742
16757
  {
16743
16758
  "path": "tests/module_store_publish.mjs",
@@ -18522,7 +18537,7 @@
18522
18537
  {
18523
18538
  "path": "tests/speciality_injection.mjs",
18524
18539
  "mode": "0000644",
18525
- "sha256": "9de6fbffd858190096bc22d556ccae101a6206adeee05bb146bd2a0a1a59d15c"
18540
+ "sha256": "d39e4aac82bd721df57148114717f8a32aca4d70566d9bbd8242e843088c13ac"
18526
18541
  },
18527
18542
  {
18528
18543
  "path": "tests/speciality_offer_ui.mjs",
@@ -18712,7 +18727,7 @@
18712
18727
  {
18713
18728
  "path": "tests/task_goal_required.mjs",
18714
18729
  "mode": "0000644",
18715
- "sha256": "073581d9a97095666ee2ed7ebb0a6b280f3e8ea1efc53015c2f77eb5d08c4975"
18730
+ "sha256": "5bf5deb47453f3ec5a64251137d731f5974c712ada11b9dbedde91469421c6a4"
18716
18731
  },
18717
18732
  {
18718
18733
  "path": "tests/task_lib.mjs",
@@ -98,3 +98,13 @@ the floor. Below the bar is not listed at all. Authors read the rule in
98
98
  and the owner wants buyers to see that.
99
99
  - **Counting a missing part as zero.** It would punish every new module for data it couldn't
100
100
  have yet.
101
+
102
+ ## Implementation note — the ranking (task 1003808, 2026-10-23)
103
+
104
+ The owner chose **quality first, price breaks ties**, with an optional buyer-set maximum price.
105
+ Above the floor, `GET /store/modules` ranks listed modules by overall score; between equal
106
+ scores the free module comes first, then the lowest cash price, then the lowest credit price,
107
+ then the key (`rankListed` in `src/bongos/module-listing.js`). Price only orders what the score
108
+ could not separate, so D6 holds: price still never enters the score. `?max_cents=` /
109
+ `?max_credits=` filter out modules over the buyer's cap; they never reorder. New versions stay
110
+ unranked (owner, 2026-10-01). Sorting by one part (task 1003800) replaces this order when asked.
@@ -23244,7 +23244,7 @@
23244
23244
  "store"
23245
23245
  ],
23246
23246
  "summary": "GET /store/modules",
23247
- "description": "The store catalog under the quality floor (task 1003807, ADR 0343 D2/D5): each listed module's newest version, if it passed the Security gate and scores at or above the floor, or under \"new\" if it has no real-world data yet. Below the bar is not listed at all. The floor is fixed in module-listing.js and returned here. `?sort=<part>` orders the listed modules by the part a buyer cares about (task 1003800, sortByPart); the parts it accepts come back as sort_parts. rank: any-builder — a read of public store metadata, like /store/modules/latest: no entitlement taken, nothing changed.\n\n**Rank:** `any-builder` — Any authenticated builder (row-level ownership enforced in-handler).",
23247
+ "description": "The store catalog under the quality floor (task 1003807, ADR 0343 D2/D5): each listed module's newest version, if it passed the Security gate and scores at or above the floor, or under \"new\" if it has no real-world data yet. Below the bar is not listed at all. The floor is fixed in module-listing.js and returned here. `?sort=<part>` orders the listed modules by the part a buyer cares about (task 1003800, sortByPart); the parts it accepts come back as sort_parts. Without it the listed modules are ranked quality first, price breaking ties (task 1003808, rankListed); `?max_cents=` / `?max_credits=` leave out modules that cost more. rank: any-builder — a read of public store metadata, like /store/modules/latest: no entitlement taken, nothing changed.\n\n**Rank:** `any-builder` — Any authenticated builder (row-level ownership enforced in-handler).",
23248
23248
  "x-rank": "any-builder",
23249
23249
  "x-source": "src/bongos/routes/modules.js",
23250
23250
  "responses": {