@astrosheep/keiyaku 4.6.8 → 4.6.9
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 +40 -14
- package/build/plugins/claude/.claude-plugin/plugin.json +1 -1
- package/build/plugins/claude/skills/keiyaku/SKILL.md +5 -6
- package/build/plugins/claude/skills/keiyaku-akuma/SKILL.md +1 -1
- package/build/plugins/claude/skills/keiyaku-akuma/references/automation.md +8 -8
- package/build/plugins/claude/skills/keiyaku-babysit/SKILL.md +1 -1
- package/build/plugins/claude/skills/keiyaku-bind/SKILL.md +9 -9
- package/build/plugins/claude/skills/keiyaku-debt/SKILL.md +91 -0
- package/build/plugins/claude/skills/keiyaku-workflow/SKILL.md +2 -2
- package/build/plugins/codex/.codex-plugin/plugin.json +1 -1
- package/build/plugins/codex/skills/keiyaku/SKILL.md +5 -6
- package/build/plugins/codex/skills/keiyaku-akuma/SKILL.md +1 -1
- package/build/plugins/codex/skills/keiyaku-akuma/references/automation.md +8 -8
- package/build/plugins/codex/skills/keiyaku-babysit/SKILL.md +1 -1
- package/build/plugins/codex/skills/keiyaku-bind/SKILL.md +9 -9
- package/build/plugins/codex/skills/keiyaku-debt/SKILL.md +91 -0
- package/build/plugins/codex/skills/keiyaku-workflow/SKILL.md +2 -2
- package/build/plugins/opencode/index.js +1 -1
- package/build/plugins/opencode/skills/keiyaku/SKILL.md +5 -6
- package/build/plugins/opencode/skills/keiyaku-akuma/SKILL.md +1 -1
- package/build/plugins/opencode/skills/keiyaku-akuma/references/automation.md +8 -8
- package/build/plugins/opencode/skills/keiyaku-babysit/SKILL.md +1 -1
- package/build/plugins/opencode/skills/keiyaku-bind/SKILL.md +9 -9
- package/build/plugins/opencode/skills/keiyaku-debt/SKILL.md +91 -0
- package/build/plugins/opencode/skills/keiyaku-workflow/SKILL.md +2 -2
- package/build/skills/keiyaku/SKILL.md +5 -6
- package/build/skills/keiyaku-akuma/SKILL.md +1 -1
- package/build/skills/keiyaku-akuma/references/automation.md +8 -8
- package/build/skills/keiyaku-babysit/SKILL.md +1 -1
- package/build/skills/keiyaku-bind/SKILL.md +9 -9
- package/build/skills/keiyaku-debt/SKILL.md +91 -0
- package/build/skills/keiyaku-workflow/SKILL.md +2 -2
- package/build/src/akuma/akuma-instance.d.ts +2 -0
- package/build/src/akuma/akuma-instance.js +10 -0
- package/build/src/akuma/akuma-observe.d.ts +33 -8
- package/build/src/akuma/akuma-observe.js +88 -64
- package/build/src/akuma/akuma-owner.d.ts +11 -2
- package/build/src/akuma/akuma-owner.js +45 -35
- package/build/src/akuma/akuma-selection-execution.js +9 -1
- package/build/src/akuma/akuma-stream.d.ts +22 -0
- package/build/src/akuma/akuma-stream.js +116 -0
- package/build/src/akuma/akuma-wait.d.ts +1 -40
- package/build/src/akuma/akuma-wait.js +23 -84
- package/build/src/akuma/akuma.d.ts +17 -11
- package/build/src/akuma/akuma.js +2 -0
- package/build/src/akuma/allowed.d.ts +7 -12
- package/build/src/akuma/allowed.js +13 -4
- package/build/src/akuma/body-supervisor.d.ts +5 -5
- package/build/src/akuma/body-supervisor.js +22 -20
- package/build/src/akuma/body.js +28 -1
- package/build/src/akuma/call-request.d.ts +12 -22
- package/build/src/akuma/heart/activity-schema.d.ts +12 -0
- package/build/src/akuma/heart/activity-schema.js +6 -0
- package/build/src/akuma/heart/index.d.ts +59 -2
- package/build/src/akuma/heart/index.js +87 -8
- package/build/src/akuma/heart/rows.js +5 -3
- package/build/src/akuma/heart/soul.d.ts +9 -0
- package/build/src/akuma/heart/soul.js +29 -0
- package/build/src/akuma/heart/storage.d.ts +15 -0
- package/build/src/akuma/heart/storage.js +55 -0
- package/build/src/akuma/heart/timeline.d.ts +7 -0
- package/build/src/akuma/heart/timeline.js +10 -0
- package/build/src/akuma/index.d.ts +1 -0
- package/build/src/akuma/projection.d.ts +25 -0
- package/build/src/akuma/projection.js +24 -7
- package/build/src/akuma/provider-recipe.d.ts +11 -0
- package/build/src/akuma/provider-recipe.js +23 -0
- package/build/src/akuma/provider.d.ts +25 -0
- package/build/src/akuma/provider.js +99 -7
- package/build/src/akuma/providers/acp/events.js +25 -2
- package/build/src/akuma/providers/claude/events.js +76 -10
- package/build/src/akuma/providers/claude/index.js +2 -5
- package/build/src/akuma/providers/codex-app-server/events.js +17 -2
- package/build/src/akuma/providers/codex-app-server/index.js +15 -9
- package/build/src/akuma/providers/decode.d.ts +8 -0
- package/build/src/akuma/providers/decode.js +21 -0
- package/build/src/akuma/providers/grok-build/index.js +10 -26
- package/build/src/akuma/providers/opencode-sdk/event-stream.d.ts +3 -3
- package/build/src/akuma/providers/opencode-sdk/event-stream.js +2 -25
- package/build/src/akuma/providers/opencode-sdk/events.d.ts +7 -43
- package/build/src/akuma/providers/opencode-sdk/events.js +147 -284
- package/build/src/akuma/providers/opencode-sdk/index.js +267 -421
- package/build/src/akuma/providers/opencode-sdk/native-http.d.ts +9 -0
- package/build/src/akuma/providers/opencode-sdk/native-http.js +69 -0
- package/build/src/akuma/providers/opencode-sdk/session.d.ts +42 -36
- package/build/src/akuma/providers/opencode-sdk/session.js +75 -82
- package/build/src/akuma/providers/paseo/events.d.ts +8 -0
- package/build/src/akuma/providers/paseo/events.js +58 -11
- package/build/src/akuma/providers/paseo/index.js +11 -7
- package/build/src/akuma/providers/pi/events.d.ts +2 -0
- package/build/src/akuma/providers/pi/events.js +32 -24
- package/build/src/akuma/providers/pi/index.js +21 -35
- package/build/src/akuma/request-lifecycle.d.ts +1 -2
- package/build/src/akuma/request-lifecycle.js +2 -8
- package/build/src/akuma/request-rendezvous.js +38 -55
- package/build/src/akuma/request-serve.d.ts +1 -1
- package/build/src/akuma/request-serve.js +77 -113
- package/build/src/akuma/selection-observation.d.ts +57 -51
- package/build/src/akuma/selection-observation.js +3 -3
- package/build/src/akuma/turn-drive.d.ts +3 -0
- package/build/src/akuma/turn-drive.js +26 -5
- package/build/src/akuma-body.js +12 -22
- package/build/src/cli/akuma-caller.js +10 -0
- package/build/src/cli/commands/akuma-grammar.js +3 -4
- package/build/src/cli/commands/akuma.js +13 -51
- package/build/src/cli/commands/contract-grammar.d.ts +7 -6
- package/build/src/cli/commands/contract-grammar.js +27 -32
- package/build/src/cli/commands/contract-help.d.ts +16 -7
- package/build/src/cli/commands/contract-help.js +20 -11
- package/build/src/cli/commands/contract.js +11 -11
- package/build/src/cli/commands/debt-grammar.d.ts +19 -0
- package/build/src/cli/commands/debt-grammar.js +323 -0
- package/build/src/cli/commands/debt-query.d.ts +5 -0
- package/build/src/cli/commands/{task-query.js → debt-query.js} +9 -9
- package/build/src/cli/commands/{task.d.ts → debt.d.ts} +2 -2
- package/build/src/cli/commands/{task.js → debt.js} +83 -143
- package/build/src/cli/coordinates.d.ts +1 -1
- package/build/src/cli/coordinates.js +1 -1
- package/build/src/cli/parse.d.ts +4 -4
- package/build/src/cli/parse.js +17 -16
- package/build/src/cli/render/akuma-activity.d.ts +11 -83
- package/build/src/cli/render/akuma-activity.js +20 -382
- package/build/src/cli/render/catalog.d.ts +2 -2
- package/build/src/cli/render/catalog.js +5 -5
- package/build/src/cli/render/contract.js +2 -2
- package/build/src/cli/render/debt.d.ts +28 -0
- package/build/src/cli/render/{task.js → debt.js} +51 -112
- package/build/src/cli/render/kanshi.js +28 -28
- package/build/src/cli/render/marks.d.ts +5 -5
- package/build/src/cli/render/marks.js +4 -10
- package/build/src/cli/render/nuke.js +1 -1
- package/build/src/cli/runtime.js +3 -3
- package/build/src/cli/scan.d.ts +1 -1
- package/build/src/cli/usage.d.ts +1 -1
- package/build/src/cli/usage.js +4 -4
- package/build/src/contract-worktree.js +3 -3
- package/build/src/debt/board.d.ts +160 -0
- package/build/src/{task → debt}/board.js +89 -89
- package/build/src/debt/catalog.d.ts +11 -0
- package/build/src/debt/catalog.js +59 -0
- package/build/src/{task → debt}/context.d.ts +1 -1
- package/build/src/{task → debt}/context.js +1 -1
- package/build/src/{task → debt}/created-observation.d.ts +6 -10
- package/build/src/{task → debt}/created-observation.js +7 -7
- package/build/src/debt/document.d.ts +37 -0
- package/build/src/{task → debt}/document.js +37 -37
- package/build/src/debt/identity.d.ts +21 -0
- package/build/src/{task → debt}/identity.js +35 -35
- package/build/src/debt/index.d.ts +111 -0
- package/build/src/debt/index.js +203 -0
- package/build/src/{task → debt}/input.d.ts +8 -8
- package/build/src/{task → debt}/input.js +21 -21
- package/build/src/debt/lifecycle-operations.d.ts +6 -0
- package/build/src/{task → debt}/lifecycle-operations.js +27 -31
- package/build/src/debt/mutation-result.d.ts +981 -0
- package/build/src/debt/mutation-result.js +109 -0
- package/build/src/debt/mutation.d.ts +424 -0
- package/build/src/debt/mutation.js +223 -0
- package/build/src/debt/operation-types.d.ts +71 -0
- package/build/src/debt/operations.d.ts +28 -0
- package/build/src/{task → debt}/operations.js +59 -60
- package/build/src/debt/query.d.ts +76 -0
- package/build/src/{task → debt}/query.js +55 -55
- package/build/src/{task → debt}/store.d.ts +13 -13
- package/build/src/{task → debt}/store.js +58 -49
- package/build/src/debt/view.d.ts +4 -0
- package/build/src/debt/view.js +7 -0
- package/build/src/identity/coordinates.d.ts +1 -1
- package/build/src/index.d.ts +13 -13
- package/build/src/index.js +9 -9
- package/build/src/kanshi/index.d.ts +1 -1
- package/build/src/kanshi/read.js +33 -33
- package/build/src/kanshi/report.d.ts +7 -7
- package/build/src/kanshi/select.js +4 -4
- package/build/src/library/akumas.d.ts +2 -3
- package/build/src/library/bind.d.ts +3 -3
- package/build/src/library/bind.js +5 -5
- package/build/src/library/contract-creation.js +5 -5
- package/build/src/library/contract-execution.js +4 -4
- package/build/src/library/contract-types.d.ts +2 -2
- package/build/src/library/input.d.ts +2 -2
- package/build/src/library/input.js +5 -5
- package/build/src/library/invocation.js +2 -2
- package/build/src/library/nuke.js +3 -3
- package/build/src/library/outcome.d.ts +126 -126
- package/build/src/library/outcome.js +3 -3
- package/build/src/library/selection.d.ts +1 -4
- package/build/src/library/selection.js +11 -62
- package/build/src/plugin/public.d.ts +5 -0
- package/build/src/plugin/runtime.js +3 -1
- package/build/src/runtime/proc/windows-launch.exe +0 -0
- package/build/src/settlement/fence.d.ts +3 -3
- package/build/src/settlement/fence.js +4 -4
- package/build/src/settlement/holder.d.ts +16 -16
- package/build/src/settlement/holder.js +69 -63
- package/build/src/settlement/settle.d.ts +5 -5
- package/build/src/settlement/settle.js +53 -53
- package/package.json +12 -6
- package/plugins/paseo/plugin/index.server.ts +17 -0
- package/plugins/paseo/plugin/paseo-plugin.json +4 -0
- package/plugins/paseo/plugin/server/attach.ts +52 -0
- package/plugins/paseo/plugin/server/keiyaku.ts +44 -0
- package/plugins/paseo/plugin/server/message.ts +60 -0
- package/plugins/paseo/plugin/server/mirror.ts +193 -0
- package/plugins/paseo/plugin/server/model.ts +14 -0
- package/plugins/paseo/plugin/server/provider.ts +276 -0
- package/plugins/paseo/plugin/server/sdk-worker.ts +237 -0
- package/plugins/paseo/plugin/server/sdk.ts +289 -0
- package/plugins/paseo/plugin/server/stop.ts +26 -0
- package/plugins/paseo/plugin/server/transport.ts +35 -0
- package/plugins/paseo/plugin/shared/attach-rpc.ts +10 -0
- package/plugins/paseo/plugin/shared/refresh-rpc.ts +6 -0
- package/plugins/paseo/plugin/tsconfig.json +6 -0
- package/skills/keiyaku/SKILL.md +5 -6
- package/skills/keiyaku-akuma/SKILL.md +1 -1
- package/skills/keiyaku-akuma/references/automation.md +8 -8
- package/skills/keiyaku-babysit/SKILL.md +1 -1
- package/skills/keiyaku-bind/SKILL.md +9 -9
- package/skills/keiyaku-debt/SKILL.md +91 -0
- package/skills/keiyaku-workflow/SKILL.md +2 -2
- package/build/plugins/claude/skills/keiyaku-task/SKILL.md +0 -104
- package/build/plugins/codex/skills/keiyaku-task/SKILL.md +0 -104
- package/build/plugins/opencode/skills/keiyaku-task/SKILL.md +0 -104
- package/build/skills/keiyaku-task/SKILL.md +0 -104
- package/build/src/cli/commands/task-grammar.d.ts +0 -19
- package/build/src/cli/commands/task-grammar.js +0 -384
- package/build/src/cli/commands/task-query.d.ts +0 -5
- package/build/src/cli/render/task.d.ts +0 -39
- package/build/src/task/board.d.ts +0 -168
- package/build/src/task/catalog.d.ts +0 -11
- package/build/src/task/catalog.js +0 -59
- package/build/src/task/compose-language.d.ts +0 -57
- package/build/src/task/compose-language.js +0 -364
- package/build/src/task/compose-parser.d.ts +0 -32
- package/build/src/task/compose-parser.js +0 -180
- package/build/src/task/compose.d.ts +0 -16
- package/build/src/task/compose.js +0 -189
- package/build/src/task/document.d.ts +0 -39
- package/build/src/task/identity.d.ts +0 -21
- package/build/src/task/index.d.ts +0 -138
- package/build/src/task/index.js +0 -269
- package/build/src/task/lifecycle-operations.d.ts +0 -6
- package/build/src/task/mutation-result.d.ts +0 -1726
- package/build/src/task/mutation-result.js +0 -198
- package/build/src/task/mutation.d.ts +0 -590
- package/build/src/task/mutation.js +0 -262
- package/build/src/task/operation-types.d.ts +0 -71
- package/build/src/task/operations.d.ts +0 -28
- package/build/src/task/query.d.ts +0 -76
- package/build/src/task/view.d.ts +0 -4
- package/build/src/task/view.js +0 -7
- package/skills/keiyaku-task/SKILL.md +0 -104
- /package/build/src/{task → debt}/operation-types.js +0 -0
|
@@ -1,262 +0,0 @@
|
|
|
1
|
-
import { World } from "../world.js";
|
|
2
|
-
import { requestBodyCommand } from "../akuma/request-rendezvous.js";
|
|
3
|
-
import { eraseRequestCommand, } from "../akuma/request-wire.js";
|
|
4
|
-
import { taskIdsSchema, taskNamespaceSchema } from "./identity.js";
|
|
5
|
-
import { taskNonblankTextSchema, taskStateSchema, taskPrioritySchema } from "./document.js";
|
|
6
|
-
import { taskBatchResultSchema, taskCompositionResultSchema, taskMutationIdSchema, taskMutationResultSchema, taskUpdateResultSchema, } from "./mutation-result.js";
|
|
7
|
-
import { z } from "zod";
|
|
8
|
-
export const TASK_MUTATION_ACTIONS = Object.freeze([
|
|
9
|
-
"task.add",
|
|
10
|
-
"task.addDocument",
|
|
11
|
-
"task.compose",
|
|
12
|
-
"task.done",
|
|
13
|
-
"task.drop",
|
|
14
|
-
"task.hold",
|
|
15
|
-
"task.resume",
|
|
16
|
-
"task.start",
|
|
17
|
-
"task.stop",
|
|
18
|
-
"task.update",
|
|
19
|
-
]);
|
|
20
|
-
const taskMutationActionSchema = z.enum(TASK_MUTATION_ACTIONS);
|
|
21
|
-
const nonemptyTaskIdsSchema = taskIdsSchema.unwrap().min(1).readonly();
|
|
22
|
-
const addInputSchema = z
|
|
23
|
-
.object({
|
|
24
|
-
title: taskNonblankTextSchema,
|
|
25
|
-
namespace: taskNamespaceSchema,
|
|
26
|
-
body: z.string().optional(),
|
|
27
|
-
note: z.string().optional(),
|
|
28
|
-
state: taskStateSchema.optional(),
|
|
29
|
-
priority: taskPrioritySchema.optional(),
|
|
30
|
-
needs: taskIdsSchema.optional(),
|
|
31
|
-
parent: taskMutationIdSchema.nullable().optional(),
|
|
32
|
-
supersedes: taskIdsSchema.optional(),
|
|
33
|
-
relates: taskIdsSchema.optional(),
|
|
34
|
-
})
|
|
35
|
-
.strict();
|
|
36
|
-
const updateInputSchema = z
|
|
37
|
-
.object({
|
|
38
|
-
title: taskNonblankTextSchema.optional(),
|
|
39
|
-
body: z.string().optional(),
|
|
40
|
-
appendBody: z.string().optional(),
|
|
41
|
-
note: z.string().optional(),
|
|
42
|
-
priority: taskPrioritySchema.optional(),
|
|
43
|
-
needs: taskIdsSchema.optional(),
|
|
44
|
-
addNeeds: taskIdsSchema.optional(),
|
|
45
|
-
dropNeeds: taskIdsSchema.optional(),
|
|
46
|
-
parent: taskMutationIdSchema.nullable().optional(),
|
|
47
|
-
supersedes: taskIdsSchema.optional(),
|
|
48
|
-
addSupersedes: taskIdsSchema.optional(),
|
|
49
|
-
dropSupersedes: taskIdsSchema.optional(),
|
|
50
|
-
relates: taskIdsSchema.optional(),
|
|
51
|
-
addRelates: taskIdsSchema.optional(),
|
|
52
|
-
dropRelates: taskIdsSchema.optional(),
|
|
53
|
-
})
|
|
54
|
-
.strict()
|
|
55
|
-
.superRefine((input, context) => {
|
|
56
|
-
if (input.body !== undefined && input.appendBody !== undefined)
|
|
57
|
-
context.addIssue({ code: "custom", message: "body and appendBody are mutually exclusive" });
|
|
58
|
-
if (Object.values(input).every((value) => value === undefined))
|
|
59
|
-
context.addIssue({ code: "custom", message: "update requires at least one field change" });
|
|
60
|
-
});
|
|
61
|
-
const addRequestSchema = z
|
|
62
|
-
.object({ input: addInputSchema })
|
|
63
|
-
.strict()
|
|
64
|
-
.transform(({ input }) => ({ action: "task.add", input }));
|
|
65
|
-
const addDocumentRequestSchema = z
|
|
66
|
-
.object({ input: z.object({ markdown: z.string(), namespace: taskNamespaceSchema }).strict() })
|
|
67
|
-
.strict()
|
|
68
|
-
.transform(({ input }) => ({ action: "task.addDocument", input }));
|
|
69
|
-
const composeRequestSchema = z
|
|
70
|
-
.object({ markdown: z.string(), namespace: taskNamespaceSchema })
|
|
71
|
-
.strict()
|
|
72
|
-
.transform((request) => ({ action: "task.compose", ...request }));
|
|
73
|
-
const updateRequestSchema = z
|
|
74
|
-
.object({ id: taskMutationIdSchema, input: updateInputSchema })
|
|
75
|
-
.strict()
|
|
76
|
-
.transform((request) => ({ action: "task.update", ...request }));
|
|
77
|
-
const singleOrBatchRequestSchema = (action) => z.union([
|
|
78
|
-
z
|
|
79
|
-
.object({ id: taskMutationIdSchema })
|
|
80
|
-
.strict()
|
|
81
|
-
.transform(({ id }) => ({ action, id })),
|
|
82
|
-
z
|
|
83
|
-
.object({ ids: nonemptyTaskIdsSchema })
|
|
84
|
-
.strict()
|
|
85
|
-
.transform(({ ids }) => ({ action, ids })),
|
|
86
|
-
]);
|
|
87
|
-
const terminalRequestSchema = (action) => z.union([
|
|
88
|
-
z
|
|
89
|
-
.object({ id: taskMutationIdSchema, note: z.string().optional() })
|
|
90
|
-
.strict()
|
|
91
|
-
.transform(({ id, note }) => ({ action, id, ...(note === undefined ? {} : { note }) })),
|
|
92
|
-
z
|
|
93
|
-
.object({ ids: nonemptyTaskIdsSchema, note: z.string().optional() })
|
|
94
|
-
.strict()
|
|
95
|
-
.transform(({ ids, note }) => ({ action, ids, ...(note === undefined ? {} : { note }) })),
|
|
96
|
-
]);
|
|
97
|
-
const taskRequestSchemas = {
|
|
98
|
-
"task.add": addRequestSchema,
|
|
99
|
-
"task.addDocument": addDocumentRequestSchema,
|
|
100
|
-
"task.compose": composeRequestSchema,
|
|
101
|
-
"task.done": terminalRequestSchema("task.done"),
|
|
102
|
-
"task.drop": terminalRequestSchema("task.drop"),
|
|
103
|
-
"task.hold": singleOrBatchRequestSchema("task.hold"),
|
|
104
|
-
"task.resume": singleOrBatchRequestSchema("task.resume"),
|
|
105
|
-
"task.start": singleOrBatchRequestSchema("task.start"),
|
|
106
|
-
"task.stop": singleOrBatchRequestSchema("task.stop"),
|
|
107
|
-
"task.update": updateRequestSchema,
|
|
108
|
-
};
|
|
109
|
-
const worldPathSchema = z.string().min(1);
|
|
110
|
-
const taskBodyRequestSchema = z
|
|
111
|
-
.object({ world: worldPathSchema, request: z.union(Object.values(taskRequestSchemas)) })
|
|
112
|
-
.strict();
|
|
113
|
-
const taskMutationServiceSchema = z.object({ action: taskMutationActionSchema }).strict();
|
|
114
|
-
export const forwardedTaskReferenceSchema = z
|
|
115
|
-
.object({ kind: z.literal("served-reference"), action: taskMutationActionSchema })
|
|
116
|
-
.strict();
|
|
117
|
-
function decodeTaskBodyRequest(action, value) {
|
|
118
|
-
const parsed = taskBodyRequestSchema.extend({ request: taskRequestSchemas[action] }).safeParse(value);
|
|
119
|
-
return parsed.success ? parsed.data : null;
|
|
120
|
-
}
|
|
121
|
-
function decodeTaskService(action, value) {
|
|
122
|
-
const parsed = taskMutationServiceSchema.safeParse(value);
|
|
123
|
-
if (!parsed.success || parsed.data.action !== action)
|
|
124
|
-
throw new Error(`malformed stored Task service evidence for ${action}`);
|
|
125
|
-
return parsed.data;
|
|
126
|
-
}
|
|
127
|
-
function decodeTaskReference(action, value) {
|
|
128
|
-
const parsed = forwardedTaskReferenceSchema.safeParse(value);
|
|
129
|
-
if (!parsed.success || parsed.data.action !== action)
|
|
130
|
-
throw new Error(`malformed Task service reference for ${action}`);
|
|
131
|
-
return parsed.data;
|
|
132
|
-
}
|
|
133
|
-
/** Task owns forwarded mutation payload, live result, and durable service evidence. */
|
|
134
|
-
export function taskMutationRequestProtocol(action, batch) {
|
|
135
|
-
return {
|
|
136
|
-
action,
|
|
137
|
-
encodeRequest: (input) => {
|
|
138
|
-
const { action: _action, ...request } = input.request;
|
|
139
|
-
return { world: input.world, request };
|
|
140
|
-
},
|
|
141
|
-
decodeRequest: (value) => decodeTaskBodyRequest(action, value),
|
|
142
|
-
encodeResult: (result) => result,
|
|
143
|
-
decodeResult: (result) => {
|
|
144
|
-
const schema = action === "task.compose"
|
|
145
|
-
? taskCompositionResultSchema
|
|
146
|
-
: action === "task.update"
|
|
147
|
-
? taskUpdateResultSchema
|
|
148
|
-
: batch === undefined
|
|
149
|
-
? z.union([taskMutationResultSchema, taskBatchResultSchema])
|
|
150
|
-
: batch
|
|
151
|
-
? taskBatchResultSchema
|
|
152
|
-
: taskMutationResultSchema;
|
|
153
|
-
const parsed = schema.safeParse(result);
|
|
154
|
-
if (!parsed.success)
|
|
155
|
-
throw new Error(`transport integrity: Task ${action} returned an invalid live result`);
|
|
156
|
-
return parsed.data;
|
|
157
|
-
},
|
|
158
|
-
decodeReference: (reference) => decodeTaskReference(action, reference),
|
|
159
|
-
isPermitted: (allowed) => allowed.includes(action),
|
|
160
|
-
};
|
|
161
|
-
}
|
|
162
|
-
export function taskMutationRequestCommand(action, port) {
|
|
163
|
-
return {
|
|
164
|
-
completion: "service",
|
|
165
|
-
protocol: taskMutationRequestProtocol(action),
|
|
166
|
-
encodeService: (service) => service,
|
|
167
|
-
decodeService: (service) => decodeTaskService(action, service),
|
|
168
|
-
projectService: (service) => ({ kind: "served-reference", action: service.action }),
|
|
169
|
-
execute: async (request, facts) => {
|
|
170
|
-
const world = await World.prove(request.world);
|
|
171
|
-
const action = request.request.action;
|
|
172
|
-
let result;
|
|
173
|
-
switch (action) {
|
|
174
|
-
case "task.add":
|
|
175
|
-
result = await port.add({
|
|
176
|
-
world,
|
|
177
|
-
options: addTaskOptions(request.request.input, facts.requester, facts.signal),
|
|
178
|
-
});
|
|
179
|
-
break;
|
|
180
|
-
case "task.addDocument":
|
|
181
|
-
result = await port.addDocument({
|
|
182
|
-
world,
|
|
183
|
-
document: { ...request.request.input, actor: facts.requester, signal: facts.signal },
|
|
184
|
-
});
|
|
185
|
-
break;
|
|
186
|
-
case "task.compose":
|
|
187
|
-
result = await port.compose({
|
|
188
|
-
world,
|
|
189
|
-
markdown: request.request.markdown,
|
|
190
|
-
defaultNamespace: request.request.namespace,
|
|
191
|
-
actor: facts.requester,
|
|
192
|
-
signal: facts.signal,
|
|
193
|
-
});
|
|
194
|
-
break;
|
|
195
|
-
case "task.update":
|
|
196
|
-
result = await port.update({
|
|
197
|
-
world,
|
|
198
|
-
id: request.request.id,
|
|
199
|
-
options: updateTaskOptions(request.request.input, facts.signal),
|
|
200
|
-
});
|
|
201
|
-
break;
|
|
202
|
-
case "task.start":
|
|
203
|
-
case "task.stop":
|
|
204
|
-
case "task.hold":
|
|
205
|
-
case "task.resume":
|
|
206
|
-
case "task.done":
|
|
207
|
-
case "task.drop": {
|
|
208
|
-
const verb = action.slice("task.".length);
|
|
209
|
-
const note = "note" in request.request ? request.request.note : undefined;
|
|
210
|
-
result =
|
|
211
|
-
"ids" in request.request
|
|
212
|
-
? await port.batch({
|
|
213
|
-
world,
|
|
214
|
-
verb,
|
|
215
|
-
ids: request.request.ids,
|
|
216
|
-
...(note === undefined ? {} : { note }),
|
|
217
|
-
signal: facts.signal,
|
|
218
|
-
})
|
|
219
|
-
: await port.lifecycle({
|
|
220
|
-
world,
|
|
221
|
-
verb,
|
|
222
|
-
id: request.request.id,
|
|
223
|
-
...(note === undefined ? {} : { note }),
|
|
224
|
-
signal: facts.signal,
|
|
225
|
-
});
|
|
226
|
-
break;
|
|
227
|
-
}
|
|
228
|
-
}
|
|
229
|
-
return { kind: "served", result, service: { action } };
|
|
230
|
-
},
|
|
231
|
-
};
|
|
232
|
-
}
|
|
233
|
-
export function taskMutationRequestCommands(port) {
|
|
234
|
-
return Object.fromEntries(TASK_MUTATION_ACTIONS.map((action) => [action, eraseRequestCommand(taskMutationRequestCommand(action, port))]));
|
|
235
|
-
}
|
|
236
|
-
export async function requestForwardedTask(input) {
|
|
237
|
-
const response = await requestBodyCommand({
|
|
238
|
-
directory: input.directory,
|
|
239
|
-
...(input.id === undefined ? {} : { id: input.id }),
|
|
240
|
-
command: taskMutationRequestProtocol(input.request.action, "ids" in input.request),
|
|
241
|
-
value: { world: input.world, request: input.request },
|
|
242
|
-
...(input.signal === undefined ? {} : { signal: input.signal }),
|
|
243
|
-
});
|
|
244
|
-
if (response.kind === "reference")
|
|
245
|
-
return response.reference;
|
|
246
|
-
return response.result;
|
|
247
|
-
}
|
|
248
|
-
/** Absent optional fields are omitted, never republished as an explicit undefined. */
|
|
249
|
-
function definedFields(fields, additions = {}) {
|
|
250
|
-
const selected = {};
|
|
251
|
-
for (const [key, value] of Object.entries({ ...fields, ...additions })) {
|
|
252
|
-
if (value !== undefined)
|
|
253
|
-
selected[key] = value;
|
|
254
|
-
}
|
|
255
|
-
return selected;
|
|
256
|
-
}
|
|
257
|
-
function addTaskOptions(input, actor, signal) {
|
|
258
|
-
return definedFields(input, { actor, signal });
|
|
259
|
-
}
|
|
260
|
-
function updateTaskOptions(input, signal) {
|
|
261
|
-
return definedFields(input, { signal });
|
|
262
|
-
}
|
|
@@ -1,71 +0,0 @@
|
|
|
1
|
-
import type { TaskPriority, TaskState } from "./document.js";
|
|
2
|
-
import type { TaskId } from "./identity.js";
|
|
3
|
-
import type { TaskCleanupFailure, TaskRefusal, TaskRetry, TaskView } from "./mutation-result.js";
|
|
4
|
-
export type { TaskView, TaskCleanupFailure, TaskCompositionDiagnostic, TaskRefusal, TaskRetry, TaskMutationResult, TaskUpdateResult, TaskBatchResult, } from "./mutation-result.js";
|
|
5
|
-
export type TaskOutcome<A> = Readonly<{
|
|
6
|
-
kind: "accepted";
|
|
7
|
-
value: A;
|
|
8
|
-
cleanup?: TaskCleanupFailure;
|
|
9
|
-
}> | Readonly<{
|
|
10
|
-
kind: "refused";
|
|
11
|
-
refusal: TaskRefusal;
|
|
12
|
-
}> | Readonly<{
|
|
13
|
-
kind: "retry";
|
|
14
|
-
reason: TaskRetry;
|
|
15
|
-
}>;
|
|
16
|
-
export type TaskLifecycleVerb = Extract<TaskRefusal, {
|
|
17
|
-
kind: "invalid-lifecycle-transition";
|
|
18
|
-
}>["verb"];
|
|
19
|
-
export type SettledTaskAction = "done";
|
|
20
|
-
export type SettledTaskResult = Readonly<{
|
|
21
|
-
kind: "changed";
|
|
22
|
-
task: TaskView;
|
|
23
|
-
action: SettledTaskAction;
|
|
24
|
-
cleanup?: TaskCleanupFailure;
|
|
25
|
-
}> | Readonly<{
|
|
26
|
-
kind: "unchanged";
|
|
27
|
-
}> | Readonly<{
|
|
28
|
-
kind: "refused";
|
|
29
|
-
refusal: TaskRefusal;
|
|
30
|
-
}> | Readonly<{
|
|
31
|
-
kind: "retry";
|
|
32
|
-
reason: TaskRetry;
|
|
33
|
-
}>;
|
|
34
|
-
export type AddTaskInput = Readonly<{
|
|
35
|
-
title: string;
|
|
36
|
-
namespace?: readonly string[];
|
|
37
|
-
body?: string;
|
|
38
|
-
note?: string;
|
|
39
|
-
state?: TaskState;
|
|
40
|
-
priority?: TaskPriority;
|
|
41
|
-
needs?: readonly TaskId[];
|
|
42
|
-
parent?: TaskId | null;
|
|
43
|
-
supersedes?: readonly TaskId[];
|
|
44
|
-
relates?: readonly TaskId[];
|
|
45
|
-
actor?: string;
|
|
46
|
-
signal?: AbortSignal;
|
|
47
|
-
}>;
|
|
48
|
-
export type AddTaskDocumentInput = Readonly<{
|
|
49
|
-
markdown: string;
|
|
50
|
-
namespace?: readonly string[];
|
|
51
|
-
actor?: string;
|
|
52
|
-
signal?: AbortSignal;
|
|
53
|
-
}>;
|
|
54
|
-
export type UpdateTaskInput = Readonly<{
|
|
55
|
-
title?: string;
|
|
56
|
-
body?: string;
|
|
57
|
-
appendBody?: string;
|
|
58
|
-
note?: string;
|
|
59
|
-
priority?: TaskPriority;
|
|
60
|
-
needs?: readonly TaskId[];
|
|
61
|
-
addNeeds?: readonly TaskId[];
|
|
62
|
-
dropNeeds?: readonly TaskId[];
|
|
63
|
-
parent?: TaskId | null;
|
|
64
|
-
supersedes?: readonly TaskId[];
|
|
65
|
-
addSupersedes?: readonly TaskId[];
|
|
66
|
-
dropSupersedes?: readonly TaskId[];
|
|
67
|
-
relates?: readonly TaskId[];
|
|
68
|
-
addRelates?: readonly TaskId[];
|
|
69
|
-
dropRelates?: readonly TaskId[];
|
|
70
|
-
signal?: AbortSignal;
|
|
71
|
-
}>;
|
|
@@ -1,28 +0,0 @@
|
|
|
1
|
-
import { type BlockedTaskRow, type TaskBoardObservation, type TaskDetailFacts, type TaskRow } from "./board.js";
|
|
2
|
-
import { type TaskId } from "./identity.js";
|
|
3
|
-
import type { WorldRoot } from "../world.js";
|
|
4
|
-
import { type TaskPage, type TaskQueryExpression, type TaskQueryRow, type TaskQuerySort } from "./query.js";
|
|
5
|
-
export { advanceTaskTimestamp, taskView } from "./view.js";
|
|
6
|
-
export type { AddTaskDocumentInput, AddTaskInput, TaskCleanupFailure, SettledTaskResult, TaskBatchResult, TaskCompositionDiagnostic, TaskMutationResult, TaskOutcome, TaskRefusal, TaskRetry, TaskUpdateResult, TaskView, UpdateTaskInput, } from "./operation-types.js";
|
|
7
|
-
import type { AddTaskDocumentInput, AddTaskInput, TaskMutationResult, TaskOutcome, TaskUpdateResult, UpdateTaskInput } from "./operation-types.js";
|
|
8
|
-
export declare function nukeTask(world: WorldRoot, options?: Readonly<{
|
|
9
|
-
timeoutMs?: number;
|
|
10
|
-
onRemoved?(count: number): void;
|
|
11
|
-
}>): Promise<number>;
|
|
12
|
-
export declare function addTask(world: WorldRoot, input: AddTaskInput): Promise<TaskMutationResult>;
|
|
13
|
-
export declare function addTaskDocument(world: WorldRoot, input: AddTaskDocumentInput): Promise<TaskMutationResult>;
|
|
14
|
-
export declare function updateTask(world: WorldRoot, id: TaskId, input: UpdateTaskInput): Promise<TaskUpdateResult>;
|
|
15
|
-
export { batchTasks, lifecycleTask, settleTask } from "./lifecycle-operations.js";
|
|
16
|
-
export declare function listTasks(world: WorldRoot, namespace: readonly string[] | undefined, selection: "active" | "closed" | "all", scope?: "namespace" | "world", limit?: number): Promise<TaskOutcome<TaskPage<TaskRow>>>;
|
|
17
|
-
export declare function readTaskDetail(world: WorldRoot, id: TaskId): Promise<TaskDetailFacts | null>;
|
|
18
|
-
export declare function readyTasks(world: WorldRoot, namespace: readonly string[] | undefined, scope?: "namespace" | "world", parent?: TaskId, limit?: number): Promise<TaskOutcome<TaskPage<TaskRow>>>;
|
|
19
|
-
export declare function blockedTasks(world: WorldRoot, namespace: readonly string[] | undefined, scope?: "namespace" | "world", parent?: TaskId, limit?: number): Promise<TaskOutcome<TaskPage<BlockedTaskRow>>>;
|
|
20
|
-
export declare function queryTasks(input: Readonly<{
|
|
21
|
-
world: WorldRoot;
|
|
22
|
-
namespace?: readonly string[];
|
|
23
|
-
expression: TaskQueryExpression;
|
|
24
|
-
scope?: "namespace" | "world";
|
|
25
|
-
sort?: TaskQuerySort;
|
|
26
|
-
limit?: number;
|
|
27
|
-
}>): Promise<TaskOutcome<TaskPage<TaskQueryRow>>>;
|
|
28
|
-
export declare function observeTaskBoard(world: WorldRoot): Promise<TaskBoardObservation>;
|
|
@@ -1,76 +0,0 @@
|
|
|
1
|
-
import type { TaskPriority, TaskState } from "./document.js";
|
|
2
|
-
import { type TaskId } from "./identity.js";
|
|
3
|
-
import type { TaskBoard, TaskRef, TaskRelationProjection, TaskRow } from "./board.js";
|
|
4
|
-
import { type BoundedList } from "../bounded-list.js";
|
|
5
|
-
export declare const TASK_RELATION_PREDICATE_FIELDS: readonly ["under", "needs", "blocks"];
|
|
6
|
-
export type TaskRelationPredicateField = (typeof TASK_RELATION_PREDICATE_FIELDS)[number];
|
|
7
|
-
export type TaskQueryPredicate = Readonly<{
|
|
8
|
-
field: "state";
|
|
9
|
-
operator: "=" | "!=";
|
|
10
|
-
value: TaskState;
|
|
11
|
-
}> | Readonly<{
|
|
12
|
-
field: "priority";
|
|
13
|
-
operator: "=" | "!=" | "<" | "<=" | ">" | ">=";
|
|
14
|
-
value: TaskPriority;
|
|
15
|
-
}> | Readonly<{
|
|
16
|
-
field: "title" | "id";
|
|
17
|
-
operator: "=" | "!=" | "~";
|
|
18
|
-
value: string;
|
|
19
|
-
}> | Readonly<{
|
|
20
|
-
field: "parent";
|
|
21
|
-
operator: "=" | "!=";
|
|
22
|
-
value: TaskId | null;
|
|
23
|
-
}> | Readonly<{
|
|
24
|
-
field: "under" | "needs" | "blocks";
|
|
25
|
-
operator: "=" | "!=";
|
|
26
|
-
value: TaskId;
|
|
27
|
-
}> | Readonly<{
|
|
28
|
-
field: "ready" | "blocked";
|
|
29
|
-
operator: "=" | "!=";
|
|
30
|
-
value: boolean;
|
|
31
|
-
}> | Readonly<{
|
|
32
|
-
field: "created" | "updated";
|
|
33
|
-
operator: "=" | "!=" | "<" | "<=" | ">" | ">=";
|
|
34
|
-
value: string;
|
|
35
|
-
}>;
|
|
36
|
-
export type TaskQueryExpression = Readonly<{
|
|
37
|
-
kind: "and" | "or";
|
|
38
|
-
terms: readonly TaskQueryExpression[];
|
|
39
|
-
}> | Readonly<{
|
|
40
|
-
kind: "not";
|
|
41
|
-
term: TaskQueryExpression;
|
|
42
|
-
}> | Readonly<{
|
|
43
|
-
kind: "predicate";
|
|
44
|
-
predicate: TaskQueryPredicate;
|
|
45
|
-
}>;
|
|
46
|
-
export type TaskQuerySort = "priority" | "created" | "updated" | "id";
|
|
47
|
-
export type TaskQueryRow = TaskRow & Readonly<{
|
|
48
|
-
parent: TaskId | null;
|
|
49
|
-
needs: readonly TaskRef[];
|
|
50
|
-
blocks: readonly TaskRef[];
|
|
51
|
-
createdAt: string;
|
|
52
|
-
updatedAt: string;
|
|
53
|
-
}>;
|
|
54
|
-
export type TaskPage<Row> = BoundedList<Row>;
|
|
55
|
-
/** Semantic refusals identify the caller input part; textual offsets belong to the CLI. */
|
|
56
|
-
export declare class TaskQueryPredicateError extends TypeError {
|
|
57
|
-
readonly part: "field" | "operator" | "value";
|
|
58
|
-
constructor(message: string, part: "field" | "operator" | "value");
|
|
59
|
-
}
|
|
60
|
-
export declare function normalizeTaskQueryPredicate(value: unknown): TaskQueryPredicate;
|
|
61
|
-
export declare function normalizeTaskQuery(value: unknown): TaskQueryExpression;
|
|
62
|
-
/** CLI selection and native default share Task-owned terminal-state semantics. */
|
|
63
|
-
export declare function taskQuerySelection(selection?: "active" | "closed" | "all", where?: TaskQueryExpression): TaskQueryExpression;
|
|
64
|
-
export declare function projectQueryRows(board: TaskBoard, relations: TaskRelationProjection, input: Readonly<{
|
|
65
|
-
scope: readonly string[] | null;
|
|
66
|
-
expression: TaskQueryExpression;
|
|
67
|
-
sort?: TaskQuerySort;
|
|
68
|
-
}>): readonly TaskQueryRow[];
|
|
69
|
-
export declare function projectQuery(board: TaskBoard, relations: TaskRelationProjection, input: Readonly<{
|
|
70
|
-
scope: readonly string[] | null;
|
|
71
|
-
expression: TaskQueryExpression;
|
|
72
|
-
sort?: TaskQuerySort;
|
|
73
|
-
limit: number;
|
|
74
|
-
}>): TaskPage<TaskQueryRow>;
|
|
75
|
-
export declare function underExpression(parent: TaskId): TaskQueryExpression;
|
|
76
|
-
export declare function queryUnderTargets(expression: TaskQueryExpression): readonly TaskId[];
|
package/build/src/task/view.d.ts
DELETED
package/build/src/task/view.js
DELETED
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
import { parseTaskId } from "./identity.js";
|
|
2
|
-
export function taskView(document) {
|
|
3
|
-
return { ...document, namespace: parseTaskId(document.id).namespace };
|
|
4
|
-
}
|
|
5
|
-
export function advanceTaskTimestamp(previous, candidate) {
|
|
6
|
-
return candidate > previous ? candidate : new Date(Date.parse(previous) + 1).toISOString();
|
|
7
|
-
}
|
|
@@ -1,104 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: keiyaku-task
|
|
3
|
-
description: >-
|
|
4
|
-
Must read when using Tasks for durable work planning, decomposition, or
|
|
5
|
-
dependencies.
|
|
6
|
-
---
|
|
7
|
-
|
|
8
|
-
# Keiyaku Task
|
|
9
|
-
|
|
10
|
-
A Task is durable planning memory. It records work, decomposition, and
|
|
11
|
-
relationships that must remain after the current conversation. Task is an
|
|
12
|
-
independent product; it is not a Contract, Arc, Akuma, permission, acceptance
|
|
13
|
-
boundary, or fulfillment lifecycle.
|
|
14
|
-
|
|
15
|
-
## 1. When To Use A Task
|
|
16
|
-
|
|
17
|
-
Use a Task when the plan or dependency must outlive the current conversation.
|
|
18
|
-
Skip it when the work is small and no durable planning memory is needed.
|
|
19
|
-
|
|
20
|
-
- Use a `kei` for one independently acceptable outcome.
|
|
21
|
-
- Use an Arc for a chapter inside one `kei`.
|
|
22
|
-
- Use a Task for decomposition or dependency memory.
|
|
23
|
-
- Do not create a Task just to mirror a `kei`.
|
|
24
|
-
|
|
25
|
-
A Task may exist without a Contract. Associating a Task with a `kei` does not
|
|
26
|
-
transfer the Contract's holder, acceptance, or lifecycle to the Task.
|
|
27
|
-
|
|
28
|
-
## 2. Relationships And Parallel Work
|
|
29
|
-
|
|
30
|
-
Independent Tasks may start and progress in parallel when their dependencies
|
|
31
|
-
allow it.
|
|
32
|
-
|
|
33
|
-
Use the relationships for their actual meanings:
|
|
34
|
-
|
|
35
|
-
- `needs` means this Task must wait for another Task to become terminal.
|
|
36
|
-
- `parent` groups decomposition; it does not create a dependency.
|
|
37
|
-
- `supersedes` points to work replaced by this Task.
|
|
38
|
-
- `relates` records a connection without affecting readiness.
|
|
39
|
-
|
|
40
|
-
Only `needs` orders work. Do not add it because Tasks touch the same Region or
|
|
41
|
-
because one Task is related to another. A terminal Task releases its dependents.
|
|
42
|
-
An `on_hold` Task is deliberately paused; it is neither ready nor blocked.
|
|
43
|
-
|
|
44
|
-
## 3. Task Commands
|
|
45
|
-
|
|
46
|
-
Create and inspect Tasks:
|
|
47
|
-
|
|
48
|
-
```bash
|
|
49
|
-
keiyaku task add "<title>"
|
|
50
|
-
keiyaku task add "<title>" --priority 1 --needs <task-id>
|
|
51
|
-
keiyaku task show <task-id>
|
|
52
|
-
keiyaku task ls
|
|
53
|
-
keiyaku task ready
|
|
54
|
-
keiyaku task blocked
|
|
55
|
-
keiyaku task tree <task-id>
|
|
56
|
-
keiyaku task doctor
|
|
57
|
-
```
|
|
58
|
-
|
|
59
|
-
Use complete Task IDs for targeted commands. `ls`, `ready`, and `blocked` use
|
|
60
|
-
the current namespace; use `--world` to inspect the complete Task world.
|
|
61
|
-
|
|
62
|
-
Change lifecycle state:
|
|
63
|
-
|
|
64
|
-
```bash
|
|
65
|
-
keiyaku task start <task-id>...
|
|
66
|
-
keiyaku task stop <task-id>
|
|
67
|
-
keiyaku task hold <task-id>...
|
|
68
|
-
keiyaku task resume <task-id>
|
|
69
|
-
keiyaku task done <task-id>...
|
|
70
|
-
keiyaku task drop <task-id>... --note "<reason>"
|
|
71
|
-
```
|
|
72
|
-
|
|
73
|
-
Use `done` when the Task is complete. Use `drop` when it will not be done.
|
|
74
|
-
Both terminal states release dependent Tasks. Use `hold` for a deliberate pause,
|
|
75
|
-
not for an unresolved dependency; unresolved `needs` appear in `blocked`.
|
|
76
|
-
|
|
77
|
-
Update a Task without changing its lifecycle:
|
|
78
|
-
|
|
79
|
-
```bash
|
|
80
|
-
keiyaku task update <task-id> --title "<title>"
|
|
81
|
-
keiyaku task update <task-id> --body "<body>"
|
|
82
|
-
keiyaku task update <task-id> --needs <task-id>
|
|
83
|
-
```
|
|
84
|
-
|
|
85
|
-
Use `task compose -` when several Tasks and their relationships should be
|
|
86
|
-
planned or admitted together. Use `--plan` to inspect the composition without
|
|
87
|
-
writing it.
|
|
88
|
-
|
|
89
|
-
## 4. After Creating A Task
|
|
90
|
-
|
|
91
|
-
Read the returned Task identity. Then:
|
|
92
|
-
|
|
93
|
-
1. Start ready work.
|
|
94
|
-
2. Run independent Tasks in parallel.
|
|
95
|
-
3. Add or remove relationships when the plan changes.
|
|
96
|
-
4. Hold work that is deliberately paused.
|
|
97
|
-
5. Mark completed work `done`, or mark abandoned work `drop` with a reason.
|
|
98
|
-
6. Use `ready`, `blocked`, `tree`, or `doctor` to rebuild the current view.
|
|
99
|
-
|
|
100
|
-
Task records planning memory. It does not perform the work, claim acceptance,
|
|
101
|
-
assign a holder, or decide what a Contract may accept.
|
|
102
|
-
|
|
103
|
-
Read `keiyaku-bind` for Contract authoring and `keiyaku-workflow` for Contract
|
|
104
|
-
lifecycle.
|
|
File without changes
|