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.
- package/README.md +8 -2
- package/dist/authoring.d.ts +202 -0
- package/dist/authoring.d.ts.map +1 -0
- package/dist/authoring.js +787 -0
- package/dist/authoring.js.map +1 -0
- package/dist/behavior.d.ts +201 -0
- package/dist/behavior.d.ts.map +1 -0
- package/dist/behavior.js +373 -0
- package/dist/behavior.js.map +1 -0
- package/dist/builder.d.ts +154 -0
- package/dist/builder.d.ts.map +1 -0
- package/dist/builder.js +574 -0
- package/dist/builder.js.map +1 -0
- package/dist/generator/core.d.ts +89 -0
- package/dist/generator/core.d.ts.map +1 -0
- package/dist/generator/core.js +124 -0
- package/dist/generator/core.js.map +1 -0
- package/dist/generator/emit-go.d.ts +19 -0
- package/dist/generator/emit-go.d.ts.map +1 -0
- package/dist/generator/emit-go.js +79 -0
- package/dist/generator/emit-go.js.map +1 -0
- package/dist/generator/emit-php.d.ts +20 -0
- package/dist/generator/emit-php.d.ts.map +1 -0
- package/dist/generator/emit-php.js +76 -0
- package/dist/generator/emit-php.js.map +1 -0
- package/dist/generator/emit-python.d.ts +10 -0
- package/dist/generator/emit-python.d.ts.map +1 -0
- package/dist/generator/emit-python.js +75 -0
- package/dist/generator/emit-python.js.map +1 -0
- package/dist/generator/emit-rust.d.ts +25 -0
- package/dist/generator/emit-rust.d.ts.map +1 -0
- package/dist/generator/emit-rust.js +125 -0
- package/dist/generator/emit-rust.js.map +1 -0
- package/dist/generator/emit-typescript.d.ts +11 -0
- package/dist/generator/emit-typescript.d.ts.map +1 -0
- package/dist/generator/emit-typescript.js +68 -0
- package/dist/generator/emit-typescript.js.map +1 -0
- package/dist/generator/fingerprint.d.ts +14 -0
- package/dist/generator/fingerprint.d.ts.map +1 -0
- package/dist/generator/fingerprint.js +74 -0
- package/dist/generator/fingerprint.js.map +1 -0
- package/dist/generator/index.d.ts +9 -0
- package/dist/generator/index.d.ts.map +1 -0
- package/dist/generator/index.js +25 -0
- package/dist/generator/index.js.map +1 -0
- package/dist/generator/literal.d.ts +8 -0
- package/dist/generator/literal.d.ts.map +1 -0
- package/dist/generator/literal.js +191 -0
- package/dist/generator/literal.js.map +1 -0
- package/dist/guard.d.ts +18 -0
- package/dist/guard.d.ts.map +1 -1
- package/dist/guard.js +130 -0
- package/dist/guard.js.map +1 -1
- package/dist/index.d.ts +14 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +15 -2
- package/dist/index.js.map +1 -1
- package/dist/plan.d.ts +36 -0
- package/dist/plan.d.ts.map +1 -1
- package/dist/plan.js +152 -14
- package/dist/plan.js.map +1 -1
- package/package.json +4 -1
package/dist/guard.js
CHANGED
|
@@ -11,6 +11,7 @@
|
|
|
11
11
|
* - **含めない**: `makeContractService` / `buildIR`(Metadata → IR)は graphddb 固有の
|
|
12
12
|
* Metadata/OperationDef 形状に依存する consumer レベル API のため examples に残す。
|
|
13
13
|
*/
|
|
14
|
+
import { FORBIDDEN_OBJECT_KEY } from "./expr-eval.js";
|
|
14
15
|
export class PortabilityError extends Error {
|
|
15
16
|
path;
|
|
16
17
|
constructor(path, message) {
|
|
@@ -40,4 +41,133 @@ export function assertPortable(value, path = "$") {
|
|
|
40
41
|
assertPortable(v, `${path}.${k}`);
|
|
41
42
|
}
|
|
42
43
|
}
|
|
44
|
+
/**
|
|
45
|
+
* 可搬 IR で許可される Expression IR オペレータの閉集合(expression-ir.md §3)。
|
|
46
|
+
* `assertPortableComponentGraph` はこの集合外の単一キーオブジェクトノードを未知 operator
|
|
47
|
+
* として fail-closed で拒否する(component-graph の port 式・output・map.over/cond に適用)。
|
|
48
|
+
*/
|
|
49
|
+
export const PORTABLE_EXPR_OPERATORS = /* @__PURE__ */ new Set([
|
|
50
|
+
"int", "float", "ref", "refOpt", "obj", "arr",
|
|
51
|
+
"add", "sub", "mul", "neg", "div", "mod",
|
|
52
|
+
"concat", "eq", "ne", "lt", "le", "gt", "ge",
|
|
53
|
+
"and", "or", "not", "coalesce", "cond", "len",
|
|
54
|
+
]);
|
|
55
|
+
/**
|
|
56
|
+
* assertPortableComponentGraph — component-graph IR(scp-ir-architecture.md §5)の
|
|
57
|
+
* 可搬性 Guard(P0-2)。generic な {@link assertPortable}(関数/Date/Promise 残存禁止)に加え、
|
|
58
|
+
* SCP 汎用層に固有の不変条件を fail-closed で強制する:
|
|
59
|
+
* 1. `component` フィールド(componentRef / map)は **文字列参照のみ**(catalog 名)。
|
|
60
|
+
* 2. port 式・output・map.over・cond に現れる Expression IR ノードは **既知 operator の閉集合のみ**
|
|
61
|
+
* (PORTABLE_EXPR_OPERATORS 外の単一キーオブジェクトは未知 operator として拒否)。
|
|
62
|
+
* 3. 関数残存禁止(generic guard を全域に適用)。
|
|
63
|
+
*
|
|
64
|
+
* @throws {PortabilityError} 非可搬な構造を検出したとき。
|
|
65
|
+
*/
|
|
66
|
+
export function assertPortableComponentGraph(ir, path = "$") {
|
|
67
|
+
assertPortable(ir, path); // 関数/Date/Promise 残存を全域で禁止(1・3)。
|
|
68
|
+
if (!ir || typeof ir !== "object")
|
|
69
|
+
throw new PortabilityError(path, `Portability Guard: IR root must be an object (at ${path})`);
|
|
70
|
+
const root = ir;
|
|
71
|
+
if (!Array.isArray(root.components))
|
|
72
|
+
throw new PortabilityError(`${path}.components`, `Portability Guard: IR.components must be an array`);
|
|
73
|
+
root.components.forEach((c, ci) => assertPortableComponent(c, `${path}.components[${ci}]`));
|
|
74
|
+
}
|
|
75
|
+
function assertPortableComponent(c, path) {
|
|
76
|
+
if (!c || typeof c !== "object")
|
|
77
|
+
throw new PortabilityError(path, `Portability Guard: component must be an object (at ${path})`);
|
|
78
|
+
const comp = c;
|
|
79
|
+
if (typeof comp.name !== "string")
|
|
80
|
+
throw new PortabilityError(`${path}.name`, `Portability Guard: component.name must be a string`);
|
|
81
|
+
if (!Array.isArray(comp.body))
|
|
82
|
+
throw new PortabilityError(`${path}.body`, `Portability Guard: component.body must be an array`);
|
|
83
|
+
comp.body.forEach((n, ni) => assertPortableBodyNode(n, `${path}.body[${ni}]`));
|
|
84
|
+
assertPortableExpr(comp.output, `${path}.output`);
|
|
85
|
+
}
|
|
86
|
+
function assertPortableBodyNode(n, path) {
|
|
87
|
+
if (!n || typeof n !== "object")
|
|
88
|
+
throw new PortabilityError(path, `Portability Guard: body node must be an object (at ${path})`);
|
|
89
|
+
const node = n;
|
|
90
|
+
if ("map" in node) {
|
|
91
|
+
const m = node.map;
|
|
92
|
+
requireStringComponent(m.component, `${path}.map.component`);
|
|
93
|
+
assertPortableExpr(m.over, `${path}.map.over`);
|
|
94
|
+
assertPortablePorts(m.ports, `${path}.map.ports`);
|
|
95
|
+
// v2 語彙: when は Expression IR(未知 operator を fail-closed)、into は string、batched は bool。
|
|
96
|
+
if (m.when !== undefined)
|
|
97
|
+
assertPortableExpr(m.when, `${path}.map.when`);
|
|
98
|
+
if (m.into !== undefined && typeof m.into !== "string")
|
|
99
|
+
throw new PortabilityError(`${path}.map.into`, `Portability Guard: 'into' must be a string key (at ${path}.map.into)`);
|
|
100
|
+
if (m.batched !== undefined && typeof m.batched !== "boolean")
|
|
101
|
+
throw new PortabilityError(`${path}.map.batched`, `Portability Guard: 'batched' must be a boolean (at ${path}.map.batched)`);
|
|
102
|
+
}
|
|
103
|
+
else if ("cond" in node) {
|
|
104
|
+
const co = node.cond;
|
|
105
|
+
assertPortableExpr(co.if, `${path}.cond.if`);
|
|
106
|
+
assertPortableExpr(co.then, `${path}.cond.then`);
|
|
107
|
+
assertPortableExpr(co.else, `${path}.cond.else`);
|
|
108
|
+
}
|
|
109
|
+
else if ("component" in node) {
|
|
110
|
+
requireStringComponent(node.component, `${path}.component`);
|
|
111
|
+
assertPortablePorts(node.ports, `${path}.ports`);
|
|
112
|
+
}
|
|
113
|
+
else {
|
|
114
|
+
throw new PortabilityError(path, `Portability Guard: unknown body node kind (not componentRef/map/cond) at ${path}`);
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
function requireStringComponent(v, path) {
|
|
118
|
+
if (typeof v !== "string")
|
|
119
|
+
throw new PortabilityError(path, `Portability Guard: 'component' must be a string catalog reference, not ${typeof v} (at ${path})`);
|
|
120
|
+
}
|
|
121
|
+
function assertPortablePorts(ports, path) {
|
|
122
|
+
if (!ports || typeof ports !== "object" || Array.isArray(ports))
|
|
123
|
+
throw new PortabilityError(path, `Portability Guard: ports must be an object (at ${path})`);
|
|
124
|
+
for (const [k, v] of Object.entries(ports))
|
|
125
|
+
assertPortableExpr(v, `${path}.${k}`);
|
|
126
|
+
}
|
|
127
|
+
/**
|
|
128
|
+
* Expression IR ノードを再帰的に検査し、未知 operator(PORTABLE_EXPR_OPERATORS 外の
|
|
129
|
+
* 単一キーオブジェクト)を fail-closed で拒否する。リテラル(null/bool/string/number)と
|
|
130
|
+
* 配列(arr のラップ内など)は許可し、子を再帰。
|
|
131
|
+
*/
|
|
132
|
+
function assertPortableExpr(node, path) {
|
|
133
|
+
if (node === null || typeof node === "boolean" || typeof node === "string" || typeof node === "number")
|
|
134
|
+
return;
|
|
135
|
+
if (typeof node === "function")
|
|
136
|
+
throw new PortabilityError(path, `Portability Guard: functions cannot be placed in IR (at ${path})`);
|
|
137
|
+
if (Array.isArray(node)) {
|
|
138
|
+
node.forEach((e, i) => assertPortableExpr(e, `${path}[${i}]`));
|
|
139
|
+
return;
|
|
140
|
+
}
|
|
141
|
+
if (typeof node !== "object")
|
|
142
|
+
throw new PortabilityError(path, `Portability Guard: invalid expression node at ${path}`);
|
|
143
|
+
const keys = Object.keys(node);
|
|
144
|
+
if (keys.length === 1) {
|
|
145
|
+
const op = keys[0];
|
|
146
|
+
if (!PORTABLE_EXPR_OPERATORS.has(op))
|
|
147
|
+
throw new PortabilityError(path, `Portability Guard: unknown operator '${op}' (fail-closed) at ${path}`);
|
|
148
|
+
// obj は「任意の data key → 子式」の構築ノード(expression-ir.md §3)。arg の key は
|
|
149
|
+
// operator ではなく data であり、値だけを式として再帰する(単一 data key の obj が
|
|
150
|
+
// 未知 operator と誤判定されないように — evaluate() の意味論と一致させる)。
|
|
151
|
+
if (op === "obj") {
|
|
152
|
+
const arg = node[op];
|
|
153
|
+
if (!arg || typeof arg !== "object" || Array.isArray(arg))
|
|
154
|
+
throw new PortabilityError(`${path}.obj`, `Portability Guard: {obj: ...} expects an object (at ${path}.obj)`);
|
|
155
|
+
for (const [k, v] of Object.entries(arg)) {
|
|
156
|
+
// 静的 fail-closed(defense-in-depth): own key "__proto__" は evaluator が実行時に
|
|
157
|
+
// FORBIDDEN_KEY で拒否する(expression-ir.md §2.3/§8 — 言語間発散 / prototype
|
|
158
|
+
// pollution 対策)。guard でも静的に拒否する(JSON.parse 由来の IR では own key)。
|
|
159
|
+
if (k === FORBIDDEN_OBJECT_KEY)
|
|
160
|
+
throw new PortabilityError(`${path}.obj`, `Portability Guard: object key "${FORBIDDEN_OBJECT_KEY}" is forbidden (fail-closed) at ${path}.obj`);
|
|
161
|
+
assertPortableExpr(v, `${path}.obj.${k}`);
|
|
162
|
+
}
|
|
163
|
+
return;
|
|
164
|
+
}
|
|
165
|
+
// それ以外は arg(配列 or 式)を再帰。
|
|
166
|
+
assertPortableExpr(node[op], `${path}.${op}`);
|
|
167
|
+
return;
|
|
168
|
+
}
|
|
169
|
+
// 多キーオブジェクト(式木では通常出現しない)は各値を再帰検査(関数残存等の検出)。
|
|
170
|
+
for (const [k, v] of Object.entries(node))
|
|
171
|
+
assertPortableExpr(v, `${path}.${k}`);
|
|
172
|
+
}
|
|
43
173
|
//# sourceMappingURL=guard.js.map
|
package/dist/guard.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"guard.js","sourceRoot":"","sources":["../src/guard.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,MAAM,OAAO,gBAAiB,SAAQ,KAAK;IACzC,IAAI,CAAS;IACb,YAAY,IAAY,EAAE,OAAe;QACvC,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,IAAI,GAAG,kBAAkB,CAAC;IACjC,CAAC;CACF;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,cAAc,CAAC,KAAc,EAAE,IAAI,GAAG,GAAG;IACvD,IAAI,OAAO,KAAK,KAAK,UAAU;QAC7B,MAAM,IAAI,gBAAgB,CAAC,IAAI,EAAE,2DAA2D,IAAI,GAAG,CAAC,CAAC;IACvG,IAAI,KAAK,YAAY,IAAI,IAAI,KAAK,YAAY,OAAO;QACnD,MAAM,IAAI,gBAAgB,CACxB,IAAI,EACJ,sBAAsB,KAAK,CAAC,WAAW,CAAC,IAAI,+BAA+B,IAAI,GAAG,CACnF,CAAC;IACJ,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QACzB,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,cAAc,CAAC,CAAC,EAAE,GAAG,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;IAC9D,CAAC;SAAM,IAAI,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC9C,KAAK,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC;YAAE,cAAc,CAAC,CAAC,EAAE,GAAG,IAAI,IAAI,CAAC,EAAE,CAAC,CAAC;IAChF,CAAC;AACH,CAAC"}
|
|
1
|
+
{"version":3,"file":"guard.js","sourceRoot":"","sources":["../src/guard.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
|
@@ -24,6 +24,9 @@ export declare const SPEC_VERSIONS: {
|
|
|
24
24
|
readonly template: 1;
|
|
25
25
|
readonly plan: 1;
|
|
26
26
|
readonly canonical: 2;
|
|
27
|
+
readonly behavior: 2;
|
|
28
|
+
readonly guard: 1;
|
|
29
|
+
readonly c2: 1;
|
|
27
30
|
};
|
|
28
31
|
/** validateEnvelope に渡す graphddb 形式の既定 supported 版(`"<major>.<minor>"`)。 */
|
|
29
32
|
export declare const ENVELOPE_SPEC_VERSION: "1.1";
|
|
@@ -32,12 +35,20 @@ export { evaluate as evaluateExpression, encodeValue, cmpCodePoints, ExprFailure
|
|
|
32
35
|
export type { FailureCode as ExprFailureCode } from "./expr-eval.js";
|
|
33
36
|
export { renderTemplate, resolvePartial, TemplateFailure } from "./template.js";
|
|
34
37
|
export type { TemplateFailureCode } from "./template.js";
|
|
35
|
-
export { runPlan, finalTree, PlanFailure } from "./plan.js";
|
|
36
|
-
export type { ExecutionPlanSpec, OpSpec, Exec, ExecOutcome, RunResult, PolicyKind, RelationKind, PlanFailureCode, } from "./plan.js";
|
|
38
|
+
export { runPlan, runPlanAsync, finalTree, PlanFailure } from "./plan.js";
|
|
39
|
+
export type { ExecutionPlanSpec, OpSpec, Exec, AsyncExec, ExecOutcome, RunResult, PolicyKind, RelationKind, PlanFailureCode, } from "./plan.js";
|
|
37
40
|
export { canonicalValue, canonicalJson, pyFloatRepr, CanonicalFailure } from "./canonical.js";
|
|
38
41
|
export type { CanonicalFailureCode } from "./canonical.js";
|
|
39
42
|
export { validateEnvelope, EnvelopeFailure } from "./envelope.js";
|
|
40
43
|
export type { EnvelopeFailureCode } from "./envelope.js";
|
|
41
|
-
export { assertPortable, PortabilityError } from "./guard.js";
|
|
44
|
+
export { assertPortable, assertPortableComponentGraph, PORTABLE_EXPR_OPERATORS, PortabilityError } from "./guard.js";
|
|
45
|
+
export { runBehavior, runBehaviorAsync, BehaviorFailure } from "./behavior.js";
|
|
46
|
+
export type { ComponentGraphIR, Component, BodyNode, ComponentRefNode, MapNode, CondNode, PortSchema, 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";
|
|
42
51
|
export { decodeValue, deepEquals } from "./codec.js";
|
|
52
|
+
export { generateModule, registerEmitter, registeredLanguages, GeneratorFailure, fingerprintComponentGraph, FingerprintFailure, typescriptEmitter, pythonEmitter, } from "./generator/index.js";
|
|
53
|
+
export type { GenerateOptions, GeneratedModule, EmitContext, EmitterPlugin, GeneratorFailureCode, } from "./generator/index.js";
|
|
43
54
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAIH,eAAO,MAAM,aAAa
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAIH,eAAO,MAAM,aAAa;;;;;;;;CAQhB,CAAC;AAEX,4EAA4E;AAC5E,eAAO,MAAM,qBAAqB,EAAG,KAAc,CAAC;AAGpD,YAAY,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,gBAAgB,CAAC;AAGnD,OAAO,EAAE,QAAQ,IAAI,kBAAkB,EAAE,WAAW,EAAE,aAAa,EAAE,WAAW,EAAE,oBAAoB,EAAE,MAAM,gBAAgB,CAAC;AAC/H,YAAY,EAAE,WAAW,IAAI,eAAe,EAAE,MAAM,gBAAgB,CAAC;AAGrE,OAAO,EAAE,cAAc,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAChF,YAAY,EAAE,mBAAmB,EAAE,MAAM,eAAe,CAAC;AAGzD,OAAO,EAAE,OAAO,EAAE,YAAY,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AAC1E,YAAY,EACV,iBAAiB,EACjB,MAAM,EACN,IAAI,EACJ,SAAS,EACT,WAAW,EACX,SAAS,EACT,UAAU,EACV,YAAY,EACZ,eAAe,GAChB,MAAM,WAAW,CAAC;AAGnB,OAAO,EAAE,cAAc,EAAE,aAAa,EAAE,WAAW,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAC9F,YAAY,EAAE,oBAAoB,EAAE,MAAM,gBAAgB,CAAC;AAG3D,OAAO,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAClE,YAAY,EAAE,mBAAmB,EAAE,MAAM,eAAe,CAAC;AAGzD,OAAO,EAAE,cAAc,EAAE,4BAA4B,EAAE,uBAAuB,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAGrH,OAAO,EAAE,WAAW,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAC/E,YAAY,EACV,gBAAgB,EAChB,SAAS,EACT,QAAQ,EACR,gBAAgB,EAChB,OAAO,EACP,QAAQ,EACR,UAAU,EACV,YAAY,EACZ,aAAa,EACb,OAAO,EACP,OAAO,EACP,UAAU,EACV,QAAQ,EACR,YAAY,EACZ,aAAa,EACb,mBAAmB,GACpB,MAAM,eAAe,CAAC;AAGvB,OAAO,EAAE,wBAAwB,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AACxE,YAAY,EACV,uBAAuB,EACvB,+BAA+B,EAC/B,kBAAkB,GACnB,MAAM,cAAc,CAAC;AAGtB,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;AACxB,YAAY,EACV,EAAE,EACF,QAAQ,EACR,aAAa,EACb,uBAAuB,EACvB,cAAc,EACd,oBAAoB,GACrB,MAAM,gBAAgB,CAAC;AAGxB,OAAO,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAKrD,OAAO,EACL,cAAc,EACd,eAAe,EACf,mBAAmB,EACnB,gBAAgB,EAChB,yBAAyB,EACzB,kBAAkB,EAClB,iBAAiB,EACjB,aAAa,GACd,MAAM,sBAAsB,CAAC;AAC9B,YAAY,EACV,eAAe,EACf,eAAe,EACf,WAAW,EACX,aAAa,EACb,oBAAoB,GACrB,MAAM,sBAAsB,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -26,6 +26,9 @@ 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: 2, // v2: map.when / map.into / map.batched / handler ctx(bc#22。v1 IR の意味論は不変)
|
|
30
|
+
guard: 1, // 初版(bc#25: assertPortableComponentGraph の accept/reject を vector-pin)
|
|
31
|
+
c2: 1, // 初版(bc#28: c2-catalog-swap — catalog-swap 実行 + IR 構造一致の 5 言語 pin)
|
|
29
32
|
};
|
|
30
33
|
/** validateEnvelope に渡す graphddb 形式の既定 supported 版(`"<major>.<minor>"`)。 */
|
|
31
34
|
export const ENVELOPE_SPEC_VERSION = "1.1";
|
|
@@ -34,13 +37,23 @@ export { evaluate as evaluateExpression, encodeValue, cmpCodePoints, ExprFailure
|
|
|
34
37
|
// ── template(renderTemplate) ────────────────────────────────────────────────
|
|
35
38
|
export { renderTemplate, resolvePartial, TemplateFailure } from "./template.js";
|
|
36
39
|
// ── plan(runPlan) ───────────────────────────────────────────────────────────
|
|
37
|
-
export { runPlan, finalTree, PlanFailure } from "./plan.js";
|
|
40
|
+
export { runPlan, runPlanAsync, finalTree, PlanFailure } from "./plan.js";
|
|
38
41
|
// ── canonical(canonicalValue / canonicalJson / pyFloatRepr) ─────────────────
|
|
39
42
|
export { canonicalValue, canonicalJson, pyFloatRepr, CanonicalFailure } from "./canonical.js";
|
|
40
43
|
// ── envelope(validateEnvelope) ──────────────────────────────────────────────
|
|
41
44
|
export { validateEnvelope, EnvelopeFailure } from "./envelope.js";
|
|
42
45
|
// ── guard(Portability Guard) ────────────────────────────────────────────────
|
|
43
|
-
export { assertPortable, PortabilityError } from "./guard.js";
|
|
46
|
+
export { assertPortable, assertPortableComponentGraph, PORTABLE_EXPR_OPERATORS, PortabilityError } from "./guard.js";
|
|
47
|
+
// ── behavior(component-graph IR + runBehavior) ──────────────────────────────
|
|
48
|
+
export { runBehavior, runBehaviorAsync, BehaviorFailure } from "./behavior.js";
|
|
49
|
+
// ── builder(データ登録 IF — model-driven consumer 向け, bc#26)───────────────
|
|
50
|
+
export { buildComponentDefinition, BuilderFailure } from "./builder.js";
|
|
51
|
+
// ── 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";
|
|
44
53
|
// ── conformance runner adapter 共通部 ─────────────────────────────────────────
|
|
45
54
|
export { decodeValue, deepEquals } from "./codec.js";
|
|
55
|
+
// ── generator(SCP Runtime Code Generation Layer — 共通 Generator, bc#13)─────
|
|
56
|
+
// 可搬 IR のみを入力とする DSL 非依存の多言語 codegen(scp-ir-architecture.md §7.2–§7.4)。
|
|
57
|
+
// 生成コードは既存 runtime-core API を呼ぶ薄い束ね(実行ロジックは生成しない)。
|
|
58
|
+
export { generateModule, registerEmitter, registeredLanguages, GeneratorFailure, fingerprintComponentGraph, FingerprintFailure, typescriptEmitter, pythonEmitter, } from "./generator/index.js";
|
|
46
59
|
//# 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;
|
|
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,2EAA2E;IACxF,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,EAAE,cAAc,EAAE,4BAA4B,EAAE,uBAAuB,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAErH,+EAA+E;AAC/E,OAAO,EAAE,WAAW,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAoB/E,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,6EAA6E;AAC7E,wEAAwE;AACxE,mDAAmD;AACnD,OAAO,EACL,cAAc,EACd,eAAe,EACf,mBAAmB,EACnB,gBAAgB,EAChB,yBAAyB,EACzB,kBAAkB,EAClB,iBAAiB,EACjB,aAAa,GACd,MAAM,sBAAsB,CAAC"}
|
package/dist/plan.d.ts
CHANGED
|
@@ -14,6 +14,15 @@
|
|
|
14
14
|
* - mapWithConcurrency は入力順を保存(output[i] = worker(items[i]))。完了順非依存。
|
|
15
15
|
* - stage 間は逐次(後 stage が前 stage の result を読む)。
|
|
16
16
|
* - 各 worker は result tree の disjoint スロット(自ノードの port)に書く → Φ 合流は決定的。
|
|
17
|
+
*
|
|
18
|
+
* 並列実行(bc#23、execution-plan.md §4.1):
|
|
19
|
+
* - 同期 API(runPlan): 同期コールバックは JS では重畳できないため**逐次のまま**
|
|
20
|
+
* (§4.1 の conforming fallback。結果は並列版と byte 一致)。
|
|
21
|
+
* - 非同期 API(runPlanAsync): exec が Promise を返す場合、stage 内メンバを
|
|
22
|
+
* `plan.concurrency` を上限とした bounded 並列で**投機的に dispatch** し、
|
|
23
|
+
* 解釈(Skip/Policy/Failure)は **index 昇順の決定的 commit** で行う。
|
|
24
|
+
* 観測結果(result tree / executed / skipped / Failure code・message)は逐次実行と
|
|
25
|
+
* 完全一致(determinism proof = 既存 conformance vectors が両経路で PASS すること)。
|
|
17
26
|
*/
|
|
18
27
|
import type { Value } from "./expr-eval.js";
|
|
19
28
|
export interface ExecutionPlanSpec {
|
|
@@ -42,6 +51,13 @@ export type ExecOutcome = {
|
|
|
42
51
|
};
|
|
43
52
|
/** exec(op, boundValue) — boundValue は親 result[bindField](root は null)。 */
|
|
44
53
|
export type Exec = (op: OpSpec, boundValue: Value | undefined) => ExecOutcome;
|
|
54
|
+
/**
|
|
55
|
+
* 非同期 exec(runPlanAsync 用)。ExecOutcome を同期で返しても Promise で返してもよい。
|
|
56
|
+
* `plan.concurrency > 1` のとき、同一 stage 内のメンバに対して**並行に呼ばれ得る**
|
|
57
|
+
* (=consumer 実装はその並行度までスレッド安全/再入安全であることを宣言したことになる。
|
|
58
|
+
* 並行呼び出しを許容しない consumer は `concurrency: 1` の plan を出荷する)。
|
|
59
|
+
*/
|
|
60
|
+
export type AsyncExec = (op: OpSpec, boundValue: Value | undefined) => ExecOutcome | Promise<ExecOutcome>;
|
|
45
61
|
type OpState = {
|
|
46
62
|
status: "ok";
|
|
47
63
|
value: Value;
|
|
@@ -72,6 +88,26 @@ export interface RunResult {
|
|
|
72
88
|
* @param exec ノード実行 mock(consumer 委譲)。
|
|
73
89
|
*/
|
|
74
90
|
export declare function runPlan(plan: ExecutionPlanSpec | null, ops: OpSpec[], exec: Exec): RunResult;
|
|
91
|
+
/**
|
|
92
|
+
* runPlanAsync — runPlan の非同期版(bc#23)。stage 内メンバを `plan.concurrency` を
|
|
93
|
+
* 上限とした bounded 並列で dispatch する。
|
|
94
|
+
*
|
|
95
|
+
* 決定的 commit プロトコル(execution-plan.md §4.1):
|
|
96
|
+
* 1. preflight(index 昇順): policy 検証・Skip 判定・bindField 束縛を、確定済みの
|
|
97
|
+
* 前 stage state から導出する(stage 内メンバは相互独立 — §1)。
|
|
98
|
+
* 2. dispatch(index 昇順・bounded): 実行対象メンバの exec を並行に発行する。
|
|
99
|
+
* 3. commit(index 昇順): outcome を宣言順に解釈する(Skip 記録 / Policy Kind /
|
|
100
|
+
* Failure 伝播)。最初に fail する解釈が逐次実行と同一の Failure を投げる。
|
|
101
|
+
*
|
|
102
|
+
* 逐次実行との観測等価: result tree / executed / skipped / Failure(code・message)は
|
|
103
|
+
* runPlan と byte 一致。**相違は投機的 dispatch のみ**(あるメンバの解釈が Failure でも、
|
|
104
|
+
* 同 stage の後続メンバの exec は既に発行され得る。旧 graphddb の thread-overlap と同じ許容)。
|
|
105
|
+
*
|
|
106
|
+
* 安全 fallback(結果は不変のまま逐次 dispatch に切り替える):
|
|
107
|
+
* - `concurrency <= 1` / stage メンバが 1 個以下。
|
|
108
|
+
* - stage 内に親子依存があるとき(§1 違反 plan への防御 — 逐次実行の可視性semantics を保存)。
|
|
109
|
+
*/
|
|
110
|
+
export declare function runPlanAsync(plan: ExecutionPlanSpec | null, ops: OpSpec[], exec: AsyncExec): Promise<RunResult>;
|
|
75
111
|
/**
|
|
76
112
|
* finalTree — states を index→port の result tree(Φ 合流の観測形)へ整形する。
|
|
77
113
|
* ok → 値 / skipped → 未生成表現(single=null / connection=空 connection)。
|
package/dist/plan.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"plan.d.ts","sourceRoot":"","sources":["../src/plan.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"plan.d.ts","sourceRoot":"","sources":["../src/plan.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,gBAAgB,CAAC;AAG5C,MAAM,WAAW,iBAAiB;IAChC,MAAM,EAAE,MAAM,EAAE,EAAE,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,MAAM,UAAU,GAAG,MAAM,GAAG,OAAO,GAAG,UAAU,CAAC;AACvD,MAAM,MAAM,YAAY,GAAG,QAAQ,GAAG,YAAY,CAAC;AAEnD,MAAM,WAAW,MAAM;IACrB,eAAe;IACf,EAAE,EAAE,MAAM,CAAC;IACX,2DAA2D;IAC3D,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,+DAA+D;IAC/D,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,8DAA8D;IAC9D,YAAY,CAAC,EAAE,YAAY,CAAC;IAC5B,kCAAkC;IAClC,MAAM,CAAC,EAAE,UAAU,CAAC;CACrB;AAED,mCAAmC;AACnC,MAAM,MAAM,WAAW,GACnB;IAAE,EAAE,EAAE,KAAK,CAAA;CAAE,GACb;IAAE,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC;AAEtB,2EAA2E;AAC3E,MAAM,MAAM,IAAI,GAAG,CAAC,EAAE,EAAE,MAAM,EAAE,UAAU,EAAE,KAAK,GAAG,SAAS,KAAK,WAAW,CAAC;AAE9E;;;;;GAKG;AACH,MAAM,MAAM,SAAS,GAAG,CAAC,EAAE,EAAE,MAAM,EAAE,UAAU,EAAE,KAAK,GAAG,SAAS,KAAK,WAAW,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC;AAG1G,KAAK,OAAO,GACR;IAAE,MAAM,EAAE,IAAI,CAAC;IAAC,KAAK,EAAE,KAAK,CAAA;CAAE,GAC9B;IAAE,MAAM,EAAE,SAAS,CAAA;CAAE,GACrB;IAAE,MAAM,EAAE,QAAQ,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC;AAExC,MAAM,MAAM,eAAe,GACvB,WAAW,GACX,gBAAgB,GAChB,cAAc,CAAC;AAEnB,qBAAa,WAAY,SAAQ,KAAK;IACpC,IAAI,EAAE,eAAe,CAAC;gBACV,IAAI,EAAE,eAAe,EAAE,OAAO,EAAE,MAAM;CAKnD;AAMD,MAAM,WAAW,SAAS;IACxB,kCAAkC;IAClC,MAAM,EAAE,OAAO,EAAE,CAAC;IAClB,sDAAsD;IACtD,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,gCAAgC;IAChC,OAAO,EAAE,MAAM,EAAE,CAAC;CACnB;AAOD;;;;;;GAMG;AACH,wBAAgB,OAAO,CAAC,IAAI,EAAE,iBAAiB,GAAG,IAAI,EAAE,GAAG,EAAE,MAAM,EAAE,EAAE,IAAI,EAAE,IAAI,GAAG,SAAS,CA8B5F;AAED;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAsB,YAAY,CAChC,IAAI,EAAE,iBAAiB,GAAG,IAAI,EAC9B,GAAG,EAAE,MAAM,EAAE,EACb,IAAI,EAAE,SAAS,GACd,OAAO,CAAC,SAAS,CAAC,CA+EpB;AA8HD;;;;GAIG;AACH,wBAAgB,SAAS,CAAC,MAAM,EAAE,OAAO,EAAE,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,CAQjF"}
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
70
|
-
return { status: "skipped" };
|
|
71
|
-
}
|
|
191
|
+
if (bound === undefined || bound === null)
|
|
192
|
+
return { kind: "skip" };
|
|
72
193
|
boundValue = bound;
|
|
73
194
|
}
|
|
74
195
|
}
|
|
75
|
-
|
|
76
|
-
|
|
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":"
|
|
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.
|
|
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",
|
|
@@ -28,6 +28,9 @@
|
|
|
28
28
|
"template": 1,
|
|
29
29
|
"plan": 1,
|
|
30
30
|
"canonical": 2,
|
|
31
|
+
"behavior": 2,
|
|
32
|
+
"guard": 1,
|
|
33
|
+
"c2": 1,
|
|
31
34
|
"envelope": "1.1"
|
|
32
35
|
},
|
|
33
36
|
"keywords": [
|