@rathnasgala2/schemas 2.14.0 → 2.15.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.
package/README.md CHANGED
@@ -91,6 +91,30 @@ calls `postMembershipInvitationsByTokenAccept`; its non-enumerating failure
91
91
  states collapse onto that operation's single declared `INVALID_SOURCE_STATE`
92
92
  problem, which covers an expired, already-used or unknown token alike.
93
93
 
94
+ SCHEMA-2.15.0 closes a Content-list gap SCHEMA-2.14.0 left: with `kind` the only
95
+ fact the inventory carried about a flat file, a row could not show title, kind,
96
+ status or last-changed, and a client could not check web-address uniqueness,
97
+ without one round trip per row. `ContentInventoryItem` gains two optional
98
+ members, exactly one of which the server returns on every item from this version
99
+ on: `summary` (`ContentInventoryItemSummary` --
100
+ `contentId`/`title`/`slug`/`status`/`language`/`createdAt` required,
101
+ `updatedAt`/`publishedAt` optional; `status` is the new closed
102
+ `ContentItemStatus`, `DRAFT`/`PUBLISHED`/`UNLISTED`/`ARCHIVED`) when the header
103
+ block the server now reads for every listed path parses, or `unreadable`
104
+ (`ContentInventoryItemUnreadable`, `{reason}`, the new closed
105
+ `ContentItemUnreadableReason`: `HEADER_MISSING`/`HEADER_UNPARSABLE`/
106
+ `HEADER_INVALID`/`TOO_LARGE`) when it does not. `kind` itself now comes from the
107
+ header when `summary` is present, from the content root as before when it is
108
+ not. This is stated in the operation description rather than schema- enforced,
109
+ because a `oneOf` requiring one of the two would make a pre-2.15.0 item -- one
110
+ with neither field, valid until now -- invalid; member types reuse
111
+ `content-frontmatter.schema.json`'s `$defs`, matching how
112
+ `ContentFrontmatter`/`ContentPublicationSummary` already do. `GET .../content`
113
+ also gains its own `limit` bound (`ContentLimit`): default 50 in place of the
114
+ shared default of 25, the existing 100 maximum kept unchanged since lowering a
115
+ maximum is never additive; the server may return fewer items than `limit` even
116
+ when more are available.
117
+
94
118
  SCHEMA-2.14.0 (design `scrap/20260928_write-preview-publish.md` section 3) is
95
119
  additive, closing the write/preview/publish content journey. Nine operations
96
120
  join the contract under
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "schemaVersion": 1,
3
- "package": "@rathnasgala2/schemas@2.14.0",
3
+ "package": "@rathnasgala2/schemas@2.15.0",
4
4
  "source": "package-lock.json",
5
5
  "dependencies": [
6
6
  {
@@ -209,9 +209,9 @@
209
209
  "version": "2.0.0",
210
210
  "path": "openapi/openapi.yaml",
211
211
  "materialized": true,
212
- "sourceDigest": "sha256:e8c2073c001219a158d458455a8f238c96ce3b7fdb1eb76bcc04388bcf3cc20d",
212
+ "sourceDigest": "sha256:ca5cf80a6fc7b91e4a029d9962efc0da84b31a267b0e1a7bbaaba731d426dffc",
213
213
  "typescriptRootType": null
214
214
  }
215
215
  ],
216
- "digest": "sha256:90e1849ad012f5c649992cde222da04be4e46fcb04fd3de337f4abf866dffed7"
216
+ "digest": "sha256:fe8e29466fbeaafd38b28e6d09f94a4f9e05045aaa4af954431d5b493a13ba14"
217
217
  }
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "schemaVersion": "2.0.0",
3
3
  "sourceDesignRevision": "a53052955ceb6c1aa10c886289dc832eedfe6de0a00004df07d353ac19c4403a",
4
- "openApiDigest": "sha256:e8c2073c001219a158d458455a8f238c96ce3b7fdb1eb76bcc04388bcf3cc20d",
4
+ "openApiDigest": "sha256:ca5cf80a6fc7b91e4a029d9962efc0da84b31a267b0e1a7bbaaba731d426dffc",
5
5
  "operations": [
6
6
  {
7
7
  "operationId": "getInternalHealth",
@@ -1049,5 +1049,5 @@
1049
1049
  "sourceFragment": "workloads"
1050
1050
  }
1051
1051
  ],
1052
- "digest": "sha256:abcc06359b67cd9c829bb98687ae3b691fe98b2ba2ea1b23272f5a861c21e41c"
1052
+ "digest": "sha256:f4c2d4b69632958faefc39a1a229877a70a60b86a22b9e891bbecb1924878c68"
1053
1053
  }
@@ -46,6 +46,20 @@ components:
46
46
  pattern: ^(?:sha1:[0-9a-f]{40}|sha256:[0-9a-f]{64})$
47
47
  type: string
48
48
  parameters:
49
+ ContentLimit:
50
+ description: |
51
+ Same bound as the shared `Limit` parameter, with a higher default
52
+ appropriate to a content list row: the server may return fewer items
53
+ than `limit` even when more are available.
54
+ example: 1
55
+ in: query
56
+ name: limit
57
+ required: false
58
+ schema:
59
+ default: 50
60
+ maximum: 100
61
+ minimum: 1
62
+ type: integer
49
63
  Cursor:
50
64
  example: example
51
65
  in: query
@@ -369,6 +383,12 @@ components:
369
383
  $ref: "#/components/schemas/PortableContentFrontmatterDocument"
370
384
  ContentInventoryItem:
371
385
  additionalProperties: false
386
+ description: |
387
+ Exactly one of `summary` or `unreadable` is present on every item the
388
+ server returns from schema 2.15.0 on; a strict validator does not
389
+ enforce this (it would make an older item with neither field, valid
390
+ before 2.15.0, invalid), so a reader checks for both being absent
391
+ defensively.
372
392
  properties:
373
393
  blobId:
374
394
  pattern: ^(?:sha1:[0-9a-f]{40}|sha256:[0-9a-f]{64})$
@@ -384,18 +404,86 @@ components:
384
404
  format: int64
385
405
  minimum: 0
386
406
  type: integer
407
+ summary:
408
+ $ref: "#/components/schemas/ContentInventoryItemSummary"
409
+ unreadable:
410
+ $ref: "#/components/schemas/ContentInventoryItemUnreadable"
387
411
  required:
388
412
  - path
389
413
  - kind
390
414
  - blobId
391
415
  - size
392
416
  type: object
417
+ ContentInventoryItemSummary:
418
+ additionalProperties: false
419
+ description: |
420
+ The header block's own facts about this item, read at inventory time.
421
+ `contentId` is the header's `id`; `status` is the header's `status`
422
+ upper-cased to this contract's enum style.
423
+ properties:
424
+ contentId:
425
+ $ref: "#/components/schemas/PortableContentFrontmatterStableId"
426
+ createdAt:
427
+ $ref: "#/components/schemas/PortableContentFrontmatterRfc3339"
428
+ language:
429
+ $ref: "#/components/schemas/PortableContentFrontmatterBcp47"
430
+ publishedAt:
431
+ $ref: "#/components/schemas/PortableContentFrontmatterRfc3339"
432
+ slug:
433
+ $ref: "#/components/schemas/PortableContentFrontmatterSlug"
434
+ status:
435
+ $ref: "#/components/schemas/ContentItemStatus"
436
+ title:
437
+ $ref: "#/components/schemas/PortableContentFrontmatterPlainText"
438
+ x-gala-graphemeLength:
439
+ maximum: 200
440
+ minimum: 1
441
+ updatedAt:
442
+ $ref: "#/components/schemas/PortableContentFrontmatterRfc3339"
443
+ required:
444
+ - contentId
445
+ - title
446
+ - slug
447
+ - status
448
+ - language
449
+ - createdAt
450
+ type: object
451
+ ContentInventoryItemUnreadable:
452
+ additionalProperties: false
453
+ properties:
454
+ reason:
455
+ $ref: "#/components/schemas/ContentItemUnreadableReason"
456
+ required:
457
+ - reason
458
+ type: object
393
459
  ContentItemKind:
394
- description: Which declared content root a document lives under -- ARTICLE for `content/articles/`, PAGE for `content/pages/` -- derived from the path, never from parsing the file.
460
+ description: Which content root a document lives under -- ARTICLE for `content/articles/`, PAGE for `content/pages/`. Since schema 2.15.0 this comes from the header's own `kind` when the inventory item's `summary` is present; before that, and whenever `unreadable` is present instead, it is derived from the path alone.
395
461
  enum:
396
462
  - ARTICLE
397
463
  - PAGE
398
464
  type: string
465
+ ContentItemStatus:
466
+ description: The header's `status`, upper-cased to this contract's enum style.
467
+ enum:
468
+ - DRAFT
469
+ - PUBLISHED
470
+ - UNLISTED
471
+ - ARCHIVED
472
+ type: string
473
+ ContentItemUnreadableReason:
474
+ description: |
475
+ Why an inventory item's header could not be read. `HEADER_MISSING`:
476
+ the file has no header block at all. `HEADER_UNPARSABLE`: the header
477
+ block does not parse. `HEADER_INVALID`: it parses but does not
478
+ validate against `content-frontmatter.schema.json`. `TOO_LARGE`: the
479
+ file exceeds the document read's 1 MiB bound, so the header was never
480
+ read.
481
+ enum:
482
+ - HEADER_MISSING
483
+ - HEADER_UNPARSABLE
484
+ - HEADER_INVALID
485
+ - TOO_LARGE
486
+ type: string
399
487
  ContentPublicationAuthorSummary:
400
488
  additionalProperties: false
401
489
  properties:
@@ -19901,12 +19989,22 @@ paths:
19901
19989
  get:
19902
19990
  description: |
19903
19991
  One git-trees read per declared content root at the linked repository's
19904
- current main branch head, bounded at 2,000 entries with no file bodies
19905
- read. `kind` is derived from which declared content root a path is
19906
- under (ARTICLE for `content/articles/`, PAGE for `content/pages/`), not
19907
- from parsing the file. `setUp` reports whether `gala/repository.json`
19908
- is present on main, matching `GET .../repository/setup`'s `state`.
19909
- `publication` is read from the settings files
19992
+ current main branch head, bounded at 2,000 entries. For each listed
19993
+ path the server additionally reads that file's header block (bounded,
19994
+ from the person's repository, nothing stored) to fill `summary`.
19995
+ Exactly one of `summary` or `unreadable` is present on every item this
19996
+ operation returns from schema 2.15.0 on: `summary` when the header
19997
+ parses, `unreadable` (with a closed `reason`) when it does not or the
19998
+ file exceeds the read bound. `kind` comes from the header's own
19999
+ `kind` when `summary` is present, and from which declared content
20000
+ root the path is under (ARTICLE for `content/articles/`, PAGE for
20001
+ `content/pages/`) when it is not. `limit` defaults to 50 here (the
20002
+ shared default is 25) because a content list row needs more per
20003
+ round trip than most lists; the server may return fewer items than
20004
+ `limit` even when more are available. `setUp` reports whether
20005
+ `gala/repository.json` is present on main, matching
20006
+ `GET .../repository/setup`'s `state`. `publication` is read from the
20007
+ settings files
19910
20008
  (`gala/repository.json`, `gala/appearance.json`, `gala/authors/`) at
19911
20009
  this same main-branch head, and is returned on every page of the
19912
20010
  inventory, not only the first, so the editor has these facts
@@ -19932,7 +20030,7 @@ paths:
19932
20030
  pattern: ^[0-9a-f]{8}-[0-9a-f]{4}-7[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$
19933
20031
  type: string
19934
20032
  - $ref: "#/components/parameters/Cursor"
19935
- - $ref: "#/components/parameters/Limit"
20033
+ - $ref: "#/components/parameters/ContentLimit"
19936
20034
  responses:
19937
20035
  "200":
19938
20036
  content:
@@ -19944,7 +20042,24 @@ paths:
19944
20042
  defaultBranch: main
19945
20043
  hasMore: false
19946
20044
  head: sha1:0000000000000000000000000000000000000000
19947
- items: []
20045
+ items:
20046
+ - blobId: sha1:0000000000000000000000000000000000000000
20047
+ kind: ARTICLE
20048
+ path: content/articles/example.md
20049
+ size: 128
20050
+ summary:
20051
+ contentId: 018f0000-0000-7000-8000-000000000001
20052
+ createdAt: "2026-09-28T00:00:00.000Z"
20053
+ language: en
20054
+ slug: example
20055
+ status: DRAFT
20056
+ title: Example
20057
+ - blobId: sha1:0000000000000000000000000000000000000000
20058
+ kind: ARTICLE
20059
+ path: content/articles/unreadable.md
20060
+ size: 2097152
20061
+ unreadable:
20062
+ reason: TOO_LARGE
19948
20063
  publication:
19949
20064
  authors:
19950
20065
  - displayName: Example Author
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@rathnasgala2/schemas",
3
- "version": "2.14.0",
3
+ "version": "2.15.0",
4
4
  "description": "Executable JSON Schema and OpenAPI contracts for Galascribe",
5
5
  "type": "module",
6
6
  "license": "Apache-2.0",
package/sbom.cdx.json CHANGED
@@ -97,8 +97,8 @@
97
97
  "type": "library",
98
98
  "name": "schemas",
99
99
  "group": "@rathnasgala2",
100
- "version": "2.14.0",
101
- "bom-ref": "@rathnasgala2/schemas@2.14.0",
100
+ "version": "2.15.0",
101
+ "bom-ref": "@rathnasgala2/schemas@2.15.0",
102
102
  "description": "Executable JSON Schema and OpenAPI contracts for Galascribe",
103
103
  "licenses": [
104
104
  {
@@ -108,7 +108,7 @@
108
108
  }
109
109
  }
110
110
  ],
111
- "purl": "pkg:npm/%40rathnasgala2/schemas@2.14.0?vcs_url=git%2Bhttps%3A%2F%2Fgithub.com%2Frathnasgala2%2Fschema.git",
111
+ "purl": "pkg:npm/%40rathnasgala2/schemas@2.15.0?vcs_url=git%2Bhttps%3A%2F%2Fgithub.com%2Frathnasgala2%2Fschema.git",
112
112
  "externalReferences": [
113
113
  {
114
114
  "url": "https://github.com/rathnasgala2/schema/issues",
@@ -153,7 +153,7 @@
153
153
  "type": "library",
154
154
  "name": "ajv-formats",
155
155
  "version": "3.0.1",
156
- "bom-ref": "@rathnasgala2/schemas@2.14.0|ajv-formats@3.0.1",
156
+ "bom-ref": "@rathnasgala2/schemas@2.15.0|ajv-formats@3.0.1",
157
157
  "licenses": [
158
158
  {
159
159
  "license": {
@@ -187,7 +187,7 @@
187
187
  "type": "library",
188
188
  "name": "ajv",
189
189
  "version": "8.20.0",
190
- "bom-ref": "@rathnasgala2/schemas@2.14.0|ajv@8.20.0",
190
+ "bom-ref": "@rathnasgala2/schemas@2.15.0|ajv@8.20.0",
191
191
  "licenses": [
192
192
  {
193
193
  "license": {
@@ -221,7 +221,7 @@
221
221
  "type": "library",
222
222
  "name": "fast-deep-equal",
223
223
  "version": "3.1.3",
224
- "bom-ref": "@rathnasgala2/schemas@2.14.0|fast-deep-equal@3.1.3",
224
+ "bom-ref": "@rathnasgala2/schemas@2.15.0|fast-deep-equal@3.1.3",
225
225
  "licenses": [
226
226
  {
227
227
  "license": {
@@ -255,7 +255,7 @@
255
255
  "type": "library",
256
256
  "name": "fast-uri",
257
257
  "version": "3.1.7",
258
- "bom-ref": "@rathnasgala2/schemas@2.14.0|fast-uri@3.1.7",
258
+ "bom-ref": "@rathnasgala2/schemas@2.15.0|fast-uri@3.1.7",
259
259
  "licenses": [
260
260
  {
261
261
  "license": {
@@ -289,7 +289,7 @@
289
289
  "type": "library",
290
290
  "name": "json-schema-traverse",
291
291
  "version": "1.0.0",
292
- "bom-ref": "@rathnasgala2/schemas@2.14.0|json-schema-traverse@1.0.0",
292
+ "bom-ref": "@rathnasgala2/schemas@2.15.0|json-schema-traverse@1.0.0",
293
293
  "licenses": [
294
294
  {
295
295
  "license": {
@@ -323,7 +323,7 @@
323
323
  "type": "library",
324
324
  "name": "require-from-string",
325
325
  "version": "2.0.2",
326
- "bom-ref": "@rathnasgala2/schemas@2.14.0|require-from-string@2.0.2",
326
+ "bom-ref": "@rathnasgala2/schemas@2.15.0|require-from-string@2.0.2",
327
327
  "licenses": [
328
328
  {
329
329
  "license": {
@@ -1064,10 +1064,10 @@
1064
1064
  ],
1065
1065
  "dependencies": [
1066
1066
  {
1067
- "ref": "@rathnasgala2/schemas@2.14.0",
1067
+ "ref": "@rathnasgala2/schemas@2.15.0",
1068
1068
  "dependsOn": [
1069
- "@rathnasgala2/schemas@2.14.0|ajv-formats@3.0.1",
1070
- "@rathnasgala2/schemas@2.14.0|ajv@8.20.0",
1069
+ "@rathnasgala2/schemas@2.15.0|ajv-formats@3.0.1",
1070
+ "@rathnasgala2/schemas@2.15.0|ajv@8.20.0",
1071
1071
  "pkg:npm/semver@7.8.5",
1072
1072
  "urn:gala:source-data:iana-ipv4-special-registry",
1073
1073
  "urn:gala:source-data:iana-ipv6-special-registry",
@@ -1089,31 +1089,31 @@
1089
1089
  ]
1090
1090
  },
1091
1091
  {
1092
- "ref": "@rathnasgala2/schemas@2.14.0|ajv-formats@3.0.1",
1092
+ "ref": "@rathnasgala2/schemas@2.15.0|ajv-formats@3.0.1",
1093
1093
  "dependsOn": [
1094
- "@rathnasgala2/schemas@2.14.0|ajv@8.20.0"
1094
+ "@rathnasgala2/schemas@2.15.0|ajv@8.20.0"
1095
1095
  ]
1096
1096
  },
1097
1097
  {
1098
- "ref": "@rathnasgala2/schemas@2.14.0|ajv@8.20.0",
1098
+ "ref": "@rathnasgala2/schemas@2.15.0|ajv@8.20.0",
1099
1099
  "dependsOn": [
1100
- "@rathnasgala2/schemas@2.14.0|fast-deep-equal@3.1.3",
1101
- "@rathnasgala2/schemas@2.14.0|fast-uri@3.1.7",
1102
- "@rathnasgala2/schemas@2.14.0|json-schema-traverse@1.0.0",
1103
- "@rathnasgala2/schemas@2.14.0|require-from-string@2.0.2"
1100
+ "@rathnasgala2/schemas@2.15.0|fast-deep-equal@3.1.3",
1101
+ "@rathnasgala2/schemas@2.15.0|fast-uri@3.1.7",
1102
+ "@rathnasgala2/schemas@2.15.0|json-schema-traverse@1.0.0",
1103
+ "@rathnasgala2/schemas@2.15.0|require-from-string@2.0.2"
1104
1104
  ]
1105
1105
  },
1106
1106
  {
1107
- "ref": "@rathnasgala2/schemas@2.14.0|fast-deep-equal@3.1.3"
1107
+ "ref": "@rathnasgala2/schemas@2.15.0|fast-deep-equal@3.1.3"
1108
1108
  },
1109
1109
  {
1110
- "ref": "@rathnasgala2/schemas@2.14.0|fast-uri@3.1.7"
1110
+ "ref": "@rathnasgala2/schemas@2.15.0|fast-uri@3.1.7"
1111
1111
  },
1112
1112
  {
1113
- "ref": "@rathnasgala2/schemas@2.14.0|json-schema-traverse@1.0.0"
1113
+ "ref": "@rathnasgala2/schemas@2.15.0|json-schema-traverse@1.0.0"
1114
1114
  },
1115
1115
  {
1116
- "ref": "@rathnasgala2/schemas@2.14.0|require-from-string@2.0.2"
1116
+ "ref": "@rathnasgala2/schemas@2.15.0|require-from-string@2.0.2"
1117
1117
  },
1118
1118
  {
1119
1119
  "ref": "pkg:npm/semver@7.8.5"