@bongos/core 1.25.17 → 1.25.19

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 (72) hide show
  1. package/.bongos-core.json +135 -65
  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 +17 -1
  6. package/clients/bongos-client/index.mjs +12 -0
  7. package/docs/adr/0408-a-genesis-stage-is-three-doors-onto-one-record.md +2 -1
  8. package/docs/api/openapi.json +288 -6
  9. package/docs/api-reference.md +14 -4
  10. package/docs/copy-inventory.md +132 -121
  11. package/docs/copy-registry.json +347 -195
  12. package/docs/file-map.md +2 -1
  13. package/docs/module-api-changelog.md +4 -0
  14. package/docs/page-inventory.json +3 -0
  15. package/docs/page-readings.json +63 -63
  16. package/modules/app-host/CLAUDE.md +15 -0
  17. package/modules/app-host/module.json +20 -0
  18. package/modules/app-host/public/settings-widget.js +143 -0
  19. package/modules/app-host/routes/app-host.js +88 -0
  20. package/modules/government/charter-advice.js +103 -0
  21. package/modules/government/presets.js +42 -0
  22. package/modules/government/recommendations.js +102 -7
  23. package/modules/government/routes/government.js +1 -0
  24. package/modules/hall-ui/public/genesis-home.js +28 -3
  25. package/modules/lifecycle/first-read-catalog.js +62 -0
  26. package/modules/lifecycle/first-read-db.js +47 -9
  27. package/modules/lifecycle/first-read.js +88 -23
  28. package/modules/lifecycle/migrations/lifecycle_023_repo_map_dismissed.sql +19 -0
  29. package/modules/lifecycle/routes/first-read.js +27 -5
  30. package/modules/onboarding/genesis-home.js +68 -7
  31. package/modules/onboarding/genesis-work.js +169 -4
  32. package/modules/onboarding/routes/genesis-work.js +5 -2
  33. package/modules/platform-identity/module.json +1 -1
  34. package/modules/platform-identity/routes/sso-app-status.js +65 -0
  35. package/modules/provisioning/module.json +1 -0
  36. package/modules/provisioning/seams.js +32 -1
  37. package/modules/provisioning/starter-bundles.js +1 -0
  38. package/modules/public-landing/public/assets/guide-core.js +475 -0
  39. package/modules/public-landing/public/assets/guide-hall.css +121 -0
  40. package/modules/public-landing/public/assets/guide-hall.js +164 -0
  41. package/modules/public-landing/public/assets/guide-scene.css +9 -0
  42. package/modules/public-landing/public/assets/guide-scene.js +58 -381
  43. package/modules/public-landing/public/index.html +46 -1
  44. package/modules/public-landing/public/projects.html +11 -2
  45. package/modules/ui-design/kit/serve.js +1 -1
  46. package/package-lock.json +2 -2
  47. package/package.json +1 -1
  48. package/release-notes.json +24 -0
  49. package/scripts/bongos/first-read.js +45 -11
  50. package/scripts/bongos/genesis.js +29 -2
  51. package/scripts/bongos/publish-manifest.js +1 -0
  52. package/scripts/bongos/seam-wiring-guard.js +3 -2
  53. package/scripts/hall-preview/server.js +2 -0
  54. package/src/bongos/auth-admission.js +64 -0
  55. package/src/bongos/auth.js +2 -1
  56. package/src/bongos/module-scope-map.js +4 -0
  57. package/src/bongos/routes/core-update.js +3 -16
  58. package/src/bongos/routes/modules.js +11 -0
  59. package/src/bongos/serve-internal.js +20 -6
  60. package/src/module-api.js +6 -1
  61. package/src/module-loader/loader.js +2 -2
  62. package/tests/app_host.mjs +413 -0
  63. package/tests/first_read.mjs +184 -8
  64. package/tests/genesis_home.mjs +81 -1
  65. package/tests/genesis_work.mjs +103 -3
  66. package/tests/genesis_work_routes.mjs +9 -0
  67. package/tests/government_charter_advice.mjs +150 -0
  68. package/tests/landing_guide_hall.mjs +364 -0
  69. package/tests/landing_guide_scene.mjs +8 -5
  70. package/tests/module_api.mjs +1 -0
  71. package/tests/module_loader.mjs +1 -1
  72. package/tests/npm_release_where.mjs +13 -3
@@ -154,6 +154,10 @@ function createClient(opts = {}) {
154
154
  // GET /analytics/builder/{id} — rank: any-builder — GET /analytics/builder/:id
155
155
  getAnalyticsBuilderId: (args) => request("GET", "/analytics/builder/{id}", { hasBody: false }, args),
156
156
  },
157
+ "appHost": {
158
+ // GET /app-host — rank: any-builder — GET /app-host
159
+ getAppHost: (args) => request("GET", "/app-host", { hasBody: false }, args),
160
+ },
157
161
  "artistGate": {
158
162
  // GET /artist-gate — rank: any-builder — GET /artist-gate
159
163
  getArtistGate: (args) => request("GET", "/artist-gate", { hasBody: false }, args),
@@ -469,12 +473,16 @@ function createClient(opts = {}) {
469
473
  getFeedbackReceiptId: (args) => request("GET", "/feedback/receipt/{id}", { hasBody: false }, args),
470
474
  },
471
475
  "firstRead": {
476
+ // GET /first-read/catalog — rank: any-builder — GET /first-read/catalog
477
+ getFirstReadCatalog: (args) => request("GET", "/first-read/catalog", { hasBody: false }, args),
472
478
  // POST /first-read/maps — rank: metic+archon — POST /first-read/maps
473
479
  postFirstReadMaps: (args) => request("POST", "/first-read/maps", { hasBody: true }, args),
474
480
  // GET /first-read/maps/{id} — rank: metic+archon — GET /first-read/maps/:id
475
481
  getFirstReadMapsId: (args) => request("GET", "/first-read/maps/{id}", { hasBody: false }, args),
476
482
  // POST /first-read/maps/{id}/accept — rank: metic+archon — POST /first-read/maps/:id/accept
477
483
  postFirstReadMapsIdAccept: (args) => request("POST", "/first-read/maps/{id}/accept", { hasBody: true }, args),
484
+ // POST /first-read/maps/{id}/dismiss — rank: metic+archon — POST /first-read/maps/:id/dismiss
485
+ postFirstReadMapsIdDismiss: (args) => request("POST", "/first-read/maps/{id}/dismiss", { hasBody: true }, args),
478
486
  // POST /first-read/maps/{id}/reject — rank: metic+archon — POST /first-read/maps/:id/reject
479
487
  postFirstReadMapsIdReject: (args) => request("POST", "/first-read/maps/{id}/reject", { hasBody: true }, args),
480
488
  // GET /first-read/prompt — rank: any-builder — GET /first-read/prompt
@@ -511,6 +519,8 @@ function createClient(opts = {}) {
511
519
  getFoundingWorkStageAnswersQuestionHistory: (args) => request("GET", "/founding/work/{stage}/answers/{question}/history", { hasBody: false }, args),
512
520
  // GET /founding/work/{stage}/assist — rank: any-builder — GET /founding/work/:stage/assist
513
521
  getFoundingWorkStageAssist: (args) => request("GET", "/founding/work/{stage}/assist", { hasBody: false }, args),
522
+ // GET /founding/work/{stage}/document — rank: any-builder — GET /founding/work/:stage/document
523
+ getFoundingWorkStageDocument: (args) => request("GET", "/founding/work/{stage}/document", { hasBody: false }, args),
514
524
  // PUT /founding/work/{stage}/door — rank: any-builder — PUT /founding/work/:stage/door
515
525
  putFoundingWorkStageDoor: (args) => request("PUT", "/founding/work/{stage}/door", { hasBody: true }, args),
516
526
  // PUT /founding/work/{stage}/link — rank: any-builder — PUT /founding/work/:stage/link
@@ -1515,6 +1525,8 @@ function createClient(opts = {}) {
1515
1525
  "sso": {
1516
1526
  // POST /sso/activity/rollup — rank: public — POST /sso/activity/rollup
1517
1527
  postSsoActivityRollup: (args) => request("POST", "/sso/activity/rollup", { hasBody: true }, args),
1528
+ // POST /sso/app-status — rank: public — POST /sso/app-status
1529
+ postSsoAppStatus: (args) => request("POST", "/sso/app-status", { hasBody: true }, args),
1518
1530
  // POST /sso/applicant-profile — rank: public — POST /sso/applicant-profile
1519
1531
  postSsoApplicantProfile: (args) => request("POST", "/sso/applicant-profile", { hasBody: true }, args),
1520
1532
  // GET /sso/authorize — rank: public — GET /sso/authorize
@@ -153,6 +153,10 @@ function createClient(opts = {}) {
153
153
  // GET /analytics/builder/{id} — rank: any-builder — GET /analytics/builder/:id
154
154
  getAnalyticsBuilderId: (args) => request("GET", "/analytics/builder/{id}", { hasBody: false }, args),
155
155
  },
156
+ "appHost": {
157
+ // GET /app-host — rank: any-builder — GET /app-host
158
+ getAppHost: (args) => request("GET", "/app-host", { hasBody: false }, args),
159
+ },
156
160
  "artistGate": {
157
161
  // GET /artist-gate — rank: any-builder — GET /artist-gate
158
162
  getArtistGate: (args) => request("GET", "/artist-gate", { hasBody: false }, args),
@@ -468,12 +472,16 @@ function createClient(opts = {}) {
468
472
  getFeedbackReceiptId: (args) => request("GET", "/feedback/receipt/{id}", { hasBody: false }, args),
469
473
  },
470
474
  "firstRead": {
475
+ // GET /first-read/catalog — rank: any-builder — GET /first-read/catalog
476
+ getFirstReadCatalog: (args) => request("GET", "/first-read/catalog", { hasBody: false }, args),
471
477
  // POST /first-read/maps — rank: metic+archon — POST /first-read/maps
472
478
  postFirstReadMaps: (args) => request("POST", "/first-read/maps", { hasBody: true }, args),
473
479
  // GET /first-read/maps/{id} — rank: metic+archon — GET /first-read/maps/:id
474
480
  getFirstReadMapsId: (args) => request("GET", "/first-read/maps/{id}", { hasBody: false }, args),
475
481
  // POST /first-read/maps/{id}/accept — rank: metic+archon — POST /first-read/maps/:id/accept
476
482
  postFirstReadMapsIdAccept: (args) => request("POST", "/first-read/maps/{id}/accept", { hasBody: true }, args),
483
+ // POST /first-read/maps/{id}/dismiss — rank: metic+archon — POST /first-read/maps/:id/dismiss
484
+ postFirstReadMapsIdDismiss: (args) => request("POST", "/first-read/maps/{id}/dismiss", { hasBody: true }, args),
477
485
  // POST /first-read/maps/{id}/reject — rank: metic+archon — POST /first-read/maps/:id/reject
478
486
  postFirstReadMapsIdReject: (args) => request("POST", "/first-read/maps/{id}/reject", { hasBody: true }, args),
479
487
  // GET /first-read/prompt — rank: any-builder — GET /first-read/prompt
@@ -510,6 +518,8 @@ function createClient(opts = {}) {
510
518
  getFoundingWorkStageAnswersQuestionHistory: (args) => request("GET", "/founding/work/{stage}/answers/{question}/history", { hasBody: false }, args),
511
519
  // GET /founding/work/{stage}/assist — rank: any-builder — GET /founding/work/:stage/assist
512
520
  getFoundingWorkStageAssist: (args) => request("GET", "/founding/work/{stage}/assist", { hasBody: false }, args),
521
+ // GET /founding/work/{stage}/document — rank: any-builder — GET /founding/work/:stage/document
522
+ getFoundingWorkStageDocument: (args) => request("GET", "/founding/work/{stage}/document", { hasBody: false }, args),
513
523
  // PUT /founding/work/{stage}/door — rank: any-builder — PUT /founding/work/:stage/door
514
524
  putFoundingWorkStageDoor: (args) => request("PUT", "/founding/work/{stage}/door", { hasBody: true }, args),
515
525
  // PUT /founding/work/{stage}/link — rank: any-builder — PUT /founding/work/:stage/link
@@ -1514,6 +1524,8 @@ function createClient(opts = {}) {
1514
1524
  "sso": {
1515
1525
  // POST /sso/activity/rollup — rank: public — POST /sso/activity/rollup
1516
1526
  postSsoActivityRollup: (args) => request("POST", "/sso/activity/rollup", { hasBody: true }, args),
1527
+ // POST /sso/app-status — rank: public — POST /sso/app-status
1528
+ postSsoAppStatus: (args) => request("POST", "/sso/app-status", { hasBody: true }, args),
1517
1529
  // POST /sso/applicant-profile — rank: public — POST /sso/applicant-profile
1518
1530
  postSsoApplicantProfile: (args) => request("POST", "/sso/applicant-profile", { hasBody: true }, args),
1519
1531
  // GET /sso/authorize — rank: public — GET /sso/authorize
@@ -75,7 +75,8 @@ export interface GetCoreUpgradesResponse { ok: boolean; running: unknown; limit:
75
75
  export interface GetDiscordChannelsPlanResponse { ok: boolean; guild_id: unknown; op_count: unknown; ops: unknown; warnings: unknown }
76
76
  export interface GetDiscordChannelsSnapshotResponse { ok: boolean; guild_id: unknown; config: unknown; warnings: unknown }
77
77
  export interface GetDoneWhenPendingReviewResponse { criteria: unknown; count: unknown }
78
- export interface GetFirstReadPromptResponse { schema: unknown; file: unknown; prompt: unknown; example: unknown; limits: unknown }
78
+ export interface GetFirstReadCatalogResponse { available: unknown; modules: unknown }
79
+ export interface GetFirstReadPromptResponse { schema: unknown; file: unknown; prompt: unknown; example: unknown; limits: unknown; catalog: unknown }
79
80
  export interface GetFrontDoorGuideMineResponse { ok: boolean; conversation: unknown }
80
81
  export interface GetGithubOrgsOrgResponse { org: unknown }
81
82
  export interface GetGithubRepoResponse { ok: boolean; repo: unknown; private_deployable: boolean }
@@ -391,6 +392,7 @@ export interface PostDoneWhenCriterionIdUnsatisfyResponse { criterion: unknown }
391
392
  export interface PostFeedbackReceiptRequest { sha256: string; kind?: "bug" | "idea" }
392
393
  export interface PostFeedbackReceiptResponse { ok: boolean; receipt: unknown; hub: unknown }
393
394
  export interface PostFirstReadMapsIdAcceptRequest { all?: boolean; items?: string[] }
395
+ export interface PostFirstReadMapsIdDismissRequest { items: string[] }
394
396
  export interface PostFirstReadMapsRequest { map: Record<string, unknown> }
395
397
  export interface PostFirstReadMapsResponse { map_id: unknown; status: unknown; items: unknown; next: unknown }
396
398
  export interface PostFoundingPlanRequest { days?: Record<string, unknown>; passes?: number; advisors?: string; government?: string; expected_builders?: number; existing?: boolean }
@@ -658,6 +660,8 @@ export interface PostSpecialitiesRequest { name: string; discipline: string; sum
658
660
  export interface PostSpecialitiesResponse { speciality: unknown }
659
661
  export interface PostSsoActivityRollupRequest { client_id: string; client_secret: string; github_id: StringifiableId; credits?: number; tasks_shipped?: number; karma?: number; rank?: string; disciplines?: unknown; recent_ships?: unknown; crafts?: unknown }
660
662
  export interface PostSsoActivityRollupResponse { ok: boolean }
663
+ export interface PostSsoAppStatusRequest { client_id: string; client_secret: string }
664
+ export interface PostSsoAppStatusResponse { ok: boolean; known: boolean; app: unknown; sandbox: unknown }
661
665
  export interface PostSsoApplicantProfileRequest { client_id: string; client_secret: string; github_id: StringifiableId }
662
666
  export interface PostSsoApplicantProfileResponse { profile: unknown; guild: unknown }
663
667
  export interface PostSsoDevicePollRequest { device_code: string }
@@ -842,6 +846,10 @@ export interface BongosClient {
842
846
  /** GET /analytics/builder/{id} — rank: any-builder */
843
847
  getAnalyticsBuilderId(args?: RequestArgs): Promise<ApiResponse>;
844
848
  };
849
+ "appHost": {
850
+ /** GET /app-host — rank: any-builder */
851
+ getAppHost(args?: RequestArgs): Promise<ApiResponse>;
852
+ };
845
853
  "artistGate": {
846
854
  /** GET /artist-gate — rank: any-builder */
847
855
  getArtistGate(args?: RequestArgs): Promise<GetArtistGateResponse>;
@@ -1157,12 +1165,16 @@ export interface BongosClient {
1157
1165
  getFeedbackReceiptId(args?: RequestArgs): Promise<ApiResponse>;
1158
1166
  };
1159
1167
  "firstRead": {
1168
+ /** GET /first-read/catalog — rank: any-builder */
1169
+ getFirstReadCatalog(args?: RequestArgs): Promise<GetFirstReadCatalogResponse>;
1160
1170
  /** POST /first-read/maps — rank: metic+archon */
1161
1171
  postFirstReadMaps(args: RequestArgs & { body: PostFirstReadMapsRequest }): Promise<PostFirstReadMapsResponse>;
1162
1172
  /** GET /first-read/maps/{id} — rank: metic+archon */
1163
1173
  getFirstReadMapsId(args?: RequestArgs): Promise<ApiResponse>;
1164
1174
  /** POST /first-read/maps/{id}/accept — rank: metic+archon */
1165
1175
  postFirstReadMapsIdAccept(args?: RequestArgs & { body?: PostFirstReadMapsIdAcceptRequest }): Promise<ApiResponse>;
1176
+ /** POST /first-read/maps/{id}/dismiss — rank: metic+archon */
1177
+ postFirstReadMapsIdDismiss(args: RequestArgs & { body: PostFirstReadMapsIdDismissRequest }): Promise<ApiResponse>;
1166
1178
  /** POST /first-read/maps/{id}/reject — rank: metic+archon */
1167
1179
  postFirstReadMapsIdReject(args?: RequestArgs): Promise<ApiResponse>;
1168
1180
  /** GET /first-read/prompt — rank: any-builder */
@@ -1199,6 +1211,8 @@ export interface BongosClient {
1199
1211
  getFoundingWorkStageAnswersQuestionHistory(args?: RequestArgs): Promise<ApiResponse>;
1200
1212
  /** GET /founding/work/{stage}/assist — rank: any-builder */
1201
1213
  getFoundingWorkStageAssist(args?: RequestArgs): Promise<ApiResponse>;
1214
+ /** GET /founding/work/{stage}/document — rank: any-builder */
1215
+ getFoundingWorkStageDocument(args?: RequestArgs): Promise<ApiResponse>;
1202
1216
  /** PUT /founding/work/{stage}/door — rank: any-builder */
1203
1217
  putFoundingWorkStageDoor(args: RequestArgs & { body: PutFoundingWorkStageDoorRequest }): Promise<ApiResponse>;
1204
1218
  /** PUT /founding/work/{stage}/link — rank: any-builder */
@@ -2203,6 +2217,8 @@ export interface BongosClient {
2203
2217
  "sso": {
2204
2218
  /** POST /sso/activity/rollup — rank: public */
2205
2219
  postSsoActivityRollup(args: RequestArgs & { body: PostSsoActivityRollupRequest }): Promise<PostSsoActivityRollupResponse>;
2220
+ /** POST /sso/app-status — rank: public */
2221
+ postSsoAppStatus(args: RequestArgs & { body: PostSsoAppStatusRequest }): Promise<PostSsoAppStatusResponse>;
2206
2222
  /** POST /sso/applicant-profile — rank: public */
2207
2223
  postSsoApplicantProfile(args: RequestArgs & { body: PostSsoApplicantProfileRequest }): Promise<PostSsoApplicantProfileResponse>;
2208
2224
  /** GET /sso/authorize — rank: public */
@@ -150,6 +150,10 @@ export function createClient(opts = {}) {
150
150
  // GET /analytics/builder/{id} — rank: any-builder — GET /analytics/builder/:id
151
151
  getAnalyticsBuilderId: (args) => request("GET", "/analytics/builder/{id}", { hasBody: false }, args),
152
152
  },
153
+ "appHost": {
154
+ // GET /app-host — rank: any-builder — GET /app-host
155
+ getAppHost: (args) => request("GET", "/app-host", { hasBody: false }, args),
156
+ },
153
157
  "artistGate": {
154
158
  // GET /artist-gate — rank: any-builder — GET /artist-gate
155
159
  getArtistGate: (args) => request("GET", "/artist-gate", { hasBody: false }, args),
@@ -465,12 +469,16 @@ export function createClient(opts = {}) {
465
469
  getFeedbackReceiptId: (args) => request("GET", "/feedback/receipt/{id}", { hasBody: false }, args),
466
470
  },
467
471
  "firstRead": {
472
+ // GET /first-read/catalog — rank: any-builder — GET /first-read/catalog
473
+ getFirstReadCatalog: (args) => request("GET", "/first-read/catalog", { hasBody: false }, args),
468
474
  // POST /first-read/maps — rank: metic+archon — POST /first-read/maps
469
475
  postFirstReadMaps: (args) => request("POST", "/first-read/maps", { hasBody: true }, args),
470
476
  // GET /first-read/maps/{id} — rank: metic+archon — GET /first-read/maps/:id
471
477
  getFirstReadMapsId: (args) => request("GET", "/first-read/maps/{id}", { hasBody: false }, args),
472
478
  // POST /first-read/maps/{id}/accept — rank: metic+archon — POST /first-read/maps/:id/accept
473
479
  postFirstReadMapsIdAccept: (args) => request("POST", "/first-read/maps/{id}/accept", { hasBody: true }, args),
480
+ // POST /first-read/maps/{id}/dismiss — rank: metic+archon — POST /first-read/maps/:id/dismiss
481
+ postFirstReadMapsIdDismiss: (args) => request("POST", "/first-read/maps/{id}/dismiss", { hasBody: true }, args),
474
482
  // POST /first-read/maps/{id}/reject — rank: metic+archon — POST /first-read/maps/:id/reject
475
483
  postFirstReadMapsIdReject: (args) => request("POST", "/first-read/maps/{id}/reject", { hasBody: true }, args),
476
484
  // GET /first-read/prompt — rank: any-builder — GET /first-read/prompt
@@ -507,6 +515,8 @@ export function createClient(opts = {}) {
507
515
  getFoundingWorkStageAnswersQuestionHistory: (args) => request("GET", "/founding/work/{stage}/answers/{question}/history", { hasBody: false }, args),
508
516
  // GET /founding/work/{stage}/assist — rank: any-builder — GET /founding/work/:stage/assist
509
517
  getFoundingWorkStageAssist: (args) => request("GET", "/founding/work/{stage}/assist", { hasBody: false }, args),
518
+ // GET /founding/work/{stage}/document — rank: any-builder — GET /founding/work/:stage/document
519
+ getFoundingWorkStageDocument: (args) => request("GET", "/founding/work/{stage}/document", { hasBody: false }, args),
510
520
  // PUT /founding/work/{stage}/door — rank: any-builder — PUT /founding/work/:stage/door
511
521
  putFoundingWorkStageDoor: (args) => request("PUT", "/founding/work/{stage}/door", { hasBody: true }, args),
512
522
  // PUT /founding/work/{stage}/link — rank: any-builder — PUT /founding/work/:stage/link
@@ -1511,6 +1521,8 @@ export function createClient(opts = {}) {
1511
1521
  "sso": {
1512
1522
  // POST /sso/activity/rollup — rank: public — POST /sso/activity/rollup
1513
1523
  postSsoActivityRollup: (args) => request("POST", "/sso/activity/rollup", { hasBody: true }, args),
1524
+ // POST /sso/app-status — rank: public — POST /sso/app-status
1525
+ postSsoAppStatus: (args) => request("POST", "/sso/app-status", { hasBody: true }, args),
1514
1526
  // POST /sso/applicant-profile — rank: public — POST /sso/applicant-profile
1515
1527
  postSsoApplicantProfile: (args) => request("POST", "/sso/applicant-profile", { hasBody: true }, args),
1516
1528
  // GET /sso/authorize — rank: public — GET /sso/authorize
@@ -57,5 +57,6 @@ every stage, not a strategize feature that charter then copies.
57
57
  - Presentation is left to the game frame (the founding of the government district) and
58
58
  the hall version (task 1005285). Today a founder works a stage through their AI session
59
59
  and `npx bongos genesis …`.
60
- - Task 1005115 renders each stage's record as an editable document from this store.
60
+ - Task 1005115 renders each stage's record as an editable document from this store (`documentOf`, `GET /founding/work/:stage/document`), and on a project with no Board Room a stage whose tasks are finished advances by itself.
61
+ - Charter adopted it (task 1005119): how decisions should go and the founder's principles. A question may declare `choices` (a closed answer, stored as its key) where another module reads the answer; the charter stage's read carries the government module's recommendation built from them.
61
62
  - Scope adopted it with the project interview (task 1005114): six questions in three groups. `/goal-create` and `/planning-session` read the answers before planning, through `genesis.js context`.
@@ -45,6 +45,10 @@
45
45
  "name": "analytics",
46
46
  "description": "Endpoints under `/api/bongos/analytics`."
47
47
  },
48
+ {
49
+ "name": "app-host",
50
+ "description": "Endpoints under `/api/bongos/app-host`."
51
+ },
48
52
  {
49
53
  "name": "artist-gate",
50
54
  "description": "Endpoints under `/api/bongos/artist-gate`."
@@ -1748,6 +1752,37 @@
1748
1752
  ]
1749
1753
  }
1750
1754
  },
1755
+ "/app-host": {
1756
+ "get": {
1757
+ "operationId": "get_app_host",
1758
+ "tags": [
1759
+ "app-host"
1760
+ ],
1761
+ "summary": "GET /app-host",
1762
+ "description": "GET /app-host — rank: any signed-in builder; owner-only parts gated on core.pin.move.\n\n**Rank:** `any-builder` — Any authenticated builder (row-level ownership enforced in-handler).",
1763
+ "x-rank": "any-builder",
1764
+ "x-source": "modules/app-host/routes/app-host.js",
1765
+ "responses": {
1766
+ "200": {
1767
+ "description": "Success."
1768
+ },
1769
+ "400": {
1770
+ "$ref": "#/components/responses/BadRequest"
1771
+ },
1772
+ "401": {
1773
+ "$ref": "#/components/responses/Unauthorized"
1774
+ },
1775
+ "403": {
1776
+ "$ref": "#/components/responses/Forbidden"
1777
+ }
1778
+ },
1779
+ "security": [
1780
+ {
1781
+ "builderSession": []
1782
+ }
1783
+ ]
1784
+ }
1785
+ },
1751
1786
  "/artist-gate": {
1752
1787
  "get": {
1753
1788
  "operationId": "get_artist_gate",
@@ -7613,6 +7648,44 @@
7613
7648
  "security": []
7614
7649
  }
7615
7650
  },
7651
+ "/first-read/catalog": {
7652
+ "get": {
7653
+ "operationId": "get_first_read_catalog",
7654
+ "tags": [
7655
+ "first-read"
7656
+ ],
7657
+ "summary": "GET /first-read/catalog",
7658
+ "description": "the modules this project can switch on, the only ones a map may recommend. `available: false` when the list cannot be read here.\n\n**Rank:** `any-builder` — Any authenticated builder (row-level ownership enforced in-handler).",
7659
+ "x-rank": "any-builder",
7660
+ "x-source": "modules/lifecycle/routes/first-read.js",
7661
+ "responses": {
7662
+ "200": {
7663
+ "description": "Success.",
7664
+ "content": {
7665
+ "application/json": {
7666
+ "schema": {
7667
+ "$ref": "#/components/schemas/GetFirstReadCatalogResponse"
7668
+ }
7669
+ }
7670
+ }
7671
+ },
7672
+ "400": {
7673
+ "$ref": "#/components/responses/BadRequest"
7674
+ },
7675
+ "401": {
7676
+ "$ref": "#/components/responses/Unauthorized"
7677
+ },
7678
+ "403": {
7679
+ "$ref": "#/components/responses/Forbidden"
7680
+ }
7681
+ },
7682
+ "security": [
7683
+ {
7684
+ "builderSession": []
7685
+ }
7686
+ ]
7687
+ }
7688
+ },
7616
7689
  "/first-read/maps": {
7617
7690
  "post": {
7618
7691
  "operationId": "post_first_read_maps",
@@ -7772,6 +7845,65 @@
7772
7845
  ]
7773
7846
  }
7774
7847
  },
7848
+ "/first-read/maps/{id}/dismiss": {
7849
+ "post": {
7850
+ "operationId": "post_first_read_maps_id_dismiss",
7851
+ "tags": [
7852
+ "first-read"
7853
+ ],
7854
+ "summary": "POST /first-read/maps/:id/dismiss",
7855
+ "description": ".create — the owner's no to named items (a module recommendation, usually). Files nothing; a later \"accept all\" passes them by.\n\n**Rank:** `metic+archon` — Metic or Archon rank (review/triage powers).\n\n**Permissions:** `goal.create` (all required).",
7856
+ "x-rank": "metic+archon",
7857
+ "x-source": "modules/lifecycle/routes/first-read.js",
7858
+ "x-permissions": [
7859
+ "goal.create"
7860
+ ],
7861
+ "parameters": [
7862
+ {
7863
+ "name": "id",
7864
+ "in": "path",
7865
+ "required": true,
7866
+ "schema": {
7867
+ "type": "string"
7868
+ },
7869
+ "description": "Path parameter `id`."
7870
+ }
7871
+ ],
7872
+ "requestBody": {
7873
+ "required": true,
7874
+ "content": {
7875
+ "application/json": {
7876
+ "schema": {
7877
+ "$ref": "#/components/schemas/PostFirstReadMapsIdDismissRequest"
7878
+ }
7879
+ }
7880
+ },
7881
+ "x-validated": true
7882
+ },
7883
+ "responses": {
7884
+ "200": {
7885
+ "description": "Success."
7886
+ },
7887
+ "400": {
7888
+ "$ref": "#/components/responses/ValidationFailed"
7889
+ },
7890
+ "401": {
7891
+ "$ref": "#/components/responses/Unauthorized"
7892
+ },
7893
+ "403": {
7894
+ "$ref": "#/components/responses/Forbidden"
7895
+ },
7896
+ "404": {
7897
+ "$ref": "#/components/responses/NotFound"
7898
+ }
7899
+ },
7900
+ "security": [
7901
+ {
7902
+ "builderSession": []
7903
+ }
7904
+ ]
7905
+ }
7906
+ },
7775
7907
  "/first-read/maps/{id}/reject": {
7776
7908
  "post": {
7777
7909
  "operationId": "post_first_read_maps_id_reject",
@@ -7827,7 +7959,7 @@
7827
7959
  "first-read"
7828
7960
  ],
7829
7961
  "summary": "GET /first-read/prompt",
7830
- "description": "the prompt and the shape are instructions, not project data.\n\n**Rank:** `any-builder` — Any authenticated builder (row-level ownership enforced in-handler).",
7962
+ "description": "the prompt and the shape are instructions, not project data. The prompt carries the live module list (task 1005281), so a session recommends from it.\n\n**Rank:** `any-builder` — Any authenticated builder (row-level ownership enforced in-handler).",
7831
7963
  "x-rank": "any-builder",
7832
7964
  "x-source": "modules/lifecycle/routes/first-read.js",
7833
7965
  "responses": {
@@ -8465,6 +8597,51 @@
8465
8597
  ]
8466
8598
  }
8467
8599
  },
8600
+ "/founding/work/{stage}/document": {
8601
+ "get": {
8602
+ "operationId": "get_founding_work_stage_document",
8603
+ "tags": [
8604
+ "founding"
8605
+ ],
8606
+ "summary": "GET /founding/work/:stage/document",
8607
+ "description": "The stage's document (task 1005115): its record read as one named page, editable through the writes below at any time, without reopening the stage.\n\n**Rank:** `any-builder` — Any authenticated builder (row-level ownership enforced in-handler).",
8608
+ "x-rank": "any-builder",
8609
+ "x-source": "modules/onboarding/routes/genesis-work.js",
8610
+ "parameters": [
8611
+ {
8612
+ "name": "stage",
8613
+ "in": "path",
8614
+ "required": true,
8615
+ "schema": {
8616
+ "type": "string"
8617
+ },
8618
+ "description": "Path parameter `stage`."
8619
+ }
8620
+ ],
8621
+ "responses": {
8622
+ "200": {
8623
+ "description": "Success."
8624
+ },
8625
+ "400": {
8626
+ "$ref": "#/components/responses/BadRequest"
8627
+ },
8628
+ "401": {
8629
+ "$ref": "#/components/responses/Unauthorized"
8630
+ },
8631
+ "403": {
8632
+ "$ref": "#/components/responses/Forbidden"
8633
+ },
8634
+ "404": {
8635
+ "$ref": "#/components/responses/NotFound"
8636
+ }
8637
+ },
8638
+ "security": [
8639
+ {
8640
+ "builderSession": []
8641
+ }
8642
+ ]
8643
+ }
8644
+ },
8468
8645
  "/founding/work/{stage}/door": {
8469
8646
  "put": {
8470
8647
  "operationId": "put_founding_work_stage_door",
@@ -29282,6 +29459,45 @@
29282
29459
  "security": []
29283
29460
  }
29284
29461
  },
29462
+ "/sso/app-status": {
29463
+ "post": {
29464
+ "operationId": "post_sso_app_status",
29465
+ "tags": [
29466
+ "sso"
29467
+ ],
29468
+ "summary": "POST /sso/app-status",
29469
+ "description": "authenticated by client_id + client_secret, not a builder rank.\n\n**Rank:** `public` — No authentication — any caller.",
29470
+ "x-rank": "public",
29471
+ "x-source": "modules/platform-identity/routes/sso-app-status.js",
29472
+ "requestBody": {
29473
+ "required": true,
29474
+ "content": {
29475
+ "application/json": {
29476
+ "schema": {
29477
+ "$ref": "#/components/schemas/PostSsoAppStatusRequest"
29478
+ }
29479
+ }
29480
+ },
29481
+ "x-validated": true
29482
+ },
29483
+ "responses": {
29484
+ "200": {
29485
+ "description": "Success.",
29486
+ "content": {
29487
+ "application/json": {
29488
+ "schema": {
29489
+ "$ref": "#/components/schemas/PostSsoAppStatusResponse"
29490
+ }
29491
+ }
29492
+ }
29493
+ },
29494
+ "400": {
29495
+ "$ref": "#/components/responses/ValidationFailed"
29496
+ }
29497
+ },
29498
+ "security": []
29499
+ }
29500
+ },
29285
29501
  "/sso/applicant-profile": {
29286
29502
  "post": {
29287
29503
  "operationId": "post_sso_applicant_profile",
@@ -34664,6 +34880,17 @@
34664
34880
  "count"
34665
34881
  ]
34666
34882
  },
34883
+ "GetFirstReadCatalogResponse": {
34884
+ "type": "object",
34885
+ "properties": {
34886
+ "available": {},
34887
+ "modules": {}
34888
+ },
34889
+ "required": [
34890
+ "available",
34891
+ "modules"
34892
+ ]
34893
+ },
34667
34894
  "GetFirstReadPromptResponse": {
34668
34895
  "type": "object",
34669
34896
  "properties": {
@@ -34671,14 +34898,16 @@
34671
34898
  "file": {},
34672
34899
  "prompt": {},
34673
34900
  "example": {},
34674
- "limits": {}
34901
+ "limits": {},
34902
+ "catalog": {}
34675
34903
  },
34676
34904
  "required": [
34677
34905
  "schema",
34678
34906
  "file",
34679
34907
  "prompt",
34680
34908
  "example",
34681
- "limits"
34909
+ "limits",
34910
+ "catalog"
34682
34911
  ]
34683
34912
  },
34684
34913
  "GetFrontDoorGuideMineResponse": {
@@ -39192,6 +39421,22 @@
39192
39421
  },
39193
39422
  "additionalProperties": false
39194
39423
  },
39424
+ "PostFirstReadMapsIdDismissRequest": {
39425
+ "type": "object",
39426
+ "properties": {
39427
+ "items": {
39428
+ "type": "array",
39429
+ "items": {
39430
+ "type": "string"
39431
+ },
39432
+ "maxItems": 500
39433
+ }
39434
+ },
39435
+ "required": [
39436
+ "items"
39437
+ ],
39438
+ "additionalProperties": false
39439
+ },
39195
39440
  "PostFirstReadMapsRequest": {
39196
39441
  "type": "object",
39197
39442
  "properties": {
@@ -43544,6 +43789,43 @@
43544
43789
  "ok"
43545
43790
  ]
43546
43791
  },
43792
+ "PostSsoAppStatusRequest": {
43793
+ "type": "object",
43794
+ "properties": {
43795
+ "client_id": {
43796
+ "type": "string",
43797
+ "maxLength": 200
43798
+ },
43799
+ "client_secret": {
43800
+ "type": "string",
43801
+ "maxLength": 512
43802
+ }
43803
+ },
43804
+ "required": [
43805
+ "client_id",
43806
+ "client_secret"
43807
+ ],
43808
+ "additionalProperties": false
43809
+ },
43810
+ "PostSsoAppStatusResponse": {
43811
+ "type": "object",
43812
+ "properties": {
43813
+ "ok": {
43814
+ "type": "boolean"
43815
+ },
43816
+ "known": {
43817
+ "type": "boolean"
43818
+ },
43819
+ "app": {},
43820
+ "sandbox": {}
43821
+ },
43822
+ "required": [
43823
+ "ok",
43824
+ "known",
43825
+ "app",
43826
+ "sandbox"
43827
+ ]
43828
+ },
43547
43829
  "PostSsoApplicantProfileRequest": {
43548
43830
  "type": "object",
43549
43831
  "properties": {
@@ -45306,9 +45588,9 @@
45306
45588
  "description": "A required dependency/feature is not configured or is temporarily down."
45307
45589
  }
45308
45590
  },
45309
- "x-endpoint-count": 725,
45310
- "x-schema-count": 755,
45591
+ "x-endpoint-count": 730,
45592
+ "x-schema-count": 759,
45311
45593
  "x-undocumented-bodies": 12,
45312
- "x-response-schemas": 471,
45594
+ "x-response-schemas": 473,
45313
45595
  "x-generated-by": "scripts/bongos/gen-api-docs.js"
45314
45596
  }