behavior-contracts 0.1.3 → 0.2.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 (62) hide show
  1. package/README.md +8 -2
  2. package/dist/authoring.d.ts +202 -0
  3. package/dist/authoring.d.ts.map +1 -0
  4. package/dist/authoring.js +787 -0
  5. package/dist/authoring.js.map +1 -0
  6. package/dist/behavior.d.ts +201 -0
  7. package/dist/behavior.d.ts.map +1 -0
  8. package/dist/behavior.js +373 -0
  9. package/dist/behavior.js.map +1 -0
  10. package/dist/builder.d.ts +154 -0
  11. package/dist/builder.d.ts.map +1 -0
  12. package/dist/builder.js +574 -0
  13. package/dist/builder.js.map +1 -0
  14. package/dist/generator/core.d.ts +89 -0
  15. package/dist/generator/core.d.ts.map +1 -0
  16. package/dist/generator/core.js +124 -0
  17. package/dist/generator/core.js.map +1 -0
  18. package/dist/generator/emit-go.d.ts +19 -0
  19. package/dist/generator/emit-go.d.ts.map +1 -0
  20. package/dist/generator/emit-go.js +79 -0
  21. package/dist/generator/emit-go.js.map +1 -0
  22. package/dist/generator/emit-php.d.ts +20 -0
  23. package/dist/generator/emit-php.d.ts.map +1 -0
  24. package/dist/generator/emit-php.js +76 -0
  25. package/dist/generator/emit-php.js.map +1 -0
  26. package/dist/generator/emit-python.d.ts +10 -0
  27. package/dist/generator/emit-python.d.ts.map +1 -0
  28. package/dist/generator/emit-python.js +75 -0
  29. package/dist/generator/emit-python.js.map +1 -0
  30. package/dist/generator/emit-rust.d.ts +25 -0
  31. package/dist/generator/emit-rust.d.ts.map +1 -0
  32. package/dist/generator/emit-rust.js +125 -0
  33. package/dist/generator/emit-rust.js.map +1 -0
  34. package/dist/generator/emit-typescript.d.ts +11 -0
  35. package/dist/generator/emit-typescript.d.ts.map +1 -0
  36. package/dist/generator/emit-typescript.js +68 -0
  37. package/dist/generator/emit-typescript.js.map +1 -0
  38. package/dist/generator/fingerprint.d.ts +14 -0
  39. package/dist/generator/fingerprint.d.ts.map +1 -0
  40. package/dist/generator/fingerprint.js +74 -0
  41. package/dist/generator/fingerprint.js.map +1 -0
  42. package/dist/generator/index.d.ts +9 -0
  43. package/dist/generator/index.d.ts.map +1 -0
  44. package/dist/generator/index.js +25 -0
  45. package/dist/generator/index.js.map +1 -0
  46. package/dist/generator/literal.d.ts +8 -0
  47. package/dist/generator/literal.d.ts.map +1 -0
  48. package/dist/generator/literal.js +191 -0
  49. package/dist/generator/literal.js.map +1 -0
  50. package/dist/guard.d.ts +18 -0
  51. package/dist/guard.d.ts.map +1 -1
  52. package/dist/guard.js +130 -0
  53. package/dist/guard.js.map +1 -1
  54. package/dist/index.d.ts +14 -3
  55. package/dist/index.d.ts.map +1 -1
  56. package/dist/index.js +15 -2
  57. package/dist/index.js.map +1 -1
  58. package/dist/plan.d.ts +36 -0
  59. package/dist/plan.d.ts.map +1 -1
  60. package/dist/plan.js +152 -14
  61. package/dist/plan.js.map +1 -1
  62. package/package.json +4 -1
package/README.md CHANGED
@@ -27,6 +27,11 @@ Requires Node.js >= 22 (ESM only).
27
27
  | `renderTemplate` | pure `{param}` string substitution |
28
28
  | `runPlan` | execute the portable execution-plan IR |
29
29
  | `canonicalValue` / `canonicalJson` | deterministic canonical serialization (sorted keys, compact JSON, `repr(float)`-parity decimals) |
30
+ | `runBehavior` | execute the portable component-graph IR (handlers injected at the boundary) |
31
+ | `assertPortable` / `assertPortableComponentGraph` | Portability Guard (fail-closed structural validation of portable IR) |
32
+ | `SemanticBehavior` / `behavior` / `compileBehaviors` / `catalogComponents` / `when` + expression builders | shared, effect-agnostic SCP authoring surface — each public method of a marked class lowers to one component-graph root Behavior (consumers supply only their catalog) |
33
+ | `referencedComponents` / `classifyBehaviorEffect` | consumer-side CQRS derivation from the lowered graph (authoring never names Query/Command) |
34
+ | `buildComponentDefinition` | data-registration IF for model-driven consumers — validates and canonicalizes a pre-composed component graph (caller node ids, `parent`/`bindField`/`relationKind`, v2 `map` vocabulary, dynamic ports via catalog `additionalPorts: true`); byte-stable output, recorder-independent |
30
35
 
31
36
  ## Usage
32
37
 
@@ -49,10 +54,11 @@ library (semver) version:
49
54
 
50
55
  | Spec | Version |
51
56
  |---|---|
52
- | expression | 1 |
57
+ | expression | 2 |
53
58
  | template | 1 |
54
59
  | plan | 1 |
55
- | canonical | 1 |
60
+ | canonical | 2 |
61
+ | behavior | 2 |
56
62
  | envelope | 1.1 |
57
63
 
58
64
  ## License
@@ -0,0 +1,202 @@
1
+ /**
2
+ * authoring.ts — 共有 SCP authoring surface(effect 非依存の `SemanticBehavior`, bc#24)。
3
+ *
4
+ * SCP の原則 C2「difference is catalog only」を authoring 層で成立させる COMMON 実装。
5
+ * consumer(graphddb / litedbmodel / …)は **Catalog(leaf 専用コンポーネント)だけ**を供給し、
6
+ * Behavior の合成・命名・root 指定・配線・structured control はこの共有層が担う:
7
+ *
8
+ * - **root 指定はクラス単位**: `SemanticBehavior` 基底(既定)または `@behavior` クラス
9
+ * デコレータ(同義)。そのクラスの **各 public メソッド = 1 root Behavior(合成コンポーネント)**。
10
+ * `#`-private / `_`-prefix はヘルパで publish されない。per-method マーカーは持たない。
11
+ * - **Behavior 名 = メソッド名 / Input Port = `$` 引数(`$: In<...>`)/ Output Port = 返り値 /
12
+ * 内部 DAG = `$` 参照と structured control(Conditional・Guard・Map)から Compiler が導出**。
13
+ * `await` / 実行順は書かない(plan は依存から導出)。
14
+ * - **effect 非依存**: Query / Command(read-only か write か)は authoring の語彙に存在しない。
15
+ * CQRS 分類は consumer の CQRS 層が lowering 済み component graph から導出する
16
+ * ({@link referencedComponents} / {@link classifyBehaviorEffect} が共有の導出ヘルパ)。
17
+ *
18
+ * ## ビルド時評価(throwing-sentinel recording + source scan)
19
+ *
20
+ * メソッド本体は **定義時に一度だけ**、`$` と Catalog コンポーネント関数を recorder に
21
+ * 差し替えて評価される(graphddb `publishQuery` で実証済みの方式)。本体は静的に解釈可能で
22
+ * なければならない(concept.md §5.1: `Date.now` / random / fetch / env 禁止)。
23
+ *
24
+ * **ビルド時に loud に失敗する範囲(正確な列挙)**:
25
+ * - recorder 値への ToPrimitive 暗黙変換(テンプレートリテラル補間・算術/関係演算子・
26
+ * `valueOf`/`toString`/`toJSON`)→ `NOT_RECORDABLE`(Proxy トラップ)。
27
+ * - recorder 値の列挙・spread・代入 → `NOT_RECORDABLE`(`ownKeys`/`set` トラップ)。
28
+ * - 演算結果へのプロパティアクセス → `COMPUTED_ACCESS`。
29
+ * - {@link when} に渡された非 recorder 条件(ネイティブ `===` の結果等)→ `BAD_CONDITION`。
30
+ * - **ネイティブ制御構文の source scan** → `NATIVE_CONTROL_SYNTAX`: JS Proxy には
31
+ * ToBoolean / strict-equality のトラップが**存在しない**ため、recorder 値上の
32
+ * `?:` / `&&` / `||` / `??` / `?.` / `!` / `==` / `===` / `!=` / `!==` / `if (...)` /
33
+ * `switch (...)` / `??=` / `&&=` / `||=` は評価では観測できず、(このスキャン以前は)
34
+ * **黙って誤った DAG に lower され得た**(例: `$.flag ? C.Get(..) : C.Put(..)` は無条件
35
+ * Get に、`$.limit ?? "d"` は default 消失に化ける)。そのため {@link compileBehaviors}
36
+ * は評価の**前に**メソッド / ヘルパ / クラスのソースを走査し、これらのトークンを一律
37
+ * fail-closed で拒否する({@link scanNativeControlSyntax}。文字列リテラル・テンプレート
38
+ * リテラルのテキスト部・コメント・正規表現リテラルは除外し、`${...}` 内コードは走査する)。
39
+ *
40
+ * **残余リスク(source scan の外 — ここに限り誤った DAG が黙って出得る。正直な限界)**:
41
+ * - クラス外で定義された関数(モジュールレベル / import されたヘルパ / `eval` /
42
+ * `new Function`)を record 中に呼び、その内部でネイティブ制御構文を recorder に
43
+ * 適用した場合。scan はクラス(と親クラス連鎖)のソースしか見ない。
44
+ * - `for` / `while` のループ条件に recorder を書いた場合(ToBoolean(Proxy)=true のため
45
+ * ビルドがハング / 空振りする — silent な誤 DAG ではないが loud なエラーでもない)。
46
+ * - recorder に触れない任意 JS(閉包変数への分岐等)が record 結果を変える場合
47
+ * (concept.md §5.1 で禁止だが機械検出されない)。
48
+ * - behavior クラスを ES5 等へ downlevel するトランスパイラ(ヘルパ由来の `?:` 等が
49
+ * 注入され偽陽性になる)。behavior クラスのソースは modern ES のまま実行すること。
50
+ * 「誤った DAG が黙って出ることはない」はこの残余を除いた範囲でのみ成立する。
51
+ *
52
+ * JS の評価では recorder 値上のネイティブ `?:` / `&&` / `??` / `===` / `+` は観測できない
53
+ * (ToBoolean にトラップが無い等)ため、**式・構造化制御は既存 IR 語彙と 1:1 の関数表面**で
54
+ * 書く(新しい意味論は導入しない — 各関数は expression-ir.md §3 の operator /
55
+ * scp-ir-architecture.md §5 のノード種に 1:1 で lower される):
56
+ *
57
+ * - Expression: `concat` / `add` … / `eq` … / `and` / `or` / `not` / `coalesce`(`??`)/
58
+ * `len` / `opt`(`?.` = refOpt)。オブジェクト・配列・スカラのリテラルはそのまま書ける
59
+ * (`{obj:...}` / `{arr:[...]}` へ自動 lower)。
60
+ * - Conditional / Guard: {@link when}。分岐が**純式のみ**なら Expression IR の `cond` へ、
61
+ * 分岐に **Component 宣言を含む**なら gate(CondNode)+ null-binding skip / Φ ノードへ
62
+ * lower する(semantic-contract-programming.md「構造化制御構文」の Compiler 規則そのもの)。
63
+ * - Map: ノード結果 recorder の **ネイティブ `.map(callback)`**(v2 語彙 `when`(要素 guard,
64
+ * callback 内の {@link when})/ `into` / `batched`(第2引数 opts)に対応)。
65
+ *
66
+ * lowering 先は **既存の component-graph IR そのもの**(behavior.ts / scp-ir-architecture.md §5。
67
+ * IR スキーマは変えない)。生成 IR は `assertPortableComponentGraph` を通り、`runBehavior` で
68
+ * そのまま実行できる。
69
+ */
70
+ import type { Catalog, ComponentGraphIR, Component, PortSchema } from "./behavior.js";
71
+ export type AuthoringFailureCode = "NOT_A_BEHAVIOR_CLASS" | "NO_PUBLIC_METHOD" | "NO_FRAME" | "NOT_RECORDABLE" | "NATIVE_CONTROL_SYNTAX" | "COMPUTED_ACCESS" | "WHOLE_INPUT" | "BAD_PORT_VALUE" | "UNKNOWN_PORT" | "MISSING_PORT" | "PORT_TYPE_MISMATCH" | "NOT_PORTABLE_COMPONENT" | "BAD_CONDITION" | "BAD_BRANCH" | "NESTED_BRANCH" | "MAP_IN_BRANCH" | "NESTED_MAP" | "MAP_NOT_LOWERABLE" | "MAP_MULTI_COMPONENT" | "BAD_OUTPUT";
72
+ export declare class AuthoringFailure extends Error {
73
+ code: AuthoringFailureCode;
74
+ constructor(code: AuthoringFailureCode, message: string);
75
+ }
76
+ /**
77
+ * `SemanticBehavior` — 共有 authoring の基底クラス(既定の root マーカー)。
78
+ * 継承したクラスの各 public メソッドが 1 root Behavior として publish される。
79
+ * マーカー以外の実装・状態は持たない(authoring は effect 非依存・宣言のみ)。
80
+ */
81
+ export declare class SemanticBehavior {
82
+ }
83
+ /** `compileBehaviors` が受け付けるクラス(0 引数 new 可能)。 */
84
+ export type BehaviorClass = new () => object;
85
+ /**
86
+ * `@behavior` — クラスデコレータ形の root マーカー(`SemanticBehavior` 継承と**同義**。
87
+ * 同じクラス本体はどちらのマーカーでも同一 IR に lower される)。
88
+ * TC39 standard / legacy いずれのデコレータ位置でも、素の関数呼び出しでも使える。
89
+ */
90
+ export declare function behavior<T extends BehaviorClass>(cls: T, _context?: unknown): T;
91
+ /**
92
+ * `In<T>` — 公開メソッドの `$` 引数の型(Input Port の compile-time 契約)。
93
+ * ランタイム値は recorder Proxy(`$` の各フィールドアクセスが `{ref:[<field>]}` へ lower され、
94
+ * アクセスされたフィールド名が component の `inputPorts` に記録される)。
95
+ */
96
+ export type In<T> = Readonly<T>;
97
+ /**
98
+ * recorder 値の実行時像(record 用 Proxy)。compile-time の型は authoring の関心事
99
+ * (`In<...>` / consumer の Catalog 型)に委ね、recorder は構造の記録に徹する。
100
+ */
101
+ export type Recorded = any;
102
+ /** `+`(文字列連結)。n-ary(min 2)。 */
103
+ export declare function concat(...parts: unknown[]): Recorded;
104
+ export declare const add: (a: unknown, b: unknown) => Recorded;
105
+ export declare const sub: (a: unknown, b: unknown) => Recorded;
106
+ export declare const mul: (a: unknown, b: unknown) => Recorded;
107
+ export declare const div: (a: unknown, b: unknown) => Recorded;
108
+ export declare const mod: (a: unknown, b: unknown) => Recorded;
109
+ export declare const neg: (a: unknown) => Recorded;
110
+ export declare const eq: (a: unknown, b: unknown) => Recorded;
111
+ export declare const ne: (a: unknown, b: unknown) => Recorded;
112
+ export declare const lt: (a: unknown, b: unknown) => Recorded;
113
+ export declare const le: (a: unknown, b: unknown) => Recorded;
114
+ export declare const gt: (a: unknown, b: unknown) => Recorded;
115
+ export declare const ge: (a: unknown, b: unknown) => Recorded;
116
+ export declare const and: (a: unknown, b: unknown) => Recorded;
117
+ export declare const or: (a: unknown, b: unknown) => Recorded;
118
+ export declare const not: (a: unknown) => Recorded;
119
+ /** `??`。 */
120
+ export declare const coalesce: (a: unknown, b: unknown) => Recorded;
121
+ export declare const len: (a: unknown) => Recorded;
122
+ /**
123
+ * `opt(x)` — `?.`(optional chaining)の record 形。ref recorder を refOpt に変換する
124
+ * (以降のプロパティアクセスは中間 null で null を返す — expression-ir.md `refOpt`)。
125
+ */
126
+ export declare function opt(x: unknown): Recorded;
127
+ /**
128
+ * catalogComponents — consumer の Catalog から、authoring 本体で呼べる leaf コンポーネント
129
+ * 関数群を作る(C2: consumer が供給するのはこの Catalog だけ)。
130
+ *
131
+ * 各関数は `Component({ port: <expr | literal> })` の呼び出しを componentRef ノードとして
132
+ * record し、ノード結果の recorder(後続配線・`.map`・Output 参照に使える)を返す。
133
+ * Port は catalog の Port schema に対して build-time 検証される(未知 Port / required 欠落は
134
+ * fail-closed)。`portableToIR: false` のエントリは可搬 IR に載らないため拒否する。
135
+ */
136
+ export declare function catalogComponents<C extends Catalog>(catalog: C): {
137
+ [K in keyof C]: (ports: Record<string, unknown>) => Recorded;
138
+ };
139
+ /**
140
+ * when — Conditional(`?:`)/ Guard(`&&`)の record 形(semantic-contract-programming.md
141
+ * 「構造化制御構文」の Compiler 規則を評価モードで実装する):
142
+ *
143
+ * - 両分岐(else 省略時は then のみ)が**純式のみ** → Expression IR `{cond:[c,t,e]}` へ
144
+ * inline lower(body ノードは増えない。else 省略は `null`)。
145
+ * - 分岐に **Component 宣言を含む** → 分岐ごとに gate(CondNode + null-binding skip)を
146
+ * 立て、両分岐が値を持つ場合は Φ(CondNode)ノードで合流する(採用側のみ実行される)。
147
+ * Guard 形(else 無し)は then の値をそのまま返す — 条件不成立時は当該ノードが Skip され、
148
+ * 下流へは未生成 Port の Skip 伝播規則で連鎖する。
149
+ * - `.map` コールバック内では **per-element guard**(v2 `map.when`)として record される
150
+ * (guard 形のみ。false の要素は handler 未呼び出しで結果から除外)。
151
+ *
152
+ * 条件は recorder 式でなければならない(ネイティブ `===` / `&&` の結果は record できない —
153
+ * eq/and/... builder を使う)。
154
+ */
155
+ export declare function when(condition: unknown, then: () => unknown, otherwise?: () => unknown): Recorded;
156
+ export interface CompileBehaviorsOptions {
157
+ /** 生成 IR の exprVersion(既定: SPEC_VERSIONS.expression)。 */
158
+ exprVersion?: number;
159
+ /** plan の concurrency(既定 16)。 */
160
+ concurrency?: number;
161
+ /**
162
+ * Input Port schema の上書き(メソッド名 → Port 名 → schema)。ビルド時評価は `$` の
163
+ * アクセスから Port **名**を導出するが、TS の型(`In<...>`)はランタイムに残らないため、
164
+ * 型文字列を IR に載せたい consumer はここで供給する(型抽出ツールの接続点)。
165
+ */
166
+ inputPorts?: Record<string, Record<string, PortSchema>>;
167
+ }
168
+ /**
169
+ * compileBehaviors — `SemanticBehavior` 継承(または `@behavior` 付き)クラスを
170
+ * component-graph IR(scp-ir-architecture.md §5)へ lower する共有 Compiler。
171
+ *
172
+ * - **各 public メソッド = 1 root Behavior**(`components[]` の 1 エントリ。名前 = メソッド名)。
173
+ * `#`-private はランタイム不可視でそもそも列挙されない。TS の `private` 修飾子は型消去で
174
+ * ランタイムに残らないため、**評価ベースのヘルパ規約は `#` または `_`-prefix**(`_` 始まりは
175
+ * publish されない)。ヘルパはメソッド本体からの呼び出しで record にインライン展開される。
176
+ * - 評価の**前に**メソッド / ヘルパ / クラスソースを {@link scanNativeControlSyntax} で走査し、
177
+ * 評価では観測できないネイティブ制御構文(`?:` / `&&` / `||` / `??` / `?.` / `!` /
178
+ * `==`/`===`/`!=`/`!==` / `if` / `switch` / 複合論理代入)を `NATIVE_CONTROL_SYNTAX` で
179
+ * fail-closed に拒否する(bc#24 audit fix — 残余はヘッダ docstring 参照)。
180
+ * - メソッド本体は throwing-sentinel recorder で 1 回評価され、`$` 参照・component 呼び出し・
181
+ * structured control({@link when} / `.map`)が body ノード・Wire・plan に lower される。
182
+ * - 生成 IR は `assertPortableComponentGraph` を必ず通してから返す(fail-closed の自己検査)。
183
+ * 実行は既存の `runBehavior` がそのまま担う。
184
+ *
185
+ * effect(Query/Command)はここでは一切扱わない — {@link classifyBehaviorEffect} を参照。
186
+ */
187
+ export declare function compileBehaviors(cls: BehaviorClass, opts?: CompileBehaviorsOptions): ComponentGraphIR;
188
+ /**
189
+ * referencedComponents — lowering 済み合成コンポーネントの body が参照する catalog 名
190
+ * (componentRef / map。重複除去・出現順)。
191
+ */
192
+ export declare function referencedComponents(component: Component): string[];
193
+ export type BehaviorEffect = "read-only" | "writing";
194
+ /**
195
+ * classifyBehaviorEffect — CQRS の Query/Command 分類を **component graph から導出**する
196
+ * consumer 向けヘルパ。authoring は effect 非依存(Query/Command の語彙を持たない)であり、
197
+ * 分類は「body が consumer の write-catalog(`PutItem`/`Insert`/… — consumer が指定)を
198
+ * 参照するか」という graph の性質にすぎない、という責務分離(bc#24 / litedbmodel v2 §2.4)の
199
+ * 実装点。
200
+ */
201
+ export declare function classifyBehaviorEffect(component: Component, writeComponents: Iterable<string>): BehaviorEffect;
202
+ //# sourceMappingURL=authoring.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"authoring.d.ts","sourceRoot":"","sources":["../src/authoring.ts"],"names":[],"mappings":"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"}