@bongos/core 1.25.16 → 1.25.17

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 (45) hide show
  1. package/.bongos-core.json +95 -40
  2. package/bin/bongos.js +1 -0
  3. package/clients/bongos-client/README.md +1 -1
  4. package/clients/bongos-client/bongos-client.global.js +14 -0
  5. package/clients/bongos-client/index.cjs +14 -0
  6. package/clients/bongos-client/index.d.ts +22 -2
  7. package/clients/bongos-client/index.mjs +14 -0
  8. package/docs/adr/0406-every-project-gets-a-sandbox-that-follows-main-and-live-moves-only-when-a-person-promotes.md +8 -0
  9. package/docs/api/openapi.json +415 -3
  10. package/docs/api-reference.md +13 -2
  11. package/docs/module-api-changelog.md +2 -0
  12. package/docs/page-readings.json +1 -1
  13. package/modules/government/decision-rules.js +1 -0
  14. package/modules/lifecycle/first-read-db.js +152 -0
  15. package/modules/lifecycle/first-read.js +265 -0
  16. package/modules/lifecycle/kickoff-checklist.js +12 -3
  17. package/modules/lifecycle/migrations/lifecycle_022_repo_maps.sql +44 -0
  18. package/modules/lifecycle/module.json +2 -1
  19. package/modules/lifecycle/routes/first-read.js +79 -0
  20. package/modules/provisioning/pollers/app-liveness.js +23 -1
  21. package/modules/provisioning/render-sandbox.js +113 -0
  22. package/modules/provisioning/render-standup.js +3 -1
  23. package/modules/provisioning/routes/provisioning.js +4 -1
  24. package/modules/provisioning/routes/render-standup.js +49 -1
  25. package/modules/public-landing/public/projects.html +101 -4
  26. package/package-lock.json +2 -2
  27. package/package.json +1 -1
  28. package/release-notes.json +10 -0
  29. package/scripts/bongos/first-read.js +116 -0
  30. package/scripts/bongos/government-walk.js +4 -4
  31. package/scripts/bongos/provision-render-sandbox.js +171 -0
  32. package/scripts/bongos/provision-render.js +37 -2
  33. package/scripts/bongos/provision-teardown.js +1 -1
  34. package/scripts/bongos/render-api.js +33 -3
  35. package/scripts/bongos/render-payload.js +39 -1
  36. package/scripts/gds/first-read.js +7 -0
  37. package/scripts/gds/provision-render-sandbox.js +6 -0
  38. package/src/module-api.js +1 -1
  39. package/tests/first_read.mjs +303 -0
  40. package/tests/government_act_alone_buildings.mjs +2 -0
  41. package/tests/provisioning_app_status.mjs +3 -2
  42. package/tests/provisioning_render_route.mjs +1 -1
  43. package/tests/provisioning_teardown_intent.mjs +50 -0
  44. package/tests/render_api.mjs +5 -2
  45. package/tests/render_sandbox.mjs +447 -0
@@ -137,6 +137,10 @@
137
137
  "name": "feedback",
138
138
  "description": "Endpoints under `/api/bongos/feedback`."
139
139
  },
140
+ {
141
+ "name": "first-read",
142
+ "description": "Endpoints under `/api/bongos/first-read`."
143
+ },
140
144
  {
141
145
  "name": "founding",
142
146
  "description": "Endpoints under `/api/bongos/founding`."
@@ -7609,6 +7613,251 @@
7609
7613
  "security": []
7610
7614
  }
7611
7615
  },
7616
+ "/first-read/maps": {
7617
+ "post": {
7618
+ "operationId": "post_first_read_maps",
7619
+ "tags": [
7620
+ "first-read"
7621
+ ],
7622
+ "summary": "POST /first-read/maps",
7623
+ "description": ".create — a map is a planning proposal for this project. Stores it pending; files nothing. A malformed map is refused with every error named.\n\n**Rank:** `metic+archon` — Metic or Archon rank (review/triage powers).\n\n**Permissions:** `goal.create` (all required).",
7624
+ "x-rank": "metic+archon",
7625
+ "x-source": "modules/lifecycle/routes/first-read.js",
7626
+ "x-permissions": [
7627
+ "goal.create"
7628
+ ],
7629
+ "requestBody": {
7630
+ "required": true,
7631
+ "content": {
7632
+ "application/json": {
7633
+ "schema": {
7634
+ "$ref": "#/components/schemas/PostFirstReadMapsRequest"
7635
+ }
7636
+ }
7637
+ },
7638
+ "x-validated": true
7639
+ },
7640
+ "responses": {
7641
+ "200": {
7642
+ "description": "Success.",
7643
+ "content": {
7644
+ "application/json": {
7645
+ "schema": {
7646
+ "$ref": "#/components/schemas/PostFirstReadMapsResponse"
7647
+ }
7648
+ }
7649
+ }
7650
+ },
7651
+ "400": {
7652
+ "$ref": "#/components/responses/ValidationFailed"
7653
+ },
7654
+ "401": {
7655
+ "$ref": "#/components/responses/Unauthorized"
7656
+ },
7657
+ "403": {
7658
+ "$ref": "#/components/responses/Forbidden"
7659
+ }
7660
+ },
7661
+ "security": [
7662
+ {
7663
+ "builderSession": []
7664
+ }
7665
+ ]
7666
+ }
7667
+ },
7668
+ "/first-read/maps/{id}": {
7669
+ "get": {
7670
+ "operationId": "get_first_read_maps_id",
7671
+ "tags": [
7672
+ "first-read"
7673
+ ],
7674
+ "summary": "GET /first-read/maps/:id",
7675
+ "description": ".create — the review is for whoever may accept or reject it.\n\n**Rank:** `metic+archon` — Metic or Archon rank (review/triage powers).\n\n**Permissions:** `goal.create` (all required).",
7676
+ "x-rank": "metic+archon",
7677
+ "x-source": "modules/lifecycle/routes/first-read.js",
7678
+ "x-permissions": [
7679
+ "goal.create"
7680
+ ],
7681
+ "parameters": [
7682
+ {
7683
+ "name": "id",
7684
+ "in": "path",
7685
+ "required": true,
7686
+ "schema": {
7687
+ "type": "string"
7688
+ },
7689
+ "description": "Path parameter `id`."
7690
+ }
7691
+ ],
7692
+ "responses": {
7693
+ "200": {
7694
+ "description": "Success."
7695
+ },
7696
+ "400": {
7697
+ "$ref": "#/components/responses/BadRequest"
7698
+ },
7699
+ "401": {
7700
+ "$ref": "#/components/responses/Unauthorized"
7701
+ },
7702
+ "403": {
7703
+ "$ref": "#/components/responses/Forbidden"
7704
+ },
7705
+ "404": {
7706
+ "$ref": "#/components/responses/NotFound"
7707
+ }
7708
+ },
7709
+ "security": [
7710
+ {
7711
+ "builderSession": []
7712
+ }
7713
+ ]
7714
+ }
7715
+ },
7716
+ "/first-read/maps/{id}/accept": {
7717
+ "post": {
7718
+ "operationId": "post_first_read_maps_id_accept",
7719
+ "tags": [
7720
+ "first-read"
7721
+ ],
7722
+ "summary": "POST /first-read/maps/:id/accept",
7723
+ "description": ".create + act-alone planning — the owner's yes. Files the chosen items as draft goals (open) and tasks (backlog); an item already filed is skipped.\n\n**Rank:** `metic+archon` — Metic or Archon rank (review/triage powers).\n\n**Permissions:** `goal.create` (all required).",
7724
+ "x-rank": "metic+archon",
7725
+ "x-source": "modules/lifecycle/routes/first-read.js",
7726
+ "x-permissions": [
7727
+ "goal.create"
7728
+ ],
7729
+ "parameters": [
7730
+ {
7731
+ "name": "id",
7732
+ "in": "path",
7733
+ "required": true,
7734
+ "schema": {
7735
+ "type": "string"
7736
+ },
7737
+ "description": "Path parameter `id`."
7738
+ }
7739
+ ],
7740
+ "requestBody": {
7741
+ "required": false,
7742
+ "content": {
7743
+ "application/json": {
7744
+ "schema": {
7745
+ "$ref": "#/components/schemas/PostFirstReadMapsIdAcceptRequest"
7746
+ }
7747
+ }
7748
+ },
7749
+ "x-validated": true
7750
+ },
7751
+ "responses": {
7752
+ "200": {
7753
+ "description": "Success."
7754
+ },
7755
+ "400": {
7756
+ "$ref": "#/components/responses/ValidationFailed"
7757
+ },
7758
+ "401": {
7759
+ "$ref": "#/components/responses/Unauthorized"
7760
+ },
7761
+ "403": {
7762
+ "$ref": "#/components/responses/Forbidden"
7763
+ },
7764
+ "404": {
7765
+ "$ref": "#/components/responses/NotFound"
7766
+ }
7767
+ },
7768
+ "security": [
7769
+ {
7770
+ "builderSession": []
7771
+ }
7772
+ ]
7773
+ }
7774
+ },
7775
+ "/first-read/maps/{id}/reject": {
7776
+ "post": {
7777
+ "operationId": "post_first_read_maps_id_reject",
7778
+ "tags": [
7779
+ "first-read"
7780
+ ],
7781
+ "summary": "POST /first-read/maps/:id/reject",
7782
+ "description": ".create — the owner's no. Files nothing.\n\n**Rank:** `metic+archon` — Metic or Archon rank (review/triage powers).\n\n**Permissions:** `goal.create` (all required).",
7783
+ "x-rank": "metic+archon",
7784
+ "x-source": "modules/lifecycle/routes/first-read.js",
7785
+ "x-permissions": [
7786
+ "goal.create"
7787
+ ],
7788
+ "parameters": [
7789
+ {
7790
+ "name": "id",
7791
+ "in": "path",
7792
+ "required": true,
7793
+ "schema": {
7794
+ "type": "string"
7795
+ },
7796
+ "description": "Path parameter `id`."
7797
+ }
7798
+ ],
7799
+ "responses": {
7800
+ "200": {
7801
+ "description": "Success."
7802
+ },
7803
+ "400": {
7804
+ "$ref": "#/components/responses/BadRequest"
7805
+ },
7806
+ "401": {
7807
+ "$ref": "#/components/responses/Unauthorized"
7808
+ },
7809
+ "403": {
7810
+ "$ref": "#/components/responses/Forbidden"
7811
+ },
7812
+ "404": {
7813
+ "$ref": "#/components/responses/NotFound"
7814
+ }
7815
+ },
7816
+ "security": [
7817
+ {
7818
+ "builderSession": []
7819
+ }
7820
+ ]
7821
+ }
7822
+ },
7823
+ "/first-read/prompt": {
7824
+ "get": {
7825
+ "operationId": "get_first_read_prompt",
7826
+ "tags": [
7827
+ "first-read"
7828
+ ],
7829
+ "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).",
7831
+ "x-rank": "any-builder",
7832
+ "x-source": "modules/lifecycle/routes/first-read.js",
7833
+ "responses": {
7834
+ "200": {
7835
+ "description": "Success.",
7836
+ "content": {
7837
+ "application/json": {
7838
+ "schema": {
7839
+ "$ref": "#/components/schemas/GetFirstReadPromptResponse"
7840
+ }
7841
+ }
7842
+ }
7843
+ },
7844
+ "400": {
7845
+ "$ref": "#/components/responses/BadRequest"
7846
+ },
7847
+ "401": {
7848
+ "$ref": "#/components/responses/Unauthorized"
7849
+ },
7850
+ "403": {
7851
+ "$ref": "#/components/responses/Forbidden"
7852
+ }
7853
+ },
7854
+ "security": [
7855
+ {
7856
+ "builderSession": []
7857
+ }
7858
+ ]
7859
+ }
7860
+ },
7612
7861
  "/founding/alive": {
7613
7862
  "post": {
7614
7863
  "operationId": "post_founding_alive",
@@ -25358,6 +25607,69 @@
25358
25607
  ]
25359
25608
  }
25360
25609
  },
25610
+ "/provisioning/instances/{id}/render/sandbox": {
25611
+ "post": {
25612
+ "operationId": "post_provisioning_instances_id_render_sandbox",
25613
+ "tags": [
25614
+ "provisioning"
25615
+ ],
25616
+ "summary": "POST /provisioning/instances/:id/render/sandbox",
25617
+ "description": "POST /provisioning/instances/:id/render/sandbox — rank: any authenticated builder, and OWNER ONLY, like every Render route. An app already on Render adds its sandbox with one action (ADR 0406, task 1005289): the owner lends the key once, and the runner sets up a free app that follows main, beside the live one, which it does not touch. A project with no app on Render is told why it has none. The reply is a receipt.\n\n**Rank:** `any-builder` — Any authenticated builder (row-level ownership enforced in-handler).",
25618
+ "x-rank": "any-builder",
25619
+ "x-source": "modules/provisioning/routes/render-standup.js",
25620
+ "parameters": [
25621
+ {
25622
+ "name": "id",
25623
+ "in": "path",
25624
+ "required": true,
25625
+ "schema": {
25626
+ "type": "string"
25627
+ },
25628
+ "description": "Path parameter `id`."
25629
+ }
25630
+ ],
25631
+ "requestBody": {
25632
+ "required": true,
25633
+ "content": {
25634
+ "application/json": {
25635
+ "schema": {
25636
+ "$ref": "#/components/schemas/PostProvisioningInstancesIdRenderSandboxRequest"
25637
+ }
25638
+ }
25639
+ },
25640
+ "x-validated": true
25641
+ },
25642
+ "responses": {
25643
+ "200": {
25644
+ "description": "Success.",
25645
+ "content": {
25646
+ "application/json": {
25647
+ "schema": {
25648
+ "$ref": "#/components/schemas/PostProvisioningInstancesIdRenderSandboxResponse"
25649
+ }
25650
+ }
25651
+ }
25652
+ },
25653
+ "400": {
25654
+ "$ref": "#/components/responses/ValidationFailed"
25655
+ },
25656
+ "401": {
25657
+ "$ref": "#/components/responses/Unauthorized"
25658
+ },
25659
+ "403": {
25660
+ "$ref": "#/components/responses/Forbidden"
25661
+ },
25662
+ "404": {
25663
+ "$ref": "#/components/responses/NotFound"
25664
+ }
25665
+ },
25666
+ "security": [
25667
+ {
25668
+ "builderSession": []
25669
+ }
25670
+ ]
25671
+ }
25672
+ },
25361
25673
  "/provisioning/instances/{id}/repo-private": {
25362
25674
  "post": {
25363
25675
  "operationId": "post_provisioning_instances_id_repo_private",
@@ -34352,6 +34664,23 @@
34352
34664
  "count"
34353
34665
  ]
34354
34666
  },
34667
+ "GetFirstReadPromptResponse": {
34668
+ "type": "object",
34669
+ "properties": {
34670
+ "schema": {},
34671
+ "file": {},
34672
+ "prompt": {},
34673
+ "example": {},
34674
+ "limits": {}
34675
+ },
34676
+ "required": [
34677
+ "schema",
34678
+ "file",
34679
+ "prompt",
34680
+ "example",
34681
+ "limits"
34682
+ ]
34683
+ },
34355
34684
  "GetFrontDoorGuideMineResponse": {
34356
34685
  "type": "object",
34357
34686
  "properties": {
@@ -35528,6 +35857,7 @@
35528
35857
  "type": "boolean"
35529
35858
  },
35530
35859
  "app": {},
35860
+ "sandbox": {},
35531
35861
  "env_vars": {},
35532
35862
  "values_held": {
35533
35863
  "type": "boolean"
@@ -35536,6 +35866,7 @@
35536
35866
  "required": [
35537
35867
  "ok",
35538
35868
  "app",
35869
+ "sandbox",
35539
35870
  "env_vars",
35540
35871
  "values_held"
35541
35872
  ]
@@ -38845,6 +39176,49 @@
38845
39176
  "hub"
38846
39177
  ]
38847
39178
  },
39179
+ "PostFirstReadMapsIdAcceptRequest": {
39180
+ "type": "object",
39181
+ "properties": {
39182
+ "all": {
39183
+ "type": "boolean"
39184
+ },
39185
+ "items": {
39186
+ "type": "array",
39187
+ "items": {
39188
+ "type": "string"
39189
+ },
39190
+ "maxItems": 500
39191
+ }
39192
+ },
39193
+ "additionalProperties": false
39194
+ },
39195
+ "PostFirstReadMapsRequest": {
39196
+ "type": "object",
39197
+ "properties": {
39198
+ "map": {
39199
+ "type": "object"
39200
+ }
39201
+ },
39202
+ "required": [
39203
+ "map"
39204
+ ],
39205
+ "additionalProperties": false
39206
+ },
39207
+ "PostFirstReadMapsResponse": {
39208
+ "type": "object",
39209
+ "properties": {
39210
+ "map_id": {},
39211
+ "status": {},
39212
+ "items": {},
39213
+ "next": {}
39214
+ },
39215
+ "required": [
39216
+ "map_id",
39217
+ "status",
39218
+ "items",
39219
+ "next"
39220
+ ]
39221
+ },
38848
39222
  "PostFoundingPlanRequest": {
38849
39223
  "type": "object",
38850
39224
  "properties": {
@@ -42310,6 +42684,42 @@
42310
42684
  "message"
42311
42685
  ]
42312
42686
  },
42687
+ "PostProvisioningInstancesIdRenderSandboxRequest": {
42688
+ "type": "object",
42689
+ "properties": {
42690
+ "key": {
42691
+ "type": "string",
42692
+ "maxLength": 200
42693
+ }
42694
+ },
42695
+ "required": [
42696
+ "key"
42697
+ ],
42698
+ "additionalProperties": false
42699
+ },
42700
+ "PostProvisioningInstancesIdRenderSandboxResponse": {
42701
+ "type": "object",
42702
+ "properties": {
42703
+ "ok": {
42704
+ "type": "boolean"
42705
+ },
42706
+ "queued": {
42707
+ "type": "boolean"
42708
+ },
42709
+ "action": {},
42710
+ "sandbox": {
42711
+ "type": "boolean"
42712
+ },
42713
+ "message": {}
42714
+ },
42715
+ "required": [
42716
+ "ok",
42717
+ "queued",
42718
+ "action",
42719
+ "sandbox",
42720
+ "message"
42721
+ ]
42722
+ },
42313
42723
  "PostProvisioningInstancesIdRepoPrivateResponse": {
42314
42724
  "type": "object",
42315
42725
  "properties": {
@@ -42358,6 +42768,7 @@
42358
42768
  "action": {},
42359
42769
  "status": {},
42360
42770
  "superseded": {},
42771
+ "sandbox_key_lent": {},
42361
42772
  "message": {}
42362
42773
  },
42363
42774
  "required": [
@@ -42366,6 +42777,7 @@
42366
42777
  "action",
42367
42778
  "status",
42368
42779
  "superseded",
42780
+ "sandbox_key_lent",
42369
42781
  "message"
42370
42782
  ]
42371
42783
  },
@@ -44894,9 +45306,9 @@
44894
45306
  "description": "A required dependency/feature is not configured or is temporarily down."
44895
45307
  }
44896
45308
  },
44897
- "x-endpoint-count": 719,
44898
- "x-schema-count": 749,
45309
+ "x-endpoint-count": 725,
45310
+ "x-schema-count": 755,
44899
45311
  "x-undocumented-bodies": 12,
44900
- "x-response-schemas": 468,
45312
+ "x-response-schemas": 471,
44901
45313
  "x-generated-by": "scripts/bongos/gen-api-docs.js"
44902
45314
  }
@@ -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. 719 endpoints across 121 route files.
5
+ > **Generated from the live route files** — the route file is authoritative. 725 endpoints across 122 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`.
@@ -315,6 +315,16 @@ Base path: `/api/bongos`. Ranks (enforced server-side, [ADR 0016](adr/0016-trust
315
315
  | POST | `/api/bongos/feedback/receipt` | `any-builder` | `sha256`, `kind` | signed-in builder — a receipt only says "this builder sent this text"; it grants nothing here, and the hub files every report behind a nod. |
316
316
  | GET | `/api/bongos/feedback/receipt/:id` | `public` | — | the hub redeems a receipt with no session of its own. |
317
317
 
318
+ ## `first-read` (5)
319
+
320
+ | Method | Path | Rank | Body | Description |
321
+ |---|---|---|---|---|
322
+ | POST | `/api/bongos/first-read/maps` | `metic+archon` | `map` | .create — a map is a planning proposal for this project. |
323
+ | GET | `/api/bongos/first-read/maps/:id` | `metic+archon` | — | .create — the review is for whoever may accept or reject it. |
324
+ | POST | `/api/bongos/first-read/maps/:id/accept` | `metic+archon` | `all`, `items` | .create + act-alone planning — the owner's yes. |
325
+ | POST | `/api/bongos/first-read/maps/:id/reject` | `metic+archon` | — | .create — the owner's no. |
326
+ | GET | `/api/bongos/first-read/prompt` | `any-builder` | — | the prompt and the shape are instructions, not project data. |
327
+
318
328
  ## `founding` (18)
319
329
 
320
330
  | Method | Path | Rank | Body | Description |
@@ -850,7 +860,7 @@ Base path: `/api/bongos`. Ranks (enforced server-side, [ADR 0016](adr/0016-trust
850
860
  | POST | `/api/bongos/projects/invite` | `metic+archon` | `client_id`, `github_login` | own-or-metic in effect: where to invite a builder into a project, asked by a `project.curate` holder OR the project's OWN OWNER (task 100… |
851
861
  | POST | `/api/bongos/projects/invite-guild` | `metic+archon` | `client_id`, `guild` | own-or-metic in effect, the SAME gate as POST /projects/invite above and for the same reasons (a non-inviter gets that route's unchanged … |
852
862
 
853
- ## `provisioning` (47)
863
+ ## `provisioning` (48)
854
864
 
855
865
  | Method | Path | Rank | Body | Description |
856
866
  |---|---|---|---|---|
@@ -886,6 +896,7 @@ Base path: `/api/bongos`. Ranks (enforced server-side, [ADR 0016](adr/0016-trust
886
896
  | PATCH | `/api/bongos/provisioning/instances/:id/look` | `any-builder` | `look`, `night_tint`, `accent` | PATCH — rank: any authenticated builder (own resource; archon may change any). |
887
897
  | GET | `/api/bongos/provisioning/instances/:id/render` | `any-builder` | — | GET /provisioning/instances/:id/render — rank: any authenticated builder, and OWNER ONLY, like the POST (task 1004353). |
888
898
  | POST | `/api/bongos/provisioning/instances/:id/render` | `any-builder` | `key`, `owner_id`, `mode`, `service_id`, `web_plan`, `db_plan`, `region`, `runtime`, `build_command`, `start_command`, `database` | POST /provisioning/instances/:id/render — rank: any authenticated builder, and OWNER ONLY: the key is the owner's and so is the account i… |
899
+ | POST | `/api/bongos/provisioning/instances/:id/render/sandbox` | `any-builder` | `key` | POST /provisioning/instances/:id/render/sandbox — rank: any authenticated builder, and OWNER ONLY, like every Render route. |
889
900
  | POST | `/api/bongos/provisioning/instances/:id/repo-private` | `any-builder` | validated | POST /provisioning/instances/:id/repo-private — rank: any authenticated builder, and OWNER ONLY: no archon override, because the runner f… |
890
901
  | POST | `/api/bongos/provisioning/instances/:id/restart` | `any-builder` | — | POST /provisioning/instances/:id/restart — restart an ACTIVE project the heartbeat cannot reach (task 1003238). |
891
902
  | GET | `/api/bongos/provisioning/instances/:id/settings` | `any-builder` | — | GET /provisioning/instances/:id/settings — read a project's effective settings + the allowed values (so a form can render its choices). |
@@ -3470,5 +3470,7 @@ is load-bearing: the script throws rather than guess if it is missing, and
3470
3470
  landed since 1.25.13 with no explicit bump. run 43497325035. (task 1002620)
3471
3471
  1.25.16 — CI auto-patch (publish-on-merge, ADR 0161): carrier for merges
3472
3472
  landed since 1.25.14 with no explicit bump. run 43503871976. (task 1002620)
3473
+ 1.25.17 — CI auto-patch (publish-on-merge, ADR 0161): carrier for merges
3474
+ landed since 1.25.16 with no explicit bump. run 43506364199. (task 1002620)
3473
3475
  ---------------------------------------------------------------------------
3474
3476
  ```
@@ -4138,7 +4138,7 @@
4138
4138
  "surface": "landing",
4139
4139
  "title": "{{productName}} — projects",
4140
4140
  "states_read": ["out-map","in-map","in-map-projects","in-map-profile","in-map-kbd","in-map-search","in-map-mine-on","in-table","in-table-by-builders","in-mine","in-manage","in-manage-address","in-manage-planet","in-manage-card","in-manage-look","in-manage-kind","in-manage-invite","in-manage-invite-handoff","in-manage-invite-guild","in-manage-app-live","in-manage-app-building","in-manage-app-failed","in-manage-app-retry","in-manage-app-offer","in-manage-app-connect","in-manage-snag","in-manage-gone","in-manage-missing","out-manage","in-new","in-new-named","in-new-ready","in-new-name-prefilled","in-new-demo","in-new-demo-used","in-new-checks-filled","in-new-checks-entity","in-new-row-code","in-new-row-address","in-new-row-team","in-new-row-extras","in-new-row-rewards","in-new-row-app","in-new-row-run","in-new-row-ship","in-new-look","in-new-look-custom","in-new-create-blocked","in-new-done","in-new-resume-offer","out-new","out-map-projects","card","card-noart","card-self","in-manage-demo","in-mine-dns-pending","in-manage-dns-pending","in-mine-empty","card-floor","card-backdrop","in-google","in-new-done-live","setup-just-created","setup-waiting-on-github","setup-installing","setup-stopped","setup-all-done","setup-cloud-hop-open"],
4141
- "files_hash": "0024fb5540541bf6",
4141
+ "files_hash": "5534a50b3bece717",
4142
4142
  "reading_hash": "c22f44c534cabbdd",
4143
4143
  "counts": {"lines":687,"placed":239,"shared":23,"unplaced":425},
4144
4144
  "omitted": {"data":135},
@@ -94,6 +94,7 @@ const AREAS = Object.freeze([
94
94
  'POST /goals/reorder',
95
95
  'POST /work-categories',
96
96
  'PUT /versions/focus',
97
+ 'POST /first-read/maps/:id/accept', // task 1005280: accepting a repository map files goals
97
98
  ]) }),
98
99
  Object.freeze({ key: 'automation', name: 'Automation', gate: 'autonomy.fence.manage',
99
100
  today: 'whoever may switch unattended building on and off', acts: Object.freeze([