Skip to content

Commit 0e70e85

Browse files
committed
chore: reconcile picklist collections in the stack-collection maps gate, quick-reference counts
Claude-Session: https://claude.ai/code/session_01Sfe5YjBLwB9J3y8fvm2xq1 Co-authored-by: Claude <noreply@anthropic.com>
1 parent 7b1807b commit 0e70e85

3 files changed

Lines changed: 41 additions & 16 deletions

File tree

‎content/docs/getting-started/quick-reference.mdx‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ Categories that have no section here at all are named under
2222
[Categories Without a Section](#categories-without-a-section) — that curation is stated,
2323
not left implicit.
2424

25-
## Data Protocol (16 of 29 schemas)
25+
## Data Protocol (16 of 30 schemas)
2626

2727
Core business logic and data modeling schemas.
2828

‎examples/app-showcase/src/coverage.ts‎

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -206,6 +206,12 @@ export const STACK_COLLECTION_COVERAGE: Record<string, KindCoverage> = {
206206
files: ['src/data/extensions/account.extension.ts'],
207207
notes: 'Merged into showcase_account by the ObjectQL engine at registerApp (priority overlay).',
208208
},
209+
picklistExtensions: {
210+
status: 'waived',
211+
reason:
212+
'Declared with the picklist kind, ahead of the runtime merge that adds an extension\'s options to the list it extends; demonstrated alongside `KIND_COVERAGE.picklist` when that layer lands.',
213+
issue: 'https://github.com/objectstack-ai/objectstack/issues/19519',
214+
},
209215
// `apis` is NOT listed here any more: as of #5271 it is a registry kind, so
210216
// its coverage lives in `KIND_COVERAGE.api` above. Leaving a duplicate row in
211217
// this manifest — whose contract is "stack collections that are NOT registry

‎scripts/check-stack-collection-maps.mjs‎

Lines changed: 34 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -486,19 +486,19 @@ const SITES = [
486486
waivers: [
487487
{
488488
direction: 'missing',
489-
keys: ['views', 'objectExtensions', 'data', 'translations'],
489+
keys: ['views', 'objectExtensions', 'picklistExtensions', 'data', 'translations'],
490490
reason:
491-
'the four SHAPE exclusions the declaration already documents, pinned here so the prose is checked: '
492-
+ 'ViewSchema has no `name` (its identity is the target object), ObjectExtensionSchema keys by '
491+
'the five SHAPE exclusions, pinned here so the prose is checked: ViewSchema has no `name` (its '
492+
+ 'identity is the target object), ObjectExtensionSchema and PicklistExtensionSchema key by '
493493
+ '`extend`, SeedSchema keys by `object`, and TranslationBundleSchema is itself a record.',
494494
},
495495
{
496496
direction: 'missing',
497-
keys: ['datasourceMapping', 'capabilities', 'docs', 'books', 'tools', 'skills'],
497+
keys: ['datasourceMapping', 'capabilities', 'docs', 'books', 'tools', 'skills', 'picklists'],
498498
reason:
499499
'no map form has ever been offered for these. `datasourceMapping` is a rule LIST whose precedence is '
500-
+ 'positional, so a map would lose the ordering that decides which rule wins; the other five are '
501-
+ 'array-only authoring surfaces. Offering a map form for any of them WIDENS what parses — an '
500+
+ 'positional, so a map would lose the ordering that decides which rule wins; the other six are '
501+
+ 'array-only authoring surfaces (`picklists` since it was declared). Offering a map form for any of them WIDENS what parses — an '
502502
+ 'acceptance change, which belongs to its own reviewed diff rather than to this gate.',
503503
},
504504
],
@@ -525,13 +525,13 @@ const SITES = [
525525
},
526526
{
527527
direction: 'missing',
528-
keys: ['datasourceMapping', 'translations', 'objectExtensions', 'data'],
528+
keys: ['datasourceMapping', 'translations', 'objectExtensions', 'picklistExtensions', 'data'],
529529
reason:
530-
'there is no singular metadata-type name to map to. `objectExtensions` merges into its target '
531-
+ 'object rather than registering as a type, `datasourceMapping` is stack-level routing '
532-
+ 'configuration, `translations` is a bundle record consumed by the i18n resolvers, and `data` '
533-
+ 'seeds are applied by SeedLoaderService. `pluralToSingular` returns its input unchanged for all '
534-
+ 'four, which is the correct answer rather than a gap.',
530+
'there is no singular metadata-type name to map to. `objectExtensions` and `picklistExtensions` '
531+
+ 'merge into their target rather than registering as a type, `datasourceMapping` is stack-level '
532+
+ 'routing configuration, `translations` is a bundle record consumed by the i18n resolvers, and '
533+
+ '`data` seeds are applied by SeedLoaderService. `pluralToSingular` returns its input unchanged '
534+
+ 'for all five, which is the correct answer rather than a gap.',
535535
},
536536
],
537537
},
@@ -559,13 +559,13 @@ const SITES = [
559559
keys: [
560560
'datasources', 'datasourceMapping', 'objectExtensions', 'apps', 'jobs', 'emailTemplates',
561561
'docs', 'books', 'positions', 'capabilities', 'sharingRules', 'webhooks', 'tools', 'skills',
562-
'hooks', 'mappings', 'analyticsCubes', 'connectors', 'data',
562+
'hooks', 'mappings', 'analyticsCubes', 'connectors', 'data', 'picklists', 'picklistExtensions',
563563
],
564564
reason:
565565
'DRIFT in the opposite direction, under the same acceptance constraint: ADDING a member widens '
566566
+ 'what an artifact may declare and presumes a packaging layout (one subdirectory per category) '
567567
+ 'that does not exist for these. The omissions are inert today because this enum is not the '
568-
+ 'artifact ingest path — `ARTIFACT_FIELD_TO_TYPE` below is — but 19 of 32 collections absent is '
568+
+ 'artifact ingest path — `ARTIFACT_FIELD_TO_TYPE` below is — but 21 of 33 collections absent is '
569569
+ 'the measurement that says so out loud (#6242 row 5).',
570570
},
571571
],
@@ -619,6 +619,15 @@ const SITES = [
619619
'ADR-0090 D3 positions reach the registry through the security bootstrap, which reads them off the '
620620
+ 'stack directly; the loop\'s sibling `permissions` entry is what makes the absence look like a gap.',
621621
},
622+
{
623+
direction: 'missing',
624+
keys: ['picklists', 'picklistExtensions'],
625+
reason:
626+
'PENDING the picklist runtime layer (#19519): the spec declares `picklists` and '
627+
+ '`picklistExtensions` ahead of their reader, by ruling (the spec layer lands first). Registering '
628+
+ 'them — and merging the extensions into their target list — is that layer\'s work, so this row '
629+
+ 'goes STALE, and fails, the day it lands. The liveness ledger grades the same keys `planned`.',
630+
},
622631
],
623632
},
624633
{
@@ -676,6 +685,15 @@ const SITES = [
676685
keys: ['datasourceMapping'],
677686
reason: 'stack-level routing configuration, never a registry item.',
678687
},
688+
{
689+
direction: 'missing',
690+
keys: ['picklists', 'picklistExtensions'],
691+
reason:
692+
'PENDING the picklist runtime layer (#19519): the spec declares `picklists` and '
693+
+ '`picklistExtensions` ahead of their reader, by ruling (the spec layer lands first). Registering '
694+
+ 'them — and merging the extensions into their target list — is that layer\'s work, so this row '
695+
+ 'goes STALE, and fails, the day it lands. The liveness ledger grades the same keys `planned`.',
696+
},
679697
],
680698
},
681699
{
@@ -700,6 +718,7 @@ const SITES = [
700718
keys: [
701719
'objectExtensions', 'datasourceMapping', 'datasources', 'jobs', 'apis', 'webhooks',
702720
'hooks', 'mappings', 'analyticsCubes', 'connectors', 'capabilities', 'datasets',
721+
'picklists', 'picklistExtensions',
703722
],
704723
reason:
705724
'DELIBERATE, and load-bearing. This is a HEURISTIC, not a registration list: it answers "did the '
@@ -737,7 +756,7 @@ const SITES = [
737756
'datasources', 'datasourceMapping', 'translations', 'objects', 'objectExtensions', 'apps',
738757
'views', 'pages', 'dashboards', 'reports', 'datasets', 'actions', 'flows', 'jobs',
739758
'emailTemplates', 'docs', 'books', 'apis', 'webhooks', 'agents', 'tools', 'skills',
740-
'hooks', 'mappings', 'analyticsCubes', 'connectors', 'data',
759+
'hooks', 'mappings', 'analyticsCubes', 'connectors', 'data', 'picklists', 'picklistExtensions',
741760
],
742761
reason:
743762
'DELIBERATE — a four-collection SUBSET, not an enumeration of the collection set. This block '

0 commit comments

Comments
 (0)