@pennixrv/trellis 0.6.28 → 0.6.30
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/channel/agent-loader.d.ts +3 -1
- package/dist/commands/channel/agent-loader.d.ts.map +1 -1
- package/dist/commands/channel/agent-loader.js +32 -1
- package/dist/commands/channel/agent-loader.js.map +1 -1
- package/dist/commands/channel/guard.d.ts +21 -2
- package/dist/commands/channel/guard.d.ts.map +1 -1
- package/dist/commands/channel/guard.js +105 -4
- package/dist/commands/channel/guard.js.map +1 -1
- package/dist/commands/channel/index.d.ts.map +1 -1
- package/dist/commands/channel/index.js +22 -5
- package/dist/commands/channel/index.js.map +1 -1
- package/dist/commands/channel/run.d.ts.map +1 -1
- package/dist/commands/channel/run.js +15 -9
- package/dist/commands/channel/run.js.map +1 -1
- package/dist/commands/channel/spawn.d.ts +4 -0
- package/dist/commands/channel/spawn.d.ts.map +1 -1
- package/dist/commands/channel/spawn.js +59 -7
- package/dist/commands/channel/spawn.js.map +1 -1
- package/dist/commands/channel/workers.d.ts +8 -0
- package/dist/commands/channel/workers.d.ts.map +1 -0
- package/dist/commands/channel/workers.js +30 -0
- package/dist/commands/channel/workers.js.map +1 -0
- package/dist/migrations/manifests/0.6.28.json +9 -0
- package/dist/migrations/manifests/0.6.29.json +9 -0
- package/dist/templates/common/bundled-skills/trellis-channel/references/command-reference.md +23 -4
- package/dist/templates/common/bundled-skills/trellis-channel/references/subnode-work.md +37 -8
- package/dist/templates/common/bundled-skills/trellis-channel/references/workers.md +25 -6
- package/dist/templates/common/bundled-skills/trellis-meta/SKILL.md +2 -2
- package/dist/templates/common/bundled-skills/trellis-meta/references/local-architecture/multi-agent-channel.md +2 -1
- package/dist/templates/trellis/agents/subnode.env +4 -0
- package/dist/templates/trellis/agents/subnode.md +5 -0
- package/dist/templates/trellis/config.yaml +9 -1
- package/dist/templates/trellis/index.d.ts +4 -3
- package/dist/templates/trellis/index.d.ts.map +1 -1
- package/dist/templates/trellis/index.js +5 -3
- package/dist/templates/trellis/index.js.map +1 -1
- package/dist/templates/trellis/scripts/common/task_store.py +6 -4
- package/dist/templates/trellis/scripts/subnode_artifact.py +100 -1
- package/package.json +2 -2
|
@@ -10,8 +10,8 @@
|
|
|
10
10
|
* │ ├── __init__.py
|
|
11
11
|
* │ ├── common/ # Shared utilities (Python)
|
|
12
12
|
* │ └── *.py # Main scripts (Python)
|
|
13
|
-
* ├── agents/ # Channel runtime agent definitions
|
|
14
|
-
* │ └── *.md
|
|
13
|
+
* ├── agents/ # Channel runtime agent definitions and assets
|
|
14
|
+
* │ └── *.md / *.env # Loaded by the channel runtime
|
|
15
15
|
* ├── scripts-shell-archive/ # Archived shell scripts (for reference)
|
|
16
16
|
* ├── workflow.md # Workflow guide
|
|
17
17
|
* ├── config.yaml # Trellis configuration
|
|
@@ -56,12 +56,13 @@ export declare const gitattributesTemplate: string;
|
|
|
56
56
|
export declare const implementAgentTemplate: string;
|
|
57
57
|
export declare const checkAgentTemplate: string;
|
|
58
58
|
export declare const subnodeAgentTemplate: string;
|
|
59
|
+
export declare const subnodeEnvTemplate: string;
|
|
59
60
|
/**
|
|
60
61
|
* Get all script templates as a map of relative path to content
|
|
61
62
|
*/
|
|
62
63
|
export declare function getAllScripts(): Map<string, string>;
|
|
63
64
|
/**
|
|
64
|
-
* Get all channel runtime agent
|
|
65
|
+
* Get all channel runtime agent assets as a map of relative path
|
|
65
66
|
* (under `.trellis/agents/`) to content.
|
|
66
67
|
*
|
|
67
68
|
* Consumed by `trellis init` (to dispatch on first install) and by
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/templates/trellis/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAcH,eAAO,MAAM,WAAW,QAAsC,CAAC;AAG/D,eAAO,MAAM,UAAU,QAA6C,CAAC;AACrE,eAAO,MAAM,WAAW,QAA0C,CAAC;AACnE,eAAO,MAAM,eAAe,QAA8C,CAAC;AAC3E,eAAO,MAAM,gBAAgB,QAAgD,CAAC;AAC9E,eAAO,MAAM,eAAe,QAA+C,CAAC;AAC5E,eAAO,MAAM,eAAe,QAA+C,CAAC;AAC5E,eAAO,MAAM,gBAAgB,QAAgD,CAAC;AAC9E,eAAO,MAAM,gBAAgB,QAAgD,CAAC;AAC9E,eAAO,MAAM,YAAY,QAA2C,CAAC;AACrE,eAAO,MAAM,QAAQ,QAAuC,CAAC;AAC7D,eAAO,MAAM,SAAS,QAAwC,CAAC;AAC/D,eAAO,MAAM,SAAS,QAAwC,CAAC;AAC/D,eAAO,MAAM,WAAW,QAA0C,CAAC;AACnE,eAAO,MAAM,WAAW,QAA0C,CAAC;AACnE,eAAO,MAAM,iBAAiB,QAAiD,CAAC;AAChF,eAAO,MAAM,eAAe,QAA+C,CAAC;AAC5E,eAAO,MAAM,oBAAoB,QAEhC,CAAC;AACF,eAAO,MAAM,wBAAwB,QAEpC,CAAC;AACF,eAAO,MAAM,qBAAqB,QAEjC,CAAC;AACF,eAAO,MAAM,qBAAqB,QAEjC,CAAC;AACF,eAAO,MAAM,mBAAmB,QAE/B,CAAC;AACF,eAAO,MAAM,mBAAmB,QAE/B,CAAC;AACF,eAAO,MAAM,gBAAgB,QAAgD,CAAC;AAG9E,eAAO,MAAM,kBAAkB,QAA2C,CAAC;AAC3E,eAAO,MAAM,mBAAmB,QAA4C,CAAC;AAC7E,eAAO,MAAM,UAAU,QAAkC,CAAC;AAC1D,eAAO,MAAM,gBAAgB,QAAyC,CAAC;AACvE,eAAO,MAAM,gBAAgB,QAAyC,CAAC;AACvE,eAAO,MAAM,qBAAqB,QAEjC,CAAC;AACF,eAAO,MAAM,mBAAmB,QAA4C,CAAC;AAG7E,eAAO,MAAM,kBAAkB,QAA8B,CAAC;AAC9D,eAAO,MAAM,kBAAkB,QAA8B,CAAC;AAC9D,eAAO,MAAM,iBAAiB,QAAgC,CAAC;AAC/D,eAAO,MAAM,qBAAqB,QAAoC,CAAC;AAMvE,eAAO,MAAM,sBAAsB,QAAsC,CAAC;AAC1E,eAAO,MAAM,kBAAkB,QAAkC,CAAC;AAClE,eAAO,MAAM,oBAAoB,QAAoC,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/templates/trellis/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAcH,eAAO,MAAM,WAAW,QAAsC,CAAC;AAG/D,eAAO,MAAM,UAAU,QAA6C,CAAC;AACrE,eAAO,MAAM,WAAW,QAA0C,CAAC;AACnE,eAAO,MAAM,eAAe,QAA8C,CAAC;AAC3E,eAAO,MAAM,gBAAgB,QAAgD,CAAC;AAC9E,eAAO,MAAM,eAAe,QAA+C,CAAC;AAC5E,eAAO,MAAM,eAAe,QAA+C,CAAC;AAC5E,eAAO,MAAM,gBAAgB,QAAgD,CAAC;AAC9E,eAAO,MAAM,gBAAgB,QAAgD,CAAC;AAC9E,eAAO,MAAM,YAAY,QAA2C,CAAC;AACrE,eAAO,MAAM,QAAQ,QAAuC,CAAC;AAC7D,eAAO,MAAM,SAAS,QAAwC,CAAC;AAC/D,eAAO,MAAM,SAAS,QAAwC,CAAC;AAC/D,eAAO,MAAM,WAAW,QAA0C,CAAC;AACnE,eAAO,MAAM,WAAW,QAA0C,CAAC;AACnE,eAAO,MAAM,iBAAiB,QAAiD,CAAC;AAChF,eAAO,MAAM,eAAe,QAA+C,CAAC;AAC5E,eAAO,MAAM,oBAAoB,QAEhC,CAAC;AACF,eAAO,MAAM,wBAAwB,QAEpC,CAAC;AACF,eAAO,MAAM,qBAAqB,QAEjC,CAAC;AACF,eAAO,MAAM,qBAAqB,QAEjC,CAAC;AACF,eAAO,MAAM,mBAAmB,QAE/B,CAAC;AACF,eAAO,MAAM,mBAAmB,QAE/B,CAAC;AACF,eAAO,MAAM,gBAAgB,QAAgD,CAAC;AAG9E,eAAO,MAAM,kBAAkB,QAA2C,CAAC;AAC3E,eAAO,MAAM,mBAAmB,QAA4C,CAAC;AAC7E,eAAO,MAAM,UAAU,QAAkC,CAAC;AAC1D,eAAO,MAAM,gBAAgB,QAAyC,CAAC;AACvE,eAAO,MAAM,gBAAgB,QAAyC,CAAC;AACvE,eAAO,MAAM,qBAAqB,QAEjC,CAAC;AACF,eAAO,MAAM,mBAAmB,QAA4C,CAAC;AAG7E,eAAO,MAAM,kBAAkB,QAA8B,CAAC;AAC9D,eAAO,MAAM,kBAAkB,QAA8B,CAAC;AAC9D,eAAO,MAAM,iBAAiB,QAAgC,CAAC;AAC/D,eAAO,MAAM,qBAAqB,QAAoC,CAAC;AAMvE,eAAO,MAAM,sBAAsB,QAAsC,CAAC;AAC1E,eAAO,MAAM,kBAAkB,QAAkC,CAAC;AAClE,eAAO,MAAM,oBAAoB,QAAoC,CAAC;AACtE,eAAO,MAAM,kBAAkB,QAAqC,CAAC;AAErE;;GAEG;AACH,wBAAgB,aAAa,IAAI,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAyCnD;AAED;;;;;;;GAOG;AACH,wBAAgB,YAAY,IAAI,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAOlD"}
|
|
@@ -10,8 +10,8 @@
|
|
|
10
10
|
* │ ├── __init__.py
|
|
11
11
|
* │ ├── common/ # Shared utilities (Python)
|
|
12
12
|
* │ └── *.py # Main scripts (Python)
|
|
13
|
-
* ├── agents/ # Channel runtime agent definitions
|
|
14
|
-
* │ └── *.md
|
|
13
|
+
* ├── agents/ # Channel runtime agent definitions and assets
|
|
14
|
+
* │ └── *.md / *.env # Loaded by the channel runtime
|
|
15
15
|
* ├── scripts-shell-archive/ # Archived shell scripts (for reference)
|
|
16
16
|
* ├── workflow.md # Workflow guide
|
|
17
17
|
* ├── config.yaml # Trellis configuration
|
|
@@ -72,6 +72,7 @@ export const gitattributesTemplate = readTemplate("gitattributes.txt");
|
|
|
72
72
|
export const implementAgentTemplate = readTemplate("agents/implement.md");
|
|
73
73
|
export const checkAgentTemplate = readTemplate("agents/check.md");
|
|
74
74
|
export const subnodeAgentTemplate = readTemplate("agents/subnode.md");
|
|
75
|
+
export const subnodeEnvTemplate = readTemplate("agents/subnode.env");
|
|
75
76
|
/**
|
|
76
77
|
* Get all script templates as a map of relative path to content
|
|
77
78
|
*/
|
|
@@ -114,7 +115,7 @@ export function getAllScripts() {
|
|
|
114
115
|
return scripts;
|
|
115
116
|
}
|
|
116
117
|
/**
|
|
117
|
-
* Get all channel runtime agent
|
|
118
|
+
* Get all channel runtime agent assets as a map of relative path
|
|
118
119
|
* (under `.trellis/agents/`) to content.
|
|
119
120
|
*
|
|
120
121
|
* Consumed by `trellis init` (to dispatch on first install) and by
|
|
@@ -126,6 +127,7 @@ export function getAllAgents() {
|
|
|
126
127
|
agents.set("implement.md", implementAgentTemplate);
|
|
127
128
|
agents.set("check.md", checkAgentTemplate);
|
|
128
129
|
agents.set("subnode.md", subnodeAgentTemplate);
|
|
130
|
+
agents.set("subnode.env", subnodeEnvTemplate);
|
|
129
131
|
return agents;
|
|
130
132
|
}
|
|
131
133
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/templates/trellis/index.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/templates/trellis/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -1482,8 +1482,9 @@ def _auto_commit_archive(
|
|
|
1482
1482
|
)
|
|
1483
1483
|
return not source_was_tracked
|
|
1484
1484
|
|
|
1485
|
+
commit_paths = [*paths, *([source_rel] if source_was_tracked else [])]
|
|
1485
1486
|
rc, _, _ = run_git(
|
|
1486
|
-
["diff", "--cached", "--quiet", "--", *
|
|
1487
|
+
["diff", "--cached", "--quiet", "--", *commit_paths],
|
|
1487
1488
|
cwd=repo_root,
|
|
1488
1489
|
)
|
|
1489
1490
|
if rc == 0:
|
|
@@ -1493,10 +1494,11 @@ def _auto_commit_archive(
|
|
|
1493
1494
|
commit_msg = f"chore(task): archive {task_name}"
|
|
1494
1495
|
# Commit with an explicit pathspec: a bare `git commit` would sweep any
|
|
1495
1496
|
# unrelated entries the developer had staged before archiving into the
|
|
1496
|
-
# chore commit (#579). `source_rel`
|
|
1497
|
-
#
|
|
1497
|
+
# chore commit (#579). Include `source_rel` only when it was tracked, so
|
|
1498
|
+
# the source-side deletions land in that commit without passing an absent,
|
|
1499
|
+
# never-tracked path to git.
|
|
1498
1500
|
rc, _, err = run_git_retry_index_lock(
|
|
1499
|
-
["commit", "-m", commit_msg, "--", *
|
|
1501
|
+
["commit", "-m", commit_msg, "--", *commit_paths], cwd=repo_root
|
|
1500
1502
|
)
|
|
1501
1503
|
if rc == 0:
|
|
1502
1504
|
print(f"[OK] Auto-committed: {commit_msg}", file=sys.stderr)
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
|
|
4
4
|
The coordinator creates an immutable brief before dispatching a subnode. The
|
|
5
5
|
subnode appends its worklog and writes its own final report. This helper never
|
|
6
|
-
dispatches workers,
|
|
6
|
+
dispatches workers, makes the acceptance judgment, or mutates task state.
|
|
7
7
|
"""
|
|
8
8
|
|
|
9
9
|
from __future__ import annotations
|
|
@@ -12,6 +12,7 @@ import argparse
|
|
|
12
12
|
import json
|
|
13
13
|
import re
|
|
14
14
|
import sys
|
|
15
|
+
from datetime import datetime, timezone
|
|
15
16
|
from pathlib import Path
|
|
16
17
|
from typing import Any, NoReturn
|
|
17
18
|
|
|
@@ -30,6 +31,13 @@ SECRET_PATTERNS = (
|
|
|
30
31
|
re.compile(r"\bsk-[A-Za-z0-9]{20,}\b"),
|
|
31
32
|
re.compile(r"\bgh[pousr]_[A-Za-z0-9]{20,}\b"),
|
|
32
33
|
)
|
|
34
|
+
TERMINAL_LIFECYCLES = {"done", "error", "killed", "crashed"}
|
|
35
|
+
DISPOSITION_OUTCOMES = {"accepted", "rejected", "deferred"}
|
|
36
|
+
REQUIRED_DISPOSITION_CHECKS = {
|
|
37
|
+
"report_validation",
|
|
38
|
+
"source_recheck",
|
|
39
|
+
"protected_target_check",
|
|
40
|
+
}
|
|
33
41
|
|
|
34
42
|
|
|
35
43
|
class ArtifactError(Exception):
|
|
@@ -232,6 +240,8 @@ def _validate_brief_data(
|
|
|
232
240
|
_require_text_list(brief.get("stop_conditions"), "brief.stop_conditions")
|
|
233
241
|
_require_text(brief.get("deadline"), "brief.deadline", max_len=128)
|
|
234
242
|
_validate_channel_ref(brief.get("channel_ref"))
|
|
243
|
+
if brief["channel_ref"]["worker_handle"] != subnode_id:
|
|
244
|
+
_fail("channel_ref.worker_handle must match brief.subnode_id")
|
|
235
245
|
_validate_retry_target(
|
|
236
246
|
brief.get("retry_of"),
|
|
237
247
|
task_dir,
|
|
@@ -362,6 +372,41 @@ def _validate_report_file(
|
|
|
362
372
|
return report, evidence, brief, node_dir
|
|
363
373
|
|
|
364
374
|
|
|
375
|
+
def _validate_disposition_data(
|
|
376
|
+
disposition: dict[str, Any],
|
|
377
|
+
report: dict[str, Any],
|
|
378
|
+
brief: dict[str, Any],
|
|
379
|
+
) -> None:
|
|
380
|
+
if disposition.get("schema_version") != SCHEMA_VERSION:
|
|
381
|
+
_fail(f"disposition.schema_version must be {SCHEMA_VERSION}")
|
|
382
|
+
for field in ("task_id", "work_id", "subnode_id", "role_id"):
|
|
383
|
+
if disposition.get(field) != brief.get(field):
|
|
384
|
+
_fail(f"disposition.{field} does not match brief.{field}")
|
|
385
|
+
if disposition.get("report_path") != brief.get("report_path"):
|
|
386
|
+
_fail("disposition.report_path does not match brief.report_path")
|
|
387
|
+
if disposition.get("report_status") != report.get("status"):
|
|
388
|
+
_fail("disposition.report_status does not match report.status")
|
|
389
|
+
if disposition.get("outcome") not in DISPOSITION_OUTCOMES:
|
|
390
|
+
_fail("disposition.outcome must be accepted, rejected, or deferred")
|
|
391
|
+
terminal = disposition.get("terminal")
|
|
392
|
+
if not isinstance(terminal, dict):
|
|
393
|
+
_fail("disposition.terminal must be an object")
|
|
394
|
+
if terminal.get("lifecycle") not in TERMINAL_LIFECYCLES:
|
|
395
|
+
_fail("disposition.terminal.lifecycle must be done, error, killed, or crashed")
|
|
396
|
+
sequence = terminal.get("seq")
|
|
397
|
+
if isinstance(sequence, bool) or not isinstance(sequence, int) or sequence < 1:
|
|
398
|
+
_fail("disposition.terminal.seq must be a positive integer")
|
|
399
|
+
_require_text(terminal.get("observed_at"), "disposition.terminal.observed_at", max_len=128)
|
|
400
|
+
checks = _require_text_list(disposition.get("checks"), "disposition.checks")
|
|
401
|
+
if len(checks) != len(set(checks)):
|
|
402
|
+
_fail("disposition.checks must not contain duplicates")
|
|
403
|
+
missing = REQUIRED_DISPOSITION_CHECKS.difference(checks)
|
|
404
|
+
if missing:
|
|
405
|
+
_fail("disposition.checks is missing: " + ", ".join(sorted(missing)))
|
|
406
|
+
_require_text(disposition.get("reason"), "disposition.reason")
|
|
407
|
+
_require_text(disposition.get("decided_at"), "disposition.decided_at", max_len=128)
|
|
408
|
+
|
|
409
|
+
|
|
365
410
|
def _init(args: argparse.Namespace) -> None:
|
|
366
411
|
repo_root = get_repo_root()
|
|
367
412
|
task_dir = resolve_task_dir(args.task, repo_root)
|
|
@@ -425,6 +470,42 @@ def _validate(args: argparse.Namespace) -> None:
|
|
|
425
470
|
print(f"Validated pending-review report: {report['subnode_id']}")
|
|
426
471
|
|
|
427
472
|
|
|
473
|
+
def _disposition(args: argparse.Namespace) -> None:
|
|
474
|
+
repo_root = get_repo_root()
|
|
475
|
+
report, _evidence, brief, node_dir = _validate_report_file(args.report, repo_root)
|
|
476
|
+
disposition_path = node_dir / "disposition.json"
|
|
477
|
+
if disposition_path.exists() or disposition_path.is_symlink():
|
|
478
|
+
_fail(f"disposition already exists and cannot be replaced: {disposition_path}")
|
|
479
|
+
disposition = {
|
|
480
|
+
"schema_version": SCHEMA_VERSION,
|
|
481
|
+
"task_id": brief["task_id"],
|
|
482
|
+
"work_id": brief["work_id"],
|
|
483
|
+
"subnode_id": brief["subnode_id"],
|
|
484
|
+
"role_id": brief["role_id"],
|
|
485
|
+
"report_path": brief["report_path"],
|
|
486
|
+
"report_status": report["status"],
|
|
487
|
+
"outcome": args.outcome,
|
|
488
|
+
"terminal": {
|
|
489
|
+
"lifecycle": args.terminal_lifecycle,
|
|
490
|
+
"seq": args.terminal_seq,
|
|
491
|
+
"observed_at": args.terminal_at,
|
|
492
|
+
},
|
|
493
|
+
"checks": args.check,
|
|
494
|
+
"reason": args.reason,
|
|
495
|
+
"decided_at": datetime.now(timezone.utc).isoformat(),
|
|
496
|
+
}
|
|
497
|
+
_validate_disposition_data(disposition, report, brief)
|
|
498
|
+
try:
|
|
499
|
+
with disposition_path.open("x", encoding="utf-8") as stream:
|
|
500
|
+
json.dump(disposition, stream, indent=2, ensure_ascii=False)
|
|
501
|
+
stream.write("\n")
|
|
502
|
+
except FileExistsError:
|
|
503
|
+
_fail(f"disposition already exists and cannot be replaced: {disposition_path}")
|
|
504
|
+
except OSError as exc:
|
|
505
|
+
_fail(f"could not write disposition {disposition_path}: {exc}")
|
|
506
|
+
print(f"Recorded coordinator disposition: {brief['subnode_id']} -> {args.outcome}")
|
|
507
|
+
|
|
508
|
+
|
|
428
509
|
def _validate_counter(args: argparse.Namespace) -> None:
|
|
429
510
|
repo_root = get_repo_root()
|
|
430
511
|
primary_dir = Path(args.primary)
|
|
@@ -474,6 +555,24 @@ def _parser() -> argparse.ArgumentParser:
|
|
|
474
555
|
validate.add_argument("--report", required=True)
|
|
475
556
|
validate.set_defaults(handler=_validate)
|
|
476
557
|
|
|
558
|
+
disposition = subparsers.add_parser(
|
|
559
|
+
"disposition",
|
|
560
|
+
help="record one coordinator disposition for a validated report",
|
|
561
|
+
)
|
|
562
|
+
disposition.add_argument("--report", required=True)
|
|
563
|
+
disposition.add_argument("--outcome", choices=sorted(DISPOSITION_OUTCOMES), required=True)
|
|
564
|
+
disposition.add_argument("--terminal-lifecycle", choices=sorted(TERMINAL_LIFECYCLES), required=True)
|
|
565
|
+
disposition.add_argument("--terminal-seq", type=int, required=True)
|
|
566
|
+
disposition.add_argument("--terminal-at", required=True)
|
|
567
|
+
disposition.add_argument(
|
|
568
|
+
"--check",
|
|
569
|
+
action="append",
|
|
570
|
+
required=True,
|
|
571
|
+
help="independent check name (repeat; requires report_validation, source_recheck, and protected_target_check)",
|
|
572
|
+
)
|
|
573
|
+
disposition.add_argument("--reason", required=True)
|
|
574
|
+
disposition.set_defaults(handler=_disposition)
|
|
575
|
+
|
|
477
576
|
counter = subparsers.add_parser(
|
|
478
577
|
"validate-counter",
|
|
479
578
|
help="validate two completed, independent subnode directories",
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@pennixrv/trellis",
|
|
3
|
-
"version": "0.6.
|
|
3
|
+
"version": "0.6.30",
|
|
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.
|
|
37
|
+
"@pennixrv/trellis-core": "0.6.30"
|
|
38
38
|
},
|
|
39
39
|
"devDependencies": {
|
|
40
40
|
"@eslint/js": "^9.18.0",
|