acstack 0.50.3 → 0.51.0

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 (113) hide show
  1. package/.claude-plugin/plugin.json +1 -1
  2. package/README.md +14 -7
  3. package/agents/codex/frontend-verifier.toml +89 -6
  4. package/agents/codex/task-checker.toml +83 -2
  5. package/agents/codex/task-executor.toml +83 -1
  6. package/agents/codex/test-writer.toml +77 -1
  7. package/agents/frontend-verifier.md +13 -6
  8. package/agents/task-checker.md +7 -2
  9. package/agents/task-executor.md +7 -1
  10. package/agents/test-writer.md +1 -1
  11. package/assets/terminal-workspace/config.example.yaml +1 -1
  12. package/assets/terminal-workspace/helpers/acstack-md +12 -4
  13. package/assets/terminal-workspace/helpers/acstack-open +10 -2
  14. package/assets/terminal-workspace/lib/apply-yazi.sh +25 -0
  15. package/cli/dist/index.js +10142 -9369
  16. package/cli/dist/index.js.map +4 -4
  17. package/cli/package.json +1 -1
  18. package/docs/config-reference.md +113 -14
  19. package/docs/dev-setups.md +4 -4
  20. package/docs/terminal-workspace-keys.md +1 -0
  21. package/docs/terminal-workspace.md +1 -1
  22. package/docs/workflows.md +22 -16
  23. package/examples/design-doc/acstack/README.md +273 -0
  24. package/examples/design-doc/acstack/acstack.yaml +4 -0
  25. package/examples/design-doc/acstack/cli.yaml +5 -0
  26. package/examples/design-doc/acstack/design.yaml +39 -0
  27. package/examples/design-doc/acstack/github.yaml +12 -0
  28. package/examples/design-doc/acstack/host.yaml +14 -0
  29. package/examples/design-doc/acstack/journey.md +85 -0
  30. package/examples/design-doc/acstack/publication.md +16 -0
  31. package/examples/design-doc/acstack/review-runtime.yaml +24 -0
  32. package/examples/design-doc/acstack/skills.yaml +22 -0
  33. package/examples/design-doc/acstack/store.yaml +11 -0
  34. package/examples/design-doc/acstack/user.yaml +15 -0
  35. package/examples/design-doc/acstack/viewer.yaml +13 -0
  36. package/hooks/ac-writing-style-reminder.sh +7 -18
  37. package/hooks/communication-standard.mjs +17 -0
  38. package/hooks/communication-standard.sh +6 -0
  39. package/hooks/context-pressure.sh +2 -2
  40. package/hooks/hooks.json +18 -0
  41. package/hooks/lib/communication-standard.mjs +16 -0
  42. package/hooks/project-data.sh +38 -0
  43. package/hooks/session-start-handoff.sh +21 -7
  44. package/hooks/session-start.sh +9 -2
  45. package/orchestrator/AGENTS.md +25 -14
  46. package/output-styles/ac-writing-style.md +75 -276
  47. package/package.json +2 -1
  48. package/pi/agents/frontend-verifier.md +89 -6
  49. package/pi/agents/task-checker.md +83 -2
  50. package/pi/agents/task-executor.md +83 -1
  51. package/pi/agents/test-writer.md +77 -1
  52. package/pi/extension.ts +70 -12
  53. package/profiles/fullstack-python.yaml +1 -1
  54. package/profiles/node-typescript.yaml +1 -1
  55. package/profiles/python.yaml +1 -1
  56. package/skills/archive/SKILL.md +53 -36
  57. package/skills/bootstrap/SKILL.md +6 -6
  58. package/skills/bridge/SKILL-VM.md +11 -2
  59. package/skills/bridge/SKILL-WINDOWS.md +3 -3
  60. package/skills/browser-verify/SKILL.md +14 -5
  61. package/skills/code-review/SKILL.md +8 -2
  62. package/skills/commit/SKILL.md +7 -6
  63. package/skills/compact-and-continue/SKILL.md +9 -8
  64. package/skills/design-doc/SKILL.md +235 -0
  65. package/skills/explore/SKILL.md +1 -1
  66. package/skills/grilling/SKILL.md +4 -4
  67. package/skills/handoff/SKILL.md +4 -4
  68. package/skills/host/SKILL.md +1 -1
  69. package/skills/host/detect-host.sh +2 -2
  70. package/skills/host/notes.md +2 -2
  71. package/skills/host/questions.md +1 -1
  72. package/skills/implement/SKILL.md +20 -13
  73. package/skills/implement/decision-log.md +9 -8
  74. package/skills/implement/design-pass.md +16 -2
  75. package/skills/map/SKILL.md +15 -71
  76. package/skills/map/alignment.md +18 -27
  77. package/skills/map/frontend.md +1 -1
  78. package/skills/map/materialising.md +74 -0
  79. package/skills/map/trackers/files.md +4 -6
  80. package/skills/pre-commit-review/SKILL.md +15 -9
  81. package/skills/pre-commit-review/auto-fix.md +1 -1
  82. package/skills/quick-fix/SKILL.md +1 -1
  83. package/skills/record-context/SKILL.md +6 -6
  84. package/skills/setup/SKILL.md +15 -50
  85. package/skills/setup/browser.md +2 -2
  86. package/skills/setup/first-run.md +19 -8
  87. package/skills/setup/report.md +3 -2
  88. package/skills/setup/row-fixes.md +56 -9
  89. package/skills/sync/SKILL.md +12 -11
  90. package/skills/terminal-workspace/SKILL.md +2 -1
  91. package/skills/test-conventions/SKILL.md +2 -2
  92. package/skills/visual-docs/SKILL.md +69 -235
  93. package/skills/writing/SKILL.md +29 -217
  94. package/skills/writing/examples.md +62 -129
  95. package/docs/adr/0001-ste-writing-standard.md +0 -16
  96. package/docs/adr/0002-version-gate-not-auto-bump.md +0 -35
  97. package/docs/adr/0003-handoff-ack-command.md +0 -19
  98. package/docs/adr/0004-dev-setup-per-host.md +0 -13
  99. package/docs/adr/0005-two-orchestrators-per-host.md +0 -25
  100. package/docs/adr/0006-document-opener-service.md +0 -89
  101. package/docs/adr/0007-lead-check-reads-the-transcript.md +0 -87
  102. package/docs/adr/0008-cli-audits-skill-interviews.md +0 -37
  103. package/docs/adr/0009-verify-the-write-not-the-writer.md +0 -51
  104. package/docs/adr/0010-promote-dev-to-main-by-fast-forward.md +0 -115
  105. package/docs/adr/0011-node-header-is-the-edge-encoding.md +0 -20
  106. package/docs/adr/0012-node-kind-is-a-closed-set-of-five.md +0 -31
  107. package/docs/adr/0013-the-diagram-renderer-is-pure.md +0 -23
  108. package/docs/adr/0014-reading-a-node-hides-its-generated-diagram.md +0 -29
  109. package/docs/adr/0015-a-node-id-links-to-its-issue-through-an-anchor.md +0 -37
  110. package/docs/adr/0016-the-map-root-carries-no-status-of-its-own.md +0 -21
  111. package/docs/adr/0017-call-impeccable-copy-only-its-questions.md +0 -13
  112. package/docs/adr/0018-alignment-packs-use-local-viewers.md +0 -11
  113. package/docs/adr/index.md +0 -18
@@ -59,7 +59,7 @@ git status --short
59
59
  git log --oneline -3 # recent context
60
60
  ```
61
61
 
62
- Read `acstack/project.yaml` to understand the project's directory layout, commands, and conventions.
62
+ Read `.acstack/project.yaml` to understand the project's directory layout, commands, and conventions.
63
63
 
64
64
  Categorize changed files into scopes using the project configuration:
65
65
 
@@ -78,13 +78,15 @@ Follow the shared Implementation discipline in `orchestrator/AGENTS.md` for dele
78
78
  Investigate these dimensions directly or through useful delegation.
79
79
  Discover current conventions rather than hardcoding them.
80
80
 
81
+ Read `../../output-styles/ac-writing-style.md` relative to this skill directory; apply its shared standard to code design as well as explanations.
82
+
81
83
  **Living specs and architecture:**
82
84
 
83
85
  ```
84
86
  Read the living specs relevant to this change:
85
- - Check acstack/specs/ directory listing
87
+ - Check .acstack/specs/ directory listing
86
88
  - Read spec.md files for domains touched by the changed files
87
- (use acstack/domain-map.yaml to map files -> domains)
89
+ (use .acstack/domain-map.yaml to map files -> domains)
88
90
  - Extract documented conventions, patterns, and requirements (FR-NNN entries)
89
91
  Report: list of project conventions and patterns relevant to these changes.
90
92
  ```
@@ -105,7 +107,7 @@ Report: established patterns, common approaches, naming conventions observed.
105
107
  ```
106
108
  For each changed file, read:
107
109
  - The full file (to see surrounding code context)
108
- - Import targets (what does this file import? read those files' signatures)
110
+ - Connected callers and dependencies (read beyond signatures where needed to understand responsibilities and interface costs)
109
111
  - Config that governs this area (linter rules, compiler config, etc.)
110
112
  Report: local conventions, related code patterns, existing abstractions nearby.
111
113
  ```
@@ -137,14 +139,18 @@ For each finding, report:
137
139
 
138
140
  ```
139
141
  Examine the diff for:
140
- - Functions > 40 lines or > 3 levels of nesting
141
- - God functions doing too many things
142
- - Unclear variable/function names
143
- - Missing or premature abstractions
142
+ - Tangled control flow, repeated decisions, or mixed responsibilities, with concrete evidence of the complexity
143
+ - Incoherent boundaries or peer components at mismatched abstraction levels
144
+ - Interfaces that expose internals instead of hiding real complexity behind small, useful operations (deep modules)
145
+ - Names that misrepresent meaning, or structure driven by folder layout rather than responsibility
146
+ - Missing useful boundaries or pass-through layers that add no useful boundary
144
147
  - Complex conditionals that could be simplified
145
148
  - Code that would be hard for a new developer to understand
146
149
  - Performance concerns (N+1 queries, unnecessary re-renders, blocking I/O)
147
150
 
151
+ Do not require nesting or wrappers; neither line count nor indirection measures design quality.
152
+ Support design findings with effects on connected callers and dependencies.
153
+
148
154
  For each finding, report:
149
155
  FILE:LINE | SEVERITY (MUST/SHOULD/CONSIDER) | WHAT | WHY | SUGGESTED FIX
150
156
  ```
@@ -175,7 +181,7 @@ Run the lint on the changed Markdown files, and on nothing else. Skip the comman
175
181
 
176
182
  The lint exits 0 even when it reports findings. It groups findings by file with line numbers, then prints a summary per file. It skips `skills/writing/vocabulary.md` on purpose.
177
183
 
178
- Add each finding to the review as `SHOULD | PROSE`, at the `file:line` it names. The writing standard is a project convention, so it sits at the same severity as other convention drift.
184
+ Review each warning in context before treating it as a defect. Preserve necessary technical terms, quotations, and wording that would lose accuracy if changed. Report confirmed clarity or convention problems as `SHOULD | PROSE`, with the `file:line` and their effect on the reader.
179
185
 
180
186
  ## Step 4: ADJACENT – Check surrounding code for rot
181
187
 
@@ -9,7 +9,7 @@ For each finding (MUST first, then SHOULD, then CONSIDER):
9
9
  3. If fix breaks something, revert and try alternate approach
10
10
  4. Move to next finding
11
11
 
12
- After all fixes, run full verification using commands from `acstack/project.yaml`:
12
+ After all fixes, run full verification using commands from `.acstack/project.yaml`:
13
13
 
14
14
  ```bash
15
15
  # Run the project's configured test, lint, and typecheck commands
@@ -94,7 +94,7 @@ Apply the shared policy to the minimal fix.
94
94
 
95
95
  ## Step 6: Verify
96
96
 
97
- Run build verification using commands from `acstack/project.yaml`:
97
+ Run build verification using commands from `.acstack/project.yaml`:
98
98
 
99
99
  ```bash
100
100
  # Run the project's configured test, lint, and typecheck commands
@@ -25,7 +25,7 @@ an obvious choice buries the ones that matter.
25
25
 
26
26
  ### Writing one
27
27
 
28
- - Path: `docs/adr/NNNN-slug.md`. The number is the highest existing number plus
28
+ - Path: `.acstack/decisions/NNNN-slug.md`. The number is the highest existing number plus
29
29
  one, zero-padded to four digits. Create the directory lazily.
30
30
 
31
31
  If the file for that number appeared since you scanned (a parallel teammate
@@ -41,7 +41,7 @@ an obvious choice buries the ones that matter.
41
41
 
42
42
  ### Example
43
43
 
44
- `docs/adr/0004-invariant-tool-path.md`:
44
+ `.acstack/decisions/0004-invariant-tool-path.md`:
45
45
 
46
46
  ```markdown
47
47
  # One invariant path for the command line tool
@@ -64,7 +64,7 @@ the hook has not run. The fix is to restart the agent session.
64
64
 
65
65
  ### You generate the index
66
66
 
67
- After writing any ADR, rewrite `docs/adr/index.md` in full, with one line
67
+ After writing any ADR, rewrite `.acstack/decisions/index.md` in full, with one line
68
68
  per ADR. Sort the lines by number, ascending. Each line takes its number
69
69
  and slug from the filename, and its title from the file's first heading:
70
70
 
@@ -80,9 +80,9 @@ If you find hand edits in it, regenerate; the files are the truth.
80
80
  If the decision fixed what a word means – picked between competing names,
81
81
  sharpened a fuzzy term, coined one – record it:
82
82
 
83
- - **Cross-domain terms** go in `CONTEXT.md` at the repo root.
84
- - **Domain terms** go in `acstack/specs/<domain>/CONTEXT.md`, beside that
85
- domain's `spec.md`. Find the domain in `acstack/domain-map.yaml`.
83
+ - **Cross-domain terms** go in `.acstack/CONTEXT.md`.
84
+ - **Domain terms** go in `.acstack/specs/<domain>/CONTEXT.md`, beside that
85
+ domain's `spec.md`. Find the domain in `.acstack/domain-map.yaml`.
86
86
 
87
87
  - Create both files lazily; there is no index file –
88
88
  `domain-map.yaml` already lists every domain.
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: setup
3
- description: Set up ACStack in a project, and change how an already configured project is set up. With no acstack/project.yaml it detects the project type, writes the config, generates the domain map and offers browser verification. With one already there it leads with the health check, then offers to fix each row that failed. Both paths end in the same check, so it is safe to run on the first day and on any day after.
3
+ description: Set up ACStack in a project, and change how an already configured project is set up. With no .acstack/project.yaml it detects the project type, writes the config, generates the domain map and offers browser verification. With one already there it leads with the health check, then offers to fix each row that failed. Both paths end in the same check, so it is safe to run on the first day and on any day after.
4
4
  argument-hint: "[what to set up or change]"
5
5
  disable-model-invocation: true
6
6
  ---
@@ -18,7 +18,7 @@ join at the health check, so this skill states every fix once.
18
18
 
19
19
  ```mermaid
20
20
  flowchart TD
21
- HOST["Step 1<br/>declare this machine"] --> FORK{"acstack/project.yaml<br/>is here?"}
21
+ HOST["Step 1<br/>declare this machine"] --> FORK{".acstack/project.yaml<br/>is here?"}
22
22
  FORK -- no --> FIRST["Steps 3 to 6<br/>detect, ask, write the config"]
23
23
  FORK -- yes --> CHECK
24
24
  FIRST --> CHECK["Step 7<br/>acstack config check --json"]
@@ -32,8 +32,8 @@ flowchart TD
32
32
 
33
33
  Three terms, before they get used:
34
34
 
35
- - A **health check** is one run of `acstack config check`. It audits the machine
36
- and the project. It changes nothing.
35
+ - A **health check** is one run of `acstack config check`. It reports gaps in the machine
36
+ and project configuration.
37
37
 
38
38
  - A **row** is one line of that report. It carries an `id`, a `status` and a
39
39
  `message`.
@@ -44,7 +44,6 @@ Three terms, before they get used:
44
44
  The command line tool audits. This skill interviews and writes. Neither one does
45
45
  the other's job.
46
46
 
47
- See `docs/adr/0008-cli-audits-skill-interviews.md`.
48
47
 
49
48
  ## Step 1: Declare this machine
50
49
 
@@ -75,8 +74,14 @@ answers. Come back to Step 2 when it finishes.
75
74
 
76
75
  ## Step 2: Choose the path
77
76
 
77
+ Run `~/.claude/acstack/bin/acstack project-data ensure` before checking for configuration.
78
+ It needs no config, does nothing without `.acstack/`, and preserves user tracking exceptions.
79
+
80
+ If legacy project records remain, explain the explicit migration procedure in `docs/config-reference.md` before proceeding.
81
+ Never move them silently or run Git index commands.
82
+
78
83
  ```bash
79
- test -f acstack/project.yaml && echo present || echo absent
84
+ test -f .acstack/project.yaml && echo present || echo absent
80
85
  ```
81
86
 
82
87
  - **absent** – take the first-run path. Go to Step 3.
@@ -113,7 +118,7 @@ CLI. An agent testing this branch before the release runs
113
118
  It prints one object to standard output and nothing else:
114
119
 
115
120
  ```json
116
- {"checks": [{"id": "domain-map", "status": "pass", "message": "acstack/domain-map.yaml maps 4 domains"}]}
121
+ {"checks": [{"id": "domain-map", "status": "pass", "message": ".acstack/domain-map.yaml maps 4 domains"}]}
117
122
  ```
118
123
 
119
124
  Each `status` is `pass`, `fail` or `info`. The exit codes carry the same news:
@@ -135,47 +140,7 @@ months ago deserves to hear what fails first.
135
140
 
136
141
  ## Step 8: Offer the rows that need a fix
137
142
 
138
- Build one multi-select question in the question tool (AskUserQuestion with
139
- `multiSelect: true` on Claude Code). Put one option in it per row you are going
140
- to offer, and say in each description what the row reported. This is the pre-selection the user sees: only real gaps reach the menu.
141
-
142
- Offer a row when any of these holds:
143
-
144
- - Its `status` is `fail`.
145
- - Its `id` is `preferred-browser-mode`, its `status` is `info`, and
146
- `acstack/project.yaml` configures a `frontend` block. The project has a
147
- frontend and has named no browser mode for it.
148
-
149
- - Its `id` is `output-style` and its `status` is `info`. The row passes when the
150
- settings files select `acstack:ac-writing-style`, so `info` means they select
151
- some other style, or select none.
152
-
153
- - Its `id` is `frontend-verification` and its `status` is `info`. The project
154
- configures a frontend and `workflow.frontend_verification` is not `true`.
155
-
156
- Each of those rules reads the `status` and the `id`. Read neither row's message
157
- to decide, for the reason Step 7 gives: the message is prose and it gets
158
- reworded.
159
-
160
- Add three options at the end of the list, whatever the check reported:
161
-
162
- - **Re-declare this machine** – invoke the `host` skill. It re-asks every axis,
163
- required and optional, and starts from the current answers.
164
-
165
- The check reports an `optional-axis:<key>` row as `info`, never as `fail`.
166
- So this option is the only way one of them reaches a question.
167
-
168
- - **Change one setting** – for a key the check has no opinion about, such as
169
- `workflow.maps.persist`. Point the user at `docs/config-reference.md`, which
170
- lists every key, its values and its default. Then write the key:
171
-
172
- ```bash
173
- ~/.claude/acstack/bin/acstack config set workflow.maps.persist true
174
- ```
175
-
176
- Do not restate the reference here.
177
-
178
- - **Skip** – leave everything as it is.
143
+ Read [Step 8 in row-fixes.md](row-fixes.md#step-8-offer-the-rows-that-need-a-fix) and build its full menu.
179
144
 
180
145
  ## Step 9: Fix one row at a time
181
146
 
@@ -209,7 +174,7 @@ Read [`browser.md`](browser.md) when the user picks the remote mode in Step 10,
209
174
 
210
175
  ## Step 12: Offer the terminal workspace
211
176
 
212
- Read [`terminal-workspace.md`](terminal-workspace.md) on every run, after the rows are fixed.
177
+ Read [`terminal-workspace.md`](terminal-workspace.md) on every run, after you fix the rows.
213
178
 
214
179
  ## Step 13: Offer the design review
215
180
 
@@ -235,7 +200,7 @@ Read [`report.md`](report.md) on every run, as the last step.
235
200
  It reads the key to decide which one.
236
201
 
237
202
  A `host.*` key goes to the global config at `~/.config/acstack/config.json`.
238
- Every other key it knows goes to `acstack/project.yaml`, and the write keeps
203
+ Every other key it knows goes to `.acstack/project.yaml`, and the write keeps
239
204
  the comments and the key order. It refuses a key neither schema knows, so
240
205
  never fall back to editing the file.
241
206
 
@@ -37,10 +37,10 @@ Write the answer as `remote`, `headless` or `local`. Write the port beside it:
37
37
  ~/.claude/acstack/bin/acstack config set frontend.browser.cdp_port 19988
38
38
  ```
39
39
 
40
- Then write `agent-browser.json` with the same port, the way Step 9c in `row-fixes.md` does.
40
+ Then write `.acstack/agent-browser.json` with the same port, the way Step 9c in `row-fixes.md` does.
41
41
 
42
42
  On **Skip for now**, leave `frontend.browser` unset and write no
43
- `agent-browser.json`. Say that `docs/config-reference.md` documents the three
43
+ `.acstack/agent-browser.json`. Say that `docs/config-reference.md` documents the three
44
44
  keys for later.
45
45
 
46
46
  On **Headless**, no setup follows. Tell the user the frontend verifier launches
@@ -1,9 +1,9 @@
1
1
  # Setup: first run
2
2
 
3
- `SKILL.md` decides when to read this file: Step 2 found no `acstack/project.yaml`, so the first-run path runs Steps 3 to 6 from here.
3
+ `SKILL.md` decides when to read this file: Step 2 found no `.acstack/project.yaml`, so the first-run path runs Steps 3 to 6 from here.
4
4
 
5
- The file keeps its schema on both paths, so nothing migrates. `docs/config-reference.md`
6
- lists every key it can hold.
5
+ First-run setup does not migrate legacy records; use the procedure in `docs/config-reference.md`.
6
+ That reference also lists every configuration key.
7
7
 
8
8
  ## Step 3: Detect the project type and propose defaults
9
9
 
@@ -70,7 +70,7 @@ user did not select.
70
70
  Recommend `tool`. It writes `workflow.grilling.questions`.
71
71
 
72
72
  - Apply the shared Implementation discipline in `orchestrator/AGENTS.md` without adding workflow switches
73
- - Do not offer or generate the deprecated TDD booleans
73
+ - Do not offer or generate the deprecated TDD booleans or retired `workflow.alignment_packs` settings
74
74
 
75
75
 
76
76
  - **Spec sync** – ask enabled against disabled.
@@ -81,12 +81,23 @@ paths reach Step 10 through the health check.
81
81
 
82
82
  ## Step 6: Write the config
83
83
 
84
- 1. Create the `acstack/` directory.
85
- 2. Write `acstack/project.yaml` from the profile and the answers.
86
- 3. Leave the project CLAUDE.md alone. The SessionStart hook loads the
84
+ 1. Create the `.acstack/` directory.
85
+ 2. Immediately run `~/.claude/acstack/bin/acstack project-data ensure`, before writing any metadata.
86
+ 3. Write `.acstack/project.yaml` from the profile and the answers.
87
+ 4. Ask which project-data parts to track with a multi-select question, with nothing selected by default.
88
+ Offer the parts listed in `docs/config-reference.md` under "Project data stays local by default" in batches if the host limits options.
89
+ Include every part, not only the files setup creates today.
90
+ 5. Leave all parts ignored when the user selects none.
91
+ 6. Append native exceptions after existing root `.gitignore` rules, outside the managed baseline.
92
+ - When the user selects any part, append `!/.acstack/` once before that part's exceptions.
93
+ - A directory needs both `!/.acstack/specs/` and `!/.acstack/specs/**` (replace `specs` with the selected directory).
94
+ - A root-level file needs one exception, such as `!/.acstack/project.yaml`.
95
+ - Reopen parent directories before exceptions for nested files, such as `!/.acstack/verification/`.
96
+ - Preserve existing user rules; never force-add ignored files or change the Git index.
97
+ 7. Leave the project CLAUDE.md alone. The SessionStart hook loads the
87
98
  orchestrator instructions.
88
99
 
89
- 4. Remove a legacy `@import` line from the project CLAUDE.md, if one is there.
100
+ 8. Remove a legacy `@import` line from the project CLAUDE.md, if one is there.
90
101
  It points at `.../plugins/cache/ac8318740-plugins/acstack/<version>/CLAUDE.md`.
91
102
 
92
103
  Then go to Step 7. Everything a fresh project still lacks shows up there as a
@@ -20,8 +20,9 @@ Browser: [project's preferred mode / not configured]
20
20
  Design: [on / off / not asked]
21
21
  Host: [orchestrators + browser modes declared / not declared]
22
22
  Workspace: [yes / yes, n updates available / not installed / declined / not asked]
23
- Config: acstack/project.yaml
24
- Domain map: acstack/domain-map.yaml ([n] domains / starter – fill in)
23
+ Tracking: [local only / user-selected parts via root .gitignore exceptions]
24
+ Config: .acstack/project.yaml
25
+ Domain map: .acstack/domain-map.yaml ([n] domains / starter – fill in)
25
26
  Output style: acstack:ac-writing-style (global) | (project) | not set
26
27
 
27
28
  Health check: [n] pass, [n] fail, [n] info
@@ -1,6 +1,52 @@
1
1
  # Setup: row fixes
2
2
 
3
- `SKILL.md` decides when to read this file: Step 9 is fixing a `browser-mode:<mode>`, `frontend-verification`, `domain-map`, `agent-browser`, `agent-browser-json`, `verification-knowledge` or `output-style` row.
3
+ [The setup skill](SKILL.md) loads Step 8 on every run and Step 9 for the selected row fixes.
4
+
5
+ ## Step 8: Offer the rows that need a fix
6
+
7
+ Build one multi-select question in the question tool (AskUserQuestion with
8
+ `multiSelect: true` on Claude Code). Put one option in it per row you are going
9
+ to offer, and say in each description what the row reported. This is the pre-selection the user sees: only real gaps reach the menu.
10
+
11
+ Offer a row when any of these holds:
12
+
13
+ - Its `status` is `fail`.
14
+ - Its `id` is `preferred-browser-mode`, its `status` is `info`, and
15
+ `.acstack/project.yaml` configures a `frontend` block. The project has a
16
+ frontend and has named no browser mode for it.
17
+
18
+ - Its `id` is `output-style` and its `status` is `info`. The row passes when the
19
+ settings files select `acstack:ac-writing-style`, so `info` means they select
20
+ some other style, or select none.
21
+
22
+ - Its `id` is `frontend-verification` and its `status` is `info`. The project
23
+ configures a frontend and `workflow.frontend_verification` is not `true`.
24
+
25
+ Each of those rules reads the `status` and the `id`. Read neither row's message
26
+ to decide, for the reason Step 7 gives: the message is prose and it gets
27
+ reworded.
28
+
29
+ Add three options at the end of the list, whatever the check reported:
30
+
31
+ - **Re-declare this machine** – invoke the `host` skill. It re-asks every axis,
32
+ required and optional, and starts from the current answers.
33
+
34
+ The check reports an `optional-axis:<key>` row as `info`, never as `fail`.
35
+ So this option is the only way one of them reaches a question.
36
+
37
+ - **Change one setting** – for a key the check has no opinion about, such as
38
+ `workflow.maps.persist`. Point the user at `docs/config-reference.md`, which
39
+ lists every key, its values and its default. Then write the key:
40
+
41
+ ```bash
42
+ ~/.claude/acstack/bin/acstack config set workflow.maps.persist true
43
+ ```
44
+
45
+ Do not restate the reference here.
46
+
47
+ - **Skip** – leave everything as it is.
48
+
49
+ ## Step 9: Fix one row at a time
4
50
 
5
51
  Five rows describe the machine: `required-axis`, `orchestrator`, `browser-mode`,
6
52
  `preferred-browser-mode` and `optional-axis`. Invoke the `host` skill for each of
@@ -45,7 +91,7 @@ frontend and has not turned browser verification on. Turn it on:
45
91
 
46
92
  ### 9a. Generate the domain map
47
93
 
48
- `acstack/domain-map.yaml` maps source paths to spec domains. Spec sync,
94
+ `.acstack/domain-map.yaml` maps source paths to spec domains. Spec sync,
49
95
  `/acstack:archive`, `/acstack:bootstrap` and `/acstack:pre-commit-review` all
50
96
  read it. Without it, every path through spec sync skips in silence, and the
51
97
  living specs never update.
@@ -65,7 +111,7 @@ Guidance for the proposal:
65
111
  - Leave tests, config, build files and docs unmapped. Consumers skip a path that
66
112
  no domain covers.
67
113
 
68
- If `acstack/specs/` already holds domain directories, propose those names first
114
+ If `.acstack/specs/` already holds domain directories, propose those names first
69
115
  and map the paths onto them. Renaming a domain here orphans its `spec.md`.
70
116
 
71
117
  Print the proposal and confirm it with the question tool (AskUserQuestion on Claude Code). Ask "Use this domain map,
@@ -97,23 +143,24 @@ with. Offer to install it:
97
143
  npm install -g agent-browser
98
144
  ```
99
145
 
100
- ### 9c. Write agent-browser.json
146
+ ### 9c. Write the browser configuration
101
147
 
102
- This file tells `agent-browser` which port to dial. Write it in the project root:
148
+ Create `.acstack/` if needed, then run `~/.claude/acstack/bin/acstack project-data ensure`.
149
+ Write `.acstack/agent-browser.json` to name the CDP port:
103
150
 
104
151
  ```json
105
152
  {"cdp": "<cdp_port>"}
106
153
  ```
107
154
 
108
- Take `<cdp_port>` from `frontend.browser.cdp_port` in `acstack/project.yaml`. With
155
+ Take `<cdp_port>` from `frontend.browser.cdp_port` in `.acstack/project.yaml`. With
109
156
  no value there, the default is `19988` under `mode: remote` and `9555` otherwise.
110
157
  The row fails when the two files name different ports, so change one of them.
111
158
 
112
159
  ### 9d. Create the knowledge base for verification
113
160
 
114
- The frontend verifier keeps what it learns in `VERIFICATION-KNOWLEDGE.md`, under
115
- the directory `frontend.helpers_dir` names. If that key states nothing, ask for a
116
- directory and write the key first. Then create the file:
161
+ Create `.acstack/verification/VERIFICATION-KNOWLEDGE.md` for the frontend verifier.
162
+ Keep helper programs in `frontend.helpers_dir`; do not move that directory or require it for metadata.
163
+ Run `~/.claude/acstack/bin/acstack project-data ensure` after creating `.acstack/`, then write:
117
164
 
118
165
  ```markdown
119
166
  # Verification Knowledge Base
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: sync
3
- description: Update living specs in acstack/specs/ from recent code changes. Called automatically by /commit for retroactive spec updates. Can also be invoked manually.
3
+ description: Update living specs in .acstack/specs/ from recent code changes. Called automatically by /commit for retroactive spec updates. Can also be invoked manually.
4
4
  argument-hint: "[file-paths or 'staged']"
5
5
  ---
6
6
 
@@ -15,7 +15,7 @@ You **MUST** consider the user input before proceeding (if not empty).
15
15
  ## Purpose
16
16
 
17
17
  This skill analyzes code changes. It updates the cumulative living specs in
18
- `acstack/specs/` to reflect what changed. It is the "fast path" mechanism
18
+ `.acstack/specs/` to reflect what changed. It is the "fast path" mechanism
19
19
  that keeps specs current even when a workflow skips full spec planning.
20
20
 
21
21
  ## Step 1: determine change scope
@@ -81,11 +81,11 @@ domain.
81
81
  5. Stage what `document` wrote
82
82
 
83
83
  `document` writes `DESIGN.md` and `.impeccable/design.json`. Stage both
84
- with the commit, the same way this skill stages an updated spec file.
84
+ with the commit; stage updated specs only when the user opted into tracking them.
85
85
 
86
86
  ## Step 3: map changes to domains
87
87
 
88
- 1. Read `acstack/domain-map.yaml`
88
+ 1. Read `.acstack/domain-map.yaml`
89
89
  2. Match changed files against domain path patterns
90
90
  3. Group changes by domain
91
91
  4. Skip files outside all domains (tests, config, docs)
@@ -96,7 +96,7 @@ If the diff affects no domains, report "No spec-relevant changes". Then exit.
96
96
 
97
97
  For each affected domain:
98
98
 
99
- 1. Read `acstack/specs/[domain]/spec.md` (if it exists)
99
+ 1. Read `.acstack/specs/[domain]/spec.md` (if it exists)
100
100
  2. Analyze changes:
101
101
  - New functions/endpoints/components -> ADDED requirements
102
102
  - Modified signatures or behavior -> MODIFIED requirements
@@ -109,9 +109,9 @@ Write each functional requirement (FR) entry per the `writing` skill.
109
109
  ```markdown
110
110
  ### FR-014: The handoff anchor loads once
111
111
 
112
- - **Description**: The SessionStart hook injects `acstack/HANDOFF.md` after a
113
- compaction, then moves the file into `acstack/handoffs/`.
114
- - **Behavior**: Given `acstack/HANDOFF.md` carries the `acstack_handoff`
112
+ - **Description**: The SessionStart hook injects `.acstack/HANDOFF.md` after a
113
+ compaction, then moves the file into `.acstack/handoffs/`.
114
+ - **Behavior**: Given `.acstack/HANDOFF.md` carries the `acstack_handoff`
115
115
  marker, When a session starts with source `compact`, Then the hook injects
116
116
  the file and retires it.
117
117
  - **Source**: `hooks/session-start-handoff.sh`
@@ -129,8 +129,8 @@ Write each merged FR per the `writing` skill.
129
129
 
130
130
  ## Step 6: glossary check
131
131
 
132
- Glossaries live in `CONTEXT.md` at the repo root (cross-domain terms) and
133
- `acstack/specs/[domain]/CONTEXT.md` (domain terms). If neither exists, skip.
132
+ Glossaries live in `.acstack/CONTEXT.md` (cross-domain terms) and
133
+ `.acstack/specs/[domain]/CONTEXT.md` (domain terms). If neither exists, skip.
134
134
 
135
135
  For each glossary term, check the diff. Look for a renamed or deleted
136
136
  identifier that matches it: function, class, table, config key, route. If
@@ -162,7 +162,8 @@ When `/commit` calls this skill:
162
162
 
163
163
  1. Receives the staged diff as context
164
164
  2. Runs silently (no user prompts)
165
- 3. Returns a list of modified spec files for staging
165
+ 3. Returns modified specs for staging only when native `.gitignore` rules allow tracking
166
+ - Keep ignored specs updated locally; never force-add them or change the Git index to bypass the user's choice
166
167
  4. Adds `DESIGN.md` and `.impeccable/design.json` when Step 2 refreshed them
167
168
  5. Outputs minimal detail so it does not interrupt the commit flow
168
169
 
@@ -58,7 +58,7 @@ flowchart TD
58
58
 
59
59
  This is **machine-level, not per-project**. It installs binaries and writes
60
60
  keybindings for the user account, so it does not belong in
61
- `acstack/project.yaml`.
61
+ `.acstack/project.yaml`.
62
62
 
63
63
  Count components when you mean config keys, and tools when you mean binaries.
64
64
  The config holds twelve component sections, plus an `enabled` master switch
@@ -79,6 +79,7 @@ The two files this skill works with:
79
79
  - **Config**: `~/.config/acstack/terminal-workspace.yaml`, copied from `assets/terminal-workspace/config.example.yaml`
80
80
  - **Script**: `assets/terminal-workspace/setup.sh` in this plugin
81
81
 
82
+ Yazi's `i` opens Markdown in Frogmouth (`pipx install frogmouth`); existing `i` bindings take precedence, and `e` keeps editing in `$EDITOR`.
82
83
  The keys, on one page: [docs/terminal-workspace-keys.md](../../docs/terminal-workspace-keys.md).
83
84
 
84
85
  Background and why each piece is there:
@@ -7,7 +7,7 @@ description: Test placement rules and framework conventions. Invoke before writi
7
7
 
8
8
  ## Decision Tree: Where Does My Test Go?
9
9
 
10
- Read `acstack/project.yaml` for `directories.source`, `directories.tests`, and `frontend` config.
10
+ Read `.acstack/project.yaml` for `directories.source`, `directories.tests`, and `frontend` config.
11
11
 
12
12
  ```
13
13
  Backend code? → <tests-dir>/<mirror-source-path>/test_<module>.py
@@ -25,7 +25,7 @@ Mirror the source directory structure. Example: `src/auth/sessions.py` → `test
25
25
  - Shared fixtures → `<tests-dir>/conftest.py` (Python) or shared setup files
26
26
  - Use markers for slow/integration tests (configured in `test_markers.exclude`)
27
27
  - Run with the `commands.test` command from project.yaml
28
- - Baseline: `.test-baseline` – count must never drop
28
+ - Baseline: `.acstack/.test-baseline` – count must never drop
29
29
 
30
30
  ## Layer 2: Frontend Unit Tests
31
31