@bongos/core 1.24.29 → 1.24.31

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 (113) hide show
  1. package/.bongos-core.json +198 -108
  2. package/clients/bongos-client/README.md +1 -1
  3. package/clients/bongos-client/bongos-client.global.js +12 -0
  4. package/clients/bongos-client/index.cjs +12 -0
  5. package/clients/bongos-client/index.d.ts +12 -0
  6. package/clients/bongos-client/index.mjs +12 -0
  7. package/docs/api/openapi.json +174 -1
  8. package/docs/api-reference.md +12 -2
  9. package/docs/copy-inventory.md +226 -224
  10. package/docs/copy-registry.json +583 -549
  11. package/docs/module-api-changelog.md +2 -0
  12. package/docs/page-inventory.json +18 -37
  13. package/docs/page-readings.json +306 -361
  14. package/modules/copy-desk/module.json +1 -1
  15. package/modules/copy-desk/routes/copy-desk-studio.js +103 -0
  16. package/modules/copy-desk/tests/copy_no_cms.mjs +2 -2
  17. package/modules/government/db.js +29 -0
  18. package/modules/government/docket.js +61 -4
  19. package/modules/government/routes/government.js +2 -0
  20. package/modules/hall-ui/public/ai-studio.html +1 -1
  21. package/modules/hall-ui/public/atlas.html +1 -1
  22. package/modules/hall-ui/public/blockers.html +1 -1
  23. package/modules/hall-ui/public/board-room.html +1 -1
  24. package/modules/hall-ui/public/builders.js +3 -79
  25. package/modules/hall-ui/public/city.html +1 -1
  26. package/modules/hall-ui/public/collab.html +1 -1
  27. package/modules/hall-ui/public/commands.html +1 -1
  28. package/modules/hall-ui/public/copy-desk.html +1 -1
  29. package/modules/hall-ui/public/craft-mode.js +1 -1
  30. package/modules/hall-ui/public/deploy.html +1 -1
  31. package/modules/hall-ui/public/diagrams.html +1 -1
  32. package/modules/hall-ui/public/drachmae.html +1 -1
  33. package/modules/hall-ui/public/fleet.html +1 -1
  34. package/modules/hall-ui/public/gate.html +1 -1
  35. package/modules/hall-ui/public/goal-map.html +1 -1
  36. package/modules/hall-ui/public/goals.html +1 -1
  37. package/modules/hall-ui/public/government.html +1 -1
  38. package/modules/hall-ui/public/hall-render.js +68 -167
  39. package/modules/hall-ui/public/hall-widgets.js +4 -45
  40. package/modules/hall-ui/public/home-city-draw.js +583 -0
  41. package/modules/hall-ui/public/home-city.css +102 -0
  42. package/modules/hall-ui/public/home-city.js +339 -0
  43. package/modules/hall-ui/public/home-gallery.css +129 -0
  44. package/modules/hall-ui/public/home-gallery.js +349 -0
  45. package/modules/hall-ui/public/home-studio.css +72 -0
  46. package/modules/hall-ui/public/home-studio.js +203 -0
  47. package/modules/hall-ui/public/idea.html +1 -1
  48. package/modules/hall-ui/public/ideas.html +1 -1
  49. package/modules/hall-ui/public/index.html +9 -7
  50. package/modules/hall-ui/public/index.states.json +73 -8
  51. package/modules/hall-ui/public/market-watch-item.html +1 -1
  52. package/modules/hall-ui/public/market-watch-rules.html +1 -1
  53. package/modules/hall-ui/public/market-watch-settings.js +6 -1
  54. package/modules/hall-ui/public/market-watch.html +141 -54
  55. package/modules/hall-ui/public/market-watch.js +54 -0
  56. package/modules/hall-ui/public/market-watch.states.json +2 -1
  57. package/modules/hall-ui/public/modules.html +1 -1
  58. package/modules/hall-ui/public/my-agents.html +1 -1
  59. package/modules/hall-ui/public/primer.html +1 -1
  60. package/modules/hall-ui/public/profile.html +1 -1
  61. package/modules/hall-ui/public/project-settings.html +1 -1
  62. package/modules/hall-ui/public/ranks.html +1 -1
  63. package/modules/hall-ui/public/roadmap.html +1 -1
  64. package/modules/hall-ui/public/roster.html +1 -1
  65. package/modules/hall-ui/public/sessions.html +1 -1
  66. package/modules/hall-ui/public/settings.html +1 -1
  67. package/modules/hall-ui/public/shell.js +2 -3
  68. package/modules/hall-ui/public/street.html +1 -1
  69. package/modules/hall-ui/public/studio.html +9 -1
  70. package/modules/hall-ui/public/style.css +74 -27
  71. package/modules/hall-ui/public/task.html +1 -1
  72. package/modules/hall-ui/public/thinking.html +1 -1
  73. package/modules/hall-ui/public/tweak-editor.html +1 -1
  74. package/modules/hall-ui/public/watch.html +1 -1
  75. package/modules/hall-ui/public/work.html +1 -1
  76. package/modules/hall-ui/records/home-city.md +189 -0
  77. package/modules/hall-ui/records/loader.md +1 -1
  78. package/modules/hall-ui/records/market-watch-settings.md +16 -3
  79. package/modules/hall-ui/records/market-watch.md +3 -1
  80. package/modules/lifecycle/home-city.js +388 -0
  81. package/modules/lifecycle/home-gallery.js +320 -0
  82. package/modules/lifecycle/migrations/lifecycle_020_work_appreciations.sql +36 -0
  83. package/modules/lifecycle/module.json +2 -0
  84. package/modules/lifecycle/routes/home-city.js +29 -0
  85. package/modules/lifecycle/routes/home-gallery.js +37 -0
  86. package/modules/market-watch/routes/settings.js +1 -1
  87. package/package-lock.json +2 -2
  88. package/package.json +1 -1
  89. package/release-notes.json +38 -0
  90. package/scripts/bongos/leak-scan-allowlist.js +8 -0
  91. package/scripts/hall-preview/README.md +1 -0
  92. package/scripts/hall-preview/server.js +10 -0
  93. package/src/bongos/serve-internal.js +17 -3
  94. package/src/module-api.js +1 -1
  95. package/tests/claim_from_task_and_home.mjs +8 -43
  96. package/tests/hall_board_world.mjs +10 -12
  97. package/tests/hall_builders_page_pass.mjs +18 -27
  98. package/tests/hall_home_ships_bounded.mjs +4 -3
  99. package/tests/hall_loading.mjs +1 -1
  100. package/tests/hall_nav.mjs +11 -4
  101. package/tests/hall_page_gate_map.mjs +7 -4
  102. package/tests/home_bounded_reads.mjs +16 -31
  103. package/tests/home_city.mjs +580 -0
  104. package/tests/home_city_widget.mjs +260 -0
  105. package/tests/home_gallery.mjs +255 -0
  106. package/tests/home_gallery_widget.mjs +220 -0
  107. package/tests/home_studio.mjs +169 -0
  108. package/tests/home_studio_widget.mjs +157 -0
  109. package/tests/leaderboard_roles.mjs +3 -2
  110. package/tests/market_watch_pages.mjs +162 -0
  111. package/tests/nav_permission_atoms.mjs +2 -2
  112. package/modules/hall-ui/public/market-watch-settings.html +0 -115
  113. package/modules/hall-ui/public/market-watch-settings.states.json +0 -14
@@ -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
- - 679 operations across 84 resource groups
8
+ - 684 operations across 85 resource groups
9
9
 
10
10
  ## Use it from your project
11
11
 
@@ -393,6 +393,8 @@ function createClient(opts = {}) {
393
393
  getCopyDeskQueue: (args) => request("GET", "/copy-desk/queue", { hasBody: false }, args),
394
394
  // GET /copy-desk/strings — rank: any-builder — GET /copy-desk/strings
395
395
  getCopyDeskStrings: (args) => request("GET", "/copy-desk/strings", { hasBody: false }, args),
396
+ // GET /copy-desk/studio — rank: any-builder — GET /copy-desk/studio
397
+ getCopyDeskStudio: (args) => request("GET", "/copy-desk/studio", { hasBody: false }, args),
396
398
  // GET /copy-desk/tally — rank: any-builder — GET /copy-desk/tally
397
399
  getCopyDeskTally: (args) => request("GET", "/copy-desk/tally", { hasBody: false }, args),
398
400
  },
@@ -702,6 +704,16 @@ function createClient(opts = {}) {
702
704
  // GET /help-requests/mine — rank: any-builder — GET /help-requests/mine
703
705
  getHelpRequestsMine: (args) => request("GET", "/help-requests/mine", { hasBody: false }, args),
704
706
  },
707
+ "home": {
708
+ // GET /home/city — rank: any-builder — GET /home/city
709
+ getHomeCity: (args) => request("GET", "/home/city", { hasBody: false }, args),
710
+ // GET /home/gallery — rank: any-builder — GET /home/gallery
711
+ getHomeGallery: (args) => request("GET", "/home/gallery", { hasBody: false }, args),
712
+ // PUT /home/gallery/{id}/heart — rank: any-builder — PUT /home/gallery/:id/heart
713
+ putHomeGalleryIdHeart: (args) => request("PUT", "/home/gallery/{id}/heart", { hasBody: true }, args),
714
+ // GET /home/studio/works — rank: any-builder — GET /home/studio/works
715
+ getHomeStudioWorks: (args) => request("GET", "/home/studio/works", { hasBody: false }, args),
716
+ },
705
717
  "inbox": {
706
718
  // GET /inbox — rank: any-builder — GET /inbox
707
719
  getInbox: (args) => request("GET", "/inbox", { hasBody: false }, args),
@@ -392,6 +392,8 @@ function createClient(opts = {}) {
392
392
  getCopyDeskQueue: (args) => request("GET", "/copy-desk/queue", { hasBody: false }, args),
393
393
  // GET /copy-desk/strings — rank: any-builder — GET /copy-desk/strings
394
394
  getCopyDeskStrings: (args) => request("GET", "/copy-desk/strings", { hasBody: false }, args),
395
+ // GET /copy-desk/studio — rank: any-builder — GET /copy-desk/studio
396
+ getCopyDeskStudio: (args) => request("GET", "/copy-desk/studio", { hasBody: false }, args),
395
397
  // GET /copy-desk/tally — rank: any-builder — GET /copy-desk/tally
396
398
  getCopyDeskTally: (args) => request("GET", "/copy-desk/tally", { hasBody: false }, args),
397
399
  },
@@ -701,6 +703,16 @@ function createClient(opts = {}) {
701
703
  // GET /help-requests/mine — rank: any-builder — GET /help-requests/mine
702
704
  getHelpRequestsMine: (args) => request("GET", "/help-requests/mine", { hasBody: false }, args),
703
705
  },
706
+ "home": {
707
+ // GET /home/city — rank: any-builder — GET /home/city
708
+ getHomeCity: (args) => request("GET", "/home/city", { hasBody: false }, args),
709
+ // GET /home/gallery — rank: any-builder — GET /home/gallery
710
+ getHomeGallery: (args) => request("GET", "/home/gallery", { hasBody: false }, args),
711
+ // PUT /home/gallery/{id}/heart — rank: any-builder — PUT /home/gallery/:id/heart
712
+ putHomeGalleryIdHeart: (args) => request("PUT", "/home/gallery/{id}/heart", { hasBody: true }, args),
713
+ // GET /home/studio/works — rank: any-builder — GET /home/studio/works
714
+ getHomeStudioWorks: (args) => request("GET", "/home/studio/works", { hasBody: false }, args),
715
+ },
704
716
  "inbox": {
705
717
  // GET /inbox — rank: any-builder — GET /inbox
706
718
  getInbox: (args) => request("GET", "/inbox", { hasBody: false }, args),
@@ -1045,6 +1045,8 @@ export interface BongosClient {
1045
1045
  getCopyDeskQueue(args?: RequestArgs): Promise<ApiResponse>;
1046
1046
  /** GET /copy-desk/strings — rank: any-builder */
1047
1047
  getCopyDeskStrings(args?: RequestArgs): Promise<ApiResponse>;
1048
+ /** GET /copy-desk/studio — rank: any-builder */
1049
+ getCopyDeskStudio(args?: RequestArgs): Promise<ApiResponse>;
1048
1050
  /** GET /copy-desk/tally — rank: any-builder */
1049
1051
  getCopyDeskTally(args?: RequestArgs): Promise<ApiResponse>;
1050
1052
  };
@@ -1354,6 +1356,16 @@ export interface BongosClient {
1354
1356
  /** GET /help-requests/mine — rank: any-builder */
1355
1357
  getHelpRequestsMine(args?: RequestArgs): Promise<GetHelpRequestsMineResponse>;
1356
1358
  };
1359
+ "home": {
1360
+ /** GET /home/city — rank: any-builder */
1361
+ getHomeCity(args?: RequestArgs): Promise<ApiResponse>;
1362
+ /** GET /home/gallery — rank: any-builder */
1363
+ getHomeGallery(args?: RequestArgs): Promise<ApiResponse>;
1364
+ /** PUT /home/gallery/{id}/heart — rank: any-builder */
1365
+ putHomeGalleryIdHeart(args?: RequestArgs): Promise<ApiResponse>;
1366
+ /** GET /home/studio/works — rank: any-builder */
1367
+ getHomeStudioWorks(args?: RequestArgs): Promise<ApiResponse>;
1368
+ };
1357
1369
  "inbox": {
1358
1370
  /** GET /inbox — rank: any-builder */
1359
1371
  getInbox(args?: RequestArgs): Promise<GetInboxResponse>;
@@ -389,6 +389,8 @@ export function createClient(opts = {}) {
389
389
  getCopyDeskQueue: (args) => request("GET", "/copy-desk/queue", { hasBody: false }, args),
390
390
  // GET /copy-desk/strings — rank: any-builder — GET /copy-desk/strings
391
391
  getCopyDeskStrings: (args) => request("GET", "/copy-desk/strings", { hasBody: false }, args),
392
+ // GET /copy-desk/studio — rank: any-builder — GET /copy-desk/studio
393
+ getCopyDeskStudio: (args) => request("GET", "/copy-desk/studio", { hasBody: false }, args),
392
394
  // GET /copy-desk/tally — rank: any-builder — GET /copy-desk/tally
393
395
  getCopyDeskTally: (args) => request("GET", "/copy-desk/tally", { hasBody: false }, args),
394
396
  },
@@ -698,6 +700,16 @@ export function createClient(opts = {}) {
698
700
  // GET /help-requests/mine — rank: any-builder — GET /help-requests/mine
699
701
  getHelpRequestsMine: (args) => request("GET", "/help-requests/mine", { hasBody: false }, args),
700
702
  },
703
+ "home": {
704
+ // GET /home/city — rank: any-builder — GET /home/city
705
+ getHomeCity: (args) => request("GET", "/home/city", { hasBody: false }, args),
706
+ // GET /home/gallery — rank: any-builder — GET /home/gallery
707
+ getHomeGallery: (args) => request("GET", "/home/gallery", { hasBody: false }, args),
708
+ // PUT /home/gallery/{id}/heart — rank: any-builder — PUT /home/gallery/:id/heart
709
+ putHomeGalleryIdHeart: (args) => request("PUT", "/home/gallery/{id}/heart", { hasBody: true }, args),
710
+ // GET /home/studio/works — rank: any-builder — GET /home/studio/works
711
+ getHomeStudioWorks: (args) => request("GET", "/home/studio/works", { hasBody: false }, args),
712
+ },
701
713
  "inbox": {
702
714
  // GET /inbox — rank: any-builder — GET /inbox
703
715
  getInbox: (args) => request("GET", "/inbox", { hasBody: false }, args),
@@ -177,6 +177,10 @@
177
177
  "name": "help-requests",
178
178
  "description": "Endpoints under `/api/bongos/help-requests`."
179
179
  },
180
+ {
181
+ "name": "home",
182
+ "description": "Endpoints under `/api/bongos/home`."
183
+ },
180
184
  {
181
185
  "name": "inbox",
182
186
  "description": "Endpoints under `/api/bongos/inbox`."
@@ -6228,6 +6232,37 @@
6228
6232
  ]
6229
6233
  }
6230
6234
  },
6235
+ "/copy-desk/studio": {
6236
+ "get": {
6237
+ "operationId": "get_copy_desk_studio",
6238
+ "tags": [
6239
+ "copy-desk"
6240
+ ],
6241
+ "summary": "GET /copy-desk/studio",
6242
+ "description": "GET /copy-desk/studio, the caller's easel, the pages waiting for an artist and the newest open flags. A work list, like /copy-desk/next and /copy-desk/queue, which any signed-in builder may already read.\n\n**Rank:** `any-builder` — Any authenticated builder (row-level ownership enforced in-handler).",
6243
+ "x-rank": "any-builder",
6244
+ "x-source": "modules/copy-desk/routes/copy-desk-studio.js",
6245
+ "responses": {
6246
+ "200": {
6247
+ "description": "Success."
6248
+ },
6249
+ "400": {
6250
+ "$ref": "#/components/responses/BadRequest"
6251
+ },
6252
+ "401": {
6253
+ "$ref": "#/components/responses/Unauthorized"
6254
+ },
6255
+ "403": {
6256
+ "$ref": "#/components/responses/Forbidden"
6257
+ }
6258
+ },
6259
+ "security": [
6260
+ {
6261
+ "builderSession": []
6262
+ }
6263
+ ]
6264
+ }
6265
+ },
6231
6266
  "/copy-desk/tally": {
6232
6267
  "get": {
6233
6268
  "operationId": "get_copy_desk_tally",
@@ -12885,6 +12920,144 @@
12885
12920
  ]
12886
12921
  }
12887
12922
  },
12923
+ "/home/city": {
12924
+ "get": {
12925
+ "operationId": "get_home_city",
12926
+ "tags": [
12927
+ "home"
12928
+ ],
12929
+ "summary": "GET /home/city",
12930
+ "description": "GET /home/city, the counts Home's city draws. Every number in it is a count of rows a signed-in builder can already list (shipped tasks, ideas, votes, open claims); the per-area \"waits on you\" half is the docket's routing for this viewer (task 1005056), computed inside the read. Nothing here is writable.\n\n**Rank:** `any-builder` — Any authenticated builder (row-level ownership enforced in-handler).",
12931
+ "x-rank": "any-builder",
12932
+ "x-source": "modules/lifecycle/routes/home-city.js",
12933
+ "responses": {
12934
+ "200": {
12935
+ "description": "Success."
12936
+ },
12937
+ "400": {
12938
+ "$ref": "#/components/responses/BadRequest"
12939
+ },
12940
+ "401": {
12941
+ "$ref": "#/components/responses/Unauthorized"
12942
+ },
12943
+ "403": {
12944
+ "$ref": "#/components/responses/Forbidden"
12945
+ }
12946
+ },
12947
+ "security": [
12948
+ {
12949
+ "builderSession": []
12950
+ }
12951
+ ]
12952
+ }
12953
+ },
12954
+ "/home/gallery": {
12955
+ "get": {
12956
+ "operationId": "get_home_gallery",
12957
+ "tags": [
12958
+ "home"
12959
+ ],
12960
+ "summary": "GET /home/gallery",
12961
+ "description": "GET /home/gallery?order=popular|latest, at most 60 works. Every work is a shipped task whose picture a signed-in builder can already open (the task-visuals audience); a work under a private goal the viewer cannot read is left off. Each carries its heart count and whether the viewer gave one.\n\n**Rank:** `any-builder` — Any authenticated builder (row-level ownership enforced in-handler).",
12962
+ "x-rank": "any-builder",
12963
+ "x-source": "modules/lifecycle/routes/home-gallery.js",
12964
+ "responses": {
12965
+ "200": {
12966
+ "description": "Success."
12967
+ },
12968
+ "400": {
12969
+ "$ref": "#/components/responses/BadRequest"
12970
+ },
12971
+ "401": {
12972
+ "$ref": "#/components/responses/Unauthorized"
12973
+ },
12974
+ "403": {
12975
+ "$ref": "#/components/responses/Forbidden"
12976
+ }
12977
+ },
12978
+ "security": [
12979
+ {
12980
+ "builderSession": []
12981
+ }
12982
+ ]
12983
+ }
12984
+ },
12985
+ "/home/gallery/{id}/heart": {
12986
+ "put": {
12987
+ "operationId": "put_home_gallery_id_heart",
12988
+ "tags": [
12989
+ "home"
12990
+ ],
12991
+ "summary": "PUT /home/gallery/:id/heart",
12992
+ "description": "PUT /home/gallery/:id/heart { on }. Appreciation, never a grade: one heart per builder per work, given or taken back by the builder themself (the caller, never the body). Refused for anything their wall would not hang.\n\n**Rank:** `any-builder` — Any authenticated builder (row-level ownership enforced in-handler).",
12993
+ "x-rank": "any-builder",
12994
+ "x-source": "modules/lifecycle/routes/home-gallery.js",
12995
+ "parameters": [
12996
+ {
12997
+ "name": "id",
12998
+ "in": "path",
12999
+ "required": true,
13000
+ "schema": {
13001
+ "type": "string"
13002
+ },
13003
+ "description": "Path parameter `id`."
13004
+ }
13005
+ ],
13006
+ "responses": {
13007
+ "200": {
13008
+ "description": "Success."
13009
+ },
13010
+ "400": {
13011
+ "$ref": "#/components/responses/BadRequest"
13012
+ },
13013
+ "401": {
13014
+ "$ref": "#/components/responses/Unauthorized"
13015
+ },
13016
+ "403": {
13017
+ "$ref": "#/components/responses/Forbidden"
13018
+ },
13019
+ "404": {
13020
+ "$ref": "#/components/responses/NotFound"
13021
+ }
13022
+ },
13023
+ "security": [
13024
+ {
13025
+ "builderSession": []
13026
+ }
13027
+ ]
13028
+ }
13029
+ },
13030
+ "/home/studio/works": {
13031
+ "get": {
13032
+ "operationId": "get_home_studio_works",
13033
+ "tags": [
13034
+ "home"
13035
+ ],
13036
+ "summary": "GET /home/studio/works",
13037
+ "description": "GET /home/studio/works?page=<page id>, the studio's two shelves (task 1005061): the works the CALLER appreciated and the works the caller signed, at most six each, and the easel page's newest work, all by the wall's own rule.\n\n**Rank:** `any-builder` — Any authenticated builder (row-level ownership enforced in-handler).",
13038
+ "x-rank": "any-builder",
13039
+ "x-source": "modules/lifecycle/routes/home-gallery.js",
13040
+ "responses": {
13041
+ "200": {
13042
+ "description": "Success."
13043
+ },
13044
+ "400": {
13045
+ "$ref": "#/components/responses/BadRequest"
13046
+ },
13047
+ "401": {
13048
+ "$ref": "#/components/responses/Unauthorized"
13049
+ },
13050
+ "403": {
13051
+ "$ref": "#/components/responses/Forbidden"
13052
+ }
13053
+ },
13054
+ "security": [
13055
+ {
13056
+ "builderSession": []
13057
+ }
13058
+ ]
13059
+ }
13060
+ },
12888
13061
  "/inbox": {
12889
13062
  "get": {
12890
13063
  "operationId": "get_inbox",
@@ -42734,7 +42907,7 @@
42734
42907
  "description": "A required dependency/feature is not configured or is temporarily down."
42735
42908
  }
42736
42909
  },
42737
- "x-endpoint-count": 679,
42910
+ "x-endpoint-count": 684,
42738
42911
  "x-schema-count": 719,
42739
42912
  "x-undocumented-bodies": 12,
42740
42913
  "x-response-schemas": 457,
@@ -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. 679 endpoints across 114 route files.
5
+ > **Generated from the live route files** — the route file is authoritative. 684 endpoints across 117 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`.
@@ -221,7 +221,7 @@ Base path: `/api/bongos`. Ranks (enforced server-side, [ADR 0016](adr/0016-trust
221
221
  | GET | `/api/bongos/connections/requests` | `any-builder` | — | MY pending requests, both directions (own data). |
222
222
  | GET | `/api/bongos/connections/suggestions` | `any-builder` | — | "builders you may know" (R21, task 1002297; ADR 0202 D5). |
223
223
 
224
- ## `copy-desk` (21)
224
+ ## `copy-desk` (22)
225
225
 
226
226
  | Method | Path | Rank | Body | Description |
227
227
  |---|---|---|---|---|
@@ -245,6 +245,7 @@ Base path: `/api/bongos`. Ranks (enforced server-side, [ADR 0016](adr/0016-trust
245
245
  | POST | `/api/bongos/copy-desk/proposals` | `any-builder` | `string_id`, `proposed_text`, `why`, `file`, `line`, `flag_id` | ------------------------------------------------------------------------- POST /copy-desk/proposals — an artist proposes new wording, and… |
246
246
  | GET | `/api/bongos/copy-desk/queue` | `any-builder` | — | ------------------------------------------------------------------------- GET /copy-desk/queue — the artist's working list. |
247
247
  | GET | `/api/bongos/copy-desk/strings` | `any-builder` | — | ------------------------------------------------------------------------- GET /copy-desk/strings — search the inventory, to find somethin… |
248
+ | GET | `/api/bongos/copy-desk/studio` | `any-builder` | — | GET /copy-desk/studio, the caller's easel, the pages waiting for an artist and the newest open flags. |
248
249
  | GET | `/api/bongos/copy-desk/tally` | `any-builder` | — | ------------------------------------------------------------------------- GET /copy-desk/tally — the caller's corner tally in the studio:… |
249
250
 
250
251
  ## `core-update` (1)
@@ -472,6 +473,15 @@ Base path: `/api/bongos`. Ranks (enforced server-side, [ADR 0016](adr/0016-trust
472
473
  | GET | `/api/bongos/help-requests/for-me` | `any-builder` | — | The addressed read — C01's answer to "and fires a notification". |
473
474
  | GET | `/api/bongos/help-requests/mine` | `any-builder` | — | your own asks, so you can settle them. |
474
475
 
476
+ ## `home` (4)
477
+
478
+ | Method | Path | Rank | Body | Description |
479
+ |---|---|---|---|---|
480
+ | GET | `/api/bongos/home/city` | `any-builder` | — | GET /home/city, the counts Home's city draws. |
481
+ | GET | `/api/bongos/home/gallery` | `any-builder` | — | GET /home/gallery?order=popular\|latest, at most 60 works. |
482
+ | PUT | `/api/bongos/home/gallery/:id/heart` | `any-builder` | — | PUT /home/gallery/:id/heart { on }. |
483
+ | GET | `/api/bongos/home/studio/works` | `any-builder` | — | GET /home/studio/works?page=<page id>, the studio's two shelves (task 1005061): the works the CALLER appreciated and the works the caller… |
484
+
475
485
  ## `inbox` (20)
476
486
 
477
487
  | Method | Path | Rank | Body | Description |