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.
Files changed (40) hide show
  1. package/.claude-plugin/plugin.json +1 -1
  2. package/assets/terminal-workspace/helpers/acstack-bridge +185 -0
  3. package/assets/terminal-workspace/helpers/acstack-clip +88 -0
  4. package/assets/terminal-workspace/helpers/acstack-dash +25 -0
  5. package/assets/terminal-workspace/helpers/acstack-db +86 -0
  6. package/assets/terminal-workspace/helpers/acstack-diff +268 -0
  7. package/assets/terminal-workspace/helpers/acstack-edit +25 -0
  8. package/assets/terminal-workspace/helpers/acstack-gh +47 -0
  9. package/assets/terminal-workspace/helpers/acstack-herdr-renumber +93 -0
  10. package/assets/terminal-workspace/helpers/acstack-herdr-tab +49 -0
  11. package/assets/terminal-workspace/helpers/acstack-md +401 -0
  12. package/assets/terminal-workspace/helpers/acstack-md-lib +219 -0
  13. package/assets/terminal-workspace/helpers/acstack-open +217 -0
  14. package/assets/terminal-workspace/helpers/acstack-popup +13 -0
  15. package/assets/terminal-workspace/helpers/acstack-view +33 -0
  16. package/assets/terminal-workspace/helpers/xclip +31 -0
  17. package/assets/terminal-workspace/lib/apply-ghdash.sh +78 -0
  18. package/assets/terminal-workspace/lib/apply-herdr-numbers.sh +49 -0
  19. package/assets/terminal-workspace/lib/apply-herdr.sh +308 -0
  20. package/assets/terminal-workspace/lib/apply-tools.sh +293 -0
  21. package/assets/terminal-workspace/lib/apply-tuicr.sh +133 -0
  22. package/assets/terminal-workspace/lib/apply-yazi.sh +389 -0
  23. package/assets/terminal-workspace/lib/commands.sh +296 -0
  24. package/assets/terminal-workspace/lib/core.sh +184 -0
  25. package/assets/terminal-workspace/lib/helper-install.sh +35 -0
  26. package/assets/terminal-workspace/lib/pi-packages.sh +331 -0
  27. package/assets/terminal-workspace/lib/pi-state.sh +479 -0
  28. package/assets/terminal-workspace/lib/versions.sh +254 -0
  29. package/assets/terminal-workspace/setup.sh +24 -4637
  30. package/cli/dist/index.js +8 -4
  31. package/cli/dist/index.js.map +2 -2
  32. package/cli/package.json +1 -1
  33. package/package.json +1 -1
  34. package/skills/archive/SKILL.md +3 -0
  35. package/skills/grilling/SKILL.md +2 -1
  36. package/skills/handoff/SKILL.md +14 -14
  37. package/skills/handoff/launch-herdr.md +15 -4
  38. package/skills/implement/SKILL.md +19 -3
  39. package/skills/map/SKILL.md +24 -24
  40. package/skills/map/alignment.md +38 -0
package/cli/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "acstack-cli",
3
- "version": "0.48.5",
3
+ "version": "0.49.1",
4
4
  "description": "CLI for the ACStack agentic coding stack",
5
5
  "type": "module",
6
6
  "license": "MIT",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "acstack",
3
- "version": "0.48.5",
3
+ "version": "0.49.1",
4
4
  "private": false,
5
5
  "description": "Agentic coding stack with first-class Claude Code and pi support: skills, orchestrator instructions, and verification agents.",
6
6
  "license": "MIT",
@@ -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.
@@ -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.
@@ -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
- Its first line, above every heading, repeats the acknowledgement requirement
150
- verbatim, with `<this-file>` replaced by the file's own path:
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. So the instruction and the pointer at the handoff file share that one
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 or
181
- tab, or as a `--bg` session. Reading the handoff file is the one tool call
182
- allowed before the ack command. Every other tool call – a command, an edit, a
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, acknowledge this handoff by running ~/.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 to judge whether the work suits you, and nothing else until the command has run – the sender watches for the file it writes and cannot report this work as yours until it exists. Then continue that work.
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.** This session has stopped working on the
212
- task, but it must not lock up. The user can keep talking to it while the handoff
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` among them. When the watcher
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
- On `blocked`, accept the dialog with `herdr agent send-keys <name> enter`. Then
174
- re-check by waiting for the session to start working:
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, read the agent's current state directly with
181
- `herdr agent get <name>` rather than guessing.
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
- - Create nodes for anything the work surfaced (a question found mid-build is
190
- `hitl`, `--answers <this node>`).
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
@@ -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, each declared in this skill's directory:
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 and no complexity judgement.
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
- ### Progressive materialisation
67
+ 5. **Classify fog.** Read `alignment.md`. Blocking fog changes the alignment
68
+ artifact. Deferred fog does not.
75
69
 
76
- The machinery appears only when it has to persist. After the opening grill:
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
- - **At most one session's worth** – settle it in conversation. Invoke
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
- - **More than one session's worth** – materialise the map and work the
85
- frontier across sessions.
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. The durable
242
- residue is what the map leaves behind – the living specs through commit-time
243
- sync, the ADRs and glossary entries through `record-context`. You have already
244
- extracted it along the way.
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