@rathnasgala2/schemas 3.25.0 → 3.26.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 (55) hide show
  1. package/THIRD_PARTY_LICENSES.json +1 -1
  2. package/diagnostics/diagnostic-map.json +174 -0
  3. package/docs/catalogs/app-routes.json +3 -1
  4. package/docs/catalogs/schema-inventory.json +6 -6
  5. package/examples/valid/build-input/rules.json +147 -0
  6. package/examples/valid/content-frontmatter/rules.json +76 -0
  7. package/examples/valid/problem/rules.json +64 -0
  8. package/examples/valid/publication/rules.json +20 -0
  9. package/fixtures/boundary/build-input/rules.json +165 -0
  10. package/fixtures/boundary/content-frontmatter/rules.json +85 -0
  11. package/fixtures/boundary/problem/rules.json +64 -0
  12. package/fixtures/boundary/publication/rules.json +20 -0
  13. package/fixtures/invalid/build-input/REQUEST_FIELD_UNKNOWN/cases.json +45 -0
  14. package/fixtures/invalid/build-input/SCHEMA_CONSTANT_INVALID/cases.json +11 -0
  15. package/fixtures/invalid/build-input/SCHEMA_ENUM_INVALID/cases.json +22 -0
  16. package/fixtures/invalid/build-input/SCHEMA_NUMBER_TOO_LARGE/cases.json +22 -0
  17. package/fixtures/invalid/build-input/SCHEMA_NUMBER_TOO_SMALL/cases.json +22 -0
  18. package/fixtures/invalid/build-input/SCHEMA_PATTERN_INVALID/cases.json +11 -0
  19. package/fixtures/invalid/build-input/SCHEMA_REQUIRED_FIELD_MISSING/cases.json +132 -0
  20. package/fixtures/invalid/build-input/SCHEMA_TYPE_INVALID/cases.json +56 -0
  21. package/fixtures/invalid/content-frontmatter/REQUEST_FIELD_UNKNOWN/cases.json +16 -0
  22. package/fixtures/invalid/content-frontmatter/SCHEMA_CONSTANT_INVALID/cases.json +11 -0
  23. package/fixtures/invalid/content-frontmatter/SCHEMA_ENUM_INVALID/cases.json +11 -0
  24. package/fixtures/invalid/content-frontmatter/SCHEMA_NUMBER_TOO_LARGE/cases.json +11 -0
  25. package/fixtures/invalid/content-frontmatter/SCHEMA_NUMBER_TOO_SMALL/cases.json +11 -0
  26. package/fixtures/invalid/content-frontmatter/SCHEMA_PATTERN_INVALID/cases.json +11 -0
  27. package/fixtures/invalid/content-frontmatter/SCHEMA_REQUIRED_FIELD_MISSING/cases.json +54 -0
  28. package/fixtures/invalid/content-frontmatter/SCHEMA_TYPE_INVALID/cases.json +20 -0
  29. package/fixtures/invalid/problem/REQUEST_FIELD_UNKNOWN/cases.json +15 -0
  30. package/fixtures/invalid/problem/SCHEMA_NUMBER_TOO_SMALL/cases.json +44 -0
  31. package/fixtures/invalid/problem/SCHEMA_REQUIRED_FIELD_MISSING/cases.json +56 -0
  32. package/fixtures/invalid/problem/SCHEMA_TYPE_INVALID/cases.json +53 -0
  33. package/fixtures/invalid/publication/REQUEST_FIELD_UNKNOWN/cases.json +9 -0
  34. package/fixtures/invalid/publication/SCHEMA_REQUIRED_FIELD_MISSING/cases.json +9 -0
  35. package/fixtures/invalid/publication/SCHEMA_TYPE_INVALID/cases.json +18 -0
  36. package/fixtures/manifest.json +1342 -8
  37. package/fixtures/s2/manifest.json +16 -1
  38. package/fixtures/s2/normalized-inputs.json +3225 -0
  39. package/fixtures/unknown-field/build-input/rules.json +73 -0
  40. package/fixtures/unknown-field/content-frontmatter/rules.json +28 -0
  41. package/fixtures/unknown-field/problem/rules.json +30 -0
  42. package/fixtures/unknown-field/publication/rules.json +14 -0
  43. package/generated/browser/validator-core.mjs +3 -3
  44. package/generated/typescript/contracts/build-input.d.ts +19 -0
  45. package/generated/typescript/contracts/content-frontmatter.d.ts +7 -0
  46. package/generated/typescript/contracts/problem.d.ts +6 -0
  47. package/generated/typescript/contracts/publication.d.ts +5 -0
  48. package/openapi/http-catalog.json +28 -2
  49. package/openapi/openapi.yaml +650 -11
  50. package/package.json +1 -1
  51. package/sbom.cdx.json +23 -23
  52. package/schemas/build-input.schema.json +62 -1
  53. package/schemas/content-frontmatter.schema.json +31 -0
  54. package/schemas/problem.schema.json +17 -0
  55. package/schemas/publication.schema.json +8 -0
@@ -1394,6 +1394,9 @@ components:
1394
1394
  `gala/publication.json`. An absent member is preserved. `null`
1395
1395
  resets `description` to the publication title (the file requires a
1396
1396
  description); `null` clears `defaultImageRef` and `crawlers`.
1397
+ `listing`, `aiRights` and `performance` (SCHEMA-3.25.1, the
1398
+ `publication.schema.json` 3.25.0 members) follow `crawlers`: absent
1399
+ keeps the stored value, an object replaces it whole, `null` clears it.
1397
1400
  `title`, `defaultLanguage` and `socialLinks` cannot be cleared.
1398
1401
  `socialLinks` (max 32, the publication file's own limit) replaces
1399
1402
  the whole list. `canonicalBase` is never client-settable: it changes
@@ -1401,6 +1404,10 @@ components:
1401
1404
  `422 VALIDATION_FAILED` pointed at `/publicationProfile`; member
1402
1405
  failures point at `/publicationProfile/<member>`.
1403
1406
  properties:
1407
+ aiRights:
1408
+ oneOf:
1409
+ - $ref: "#/components/schemas/PortablePublicationAiRights"
1410
+ - type: "null"
1404
1411
  crawlers:
1405
1412
  oneOf:
1406
1413
  - $ref: "#/components/schemas/PortablePublicationCrawlers"
@@ -1420,6 +1427,14 @@ components:
1420
1427
  maximum: 300
1421
1428
  minimum: 1
1422
1429
  - type: "null"
1430
+ listing:
1431
+ oneOf:
1432
+ - $ref: "#/components/schemas/PortablePublicationListing"
1433
+ - type: "null"
1434
+ performance:
1435
+ oneOf:
1436
+ - $ref: "#/components/schemas/PortablePublicationPerformance"
1437
+ - type: "null"
1423
1438
  socialLinks:
1424
1439
  items:
1425
1440
  $ref: "#/components/schemas/PortablePublicationSocialLink"
@@ -1473,12 +1488,18 @@ components:
1473
1488
  `contentId` is the header's `id`; `status` is the header's `status`
1474
1489
  upper-cased to this contract's enum style. `publishAfter`
1475
1490
  (SCHEMA-3.19.0, optional and nullable) is the header's staggered-release
1476
- date.
1491
+ date. `deleteDate` (SCHEMA-3.25.1, optional and nullable) is the
1492
+ header's scheduled-removal date.
1477
1493
  properties:
1478
1494
  contentId:
1479
1495
  $ref: "#/components/schemas/PortableContentFrontmatterStableId"
1480
1496
  createdAt:
1481
1497
  $ref: "#/components/schemas/PortableContentFrontmatterRfc3339"
1498
+ deleteDate:
1499
+ description: "SCHEMA-3.25.1: the header's `deleteDate` date (`YYYY-MM-DD`) of an article scheduled for removal, `null` or absent when the header carries none."
1500
+ oneOf:
1501
+ - $ref: "#/components/schemas/PortableContentFrontmatterDeleteDate"
1502
+ - type: "null"
1482
1503
  language:
1483
1504
  $ref: "#/components/schemas/PortableContentFrontmatterBcp47"
1484
1505
  publishAfter:
@@ -1573,8 +1594,12 @@ components:
1573
1594
  as the inventory, and returned on every page of the inventory, not
1574
1595
  only the first -- the editor needs these facts regardless of which
1575
1596
  page it opened. Carries no personal data beyond what each author
1576
- file itself already publishes.
1597
+ file itself already publishes. `listing`, `aiRights` and `performance`
1598
+ (SCHEMA-3.25.1, optional) are the publication file's 3.25.0 members,
1599
+ absent when the file carries none.
1577
1600
  properties:
1601
+ aiRights:
1602
+ $ref: "#/components/schemas/PortablePublicationAiRights"
1578
1603
  authors:
1579
1604
  items:
1580
1605
  $ref: "#/components/schemas/ContentPublicationAuthorSummary"
@@ -1591,6 +1616,10 @@ components:
1591
1616
  x-gala-graphemeLength:
1592
1617
  maximum: 500
1593
1618
  minimum: 1
1619
+ listing:
1620
+ $ref: "#/components/schemas/PortablePublicationListing"
1621
+ performance:
1622
+ $ref: "#/components/schemas/PortablePublicationPerformance"
1594
1623
  socialLinks:
1595
1624
  items:
1596
1625
  $ref: "#/components/schemas/PortablePublicationSocialLink"
@@ -3776,6 +3805,8 @@ components:
3776
3805
  - openChange
3777
3806
  - setUp
3778
3807
  type: object
3808
+ GetOrganizationsByOrganizationIdPublicationsByPublicationIdListenSettingsResponse:
3809
+ $ref: "#/components/schemas/ListenSettings"
3779
3810
  GetOrganizationsByOrganizationIdPublicationsByPublicationIdModerationQueueResponse:
3780
3811
  additionalProperties: false
3781
3812
  properties:
@@ -6372,6 +6403,26 @@ components:
6372
6403
  - observedAt
6373
6404
  - evidenceDigest
6374
6405
  type: object
6406
+ ListenSettings:
6407
+ additionalProperties: false
6408
+ description: "SCHEMA-3.26.0: the Listen setting of a site at the linked repository's main branch head: the `listen` member of `gala/publication.json` (`enabled`). A publication with no `listen` member reads `enabled` false. `planAllows` is read-only: false while the site's plan does not include Listen (the Free plan by default), in which case `enabled` cannot be turned on. `openChange` names an existing not-yet-published change of this publication that touches the file, or is null. `setUp` matches `GET .../repository/setup` `state`."
6409
+ properties:
6410
+ enabled:
6411
+ type: boolean
6412
+ openChange:
6413
+ oneOf:
6414
+ - $ref: "#/components/schemas/PublicationAppearanceOpenChange"
6415
+ - type: "null"
6416
+ planAllows:
6417
+ type: boolean
6418
+ setUp:
6419
+ type: boolean
6420
+ required:
6421
+ - enabled
6422
+ - planAllows
6423
+ - openChange
6424
+ - setUp
6425
+ type: object
6375
6426
  ManagedDeploymentOperationResponse:
6376
6427
  additionalProperties: false
6377
6428
  allOf:
@@ -8651,6 +8702,9 @@ components:
8651
8702
  contactForm:
8652
8703
  description: "SCHEMA-3.23.0, whether sites on this plan may turn on the contact form. A site on a plan without it sees the form locked, and enabling it is `409 PLAN_REQUIRED`. Defaults of the first release: FREE 50 and no contact form, PRO 500 and a contact form, BUSINESS 2000 and a contact form."
8653
8704
  type: boolean
8705
+ listen:
8706
+ description: "SCHEMA-3.26.0, whether sites on this plan may turn on Listen, the audio version of posts. A site on a plan without it sees the setting locked, and enabling it is `409 PLAN_REQUIRED`. Defaults: FREE no Listen, PRO and BUSINESS Listen."
8707
+ type: boolean
8654
8708
  newsletterSubscriberLimit:
8655
8709
  description: "SCHEMA-3.23.0, the confirmed newsletter subscribers one organization on this plan may hold across its sites; a confirmation past it is `409 NEWSLETTER_FULL`. 0 admits none. Defaults of the first release: FREE 50 and no contact form, PRO 500 and a contact form, BUSINESS 2000 and a contact form."
8656
8710
  format: int64
@@ -8667,6 +8721,7 @@ components:
8667
8721
  - publicationLimit
8668
8722
  - newsletterSubscriberLimit
8669
8723
  - contactForm
8724
+ - listen
8670
8725
  type: object
8671
8726
  PlatformPlanCapacityRelease:
8672
8727
  additionalProperties: false
@@ -9138,6 +9193,31 @@ components:
9138
9193
  - generation
9139
9194
  - approvedAt
9140
9195
  type: object
9196
+ PortableContentFrontmatterContentListen:
9197
+ additionalProperties: false
9198
+ description: "SCHEMA-3.26.0: the audio version of this article. All three members are required. `listen` is allowed only when `kind` is `article`. It has an effect only while the publication has `listen.enabled` true."
9199
+ properties:
9200
+ audio:
9201
+ $ref: "#/components/schemas/PortableContentFrontmatterRepoRelativePath"
9202
+ description: "Repository-relative path of the audio file: an `.mp3` or `.m4a` file that sits under one of the repository `assetRoots`. The schema fixes the shape and the extension; the publish toolchain checks the asset root, that the file exists and is a regular file, that it sniffs as MP3 or M4A and the size limits."
9203
+ pattern: ^.+\.(?:mp3|m4a)$
9204
+ durationSeconds:
9205
+ description: Length of the episode in whole seconds, 1 to 10800 (three hours).
9206
+ maximum: 10800
9207
+ minimum: 1
9208
+ type: integer
9209
+ format:
9210
+ description: "What the episode is: `conversation` (two voices talking the post over), `narration` (one voice reading it), `debate` (two voices taking sides) or `skit` (a scripted scene). The template words its invitation by format."
9211
+ enum:
9212
+ - conversation
9213
+ - narration
9214
+ - debate
9215
+ - skit
9216
+ required:
9217
+ - audio
9218
+ - durationSeconds
9219
+ - format
9220
+ type: object
9141
9221
  PortableContentFrontmatterContentSeo:
9142
9222
  additionalProperties: false
9143
9223
  description: "SCHEMA-3.12.0: optional search overrides for one document. `title` replaces the page title in search results (the site suffix is still appended on non-home pages), `description` replaces the search description, `canonicalUrl` is an absolute HTTPS canonical for syndicated or moved content, and `noindex: true` keeps a listed document out of search engines. Every member is optional; absent members fall back to the document's own title and description."
@@ -9217,6 +9297,17 @@ components:
9217
9297
  x-gala-const: article
9218
9298
  required:
9219
9299
  - kind
9300
+ - if:
9301
+ required:
9302
+ - listen
9303
+ then:
9304
+ properties:
9305
+ kind:
9306
+ pattern: ^article$
9307
+ type: string
9308
+ x-gala-const: article
9309
+ required:
9310
+ - kind
9220
9311
  dependentRequired:
9221
9312
  seriesOrder:
9222
9313
  - series
@@ -9251,6 +9342,8 @@ components:
9251
9342
  - edition
9252
9343
  language:
9253
9344
  $ref: "#/components/schemas/PortableContentFrontmatterBcp47"
9345
+ listen:
9346
+ $ref: "#/components/schemas/PortableContentFrontmatterContentListen"
9254
9347
  newsletter:
9255
9348
  enum:
9256
9349
  - ineligible
@@ -14924,6 +15017,28 @@ components:
14924
15017
  x-gala-graphemeLength:
14925
15018
  maximum: 500
14926
15019
  minimum: 0
15020
+ details:
15021
+ additionalProperties: false
15022
+ description: "SCHEMA-3.25.1, optional, carried by a PAGE_LOSS_GUARD problem and absent from every other: the counts behind the refusal, the same members as the `PageLossGuardDetails` operation `reasonDetails`. The candidate build has fewer pages than the last successful deployment; `lostPageCount` is `previousPageCount - candidatePageCount` and `permittedLoss` is the loss the platform settings allow."
15023
+ properties:
15024
+ candidatePageCount:
15025
+ minimum: 0
15026
+ type: integer
15027
+ lostPageCount:
15028
+ minimum: 0
15029
+ type: integer
15030
+ permittedLoss:
15031
+ minimum: 0
15032
+ type: integer
15033
+ previousPageCount:
15034
+ minimum: 0
15035
+ type: integer
15036
+ required:
15037
+ - previousPageCount
15038
+ - candidatePageCount
15039
+ - lostPageCount
15040
+ - permittedLoss
15041
+ type: object
14927
15042
  domainState:
14928
15043
  description: "SCHEMA-3.17.0, optional, carried by a CANONICAL_BASE_MISMATCH problem and absent from every other: the state of the site's custom-domain binding that decided `expectedBase` (a `DomainBindingState` value such as `CERTIFICATE_PENDING` or `ACTIVE`), absent when the site has no custom domain. A client shows a value it does not know as is."
14929
15044
  maxLength: 80
@@ -15063,6 +15178,24 @@ components:
15063
15178
  format: uri
15064
15179
  pattern: ^https://(?![^/?#]*@)
15065
15180
  type: string
15181
+ PortablePublicationAiRights:
15182
+ additionalProperties: false
15183
+ description: "SCHEMA-3.25.0: how AI systems may use the writing. `search` covers search and answer bots, `training` covers training crawlers. When present it wins over `crawlers.ai`; when absent, `crawlers.ai` allow means both allow and block means both block. `licenseUrl` is the optional https URL of the license terms."
15184
+ properties:
15185
+ licenseUrl:
15186
+ $ref: "#/components/schemas/PortablePublicationUrlHttps"
15187
+ search:
15188
+ enum:
15189
+ - allow
15190
+ - block
15191
+ training:
15192
+ enum:
15193
+ - allow
15194
+ - block
15195
+ required:
15196
+ - search
15197
+ - training
15198
+ type: object
15066
15199
  PortablePublicationBcp47:
15067
15200
  description: Structurally valid canonical BCP-47 language tag.
15068
15201
  format: gala-bcp47
@@ -15083,6 +15216,36 @@ components:
15083
15216
  required:
15084
15217
  - ai
15085
15218
  type: object
15219
+ PortablePublicationListing:
15220
+ additionalProperties: false
15221
+ description: "SCHEMA-3.25.0: listing settings. `pageSize` is the number of posts on each listing page (1 to 50); an absent member means 10."
15222
+ properties:
15223
+ pageSize:
15224
+ maximum: 50
15225
+ minimum: 1
15226
+ type: integer
15227
+ required: []
15228
+ type: object
15229
+ PortablePublicationPerformance:
15230
+ additionalProperties: false
15231
+ description: "SCHEMA-3.25.0: size budgets in bytes, each at least 1024 and optional. `htmlBytes` bounds a page's HTML, `cssBytes` and `jsBytes` bound the sum of the same-origin stylesheets and scripts a page links. A page over budget is reported; a budget never fails a build."
15232
+ properties:
15233
+ budgets:
15234
+ additionalProperties: false
15235
+ properties:
15236
+ cssBytes:
15237
+ minimum: 1024
15238
+ type: integer
15239
+ htmlBytes:
15240
+ minimum: 1024
15241
+ type: integer
15242
+ jsBytes:
15243
+ minimum: 1024
15244
+ type: integer
15245
+ required: []
15246
+ type: object
15247
+ required: []
15248
+ type: object
15086
15249
  PortablePublicationPlainLabel:
15087
15250
  description: Normalized Unicode plain text without markup, controls, or bidi overrides.
15088
15251
  format: gala-plain-label
@@ -16032,7 +16195,12 @@ components:
16032
16195
  (SCHEMA-3.19.0) is refused with `409 STAGGERED_RELEASE_DISABLED` while the
16033
16196
  publication's staggered release is off (`publishingPolicy.staggeredRelease`), and
16034
16197
  with `422 PUBLISH_AFTER_ON_PUBLISHED_POST` when its `status` is not
16035
- `draft`; `errors[].pointer` is `/documents/<path>`.
16198
+ `draft`; `errors[].pointer` is `/documents/<path>`. A document whose
16199
+ `deleteDate` (SCHEMA-3.25.0) is not later than its `publishAfter` or
16200
+ `date` is refused with the content-change rejection reason
16201
+ `DELETE_DATE_NOT_AFTER_RELEASE` (SCHEMA-3.25.1), alongside the other
16202
+ reasons the API reports for cross-document rules; those reasons are
16203
+ not an enumerated schema member.
16036
16204
  Assets are images only (PNG, JPEG, WebP, GIF, AVIF; SVG is refused):
16037
16205
  at most 20 per change, each at most 5 MiB and together at most
16038
16206
  20 MiB, measured on the decoded bytes -- `assets[].bytesBase64` is
@@ -16855,6 +17023,10 @@ components:
16855
17023
  person confirmed. The server publishes that head only while it is still
16856
17024
  the repository's head.
16857
17025
  properties:
17026
+ allowPageLoss:
17027
+ default: false
17028
+ 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`)."
17029
+ type: boolean
16858
17030
  headCommit:
16859
17031
  $ref: "#/components/schemas/PortableDeploymentIntentGitObjectId"
16860
17032
  required:
@@ -18103,6 +18275,8 @@ components:
18103
18275
  format: uuid
18104
18276
  pattern: ^[0-9a-f]{8}-[0-9a-f]{4}-7[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$
18105
18277
  type: string
18278
+ performance:
18279
+ $ref: "#/components/schemas/PortableDeploymentReceiptDeploymentPerformance"
18106
18280
  provenanceDigest:
18107
18281
  pattern: ^sha256:[0-9a-f]{64}$
18108
18282
  type: string
@@ -19201,6 +19375,22 @@ components:
19201
19375
  required:
19202
19376
  - change
19203
19377
  type: object
19378
+ PutOrganizationsByOrganizationIdPublicationsByPublicationIdListenSettingsRequest:
19379
+ additionalProperties: false
19380
+ properties:
19381
+ enabled:
19382
+ type: boolean
19383
+ required:
19384
+ - enabled
19385
+ type: object
19386
+ PutOrganizationsByOrganizationIdPublicationsByPublicationIdListenSettingsResponse:
19387
+ additionalProperties: false
19388
+ properties:
19389
+ change:
19390
+ $ref: "#/components/schemas/PostOrganizationsByOrganizationIdPublicationsByPublicationIdContentChangesPlanResponse"
19391
+ required:
19392
+ - change
19393
+ type: object
19204
19394
  PutOrganizationsByOrganizationIdPublicationsByPublicationIdNewsletterSettingsRequest:
19205
19395
  additionalProperties: false
19206
19396
  allOf:
@@ -19300,6 +19490,9 @@ components:
19300
19490
  contactForm:
19301
19491
  description: SCHEMA-3.23.0, optional; absent keeps the plan's current value.
19302
19492
  type: boolean
19493
+ listen:
19494
+ description: SCHEMA-3.26.0, optional; absent keeps the plan's current value.
19495
+ type: boolean
19303
19496
  newsletterSubscriberLimit:
19304
19497
  description: SCHEMA-3.23.0, optional; absent keeps the plan's current value.
19305
19498
  format: int64
@@ -44829,6 +45022,424 @@ paths:
44829
45022
  - RepositoryChange:REQUESTED -> PLANNED
44830
45023
  x-gala-success-category: protocol
44831
45024
  x-gala-tenant-scope: ORGANIZATION_AND_PUBLICATION_PATH
45025
+ /v2/organizations/{organizationId}/publications/{publicationId}/listen-settings:
45026
+ get:
45027
+ description: Reads the `listen` member of `gala/publication.json` at the linked repository's current main branch head. A publication with no `listen` member reads `enabled` false. `planAllows` is the API's own status and is never written to the repository.
45028
+ operationId: getOrganizationsByOrganizationIdPublicationsByPublicationIdListenSettings
45029
+ parameters:
45030
+ - $ref: "#/components/parameters/XCorrelationId"
45031
+ - example: 018f0000-0000-7000-8000-000000000001
45032
+ in: path
45033
+ name: organizationId
45034
+ required: true
45035
+ schema:
45036
+ format: uuid
45037
+ pattern: ^[0-9a-f]{8}-[0-9a-f]{4}-7[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$
45038
+ type: string
45039
+ - example: 018f0000-0000-7000-8000-000000000001
45040
+ in: path
45041
+ name: publicationId
45042
+ required: true
45043
+ schema:
45044
+ format: uuid
45045
+ pattern: ^[0-9a-f]{8}-[0-9a-f]{4}-7[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$
45046
+ type: string
45047
+ responses:
45048
+ "200":
45049
+ content:
45050
+ application/json:
45051
+ examples:
45052
+ nominal:
45053
+ summary: Nominal successful response
45054
+ value:
45055
+ enabled: false
45056
+ openChange: null
45057
+ planAllows: false
45058
+ setUp: true
45059
+ schema:
45060
+ $ref: "#/components/schemas/GetOrganizationsByOrganizationIdPublicationsByPublicationIdListenSettingsResponse"
45061
+ description: read this publication's listen settings at the main branch head succeeded
45062
+ headers:
45063
+ Cache-Control:
45064
+ $ref: "#/components/headers/CacheControlNoStore"
45065
+ X-Correlation-Id:
45066
+ $ref: "#/components/headers/XCorrelationId"
45067
+ "400":
45068
+ $ref: "#/components/responses/ValidationFailed"
45069
+ "401":
45070
+ content:
45071
+ application/problem+json:
45072
+ examples:
45073
+ AUTHENTICATION_REQUIRED:
45074
+ summary: AUTHENTICATION_REQUIRED
45075
+ value:
45076
+ code: AUTHENTICATION_REQUIRED
45077
+ correlationId: 018f0000-0000-7000-8000-000000000001
45078
+ detail: See the operation contract.
45079
+ errors: []
45080
+ retryable: false
45081
+ schemaId: urn:gala:schema:problem:2.0.0
45082
+ schemaVersion: 2.0.0
45083
+ status: 401
45084
+ title: AUTHENTICATION_REQUIRED
45085
+ type: urn:gala:problem:authentication-required
45086
+ schema:
45087
+ $ref: "#/components/schemas/Problem"
45088
+ description: AUTHENTICATION_REQUIRED
45089
+ headers:
45090
+ Cache-Control:
45091
+ $ref: "#/components/headers/CacheControlNoStore"
45092
+ X-Correlation-Id:
45093
+ $ref: "#/components/headers/XCorrelationId"
45094
+ x-gala-problem-codes:
45095
+ - AUTHENTICATION_REQUIRED
45096
+ "403":
45097
+ $ref: "#/components/responses/AuthorizationDenied"
45098
+ "404":
45099
+ $ref: "#/components/responses/ResourceNotFound"
45100
+ "429":
45101
+ content:
45102
+ application/problem+json:
45103
+ examples:
45104
+ RATE_LIMITED:
45105
+ summary: RATE_LIMITED
45106
+ value:
45107
+ code: RATE_LIMITED
45108
+ correlationId: 018f0000-0000-7000-8000-000000000001
45109
+ detail: See the operation contract.
45110
+ errors: []
45111
+ retryable: true
45112
+ schemaId: urn:gala:schema:problem:2.0.0
45113
+ schemaVersion: 2.0.0
45114
+ status: 429
45115
+ title: RATE_LIMITED
45116
+ type: urn:gala:problem:rate-limited
45117
+ schema:
45118
+ $ref: "#/components/schemas/Problem"
45119
+ description: RATE_LIMITED
45120
+ headers:
45121
+ Cache-Control:
45122
+ $ref: "#/components/headers/CacheControlNoStore"
45123
+ Retry-After:
45124
+ $ref: "#/components/headers/RetryAfter"
45125
+ X-Correlation-Id:
45126
+ $ref: "#/components/headers/XCorrelationId"
45127
+ x-gala-problem-codes:
45128
+ - RATE_LIMITED
45129
+ "503":
45130
+ content:
45131
+ application/problem+json:
45132
+ examples:
45133
+ CAPABILITY_UNAVAILABLE:
45134
+ summary: CAPABILITY_UNAVAILABLE
45135
+ value:
45136
+ code: CAPABILITY_UNAVAILABLE
45137
+ correlationId: 018f0000-0000-7000-8000-000000000001
45138
+ detail: See the operation contract.
45139
+ errors: []
45140
+ retryable: false
45141
+ schemaId: urn:gala:schema:problem:2.0.0
45142
+ schemaVersion: 2.0.0
45143
+ status: 503
45144
+ title: CAPABILITY_UNAVAILABLE
45145
+ type: urn:gala:problem:capability-unavailable
45146
+ DEPENDENCY_UNAVAILABLE:
45147
+ summary: DEPENDENCY_UNAVAILABLE
45148
+ value:
45149
+ code: DEPENDENCY_UNAVAILABLE
45150
+ correlationId: 018f0000-0000-7000-8000-000000000001
45151
+ detail: See the operation contract.
45152
+ errors: []
45153
+ retryable: true
45154
+ schemaId: urn:gala:schema:problem:2.0.0
45155
+ schemaVersion: 2.0.0
45156
+ status: 503
45157
+ title: DEPENDENCY_UNAVAILABLE
45158
+ type: urn:gala:problem:dependency-unavailable
45159
+ schema:
45160
+ $ref: "#/components/schemas/Problem"
45161
+ description: CAPABILITY_UNAVAILABLE, DEPENDENCY_UNAVAILABLE
45162
+ headers:
45163
+ Cache-Control:
45164
+ $ref: "#/components/headers/CacheControlNoStore"
45165
+ X-Correlation-Id:
45166
+ $ref: "#/components/headers/XCorrelationId"
45167
+ x-gala-problem-codes:
45168
+ - CAPABILITY_UNAVAILABLE
45169
+ - DEPENDENCY_UNAVAILABLE
45170
+ security:
45171
+ - browserSession: []
45172
+ summary: read this publication's listen settings at the main branch head
45173
+ tags:
45174
+ - interaction-settings
45175
+ x-gala-activation-gate: MVP
45176
+ x-gala-activation-guards:
45177
+ - Active repository binding and configured GitHub App identity capability
45178
+ x-gala-capability-key: publication.view
45179
+ x-gala-concurrency: binding-epoch
45180
+ x-gala-conditional-capabilities: []
45181
+ x-gala-example-profile: NOMINAL_SUCCESS_AND_EACH_REACHABLE_PROBLEM
45182
+ x-gala-nullability: required-and-nullable-are-explicit
45183
+ x-gala-purpose: read this publication's listen settings at the main branch head
45184
+ x-gala-reachable-problems:
45185
+ - AUTHENTICATION_REQUIRED
45186
+ - AUTHORIZATION_DENIED
45187
+ - CAPABILITY_UNAVAILABLE
45188
+ - DEPENDENCY_UNAVAILABLE
45189
+ - RATE_LIMITED
45190
+ - RESOURCE_NOT_FOUND
45191
+ - VALIDATION_FAILED
45192
+ x-gala-replay-identity: safe-query
45193
+ x-gala-state-guards:
45194
+ - NONE
45195
+ x-gala-success-category: query
45196
+ x-gala-tenant-scope: ORGANIZATION_AND_PUBLICATION_PATH
45197
+ put:
45198
+ description: The server writes the `listen` member of `gala/publication.json` as one repository change, the way `sharing-settings` writes the `sharing` member. Publishing the change uses the normal publish flow. `change` has the shape the theme-selection write returns. Turning `enabled` on while the plan does not include Listen is `409 PLAN_REQUIRED` pointed at `/enabled`. Saving it off, or unchanged, is always allowed.
45199
+ operationId: putOrganizationsByOrganizationIdPublicationsByPublicationIdListenSettings
45200
+ parameters:
45201
+ - $ref: "#/components/parameters/XCorrelationId"
45202
+ - example: 018f0000-0000-7000-8000-000000000001
45203
+ in: path
45204
+ name: organizationId
45205
+ required: true
45206
+ schema:
45207
+ format: uuid
45208
+ pattern: ^[0-9a-f]{8}-[0-9a-f]{4}-7[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$
45209
+ type: string
45210
+ - example: 018f0000-0000-7000-8000-000000000001
45211
+ in: path
45212
+ name: publicationId
45213
+ required: true
45214
+ schema:
45215
+ format: uuid
45216
+ pattern: ^[0-9a-f]{8}-[0-9a-f]{4}-7[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$
45217
+ type: string
45218
+ - $ref: "#/components/parameters/IdempotencyKey"
45219
+ - $ref: "#/components/parameters/XCsrfToken"
45220
+ requestBody:
45221
+ content:
45222
+ application/json:
45223
+ examples:
45224
+ nominal:
45225
+ summary: Nominal valid request
45226
+ value:
45227
+ enabled: true
45228
+ schema:
45229
+ $ref: "#/components/schemas/PutOrganizationsByOrganizationIdPublicationsByPublicationIdListenSettingsRequest"
45230
+ required: true
45231
+ responses:
45232
+ "200":
45233
+ content:
45234
+ application/json:
45235
+ examples:
45236
+ nominal:
45237
+ summary: Nominal successful response
45238
+ value:
45239
+ change:
45240
+ changeId: 018f0000-0000-7000-8000-000000000001
45241
+ diffDigest: sha256:0000000000000000000000000000000000000000000000000000000000000000
45242
+ expectedHead: sha1:0000000000000000000000000000000000000000
45243
+ state: REQUESTED
45244
+ version: 0
45245
+ schema:
45246
+ $ref: "#/components/schemas/PutOrganizationsByOrganizationIdPublicationsByPublicationIdListenSettingsResponse"
45247
+ description: save this publication's listen settings as a repository change succeeded
45248
+ headers:
45249
+ Cache-Control:
45250
+ $ref: "#/components/headers/CacheControlNoStore"
45251
+ X-Correlation-Id:
45252
+ $ref: "#/components/headers/XCorrelationId"
45253
+ "400":
45254
+ $ref: "#/components/responses/RequestInvalid"
45255
+ "401":
45256
+ content:
45257
+ application/problem+json:
45258
+ examples:
45259
+ AUTHENTICATION_REQUIRED:
45260
+ summary: AUTHENTICATION_REQUIRED
45261
+ value:
45262
+ code: AUTHENTICATION_REQUIRED
45263
+ correlationId: 018f0000-0000-7000-8000-000000000001
45264
+ detail: See the operation contract.
45265
+ errors: []
45266
+ retryable: false
45267
+ schemaId: urn:gala:schema:problem:2.0.0
45268
+ schemaVersion: 2.0.0
45269
+ status: 401
45270
+ title: AUTHENTICATION_REQUIRED
45271
+ type: urn:gala:problem:authentication-required
45272
+ schema:
45273
+ $ref: "#/components/schemas/Problem"
45274
+ description: AUTHENTICATION_REQUIRED
45275
+ headers:
45276
+ Cache-Control:
45277
+ $ref: "#/components/headers/CacheControlNoStore"
45278
+ X-Correlation-Id:
45279
+ $ref: "#/components/headers/XCorrelationId"
45280
+ x-gala-problem-codes:
45281
+ - AUTHENTICATION_REQUIRED
45282
+ "403":
45283
+ $ref: "#/components/responses/AuthorizationDenied"
45284
+ "404":
45285
+ $ref: "#/components/responses/ResourceNotFound"
45286
+ "409":
45287
+ content:
45288
+ application/problem+json:
45289
+ examples:
45290
+ COMMAND_REPLAY_CONFLICT:
45291
+ summary: COMMAND_REPLAY_CONFLICT
45292
+ value:
45293
+ code: COMMAND_REPLAY_CONFLICT
45294
+ correlationId: 018f0000-0000-7000-8000-000000000001
45295
+ detail: See the operation contract.
45296
+ errors: []
45297
+ retryable: false
45298
+ schemaId: urn:gala:schema:problem:2.0.0
45299
+ schemaVersion: 2.0.0
45300
+ status: 409
45301
+ title: COMMAND_REPLAY_CONFLICT
45302
+ type: urn:gala:problem:command-replay-conflict
45303
+ INVALID_SOURCE_STATE:
45304
+ summary: INVALID_SOURCE_STATE
45305
+ value:
45306
+ code: INVALID_SOURCE_STATE
45307
+ correlationId: 018f0000-0000-7000-8000-000000000001
45308
+ detail: See the operation contract.
45309
+ errors: []
45310
+ retryable: false
45311
+ schemaId: urn:gala:schema:problem:2.0.0
45312
+ schemaVersion: 2.0.0
45313
+ status: 409
45314
+ title: INVALID_SOURCE_STATE
45315
+ type: urn:gala:problem:invalid-source-state
45316
+ PLAN_REQUIRED:
45317
+ summary: PLAN_REQUIRED
45318
+ value:
45319
+ code: PLAN_REQUIRED
45320
+ correlationId: 018f0000-0000-7000-8000-000000000001
45321
+ detail: The site's plan does not include Listen. See the operation contract.
45322
+ errors:
45323
+ - code: PLAN_REQUIRED
45324
+ pointer: /enabled
45325
+ retryable: false
45326
+ schemaId: urn:gala:schema:problem:2.0.0
45327
+ schemaVersion: 2.0.0
45328
+ status: 409
45329
+ title: PLAN_REQUIRED
45330
+ type: urn:gala:problem:plan-required
45331
+ TRANSFER_PENDING:
45332
+ summary: TRANSFER_PENDING
45333
+ value:
45334
+ code: TRANSFER_PENDING
45335
+ correlationId: 018f0000-0000-7000-8000-000000000001
45336
+ detail: See the operation contract.
45337
+ errors: []
45338
+ retryable: false
45339
+ schemaId: urn:gala:schema:problem:2.0.0
45340
+ schemaVersion: 2.0.0
45341
+ status: 409
45342
+ title: TRANSFER_PENDING
45343
+ type: urn:gala:problem:transfer-pending
45344
+ schema:
45345
+ $ref: "#/components/schemas/Problem"
45346
+ description: COMMAND_REPLAY_CONFLICT, INVALID_SOURCE_STATE, PLAN_REQUIRED, TRANSFER_PENDING
45347
+ headers:
45348
+ Cache-Control:
45349
+ $ref: "#/components/headers/CacheControlNoStore"
45350
+ X-Correlation-Id:
45351
+ $ref: "#/components/headers/XCorrelationId"
45352
+ x-gala-problem-codes:
45353
+ - COMMAND_REPLAY_CONFLICT
45354
+ - INVALID_SOURCE_STATE
45355
+ - PLAN_REQUIRED
45356
+ - TRANSFER_PENDING
45357
+ "422":
45358
+ content:
45359
+ application/problem+json:
45360
+ examples:
45361
+ VALIDATION_FAILED:
45362
+ summary: VALIDATION_FAILED
45363
+ value:
45364
+ code: VALIDATION_FAILED
45365
+ correlationId: 018f0000-0000-7000-8000-000000000001
45366
+ detail: See the operation contract.
45367
+ errors: []
45368
+ retryable: false
45369
+ schemaId: urn:gala:schema:problem:2.0.0
45370
+ schemaVersion: 2.0.0
45371
+ status: 422
45372
+ title: VALIDATION_FAILED
45373
+ type: urn:gala:problem:validation-failed
45374
+ schema:
45375
+ $ref: "#/components/schemas/Problem"
45376
+ description: VALIDATION_FAILED
45377
+ headers:
45378
+ Cache-Control:
45379
+ $ref: "#/components/headers/CacheControlNoStore"
45380
+ X-Correlation-Id:
45381
+ $ref: "#/components/headers/XCorrelationId"
45382
+ x-gala-problem-codes:
45383
+ - VALIDATION_FAILED
45384
+ "503":
45385
+ content:
45386
+ application/problem+json:
45387
+ examples:
45388
+ CAPABILITY_UNAVAILABLE:
45389
+ summary: CAPABILITY_UNAVAILABLE
45390
+ value:
45391
+ code: CAPABILITY_UNAVAILABLE
45392
+ correlationId: 018f0000-0000-7000-8000-000000000001
45393
+ detail: See the operation contract.
45394
+ errors: []
45395
+ retryable: false
45396
+ schemaId: urn:gala:schema:problem:2.0.0
45397
+ schemaVersion: 2.0.0
45398
+ status: 503
45399
+ title: CAPABILITY_UNAVAILABLE
45400
+ type: urn:gala:problem:capability-unavailable
45401
+ schema:
45402
+ $ref: "#/components/schemas/Problem"
45403
+ description: CAPABILITY_UNAVAILABLE
45404
+ headers:
45405
+ Cache-Control:
45406
+ $ref: "#/components/headers/CacheControlNoStore"
45407
+ X-Correlation-Id:
45408
+ $ref: "#/components/headers/XCorrelationId"
45409
+ x-gala-problem-codes:
45410
+ - CAPABILITY_UNAVAILABLE
45411
+ security:
45412
+ - browserSession: []
45413
+ summary: save this publication's listen settings as a repository change
45414
+ tags:
45415
+ - interaction-settings
45416
+ x-gala-activation-gate: MVP
45417
+ x-gala-activation-guards:
45418
+ - Active repository binding and configured GitHub App identity capability
45419
+ x-gala-capability-key: publication.settings.manage
45420
+ x-gala-concurrency: expected-git-head-and-binding-epoch
45421
+ x-gala-conditional-capabilities: []
45422
+ x-gala-example-profile: NOMINAL_SUCCESS_AND_EACH_REACHABLE_PROBLEM
45423
+ x-gala-nullability: required-and-nullable-are-explicit
45424
+ x-gala-purpose: save this publication's listen settings as a repository change
45425
+ x-gala-reachable-problems:
45426
+ - AUTHENTICATION_REQUIRED
45427
+ - AUTHORIZATION_DENIED
45428
+ - CAPABILITY_UNAVAILABLE
45429
+ - COMMAND_REPLAY_CONFLICT
45430
+ - INVALID_SOURCE_STATE
45431
+ - PLAN_REQUIRED
45432
+ - REQUEST_FIELD_UNKNOWN
45433
+ - RESOURCE_NOT_FOUND
45434
+ - TRANSFER_PENDING
45435
+ - VALIDATION_FAILED
45436
+ x-gala-replay-identity: idempotency-key
45437
+ x-gala-state-guards:
45438
+ - Publication:ACTIVE
45439
+ - RepositoryBinding:ACTIVE
45440
+ - RepositoryChange:REQUESTED -> PLANNED
45441
+ x-gala-success-category: protocol
45442
+ x-gala-tenant-scope: ORGANIZATION_AND_PUBLICATION_PATH
44832
45443
  /v2/organizations/{organizationId}/publications/{publicationId}/moderation/comments/{commentId}:decide:
44833
45444
  post:
44834
45445
  description: |
@@ -59850,10 +60461,12 @@ paths:
59850
60461
  active publication-capacity release with its single optimistic-lock
59851
60462
  version and the closed FREE, PRO, and BUSINESS plan catalog.
59852
60463
  Each plan carries its `publicationLimit`, its `newsletterSubscriberLimit`
59853
- (confirmed newsletter subscribers per organization) and `contactForm`
59854
- (whether its sites may turn on the contact form). Defaults of the first
59855
- release: FREE 50 and no contact form, PRO 500 and a contact form,
59856
- BUSINESS 2000 and a contact form.
60464
+ (confirmed newsletter subscribers per organization), `contactForm`
60465
+ (whether its sites may turn on the contact form) and `listen` (whether
60466
+ its sites may turn on Listen, the audio version of posts). Defaults of
60467
+ the first release: FREE 50 and no contact form, PRO 500 and a contact
60468
+ form, BUSINESS 2000 and a contact form. Listen defaults: FREE no, PRO
60469
+ and BUSINESS yes.
59857
60470
  operationId: getPlatformPlans
59858
60471
  parameters:
59859
60472
  - $ref: "#/components/parameters/XCorrelationId"
@@ -59868,14 +60481,17 @@ paths:
59868
60481
  effectiveAt: "2026-10-10T00:00:04.000Z"
59869
60482
  items:
59870
60483
  - contactForm: false
60484
+ listen: false
59871
60485
  newsletterSubscriberLimit: 50
59872
60486
  planKey: FREE
59873
60487
  publicationLimit: 1
59874
60488
  - contactForm: true
60489
+ listen: true
59875
60490
  newsletterSubscriberLimit: 500
59876
60491
  planKey: PRO
59877
60492
  publicationLimit: 10
59878
60493
  - contactForm: true
60494
+ listen: true
59879
60495
  newsletterSubscriberLimit: 2000
59880
60496
  planKey: BUSINESS
59881
60497
  publicationLimit: 50
@@ -59924,9 +60540,9 @@ paths:
59924
60540
  Operators only, with recent authentication. Atomically replaces the
59925
60541
  complete publication-capacity release, changing the named plan's limits
59926
60542
  while retaining the other two, at the release version in `If-Match`.
59927
- `newsletterSubscriberLimit` and `contactForm` are optional: absent keeps
59928
- the plan's current value. The invariant FREE <= PRO <= BUSINESS is
59929
- enforced on `publicationLimit` only. `reason` is a
60543
+ `newsletterSubscriberLimit`, `contactForm` and `listen` are optional:
60544
+ absent keeps the plan's current value. The invariant FREE <= PRO <=
60545
+ BUSINESS is enforced on `publicationLimit` only. `reason` is a
59930
60546
  non-sensitive operator reason code recorded in the audit event.
59931
60547
  operationId: putPlatformPlansByPlanKey
59932
60548
  parameters:
@@ -59963,14 +60579,17 @@ paths:
59963
60579
  effectiveAt: "2026-10-10T12:00:00.000Z"
59964
60580
  items:
59965
60581
  - contactForm: false
60582
+ listen: false
59966
60583
  newsletterSubscriberLimit: 50
59967
60584
  planKey: FREE
59968
60585
  publicationLimit: 1
59969
60586
  - contactForm: true
60587
+ listen: true
59970
60588
  newsletterSubscriberLimit: 500
59971
60589
  planKey: PRO
59972
60590
  publicationLimit: 12
59973
60591
  - contactForm: true
60592
+ listen: true
59974
60593
  newsletterSubscriberLimit: 2000
59975
60594
  planKey: BUSINESS
59976
60595
  publicationLimit: 50
@@ -70904,6 +71523,24 @@ paths:
70904
71523
  status: 409
70905
71524
  title: INVALID_SOURCE_STATE
70906
71525
  type: urn:gala:problem:invalid-source-state
71526
+ PAGE_LOSS_GUARD:
71527
+ summary: PAGE_LOSS_GUARD
71528
+ value:
71529
+ code: PAGE_LOSS_GUARD
71530
+ correlationId: 018f0000-0000-7000-8000-000000000001
71531
+ detail: See the operation contract.
71532
+ details:
71533
+ candidatePageCount: 40
71534
+ lostPageCount: 60
71535
+ permittedLoss: 25
71536
+ previousPageCount: 100
71537
+ errors: []
71538
+ retryable: false
71539
+ schemaId: urn:gala:schema:problem:2.0.0
71540
+ schemaVersion: 2.0.0
71541
+ status: 409
71542
+ title: PAGE_LOSS_GUARD
71543
+ type: urn:gala:problem:page-loss-guard
70907
71544
  WORKLOAD_REPLAYED:
70908
71545
  summary: WORKLOAD_REPLAYED
70909
71546
  value:
@@ -70919,7 +71556,7 @@ paths:
70919
71556
  type: urn:gala:problem:workload-replayed
70920
71557
  schema:
70921
71558
  $ref: "#/components/schemas/Problem"
70922
- description: DESTINATION_MUTATION_IN_PROGRESS, INVALID_SOURCE_STATE, WORKLOAD_REPLAYED
71559
+ description: DESTINATION_MUTATION_IN_PROGRESS, INVALID_SOURCE_STATE, PAGE_LOSS_GUARD, WORKLOAD_REPLAYED
70923
71560
  headers:
70924
71561
  Cache-Control:
70925
71562
  $ref: "#/components/headers/CacheControlNoStore"
@@ -70928,6 +71565,7 @@ paths:
70928
71565
  x-gala-problem-codes:
70929
71566
  - DESTINATION_MUTATION_IN_PROGRESS
70930
71567
  - INVALID_SOURCE_STATE
71568
+ - PAGE_LOSS_GUARD
70931
71569
  - WORKLOAD_REPLAYED
70932
71570
  "410":
70933
71571
  content:
@@ -71091,6 +71729,7 @@ paths:
71091
71729
  - DEPENDENCY_UNAVAILABLE
71092
71730
  - DESTINATION_MUTATION_IN_PROGRESS
71093
71731
  - INVALID_SOURCE_STATE
71732
+ - PAGE_LOSS_GUARD
71094
71733
  - RATE_LIMITED
71095
71734
  - REQUEST_FIELD_UNKNOWN
71096
71735
  - VALIDATION_FAILED