ai-workflow-flow-dsl-reference 0.1.0 → 0.1.2
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/dist/resource-module/WikiPages/README/manifest.xnl +1 -1
- package/dist/resource-module/WikiPages/foundation__depa-axioms/manifest.xnl +1 -1
- package/dist/resource-module/WikiPages/foundation__naming-axioms/manifest.xnl +1 -1
- package/dist/resource-module/WikiPages/foundation__syntax-axioms/manifest.xnl +1 -1
- package/dist/resource-module/WikiPages/spec__ai-workflow__ctrl-workflow/manifest.xnl +1 -1
- package/dist/resource-module/WikiPages/spec__ai-workflow__data-workflow/manifest.xnl +1 -1
- package/dist/resource-module/WikiPages/spec__ai-workflow__resources/manifest.xnl +1 -1
- package/dist/resource-module/WikiPages/spec__bp-ctrl-flow__domains/manifest.xnl +1 -1
- package/dist/resource-module/WikiPages/spec__bp-ctrl-flow__nodes/manifest.xnl +1 -1
- package/dist/resource-module/WikiPages/spec__eager-data-flow__domains/manifest.xnl +1 -1
- package/dist/resource-module/WikiPages/spec__eager-data-flow__files/manifest.xnl +1 -1
- package/dist/resource-module/WikiPages/spec__eager-data-flow__nodes/manifest.xnl +1 -1
- package/dist/resource-module/WikiPages/spec__eager-data-flow__refs/manifest.xnl +1 -1
- package/dist/resource-module/WikiPages/spec__flow-core__domains/manifest.xnl +1 -1
- package/dist/resource-module/WikiPages/spec__flow-core__files/manifest.xnl +1 -1
- package/dist/resource-module/WikiPages/spec__flow-core__instance-run/manifest.xnl +6 -0
- package/dist/resource-module/WikiPages/spec__flow-core__nodes/manifest.xnl +1 -1
- package/dist/resource-module/WikiPages/spec__flow-core__orchestration/manifest.xnl +1 -1
- package/dist/resource-module/WikiPages/spec__flow-core__refs/manifest.xnl +1 -1
- package/dist/resource-module/WikiPages/spec__instant-ctrl-flow__domains/manifest.xnl +1 -1
- package/dist/resource-module/WikiPages/spec__instant-ctrl-flow__nodes/manifest.xnl +1 -1
- package/dist/resource-module/WikiPages/spec__work-ctrl-flow__domains/manifest.xnl +1 -1
- package/dist/resource-module/WikiPages/spec__work-ctrl-flow__nodes/manifest.xnl +1 -1
- package/dist/resource-module/WikiPages/std__ai-ctrl-workflow__axioms/manifest.xnl +1 -1
- package/dist/resource-module/WikiPages/std__ai-data-workflow__axioms/manifest.xnl +1 -1
- package/dist/resource-module/WikiPages/std__behavior-tree__axioms/manifest.xnl +1 -1
- package/dist/resource-module/WikiPages/std__bp-ctrl-flow__axioms/manifest.xnl +1 -1
- package/dist/resource-module/WikiPages/std__eager-data-flow__axioms/manifest.xnl +1 -1
- package/dist/resource-module/WikiPages/std__instant-ctrl-flow__axioms/manifest.xnl +1 -1
- package/dist/resource-module/WikiPages/std__work-ctrl-flow__axioms/manifest.xnl +1 -1
- package/dist/resource-module/content/.depa-flow-dsl-provenance.json +16 -12
- package/dist/resource-module/content/README.md +12 -8
- package/dist/resource-module/content/foundation/depa-axioms.md +1 -1
- package/dist/resource-module/content/spec/ai-workflow/ctrl-workflow.md +14 -11
- package/dist/resource-module/content/spec/ai-workflow/data-workflow.md +18 -2
- package/dist/resource-module/content/spec/ai-workflow/resources.md +49 -4
- package/dist/resource-module/content/spec/flow-core/instance-run.md +120 -0
- package/dist/resource-module/content/spec/work-ctrl-flow/domains.md +4 -4
- package/dist/resource-module/content/std/ai-ctrl-workflow/axioms.md +4 -2
- package/dist/resource-module/content/std/ai-data-workflow/axioms.md +5 -1
- package/dist/resource-module/content/std/work-ctrl-flow/axioms.md +3 -3
- package/dist/resource-module/manifest.xnl +1 -1
- package/package.json +1 -1
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
<WikiPage #Depa.Flows.FlowDsl.Reference.Wiki.Readme apiVersion="halfcode.resources/v1" version="1.0.
|
|
1
|
+
<WikiPage #Depa.Flows.FlowDsl.Reference.Wiki.Readme apiVersion="halfcode.resources/v1" version="1.0.1" {
|
|
2
2
|
lifecycle = "Stable"
|
|
3
3
|
description = "Canonical depa Flow DSL reference page: README.md."
|
|
4
4
|
} (
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
<WikiPage #Depa.Flows.FlowDsl.Reference.Wiki.Foundation.Depa.Axioms apiVersion="halfcode.resources/v1" version="1.0.
|
|
1
|
+
<WikiPage #Depa.Flows.FlowDsl.Reference.Wiki.Foundation.Depa.Axioms apiVersion="halfcode.resources/v1" version="1.0.1" {
|
|
2
2
|
lifecycle = "Stable"
|
|
3
3
|
description = "Canonical depa Flow DSL reference page: foundation/depa-axioms.md."
|
|
4
4
|
} (
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
<WikiPage #Depa.Flows.FlowDsl.Reference.Wiki.Foundation.Naming.Axioms apiVersion="halfcode.resources/v1" version="1.0.
|
|
1
|
+
<WikiPage #Depa.Flows.FlowDsl.Reference.Wiki.Foundation.Naming.Axioms apiVersion="halfcode.resources/v1" version="1.0.1" {
|
|
2
2
|
lifecycle = "Stable"
|
|
3
3
|
description = "Canonical depa Flow DSL reference page: foundation/naming-axioms.md."
|
|
4
4
|
} (
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
<WikiPage #Depa.Flows.FlowDsl.Reference.Wiki.Foundation.Syntax.Axioms apiVersion="halfcode.resources/v1" version="1.0.
|
|
1
|
+
<WikiPage #Depa.Flows.FlowDsl.Reference.Wiki.Foundation.Syntax.Axioms apiVersion="halfcode.resources/v1" version="1.0.1" {
|
|
2
2
|
lifecycle = "Stable"
|
|
3
3
|
description = "Canonical depa Flow DSL reference page: foundation/syntax-axioms.md."
|
|
4
4
|
} (
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
<WikiPage #Depa.Flows.FlowDsl.Reference.Wiki.Spec.Ai.Workflow.Ctrl.Workflow apiVersion="halfcode.resources/v1" version="1.0.
|
|
1
|
+
<WikiPage #Depa.Flows.FlowDsl.Reference.Wiki.Spec.Ai.Workflow.Ctrl.Workflow apiVersion="halfcode.resources/v1" version="1.0.1" {
|
|
2
2
|
lifecycle = "Stable"
|
|
3
3
|
description = "Canonical depa Flow DSL reference page: spec/ai-workflow/ctrl-workflow.md."
|
|
4
4
|
} (
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
<WikiPage #Depa.Flows.FlowDsl.Reference.Wiki.Spec.Ai.Workflow.Data.Workflow apiVersion="halfcode.resources/v1" version="1.0.
|
|
1
|
+
<WikiPage #Depa.Flows.FlowDsl.Reference.Wiki.Spec.Ai.Workflow.Data.Workflow apiVersion="halfcode.resources/v1" version="1.0.1" {
|
|
2
2
|
lifecycle = "Stable"
|
|
3
3
|
description = "Canonical depa Flow DSL reference page: spec/ai-workflow/data-workflow.md."
|
|
4
4
|
} (
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
<WikiPage #Depa.Flows.FlowDsl.Reference.Wiki.Spec.Ai.Workflow.Resources apiVersion="halfcode.resources/v1" version="1.0.
|
|
1
|
+
<WikiPage #Depa.Flows.FlowDsl.Reference.Wiki.Spec.Ai.Workflow.Resources apiVersion="halfcode.resources/v1" version="1.0.1" {
|
|
2
2
|
lifecycle = "Stable"
|
|
3
3
|
description = "Canonical depa Flow DSL reference page: spec/ai-workflow/resources.md."
|
|
4
4
|
} (
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
<WikiPage #Depa.Flows.FlowDsl.Reference.Wiki.Spec.Bp.Ctrl.Flow.Domains apiVersion="halfcode.resources/v1" version="1.0.
|
|
1
|
+
<WikiPage #Depa.Flows.FlowDsl.Reference.Wiki.Spec.Bp.Ctrl.Flow.Domains apiVersion="halfcode.resources/v1" version="1.0.1" {
|
|
2
2
|
lifecycle = "Stable"
|
|
3
3
|
description = "Canonical depa Flow DSL reference page: spec/bp-ctrl-flow/domains.md."
|
|
4
4
|
} (
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
<WikiPage #Depa.Flows.FlowDsl.Reference.Wiki.Spec.Bp.Ctrl.Flow.Nodes apiVersion="halfcode.resources/v1" version="1.0.
|
|
1
|
+
<WikiPage #Depa.Flows.FlowDsl.Reference.Wiki.Spec.Bp.Ctrl.Flow.Nodes apiVersion="halfcode.resources/v1" version="1.0.1" {
|
|
2
2
|
lifecycle = "Stable"
|
|
3
3
|
description = "Canonical depa Flow DSL reference page: spec/bp-ctrl-flow/nodes.md."
|
|
4
4
|
} (
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
<WikiPage #Depa.Flows.FlowDsl.Reference.Wiki.Spec.Eager.Data.Flow.Domains apiVersion="halfcode.resources/v1" version="1.0.
|
|
1
|
+
<WikiPage #Depa.Flows.FlowDsl.Reference.Wiki.Spec.Eager.Data.Flow.Domains apiVersion="halfcode.resources/v1" version="1.0.1" {
|
|
2
2
|
lifecycle = "Stable"
|
|
3
3
|
description = "Canonical depa Flow DSL reference page: spec/eager-data-flow/domains.md."
|
|
4
4
|
} (
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
<WikiPage #Depa.Flows.FlowDsl.Reference.Wiki.Spec.Eager.Data.Flow.Files apiVersion="halfcode.resources/v1" version="1.0.
|
|
1
|
+
<WikiPage #Depa.Flows.FlowDsl.Reference.Wiki.Spec.Eager.Data.Flow.Files apiVersion="halfcode.resources/v1" version="1.0.1" {
|
|
2
2
|
lifecycle = "Stable"
|
|
3
3
|
description = "Canonical depa Flow DSL reference page: spec/eager-data-flow/files.md."
|
|
4
4
|
} (
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
<WikiPage #Depa.Flows.FlowDsl.Reference.Wiki.Spec.Eager.Data.Flow.Nodes apiVersion="halfcode.resources/v1" version="1.0.
|
|
1
|
+
<WikiPage #Depa.Flows.FlowDsl.Reference.Wiki.Spec.Eager.Data.Flow.Nodes apiVersion="halfcode.resources/v1" version="1.0.1" {
|
|
2
2
|
lifecycle = "Stable"
|
|
3
3
|
description = "Canonical depa Flow DSL reference page: spec/eager-data-flow/nodes.md."
|
|
4
4
|
} (
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
<WikiPage #Depa.Flows.FlowDsl.Reference.Wiki.Spec.Eager.Data.Flow.Refs apiVersion="halfcode.resources/v1" version="1.0.
|
|
1
|
+
<WikiPage #Depa.Flows.FlowDsl.Reference.Wiki.Spec.Eager.Data.Flow.Refs apiVersion="halfcode.resources/v1" version="1.0.1" {
|
|
2
2
|
lifecycle = "Stable"
|
|
3
3
|
description = "Canonical depa Flow DSL reference page: spec/eager-data-flow/refs.md."
|
|
4
4
|
} (
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
<WikiPage #Depa.Flows.FlowDsl.Reference.Wiki.Spec.Flow.Core.Domains apiVersion="halfcode.resources/v1" version="1.0.
|
|
1
|
+
<WikiPage #Depa.Flows.FlowDsl.Reference.Wiki.Spec.Flow.Core.Domains apiVersion="halfcode.resources/v1" version="1.0.1" {
|
|
2
2
|
lifecycle = "Stable"
|
|
3
3
|
description = "Canonical depa Flow DSL reference page: spec/flow-core/domains.md."
|
|
4
4
|
} (
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
<WikiPage #Depa.Flows.FlowDsl.Reference.Wiki.Spec.Flow.Core.Files apiVersion="halfcode.resources/v1" version="1.0.
|
|
1
|
+
<WikiPage #Depa.Flows.FlowDsl.Reference.Wiki.Spec.Flow.Core.Files apiVersion="halfcode.resources/v1" version="1.0.1" {
|
|
2
2
|
lifecycle = "Stable"
|
|
3
3
|
description = "Canonical depa Flow DSL reference page: spec/flow-core/files.md."
|
|
4
4
|
} (
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
<WikiPage #Depa.Flows.FlowDsl.Reference.Wiki.Spec.Flow.Core.Instance.Run apiVersion="halfcode.resources/v1" version="1.0.1" {
|
|
2
|
+
lifecycle = "Stable"
|
|
3
|
+
description = "Canonical depa Flow DSL reference page: spec/flow-core/instance-run.md."
|
|
4
|
+
} (
|
|
5
|
+
<Instruction { href = "vfs://@/content/spec/flow-core/instance-run.md" format = "markdown" }>
|
|
6
|
+
)>
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
<WikiPage #Depa.Flows.FlowDsl.Reference.Wiki.Spec.Flow.Core.Nodes apiVersion="halfcode.resources/v1" version="1.0.
|
|
1
|
+
<WikiPage #Depa.Flows.FlowDsl.Reference.Wiki.Spec.Flow.Core.Nodes apiVersion="halfcode.resources/v1" version="1.0.1" {
|
|
2
2
|
lifecycle = "Stable"
|
|
3
3
|
description = "Canonical depa Flow DSL reference page: spec/flow-core/nodes.md."
|
|
4
4
|
} (
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
<WikiPage #Depa.Flows.FlowDsl.Reference.Wiki.Spec.Flow.Core.Orchestration apiVersion="halfcode.resources/v1" version="1.0.
|
|
1
|
+
<WikiPage #Depa.Flows.FlowDsl.Reference.Wiki.Spec.Flow.Core.Orchestration apiVersion="halfcode.resources/v1" version="1.0.1" {
|
|
2
2
|
lifecycle = "Stable"
|
|
3
3
|
description = "Canonical depa Flow DSL reference page: spec/flow-core/orchestration.md."
|
|
4
4
|
} (
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
<WikiPage #Depa.Flows.FlowDsl.Reference.Wiki.Spec.Flow.Core.Refs apiVersion="halfcode.resources/v1" version="1.0.
|
|
1
|
+
<WikiPage #Depa.Flows.FlowDsl.Reference.Wiki.Spec.Flow.Core.Refs apiVersion="halfcode.resources/v1" version="1.0.1" {
|
|
2
2
|
lifecycle = "Stable"
|
|
3
3
|
description = "Canonical depa Flow DSL reference page: spec/flow-core/refs.md."
|
|
4
4
|
} (
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
<WikiPage #Depa.Flows.FlowDsl.Reference.Wiki.Spec.Instant.Ctrl.Flow.Domains apiVersion="halfcode.resources/v1" version="1.0.
|
|
1
|
+
<WikiPage #Depa.Flows.FlowDsl.Reference.Wiki.Spec.Instant.Ctrl.Flow.Domains apiVersion="halfcode.resources/v1" version="1.0.1" {
|
|
2
2
|
lifecycle = "Stable"
|
|
3
3
|
description = "Canonical depa Flow DSL reference page: spec/instant-ctrl-flow/domains.md."
|
|
4
4
|
} (
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
<WikiPage #Depa.Flows.FlowDsl.Reference.Wiki.Spec.Instant.Ctrl.Flow.Nodes apiVersion="halfcode.resources/v1" version="1.0.
|
|
1
|
+
<WikiPage #Depa.Flows.FlowDsl.Reference.Wiki.Spec.Instant.Ctrl.Flow.Nodes apiVersion="halfcode.resources/v1" version="1.0.1" {
|
|
2
2
|
lifecycle = "Stable"
|
|
3
3
|
description = "Canonical depa Flow DSL reference page: spec/instant-ctrl-flow/nodes.md."
|
|
4
4
|
} (
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
<WikiPage #Depa.Flows.FlowDsl.Reference.Wiki.Spec.Work.Ctrl.Flow.Domains apiVersion="halfcode.resources/v1" version="1.0.
|
|
1
|
+
<WikiPage #Depa.Flows.FlowDsl.Reference.Wiki.Spec.Work.Ctrl.Flow.Domains apiVersion="halfcode.resources/v1" version="1.0.1" {
|
|
2
2
|
lifecycle = "Stable"
|
|
3
3
|
description = "Canonical depa Flow DSL reference page: spec/work-ctrl-flow/domains.md."
|
|
4
4
|
} (
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
<WikiPage #Depa.Flows.FlowDsl.Reference.Wiki.Spec.Work.Ctrl.Flow.Nodes apiVersion="halfcode.resources/v1" version="1.0.
|
|
1
|
+
<WikiPage #Depa.Flows.FlowDsl.Reference.Wiki.Spec.Work.Ctrl.Flow.Nodes apiVersion="halfcode.resources/v1" version="1.0.1" {
|
|
2
2
|
lifecycle = "Stable"
|
|
3
3
|
description = "Canonical depa Flow DSL reference page: spec/work-ctrl-flow/nodes.md."
|
|
4
4
|
} (
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
<WikiPage #Depa.Flows.FlowDsl.Reference.Wiki.Std.Ai.Ctrl.Workflow.Axioms apiVersion="halfcode.resources/v1" version="1.0.
|
|
1
|
+
<WikiPage #Depa.Flows.FlowDsl.Reference.Wiki.Std.Ai.Ctrl.Workflow.Axioms apiVersion="halfcode.resources/v1" version="1.0.1" {
|
|
2
2
|
lifecycle = "Stable"
|
|
3
3
|
description = "Canonical depa Flow DSL reference page: std/ai-ctrl-workflow/axioms.md."
|
|
4
4
|
} (
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
<WikiPage #Depa.Flows.FlowDsl.Reference.Wiki.Std.Ai.Data.Workflow.Axioms apiVersion="halfcode.resources/v1" version="1.0.
|
|
1
|
+
<WikiPage #Depa.Flows.FlowDsl.Reference.Wiki.Std.Ai.Data.Workflow.Axioms apiVersion="halfcode.resources/v1" version="1.0.1" {
|
|
2
2
|
lifecycle = "Stable"
|
|
3
3
|
description = "Canonical depa Flow DSL reference page: std/ai-data-workflow/axioms.md."
|
|
4
4
|
} (
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
<WikiPage #Depa.Flows.FlowDsl.Reference.Wiki.Std.Behavior.Tree.Axioms apiVersion="halfcode.resources/v1" version="1.0.
|
|
1
|
+
<WikiPage #Depa.Flows.FlowDsl.Reference.Wiki.Std.Behavior.Tree.Axioms apiVersion="halfcode.resources/v1" version="1.0.1" {
|
|
2
2
|
lifecycle = "Stable"
|
|
3
3
|
description = "Canonical depa Flow DSL reference page: std/behavior-tree/axioms.md."
|
|
4
4
|
} (
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
<WikiPage #Depa.Flows.FlowDsl.Reference.Wiki.Std.Bp.Ctrl.Flow.Axioms apiVersion="halfcode.resources/v1" version="1.0.
|
|
1
|
+
<WikiPage #Depa.Flows.FlowDsl.Reference.Wiki.Std.Bp.Ctrl.Flow.Axioms apiVersion="halfcode.resources/v1" version="1.0.1" {
|
|
2
2
|
lifecycle = "Stable"
|
|
3
3
|
description = "Canonical depa Flow DSL reference page: std/bp-ctrl-flow/axioms.md."
|
|
4
4
|
} (
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
<WikiPage #Depa.Flows.FlowDsl.Reference.Wiki.Std.Eager.Data.Flow.Axioms apiVersion="halfcode.resources/v1" version="1.0.
|
|
1
|
+
<WikiPage #Depa.Flows.FlowDsl.Reference.Wiki.Std.Eager.Data.Flow.Axioms apiVersion="halfcode.resources/v1" version="1.0.1" {
|
|
2
2
|
lifecycle = "Stable"
|
|
3
3
|
description = "Canonical depa Flow DSL reference page: std/eager-data-flow/axioms.md."
|
|
4
4
|
} (
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
<WikiPage #Depa.Flows.FlowDsl.Reference.Wiki.Std.Instant.Ctrl.Flow.Axioms apiVersion="halfcode.resources/v1" version="1.0.
|
|
1
|
+
<WikiPage #Depa.Flows.FlowDsl.Reference.Wiki.Std.Instant.Ctrl.Flow.Axioms apiVersion="halfcode.resources/v1" version="1.0.1" {
|
|
2
2
|
lifecycle = "Stable"
|
|
3
3
|
description = "Canonical depa Flow DSL reference page: std/instant-ctrl-flow/axioms.md."
|
|
4
4
|
} (
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
<WikiPage #Depa.Flows.FlowDsl.Reference.Wiki.Std.Work.Ctrl.Flow.Axioms apiVersion="halfcode.resources/v1" version="1.0.
|
|
1
|
+
<WikiPage #Depa.Flows.FlowDsl.Reference.Wiki.Std.Work.Ctrl.Flow.Axioms apiVersion="halfcode.resources/v1" version="1.0.1" {
|
|
2
2
|
lifecycle = "Stable"
|
|
3
3
|
description = "Canonical depa Flow DSL reference page: std/work-ctrl-flow/axioms.md."
|
|
4
4
|
} (
|
|
@@ -2,18 +2,18 @@
|
|
|
2
2
|
"schemaVersion": "depa.flow-dsl-reference/v1",
|
|
3
3
|
"moduleId": "DepaFlowsFlowDslReference",
|
|
4
4
|
"packageName": "ai-workflow-flow-dsl-reference",
|
|
5
|
-
"packageVersion": "0.1.
|
|
6
|
-
"resourcePackageVersion": "1.0.
|
|
5
|
+
"packageVersion": "0.1.2",
|
|
6
|
+
"resourcePackageVersion": "1.0.1",
|
|
7
7
|
"source": "depa-flows/docs/flow-dsl",
|
|
8
|
-
"sourceTreeDigest": "sha256:
|
|
8
|
+
"sourceTreeDigest": "sha256:c8268e015607846b72e1946147a8ce20b9f4c8e77cafb63ad6508db723b038f2",
|
|
9
9
|
"files": [
|
|
10
10
|
{
|
|
11
11
|
"path": "README.md",
|
|
12
|
-
"contentDigest": "sha256:
|
|
12
|
+
"contentDigest": "sha256:39feeeffe47b597ac89c73e30b9b78bb6415afad2f94d8ed89c926db2c4e55f2"
|
|
13
13
|
},
|
|
14
14
|
{
|
|
15
15
|
"path": "foundation/depa-axioms.md",
|
|
16
|
-
"contentDigest": "sha256:
|
|
16
|
+
"contentDigest": "sha256:9b4ceb95bdb613b256b53ef1944da760b55fdf982bc2b29dc839bb4e2da74730"
|
|
17
17
|
},
|
|
18
18
|
{
|
|
19
19
|
"path": "foundation/naming-axioms.md",
|
|
@@ -25,15 +25,15 @@
|
|
|
25
25
|
},
|
|
26
26
|
{
|
|
27
27
|
"path": "spec/ai-workflow/ctrl-workflow.md",
|
|
28
|
-
"contentDigest": "sha256:
|
|
28
|
+
"contentDigest": "sha256:d2f31705df3a0954f17b36af498e7372d57b589c1b9d16baad6f224634caa2ce"
|
|
29
29
|
},
|
|
30
30
|
{
|
|
31
31
|
"path": "spec/ai-workflow/data-workflow.md",
|
|
32
|
-
"contentDigest": "sha256:
|
|
32
|
+
"contentDigest": "sha256:8852359bb530f4053257b9bbf4f1a314da3cf8972ade8c9579406eec82d93de6"
|
|
33
33
|
},
|
|
34
34
|
{
|
|
35
35
|
"path": "spec/ai-workflow/resources.md",
|
|
36
|
-
"contentDigest": "sha256:
|
|
36
|
+
"contentDigest": "sha256:a2f629f1d6aee481ec725e628284712ae36430dcad5f6f149d6d88d1bf2b4ece"
|
|
37
37
|
},
|
|
38
38
|
{
|
|
39
39
|
"path": "spec/bp-ctrl-flow/domains.md",
|
|
@@ -67,6 +67,10 @@
|
|
|
67
67
|
"path": "spec/flow-core/files.md",
|
|
68
68
|
"contentDigest": "sha256:0f0a66aac65c8c59d5e6dd462ddceb0ebb579c4b95a34c2579bd608b85cf655c"
|
|
69
69
|
},
|
|
70
|
+
{
|
|
71
|
+
"path": "spec/flow-core/instance-run.md",
|
|
72
|
+
"contentDigest": "sha256:c9dad759aa68b4b201875ced2fcfd334c1bcac5cd721946cdbb6c4837ac202e0"
|
|
73
|
+
},
|
|
70
74
|
{
|
|
71
75
|
"path": "spec/flow-core/nodes.md",
|
|
72
76
|
"contentDigest": "sha256:732f74f90e34bee64e6ed1c7b158b3192839f4fd30f254eba0f8205e6d648338"
|
|
@@ -89,7 +93,7 @@
|
|
|
89
93
|
},
|
|
90
94
|
{
|
|
91
95
|
"path": "spec/work-ctrl-flow/domains.md",
|
|
92
|
-
"contentDigest": "sha256:
|
|
96
|
+
"contentDigest": "sha256:e68b23b44e2330b6378998d00eb23d75484fe2126280dcb78efdfbdc1711b7de"
|
|
93
97
|
},
|
|
94
98
|
{
|
|
95
99
|
"path": "spec/work-ctrl-flow/nodes.md",
|
|
@@ -97,11 +101,11 @@
|
|
|
97
101
|
},
|
|
98
102
|
{
|
|
99
103
|
"path": "std/ai-ctrl-workflow/axioms.md",
|
|
100
|
-
"contentDigest": "sha256:
|
|
104
|
+
"contentDigest": "sha256:90bb88cb9415f9192eb59e23470bfea42fefe87bd45c99008b71e60703786c1d"
|
|
101
105
|
},
|
|
102
106
|
{
|
|
103
107
|
"path": "std/ai-data-workflow/axioms.md",
|
|
104
|
-
"contentDigest": "sha256:
|
|
108
|
+
"contentDigest": "sha256:09fef33aa197cada6e9e38ced35b20249f83248099e899c7c26837d2c10441f4"
|
|
105
109
|
},
|
|
106
110
|
{
|
|
107
111
|
"path": "std/behavior-tree/axioms.md",
|
|
@@ -121,7 +125,7 @@
|
|
|
121
125
|
},
|
|
122
126
|
{
|
|
123
127
|
"path": "std/work-ctrl-flow/axioms.md",
|
|
124
|
-
"contentDigest": "sha256:
|
|
128
|
+
"contentDigest": "sha256:d6624cefb6ed07631c8dfcb6a031a3ab39b669e8d668d302a296153f1bfa95b3"
|
|
125
129
|
}
|
|
126
130
|
]
|
|
127
131
|
}
|
|
@@ -92,6 +92,7 @@ L3 spec/ai-workflow/ Halfcode-backed resource records 与 AI workflow domain p
|
|
|
92
92
|
| L3 | [spec/flow-core/files.md](spec/flow-core/files.md) | 单文件和目录 bundle 怎么组织。 |
|
|
93
93
|
| L3 | [spec/flow-core/refs.md](spec/flow-core/refs.md) | code ref 和 bundle 内引用怎么解析。 |
|
|
94
94
|
| L3 | [spec/flow-core/domains.md](spec/flow-core/domains.md) | 哪些事实是定义、派生物或运行态。 |
|
|
95
|
+
| L3 | [spec/flow-core/instance-run.md](spec/flow-core/instance-run.md) | Definition 如何冻结为 Instance,以及 Ctrl/Data profile 如何在单一 checkpoint 中持久化与恢复。 |
|
|
95
96
|
| L3 | [spec/instant-ctrl-flow/nodes.md](spec/instant-ctrl-flow/nodes.md) · [spec/instant-ctrl-flow/domains.md](spec/instant-ctrl-flow/domains.md) | InstantCtrlFlow statements 与 capability。 |
|
|
96
97
|
| L3 | [spec/work-ctrl-flow/nodes.md](spec/work-ctrl-flow/nodes.md) · [spec/work-ctrl-flow/domains.md](spec/work-ctrl-flow/domains.md) | WorkCtrlFlow statements、恢复与持久事实。 |
|
|
97
98
|
| L3 | [spec/bp-ctrl-flow/nodes.md](spec/bp-ctrl-flow/nodes.md) · [spec/bp-ctrl-flow/domains.md](spec/bp-ctrl-flow/domains.md) | BPCtrlFlow statements、TaskSpace 与事实 owner。 |
|
|
@@ -109,8 +110,8 @@ L3 spec/ai-workflow/ Halfcode-backed resource records 与 AI workflow domain p
|
|
|
109
110
|
- `Run` 调用代码,其 output 直接成为下一条 statement 的 input;`Return` 立即终止当前 flow 并产生公开 output。
|
|
110
111
|
- 所有动态代码遵守 `output = fn(runtime, input, config)`;predicate 只是 output 被约束为 boolean 的同一协议。
|
|
111
112
|
- `EagerDataFlow` 的 `flow-port://` 是 data edge,`flow-node://` 是 completion edge;两者共同参与 DAG 校验,所有 ready nodes 可并发调度;`SubFlowNode.flow` 只使用 `eager-data-flow://<FQN>`。
|
|
112
|
-
- `AICtrlWorkflow` 复用 WorkCtrlFlow statements,可挂起/恢复;AI
|
|
113
|
-
- `AIDataWorkflow` 复用 EagerDataFlow nodes;definition 不保存运行结果,RunGraph
|
|
113
|
+
- `AICtrlWorkflow` 复用 WorkCtrlFlow statements,可挂起/恢复;WorkCtrl snapshot 与 AI durable state 在同一个 run checkpoint profile 中提交。
|
|
114
|
+
- `AIDataWorkflow` 复用 EagerDataFlow nodes;definition 不保存运行结果,RunGraph 的 patch/generation/invalidation/reuse 事实在同一个 run checkpoint profile 中提交。
|
|
114
115
|
|
|
115
116
|
## 事实源
|
|
116
117
|
|
|
@@ -125,12 +126,12 @@ XNL EagerDataFlow definition
|
|
|
125
126
|
-> eager invocation scheduler
|
|
126
127
|
|
|
127
128
|
XNL AICtrlWorkflow definition
|
|
128
|
-
->
|
|
129
|
-
->
|
|
129
|
+
-> complete frozen Instance
|
|
130
|
+
-> FlowRunCheckpoint<AICtrlWorkflow profile>
|
|
130
131
|
|
|
131
132
|
XNL AIDataWorkflow definition
|
|
132
|
-
->
|
|
133
|
-
->
|
|
133
|
+
-> complete frozen Instance
|
|
134
|
+
-> FlowRunCheckpoint<AIDataWorkflow profile>
|
|
134
135
|
|
|
135
136
|
XNL ResourcePackage (Halfcode authority)
|
|
136
137
|
-> ResourceTree / EffectiveResourceRegistry
|
|
@@ -141,7 +142,9 @@ XNL ResourcePackage (Halfcode authority)
|
|
|
141
142
|
- XNL definition:唯一 authoring 真源。
|
|
142
143
|
- CtrlFlow AST:解析后的规范内存投影,不形成可独立加载的 definition。
|
|
143
144
|
- BehaviorTreePlan:编译器可重建的内部执行计划,不得持久化为 authoring definition。
|
|
144
|
-
-
|
|
145
|
+
- Frozen Instance:完整 definition bundle 的不可变录取副本;existing instance 不受 live definition 修改影响。
|
|
146
|
+
- FlowRunCheckpoint:某个 instance/run 的唯一可变事实 owner;input/config/state/output、sidecars 与 typed profile 以同一 CAS version 提交。
|
|
147
|
+
- WorkCtrlFlow snapshot:FlowRunCheckpoint 的 typed profile payload,不是并列 store,不得回写 definition。
|
|
145
148
|
- TaskSpace store:人工任务事实源;业务结果作为 data 进入后续 predicate。
|
|
146
149
|
- FlowAuthoring:布局与 viewport 真源,不复制 statement topology 或配置。
|
|
147
150
|
- AI workflow runtime roots:运行期注入事实,不属于 bundle authoring identity。
|
|
@@ -149,7 +152,8 @@ XNL ResourcePackage (Halfcode authority)
|
|
|
149
152
|
- AIWorkflowAppBundleProjection:从 Halfcode ResourceRecord 重建的 workflow domain view,不是第二份 catalog。
|
|
150
153
|
- AIWorkflowAgentResourceProjection:从固定 typed relations 重建的 Agent/Material domain view,不是第二份 registry。
|
|
151
154
|
- Run resource freeze receipt:完整 Halfcode snapshot proof 与 selected-resource semantic fingerprint 的不可变组合,不拥有 actor/session runtime。
|
|
152
|
-
- AIDataWorkflow RunGraph
|
|
155
|
+
- AIDataWorkflow RunGraph:FlowRunCheckpoint 的 typed profile payload,不得回写 definition root。
|
|
156
|
+
- Events、run index 与 status view:从 checkpoint 重建的只读投影,不得回写 checkpoint 或 frozen definition。
|
|
153
157
|
|
|
154
158
|
## Removed Authoring Syntax
|
|
155
159
|
|
|
@@ -38,4 +38,4 @@ canonical DSL 是纯声明式:**禁止函数、闭包、回调、构造器**
|
|
|
38
38
|
|
|
39
39
|
## M-D4 · seed 是启动快照,不是活状态
|
|
40
40
|
|
|
41
|
-
初始数据(`X.seed`,见 M-N3)只作为**启动 checkpoint
|
|
41
|
+
初始数据(`X.seed`,见 M-N3)只作为**启动 checkpoint**,只读。每个新 run 创建 checkpoint v0 时恰好应用一次;resume 从 checkpoint 恢复,不重复应用 seed。运行期的活状态由 canonical runtime owner 持有、经事件/命令更新——绝不把 live state 写回 seed。这条把"初值声明"与"运行时状态"两个事实源彻底分开。
|
|
@@ -33,21 +33,24 @@
|
|
|
33
33
|
|
|
34
34
|
It does not accept BPCtrlFlow-only `TaskStep` unless a future profile explicitly extends it.
|
|
35
35
|
|
|
36
|
-
## Runtime AI context
|
|
36
|
+
## Runtime-first AI context
|
|
37
37
|
|
|
38
|
-
Dynamic code receives the host runtime. AI-capable runtimes include an `ai` field with roots, state
|
|
38
|
+
Dynamic code receives the host runtime. AI-capable runtimes include an `ai` field with roots, state port and embedded effect provider. Runtime-bearing code remains a DEPA Processor:
|
|
39
39
|
|
|
40
40
|
```ts
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
input,
|
|
45
|
-
run,
|
|
46
|
-
nodeId: "draft-context",
|
|
47
|
-
materialRefs: ["resource://depa.examples.SupportReview.Materials"]
|
|
48
|
-
})
|
|
41
|
+
export function draftContext(runtime: AICtrlRuntime, input: SupportReviewInput, config: ReviewConfig) {
|
|
42
|
+
return runtime.review.prepare(input, config)
|
|
43
|
+
}
|
|
49
44
|
```
|
|
50
45
|
|
|
46
|
+
普通 `Run` 节点可通过exact frozen Agent task binding调用typed Agent Processor。底层只提供runtime-first `runAgent(agentRuntime, input, config)`与`runTargetedAgent(agentRuntime, selector, invocation, config)`;组合边界提供同名 `runtime.ai.effects` bound facade。selector只能是exact `{byInstanceId}`或`{byInstanceName}`,resolved identity与receipt随WorkCtrl snapshot进入同一canonical checkpoint;authored surface不暴露generic `invoke`。
|
|
47
|
+
|
|
51
48
|
## State and recovery
|
|
52
49
|
|
|
53
|
-
Recovery is WorkCtrlFlow-backed
|
|
50
|
+
Recovery is WorkCtrlFlow-backed, but its durable owner is one `FlowRunCheckpoint`. The `AICtrlWorkflow` typed profile contains the WorkCtrl snapshot plus closed AI durable state; the common checkpoint envelope contains input/config/state/output and controller/node sidecars. External runtime facts are retained only as opaque identities and receipts.
|
|
51
|
+
|
|
52
|
+
Before the first node, the complete bundle is admitted as a frozen Instance. A fresh process recompiles from that instance and resumes from the checkpoint; it does not read the live Definition. Node positioning uses stable ids/invocation keys, not array index. Events, run indexes and status views are rebuildable projections and cannot write back to the checkpoint.
|
|
53
|
+
|
|
54
|
+
The canonical controller CAS-commits checkpoint `v0` with `lastTickNo = 0` before invoking any node. Its historical `stateStore` runtime field is a readonly projection; the writable `AIWorkflowStateStore` API is legacy/derived compatibility and is not a second owner.
|
|
55
|
+
|
|
56
|
+
See [Definition、Instance 与 Run](../flow-core/instance-run.md) for the physical hierarchy and one-way legacy boundary.
|
|
@@ -40,9 +40,9 @@
|
|
|
40
40
|
|
|
41
41
|
`flow-port://#node/port` creates a data dependency. `flow-node://#node` creates a completion dependency through `waitFor`.
|
|
42
42
|
|
|
43
|
-
## RunGraph
|
|
43
|
+
## RunGraph checkpoint profile
|
|
44
44
|
|
|
45
|
-
The XNL definition produces an EagerDataFlow authoring plan. At run time, AIDataWorkflow
|
|
45
|
+
The XNL definition produces an EagerDataFlow authoring plan. At run time, AIDataWorkflow stores a RunGraph inside the run's single `FlowRunCheckpoint` typed profile, with:
|
|
46
46
|
|
|
47
47
|
- node status and generation;
|
|
48
48
|
- patch history;
|
|
@@ -51,6 +51,18 @@ The XNL definition produces an EagerDataFlow authoring plan. At run time, AIData
|
|
|
51
51
|
|
|
52
52
|
Definition edits and RunGraph patches are separate surfaces. A run patch does not rewrite the XNL definition.
|
|
53
53
|
|
|
54
|
+
RunGraph, input/config/state/output, controller/node sidecars and AI opaque refs advance in one checkpoint version transition. There is no parallel graph-state owner. The complete Definition is frozen before execution; a fresh process recompiles from that Instance and restores the RunGraph from the checkpoint. Events and indexes are rebuildable readonly projections.
|
|
55
|
+
|
|
56
|
+
The envelope is an exact reciprocal projection of the RunGraph rather than an independently writable summary: state is exactly `{ status, generation }`, the controller sidecar contains only the derived status, every declared node has exactly one `{ status, generation }` node sidecar, and only a Succeeded graph carries the Return node's result as checkpoint output. A nonterminal or Failed graph has `output = null`.
|
|
57
|
+
|
|
58
|
+
The durable RunGraph is a fixed closed profile contract rather than an opaque object. Version zero is only the complete generation-zero binding projection: empty patch/invalidation history, exactly the binding's initial nodes in binding order, all Pending with canonical type/reuse policy, and no result, fingerprint or tombstone facts. A generic checkpoint create cannot admit an already advanced graph. After admission, `runId` equals the checkpoint envelope, generation is non-negative and monotonic, and `nodes`/`declarationOrder` describe the same identities exactly once. Every node declared by the frozen binding remains present for the full run; removal retains a same-generation `Removed` tombstone rather than deleting its identity, and that tombstone cannot be removed again. Once accepted, no node may disappear. Binding and structural node facts remain immutable unless a newly appended add/update/remove operation names the target and exactly explains its after-projection; declaration order only appends declared add-node targets. Every flow-port input reference resolves to an existing node and declared source output, its URI exactly projects node/port identity, and its source appears in `dependsOn`; `dependents` is the reciprocal declaration-ordered projection. A `nodeType` patch recomputes a reuse policy carrying the same node type before the graph can be persisted. Generation-zero nodes match the binding's tag, ports, config and dependency projection. A terminal execution node carries a result with the same node id and generation as its owner; its status, fingerprint and exact output-port keys project to that node. Reused results carry a matching fingerprint and `reusedFrom` identity. Graph invalidations reference declared source/target nodes and exactly equal the union of each node's `invalidatedBy` facts. Patch history and invalidations retain their accepted append-only prefixes and append-monotonic generations; every newly appended fact uses the graph's accepted current generation and its target node projects that generation. Public patch/invalidation Processors reject an explicitly selected generation that precedes either the graph or an affected node. An invalidation that emits no facts is a deterministic no-op and cannot advance generation. An accepted terminal result, output and fingerprint are immutable within one node generation; invalidation or removal clears stale result/fingerprint facts before a later generation can accept a new result. The binding is the complete AIDataWorkflow/EagerDataFlow authoring projection with exact contract, node, edge and diagnostic collections. Commit, filesystem decode and fresh reconstruction reject incomplete, extended-authority or identity-mismatched graphs.
|
|
59
|
+
|
|
60
|
+
The in-memory loader may carry a host-local `baseUri` while resolving frozen code. The durable facade strips it, and the checkpoint owner independently rejects absolute paths, `file:` URIs, UNC paths and drive-local URIs. Semantic fingerprint object keys use explicit UTF-16 code-unit ordering, so Unicode input permutations produce the same bytes without locale policy.
|
|
61
|
+
|
|
62
|
+
Execution CAS-commits a Pending `v0` before code materialization or node invocation. Every node then commits one Running transition before invocation and one Succeeded/Failed transition before its settlement can release dependent nodes. The Return node's accepted success transition carries the final output and is itself the terminal checkpoint; execution does not issue a second commit after terminal acceptance. The Eager scheduler restores accepted node outputs as durable ports; after fresh reconstruction it schedules only unfinished nodes and does not replay an already accepted effectful node. This preserves scheduler dependency/concurrency semantics while keeping `FlowRunCheckpointStore` as the only state owner. The historical `stateStore` runtime field is a readonly projection; writable `AIWorkflowStateStore` compatibility is not used as a graph or run owner.
|
|
63
|
+
|
|
64
|
+
If a process stops after `v0` or any node boundary is accepted, a fresh runtime continues through the runtime-first `continueMaterializedAIDataWorkflow(runtime, input, config)` Processor. `startMaterializedAIDataWorkflow` also recognizes an already-bound checkpoint instead of attempting a second `expectedVersion = null` creation. Running nodes without an accepted success fact are unfinished and may execute again; nodes whose success fact is already accepted are restored without replay. A terminal checkpoint is returned without invoking nodes again; changed input/config always fail closed, and changed initialization state or AI durable facts fail while the checkpoint is still Pending.
|
|
65
|
+
|
|
54
66
|
## Reuse policy
|
|
55
67
|
|
|
56
68
|
Machine nodes default to `semantic-hash`; manual nodes default to `never`. Author a canonical manual node through AIDataWorkflow config:
|
|
@@ -76,3 +88,7 @@ Machine nodes default to `semantic-hash`; manual nodes default to `never`. Autho
|
|
|
76
88
|
```
|
|
77
89
|
|
|
78
90
|
Semantic reuse is run-local. Generation is history metadata and is not part of the reuse fingerprint.
|
|
91
|
+
|
|
92
|
+
Runtime-bearing普通 `TransformNode`/`SinkNode` code保持 `output = fn(runtime, input, config)`。首次调用使用同名bound `runAgent`;后继节点可从declared port构造exact `{byInstanceId}`,或使用static `{byInstanceName}`调用bound `runTargetedAgent`。底层Processor始终显式接收runtime;Agent instance index/receipt与RunGraph只写同一canonical checkpoint,authored surface不暴露generic `invoke`。
|
|
93
|
+
|
|
94
|
+
See [Definition、Instance 与 Run](../flow-core/instance-run.md) for the physical hierarchy, seed exact-once rule and fresh recovery path.
|
|
@@ -120,6 +120,36 @@ projector 会按 exact resource identity 在 Halfcode registry 中解析目标
|
|
|
120
120
|
|
|
121
121
|
projector 只读取这些固定位置。普通 prompt、description、metadata 或其他 property 中即使出现 URI 形式文本或业务词语,也不会产生 tool、policy、task 或 dependency edge。
|
|
122
122
|
|
|
123
|
+
### Executable schema and effect policy
|
|
124
|
+
|
|
125
|
+
`MessageSchema` 必须在唯一的 `schema` property 中声明 JSON Schema value map。schema 是资源内容事实;projector 会把它复制成与 Halfcode record 分离的深度不可变值。缺少 map、出现非有限 number、稀疏 list、accessor、symbol、cycle 或非 plain-data object 时,整个 Agent projection fail closed。
|
|
126
|
+
|
|
127
|
+
```xnl
|
|
128
|
+
<MessageSchema #depa.flows.demo.Schema.Request apiVersion="depa.flows/v1" version="1.0.0" {
|
|
129
|
+
lifecycle = "Stable"
|
|
130
|
+
schema = {
|
|
131
|
+
type = "object"
|
|
132
|
+
properties = { request = { type = "string" } }
|
|
133
|
+
required = ["request"]
|
|
134
|
+
additionalProperties = false
|
|
135
|
+
}
|
|
136
|
+
}>
|
|
137
|
+
```
|
|
138
|
+
|
|
139
|
+
`EffectPolicy` 的首个标准化执行 profile 是闭集 `toolMode`:
|
|
140
|
+
|
|
141
|
+
- `declared-only`:运行 host 只可向 Agent 暴露 `ToolRefs[]` 中声明且成功解析的 exact tools;
|
|
142
|
+
- `none`:运行 host 不可向 Agent 暴露工具;若 definition 同时声明非空 `ToolRefs[]`,host 必须 fail closed。
|
|
143
|
+
|
|
144
|
+
```xnl
|
|
145
|
+
<EffectPolicy #depa.flows.demo.Policy.DeclaredOnly apiVersion="depa.flows/v1" version="1.0.0" {
|
|
146
|
+
lifecycle = "Stable"
|
|
147
|
+
toolMode = "declared-only"
|
|
148
|
+
}>
|
|
149
|
+
```
|
|
150
|
+
|
|
151
|
+
depa-flows 只投影并冻结 schema/policy 领域事实,不选择 JSON Schema validator、不解析 host tool catalog,也不创建 actor。JSON Schema 校验、exact tool binding 与 actor lifecycle 由运行 host 承担。
|
|
152
|
+
|
|
123
153
|
## MaterialPort and MaterialBinding
|
|
124
154
|
|
|
125
155
|
`MaterialPort` 定义 Agent 可消费的 material contract:
|
|
@@ -155,6 +185,19 @@ projector 只读取这些固定位置。普通 prompt、description、metadata
|
|
|
155
185
|
|
|
156
186
|
`AgentTaskRef` 只是资源选择 tuple,不新增 substrate node,也不包含 run id、session、generation、actor 或 provider。所有 ref 都按完整 resource identity 和目标 kind 精确核对;相似名称没有关联语义。
|
|
157
187
|
|
|
188
|
+
被选择的 material 必须在资源根的 `value` property 中声明可执行 `ResourceValue`。projector 深复制并冻结该值,运行 host 按 Agent 的 `MaterialPortRefs[]` authoring 顺序组装输入;`cardinality="many"` 的同一 port 内再按 MaterialBinding resource id 的固定 UTF-16 code-unit 顺序排列。
|
|
189
|
+
|
|
190
|
+
```xnl
|
|
191
|
+
<RequestMaterial #depa.flows.demo.Material.Request.001 apiVersion="depa.flows/v1" version="1.0.0" {
|
|
192
|
+
lifecycle = "Active"
|
|
193
|
+
value = { request = "request-001" }
|
|
194
|
+
}>
|
|
195
|
+
```
|
|
196
|
+
|
|
197
|
+
输入 schema 校验发生在 dispatch 前,输出 schema 校验发生在 Agent 完成、workflow node 接收结果前。MaterialPort 自身的可选 `SchemaRef` 验证每个绑定值;Agent 的 `InputSchemaRef` 验证由 ordered port values 形成的完整输入。任一校验失败都不得启动 provider call、写入成功 result 或隐式丢弃 material。
|
|
198
|
+
|
|
199
|
+
同一 tuple 同时适用于两种 profile:`AICtrlWorkflow` 的普通 `Run` node 与 `AIDataWorkflow` 的普通 `TransformNode` 可以通过各自明确的 `ai.agent` effect 调用该 Agent。`workflowKind` 必须与目标 workflow record kind 完全一致;depa-flows 不新增 `AIAgentTask` substrate statement,也不根据 node 名称、文字描述或 topology 猜测 Agent 调用。
|
|
200
|
+
|
|
158
201
|
## Typed dependency relations
|
|
159
202
|
|
|
160
203
|
depa-flows 只发出闭集 relation:
|
|
@@ -235,8 +278,10 @@ const loaded = await loadAIWorkflowResourcePackage({ rootDir: resourceRootDir })
|
|
|
235
278
|
|
|
236
279
|
- XNL ResourcePackage 和 ResourceRecord:Halfcode-owned authoring facts。
|
|
237
280
|
- AIWorkflowAppBundleProjection:可从 normalized records 重建的 depa domain projection,不反写 source。
|
|
238
|
-
- AIWorkflowAgentResourceProjection:固定 Agent/Message/Material
|
|
239
|
-
- AIWorkflowRunResourceFreezeReceipt:Halfcode snapshot proof + depa selected-resource semantic fingerprint
|
|
281
|
+
- AIWorkflowAgentResourceProjection:固定 Agent/Message/schema/effect-policy/Material 关系及其不可变可执行值的可重建 depa domain projection,不是第二份 registry。
|
|
282
|
+
- AIWorkflowRunResourceFreezeReceipt:Halfcode snapshot proof + depa selected-resource semantic fingerprint;作为 run checkpoint 可验证 evidence 持久化或引用,但不成为并列 run authority,也不回写 source。
|
|
240
283
|
- AICtrlWorkflow / AIDataWorkflow definition:workflow domain facts。
|
|
241
|
-
- workflow snapshot / RunGraph
|
|
242
|
-
- global/workspace root、installation 与
|
|
284
|
+
- workflow snapshot / RunGraph:同一 FlowRunCheckpoint typed profile 中的运行态,不回写 ResourcePackage 或 app projection。
|
|
285
|
+
- global/workspace root、installation 与 external runtime:host-owned facts;checkpoint 只保存 opaque identity/receipt,不复制其内部历史。
|
|
286
|
+
|
|
287
|
+
Definition freeze、single checkpoint owner 与 fresh recovery 见 [Definition、Instance 与 Run](../flow-core/instance-run.md)。
|
|
@@ -0,0 +1,120 @@
|
|
|
1
|
+
# L3 · Definition、Instance 与 Run
|
|
2
|
+
|
|
3
|
+
> 本文定义有持久生命周期的 Flow 产品共用的物理事实边界。authoring bundle 是 Definition;执行前录取的完整冻结副本是 Instance;一次执行的唯一可变事实是 Run checkpoint。三者不能互相回写。
|
|
4
|
+
|
|
5
|
+
## 三层事实链
|
|
6
|
+
|
|
7
|
+
```text
|
|
8
|
+
Definition bundle
|
|
9
|
+
--完整复制、逐字节校验、digest/schema/containment readback-->
|
|
10
|
+
Frozen Instance
|
|
11
|
+
--从冻结 definition 编译;为每次执行创建 checkpoint v0-->
|
|
12
|
+
Run checkpoints v0..n
|
|
13
|
+
```
|
|
14
|
+
|
|
15
|
+
- **Definition** 是可编辑真源。一次 materialization 绑定其 `revision`、全 bundle `sha256` digest 和 provenance。
|
|
16
|
+
- **Instance** 在首个节点执行前原子录取。它包含完整 bundle,包括本地 code、资源、`state.def.xnl`、`state.seed.xnl`、`config.def.xnl` 与 `config.xnl`;实例终身只从冻结副本加载和编译。
|
|
17
|
+
- **Run** 属于一个 instance。`checkpoint.json` 是该 run 的唯一可变事实;start、resume、分支、等待和 data generation 都以同一 versioned transition 提交。
|
|
18
|
+
|
|
19
|
+
`checkpoint v0` 必须在任一用户节点开始前通过 `expectedVersion = null` 的 CAS 被接受。对 Ctrl profile,`v0` 保留 `lastTickNo = 0`、空节点结果和未执行游标;一旦首节点运行,后续事实只能出现在 `v1+`。因此全新进程能够仅凭 checkpoint 区分“已录取但尚未执行”与“至少执行过一个 transition”,并从 `v0` 安全继续,而不把一次未确认的节点执行误判为已持久化。
|
|
20
|
+
|
|
21
|
+
Definition 更新只影响之后创建的 instance。已有 instance 的新 run 和已有 run 的恢复均不得重新读取 live Definition。
|
|
22
|
+
|
|
23
|
+
## Canonical physical projection
|
|
24
|
+
|
|
25
|
+
存储根由 runtime 显式注入,不从 Definition 路径、当前工作目录或环境变量推导。reference filesystem projection 为:
|
|
26
|
+
|
|
27
|
+
```text
|
|
28
|
+
<support-root>/
|
|
29
|
+
instances/
|
|
30
|
+
<instance-id>/
|
|
31
|
+
instance.json
|
|
32
|
+
definition/
|
|
33
|
+
manifest.xnl
|
|
34
|
+
...完整 bundle...
|
|
35
|
+
runs/
|
|
36
|
+
<run-id>/
|
|
37
|
+
checkpoint.json
|
|
38
|
+
legacy-import.receipt.json # 仅显式旧数据导入后可有
|
|
39
|
+
run-index.json # 可删除并从 checkpoint 重建
|
|
40
|
+
```
|
|
41
|
+
|
|
42
|
+
`instance.json` 只保存 path-independent descriptor:`instanceId`、definition `revision/digest/provenance` 与 materialization 时间。它不保存 run state。`definition/` 的路径和 raw bytes 共同参与 digest,录取后保持不变。
|
|
43
|
+
|
|
44
|
+
Descriptor 与调用方 source identity 都是 exact closed data:authority、artifact ref 和 revision 必须是非空 canonical string,digest 必须是 lowercase SHA-256;额外字段、accessor、symbol、稀疏数组、非有限数字和非 plain object 在创建 candidate 前关闭失败。`instance.json` readback 使用同一 normalizer,不能因 JSON 可解析就接受扩展字段。
|
|
45
|
+
|
|
46
|
+
`support-root`、`instances/` 和 instance candidate/live 目录同时是物理 authority boundary。materializer 在任何 `mkdir`、copy、descriptor write 或 rename 前都必须用 `lstat` 拒绝已有 symbolic link,核对真实路径仍包含于显式 owner root,并在安全创建后再次 readback。把 `instances/` 指向外部位置不能产生 candidate、instance 或 run,也不能改变外部文件。
|
|
47
|
+
|
|
48
|
+
`checkpoint.json` 使用 `depa.flow-run-checkpoint/v1` closed public-data envelope:
|
|
49
|
+
|
|
50
|
+
| 字段 | 所有权 |
|
|
51
|
+
|---|---|
|
|
52
|
+
| `instanceId`、`runId`、`version` | run identity 与 CAS transition version |
|
|
53
|
+
| `definition` | 必须逐字段等于 instance descriptor 的 revision/digest/provenance |
|
|
54
|
+
| `input`、`config`、`state`、`output` | 本 run 的公开数据边界;`config` 是本次执行的 effective config,不是 authoring facet 的副本入口 |
|
|
55
|
+
| `controllerSidecars` | 等待、决策、游标等 controller 持久事实 |
|
|
56
|
+
| `nodeSidecars` | 按稳定 node identity 保存的持久节点事实 |
|
|
57
|
+
| `profile` | `WorkCtrlFlow`、`AICtrlWorkflow` 或 `AIDataWorkflow` 的 closed typed state |
|
|
58
|
+
|
|
59
|
+
一次 transition 同时提交 envelope、sidecars 和 profile;不存在一个 profile store、一个 snapshot store、再加一个 system-state store 的并列写入。CAS 失败时不得部分接受任一字段。所有 canonical store 共用同一 transition validator:schema、instance/run identity、冻结 definition identity、profile kind、input 与 config 在 `v0` 后不可改写,version 只能递增一。终态 checkpoint 不再接受任何 commit,包括内容相同但 version 增长的 commit;幂等调用必须直接返回已接受的终态版本。
|
|
60
|
+
|
|
61
|
+
## Definition facets 与 run state
|
|
62
|
+
|
|
63
|
+
| source facet | frozen instance | new run | resume |
|
|
64
|
+
|---|---|---|---|
|
|
65
|
+
| `state.def.xnl` | 原字节保留,约束 state shape | 校验初始/演化 state | 继续约束恢复的 state |
|
|
66
|
+
| `state.seed.xnl` | 原字节保留,只读 | 恰好应用一次到 checkpoint v0 | 不再应用;从 checkpoint state 恢复 |
|
|
67
|
+
| `config.def.xnl` | 原字节保留 | 约束 effective config | 不成为新的配置真源 |
|
|
68
|
+
| `config.xnl` | 原字节保留 | 参与创建本 run 的 effective config | 使用 checkpoint 已绑定 config |
|
|
69
|
+
|
|
70
|
+
同一 instance 的每个新 run 都从同一只读 seed 开始,但之后独立演化。一个 run 的 state 不能污染另一个 run;恢复也不能借重新加载 seed 覆盖已演化 state。
|
|
71
|
+
|
|
72
|
+
## Typed profile state
|
|
73
|
+
|
|
74
|
+
- `profile.kind = "WorkCtrlFlow"`:`profile.snapshot` 保存 WorkCtrl snapshot。
|
|
75
|
+
- `profile.kind = "AICtrlWorkflow"`:同一 profile 内保存 WorkCtrl snapshot 和 AI durable state;外部 runtime 仅以 opaque identity/receipt 引用。
|
|
76
|
+
- `profile.kind = "AIDataWorkflow"`:同一 profile 内保存 RunGraph 的 node、generation、patch、invalidation/reuse 状态和 AI durable state。
|
|
77
|
+
|
|
78
|
+
Typed profile 不是任意 closed object:Ctrl snapshot 必须完整携带固定 `schemaVersion/treeId/fqn/status`、controller/node collections 与 orchestration facts,且 `treeId` 必须等于 envelope `runId`。每个 open/closed WaitHandle 也使用 exact public shape,绑定同一 `treeId`,并按所在 collection 校验 `Open` 或终态;branch decision、node/wait result、attempt、deadline、lane、winner、cancellation 与 composite 同样逐层使用 exact shape、固定 enum 和 map-key identity/projection。Completed snapshot 不保留 open wait/composite;applied signal 唯一且指向 closed handle。Ctrl envelope 与 snapshot 只有一个真源:`input = snapshot.input`、`state = snapshot.vars`,`controllerSidecars` 精确等于 status/tick/branch/orchestration/wait/signal 投影,`nodeSidecars` 精确等于 `{ nodeResults, waitResults }`。额外字段、accessor、稀疏数组和重复 identity 都关闭失败。
|
|
79
|
+
|
|
80
|
+
Data RunGraph 的 checkpoint v0 只能是完整 binding 的 generation-zero initial projection:history 为空、初始 node identity/order 精确一致、所有 node 为 Pending,且没有 result/fingerprint/tombstone;generic create 不能把 advanced graph 当作新 run 录取。之后 RunGraph 必须完整携带同一 `runId`、generation、nodes、declaration order、patch/invalidation collections 与 AIData/EagerDataFlow binding;binding 中的初始 node identity 全集在整个 run 中始终存在,remove 只能留下同 generation 的 `Removed` tombstone,重复 remove 关闭失败且不能推进 generation。accepted node 不得消失;binding 和 node 的 order/dependency/port/config/type 等结构事实只有被本次 appended add/update/remove operation 精确声明并与 after projection 一致时才能变化。所有 flow-port input ref 必须解析到已有 source node 的已声明 output port,URI 精确投影 node/port,且 source 同时出现在 `dependsOn`;`dependents` 是 reciprocal projection。nodeType patch 必须同步重算携带相同 nodeType 的 reuse policy。run node 的 ports、dependencies、dependents、reuse policy、result/fingerprint 和 definition binding 的 contract/node/edge collections 都按 public contract 深校验。terminal node 必须携带 result,result output keys 等于节点声明端口;graph invalidation 与 node `invalidatedBy` 是互为逆投影的同一事实。Data envelope 同样是精确互投影:`state = { status, generation }`、controller sidecar 只有 canonical status、node sidecar 对每个声明 node 保存 `{ status, generation }`;仅 Succeeded graph 的 `output` 等于 Return result,其他状态为 `null`。graph 与所有保留 node 的 generation 只能单调增长;patch/invalidation history 保留已接受前缀且 generation 按追加顺序单调,新 fact 必须与当前 graph 和目标 node generation 一致。public patch/invalidation Processor 对早于 graph 或受影响 node 的显式 generation 关闭失败;未发出任何 invalidation fact 时返回 deterministic no-op,不能虚增 generation。同一 node generation 的 terminal result、output 与 fingerprint 不可重写,只有新 generation 能接受新结果。commit、filesystem decode 与 fresh recovery 都使用同一个 closed normalizer,不能接受 `{}`、任意扩展 authority、身份不一致或缺字段的 profile。
|
|
81
|
+
|
|
82
|
+
Durable Data binding 是 path-independent data。authoring loader 可在内存 plan 中使用 host-local `baseUri` 解析 code,但 checkpoint facade 必须移除它,owner normalizer/decode 也必须拒绝绝对路径、`file:` URI、UNC 或 drive-local URI。稳定 semantic fingerprint 的 map key 顺序使用明确 UTF-16 code-unit comparator,不能依赖 locale。
|
|
83
|
+
|
|
84
|
+
Ctrl wait/resume/branch 与 Data generation/invalidation 都是 checkpoint transition 的组成部分。它们不是可以独立覆盖 checkpoint 的旁路状态。
|
|
85
|
+
|
|
86
|
+
历史名称 `AIWorkflowStateStore` 仅保留为 writable legacy/derived compatibility surface;canonical Ctrl/Data facade 只向它暴露只读 projection,并且只通过 `FlowRunCheckpointStore` 写入。它不能和 checkpoint 形成并列 state authority。
|
|
87
|
+
|
|
88
|
+
## Derived observations and fresh recovery
|
|
89
|
+
|
|
90
|
+
events、`run-index.json`、status view、editor/runtime overlay 都是 checkpoint 的只读投影。它们可以删除并重建,也可以延迟更新,但不得反向写入 checkpoint 或冻结 definition。runtime output 也不能成为新的 Definition source。
|
|
91
|
+
|
|
92
|
+
全新进程恢复只需要:
|
|
93
|
+
|
|
94
|
+
1. 从 `instance.json` 校验 instance identity。
|
|
95
|
+
2. 对 `definition/` 做 containment 与 digest readback,并从该副本重新编译。
|
|
96
|
+
3. 读取 `runs/<run-id>/checkpoint.json`,校验 instance/run/definition identity。
|
|
97
|
+
4. 从 checkpoint 的完整 envelope 与 typed profile 继续 transition。
|
|
98
|
+
|
|
99
|
+
`run-index.json`、进程内 cache、live Definition 和旧 flat snapshot 均不参与这条恢复 authority chain。
|
|
100
|
+
|
|
101
|
+
Filesystem CAS lock 与其 recovery barrier 都记录 owner pid、随机 token 和创建时间,并以 inode/token 核对释放。失效 barrier 可由 fresh store 原子接管;恢复过程不能按“先检查、后直接 unlink”的方式删除已经替换的新 owner。
|
|
102
|
+
|
|
103
|
+
## One-way legacy import
|
|
104
|
+
|
|
105
|
+
旧 flat WorkCtrl snapshot 只通过显式 reader/import Processor 进入 canonical store。调用方必须提供已冻结 instance/definition authority 和目标 `(instanceId, runId)`;转换时把 legacy snapshot 及 open/closed WaitHandle、handle identity、applied signal 和 durable child owner 中的旧 tree identity 重绑定到目标 `runId`,receipt 保留原 `legacyTreeId`,转换后的完整 checkpoint candidate 仅在 target `expectedVersion` CAS 成功时被接受。后续 fresh resume signal 只能推进该 target run,不能按旧 identity 建立 sibling run。
|
|
106
|
+
|
|
107
|
+
导入是单向、幂等的:等价 checkpoint 可恢复 completion receipt;冲突 identity 或已有不同 checkpoint 必须关闭失败。旧文件保持逐字节只读,canonical transition 不双写旧格式。`legacy-import.receipt.json` 是 append-only completion evidence,不是 checkpoint authority。
|
|
108
|
+
|
|
109
|
+
## Processor boundary
|
|
110
|
+
|
|
111
|
+
所有涉及 runtime、state 或 effect 的组件继续遵守 DEPA runtime-first Processor:
|
|
112
|
+
|
|
113
|
+
```text
|
|
114
|
+
output = fn(runtime, input, config)
|
|
115
|
+
output = fn(runtime, selector, invocation, config)
|
|
116
|
+
```
|
|
117
|
+
|
|
118
|
+
Agent invocation沿用同一Definition/Instance/Run authority。canonical Processor为 `runAgent(runtime, input, config)` / `runTargetedAgent(runtime, selector, invocation, config)`;同名bound facade只在组合边界隐去runtime。instance id/name index与pending/completed receipt属于 `checkpoint.profile.ai`,不创建平行store,也不复制actor/session history。
|
|
119
|
+
|
|
120
|
+
可运行边界证据见 [WorkCtrl materialized engine fixture](../../../../packages/work-ctrl-flow-logic/test/materialized-engine.test.ts) 与 [filesystem checkpoint fixture](../../../../packages/ai-workflow-logic/test/checkpoint-filesystem.test.ts)。前者验证完整本地依赖和 seed bytes,后者验证 canonical path、fresh store 与同一 checkpoint owner。
|
|
@@ -11,18 +11,18 @@
|
|
|
11
11
|
| `state.seed` | `state.seed.xnl` | `<StateSeed>` / `state-seed://` | 可选;新实例的只读初始 state |
|
|
12
12
|
| `task.space` | - | - | 禁用;人工任务事实只属于 BPCtrlFlow |
|
|
13
13
|
|
|
14
|
-
`StateDef` 与 `StateSeed` 通过相同 `#id` 关联。seed
|
|
14
|
+
`StateDef` 与 `StateSeed` 通过相同 `#id` 关联。seed 是冻结 instance 的只读 facet,在每个新 run 的 checkpoint v0 中恰好应用一次;resume 不再应用。运行期 state 只写 canonical checkpoint,绝不回写 definition 或 seed。动态代码若访问实例 state,必须经 `runtime` 显式提供的 state effect,函数签名仍是 `output = fn(runtime, input, config)`。
|
|
15
15
|
|
|
16
16
|
## Runtime Facts
|
|
17
17
|
|
|
18
18
|
| fact | owner | 持久化约束 |
|
|
19
19
|
|---|---|---|
|
|
20
|
-
| snapshot |
|
|
21
|
-
| WaitHandle |
|
|
20
|
+
| snapshot | FlowRunCheckpoint `profile.snapshot` | 保存恢复位置、当前 data、state、decisions、等待与幂等事实 |
|
|
21
|
+
| WaitHandle | 同一 checkpoint profile | 以 statement path + token 定位 open/closed wait |
|
|
22
22
|
| ResumeSignal | runtime ingress | 消费后只记录标识与 payload/fault 结果,不进入 definition |
|
|
23
23
|
| branch decision | snapshot | 在进入 Branch body 前记录,恢复时复用 |
|
|
24
24
|
|
|
25
|
-
|
|
25
|
+
实例物化必须在首个节点前冻结完整 definition bundle,以保证 code、facets 与 topology 版本稳定;冻结副本仍不是新的 authoring 入口。每个 run 的 snapshot、input/config/state/output 与 sidecars 由[单一 checkpoint hierarchy](../flow-core/instance-run.md)共同持有。运行状态可以投影到 editor/runtime overlay;不得向 XNL definition 注入 `status`、执行游标或 decision 作为语义事实。
|
|
26
26
|
|
|
27
27
|
## Rejected Authoring Facts
|
|
28
28
|
|
|
@@ -26,6 +26,8 @@ The workflow definition must not derive these roots from process cwd, environmen
|
|
|
26
26
|
|
|
27
27
|
AI/tool effects are invoked through the embedded provider in runtime context. A statement may call code with `vfs://./...#Export`; that code may use `runtime.ai.effects` or the shared invocation helper. The definition does not name a CLI.
|
|
28
28
|
|
|
29
|
-
##
|
|
29
|
+
## Canonical checkpoint profile
|
|
30
30
|
|
|
31
|
-
|
|
31
|
+
Each run has one canonical checkpoint owner. Its `AICtrlWorkflow` profile contains the WorkCtrl snapshot and closed AI durable state, while the common envelope owns input/config/state/output and controller/node sidecars. These facts advance in one versioned transition; there is no parallel AI run-record store.
|
|
32
|
+
|
|
33
|
+
Events, indexes and views are readonly projections. External runtime state is retained only through opaque identities and receipts. A fresh process resumes from the frozen instance plus checkpoint, without reading the live definition.
|
|
@@ -9,7 +9,7 @@
|
|
|
9
9
|
- Root `()`: `FlowContract` plus optional AI workflow resource references.
|
|
10
10
|
- Runtime substrate: EagerDataFlow plan plus AI RunGraph state.
|
|
11
11
|
|
|
12
|
-
The definition owns topology and static node config. The
|
|
12
|
+
The definition owns topology and static node config. The run's canonical checkpoint owns the RunGraph profile together with input/config/state/output and controller/node sidecars. Runtime status, patch history, generation history, invalidation records and reuse records are not written through a parallel graph-state store.
|
|
13
13
|
|
|
14
14
|
## RunGraph
|
|
15
15
|
|
|
@@ -22,3 +22,7 @@ When a completed node changes, the changed node and its transitive downstream de
|
|
|
22
22
|
## Reuse
|
|
23
23
|
|
|
24
24
|
The default machine-node reuse policy is `semantic-hash`; manual nodes default to `never`. A canonical manual node is authored with `config = { node_type = "manual" }`; the EagerDataFlow `type` field remains an implementation binding and is not reinterpreted. Reuse is run-local unless a separate shared cache authority is introduced. Generation records history and does not enter the semantic fingerprint.
|
|
25
|
+
|
|
26
|
+
## Recovery authority
|
|
27
|
+
|
|
28
|
+
Before execution, the complete definition bundle is admitted as a frozen instance. A fresh process recompiles from that instance and restores the RunGraph from the same versioned checkpoint. Events, indexes and views may be rebuilt from the checkpoint but cannot write back to it or to the definition.
|
|
@@ -15,9 +15,9 @@ WorkCtrlFlow 使用与 InstantCtrlFlow 完全相同的 `Run`、`If`、`Fallback`
|
|
|
15
15
|
|
|
16
16
|
进入上述 statement 时,引擎登记包含稳定 statement path 与 resume token 的 open WaitHandle,原子保存 snapshot,然后返回 suspension。`Run`、predicate 和其他公共 statements 必须在当前 tick 内正常返回或产生技术 fault,不能暗中跨 tick 挂起。
|
|
17
17
|
|
|
18
|
-
## WF-3 ·
|
|
18
|
+
## WF-3 · checkpoint 是 run 真源
|
|
19
19
|
|
|
20
|
-
snapshot
|
|
20
|
+
每个 run 的 canonical checkpoint 至少保存 input/config/state/output、controller/node sidecars,以及包含以下事实的 WorkCtrl typed snapshot:
|
|
21
21
|
|
|
22
22
|
- definition identity/version 与当前 statement path、嵌套 body frame、循环 invocation 等恢复位置。
|
|
23
23
|
- 当前 data 以及恢复后继续数据链所需的 statement output。
|
|
@@ -25,7 +25,7 @@ snapshot 至少保存:
|
|
|
25
25
|
- 已发生的 branch decision,键由稳定 `If` path 与 invocation identity 构成。
|
|
26
26
|
- profile runtime 明确声明的持久 state;definition 和 `state.seed` 不被回写。
|
|
27
27
|
|
|
28
|
-
definition 仍是 authoring topology
|
|
28
|
+
definition 仍是 authoring topology 真源;执行前必须录取完整 frozen instance,已有 instance/run 只从该副本编译与恢复。snapshot 不是并列 store,而是 checkpoint profile payload。definition 变更只影响新 instance;若要改变已有 instance 的 statement path,必须显式创建迁移后的新 authority。
|
|
29
29
|
|
|
30
30
|
## WF-4 · branch decision 先记录,后进入 body
|
|
31
31
|
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
<ResourcePackage #Depa.Flows.FlowDsl.Reference.Package apiVersion="halfcode.resources/v1" version="1.0.
|
|
1
|
+
<ResourcePackage #Depa.Flows.FlowDsl.Reference.Package apiVersion="halfcode.resources/v1" version="1.0.1" {
|
|
2
2
|
lifecycle = "Stable"
|
|
3
3
|
description = "Canonical depa Flow DSL documentation reference resources for authoring Skills."
|
|
4
4
|
} (
|