Commit 4f221a6
fix: cross-port deferred-followups — filterable drift, payload subType, attr-name dots
Closes the substantive items deferred from the prior pre-merge gate (see
merge 738e07f's body). Three new conformance fixtures lock the behavior so
the drift can't silently come back.
Fixtures:
- loader-filterable-on-db-indexed-no-warning — @filterable + @db.indexed
on a field exempts the no-index warning (parity with TS validation-passes
+ Python _validate_filterable_has_index).
- warning-filterable-inherited-without-index — abstract base declares
@filterable email with no covering identity; concrete child inherits the
field; warning fires on both (parity with TS effective-iteration).
- error-template-payload-ref-not-value — template.prompt @payloadRef
targeting object.entity (not object.value) emits ERR_INVALID_TEMPLATE
(parity with FR-004 R2; Java + Python already correct, TS + C# now match).
Java fix — warnFilterableWithoutIndex was own-only and ignored @db.indexed:
- ValidationPhase.checkFilterableFields now iterates effective fields and
effective identities (`getChildren(..., true)`), matching TS reference
(validation-passes.ts:140). Without this, a concrete entity inheriting
a @filterable field via BaseEntity is silently skipped.
- Adds ATTR_DB_INDEXED constant + the explicit @db.indexed exemption check
(validation-passes.ts:155).
Java fix — validateName rejected dotted attr names:
- MetaData.validateName now permits dotted attr names (e.g., @db.indexed,
@db.column) and FQN-qualified attr names (@pkg::name::attr) when the
type is "attr". TS + Python already accept these; Java's stricter
pattern was a real cross-port drift that surfaced when the @db.indexed
fixture was added. Other types (object/field/etc.) keep their strict
identifier pattern unchanged.
TS + C# fix — template @payloadRef required tightening to object.value:
- validation-passes.ts + ValidationPasses.cs now require c.subType ===
OBJECT_SUBTYPE_VALUE in the payload lookup. Error message updated to
"does not resolve to an object.value at root" matching Python's wording.
FR-004 R2 is unambiguous (payload must be object.value); Java + Python
already enforced this.
Verification:
- Java metadata module: 647/647 green
- TS metadata package: 1219/1219 green
- Python conformance: 88/88 green
- C# all 4 projects: 535/535 green
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>1 parent 738e07f commit 4f221a6
11 files changed
Lines changed: 198 additions & 7 deletions
File tree
- fixtures/conformance
- error-template-payload-ref-not-value
- input
- loader-filterable-on-db-indexed-no-warning
- input
- warning-filterable-inherited-without-index
- input
- server
- csharp/MetaObjects/Loader
- java/metadata/src/main/java/com/metaobjects
- loader
- typescript/packages/metadata/src/loader
Lines changed: 3 additions & 0 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
| 1 | + | |
| 2 | + | |
| 3 | + | |
Lines changed: 24 additions & 0 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
| 1 | + | |
| 2 | + | |
| 3 | + | |
| 4 | + | |
| 5 | + | |
| 6 | + | |
| 7 | + | |
| 8 | + | |
| 9 | + | |
| 10 | + | |
| 11 | + | |
| 12 | + | |
| 13 | + | |
| 14 | + | |
| 15 | + | |
| 16 | + | |
| 17 | + | |
| 18 | + | |
| 19 | + | |
| 20 | + | |
| 21 | + | |
| 22 | + | |
| 23 | + | |
| 24 | + | |
Lines changed: 33 additions & 0 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
| 1 | + | |
| 2 | + | |
| 3 | + | |
| 4 | + | |
| 5 | + | |
| 6 | + | |
| 7 | + | |
| 8 | + | |
| 9 | + | |
| 10 | + | |
| 11 | + | |
| 12 | + | |
| 13 | + | |
| 14 | + | |
| 15 | + | |
| 16 | + | |
| 17 | + | |
| 18 | + | |
| 19 | + | |
| 20 | + | |
| 21 | + | |
| 22 | + | |
| 23 | + | |
| 24 | + | |
| 25 | + | |
| 26 | + | |
| 27 | + | |
| 28 | + | |
| 29 | + | |
| 30 | + | |
| 31 | + | |
| 32 | + | |
| 33 | + | |
Lines changed: 23 additions & 0 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
| 1 | + | |
| 2 | + | |
| 3 | + | |
| 4 | + | |
| 5 | + | |
| 6 | + | |
| 7 | + | |
| 8 | + | |
| 9 | + | |
| 10 | + | |
| 11 | + | |
| 12 | + | |
| 13 | + | |
| 14 | + | |
| 15 | + | |
| 16 | + | |
| 17 | + | |
| 18 | + | |
| 19 | + | |
| 20 | + | |
| 21 | + | |
| 22 | + | |
| 23 | + | |
Lines changed: 4 additions & 0 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
| 1 | + | |
| 2 | + | |
| 3 | + | |
| 4 | + | |
Lines changed: 39 additions & 0 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
| 1 | + | |
| 2 | + | |
| 3 | + | |
| 4 | + | |
| 5 | + | |
| 6 | + | |
| 7 | + | |
| 8 | + | |
| 9 | + | |
| 10 | + | |
| 11 | + | |
| 12 | + | |
| 13 | + | |
| 14 | + | |
| 15 | + | |
| 16 | + | |
| 17 | + | |
| 18 | + | |
| 19 | + | |
| 20 | + | |
| 21 | + | |
| 22 | + | |
| 23 | + | |
| 24 | + | |
| 25 | + | |
| 26 | + | |
| 27 | + | |
| 28 | + | |
| 29 | + | |
| 30 | + | |
| 31 | + | |
| 32 | + | |
| 33 | + | |
| 34 | + | |
| 35 | + | |
| 36 | + | |
| 37 | + | |
| 38 | + | |
| 39 | + | |
Lines changed: 29 additions & 0 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
| 1 | + | |
| 2 | + | |
| 3 | + | |
| 4 | + | |
| 5 | + | |
| 6 | + | |
| 7 | + | |
| 8 | + | |
| 9 | + | |
| 10 | + | |
| 11 | + | |
| 12 | + | |
| 13 | + | |
| 14 | + | |
| 15 | + | |
| 16 | + | |
| 17 | + | |
| 18 | + | |
| 19 | + | |
| 20 | + | |
| 21 | + | |
| 22 | + | |
| 23 | + | |
| 24 | + | |
| 25 | + | |
| 26 | + | |
| 27 | + | |
| 28 | + | |
| 29 | + | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
887 | 887 | | |
888 | 888 | | |
889 | 889 | | |
890 | | - | |
| 890 | + | |
891 | 891 | | |
892 | 892 | | |
893 | | - | |
| 893 | + | |
894 | 894 | | |
895 | 895 | | |
896 | 896 | | |
| |||
Lines changed: 20 additions & 0 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
354 | 354 | | |
355 | 355 | | |
356 | 356 | | |
| 357 | + | |
| 358 | + | |
| 359 | + | |
| 360 | + | |
| 361 | + | |
| 362 | + | |
| 363 | + | |
| 364 | + | |
| 365 | + | |
| 366 | + | |
| 367 | + | |
| 368 | + | |
| 369 | + | |
| 370 | + | |
| 371 | + | |
| 372 | + | |
| 373 | + | |
| 374 | + | |
| 375 | + | |
| 376 | + | |
357 | 377 | | |
358 | 378 | | |
359 | 379 | | |
| |||
Lines changed: 18 additions & 3 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
784 | 784 | | |
785 | 785 | | |
786 | 786 | | |
| 787 | + | |
787 | 788 | | |
788 | 789 | | |
789 | 790 | | |
| |||
933 | 934 | | |
934 | 935 | | |
935 | 936 | | |
936 | | - | |
| 937 | + | |
| 938 | + | |
| 939 | + | |
| 940 | + | |
937 | 941 | | |
938 | | - | |
| 942 | + | |
939 | 943 | | |
940 | 944 | | |
941 | 945 | | |
942 | 946 | | |
943 | 947 | | |
944 | 948 | | |
945 | 949 | | |
946 | | - | |
| 950 | + | |
947 | 951 | | |
948 | 952 | | |
949 | 953 | | |
950 | 954 | | |
951 | 955 | | |
952 | 956 | | |
953 | 957 | | |
| 958 | + | |
| 959 | + | |
| 960 | + | |
| 961 | + | |
| 962 | + | |
| 963 | + | |
| 964 | + | |
| 965 | + | |
| 966 | + | |
| 967 | + | |
| 968 | + | |
954 | 969 | | |
955 | 970 | | |
956 | 971 | | |
| |||
0 commit comments