@bongos/core 1.21.39 → 1.21.41

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 (88) hide show
  1. package/.bongos-core.json +144 -84
  2. package/clients/bongos-client/README.md +1 -1
  3. package/clients/bongos-client/bongos-client.global.js +16 -0
  4. package/clients/bongos-client/index.cjs +16 -0
  5. package/clients/bongos-client/index.d.ts +25 -0
  6. package/clients/bongos-client/index.mjs +16 -0
  7. package/docs/api/openapi.json +492 -3
  8. package/docs/api-reference.md +13 -1
  9. package/docs/copy-inventory.md +29 -13
  10. package/docs/copy-registry.json +177 -23
  11. package/docs/file-map.md +1 -0
  12. package/docs/module-api-changelog.md +4 -0
  13. package/docs/page-inventory.json +14 -2
  14. package/docs/page-readings.json +601 -554
  15. package/modules/government/docket.js +14 -0
  16. package/modules/hall-ui/public/atlas.html +3 -3
  17. package/modules/hall-ui/public/blockers.html +3 -3
  18. package/modules/hall-ui/public/board-room.html +3 -3
  19. package/modules/hall-ui/public/city.html +3 -3
  20. package/modules/hall-ui/public/collab.html +3 -3
  21. package/modules/hall-ui/public/commands.html +3 -3
  22. package/modules/hall-ui/public/copy-desk.html +3 -3
  23. package/modules/hall-ui/public/craft-mode.js +62 -0
  24. package/modules/hall-ui/public/deploy.html +3 -3
  25. package/modules/hall-ui/public/diagrams.html +3 -3
  26. package/modules/hall-ui/public/drachmae.html +3 -3
  27. package/modules/hall-ui/public/fleet.html +3 -3
  28. package/modules/hall-ui/public/gate.html +3 -3
  29. package/modules/hall-ui/public/goal-map.html +3 -3
  30. package/modules/hall-ui/public/goals.html +3 -3
  31. package/modules/hall-ui/public/government.html +3 -3
  32. package/modules/hall-ui/public/idea.html +3 -3
  33. package/modules/hall-ui/public/ideas.html +3 -3
  34. package/modules/hall-ui/public/index.html +3 -3
  35. package/modules/hall-ui/public/modules.html +3 -3
  36. package/modules/hall-ui/public/page-notes.js +320 -0
  37. package/modules/hall-ui/public/primer.html +3 -3
  38. package/modules/hall-ui/public/profile.html +3 -3
  39. package/modules/hall-ui/public/project-settings.html +3 -3
  40. package/modules/hall-ui/public/ranks.html +3 -3
  41. package/modules/hall-ui/public/roadmap.html +3 -3
  42. package/modules/hall-ui/public/roster.html +3 -3
  43. package/modules/hall-ui/public/sessions.html +3 -3
  44. package/modules/hall-ui/public/settings.html +3 -3
  45. package/modules/hall-ui/public/street-card.css +21 -2
  46. package/modules/hall-ui/public/street-card.js +198 -64
  47. package/modules/hall-ui/public/street-card.states.json +495 -7
  48. package/modules/hall-ui/public/street-desk.js +47 -2
  49. package/modules/hall-ui/public/street.css +1 -3
  50. package/modules/hall-ui/public/street.html +3 -4
  51. package/modules/hall-ui/public/street.js +42 -15
  52. package/modules/hall-ui/public/studio.html +3 -3
  53. package/modules/hall-ui/public/style.css +144 -0
  54. package/modules/hall-ui/public/task.html +3 -3
  55. package/modules/hall-ui/public/thinking.html +3 -3
  56. package/modules/hall-ui/public/tweak-editor.html +3 -3
  57. package/modules/hall-ui/public/watch.html +3 -3
  58. package/modules/hall-ui/public/work.html +3 -3
  59. package/modules/hall-ui/records/page-notes.md +16 -0
  60. package/modules/ideas/governor-docket.js +2 -0
  61. package/modules/lifecycle/governor-docket.js +4 -0
  62. package/modules/onboarding/routes/access-requests.js +2 -0
  63. package/modules/page-notes/CLAUDE.md +15 -0
  64. package/modules/page-notes/db.js +147 -0
  65. package/modules/page-notes/migrations/page_notes_001_notes.sql +68 -0
  66. package/modules/page-notes/module.json +13 -0
  67. package/modules/page-notes/notes.js +174 -0
  68. package/modules/page-notes/routes/page-notes.js +172 -0
  69. package/modules/page-notes/split.js +68 -0
  70. package/modules/provisioning/starter-bundles.js +1 -0
  71. package/modules/security/routes/reports.js +3 -0
  72. package/modules/ui-design/kit/serve.js +1 -1
  73. package/package-lock.json +2 -2
  74. package/package.json +1 -1
  75. package/release-notes.json +12 -0
  76. package/scripts/gds/publish-manifest.js +1 -0
  77. package/src/bongos/module-rechecks.js +12 -1
  78. package/src/bongos/module-scope-map.js +4 -0
  79. package/src/bongos/routes.js +4 -1
  80. package/src/module-api.js +1 -1
  81. package/tests/governor_docket.mjs +20 -0
  82. package/tests/hall_matter_card.mjs +143 -18
  83. package/tests/hall_street.mjs +1 -1
  84. package/tests/hall_tweak_editor.mjs +1 -1
  85. package/tests/module_loader.mjs +1 -1
  86. package/tests/page_notes.mjs +289 -0
  87. package/tests/page_notes_db.mjs +140 -0
  88. package/tests/page_notes_panel.mjs +145 -0
@@ -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
- - 503 operations across 73 resource groups
8
+ - 510 operations across 74 resource groups
9
9
 
10
10
  ## Use it from your project
11
11
 
@@ -808,6 +808,22 @@ function createClient(opts = {}) {
808
808
  // POST /override-requests/{id}/decide — rank: metic+archon — POST /override-requests/:id/decide
809
809
  postOverrideRequestsIdDecide: (args) => request("POST", "/override-requests/{id}/decide", { hasBody: true }, args),
810
810
  },
811
+ "pageNotes": {
812
+ // GET /page-notes — rank: any-builder — GET /page-notes
813
+ getPageNotes: (args) => request("GET", "/page-notes", { hasBody: false }, args),
814
+ // POST /page-notes — rank: any-builder — POST /page-notes
815
+ postPageNotes: (args) => request("POST", "/page-notes", { hasBody: true }, args),
816
+ // GET /page-notes/{id} — rank: any-builder — GET /page-notes/:id
817
+ getPageNotesId: (args) => request("GET", "/page-notes/{id}", { hasBody: false }, args),
818
+ // PATCH /page-notes/{id} — rank: any-builder — PATCH /page-notes/:id
819
+ patchPageNotesId: (args) => request("PATCH", "/page-notes/{id}", { hasBody: true }, args),
820
+ // POST /page-notes/{id}/images — rank: any-builder — POST /page-notes/:id/images
821
+ postPageNotesIdImages: (args) => request("POST", "/page-notes/{id}/images", { hasBody: true }, args),
822
+ // POST /page-notes/{id}/submit — rank: any-builder — POST /page-notes/:id/submit
823
+ postPageNotesIdSubmit: (args) => request("POST", "/page-notes/{id}/submit", { hasBody: true }, args),
824
+ // GET /page-notes/images/{id} — rank: any-builder — GET /page-notes/images/:id
825
+ getPageNotesImagesId: (args) => request("GET", "/page-notes/images/{id}", { hasBody: false }, args),
826
+ },
811
827
  "profiles": {
812
828
  // GET /profiles/{handle} — rank: public — GET /profiles/:handle
813
829
  getProfilesHandle: (args) => request("GET", "/profiles/{handle}", { hasBody: false }, args),
@@ -807,6 +807,22 @@ function createClient(opts = {}) {
807
807
  // POST /override-requests/{id}/decide — rank: metic+archon — POST /override-requests/:id/decide
808
808
  postOverrideRequestsIdDecide: (args) => request("POST", "/override-requests/{id}/decide", { hasBody: true }, args),
809
809
  },
810
+ "pageNotes": {
811
+ // GET /page-notes — rank: any-builder — GET /page-notes
812
+ getPageNotes: (args) => request("GET", "/page-notes", { hasBody: false }, args),
813
+ // POST /page-notes — rank: any-builder — POST /page-notes
814
+ postPageNotes: (args) => request("POST", "/page-notes", { hasBody: true }, args),
815
+ // GET /page-notes/{id} — rank: any-builder — GET /page-notes/:id
816
+ getPageNotesId: (args) => request("GET", "/page-notes/{id}", { hasBody: false }, args),
817
+ // PATCH /page-notes/{id} — rank: any-builder — PATCH /page-notes/:id
818
+ patchPageNotesId: (args) => request("PATCH", "/page-notes/{id}", { hasBody: true }, args),
819
+ // POST /page-notes/{id}/images — rank: any-builder — POST /page-notes/:id/images
820
+ postPageNotesIdImages: (args) => request("POST", "/page-notes/{id}/images", { hasBody: true }, args),
821
+ // POST /page-notes/{id}/submit — rank: any-builder — POST /page-notes/:id/submit
822
+ postPageNotesIdSubmit: (args) => request("POST", "/page-notes/{id}/submit", { hasBody: true }, args),
823
+ // GET /page-notes/images/{id} — rank: any-builder — GET /page-notes/images/:id
824
+ getPageNotesImagesId: (args) => request("GET", "/page-notes/images/{id}", { hasBody: false }, args),
825
+ },
810
826
  "profiles": {
811
827
  // GET /profiles/{handle} — rank: public — GET /profiles/:handle
812
828
  getProfilesHandle: (args) => request("GET", "/profiles/{handle}", { hasBody: false }, args),
@@ -117,6 +117,8 @@ export interface GetModulesSubmissionsResponse { submissions: unknown }
117
117
  export interface GetMyProjectsInvitesResponse { invites: unknown }
118
118
  export interface GetMyProjectsResponse { owned: unknown; building: unknown; applied: unknown }
119
119
  export interface GetOverrideRequestsResponse { requests: unknown }
120
+ export interface GetPageNotesIdResponse { note: unknown; images: unknown; ideas: unknown }
121
+ export interface GetPageNotesResponse { page_id: unknown; notes: unknown }
120
122
  export interface GetProfilesHandleResponse { account: unknown; cross_project: unknown }
121
123
  export interface GetProjectSettingsResponse { rows: unknown }
122
124
  export interface GetProjectsFeaturedResponse { projects: unknown; page: PageInfo }
@@ -220,6 +222,8 @@ export interface PatchMeProfileRequest { display_name?: unknown; bio?: unknown;
220
222
  export interface PatchMeProfileResponse { display_name: unknown; bio: unknown; links: unknown }
221
223
  export interface PatchMeSkillPrefsResponse { prefs: unknown; effective: unknown; defaults: unknown; known_skills: unknown; allowed_models: unknown }
222
224
  export interface PatchMeSoundPrefsResponse { prefs: unknown; effective: unknown; effective_map: unknown; volume: unknown; defaults: unknown; known_sounds: unknown }
225
+ export interface PatchPageNotesIdRequest { body_md: string }
226
+ export interface PatchPageNotesIdResponse { ok: boolean; updated_at: unknown }
223
227
  export interface PatchProjectSettingsRotDaysRequest { days: number }
224
228
  export interface PatchProjectSettingsRotDaysResponse { ok: boolean; rot_days: unknown; source: unknown; describe: unknown }
225
229
  export interface PatchProjectsIdFeaturedRequest { featured: boolean }
@@ -412,6 +416,11 @@ export interface PostMyProjectsJoinResponse { ok: boolean; status: unknown; proj
412
416
  export interface PostNpmReleasePreviewRequest { version: string }
413
417
  export interface PostNpmReleaseReleaseRequest { version: string }
414
418
  export interface PostOverrideRequestsIdDecideRequest { decision: string; note?: string }
419
+ export interface PostPageNotesIdImagesRequest { content_type: string; data: string; name?: string }
420
+ export interface PostPageNotesIdImagesResponse { image: unknown }
421
+ export interface PostPageNotesIdSubmitResponse { ok: boolean; status: unknown; note_id: unknown }
422
+ export interface PostPageNotesRequest { page_id: string; page_path?: string; page_title?: string }
423
+ export interface PostPageNotesResponse { note: unknown; images: unknown }
415
424
  export interface PostProjectsInviteRequest { client_id: string; github_login: string }
416
425
  export interface PostProjectsInviteResponse { invited: boolean; invite_url: unknown }
417
426
  export interface PostProjectsProjectIdSpecialitiesRequest { name: string; discipline: string; summary?: string; contract_md?: string; visibility?: string; sellable?: boolean; skills?: string[] }
@@ -1278,6 +1287,22 @@ export interface BongosClient {
1278
1287
  /** POST /override-requests/{id}/decide — rank: metic+archon */
1279
1288
  postOverrideRequestsIdDecide(args: RequestArgs & { body: PostOverrideRequestsIdDecideRequest }): Promise<ApiResponse>;
1280
1289
  };
1290
+ "pageNotes": {
1291
+ /** GET /page-notes — rank: any-builder */
1292
+ getPageNotes(args?: RequestArgs): Promise<GetPageNotesResponse>;
1293
+ /** POST /page-notes — rank: any-builder */
1294
+ postPageNotes(args: RequestArgs & { body: PostPageNotesRequest }): Promise<PostPageNotesResponse>;
1295
+ /** GET /page-notes/{id} — rank: any-builder */
1296
+ getPageNotesId(args?: RequestArgs): Promise<GetPageNotesIdResponse>;
1297
+ /** PATCH /page-notes/{id} — rank: any-builder */
1298
+ patchPageNotesId(args: RequestArgs & { body: PatchPageNotesIdRequest }): Promise<PatchPageNotesIdResponse>;
1299
+ /** POST /page-notes/{id}/images — rank: any-builder */
1300
+ postPageNotesIdImages(args: RequestArgs & { body: PostPageNotesIdImagesRequest }): Promise<PostPageNotesIdImagesResponse>;
1301
+ /** POST /page-notes/{id}/submit — rank: any-builder */
1302
+ postPageNotesIdSubmit(args?: RequestArgs): Promise<PostPageNotesIdSubmitResponse>;
1303
+ /** GET /page-notes/images/{id} — rank: any-builder */
1304
+ getPageNotesImagesId(args?: RequestArgs): Promise<ApiResponse>;
1305
+ };
1281
1306
  "profiles": {
1282
1307
  /** GET /profiles/{handle} — rank: public */
1283
1308
  getProfilesHandle(args?: RequestArgs): Promise<GetProfilesHandleResponse>;
@@ -804,6 +804,22 @@ export function createClient(opts = {}) {
804
804
  // POST /override-requests/{id}/decide — rank: metic+archon — POST /override-requests/:id/decide
805
805
  postOverrideRequestsIdDecide: (args) => request("POST", "/override-requests/{id}/decide", { hasBody: true }, args),
806
806
  },
807
+ "pageNotes": {
808
+ // GET /page-notes — rank: any-builder — GET /page-notes
809
+ getPageNotes: (args) => request("GET", "/page-notes", { hasBody: false }, args),
810
+ // POST /page-notes — rank: any-builder — POST /page-notes
811
+ postPageNotes: (args) => request("POST", "/page-notes", { hasBody: true }, args),
812
+ // GET /page-notes/{id} — rank: any-builder — GET /page-notes/:id
813
+ getPageNotesId: (args) => request("GET", "/page-notes/{id}", { hasBody: false }, args),
814
+ // PATCH /page-notes/{id} — rank: any-builder — PATCH /page-notes/:id
815
+ patchPageNotesId: (args) => request("PATCH", "/page-notes/{id}", { hasBody: true }, args),
816
+ // POST /page-notes/{id}/images — rank: any-builder — POST /page-notes/:id/images
817
+ postPageNotesIdImages: (args) => request("POST", "/page-notes/{id}/images", { hasBody: true }, args),
818
+ // POST /page-notes/{id}/submit — rank: any-builder — POST /page-notes/:id/submit
819
+ postPageNotesIdSubmit: (args) => request("POST", "/page-notes/{id}/submit", { hasBody: true }, args),
820
+ // GET /page-notes/images/{id} — rank: any-builder — GET /page-notes/images/:id
821
+ getPageNotesImagesId: (args) => request("GET", "/page-notes/images/{id}", { hasBody: false }, args),
822
+ },
807
823
  "profiles": {
808
824
  // GET /profiles/{handle} — rank: public — GET /profiles/:handle
809
825
  getProfilesHandle: (args) => request("GET", "/profiles/{handle}", { hasBody: false }, args),
@@ -225,6 +225,10 @@
225
225
  "name": "override-requests",
226
226
  "description": "Endpoints under `/api/bongos/override-requests`."
227
227
  },
228
+ {
229
+ "name": "page-notes",
230
+ "description": "Endpoints under `/api/bongos/page-notes`."
231
+ },
228
232
  {
229
233
  "name": "profiles",
230
234
  "description": "Endpoints under `/api/bongos/profiles`."
@@ -14731,6 +14735,364 @@
14731
14735
  ]
14732
14736
  }
14733
14737
  },
14738
+ "/page-notes": {
14739
+ "get": {
14740
+ "operationId": "get_page_notes",
14741
+ "tags": [
14742
+ "page-notes"
14743
+ ],
14744
+ "summary": "GET /page-notes",
14745
+ "description": "**Rank:** `any-builder` — Any authenticated builder (row-level ownership enforced in-handler).",
14746
+ "x-rank": "any-builder",
14747
+ "x-source": "modules/page-notes/routes/page-notes.js",
14748
+ "responses": {
14749
+ "200": {
14750
+ "description": "Success.",
14751
+ "content": {
14752
+ "application/json": {
14753
+ "schema": {
14754
+ "$ref": "#/components/schemas/GetPageNotesResponse"
14755
+ }
14756
+ }
14757
+ }
14758
+ },
14759
+ "400": {
14760
+ "$ref": "#/components/responses/BadRequest"
14761
+ },
14762
+ "401": {
14763
+ "$ref": "#/components/responses/Unauthorized"
14764
+ },
14765
+ "403": {
14766
+ "$ref": "#/components/responses/Forbidden"
14767
+ }
14768
+ },
14769
+ "security": [
14770
+ {
14771
+ "builderSession": []
14772
+ }
14773
+ ]
14774
+ },
14775
+ "post": {
14776
+ "operationId": "post_page_notes",
14777
+ "tags": [
14778
+ "page-notes"
14779
+ ],
14780
+ "summary": "POST /page-notes",
14781
+ "description": "**Rank:** `any-builder` — Any authenticated builder (row-level ownership enforced in-handler).",
14782
+ "x-rank": "any-builder",
14783
+ "x-source": "modules/page-notes/routes/page-notes.js",
14784
+ "requestBody": {
14785
+ "required": true,
14786
+ "content": {
14787
+ "application/json": {
14788
+ "schema": {
14789
+ "$ref": "#/components/schemas/PostPageNotesRequest"
14790
+ }
14791
+ }
14792
+ },
14793
+ "x-validated": true
14794
+ },
14795
+ "responses": {
14796
+ "200": {
14797
+ "description": "Success.",
14798
+ "content": {
14799
+ "application/json": {
14800
+ "schema": {
14801
+ "$ref": "#/components/schemas/PostPageNotesResponse"
14802
+ }
14803
+ }
14804
+ }
14805
+ },
14806
+ "400": {
14807
+ "$ref": "#/components/responses/ValidationFailed"
14808
+ },
14809
+ "401": {
14810
+ "$ref": "#/components/responses/Unauthorized"
14811
+ },
14812
+ "403": {
14813
+ "$ref": "#/components/responses/Forbidden"
14814
+ }
14815
+ },
14816
+ "security": [
14817
+ {
14818
+ "builderSession": []
14819
+ }
14820
+ ]
14821
+ }
14822
+ },
14823
+ "/page-notes/images/{id}": {
14824
+ "get": {
14825
+ "operationId": "get_page_notes_images_id",
14826
+ "tags": [
14827
+ "page-notes"
14828
+ ],
14829
+ "summary": "GET /page-notes/images/:id",
14830
+ "description": "**Rank:** `any-builder` — Any authenticated builder (row-level ownership enforced in-handler).",
14831
+ "x-rank": "any-builder",
14832
+ "x-source": "modules/page-notes/routes/page-notes.js",
14833
+ "parameters": [
14834
+ {
14835
+ "name": "id",
14836
+ "in": "path",
14837
+ "required": true,
14838
+ "schema": {
14839
+ "type": "string"
14840
+ },
14841
+ "description": "Path parameter `id`."
14842
+ }
14843
+ ],
14844
+ "responses": {
14845
+ "200": {
14846
+ "description": "Success."
14847
+ },
14848
+ "400": {
14849
+ "$ref": "#/components/responses/BadRequest"
14850
+ },
14851
+ "401": {
14852
+ "$ref": "#/components/responses/Unauthorized"
14853
+ },
14854
+ "403": {
14855
+ "$ref": "#/components/responses/Forbidden"
14856
+ },
14857
+ "404": {
14858
+ "$ref": "#/components/responses/NotFound"
14859
+ }
14860
+ },
14861
+ "security": [
14862
+ {
14863
+ "builderSession": []
14864
+ }
14865
+ ]
14866
+ }
14867
+ },
14868
+ "/page-notes/{id}": {
14869
+ "get": {
14870
+ "operationId": "get_page_notes_id",
14871
+ "tags": [
14872
+ "page-notes"
14873
+ ],
14874
+ "summary": "GET /page-notes/:id",
14875
+ "description": "**Rank:** `any-builder` — Any authenticated builder (row-level ownership enforced in-handler).",
14876
+ "x-rank": "any-builder",
14877
+ "x-source": "modules/page-notes/routes/page-notes.js",
14878
+ "parameters": [
14879
+ {
14880
+ "name": "id",
14881
+ "in": "path",
14882
+ "required": true,
14883
+ "schema": {
14884
+ "type": "string"
14885
+ },
14886
+ "description": "Path parameter `id`."
14887
+ }
14888
+ ],
14889
+ "responses": {
14890
+ "200": {
14891
+ "description": "Success.",
14892
+ "content": {
14893
+ "application/json": {
14894
+ "schema": {
14895
+ "$ref": "#/components/schemas/GetPageNotesIdResponse"
14896
+ }
14897
+ }
14898
+ }
14899
+ },
14900
+ "400": {
14901
+ "$ref": "#/components/responses/BadRequest"
14902
+ },
14903
+ "401": {
14904
+ "$ref": "#/components/responses/Unauthorized"
14905
+ },
14906
+ "403": {
14907
+ "$ref": "#/components/responses/Forbidden"
14908
+ },
14909
+ "404": {
14910
+ "$ref": "#/components/responses/NotFound"
14911
+ }
14912
+ },
14913
+ "security": [
14914
+ {
14915
+ "builderSession": []
14916
+ }
14917
+ ]
14918
+ },
14919
+ "patch": {
14920
+ "operationId": "patch_page_notes_id",
14921
+ "tags": [
14922
+ "page-notes"
14923
+ ],
14924
+ "summary": "PATCH /page-notes/:id",
14925
+ "description": "**Rank:** `any-builder` — Any authenticated builder (row-level ownership enforced in-handler).",
14926
+ "x-rank": "any-builder",
14927
+ "x-source": "modules/page-notes/routes/page-notes.js",
14928
+ "parameters": [
14929
+ {
14930
+ "name": "id",
14931
+ "in": "path",
14932
+ "required": true,
14933
+ "schema": {
14934
+ "type": "string"
14935
+ },
14936
+ "description": "Path parameter `id`."
14937
+ }
14938
+ ],
14939
+ "requestBody": {
14940
+ "required": true,
14941
+ "content": {
14942
+ "application/json": {
14943
+ "schema": {
14944
+ "$ref": "#/components/schemas/PatchPageNotesIdRequest"
14945
+ }
14946
+ }
14947
+ },
14948
+ "x-validated": true
14949
+ },
14950
+ "responses": {
14951
+ "200": {
14952
+ "description": "Success.",
14953
+ "content": {
14954
+ "application/json": {
14955
+ "schema": {
14956
+ "$ref": "#/components/schemas/PatchPageNotesIdResponse"
14957
+ }
14958
+ }
14959
+ }
14960
+ },
14961
+ "400": {
14962
+ "$ref": "#/components/responses/ValidationFailed"
14963
+ },
14964
+ "401": {
14965
+ "$ref": "#/components/responses/Unauthorized"
14966
+ },
14967
+ "403": {
14968
+ "$ref": "#/components/responses/Forbidden"
14969
+ },
14970
+ "404": {
14971
+ "$ref": "#/components/responses/NotFound"
14972
+ }
14973
+ },
14974
+ "security": [
14975
+ {
14976
+ "builderSession": []
14977
+ }
14978
+ ]
14979
+ }
14980
+ },
14981
+ "/page-notes/{id}/images": {
14982
+ "post": {
14983
+ "operationId": "post_page_notes_id_images",
14984
+ "tags": [
14985
+ "page-notes"
14986
+ ],
14987
+ "summary": "POST /page-notes/:id/images",
14988
+ "description": "**Rank:** `any-builder` — Any authenticated builder (row-level ownership enforced in-handler).",
14989
+ "x-rank": "any-builder",
14990
+ "x-source": "modules/page-notes/routes/page-notes.js",
14991
+ "parameters": [
14992
+ {
14993
+ "name": "id",
14994
+ "in": "path",
14995
+ "required": true,
14996
+ "schema": {
14997
+ "type": "string"
14998
+ },
14999
+ "description": "Path parameter `id`."
15000
+ }
15001
+ ],
15002
+ "requestBody": {
15003
+ "required": true,
15004
+ "content": {
15005
+ "application/json": {
15006
+ "schema": {
15007
+ "$ref": "#/components/schemas/PostPageNotesIdImagesRequest"
15008
+ }
15009
+ }
15010
+ },
15011
+ "x-validated": true
15012
+ },
15013
+ "responses": {
15014
+ "200": {
15015
+ "description": "Success.",
15016
+ "content": {
15017
+ "application/json": {
15018
+ "schema": {
15019
+ "$ref": "#/components/schemas/PostPageNotesIdImagesResponse"
15020
+ }
15021
+ }
15022
+ }
15023
+ },
15024
+ "400": {
15025
+ "$ref": "#/components/responses/ValidationFailed"
15026
+ },
15027
+ "401": {
15028
+ "$ref": "#/components/responses/Unauthorized"
15029
+ },
15030
+ "403": {
15031
+ "$ref": "#/components/responses/Forbidden"
15032
+ },
15033
+ "404": {
15034
+ "$ref": "#/components/responses/NotFound"
15035
+ }
15036
+ },
15037
+ "security": [
15038
+ {
15039
+ "builderSession": []
15040
+ }
15041
+ ]
15042
+ }
15043
+ },
15044
+ "/page-notes/{id}/submit": {
15045
+ "post": {
15046
+ "operationId": "post_page_notes_id_submit",
15047
+ "tags": [
15048
+ "page-notes"
15049
+ ],
15050
+ "summary": "POST /page-notes/:id/submit",
15051
+ "description": "**Rank:** `any-builder` — Any authenticated builder (row-level ownership enforced in-handler).",
15052
+ "x-rank": "any-builder",
15053
+ "x-source": "modules/page-notes/routes/page-notes.js",
15054
+ "parameters": [
15055
+ {
15056
+ "name": "id",
15057
+ "in": "path",
15058
+ "required": true,
15059
+ "schema": {
15060
+ "type": "string"
15061
+ },
15062
+ "description": "Path parameter `id`."
15063
+ }
15064
+ ],
15065
+ "responses": {
15066
+ "200": {
15067
+ "description": "Success.",
15068
+ "content": {
15069
+ "application/json": {
15070
+ "schema": {
15071
+ "$ref": "#/components/schemas/PostPageNotesIdSubmitResponse"
15072
+ }
15073
+ }
15074
+ }
15075
+ },
15076
+ "400": {
15077
+ "$ref": "#/components/responses/BadRequest"
15078
+ },
15079
+ "401": {
15080
+ "$ref": "#/components/responses/Unauthorized"
15081
+ },
15082
+ "403": {
15083
+ "$ref": "#/components/responses/Forbidden"
15084
+ },
15085
+ "404": {
15086
+ "$ref": "#/components/responses/NotFound"
15087
+ }
15088
+ },
15089
+ "security": [
15090
+ {
15091
+ "builderSession": []
15092
+ }
15093
+ ]
15094
+ }
15095
+ },
14734
15096
  "/profiles/{handle}": {
14735
15097
  "get": {
14736
15098
  "operationId": "get_profiles_handle",
@@ -25154,6 +25516,30 @@
25154
25516
  "requests"
25155
25517
  ]
25156
25518
  },
25519
+ "GetPageNotesIdResponse": {
25520
+ "type": "object",
25521
+ "properties": {
25522
+ "note": {},
25523
+ "images": {},
25524
+ "ideas": {}
25525
+ },
25526
+ "required": [
25527
+ "note",
25528
+ "images",
25529
+ "ideas"
25530
+ ]
25531
+ },
25532
+ "GetPageNotesResponse": {
25533
+ "type": "object",
25534
+ "properties": {
25535
+ "page_id": {},
25536
+ "notes": {}
25537
+ },
25538
+ "required": [
25539
+ "page_id",
25540
+ "notes"
25541
+ ]
25542
+ },
25157
25543
  "GetProfilesHandleResponse": {
25158
25544
  "type": "object",
25159
25545
  "properties": {
@@ -26478,6 +26864,31 @@
26478
26864
  "known_sounds"
26479
26865
  ]
26480
26866
  },
26867
+ "PatchPageNotesIdRequest": {
26868
+ "type": "object",
26869
+ "properties": {
26870
+ "body_md": {
26871
+ "type": "string"
26872
+ }
26873
+ },
26874
+ "required": [
26875
+ "body_md"
26876
+ ],
26877
+ "additionalProperties": false
26878
+ },
26879
+ "PatchPageNotesIdResponse": {
26880
+ "type": "object",
26881
+ "properties": {
26882
+ "ok": {
26883
+ "type": "boolean"
26884
+ },
26885
+ "updated_at": {}
26886
+ },
26887
+ "required": [
26888
+ "ok",
26889
+ "updated_at"
26890
+ ]
26891
+ },
26481
26892
  "PatchProjectSettingsRotDaysRequest": {
26482
26893
  "type": "object",
26483
26894
  "properties": {
@@ -29755,6 +30166,84 @@
29755
30166
  ],
29756
30167
  "additionalProperties": false
29757
30168
  },
30169
+ "PostPageNotesIdImagesRequest": {
30170
+ "type": "object",
30171
+ "properties": {
30172
+ "content_type": {
30173
+ "type": "string",
30174
+ "maxLength": 32
30175
+ },
30176
+ "data": {
30177
+ "type": "string",
30178
+ "maxLength": 6291456
30179
+ },
30180
+ "name": {
30181
+ "type": "string",
30182
+ "maxLength": 400
30183
+ }
30184
+ },
30185
+ "required": [
30186
+ "content_type",
30187
+ "data"
30188
+ ],
30189
+ "additionalProperties": false
30190
+ },
30191
+ "PostPageNotesIdImagesResponse": {
30192
+ "type": "object",
30193
+ "properties": {
30194
+ "image": {}
30195
+ },
30196
+ "required": [
30197
+ "image"
30198
+ ]
30199
+ },
30200
+ "PostPageNotesIdSubmitResponse": {
30201
+ "type": "object",
30202
+ "properties": {
30203
+ "ok": {
30204
+ "type": "boolean"
30205
+ },
30206
+ "status": {},
30207
+ "note_id": {}
30208
+ },
30209
+ "required": [
30210
+ "ok",
30211
+ "status",
30212
+ "note_id"
30213
+ ]
30214
+ },
30215
+ "PostPageNotesRequest": {
30216
+ "type": "object",
30217
+ "properties": {
30218
+ "page_id": {
30219
+ "type": "string",
30220
+ "maxLength": 97
30221
+ },
30222
+ "page_path": {
30223
+ "type": "string",
30224
+ "maxLength": 200
30225
+ },
30226
+ "page_title": {
30227
+ "type": "string",
30228
+ "maxLength": 400
30229
+ }
30230
+ },
30231
+ "required": [
30232
+ "page_id"
30233
+ ],
30234
+ "additionalProperties": false
30235
+ },
30236
+ "PostPageNotesResponse": {
30237
+ "type": "object",
30238
+ "properties": {
30239
+ "note": {},
30240
+ "images": {}
30241
+ },
30242
+ "required": [
30243
+ "note",
30244
+ "images"
30245
+ ]
30246
+ },
29758
30247
  "PostProjectsInviteRequest": {
29759
30248
  "type": "object",
29760
30249
  "properties": {
@@ -32234,9 +32723,9 @@
32234
32723
  "description": "A required dependency/feature is not configured or is temporarily down."
32235
32724
  }
32236
32725
  },
32237
- "x-endpoint-count": 503,
32238
- "x-schema-count": 537,
32726
+ "x-endpoint-count": 510,
32727
+ "x-schema-count": 546,
32239
32728
  "x-undocumented-bodies": 12,
32240
- "x-response-schemas": 356,
32729
+ "x-response-schemas": 362,
32241
32730
  "x-generated-by": "scripts/gds/gen-api-docs.js"
32242
32731
  }