@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.
Files changed (36) hide show
  1. package/dist/commands/teamwork/artifact.d.ts +9 -4
  2. package/dist/commands/teamwork/artifact.d.ts.map +1 -1
  3. package/dist/commands/teamwork/artifact.js +8 -37
  4. package/dist/commands/teamwork/artifact.js.map +1 -1
  5. package/dist/commands/teamwork/batch.d.ts +1 -0
  6. package/dist/commands/teamwork/batch.d.ts.map +1 -1
  7. package/dist/commands/teamwork/batch.js +24 -3
  8. package/dist/commands/teamwork/batch.js.map +1 -1
  9. package/dist/commands/teamwork/coordinator.d.ts +16 -3
  10. package/dist/commands/teamwork/coordinator.d.ts.map +1 -1
  11. package/dist/commands/teamwork/coordinator.js +209 -86
  12. package/dist/commands/teamwork/coordinator.js.map +1 -1
  13. package/dist/commands/teamwork/guard.js +2 -2
  14. package/dist/commands/teamwork/guard.js.map +1 -1
  15. package/dist/commands/teamwork/index.d.ts.map +1 -1
  16. package/dist/commands/teamwork/index.js +25 -1
  17. package/dist/commands/teamwork/index.js.map +1 -1
  18. package/dist/commands/teamwork/result.d.ts +2 -1
  19. package/dist/commands/teamwork/result.d.ts.map +1 -1
  20. package/dist/commands/teamwork/result.js.map +1 -1
  21. package/dist/commands/teamwork/runtime.d.ts +1 -1
  22. package/dist/commands/teamwork/runtime.d.ts.map +1 -1
  23. package/dist/commands/teamwork/runtime.js +58 -29
  24. package/dist/commands/teamwork/runtime.js.map +1 -1
  25. package/dist/migrations/manifests/0.7.2-beta.1.json +11 -0
  26. package/dist/migrations/manifests/0.7.2-beta.2.json +11 -0
  27. package/dist/templates/shared-hooks/guard-teamwork-wait.py +5 -0
  28. package/dist/templates/trellis/scripts/common/config.py +5 -0
  29. package/dist/templates/trellis/scripts/common/task_continuity.py +62 -0
  30. package/dist/templates/trellis/scripts/common/task_store.py +16 -0
  31. package/dist/templates/trellis/scripts/common/task_workflow.py +57 -4
  32. package/dist/templates/trellis/scripts/task.py +6 -1
  33. package/dist/utils/asset-backup.d.ts.map +1 -1
  34. package/dist/utils/asset-backup.js +18 -6
  35. package/dist/utils/asset-backup.js.map +1 -1
  36. 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 Error("Runtime policy changed after batch admission; pending assignments cannot start");
31
- assertFrozenCoordination(cwd, context.plan.coordinationDigest, context.plan.coordinationSnapshot, {
32
- mode: context.plan.coordinationMode,
33
- maxConcurrency: config.teammate.maxConcurrency,
34
- guard: config.guard,
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
- try {
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
- const adapter = getAdapter(context.profile.provider);
63
- const ctx = adapter.createCtx();
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
- const executable = resolveProviderPath(adapter.provider, cwd);
72
- const child = spawn(executable.command, [...executable.prefixArgs, ...adapter.buildArgs(view)], {
73
- cwd,
74
- stdio: ["pipe", "pipe", "pipe"],
75
- env: {
76
- ...process.env,
77
- TRELLIS_HOOKS: "0",
78
- TRELLIS_TEAMWORK_SESSION: context.plan.sessionId,
79
- TRELLIS_TEAMWORK_AS: context.teammateId,
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(taskRoot, path.join(path.dirname(context.assignment.briefPath), "attempts", context.attemptId, "provider-stderr.log"));
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
- closed = true;
177
- resolveClosed();
178
- settle({ kind: "failed", terminal: true, reason: error.message });
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":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAC3C,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,MAAM,SAAS,CAAC;AAEzB,OAAO,EAAE,UAAU,EAAoB,MAAM,qBAAqB,CAAC;AAGnE,OAAO,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AACpD,OAAO,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAC;AACtD,OAAO,EAAE,4BAA4B,EAAE,MAAM,sBAAsB,CAAC;AACpE,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,uBAAuB,EAAE,MAAM,iCAAiC,CAAC;AAC1E,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAC5D,OAAO,EAAE,wBAAwB,EAAE,MAAM,mBAAmB,CAAC;AAC7D,OAAO,EAAE,4BAA4B,EAAE,MAAM,sBAAsB,CAAC;AACpE,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAEzC,2GAA2G;AAC3G,MAAM,CAAC,MAAM,iBAAiB,GAA6B;IACzD,cAAc,EAAE,IAAI;IACpB,uBAAuB,EAAE,IAAI;IAC7B,qBAAqB,EAAE,IAAI;IAC3B,kBAAkB,EAAE,CAAC,kBAAkB,EAAE,YAAY,EAAE,KAAK,CAAC;IAC7D,eAAe,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE;IAChE,eAAe,EAAE,EAAE;CACpB,CAAC;AAaF,MAAM,UAAU,2BAA2B,CACzC,GAAW,EACX,QAAgB,EAChB,oBAA6B;IAE7B,MAAM,MAAM,GAAG,IAAI,GAAG,EAAyB,CAAC;IAChD,IAAI,OAAO,GAAG,KAAK,CAAC;IACpB,MAAM,OAAO,GAA0B;QACrC,OAAO,CAAC,OAAO;YACb,MAAM,MAAM,GAAG,4BAA4B,CACzC,GAAG,EACH,OAAO,CAAC,GAAG,EACX,OAAO,CAAC,IAAI,CAAC,gBAAgB,CAC9B,CAAC;YACF,IAAI,oBAAoB,IAAI,MAAM,CAAC,YAAY,KAAK,oBAAoB;gBACtE,MAAM,IAAI,KAAK,CACb,gFAAgF,CACjF,CAAC;YACJ,wBAAwB,CACtB,GAAG,EACH,OAAO,CAAC,IAAI,CAAC,kBAAkB,EAC/B,OAAO,CAAC,IAAI,CAAC,oBAAoB,EACjC;gBACE,IAAI,EAAE,OAAO,CAAC,IAAI,CAAC,gBAAgB;gBACnC,cAAc,EAAE,MAAM,CAAC,QAAQ,CAAC,cAAc;gBAC9C,KAAK,EAAE,MAAM,CAAC,KAAK;aACpB,CACF,CAAC;YACF,4BAA4B,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;YAClD,MAAM,OAAO,GAAG,UAAU,CAAC,OAAO,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;YACrD,mBAAmB,CAAC,OAAO,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC;QAC7C,CAAC;QACD,KAAK,CAAC,QAAQ,CAAC,MAAM;YACnB,OAAO,GAAG,IAAI,CAAC;YACf,MAAM,OAAO,CAAC,GAAG,CACf,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAC9D,CAAC;QACJ,CAAC;QACD,KAAK,CAAC,QAAQ,CAAC,OAAO;YACpB,IAAI,OAAO;gBAAE,MAAM,IAAI,KAAK,CAAC,kCAAkC,CAAC,CAAC;YACjE,IAAI,CAAC;gBACH,OAAO,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,CAAC;YAC7B,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,SAAS,EAAE;oBAC5B,MAAM,EAAE,OAAO,CAAC,OAAO,CAAC;wBACtB,IAAI,EAAE,QAAQ;wBACd,QAAQ,EAAE,IAAI;wBACd,MAAM,EAAE,yBAAyB,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE;qBAC1F,CAAC;oBACF,IAAI,EAAE,KAAK,IAAI,EAAE,CAAC,IAAI;oBACtB,MAAM,EAAE,KAAK,IAAI,EAAE,CAAC,SAAS;iBAC9B,CAAC,CAAC;gBACH,OAAO;YACT,CAAC;YACD,MAAM,OAAO,GAAG,UAAU,CAAC,OAAO,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;YACrD,MAAM,GAAG,GAAG,OAAO,CAAC,SAAS,EAAE,CAAC;YAChC,MAAM,IAAI,GAAG;gBACX,GAAG;gBACH,KAAK,EAAE,OAAO,CAAC,OAAO,CAAC,KAAK;gBAC5B,eAAe,EAAE,OAAO,CAAC,OAAO,CAAC,eAAe;gBAChD,OAAO,EAAE,OAAO,CAAC,OAAO,CAAC,OAAO;gBAChC,YAAY,EAAE,OAAO,CAAC,MAAM,CAAC,YAAY;aAC1C,CAAC;YACF,MAAM,UAAU,GAAG,mBAAmB,CAAC,OAAO,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC;YAC9D,MAAM,KAAK,GAAG,KAAK,CACjB,UAAU,CAAC,OAAO,EAClB,CAAC,GAAG,UAAU,CAAC,UAAU,EAAE,GAAG,OAAO,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,EACtD;gBACE,GAAG;gBACH,KAAK,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC;gBAC/B,GAAG,EAAE;oBACH,GAAG,OAAO,CAAC,GAAG;oBACd,aAAa,EAAE,GAAG;oBAClB,wBAAwB,EAAE,OAAO,CAAC,IAAI,CAAC,SAAS;oBAChD,mBAAmB,EAAE,OAAO,CAAC,UAAU;iBACxC;aACF,CACa,CAAC;YACjB,IAAI,MAAM,GAAG,KAAK,CAAC;YACnB,IAAI,aAAa,GAAe,GAAG,EAAE,CAAC,SAAS,CAAC;YAChD,MAAM,KAAK,GAAG,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,EAAE;gBAC1C,aAAa,GAAG,OAAO,CAAC;YAC1B,CAAC,CAAC,CAAC;YACH,IAAI,WAAyC,CAAC;YAC9C,MAAM,IAAI,GAAG,GAAqB,EAAE,CAClC,CAAC,WAAW,KAAK,CAAC,KAAK,IAAI,EAAE;gBAC3B,IAAI,MAAM;oBAAE,OAAO,IAAI,CAAC;gBACxB,KAAK,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC;gBAClB,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;gBACtB,MAAM,KAAK,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,IAAI,CAAC,CAAC;gBAC5D,MAAM,WAAW,GAAG,UAAU,CAAC,aAAa,EAAE,IAAI,CAAC,CAAC;gBACpD,MAAM,KAAK,CAAC;gBACZ,YAAY,CAAC,KAAK,CAAC,CAAC;gBACpB,YAAY,CAAC,WAAW,CAAC,CAAC;gBAC1B,OAAO,MAAM,CAAC;YAChB,CAAC,CAAC,EAAE,CAAC,CAAC;YACR,IAAI,MAAM,GAAwC,GAAG,EAAE,CAAC,SAAS,CAAC;YAClE,IAAI,OAAO,GAAG,KAAK,CAAC;YACpB,IAAI,iBAAqC,CAAC;YAC1C,MAAM,MAAM,GAAG,IAAI,OAAO,CAAoB,CAAC,OAAO,EAAE,EAAE;gBACxD,MAAM,GAAG,CAAC,OAAO,EAAQ,EAAE;oBACzB,IAAI,CAAC,OAAO,EAAE,CAAC;wBACb,OAAO,GAAG,IAAI,CAAC;wBACf,OAAO,CAAC,OAAO,CAAC,CAAC;oBACnB,CAAC;gBACH,CAAC,CAAC;YACJ,CAAC,CAAC,CAAC;YACH,MAAM,MAAM,GAAG,KAAK,EAAE,OAA0B,EAAiB,EAAE;gBACjE,MAAM,SAAS,GAAG,MAAM,IAAI,EAAE,CAAC;gBAC/B,IAAI,SAAS,IAAI,KAAK,CAAC,GAAG,EAAE,CAAC;oBAC3B,IAAI,CAAC;wBACH,MAAM,uBAAuB,CAAC;4BAC5B,SAAS,EAAE,OAAO,CAAC,IAAI,CAAC,SAAS;4BACjC,GAAG;4BACH,EAAE,EAAE,MAAM;4BACV,OAAO,EAAE,OAAO,CAAC,IAAI,CAAC,OAAO;4BAC7B,MAAM,EAAE,SAAS;4BACjB,MAAM,EAAE,gBAAgB;4BACxB,SAAS,EAAE,OAAO,CAAC,SAAS;4BAC5B,UAAU,EAAE,OAAO,CAAC,UAAU;4BAC9B,QAAQ,EAAE,OAAO,CAAC,IAAI,CAAC,QAAQ;4BAC/B,OAAO,EAAE,EAAE,GAAG,EAAE,KAAK,CAAC,GAAG,EAAE;4BAC3B,cAAc,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,OAAO,SAAS,OAAO,CAAC,SAAS,EAAE;yBACpE,CAAC,CAAC;oBACL,CAAC;oBAAC,MAAM,CAAC;wBACP,MAAM,CAAC;4BACL,IAAI,EAAE,gBAAgB;4BACtB,MAAM,EACJ,oEAAoE;yBACvE,CAAC,CAAC;wBACH,OAAO;oBACT,CAAC;gBACH,CAAC;gBACD,IAAI,UAAU,CAAC,MAAM,EAAE,CAAC;oBACtB,IAAI,CAAC;wBACH,MAAM,UAAU,GAAG,QAAQ,CACzB,QAAQ,EACR,IAAI,CAAC,IAAI,CACP,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,UAAU,CAAC,SAAS,CAAC,EAC1C,UAAU,EACV,OAAO,CAAC,SAAS,EACjB,qBAAqB,CACtB,CACF,CAAC;wBACF,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;wBAC3C,IACE,EAAE,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC,WAAW,EAAE;4BACrC,CAAC,EAAE,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC,cAAc,EAAE;4BAEzC,EAAE,CAAC,aAAa,CAAC,UAAU,EAAE,UAAU,EAAE;gCACvC,IAAI,EAAE,KAAK;gCACX,IAAI,EAAE,IAAI;6BACX,CAAC,CAAC;oBACP,CAAC;oBAAC,OAAO,KAAK,EAAE,CAAC;wBACf,IACE,CAAC,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC,QAAQ,CAC3B,KAA+B,CAAC,IAAI,IAAI,EAAE,CAC5C;4BAED,OAAO,CAAC,KAAK,CACX,wDAAwD,CACzD,CAAC;oBACN,CAAC;gBACH,CAAC;gBACD,IAAI,OAAO,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;oBAC9B,IAAI,CAAC;wBACH,4BAA4B,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;oBACpD,CAAC;oBAAC,OAAO,KAAK,EAAE,CAAC;wBACf,OAAO,GAAG;4BACR,IAAI,EAAE,QAAQ;4BACd,QAAQ,EAAE,IAAI;4BACd,MAAM,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC;yBAC/D,CAAC;oBACJ,CAAC;gBACH,CAAC;gBACD,MAAM,CACJ,SAAS;oBACP,CAAC,CAAC;wBACE,GAAG,OAAO;wBACV,GAAG,CAAC,iBAAiB,CAAC,CAAC,CAAC,EAAE,iBAAiB,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;qBACpD;oBACH,CAAC,CAAC;wBACE,IAAI,EAAE,gBAAgB;wBACtB,MAAM,EAAE,8CAA8C;qBACvD,CACN,CAAC;YACJ,CAAC,CAAC;YACF,KAAK,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,KAAK,EAAE,EAAE;gBAC5B,MAAM,GAAG,IAAI,CAAC;gBACd,aAAa,EAAE,CAAC;gBAChB,MAAM,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;YACpE,CAAC,CAAC,CAAC;YACH,KAAK,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,EAAE;gBACvB,MAAM,GAAG,IAAI,CAAC;gBACd,aAAa,EAAE,CAAC;YAClB,CAAC,CAAC,CAAC;YACH,IAAI,UAAU,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;YACjC,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,KAAa,EAAE,EAAE;gBACxC,UAAU,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,UAAU,EAAE,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,QAAQ,CACnE,CAAC,EAAE,GAAG,IAAI,CACX,CAAC;YACJ,CAAC,CAAC,CAAC;YACH,MAAM,OAAO,GAAG,UAAU,CACxB,OAAO,CAAC,MAAM,EAAE,CAAC,KAAK,EAAE,GAAG,CAAC,IAAI,KAAK,CAAC,MAAM,EAC5C,KAAK,EAAE,IAAI,EAAE,EAAE;gBACb,MAAM,MAAM,GAAG,OAAO,CAAC,SAAS,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;gBAC5C,IAAI,MAAM,CAAC,IAAI,EAAE,gBAAgB;oBAC/B,iBAAiB,GAAG,MAAM,CAAC,IAAI,CAAC,gBAAgB,CAAC;gBACnD,KAAK,MAAM,KAAK,IAAI,MAAM,CAAC,IAAI,EAAE,KAAK,IAAI,EAAE;oBAC1C,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;gBAC3B,KAAK,MAAM,KAAK,IAAI,MAAM,CAAC,MAAM,EAAE,CAAC;oBAClC,IACE,KAAK,CAAC,IAAI,KAAK,SAAS;wBACxB,KAAK,CAAC,IAAI,KAAK,OAAO;wBACtB,KAAK,CAAC,IAAI,KAAK,UAAU;wBAEzB,MAAM,WAAW,CAAC,OAAO,CAAC,IAAI,CAAC,SAAS,EAAE;4BACxC,IAAI,EAAE,KAAK,CAAC,IAAI;4BAChB,EAAE,EAAE,OAAO,CAAC,UAAU;4BACtB,GAAG,CAAC,KAAK,CAAC,OAAO,IAAI,EAAE,CAAC;yBACzB,CAAC,CAAC;oBACL,IAAI,KAAK,CAAC,IAAI,KAAK,MAAM;wBACvB,KAAK,MAAM,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC;oBAClD,IAAI,KAAK,CAAC,IAAI,KAAK,OAAO;wBACxB,KAAK,MAAM,CAAC;4BACV,IAAI,EAAE,QAAQ;4BACd,QAAQ,EAAE,IAAI;4BACd,MAAM,EAAE,MAAM,CAAC,KAAK,CAAC,OAAO,EAAE,OAAO,IAAI,iBAAiB,CAAC;yBAC5D,CAAC,CAAC;gBACP,CAAC;YACH,CAAC,EACD,KAAK,EAAE,KAAK,EAAE,EAAE;gBACd,MAAM,MAAM,CAAC;oBACX,IAAI,EAAE,QAAQ;oBACd,QAAQ,EAAE,IAAI;oBACd,MAAM,EAAE,KAAK,CAAC,OAAO;iBACtB,CAAC,CAAC;YACL,CAAC,CACF,CAAC;YACF,KAAK,OAAO,CAAC,IAAI,CAAC,KAAK,IAAI,EAAE;gBAC3B,IAAI,CAAC,WAAW;oBACd,MAAM,MAAM,CAAC;wBACX,IAAI,EAAE,QAAQ;wBACd,QAAQ,EAAE,IAAI;wBACd,MAAM,EAAE,+CAA+C;qBACxD,CAAC,CAAC;YACP,CAAC,CAAC,CAAC;YACH,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,SAAS,EAAE;gBAC5B,KAAK;gBACL,MAAM;gBACN,IAAI;gBACJ,MAAM,EAAE,CAAC,MAAM,EAAE,EAAE,CACjB,MAAM,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;aACxD,CAAC,CAAC;YACH,IAAI,CAAC;gBACH,IAAI,KAAK,CAAC,GAAG;oBACX,MAAM,uBAAuB,CAAC;wBAC5B,SAAS,EAAE,OAAO,CAAC,IAAI,CAAC,SAAS;wBACjC,GAAG;wBACH,EAAE,EAAE,MAAM;wBACV,OAAO,EAAE,OAAO,CAAC,IAAI,CAAC,OAAO;wBAC7B,MAAM,EAAE,SAAS;wBACjB,MAAM,EAAE,iBAAiB;wBACzB,SAAS,EAAE,OAAO,CAAC,SAAS;wBAC5B,UAAU,EAAE,OAAO,CAAC,UAAU;wBAC9B,QAAQ,EAAE,OAAO,CAAC,IAAI,CAAC,QAAQ;wBAC/B,OAAO,EAAE;4BACP,GAAG,EAAE,KAAK,CAAC,GAAG;4BACd,eAAe,EAAE,mBAAmB,CAAC,KAAK,CAAC,GAAG,CAAC;yBAChD;wBACD,cAAc,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,OAAO,YAAY,OAAO,CAAC,SAAS,EAAE;qBACvE,CAAC,CAAC;gBACL,IAAI,OAAO,CAAC,SAAS,EAAE,CAAC;oBACtB,IAAI,KAAgD,CAAC;oBACrD,IAAI,CAAC;wBACH,MAAM,OAAO,CAAC,IAAI,CAAC;4BACjB,OAAO,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC;4BACvC,IAAI,OAAO,CAAQ,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE;gCAC/B,KAAK,GAAG,UAAU,CAChB,GAAG,EAAE,CACH,MAAM,CAAC,IAAI,KAAK,CAAC,qCAAqC,CAAC,CAAC,EAC1D,IAAI,CAAC,GAAG,CACN,CAAC,EACD,IAAI,CAAC,GAAG,CACN,MAAM,EACN,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,IAAI,CAAC,GAAG,EAAE,CAC/C,CACF,CACF,CAAC;4BACJ,CAAC,CAAC;yBACH,CAAC,CAAC;oBACL,CAAC;4BAAS,CAAC;wBACT,IAAI,KAAK;4BAAE,YAAY,CAAC,KAAK,CAAC,CAAC;oBACjC,CAAC;gBACH,CAAC;gBACD,IAAI,MAAM;oBAAE,OAAO;gBACnB,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAC1B,QAAQ,EACR,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,UAAU,CAAC,SAAS,CAAC,EAC1C,UAAU,EACV,OAAO,CAAC,SAAS,CAClB,CAAC;gBACF,MAAM,eAAe,GAAG;oBACtB,IAAI,EAAE,oBAAoB;oBAC1B,IAAI,EAAE,OAAO,CAAC,UAAU,CAAC,SAAS;oBAClC,OAAO,EAAE,OAAO,CAAC,MAAM,CAAC,OAAO;oBAC/B,QAAQ,EAAE;wBACR,OAAO,EAAE,OAAO,CAAC,IAAI,CAAC,MAAM;wBAC5B,QAAQ,EAAE,OAAO,CAAC,IAAI,CAAC,OAAO;wBAC9B,aAAa,EAAE,OAAO,CAAC,UAAU,CAAC,YAAY;wBAC9C,UAAU,EAAE,OAAO,CAAC,SAAS;wBAC7B,WAAW,EAAE,OAAO,CAAC,UAAU;wBAC/B,SAAS,EAAE,OAAO,CAAC,IAAI,CAAC,QAAQ;wBAChC,QAAQ,EAAE,OAAO,CAAC,IAAI,CAAC,OAAO;wBAC9B,mBAAmB,EAAE,OAAO,CAAC,IAAI,CAAC,iBAAiB;wBACnD,cAAc,EAAE,OAAO,CAAC,IAAI,CAAC,aAAa;wBAC1C,aAAa,EAAE,OAAO,CAAC,UAAU,CAAC,YAAY;qBAC/C;oBACD,UAAU,EAAE,OAAO,CAAC,UAAU,CAAC,UAAU;oBACzC,IAAI,EAAE,OAAO,CAAC,UAAU,CAAC,IAAI;oBAC7B,UAAU,EAAE,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,OAAO,CAAC,UAAU,CAAC,SAAS,CAAC;oBAC7D,UAAU,EAAE,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,YAAY,CAAC;oBAC/C,YAAY,EAAE,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,YAAY,CAAC;oBACjD,WAAW,EAAE,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,aAAa,CAAC;iBAClD,CAAC;gBACF,MAAM,KAAK,GACT,OAAO,CAAC,MAAM,CAAC,aAAa,KAAK,CAAC;oBAChC,CAAC,CAAC;wBACE,SAAS;wBACT,OAAO,CAAC,UAAU,CAAC,SAAS;wBAC5B,MAAM,OAAO,CAAC,UAAU,CAAC,KAAK,EAAE;wBAChC,GAAG,CAAC,OAAO,CAAC,UAAU,CAAC,IAAI;4BACzB,CAAC,CAAC,CAAC,SAAS,OAAO,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC;4BACtC,CAAC,CAAC,EAAE,CAAC;wBACP,SAAS;wBACT,GAAG,OAAO,CAAC,UAAU,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,KAAK,IAAI,EAAE,CAAC;wBAC3D,oBAAoB;wBACpB,IAAI,CAAC,SAAS,CAAC,eAAe,CAAC,QAAQ,CAAC;wBACxC,WAAW;wBACX,GACE;4BACE,YAAY;4BACZ,YAAY;4BACZ,cAAc;4BACd,aAAa;yBAEhB,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,GAAG,KAAK,eAAe,CAAC,GAAG,CAAC,EAAE,CAAC;wBACjD,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC,OAAO;4BACxB,CAAC,CAAC,CAAC,eAAe,EAAE,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC;4BAC3C,CAAC,CAAC,EAAE,CAAC;qBACR,CAAC,IAAI,CAAC,MAAM,CAAC;oBAChB,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,eAAe,CAAC,CAAC;gBACtC,IAAI,OAAO,CAAC,cAAc;oBACxB,MAAM,OAAO,CAAC,cAAc,CAAC,KAAK,EAAE,GAAG,EAAE,KAAK,CAAC,CAAC;;oBAC7C,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,iBAAiB,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,CAAC;YAChE,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,MAAM,MAAM,CAAC;oBACX,IAAI,EAAE,QAAQ;oBACd,QAAQ,EAAE,IAAI;oBACd,MAAM,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC;iBAC/D,CAAC,CAAC;YACL,CAAC;YACD,OAAO,SAAS,CAAC;QACnB,CAAC;QACD,KAAK,CAAC,IAAI,CAAC,OAAO;YAChB,MAAM,OAAO,GAAG,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;YAC9C,IAAI,CAAC,OAAO;gBACV,OAAO;oBACL,IAAI,EAAE,gBAAgB;oBACtB,MAAM,EAAE,mCAAmC;iBAC5C,CAAC;YACJ,IAAI,KAAgD,CAAC;YACrD,IAAI,CAAC;gBACH,OAAO,MAAM,OAAO,CAAC,IAAI,CAAC;oBACxB,OAAO,CAAC,MAAM;oBACd,IAAI,OAAO,CAAoB,CAAC,OAAO,EAAE,EAAE;wBACzC,KAAK,GAAG,UAAU,CAChB,GAAG,EAAE,CACH,OAAO,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,EAAE,wBAAwB,EAAE,CAAC,EAChE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC,CAC5D,CAAC;oBACJ,CAAC,CAAC;iBACH,CAAC,CAAC;YACL,CAAC;oBAAS,CAAC;gBACT,IAAI,KAAK;oBAAE,YAAY,CAAC,KAAK,CAAC,CAAC;YACjC,CAAC;QACH,CAAC;QACD,QAAQ,CAAC,OAAO;YACd,OAAO,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAC/B,CAAC;QACD,KAAK,CAAC,MAAM,CAAC,OAAO;YAClB,MAAM,OAAO,GAAG,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;YAC9C,IAAI,CAAC,OAAO;gBACV,OAAO;oBACL,IAAI,EAAE,gBAAgB;oBACtB,MAAM,EAAE,wDAAwD;iBACjE,CAAC;YACJ,OAAO,CAAC,MAAM,OAAO,CAAC,IAAI,EAAE,CAAC;gBAC3B,CAAC,CAAC;oBACE,IAAI,EAAE,WAAW;oBACjB,QAAQ,EAAE,IAAI;oBACd,MAAM,EAAE,iCAAiC;iBAC1C;gBACH,CAAC,CAAC,EAAE,IAAI,EAAE,gBAAgB,EAAE,MAAM,EAAE,+BAA+B,EAAE,CAAC;QAC1E,CAAC;KACF,CAAC;IACF,OAAO,OAAO,CAAC;AACjB,CAAC"}
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: {"reason": route_reason, "evidence_refs": route_evidence, "task_route_revision": "1"}
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] = {"reason": reason, "evidence_refs": evidence, "task_route_revision": state["task_route_revision"]}
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: {**skip, "task_route_revision": state["task_route_revision"]}
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["skip_records"][phase_id] = {"reason": reason, "evidence_refs": evidence, "task_route_revision": state["task_route_revision"]}
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="Contract change invalidates authorization; execution rework retains a verified unchanged contract")
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":"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"}
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
- /** Reject all symlink components, including links that happen to stay in-project. */
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
- if (stat.isSymbolicLink())
84
- throw new Error(`Symlink in asset path: ${relative}`);
85
- if (cursor !== path.join(root, relative) && !stat.isDirectory())
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
- return cursor;
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(location).isFile())
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({