@telorun/analyzer 0.72.0 → 0.73.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.
Files changed (90) hide show
  1. package/dist/analyzer.d.ts.map +1 -1
  2. package/dist/analyzer.js +50 -13
  3. package/dist/builtins.d.ts.map +1 -1
  4. package/dist/builtins.js +71 -97
  5. package/dist/cel-scope-query.d.ts.map +1 -1
  6. package/dist/cel-scope-query.js +32 -11
  7. package/dist/cel-scope.d.ts.map +1 -1
  8. package/dist/cel-scope.js +1 -0
  9. package/dist/eval-paths.d.ts +36 -5
  10. package/dist/eval-paths.d.ts.map +1 -1
  11. package/dist/eval-paths.js +47 -6
  12. package/dist/extends-resolution.d.ts +12 -0
  13. package/dist/extends-resolution.d.ts.map +1 -1
  14. package/dist/extends-resolution.js +23 -0
  15. package/dist/index.d.ts +1 -1
  16. package/dist/index.d.ts.map +1 -1
  17. package/dist/index.js +1 -1
  18. package/dist/nearest-name.d.ts +22 -0
  19. package/dist/nearest-name.d.ts.map +1 -0
  20. package/dist/nearest-name.js +43 -0
  21. package/dist/release/destinations.d.ts +59 -0
  22. package/dist/release/destinations.d.ts.map +1 -0
  23. package/dist/release/destinations.js +75 -0
  24. package/dist/release/index.d.ts +6 -2
  25. package/dist/release/index.d.ts.map +1 -1
  26. package/dist/release/index.js +3 -1
  27. package/dist/release/ledger.d.ts +20 -11
  28. package/dist/release/ledger.d.ts.map +1 -1
  29. package/dist/release/ledger.js +43 -14
  30. package/dist/release/release-plan.d.ts +3 -2
  31. package/dist/release/release-plan.d.ts.map +1 -1
  32. package/dist/release/release-plan.js +12 -19
  33. package/dist/release/workspace-config.d.ts +114 -34
  34. package/dist/release/workspace-config.d.ts.map +1 -1
  35. package/dist/release/workspace-config.js +322 -38
  36. package/dist/release/workspace-schema.d.ts +41 -0
  37. package/dist/release/workspace-schema.d.ts.map +1 -0
  38. package/dist/release/workspace-schema.js +77 -0
  39. package/dist/schema-error-report.d.ts +7 -0
  40. package/dist/schema-error-report.d.ts.map +1 -1
  41. package/dist/schema-error-report.js +9 -4
  42. package/dist/telo-version.d.ts +1 -1
  43. package/dist/telo-version.js +1 -1
  44. package/dist/template-body.d.ts +10 -0
  45. package/dist/template-body.d.ts.map +1 -1
  46. package/dist/template-body.js +25 -0
  47. package/dist/validate-cel-context.d.ts +23 -8
  48. package/dist/validate-cel-context.d.ts.map +1 -1
  49. package/dist/validate-cel-context.js +48 -16
  50. package/dist/validate-exports.d.ts +28 -0
  51. package/dist/validate-exports.d.ts.map +1 -0
  52. package/dist/validate-exports.js +146 -0
  53. package/dist/validate-extends.d.ts.map +1 -1
  54. package/dist/validate-extends.js +37 -1
  55. package/dist/validate-provider-coherence.d.ts +4 -8
  56. package/dist/validate-provider-coherence.d.ts.map +1 -1
  57. package/dist/validate-provider-coherence.js +12 -123
  58. package/dist/validate-references.d.ts.map +1 -1
  59. package/dist/validate-references.js +141 -60
  60. package/dist/validate-template-body.d.ts +36 -0
  61. package/dist/validate-template-body.d.ts.map +1 -0
  62. package/dist/validate-template-body.js +246 -0
  63. package/package.json +3 -2
  64. package/src/analyzer.ts +64 -11
  65. package/src/builtins.ts +85 -97
  66. package/src/cel-scope-query.ts +28 -9
  67. package/src/cel-scope.ts +1 -0
  68. package/src/eval-paths.ts +53 -6
  69. package/src/extends-resolution.ts +24 -0
  70. package/src/index.ts +1 -0
  71. package/src/nearest-name.ts +47 -0
  72. package/src/release/destinations.ts +105 -0
  73. package/src/release/index.ts +33 -2
  74. package/src/release/ledger.ts +51 -21
  75. package/src/release/release-plan.ts +16 -26
  76. package/src/release/workspace-config.ts +483 -47
  77. package/src/release/workspace-schema.ts +99 -0
  78. package/src/schema-error-report.ts +16 -4
  79. package/src/telo-version.ts +1 -1
  80. package/src/template-body.ts +25 -0
  81. package/src/validate-cel-context.ts +57 -16
  82. package/src/validate-exports.ts +185 -0
  83. package/src/validate-extends.ts +43 -0
  84. package/src/validate-provider-coherence.ts +17 -127
  85. package/src/validate-references.ts +141 -60
  86. package/src/validate-template-body.ts +274 -0
  87. package/dist/validate-template-dispatch.d.ts +0 -27
  88. package/dist/validate-template-dispatch.d.ts.map +0 -1
  89. package/dist/validate-template-dispatch.js +0 -95
  90. package/src/validate-template-dispatch.ts +0 -99
@@ -1 +1 @@
1
- {"version":3,"file":"analyzer.d.ts","sourceRoot":"","sources":["../src/analyzer.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAsB,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAiBzE,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAC1D,OAAO,EAKL,KAAK,WAAW,EACjB,MAAM,sBAAsB,CAAC;AAgC9B,OAAO,EAAmB,KAAK,eAAe,EAAE,MAAM,gCAAgC,CAAC;AAWvF,OAAO,EAAE,qBAAqB,EAAE,eAAe,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACzF,OAAO,EAAE,qBAAqB,EAAE,MAAM,0BAA0B,CAAC;AA4DjE,OAAO,EAGL,KAAK,kBAAkB,EACvB,KAAK,eAAe,EACrB,MAAM,YAAY,CAAC;AAkGpB;0CAC0C;AAC1C,eAAO,MAAM,eAAe,GAAI,OAAO;IAAE,OAAO,EAAE,MAAM,CAAA;CAAE,KAAG,OACT,CAAC;AAErD;8EAC8E;AAC9E,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAGhD;AAqUD,8DAA8D;AAC9D,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;CACtC;AA6DD,MAAM,WAAW,qBAAqB;IACpC,WAAW,CAAC,EAAE,WAAW,CAAC;CAC3B;AAkFD,qBAAa,cAAc;IACzB,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAc;gBAEzB,OAAO,GAAE,qBAA0B;IAI/C;;;;;;;;;;;;;;OAcG;IACH,OAAO,CACL,SAAS,EAAE,gBAAgB,EAAE,EAC7B,OAAO,CAAC,EAAE,eAAe,EACzB,QAAQ,CAAC,EAAE,gBAAgB,EAC3B,eAAe,CAAC,EAAE,eAAe,GAChC,kBAAkB,EAAE;IAsiEvB,aAAa,CACX,SAAS,EAAE,gBAAgB,EAAE,EAC7B,OAAO,CAAC,EAAE,eAAe,EACzB,QAAQ,CAAC,EAAE,gBAAgB,EAC3B,eAAe,CAAC,EAAE,eAAe,GAChC,kBAAkB,EAAE;IAMvB,SAAS,CACP,SAAS,EAAE,gBAAgB,EAAE,EAC7B,QAAQ,EAAE,gBAAgB,EAI1B,kBAAkB,CAAC,EAAE,gBAAgB,EAAE,GACtC,gBAAgB,EAAE;IAyBrB,OAAO,CACL,SAAS,EAAE,gBAAgB,EAAE,EAC7B,QAAQ,EAAE,gBAAgB,GACzB;QAAE,WAAW,EAAE,kBAAkB,EAAE,CAAC;QAAC,KAAK,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC;QAAC,UAAU,EAAE,MAAM,GAAG,IAAI,CAAA;KAAE;CAsB5F"}
1
+ {"version":3,"file":"analyzer.d.ts","sourceRoot":"","sources":["../src/analyzer.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAsB,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAiBzE,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAC1D,OAAO,EAKL,KAAK,WAAW,EACjB,MAAM,sBAAsB,CAAC;AAsC9B,OAAO,EAAmB,KAAK,eAAe,EAAE,MAAM,gCAAgC,CAAC;AAWvF,OAAO,EAAE,qBAAqB,EAAE,eAAe,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACzF,OAAO,EAAE,qBAAqB,EAAE,MAAM,0BAA0B,CAAC;AA4DjE,OAAO,EAGL,KAAK,kBAAkB,EACvB,KAAK,eAAe,EACrB,MAAM,YAAY,CAAC;AAoGpB;0CAC0C;AAC1C,eAAO,MAAM,eAAe,GAAI,OAAO;IAAE,OAAO,EAAE,MAAM,CAAA;CAAE,KAAG,OACT,CAAC;AAErD;8EAC8E;AAC9E,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAGhD;AAqUD,8DAA8D;AAC9D,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;CACtC;AA6DD,MAAM,WAAW,qBAAqB;IACpC,WAAW,CAAC,EAAE,WAAW,CAAC;CAC3B;AAkFD,qBAAa,cAAc;IACzB,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAc;gBAEzB,OAAO,GAAE,qBAA0B;IAI/C;;;;;;;;;;;;;;OAcG;IACH,OAAO,CACL,SAAS,EAAE,gBAAgB,EAAE,EAC7B,OAAO,CAAC,EAAE,eAAe,EACzB,QAAQ,CAAC,EAAE,gBAAgB,EAC3B,eAAe,CAAC,EAAE,eAAe,GAChC,kBAAkB,EAAE;IAmlEvB,aAAa,CACX,SAAS,EAAE,gBAAgB,EAAE,EAC7B,OAAO,CAAC,EAAE,eAAe,EACzB,QAAQ,CAAC,EAAE,gBAAgB,EAC3B,eAAe,CAAC,EAAE,eAAe,GAChC,kBAAkB,EAAE;IAMvB,SAAS,CACP,SAAS,EAAE,gBAAgB,EAAE,EAC7B,QAAQ,EAAE,gBAAgB,EAI1B,kBAAkB,CAAC,EAAE,gBAAgB,EAAE,GACtC,gBAAgB,EAAE;IAyBrB,OAAO,CACL,SAAS,EAAE,gBAAgB,EAAE,EAC7B,QAAQ,EAAE,gBAAgB,GACzB;QAAE,WAAW,EAAE,kBAAkB,EAAE,CAAC;QAAC,KAAK,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC;QAAC,UAAU,EAAE,MAAM,GAAG,IAAI,CAAA;KAAE;CAsB5F"}
package/dist/analyzer.js CHANGED
@@ -4,7 +4,7 @@ import { AliasResolver, scopeResolverForModule, } from "./alias-resolver.js";
4
4
  import { buildCelEnvironment, isKindDocument, } from "./cel-environment.js";
5
5
  import { DefinitionRegistry } from "./definition-registry.js";
6
6
  import { readDeprecation } from "./deprecation.js";
7
- import { effectiveAuthorSchema } from "./extends-resolution.js";
7
+ import { effectiveAuthorSchema, inheritedCapability, inheritedRequiredFields, } from "./extends-resolution.js";
8
8
  import { analyzerContractScope, resolveContract, } from "./invocation-contract.js";
9
9
  import { buildCallGraph } from "./call-graph.js";
10
10
  import { buildDependencyGraph, formatCycle } from "./dependency-graph.js";
@@ -47,7 +47,7 @@ import { celTypeSatisfiesJsonSchema, checkSchemaCompatibility, navigateSchemaToE
47
47
  import { collectValueSchemaIssues } from "./validate-value-schema.js";
48
48
  import { DiagnosticSeverity, DiagnosticTag, } from "./types.js";
49
49
  import { extractAccessChains, } from "./validate-cel-context.js";
50
- import { celEvalModeAt, celEvalSites, mergeCelEvalSites, NO_CEL_EVAL_SITES, } from "./eval-paths.js";
50
+ import { celEvalModeAt, celEvalSites, implicitEvalSites, mergeCelEvalSites, NO_CEL_EVAL_SITES, } from "./eval-paths.js";
51
51
  import { BINDINGS_ANNOTATION, findBindingSites, resolveBindingOrder, } from "./cel-bindings.js";
52
52
  import { CEL_RESERVED_WORDS, checkName } from "./identifier-name.js";
53
53
  import { validateIdentifierNames } from "./validate-identifier-names.js";
@@ -66,7 +66,8 @@ import { kindSatisfies, validateReferences } from "./validate-references.js";
66
66
  import { validateReferenceForms } from "./validate-reference-forms.js";
67
67
  import { isInjectedDeclaration } from "./resource-input.js";
68
68
  import { validateResourceInputs } from "./validate-resource-inputs.js";
69
- import { validateTemplateDispatch } from "./validate-template-dispatch.js";
69
+ import { validateExports } from "./validate-exports.js";
70
+ import { validateTemplateBody } from "./validate-template-body.js";
70
71
  import { validateUnusedDeclarations } from "./validate-unused-declarations.js";
71
72
  import { validateThrowsCoverage } from "./validate-throws-coverage.js";
72
73
  import { readStepSlot } from "./step-slot.js";
@@ -1746,12 +1747,37 @@ export class StaticAnalyzer {
1746
1747
  // is caught here rather than on the one input that selects it.
1747
1748
  const valueSchemaIssues = collectValueSchemaIssues(m, schema, allManifests);
1748
1749
  const issues = [...ajvIssues, ...valueSchemaIssues];
1750
+ // WHY A FIELD THIS KIND EXISTS TO SUPPLY IS STILL REQUIRED OF ITS
1751
+ // CONSUMER. A child that `extends` and declares no `base:` is authored
1752
+ // against merge(parent, own), so the parent's `required` stays on the
1753
+ // CHILD's surface — and a kind written to wire that field internally
1754
+ // then demands it from the consumer anyway. The `base:` mapping is what
1755
+ // narrows (with it the surface is the child's own schema alone), and
1756
+ // nothing in "is missing required property" points there, which is what
1757
+ // turns one mistake into a three-step dead end.
1758
+ //
1759
+ // Matched against names DERIVED from the parent, never by parsing the
1760
+ // message: which fields are inherited is a fact about the definition,
1761
+ // and a check that reads a validator's prose breaks when the prose does.
1762
+ const inheritedRequired = inheritedRequiredFields(definition, (k) => defs.resolve(aliases.resolveKind(k) ?? k) ?? defs.resolve(k));
1763
+ const parentKind = definition?.extends;
1749
1764
  for (const issue of issues) {
1765
+ // Keyed on the STRUCTURED failure, never on the sentence: the field
1766
+ // names are derived from the parent, and matching them against the
1767
+ // validator's prose would break when the prose changes and mis-fire on
1768
+ // any other issue quoting the same name (an `additionalProperties`
1769
+ // rejection, an `enum` listing).
1770
+ const inherited = issue.keyword === "required" && issue.missingProperty !== undefined
1771
+ ? inheritedRequired.filter((f) => f === issue.missingProperty)
1772
+ : [];
1773
+ const hint = inherited.length > 0 && parentKind
1774
+ ? ` — ${inherited.map((f) => `'${f}'`).join(", ")} ${inherited.length > 1 ? "come" : "comes"} from '${parentKind}', which this kind extends without a 'base:' mapping, so the parent's required fields stay on this kind's author surface. Add 'base:' to set them internally; that also narrows the surface to this kind's own schema.`
1775
+ : "";
1750
1776
  diagnostics.push({
1751
1777
  severity: DiagnosticSeverity.Error,
1752
1778
  code: "SCHEMA_VIOLATION",
1753
1779
  source: SOURCE,
1754
- message: `${m.kind}/${resource.name}: ${issue.message}`,
1780
+ message: `${m.kind}/${resource.name}: ${issue.message}${hint}`,
1755
1781
  data: { resource, filePath, path: issue.path },
1756
1782
  });
1757
1783
  }
@@ -2116,8 +2142,14 @@ export class StaticAnalyzer {
2116
2142
  }
2117
2143
  // The non-eval-field check only applies to runtime resource instances:
2118
2144
  // structural / templating kinds (capability `Telo.Template`, or no
2119
- // definition) carry CEL the kernel evaluates by other rules.
2120
- const capability = e.definition?.capability;
2145
+ // definition) carry CEL the kernel evaluates by other rules. The
2146
+ // capability is INHERITED along `extends` — an inheritance kind
2147
+ // writes none of its own — and reading the declared one left the
2148
+ // rule off for every such kind, and its expressions untyped.
2149
+ const resolveDef = (k) => defs.resolve(aliases.resolveKind(k) ?? k) ?? defs.resolve(k);
2150
+ const capability = e.definition
2151
+ ? inheritedCapability(e.definition, resolveDef)
2152
+ : undefined;
2121
2153
  celRuleApplies =
2122
2154
  !!e.definition?.schema && capability !== undefined && capability !== "Telo.Template";
2123
2155
  if (celRuleApplies) {
@@ -2129,12 +2161,14 @@ export class StaticAnalyzer {
2129
2161
  // the own schema here reported `CEL_IN_NON_EVAL_FIELD` for an
2130
2162
  // expression the runtime evaluates correctly, which is the two halves
2131
2163
  // disagreeing about what the manifest means.
2132
- const ownSchema = effectiveAuthorSchema(e.definition, (k) => defs.resolve(aliases.resolveKind(k) ?? k) ?? defs.resolve(k));
2164
+ const ownSchema = effectiveAuthorSchema(e.definition, resolveDef);
2133
2165
  const capabilityDef = capability ? defs.resolve(capability) : undefined;
2134
2166
  // A `Telo.Provider`'s fields are implicitly compile-eval — the
2135
2167
  // capability abstract carries the root annotation — so its reads are
2136
- // covered here without the provider restating anything.
2137
- celSites = mergeCelEvalSites(celEvalSites(ownSchema), celEvalSites(capabilityDef?.schema));
2168
+ // covered here without the provider restating anything. A base-form
2169
+ // child's own fields are too (`implicitEvalSites`): `base:` reads
2170
+ // them once at create().
2171
+ celSites = mergeCelEvalSites(celEvalSites(ownSchema), celEvalSites(capabilityDef?.schema), implicitEvalSites(e.definition));
2138
2172
  }
2139
2173
  else {
2140
2174
  celSites = NO_CEL_EVAL_SITES;
@@ -2403,10 +2437,13 @@ export class StaticAnalyzer {
2403
2437
  diagnostics.push(...validateThrowsCoverage(allManifests, defs, aliases, this.celEnv, aliasesByModule, rootModules, libraryManifests));
2404
2438
  // Warn about declared variables / secrets / ports that no CEL references.
2405
2439
  diagnostics.push(...validateUnusedDeclarations(allManifests, this.celEnv));
2406
- // A `!ref` at a definition's dispatch slot must name a sibling `resources:`
2407
- // entry — the slot no reference pass reaches, so the tag would otherwise
2408
- // advertise a resolution nothing performs.
2409
- diagnostics.push(...validateTemplateDispatch(allManifests, rootModules));
2440
+ // A template body's reference surface its entry names, its dispatch slots
2441
+ // and the ref slots inside each entry — which no reference pass reaches,
2442
+ // since a `Telo.Definition` is in both skip sets.
2443
+ diagnostics.push(...validateTemplateBody(allManifests, defs, aliases, aliasesByModule, rootModules));
2444
+ // A library's export list, resolved against what it declares — otherwise a
2445
+ // listed name that exists nowhere fails in the consumer's file.
2446
+ diagnostics.push(...validateExports(allManifests, defs, aliases, rootModules));
2410
2447
  // A library's declared resource inputs, and every import that supplies them.
2411
2448
  diagnostics.push(...validateResourceInputs(allManifests, defs, aliases, rootModules, (supplied, required, isDeclaration) => kindSatisfies(supplied, required, defs, isDeclaration)));
2412
2449
  // Reroute diagnostics on synthetic (inline-extracted) resources back to
@@ -1 +1 @@
1
- {"version":3,"file":"builtins.d.ts","sourceRoot":"","sources":["../src/builtins.ts"],"names":[],"mappings":"AAyBA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC;AA8OvD,eAAO,MAAM,eAAe,EAAE,kBAAkB,EA+tB/C,CAAC"}
1
+ {"version":3,"file":"builtins.d.ts","sourceRoot":"","sources":["../src/builtins.ts"],"names":[],"mappings":"AAiFA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC;AA8OvD,eAAO,MAAM,eAAe,EAAE,kBAAkB,EA2pB/C,CAAC"}
package/dist/builtins.js CHANGED
@@ -20,6 +20,60 @@ const observedStateSlot = {
20
20
  description: "What a resource of this kind reports while running, published at `resources.<name>.status.<field>`.",
21
21
  $ref: manifestFragmentRef("JsonSchema7"),
22
22
  };
23
+ /** The `self`-only CEL scope a dispatch slot's name template is written in. */
24
+ const dispatchSelfContext = {
25
+ type: "object",
26
+ additionalProperties: false,
27
+ properties: { self: { "x-telo-context-from-root": "schema" } },
28
+ };
29
+ /**
30
+ * A `Telo.Definition` dispatch slot: which `resources:` entry receives the call.
31
+ *
32
+ * Three shapes, and the union is what keeps the slot CONSTRAINED for manifests
33
+ * no pass walks — `validate-template-body` resolves the target and its
34
+ * capability, but it is entry-scoped, so a dependency's definition would
35
+ * otherwise have nothing checking this slot at all. An array or a number fails
36
+ * every branch here, which is the floor AJV used to provide.
37
+ *
38
+ * `anyOf`, never `oneOf`: a `!ref` sentinel is an object, so it would match both
39
+ * the sentinel branch and any permissive object branch and then fail for
40
+ * matching twice. That is also how the sentinel used to pass — the legacy object
41
+ * branch required nothing, so it accepted one by accident; here it is a branch
42
+ * of its own that says so.
43
+ */
44
+ function dispatchSlot(title, description) {
45
+ return {
46
+ title,
47
+ description,
48
+ anyOf: [
49
+ // `!ref <entry>` — the spelling to write.
50
+ {
51
+ type: "object",
52
+ required: ["__tagged", "engine", "source"],
53
+ properties: {
54
+ __tagged: { const: true },
55
+ engine: { const: "ref" },
56
+ source: { type: "string", minLength: 1 },
57
+ },
58
+ additionalProperties: false,
59
+ },
60
+ // Legacy: a name template expanded against `self`. Read forever, because
61
+ // published artifacts carry it; `DEPRECATED_TEMPLATE_DISPATCH_FORM` is
62
+ // what moves an author off it.
63
+ { type: "string", "x-telo-context": dispatchSelfContext },
64
+ // Legacy: `{ kind?, name }`, where `name` is that same template.
65
+ {
66
+ type: "object",
67
+ required: ["name"],
68
+ properties: {
69
+ kind: { type: "string" },
70
+ name: { type: "string", "x-telo-context": dispatchSelfContext },
71
+ },
72
+ additionalProperties: true,
73
+ },
74
+ ],
75
+ };
76
+ }
23
77
  /** Descriptive provenance a module declares about itself, shared by
24
78
  * `Telo.Application` and `Telo.Library`.
25
79
  *
@@ -459,99 +513,19 @@ export const KERNEL_BUILTINS = [
459
513
  },
460
514
  },
461
515
  },
462
- invoke: {
463
- oneOf: [
464
- {
465
- type: "string",
466
- "x-telo-context": {
467
- type: "object",
468
- additionalProperties: false,
469
- properties: {
470
- self: { "x-telo-context-from-root": "schema" },
471
- },
472
- },
473
- },
474
- {
475
- type: "object",
476
- additionalProperties: true,
477
- properties: {
478
- kind: { type: "string" },
479
- name: {
480
- type: "string",
481
- "x-telo-context": {
482
- type: "object",
483
- additionalProperties: false,
484
- properties: {
485
- self: { "x-telo-context-from-root": "schema" },
486
- },
487
- },
488
- },
489
- },
490
- },
491
- ],
492
- },
493
- provide: {
494
- type: "object",
495
- additionalProperties: true,
496
- properties: {
497
- kind: { type: "string" },
498
- name: {
499
- type: "string",
500
- "x-telo-context": {
501
- type: "object",
502
- additionalProperties: false,
503
- properties: {
504
- self: { "x-telo-context-from-root": "schema" },
505
- },
506
- },
507
- },
508
- },
509
- },
510
- run: {
511
- type: "string",
512
- "x-telo-context": {
513
- type: "object",
514
- additionalProperties: false,
515
- properties: {
516
- self: { "x-telo-context-from-root": "schema" },
517
- },
518
- },
519
- },
520
- // Mount dispatch: names the `resources:` entry (a Telo.Mount, e.g. an
521
- // Http.Api) whose `register()` this definition delegates to. Same
522
- // string / { kind, name } grammar as `invoke:`. The named child stays
523
- // persistent so the produced mount's routes can `!ref` its siblings.
524
- mount: {
525
- oneOf: [
526
- {
527
- type: "string",
528
- "x-telo-context": {
529
- type: "object",
530
- additionalProperties: false,
531
- properties: {
532
- self: { "x-telo-context-from-root": "schema" },
533
- },
534
- },
535
- },
536
- {
537
- type: "object",
538
- additionalProperties: true,
539
- properties: {
540
- kind: { type: "string" },
541
- name: {
542
- type: "string",
543
- "x-telo-context": {
544
- type: "object",
545
- additionalProperties: false,
546
- properties: {
547
- self: { "x-telo-context-from-root": "schema" },
548
- },
549
- },
550
- },
551
- },
552
- },
553
- ],
554
- },
516
+ // A dispatch slot names the `resources:` entry that receives the call,
517
+ // as `!ref <entry>` — the one spelling every reference in Telo has. The
518
+ // string and `{ kind, name }` forms it used to admit (a CEL name
519
+ // template matched against CEL-named entries) were the removed
520
+ // reference object surviving in the one place nothing resolved it;
521
+ // `validate-template-body` is what resolves this slot, so the schema
522
+ // stays open here rather than reporting the same defect twice.
523
+ invoke: dispatchSlot("Invoke target", "The `resources:` entry whose `invoke()` this kind dispatches to, as `!ref <entry>`."),
524
+ provide: dispatchSlot("Provide target", "The `resources:` entry whose `invoke()` produces this provider's value, as `!ref <entry>`."),
525
+ run: dispatchSlot("Run target", "The `resources:` entry whose `run()` this kind dispatches to, as `!ref <entry>`."),
526
+ // The named child stays persistent so the produced mount's routes can
527
+ // `!ref` its siblings.
528
+ mount: dispatchSlot("Mount target", "The `resources:` entry (a Telo.Mount, e.g. an Http.Api) whose `register()` this kind delegates to, as `!ref <entry>`."),
555
529
  inputs: {
556
530
  type: "object",
557
531
  additionalProperties: true,
@@ -572,11 +546,11 @@ export const KERNEL_BUILTINS = [
572
546
  additionalProperties: false,
573
547
  properties: {
574
548
  self: { "x-telo-context-from-root": "schema" },
549
+ // Typed from the dispatch target's declared output: the slot
550
+ // holds a `!ref` to a `resources:` entry, resolved to that
551
+ // entry's kind (or its own `outputType`, where it narrows one).
575
552
  result: {
576
- "x-telo-context-from-ref-kind": [
577
- "provide/kind#outputType",
578
- "invoke/kind#outputType",
579
- ],
553
+ "x-telo-context-from-ref-kind": ["provide#outputType", "invoke#outputType"],
580
554
  },
581
555
  },
582
556
  },
@@ -1 +1 @@
1
- {"version":3,"file":"cel-scope-query.d.ts","sourceRoot":"","sources":["../src/cel-scope-query.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AACH,OAAO,KAAK,EAAsB,gBAAgB,EAAE,MAAM,cAAc,CAAC;AACzE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AACxD,OAAO,EAAE,aAAa,EAAqB,MAAM,qBAAqB,CAAC;AAEvE,OAAO,EAAoB,KAAK,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AACjE,OAAO,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AAkB9D;;;sCAGsC;AACtC,MAAM,WAAW,sBAAsB;IACrC,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb;;;;iEAI6D;IAC7D,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAoBD;gEACgE;AAChE,MAAM,WAAW,oBAAoB;IACnC,IAAI,EAAE,kBAAkB,CAAC;IACzB,OAAO,EAAE,aAAa,CAAC;IACvB,eAAe,EAAE,GAAG,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC;CAC7C;AAED;;;;;;GAMG;AACH,qBAAa,aAAa;IActB,OAAO,CAAC,QAAQ,CAAC,SAAS;IAb5B,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAmB;IAC5C;;oDAEgD;IAChD,OAAO,CAAC,OAAO,CAA+B;IAC9C;;;;sEAIkE;IAClE,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAsD;gBAG9D,SAAS,EAAE,gBAAgB,EAAE,EAC9C,GAAG,EAAE,oBAAoB,EACzB,MAAM,CAAC,EAAE,WAAW;IAgCtB,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAuB;IAE3C;+DAC2D;IAC3D,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,EAAE,IAAI,EAAE,MAAM,GAAG,SAAS,GAAG,gBAAgB,GAAG,SAAS;IAI7F;;;;;;;OAOG;IACH,OAAO,CAAC,QAAQ,EAAE,gBAAgB,EAAE,IAAI,EAAE,MAAM,GAAG,QAAQ;IAe3D;;;;;;;;;;;;;;;;;;OAkBG;IACH,sBAAsB,CACpB,QAAQ,EAAE,gBAAgB,EAC1B,QAAQ,EAAE,MAAM,EAChB,KAAK,EAAE,MAAM,EAAE,GACd,sBAAsB,GAAG,SAAS;IA0CrC;oFACgF;IAChF,OAAO,CAAC,QAAQ;IAgFhB;;;;;;;;;;OAUG;IACH,mBAAmB,CAAC,QAAQ,EAAE,gBAAgB,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS;IAqBrF;;;;;;;sDAOkD;IAClD,OAAO,CAAC,aAAa;IAOrB;wEACoE;IACpE,OAAO,CAAC,YAAY;CAarB"}
1
+ {"version":3,"file":"cel-scope-query.d.ts","sourceRoot":"","sources":["../src/cel-scope-query.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AACH,OAAO,KAAK,EAAsB,gBAAgB,EAAE,MAAM,cAAc,CAAC;AACzE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AACxD,OAAO,EAAE,aAAa,EAAqB,MAAM,qBAAqB,CAAC;AAEvE,OAAO,EAAoB,KAAK,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AACjE,OAAO,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AAmB9D;;;sCAGsC;AACtC,MAAM,WAAW,sBAAsB;IACrC,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb;;;;iEAI6D;IAC7D,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAoBD;gEACgE;AAChE,MAAM,WAAW,oBAAoB;IACnC,IAAI,EAAE,kBAAkB,CAAC;IACzB,OAAO,EAAE,aAAa,CAAC;IACvB,eAAe,EAAE,GAAG,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC;CAC7C;AAED;;;;;;GAMG;AACH,qBAAa,aAAa;IActB,OAAO,CAAC,QAAQ,CAAC,SAAS;IAb5B,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAmB;IAC5C;;oDAEgD;IAChD,OAAO,CAAC,OAAO,CAA+B;IAC9C;;;;sEAIkE;IAClE,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAsD;gBAG9D,SAAS,EAAE,gBAAgB,EAAE,EAC9C,GAAG,EAAE,oBAAoB,EACzB,MAAM,CAAC,EAAE,WAAW;IAgCtB,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAuB;IAE3C;+DAC2D;IAC3D,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,EAAE,IAAI,EAAE,MAAM,GAAG,SAAS,GAAG,gBAAgB,GAAG,SAAS;IAI7F;;;;;;;OAOG;IACH,OAAO,CAAC,QAAQ,EAAE,gBAAgB,EAAE,IAAI,EAAE,MAAM,GAAG,QAAQ;IAe3D;;;;;;;;;;;;;;;;;;OAkBG;IACH,sBAAsB,CACpB,QAAQ,EAAE,gBAAgB,EAC1B,QAAQ,EAAE,MAAM,EAChB,KAAK,EAAE,MAAM,EAAE,GACd,sBAAsB,GAAG,SAAS;IA0CrC;oFACgF;IAChF,OAAO,CAAC,QAAQ;IAkGhB;;;;;;;;;;OAUG;IACH,mBAAmB,CAAC,QAAQ,EAAE,gBAAgB,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS;IAqBrF;;;;;;;sDAOkD;IAClD,OAAO,CAAC,aAAa;IAOrB;wEACoE;IACpE,OAAO,CAAC,YAAY;CAarB"}
@@ -4,6 +4,7 @@ import { buildKernelGlobalsIndex } from "./kernel-globals.js";
4
4
  import { moduleAliasScope } from "./module-alias-scope.js";
5
5
  import { isModuleKind } from "./module-kinds.js";
6
6
  import { navigateConcretePath } from "./manifest-path.js";
7
+ import { kindAtPath } from "./validate-cel-context.js";
7
8
  import { findManifest } from "./find-manifest.js";
8
9
  import { resolveLocalRef, walkStepArray } from "./schema-walk.js";
9
10
  import { readStepSlot } from "./step-slot.js";
@@ -200,16 +201,30 @@ export class CelScopeQuery {
200
201
  return { manifest: target, path: refFrom.slice(slash + 1).split("/").join("."), propertyMap: false };
201
202
  }
202
203
  // A kind's own declaration: the target is the `Telo.Definition` document,
203
- // which is an ordinary manifest in the set.
204
+ // which is an ordinary manifest in the set. The slot holds a `!ref` to a
205
+ // `resources:` entry; the entry's own field wins where it narrows one, else
206
+ // the declaration is the entry's KIND. The first slot that resolves to an
207
+ // entry is the one the type resolver reads, so it is the one navigated.
204
208
  const fromRefKind = annotated["x-telo-context-from-ref-kind"];
205
- const first = Array.isArray(fromRefKind) ? fromRefKind[0] : fromRefKind;
206
- if (typeof first === "string") {
207
- const hash = first.indexOf("#");
209
+ const slots = Array.isArray(fromRefKind) ? fromRefKind : [fromRefKind];
210
+ for (const slotSpec of slots) {
211
+ if (typeof slotSpec !== "string")
212
+ continue;
213
+ const hash = slotSpec.indexOf("#");
214
+ // `continue`, never `return`: a malformed spec is one entry of a list the
215
+ // type resolver walks to the end, and aborting here made the two answer
216
+ // differently for the same annotation.
208
217
  if (hash <= 0)
209
- return undefined;
210
- const kindValue = navigateConcretePath(root, first.slice(0, hash).split("/").join("."));
211
- if (typeof kindValue !== "string")
212
- return undefined;
218
+ continue;
219
+ const field = slotSpec.slice(hash + 1);
220
+ const namedKind = kindAtPath(root, slotSpec.slice(0, hash));
221
+ if (!namedKind)
222
+ continue;
223
+ if (namedKind.entry?.[field] !== undefined) {
224
+ const index = root.resources.indexOf(namedKind.entry);
225
+ return { manifest: resource, path: `resources[${index}].${field}`, propertyMap: false };
226
+ }
227
+ const kindValue = namedKind.kind;
213
228
  // The kind was read off THIS resource, so it is spelled in the alias scope
214
229
  // of the module that declared it — not the entry's.
215
230
  const scope = moduleAliasScope(resource.metadata, this.ctx.aliases, this.ctx.aliasesByModule);
@@ -229,10 +244,16 @@ export class CelScopeQuery {
229
244
  const target = (owningModule
230
245
  ? named.find((m) => m.metadata?.module === owningModule)
231
246
  : undefined) ?? (owningModule && named.length > 1 ? undefined : named[0]);
232
- if (!target)
233
- return undefined;
234
- return { manifest: target, path: first.slice(hash + 1), propertyMap: false };
247
+ // Fall through to the next spec when this one names no kind, or names one
248
+ // that does not declare the field — the same order the TYPE resolver
249
+ // takes, so go-to-declaration lands where the type came from instead of on
250
+ // a field the target never had.
251
+ if (!target || target[field] === undefined)
252
+ continue;
253
+ return { manifest: target, path: field, propertyMap: false };
235
254
  }
255
+ if (slots.some((s) => typeof s === "string"))
256
+ return undefined;
236
257
  // `x-telo-context-element-from` / `-collection-from` type a binding from an
237
258
  // EXPRESSION, so there is no declaration to navigate to.
238
259
  return undefined;
@@ -1 +1 @@
1
- {"version":3,"file":"cel-scope.d.ts","sourceRoot":"","sources":["../src/cel-scope.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"cel-scope.d.ts","sourceRoot":"","sources":["../src/cel-scope.ts"],"names":[],"mappings":"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"}
package/dist/cel-scope.js CHANGED
@@ -444,6 +444,7 @@ export class CelScopeResolver {
444
444
  manifestRoot: rootForResolver,
445
445
  defs,
446
446
  aliases,
447
+ aliasesByModule: scopes?.aliasesByModule,
447
448
  allManifests: allManifests,
448
449
  });
449
450
  return mergeKernelGlobalsIntoContext(withBindingNames(resolved, rootManifest),
@@ -73,6 +73,32 @@ export interface CelEvalSites {
73
73
  }
74
74
  export declare const NO_CEL_EVAL_SITES: CelEvalSites;
75
75
  export declare function celEvalSites(schema: Record<string, any> | undefined): CelEvalSites;
76
+ /**
77
+ * A BASE-FORM CHILD'S OWN FIELDS ARE COMPILE-EVAL WITHOUT ANNOTATION.
78
+ *
79
+ * A definition with `base:` has no controller of its own: the kernel evaluates
80
+ * the mapping once, at `create()`, against `self` — the instance's config — and
81
+ * hands the result to the inherited controller as the parent's config. The
82
+ * child's own schema fields never reach a controller; they exist to be read by
83
+ * `base:`, and the mapping expands whatever compiled value it reads. So every
84
+ * own field is evaluated exactly once at creation against the startup scope,
85
+ * which is what compile-eval IS. Declared here as the rule rather than left as a
86
+ * property of the mapping walk — the `Telo.Provider` posture, where a
87
+ * construction-time-only surface declares compile-eval once for all its fields
88
+ * rather than per field. Without it the rule was off for every inheritance kind
89
+ * (its capability is inherited, so the gate read `undefined`) and the
90
+ * expressions were never typed either: a `!cel "variables.whoo"` passed `telo
91
+ * check` and failed at boot.
92
+ *
93
+ * Read by the kernel's instance production and the analyzer's coverage decision,
94
+ * so the two cannot disagree about which fields a base child evaluates. An
95
+ * explicitly `runtime` own field still wins, through the same overlap rule a
96
+ * root `x-telo-eval: compile` follows.
97
+ */
98
+ export declare const IMPLICIT_COMPILE_SITES: CelEvalSites;
99
+ export declare function implicitEvalSites(definition: {
100
+ base?: unknown;
101
+ } | undefined): CelEvalSites;
76
102
  /** The union of several schemas' sites — a kind's own and its capability
77
103
  * abstract's, which is how a `Telo.Provider`'s implicit compile-eval reaches
78
104
  * fields the provider never annotated. */
@@ -81,11 +107,16 @@ export declare function mergeCelEvalSites(...sites: CelEvalSites[]): CelEvalSite
81
107
  * Whether the value at `path` is evaluated, and when — null for a field whose
82
108
  * value is read as a literal.
83
109
  *
84
- * `compile` wins over `runtime`, and both win over a region: a field's own
85
- * annotation is more specific than the region it sits in, which is the same
86
- * precedence a nested annotation has over an enclosing one. A region resolves to
87
- * `runtime` because that is what a region IS a per-invocation scope naming
88
- * what its expressions can read.
110
+ * An annotated field wins over the region it sits in a field's own annotation
111
+ * is more specific than an enclosing one, and a region resolves to `runtime`
112
+ * because that is what a region IS, a per-invocation scope naming what its
113
+ * expressions can read. Between the two annotations, `runtime` wins wherever
114
+ * they OVERLAP and `compile` answers everywhere else.
115
+ *
116
+ * That overlap rule is the kernel's, read back: its compile expansion skips any
117
+ * compile path a runtime path contains or is contained by, and under a root
118
+ * `**` it skips per top-level key — so a runtime-annotated field under an
119
+ * implicit compile root stays runtime, here as at dispatch.
89
120
  *
90
121
  * `path` is the `walkCelExpressions` spelling (`routes[0].returns[1].when`).
91
122
  */
@@ -1 +1 @@
1
- {"version":3,"file":"eval-paths.d.ts","sourceRoot":"","sources":["../src/eval-paths.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAIH;;;;;;;;;;GAUG;AACH,wBAAgB,cAAc,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAKxE;AAED;+BAC+B;AAC/B,wBAAgB,cAAc,CAAC,SAAS,EAAE,SAAS,MAAM,EAAE,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAEtF;AAED;;;;GAIG;AACH,wBAAgB,cAAc,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG;IAC3D,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,OAAO,EAAE,MAAM,EAAE,CAAC;CACnB,CAcA;AAiCD;;uEAEuE;AACvE,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,OAAO,GAAG,OAAO,CAI1D;AAED;;;;;;;GAOG;AACH,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,IAAI,SAAM,GAAG,MAAM,EAAE,CAqBxF;AAED;;;;;;GAMG;AACH,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAoBzE;AAED;yEACyE;AACzE,MAAM,WAAW,YAAY;IAC3B,OAAO,EAAE,SAAS,MAAM,EAAE,CAAC;IAC3B,OAAO,EAAE,SAAS,MAAM,EAAE,CAAC;IAC3B,OAAO,EAAE,SAAS,MAAM,EAAE,CAAC;CAC5B;AAED,eAAO,MAAM,iBAAiB,EAAE,YAAwD,CAAC;AAEzF,wBAAgB,YAAY,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,SAAS,GAAG,YAAY,CAIlF;AAED;;2CAE2C;AAC3C,wBAAgB,iBAAiB,CAAC,GAAG,KAAK,EAAE,YAAY,EAAE,GAAG,YAAY,CAMxE;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,aAAa,CAC3B,KAAK,EAAE,YAAY,EACnB,IAAI,EAAE,MAAM,GACX,SAAS,GAAG,SAAS,GAAG,IAAI,CAK9B"}
1
+ {"version":3,"file":"eval-paths.d.ts","sourceRoot":"","sources":["../src/eval-paths.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAIH;;;;;;;;;;GAUG;AACH,wBAAgB,cAAc,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAKxE;AAED;+BAC+B;AAC/B,wBAAgB,cAAc,CAAC,SAAS,EAAE,SAAS,MAAM,EAAE,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAEtF;AAED;;;;GAIG;AACH,wBAAgB,cAAc,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG;IAC3D,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,OAAO,EAAE,MAAM,EAAE,CAAC;CACnB,CAcA;AAiCD;;uEAEuE;AACvE,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,OAAO,GAAG,OAAO,CAI1D;AAED;;;;;;;GAOG;AACH,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,IAAI,SAAM,GAAG,MAAM,EAAE,CAqBxF;AAED;;;;;;GAMG;AACH,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAoBzE;AAED;yEACyE;AACzE,MAAM,WAAW,YAAY;IAC3B,OAAO,EAAE,SAAS,MAAM,EAAE,CAAC;IAC3B,OAAO,EAAE,SAAS,MAAM,EAAE,CAAC;IAC3B,OAAO,EAAE,SAAS,MAAM,EAAE,CAAC;CAC5B;AAED,eAAO,MAAM,iBAAiB,EAAE,YAAwD,CAAC;AAEzF,wBAAgB,YAAY,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,SAAS,GAAG,YAAY,CAIlF;AAED;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,eAAO,MAAM,sBAAsB,EAAE,YAA4D,CAAC;AAElG,wBAAgB,iBAAiB,CAC/B,UAAU,EAAE;IAAE,IAAI,CAAC,EAAE,OAAO,CAAA;CAAE,GAAG,SAAS,GACzC,YAAY,CAEd;AAED;;2CAE2C;AAC3C,wBAAgB,iBAAiB,CAAC,GAAG,KAAK,EAAE,YAAY,EAAE,GAAG,YAAY,CAMxE;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,aAAa,CAC3B,KAAK,EAAE,YAAY,EACnB,IAAI,EAAE,MAAM,GACX,SAAS,GAAG,SAAS,GAAG,IAAI,CAY9B"}
@@ -160,6 +160,32 @@ export function celEvalSites(schema) {
160
160
  const { compile, runtime } = buildEvalPaths(schema);
161
161
  return { compile, runtime, regions: extractCelRegionScopes(schema) };
162
162
  }
163
+ /**
164
+ * A BASE-FORM CHILD'S OWN FIELDS ARE COMPILE-EVAL WITHOUT ANNOTATION.
165
+ *
166
+ * A definition with `base:` has no controller of its own: the kernel evaluates
167
+ * the mapping once, at `create()`, against `self` — the instance's config — and
168
+ * hands the result to the inherited controller as the parent's config. The
169
+ * child's own schema fields never reach a controller; they exist to be read by
170
+ * `base:`, and the mapping expands whatever compiled value it reads. So every
171
+ * own field is evaluated exactly once at creation against the startup scope,
172
+ * which is what compile-eval IS. Declared here as the rule rather than left as a
173
+ * property of the mapping walk — the `Telo.Provider` posture, where a
174
+ * construction-time-only surface declares compile-eval once for all its fields
175
+ * rather than per field. Without it the rule was off for every inheritance kind
176
+ * (its capability is inherited, so the gate read `undefined`) and the
177
+ * expressions were never typed either: a `!cel "variables.whoo"` passed `telo
178
+ * check` and failed at boot.
179
+ *
180
+ * Read by the kernel's instance production and the analyzer's coverage decision,
181
+ * so the two cannot disagree about which fields a base child evaluates. An
182
+ * explicitly `runtime` own field still wins, through the same overlap rule a
183
+ * root `x-telo-eval: compile` follows.
184
+ */
185
+ export const IMPLICIT_COMPILE_SITES = { compile: ["**"], runtime: [], regions: [] };
186
+ export function implicitEvalSites(definition) {
187
+ return definition?.base != null ? IMPLICIT_COMPILE_SITES : NO_CEL_EVAL_SITES;
188
+ }
163
189
  /** The union of several schemas' sites — a kind's own and its capability
164
190
  * abstract's, which is how a `Telo.Provider`'s implicit compile-eval reaches
165
191
  * fields the provider never annotated. */
@@ -174,16 +200,27 @@ export function mergeCelEvalSites(...sites) {
174
200
  * Whether the value at `path` is evaluated, and when — null for a field whose
175
201
  * value is read as a literal.
176
202
  *
177
- * `compile` wins over `runtime`, and both win over a region: a field's own
178
- * annotation is more specific than the region it sits in, which is the same
179
- * precedence a nested annotation has over an enclosing one. A region resolves to
180
- * `runtime` because that is what a region IS a per-invocation scope naming
181
- * what its expressions can read.
203
+ * An annotated field wins over the region it sits in a field's own annotation
204
+ * is more specific than an enclosing one, and a region resolves to `runtime`
205
+ * because that is what a region IS, a per-invocation scope naming what its
206
+ * expressions can read. Between the two annotations, `runtime` wins wherever
207
+ * they OVERLAP and `compile` answers everywhere else.
208
+ *
209
+ * That overlap rule is the kernel's, read back: its compile expansion skips any
210
+ * compile path a runtime path contains or is contained by, and under a root
211
+ * `**` it skips per top-level key — so a runtime-annotated field under an
212
+ * implicit compile root stays runtime, here as at dispatch.
182
213
  *
183
214
  * `path` is the `walkCelExpressions` spelling (`routes[0].returns[1].when`).
184
215
  */
185
216
  export function celEvalModeAt(sites, path) {
186
- if (evalPathsCover(sites.compile, path))
217
+ const compiled = sites.compile.some((p) => {
218
+ if (!evalPathCovers(p, path))
219
+ return false;
220
+ const effective = p === "**" ? topLevelKey(path) : p;
221
+ return !sites.runtime.some((rp) => evalPathCovers(rp, effective) || evalPathCovers(effective, rp));
222
+ });
223
+ if (compiled)
187
224
  return "compile";
188
225
  if (evalPathsCover(sites.runtime, path))
189
226
  return "runtime";
@@ -191,3 +228,7 @@ export function celEvalModeAt(sites, path) {
191
228
  return "runtime";
192
229
  return null;
193
230
  }
231
+ function topLevelKey(path) {
232
+ const end = path.search(/[.[]/);
233
+ return end === -1 ? path : path.slice(0, end);
234
+ }
@@ -36,6 +36,18 @@ export declare function inheritedCapability(def: ResourceDefinition | undefined,
36
36
  * `mergeTypeSchemas` that `Type.JsonSchema.extends` uses.
37
37
  * - no `extends` → the own schema unchanged. */
38
38
  export declare function effectiveAuthorSchema(def: ResourceDefinition | undefined, resolve: DefResolver): Record<string, any>;
39
+ /**
40
+ * The parent's required fields that a merge-form child leaves on its OWN author
41
+ * surface — inherited by the rule above, and not redeclared by the child.
42
+ *
43
+ * The one fact behind a confusing diagnostic: a kind written to wire a field
44
+ * internally still demands it from its consumer, because without `base:` the
45
+ * child is authored against merge(parent, own) and the parent's `required` comes
46
+ * along. Empty for a child with `base:` (its surface is its own schema) and for
47
+ * a kind that extends nothing, so a caller can use a non-empty result as the
48
+ * condition itself.
49
+ */
50
+ export declare function inheritedRequiredFields(def: ResourceDefinition | undefined, resolve: DefResolver): string[];
39
51
  /**
40
52
  * The fields a merge-form inheriting child publishes over its parent's reading.
41
53
  *
@@ -1 +1 @@
1
- {"version":3,"file":"extends-resolution.d.ts","sourceRoot":"","sources":["../src/extends-resolution.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC;AAGvD;;;;;;;2DAO2D;AAC3D,MAAM,MAAM,WAAW,GAAG,CACxB,IAAI,EAAE,MAAM,EACZ,IAAI,CAAC,EAAE,kBAAkB,KACtB,kBAAkB,GAAG,SAAS,CAAC;AA0BpC;sDACsD;AACtD,wBAAgB,aAAa,CAC3B,GAAG,EAAE,kBAAkB,GAAG,SAAS,EACnC,OAAO,EAAE,WAAW,GACnB,kBAAkB,GAAG,SAAS,CAIhC;AAED;6EAC6E;AAC7E,wBAAgB,aAAa,CAC3B,GAAG,EAAE,kBAAkB,GAAG,SAAS,EACnC,OAAO,EAAE,WAAW,GACnB,kBAAkB,EAAE,CAUtB;AAED;iFACiF;AACjF,wBAAgB,0BAA0B,CAAC,GAAG,EAAE,kBAAkB,GAAG,SAAS,GAAG,OAAO,CAUvF;AAED;;mFAEmF;AACnF,wBAAgB,yBAAyB,CACvC,GAAG,EAAE,kBAAkB,GAAG,SAAS,EACnC,OAAO,EAAE,WAAW,GACnB,kBAAkB,GAAG,SAAS,CAMhC;AAED;;sCAEsC;AACtC,wBAAgB,qBAAqB,CACnC,GAAG,EAAE,kBAAkB,GAAG,SAAS,EACnC,OAAO,EAAE,WAAW,GACnB,OAAO,CAGT;AAED;2EAC2E;AAC3E,wBAAgB,mBAAmB,CACjC,GAAG,EAAE,kBAAkB,GAAG,SAAS,EACnC,OAAO,EAAE,WAAW,GACnB,MAAM,GAAG,SAAS,CAMpB;AAED;;;;;;iDAMiD;AACjD,wBAAgB,qBAAqB,CACnC,GAAG,EAAE,kBAAkB,GAAG,SAAS,EACnC,OAAO,EAAE,WAAW,GACnB,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAOrB;AAED;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAgB,kBAAkB,CAChC,GAAG,EAAE,kBAAkB,GAAG,SAAS,EACnC,OAAO,EAAE,WAAW,GACnB,MAAM,EAAE,CASV;AAED;;eAEe;AACf,MAAM,MAAM,iBAAiB,GAAG,WAAW,GAAG,YAAY,CAAC;AAE3D;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAgB,sBAAsB,CACpC,GAAG,EAAE,kBAAkB,GAAG,SAAS,EACnC,OAAO,EAAE,WAAW,EACpB,SAAS,EAAE,iBAAiB,GAC3B,OAAO,CAQT;AAED;;;6BAG6B;AAC7B,wBAAgB,gBAAgB,CAC9B,GAAG,EAAE,kBAAkB,GAAG,SAAS,EACnC,OAAO,EAAE,WAAW,EACpB,SAAS,EAAE,iBAAiB,GAC3B,kBAAkB,GAAG,SAAS,CAShC;AAED;;;;;8CAK8C;AAC9C,wBAAgB,oBAAoB,CAClC,GAAG,EAAE,kBAAkB,GAAG,SAAS,EACnC,OAAO,EAAE,WAAW,EACpB,SAAS,EAAE,iBAAiB,GAC3B,OAAO,CAKT;AAED;;8EAE8E;AAC9E,wBAAgB,eAAe,CAAC,SAAS,EAAE,iBAAiB,GAAG,QAAQ,GAAG,QAAQ,CAEjF;AAED;;;;;;;;;gDASgD;AAChD,wBAAgB,qBAAqB,CACnC,GAAG,EAAE,kBAAkB,GAAG,SAAS,EACnC,OAAO,EAAE,WAAW,GACnB,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,SAAS,CASjC"}
1
+ {"version":3,"file":"extends-resolution.d.ts","sourceRoot":"","sources":["../src/extends-resolution.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC;AAGvD;;;;;;;2DAO2D;AAC3D,MAAM,MAAM,WAAW,GAAG,CACxB,IAAI,EAAE,MAAM,EACZ,IAAI,CAAC,EAAE,kBAAkB,KACtB,kBAAkB,GAAG,SAAS,CAAC;AA0BpC;sDACsD;AACtD,wBAAgB,aAAa,CAC3B,GAAG,EAAE,kBAAkB,GAAG,SAAS,EACnC,OAAO,EAAE,WAAW,GACnB,kBAAkB,GAAG,SAAS,CAIhC;AAED;6EAC6E;AAC7E,wBAAgB,aAAa,CAC3B,GAAG,EAAE,kBAAkB,GAAG,SAAS,EACnC,OAAO,EAAE,WAAW,GACnB,kBAAkB,EAAE,CAUtB;AAED;iFACiF;AACjF,wBAAgB,0BAA0B,CAAC,GAAG,EAAE,kBAAkB,GAAG,SAAS,GAAG,OAAO,CAUvF;AAED;;mFAEmF;AACnF,wBAAgB,yBAAyB,CACvC,GAAG,EAAE,kBAAkB,GAAG,SAAS,EACnC,OAAO,EAAE,WAAW,GACnB,kBAAkB,GAAG,SAAS,CAMhC;AAED;;sCAEsC;AACtC,wBAAgB,qBAAqB,CACnC,GAAG,EAAE,kBAAkB,GAAG,SAAS,EACnC,OAAO,EAAE,WAAW,GACnB,OAAO,CAGT;AAED;2EAC2E;AAC3E,wBAAgB,mBAAmB,CACjC,GAAG,EAAE,kBAAkB,GAAG,SAAS,EACnC,OAAO,EAAE,WAAW,GACnB,MAAM,GAAG,SAAS,CAMpB;AAED;;;;;;iDAMiD;AACjD,wBAAgB,qBAAqB,CACnC,GAAG,EAAE,kBAAkB,GAAG,SAAS,EACnC,OAAO,EAAE,WAAW,GACnB,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAOrB;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,uBAAuB,CACrC,GAAG,EAAE,kBAAkB,GAAG,SAAS,EACnC,OAAO,EAAE,WAAW,GACnB,MAAM,EAAE,CAQV;AAED;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAgB,kBAAkB,CAChC,GAAG,EAAE,kBAAkB,GAAG,SAAS,EACnC,OAAO,EAAE,WAAW,GACnB,MAAM,EAAE,CASV;AAED;;eAEe;AACf,MAAM,MAAM,iBAAiB,GAAG,WAAW,GAAG,YAAY,CAAC;AAE3D;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAgB,sBAAsB,CACpC,GAAG,EAAE,kBAAkB,GAAG,SAAS,EACnC,OAAO,EAAE,WAAW,EACpB,SAAS,EAAE,iBAAiB,GAC3B,OAAO,CAQT;AAED;;;6BAG6B;AAC7B,wBAAgB,gBAAgB,CAC9B,GAAG,EAAE,kBAAkB,GAAG,SAAS,EACnC,OAAO,EAAE,WAAW,EACpB,SAAS,EAAE,iBAAiB,GAC3B,kBAAkB,GAAG,SAAS,CAShC;AAED;;;;;8CAK8C;AAC9C,wBAAgB,oBAAoB,CAClC,GAAG,EAAE,kBAAkB,GAAG,SAAS,EACnC,OAAO,EAAE,WAAW,EACpB,SAAS,EAAE,iBAAiB,GAC3B,OAAO,CAKT;AAED;;8EAE8E;AAC9E,wBAAgB,eAAe,CAAC,SAAS,EAAE,iBAAiB,GAAG,QAAQ,GAAG,QAAQ,CAEjF;AAED;;;;;;;;;gDASgD;AAChD,wBAAgB,qBAAqB,CACnC,GAAG,EAAE,kBAAkB,GAAG,SAAS,EACnC,OAAO,EAAE,WAAW,GACnB,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,SAAS,CASjC"}