behavior-contracts 0.7.3 → 0.8.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 (63) hide show
  1. package/README.md +0 -1
  2. package/dist/authoring.d.ts +215 -3
  3. package/dist/authoring.d.ts.map +1 -1
  4. package/dist/authoring.js +269 -8
  5. package/dist/authoring.js.map +1 -1
  6. package/dist/behavior.d.ts +22 -1
  7. package/dist/behavior.d.ts.map +1 -1
  8. package/dist/behavior.js +23 -1
  9. package/dist/behavior.js.map +1 -1
  10. package/dist/bind.d.ts +64 -0
  11. package/dist/bind.d.ts.map +1 -0
  12. package/dist/bind.js +131 -0
  13. package/dist/bind.js.map +1 -0
  14. package/dist/builder.d.ts +30 -88
  15. package/dist/builder.d.ts.map +1 -1
  16. package/dist/builder.js +48 -56
  17. package/dist/builder.js.map +1 -1
  18. package/dist/expr-operator-types.d.ts +89 -0
  19. package/dist/expr-operator-types.d.ts.map +1 -0
  20. package/dist/expr-operator-types.js +134 -0
  21. package/dist/expr-operator-types.js.map +1 -0
  22. package/dist/generator/async-plan.d.ts.map +1 -1
  23. package/dist/generator/async-plan.js +4 -0
  24. package/dist/generator/async-plan.js.map +1 -1
  25. package/dist/generator/core.d.ts +15 -0
  26. package/dist/generator/core.d.ts.map +1 -1
  27. package/dist/generator/core.js +2 -0
  28. package/dist/generator/core.js.map +1 -1
  29. package/dist/generator/emit-php.d.ts.map +1 -1
  30. package/dist/generator/emit-php.js +1 -0
  31. package/dist/generator/emit-php.js.map +1 -1
  32. package/dist/generator/emit-python.d.ts.map +1 -1
  33. package/dist/generator/emit-python.js +1 -0
  34. package/dist/generator/emit-python.js.map +1 -1
  35. package/dist/generator/emit-straightline-typed-typescript.d.ts.map +1 -1
  36. package/dist/generator/emit-straightline-typed-typescript.js +1 -0
  37. package/dist/generator/emit-straightline-typed-typescript.js.map +1 -1
  38. package/dist/generator/emit-typed-native-go.d.ts.map +1 -1
  39. package/dist/generator/emit-typed-native-go.js +83 -12
  40. package/dist/generator/emit-typed-native-go.js.map +1 -1
  41. package/dist/generator/emit-typed-native-rust.d.ts.map +1 -1
  42. package/dist/generator/emit-typed-native-rust.js +83 -20
  43. package/dist/generator/emit-typed-native-rust.js.map +1 -1
  44. package/dist/generator/emit-typescript.d.ts.map +1 -1
  45. package/dist/generator/emit-typescript.js +24 -8
  46. package/dist/generator/emit-typescript.js.map +1 -1
  47. package/dist/generator/index.d.ts +1 -1
  48. package/dist/generator/index.d.ts.map +1 -1
  49. package/dist/generator/index.js +7 -5
  50. package/dist/generator/index.js.map +1 -1
  51. package/dist/index.d.ts +41 -8
  52. package/dist/index.d.ts.map +1 -1
  53. package/dist/index.js +27 -6
  54. package/dist/index.js.map +1 -1
  55. package/dist/provenance.d.ts +102 -0
  56. package/dist/provenance.d.ts.map +1 -0
  57. package/dist/provenance.js +128 -0
  58. package/dist/provenance.js.map +1 -0
  59. package/dist/type-gate.d.ts +63 -0
  60. package/dist/type-gate.d.ts.map +1 -0
  61. package/dist/type-gate.js +295 -0
  62. package/dist/type-gate.js.map +1 -0
  63. package/package.json +4 -3
package/dist/index.d.ts CHANGED
@@ -24,9 +24,10 @@ export declare const SPEC_VERSIONS: {
24
24
  readonly template: 1;
25
25
  readonly plan: 1;
26
26
  readonly canonical: 2;
27
- readonly behavior: 3;
28
- readonly guard: 1;
27
+ readonly behavior: 4;
28
+ readonly guard: 2;
29
29
  readonly c2: 1;
30
+ readonly provenance: 1;
30
31
  };
31
32
  /** validateEnvelope に渡す graphddb 形式の既定 supported 版(`"<major>.<minor>"`)。 */
32
33
  export declare const ENVELOPE_SPEC_VERSION: "1.1";
@@ -43,15 +44,47 @@ export { validateEnvelope, EnvelopeFailure } from "./envelope.js";
43
44
  export type { EnvelopeFailureCode } from "./envelope.js";
44
45
  export { assertPortable, assertPortableComponentGraph, assertPortableTypeNotation, PORTABLE_EXPR_OPERATORS, PORTABLE_SCALAR_TYPES, PortabilityError, } from "./guard.js";
45
46
  export { runBehavior, runBehaviorAsync, BehaviorFailure, fanoutDedupDrop } from "./behavior.js";
46
- export type { ComponentGraphIR, Component, BodyNode, ComponentRefNode, MapNode, CondNode, FanoutNode, FanoutDedupDropSpec, PortSchema, PortableType, PortableScalarType, CatalogEntry, CatalogOutput, Catalog, Handler, HandlerCtx, Handlers, AsyncHandler, AsyncHandlers, BehaviorFailureCode, } from "./behavior.js";
47
- export { buildComponentDefinition, BuilderFailure } from "./builder.js";
48
- export type { ComponentDefinitionData, BuildComponentDefinitionOptions, BuilderFailureCode, } from "./builder.js";
49
- export { SemanticBehavior, behavior, compileBehaviors, catalogComponents, when, concat, add, sub, mul, div, mod, neg, eq, ne, lt, le, gt, ge, and, or, not, coalesce, len, opt, referencedComponents, classifyBehaviorEffect, AuthoringFailure, } from "./authoring.js";
50
- export type { In, Recorded, BehaviorClass, CompileBehaviorsOptions, BehaviorEffect, AuthoringFailureCode, } from "./authoring.js";
47
+ export type { FanoutDedupDropSpec, PortSchema, PortableType, PortableScalarType, CatalogEntry, CatalogOutput, Catalog, Handler, HandlerCtx, Handlers, AsyncHandler, AsyncHandlers, BehaviorFailureCode, } from "./behavior.js";
48
+ import type { ComponentGraphIR as ComponentGraphIRShape, Component as ComponentShape, BodyNode as BodyNodeShape, ComponentRefNode as ComponentRefNodeShape, MapNode as MapNodeShape, CondNode as CondNodeShape, FanoutNode as FanoutNodeShape } from "./behavior.js";
49
+ declare const IR_BRAND: unique symbol;
50
+ /** module 外から充足不能な phantom brand(opaque IR handle の印)。 */
51
+ export interface IrBrand {
52
+ readonly [IR_BRAND]: "behavior-contracts/opaque-ir";
53
+ }
54
+ /** opaque な可搬 IR ルート handle(compile seam だけが生産できる — SA1/SA2)。 */
55
+ export type ComponentGraphIR = ComponentGraphIRShape & IrBrand;
56
+ /** opaque な合成コンポーネント(=公開メソッド)handle。 */
57
+ export type Component = ComponentShape & IrBrand;
58
+ /** opaque な body ノード handle(componentRef / map / cond / fanout)。 */
59
+ export type BodyNode = BodyNodeShape & IrBrand;
60
+ /** opaque な専用コンポーネント参照ノード handle。 */
61
+ export type ComponentRefNode = ComponentRefNodeShape & IrBrand;
62
+ /** opaque な map ノード handle。 */
63
+ export type MapNode = MapNodeShape & IrBrand;
64
+ /**
65
+ * `ComponentGraphIRDoc` — シリアライズ済み IR ドキュメント(**unbranded の構造型**)。JSON 境界を
66
+ * 越えて届く IR(conformance vector / codegen fixture / 生成モジュールの埋め込みリテラル)の型。
67
+ * これは token を持たない生データなので `loadCompiledIR(doc)` で adopt してから実行/生成に使う。
68
+ * 生成 TS モジュールは埋め込みリテラルをこの型で型付けし(ドリフト検出)、`loadCompiledIR` で
69
+ * opaque handle に昇格させる。
70
+ */
71
+ export type ComponentGraphIRDoc = ComponentGraphIRShape;
72
+ /** opaque な cond ノード handle。 */
73
+ export type CondNode = CondNodeShape & IrBrand;
74
+ /** opaque な fanout ノード handle。 */
75
+ export type FanoutNode = FanoutNodeShape & IrBrand;
76
+ export { assertCompiled, loadCompiledIR, ProvenanceError, fingerprintComponentGraph } from "./provenance.js";
77
+ export { bindBehaviors, BindFailure } from "./bind.js";
78
+ export type { BoundBehaviors, BindFailureCode } from "./bind.js";
79
+ export { UntypedNodeError } from "./type-gate.js";
80
+ export { OPERATOR_TYPE_SIGNATURES, operatorSignature, resolveOperatorResult, isValueOperator, } from "./expr-operator-types.js";
81
+ export type { OperatorSignature, OperatorResultRule, OperandConstraint } from "./expr-operator-types.js";
82
+ export { SemanticBehavior, behavior, compileBehaviors, catalogComponents, defineLeaf, behaviorComponents, catalogEntryFromLeaf, deriveCatalog, when, concat, add, sub, mul, div, mod, neg, eq, ne, lt, le, gt, ge, and, or, not, coalesce, len, opt, referencedComponents, classifyBehaviorEffect, AuthoringFailure, } from "./authoring.js";
83
+ export type { In, Recorded, BehaviorClass, CompileBehaviorsOptions, BehaviorEffect, AuthoringFailureCode, LeafDefinition, LeafMeta, PortableTypeToTs, PortsToTs, } from "./authoring.js";
51
84
  export { decodeValue, deepEquals } from "./codec.js";
52
85
  export * as codegenPrimitives from "./primitives.js";
53
86
  export { mapWithConcurrency, unproducedValue, skipSingle, skipConnection, hydrateInto, } from "./primitives.js";
54
87
  export type { Expr } from "./primitives.js";
55
- export { generateModule, registerEmitter, registeredLanguages, GeneratorFailure, fingerprintComponentGraph, FingerprintFailure, typescriptEmitter, pythonEmitter, typescriptTypedEmitter, tsTypedMaterializer, assertStraightlineSupported, isStraightlineNode, buildTypePlan, deriveTypeRef, buildAsyncPlans, } from "./generator/index.js";
88
+ export { generateModule, registerEmitter, registeredLanguages, GeneratorFailure, FingerprintFailure, typescriptEmitter, pythonEmitter, typescriptTypedEmitter, tsTypedMaterializer, assertStraightlineSupported, isStraightlineNode, buildTypePlan, deriveTypeRef, buildAsyncPlans, } from "./generator/index.js";
56
89
  export type { GenerateOptions, GeneratedModule, EmitContext, EmitterPlugin, GeneratorFailureCode, StraightlineDialect, StraightlineOp, ComponentPlan, OpLiteral, TypePlan, TypeRef, TypeDecl, TypedMaterializer, IoModel, AsyncPlan, } from "./generator/index.js";
57
90
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/dist/index.js CHANGED
@@ -26,9 +26,10 @@ export const SPEC_VERSIONS = {
26
26
  template: 1,
27
27
  plan: 1,
28
28
  canonical: 2, // v2: obj 値の __proto__ own key を FORBIDDEN_KEY に(fail-closed)
29
- behavior: 3, // v3: first-class fanout node kinddeduped connection list-in fan-out)。v1/v2 IR の意味論は不変(additive)
30
- guard: 1, // 初版(bc#25: assertPortableComponentGraph の accept/reject を vector-pin
29
+ behavior: 4, // v4(#128/A6・SCP-only): provenance token + 全ノード型確定を serialized-IR 不変条件に格上げ(released 3=fanout retire)。v1–v3 意味論は不変だが、旧 runtimebehavior≤3)は新 IR を loud reject する(機構 = 生成モジュールの baked-spec-skew ゲート[EXPECTED_SPEC_VERSIONS.behavior vs runtime] + conformance pre-flight version fail-closed。validateEnvelope は envelope の specVersion「major.minor」文字列を見るのであって behaviorVersion 整数ではない)
30
+ guard: 2, // v2(#128/A6): assertCompiled(出自ゲート)+ UNTYPED_NODE(全型確定)+ operator 型シグネチャ SSoT の accept/reject を vector-pin(v1 は bc#25 の可搬性 pin のみ)
31
31
  c2: 1, // 初版(bc#28: c2-catalog-swap — catalog-swap 実行 + IR 構造一致の 5 言語 pin)
32
+ provenance: 1, // 初版(#128/A6): シリアライズ境界の canonical fingerprint 照合(改竄/stale の 5 言語 loud reject)+ 非空虚性(CONFORMANCE_MUTATE)
32
33
  };
33
34
  /** validateEnvelope に渡す graphddb 形式の既定 supported 版(`"<major>.<minor>"`)。 */
34
35
  export const ENVELOPE_SPEC_VERSION = "1.1";
@@ -46,10 +47,30 @@ export { validateEnvelope, EnvelopeFailure } from "./envelope.js";
46
47
  export { assertPortable, assertPortableComponentGraph, assertPortableTypeNotation, PORTABLE_EXPR_OPERATORS, PORTABLE_SCALAR_TYPES, PortabilityError, } from "./guard.js";
47
48
  // ── behavior(component-graph IR + runBehavior) ──────────────────────────────
48
49
  export { runBehavior, runBehaviorAsync, BehaviorFailure, fanoutDedupDrop } from "./behavior.js";
49
- // ── builder(データ登録 IF model-driven consumer 向け, bc#26)───────────────
50
- export { buildComponentDefinition, BuilderFailure } from "./builder.js";
50
+ // ── provenance(出自 token + fingerprint-gated loader SA1/SA2/SA3/SA7)──────────
51
+ // `fingerprintComponentGraph` は出自ゲート付きの公開版(provenance.ts)。生 JSON からの内部
52
+ // fingerprint(loader / codegen core)は generator/fingerprint.ts の raw を直接使う。
53
+ export { assertCompiled, loadCompiledIR, ProvenanceError, fingerprintComponentGraph } from "./provenance.js";
54
+ // ── bind / run(登録 → 自動 bind + bind 時完全性ゲート — SA8, #126)─────────────────────
55
+ // leaf impl は defineLeaf で 1 回登録 → compileBehaviors が捕捉 → bindBehaviors が完全性ゲート後に
56
+ // 自動 dispatch。per-call handlers dict 手注入を廃止し、注入は ctx(環境境界)だけ(runBehavior は
57
+ // test harness が scripted outcome を注入する低レベル primitive として残る)。
58
+ export { bindBehaviors, BindFailure } from "./bind.js";
59
+ // ── 全ノード型確定ゲート(UNTYPED_NODE — SA5, #125)─────────────────────────────
60
+ // compileBehaviors の終端で全 body ノード + output(Φ 合成)の型が一意に確定していることを
61
+ // 網羅検査する(未確定は fail-closed)。これが typed-native codegen の端まで型付きフラットを保証する。
62
+ export { UntypedNodeError } from "./type-gate.js";
63
+ // ── operator 型シグネチャ SSoT(閉じた式語彙の入出力型・expression-ir.md §3.1, #125/A3)──────
64
+ // operator の入出力型を語彙レベルで宣言する唯一の源。出力型合成(type-gate.ts)が ad-hoc 分岐でなく
65
+ // この宣言を**読む**ことで、consumer-interface.md §2.1 C3(BC は明示注記を読むだけ・推論しない)と整合する。
66
+ export { OPERATOR_TYPE_SIGNATURES, operatorSignature, resolveOperatorResult, isValueOperator, } from "./expr-operator-types.js";
67
+ // ── builder(データ登録 IF)は撤去済み(#127/A5・SCP-only・§SA6)──────────────────────
68
+ // 生 IR をデータとして登録する route B(`buildComponentDefinition` / `ComponentDefinitionData` /
69
+ // `BuildComponentDefinitionOptions` / `BuilderFailure` / `BuilderFailureCode`)は 0.8.0 で完全撤去した。
70
+ // IR の唯一の正規生産者は compile seam(`compileBehaviors`)である。builder.ts に残る検証・正規化 core
71
+ // (`buildComponentCore` 等)は `compileBehaviors` が委譲する **internal** 実装で、ここからは公開しない。
51
72
  // ── authoring(共有 SCP authoring surface — SemanticBehavior / @behavior, bc#24)──
52
- export { SemanticBehavior, behavior, compileBehaviors, catalogComponents, when, concat, add, sub, mul, div, mod, neg, eq, ne, lt, le, gt, ge, and, or, not, coalesce, len, opt, referencedComponents, classifyBehaviorEffect, AuthoringFailure, } from "./authoring.js";
73
+ export { SemanticBehavior, behavior, compileBehaviors, catalogComponents, defineLeaf, behaviorComponents, catalogEntryFromLeaf, deriveCatalog, when, concat, add, sub, mul, div, mod, neg, eq, ne, lt, le, gt, ge, and, or, not, coalesce, len, opt, referencedComponents, classifyBehaviorEffect, AuthoringFailure, } from "./authoring.js";
53
74
  // ── conformance runner adapter 共通部 ─────────────────────────────────────────
54
75
  export { decodeValue, deepEquals } from "./codec.js";
55
76
  // ── codegen primitive surface(bc#36 / typed-codegen.md §3.4)──────────────────
@@ -63,5 +84,5 @@ export { mapWithConcurrency, unproducedValue, skipSingle, skipConnection, hydrat
63
84
  // ── generator(SCP Runtime Code Generation Layer — 共通 Generator, bc#13)─────
64
85
  // 可搬 IR のみを入力とする DSL 非依存の多言語 codegen(scp-ir-architecture.md §7.2–§7.4)。
65
86
  // 生成コードは既存 runtime-core API を呼ぶ薄い束ね(実行ロジックは生成しない)。
66
- export { generateModule, registerEmitter, registeredLanguages, GeneratorFailure, fingerprintComponentGraph, FingerprintFailure, typescriptEmitter, pythonEmitter, typescriptTypedEmitter, tsTypedMaterializer, assertStraightlineSupported, isStraightlineNode, buildTypePlan, deriveTypeRef, buildAsyncPlans, } from "./generator/index.js";
87
+ export { generateModule, registerEmitter, registeredLanguages, GeneratorFailure, FingerprintFailure, typescriptEmitter, pythonEmitter, typescriptTypedEmitter, tsTypedMaterializer, assertStraightlineSupported, isStraightlineNode, buildTypePlan, deriveTypeRef, buildAsyncPlans, } from "./generator/index.js";
67
88
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAEH,gEAAgE;AAChE,oEAAoE;AACpE,MAAM,CAAC,MAAM,aAAa,GAAG;IAC3B,UAAU,EAAE,CAAC,EAAE,6DAA6D;IAC5E,QAAQ,EAAE,CAAC;IACX,IAAI,EAAE,CAAC;IACP,SAAS,EAAE,CAAC,EAAE,8DAA8D;IAC5E,QAAQ,EAAE,CAAC,EAAE,kGAAkG;IAC/G,KAAK,EAAE,CAAC,EAAE,uEAAuE;IACjF,EAAE,EAAE,CAAC,EAAE,mEAAmE;CAClE,CAAC;AAEX,4EAA4E;AAC5E,MAAM,CAAC,MAAM,qBAAqB,GAAG,KAAc,CAAC;AAKpD,+EAA+E;AAC/E,OAAO,EAAE,QAAQ,IAAI,kBAAkB,EAAE,WAAW,EAAE,aAAa,EAAE,WAAW,EAAE,oBAAoB,EAAE,MAAM,gBAAgB,CAAC;AAG/H,+EAA+E;AAC/E,OAAO,EAAE,cAAc,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAGhF,+EAA+E;AAC/E,OAAO,EAAE,OAAO,EAAE,YAAY,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AAa1E,+EAA+E;AAC/E,OAAO,EAAE,cAAc,EAAE,aAAa,EAAE,WAAW,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAG9F,+EAA+E;AAC/E,OAAO,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAGlE,+EAA+E;AAC/E,OAAO,EACL,cAAc,EACd,4BAA4B,EAC5B,0BAA0B,EAC1B,uBAAuB,EACvB,qBAAqB,EACrB,gBAAgB,GACjB,MAAM,YAAY,CAAC;AAEpB,+EAA+E;AAC/E,OAAO,EAAE,WAAW,EAAE,gBAAgB,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAwBhG,wEAAwE;AACxE,OAAO,EAAE,wBAAwB,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAOxE,iFAAiF;AACjF,OAAO,EACL,gBAAgB,EAChB,QAAQ,EACR,gBAAgB,EAChB,iBAAiB,EACjB,IAAI,EACJ,MAAM,EACN,GAAG,EACH,GAAG,EACH,GAAG,EACH,GAAG,EACH,GAAG,EACH,GAAG,EACH,EAAE,EACF,EAAE,EACF,EAAE,EACF,EAAE,EACF,EAAE,EACF,EAAE,EACF,GAAG,EACH,EAAE,EACF,GAAG,EACH,QAAQ,EACR,GAAG,EACH,GAAG,EACH,oBAAoB,EACpB,sBAAsB,EACtB,gBAAgB,GACjB,MAAM,gBAAgB,CAAC;AAUxB,8EAA8E;AAC9E,OAAO,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAErD,gFAAgF;AAChF,kDAAkD;AAClD,kEAAkE;AAClE,4DAA4D;AAC5D,yEAAyE;AACzE,wDAAwD;AACxD,OAAO,KAAK,iBAAiB,MAAM,iBAAiB,CAAC;AACrD,OAAO,EACL,kBAAkB,EAClB,eAAe,EACf,UAAU,EACV,cAAc,EACd,WAAW,GACZ,MAAM,iBAAiB,CAAC;AAGzB,6EAA6E;AAC7E,wEAAwE;AACxE,mDAAmD;AACnD,OAAO,EACL,cAAc,EACd,eAAe,EACf,mBAAmB,EACnB,gBAAgB,EAChB,yBAAyB,EACzB,kBAAkB,EAClB,iBAAiB,EACjB,aAAa,EACb,sBAAsB,EACtB,mBAAmB,EACnB,2BAA2B,EAC3B,kBAAkB,EAClB,aAAa,EACb,aAAa,EACb,eAAe,GAChB,MAAM,sBAAsB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,102 @@
1
+ /**
2
+ * provenance.ts — IR の出自(provenance)を保証する unforgeable compile capability(SA1/SA2/SA7)。
3
+ *
4
+ * scp-only-authoring-contract.md §5 の token 方式の実装。**この module だけ**が capability
5
+ * token を発行でき、consumer は forge 不能。IR(`ComponentGraphIR` handle)の唯一の正規生産者を
6
+ * compile seam(`compileBehaviors` とロード時 fingerprint-gated loader)に一本化する。
7
+ *
8
+ * ## 二層の門
9
+ *
10
+ * - **プロセス内 capability(token)— authoring 迂回の完全封鎖**
11
+ * {@link COMPILED} は **module-private な `unique symbol`**。IR handle にこの symbol を鍵とする
12
+ * 非列挙・symbol-keyed プロパティ(token 参照)を刻む。consumer はこの symbol を参照できないため、
13
+ * token を持つ値を**構築できない**(TS 型 = brand、実行時 = symbol 同一性)。{@link assertCompiled}
14
+ * は `ir[COMPILED]` の同一性を O(1) で照合する(hot path 非依存)。→ 手組み IR(proposal 経路 B/C)は
15
+ * authoring 時点で不可能。
16
+ *
17
+ * - **シリアライズ境界 fingerprint — 改竄/stale 検出**
18
+ * token はプロセス内 capability ゆえ JSON 境界を越えない。JSON で届く IR(conformance vector /
19
+ * cross-language / codegen fixture)は {@link loadCompiledIR} を通す。loader は canonical fingerprint
20
+ * を**ロード時 1 回だけ**再計算・照合し([[codegen-purity-no-ir-no-json]] / graphddb#315 の per-call
21
+ * skew は禁止)、通ったものにだけプロセス内 token を再発行する。stale/改竄は loud reject。
22
+ *
23
+ * ## 不可視性(goldens / fingerprint を一切変えない)
24
+ *
25
+ * token は **`Object.defineProperty` で `enumerable:false` の symbol-keyed プロパティ**として刻む。
26
+ * `canonicalValue` / `canonicalJson` / `fingerprintComponentGraph` / `JSON.stringify` はいずれも
27
+ * `Object.keys`(列挙可能な文字列キー)しか見ないため、token は正準化・fingerprint・直列化に
28
+ * **一切現れない**。既存の goldens・fingerprint・5 言語境界 self-check は byte-for-byte 不変。
29
+ */
30
+ import type { ComponentGraphIR as ComponentGraphIRShape } from "./behavior.js";
31
+ import type { ComponentGraphIR } from "./index.js";
32
+ /**
33
+ * BoundLeafImpl — レジストリに退避する leaf 実装“本体”の緩い runtime 型(`defineLeaf` の `fn`)。
34
+ * 第1引数 = 評価済み Port(batched dispatch では `{items:[…]}`)、第2引数 = 環境境界 `ctx`。
35
+ * 戻りは leaf の出力そのもの(`ExecOutcome` ではない — {@link bindBehaviors} の adapter が `{ok}` に包む)。
36
+ */
37
+ export type BoundLeafImpl = (ports: any, ctx: any) => unknown;
38
+ /** name→leaf impl のプロセス内レジストリ(IR handle の side-channel に退避する)。 */
39
+ export type LeafImplRegistry = Record<string, BoundLeafImpl>;
40
+ /**
41
+ * NON_COMPILED_IR — 出自ゲート(run/generate/fingerprint 入口)の fail-closed 失敗。
42
+ * un-tokened / hand-built / tampered IR を拒否する(0.8.0 end-state = fail-closed)。
43
+ */
44
+ export declare class ProvenanceError extends Error {
45
+ code: "NON_COMPILED_IR";
46
+ constructor(message: string);
47
+ }
48
+ /**
49
+ * mintCompiled — 検証済みルート IR に token を刻んで opaque handle にする(**内部専用 seam**)。
50
+ *
51
+ * `compileBehaviors`(authoring.ts)と {@link loadCompiledIR}(境界 loader)の**両方**が使う
52
+ * 唯一の mint 点。export するが index.ts では公開しない(package の内部 API)。ここが唯一
53
+ * cast が許される seam である(brand は module-private symbol ゆえ型でも構築できないため)。
54
+ *
55
+ * token は `enumerable:false` の symbol-keyed プロパティとして刻む → 正準化・fingerprint・
56
+ * `JSON.stringify` に一切現れない(不可視性の要)。
57
+ *
58
+ * @param registry 省略可。`compileBehaviors` が捕捉した name→leaf impl のプロセス内レジストリ
59
+ * (SA8)。渡された場合は token と**同じ非列挙 symbol-keyed 規律**で handle に退避する(IR 本体・
60
+ * fingerprint・JSON には現れない = C4 不変)。境界 loader({@link loadCompiledIR})は JSON 由来で
61
+ * impl を持たないため渡さない(codegen は静的リンク側の責務)。
62
+ */
63
+ export declare function mintCompiled(ir: ComponentGraphIRShape, registry?: LeafImplRegistry): ComponentGraphIR;
64
+ /**
65
+ * getLeafImplRegistry — compile 済み handle に退避された name→leaf impl レジストリを取り出す
66
+ * (**内部専用 seam** — {@link bindBehaviors} が自動 dispatch のために読む)。token 検証を通った
67
+ * handle にだけ問い合わせる前提。レジストリが無い(`loadCompiledIR` で adopt した境界 IR 等)は
68
+ * `undefined`(bind 側で「impl 未登録 = 完全性ゲート fail」に落ちる)。
69
+ */
70
+ export declare function getLeafImplRegistry(ir: unknown): LeafImplRegistry | undefined;
71
+ /**
72
+ * assertCompiled — 出自ゲート(SA7)。`ir` が compile seam を通った handle であることを
73
+ * O(1) で照合する。un-tokened / hand-built / tampered IR は `NON_COMPILED_IR` で loud reject。
74
+ *
75
+ * `runBehavior` / `runBehaviorAsync` / `generateModule` / `fingerprintComponentGraph` の入口に
76
+ * 必ず配置する(0.8.0 fail-closed end-state)。
77
+ */
78
+ export declare function assertCompiled(ir: unknown): asserts ir is ComponentGraphIR;
79
+ /**
80
+ * loadCompiledIR — シリアライズ境界の fingerprint-gated loader(SA3)。JSON で届いた IR
81
+ * ドキュメントを受け取り、canonical fingerprint を**ロード時 1 回だけ**再計算・照合してから
82
+ * プロセス内 token を再発行する。stale/改竄(期待 fingerprint 不一致)は loud reject。
83
+ *
84
+ * @param doc JSON 由来の可搬 IR ドキュメント(token は持たない)。
85
+ * @param expectedFingerprint 省略可。compile 時に付いた canonical fingerprint。渡された場合は
86
+ * 再計算値と一致することを要求し、不一致は改竄/stale として `NON_COMPILED_IR`
87
+ * で reject する(渡さない場合は「JSON→プロセス内 handle への adopt」として
88
+ * 再計算のみ行い token を発行。fingerprint は返り値に含めない — 呼び出し側が
89
+ * 境界越えで pin したいときに `fingerprintComponentGraph` で取得)。
90
+ * @returns token 済み opaque handle(`runBehavior`/`generateModule` にそのまま渡せる)。
91
+ */
92
+ export declare function loadCompiledIR(doc: unknown, expectedFingerprint?: string): ComponentGraphIR;
93
+ /**
94
+ * fingerprintComponentGraph — 公開の canonical fingerprint(出自ゲート付き)。
95
+ *
96
+ * consumer 向けの入口。`assertCompiled` を通した compile 済み handle にだけ fingerprint を
97
+ * 計算する(SA7)。手組み/無 token/改竄 IR は `NON_COMPILED_IR` で reject。境界越えの
98
+ * 生 JSON から fingerprint を得たい内部経路({@link loadCompiledIR} / codegen core)は
99
+ * generator/fingerprint.ts の raw 実装を直接使う(gate を通さない)。
100
+ */
101
+ export declare function fingerprintComponentGraph(ir: unknown): string;
102
+ //# sourceMappingURL=provenance.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"provenance.d.ts","sourceRoot":"","sources":["../src/provenance.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AACH,OAAO,KAAK,EAAE,gBAAgB,IAAI,qBAAqB,EAAE,MAAM,eAAe,CAAC;AAG/E,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAwBnD;;;;GAIG;AAEH,MAAM,MAAM,aAAa,GAAG,CAAC,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,KAAK,OAAO,CAAC;AAE9D,kEAAkE;AAClE,MAAM,MAAM,gBAAgB,GAAG,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC;AAE7D;;;GAGG;AACH,qBAAa,eAAgB,SAAQ,KAAK;IACxC,IAAI,EAAE,iBAAiB,CAAC;gBACZ,OAAO,EAAE,MAAM;CAK5B;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,YAAY,CAAC,EAAE,EAAE,qBAAqB,EAAE,QAAQ,CAAC,EAAE,gBAAgB,GAAG,gBAAgB,CAqBrG;AAED;;;;;GAKG;AACH,wBAAgB,mBAAmB,CAAC,EAAE,EAAE,OAAO,GAAG,gBAAgB,GAAG,SAAS,CAG7E;AAED;;;;;;GAMG;AACH,wBAAgB,cAAc,CAAC,EAAE,EAAE,OAAO,GAAG,OAAO,CAAC,EAAE,IAAI,gBAAgB,CAS1E;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,cAAc,CAAC,GAAG,EAAE,OAAO,EAAE,mBAAmB,CAAC,EAAE,MAAM,GAAG,gBAAgB,CAY3F;AAED;;;;;;;GAOG;AACH,wBAAgB,yBAAyB,CAAC,EAAE,EAAE,OAAO,GAAG,MAAM,CAG7D"}
@@ -0,0 +1,128 @@
1
+ import { fingerprintComponentGraph as fingerprintRaw } from "./generator/fingerprint.js";
2
+ // ── module-private capability symbol(forge 不能の核)─────────────────────────────
3
+ /**
4
+ * COMPILED — compile seam だけが参照できる module-private な `unique symbol`。
5
+ * export しない。consumer はこの symbol を名指しできないため token を刻んだ値を構築できない。
6
+ */
7
+ const COMPILED = Symbol("behavior-contracts/COMPILED");
8
+ /**
9
+ * REGISTRY — compile seam だけが刻む module-private な `unique symbol`。IR handle に
10
+ * **name→leaf impl のプロセス内レジストリ**(`defineLeaf` の型付き静的関数)を side-channel で
11
+ * 括り付けるための鍵(SA8)。token({@link COMPILED})と**同じ非列挙・symbol-keyed の規律**で刻む
12
+ * ため、canonical / fingerprint / `JSON.stringify` には一切現れない = **IR 本体には impl が載らない
13
+ * (C4 不変)**。consumer はこの symbol を名指しできないため registry を差し込めない。
14
+ *
15
+ * ここに impl を退避する理由: `runBehavior` の per-call `handlers` dict 手注入を廃し、
16
+ * `compileBehaviors` が捕捉した impl から BC が name→impl を自動 dispatch する({@link bindBehaviors})。
17
+ * impl は「プロセス内 capability」ゆえ token と同様シリアライズ境界を越えない(境界越えは codegen の
18
+ * 静的リンク or `loadCompiledIR` で impl 無しの IR を adopt する側の責務)。
19
+ */
20
+ const REGISTRY = Symbol("behavior-contracts/REGISTRY");
21
+ /**
22
+ * NON_COMPILED_IR — 出自ゲート(run/generate/fingerprint 入口)の fail-closed 失敗。
23
+ * un-tokened / hand-built / tampered IR を拒否する(0.8.0 end-state = fail-closed)。
24
+ */
25
+ export class ProvenanceError extends Error {
26
+ code;
27
+ constructor(message) {
28
+ super(message);
29
+ this.code = "NON_COMPILED_IR";
30
+ this.name = "ProvenanceError";
31
+ }
32
+ }
33
+ /**
34
+ * mintCompiled — 検証済みルート IR に token を刻んで opaque handle にする(**内部専用 seam**)。
35
+ *
36
+ * `compileBehaviors`(authoring.ts)と {@link loadCompiledIR}(境界 loader)の**両方**が使う
37
+ * 唯一の mint 点。export するが index.ts では公開しない(package の内部 API)。ここが唯一
38
+ * cast が許される seam である(brand は module-private symbol ゆえ型でも構築できないため)。
39
+ *
40
+ * token は `enumerable:false` の symbol-keyed プロパティとして刻む → 正準化・fingerprint・
41
+ * `JSON.stringify` に一切現れない(不可視性の要)。
42
+ *
43
+ * @param registry 省略可。`compileBehaviors` が捕捉した name→leaf impl のプロセス内レジストリ
44
+ * (SA8)。渡された場合は token と**同じ非列挙 symbol-keyed 規律**で handle に退避する(IR 本体・
45
+ * fingerprint・JSON には現れない = C4 不変)。境界 loader({@link loadCompiledIR})は JSON 由来で
46
+ * impl を持たないため渡さない(codegen は静的リンク側の責務)。
47
+ */
48
+ export function mintCompiled(ir, registry) {
49
+ // 既に正当な token を持つ handle の再 mint は no-op(`configurable:false` の二重定義を避ける)。
50
+ // 「adopt 済み handle を再 adopt」は冪等であるべき(同一 IR オブジェクトの複数回消費を許す)。
51
+ if (ir[COMPILED] !== COMPILED)
52
+ Object.defineProperty(ir, COMPILED, {
53
+ value: COMPILED,
54
+ enumerable: false,
55
+ writable: false,
56
+ configurable: false,
57
+ });
58
+ // レジストリを token と同じ非列挙 symbol-keyed 規律で退避(impl は IR に載らない = C4)。
59
+ // configurable:true にしておき、同一 IR オブジェクトへの再 mint(レジストリ差し替え)を許す。
60
+ if (registry !== undefined)
61
+ Object.defineProperty(ir, REGISTRY, {
62
+ value: registry,
63
+ enumerable: false,
64
+ writable: false,
65
+ configurable: true,
66
+ });
67
+ // 唯一の内部 mint seam: unbranded shape → opaque branded handle(brand は phantom)。
68
+ return ir;
69
+ }
70
+ /**
71
+ * getLeafImplRegistry — compile 済み handle に退避された name→leaf impl レジストリを取り出す
72
+ * (**内部専用 seam** — {@link bindBehaviors} が自動 dispatch のために読む)。token 検証を通った
73
+ * handle にだけ問い合わせる前提。レジストリが無い(`loadCompiledIR` で adopt した境界 IR 等)は
74
+ * `undefined`(bind 側で「impl 未登録 = 完全性ゲート fail」に落ちる)。
75
+ */
76
+ export function getLeafImplRegistry(ir) {
77
+ if (ir === null || typeof ir !== "object")
78
+ return undefined;
79
+ return ir[REGISTRY];
80
+ }
81
+ /**
82
+ * assertCompiled — 出自ゲート(SA7)。`ir` が compile seam を通った handle であることを
83
+ * O(1) で照合する。un-tokened / hand-built / tampered IR は `NON_COMPILED_IR` で loud reject。
84
+ *
85
+ * `runBehavior` / `runBehaviorAsync` / `generateModule` / `fingerprintComponentGraph` の入口に
86
+ * 必ず配置する(0.8.0 fail-closed end-state)。
87
+ */
88
+ export function assertCompiled(ir) {
89
+ if (ir === null ||
90
+ typeof ir !== "object" ||
91
+ ir[COMPILED] !== COMPILED)
92
+ throw new ProvenanceError("IR was not produced by compileBehaviors() (or a fingerprint-gated loader): missing/invalid provenance token — hand-built, un-tokened, or tampered IR is rejected (NON_COMPILED_IR, fail-closed). Author behavior via SemanticBehavior + compileBehaviors, or load serialized IR through loadCompiledIR().");
93
+ }
94
+ /**
95
+ * loadCompiledIR — シリアライズ境界の fingerprint-gated loader(SA3)。JSON で届いた IR
96
+ * ドキュメントを受け取り、canonical fingerprint を**ロード時 1 回だけ**再計算・照合してから
97
+ * プロセス内 token を再発行する。stale/改竄(期待 fingerprint 不一致)は loud reject。
98
+ *
99
+ * @param doc JSON 由来の可搬 IR ドキュメント(token は持たない)。
100
+ * @param expectedFingerprint 省略可。compile 時に付いた canonical fingerprint。渡された場合は
101
+ * 再計算値と一致することを要求し、不一致は改竄/stale として `NON_COMPILED_IR`
102
+ * で reject する(渡さない場合は「JSON→プロセス内 handle への adopt」として
103
+ * 再計算のみ行い token を発行。fingerprint は返り値に含めない — 呼び出し側が
104
+ * 境界越えで pin したいときに `fingerprintComponentGraph` で取得)。
105
+ * @returns token 済み opaque handle(`runBehavior`/`generateModule` にそのまま渡せる)。
106
+ */
107
+ export function loadCompiledIR(doc, expectedFingerprint) {
108
+ if (doc === null || typeof doc !== "object" || Array.isArray(doc))
109
+ throw new ProvenanceError("loadCompiledIR: input must be a portable component-graph IR document (fail-closed)");
110
+ // ロード時 1 回だけ fingerprint を再計算(per-call skew は禁止 — graphddb#315 型のバグ)。
111
+ const actual = fingerprintRaw(doc);
112
+ if (expectedFingerprint !== undefined && actual !== expectedFingerprint)
113
+ throw new ProvenanceError(`loadCompiledIR: fingerprint mismatch (expected ${expectedFingerprint}, recomputed ${actual}) — serialized IR is stale or tampered (NON_COMPILED_IR, fail-closed)`);
114
+ return mintCompiled(doc);
115
+ }
116
+ /**
117
+ * fingerprintComponentGraph — 公開の canonical fingerprint(出自ゲート付き)。
118
+ *
119
+ * consumer 向けの入口。`assertCompiled` を通した compile 済み handle にだけ fingerprint を
120
+ * 計算する(SA7)。手組み/無 token/改竄 IR は `NON_COMPILED_IR` で reject。境界越えの
121
+ * 生 JSON から fingerprint を得たい内部経路({@link loadCompiledIR} / codegen core)は
122
+ * generator/fingerprint.ts の raw 実装を直接使う(gate を通さない)。
123
+ */
124
+ export function fingerprintComponentGraph(ir) {
125
+ assertCompiled(ir);
126
+ return fingerprintRaw(ir);
127
+ }
128
+ //# sourceMappingURL=provenance.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"provenance.js","sourceRoot":"","sources":["../src/provenance.ts"],"names":[],"mappings":"AAiCA,OAAO,EAAE,yBAAyB,IAAI,cAAc,EAAE,MAAM,4BAA4B,CAAC;AAEzF,+EAA+E;AAC/E;;;GAGG;AACH,MAAM,QAAQ,GAAkB,MAAM,CAAC,6BAA6B,CAAC,CAAC;AAEtE;;;;;;;;;;;GAWG;AACH,MAAM,QAAQ,GAAkB,MAAM,CAAC,6BAA6B,CAAC,CAAC;AAatE;;;GAGG;AACH,MAAM,OAAO,eAAgB,SAAQ,KAAK;IACxC,IAAI,CAAoB;IACxB,YAAY,OAAe;QACzB,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,iBAAiB,CAAC;QAC9B,IAAI,CAAC,IAAI,GAAG,iBAAiB,CAAC;IAChC,CAAC;CACF;AAED;;;;;;;;;;;;;;GAcG;AACH,MAAM,UAAU,YAAY,CAAC,EAAyB,EAAE,QAA2B;IACjF,0EAA0E;IAC1E,6DAA6D;IAC7D,IAAK,EAAyC,CAAC,QAAQ,CAAC,KAAK,QAAQ;QACnE,MAAM,CAAC,cAAc,CAAC,EAAE,EAAE,QAAQ,EAAE;YAClC,KAAK,EAAE,QAAQ;YACf,UAAU,EAAE,KAAK;YACjB,QAAQ,EAAE,KAAK;YACf,YAAY,EAAE,KAAK;SACpB,CAAC,CAAC;IACL,gEAAgE;IAChE,8DAA8D;IAC9D,IAAI,QAAQ,KAAK,SAAS;QACxB,MAAM,CAAC,cAAc,CAAC,EAAE,EAAE,QAAQ,EAAE;YAClC,KAAK,EAAE,QAAQ;YACf,UAAU,EAAE,KAAK;YACjB,QAAQ,EAAE,KAAK;YACf,YAAY,EAAE,IAAI;SACnB,CAAC,CAAC;IACL,6EAA6E;IAC7E,OAAO,EAAsB,CAAC;AAChC,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,mBAAmB,CAAC,EAAW;IAC7C,IAAI,EAAE,KAAK,IAAI,IAAI,OAAO,EAAE,KAAK,QAAQ;QAAE,OAAO,SAAS,CAAC;IAC5D,OAAQ,EAA8B,CAAC,QAAQ,CAAiC,CAAC;AACnF,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,cAAc,CAAC,EAAW;IACxC,IACE,EAAE,KAAK,IAAI;QACX,OAAO,EAAE,KAAK,QAAQ;QACrB,EAA8B,CAAC,QAAQ,CAAC,KAAK,QAAQ;QAEtD,MAAM,IAAI,eAAe,CACvB,2SAA2S,CAC5S,CAAC;AACN,CAAC;AAED;;;;;;;;;;;;GAYG;AACH,MAAM,UAAU,cAAc,CAAC,GAAY,EAAE,mBAA4B;IACvE,IAAI,GAAG,KAAK,IAAI,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC;QAC/D,MAAM,IAAI,eAAe,CACvB,oFAAoF,CACrF,CAAC;IACJ,sEAAsE;IACtE,MAAM,MAAM,GAAG,cAAc,CAAC,GAAG,CAAC,CAAC;IACnC,IAAI,mBAAmB,KAAK,SAAS,IAAI,MAAM,KAAK,mBAAmB;QACrE,MAAM,IAAI,eAAe,CACvB,kDAAkD,mBAAmB,gBAAgB,MAAM,uEAAuE,CACnK,CAAC;IACJ,OAAO,YAAY,CAAC,GAA4B,CAAC,CAAC;AACpD,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,yBAAyB,CAAC,EAAW;IACnD,cAAc,CAAC,EAAE,CAAC,CAAC;IACnB,OAAO,cAAc,CAAC,EAAE,CAAC,CAAC;AAC5B,CAAC"}
@@ -0,0 +1,63 @@
1
+ /**
2
+ * type-gate.ts — 全ノード型確定ゲート(`UNTYPED_NODE` — SA5・scp-only-authoring-contract §4.4, #125)。
3
+ *
4
+ * `compileBehaviors` の終端で、**全 body ノードの出力型**と **`output`(Φ 合成)の全フィールド型**が
5
+ * 一意に確定していることを網羅検査する(未確定が一つでもあれば fail-closed で `UNTYPED_NODE`)。
6
+ * これが typed-native(go/rust)codegen が端まで型付きフラット(boxed `Value` へ落ちない)である
7
+ * ことを保証する構造条件(consumer-interface.md §2.3 / bc#77 `isFullyTyped` と同一基準)。
8
+ *
9
+ * ## 「確定(determined)」の定義(BC は推論しない — consumer-interface.md C3)
10
+ *
11
+ * ゲートは型を **導出(infer)しない**。既に consumer が確定させた型が **PRESENT かつ resolvable** で
12
+ * あることを検査する(proposal §4.4「BC が強制するのは『確定していること』であって『型を導出すること』
13
+ * ではない」):
14
+ *
15
+ * - **body ノード**: 各ノード(componentRef / map / cond / fanout)が resolvable な `outType` を持つ。
16
+ * base 型は leaf の catalog `elemType`(A1 の `defineLeaf` 由来。`recordComponentCall` が `.as` 未指定時に
17
+ * ノードへ焼く)から、projection/合成点は `.as<T>()`(A1)で上書き確定させる。どちらも無い(`outType`
18
+ * 欠落)ノードは `UNTYPED_NODE`。
19
+ * - **`output`(Φ 合成)**: object 合成の**全フィールド**が確定型へ resolvable であること。フィールドの
20
+ * 多くは body ノード結果参照(`{ref:[nodeId, …path]}`)で、確定済み `outType` を path で辿って解決する
21
+ * (=既に確定した型の構造的伝播であって推論ではない)。解決できないフィールドは `UNTYPED_NODE`。
22
+ *
23
+ * ## `outputType` の合成(構造伝播 + 宣言 operator シグネチャの適用・非推論)
24
+ *
25
+ * ゲートは検査と同時に、確定済みノード型から `output` 式を辿って component の `outputType` を組み立てる
26
+ * (compile 産 IR を「全ノード + component が型付き」= `isFullyTyped` にし、native codegen の入力に
27
+ * できる状態にする)。これは新しい型を推論するのではなく、consumer が確定させた型(`.as`/catalog)と、
28
+ * **operator 語彙レベルで明示宣言された型シグネチャ**(`expr-operator-types.ts` の SSoT)を `output` の
29
+ * 配線どおりに合成するだけ。operator の結果型を `resolveExprType` に ad-hoc な per-operator 分岐で
30
+ * 埋め込むのではなく、`operatorSignature` / `resolveOperatorResult` で **宣言テーブルを読む**——これが
31
+ * consumer-interface.md §2.1 C3「BC は明示注記を読むだけ・推論しない」との整合(operator シグネチャが
32
+ * 語彙レベルの明示注記であり、結果型はその決定的な適用)。owner 決定(#125/A3)で規範確定。
33
+ *
34
+ * gate は `compileBehaviors` にのみ置く。`loadCompiledIR`(境界 loader・A2)が受ける生 JSON は
35
+ * **既に compile 済みの artifact** で `compileBehaviors` を通らないため、このゲートは適用しない
36
+ * (conformance vector の再ペイントを避ける — #128/A6 スコープ)。
37
+ */
38
+ import type { Component, PortableType } from "./behavior.js";
39
+ /**
40
+ * UntypedNodeError — 型未確定ノード/フィールドを検出したときの fail-closed 失敗(SA5・0.8.0 end-state)。
41
+ * offending なノード id / メソッド / フィールドを message で名指す。
42
+ */
43
+ export declare class UntypedNodeError extends Error {
44
+ code: "UNTYPED_NODE";
45
+ constructor(message: string);
46
+ }
47
+ /**
48
+ * canonicalizeType — 導出 PortableType の obj field キーを code-point 順に再構築する
49
+ * (builder.ts の canonicalizeDeep と同じ規律。golden/fingerprint の決定性のため component の
50
+ * 他フィールドと同じ正準形に揃える)。
51
+ */
52
+ export declare function canonicalizeType(t: PortableType): PortableType;
53
+ /**
54
+ * assertAllNodeTypesDetermined — component の全ノード型確定を網羅検査し(未確定は `UNTYPED_NODE`)、
55
+ * 確定済みノード型から `output`(Φ 合成)を辿って `outputType` を導出して返す(構造伝播・非推論)。
56
+ *
57
+ * @param comp canonical 化済み `Component`(body ノードは `outType` 注記を持ち得る)。
58
+ * @param method 名指し用のメソッド名(= component 名)。
59
+ * @returns 導出した `outputType`(PortableType)。全フィールドが確定したときのみ返る。
60
+ * @throws {UntypedNodeError} 型未確定のノード/フィールドがあるとき(offending を名指す)。
61
+ */
62
+ export declare function assertAllNodeTypesDetermined(comp: Component): PortableType;
63
+ //# sourceMappingURL=type-gate.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"type-gate.d.ts","sourceRoot":"","sources":["../src/type-gate.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAoCG;AACH,OAAO,KAAK,EAAE,SAAS,EAAE,YAAY,EAAc,MAAM,eAAe,CAAC;AAOzE;;;GAGG;AACH,qBAAa,gBAAiB,SAAQ,KAAK;IACzC,IAAI,EAAE,cAAc,CAAC;gBACT,OAAO,EAAE,MAAM;CAK5B;AAwJD;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,CAAC,EAAE,YAAY,GAAG,YAAY,CAO9D;AAID;;;;;;;;GAQG;AACH,wBAAgB,4BAA4B,CAAC,IAAI,EAAE,SAAS,GAAG,YAAY,CA2B1E"}