behavior-contracts 0.1.2 → 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 (73) 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/canonical.d.ts +1 -1
  15. package/dist/canonical.d.ts.map +1 -1
  16. package/dist/canonical.js +13 -1
  17. package/dist/canonical.js.map +1 -1
  18. package/dist/codec.d.ts.map +1 -1
  19. package/dist/codec.js +7 -1
  20. package/dist/codec.js.map +1 -1
  21. package/dist/expr-eval.d.ts +9 -1
  22. package/dist/expr-eval.d.ts.map +1 -1
  23. package/dist/expr-eval.js +21 -3
  24. package/dist/expr-eval.js.map +1 -1
  25. package/dist/generator/core.d.ts +89 -0
  26. package/dist/generator/core.d.ts.map +1 -0
  27. package/dist/generator/core.js +124 -0
  28. package/dist/generator/core.js.map +1 -0
  29. package/dist/generator/emit-go.d.ts +19 -0
  30. package/dist/generator/emit-go.d.ts.map +1 -0
  31. package/dist/generator/emit-go.js +79 -0
  32. package/dist/generator/emit-go.js.map +1 -0
  33. package/dist/generator/emit-php.d.ts +20 -0
  34. package/dist/generator/emit-php.d.ts.map +1 -0
  35. package/dist/generator/emit-php.js +76 -0
  36. package/dist/generator/emit-php.js.map +1 -0
  37. package/dist/generator/emit-python.d.ts +10 -0
  38. package/dist/generator/emit-python.d.ts.map +1 -0
  39. package/dist/generator/emit-python.js +75 -0
  40. package/dist/generator/emit-python.js.map +1 -0
  41. package/dist/generator/emit-rust.d.ts +25 -0
  42. package/dist/generator/emit-rust.d.ts.map +1 -0
  43. package/dist/generator/emit-rust.js +125 -0
  44. package/dist/generator/emit-rust.js.map +1 -0
  45. package/dist/generator/emit-typescript.d.ts +11 -0
  46. package/dist/generator/emit-typescript.d.ts.map +1 -0
  47. package/dist/generator/emit-typescript.js +68 -0
  48. package/dist/generator/emit-typescript.js.map +1 -0
  49. package/dist/generator/fingerprint.d.ts +14 -0
  50. package/dist/generator/fingerprint.d.ts.map +1 -0
  51. package/dist/generator/fingerprint.js +74 -0
  52. package/dist/generator/fingerprint.js.map +1 -0
  53. package/dist/generator/index.d.ts +9 -0
  54. package/dist/generator/index.d.ts.map +1 -0
  55. package/dist/generator/index.js +25 -0
  56. package/dist/generator/index.js.map +1 -0
  57. package/dist/generator/literal.d.ts +8 -0
  58. package/dist/generator/literal.d.ts.map +1 -0
  59. package/dist/generator/literal.js +191 -0
  60. package/dist/generator/literal.js.map +1 -0
  61. package/dist/guard.d.ts +18 -0
  62. package/dist/guard.d.ts.map +1 -1
  63. package/dist/guard.js +130 -0
  64. package/dist/guard.js.map +1 -1
  65. package/dist/index.d.ts +17 -6
  66. package/dist/index.d.ts.map +1 -1
  67. package/dist/index.js +18 -5
  68. package/dist/index.js.map +1 -1
  69. package/dist/plan.d.ts +36 -0
  70. package/dist/plan.d.ts.map +1 -1
  71. package/dist/plan.js +152 -14
  72. package/dist/plan.js.map +1 -1
  73. package/package.json +6 -3
package/dist/plan.js CHANGED
@@ -32,8 +32,9 @@ export function runPlan(plan, ops, exec) {
32
32
  validateCoverage(stages, ops.length);
33
33
  // 逐次 stage × stage 内 bounded 並行(結果は完了順非依存なので直列に評価してよい)。
34
34
  for (const stage of stages) {
35
- // mapWithConcurrency は入力順保存・結果不変(§4)。参照実装は決定性のため
36
- // index 昇順で評価する(concurrency 値は結果に影響しない — §3「concurrency は結果不変」)。
35
+ // mapWithConcurrency は入力順保存・結果不変(§4)。同期 API は決定性のため
36
+ // index 昇順で評価する(concurrency 値は結果に影響しない — §3「concurrency は結果不変」。
37
+ // 同期コールバックは重畳できないため、逐次実行が §4.1 の conforming fallback)。
37
38
  const ordered = [...stage].sort((a, b) => a - b);
38
39
  void concurrency; // plan 構造の一部だが結果を変えない(determinism 保証)
39
40
  for (const i of ordered) {
@@ -46,34 +47,159 @@ export function runPlan(plan, ops, exec) {
46
47
  skipped: skippedIdx.sort((a, b) => a - b).map((i) => ops[i].id),
47
48
  };
48
49
  }
49
- function runOp(i, op, states, exec, executedIdx, skippedIdx) {
50
+ /**
51
+ * runPlanAsync — runPlan の非同期版(bc#23)。stage 内メンバを `plan.concurrency` を
52
+ * 上限とした bounded 並列で dispatch する。
53
+ *
54
+ * 決定的 commit プロトコル(execution-plan.md §4.1):
55
+ * 1. preflight(index 昇順): policy 検証・Skip 判定・bindField 束縛を、確定済みの
56
+ * 前 stage state から導出する(stage 内メンバは相互独立 — §1)。
57
+ * 2. dispatch(index 昇順・bounded): 実行対象メンバの exec を並行に発行する。
58
+ * 3. commit(index 昇順): outcome を宣言順に解釈する(Skip 記録 / Policy Kind /
59
+ * Failure 伝播)。最初に fail する解釈が逐次実行と同一の Failure を投げる。
60
+ *
61
+ * 逐次実行との観測等価: result tree / executed / skipped / Failure(code・message)は
62
+ * runPlan と byte 一致。**相違は投機的 dispatch のみ**(あるメンバの解釈が Failure でも、
63
+ * 同 stage の後続メンバの exec は既に発行され得る。旧 graphddb の thread-overlap と同じ許容)。
64
+ *
65
+ * 安全 fallback(結果は不変のまま逐次 dispatch に切り替える):
66
+ * - `concurrency <= 1` / stage メンバが 1 個以下。
67
+ * - stage 内に親子依存があるとき(§1 違反 plan への防御 — 逐次実行の可視性semantics を保存)。
68
+ */
69
+ export async function runPlanAsync(plan, ops, exec) {
70
+ const states = new Array(ops.length);
71
+ const executedIdx = [];
72
+ const skippedIdx = [];
73
+ const stages = plan ? plan.groups : ops.map((_, i) => [i]);
74
+ const concurrency = plan ? plan.concurrency : 1;
75
+ validateCoverage(stages, ops.length);
76
+ for (const stage of stages) {
77
+ const ordered = [...stage].sort((a, b) => a - b);
78
+ const inStage = new Set(ordered);
79
+ const hasIntraDeps = ordered.some((i) => ops[i].parent !== null && inStage.has(ops[i].parent));
80
+ if (concurrency <= 1 || ordered.length <= 1 || hasIntraDeps) {
81
+ // 逐次 fallback: runOp と同一の per-op フロー(exec の await 以外は同一)。
82
+ for (const i of ordered) {
83
+ const pre = preflightOp(i, ops[i], states);
84
+ if (pre.kind === "invalid-policy")
85
+ fail("UNKNOWN_POLICY", pre.message);
86
+ if (pre.kind === "skip") {
87
+ skippedIdx.push(i);
88
+ states[i] = { status: "skipped" };
89
+ continue;
90
+ }
91
+ const outcome = await exec(ops[i], pre.bound);
92
+ states[i] = interpretOutcome(i, ops[i], pre.policy, outcome, executedIdx, skippedIdx);
93
+ }
94
+ continue;
95
+ }
96
+ // ── 並列経路 ────────────────────────────────────────────────────────────
97
+ // preflight(index 昇順): 前 stage state は確定済み・stage 内は相互独立なので、
98
+ // Skip 判定と bindField 束縛は dispatch 前に決定できる(逐次実行と同一の判定)。
99
+ const pre = ordered.map((i) => preflightOp(i, ops[i], states));
100
+ // dispatch(index 昇順・bounded): 発行順は宣言順(semaphore は FIFO)。
101
+ // reject させない({ok:outcome} | {err}) 形で捕捉し、commit 時に宣言順で再送する
102
+ // (後続メンバの投機的 promise が未処理 rejection にならないように)。
103
+ const sem = makeSemaphore(Math.max(1, concurrency));
104
+ const inflight = new Array(ordered.length);
105
+ for (let k = 0; k < ordered.length; k++) {
106
+ const p = pre[k];
107
+ if (p.kind !== "exec")
108
+ continue;
109
+ const i = ordered[k];
110
+ inflight[k] = (async () => {
111
+ await sem.acquire();
112
+ try {
113
+ return { outcome: await exec(ops[i], p.bound) };
114
+ }
115
+ catch (e) {
116
+ return { thrown: e };
117
+ }
118
+ finally {
119
+ sem.release();
120
+ }
121
+ })();
122
+ }
123
+ // commit(index 昇順): 解釈は宣言順 → Failure の同一性が逐次実行と一致する。
124
+ for (let k = 0; k < ordered.length; k++) {
125
+ const i = ordered[k];
126
+ const p = pre[k];
127
+ if (p.kind === "invalid-policy")
128
+ fail("UNKNOWN_POLICY", p.message);
129
+ if (p.kind === "skip") {
130
+ skippedIdx.push(i);
131
+ states[i] = { status: "skipped" };
132
+ continue;
133
+ }
134
+ const settled = await inflight[k];
135
+ if ("thrown" in settled)
136
+ throw settled.thrown; // exec 例外は逐次同様そのまま伝播
137
+ states[i] = interpretOutcome(i, ops[i], p.policy, settled.outcome, executedIdx, skippedIdx);
138
+ }
139
+ }
140
+ return {
141
+ states,
142
+ executed: executedIdx.sort((a, b) => a - b).map((i) => ops[i].id),
143
+ skipped: skippedIdx.sort((a, b) => a - b).map((i) => ops[i].id),
144
+ };
145
+ }
146
+ /** FIFO counting semaphore(dispatch 順 = 宣言順を保証する bounded 並列の骨格)。 */
147
+ function makeSemaphore(limit) {
148
+ let available = limit;
149
+ const waiters = [];
150
+ return {
151
+ acquire: () => new Promise((resolve) => {
152
+ if (available > 0) {
153
+ available--;
154
+ resolve();
155
+ }
156
+ else {
157
+ waiters.push(() => resolve());
158
+ }
159
+ }),
160
+ release: () => {
161
+ const next = waiters.shift();
162
+ if (next)
163
+ next();
164
+ else
165
+ available++;
166
+ },
167
+ };
168
+ }
169
+ /**
170
+ * preflightOp — runOp の exec 前半分(policy 検証 → Skip 判定 → bindField 束縛)を
171
+ * 純粋に判定する。逐次(runOp)と並列 commit の双方がこの判定を共有する。
172
+ * 判定順は runOp と同一: policy 検証が Skip 判定より先(UNKNOWN_POLICY は Skip でも投げる)。
173
+ */
174
+ function preflightOp(i, op, states) {
50
175
  const policy = op.policy ?? "fail";
51
176
  if (policy !== "fail" && policy !== "retry" && policy !== "continue")
52
- fail("UNKNOWN_POLICY", `unknown policy kind: ${policy}`); // fail-closed
177
+ return { kind: "invalid-policy", message: `unknown policy kind: ${policy}` }; // fail-closed
53
178
  // ── §2 Skip 伝播: 依存する入力 Port が Success でなければ Skip(下流へ連鎖)──
54
179
  let boundValue = undefined;
55
180
  if (op.parent !== null) {
56
181
  const parent = states[op.parent];
57
182
  // 規則 2: 親が Skip/Failed(未生成)なら子は Skip。
58
- if (!parent || parent.status !== "ok") {
59
- skippedIdx.push(i);
60
- return { status: "skipped" };
61
- }
183
+ if (!parent || parent.status !== "ok")
184
+ return { kind: "skip" };
62
185
  // null-binding skip(実装済み・データ駆動): 親 result[bindField] が null/欠落なら Skip。
63
186
  if (op.bindField !== undefined) {
64
187
  const pv = parent.value;
65
188
  const bound = pv !== null && typeof pv === "object" && !Array.isArray(pv)
66
189
  ? pv[op.bindField]
67
190
  : undefined;
68
- if (bound === undefined || bound === null) {
69
- skippedIdx.push(i);
70
- return { status: "skipped" };
71
- }
191
+ if (bound === undefined || bound === null)
192
+ return { kind: "skip" };
72
193
  boundValue = bound;
73
194
  }
74
195
  }
75
- // ── ノード実行(consumer 委譲)──
76
- const outcome = exec(op, boundValue);
196
+ return { kind: "exec", policy, bound: boundValue };
197
+ }
198
+ /**
199
+ * interpretOutcome — runOp の exec 後半分(executed 記帳 → Policy Kind 解釈)。
200
+ * 逐次(runOp)と並列 commit の双方がこの解釈を共有する(Failure message も同一)。
201
+ */
202
+ function interpretOutcome(i, op, policy, outcome, executedIdx, skippedIdx) {
77
203
  executedIdx.push(i);
78
204
  if ("ok" in outcome)
79
205
  return { status: "ok", value: outcome.ok };
@@ -93,6 +219,18 @@ function runOp(i, op, states, exec, executedIdx, skippedIdx) {
93
219
  executedIdx.pop(); // 実行はしたが Port を生成しなかった → 未生成として扱う(executed から除外)
94
220
  return { status: "skipped" };
95
221
  }
222
+ function runOp(i, op, states, exec, executedIdx, skippedIdx) {
223
+ const pre = preflightOp(i, op, states);
224
+ if (pre.kind === "invalid-policy")
225
+ fail("UNKNOWN_POLICY", pre.message);
226
+ if (pre.kind === "skip") {
227
+ skippedIdx.push(i);
228
+ return { status: "skipped" };
229
+ }
230
+ // ── ノード実行(consumer 委譲)──
231
+ const outcome = exec(op, pre.bound);
232
+ return interpretOutcome(i, op, pre.policy, outcome, executedIdx, skippedIdx);
233
+ }
96
234
  /** 各 index がちょうど 1 stage に属し、全 op が被覆されることを検査(§1)。 */
97
235
  function validateCoverage(stages, n) {
98
236
  const seen = new Set();
package/dist/plan.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"plan.js","sourceRoot":"","sources":["../src/plan.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"plan.js","sourceRoot":"","sources":["../src/plan.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "behavior-contracts",
3
- "version": "0.1.2",
3
+ "version": "0.2.0",
4
4
  "description": "Language-agnostic runtime core for behavior contracts (dsl-contracts): validateEnvelope / evaluateExpression / renderTemplate / runPlan / canonical serialization. Single source of truth for the shared DSL runtime primitives.",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",
@@ -24,10 +24,13 @@
24
24
  "typecheck": "tsc --noEmit -p tsconfig.json && tsc --noEmit -p tsconfig.test.json"
25
25
  },
26
26
  "specVersions": {
27
- "expression": 1,
27
+ "expression": 2,
28
28
  "template": 1,
29
29
  "plan": 1,
30
- "canonical": 1,
30
+ "canonical": 2,
31
+ "behavior": 2,
32
+ "guard": 1,
33
+ "c2": 1,
31
34
  "envelope": "1.1"
32
35
  },
33
36
  "keywords": [