acstack 0.48.5 → 0.49.1
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/.claude-plugin/plugin.json +1 -1
- package/assets/terminal-workspace/helpers/acstack-bridge +185 -0
- package/assets/terminal-workspace/helpers/acstack-clip +88 -0
- package/assets/terminal-workspace/helpers/acstack-dash +25 -0
- package/assets/terminal-workspace/helpers/acstack-db +86 -0
- package/assets/terminal-workspace/helpers/acstack-diff +268 -0
- package/assets/terminal-workspace/helpers/acstack-edit +25 -0
- package/assets/terminal-workspace/helpers/acstack-gh +47 -0
- package/assets/terminal-workspace/helpers/acstack-herdr-renumber +93 -0
- package/assets/terminal-workspace/helpers/acstack-herdr-tab +49 -0
- package/assets/terminal-workspace/helpers/acstack-md +401 -0
- package/assets/terminal-workspace/helpers/acstack-md-lib +219 -0
- package/assets/terminal-workspace/helpers/acstack-open +217 -0
- package/assets/terminal-workspace/helpers/acstack-popup +13 -0
- package/assets/terminal-workspace/helpers/acstack-view +33 -0
- package/assets/terminal-workspace/helpers/xclip +31 -0
- package/assets/terminal-workspace/lib/apply-ghdash.sh +78 -0
- package/assets/terminal-workspace/lib/apply-herdr-numbers.sh +49 -0
- package/assets/terminal-workspace/lib/apply-herdr.sh +308 -0
- package/assets/terminal-workspace/lib/apply-tools.sh +293 -0
- package/assets/terminal-workspace/lib/apply-tuicr.sh +133 -0
- package/assets/terminal-workspace/lib/apply-yazi.sh +389 -0
- package/assets/terminal-workspace/lib/commands.sh +296 -0
- package/assets/terminal-workspace/lib/core.sh +184 -0
- package/assets/terminal-workspace/lib/helper-install.sh +35 -0
- package/assets/terminal-workspace/lib/pi-packages.sh +331 -0
- package/assets/terminal-workspace/lib/pi-state.sh +479 -0
- package/assets/terminal-workspace/lib/versions.sh +254 -0
- package/assets/terminal-workspace/setup.sh +24 -4637
- package/cli/dist/index.js +8 -4
- package/cli/dist/index.js.map +2 -2
- package/cli/package.json +1 -1
- package/package.json +1 -1
- package/skills/archive/SKILL.md +3 -0
- package/skills/grilling/SKILL.md +2 -1
- package/skills/handoff/SKILL.md +14 -14
- package/skills/handoff/launch-herdr.md +15 -4
- package/skills/implement/SKILL.md +19 -3
- package/skills/map/SKILL.md +24 -24
- package/skills/map/alignment.md +38 -0
package/cli/package.json
CHANGED
package/package.json
CHANGED
package/skills/archive/SKILL.md
CHANGED
|
@@ -131,6 +131,9 @@ dispose – closed issues are already the archive.
|
|
|
131
131
|
Also dispose of `acstack/handoffs/<name>/` if it exists. Consumed handoffs
|
|
132
132
|
hold conversation content and should not outlive the map they served.
|
|
133
133
|
|
|
134
|
+
Also dispose of `acstack/alignment-packs/<safe-map>/` if it exists. Alignment
|
|
135
|
+
packs are local review artifacts. Step 3 already verified the durable residue.
|
|
136
|
+
|
|
134
137
|
Delete the map's decision log, `<main checkout>/acstack/.decisions/<name>.tsv`,
|
|
135
138
|
on either tracker. Step 3 already extracted what it held. Leave the directory
|
|
136
139
|
and its `.gitignore` for the next map.
|
package/skills/grilling/SKILL.md
CHANGED
|
@@ -109,7 +109,8 @@ the tracker's `update` and `create` operations:
|
|
|
109
109
|
|
|
110
110
|
2. Create a node for each new question the answer surfaced, with `answers`
|
|
111
111
|
naming the node that surfaced it. Mark precise questions `open`; mark the
|
|
112
|
-
rest `fog`.
|
|
112
|
+
rest `fog`. If fog does not change the alignment artifact, write the
|
|
113
|
+
evidence or event that reopens it.
|
|
113
114
|
|
|
114
115
|
3. Invoke the `record-context` skill for each resolution – it decides whether
|
|
115
116
|
the decision earns an ADR, a glossary term, both, or neither.
|
package/skills/handoff/SKILL.md
CHANGED
|
@@ -146,8 +146,12 @@ conversation content, not project state, and must not be committable. Name it
|
|
|
146
146
|
nothing), where `<slug>` names the work and `<timestamp>` stops two handoffs
|
|
147
147
|
colliding.
|
|
148
148
|
|
|
149
|
-
|
|
150
|
-
|
|
149
|
+
Use a file-writing tool when your harness has one. Otherwise use a quoted
|
|
150
|
+
heredoc, `<<'EOF'`, so the shell does not expand the handoff text. An unquoted
|
|
151
|
+
heredoc can run backticked commands inside the note.
|
|
152
|
+
|
|
153
|
+
Its first line repeats the acknowledgement requirement verbatim, with
|
|
154
|
+
`<this-file>` replaced by the file's own path:
|
|
151
155
|
|
|
152
156
|
```text
|
|
153
157
|
Acknowledge before any other tool call. Run ~/.claude/acstack/bin/acstack handoff ack accept --file <this-file> "<one-line reason>", or ack decline --file <this-file> "<one-line reason>". The command writes <this-file>.ack, which the sender watches.
|
|
@@ -167,22 +171,19 @@ The launch prompt is a **single-line pointer at that file**, never the handoff
|
|
|
167
171
|
text itself. `herdr agent start` rejects newlines and tabs in its arguments.
|
|
168
172
|
|
|
169
173
|
## Every prompt opens with an acknowledgement
|
|
170
|
-
|
|
171
174
|
Every handoff prompt asks for the command.
|
|
172
175
|
|
|
173
176
|
There are two prompts, because the two destinations must say different things.
|
|
174
177
|
Use the matching one verbatim, and substitute only the handoff file path.
|
|
175
178
|
|
|
176
179
|
Each one is a single line. `herdr agent start` rejects newlines and tabs in its
|
|
177
|
-
arguments
|
|
178
|
-
line.
|
|
180
|
+
arguments, so the instruction and file pointer share that line.
|
|
179
181
|
|
|
180
|
-
**Fresh agent** – one launched for this handoff, into a new pane, worktree
|
|
181
|
-
tab, or
|
|
182
|
-
|
|
183
|
-
subagent – leaves the acknowledgement still owed.
|
|
182
|
+
**Fresh agent** – one launched for this handoff, into a new pane, worktree,
|
|
183
|
+
tab, or `--bg` session. It may read the handoff file before the ack command.
|
|
184
|
+
Every other tool call leaves the acknowledgement still owed.
|
|
184
185
|
|
|
185
|
-
> Before any other tool call,
|
|
186
|
+
> Before any other tool call, run ~/.claude/acstack/bin/acstack handoff ack accept --file <handoff-file> "<one-line reason>", or ack decline --file <handoff-file> "<one-line reason>". You may read <handoff-file> first. Then continue that work.
|
|
186
187
|
|
|
187
188
|
**Agent already running** – one reached by cross-session message. Its variant
|
|
188
189
|
of the opener is in [`running-agent.md`](running-agent.md).
|
|
@@ -208,12 +209,11 @@ Do not eyeball transcripts. The CLI watches for you:
|
|
|
208
209
|
--session-id <id> --cwd <dir> --token <token> --turns <n>
|
|
209
210
|
```
|
|
210
211
|
|
|
211
|
-
**Run the watcher in the background.**
|
|
212
|
-
|
|
213
|
-
lands, and the harness surfaces the watcher's exit on its own. Never sit in a
|
|
212
|
+
**Run the watcher in the background.** The user can keep talking while the
|
|
213
|
+
handoff lands. The harness surfaces the watcher's exit. Never sit in a
|
|
214
214
|
foreground wait.
|
|
215
215
|
|
|
216
|
-
[`watch.md`](watch.md) gives every flag, `--fresh
|
|
216
|
+
[`watch.md`](watch.md) gives every flag, including `--fresh`. When the watcher
|
|
217
217
|
exits, read [`outcomes.md`](outcomes.md) for what its result means.
|
|
218
218
|
|
|
219
219
|
## Silence the context-pressure nudge
|
|
@@ -170,15 +170,26 @@ blocked state instead of polling by hand:
|
|
|
170
170
|
herdr agent wait <name> --until blocked --timeout <ms>
|
|
171
171
|
```
|
|
172
172
|
|
|
173
|
-
|
|
174
|
-
|
|
173
|
+
At the trust dialog, `agent_not_ready` means the session has not reached the
|
|
174
|
+
prompt yet. Wait again or read `herdr agent get <name>` before sending keys.
|
|
175
|
+
A `blocked` result means the trust dialog is ready.
|
|
176
|
+
|
|
177
|
+
On `blocked`, accept the dialog with:
|
|
178
|
+
|
|
179
|
+
```bash
|
|
180
|
+
herdr agent send-keys <name> down
|
|
181
|
+
herdr agent send-keys <name> enter
|
|
182
|
+
```
|
|
183
|
+
|
|
184
|
+
Then re-check by waiting for the session to start working:
|
|
175
185
|
|
|
176
186
|
```bash
|
|
177
187
|
herdr agent wait <name> --until working --timeout <ms>
|
|
178
188
|
```
|
|
179
189
|
|
|
180
|
-
If either wait times out,
|
|
181
|
-
`herdr agent get <name>` rather than
|
|
190
|
+
If either wait times out, or the agent reports `blocked` after the keys, read the
|
|
191
|
+
agent's current state directly with `herdr agent get <name>` rather than
|
|
192
|
+
guessing.
|
|
182
193
|
|
|
183
194
|
Throughout this section `<name>` is the pane ID instead, whenever the launch
|
|
184
195
|
timed out – see *When `agent start` times out*, above.
|
|
@@ -44,6 +44,15 @@ These are the workable nodes: open, unblocked, and containing no decision.
|
|
|
44
44
|
Pull them regardless of depth – work can hang anywhere, including straight
|
|
45
45
|
off the root.
|
|
46
46
|
|
|
47
|
+
Before claiming one, check whether the map is ready to build from:
|
|
48
|
+
|
|
49
|
+
- If any `fog` node changes the alignment artifact, stop and point the user at
|
|
50
|
+
`/acstack:map`.
|
|
51
|
+
- If `workflow.alignment_packs.approval_gate` is true and no reviewer approved
|
|
52
|
+
the alignment artifact, stop and point the user at `/acstack:map`.
|
|
53
|
+
- If a `fog` node needs later evidence and does not change the artifact, leave
|
|
54
|
+
it on the map with its reopening trigger.
|
|
55
|
+
|
|
47
56
|
If the frontier holds only `hitl` nodes – human in the loop, meaning a
|
|
48
57
|
person must answer them – stop and point the user at `/acstack:map`. Those
|
|
49
58
|
need a human, not a pipeline.
|
|
@@ -104,6 +113,11 @@ over the relevant code. Use `Explore` on Claude Code and `scout` on pi.
|
|
|
104
113
|
Use as many as there are distinct places to look, not a fixed count. Act on
|
|
105
114
|
what they find.
|
|
106
115
|
|
|
116
|
+
Downstream pipeline subagents start fresh. Pass the source, test, and doc paths
|
|
117
|
+
you already discovered into each test-writer, task-executor, task-checker, audit,
|
|
118
|
+
polish, and verifier prompt. Tell them to read those paths directly instead of
|
|
119
|
+
searching the codebase again.
|
|
120
|
+
|
|
107
121
|
### 5. Execute within the claim
|
|
108
122
|
|
|
109
123
|
The pipeline's state lives inside the claim, not on the node. For each
|
|
@@ -186,9 +200,11 @@ With no map, skip the tracker write – still invoke `record-context` when a
|
|
|
186
200
|
decision landed. With a map, then:
|
|
187
201
|
|
|
188
202
|
- Invoke `record-context` – implementation decisions can earn ADRs too.
|
|
189
|
-
-
|
|
190
|
-
|
|
191
|
-
|
|
203
|
+
- Classify anything the work surfaced:
|
|
204
|
+
- Agent-clearable fog gets research, tests, or a throwaway prototype.
|
|
205
|
+
- Design-changing fog becomes a `hitl` node and returns to `/acstack:map`.
|
|
206
|
+
- Local fog that does not change the artifact stays inside the claim notes.
|
|
207
|
+
- Rebuild or rerun the alignment review when the work changes the artifact.
|
|
192
208
|
- Recompute the frontier – resolutions unblock nodes.
|
|
193
209
|
|
|
194
210
|
### 7. Build verification
|
package/skills/map/SKILL.md
CHANGED
|
@@ -20,12 +20,8 @@ Nodes live behind a pluggable tracker. A backend declares four operations –
|
|
|
20
20
|
create, read, update, list. ACStack builds everything else from those four:
|
|
21
21
|
frontier, claim, resolve and walk.
|
|
22
22
|
|
|
23
|
-
Two backends ship
|
|
24
|
-
|
|
25
|
-
| Backend | Doc | When |
|
|
26
|
-
| ------- | --- | ---- |
|
|
27
|
-
| GitHub issues | `trackers/github.md` | first choice when `gh` holds a login for the repo's GitHub remote |
|
|
28
|
-
| Files | `trackers/files.md` | the fallback – no auth, offline, any remote |
|
|
23
|
+
Two backends ship in this skill's directory: `trackers/github.md` for repos
|
|
24
|
+
with GitHub auth, and `trackers/files.md` as the fallback.
|
|
29
25
|
|
|
30
26
|
`workflow.maps.tracker` in `acstack/project.yaml` (`github` or `files`) records
|
|
31
27
|
the project's choice. If the key names a backend, read the matching doc and use
|
|
@@ -34,7 +30,6 @@ you first write the map's nodes down.
|
|
|
34
30
|
|
|
35
31
|
Recommend `github` when the repo qualifies, `files` otherwise. Confirm the
|
|
36
32
|
choice with the user. Then write the key, so later sessions need not re-decide.
|
|
37
|
-
|
|
38
33
|
## Which mode
|
|
39
34
|
|
|
40
35
|
One command runs two modes, and what already exists picks between them. Check
|
|
@@ -45,10 +40,8 @@ If `$ARGUMENTS` names a map, or exactly one exists, work its frontier – the
|
|
|
45
40
|
nodes ready to work now. If none exists, chart. If several exist and
|
|
46
41
|
`$ARGUMENTS` does not pick one, ask.
|
|
47
42
|
|
|
48
|
-
There are no tiers
|
|
49
|
-
|
|
50
|
-
One question is a small map or no map at all. Fifty questions is a long
|
|
51
|
-
effort. Nothing declares which.
|
|
43
|
+
There are no tiers. One question is a small map or no map. Fifty questions is
|
|
44
|
+
still one map.
|
|
52
45
|
|
|
53
46
|
## Charting
|
|
54
47
|
|
|
@@ -71,18 +64,18 @@ effort. Nothing declares which.
|
|
|
71
64
|
sharp. The test is whether you can *state* the question precisely, not
|
|
72
65
|
whether you can answer it.
|
|
73
66
|
|
|
74
|
-
|
|
67
|
+
5. **Classify fog.** Read `alignment.md`. Blocking fog changes the alignment
|
|
68
|
+
artifact. Deferred fog does not.
|
|
75
69
|
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
- **No fog surfaced** – the way was already clear. No map. Say so and proceed
|
|
79
|
-
to the work.
|
|
70
|
+
### Progressive materialisation
|
|
80
71
|
|
|
81
|
-
|
|
82
|
-
`record-context` on each decision. No map – there is nothing to resume.
|
|
72
|
+
The machinery appears only when it must persist. After the opening grill:
|
|
83
73
|
|
|
84
|
-
- **
|
|
85
|
-
|
|
74
|
+
- **No fog surfaced** – say so and proceed to the work
|
|
75
|
+
- **At most one session's worth** – settle it in conversation and invoke
|
|
76
|
+
`record-context` on each decision
|
|
77
|
+
- **More than one session's worth** – materialise the map and work the frontier
|
|
78
|
+
across sessions
|
|
86
79
|
|
|
87
80
|
The test is mechanical. Will the fog outlive this session?
|
|
88
81
|
|
|
@@ -148,6 +141,8 @@ operation. First the root:
|
|
|
148
141
|
diagrams below. A parent draws its subtree, so nothing can draw one earlier.
|
|
149
142
|
The root is a parent too, and it draws the whole map.
|
|
150
143
|
|
|
144
|
+
- Apply `alignment.md` after diagrams are current. Build the artifact, run the
|
|
145
|
+
review gate, and start implementation only after approval.
|
|
151
146
|
- On the files backend, suggest adding `acstack/maps/` to `.gitignore`
|
|
152
147
|
(`trackers/files.md` gives the reason).
|
|
153
148
|
|
|
@@ -208,10 +203,12 @@ the list, marked `skip: <reason>`.
|
|
|
208
203
|
5. **After every resolution**, in order:
|
|
209
204
|
- Invoke `record-context`
|
|
210
205
|
- Create nodes for anything the resolution surfaced
|
|
206
|
+
- Classify new fog by whether it changes the alignment artifact
|
|
211
207
|
- Create the critique node when the resolved node changed the frontend,
|
|
212
208
|
per `frontend.md`
|
|
213
209
|
- Regenerate the diagram on the resolved node's parent (see Regenerating
|
|
214
210
|
diagrams)
|
|
211
|
+
- Rebuild or rerun the alignment review when the artifact changes
|
|
215
212
|
- Recompute the frontier
|
|
216
213
|
|
|
217
214
|
The regeneration comes after the new nodes exist. A surfaced node hangs
|
|
@@ -238,10 +235,13 @@ diagram).
|
|
|
238
235
|
|
|
239
236
|
## Done
|
|
240
237
|
|
|
241
|
-
The map clears when the frontier is empty and no fog remains.
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
238
|
+
The map clears when the frontier is empty and no fog remains. Deferred fog can
|
|
239
|
+
let implementation start, but archive still needs an answer or an out-of-scope
|
|
240
|
+
resolution.
|
|
241
|
+
|
|
242
|
+
The durable residue is what the map leaves behind – the living specs through
|
|
243
|
+
commit-time sync, the ADRs and glossary entries through `record-context`. You
|
|
244
|
+
have already extracted it along the way.
|
|
245
245
|
|
|
246
246
|
Report what the map settled. Point at anything the map left `out-of-scope`.
|
|
247
247
|
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
# Alignment review
|
|
2
|
+
|
|
3
|
+
The alignment artifact is the human-readable end-state view that the CLI renders from the map.
|
|
4
|
+
|
|
5
|
+
## Fog classes
|
|
6
|
+
|
|
7
|
+
- Blocking fog changes the artifact
|
|
8
|
+
- Deferred fog needs later evidence, or sits below the level the artifact must settle
|
|
9
|
+
- Clear blocking fog before implementation starts
|
|
10
|
+
- Leave deferred fog on the map with the evidence or event that reopens it
|
|
11
|
+
- Never defer fog because asking feels inconvenient
|
|
12
|
+
|
|
13
|
+
## Review gate
|
|
14
|
+
|
|
15
|
+
Build the artifact after diagrams are current:
|
|
16
|
+
|
|
17
|
+
```bash
|
|
18
|
+
~/.claude/acstack/bin/acstack map --map <name>
|
|
19
|
+
```
|
|
20
|
+
|
|
21
|
+
The artifact is disposable. The map remains the source of truth.
|
|
22
|
+
|
|
23
|
+
Run the review before implementation when `workflow.alignment_packs.approval_gate` is true:
|
|
24
|
+
|
|
25
|
+
```bash
|
|
26
|
+
~/.claude/acstack/bin/acstack align-viewer --map <name>
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
If the review requests changes, read the feedback file the command prints.
|
|
30
|
+
Update the map, regenerate the diagrams, and rerun the review.
|
|
31
|
+
|
|
32
|
+
Start implementation only after the reviewer approves the artifact, or after the project disables the approval gate.
|
|
33
|
+
|
|
34
|
+
## New fog during implementation
|
|
35
|
+
|
|
36
|
+
- If new fog changes the artifact, return to `/acstack:map`
|
|
37
|
+
- If new fog does not change the artifact, keep working with a local note
|
|
38
|
+
- Rebuild or rerun the review when implementation changes the artifact
|