@rathnasgala2/schemas 3.23.1 → 3.25.0

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 (52) hide show
  1. package/THIRD_PARTY_LICENSES.json +1 -1
  2. package/diagnostics/diagnostic-map.json +222 -0
  3. package/docs/catalogs/app-components.json +239 -1
  4. package/docs/catalogs/app-routes.json +71 -2
  5. package/docs/catalogs/schema-inventory.json +6 -6
  6. package/examples/valid/build-input/rules.json +118 -0
  7. package/examples/valid/content-frontmatter/rules.json +11 -0
  8. package/examples/valid/deployment-receipt/rules.json +150 -0
  9. package/examples/valid/publication/rules.json +107 -0
  10. package/fixtures/boundary/build-input/rules.json +127 -0
  11. package/fixtures/boundary/content-frontmatter/rules.json +11 -0
  12. package/fixtures/boundary/deployment-receipt/rules.json +163 -0
  13. package/fixtures/boundary/publication/rules.json +116 -0
  14. package/fixtures/invalid/build-input/REQUEST_FIELD_UNKNOWN/cases.json +38 -0
  15. package/fixtures/invalid/build-input/SCHEMA_ENUM_INVALID/cases.json +18 -0
  16. package/fixtures/invalid/build-input/SCHEMA_NUMBER_TOO_LARGE/cases.json +11 -0
  17. package/fixtures/invalid/build-input/SCHEMA_NUMBER_TOO_SMALL/cases.json +44 -0
  18. package/fixtures/invalid/build-input/SCHEMA_PATTERN_INVALID/cases.json +9 -0
  19. package/fixtures/invalid/build-input/SCHEMA_REQUIRED_FIELD_MISSING/cases.json +18 -0
  20. package/fixtures/invalid/build-input/SCHEMA_TYPE_INVALID/cases.json +89 -0
  21. package/fixtures/invalid/content-frontmatter/SCHEMA_PATTERN_INVALID/cases.json +9 -0
  22. package/fixtures/invalid/content-frontmatter/SCHEMA_TYPE_INVALID/cases.json +9 -0
  23. package/fixtures/invalid/deployment-receipt/REQUEST_FIELD_UNKNOWN/cases.json +51 -0
  24. package/fixtures/invalid/deployment-receipt/SCHEMA_ARRAY_TOO_LONG/cases.json +15 -0
  25. package/fixtures/invalid/deployment-receipt/SCHEMA_ENUM_INVALID/cases.json +11 -0
  26. package/fixtures/invalid/deployment-receipt/SCHEMA_NUMBER_TOO_SMALL/cases.json +66 -0
  27. package/fixtures/invalid/deployment-receipt/SCHEMA_REQUIRED_FIELD_MISSING/cases.json +101 -0
  28. package/fixtures/invalid/deployment-receipt/SCHEMA_TYPE_INVALID/cases.json +108 -0
  29. package/fixtures/invalid/publication/REQUEST_FIELD_UNKNOWN/cases.json +38 -0
  30. package/fixtures/invalid/publication/SCHEMA_ENUM_INVALID/cases.json +18 -0
  31. package/fixtures/invalid/publication/SCHEMA_NUMBER_TOO_LARGE/cases.json +13 -0
  32. package/fixtures/invalid/publication/SCHEMA_NUMBER_TOO_SMALL/cases.json +46 -0
  33. package/fixtures/invalid/publication/SCHEMA_REQUIRED_FIELD_MISSING/cases.json +18 -0
  34. package/fixtures/invalid/publication/SCHEMA_TYPE_INVALID/cases.json +80 -0
  35. package/fixtures/manifest.json +1710 -8
  36. package/fixtures/unknown-field/build-input/rules.json +63 -0
  37. package/fixtures/unknown-field/content-frontmatter/rules.json +2 -0
  38. package/fixtures/unknown-field/deployment-receipt/rules.json +76 -0
  39. package/fixtures/unknown-field/publication/rules.json +61 -0
  40. package/generated/browser/validator-core.mjs +3 -3
  41. package/generated/typescript/contracts/build-input.d.ts +24 -0
  42. package/generated/typescript/contracts/content-frontmatter.d.ts +3 -0
  43. package/generated/typescript/contracts/deployment-receipt.d.ts +18 -0
  44. package/generated/typescript/contracts/publication.d.ts +21 -0
  45. package/openapi/http-catalog.json +41 -2
  46. package/openapi/openapi.yaml +885 -10
  47. package/package.json +1 -1
  48. package/sbom.cdx.json +23 -23
  49. package/schemas/build-input.schema.json +47 -0
  50. package/schemas/content-frontmatter.schema.json +6 -0
  51. package/schemas/deployment-receipt.schema.json +35 -0
  52. package/schemas/publication.schema.json +41 -0
@@ -4123,7 +4123,7 @@ components:
4123
4123
  then:
4124
4124
  required:
4125
4125
  - publishing
4126
- description: Everything a Home screen needs in one read. `url` is the live site address, `null` when nothing has been published. `lastPublished` is absent when `state` is `NEVER_PUBLISHED`. `publishing` is present exactly while `state` is `PUBLISHING`. `schedule` (SCHEMA-3.3.0, optional) is present while a scheduled publish is pending; a pending schedule never makes `state` `PUBLISHING` -- the site reads as it would without it until the schedule starts. `nextRelease` (SCHEMA-3.19.0, optional and nullable) is the scheduled draft that the staggered release will publish next, the one with the earliest `publishAfter` date; `null` or absent when there is none.
4126
+ description: Everything a Home screen needs in one read. `url` is the live site address, `null` when nothing has been published. `lastPublished` is absent when `state` is `NEVER_PUBLISHED`. `publishing` is present exactly while `state` is `PUBLISHING`. `schedule` (SCHEMA-3.3.0, optional) is present while a scheduled publish is pending; a pending schedule never makes `state` `PUBLISHING` -- the site reads as it would without it until the schedule starts. `nextRelease` (SCHEMA-3.19.0, optional and nullable) is the scheduled draft that the staggered release will publish next, the one with the earliest `publishAfter` date; `null` or absent when there is none. `liveUpdate` (SCHEMA-3.24.0, required) says whether the live version has fallen behind the repository's default branch and what publishing the update would put live; see `SiteLiveUpdate` and `POST .../site:publish-update`.
4127
4127
  properties:
4128
4128
  attention:
4129
4129
  items:
@@ -4132,6 +4132,8 @@ components:
4132
4132
  type: array
4133
4133
  lastPublished:
4134
4134
  $ref: "#/components/schemas/SiteLastPublished"
4135
+ liveUpdate:
4136
+ $ref: "#/components/schemas/SiteLiveUpdate"
4135
4137
  nextRelease:
4136
4138
  oneOf:
4137
4139
  - $ref: "#/components/schemas/SiteNextRelease"
@@ -4165,6 +4167,7 @@ components:
4165
4167
  - state
4166
4168
  - pendingChanges
4167
4169
  - attention
4170
+ - liveUpdate
4168
4171
  type: object
4169
4172
  GetOrganizationsByOrganizationIdPublicationsByPublicationIdTransfersByTransferIdResponse:
4170
4173
  allOf:
@@ -4773,6 +4776,48 @@ components:
4773
4776
  type: object
4774
4777
  GetPlatformPlansResponse:
4775
4778
  $ref: "#/components/schemas/PlatformPlanCapacityRelease"
4779
+ GetPlatformPrismGenerationsResponse:
4780
+ additionalProperties: false
4781
+ allOf:
4782
+ - else:
4783
+ properties:
4784
+ nextCursor:
4785
+ type: "null"
4786
+ if:
4787
+ properties:
4788
+ hasMore:
4789
+ not:
4790
+ enum:
4791
+ - false
4792
+ type: boolean
4793
+ x-gala-const: true
4794
+ required:
4795
+ - hasMore
4796
+ then:
4797
+ properties:
4798
+ nextCursor:
4799
+ type: string
4800
+ required:
4801
+ - nextCursor
4802
+ properties:
4803
+ hasMore:
4804
+ type: boolean
4805
+ items:
4806
+ items:
4807
+ $ref: "#/components/schemas/PlatformPrismGeneration"
4808
+ maxItems: 100
4809
+ type: array
4810
+ nextCursor:
4811
+ description: Opaque cursor for the next page. Present and non-null exactly when `hasMore` is true; absent or null when `hasMore` is false.
4812
+ maxLength: 2048
4813
+ minLength: 1
4814
+ type:
4815
+ - string
4816
+ - "null"
4817
+ required:
4818
+ - items
4819
+ - hasMore
4820
+ type: object
4776
4821
  GetPlatformSettingsByKeyResponse:
4777
4822
  $ref: "#/components/schemas/PlatformSetting"
4778
4823
  GetPlatformSettingsOverridesByKindByIdByKeyResponse:
@@ -5690,7 +5735,7 @@ components:
5690
5735
  additionalProperties: false
5691
5736
  properties:
5692
5737
  reasonCode:
5693
- description: "A free string. Known values: RUN_NOT_STARTED, BUILD_FAILED, RUN_CANCELLED, RUN_TIMED_OUT, WORKFLOW_UNAVAILABLE, DEPLOY_FAILED, PAGES_NOT_AVAILABLE, REPORT_FAILED, LIVE_CHECK_FAILED, CHANGE_CLOSED_ON_GITHUB and, new in 3.17.0, DESTINATION_BUSY_TIMEOUT, DESTINATION_FENCE_EXPIRED, CANONICAL_BASE_MISMATCH, DOMAIN_NOT_READY (the same codes as `OperationReason`). Clients must tolerate other values."
5738
+ description: "A free string. Known values: RUN_NOT_STARTED, BUILD_FAILED, RUN_CANCELLED, RUN_TIMED_OUT, WORKFLOW_UNAVAILABLE, DEPLOY_FAILED, PAGES_NOT_AVAILABLE, REPORT_FAILED, LIVE_CHECK_FAILED, CHANGE_CLOSED_ON_GITHUB and, new in 3.17.0, DESTINATION_BUSY_TIMEOUT, DESTINATION_FENCE_EXPIRED, CANONICAL_BASE_MISMATCH, DOMAIN_NOT_READY and, new in 3.25.0, PAGE_LOSS_GUARD (the same codes as `OperationReason`). Clients must tolerate other values."
5694
5739
  maxLength: 80
5695
5740
  minLength: 1
5696
5741
  type: string
@@ -6476,10 +6521,14 @@ components:
6476
6521
  format: uuid
6477
6522
  pattern: ^[0-9a-f]{8}-[0-9a-f]{4}-7[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$
6478
6523
  type: string
6524
+ performance:
6525
+ $ref: "#/components/schemas/PortableDeploymentReceiptDeploymentPerformance"
6479
6526
  phase:
6480
6527
  $ref: "#/components/schemas/OperationPhase"
6481
6528
  reason:
6482
6529
  $ref: "#/components/schemas/OperationReason"
6530
+ reasonDetails:
6531
+ $ref: "#/components/schemas/PageLossGuardDetails"
6483
6532
  recoveryActions:
6484
6533
  items:
6485
6534
  maxLength: 80
@@ -7452,6 +7501,8 @@ components:
7452
7501
  format: uuid
7453
7502
  pattern: ^[0-9a-f]{8}-[0-9a-f]{4}-7[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$
7454
7503
  type: string
7504
+ performance:
7505
+ $ref: "#/components/schemas/PortableDeploymentReceiptDeploymentPerformance"
7455
7506
  phase:
7456
7507
  enum:
7457
7508
  - accepted
@@ -7463,6 +7514,8 @@ components:
7463
7514
  type: string
7464
7515
  reason:
7465
7516
  $ref: "#/components/schemas/OperationReason"
7517
+ reasonDetails:
7518
+ $ref: "#/components/schemas/PageLossGuardDetails"
7466
7519
  recoveryActions:
7467
7520
  items:
7468
7521
  maxLength: 80
@@ -7591,7 +7644,10 @@ components:
7591
7644
  run settled with no receipt), `CANONICAL_BASE_MISMATCH` (the site's
7592
7645
  canonical base was not the address it is served from when the
7593
7646
  operation was dispatched) and `DOMAIN_NOT_READY` (a custom domain was
7594
- part-way through its switch and no origin could be verified).
7647
+ part-way through its switch and no origin could be verified). New in
7648
+ 3.25.0: `PAGE_LOSS_GUARD` (the publish would have removed too many pages
7649
+ from the live site, so authorization was refused and nothing was
7650
+ deployed; the operation's `reasonDetails` carry the counts).
7595
7651
  maxLength: 64
7596
7652
  minLength: 3
7597
7653
  pattern: ^[A-Z][A-Z0-9_]{2,63}$
@@ -7791,6 +7847,34 @@ components:
7791
7847
  - REVOKED
7792
7848
  - EXPIRED
7793
7849
  type: string
7850
+ PageLossGuardDetails:
7851
+ additionalProperties: false
7852
+ description: |
7853
+ SCHEMA-3.25.0. Present on an operation read when `reason` is
7854
+ `PAGE_LOSS_GUARD`: the candidate build has fewer pages than the last
7855
+ successful deployment of the same site and target. `lostPageCount` is
7856
+ `previousPageCount - candidatePageCount`; `permittedLoss` is the loss
7857
+ the platform settings allow. A person who accepts the loss publishes
7858
+ again with `allowPageLoss: true`.
7859
+ properties:
7860
+ candidatePageCount:
7861
+ minimum: 0
7862
+ type: integer
7863
+ lostPageCount:
7864
+ minimum: 0
7865
+ type: integer
7866
+ permittedLoss:
7867
+ minimum: 0
7868
+ type: integer
7869
+ previousPageCount:
7870
+ minimum: 0
7871
+ type: integer
7872
+ required:
7873
+ - previousPageCount
7874
+ - candidatePageCount
7875
+ - lostPageCount
7876
+ - permittedLoss
7877
+ type: object
7794
7878
  PasskeyState:
7795
7879
  enum:
7796
7880
  - ACTIVE
@@ -8657,6 +8741,36 @@ components:
8657
8741
  - PRO
8658
8742
  - BUSINESS
8659
8743
  type: string
8744
+ PlatformPrismGeneration:
8745
+ additionalProperties: false
8746
+ description: SCHEMA-3.25.0. One Prism generation as the operator list shows it, ownership and state only, never article text or the candidate body.
8747
+ properties:
8748
+ createdAt:
8749
+ $ref: "#/components/schemas/PortableProblemRfc3339"
8750
+ editionKind:
8751
+ $ref: "#/components/schemas/PrismEditionKind"
8752
+ generationId:
8753
+ format: uuid
8754
+ pattern: ^[0-9a-f]{8}-[0-9a-f]{4}-7[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$
8755
+ type: string
8756
+ organizationId:
8757
+ format: uuid
8758
+ pattern: ^[0-9a-f]{8}-[0-9a-f]{4}-7[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$
8759
+ type: string
8760
+ publicationId:
8761
+ format: uuid
8762
+ pattern: ^[0-9a-f]{8}-[0-9a-f]{4}-7[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$
8763
+ type: string
8764
+ state:
8765
+ $ref: "#/components/schemas/PrismGenerationState"
8766
+ required:
8767
+ - generationId
8768
+ - organizationId
8769
+ - publicationId
8770
+ - editionKind
8771
+ - state
8772
+ - createdAt
8773
+ type: object
8660
8774
  PlatformSetting:
8661
8775
  additionalProperties: false
8662
8776
  description: "An app-wide setting: the active release value, or the default when none is released."
@@ -9044,6 +9158,10 @@ components:
9044
9158
  minimum: 1
9045
9159
  required: []
9046
9160
  type: object
9161
+ PortableContentFrontmatterDeleteDate:
9162
+ description: "SCHEMA-3.25.0: the calendar date (`YYYY-MM-DD`, day precision, read in the publication's staggered-release timezone) on or after which Galascribe removes this article from the published site: it leaves every listing, feed, sitemap and search index and its route renders a removed-post notice. Same format as `publishAfter`; it must be later than `publishAfter` and `date` when both exist. The API enforces that rule; the schema only fixes the shape."
9163
+ pattern: ^\d{4}-\d{2}-\d{2}$
9164
+ type: string
9047
9165
  PortableContentFrontmatterDigest:
9048
9166
  pattern: ^sha256:[0-9a-f]{64}$
9049
9167
  type: string
@@ -9111,6 +9229,8 @@ components:
9111
9229
  type: array
9112
9230
  createdAt:
9113
9231
  $ref: "#/components/schemas/PortableContentFrontmatterRfc3339"
9232
+ deleteDate:
9233
+ $ref: "#/components/schemas/PortableContentFrontmatterDeleteDate"
9114
9234
  description:
9115
9235
  $ref: "#/components/schemas/PortableContentFrontmatterPlainText"
9116
9236
  x-gala-graphemeLength:
@@ -12985,6 +13105,57 @@ components:
12985
13105
  - evidenceDigest
12986
13106
  - probes
12987
13107
  type: object
13108
+ PortableDeploymentReceiptDeploymentPerformance:
13109
+ additionalProperties: false
13110
+ description: "SCHEMA-3.25.0: the publish kernel's size-budget summary of the final artifact. `budgets` are the effective byte budgets; `overBudgetCount` counts every page asset over budget; `overBudget` lists at most 20, largest first. Informational: it never fails a publish."
13111
+ properties:
13112
+ budgets:
13113
+ additionalProperties: false
13114
+ properties:
13115
+ cssBytes:
13116
+ minimum: 1024
13117
+ type: integer
13118
+ htmlBytes:
13119
+ minimum: 1024
13120
+ type: integer
13121
+ jsBytes:
13122
+ minimum: 1024
13123
+ type: integer
13124
+ required: []
13125
+ type: object
13126
+ overBudget:
13127
+ items:
13128
+ additionalProperties: false
13129
+ properties:
13130
+ budget:
13131
+ minimum: 1024
13132
+ type: integer
13133
+ bytes:
13134
+ minimum: 0
13135
+ type: integer
13136
+ kind:
13137
+ enum:
13138
+ - html
13139
+ - css
13140
+ - js
13141
+ path:
13142
+ $ref: "#/components/schemas/PortableDeploymentReceiptRepoRelativePath"
13143
+ required:
13144
+ - path
13145
+ - kind
13146
+ - bytes
13147
+ - budget
13148
+ type: object
13149
+ maxItems: 20
13150
+ type: array
13151
+ overBudgetCount:
13152
+ minimum: 0
13153
+ type: integer
13154
+ required:
13155
+ - budgets
13156
+ - overBudgetCount
13157
+ - overBudget
13158
+ type: object
12988
13159
  PortableDeploymentReceiptDeploymentWarning:
12989
13160
  oneOf:
12990
13161
  - allOf:
@@ -13834,6 +14005,8 @@ components:
13834
14005
  - superseded
13835
14006
  - unknown-reconciling
13836
14007
  - rolled-back
14008
+ performance:
14009
+ $ref: "#/components/schemas/PortableDeploymentReceiptDeploymentPerformance"
13837
14010
  provenanceDigest:
13838
14011
  $ref: "#/components/schemas/PortableDeploymentReceiptDigest"
13839
14012
  publisher:
@@ -15727,6 +15900,10 @@ components:
15727
15900
  PostOrganizationsByOrganizationIdPublicationsByPublicationIdChangesPublishRequest:
15728
15901
  additionalProperties: false
15729
15902
  properties:
15903
+ allowPageLoss:
15904
+ default: false
15905
+ description: "SCHEMA-3.25.0: true accepts that this publish may remove many pages from the live site. The server stores it with the operation and skips the page-loss guard; absent or false keeps the guard on (a publish that would lose too many pages ends `FAILED_NO_EFFECT` with reason `PAGE_LOSS_GUARD`)."
15906
+ type: boolean
15730
15907
  changeIds:
15731
15908
  items:
15732
15909
  format: uuid
@@ -16225,6 +16402,10 @@ components:
16225
16402
  PostOrganizationsByOrganizationIdPublicationsByPublicationIdPublishesRequest:
16226
16403
  additionalProperties: false
16227
16404
  properties:
16405
+ allowPageLoss:
16406
+ default: false
16407
+ description: "SCHEMA-3.25.0: true accepts that this publish may remove many pages from the live site. The server stores it with the operation and skips the page-loss guard; absent or false keeps the guard on (a publish that would lose too many pages ends `FAILED_NO_EFFECT` with reason `PAGE_LOSS_GUARD`)."
16408
+ type: boolean
16228
16409
  reviewId:
16229
16410
  format: uuid
16230
16411
  pattern: ^[0-9a-f]{8}-[0-9a-f]{4}-7[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$
@@ -16667,6 +16848,21 @@ components:
16667
16848
  - statusUrl
16668
16849
  - reviewId
16669
16850
  type: object
16851
+ PostOrganizationsByOrganizationIdPublicationsByPublicationIdSitePublishUpdateRequest:
16852
+ additionalProperties: false
16853
+ description: |
16854
+ `headCommit` is the `liveUpdate.headCommit` the client read and the
16855
+ person confirmed. The server publishes that head only while it is still
16856
+ the repository's head.
16857
+ properties:
16858
+ headCommit:
16859
+ $ref: "#/components/schemas/PortableDeploymentIntentGitObjectId"
16860
+ required:
16861
+ - headCommit
16862
+ type: object
16863
+ PostOrganizationsByOrganizationIdPublicationsByPublicationIdSitePublishUpdateResponse:
16864
+ allOf:
16865
+ - $ref: "#/components/schemas/PostOrganizationsByOrganizationIdPublicationsByPublicationIdPublishesResponse"
16670
16866
  PostOrganizationsByOrganizationIdPublicationsByPublicationIdTransfersByTransferIdCancelRequest:
16671
16867
  additionalProperties: false
16672
16868
  properties:
@@ -19414,6 +19610,10 @@ components:
19414
19610
  manifestDigest:
19415
19611
  pattern: ^sha256:[0-9a-f]{64}$
19416
19612
  type: string
19613
+ pageCount:
19614
+ description: "SCHEMA-3.25.0: the number of `.html` files in the artifact. Optional so a kernel built before 3.25.0 still validates; an absent count exempts the deployment from the page-loss guard."
19615
+ minimum: 0
19616
+ type: integer
19417
19617
  pagesBuildVersion:
19418
19618
  description: |
19419
19619
  The Pages build version this deployment addresses, when the
@@ -20463,6 +20663,85 @@ components:
20463
20663
  - at
20464
20664
  - actor
20465
20665
  type: object
20666
+ SiteLiveUpdate:
20667
+ additionalProperties: false
20668
+ description: |
20669
+ SCHEMA-3.24.0. Whether the live version has fallen behind the
20670
+ repository's default branch, and what publishing the update would put
20671
+ live. `state` is `CURRENT` when the live version is the head, `BEHIND`
20672
+ when the head holds commits the live version lacks, and `UNKNOWN` when
20673
+ nothing has been published yet, the site has no repository binding, or
20674
+ GitHub could not be reached; a client shows nothing extra for `UNKNOWN`.
20675
+ `servedCommit` is the source commit of the live version and
20676
+ `headCommit` is the head the server compared it against, both `null`
20677
+ when they are not known. A client sends `headCommit` back as the body of
20678
+ `POST .../site:publish-update`. `waiting` counts the commits on the head
20679
+ that are not in the live version. `unreviewed` is true when the site
20680
+ requires review and `waiting.authorCommits` is above 0 or
20681
+ `waiting.truncated` is true (a cut-short comparison cannot rule out such
20682
+ commits): those commits never went through a Galascribe review, and a
20683
+ person's press of the publish action counts as their approval. `restored` is true when the
20684
+ live version is a restore of an older version rather than the newest
20685
+ publish; publishing the update replaces it. `publishing` is true while a
20686
+ publish of any kind is already in flight for the site, so a client shows
20687
+ its progress instead of the action.
20688
+ properties:
20689
+ headCommit:
20690
+ oneOf:
20691
+ - $ref: "#/components/schemas/PortableDeploymentIntentGitObjectId"
20692
+ - type: "null"
20693
+ publishing:
20694
+ type: boolean
20695
+ restored:
20696
+ type: boolean
20697
+ servedCommit:
20698
+ oneOf:
20699
+ - $ref: "#/components/schemas/PortableDeploymentIntentGitObjectId"
20700
+ - type: "null"
20701
+ state:
20702
+ enum:
20703
+ - CURRENT
20704
+ - BEHIND
20705
+ - UNKNOWN
20706
+ type: string
20707
+ unreviewed:
20708
+ type: boolean
20709
+ waiting:
20710
+ $ref: "#/components/schemas/SiteLiveUpdateWaiting"
20711
+ required:
20712
+ - state
20713
+ - servedCommit
20714
+ - headCommit
20715
+ - waiting
20716
+ - unreviewed
20717
+ - restored
20718
+ - publishing
20719
+ type: object
20720
+ SiteLiveUpdateWaiting:
20721
+ additionalProperties: false
20722
+ description: |
20723
+ What the repository's default branch holds that the live version does
20724
+ not: the commits on the head that are not in the live version, split by
20725
+ who made them. `authorCommits` are commits a person made outside
20726
+ Galascribe (a push, the GitHub web editor); `galascribeCommits` are
20727
+ Galascribe's own system commits (set-up, Update now and toolchain
20728
+ updates). Both are 0 when the state is `CURRENT` or `UNKNOWN`.
20729
+ `truncated` is true when the comparison was cut short, in which case
20730
+ the counts are lower bounds.
20731
+ properties:
20732
+ authorCommits:
20733
+ minimum: 0
20734
+ type: integer
20735
+ galascribeCommits:
20736
+ minimum: 0
20737
+ type: integer
20738
+ truncated:
20739
+ type: boolean
20740
+ required:
20741
+ - authorCommits
20742
+ - galascribeCommits
20743
+ - truncated
20744
+ type: object
20466
20745
  SiteNextRelease:
20467
20746
  additionalProperties: false
20468
20747
  description: "The next draft the staggered release will publish (SCHEMA-3.19.0): `slug` is the draft's slug and `publishAfter` its `YYYY-MM-DD` date, read in the publication's staggered-release timezone."
@@ -53709,7 +53988,9 @@ paths:
53709
53988
  description: |
53710
53989
  The one read behind a Home screen: the live address, whether the site is live, publishing or has never been published, who published last, the unpublished changes in words, and what needs attention.
53711
53990
 
53712
- `pendingChanges` holds exactly one entry per path (and one for the look): the newest unpublished change for a path wins, older ones are superseded and omitted. `review` is `NOT_REQUIRED` unless the publication's `publishingPolicy.requireReview` is true. `attention[].code` is a closed vocabulary; `relatedChangeId` names the change that needs the action. `publishing.stage` follows `QUEUED`, `PREPARING`, `BUILDING`, `GOING_LIVE`, `CHECKING_LIVE`; `publishing.runUrl` links the GitHub run and `publishing.stageSince` says when the stage began. Read from the platform's own records; nothing is read from the person's repository.
53991
+ `pendingChanges` holds exactly one entry per path (and one for the look): the newest unpublished change for a path wins, older ones are superseded and omitted. `review` is `NOT_REQUIRED` unless the publication's `publishingPolicy.requireReview` is true. `attention[].code` is a closed vocabulary; `relatedChangeId` names the change that needs the action. `publishing.stage` follows `QUEUED`, `PREPARING`, `BUILDING`, `GOING_LIVE`, `CHECKING_LIVE`; `publishing.runUrl` links the GitHub run and `publishing.stageSince` says when the stage began. Read from the platform's own records, except `liveUpdate`.
53992
+
53993
+ `liveUpdate` (SCHEMA-3.24.0) says whether the live version has fallen behind the repository's default branch, which is what should be live. `state` is `CURRENT`, `BEHIND` or `UNKNOWN` (never published, no repository binding, or GitHub could not be reached; a client shows nothing extra for `UNKNOWN`, and the rest of the read is unaffected). `servedCommit` is the source commit of the live version; `headCommit` is the head the server compared it against, read from GitHub and possibly a short-lived cached read; a client sends `headCommit` back to `POST .../site:publish-update`. `waiting` counts the commits on the head that are not in the live version, split into `authorCommits` (made outside Galascribe) and `galascribeCommits` (Galascribe's own system commits), with `truncated` true when the comparison was cut short. `unreviewed` is true when the site requires review and `waiting.authorCommits` is above 0 or `waiting.truncated` is true. `restored` is true when the live version is a restore of an older version rather than the newest publish. `publishing` is true while a publish of any kind is in flight for the site.
53713
53994
  operationId: getOrganizationsByOrganizationIdPublicationsByPublicationIdSite
53714
53995
  parameters:
53715
53996
  - $ref: "#/components/parameters/XCorrelationId"
@@ -53744,6 +54025,17 @@ paths:
53744
54025
  actor:
53745
54026
  displayName: Asha Rao
53746
54027
  at: "2026-10-05T09:30:00Z"
54028
+ liveUpdate:
54029
+ headCommit: sha1:2222222222222222222222222222222222222222
54030
+ publishing: false
54031
+ restored: false
54032
+ servedCommit: sha1:1111111111111111111111111111111111111111
54033
+ state: BEHIND
54034
+ unreviewed: true
54035
+ waiting:
54036
+ authorCommits: 2
54037
+ galascribeCommits: 1
54038
+ truncated: false
53747
54039
  pendingChanges:
53748
54040
  - action: EDIT
53749
54041
  author:
@@ -53899,27 +54191,441 @@ paths:
53899
54191
  - RESOURCE_NOT_FOUND
53900
54192
  security:
53901
54193
  - browserSession: []
53902
- summary: read the site summary of this publication
54194
+ summary: read the site summary of this publication
54195
+ tags:
54196
+ - organizations
54197
+ x-gala-activation-gate: MVP
54198
+ x-gala-activation-guards:
54199
+ - NONE
54200
+ x-gala-capability-key: publication.view
54201
+ x-gala-concurrency: publication-and-destination-epochs
54202
+ x-gala-conditional-capabilities: []
54203
+ x-gala-example-profile: NOMINAL_SUCCESS_AND_EACH_REACHABLE_PROBLEM
54204
+ x-gala-nullability: required-and-nullable-are-explicit
54205
+ x-gala-purpose: read the site summary of this publication
54206
+ x-gala-reachable-problems:
54207
+ - AUTHENTICATION_REQUIRED
54208
+ - AUTHORIZATION_DENIED
54209
+ - RESOURCE_NOT_FOUND
54210
+ - VALIDATION_FAILED
54211
+ x-gala-replay-identity: safe-query
54212
+ x-gala-state-guards:
54213
+ - NONE
54214
+ x-gala-success-category: query
54215
+ x-gala-tenant-scope: ORGANIZATION_AND_PUBLICATION_PATH
54216
+ /v2/organizations/{organizationId}/publications/{publicationId}/site:publish-update:
54217
+ post:
54218
+ description: |
54219
+ Publishes the repository's current default-branch head when the live version is behind it ("Publish the update"): the commits made outside Galascribe by a push or the GitHub web editor, Galascribe's own system commits that were held back, and the head after a failed publish. The body names the `headCommit` the client read from the site read's `liveUpdate`. Success is `202` with the accepted operation (kind `publish`; `publishId` names it, and the operation's `subject.generationId` names the generation once it exists), the same shape as `changes:publish`. No change is named and nothing is merged: the head is built as it stands. A post dated for later is a draft with `publishAfter` and a production build leaves drafts out, so publishing the update never releases one early.
54220
+
54221
+ The person pressing the action is the approval. When the publication's `publishingPolicy.requireReview` is true and `liveUpdate.unreviewed` is true, the commits counted in `liveUpdate.waiting.authorCommits` never went through a Galascribe review; a person's press of this action counts as approval of those commits, so no `REVIEW_REQUIRED` refusal applies here and the press is recorded against the person. A client shows what will go live and says so before it asks. The same press replaces a restored version: when `liveUpdate.restored` is true the live version is a restore of an older version (a rollback), and publishing the update puts the head live in its place. The automatic paths (self-heal and the set-up republish) never move a restored site; only this action does. After a publish that gave up or is backing off, a press starts a fresh attempt.
54222
+
54223
+ The person needs `publication.publish` and a recent authentication: a stale session gets `401 REAUTH_REQUIRED` and the client confirms the person again and resumes. `Idempotency-Key` is required; a replay with the same key and body returns the first result, the same key with a different body is `409 COMMAND_REPLAY_CONFLICT`. The server checks, in this order and with nothing written on a refusal: `409 HEAD_MOVED` when the repository head is no longer `headCommit` (the client reads the site again and asks again with the new head); `409 ALREADY_LIVE` when the live version is already that head; `409 PUBLISH_IN_PROGRESS` while a publish of any kind is in flight for the site; `409 NOT_SET_UP` when the repository has not been set up for the current Galascribe toolchain, and Update now (`POST .../repository:set-up`) comes first. This operation is not callable with an admin API key.
54224
+ operationId: postOrganizationsByOrganizationIdPublicationsByPublicationIdSitePublishUpdate
54225
+ parameters:
54226
+ - $ref: "#/components/parameters/XCorrelationId"
54227
+ - example: 018f0000-0000-7000-8000-000000000001
54228
+ in: path
54229
+ name: organizationId
54230
+ required: true
54231
+ schema:
54232
+ format: uuid
54233
+ pattern: ^[0-9a-f]{8}-[0-9a-f]{4}-7[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$
54234
+ type: string
54235
+ - example: 018f0000-0000-7000-8000-000000000001
54236
+ in: path
54237
+ name: publicationId
54238
+ required: true
54239
+ schema:
54240
+ format: uuid
54241
+ pattern: ^[0-9a-f]{8}-[0-9a-f]{4}-7[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$
54242
+ type: string
54243
+ - $ref: "#/components/parameters/IdempotencyKey"
54244
+ - $ref: "#/components/parameters/XCsrfToken"
54245
+ requestBody:
54246
+ content:
54247
+ application/json:
54248
+ examples:
54249
+ nominal:
54250
+ summary: Nominal valid request
54251
+ value:
54252
+ headCommit: sha1:2222222222222222222222222222222222222222
54253
+ schema:
54254
+ $ref: "#/components/schemas/PostOrganizationsByOrganizationIdPublicationsByPublicationIdSitePublishUpdateRequest"
54255
+ required: true
54256
+ responses:
54257
+ "202":
54258
+ content:
54259
+ application/json:
54260
+ examples:
54261
+ nominal:
54262
+ summary: Nominal successful response
54263
+ value:
54264
+ commandId: 018f0000-0000-7000-8000-000000000001
54265
+ operationId: 018f0000-0000-7000-8000-000000000001
54266
+ phase: accepted
54267
+ publishId: 018f0000-0000-7000-8000-000000000003
54268
+ resourceVersion: 0
54269
+ statusUrl: /v2/organizations/018f0000-0000-7000-8000-000000000001/operations/018f0000-0000-7000-8000-000000000002
54270
+ schema:
54271
+ $ref: "#/components/schemas/PostOrganizationsByOrganizationIdPublicationsByPublicationIdSitePublishUpdateResponse"
54272
+ description: publish the repository's current head as the update to the live site succeeded
54273
+ headers:
54274
+ Cache-Control:
54275
+ $ref: "#/components/headers/CacheControlNoStore"
54276
+ X-Correlation-Id:
54277
+ $ref: "#/components/headers/XCorrelationId"
54278
+ "400":
54279
+ content:
54280
+ application/problem+json:
54281
+ examples:
54282
+ REQUEST_FIELD_UNKNOWN:
54283
+ summary: REQUEST_FIELD_UNKNOWN
54284
+ value:
54285
+ code: REQUEST_FIELD_UNKNOWN
54286
+ correlationId: 018f0000-0000-7000-8000-000000000001
54287
+ detail: See the operation contract.
54288
+ errors: []
54289
+ retryable: false
54290
+ schemaId: urn:gala:schema:problem:2.0.0
54291
+ schemaVersion: 2.0.0
54292
+ status: 400
54293
+ title: REQUEST_FIELD_UNKNOWN
54294
+ type: urn:gala:problem:request-field-unknown
54295
+ VALIDATION_FAILED:
54296
+ summary: VALIDATION_FAILED
54297
+ value:
54298
+ code: VALIDATION_FAILED
54299
+ correlationId: 018f0000-0000-7000-8000-000000000001
54300
+ detail: See the operation contract.
54301
+ errors: []
54302
+ retryable: false
54303
+ schemaId: urn:gala:schema:problem:2.0.0
54304
+ schemaVersion: 2.0.0
54305
+ status: 400
54306
+ title: VALIDATION_FAILED
54307
+ type: urn:gala:problem:validation-failed
54308
+ schema:
54309
+ $ref: "#/components/schemas/Problem"
54310
+ description: REQUEST_FIELD_UNKNOWN, VALIDATION_FAILED
54311
+ headers:
54312
+ Cache-Control:
54313
+ $ref: "#/components/headers/CacheControlNoStore"
54314
+ X-Correlation-Id:
54315
+ $ref: "#/components/headers/XCorrelationId"
54316
+ x-gala-problem-codes:
54317
+ - REQUEST_FIELD_UNKNOWN
54318
+ - VALIDATION_FAILED
54319
+ "401":
54320
+ content:
54321
+ application/problem+json:
54322
+ examples:
54323
+ AUTHENTICATION_REQUIRED:
54324
+ summary: AUTHENTICATION_REQUIRED
54325
+ value:
54326
+ code: AUTHENTICATION_REQUIRED
54327
+ correlationId: 018f0000-0000-7000-8000-000000000001
54328
+ detail: See the operation contract.
54329
+ errors: []
54330
+ retryable: false
54331
+ schemaId: urn:gala:schema:problem:2.0.0
54332
+ schemaVersion: 2.0.0
54333
+ status: 401
54334
+ title: AUTHENTICATION_REQUIRED
54335
+ type: urn:gala:problem:authentication-required
54336
+ REAUTH_REQUIRED:
54337
+ summary: REAUTH_REQUIRED
54338
+ value:
54339
+ code: REAUTH_REQUIRED
54340
+ correlationId: 018f0000-0000-7000-8000-000000000001
54341
+ detail: See the operation contract.
54342
+ errors: []
54343
+ retryable: false
54344
+ schemaId: urn:gala:schema:problem:2.0.0
54345
+ schemaVersion: 2.0.0
54346
+ status: 401
54347
+ title: REAUTH_REQUIRED
54348
+ type: urn:gala:problem:reauth-required
54349
+ schema:
54350
+ $ref: "#/components/schemas/Problem"
54351
+ description: AUTHENTICATION_REQUIRED, REAUTH_REQUIRED
54352
+ headers:
54353
+ Cache-Control:
54354
+ $ref: "#/components/headers/CacheControlNoStore"
54355
+ X-Correlation-Id:
54356
+ $ref: "#/components/headers/XCorrelationId"
54357
+ x-gala-problem-codes:
54358
+ - AUTHENTICATION_REQUIRED
54359
+ - REAUTH_REQUIRED
54360
+ "403":
54361
+ content:
54362
+ application/problem+json:
54363
+ examples:
54364
+ AUTHORIZATION_DENIED:
54365
+ summary: AUTHORIZATION_DENIED
54366
+ value:
54367
+ code: AUTHORIZATION_DENIED
54368
+ correlationId: 018f0000-0000-7000-8000-000000000001
54369
+ detail: See the operation contract.
54370
+ errors: []
54371
+ retryable: false
54372
+ schemaId: urn:gala:schema:problem:2.0.0
54373
+ schemaVersion: 2.0.0
54374
+ status: 403
54375
+ title: AUTHORIZATION_DENIED
54376
+ type: urn:gala:problem:authorization-denied
54377
+ schema:
54378
+ $ref: "#/components/schemas/Problem"
54379
+ description: AUTHORIZATION_DENIED
54380
+ headers:
54381
+ Cache-Control:
54382
+ $ref: "#/components/headers/CacheControlNoStore"
54383
+ X-Correlation-Id:
54384
+ $ref: "#/components/headers/XCorrelationId"
54385
+ x-gala-problem-codes:
54386
+ - AUTHORIZATION_DENIED
54387
+ "404":
54388
+ content:
54389
+ application/problem+json:
54390
+ examples:
54391
+ RESOURCE_NOT_FOUND:
54392
+ summary: RESOURCE_NOT_FOUND
54393
+ value:
54394
+ code: RESOURCE_NOT_FOUND
54395
+ correlationId: 018f0000-0000-7000-8000-000000000001
54396
+ detail: See the operation contract.
54397
+ errors: []
54398
+ retryable: false
54399
+ schemaId: urn:gala:schema:problem:2.0.0
54400
+ schemaVersion: 2.0.0
54401
+ status: 404
54402
+ title: RESOURCE_NOT_FOUND
54403
+ type: urn:gala:problem:resource-not-found
54404
+ schema:
54405
+ $ref: "#/components/schemas/Problem"
54406
+ description: RESOURCE_NOT_FOUND
54407
+ headers:
54408
+ Cache-Control:
54409
+ $ref: "#/components/headers/CacheControlNoStore"
54410
+ X-Correlation-Id:
54411
+ $ref: "#/components/headers/XCorrelationId"
54412
+ x-gala-problem-codes:
54413
+ - RESOURCE_NOT_FOUND
54414
+ "409":
54415
+ content:
54416
+ application/problem+json:
54417
+ examples:
54418
+ ALREADY_LIVE:
54419
+ summary: ALREADY_LIVE
54420
+ value:
54421
+ code: ALREADY_LIVE
54422
+ correlationId: 018f0000-0000-7000-8000-000000000001
54423
+ detail: See the operation contract.
54424
+ errors: []
54425
+ retryable: false
54426
+ schemaId: urn:gala:schema:problem:2.0.0
54427
+ schemaVersion: 2.0.0
54428
+ status: 409
54429
+ title: ALREADY_LIVE
54430
+ type: urn:gala:problem:already-live
54431
+ COMMAND_REPLAY_CONFLICT:
54432
+ summary: COMMAND_REPLAY_CONFLICT
54433
+ value:
54434
+ code: COMMAND_REPLAY_CONFLICT
54435
+ correlationId: 018f0000-0000-7000-8000-000000000001
54436
+ detail: See the operation contract.
54437
+ errors: []
54438
+ retryable: false
54439
+ schemaId: urn:gala:schema:problem:2.0.0
54440
+ schemaVersion: 2.0.0
54441
+ status: 409
54442
+ title: COMMAND_REPLAY_CONFLICT
54443
+ type: urn:gala:problem:command-replay-conflict
54444
+ HEAD_MOVED:
54445
+ summary: HEAD_MOVED
54446
+ value:
54447
+ code: HEAD_MOVED
54448
+ correlationId: 018f0000-0000-7000-8000-000000000001
54449
+ detail: See the operation contract.
54450
+ errors: []
54451
+ retryable: false
54452
+ schemaId: urn:gala:schema:problem:2.0.0
54453
+ schemaVersion: 2.0.0
54454
+ status: 409
54455
+ title: HEAD_MOVED
54456
+ type: urn:gala:problem:head-moved
54457
+ NOT_SET_UP:
54458
+ summary: NOT_SET_UP
54459
+ value:
54460
+ code: NOT_SET_UP
54461
+ correlationId: 018f0000-0000-7000-8000-000000000001
54462
+ detail: See the operation contract.
54463
+ errors: []
54464
+ retryable: false
54465
+ schemaId: urn:gala:schema:problem:2.0.0
54466
+ schemaVersion: 2.0.0
54467
+ status: 409
54468
+ title: NOT_SET_UP
54469
+ type: urn:gala:problem:not-set-up
54470
+ PUBLISH_IN_PROGRESS:
54471
+ summary: PUBLISH_IN_PROGRESS
54472
+ value:
54473
+ code: PUBLISH_IN_PROGRESS
54474
+ correlationId: 018f0000-0000-7000-8000-000000000001
54475
+ detail: See the operation contract.
54476
+ errors: []
54477
+ retryable: false
54478
+ schemaId: urn:gala:schema:problem:2.0.0
54479
+ schemaVersion: 2.0.0
54480
+ status: 409
54481
+ title: PUBLISH_IN_PROGRESS
54482
+ type: urn:gala:problem:publish-in-progress
54483
+ schema:
54484
+ $ref: "#/components/schemas/Problem"
54485
+ description: ALREADY_LIVE, COMMAND_REPLAY_CONFLICT, HEAD_MOVED, NOT_SET_UP, PUBLISH_IN_PROGRESS
54486
+ headers:
54487
+ Cache-Control:
54488
+ $ref: "#/components/headers/CacheControlNoStore"
54489
+ X-Correlation-Id:
54490
+ $ref: "#/components/headers/XCorrelationId"
54491
+ x-gala-problem-codes:
54492
+ - ALREADY_LIVE
54493
+ - COMMAND_REPLAY_CONFLICT
54494
+ - HEAD_MOVED
54495
+ - NOT_SET_UP
54496
+ - PUBLISH_IN_PROGRESS
54497
+ "422":
54498
+ content:
54499
+ application/problem+json:
54500
+ examples:
54501
+ VALIDATION_FAILED:
54502
+ summary: VALIDATION_FAILED
54503
+ value:
54504
+ code: VALIDATION_FAILED
54505
+ correlationId: 018f0000-0000-7000-8000-000000000001
54506
+ detail: See the operation contract.
54507
+ errors: []
54508
+ retryable: false
54509
+ schemaId: urn:gala:schema:problem:2.0.0
54510
+ schemaVersion: 2.0.0
54511
+ status: 422
54512
+ title: VALIDATION_FAILED
54513
+ type: urn:gala:problem:validation-failed
54514
+ schema:
54515
+ $ref: "#/components/schemas/Problem"
54516
+ description: VALIDATION_FAILED
54517
+ headers:
54518
+ Cache-Control:
54519
+ $ref: "#/components/headers/CacheControlNoStore"
54520
+ X-Correlation-Id:
54521
+ $ref: "#/components/headers/XCorrelationId"
54522
+ x-gala-problem-codes:
54523
+ - VALIDATION_FAILED
54524
+ "429":
54525
+ content:
54526
+ application/problem+json:
54527
+ examples:
54528
+ RATE_LIMITED:
54529
+ summary: RATE_LIMITED
54530
+ value:
54531
+ code: RATE_LIMITED
54532
+ correlationId: 018f0000-0000-7000-8000-000000000001
54533
+ detail: See the operation contract.
54534
+ errors: []
54535
+ retryable: true
54536
+ schemaId: urn:gala:schema:problem:2.0.0
54537
+ schemaVersion: 2.0.0
54538
+ status: 429
54539
+ title: RATE_LIMITED
54540
+ type: urn:gala:problem:rate-limited
54541
+ schema:
54542
+ $ref: "#/components/schemas/Problem"
54543
+ description: RATE_LIMITED
54544
+ headers:
54545
+ Cache-Control:
54546
+ $ref: "#/components/headers/CacheControlNoStore"
54547
+ Retry-After:
54548
+ $ref: "#/components/headers/RetryAfter"
54549
+ X-Correlation-Id:
54550
+ $ref: "#/components/headers/XCorrelationId"
54551
+ x-gala-problem-codes:
54552
+ - RATE_LIMITED
54553
+ "503":
54554
+ content:
54555
+ application/problem+json:
54556
+ examples:
54557
+ CAPABILITY_UNAVAILABLE:
54558
+ summary: CAPABILITY_UNAVAILABLE
54559
+ value:
54560
+ code: CAPABILITY_UNAVAILABLE
54561
+ correlationId: 018f0000-0000-7000-8000-000000000001
54562
+ detail: See the operation contract.
54563
+ errors: []
54564
+ retryable: false
54565
+ schemaId: urn:gala:schema:problem:2.0.0
54566
+ schemaVersion: 2.0.0
54567
+ status: 503
54568
+ title: CAPABILITY_UNAVAILABLE
54569
+ type: urn:gala:problem:capability-unavailable
54570
+ DEPENDENCY_UNAVAILABLE:
54571
+ summary: DEPENDENCY_UNAVAILABLE
54572
+ value:
54573
+ code: DEPENDENCY_UNAVAILABLE
54574
+ correlationId: 018f0000-0000-7000-8000-000000000001
54575
+ detail: See the operation contract.
54576
+ errors: []
54577
+ retryable: true
54578
+ schemaId: urn:gala:schema:problem:2.0.0
54579
+ schemaVersion: 2.0.0
54580
+ status: 503
54581
+ title: DEPENDENCY_UNAVAILABLE
54582
+ type: urn:gala:problem:dependency-unavailable
54583
+ schema:
54584
+ $ref: "#/components/schemas/Problem"
54585
+ description: CAPABILITY_UNAVAILABLE, DEPENDENCY_UNAVAILABLE
54586
+ headers:
54587
+ Cache-Control:
54588
+ $ref: "#/components/headers/CacheControlNoStore"
54589
+ X-Correlation-Id:
54590
+ $ref: "#/components/headers/XCorrelationId"
54591
+ x-gala-problem-codes:
54592
+ - CAPABILITY_UNAVAILABLE
54593
+ - DEPENDENCY_UNAVAILABLE
54594
+ security:
54595
+ - browserSession: []
54596
+ summary: publish the repository head as the update to the live site
53903
54597
  tags:
53904
54598
  - organizations
54599
+ x-gala-action-grant: none
53905
54600
  x-gala-activation-gate: MVP
53906
54601
  x-gala-activation-guards:
53907
- - NONE
53908
- x-gala-capability-key: publication.view
54602
+ - Active binding epoch, admitted author-source contract, admitted destination, and no transfer or retirement fence
54603
+ x-gala-assurance-class: RECENT_AUTHENTICATION
54604
+ x-gala-capability-key: publication.publish
53909
54605
  x-gala-concurrency: publication-and-destination-epochs
53910
54606
  x-gala-conditional-capabilities: []
53911
54607
  x-gala-example-profile: NOMINAL_SUCCESS_AND_EACH_REACHABLE_PROBLEM
53912
54608
  x-gala-nullability: required-and-nullable-are-explicit
53913
- x-gala-purpose: read the site summary of this publication
54609
+ x-gala-purpose: publish the repository head as the update to the live site
53914
54610
  x-gala-reachable-problems:
54611
+ - ALREADY_LIVE
53915
54612
  - AUTHENTICATION_REQUIRED
53916
54613
  - AUTHORIZATION_DENIED
54614
+ - CAPABILITY_UNAVAILABLE
54615
+ - COMMAND_REPLAY_CONFLICT
54616
+ - DEPENDENCY_UNAVAILABLE
54617
+ - HEAD_MOVED
54618
+ - NOT_SET_UP
54619
+ - PUBLISH_IN_PROGRESS
54620
+ - RATE_LIMITED
54621
+ - REAUTH_REQUIRED
54622
+ - REQUEST_FIELD_UNKNOWN
53917
54623
  - RESOURCE_NOT_FOUND
53918
54624
  - VALIDATION_FAILED
53919
- x-gala-replay-identity: safe-query
54625
+ x-gala-replay-identity: idempotency-key
53920
54626
  x-gala-state-guards:
53921
54627
  - NONE
53922
- x-gala-success-category: query
54628
+ x-gala-success-category: async
53923
54629
  x-gala-tenant-scope: ORGANIZATION_AND_PUBLICATION_PATH
53924
54630
  /v2/organizations/{organizationId}/publications/{publicationId}/transfers:
53925
54631
  post:
@@ -59322,6 +60028,175 @@ paths:
59322
60028
  - NONE
59323
60029
  x-gala-success-category: update
59324
60030
  x-gala-tenant-scope: NONE
60031
+ /v2/platform/prism-generations:
60032
+ get:
60033
+ description: |
60034
+ Operators only (`ADMIN` or `ROOT`). Every Prism edition generation on
60035
+ the platform across all organizations, newest first, one keyset page at
60036
+ a time. Article text and candidate bodies are never exposed, only the
60037
+ generation's state, size and ownership.
60038
+ operationId: getPlatformPrismGenerations
60039
+ parameters:
60040
+ - $ref: "#/components/parameters/XCorrelationId"
60041
+ - description: Only generations in this state.
60042
+ example: CANDIDATE_READY
60043
+ in: query
60044
+ name: state
60045
+ required: false
60046
+ schema:
60047
+ $ref: "#/components/schemas/PrismGenerationState"
60048
+ - $ref: "#/components/parameters/Cursor"
60049
+ - $ref: "#/components/parameters/Limit"
60050
+ responses:
60051
+ "200":
60052
+ content:
60053
+ application/json:
60054
+ examples:
60055
+ nominal:
60056
+ summary: Nominal successful response
60057
+ value:
60058
+ hasMore: false
60059
+ items:
60060
+ - createdAt: "2026-10-10T12:00:00.000Z"
60061
+ editionKind: QUICK_READ
60062
+ generationId: 018f0000-0000-7000-8000-000000000001
60063
+ organizationId: 018f0000-0000-7000-8000-000000000003
60064
+ publicationId: 018f0000-0000-7000-8000-000000000002
60065
+ state: CANDIDATE_READY
60066
+ nextCursor: null
60067
+ schema:
60068
+ $ref: "#/components/schemas/GetPlatformPrismGenerationsResponse"
60069
+ description: list platform Prism generations succeeded
60070
+ headers:
60071
+ Cache-Control:
60072
+ $ref: "#/components/headers/CacheControlNoStore"
60073
+ X-Correlation-Id:
60074
+ $ref: "#/components/headers/XCorrelationId"
60075
+ "400":
60076
+ $ref: "#/components/responses/ValidationFailed"
60077
+ "401":
60078
+ $ref: "#/components/responses/PlatformAuthenticationRequired"
60079
+ "403":
60080
+ $ref: "#/components/responses/AuthorizationDenied"
60081
+ security:
60082
+ - browserSession: []
60083
+ summary: list platform Prism generations
60084
+ tags:
60085
+ - platform
60086
+ x-gala-activation-gate: MVP
60087
+ x-gala-activation-guards:
60088
+ - NONE
60089
+ x-gala-capability-key: platform.prism.view
60090
+ x-gala-concurrency: none
60091
+ x-gala-conditional-capabilities: []
60092
+ x-gala-example-profile: NOMINAL_SUCCESS_AND_EACH_REACHABLE_PROBLEM
60093
+ x-gala-nullability: required-and-nullable-are-explicit
60094
+ x-gala-purpose: list platform Prism generations
60095
+ x-gala-reachable-problems:
60096
+ - AUTHENTICATION_REQUIRED
60097
+ - AUTHORIZATION_DENIED
60098
+ - REAUTH_REQUIRED
60099
+ - VALIDATION_FAILED
60100
+ x-gala-replay-identity: safe-query
60101
+ x-gala-state-guards:
60102
+ - NONE
60103
+ x-gala-success-category: query
60104
+ x-gala-tenant-scope: NONE
60105
+ /v2/platform/prism-generations:export:
60106
+ post:
60107
+ description: Operators only (`ADMIN` or `ROOT`), with recent authentication (`401 REAUTH_REQUIRED` when the session is stale). The answer is a UTF-8 CSV file with a header row (`generationId,organizationId,publicationId,editionKind,state,createdAt`) that the operator App saves as a download. A cell that starts with `=`, `+`, `-`, `@`, a tab or a carriage return is prefixed with an apostrophe so a spreadsheet does not run it as a formula.
60108
+ operationId: postPlatformPrismGenerationsExport
60109
+ parameters:
60110
+ - $ref: "#/components/parameters/XCorrelationId"
60111
+ - $ref: "#/components/parameters/XCsrfToken"
60112
+ responses:
60113
+ "200":
60114
+ content:
60115
+ text/csv:
60116
+ schema:
60117
+ format: binary
60118
+ type: string
60119
+ description: export platform Prism generations as CSV succeeded
60120
+ headers:
60121
+ Cache-Control:
60122
+ $ref: "#/components/headers/CacheControlNoStore"
60123
+ Content-Disposition:
60124
+ $ref: "#/components/headers/ContentDispositionAttachment"
60125
+ X-Content-Type-Options:
60126
+ $ref: "#/components/headers/XContentTypeOptionsNosniff"
60127
+ X-Correlation-Id:
60128
+ $ref: "#/components/headers/XCorrelationId"
60129
+ "400":
60130
+ $ref: "#/components/responses/ValidationFailed"
60131
+ "401":
60132
+ content:
60133
+ application/problem+json:
60134
+ examples:
60135
+ AUTHENTICATION_REQUIRED:
60136
+ summary: AUTHENTICATION_REQUIRED
60137
+ value:
60138
+ code: AUTHENTICATION_REQUIRED
60139
+ correlationId: 018f0000-0000-7000-8000-000000000001
60140
+ detail: See the operation contract.
60141
+ errors: []
60142
+ retryable: false
60143
+ schemaId: urn:gala:schema:problem:2.0.0
60144
+ schemaVersion: 2.0.0
60145
+ status: 401
60146
+ title: AUTHENTICATION_REQUIRED
60147
+ type: urn:gala:problem:authentication-required
60148
+ REAUTH_REQUIRED:
60149
+ summary: REAUTH_REQUIRED
60150
+ value:
60151
+ code: REAUTH_REQUIRED
60152
+ correlationId: 018f0000-0000-7000-8000-000000000001
60153
+ detail: See the operation contract.
60154
+ errors: []
60155
+ retryable: false
60156
+ schemaId: urn:gala:schema:problem:2.0.0
60157
+ schemaVersion: 2.0.0
60158
+ status: 401
60159
+ title: REAUTH_REQUIRED
60160
+ type: urn:gala:problem:reauth-required
60161
+ schema:
60162
+ $ref: "#/components/schemas/Problem"
60163
+ description: AUTHENTICATION_REQUIRED, REAUTH_REQUIRED
60164
+ headers:
60165
+ Cache-Control:
60166
+ $ref: "#/components/headers/CacheControlNoStore"
60167
+ X-Correlation-Id:
60168
+ $ref: "#/components/headers/XCorrelationId"
60169
+ x-gala-problem-codes:
60170
+ - AUTHENTICATION_REQUIRED
60171
+ - REAUTH_REQUIRED
60172
+ "403":
60173
+ $ref: "#/components/responses/AuthorizationDenied"
60174
+ security:
60175
+ - browserSession: []
60176
+ summary: export platform Prism generations as CSV
60177
+ tags:
60178
+ - platform
60179
+ x-gala-action-grant: none
60180
+ x-gala-activation-gate: MVP
60181
+ x-gala-activation-guards:
60182
+ - NONE
60183
+ x-gala-assurance-class: RECENT_AUTHENTICATION
60184
+ x-gala-capability-key: platform.prism.export
60185
+ x-gala-concurrency: none
60186
+ x-gala-conditional-capabilities: []
60187
+ x-gala-example-profile: NOMINAL_SUCCESS_AND_EACH_REACHABLE_PROBLEM
60188
+ x-gala-nullability: required-and-nullable-are-explicit
60189
+ x-gala-purpose: export platform Prism generations as CSV
60190
+ x-gala-reachable-problems:
60191
+ - AUTHENTICATION_REQUIRED
60192
+ - AUTHORIZATION_DENIED
60193
+ - REAUTH_REQUIRED
60194
+ - VALIDATION_FAILED
60195
+ x-gala-replay-identity: natural-idempotent-state
60196
+ x-gala-state-guards:
60197
+ - NONE
60198
+ x-gala-success-category: protocol
60199
+ x-gala-tenant-scope: NONE
59325
60200
  /v2/platform/settings/overrides/{kind}/{id}/{key}:
59326
60201
  delete:
59327
60202
  description: |