@pennixrv/trellis 0.6.22 → 0.6.23

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.
@@ -16,11 +16,11 @@ Before spawning, the coordinator must use an active task (`planning` or
16
16
  `in_progress`), define one stable `work_id` and
17
17
  `subnode_id`, then prepare a brief-draft JSON with the question, independence
18
18
  reason, scope, protected targets, lens, evidence method, source snapshot,
19
- dependencies, stop conditions, deadline, `channel_ref`, `retry_of` (null unless
20
- this is an explicit manual retry), and `counter_of` (null unless this is
21
- intentional counterwork). A retry names an existing, different subnode in the
22
- same task and `work_id`; counterwork may be initialized independently. The
23
- helper supplies the immutable task identity and report path.
19
+ dependencies, stop conditions, deadline, and `channel_ref`. Set `retry_of`
20
+ only for an explicit manual retry and `counter_of` only for intentional
21
+ counterwork. A retry names an existing, different subnode in the same task and
22
+ `work_id`; counterwork may be initialized independently. The helper supplies
23
+ the immutable task identity and report path.
24
24
 
25
25
  ```bash
26
26
  TASK=.trellis/tasks/09-07-example
@@ -74,7 +74,8 @@ complete report is:
74
74
  ```
75
75
 
76
76
  For `blocked`, `incomplete`, or `error`, include the same base fields plus a
77
- non-empty `completed_scope` list and a non-empty `blocker` string. Never use
77
+ `completed_scope` list (empty when no assigned scope started) and a non-empty
78
+ `blocker` string. Never use
78
79
  `accepted`, `rejected`, or `deferred` as a report status.
79
80
 
80
81
  ## Dispatch And Wait
@@ -232,17 +232,13 @@ def _validate_brief_data(
232
232
  _require_text_list(brief.get("stop_conditions"), "brief.stop_conditions")
233
233
  _require_text(brief.get("deadline"), "brief.deadline", max_len=128)
234
234
  _validate_channel_ref(brief.get("channel_ref"))
235
- if "retry_of" not in brief:
236
- _fail("brief.retry_of must be present; use null when this is not a retry")
237
- if "counter_of" not in brief:
238
- _fail("brief.counter_of must be present; use null when this is not counterwork")
239
235
  _validate_retry_target(
240
- brief["retry_of"],
236
+ brief.get("retry_of"),
241
237
  task_dir,
242
238
  work_id,
243
239
  subnode_id,
244
240
  )
245
- counter_of = brief["counter_of"]
241
+ counter_of = brief.get("counter_of")
246
242
  if counter_of is not None:
247
243
  counter_id = _require_id(counter_of, "brief.counter_of")
248
244
  if counter_id == subnode_id:
@@ -339,7 +335,11 @@ def _validate_report_data(
339
335
  if status == "complete" and not evidence:
340
336
  _fail("a complete report requires at least one evidence item")
341
337
  if status != "complete":
342
- _require_text_list(report.get("completed_scope"), "report.completed_scope")
338
+ _require_text_list(
339
+ report.get("completed_scope"),
340
+ "report.completed_scope",
341
+ allow_empty=True,
342
+ )
343
343
  _require_text(report.get("blocker"), "report.blocker")
344
344
  return evidence
345
345
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@pennixrv/trellis",
3
- "version": "0.6.22",
3
+ "version": "0.6.23",
4
4
  "description": "AI capabilities grow like ivy — Trellis provides the structure to guide them along a disciplined path",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
@@ -34,7 +34,7 @@
34
34
  "inquirer": "^9.3.7",
35
35
  "undici": "^6.21.0",
36
36
  "zod": "^4.4.2",
37
- "@pennixrv/trellis-core": "0.6.22"
37
+ "@pennixrv/trellis-core": "0.6.23"
38
38
  },
39
39
  "devDependencies": {
40
40
  "@eslint/js": "^9.18.0",