@x12i/memorix-metadata 0.0.0-bootstrap.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 +35 -0
- package/dist/abstracts.d.ts +98 -0
- package/dist/abstracts.d.ts.map +1 -0
- package/dist/abstracts.js +419 -0
- package/dist/abstracts.js.map +1 -0
- package/dist/fingerprint.d.ts +11 -0
- package/dist/fingerprint.d.ts.map +1 -0
- package/dist/fingerprint.js +66 -0
- package/dist/fingerprint.js.map +1 -0
- package/dist/index.d.ts +8 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +7 -0
- package/dist/index.js.map +1 -0
- package/dist/kind-fields.d.ts +13 -0
- package/dist/kind-fields.d.ts.map +1 -0
- package/dist/kind-fields.js +39 -0
- package/dist/kind-fields.js.map +1 -0
- package/dist/kinds.d.ts +21 -0
- package/dist/kinds.d.ts.map +1 -0
- package/dist/kinds.js +147 -0
- package/dist/kinds.js.map +1 -0
- package/dist/multi-agent-rule.d.ts +15 -0
- package/dist/multi-agent-rule.d.ts.map +1 -0
- package/dist/multi-agent-rule.js +30 -0
- package/dist/multi-agent-rule.js.map +1 -0
- package/dist/normalize.d.ts +26 -0
- package/dist/normalize.d.ts.map +1 -0
- package/dist/normalize.js +114 -0
- package/dist/normalize.js.map +1 -0
- package/dist/resolve.d.ts +85 -0
- package/dist/resolve.d.ts.map +1 -0
- package/dist/resolve.js +464 -0
- package/dist/resolve.js.map +1 -0
- package/dist/types.d.ts +277 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +6 -0
- package/dist/types.js.map +1 -0
- package/dist/validate.d.ts +7 -0
- package/dist/validate.d.ts.map +1 -0
- package/dist/validate.js +563 -0
- package/dist/validate.js.map +1 -0
- package/examples/invalid/agent-classification.json +709 -0
- package/examples/invalid/broken-binding.json +688 -0
- package/examples/invalid/completion-mapping-with-exec-policy.json +659 -0
- package/examples/invalid/missing-parent.json +708 -0
- package/examples/invalid/operational-kind-root.json +720 -0
- package/examples/invalid/pipeline-unknown-service.json +611 -0
- package/examples/invalid/relationship-missing-rules.json +624 -0
- package/examples/invalid/relationship-with-storage.json +631 -0
- package/examples/invalid/service-with-secrets.json +679 -0
- package/examples/ops/normalized/pack.json +1010 -0
- package/examples/ops/raw/abstract-bindings.json +38 -0
- package/examples/ops/raw/abstract-types.json +28 -0
- package/examples/ops/raw/agents.json +33 -0
- package/examples/ops/raw/object-types.json +170 -0
- package/examples/ops/raw/pipelines-and-sources.json +185 -0
- package/examples/ops/raw/relationship-definitions.json +110 -0
- package/examples/ops/raw/view-definitions.json +46 -0
- package/examples/ops/raw/write-and-source-mappings.json +108 -0
- package/examples/project-ops/normalized/pack.json +944 -0
- package/package.json +49 -0
package/README.md
ADDED
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
# @x12i/memorix-metadata
|
|
2
|
+
|
|
3
|
+
Canonical **declarative** metadata contracts, **effective multi-agent resolution**, and **metadata-only abstract unions** for Memorix (Phase 3).
|
|
4
|
+
|
|
5
|
+
## Scope
|
|
6
|
+
|
|
7
|
+
- One registry of **12** supported metadata kinds (including `services`)
|
|
8
|
+
- Pack validation + reference integrity
|
|
9
|
+
- Effective metadata resolution (parent chains, collapse, provenance, fingerprints)
|
|
10
|
+
- Abstract binding plans: union expansion, property coverage, type/mapping checks, relationship endpoint candidates
|
|
11
|
+
- Examples for `ops` / `project-ops`
|
|
12
|
+
|
|
13
|
+
## APIs
|
|
14
|
+
|
|
15
|
+
| Export | Role |
|
|
16
|
+
|---|---|
|
|
17
|
+
| `validateMetadataPack` | Single-pack structural + reference validation |
|
|
18
|
+
| `resolveEffectiveMetadata` | Compose selected `agentIds[]` into effective definitions |
|
|
19
|
+
| `getRawAgentView` | Unresolved single-agent pack view |
|
|
20
|
+
| `fingerprintDefinition` | Deterministic equality fingerprint |
|
|
21
|
+
| `resolveAbstractBindings` | Binding plans + relationship endpoint expansion from effective metadata |
|
|
22
|
+
| `resolveAbstractReverseWrite` | Single-concrete reverse-write target (no union fan-out) |
|
|
23
|
+
|
|
24
|
+
## Out of scope (still)
|
|
25
|
+
|
|
26
|
+
- Mapping **execution** lives in `@x12i/memorix-mapping` (metadata only validates map AST schemas)
|
|
27
|
+
- Catalox install / API
|
|
28
|
+
- Abstract record retrieval
|
|
29
|
+
- Relationship physical storage / data links (G4)
|
|
30
|
+
- Mongo data plane (G5)
|
|
31
|
+
- Pipeline runtime / UI
|
|
32
|
+
|
|
33
|
+
## Abstracts
|
|
34
|
+
|
|
35
|
+
Abstracts exist only in metadata. `People = employees ∪ contractors`. There is no people collection; a person record lives in one concrete member collection and keeps that concrete `recordId`.
|
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Phase 3C — metadata-only abstract union and binding resolution.
|
|
3
|
+
*
|
|
4
|
+
* Never creates abstract collections, abstract records, or abstract recordIds.
|
|
5
|
+
* Does not execute mappings, read Mongo, or create relationship data links.
|
|
6
|
+
*/
|
|
7
|
+
import type { DefinitionProvenance, EffectiveMetadataResult } from "./resolve.js";
|
|
8
|
+
import type { AbstractPropertyBinding, MetadataPack } from "./types.js";
|
|
9
|
+
export type AbstractResolveIssue = {
|
|
10
|
+
code: string;
|
|
11
|
+
message: string;
|
|
12
|
+
path?: string[];
|
|
13
|
+
abstractType?: string;
|
|
14
|
+
objectType?: string;
|
|
15
|
+
abstractProperty?: string;
|
|
16
|
+
};
|
|
17
|
+
export type ConcreteMemberPlan = {
|
|
18
|
+
objectType: string;
|
|
19
|
+
/** Conceptual reminder: concrete records keep org-unique recordId in this object type. */
|
|
20
|
+
retainsConcreteRecordId: true;
|
|
21
|
+
provenance: DefinitionProvenance[];
|
|
22
|
+
};
|
|
23
|
+
export type PropertyConcretePath = {
|
|
24
|
+
objectType: string;
|
|
25
|
+
contentType: string;
|
|
26
|
+
propertyPath?: string;
|
|
27
|
+
mappingId?: string;
|
|
28
|
+
concreteValueType?: string;
|
|
29
|
+
reverse?: AbstractPropertyBinding["reverse"];
|
|
30
|
+
reversible: boolean;
|
|
31
|
+
};
|
|
32
|
+
export type AbstractPropertyPlan = {
|
|
33
|
+
abstractProperty: string;
|
|
34
|
+
required: boolean;
|
|
35
|
+
valueType: string;
|
|
36
|
+
/** One entry per concrete member that binds this property. */
|
|
37
|
+
concretePaths: PropertyConcretePath[];
|
|
38
|
+
};
|
|
39
|
+
export type AbstractBindingPlan = {
|
|
40
|
+
abstractType: string;
|
|
41
|
+
abstractProvenance: DefinitionProvenance | null;
|
|
42
|
+
/** Deterministically ordered concrete union members. */
|
|
43
|
+
members: ConcreteMemberPlan[];
|
|
44
|
+
properties: AbstractPropertyPlan[];
|
|
45
|
+
bindingIds: string[];
|
|
46
|
+
};
|
|
47
|
+
export type RelationshipEndpointCandidates = {
|
|
48
|
+
abstractType: string;
|
|
49
|
+
path: string;
|
|
50
|
+
candidateObjectTypes: string[];
|
|
51
|
+
};
|
|
52
|
+
export type RelationshipEndpointExpansion = {
|
|
53
|
+
relationshipId: string;
|
|
54
|
+
from: RelationshipEndpointCandidates;
|
|
55
|
+
to: RelationshipEndpointCandidates;
|
|
56
|
+
/** Possible concrete object-type combinations — no record discovery or link creation. */
|
|
57
|
+
candidateCombinations: Array<{
|
|
58
|
+
fromObjectType: string;
|
|
59
|
+
toObjectType: string;
|
|
60
|
+
}>;
|
|
61
|
+
provenance: DefinitionProvenance | null;
|
|
62
|
+
};
|
|
63
|
+
export type AbstractResolutionResult = {
|
|
64
|
+
ok: boolean;
|
|
65
|
+
issues: AbstractResolveIssue[];
|
|
66
|
+
plans: AbstractBindingPlan[];
|
|
67
|
+
relationshipExpansions: RelationshipEndpointExpansion[];
|
|
68
|
+
/**
|
|
69
|
+
* Identity model reminder for callers/tests:
|
|
70
|
+
* a person exists in exactly one concrete member collection under that concrete recordId.
|
|
71
|
+
*/
|
|
72
|
+
identityModel: {
|
|
73
|
+
abstractsMaterializeRecords: false;
|
|
74
|
+
abstractsHaveCollections: false;
|
|
75
|
+
concreteRecordIdRetained: true;
|
|
76
|
+
};
|
|
77
|
+
};
|
|
78
|
+
/**
|
|
79
|
+
* Resolve deterministic abstract binding plans and relationship endpoint expansions
|
|
80
|
+
* from effective metadata (Phase 3B output).
|
|
81
|
+
*/
|
|
82
|
+
export declare function resolveAbstractBindings(effective: EffectiveMetadataResult): AbstractResolutionResult;
|
|
83
|
+
/**
|
|
84
|
+
* Resolve a reverse-write target for one abstract property on one concrete member.
|
|
85
|
+
* Never fans out to every union member.
|
|
86
|
+
*/
|
|
87
|
+
export declare function resolveAbstractReverseWrite(input: {
|
|
88
|
+
plan: AbstractBindingPlan;
|
|
89
|
+
objectType: string;
|
|
90
|
+
abstractProperty: string;
|
|
91
|
+
}): {
|
|
92
|
+
ok: boolean;
|
|
93
|
+
issues: AbstractResolveIssue[];
|
|
94
|
+
target: PropertyConcretePath | null;
|
|
95
|
+
};
|
|
96
|
+
/** Convenience: resolve abstracts from an already-composed pack (synthetic provenance). */
|
|
97
|
+
export declare function resolveAbstractBindingsFromPack(pack: MetadataPack): AbstractResolutionResult;
|
|
98
|
+
//# sourceMappingURL=abstracts.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"abstracts.d.ts","sourceRoot":"","sources":["../src/abstracts.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,419 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Phase 3C — metadata-only abstract union and binding resolution.
|
|
3
|
+
*
|
|
4
|
+
* Never creates abstract collections, abstract records, or abstract recordIds.
|
|
5
|
+
* Does not execute mappings, read Mongo, or create relationship data links.
|
|
6
|
+
*/
|
|
7
|
+
function issue(code, message, extra) {
|
|
8
|
+
return { code, message, ...extra };
|
|
9
|
+
}
|
|
10
|
+
function defsOfKind(effective, kind) {
|
|
11
|
+
return effective
|
|
12
|
+
.filter((e) => e.kind === kind)
|
|
13
|
+
.map((e) => ({ def: e.definition, provenance: e.provenance }));
|
|
14
|
+
}
|
|
15
|
+
function memberObjectTypes(binding) {
|
|
16
|
+
const fromMembers = (binding.members ?? []).map((m) => m.objectType).filter(Boolean);
|
|
17
|
+
const fromList = binding.concreteObjectTypes ?? [];
|
|
18
|
+
return [...new Set([...fromMembers, ...fromList])];
|
|
19
|
+
}
|
|
20
|
+
function fieldExists(ot, contentType, propertyPath) {
|
|
21
|
+
if (!ot?.fields || ot.fields.length === 0)
|
|
22
|
+
return null;
|
|
23
|
+
return ot.fields.some((f) => f.path === propertyPath &&
|
|
24
|
+
(f.contentType === undefined || f.contentType === contentType));
|
|
25
|
+
}
|
|
26
|
+
function fieldValueType(ot, contentType, propertyPath) {
|
|
27
|
+
return ot?.fields?.find((f) => f.path === propertyPath &&
|
|
28
|
+
(f.contentType === undefined || f.contentType === contentType))?.valueType;
|
|
29
|
+
}
|
|
30
|
+
function contentTypeExists(ot, contentType) {
|
|
31
|
+
if (!ot)
|
|
32
|
+
return false;
|
|
33
|
+
return ot.contentTypes.some((c) => c.id === contentType);
|
|
34
|
+
}
|
|
35
|
+
function typesCompatible(abstractType, concreteType) {
|
|
36
|
+
return abstractType === concreteType;
|
|
37
|
+
}
|
|
38
|
+
function isReversible(reverse) {
|
|
39
|
+
if (!reverse)
|
|
40
|
+
return false;
|
|
41
|
+
const hasPath = typeof reverse.propertyPath === "string" && reverse.propertyPath.trim().length > 0;
|
|
42
|
+
const hasMap = typeof reverse.mappingId === "string" && reverse.mappingId.trim().length > 0;
|
|
43
|
+
return hasPath || hasMap;
|
|
44
|
+
}
|
|
45
|
+
function isAmbiguousReverse(reverse) {
|
|
46
|
+
if (!reverse)
|
|
47
|
+
return false;
|
|
48
|
+
const hasPath = typeof reverse.propertyPath === "string" && reverse.propertyPath.trim().length > 0;
|
|
49
|
+
const hasMap = typeof reverse.mappingId === "string" && reverse.mappingId.trim().length > 0;
|
|
50
|
+
return !hasPath && !hasMap;
|
|
51
|
+
}
|
|
52
|
+
/**
|
|
53
|
+
* Resolve deterministic abstract binding plans and relationship endpoint expansions
|
|
54
|
+
* from effective metadata (Phase 3B output).
|
|
55
|
+
*/
|
|
56
|
+
export function resolveAbstractBindings(effective) {
|
|
57
|
+
const issues = [];
|
|
58
|
+
const identityModel = {
|
|
59
|
+
abstractsMaterializeRecords: false,
|
|
60
|
+
abstractsHaveCollections: false,
|
|
61
|
+
concreteRecordIdRetained: true,
|
|
62
|
+
};
|
|
63
|
+
if (!effective.ok || !effective.effectivePack) {
|
|
64
|
+
return {
|
|
65
|
+
ok: false,
|
|
66
|
+
issues: [
|
|
67
|
+
issue("ABS-EFFECTIVE-REQUIRED", "Effective metadata must resolve successfully before abstract binding resolution"),
|
|
68
|
+
],
|
|
69
|
+
plans: [],
|
|
70
|
+
relationshipExpansions: [],
|
|
71
|
+
identityModel,
|
|
72
|
+
};
|
|
73
|
+
}
|
|
74
|
+
const pack = effective.effectivePack;
|
|
75
|
+
const effectiveDefs = effective.effective;
|
|
76
|
+
for (const e of effectiveDefs) {
|
|
77
|
+
if (e.kind !== "abstract-types" && e.kind !== "abstract-bindings")
|
|
78
|
+
continue;
|
|
79
|
+
for (const key of ["collection", "abstractCollection", "abstractRecordId", "abstractId"]) {
|
|
80
|
+
if (key in e.definition) {
|
|
81
|
+
issues.push(issue("ABS-NO-ABSTRACT-RECORD", `Definition ${e.kind}/${e.id} must not introduce ${key}`, { abstractType: e.id, path: [e.kind, e.id, key] }));
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
const abstracts = defsOfKind(effectiveDefs, "abstract-types");
|
|
86
|
+
const bindings = defsOfKind(effectiveDefs, "abstract-bindings");
|
|
87
|
+
const objectTypes = defsOfKind(effectiveDefs, "object-types");
|
|
88
|
+
const mappings = defsOfKind(effectiveDefs, "mappings");
|
|
89
|
+
const relationships = defsOfKind(effectiveDefs, "relationship-definitions");
|
|
90
|
+
const otById = new Map(objectTypes.map((o) => [o.def.id, o.def]));
|
|
91
|
+
const mapById = new Map(mappings.map((m) => [m.def.id, m.def]));
|
|
92
|
+
const bindingsByAbstract = new Map();
|
|
93
|
+
for (const b of bindings) {
|
|
94
|
+
const list = bindingsByAbstract.get(b.def.abstractType) ?? [];
|
|
95
|
+
list.push(b);
|
|
96
|
+
bindingsByAbstract.set(b.def.abstractType, list);
|
|
97
|
+
}
|
|
98
|
+
const plans = [];
|
|
99
|
+
for (const { def: abs, provenance: absProv } of abstracts) {
|
|
100
|
+
const absBindings = bindingsByAbstract.get(abs.id) ?? [];
|
|
101
|
+
const memberMap = new Map();
|
|
102
|
+
for (const b of absBindings) {
|
|
103
|
+
const types = memberObjectTypes(b.def);
|
|
104
|
+
for (const objectType of types) {
|
|
105
|
+
if (!otById.has(objectType)) {
|
|
106
|
+
issues.push(issue("ABS-INVALID-OBJECT-TYPE", `Abstract "${abs.id}" binds unknown object type "${objectType}"`, {
|
|
107
|
+
abstractType: abs.id,
|
|
108
|
+
objectType,
|
|
109
|
+
path: ["abstract-bindings", b.def.id, objectType],
|
|
110
|
+
}));
|
|
111
|
+
continue;
|
|
112
|
+
}
|
|
113
|
+
const existing = memberMap.get(objectType);
|
|
114
|
+
const memberDef = b.def.members?.find((m) => m.objectType === objectType) ??
|
|
115
|
+
{ objectType };
|
|
116
|
+
if (existing) {
|
|
117
|
+
existing.provenance.push(b.provenance);
|
|
118
|
+
existing.memberDefs.push(memberDef);
|
|
119
|
+
}
|
|
120
|
+
else {
|
|
121
|
+
memberMap.set(objectType, {
|
|
122
|
+
objectType,
|
|
123
|
+
provenance: [b.provenance],
|
|
124
|
+
memberDefs: [memberDef],
|
|
125
|
+
});
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
const members = [...memberMap.values()]
|
|
130
|
+
.map((m) => ({
|
|
131
|
+
objectType: m.objectType,
|
|
132
|
+
retainsConcreteRecordId: true,
|
|
133
|
+
provenance: m.provenance,
|
|
134
|
+
}))
|
|
135
|
+
.sort((a, b) => a.objectType.localeCompare(b.objectType));
|
|
136
|
+
const propsByMember = new Map();
|
|
137
|
+
for (const [objectType, entry] of memberMap) {
|
|
138
|
+
const propMap = new Map();
|
|
139
|
+
for (const md of entry.memberDefs) {
|
|
140
|
+
for (const p of md.properties ?? []) {
|
|
141
|
+
propMap.set(p.abstractProperty, p);
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
propsByMember.set(objectType, propMap);
|
|
145
|
+
}
|
|
146
|
+
const absProps = abs.properties ?? [];
|
|
147
|
+
const propertyPlans = [];
|
|
148
|
+
for (const prop of absProps) {
|
|
149
|
+
const concretePaths = [];
|
|
150
|
+
for (const member of members) {
|
|
151
|
+
const binding = propsByMember.get(member.objectType)?.get(prop.id);
|
|
152
|
+
if (!binding) {
|
|
153
|
+
if (prop.required) {
|
|
154
|
+
issues.push(issue("ABS-MISSING-REQUIRED-PROPERTY", `Required abstract property "${prop.id}" is not bound for concrete "${member.objectType}"`, {
|
|
155
|
+
abstractType: abs.id,
|
|
156
|
+
objectType: member.objectType,
|
|
157
|
+
abstractProperty: prop.id,
|
|
158
|
+
}));
|
|
159
|
+
}
|
|
160
|
+
continue;
|
|
161
|
+
}
|
|
162
|
+
const ot = otById.get(member.objectType);
|
|
163
|
+
const contentType = binding.contentType;
|
|
164
|
+
if (!contentTypeExists(ot, contentType)) {
|
|
165
|
+
issues.push(issue("ABS-INVALID-CONTENT-TYPE", `Content type "${contentType}" is not declared on object type "${member.objectType}"`, {
|
|
166
|
+
abstractType: abs.id,
|
|
167
|
+
objectType: member.objectType,
|
|
168
|
+
abstractProperty: prop.id,
|
|
169
|
+
path: [member.objectType, contentType],
|
|
170
|
+
}));
|
|
171
|
+
continue;
|
|
172
|
+
}
|
|
173
|
+
if (binding.propertyPath) {
|
|
174
|
+
const exists = fieldExists(ot, contentType, binding.propertyPath);
|
|
175
|
+
if (exists === false) {
|
|
176
|
+
issues.push(issue("ABS-INVALID-PROPERTY-PATH", `Property path "${binding.propertyPath}" is not declared on "${member.objectType}"`, {
|
|
177
|
+
abstractType: abs.id,
|
|
178
|
+
objectType: member.objectType,
|
|
179
|
+
abstractProperty: prop.id,
|
|
180
|
+
path: [member.objectType, binding.propertyPath],
|
|
181
|
+
}));
|
|
182
|
+
continue;
|
|
183
|
+
}
|
|
184
|
+
}
|
|
185
|
+
if (binding.mappingId) {
|
|
186
|
+
const mapping = mapById.get(binding.mappingId);
|
|
187
|
+
if (!mapping) {
|
|
188
|
+
issues.push(issue("ABS-MISSING-MAPPING", `Property "${prop.id}" on "${member.objectType}" references missing mapping "${binding.mappingId}"`, {
|
|
189
|
+
abstractType: abs.id,
|
|
190
|
+
objectType: member.objectType,
|
|
191
|
+
abstractProperty: prop.id,
|
|
192
|
+
}));
|
|
193
|
+
continue;
|
|
194
|
+
}
|
|
195
|
+
}
|
|
196
|
+
else if (binding.propertyPath) {
|
|
197
|
+
const concreteType = binding.concreteValueType ??
|
|
198
|
+
fieldValueType(ot, contentType, binding.propertyPath) ??
|
|
199
|
+
"unknown";
|
|
200
|
+
if (concreteType !== "unknown" && !typesCompatible(prop.valueType, concreteType)) {
|
|
201
|
+
issues.push(issue("ABS-INCOMPATIBLE-TYPE", `Direct binding for "${prop.id}" on "${member.objectType}" has incompatible types (abstract ${prop.valueType} vs concrete ${concreteType}); use a mappingId for conversion`, {
|
|
202
|
+
abstractType: abs.id,
|
|
203
|
+
objectType: member.objectType,
|
|
204
|
+
abstractProperty: prop.id,
|
|
205
|
+
}));
|
|
206
|
+
continue;
|
|
207
|
+
}
|
|
208
|
+
}
|
|
209
|
+
if (binding.reverse !== undefined) {
|
|
210
|
+
if (isAmbiguousReverse(binding.reverse)) {
|
|
211
|
+
issues.push(issue("ABS-AMBIGUOUS-REVERSE", `Reverse write for "${prop.id}" on "${member.objectType}" is ambiguous/empty`, {
|
|
212
|
+
abstractType: abs.id,
|
|
213
|
+
objectType: member.objectType,
|
|
214
|
+
abstractProperty: prop.id,
|
|
215
|
+
}));
|
|
216
|
+
}
|
|
217
|
+
else if (binding.reverse.mappingId && !mapById.has(binding.reverse.mappingId)) {
|
|
218
|
+
issues.push(issue("ABS-MISSING-MAPPING", `Reverse mapping "${binding.reverse.mappingId}" for "${prop.id}" on "${member.objectType}" is missing`, {
|
|
219
|
+
abstractType: abs.id,
|
|
220
|
+
objectType: member.objectType,
|
|
221
|
+
abstractProperty: prop.id,
|
|
222
|
+
}));
|
|
223
|
+
}
|
|
224
|
+
}
|
|
225
|
+
concretePaths.push({
|
|
226
|
+
objectType: member.objectType,
|
|
227
|
+
contentType,
|
|
228
|
+
propertyPath: binding.propertyPath,
|
|
229
|
+
mappingId: binding.mappingId,
|
|
230
|
+
concreteValueType: binding.concreteValueType ??
|
|
231
|
+
(binding.propertyPath
|
|
232
|
+
? fieldValueType(ot, contentType, binding.propertyPath)
|
|
233
|
+
: undefined),
|
|
234
|
+
reverse: binding.reverse,
|
|
235
|
+
reversible: isReversible(binding.reverse),
|
|
236
|
+
});
|
|
237
|
+
}
|
|
238
|
+
propertyPlans.push({
|
|
239
|
+
abstractProperty: prop.id,
|
|
240
|
+
required: Boolean(prop.required),
|
|
241
|
+
valueType: prop.valueType,
|
|
242
|
+
concretePaths: concretePaths.sort((a, b) => a.objectType.localeCompare(b.objectType)),
|
|
243
|
+
});
|
|
244
|
+
}
|
|
245
|
+
for (const [objectType, propMap] of propsByMember) {
|
|
246
|
+
for (const [propId] of propMap) {
|
|
247
|
+
if (!absProps.some((p) => p.id === propId)) {
|
|
248
|
+
issues.push(issue("ABS-UNKNOWN-ABSTRACT-PROPERTY", `Binding for unknown abstract property "${propId}" on "${objectType}" (abstract "${abs.id}")`, { abstractType: abs.id, objectType, abstractProperty: propId }));
|
|
249
|
+
}
|
|
250
|
+
}
|
|
251
|
+
}
|
|
252
|
+
plans.push({
|
|
253
|
+
abstractType: abs.id,
|
|
254
|
+
abstractProvenance: absProv,
|
|
255
|
+
members,
|
|
256
|
+
properties: propertyPlans.sort((a, b) => a.abstractProperty.localeCompare(b.abstractProperty)),
|
|
257
|
+
bindingIds: absBindings.map((b) => b.def.id).sort(),
|
|
258
|
+
});
|
|
259
|
+
}
|
|
260
|
+
plans.sort((a, b) => a.abstractType.localeCompare(b.abstractType));
|
|
261
|
+
const planByAbstract = new Map(plans.map((p) => [p.abstractType, p]));
|
|
262
|
+
const relationshipExpansions = [];
|
|
263
|
+
for (const { def: rel, provenance } of relationships) {
|
|
264
|
+
const fromAbs = rel.from?.abstractType;
|
|
265
|
+
const toAbs = rel.to?.abstractType;
|
|
266
|
+
const fromPath = rel.from?.path;
|
|
267
|
+
const toPath = rel.to?.path;
|
|
268
|
+
if (!fromAbs ||
|
|
269
|
+
!planByAbstract.has(fromAbs) ||
|
|
270
|
+
planByAbstract.get(fromAbs).members.length === 0) {
|
|
271
|
+
issues.push(issue("ABS-UNBOUND-RELATIONSHIP-ENDPOINT", `Relationship "${rel.id}" from.abstractType "${fromAbs}" has no concrete bindings`, { abstractType: fromAbs, path: ["relationship-definitions", rel.id, "from"] }));
|
|
272
|
+
}
|
|
273
|
+
if (!toAbs ||
|
|
274
|
+
!planByAbstract.has(toAbs) ||
|
|
275
|
+
planByAbstract.get(toAbs).members.length === 0) {
|
|
276
|
+
issues.push(issue("ABS-UNBOUND-RELATIONSHIP-ENDPOINT", `Relationship "${rel.id}" to.abstractType "${toAbs}" has no concrete bindings`, { abstractType: toAbs, path: ["relationship-definitions", rel.id, "to"] }));
|
|
277
|
+
}
|
|
278
|
+
const fromMembers = planByAbstract.get(fromAbs ?? "")?.members.map((m) => m.objectType) ?? [];
|
|
279
|
+
const toMembers = planByAbstract.get(toAbs ?? "")?.members.map((m) => m.objectType) ?? [];
|
|
280
|
+
const combinations = [];
|
|
281
|
+
for (const f of fromMembers) {
|
|
282
|
+
for (const t of toMembers) {
|
|
283
|
+
combinations.push({ fromObjectType: f, toObjectType: t });
|
|
284
|
+
}
|
|
285
|
+
}
|
|
286
|
+
combinations.sort((a, b) => a.fromObjectType.localeCompare(b.fromObjectType) ||
|
|
287
|
+
a.toObjectType.localeCompare(b.toObjectType));
|
|
288
|
+
relationshipExpansions.push({
|
|
289
|
+
relationshipId: rel.id,
|
|
290
|
+
from: {
|
|
291
|
+
abstractType: fromAbs ?? "",
|
|
292
|
+
path: fromPath ?? "",
|
|
293
|
+
candidateObjectTypes: [...fromMembers],
|
|
294
|
+
},
|
|
295
|
+
to: {
|
|
296
|
+
abstractType: toAbs ?? "",
|
|
297
|
+
path: toPath ?? "",
|
|
298
|
+
candidateObjectTypes: [...toMembers],
|
|
299
|
+
},
|
|
300
|
+
candidateCombinations: combinations,
|
|
301
|
+
provenance,
|
|
302
|
+
});
|
|
303
|
+
}
|
|
304
|
+
relationshipExpansions.sort((a, b) => a.relationshipId.localeCompare(b.relationshipId));
|
|
305
|
+
void pack;
|
|
306
|
+
return {
|
|
307
|
+
ok: issues.length === 0,
|
|
308
|
+
issues,
|
|
309
|
+
plans,
|
|
310
|
+
relationshipExpansions,
|
|
311
|
+
identityModel,
|
|
312
|
+
};
|
|
313
|
+
}
|
|
314
|
+
/**
|
|
315
|
+
* Resolve a reverse-write target for one abstract property on one concrete member.
|
|
316
|
+
* Never fans out to every union member.
|
|
317
|
+
*/
|
|
318
|
+
export function resolveAbstractReverseWrite(input) {
|
|
319
|
+
const prop = input.plan.properties.find((p) => p.abstractProperty === input.abstractProperty);
|
|
320
|
+
if (!prop) {
|
|
321
|
+
return {
|
|
322
|
+
ok: false,
|
|
323
|
+
issues: [
|
|
324
|
+
issue("ABS-UNKNOWN-ABSTRACT-PROPERTY", `Abstract property "${input.abstractProperty}" not on "${input.plan.abstractType}"`, {
|
|
325
|
+
abstractType: input.plan.abstractType,
|
|
326
|
+
abstractProperty: input.abstractProperty,
|
|
327
|
+
}),
|
|
328
|
+
],
|
|
329
|
+
target: null,
|
|
330
|
+
};
|
|
331
|
+
}
|
|
332
|
+
const path = prop.concretePaths.find((c) => c.objectType === input.objectType);
|
|
333
|
+
if (!path) {
|
|
334
|
+
return {
|
|
335
|
+
ok: false,
|
|
336
|
+
issues: [
|
|
337
|
+
issue("ABS-MISSING-REQUIRED-PROPERTY", `No binding for "${input.abstractProperty}" on concrete "${input.objectType}"`, {
|
|
338
|
+
abstractType: input.plan.abstractType,
|
|
339
|
+
objectType: input.objectType,
|
|
340
|
+
abstractProperty: input.abstractProperty,
|
|
341
|
+
}),
|
|
342
|
+
],
|
|
343
|
+
target: null,
|
|
344
|
+
};
|
|
345
|
+
}
|
|
346
|
+
if (!path.reversible || !path.reverse) {
|
|
347
|
+
return {
|
|
348
|
+
ok: false,
|
|
349
|
+
issues: [
|
|
350
|
+
issue("ABS-NON-REVERSIBLE", `Abstract property "${input.abstractProperty}" on "${input.objectType}" has no explicit reverse mapping`, {
|
|
351
|
+
abstractType: input.plan.abstractType,
|
|
352
|
+
objectType: input.objectType,
|
|
353
|
+
abstractProperty: input.abstractProperty,
|
|
354
|
+
}),
|
|
355
|
+
],
|
|
356
|
+
target: null,
|
|
357
|
+
};
|
|
358
|
+
}
|
|
359
|
+
if (isAmbiguousReverse(path.reverse)) {
|
|
360
|
+
return {
|
|
361
|
+
ok: false,
|
|
362
|
+
issues: [
|
|
363
|
+
issue("ABS-AMBIGUOUS-REVERSE", `Reverse write for "${input.abstractProperty}" on "${input.objectType}" is ambiguous`, {
|
|
364
|
+
abstractType: input.plan.abstractType,
|
|
365
|
+
objectType: input.objectType,
|
|
366
|
+
abstractProperty: input.abstractProperty,
|
|
367
|
+
}),
|
|
368
|
+
],
|
|
369
|
+
target: null,
|
|
370
|
+
};
|
|
371
|
+
}
|
|
372
|
+
return { ok: true, issues: [], target: path };
|
|
373
|
+
}
|
|
374
|
+
/** Convenience: resolve abstracts from an already-composed pack (synthetic provenance). */
|
|
375
|
+
export function resolveAbstractBindingsFromPack(pack) {
|
|
376
|
+
const synthetic = {
|
|
377
|
+
ok: true,
|
|
378
|
+
selectedAgentIds: [pack.agentId],
|
|
379
|
+
collapsedAgentIds: [pack.agentId],
|
|
380
|
+
issues: [],
|
|
381
|
+
conflicts: [],
|
|
382
|
+
referenceIssues: [],
|
|
383
|
+
effective: [],
|
|
384
|
+
effectivePack: pack,
|
|
385
|
+
};
|
|
386
|
+
const kinds = [
|
|
387
|
+
{ kind: "agents", items: pack.agents },
|
|
388
|
+
{ kind: "object-types", items: pack.objectTypes },
|
|
389
|
+
{ kind: "abstract-types", items: pack.abstractTypes },
|
|
390
|
+
{ kind: "abstract-bindings", items: pack.abstractBindings },
|
|
391
|
+
{ kind: "relationship-definitions", items: pack.relationshipDefinitions },
|
|
392
|
+
{ kind: "mappings", items: pack.mappings },
|
|
393
|
+
{ kind: "views", items: pack.views },
|
|
394
|
+
{ kind: "writes", items: pack.writes },
|
|
395
|
+
{ kind: "sources", items: pack.sources },
|
|
396
|
+
{ kind: "services", items: pack.services ?? [] },
|
|
397
|
+
{ kind: "pipelines", items: pack.pipelines },
|
|
398
|
+
{ kind: "schedules", items: pack.schedules },
|
|
399
|
+
];
|
|
400
|
+
for (const { kind, items } of kinds) {
|
|
401
|
+
for (const item of items) {
|
|
402
|
+
synthetic.effective.push({
|
|
403
|
+
kind,
|
|
404
|
+
id: item.id,
|
|
405
|
+
definition: item,
|
|
406
|
+
provenance: {
|
|
407
|
+
kind,
|
|
408
|
+
id: item.id,
|
|
409
|
+
definedByAgentId: pack.agentId,
|
|
410
|
+
inheritancePath: [pack.agentId],
|
|
411
|
+
selectedAgentId: pack.agentId,
|
|
412
|
+
fingerprint: "",
|
|
413
|
+
},
|
|
414
|
+
});
|
|
415
|
+
}
|
|
416
|
+
}
|
|
417
|
+
return resolveAbstractBindings(synthetic);
|
|
418
|
+
}
|
|
419
|
+
//# sourceMappingURL=abstracts.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"abstracts.js","sourceRoot":"","sources":["../src/abstracts.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Schema-normalize a definition for canonical equality:
|
|
3
|
+
* - drop provenance / install / runtime fields
|
|
4
|
+
* - apply shallow schema defaults (undefined omitted; null parentId → null)
|
|
5
|
+
* - stable object-key ordering
|
|
6
|
+
* - preserve array order except explicit set-arrays (sorted)
|
|
7
|
+
*/
|
|
8
|
+
export declare function schemaNormalizeForFingerprint(value: unknown, keyHint?: string): unknown;
|
|
9
|
+
/** Deterministic fingerprint of a schema-normalized definition. */
|
|
10
|
+
export declare function fingerprintDefinition(definition: unknown): string;
|
|
11
|
+
//# sourceMappingURL=fingerprint.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fingerprint.d.ts","sourceRoot":"","sources":["../src/fingerprint.ts"],"names":[],"mappings":"AAEA;;;;;;GAMG;AACH,wBAAgB,6BAA6B,CAC3C,KAAK,EAAE,OAAO,EACd,OAAO,CAAC,EAAE,MAAM,GACf,OAAO,CA+BT;AAED,mEAAmE;AACnE,wBAAgB,qBAAqB,CAAC,UAAU,EAAE,OAAO,GAAG,MAAM,CAGjE"}
|