@mindfoldhq/trellis 0.5.0-beta.17 → 0.5.0-beta.19
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 +60 -98
- package/dist/commands/init.js +1 -1
- package/dist/commands/init.js.map +1 -1
- package/dist/commands/update.d.ts.map +1 -1
- package/dist/commands/update.js +106 -5
- package/dist/commands/update.js.map +1 -1
- package/dist/constants/paths.d.ts +2 -0
- package/dist/constants/paths.d.ts.map +1 -1
- package/dist/constants/paths.js +2 -0
- package/dist/constants/paths.js.map +1 -1
- package/dist/migrations/manifests/0.5.0-beta.18.json +9 -0
- package/dist/migrations/manifests/0.5.0-beta.19.json +9 -0
- package/dist/templates/codex/skills/finish-work/SKILL.md +41 -109
- package/dist/templates/common/bundled-skills/trellis-meta/references/local-architecture/workflow.md +1 -1
- package/dist/templates/common/commands/finish-work.md +34 -10
- package/dist/templates/copilot/prompts/finish-work.prompt.md +44 -112
- package/dist/templates/opencode/plugins/inject-subagent-context.js +20 -5
- package/dist/templates/opencode/plugins/inject-workflow-state.js +6 -1
- package/dist/templates/shared-hooks/inject-workflow-state.py +6 -1
- package/dist/templates/trellis/scripts/common/task_store.py +4 -16
- package/dist/templates/trellis/scripts/common/tasks.py +4 -1
- package/dist/templates/trellis/workflow.md +56 -3
- package/dist/utils/template-hash.d.ts.map +1 -1
- package/dist/utils/template-hash.js +19 -1
- package/dist/utils/template-hash.js.map +1 -1
- package/package.json +1 -1
|
@@ -1,157 +1,89 @@
|
|
|
1
1
|
---
|
|
2
|
-
description: "Trellis Copilot prompt: Finish Work
|
|
2
|
+
description: "Trellis Copilot prompt: Finish Work — survey + archive task + record session journal"
|
|
3
3
|
---
|
|
4
4
|
|
|
5
|
-
# Finish Work
|
|
5
|
+
# Finish Work
|
|
6
6
|
|
|
7
|
-
|
|
7
|
+
Wrap up the current session: archive the active task (and any other completed-but-unarchived tasks the user wants to clean up) and record the session journal. Code commits are NOT done here — those happen in workflow Phase 3.4 before you invoke this prompt.
|
|
8
8
|
|
|
9
|
-
**Timing**: After
|
|
9
|
+
**Timing**: After Phase 3.4 (Commit changes) — when the working tree is already clean.
|
|
10
10
|
|
|
11
11
|
---
|
|
12
12
|
|
|
13
|
-
##
|
|
14
|
-
|
|
15
|
-
### 1. Code Quality
|
|
13
|
+
## Step 1: Survey current state
|
|
16
14
|
|
|
17
15
|
```bash
|
|
18
|
-
|
|
19
|
-
pnpm lint
|
|
20
|
-
pnpm type-check
|
|
21
|
-
pnpm test
|
|
16
|
+
python3 ./.trellis/scripts/get_context.py --mode record
|
|
22
17
|
```
|
|
23
18
|
|
|
24
|
-
|
|
25
|
-
- [ ] `pnpm type-check` passes with no type errors?
|
|
26
|
-
- [ ] Tests pass?
|
|
27
|
-
- [ ] No `console.log` statements (use logger)?
|
|
28
|
-
- [ ] No non-null assertions (the `x!` operator)?
|
|
29
|
-
- [ ] No `any` types?
|
|
30
|
-
|
|
31
|
-
### 1.5. Test Coverage
|
|
32
|
-
|
|
33
|
-
Check if your change needs new or updated tests (see `.trellis/spec/unit-test/conventions.md`):
|
|
34
|
-
|
|
35
|
-
- [ ] New pure function �?unit test added?
|
|
36
|
-
- [ ] Bug fix �?regression test added in `test/regression.test.ts`?
|
|
37
|
-
- [ ] Changed init/update behavior �?integration test added/updated?
|
|
38
|
-
- [ ] No logic change (text/data only) �?no test needed
|
|
39
|
-
|
|
40
|
-
### 2. Code-Spec Sync
|
|
41
|
-
|
|
42
|
-
**Code-Spec Docs**:
|
|
43
|
-
- [ ] Does `.trellis/spec/backend/` need updates?
|
|
44
|
-
- New patterns, new modules, new conventions
|
|
45
|
-
- [ ] Does `.trellis/spec/frontend/` need updates?
|
|
46
|
-
- New components, new hooks, new patterns
|
|
47
|
-
- [ ] Does `.trellis/spec/guides/` need updates?
|
|
48
|
-
- New cross-layer flows, lessons from bugs
|
|
49
|
-
|
|
50
|
-
**Key Question**:
|
|
51
|
-
> "If I fixed a bug or discovered something non-obvious, should I document it so future me (or others) won't hit the same issue?"
|
|
52
|
-
|
|
53
|
-
If YES -> Update the relevant code-spec doc.
|
|
54
|
-
|
|
55
|
-
### 2.5. Code-Spec Hard Block (Infra/Cross-Layer)
|
|
56
|
-
|
|
57
|
-
If this change touches infra or cross-layer contracts, this is a blocking checklist:
|
|
58
|
-
|
|
59
|
-
- [ ] Spec content is executable (real signatures/contracts), not principle-only text
|
|
60
|
-
- [ ] Includes file path + command/API name + payload field names
|
|
61
|
-
- [ ] Includes validation and error matrix
|
|
62
|
-
- [ ] Includes Good/Base/Bad cases
|
|
63
|
-
- [ ] Includes required tests and assertion points
|
|
19
|
+
This prints:
|
|
64
20
|
|
|
65
|
-
**
|
|
66
|
-
|
|
67
|
-
|
|
21
|
+
- **My active tasks** — review whether any besides the current one are actually done (code merged, AC met) and should be archived this round.
|
|
22
|
+
- **Git status** — quick visual on what's dirty.
|
|
23
|
+
- **Recent commits** — you'll need their hashes in Step 4 for `--commit`.
|
|
68
24
|
|
|
69
|
-
|
|
25
|
+
If `--mode record` surfaces other completed tasks not tied to the current session, surface them to the user with a one-shot confirmation: "These N tasks look done — archive them too in this round? [y/N]". Default is no; the current active task is always archived in Step 3 regardless.
|
|
70
26
|
|
|
71
|
-
|
|
27
|
+
## Step 2: Sanity check — working tree must be clean
|
|
72
28
|
|
|
73
|
-
|
|
74
|
-
- [ ] Output schema updated?
|
|
75
|
-
- [ ] API documentation updated?
|
|
76
|
-
- [ ] Client code updated to match?
|
|
29
|
+
Run:
|
|
77
30
|
|
|
78
|
-
|
|
31
|
+
```bash
|
|
32
|
+
git status --porcelain
|
|
33
|
+
```
|
|
79
34
|
|
|
80
|
-
|
|
35
|
+
Filter out paths under `.trellis/workspace/` and `.trellis/tasks/` — those are managed by `add_session.py` and `task.py archive` auto-commits and will appear dirty as part of this prompt's own work.
|
|
81
36
|
|
|
82
|
-
|
|
83
|
-
- [ ] Schema file updated?
|
|
84
|
-
- [ ] Related queries updated?
|
|
85
|
-
- [ ] Seed data updated (if applicable)?
|
|
37
|
+
If anything else is dirty (any path outside those two prefixes), **stop and bail out** with:
|
|
86
38
|
|
|
87
|
-
|
|
39
|
+
> "Working tree has uncommitted code changes. Return to workflow Phase 3.4 to commit them before running `/finish-work`."
|
|
88
40
|
|
|
89
|
-
|
|
41
|
+
Do NOT run `git commit` here. Do NOT prompt the user to commit. The user goes back to Phase 3.4 and the AI drives the batched commit there.
|
|
90
42
|
|
|
91
|
-
|
|
92
|
-
- [ ] Error handling works at each boundary?
|
|
93
|
-
- [ ] Types are consistent across layers?
|
|
94
|
-
- [ ] Loading states handled?
|
|
43
|
+
## Step 3: Archive task(s)
|
|
95
44
|
|
|
96
|
-
|
|
45
|
+
```bash
|
|
46
|
+
python3 ./.trellis/scripts/task.py archive <task-name>
|
|
47
|
+
```
|
|
97
48
|
|
|
98
|
-
|
|
99
|
-
- [ ] Edge cases tested?
|
|
100
|
-
- [ ] Error states tested?
|
|
101
|
-
- [ ] Works after page refresh?
|
|
49
|
+
At minimum: the current active task (if any). Plus any extra tasks the user confirmed in Step 1. Each archive produces a `chore(task): archive ...` commit via the script's auto-commit.
|
|
102
50
|
|
|
103
|
-
|
|
51
|
+
If there is no active task and the user did not confirm any cleanup archives, skip this step.
|
|
104
52
|
|
|
105
|
-
##
|
|
53
|
+
## Step 4: Record session journal
|
|
106
54
|
|
|
107
55
|
```bash
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
git status
|
|
113
|
-
git diff --name-only
|
|
114
|
-
|
|
115
|
-
# 3. Based on changed files, check relevant items above
|
|
56
|
+
python3 ./.trellis/scripts/add_session.py \
|
|
57
|
+
--title "Session Title" \
|
|
58
|
+
--commit "hash1,hash2" \
|
|
59
|
+
--summary "Brief summary"
|
|
116
60
|
```
|
|
117
61
|
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
## Common Oversights
|
|
62
|
+
Use the work-commit hashes produced in Phase 3.4 (visible in Step 1's `Recent commits` list, or via `git log --oneline`) for `--commit`. Do not include the archive commit hashes from Step 3. This produces a `chore: record journal` commit.
|
|
121
63
|
|
|
122
|
-
|
|
123
|
-
|-----------|-------------|-------|
|
|
124
|
-
| Code-spec docs not updated | Others don't know the change | Check .trellis/spec/ |
|
|
125
|
-
| Spec text is abstract only | Easy regressions in infra/cross-layer changes | Require signature/contract/matrix/cases/tests |
|
|
126
|
-
| Migration not created | Schema out of sync | Check db/migrations/ |
|
|
127
|
-
| Types not synced | Runtime errors | Check shared types |
|
|
128
|
-
| Tests not updated | False confidence | Run full test suite |
|
|
129
|
-
| Console.log left in | Noisy production logs | Search for console.log |
|
|
64
|
+
Final git log order: `<work commits from 3.4>` → `chore(task): archive ...` (one or more) → `chore: record journal`.
|
|
130
65
|
|
|
131
66
|
---
|
|
132
67
|
|
|
133
68
|
## Relationship to Other Commands
|
|
134
69
|
|
|
135
70
|
```
|
|
136
|
-
Development Flow:
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
71
|
+
Development Flow (workflow.md Phase 3):
|
|
72
|
+
3.1 Quality verification
|
|
73
|
+
3.2 Debug retrospective (on demand)
|
|
74
|
+
3.3 Spec update
|
|
75
|
+
3.4 Commit changes -> AI drafts batched commits, user confirms
|
|
76
|
+
3.5 Wrap-up -> /finish-work (this prompt: survey + archive + journal)
|
|
77
|
+
|
|
141
78
|
Debug Flow:
|
|
142
|
-
Hit bug -> Fix -> / -> Knowledge capture
|
|
143
|
-
|
|
|
144
|
-
Deep analysis
|
|
79
|
+
Hit bug -> Fix -> /break-loop -> Knowledge capture
|
|
145
80
|
```
|
|
146
81
|
|
|
147
|
-
-
|
|
148
|
-
-
|
|
149
|
-
- `/` - Deep analysis after debugging
|
|
82
|
+
- `/finish-work` — survey + archive + record session (this prompt)
|
|
83
|
+
- `/break-loop` — deep analysis after debugging
|
|
150
84
|
|
|
151
85
|
---
|
|
152
86
|
|
|
153
87
|
## Core Principle
|
|
154
88
|
|
|
155
|
-
> **
|
|
156
|
-
|
|
157
|
-
Complete work = Code + Docs + Tests + Verification
|
|
89
|
+
> **Finish-work is pure bookkeeping.** Code is already committed before this runs. If the working tree is dirty, this prompt refuses to proceed.
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
/* global process */
|
|
1
2
|
/**
|
|
2
3
|
* Trellis Context Injection Plugin
|
|
3
4
|
*
|
|
@@ -259,6 +260,19 @@ function shellQuote(value) {
|
|
|
259
260
|
return `'${String(value).replace(/'/g, "'\\''")}'`
|
|
260
261
|
}
|
|
261
262
|
|
|
263
|
+
function powershellQuote(value) {
|
|
264
|
+
return `'${String(value).replace(/'/g, "''")}'`
|
|
265
|
+
}
|
|
266
|
+
|
|
267
|
+
function buildTrellisContextPrefix(contextKey, hostPlatform = process.platform) {
|
|
268
|
+
if (hostPlatform === "win32") {
|
|
269
|
+
// OpenCode's Windows Bash tool runs through PowerShell, not a POSIX shell.
|
|
270
|
+
return `$env:TRELLIS_CONTEXT_ID = ${powershellQuote(contextKey)}; `
|
|
271
|
+
}
|
|
272
|
+
|
|
273
|
+
return `export TRELLIS_CONTEXT_ID=${shellQuote(contextKey)}; `
|
|
274
|
+
}
|
|
275
|
+
|
|
262
276
|
function getBashCommandKey(args) {
|
|
263
277
|
if (!args || typeof args !== "object") return null
|
|
264
278
|
if (typeof args.command === "string") return "command"
|
|
@@ -271,7 +285,8 @@ function commandStartsWithTrellisContext(command) {
|
|
|
271
285
|
return (
|
|
272
286
|
/^TRELLIS_CONTEXT_ID\s*=/.test(firstCommand) ||
|
|
273
287
|
/^export\s+TRELLIS_CONTEXT_ID\s*=/.test(firstCommand) ||
|
|
274
|
-
/^env\s+(?:[^\s=]+\s+)*TRELLIS_CONTEXT_ID\s*=/.test(firstCommand)
|
|
288
|
+
/^env\s+(?:[^\s=]+\s+)*TRELLIS_CONTEXT_ID\s*=/.test(firstCommand) ||
|
|
289
|
+
/^\$env:TRELLIS_CONTEXT_ID\s*=/i.test(firstCommand)
|
|
275
290
|
)
|
|
276
291
|
}
|
|
277
292
|
|
|
@@ -279,7 +294,7 @@ function commandStartsWithTrellisContext(command) {
|
|
|
279
294
|
* OpenCode TUI may not expose OPENCODE_RUN_ID to Bash. The plugin hook still
|
|
280
295
|
* receives session identity, so inject it into Bash commands before execution.
|
|
281
296
|
*/
|
|
282
|
-
function injectTrellisContextIntoBash(ctx, input, output) {
|
|
297
|
+
function injectTrellisContextIntoBash(ctx, input, output, hostPlatform) {
|
|
283
298
|
const args = output?.args
|
|
284
299
|
const commandKey = getBashCommandKey(args)
|
|
285
300
|
if (!commandKey) return false
|
|
@@ -291,7 +306,7 @@ function injectTrellisContextIntoBash(ctx, input, output) {
|
|
|
291
306
|
const contextKey = ctx.getContextKey(input)
|
|
292
307
|
if (!contextKey) return false
|
|
293
308
|
|
|
294
|
-
args[commandKey] =
|
|
309
|
+
args[commandKey] = `${buildTrellisContextPrefix(contextKey, hostPlatform)}${command}`
|
|
295
310
|
return true
|
|
296
311
|
}
|
|
297
312
|
|
|
@@ -300,7 +315,7 @@ function injectTrellisContextIntoBash(ctx, input, output) {
|
|
|
300
315
|
// (packages/opencode/src/plugin/index.ts — `for ([_, fn] of Object.entries(mod)) await fn(input)`);
|
|
301
316
|
// the previous `{ id, server }` object shape failed with
|
|
302
317
|
// `TypeError: fn is not a function` in 1.2.x.
|
|
303
|
-
export default async ({ directory }) => {
|
|
318
|
+
export default async ({ directory, platform: hostPlatform = process.platform }) => {
|
|
304
319
|
const ctx = new TrellisContext(directory)
|
|
305
320
|
debugLog("inject", "Plugin loaded, directory:", directory)
|
|
306
321
|
|
|
@@ -311,7 +326,7 @@ export default async ({ directory }) => {
|
|
|
311
326
|
|
|
312
327
|
const toolName = input?.tool?.toLowerCase()
|
|
313
328
|
if (toolName === "bash") {
|
|
314
|
-
if (injectTrellisContextIntoBash(ctx, input, output)) {
|
|
329
|
+
if (injectTrellisContextIntoBash(ctx, input, output, hostPlatform)) {
|
|
315
330
|
debugLog("inject", "Injected TRELLIS_CONTEXT_ID into Bash command")
|
|
316
331
|
}
|
|
317
332
|
return
|
|
@@ -81,7 +81,12 @@ const FALLBACK_BREADCRUMBS = {
|
|
|
81
81
|
"Per-turn only; does not carry forward; do NOT invent an override the " +
|
|
82
82
|
"user did not say.",
|
|
83
83
|
completed:
|
|
84
|
-
"
|
|
84
|
+
"Code committed via Phase 3.4; run `/trellis:finish-work` to wrap up " +
|
|
85
|
+
"(archive task + record session).\n" +
|
|
86
|
+
"If you reach this state with uncommitted code, return to Phase 3.4 " +
|
|
87
|
+
"first — `/finish-work` refuses to run on a dirty working tree.\n" +
|
|
88
|
+
"`task.py archive` deletes runtime session files that point at the " +
|
|
89
|
+
"archived task.",
|
|
85
90
|
}
|
|
86
91
|
|
|
87
92
|
/**
|
|
@@ -191,7 +191,12 @@ _FALLBACK_BREADCRUMBS = {
|
|
|
191
191
|
"user did not say."
|
|
192
192
|
),
|
|
193
193
|
"completed": (
|
|
194
|
-
"
|
|
194
|
+
"Code committed via Phase 3.4; run `/trellis:finish-work` to wrap up "
|
|
195
|
+
"(archive task + record session).\n"
|
|
196
|
+
"If you reach this state with uncommitted code, return to Phase 3.4 "
|
|
197
|
+
"first — `/finish-work` refuses to run on a dirty working tree.\n"
|
|
198
|
+
"`task.py archive` deletes runtime session files that point at the "
|
|
199
|
+
"archived task."
|
|
195
200
|
),
|
|
196
201
|
}
|
|
197
202
|
|
|
@@ -322,24 +322,12 @@ def cmd_archive(args: argparse.Namespace) -> int:
|
|
|
322
322
|
data["completedAt"] = today
|
|
323
323
|
write_json(task_json_path, data)
|
|
324
324
|
|
|
325
|
-
# Handle subtask relationships on archive
|
|
326
|
-
|
|
325
|
+
# Handle subtask relationships on archive.
|
|
326
|
+
# Keep this task in its parent's children list so progress
|
|
327
|
+
# counters (children_progress) stay consistent — children
|
|
328
|
+
# missing from the active set are treated as completed.
|
|
327
329
|
task_children = data.get("children", [])
|
|
328
330
|
|
|
329
|
-
# If this is a child, remove from parent's children list
|
|
330
|
-
if task_parent:
|
|
331
|
-
parent_dir = find_task_by_name(task_parent, tasks_dir)
|
|
332
|
-
if parent_dir:
|
|
333
|
-
parent_json = parent_dir / FILE_TASK_JSON
|
|
334
|
-
if parent_json.is_file():
|
|
335
|
-
parent_data = read_json(parent_json)
|
|
336
|
-
if parent_data:
|
|
337
|
-
parent_children = parent_data.get("children", [])
|
|
338
|
-
if dir_name in parent_children:
|
|
339
|
-
parent_children.remove(dir_name)
|
|
340
|
-
parent_data["children"] = parent_children
|
|
341
|
-
write_json(parent_json, parent_data)
|
|
342
|
-
|
|
343
331
|
# If this is a parent, clear parent field in all children
|
|
344
332
|
if task_children:
|
|
345
333
|
for child_name in task_children:
|
|
@@ -102,8 +102,11 @@ def children_progress(
|
|
|
102
102
|
"""
|
|
103
103
|
if not children:
|
|
104
104
|
return ""
|
|
105
|
+
# A child missing from active statuses has been archived (cmd_archive
|
|
106
|
+
# sets status=completed before moving the dir). Count it as done so
|
|
107
|
+
# parent progress doesn't regress when children are archived.
|
|
105
108
|
done = sum(
|
|
106
109
|
1 for c in children
|
|
107
|
-
if all_statuses.get(c) in ("completed", "done")
|
|
110
|
+
if c not in all_statuses or all_statuses.get(c) in ("completed", "done")
|
|
108
111
|
)
|
|
109
112
|
return f" [{done}/{len(children)} done]"
|
|
@@ -120,7 +120,8 @@ Phase 3: Finish → distill lessons + wrap-up
|
|
|
120
120
|
- 3.1 Quality verification `[required · repeatable]`
|
|
121
121
|
- 3.2 Debug retrospective `[on demand]`
|
|
122
122
|
- 3.3 Spec update `[required · once]`
|
|
123
|
-
- 3.4
|
|
123
|
+
- 3.4 Commit changes `[required · once]`
|
|
124
|
+
- 3.5 Wrap-up reminder
|
|
124
125
|
|
|
125
126
|
### Rules
|
|
126
127
|
|
|
@@ -442,7 +443,57 @@ Load the `trellis-update-spec` skill and review whether this task produced new k
|
|
|
442
443
|
|
|
443
444
|
Update the docs under `.trellis/spec/` accordingly. Even if the conclusion is "nothing to update", walk through the judgment.
|
|
444
445
|
|
|
445
|
-
#### 3.4
|
|
446
|
+
#### 3.4 Commit changes `[required · once]`
|
|
447
|
+
|
|
448
|
+
The AI drives a batched commit of this task's code changes so `/finish-work` can run cleanly afterwards. Goal: produce work commits FIRST, then bookkeeping (archive + journal) commits land after — never interleaved.
|
|
449
|
+
|
|
450
|
+
**Step-by-step**:
|
|
451
|
+
|
|
452
|
+
1. **Inspect dirty state**:
|
|
453
|
+
```bash
|
|
454
|
+
git status --porcelain
|
|
455
|
+
```
|
|
456
|
+
Snapshot every dirty path. If the working tree is clean, skip to 3.5.
|
|
457
|
+
|
|
458
|
+
2. **Learn commit style** from recent history (so drafted messages blend in):
|
|
459
|
+
```bash
|
|
460
|
+
git log --oneline -5
|
|
461
|
+
```
|
|
462
|
+
Note the prefix convention (`feat:` / `fix:` / `chore:` / `docs:` ...), language (中文/English), and length style.
|
|
463
|
+
|
|
464
|
+
3. **Classify dirty files into two groups**:
|
|
465
|
+
- **AI-edited this session** — files you wrote/edited via Edit/Write/Bash tool calls in this session. You know what changed and why.
|
|
466
|
+
- **Unrecognized** — dirty files you did NOT touch this session (could be the user's manual edits, leftover WIP from a previous session, or unrelated work). Do NOT silently include these.
|
|
467
|
+
|
|
468
|
+
4. **Draft a commit plan**. Group AI-edited files into logical commits (1 commit per coherent change unit, not 1 commit per file). Each entry: `<commit message>` + file list. List unrecognized files separately at the bottom.
|
|
469
|
+
|
|
470
|
+
5. **Present the plan once, ask for one-shot confirmation**. Format:
|
|
471
|
+
```
|
|
472
|
+
Proposed commits (in order):
|
|
473
|
+
1. <message>
|
|
474
|
+
- <file>
|
|
475
|
+
- <file>
|
|
476
|
+
2. <message>
|
|
477
|
+
- <file>
|
|
478
|
+
|
|
479
|
+
Unrecognized dirty files (NOT in any commit — confirm include/exclude):
|
|
480
|
+
- <file>
|
|
481
|
+
- <file>
|
|
482
|
+
|
|
483
|
+
Reply 'ok' / '行' to execute. Reply with edits, or '我自己来' / 'manual' to abort.
|
|
484
|
+
```
|
|
485
|
+
|
|
486
|
+
6. **On confirmation**: run `git add <files>` + `git commit -m "<msg>"` for each batch in order. Do not amend. Do not push.
|
|
487
|
+
|
|
488
|
+
7. **On rejection** (user replies "不行" / "我自己来" / "manual" / any pushback on the plan): stop. Do not attempt a second plan. The user will commit by hand; you skip ahead to 3.5 once they confirm.
|
|
489
|
+
|
|
490
|
+
**Rules**:
|
|
491
|
+
- No `git commit --amend` anywhere — three-stage three-commit flow (work commits → archive commit → journal commit).
|
|
492
|
+
- Never push to remote in this step.
|
|
493
|
+
- If the user wants different message wording but accepts the file grouping, edit the message and re-confirm once — but if they reject the grouping, exit to manual mode.
|
|
494
|
+
- The batched plan is one prompt; do not prompt per commit.
|
|
495
|
+
|
|
496
|
+
#### 3.5 Wrap-up reminder
|
|
446
497
|
|
|
447
498
|
After the above, remind the user they can run `/finish-work` to wrap up (archive the task, record the session).
|
|
448
499
|
|
|
@@ -483,5 +534,7 @@ User override (per-turn escape hatch): if the user's CURRENT message explicitly
|
|
|
483
534
|
[/workflow-state:in_progress]
|
|
484
535
|
|
|
485
536
|
[workflow-state:completed]
|
|
486
|
-
|
|
537
|
+
Code committed via Phase 3.4; run `/trellis:finish-work` to wrap up (archive task + record session).
|
|
538
|
+
If you reach this state with uncommitted code, return to Phase 3.4 first — `/finish-work` refuses to run on a dirty working tree.
|
|
539
|
+
`task.py archive` deletes runtime session files that point at the archived task.
|
|
487
540
|
[/workflow-state:completed]
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"template-hash.d.ts","sourceRoot":"","sources":["../../src/utils/template-hash.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAQH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAe5D;;;;;GAKG;AACH,wBAAgB,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAGnD;AAoBD;;;;;;;;GAQG;AACH,wBAAgB,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,cAAc,CA6BtD;AAED;;;;GAIG;AACH,wBAAgB,UAAU,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,cAAc,GAAG,IAAI,CAOpE;AAED;;;;;GAKG;AACH,wBAAgB,YAAY,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,IAAI,CAQ1E;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,GAAG,IAAI,CAU1E;AAED;;GAEG;AACH,wBAAgB,UAAU,CAAC,GAAG,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,GAAG,IAAI,CAKlE;AAED;;GAEG;AACH,wBAAgB,UAAU,CACxB,GAAG,EAAE,MAAM,EACX,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,MAAM,GACd,IAAI,CASN;AAED;;;;;;;GAOG;AACH,wBAAgB,kBAAkB,CAChC,GAAG,EAAE,MAAM,EACX,YAAY,EAAE,MAAM,EACpB,MAAM,EAAE,cAAc,GACrB,OAAO,CAsBT;AAED;;;;;;;;GAQG;AACH,wBAAgB,uBAAuB,CACrC,GAAG,EAAE,MAAM,EACX,YAAY,EAAE,MAAM,EACpB,eAAe,EAAE,MAAM,GACtB,OAAO,CAST;AAED;;;;;;;GAOG;AACH,wBAAgB,qBAAqB,CACnC,GAAG,EAAE,MAAM,EACX,aAAa,EAAE,MAAM,EAAE,EACvB,MAAM,EAAE,cAAc,GACrB,GAAG,CAAC,MAAM,EAAE,OAAO,CAAC,CAQtB;
|
|
1
|
+
{"version":3,"file":"template-hash.d.ts","sourceRoot":"","sources":["../../src/utils/template-hash.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAQH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAe5D;;;;;GAKG;AACH,wBAAgB,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAGnD;AAoBD;;;;;;;;GAQG;AACH,wBAAgB,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,cAAc,CA6BtD;AAED;;;;GAIG;AACH,wBAAgB,UAAU,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,cAAc,GAAG,IAAI,CAOpE;AAED;;;;;GAKG;AACH,wBAAgB,YAAY,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,IAAI,CAQ1E;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,GAAG,IAAI,CAU1E;AAED;;GAEG;AACH,wBAAgB,UAAU,CAAC,GAAG,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,GAAG,IAAI,CAKlE;AAED;;GAEG;AACH,wBAAgB,UAAU,CACxB,GAAG,EAAE,MAAM,EACX,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,MAAM,GACd,IAAI,CASN;AAED;;;;;;;GAOG;AACH,wBAAgB,kBAAkB,CAChC,GAAG,EAAE,MAAM,EACX,YAAY,EAAE,MAAM,EACpB,MAAM,EAAE,cAAc,GACrB,OAAO,CAsBT;AAED;;;;;;;;GAQG;AACH,wBAAgB,uBAAuB,CACrC,GAAG,EAAE,MAAM,EACX,YAAY,EAAE,MAAM,EACpB,eAAe,EAAE,MAAM,GACtB,OAAO,CAST;AAED;;;;;;;GAOG;AACH,wBAAgB,qBAAqB,CACnC,GAAG,EAAE,MAAM,EACX,aAAa,EAAE,MAAM,EAAE,EACvB,MAAM,EAAE,cAAc,GACrB,GAAG,CAAC,MAAM,EAAE,OAAO,CAAC,CAQtB;AA0ED;;;;;;;;;GASG;AACH,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAwCpD"}
|
|
@@ -15,7 +15,7 @@
|
|
|
15
15
|
import { createHash } from "node:crypto";
|
|
16
16
|
import fs from "node:fs";
|
|
17
17
|
import path from "node:path";
|
|
18
|
-
import { DIR_NAMES } from "../constants/paths.js";
|
|
18
|
+
import { DIR_NAMES, FILE_NAMES } from "../constants/paths.js";
|
|
19
19
|
import { ALL_MANAGED_DIRS } from "../configurators/index.js";
|
|
20
20
|
import { toPosix } from "./posix.js";
|
|
21
21
|
/** File name for storing template hashes */
|
|
@@ -207,6 +207,8 @@ export function getModificationStatus(cwd, relativePaths, hashes) {
|
|
|
207
207
|
* Directories to scan for template files during init (derived from platform registry)
|
|
208
208
|
*/
|
|
209
209
|
const TEMPLATE_DIRS = ALL_MANAGED_DIRS;
|
|
210
|
+
/** Root-level template files written by init and managed by update. */
|
|
211
|
+
const TEMPLATE_FILES = [FILE_NAMES.AGENTS];
|
|
210
212
|
/**
|
|
211
213
|
* Patterns to exclude from hash tracking
|
|
212
214
|
*/
|
|
@@ -272,6 +274,22 @@ function collectFiles(cwd, dir, relativeTo = "") {
|
|
|
272
274
|
*/
|
|
273
275
|
export function initializeHashes(cwd) {
|
|
274
276
|
const hashes = {};
|
|
277
|
+
for (const relativePath of TEMPLATE_FILES) {
|
|
278
|
+
if (shouldExcludeFromHash(relativePath)) {
|
|
279
|
+
continue;
|
|
280
|
+
}
|
|
281
|
+
const fullPath = path.join(cwd, relativePath);
|
|
282
|
+
if (!fs.existsSync(fullPath)) {
|
|
283
|
+
continue;
|
|
284
|
+
}
|
|
285
|
+
try {
|
|
286
|
+
const content = fs.readFileSync(fullPath, "utf-8");
|
|
287
|
+
hashes[relativePath] = computeHash(content);
|
|
288
|
+
}
|
|
289
|
+
catch {
|
|
290
|
+
// Skip files that can't be read (binary, etc.)
|
|
291
|
+
}
|
|
292
|
+
}
|
|
275
293
|
// Collect all template files
|
|
276
294
|
for (const dir of TEMPLATE_DIRS) {
|
|
277
295
|
const files = collectFiles(cwd, dir);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"template-hash.js","sourceRoot":"","sources":["../../src/utils/template-hash.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;AAE7B,OAAO,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;
|
|
1
|
+
{"version":3,"file":"template-hash.js","sourceRoot":"","sources":["../../src/utils/template-hash.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED