Skip to content

Commit 7ae9dd4

Browse files
dmealingclaude
andcommitted
test(#195): origin-agg-any / origin-agg-all cross-port conformance fixtures
The predicate-quantifier fixtures deferred from registration (they could not load until every port's per-capability validation relaxed the aggregate @of-required rule for any/all — now landed in all 5 ports). Each is a valid any/all projection ("did any turn fail?" / "did every turn succeed?"): a boolean field with origin.aggregate @agg:any|all, @via + the quantified @filter, no @Of. Proves all four registry ports (TS/C#/Java/Python) accept + canonically serialize valid any/all identically. Verified: TS 2176, Python 338, C# 760, Java 1165 — byte-identical load+serialize. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01NGQ7oSuNcjhsMHWwZzhBwr
1 parent 3e5f7a3 commit 7ae9dd4

6 files changed

Lines changed: 332 additions & 0 deletions

File tree

Lines changed: 112 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,112 @@
1+
{
2+
"metadata.root": {
3+
"package": "acme::sessions",
4+
"children": [
5+
{
6+
"object.entity": {
7+
"name": "Session",
8+
"children": [
9+
{
10+
"source.rdb": {
11+
"@table": "sessions"
12+
}
13+
},
14+
{
15+
"field.long": {
16+
"name": "id"
17+
}
18+
},
19+
{
20+
"relationship.association": {
21+
"name": "turns",
22+
"@cardinality": "many",
23+
"@objectRef": "acme::sessions::Turn"
24+
}
25+
},
26+
{
27+
"identity.primary": {
28+
"name": "id",
29+
"@fields": [
30+
"id"
31+
]
32+
}
33+
}
34+
]
35+
}
36+
},
37+
{
38+
"object.entity": {
39+
"name": "Turn",
40+
"children": [
41+
{
42+
"source.rdb": {
43+
"@table": "turns"
44+
}
45+
},
46+
{
47+
"field.long": {
48+
"name": "id"
49+
}
50+
},
51+
{
52+
"field.boolean": {
53+
"name": "success"
54+
}
55+
},
56+
{
57+
"identity.primary": {
58+
"name": "id",
59+
"@fields": [
60+
"id"
61+
]
62+
}
63+
}
64+
]
65+
}
66+
},
67+
{
68+
"object.projection": {
69+
"name": "SessionSummary",
70+
"children": [
71+
{
72+
"source.rdb": {
73+
"@kind": "view",
74+
"@view": "v_session_summary"
75+
}
76+
},
77+
{
78+
"field.long": {
79+
"name": "id",
80+
"extends": "acme::sessions::Session.id"
81+
}
82+
},
83+
{
84+
"field.boolean": {
85+
"name": "allSucceeded",
86+
"children": [
87+
{
88+
"origin.aggregate": {
89+
"@agg": "all",
90+
"@filter": {
91+
"success": {
92+
"eq": true
93+
}
94+
},
95+
"@via": "acme::sessions::Session.turns"
96+
}
97+
}
98+
]
99+
}
100+
},
101+
{
102+
"identity.primary": {
103+
"name": "id",
104+
"extends": "acme::sessions::Session.id"
105+
}
106+
}
107+
]
108+
}
109+
}
110+
]
111+
}
112+
}
Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,53 @@
1+
{
2+
"metadata.root": {
3+
"package": "acme::sessions",
4+
"children": [
5+
{
6+
"object.entity": {
7+
"name": "Session",
8+
"children": [
9+
{ "source.rdb": { "@table": "sessions" } },
10+
{ "field.long": { "name": "id" } },
11+
{ "relationship.association": { "name": "turns", "@objectRef": "acme::sessions::Turn", "@cardinality": "many" } },
12+
{ "identity.primary": { "name": "id", "@fields": "id" } }
13+
]
14+
}
15+
},
16+
{
17+
"object.entity": {
18+
"name": "Turn",
19+
"children": [
20+
{ "source.rdb": { "@table": "turns" } },
21+
{ "field.long": { "name": "id" } },
22+
{ "field.boolean": { "name": "success" } },
23+
{ "identity.primary": { "name": "id", "@fields": "id" } }
24+
]
25+
}
26+
},
27+
{
28+
"object.projection": {
29+
"name": "SessionSummary",
30+
"children": [
31+
{ "source.rdb": { "@kind": "view", "@view": "v_session_summary" } },
32+
{ "field.long": { "name": "id", "extends": "acme::sessions::Session.id" } },
33+
{
34+
"field.boolean": {
35+
"name": "allSucceeded",
36+
"children": [
37+
{
38+
"origin.aggregate": {
39+
"@agg": "all",
40+
"@via": "acme::sessions::Session.turns",
41+
"@filter": { "success": true }
42+
}
43+
}
44+
]
45+
}
46+
},
47+
{ "identity.primary": { "name": "id", "extends": "acme::sessions::Session.id" } }
48+
]
49+
}
50+
}
51+
]
52+
}
53+
}
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
["metaobjects-core-types","metaobjects-db"]
Lines changed: 112 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,112 @@
1+
{
2+
"metadata.root": {
3+
"package": "acme::sessions",
4+
"children": [
5+
{
6+
"object.entity": {
7+
"name": "Session",
8+
"children": [
9+
{
10+
"source.rdb": {
11+
"@table": "sessions"
12+
}
13+
},
14+
{
15+
"field.long": {
16+
"name": "id"
17+
}
18+
},
19+
{
20+
"relationship.association": {
21+
"name": "turns",
22+
"@cardinality": "many",
23+
"@objectRef": "acme::sessions::Turn"
24+
}
25+
},
26+
{
27+
"identity.primary": {
28+
"name": "id",
29+
"@fields": [
30+
"id"
31+
]
32+
}
33+
}
34+
]
35+
}
36+
},
37+
{
38+
"object.entity": {
39+
"name": "Turn",
40+
"children": [
41+
{
42+
"source.rdb": {
43+
"@table": "turns"
44+
}
45+
},
46+
{
47+
"field.long": {
48+
"name": "id"
49+
}
50+
},
51+
{
52+
"field.boolean": {
53+
"name": "success"
54+
}
55+
},
56+
{
57+
"identity.primary": {
58+
"name": "id",
59+
"@fields": [
60+
"id"
61+
]
62+
}
63+
}
64+
]
65+
}
66+
},
67+
{
68+
"object.projection": {
69+
"name": "SessionSummary",
70+
"children": [
71+
{
72+
"source.rdb": {
73+
"@kind": "view",
74+
"@view": "v_session_summary"
75+
}
76+
},
77+
{
78+
"field.long": {
79+
"name": "id",
80+
"extends": "acme::sessions::Session.id"
81+
}
82+
},
83+
{
84+
"field.boolean": {
85+
"name": "hasError",
86+
"children": [
87+
{
88+
"origin.aggregate": {
89+
"@agg": "any",
90+
"@filter": {
91+
"success": {
92+
"eq": false
93+
}
94+
},
95+
"@via": "acme::sessions::Session.turns"
96+
}
97+
}
98+
]
99+
}
100+
},
101+
{
102+
"identity.primary": {
103+
"name": "id",
104+
"extends": "acme::sessions::Session.id"
105+
}
106+
}
107+
]
108+
}
109+
}
110+
]
111+
}
112+
}
Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,53 @@
1+
{
2+
"metadata.root": {
3+
"package": "acme::sessions",
4+
"children": [
5+
{
6+
"object.entity": {
7+
"name": "Session",
8+
"children": [
9+
{ "source.rdb": { "@table": "sessions" } },
10+
{ "field.long": { "name": "id" } },
11+
{ "relationship.association": { "name": "turns", "@objectRef": "acme::sessions::Turn", "@cardinality": "many" } },
12+
{ "identity.primary": { "name": "id", "@fields": "id" } }
13+
]
14+
}
15+
},
16+
{
17+
"object.entity": {
18+
"name": "Turn",
19+
"children": [
20+
{ "source.rdb": { "@table": "turns" } },
21+
{ "field.long": { "name": "id" } },
22+
{ "field.boolean": { "name": "success" } },
23+
{ "identity.primary": { "name": "id", "@fields": "id" } }
24+
]
25+
}
26+
},
27+
{
28+
"object.projection": {
29+
"name": "SessionSummary",
30+
"children": [
31+
{ "source.rdb": { "@kind": "view", "@view": "v_session_summary" } },
32+
{ "field.long": { "name": "id", "extends": "acme::sessions::Session.id" } },
33+
{
34+
"field.boolean": {
35+
"name": "hasError",
36+
"children": [
37+
{
38+
"origin.aggregate": {
39+
"@agg": "any",
40+
"@via": "acme::sessions::Session.turns",
41+
"@filter": { "success": false }
42+
}
43+
}
44+
]
45+
}
46+
},
47+
{ "identity.primary": { "name": "id", "extends": "acme::sessions::Session.id" } }
48+
]
49+
}
50+
}
51+
]
52+
}
53+
}
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
["metaobjects-core-types","metaobjects-db"]

0 commit comments

Comments
 (0)