@pennixrv/trellis 0.7.0-beta.52 → 0.7.0-beta.54
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -1
- package/dist/commands/init.js +2 -2
- package/dist/commands/update.d.ts.map +1 -1
- package/dist/commands/update.js +3 -2
- package/dist/commands/update.js.map +1 -1
- package/dist/configurators/shared.js +1 -1
- package/dist/configurators/shared.js.map +1 -1
- package/dist/migrations/manifests/0.7.0-beta.53.json +27 -0
- package/dist/migrations/manifests/0.7.0-beta.54.json +8 -0
- package/dist/templates/codex/hooks/session-start.py +9 -18
- package/dist/templates/common/bundled-skills/trellis-meta/references/customize-local/change-workflow.md +1 -1
- package/dist/templates/common/bundled-skills/trellis-meta/references/local-architecture/workflow.md +1 -1
- package/dist/templates/common/commands/continue.md +1 -1
- package/dist/templates/common/commands/start.md +2 -3
- package/dist/templates/common/skills/idea-to-closed-plan.md +105 -0
- package/dist/templates/copilot/hooks/session-start.py +9 -18
- package/dist/templates/copilot/prompts/start.prompt.md +2 -3
- package/dist/templates/opencode/lib/session-utils.js +1 -1
- package/dist/templates/shared-hooks/inject-workflow-state.py +1 -1
- package/dist/templates/shared-hooks/session-start.py +10 -24
- package/dist/templates/trellis/index.d.ts +1 -0
- package/dist/templates/trellis/index.d.ts.map +1 -1
- package/dist/templates/trellis/index.js +2 -0
- package/dist/templates/trellis/index.js.map +1 -1
- package/dist/templates/trellis/scripts/common/task_migration.py +231 -0
- package/dist/templates/trellis/scripts/common/task_planning.py +252 -10
- package/dist/templates/trellis/scripts/common/task_store.py +11 -2
- package/dist/templates/trellis/scripts/task.py +86 -38
- package/dist/templates/trellis/workflow.md +23 -20
- package/dist/utils/template-fetcher.js +1 -1
- package/dist/utils/template-fetcher.js.map +1 -1
- package/dist/utils/workflow-resolver.d.ts +2 -2
- package/dist/utils/workflow-resolver.d.ts.map +1 -1
- package/dist/utils/workflow-resolver.js +9 -1
- package/dist/utils/workflow-resolver.js.map +1 -1
- package/package.json +2 -2
- package/dist/templates/common/skills/brainstorm.md +0 -236
- package/dist/templates/copilot/prompts/brainstorm.prompt.md +0 -162
|
@@ -260,6 +260,11 @@ def _get_task_status(trellis_dir: Path, hook_input: dict) -> str:
|
|
|
260
260
|
|
|
261
261
|
task_title = task_data.get("title", task_ref)
|
|
262
262
|
task_status = task_data.get("status", "unknown")
|
|
263
|
+
from common.task_planning import PlanningError, planning_record
|
|
264
|
+
try:
|
|
265
|
+
stage = planning_record(task_data).get("stage") or "unknown (legacy task)"
|
|
266
|
+
except PlanningError as exc:
|
|
267
|
+
return f"Status: TASK_ERROR\nTask: {task_ref}\nNext: Repair the existing planning record: {exc}"
|
|
263
268
|
|
|
264
269
|
if task_status == "completed":
|
|
265
270
|
return (
|
|
@@ -268,9 +273,6 @@ def _get_task_status(trellis_dir: Path, hook_input: dict) -> str:
|
|
|
268
273
|
"or start a new task."
|
|
269
274
|
)
|
|
270
275
|
|
|
271
|
-
has_prd = (task_dir / "prd.md").is_file()
|
|
272
|
-
has_design = (task_dir / "design.md").is_file()
|
|
273
|
-
has_implement = (task_dir / "implement.md").is_file()
|
|
274
276
|
present = [
|
|
275
277
|
name
|
|
276
278
|
for name in ("prd.md", "design.md", "implement.md", "implement.jsonl", "check.jsonl")
|
|
@@ -278,27 +280,16 @@ def _get_task_status(trellis_dir: Path, hook_input: dict) -> str:
|
|
|
278
280
|
]
|
|
279
281
|
present_line = ", ".join(present) if present else "none"
|
|
280
282
|
|
|
281
|
-
if not has_prd:
|
|
282
|
-
return (
|
|
283
|
-
f"Status: PLANNING\nTask: {task_title}\nPresent: {present_line}\n"
|
|
284
|
-
"Next: Load trellis-brainstorm and write prd.md. Stay in planning."
|
|
285
|
-
)
|
|
286
|
-
|
|
287
283
|
if task_status == "planning":
|
|
288
|
-
if has_design and has_implement:
|
|
289
|
-
next_action = "Review planning artifacts with the user before `task.py start`."
|
|
290
|
-
else:
|
|
291
|
-
next_action = (
|
|
292
|
-
"Lightweight task can ask for start review with PRD-only; "
|
|
293
|
-
"complex task must add design.md and implement.md before `task.py start`."
|
|
294
|
-
)
|
|
295
284
|
return (
|
|
296
|
-
f"Status: PLANNING\nTask: {task_title}\nPresent: {present_line}\n"
|
|
297
|
-
|
|
285
|
+
f"Status: PLANNING\nTask: {task_title}\nStage: {stage}\nPresent: {present_line}\n"
|
|
286
|
+
"Next: Load trellis-idea-to-closed-plan and resume the recorded planning stage; "
|
|
287
|
+
"artifact presence does not establish readiness."
|
|
298
288
|
)
|
|
299
289
|
|
|
300
290
|
return (
|
|
301
291
|
f"Status: {task_status.upper()}\nTask: {task_title}\nPresent: {present_line}\n"
|
|
292
|
+
f"Stage: {stage}\n"
|
|
302
293
|
"Next: Follow the matching per-turn workflow-state. Context order is jsonl entries, "
|
|
303
294
|
"prd.md, design.md if present, implement.md if present."
|
|
304
295
|
)
|
|
@@ -49,7 +49,7 @@ If the user wants only one platform to avoid sub-agents, first confirm whether t
|
|
|
49
49
|
|
|
50
50
|
| `status` | Artifact state | Resume at |
|
|
51
51
|
| --- | --- | --- |
|
|
52
|
-
| `planning` |
|
|
52
|
+
| `planning` | any planning artifact state | Read `meta.planning.stage`; load `trellis-idea-to-closed-plan` and resume that stage |
|
|
53
53
|
| `planning` | lightweight task with `prd.md` complete | present final plan, ask to seal and approve proceeding or supplement/revise, then native seal/approve/start; reuse sufficient authorization |
|
|
54
54
|
| `planning` | complex task missing `design.md` or `implement.md` | complete missing planning artifacts |
|
|
55
55
|
| `planning` | complex task has `prd.md`, `design.md`, and `implement.md` | present final plan, ask to seal and approve proceeding or supplement/revise, then native seal/approve/start; reuse sufficient authorization |
|
package/dist/templates/common/bundled-skills/trellis-meta/references/local-architecture/workflow.md
CHANGED
|
@@ -70,7 +70,7 @@ After editing, make the AI reread `.trellis/workflow.md`; do not assume the flow
|
|
|
70
70
|
|
|
71
71
|
`workflow.md` is the semantic center of the local workflow, but each platform can also have its own entry files:
|
|
72
72
|
|
|
73
|
-
- skills, such as `trellis-
|
|
73
|
+
- skills, such as `trellis-idea-to-closed-plan` and `trellis-check`.
|
|
74
74
|
- commands/prompts/workflows, such as continue and finish-work.
|
|
75
75
|
- hooks, such as session-start or workflow-state injection.
|
|
76
76
|
|
|
@@ -51,7 +51,7 @@ Run only when the phase or routing rule is missing; otherwise reuse it.
|
|
|
51
51
|
`get_context.py` shows the active task's `status` field. Route by `status` + artifact presence. This command replaces the user needing to remember the Trellis flow; it does not itself approve implementation.
|
|
52
52
|
|
|
53
53
|
- `status=planning` + `task.json.meta.delivery_mode = "analysis_only"` → verify the PRD's bounded evidence deliverable and protected-target no-change boundary, then complete the evidence and archive directly regardless of complexity or cross-owner scope. Do not run `task.py start`; a protected-target change requires a separate change-bearing task.
|
|
54
|
-
- `status=planning` + no `prd.md` →
|
|
54
|
+
- `status=planning` + no `prd.md` → load `trellis-idea-to-closed-plan` and resume at the recorded stage
|
|
55
55
|
- `status=planning` + a recorded `decision-needed` or unsealed decision chain → return to `pennix-decision-grill` only for a change-bearing decision or a user-owned choice that materially defines the requested research scope or method; research recommendations and open product choices alone do not trigger the gate.
|
|
56
56
|
- `status=in_progress` + a material unresolved decision → record the reason and run `task.py replan <task> "<reason>"`; do not ask a native question during implementation.
|
|
57
57
|
- `status=planning` + `prd.md` only → decide whether the task is lightweight or complex. Lightweight can move to **1.4** review; complex returns to **1.1** to add `design.md` + `implement.md`.
|
|
@@ -43,8 +43,7 @@ Index files list the specific guideline docs to read when you actually start cod
|
|
|
43
43
|
From Step 1 you know the current task and status. Check the task directory:
|
|
44
44
|
|
|
45
45
|
- **Active task with `task.json.meta.delivery_mode = "analysis_only"`** → keep `planning`, complete the PRD's bounded evidence work, then verify the no-change boundary, commit task artifacts, and archive directly. Do not run `task.py start`; any protected-target change needs a separate change-bearing task.
|
|
46
|
-
- **Active task status `planning
|
|
47
|
-
- **Active task status `planning` + `prd.md` exists** → stay in Phase 1. Lightweight tasks can be PRD-only; complex tasks need `design.md` + `implement.md`. Load the relevant Phase 1 step detail before `task.py start`.
|
|
46
|
+
- **Active task status `planning`** → read `meta.planning.stage` through `task.py current --json`, then load `trellis-idea-to-closed-plan` and resume that exact stage. Do not infer planning state from whether `prd.md` exists.
|
|
48
47
|
- **Existing task selected by explicit intent but not bound** → use native `task.py select` for context only. Drain already dispatched Channel units before a real task switch. Planned/change-bearing work presents the final plan and asks whether to seal and approve proceeding or supplement/revise before native seal/approve/start; reuse an existing sufficient authorization. Selecting or recovering context does not approve implementation.
|
|
49
48
|
- **Active task status `in_progress`** → Phase 2 step 2.1. Load the step detail:
|
|
50
49
|
```bash
|
|
@@ -58,7 +57,7 @@ From Step 1 you know the current task and status. Check the task directory:
|
|
|
58
57
|
|
|
59
58
|
| User intent | Skill |
|
|
60
59
|
|---|---|
|
|
61
|
-
| New
|
|
60
|
+
| New task, unresolved planning, or major change to an active task | `trellis-idea-to-closed-plan` |
|
|
62
61
|
| About to write code | `trellis-before-dev` |
|
|
63
62
|
| Done coding / quality check | `trellis-check` |
|
|
64
63
|
| Stuck / fixed same bug multiple times | `trellis-break-loop` |
|
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
# Trellis Idea to Closed Plan
|
|
2
|
+
|
|
3
|
+
Use this Skill to turn a new, changed, or newly blocked request into a complete, reviewed, explicitly authorized Trellis plan. This Skill owns planning and post-closure change triage. The Trellis CLI owns lifecycle state and receipts. Hooks and session utilities only route and display state. This Skill does not implement the task or edit `task.json`.
|
|
4
|
+
|
|
5
|
+
## Authority and state
|
|
6
|
+
|
|
7
|
+
Read the active task through `python3 ./.trellis/scripts/task.py current --json`, then read its `task.json`, planning documents, execution ledger, and current workflow. `task.status` is the task lifecycle; `task.json.meta.planning.stage` is the planning stage. Never infer one from the other, write either field by hand, or recreate old approvals. Use only native `task.py plan`, `start`, `replan`, and `archive` commands for transitions.
|
|
8
|
+
|
|
9
|
+
The planned change path is:
|
|
10
|
+
|
|
11
|
+
```text
|
|
12
|
+
planning/intake
|
|
13
|
+
-> evidence
|
|
14
|
+
-> decision_convergence (only while a material user choice is open)
|
|
15
|
+
-> solution_formation
|
|
16
|
+
-> solution_review
|
|
17
|
+
-> user_review
|
|
18
|
+
-> plan_closed
|
|
19
|
+
-> start -> in_progress
|
|
20
|
+
```
|
|
21
|
+
|
|
22
|
+
The other authorized paths are:
|
|
23
|
+
|
|
24
|
+
- Task-based direct change: `intake -> evidence -> direct_ready -> start -> in_progress`; the CLI verifies the bounded direct contract.
|
|
25
|
+
- Analysis-only: `intake -> evidence -> archive`; it stays `planning`, records research evidence, and never starts implementation.
|
|
26
|
+
- Taskless direct work stays outside the task machine only while it remains one small, bounded, single-owner, reversible change with immediate verification. If it grows, create a task at `intake`.
|
|
27
|
+
- Completed or archived tasks are terminal. A follow-up gets a new task.
|
|
28
|
+
|
|
29
|
+
The CLI allows only documented `plan advance` edges. In particular, `intake` advances to `evidence`; `evidence` advances to `decision_convergence`, `solution_formation`, or a validated `direct_ready`; and later stages can return to `evidence`, `decision_convergence`, or `solution_formation` when their material preconditions hold. `plan_closed` is reopened only through `task.py replan` with an explicit earlier target stage.
|
|
30
|
+
|
|
31
|
+
## Route the request before editing
|
|
32
|
+
|
|
33
|
+
1. Determine whether the request belongs to the active task by comparing its goal, owner, repository, branch, component, scope, and acceptance. An independent deliverable gets a separate task and leaves the unrelated active task and ledger untouched. If bounded evidence cannot establish the relationship, ask the user to clarify before changing either task.
|
|
34
|
+
2. If the task is completed or archived, create a new follow-up task. Never reopen a terminal task.
|
|
35
|
+
3. Classify the work explicitly as `execution_class=planned|direct` and `delivery_mode=change_bearing|analysis_only`. Use planned work for multiple steps, material decisions, cross-component ownership, significant risk, or public/data/release changes. Use direct only when one named owner can perform one small, reversible change with immediate verification and a clear rollback. Use analysis-only only when the deliverable is evidence and the PRD states a no-change boundary for protected targets.
|
|
36
|
+
4. Create a task only when the user asked for one or explicitly agrees after you explain why Trellis tracking is needed. Creating a task does not approve its plan or implementation. `task.py create` creates a planning task at `intake`; set classification with `task.py set-meta`, then use `task.py current --json` to confirm the task and stage. Do not set reserved `meta.planning` through `create --meta` or `set-meta`.
|
|
37
|
+
5. Keep the stage unchanged while gathering and recording evidence. Persist verified facts and source paths in task research or PRD. Use project-specific code or search routing rules; a search result is evidence only after it is checked against the source.
|
|
38
|
+
|
|
39
|
+
## Evidence and stage progression
|
|
40
|
+
|
|
41
|
+
- Inspect repository-backed facts, applicable specs, and task history before asking the user to resolve questions those sources can answer. Keep evidence, source paths, unresolved facts, and a recoverable next action in the task's research or planning artifacts.
|
|
42
|
+
- Advance a stage only after its evidence and exit conditions are met. Missing evidence is not a resolved decision or a reason to claim the plan is closed. Use `$pennix-decision-grill` only for consequential choices the user owns.
|
|
43
|
+
- For read-heavy evidence, define a bounded question, evidence units, source authority, and a stop condition; delegate research only through the project's approved routing. If independent subnode dispatch is requested, record the exact question, units, scope, stop conditions, destinations, concurrency, and acceptance method, then obtain explicit approval before any spawn or send. That approval covers only the frozen dispatch.
|
|
44
|
+
- `analysis_only` (`task.json.meta.delivery_mode = "analysis_only"`) tasks may include complex or cross-owner evidence work and recommendations. Keep them in `planning`, verify the evidence deliverable and protected-target no-change boundary, then archive through the native CLI. Do not require `design.md`, `implement.md`, a planning seal, implementation approval, or `task.py start`; create a separate change-bearing task before acting on a recommendation that changes a protected target.
|
|
45
|
+
|
|
46
|
+
## Resolve decisions and form the solution
|
|
47
|
+
|
|
48
|
+
Use `pennix-decision-grill` for consequential user choices. Ask one high-priority, dependency-ready decision at a time; after each answer, update the decision record and reassess what remains. Do not ask users to choose facts, settled preferences, or local implementation details that can be resolved from evidence. If the request changes materially, incorporate it before proceeding.
|
|
49
|
+
|
|
50
|
+
Maintain one `trellis-decisions:v1` JSON block in `prd.md` while material decisions remain. Every decision has `id`, `status`, `question`, `evidence`, `answer_or_reason`, `impact`, and `reopen_when`. Record resolved decisions as `decided` or `deferred` with a reason; do not enter solution formation or review while any decision is `open`.
|
|
51
|
+
|
|
52
|
+
Write `prd.md` with a testable goal, scope, requirements, acceptance criteria, exclusions, confirmed facts, and decision evidence. For planned change-bearing work, write `design.md` with component boundaries, interfaces, data flow, compatibility, alternatives that matter, and operational risks. Then write `implement.md` with exactly one `trellis-implementation-plan:v1` JSON block. Each ordered step must include:
|
|
53
|
+
|
|
54
|
+
```json
|
|
55
|
+
{
|
|
56
|
+
"id": "stable-step-id",
|
|
57
|
+
"target": {
|
|
58
|
+
"repository": "actual repository",
|
|
59
|
+
"branch": "actual branch",
|
|
60
|
+
"component_or_path": "owned component or path"
|
|
61
|
+
},
|
|
62
|
+
"depends_on": [],
|
|
63
|
+
"action": "concrete work",
|
|
64
|
+
"deliverables": "reviewable result",
|
|
65
|
+
"verification": "commands and observable acceptance evidence",
|
|
66
|
+
"risks": "material risks",
|
|
67
|
+
"rollback": "specific recovery action"
|
|
68
|
+
}
|
|
69
|
+
```
|
|
70
|
+
|
|
71
|
+
Dependencies must refer only to earlier steps. Every step must have one actual owner and target. The JSON block must also contain exactly one `stop_point` with non-empty `condition`, `observable_evidence`, and `remaining_work`. The stop condition defines when this task is complete; remaining work names items outside this task. Do not leave generic, unbounded, or future-phase work inside the stop point.
|
|
72
|
+
|
|
73
|
+
Before final review, rewrite `prd.md` against the final artifact structure. Keep it lossless: preserve every confirmed fact, requirement ID, decision, constraint, source anchor, severity, and acceptance mapping; remove resolved questions and duplicates without dropping information. Fold temporary assumptions and resolved questions into the owning sections, merge overlapping defect and requirement lists while keeping evidence and anchors with the requirement, then read the PRD top to bottom to confirm no material is missing or repeated without purpose. Also confirm the goal, scope, exclusions, observable acceptance, resolved decisions, remaining technical unknowns, ownership, dependencies, compatibility, risks, verification, rollback, and stop point are consistent across the artifacts.
|
|
74
|
+
|
|
75
|
+
For `direct_ready`, record one change, one owner, bounded scope, immediate verification, and rollback in `prd.md`; the CLI validates these fields. For `analysis_only`, record the evidence deliverable and protected-target no-change boundary. Neither path should be padded with a planned implementation sequence.
|
|
76
|
+
|
|
77
|
+
Advance only after writing the material required by the target stage. Before solution review, check that all decisions are resolved and every implementation step has explicit order, dependency, repository/branch/path, deliverable, verification, risk, and rollback. Verify that the solution satisfies each acceptance criterion, addresses every material risk, and has one observable stop point. Fix gaps before advancing.
|
|
78
|
+
|
|
79
|
+
Before `plan seal` or `task.py start`, run native task validation and the applicable context checks. On subagent-dispatch workflows, `implement.jsonl` and `check.jsonl` must each contain at least one real spec or research entry; empty manifests or seed-only `_example` rows do not satisfy this gate. Inline workflows use their native context-loading path.
|
|
80
|
+
|
|
81
|
+
## Review, approval, and start
|
|
82
|
+
|
|
83
|
+
Run the applicable task-context checks before review. Inspect the full current documents and obtain the current digest with:
|
|
84
|
+
|
|
85
|
+
```bash
|
|
86
|
+
python3 ./.trellis/scripts/task.py plan digest <task>
|
|
87
|
+
```
|
|
88
|
+
|
|
89
|
+
Present the complete solution to the user: goal and exclusions, resolved decisions, repository/branch/component ownership, ordered steps and dependencies, acceptance and verification, risks and rollback, and the exact stop point. Ask whether to seal and approve this displayed plan or revise it. A task request, earlier design answer, or parent-task approval is not approval of this plan.
|
|
90
|
+
|
|
91
|
+
If the user asks for changes, update the materials, return to the earliest affected stage through permitted planning transitions, rerun validation, and present the revised complete solution. When the user explicitly approves proceeding with the displayed solution, run `plan seal <task> --expected-digest <shown-digest>`, use the returned revision with `plan approve <task> --revision <n> --basis <actual non-sensitive approval>`, then `task.py start <task>`. If the user approves sealing only, stop after seal. An empty reply, cancellation, or selection of a recommended option is not approval. On a command failure, inspect its output and actual task state before retrying.
|
|
92
|
+
|
|
93
|
+
The digest and seal cover the task identity, classification, and review documents. Material edits invalidate the prior seal and approval. `execution.md` is an unsealed progress/evidence ledger and is excluded from that digest.
|
|
94
|
+
|
|
95
|
+
## Classify changes after closure or direct start
|
|
96
|
+
|
|
97
|
+
For each new request, changed condition, or implementation discovery, first decide whether it is for this active task. Do not mutate an unrelated task. If the relationship is unclear, leave state and ledger unchanged and ask.
|
|
98
|
+
|
|
99
|
+
A change is **minor** only if the user authorized it (for requested work) and every approved commitment remains true: goal, scope, acceptance, decisions, owner/repository/branch/component, design and public/data/security/privacy/release behavior, dependencies, verification, risks/rollback, and unique stop point. For planned work, it must fit an approved step and its ownership. For direct work, the task must still meet every direct eligibility condition. A small edit that changes scope or acceptance is major. Bounded evidence gathering that cannot establish minor status also means major.
|
|
100
|
+
|
|
101
|
+
For a minor change, leave task status and stage unchanged, preserve the sealed plan, and append to `execution.md`: the approved revision/classification, trigger and evidence, why all commitments remain valid, affected step or direct contract, exact delta, and verification. Continue only after the authorized delta and verification are recorded.
|
|
102
|
+
|
|
103
|
+
A change is **major** if it changes any approved commitment, invalidates a material assumption, reopens a user decision, outgrows direct eligibility, changes ownership/target/dependency/verification/risk/rollback/stop point, or remains uncertain after bounded evidence. Stop work that depends on it, record the finding, then run native `task.py replan <task> --to <earliest-stage> <reason>`. Choose `intake` for goal/scope/classification/owner changes or direct work that outgrows eligibility; `evidence` when facts must be re-established; `decision_convergence` when a user decision is open; `solution_formation` when the solution or implementation contract changes; `solution_review` when only internal review must repeat; and `user_review` only when the complete solution and internal review remain valid but the user must approve that same material again. Replan invalidates the prior seal and approval. Rebuild the plan, present it, and obtain new explicit approval before dependent implementation resumes.
|
|
104
|
+
|
|
105
|
+
When an analysis-only evidence review is complete, verify its acceptance and no-change boundary, then archive from `evidence` with the native archive command and a concise result reason. For administrative abandonment, record the reason and use the guarded archive path. Do not treat `plan_closed` as completion or archive a task merely because planning is finished.
|
|
@@ -251,6 +251,11 @@ def _get_task_status(trellis_dir: Path, hook_input: dict) -> str:
|
|
|
251
251
|
|
|
252
252
|
task_title = task_data.get("title", task_ref)
|
|
253
253
|
task_status = task_data.get("status", "unknown")
|
|
254
|
+
from common.task_planning import PlanningError, planning_record
|
|
255
|
+
try:
|
|
256
|
+
stage = planning_record(task_data).get("stage") or "unknown (legacy task)"
|
|
257
|
+
except PlanningError as exc:
|
|
258
|
+
return f"Status: TASK_ERROR\nTask: {task_ref}\nNext: Repair the existing planning record: {exc}"
|
|
254
259
|
|
|
255
260
|
if task_status == "completed":
|
|
256
261
|
return (
|
|
@@ -259,9 +264,6 @@ def _get_task_status(trellis_dir: Path, hook_input: dict) -> str:
|
|
|
259
264
|
"or start a new task."
|
|
260
265
|
)
|
|
261
266
|
|
|
262
|
-
has_prd = (task_dir / "prd.md").is_file()
|
|
263
|
-
has_design = (task_dir / "design.md").is_file()
|
|
264
|
-
has_implement = (task_dir / "implement.md").is_file()
|
|
265
267
|
present = [
|
|
266
268
|
name
|
|
267
269
|
for name in ("prd.md", "design.md", "implement.md", "implement.jsonl", "check.jsonl")
|
|
@@ -269,27 +271,16 @@ def _get_task_status(trellis_dir: Path, hook_input: dict) -> str:
|
|
|
269
271
|
]
|
|
270
272
|
present_line = ", ".join(present) if present else "none"
|
|
271
273
|
|
|
272
|
-
if not has_prd:
|
|
273
|
-
return (
|
|
274
|
-
f"Status: PLANNING\nTask: {task_title}\nPresent: {present_line}\n"
|
|
275
|
-
"Next: Load trellis-brainstorm and write prd.md. Stay in planning."
|
|
276
|
-
)
|
|
277
|
-
|
|
278
274
|
if task_status == "planning":
|
|
279
|
-
if has_design and has_implement:
|
|
280
|
-
next_action = "Review planning artifacts with the user before `task.py start`."
|
|
281
|
-
else:
|
|
282
|
-
next_action = (
|
|
283
|
-
"Lightweight task can ask for start review with PRD-only; "
|
|
284
|
-
"complex task must add design.md and implement.md before `task.py start`."
|
|
285
|
-
)
|
|
286
275
|
return (
|
|
287
|
-
f"Status: PLANNING\nTask: {task_title}\nPresent: {present_line}\n"
|
|
288
|
-
|
|
276
|
+
f"Status: PLANNING\nTask: {task_title}\nStage: {stage}\nPresent: {present_line}\n"
|
|
277
|
+
"Next: Load trellis-idea-to-closed-plan and resume the recorded planning stage; "
|
|
278
|
+
"artifact presence does not establish readiness."
|
|
289
279
|
)
|
|
290
280
|
|
|
291
281
|
return (
|
|
292
282
|
f"Status: {task_status.upper()}\nTask: {task_title}\nPresent: {present_line}\n"
|
|
283
|
+
f"Stage: {stage}\n"
|
|
293
284
|
"Next: Follow the matching per-turn workflow-state. Context order is jsonl entries, "
|
|
294
285
|
"prd.md, design.md if present, implement.md if present."
|
|
295
286
|
)
|
|
@@ -40,8 +40,7 @@ Index files list the specific guideline docs to read when you actually start cod
|
|
|
40
40
|
## Step 4: Decide next action
|
|
41
41
|
From Step 1 you know the current task and status. Check the task directory:
|
|
42
42
|
|
|
43
|
-
- **Active task status `planning
|
|
44
|
-
- **Active task status `planning` + `prd.md` exists** → stay in Phase 1. Lightweight tasks can be PRD-only; complex tasks need `design.md` + `implement.md`. Load the relevant Phase 1 step detail before `task.py start`.
|
|
43
|
+
- **Active task status `planning`** → read `meta.planning.stage` through `task.py current --json`, then load `trellis-idea-to-closed-plan` and resume that exact stage. Do not infer planning state from whether `prd.md` exists.
|
|
45
44
|
- **Active task status `in_progress`** → Phase 2 step 2.1. Load the step detail:
|
|
46
45
|
```bash
|
|
47
46
|
{{PYTHON_CMD}} ./.trellis/scripts/get_context.py --mode phase --step 2.1 --platform {{CLI_FLAG}}
|
|
@@ -54,7 +53,7 @@ From Step 1 you know the current task and status. Check the task directory:
|
|
|
54
53
|
|
|
55
54
|
| User intent | Skill |
|
|
56
55
|
|---|---|
|
|
57
|
-
| New
|
|
56
|
+
| New task, planning, or major change to an active task | `trellis-idea-to-closed-plan` |
|
|
58
57
|
| About to write code | `trellis-before-dev` |
|
|
59
58
|
| Done coding / quality check | `trellis-check` |
|
|
60
59
|
| Stuck / fixed same bug multiple times | `trellis-break-loop` |
|
|
@@ -88,7 +88,7 @@ function getTaskStatus(ctx, platformInput = null) {
|
|
|
88
88
|
(!existsSync(checkJsonl) || hasCuratedJsonlEntry(checkJsonl))
|
|
89
89
|
|
|
90
90
|
if (taskStatus === "planning" && !hasPrd) {
|
|
91
|
-
return `Status: PLANNING\nTask: ${taskTitle}\nPresent: ${presentLine}\nNext-Action: Load trellis-
|
|
91
|
+
return `Status: PLANNING\nTask: ${taskTitle}\nPresent: ${presentLine}\nNext-Action: Load trellis-idea-to-closed-plan and resume the recorded planning stage.`
|
|
92
92
|
}
|
|
93
93
|
|
|
94
94
|
if (taskStatus === "planning") {
|
|
@@ -475,7 +475,7 @@ def main() -> int:
|
|
|
475
475
|
task = get_active_task(root, data)
|
|
476
476
|
if task is None:
|
|
477
477
|
# No active task — still emit a breadcrumb nudging AI toward
|
|
478
|
-
# trellis-
|
|
478
|
+
# trellis-idea-to-closed-plan + task.py create when user describes tracked work.
|
|
479
479
|
no_task_key = resolve_breadcrumb_key("no_task", platform, config)
|
|
480
480
|
breadcrumb = build_breadcrumb(
|
|
481
481
|
None, "no_task", templates, breadcrumb_key=no_task_key
|
|
@@ -450,6 +450,11 @@ def _get_task_status(trellis_dir: Path, input_data: dict) -> str:
|
|
|
450
450
|
|
|
451
451
|
task_title = task_data.get("title", task_ref)
|
|
452
452
|
task_status = task_data.get("status", "unknown")
|
|
453
|
+
from common.task_planning import PlanningError, planning_record
|
|
454
|
+
try:
|
|
455
|
+
stage = planning_record(task_data).get("stage") or "unknown (legacy task)"
|
|
456
|
+
except PlanningError as exc:
|
|
457
|
+
return f"Status: TASK_ERROR\nTask: {task_ref}\nNext-Action: Repair the existing planning record: {exc}"
|
|
453
458
|
artifact_names = ("prd.md", "design.md", "implement.md", "implement.jsonl", "check.jsonl")
|
|
454
459
|
present = [name for name in artifact_names if (task_dir / name).is_file()]
|
|
455
460
|
if (task_dir / "research").is_dir():
|
|
@@ -463,9 +468,6 @@ def _get_task_status(trellis_dir: Path, input_data: dict) -> str:
|
|
|
463
468
|
"Next-Action: Run `/trellis:finish-work`. If the working tree is dirty, return to Phase 3.4 first."
|
|
464
469
|
)
|
|
465
470
|
|
|
466
|
-
has_prd = (task_dir / "prd.md").is_file()
|
|
467
|
-
has_design = (task_dir / "design.md").is_file()
|
|
468
|
-
has_implement_plan = (task_dir / "implement.md").is_file()
|
|
469
471
|
implement_jsonl = task_dir / "implement.jsonl"
|
|
470
472
|
check_jsonl = task_dir / "check.jsonl"
|
|
471
473
|
jsonl_ready = (
|
|
@@ -473,39 +475,23 @@ def _get_task_status(trellis_dir: Path, input_data: dict) -> str:
|
|
|
473
475
|
and (not check_jsonl.is_file() or _has_curated_jsonl_entry(check_jsonl))
|
|
474
476
|
)
|
|
475
477
|
|
|
476
|
-
if task_status == "planning" and not has_prd:
|
|
477
|
-
return (
|
|
478
|
-
f"Status: PLANNING\nTask: {task_title}\n"
|
|
479
|
-
f"Present: {present_line}\n"
|
|
480
|
-
"Next-Action: Load `trellis-brainstorm` and write `prd.md`. Stay in planning."
|
|
481
|
-
)
|
|
482
|
-
|
|
483
478
|
if task_status == "planning":
|
|
484
|
-
|
|
485
|
-
|
|
486
|
-
|
|
487
|
-
("implement.md", has_implement_plan),
|
|
488
|
-
)
|
|
489
|
-
if not exists
|
|
479
|
+
next_bits = [
|
|
480
|
+
"Load `trellis-idea-to-closed-plan` and resume the recorded planning stage; "
|
|
481
|
+
"artifact presence does not establish readiness"
|
|
490
482
|
]
|
|
491
|
-
next_bits: list[str] = []
|
|
492
|
-
if missing_complex:
|
|
493
|
-
next_bits.append(
|
|
494
|
-
"Lightweight task can request start review with PRD-only; "
|
|
495
|
-
f"complex task must add {', '.join(missing_complex)} before start"
|
|
496
|
-
)
|
|
497
|
-
else:
|
|
498
|
-
next_bits.append("Planning artifacts are present; ask for review before `task.py start`")
|
|
499
483
|
if not jsonl_ready:
|
|
500
484
|
next_bits.append("curate `implement.jsonl` and `check.jsonl` before sub-agent mode start")
|
|
501
485
|
return (
|
|
502
486
|
f"Status: PLANNING\nTask: {task_title}\n"
|
|
487
|
+
f"Stage: {stage}\n"
|
|
503
488
|
f"Present: {present_line}\n"
|
|
504
489
|
f"Next-Action: {'; '.join(next_bits)}. Do not enter implementation until the user confirms start."
|
|
505
490
|
)
|
|
506
491
|
|
|
507
492
|
return (
|
|
508
493
|
f"Status: {str(task_status).upper()}\nTask: {task_title}\n"
|
|
494
|
+
f"Stage: {stage}\n"
|
|
509
495
|
f"Present: {present_line}\n"
|
|
510
496
|
"Next-Action: Follow the matching per-turn workflow-state. "
|
|
511
497
|
"Implementation/check context order is jsonl entries -> `prd.md` -> `design.md if present` -> `implement.md if present`."
|
|
@@ -37,6 +37,7 @@ export declare const commonTaskContext: string;
|
|
|
37
37
|
export declare const commonContextProjection: string;
|
|
38
38
|
export declare const commonTaskStore: string;
|
|
39
39
|
export declare const commonTaskPlanning: string;
|
|
40
|
+
export declare const commonTaskMigration: string;
|
|
40
41
|
export declare const commonSessionContext: string;
|
|
41
42
|
export declare const commonContinuationRecord: string;
|
|
42
43
|
export declare const commonOwnershipRecord: string;
|
|
@@ -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,uBAAuB,QAEnC,CAAC;AACF,eAAO,MAAM,eAAe,QAA+C,CAAC;AAC5E,eAAO,MAAM,kBAAkB,QAE9B,CAAC;AACF,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,uBAAuB,QAEnC,CAAC;AACF,eAAO,MAAM,mBAAmB,QAE/B,CAAC;AACF,eAAO,MAAM,eAAe,QAA+C,CAAC;AAC5E,eAAO,MAAM,gBAAgB,QAAgD,CAAC;AAC9E,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,uBAAuB,QAEnC,CAAC;AAEF;;GAEG;AACH,wBAAgB,aAAa,IAAI,GAAG,CAAC,MAAM,EAAE,MAAM,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,uBAAuB,QAEnC,CAAC;AACF,eAAO,MAAM,eAAe,QAA+C,CAAC;AAC5E,eAAO,MAAM,kBAAkB,QAE9B,CAAC;AACF,eAAO,MAAM,mBAAmB,QAE/B,CAAC;AACF,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,uBAAuB,QAEnC,CAAC;AACF,eAAO,MAAM,mBAAmB,QAE/B,CAAC;AACF,eAAO,MAAM,eAAe,QAA+C,CAAC;AAC5E,eAAO,MAAM,gBAAgB,QAAgD,CAAC;AAC9E,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,uBAAuB,QAEnC,CAAC;AAEF;;GAEG;AACH,wBAAgB,aAAa,IAAI,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CA+CnD;AAED;;;;;;;GAOG;AACH,wBAAgB,YAAY,IAAI,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAOlD"}
|
|
@@ -47,6 +47,7 @@ export const commonTaskContext = readTemplate("scripts/common/task_context.py");
|
|
|
47
47
|
export const commonContextProjection = readTemplate("scripts/common/context_projection.py");
|
|
48
48
|
export const commonTaskStore = readTemplate("scripts/common/task_store.py");
|
|
49
49
|
export const commonTaskPlanning = readTemplate("scripts/common/task_planning.py");
|
|
50
|
+
export const commonTaskMigration = readTemplate("scripts/common/task_migration.py");
|
|
50
51
|
export const commonSessionContext = readTemplate("scripts/common/session_context.py");
|
|
51
52
|
export const commonContinuationRecord = readTemplate("scripts/common/continuation_record.py");
|
|
52
53
|
export const commonOwnershipRecord = readTemplate("scripts/common/ownership_record.py");
|
|
@@ -104,6 +105,7 @@ export function getAllScripts() {
|
|
|
104
105
|
scripts.set("common/context_projection.py", commonContextProjection);
|
|
105
106
|
scripts.set("common/task_store.py", commonTaskStore);
|
|
106
107
|
scripts.set("common/task_planning.py", commonTaskPlanning);
|
|
108
|
+
scripts.set("common/task_migration.py", commonTaskMigration);
|
|
107
109
|
scripts.set("common/session_context.py", commonSessionContext);
|
|
108
110
|
scripts.set("common/continuation_record.py", commonContinuationRecord);
|
|
109
111
|
scripts.set("common/ownership_record.py", commonOwnershipRecord);
|
|
@@ -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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"}
|