@rathnasgala2/schemas 3.16.0 → 3.17.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 (53) hide show
  1. package/README.md +5 -3
  2. package/THIRD_PARTY_LICENSES.json +1 -1
  3. package/catalog-sources/internal-event-actions.json +1 -1
  4. package/diagnostics/diagnostic-map.json +57 -0
  5. package/docs/catalogs/internal-event-actions.json +2 -2
  6. package/docs/catalogs/schema-inventory.json +7 -7
  7. package/examples/valid/adapter-capability/rules.json +12 -0
  8. package/examples/valid/deployment-intent/rules.json +12 -0
  9. package/examples/valid/deployment-observation/rules.json +12 -0
  10. package/examples/valid/deployment-receipt/rules.json +12 -0
  11. package/examples/valid/problem/rules.json +39 -0
  12. package/fixtures/boundary/adapter-capability/rules.json +26 -0
  13. package/fixtures/boundary/deployment-intent/rules.json +26 -0
  14. package/fixtures/boundary/deployment-observation/rules.json +26 -0
  15. package/fixtures/boundary/deployment-receipt/rules.json +26 -0
  16. package/fixtures/boundary/problem/rules.json +81 -0
  17. package/fixtures/invalid/adapter-capability/SCHEMA_PATTERN_INVALID/cases.json +11 -0
  18. package/fixtures/invalid/adapter-capability/SCHEMA_STRING_TOO_LONG/cases.json +11 -0
  19. package/fixtures/invalid/adapter-capability/UTF8_BYTE_LENGTH_INVALID/cases.json +11 -0
  20. package/fixtures/invalid/deployment-intent/SCHEMA_PATTERN_INVALID/cases.json +11 -0
  21. package/fixtures/invalid/deployment-intent/SCHEMA_STRING_TOO_LONG/cases.json +11 -0
  22. package/fixtures/invalid/deployment-intent/UTF8_BYTE_LENGTH_INVALID/cases.json +11 -0
  23. package/fixtures/invalid/deployment-observation/SCHEMA_PATTERN_INVALID/cases.json +11 -0
  24. package/fixtures/invalid/deployment-observation/SCHEMA_STRING_TOO_LONG/cases.json +11 -0
  25. package/fixtures/invalid/deployment-observation/UTF8_BYTE_LENGTH_INVALID/cases.json +11 -0
  26. package/fixtures/invalid/deployment-receipt/SCHEMA_PATTERN_INVALID/cases.json +11 -0
  27. package/fixtures/invalid/deployment-receipt/SCHEMA_STRING_TOO_LONG/cases.json +11 -0
  28. package/fixtures/invalid/deployment-receipt/UTF8_BYTE_LENGTH_INVALID/cases.json +11 -0
  29. package/fixtures/invalid/problem/GRAPHEME_LENGTH_INVALID/cases.json +9 -0
  30. package/fixtures/invalid/problem/SCHEMA_STRING_TOO_LONG/cases.json +27 -0
  31. package/fixtures/invalid/problem/SCHEMA_STRING_TOO_SHORT/cases.json +9 -0
  32. package/fixtures/invalid/problem/SCHEMA_TYPE_INVALID/cases.json +18 -0
  33. package/fixtures/manifest.json +447 -10
  34. package/fixtures/unknown-field/adapter-capability/rules.json +3 -0
  35. package/fixtures/unknown-field/deployment-intent/rules.json +3 -0
  36. package/fixtures/unknown-field/deployment-observation/rules.json +3 -0
  37. package/fixtures/unknown-field/deployment-receipt/rules.json +3 -0
  38. package/fixtures/unknown-field/problem/rules.json +7 -0
  39. package/generated/browser/validator-core.mjs +2 -2
  40. package/generated/typescript/contracts/adapter-capability.d.ts +1 -0
  41. package/generated/typescript/contracts/deployment-intent.d.ts +1 -0
  42. package/generated/typescript/contracts/deployment-observation.d.ts +1 -0
  43. package/generated/typescript/contracts/deployment-receipt.d.ts +1 -0
  44. package/generated/typescript/contracts/problem.d.ts +4 -0
  45. package/openapi/http-catalog.json +3 -3
  46. package/openapi/openapi.yaml +409 -10
  47. package/package.json +1 -1
  48. package/sbom.cdx.json +23 -23
  49. package/schemas/adapter-capability.schema.json +7 -0
  50. package/schemas/deployment-intent.schema.json +7 -0
  51. package/schemas/deployment-observation.schema.json +7 -0
  52. package/schemas/deployment-receipt.schema.json +7 -0
  53. package/schemas/problem.schema.json +21 -0
@@ -1923,10 +1923,70 @@ components:
1923
1923
  - provider
1924
1924
  - intents
1925
1925
  type: object
1926
+ DomainBaseMove:
1927
+ additionalProperties: false
1928
+ description: |
1929
+ SCHEMA-3.17.0. Where the system's move of the site's canonical base
1930
+ (`gala/publication.json` `canonicalBase`) stands. Connecting a domain
1931
+ moves the base to the custom address and removing it moves the base
1932
+ back to the github.io address, each as a system operation
1933
+ (`domain_base_move`) that proposes the "Site address" change and
1934
+ publishes it, ordered so no address serves a build made for the other.
1935
+ A person never has to publish for it.
1936
+ properties:
1937
+ changeId:
1938
+ description: |
1939
+ The repository change that carries the base move, once proposed.
1940
+ format: uuid
1941
+ pattern: ^[0-9a-f]{8}-[0-9a-f]{4}-7[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$
1942
+ type: string
1943
+ operationId:
1944
+ description: |
1945
+ The `domain_base_move` operation doing the work, once it exists;
1946
+ read it at `/v2/organizations/{organizationId}/operations/{operationId}`.
1947
+ format: uuid
1948
+ pattern: ^[0-9a-f]{8}-[0-9a-f]{4}-7[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$
1949
+ type: string
1950
+ reason:
1951
+ description: |
1952
+ Why the move is not progressing, when it is not: a stable upper-case
1953
+ code. Known values: `MOVE_FAILED` (an attempt failed; the next check
1954
+ cycle retries), `MOVE_STUCK` (three attempts failed; the author's
1955
+ Check now retries), `MOVE_ABANDONED` (the move back to the github.io
1956
+ address on removal gave up) and `AUTHORITY_LAPSED` (the stored
1957
+ publish authority the move runs under could not be restated from the
1958
+ latest decision). Absent while the move is progressing or not
1959
+ needed. A client shows a generic sentence for a value it does not
1960
+ know.
1961
+ maxLength: 80
1962
+ minLength: 1
1963
+ type: string
1964
+ state:
1965
+ description: |
1966
+ `NOT_NEEDED`: the profile base already is the address the site is
1967
+ served from. `PENDING`: a move is required and has not started.
1968
+ `MOVING`: the move operation is running. `FAILED`: the last attempt
1969
+ failed (`reason` says how; it is retried until `MOVE_STUCK`).
1970
+ `PROPOSED`: the "Site address" change exists (`changeId`) and is not
1971
+ yet published. `PUBLISHED`: the move completed and the base is
1972
+ live.
1973
+ enum:
1974
+ - NOT_NEEDED
1975
+ - PENDING
1976
+ - MOVING
1977
+ - FAILED
1978
+ - PROPOSED
1979
+ - PUBLISHED
1980
+ type: string
1981
+ required:
1982
+ - state
1983
+ type: object
1926
1984
  DomainBinding:
1927
1985
  additionalProperties: false
1928
- description: A custom domain on GitHub Pages for one publication (SCHEMA-3.3.0). `dns.records` are exactly the records to add at the registrar (a CNAME to `<owner>.github.io` for a subdomain; GitHub's four A and four AAAA records for an apex). Galascribe checks DNS before it sets the Pages custom domain, then waits for GitHub's certificate and routing; `ACTIVE` proposes the change that moves `canonicalBase` to the domain, and the site moves at the next publish. `expiresAt` is set while `OWNERSHIP_PENDING` (7 days).
1986
+ description: A custom domain on GitHub Pages for one publication (SCHEMA-3.3.0). `dns.records` are exactly the records to add at the registrar (a CNAME to `<owner>.github.io` for a subdomain; GitHub's four A and four AAAA records for an apex). Galascribe checks DNS before it sets the Pages custom domain, then waits for GitHub's certificate and routing; `ACTIVE` proposes the change that moves `canonicalBase` to the domain, and the site moves at the next publish. `expiresAt` is set while `OWNERSHIP_PENDING` (7 days). SCHEMA-3.17.0 adds `redirectsFromProjectPath`, which says whether GitHub already redirects the project path to the domain (from the moment the Pages CNAME is set until it is removed) and so decides the address the site is served from and the base it must be built for, and `baseMove`, which says where the system's move of that base stands (the `WAIT_FOR_MOVE` next step is shown while it runs). Both are optional so a 3.16 body still validates.
1929
1987
  properties:
1988
+ baseMove:
1989
+ $ref: "#/components/schemas/DomainBaseMove"
1930
1990
  canonicalBase:
1931
1991
  $ref: "#/components/schemas/DomainCanonicalBase"
1932
1992
  certificate:
@@ -1983,6 +2043,17 @@ components:
1983
2043
  - provider
1984
2044
  - since
1985
2045
  type: object
2046
+ redirectsFromProjectPath:
2047
+ description: |
2048
+ SCHEMA-3.17.0. True while GitHub redirects the repository's
2049
+ github.io project path to this domain, which it does from the moment
2050
+ the Pages CNAME is set until it is removed. While it is true the
2051
+ site is served from the domain, so the canonical base it must carry
2052
+ is the domain's; while it is false the project path serves the site
2053
+ and the base is the github.io address. The server derives it from
2054
+ its own record of when the CNAME was set and removed, so a client
2055
+ reads the flag and does not infer it from `state`.
2056
+ type: boolean
1986
2057
  routing:
1987
2058
  $ref: "#/components/schemas/DomainRouting"
1988
2059
  state:
@@ -2131,7 +2202,7 @@ components:
2131
2202
  type: string
2132
2203
  DomainNextStep:
2133
2204
  additionalProperties: false
2134
- description: What is being waited on, or what the author should do next. Known codes include `ADD_DNS_RECORDS`, `WAIT_FOR_DNS`, `WAIT_FOR_CERTIFICATE`, `WAIT_FOR_ROUTING`, `PUBLISH_TO_SWITCH`, `FIX_DNS_RECORD`, `REMOVE_DNS_RECORDS`, `TURN_ON_CLOUDFLARE_PROXY` (SCHEMA-3.6.0, the certificate is issued and the author may let Cloudflare proxy the site) and `NONE`; a client shows `detail` for codes it does not know.
2205
+ description: What is being waited on, or what the author should do next. Known codes include `ADD_DNS_RECORDS`, `WAIT_FOR_DNS`, `WAIT_FOR_CERTIFICATE`, `WAIT_FOR_ROUTING`, `PUBLISH_TO_SWITCH`, `FIX_DNS_RECORD`, `REMOVE_DNS_RECORDS`, `TURN_ON_CLOUDFLARE_PROXY` (SCHEMA-3.6.0, the certificate is issued and the author may let Cloudflare proxy the site), `WAIT_FOR_MOVE` (SCHEMA-3.17.0, Galascribe is moving the site's canonical base to or from the domain; `baseMove` says where it is and nothing is asked of the author) and `NONE`; a client shows `detail` for codes it does not know.
2135
2206
  properties:
2136
2207
  code:
2137
2208
  maxLength: 80
@@ -5139,7 +5210,7 @@ components:
5139
5210
  additionalProperties: false
5140
5211
  properties:
5141
5212
  reasonCode:
5142
- 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. Clients must tolerate other values."
5213
+ 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."
5143
5214
  maxLength: 80
5144
5215
  minLength: 1
5145
5216
  type: string
@@ -5900,6 +5971,8 @@ components:
5900
5971
  type: string
5901
5972
  currentAttemptManagedReceipt:
5902
5973
  $ref: "#/components/schemas/PortableDeploymentReceiptDocument"
5974
+ held:
5975
+ $ref: "#/components/schemas/OperationHeld"
5903
5976
  kind:
5904
5977
  $ref: "#/components/schemas/OperationKind"
5905
5978
  managedReceipt:
@@ -5925,6 +5998,8 @@ components:
5925
5998
  type: string
5926
5999
  phase:
5927
6000
  $ref: "#/components/schemas/OperationPhase"
6001
+ reason:
6002
+ $ref: "#/components/schemas/OperationReason"
5928
6003
  recoveryActions:
5929
6004
  items:
5930
6005
  maxLength: 80
@@ -6459,6 +6534,8 @@ components:
6459
6534
  format: uuid
6460
6535
  pattern: ^[0-9a-f]{8}-[0-9a-f]{4}-7[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$
6461
6536
  type: string
6537
+ held:
6538
+ $ref: "#/components/schemas/OperationHeld"
6462
6539
  kind:
6463
6540
  $ref: "#/components/schemas/OperationKind"
6464
6541
  operationId:
@@ -6474,6 +6551,8 @@ components:
6474
6551
  - failed_no_effect
6475
6552
  - cancelled_no_effect
6476
6553
  type: string
6554
+ reason:
6555
+ $ref: "#/components/schemas/OperationReason"
6477
6556
  recoveryActions:
6478
6557
  items:
6479
6558
  maxLength: 80
@@ -6502,19 +6581,70 @@ components:
6502
6581
  - blockers
6503
6582
  - recoveryActions
6504
6583
  type: object
6584
+ OperationHeld:
6585
+ additionalProperties: false
6586
+ description: |
6587
+ SCHEMA-3.17.0. Present on an operation that is still `accepted` and is
6588
+ not starting because another operation of the same publication holds
6589
+ its destination: the destination fence a deploy opens at intent
6590
+ exchange stays held until that operation ends, and a publish does not
6591
+ dispatch while it is held. It names the holder so a client can say what
6592
+ the operation is waiting for instead of showing a bare `accepted`.
6593
+ Absent when nothing holds the destination and on every operation that
6594
+ has started or ended. A held operation ends with
6595
+ `DESTINATION_BUSY_TIMEOUT` if the holder does not release the fence
6596
+ within the server's bound (see `reason`).
6597
+ properties:
6598
+ byOperationId:
6599
+ description: The operation that holds the destination.
6600
+ format: uuid
6601
+ pattern: ^[0-9a-f]{8}-[0-9a-f]{4}-7[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$
6602
+ type: string
6603
+ holderPhase:
6604
+ description: |
6605
+ The holder's lifecycle state now, spelled as the transition
6606
+ catalog spells a `PublicationOperation` state in capitals
6607
+ (`ACCEPTED`, `EXECUTING`, `RECONCILING`, `COMPLETED`,
6608
+ `FAILED_NO_EFFECT`, `CANCELLED_NO_EFFECT`), which is not the
6609
+ lower-case `phase` an operation read carries. A client shows a
6610
+ value it does not know as it is.
6611
+ maxLength: 80
6612
+ minLength: 1
6613
+ type: string
6614
+ holderReason:
6615
+ $ref: "#/components/schemas/OperationReason"
6616
+ description: |
6617
+ Why the holder is in that state, when it is known: its terminal
6618
+ `reason`, or the verdict its run settled with while the fence is
6619
+ still being released. Absent while the holder is simply running.
6620
+ since:
6621
+ $ref: "#/components/schemas/PortableProblemRfc3339"
6622
+ description: When this operation was accepted and started waiting for the destination.
6623
+ required:
6624
+ - byOperationId
6625
+ - since
6626
+ - holderPhase
6627
+ type: object
6505
6628
  OperationKind:
6506
6629
  description: |
6507
6630
  What kind of work the operation is, so a client can label it and route
6508
6631
  to the right screen without parsing `statusUrl` or inferring from
6509
6632
  `subject`. The vocabulary is exactly the organization-scoped operations
6510
- that answer `202 Accepted` and therefore create an operation row; it is
6633
+ that create an operation row (the ones that answer `202 Accepted`, and
6634
+ from 3.17.0 the system-initiated `domain_base_move`); it is
6511
6635
  spelled the way the API's own `operation_type` column is
6512
6636
  (`^[a-z][a-z0-9_]*$`), and `publication_retirement` and
6513
6637
  `repository_change_commit` are already that column's literals. A member
6514
- is added only by a reviewed contract change.
6638
+ is added only by a reviewed contract change. `domain_base_move`
6639
+ (SCHEMA-3.17.0, the API's `DOMAIN_BASE_MOVE` dispatch kind) is the
6640
+ system-initiated operation that moves a site's canonical base to or
6641
+ from its custom domain around the CNAME switch; nobody requests it, so
6642
+ it is reached through an operation's `held.byOperationId` or a site
6643
+ read rather than a `202`.
6515
6644
  enum:
6516
6645
  - deployment_reconcile
6517
6646
  - deployment_rollback
6647
+ - domain_base_move
6518
6648
  - publication_import
6519
6649
  - publication_retirement
6520
6650
  - publish
@@ -6531,6 +6661,31 @@ components:
6531
6661
  - failed_no_effect
6532
6662
  - cancelled_no_effect
6533
6663
  type: string
6664
+ OperationReason:
6665
+ description: |
6666
+ SCHEMA-3.17.0. A stable upper-case code saying why an operation ended
6667
+ the way it did, or why it is in its phase: set on a `failed_no_effect`
6668
+ or `cancelled_no_effect` operation and on one that is `reconciling`
6669
+ because its deploy failed; absent on a running or successful operation
6670
+ and on operations that ended before 3.17.0. A free string within the
6671
+ pattern, not a closed enumeration, so a client shows a generic sentence
6672
+ for a code it does not know. Known values: `RUN_NOT_STARTED`,
6673
+ `BUILD_FAILED`, `RUN_CANCELLED`, `RUN_TIMED_OUT`,
6674
+ `WORKFLOW_UNAVAILABLE`, `DEPLOY_FAILED`, `PAGES_NOT_AVAILABLE`,
6675
+ `REPORT_FAILED`, `LIVE_CHECK_FAILED`, `CHANGE_CLOSED_ON_GITHUB` (the
6676
+ `reasonCode` values of a history failure) and, new in 3.17.0,
6677
+ `DESTINATION_BUSY_TIMEOUT` (the operation was held behind another that
6678
+ did not release the destination within the server's bound, so it ended
6679
+ without creating a run), `DESTINATION_FENCE_EXPIRED` (the destination
6680
+ fence this operation held was closed by the server's reaper after its
6681
+ run settled with no receipt), `CANONICAL_BASE_MISMATCH` (the site's
6682
+ canonical base was not the address it is served from when the
6683
+ operation was dispatched) and `DOMAIN_NOT_READY` (a custom domain was
6684
+ part-way through its switch and no origin could be verified).
6685
+ maxLength: 64
6686
+ minLength: 3
6687
+ pattern: ^[A-Z][A-Z0-9_]{2,63}$
6688
+ type: string
6534
6689
  OperationResponse:
6535
6690
  additionalProperties: false
6536
6691
  properties:
@@ -8300,6 +8455,14 @@ components:
8300
8455
  $ref: "#/components/schemas/PortableDeploymentIntentDestinationProviderCoordinates"
8301
8456
  targetDigest:
8302
8457
  $ref: "#/components/schemas/PortableDeploymentIntentDigest"
8458
+ verificationBaseUrl:
8459
+ allOf:
8460
+ - $ref: "#/components/schemas/PortableDeploymentIntentUrlHttps"
8461
+ description: "SCHEMA-3.17.0, optional: the address the deploy is verified at when that differs from `baseUrl`, the build base. It is the origin and path that answer over HTTPS right now (the github.io project address before a custom domain is set, the custom base once it serves): a lowercase exact host with no userinfo, port, query or fragment; a path is allowed. Absent means `baseUrl` is both the build base and the verification address, exactly as before 3.17.0. When present it is a member of `destination` like `baseUrl`, so it is inside the capability decision record that `decisionDigest` covers (RFC 8785 canonical member order); a record without it digests exactly as it did before."
8462
+ maxLength: 2048
8463
+ pattern: ^https://[a-z0-9](?:[a-z0-9.-]{0,251}[a-z0-9])?(?:/[^?#\s]*)?$
8464
+ x-gala-utf8ByteLength:
8465
+ maximum: 2048
8303
8466
  required:
8304
8467
  - environment
8305
8468
  - adapterId
@@ -11997,6 +12160,14 @@ components:
11997
12160
  $ref: "#/components/schemas/PortableDeploymentReceiptDestinationProviderCoordinates"
11998
12161
  targetDigest:
11999
12162
  $ref: "#/components/schemas/PortableDeploymentReceiptDigest"
12163
+ verificationBaseUrl:
12164
+ allOf:
12165
+ - $ref: "#/components/schemas/PortableDeploymentReceiptUrlHttps"
12166
+ description: "SCHEMA-3.17.0, optional: the address the deploy is verified at when that differs from `baseUrl`, the build base. It is the origin and path that answer over HTTPS right now (the github.io project address before a custom domain is set, the custom base once it serves): a lowercase exact host with no userinfo, port, query or fragment; a path is allowed. Absent means `baseUrl` is both the build base and the verification address, exactly as before 3.17.0. When present it is a member of `destination` like `baseUrl`, so it is inside the capability decision record that `decisionDigest` covers (RFC 8785 canonical member order); a record without it digests exactly as it did before."
12167
+ maxLength: 2048
12168
+ pattern: ^https://[a-z0-9](?:[a-z0-9.-]{0,251}[a-z0-9])?(?:/[^?#\s]*)?$
12169
+ x-gala-utf8ByteLength:
12170
+ maximum: 2048
12000
12171
  required:
12001
12172
  - environment
12002
12173
  - adapterId
@@ -13590,16 +13761,36 @@ components:
13590
13761
  x-gala-graphemeLength:
13591
13762
  maximum: 500
13592
13763
  minimum: 0
13764
+ domainState:
13765
+ 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."
13766
+ maxLength: 80
13767
+ minLength: 1
13768
+ type: string
13593
13769
  errors:
13594
13770
  items:
13595
13771
  $ref: "#/components/schemas/PortableProblemFieldError"
13596
13772
  maxItems: 100
13597
13773
  minItems: 0
13598
13774
  type: array
13775
+ expectedBase:
13776
+ allOf:
13777
+ - $ref: "#/components/schemas/PortableProblemUrlHttps"
13778
+ description: "SCHEMA-3.17.0, optional, carried by a CANONICAL_BASE_MISMATCH problem and absent from every other: the address the site is served from right now and so the canonical base its publication profile must carry (the active custom domain once the domain redirects the project path, otherwise the github.io address)."
13779
+ maxLength: 2048
13599
13780
  instance:
13600
13781
  $ref: "#/components/schemas/PortableProblemCanonicalRoute"
13601
13782
  operationId:
13602
13783
  $ref: "#/components/schemas/PortableProblemStableId"
13784
+ profileBase:
13785
+ description: "SCHEMA-3.17.0, optional, carried by a CANONICAL_BASE_MISMATCH problem and absent from every other: the canonical base the publication profile (`gala/publication.json`) carries now, as written. A string rather than an https URL because the mismatch can be a value that is not one (for example an http address)."
13786
+ maxLength: 2048
13787
+ type: string
13788
+ remedy:
13789
+ $ref: "#/components/schemas/PortableProblemPlainText"
13790
+ description: "SCHEMA-3.17.0, optional, carried by a CANONICAL_BASE_MISMATCH problem and absent from every other: one sentence, written for the author, saying what resolves the mismatch. A client may render it verbatim."
13791
+ x-gala-graphemeLength:
13792
+ maximum: 500
13793
+ minimum: 1
13603
13794
  retryable:
13604
13795
  type: boolean
13605
13796
  schemaId:
@@ -16519,6 +16710,38 @@ components:
16519
16710
  type: object
16520
16711
  PostWorkloadsDeploymentReceiptsRequest:
16521
16712
  additionalProperties: false
16713
+ allOf:
16714
+ - else:
16715
+ required:
16716
+ - kernelJournal
16717
+ if:
16718
+ properties:
16719
+ deployFailure:
16720
+ properties:
16721
+ journal:
16722
+ pattern: ^absent$
16723
+ type: string
16724
+ x-gala-const: absent
16725
+ required:
16726
+ - journal
16727
+ required:
16728
+ - deployFailure
16729
+ then:
16730
+ not:
16731
+ required:
16732
+ - kernelJournal
16733
+ description: |
16734
+ The deployment receipt the workflow reports for one operation.
16735
+ SCHEMA-3.17.0 lets it report a deploy that failed before, or without,
16736
+ a kernel journal. `deployFailure` classifies the failure; when its
16737
+ `journal` is `absent` the deploy wrote no journal and `kernelJournal`
16738
+ must be omitted, and the API accepts the report as terminal evidence
16739
+ that nothing changed once the run has settled as failed. Without
16740
+ `deployFailure`, or with `journal` `present`, `kernelJournal` is
16741
+ required exactly as before. `verifiedAt` records the origin the deploy
16742
+ was verified at, which differs from `publicBaseUrl` while a custom
16743
+ domain is being switched. Both members are optional, so every 3.16
16744
+ submission is still valid.
16522
16745
  properties:
16523
16746
  adapterId:
16524
16747
  maxLength: 80
@@ -16539,6 +16762,8 @@ components:
16539
16762
  artifactManifestDigest:
16540
16763
  pattern: ^sha256:[0-9a-f]{64}$
16541
16764
  type: string
16765
+ deployFailure:
16766
+ $ref: "#/components/schemas/ReceiptSubmissionDeployFailure"
16542
16767
  destinationGenerationId:
16543
16768
  format: uuid
16544
16769
  pattern: ^[0-9a-f]{8}-[0-9a-f]{4}-7[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$
@@ -16590,6 +16815,8 @@ components:
16590
16815
  sourceCommit:
16591
16816
  pattern: ^(?:sha1:[0-9a-f]{40}|sha256:[0-9a-f]{64})$
16592
16817
  type: string
16818
+ verifiedAt:
16819
+ $ref: "#/components/schemas/ReceiptSubmissionVerifiedAt"
16593
16820
  workflowCompletedAt:
16594
16821
  $ref: "#/components/schemas/PortableDeploymentReceiptRfc3339"
16595
16822
  workflowStartedAt:
@@ -16613,7 +16840,6 @@ components:
16613
16840
  - observedRoutes
16614
16841
  - workflowStartedAt
16615
16842
  - workflowCompletedAt
16616
- - kernelJournal
16617
16843
  type: object
16618
16844
  PostWorkloadsDeploymentReceiptsResponse:
16619
16845
  allOf:
@@ -17867,7 +18093,10 @@ components:
17867
18093
  LOCAL-60): the decision is server-owned, so the API constructs the
17868
18094
  record, derives this digest and refuses a disagreement with `422
17869
18095
  VALIDATION_FAILED`. Required in 2.8.x; required and server-derived
17870
- in the retained deployment-intent document.
18096
+ in the retained deployment-intent document. SCHEMA-3.17.0: the
18097
+ record's `destination` carries `verificationBaseUrl` when the
18098
+ request does, so the digest covers it, as a member of `destination`
18099
+ like `baseUrl`; a request without it digests as it did before.
17871
18100
  pattern: ^sha256:[0-9a-f]{64}$
17872
18101
  type: string
17873
18102
  destination:
@@ -18151,6 +18380,26 @@ components:
18151
18380
  provider binding (`GALA-DESTINATION-PROVIDER-BINDING-V2`) and
18152
18381
  refuses a disagreement with `422 VALIDATION_FAILED`. Required in
18153
18382
  the retained document.
18383
+ verificationBaseUrl:
18384
+ allOf:
18385
+ - $ref: "#/components/schemas/PortableDeploymentIntentUrlHttps"
18386
+ description: |
18387
+ Optional (SCHEMA-3.17.0): the address the deploy is verified at
18388
+ when that differs from `baseUrl`, the build base. It is the origin
18389
+ and path that answer over HTTPS right now: the github.io project
18390
+ address before a custom domain's CNAME is set, the custom base once
18391
+ it serves. A lowercase exact host with no userinfo, port, query or
18392
+ fragment; a path is allowed. The API refuses a value it does not
18393
+ consider the serving address with `422 VALIDATION_FAILED`, and
18394
+ retains it in the deployment intent's `destination`. When present it
18395
+ is inside the capability decision record, so `capabilityDecisionDigest`
18396
+ covers it as it covers `baseUrl` (RFC 8785 canonical member order);
18397
+ when absent the digest is exactly what it was before 3.17.0.
18398
+ maxLength: 2048
18399
+ pattern: ^https://[a-z0-9](?:[a-z0-9.-]{0,251}[a-z0-9])?(?:/[^?#\s]*)?$
18400
+ type: string
18401
+ x-gala-utf8ByteLength:
18402
+ maximum: 2048
18154
18403
  required:
18155
18404
  - adapterId
18156
18405
  - adapterVersion
@@ -18353,6 +18602,73 @@ components:
18353
18602
  - operationId
18354
18603
  - statusUrl
18355
18604
  type: object
18605
+ ReceiptSubmissionDeployFailure:
18606
+ additionalProperties: false
18607
+ description: |
18608
+ SCHEMA-3.17.0. Why a deploy failed, as the workflow classified it, so
18609
+ the API can settle the operation with a named cause even when the
18610
+ deploy wrote no kernel journal.
18611
+ properties:
18612
+ failureCode:
18613
+ description: |
18614
+ A stable upper-case code naming the failure, for example
18615
+ `PAGES_PUBLIC_REDIRECT` (the public read was redirected, `toHost`
18616
+ says where). A free string within the pattern, not a closed
18617
+ enumeration; a client shows a generic sentence for a code it does
18618
+ not know.
18619
+ maxLength: 64
18620
+ minLength: 3
18621
+ pattern: ^[A-Z][A-Z0-9_]{2,63}$
18622
+ type: string
18623
+ journal:
18624
+ description: |
18625
+ `present`: the deploy wrote a kernel journal and the submission
18626
+ carries it as `kernelJournal`. `absent`: the deploy failed before
18627
+ any journal existed; `kernelJournal` must be omitted.
18628
+ enum:
18629
+ - present
18630
+ - absent
18631
+ type: string
18632
+ stage:
18633
+ description: |
18634
+ The deployment stage the failure happened in (for example
18635
+ `preflight`, `staging` or `observation`), when it happened in one.
18636
+ Absent for a failure before any stage ran.
18637
+ maxLength: 64
18638
+ minLength: 1
18639
+ pattern: ^[a-z][a-z0-9-]{0,63}$
18640
+ type: string
18641
+ toHost:
18642
+ description: |
18643
+ For a redirect failure, the lower-case host the public read was
18644
+ redirected to (an IDNA hostname, no scheme, port or path).
18645
+ maxLength: 253
18646
+ minLength: 1
18647
+ pattern: ^[a-z0-9](?:[a-z0-9.-]{0,251}[a-z0-9])?$
18648
+ type: string
18649
+ required:
18650
+ - journal
18651
+ - failureCode
18652
+ type: object
18653
+ ReceiptSubmissionVerifiedAt:
18654
+ additionalProperties: false
18655
+ description: |
18656
+ SCHEMA-3.17.0. The origin the workflow read the public marker at to
18657
+ verify the deploy. It can differ from `publicBaseUrl`: while a custom
18658
+ domain is being switched the verification origin is the one that
18659
+ answers over HTTPS right now, and the API records which one was read.
18660
+ properties:
18661
+ origin:
18662
+ description: |
18663
+ The https origin: scheme, lower-case host and an optional port,
18664
+ with no userinfo, path, query or fragment (no trailing slash).
18665
+ maxLength: 270
18666
+ minLength: 9
18667
+ pattern: ^https://[a-z0-9](?:[a-z0-9.-]{0,251}[a-z0-9])?(?::[0-9]{1,5})?$
18668
+ type: string
18669
+ required:
18670
+ - origin
18671
+ type: object
18356
18672
  RecoveryCodeStatus:
18357
18673
  additionalProperties: false
18358
18674
  description: How many codes of the current recovery code set are still unused.
@@ -18748,7 +19064,7 @@ components:
18748
19064
  type: object
18749
19065
  SiteAttentionItem:
18750
19066
  additionalProperties: false
18751
- description: "Something that needs a person to act. The list is empty when nothing does. SCHEMA-3.3.0: `SCHEDULED_PUBLISH_FAILED` means a scheduled publish could not start at its time; `relatedPublishId` names the schedule and `reasonCode` the first precondition that failed (a client maps the values it knows to a sentence and shows a generic one otherwise); nothing was merged. `DOMAIN_PUBLISH_REQUIRED` means a custom domain is live and the next publish moves the site's address to it. `DOMAIN_DEGRADED` means a live custom domain stopped working; `reasonCode` names why and the domain read carries the next step. SCHEMA-3.9.0: on `REPOSITORY_NEEDS_UPDATE`, `reason` names the cause and `paths` the managed repository files involved, so a client can say what to do and list the files (both are absent from older servers and for other codes; show a generic sentence for a `reason` you do not know). `AUTHOR_EDITED`: a managed file differs from the version Galascribe manages and only the author may resolve it. `BRANCH_PROTECTION`: GitHub refused Galascribe's own repair commit. `REPOSITORY_ARCHIVED`: the repository is archived. `INSTALLATION_SUSPENDED`: the GitHub App installation is suspended. `WORKFLOWS_PERMISSION_MISSING`: the installation has not accepted the workflows permission. `AUTHORIZATION_LOST`: Galascribe lost its GitHub authorization. `FORBIDDEN`: GitHub refused for another permission reason. The same `reason` and `paths` ride on the `REPOSITORY_NEEDS_UPDATE` entry of a publish refusal's `errors`."
19067
+ description: "Something that needs a person to act. The list is empty when nothing does. SCHEMA-3.3.0: `SCHEDULED_PUBLISH_FAILED` means a scheduled publish could not start at its time; `relatedPublishId` names the schedule and `reasonCode` the first precondition that failed (a client maps the values it knows to a sentence and shows a generic one otherwise); nothing was merged. `DOMAIN_PUBLISH_REQUIRED` means a custom domain is live and the next publish moves the site's address to it. `DOMAIN_DEGRADED` means a live custom domain stopped working; `reasonCode` names why and the domain read carries the next step. SCHEMA-3.17.0 adds the domain `reasonCode` values `MOVE_FAILED` (the system move of the site's canonical base to or from the domain failed and will be retried), `MOVE_STUCK` (it failed three times and waits for the author to retry from the domain page), `MOVE_ABANDONED` (the move back to the github.io address on removal gave up) and `AUTHORITY_LAPSED` (the stored publish authority the move runs under could no longer be restated); the domain read's `baseMove` carries the same state. A client shows a generic sentence for a `reasonCode` it does not know. SCHEMA-3.9.0: on `REPOSITORY_NEEDS_UPDATE`, `reason` names the cause and `paths` the managed repository files involved, so a client can say what to do and list the files (both are absent from older servers and for other codes; show a generic sentence for a `reason` you do not know). `AUTHOR_EDITED`: a managed file differs from the version Galascribe manages and only the author may resolve it. `BRANCH_PROTECTION`: GitHub refused Galascribe's own repair commit. `REPOSITORY_ARCHIVED`: the repository is archived. `INSTALLATION_SUSPENDED`: the GitHub App installation is suspended. `WORKFLOWS_PERMISSION_MISSING`: the installation has not accepted the workflows permission. `AUTHORIZATION_LOST`: Galascribe lost its GitHub authorization. `FORBIDDEN`: GitHub refused for another permission reason. The same `reason` and `paths` ride on the `REPOSITORY_NEEDS_UPDATE` entry of a publish refusal's `errors`."
18752
19068
  properties:
18753
19069
  code:
18754
19070
  enum:
@@ -18788,6 +19104,7 @@ components:
18788
19104
  - FORBIDDEN
18789
19105
  type: string
18790
19106
  reasonCode:
19107
+ description: "A free string within the pattern. Known `DOMAIN_DEGRADED` values (SCHEMA-3.17.0): MOVE_FAILED, MOVE_STUCK, MOVE_ABANDONED, AUTHORITY_LAPSED; a client shows a generic sentence for any other."
18791
19108
  maxLength: 80
18792
19109
  minLength: 1
18793
19110
  pattern: ^[A-Z][A-Z0-9]*(?:_[A-Z0-9]+)*$
@@ -18935,7 +19252,14 @@ components:
18935
19252
  type: object
18936
19253
  SitePublishing:
18937
19254
  additionalProperties: false
19255
+ description: |
19256
+ The publish that is in flight. SCHEMA-3.17.0: `held` is present while
19257
+ that publish is `QUEUED` behind another operation that holds the site's
19258
+ destination (the same `OperationHeld` the operation read carries), so
19259
+ the Home screen can say who it is waiting for.
18938
19260
  properties:
19261
+ held:
19262
+ $ref: "#/components/schemas/OperationHeld"
18939
19263
  operationId:
18940
19264
  format: uuid
18941
19265
  pattern: ^[0-9a-f]{8}-[0-9a-f]{4}-7[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$
@@ -25780,6 +26104,15 @@ paths:
25780
26104
  x-gala-tenant-scope: ORGANIZATION_PATH
25781
26105
  /v2/organizations/{organizationId}/operations/{operationId}:cancel:
25782
26106
  post:
26107
+ description: |
26108
+ Cancels an operation that has produced no effect. From SCHEMA-3.17.0 an
26109
+ operation that is `executing` or `reconciling` may also be cancelled
26110
+ once its run has settled (a live run cannot be cancelled here), which
26111
+ closes the destination fence the operation holds in the same
26112
+ transaction, so a failed or lost deploy no longer leaves the site's
26113
+ destination held. The response is the operation after the cancel, with
26114
+ its `phase` and `reason` as they now stand. An admin API key with the
26115
+ `publish` scope may call it.
25783
26116
  operationId: postOrganizationsByOrganizationIdOperationsByOperationIdCancel
25784
26117
  parameters:
25785
26118
  - $ref: "#/components/parameters/XCorrelationId"
@@ -26071,12 +26404,14 @@ paths:
26071
26404
  - VALIDATION_FAILED
26072
26405
  security:
26073
26406
  - browserSession: []
26407
+ - adminApiKey: []
26074
26408
  summary: cancel only before the effect fence
26075
26409
  tags:
26076
26410
  - organizations
26077
26411
  x-gala-activation-gate: MVP
26078
26412
  x-gala-activation-guards:
26079
26413
  - NONE
26414
+ x-gala-api-key-scope: publish
26080
26415
  x-gala-capability-key: organization.publications.admin
26081
26416
  x-gala-capability-resolution: target-operation-current-capability-and-scope
26082
26417
  x-gala-concurrency: operation-version-and-no-effect-proof
@@ -26096,7 +26431,7 @@ paths:
26096
26431
  - VALIDATION_FAILED
26097
26432
  x-gala-replay-identity: idempotency-key
26098
26433
  x-gala-state-guards:
26099
- - PublicationOperation:ACCEPTED|EXECUTING -> CANCELLED_NO_EFFECT with proof no effect crossed
26434
+ - PublicationOperation:ACCEPTED|EXECUTING|RECONCILING -> CANCELLED_NO_EFFECT with proof no effect crossed
26100
26435
  x-gala-success-category: update
26101
26436
  x-gala-tenant-scope: ORGANIZATION_PATH
26102
26437
  /v2/organizations/{organizationId}/owner-transfers:
@@ -32710,6 +33045,21 @@ paths:
32710
33045
  merged head's `gala/publication.json` `canonicalBase` is not the address
32711
33046
  the site is served at (the active custom domain, else the github.io
32712
33047
  address); the problem `detail` names the expected value.
33048
+
33049
+ SCHEMA-3.17.0: that problem also carries the optional members
33050
+ `expectedBase` (the address the site is served at, an https URL),
33051
+ `profileBase` (the base the profile carries now, as written),
33052
+ `domainState` (the custom domain's state that decided the expected
33053
+ base, absent without a domain) and `remedy` (one sentence for the
33054
+ author), so a client names both addresses and renders the `remedy`
33055
+ without parsing `detail`. The server first includes the pending "Site
33056
+ address" change in the publish, or proposes one inside the request, and
33057
+ returns the problem only when it cannot. `409 INVALID_SOURCE_STATE`
33058
+ with `errors[].code DOMAIN_NOT_READY` is returned while
33059
+ a custom domain is part-way through its switch and no address can be
33060
+ verified (after the Pages CNAME is set and before the certificate
33061
+ serves); it resolves on its own, and the domain read's `nextStep` says
33062
+ what is being waited on.
32713
33063
  operationId: postOrganizationsByOrganizationIdPublicationsByPublicationIdChangesPublish
32714
33064
  parameters:
32715
33065
  - $ref: "#/components/parameters/XCorrelationId"
@@ -32897,7 +33247,11 @@ paths:
32897
33247
  code: CANONICAL_BASE_MISMATCH
32898
33248
  correlationId: 018f0000-0000-7000-8000-000000000001
32899
33249
  detail: See the operation contract.
33250
+ domainState: CERTIFICATE_PENDING
32900
33251
  errors: []
33252
+ expectedBase: https://blog.example.com/
33253
+ profileBase: https://example.github.io/blog/
33254
+ remedy: Change the site address to https://blog.example.com/ and publish again.
32901
33255
  retryable: false
32902
33256
  schemaId: urn:gala:schema:problem:2.0.0
32903
33257
  schemaVersion: 2.0.0
@@ -42166,7 +42520,7 @@ paths:
42166
42520
  x-gala-tenant-scope: ORGANIZATION_AND_PUBLICATION_PATH
42167
42521
  /v2/organizations/{organizationId}/publications/{publicationId}/policy-settings:
42168
42522
  get:
42169
- description: Reads the site's Terms and Privacy text at the linked repository's current main branch head, meaning the `policies` member of `gala/publication.json` and the two markdown files it names. `source` is `FILE` when the repository names its own pages, and `terms` and `privacy` then carry each page's title and markdown. `source` is `DEFAULT` when `policies` is absent, and the site then shows the default text of `@rathnasgala2/schemas/site-policy-defaults`, which the API does not carry, and `terms` and `privacy` are omitted. `setUp` matches `GET .../repository/setup`'s `state`; `openChange` names an existing not-yet-published change of this publication that touches `gala/publication.json` or a policy file, or is null.
42523
+ description: Reads the site's Terms and Privacy text at the linked repository's current main branch head, meaning the `policies` member of `gala/publication.json` and the two markdown files it names. `source` is `FILE` when the repository names its own pages, and `terms` and `privacy` then carry each page's title and markdown. `source` is `DEFAULT` when `policies` is absent, and the site then shows the default text of `@rathnasgala2/schemas/site-policy-defaults`, which the API does not carry, and `terms` and `privacy` are omitted. `setUp` matches `GET .../repository/setup`'s `state`; `openChange` names an existing not-yet-published change of this publication that touches `gala/publication.json` or a policy file, or is null. SCHEMA-3.17.0 adds `422 VALIDATION_FAILED`, answered when `gala/publication.json` names a policy file that does not exist at the head; the repository is then inconsistent and no page text can be read, so the author fixes the repository (or writes both pages again with `PUT`) before the read answers.
42170
42524
  operationId: getOrganizationsByOrganizationIdPublicationsByPublicationIdPolicySettings
42171
42525
  parameters:
42172
42526
  - $ref: "#/components/parameters/XCorrelationId"
@@ -42288,6 +42642,33 @@ paths:
42288
42642
  $ref: "#/components/headers/XCorrelationId"
42289
42643
  x-gala-problem-codes:
42290
42644
  - RESOURCE_NOT_FOUND
42645
+ "422":
42646
+ content:
42647
+ application/problem+json:
42648
+ examples:
42649
+ VALIDATION_FAILED:
42650
+ summary: VALIDATION_FAILED
42651
+ value:
42652
+ code: VALIDATION_FAILED
42653
+ correlationId: 018f0000-0000-7000-8000-000000000001
42654
+ detail: See the operation contract.
42655
+ errors: []
42656
+ retryable: false
42657
+ schemaId: urn:gala:schema:problem:2.0.0
42658
+ schemaVersion: 2.0.0
42659
+ status: 422
42660
+ title: VALIDATION_FAILED
42661
+ type: urn:gala:problem:validation-failed
42662
+ schema:
42663
+ $ref: "#/components/schemas/Problem"
42664
+ description: VALIDATION_FAILED
42665
+ headers:
42666
+ Cache-Control:
42667
+ $ref: "#/components/headers/CacheControlNoStore"
42668
+ X-Correlation-Id:
42669
+ $ref: "#/components/headers/XCorrelationId"
42670
+ x-gala-problem-codes:
42671
+ - VALIDATION_FAILED
42291
42672
  "429":
42292
42673
  content:
42293
42674
  application/problem+json:
@@ -44255,6 +44636,20 @@ paths:
44255
44636
  after it was written. The App's remedy for the second cause is
44256
44637
  `POST .../repository-changes/{changeId}:bring-up-to-date` followed
44257
44638
  by review and publish again (journey state U2).
44639
+
44640
+ SCHEMA-3.17.0 adds a third cause: `errors[].code DOMAIN_NOT_READY`,
44641
+ returned while the site's custom domain is part-way
44642
+ through its switch and no address can be verified (after the Pages
44643
+ CNAME is set and before the certificate serves). It is short and
44644
+ resolves on its own, so the author waits; the domain read's `nextStep`
44645
+ says `WAIT_FOR_MOVE` or `WAIT_FOR_CERTIFICATE`.
44646
+
44647
+ `409 CANONICAL_BASE_MISMATCH` carries the optional problem members
44648
+ `expectedBase`, `profileBase`, `domainState` and `remedy`
44649
+ (SCHEMA-3.17.0), so a client can name the two addresses and render the
44650
+ `remedy` without parsing `detail`. The server first tries to fix the
44651
+ mismatch itself by including the pending "Site address" change in the
44652
+ publish; the problem is returned only when it cannot.
44258
44653
  operationId: postOrganizationsByOrganizationIdPublicationsByPublicationIdPublishes
44259
44654
  parameters:
44260
44655
  - $ref: "#/components/parameters/XCorrelationId"
@@ -44442,7 +44837,11 @@ paths:
44442
44837
  code: CANONICAL_BASE_MISMATCH
44443
44838
  correlationId: 018f0000-0000-7000-8000-000000000001
44444
44839
  detail: See the operation contract.
44840
+ domainState: CERTIFICATE_PENDING
44445
44841
  errors: []
44842
+ expectedBase: https://blog.example.com/
44843
+ profileBase: https://example.github.io/blog/
44844
+ remedy: Change the site address to https://blog.example.com/ and publish again.
44446
44845
  retryable: false
44447
44846
  schemaId: urn:gala:schema:problem:2.0.0
44448
44847
  schemaVersion: 2.0.0