@pennixrv/trellis 0.7.2-beta.0 → 0.7.2-beta.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/commands/teamwork/artifact.d.ts +9 -4
- package/dist/commands/teamwork/artifact.d.ts.map +1 -1
- package/dist/commands/teamwork/artifact.js +8 -37
- package/dist/commands/teamwork/artifact.js.map +1 -1
- package/dist/commands/teamwork/batch.d.ts +1 -0
- package/dist/commands/teamwork/batch.d.ts.map +1 -1
- package/dist/commands/teamwork/batch.js +24 -3
- package/dist/commands/teamwork/batch.js.map +1 -1
- package/dist/commands/teamwork/coordinator.d.ts +16 -3
- package/dist/commands/teamwork/coordinator.d.ts.map +1 -1
- package/dist/commands/teamwork/coordinator.js +209 -86
- package/dist/commands/teamwork/coordinator.js.map +1 -1
- package/dist/commands/teamwork/guard.js +2 -2
- package/dist/commands/teamwork/guard.js.map +1 -1
- package/dist/commands/teamwork/index.d.ts.map +1 -1
- package/dist/commands/teamwork/index.js +25 -1
- package/dist/commands/teamwork/index.js.map +1 -1
- package/dist/commands/teamwork/result.d.ts +2 -1
- package/dist/commands/teamwork/result.d.ts.map +1 -1
- package/dist/commands/teamwork/result.js.map +1 -1
- package/dist/commands/teamwork/runtime.d.ts +1 -1
- package/dist/commands/teamwork/runtime.d.ts.map +1 -1
- package/dist/commands/teamwork/runtime.js +58 -29
- package/dist/commands/teamwork/runtime.js.map +1 -1
- package/dist/migrations/manifests/0.7.2-beta.1.json +11 -0
- package/dist/migrations/manifests/0.7.2-beta.2.json +11 -0
- package/dist/templates/shared-hooks/guard-teamwork-wait.py +5 -0
- package/dist/templates/trellis/scripts/common/config.py +5 -0
- package/dist/templates/trellis/scripts/common/task_continuity.py +62 -0
- package/dist/templates/trellis/scripts/common/task_store.py +16 -0
- package/dist/templates/trellis/scripts/common/task_workflow.py +57 -4
- package/dist/templates/trellis/scripts/task.py +6 -1
- package/dist/utils/asset-backup.d.ts.map +1 -1
- package/dist/utils/asset-backup.js +18 -6
- package/dist/utils/asset-backup.js.map +1 -1
- package/package.json +2 -2
|
@@ -2,11 +2,12 @@ import { spawn } from "node:child_process";
|
|
|
2
2
|
import path from "node:path";
|
|
3
3
|
import fs from "node:fs";
|
|
4
4
|
import { getAdapter } from "./adapters/index.js";
|
|
5
|
+
import { TeamworkPolicyChangedError, } from "./coordinator.js";
|
|
5
6
|
import { pumpStdout } from "./supervisor/stdout.js";
|
|
6
7
|
import { resolveProviderPath } from "./supervisor.js";
|
|
7
8
|
import { assertTeammateContextCurrent } from "./teammate-launch.js";
|
|
8
9
|
import { appendEvent } from "./store/events.js";
|
|
9
|
-
import { recordCoordinationEvent } from "@pennixrv/trellis-core/teamwork";
|
|
10
|
+
import { recordCoordinationEvent, redactDiagnostic, } from "@pennixrv/trellis-core/teamwork";
|
|
10
11
|
import { readProcessIdentity } from "./process-identity.js";
|
|
11
12
|
import { assertFrozenCoordination } from "./coordination.js";
|
|
12
13
|
import { resolveTeammateRuntimeConfig } from "./teammate-config.js";
|
|
@@ -27,12 +28,17 @@ export function createCliCoordinatorRuntime(cwd, taskRoot, expectedConfigDigest)
|
|
|
27
28
|
prepare(context) {
|
|
28
29
|
const config = resolveTeammateRuntimeConfig(cwd, process.env, context.plan.coordinationMode);
|
|
29
30
|
if (expectedConfigDigest && config.sourceDigest !== expectedConfigDigest)
|
|
30
|
-
throw new
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
31
|
+
throw new TeamworkPolicyChangedError("Runtime policy changed after batch admission; pending assignments cannot start");
|
|
32
|
+
try {
|
|
33
|
+
assertFrozenCoordination(cwd, context.plan.coordinationDigest, context.plan.coordinationSnapshot, {
|
|
34
|
+
mode: context.plan.coordinationMode,
|
|
35
|
+
maxConcurrency: config.teammate.maxConcurrency,
|
|
36
|
+
guard: config.guard,
|
|
37
|
+
});
|
|
38
|
+
}
|
|
39
|
+
catch (error) {
|
|
40
|
+
throw new TeamworkPolicyChangedError(error instanceof Error ? error.message : String(error));
|
|
41
|
+
}
|
|
36
42
|
assertTeammateContextCurrent(context.launch, cwd);
|
|
37
43
|
const adapter = getAdapter(context.profile.provider);
|
|
38
44
|
resolveProviderPath(adapter.provider, cwd);
|
|
@@ -44,10 +50,7 @@ export function createCliCoordinatorRuntime(cwd, taskRoot, expectedConfigDigest)
|
|
|
44
50
|
async dispatch(context) {
|
|
45
51
|
if (aborted)
|
|
46
52
|
throw new Error("batch runtime has been cancelled");
|
|
47
|
-
|
|
48
|
-
runtime.prepare?.(context);
|
|
49
|
-
}
|
|
50
|
-
catch (error) {
|
|
53
|
+
const failBeforeStart = (error) => {
|
|
51
54
|
active.set(context.attemptId, {
|
|
52
55
|
result: Promise.resolve({
|
|
53
56
|
kind: "failed",
|
|
@@ -57,10 +60,17 @@ export function createCliCoordinatorRuntime(cwd, taskRoot, expectedConfigDigest)
|
|
|
57
60
|
stop: async () => true,
|
|
58
61
|
cancel: async () => undefined,
|
|
59
62
|
});
|
|
63
|
+
};
|
|
64
|
+
try {
|
|
65
|
+
runtime.prepare?.(context);
|
|
66
|
+
}
|
|
67
|
+
catch (error) {
|
|
68
|
+
failBeforeStart(error);
|
|
60
69
|
return;
|
|
61
70
|
}
|
|
62
|
-
|
|
63
|
-
|
|
71
|
+
let adapter;
|
|
72
|
+
let ctx;
|
|
73
|
+
let child;
|
|
64
74
|
const view = {
|
|
65
75
|
cwd,
|
|
66
76
|
model: context.profile.model,
|
|
@@ -68,17 +78,25 @@ export function createCliCoordinatorRuntime(cwd, taskRoot, expectedConfigDigest)
|
|
|
68
78
|
options: context.profile.options,
|
|
69
79
|
systemPrompt: context.launch.instructions,
|
|
70
80
|
};
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
81
|
+
try {
|
|
82
|
+
adapter = getAdapter(context.profile.provider);
|
|
83
|
+
ctx = adapter.createCtx();
|
|
84
|
+
const executable = resolveProviderPath(adapter.provider, cwd);
|
|
85
|
+
child = spawn(executable.command, [...executable.prefixArgs, ...adapter.buildArgs(view)], {
|
|
86
|
+
cwd,
|
|
87
|
+
stdio: ["pipe", "pipe", "pipe"],
|
|
88
|
+
env: {
|
|
89
|
+
...process.env,
|
|
90
|
+
TRELLIS_HOOKS: "0",
|
|
91
|
+
TRELLIS_TEAMWORK_SESSION: context.plan.sessionId,
|
|
92
|
+
TRELLIS_TEAMWORK_AS: context.teammateId,
|
|
93
|
+
},
|
|
94
|
+
});
|
|
95
|
+
}
|
|
96
|
+
catch (error) {
|
|
97
|
+
failBeforeStart(error);
|
|
98
|
+
return;
|
|
99
|
+
}
|
|
82
100
|
let closed = false;
|
|
83
101
|
let resolveClosed = () => undefined;
|
|
84
102
|
const close = new Promise((resolve) => {
|
|
@@ -136,11 +154,12 @@ export function createCliCoordinatorRuntime(cwd, taskRoot, expectedConfigDigest)
|
|
|
136
154
|
}
|
|
137
155
|
if (stderrTail.length) {
|
|
138
156
|
try {
|
|
139
|
-
const diagnostic = safePath(
|
|
157
|
+
const diagnostic = safePath(cwd, path.join(".trellis", ".runtime", "teamwork-diagnostics", context.plan.batchId, context.attemptId, "provider-stderr.log"));
|
|
140
158
|
const directory = path.dirname(diagnostic);
|
|
159
|
+
fs.mkdirSync(directory, { recursive: true, mode: 0o700 });
|
|
141
160
|
if (fs.lstatSync(directory).isDirectory() &&
|
|
142
161
|
!fs.lstatSync(directory).isSymbolicLink())
|
|
143
|
-
fs.writeFileSync(diagnostic, stderrTail, {
|
|
162
|
+
fs.writeFileSync(diagnostic, redactDiagnostic(stderrTail.toString("utf8")), {
|
|
144
163
|
mode: 0o600,
|
|
145
164
|
flag: "wx",
|
|
146
165
|
});
|
|
@@ -173,9 +192,19 @@ export function createCliCoordinatorRuntime(cwd, taskRoot, expectedConfigDigest)
|
|
|
173
192
|
});
|
|
174
193
|
};
|
|
175
194
|
child.once("error", (error) => {
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
195
|
+
// A spawn failure has no PID; other errors still require confirmed shutdown.
|
|
196
|
+
if (!child.pid) {
|
|
197
|
+
closed = true;
|
|
198
|
+
resolveClosed();
|
|
199
|
+
}
|
|
200
|
+
void finish({ kind: "failed", terminal: true, reason: error.message });
|
|
201
|
+
});
|
|
202
|
+
child.stdin.on("error", (error) => {
|
|
203
|
+
void finish({
|
|
204
|
+
kind: "failed",
|
|
205
|
+
terminal: true,
|
|
206
|
+
reason: `provider input failed: ${error.message}`,
|
|
207
|
+
});
|
|
179
208
|
});
|
|
180
209
|
child.once("close", () => {
|
|
181
210
|
closed = true;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"runtime.js","sourceRoot":"","sources":["../../../src/commands/teamwork/runtime.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"runtime.js","sourceRoot":"","sources":["../../../src/commands/teamwork/runtime.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": "0.7.2-beta.1",
|
|
3
|
+
"description": "Teamwork acceptance, recovery boundaries, and lifecycle revision integrity",
|
|
4
|
+
"breaking": true,
|
|
5
|
+
"recommendMigrate": true,
|
|
6
|
+
"changelog": "Separate teammate report submission from main-agent acceptance; retain complete attempt evidence until explicit cleanup; isolate member-level provider failures; tighten task lifecycle revision and metadata validation; preserve safe in-project asset symlinks; and correct release staging boundaries.",
|
|
7
|
+
"migrationGuide": "Upgrade through the beta channel to 0.7.2-beta.1, then run the native trellis update command. Existing customized project files remain subject to the normal preview and conflict review. Teamwork batches completed under this version now remain pending coordinator review until each report receives an explicit accepted or final_failed disposition; do not treat an AWAITING_REVIEW receipt as final acceptance. Attempt evidence remains until explicit cleanup-artifacts preview and confirmation.",
|
|
8
|
+
"aiInstructions": "The CLI owns FIFO dispatch, retries, background monitoring, and batch recovery. Teammates submit conclusions and evidence only. After the full batch returns, the main agent reviews each report and records a disposition bound to its digest and frozen acceptance contract. Preserve attempt evidence and use native reconcile, review, retry, and cleanup-artifacts commands. Unknown process identity remains fail closed unless explicitly confirmed through the auditable native reconciliation entry point.",
|
|
9
|
+
"migrations": [],
|
|
10
|
+
"notes": "Keep the beta npm channel. 0.7.2-beta.1 is above stable 0.7.1; do not move the latest tag."
|
|
11
|
+
}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": "0.7.2-beta.2",
|
|
3
|
+
"description": "Teamwork acceptance and release parity correction",
|
|
4
|
+
"breaking": true,
|
|
5
|
+
"recommendMigrate": true,
|
|
6
|
+
"changelog": "Preserve beta.1 teamwork and lifecycle changes; include the canonical workflow scripts in the source commit so released scripts match bundled templates.",
|
|
7
|
+
"migrationGuide": "Upgrade through the beta channel to 0.7.2-beta.2, then run the native trellis update command. Existing customized project files remain subject to the normal preview and conflict review. Teamwork batches remain pending coordinator review until each report receives an explicit accepted or final_failed disposition; attempt evidence remains until explicit cleanup.",
|
|
8
|
+
"aiInstructions": "The CLI owns FIFO dispatch, retries, background monitoring, and batch recovery. Teammates submit conclusions and evidence only. After the full batch returns, the main agent reviews each report and records a disposition bound to its digest and frozen acceptance contract. Preserve attempt evidence and use native reconcile, review, retry, and cleanup-artifacts commands. Unknown process identity remains fail closed unless explicitly confirmed through the auditable native reconciliation entry point.",
|
|
9
|
+
"migrations": [],
|
|
10
|
+
"notes": "Keep the beta npm channel. 0.7.2-beta.2 is above stable 0.7.1; do not move the latest tag."
|
|
11
|
+
}
|
|
@@ -31,6 +31,11 @@ def decision(payload: dict) -> dict | None:
|
|
|
31
31
|
records = list(directory.glob("*.json"))
|
|
32
32
|
if not records:
|
|
33
33
|
return None
|
|
34
|
+
for record in records:
|
|
35
|
+
try:
|
|
36
|
+
state = json.loads(record.read_text(encoding="utf-8"))
|
|
37
|
+
except (OSError, ValueError, TypeError):
|
|
38
|
+
continue
|
|
34
39
|
tool = str(payload.get("tool_name", "")).rsplit(".", 1)[-1]
|
|
35
40
|
if tool in {"write_stdin", "wait"}:
|
|
36
41
|
return None
|
|
@@ -301,6 +301,11 @@ def get_hooks(event: str, repo_root: Path | None = None) -> list[str]:
|
|
|
301
301
|
file=sys.stderr,
|
|
302
302
|
)
|
|
303
303
|
return []
|
|
304
|
+
if event == "after_complete" and "after_archive" in hooks:
|
|
305
|
+
print(
|
|
306
|
+
"[WARN] ignoring legacy hook `after_archive`; rename it to `after_complete` in config.yaml",
|
|
307
|
+
file=sys.stderr,
|
|
308
|
+
)
|
|
304
309
|
commands = hooks.get(event)
|
|
305
310
|
if commands is None:
|
|
306
311
|
return []
|
|
@@ -97,6 +97,65 @@ def _task(root: Path, task_path: str | None = None) -> tuple[Path, dict, str, st
|
|
|
97
97
|
return directory, data, task_id, active.context_key
|
|
98
98
|
|
|
99
99
|
|
|
100
|
+
def _submodule_facts(root: Path) -> list[dict]:
|
|
101
|
+
rc, output, _ = run_git(["submodule", "status", "--recursive"], cwd=root, timeout=20)
|
|
102
|
+
if rc:
|
|
103
|
+
raise ContinuityError("TASK_CONTINUITY_WITHHELD", "Git submodule status is unavailable")
|
|
104
|
+
facts = []
|
|
105
|
+
for line in output.splitlines():
|
|
106
|
+
if len(line) < 43:
|
|
107
|
+
raise ContinuityError("TASK_CONTINUITY_WITHHELD", "Git submodule status is malformed")
|
|
108
|
+
state, revision, relative_text = line[0], line[1:41], line[42:]
|
|
109
|
+
if " (" in relative_text:
|
|
110
|
+
relative_text = relative_text.rsplit(" (", 1)[0]
|
|
111
|
+
relative = Path(relative_text)
|
|
112
|
+
candidate = root / relative
|
|
113
|
+
try:
|
|
114
|
+
candidate.resolve(strict=True).relative_to(root.resolve())
|
|
115
|
+
except (OSError, ValueError) as error:
|
|
116
|
+
if state == "-" and not candidate.exists():
|
|
117
|
+
facts.append({"path": relative.as_posix(), "revision": revision, "state": "uninitialized"})
|
|
118
|
+
continue
|
|
119
|
+
raise ContinuityError("TASK_CONTINUITY_WITHHELD", f"submodule path is unavailable or unsafe: {relative}") from error
|
|
120
|
+
if state == "-":
|
|
121
|
+
facts.append({"path": relative.as_posix(), "revision": revision, "state": "uninitialized"})
|
|
122
|
+
continue
|
|
123
|
+
if not candidate.is_dir():
|
|
124
|
+
raise ContinuityError("TASK_CONTINUITY_WITHHELD", f"submodule path is not a directory: {relative}")
|
|
125
|
+
rc, head, _ = run_git(["rev-parse", "HEAD"], cwd=candidate, timeout=5)
|
|
126
|
+
rc_status, status, _ = run_git(["status", "--porcelain=v1", "--untracked-files=all"], cwd=candidate, timeout=10)
|
|
127
|
+
rc_diff, diff, _ = run_git(["diff", "--binary", "HEAD", "--", "."], cwd=candidate, timeout=20)
|
|
128
|
+
rc_untracked, untracked, _ = run_git(["ls-files", "--others", "--exclude-standard", "-z"], cwd=candidate, timeout=10)
|
|
129
|
+
if any((rc, rc_status, rc_diff, rc_untracked)):
|
|
130
|
+
raise ContinuityError("TASK_CONTINUITY_WITHHELD", f"submodule worktree is unavailable: {relative}")
|
|
131
|
+
digest = hashlib.sha256(diff.encode("utf-8", errors="surrogateescape"))
|
|
132
|
+
for raw_path in sorted(os.fsencode(path) for path in untracked.split("\0") if path):
|
|
133
|
+
path = candidate / Path(os.fsdecode(raw_path))
|
|
134
|
+
try:
|
|
135
|
+
path.resolve(strict=True).relative_to(candidate.resolve())
|
|
136
|
+
if path.is_symlink():
|
|
137
|
+
content = os.fsencode(os.readlink(path))
|
|
138
|
+
elif path.is_file():
|
|
139
|
+
content = path.read_bytes()
|
|
140
|
+
else:
|
|
141
|
+
raise OSError("not a regular file or symbolic link")
|
|
142
|
+
except (OSError, ValueError) as error:
|
|
143
|
+
raise ContinuityError("TASK_CONTINUITY_WITHHELD", f"submodule untracked path is unavailable or unsafe: {relative / path.name}") from error
|
|
144
|
+
digest.update(raw_path)
|
|
145
|
+
digest.update(b"\0")
|
|
146
|
+
digest.update(content)
|
|
147
|
+
digest.update(b"\0")
|
|
148
|
+
facts.append({
|
|
149
|
+
"path": relative.as_posix(),
|
|
150
|
+
"revision": revision,
|
|
151
|
+
"head": head.strip(),
|
|
152
|
+
"state": state,
|
|
153
|
+
"status_digest": hashlib.sha256(status.encode("utf-8")).hexdigest(),
|
|
154
|
+
"content_digest": digest.hexdigest(),
|
|
155
|
+
})
|
|
156
|
+
return facts
|
|
157
|
+
|
|
158
|
+
|
|
100
159
|
def _projection(root: Path, directory: Path, data: dict, task_id: str) -> dict:
|
|
101
160
|
meta = data.get("meta")
|
|
102
161
|
if not isinstance(meta, dict):
|
|
@@ -178,6 +237,8 @@ def _projection(root: Path, directory: Path, data: dict, task_id: str) -> dict:
|
|
|
178
237
|
worktree.update(b"\0")
|
|
179
238
|
worktree.update(content)
|
|
180
239
|
worktree.update(b"\0")
|
|
240
|
+
submodules = _submodule_facts(root)
|
|
241
|
+
worktree.update(json.dumps(submodules, ensure_ascii=False, sort_keys=True, separators=(",", ":")).encode("utf-8"))
|
|
181
242
|
evidence_digest = hashlib.sha256(
|
|
182
243
|
json.dumps(sorted(evidence), ensure_ascii=False, separators=(",", ":")).encode("utf-8")
|
|
183
244
|
).hexdigest()
|
|
@@ -191,6 +252,7 @@ def _projection(root: Path, directory: Path, data: dict, task_id: str) -> dict:
|
|
|
191
252
|
"clean": not status,
|
|
192
253
|
"status_digest": hashlib.sha256(status.encode("utf-8")).hexdigest(),
|
|
193
254
|
"content_digest": worktree.hexdigest(),
|
|
255
|
+
"submodules": submodules,
|
|
194
256
|
},
|
|
195
257
|
}
|
|
196
258
|
|
|
@@ -55,6 +55,15 @@ from .task_utils import (
|
|
|
55
55
|
)
|
|
56
56
|
from .workflow_selection import DIR_WORKFLOWS, WORKFLOW_ID_RE
|
|
57
57
|
|
|
58
|
+
RESERVED_META_KEYS = {
|
|
59
|
+
"task_workflow",
|
|
60
|
+
"delegation_authorizations",
|
|
61
|
+
"delegated_worktree_execution_history",
|
|
62
|
+
"delegated_worktree_execution_record",
|
|
63
|
+
"task_cancellation",
|
|
64
|
+
"task_lifecycle_recoveries",
|
|
65
|
+
}
|
|
66
|
+
|
|
58
67
|
|
|
59
68
|
# =============================================================================
|
|
60
69
|
# Helper Functions
|
|
@@ -248,6 +257,9 @@ def _parse_meta_pairs(pairs: list[str] | None) -> dict[str, str] | None:
|
|
|
248
257
|
file=sys.stderr,
|
|
249
258
|
)
|
|
250
259
|
return None
|
|
260
|
+
if key in RESERVED_META_KEYS:
|
|
261
|
+
print(colored(f"Error: metadata key is managed by Trellis: {key}", Colors.RED), file=sys.stderr)
|
|
262
|
+
return None
|
|
251
263
|
meta[key] = value
|
|
252
264
|
return meta
|
|
253
265
|
|
|
@@ -1427,6 +1439,10 @@ def cmd_set_meta(args: argparse.Namespace) -> int:
|
|
|
1427
1439
|
key = args.key
|
|
1428
1440
|
value = args.value
|
|
1429
1441
|
|
|
1442
|
+
if key in RESERVED_META_KEYS:
|
|
1443
|
+
print(colored(f"Error: metadata key is managed by Trellis: {key}", Colors.RED), file=sys.stderr)
|
|
1444
|
+
return 1
|
|
1445
|
+
|
|
1430
1446
|
if not key:
|
|
1431
1447
|
print(colored("Error: Missing arguments", Colors.RED))
|
|
1432
1448
|
print("Usage: python3 task.py set-meta <task-dir> <key> <value>")
|
|
@@ -110,6 +110,28 @@ def _state(meta: dict) -> dict:
|
|
|
110
110
|
raise TaskWorkflowError("TASK_PHASE_TASK_INVALID", "route dependency admission has an invalid shape")
|
|
111
111
|
if state.get("current_phase_id") is not None and state["current_phase_id"] not in state["phase_ids"]:
|
|
112
112
|
raise TaskWorkflowError("TASK_PHASE_TASK_INVALID", "current phase is not in the task route")
|
|
113
|
+
skip_records = state.get("skip_records")
|
|
114
|
+
if not isinstance(skip_records, dict):
|
|
115
|
+
raise TaskWorkflowError("TASK_PHASE_TASK_INVALID", "task phase skip records have an invalid shape")
|
|
116
|
+
for phase_id, skip in skip_records.items():
|
|
117
|
+
if (
|
|
118
|
+
phase_id not in PHASE_ID_SET
|
|
119
|
+
or not isinstance(skip, dict)
|
|
120
|
+
or not isinstance(skip.get("reason"), str)
|
|
121
|
+
or not skip["reason"].strip()
|
|
122
|
+
or not isinstance(skip.get("evidence_refs"), list)
|
|
123
|
+
or not skip["evidence_refs"]
|
|
124
|
+
or any(not isinstance(value, str) or not value.strip() for value in skip["evidence_refs"])
|
|
125
|
+
or skip.get("task_route_revision") != state["task_route_revision"]
|
|
126
|
+
or not ROUTE_REVISION.fullmatch(str(skip.get("input_revision", "")))
|
|
127
|
+
or not isinstance(skip.get("artifact_revision"), str)
|
|
128
|
+
or not re.fullmatch(r"[a-f0-9]{64}", skip["artifact_revision"])
|
|
129
|
+
or (
|
|
130
|
+
phase_id in state["phases"]
|
|
131
|
+
and skip["artifact_revision"] != state["phases"][phase_id].get("artifact_revision")
|
|
132
|
+
)
|
|
133
|
+
):
|
|
134
|
+
raise TaskWorkflowError("TASK_PHASE_TASK_INVALID", f"task phase skip record is invalid: {phase_id}")
|
|
113
135
|
for phase_id in state["phase_ids"]:
|
|
114
136
|
record = state["phases"].get(phase_id)
|
|
115
137
|
if not isinstance(record, dict) or record.get("status") not in {"not_started", "active", "waiting_user", "blocked", "accepted", "skipped"}:
|
|
@@ -254,6 +276,7 @@ def _is_withdrawal_route(state: dict) -> bool:
|
|
|
254
276
|
and isinstance(withdrawal.get("from"), str)
|
|
255
277
|
and withdrawal["from"] in PHASE_ID_SET
|
|
256
278
|
and withdrawal.get("to") == PHASE_IDS[4]
|
|
279
|
+
and withdrawal.get("return_kind") == "withdrawal"
|
|
257
280
|
and withdrawal.get("task_route_revision") == state.get("task_route_revision")
|
|
258
281
|
and isinstance(withdrawal.get("evidence_refs"), list)
|
|
259
282
|
and bool(withdrawal["evidence_refs"])
|
|
@@ -389,6 +412,8 @@ def _validate_classification(task_kind: str | None, complexity: str | None, proj
|
|
|
389
412
|
raise TaskWorkflowError("TASK_PHASE_INVALID_INPUT", "--project-context must be new or existing")
|
|
390
413
|
if task_kind == "analysis" and PHASE_IDS[3] in phases:
|
|
391
414
|
raise TaskWorkflowError("TASK_PHASE_INVALID_ROUTE", "analysis tasks cannot include the Task Implementation and Test Verification Phase")
|
|
415
|
+
if task_kind in {"implementation", "combined"} and PHASE_IDS[3] not in phases:
|
|
416
|
+
raise TaskWorkflowError("TASK_PHASE_INVALID_ROUTE", "implementation and combined tasks must include the Task Implementation and Test Verification Phase")
|
|
392
417
|
|
|
393
418
|
|
|
394
419
|
def _increment(value: str, allow_zero: bool = False) -> str:
|
|
@@ -441,7 +466,13 @@ def _init(args: argparse.Namespace, task_dir: Path, data: dict, meta: dict) -> i
|
|
|
441
466
|
"implementation_authorization": None,
|
|
442
467
|
"closeout_disposition": None,
|
|
443
468
|
"skip_records": {
|
|
444
|
-
phase: {
|
|
469
|
+
phase: {
|
|
470
|
+
"reason": route_reason,
|
|
471
|
+
"evidence_refs": route_evidence,
|
|
472
|
+
"task_route_revision": "1",
|
|
473
|
+
"input_revision": input_revision,
|
|
474
|
+
"artifact_revision": _phase_record(input_revision)["artifact_revision"],
|
|
475
|
+
}
|
|
445
476
|
for phase in omitted
|
|
446
477
|
},
|
|
447
478
|
"return_record": None,
|
|
@@ -549,7 +580,13 @@ def _update(args: argparse.Namespace, task_dir: Path, data: dict, state: dict) -
|
|
|
549
580
|
if current == PHASE_IDS[0]:
|
|
550
581
|
raise TaskWorkflowError("TASK_PHASE_INVALID_TRANSITION", "The Goal Exploration and Requirements Confirmation Phase must reach minimum alignment and acceptance and cannot be skipped")
|
|
551
582
|
record.update({"status": "skipped", "reason": reason, "evidence_refs": evidence})
|
|
552
|
-
state["skip_records"][current] = {
|
|
583
|
+
state["skip_records"][current] = {
|
|
584
|
+
"reason": reason,
|
|
585
|
+
"evidence_refs": evidence,
|
|
586
|
+
"task_route_revision": state["task_route_revision"],
|
|
587
|
+
"input_revision": state["input_revision"],
|
|
588
|
+
"artifact_revision": record["artifact_revision"],
|
|
589
|
+
}
|
|
553
590
|
_advance(state, current)
|
|
554
591
|
elif action == "accept":
|
|
555
592
|
_require_current_accepted_artifacts(task_dir, state)
|
|
@@ -660,6 +697,7 @@ def _update(args: argparse.Namespace, task_dir: Path, data: dict, state: dict) -
|
|
|
660
697
|
target == PHASE_IDS[4]
|
|
661
698
|
and phases == [PHASE_IDS[0], PHASE_IDS[4]]
|
|
662
699
|
and bool(evidence)
|
|
700
|
+
and args.return_kind == "withdrawal"
|
|
663
701
|
)
|
|
664
702
|
if not changed and not classification_changed and target == current and not reviewed_delivery:
|
|
665
703
|
raise TaskWorkflowError("TASK_PHASE_INVALID_ROUTE", "the updated route and target are unchanged")
|
|
@@ -702,12 +740,24 @@ def _update(args: argparse.Namespace, task_dir: Path, data: dict, state: dict) -
|
|
|
702
740
|
if phase_id not in old_phases:
|
|
703
741
|
phase_record["input_revision"] = state["input_revision"]
|
|
704
742
|
state["skip_records"] = {
|
|
705
|
-
phase_id: {
|
|
743
|
+
phase_id: {
|
|
744
|
+
**skip,
|
|
745
|
+
"task_route_revision": state["task_route_revision"],
|
|
746
|
+
"input_revision": state["input_revision"],
|
|
747
|
+
"artifact_revision": state["phases"][phase_id]["artifact_revision"],
|
|
748
|
+
}
|
|
706
749
|
for phase_id, skip in state["skip_records"].items()
|
|
707
750
|
if phase_id in phases and state["phases"][phase_id].get("status") == "skipped"
|
|
708
751
|
}
|
|
709
752
|
for phase_id in omitted:
|
|
710
|
-
state["
|
|
753
|
+
phase_record = state["phases"].get(phase_id, old_phases.get(phase_id, _phase_record(state["input_revision"])))
|
|
754
|
+
state["skip_records"][phase_id] = {
|
|
755
|
+
"reason": reason,
|
|
756
|
+
"evidence_refs": evidence,
|
|
757
|
+
"task_route_revision": state["task_route_revision"],
|
|
758
|
+
"input_revision": state["input_revision"],
|
|
759
|
+
"artifact_revision": phase_record["artifact_revision"],
|
|
760
|
+
}
|
|
711
761
|
if withdrawal_route and state["phases"][PHASE_IDS[0]].get("status") != "accepted":
|
|
712
762
|
state["phases"][PHASE_IDS[0]].update({
|
|
713
763
|
"status": "skipped",
|
|
@@ -721,6 +771,8 @@ def _update(args: argparse.Namespace, task_dir: Path, data: dict, state: dict) -
|
|
|
721
771
|
"reason": reason,
|
|
722
772
|
"evidence_refs": evidence,
|
|
723
773
|
"task_route_revision": state["task_route_revision"],
|
|
774
|
+
"input_revision": state["input_revision"],
|
|
775
|
+
"artifact_revision": state["phases"][PHASE_IDS[0]]["artifact_revision"],
|
|
724
776
|
}
|
|
725
777
|
state["implementation_authorization"] = None
|
|
726
778
|
state["closeout_disposition"] = None
|
|
@@ -728,6 +780,7 @@ def _update(args: argparse.Namespace, task_dir: Path, data: dict, state: dict) -
|
|
|
728
780
|
state["return_record"] = {
|
|
729
781
|
"from": current,
|
|
730
782
|
"to": target,
|
|
783
|
+
**({"return_kind": "withdrawal"} if withdrawal_route else {}),
|
|
731
784
|
"reason": reason,
|
|
732
785
|
"evidence_refs": evidence,
|
|
733
786
|
"task_route_revision": state["task_route_revision"],
|
|
@@ -247,6 +247,11 @@ def cmd_start(args: argparse.Namespace) -> int:
|
|
|
247
247
|
return 1
|
|
248
248
|
|
|
249
249
|
task_json_path = full_path / FILE_TASK_JSON
|
|
250
|
+
if task_json_path.is_file():
|
|
251
|
+
task_data, _ = read_json_checked(task_json_path)
|
|
252
|
+
if task_data is not None and task_data.get("status") in {"completed", "cancelled"}:
|
|
253
|
+
print(colored(f"TASK_PHASE_TASK_TERMINAL: task is already {task_data['status']}", Colors.RED), file=sys.stderr)
|
|
254
|
+
return 1
|
|
250
255
|
|
|
251
256
|
if not resolve_context_key():
|
|
252
257
|
# Degraded mode: no session identity available.
|
|
@@ -783,7 +788,7 @@ def main() -> int:
|
|
|
783
788
|
p_phase.add_argument("--route-reason", help="Reason when initialization omits one or more phases")
|
|
784
789
|
p_phase.add_argument("--route-evidence-ref", action="append", help="Evidence supporting an abbreviated initial route")
|
|
785
790
|
p_phase.add_argument("--target-phase", help="Earlier phase to revisit, or first affected phase for route change")
|
|
786
|
-
p_phase.add_argument("--return-kind", choices=("contract_change", "execution_rework"), default="contract_change", help="
|
|
791
|
+
p_phase.add_argument("--return-kind", choices=("contract_change", "execution_rework", "withdrawal"), default="contract_change", help="Classify a return or explicitly record user withdrawal")
|
|
787
792
|
p_phase.add_argument("--artifact-ref", action="append", help="Task-relative file in the current phase output")
|
|
788
793
|
p_phase.add_argument("--artifact-revision", help="Current artifact_revision required for acceptance")
|
|
789
794
|
p_phase.add_argument("--result-ref", help="Task result artifact reference")
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"asset-backup.d.ts","sourceRoot":"","sources":["../../src/utils/asset-backup.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AA6BxB,QAAA,MAAM,iBAAiB;;;;;;;oBAGrB,CAAC;AASH,QAAA,MAAM,cAAc;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;kBAkCT,CAAC;AACZ,MAAM,MAAM,WAAW,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,cAAc,CAAC,CAAC;AACzD,KAAK,WAAW,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,iBAAiB,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"asset-backup.d.ts","sourceRoot":"","sources":["../../src/utils/asset-backup.ts"],"names":[],"mappings":"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"}
|
|
@@ -71,7 +71,7 @@ const RUNTIME = [
|
|
|
71
71
|
".trellis/scripts/common/task_workflow.py",
|
|
72
72
|
];
|
|
73
73
|
const PROTECTED = /(?:^|\/)(?:tasks|spec|workspace|backlog|session-handoffs|sessions|history|logs?|cache|node_modules|worktrees?|agent-traces|\.runtime|\.git|credentials?|secrets?)(?:\/|$)|(?:^|\/)\.backup-|(?:^|\/)\.env(?:\.|$)|(?:^|\/)(?:\.developer|\.task-layout-migration\.json)$/i;
|
|
74
|
-
/**
|
|
74
|
+
/** Permit managed symlinks only when their resolved target stays in-project. */
|
|
75
75
|
function safePath(root, relative) {
|
|
76
76
|
validateManagedRelativePath(relative);
|
|
77
77
|
root = canonicalProjectRoot(root);
|
|
@@ -80,9 +80,14 @@ function safePath(root, relative) {
|
|
|
80
80
|
cursor = path.join(cursor, part);
|
|
81
81
|
try {
|
|
82
82
|
const stat = fs.lstatSync(cursor);
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
if (
|
|
83
|
+
const resolved = fs.realpathSync(cursor);
|
|
84
|
+
const rel = path.relative(root, resolved);
|
|
85
|
+
if (rel === ".." ||
|
|
86
|
+
rel.startsWith(`..${path.sep}`) ||
|
|
87
|
+
path.isAbsolute(rel))
|
|
88
|
+
throw new Error(`Asset path escapes project root: ${relative}`);
|
|
89
|
+
const targetStat = stat.isSymbolicLink() ? fs.statSync(cursor) : stat;
|
|
90
|
+
if (cursor !== path.join(root, relative) && !targetStat.isDirectory())
|
|
86
91
|
throw new Error(`Invalid asset parent: ${relative}`);
|
|
87
92
|
}
|
|
88
93
|
catch (error) {
|
|
@@ -90,7 +95,14 @@ function safePath(root, relative) {
|
|
|
90
95
|
throw error;
|
|
91
96
|
}
|
|
92
97
|
}
|
|
93
|
-
|
|
98
|
+
try {
|
|
99
|
+
return fs.realpathSync(cursor);
|
|
100
|
+
}
|
|
101
|
+
catch (error) {
|
|
102
|
+
if (error.code !== "ENOENT")
|
|
103
|
+
throw error;
|
|
104
|
+
return cursor;
|
|
105
|
+
}
|
|
94
106
|
}
|
|
95
107
|
function assetPath(relative) {
|
|
96
108
|
validateManagedRelativePath(relative);
|
|
@@ -319,7 +331,7 @@ export function listAssetBackups(root) {
|
|
|
319
331
|
const location = safePath(root, relative);
|
|
320
332
|
if (!fs.existsSync(location))
|
|
321
333
|
continue;
|
|
322
|
-
if (!fs.lstatSync(
|
|
334
|
+
if (!fs.lstatSync(path.join(root, relative)).isFile())
|
|
323
335
|
throw new Error("Migration sidecar is not a regular file; retained.");
|
|
324
336
|
const size = treeSize(location);
|
|
325
337
|
result.push({
|