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.
- package/.claude-plugin/plugin.json +1 -1
- package/README.md +14 -7
- package/agents/codex/frontend-verifier.toml +89 -6
- package/agents/codex/task-checker.toml +83 -2
- package/agents/codex/task-executor.toml +83 -1
- package/agents/codex/test-writer.toml +77 -1
- package/agents/frontend-verifier.md +13 -6
- package/agents/task-checker.md +7 -2
- package/agents/task-executor.md +7 -1
- package/agents/test-writer.md +1 -1
- package/assets/terminal-workspace/config.example.yaml +1 -1
- package/assets/terminal-workspace/helpers/acstack-md +12 -4
- package/assets/terminal-workspace/helpers/acstack-open +10 -2
- package/assets/terminal-workspace/lib/apply-yazi.sh +25 -0
- package/cli/dist/index.js +10142 -9369
- package/cli/dist/index.js.map +4 -4
- package/cli/package.json +1 -1
- package/docs/config-reference.md +113 -14
- package/docs/dev-setups.md +4 -4
- package/docs/terminal-workspace-keys.md +1 -0
- package/docs/terminal-workspace.md +1 -1
- package/docs/workflows.md +22 -16
- package/examples/design-doc/acstack/README.md +273 -0
- package/examples/design-doc/acstack/acstack.yaml +4 -0
- package/examples/design-doc/acstack/cli.yaml +5 -0
- package/examples/design-doc/acstack/design.yaml +39 -0
- package/examples/design-doc/acstack/github.yaml +12 -0
- package/examples/design-doc/acstack/host.yaml +14 -0
- package/examples/design-doc/acstack/journey.md +85 -0
- package/examples/design-doc/acstack/publication.md +16 -0
- package/examples/design-doc/acstack/review-runtime.yaml +24 -0
- package/examples/design-doc/acstack/skills.yaml +22 -0
- package/examples/design-doc/acstack/store.yaml +11 -0
- package/examples/design-doc/acstack/user.yaml +15 -0
- package/examples/design-doc/acstack/viewer.yaml +13 -0
- package/hooks/ac-writing-style-reminder.sh +7 -18
- package/hooks/communication-standard.mjs +17 -0
- package/hooks/communication-standard.sh +6 -0
- package/hooks/context-pressure.sh +2 -2
- package/hooks/hooks.json +18 -0
- package/hooks/lib/communication-standard.mjs +16 -0
- package/hooks/project-data.sh +38 -0
- package/hooks/session-start-handoff.sh +21 -7
- package/hooks/session-start.sh +9 -2
- package/orchestrator/AGENTS.md +25 -14
- package/output-styles/ac-writing-style.md +75 -276
- package/package.json +2 -1
- package/pi/agents/frontend-verifier.md +89 -6
- package/pi/agents/task-checker.md +83 -2
- package/pi/agents/task-executor.md +83 -1
- package/pi/agents/test-writer.md +77 -1
- package/pi/extension.ts +70 -12
- package/profiles/fullstack-python.yaml +1 -1
- package/profiles/node-typescript.yaml +1 -1
- package/profiles/python.yaml +1 -1
- package/skills/archive/SKILL.md +53 -36
- package/skills/bootstrap/SKILL.md +6 -6
- package/skills/bridge/SKILL-VM.md +11 -2
- package/skills/bridge/SKILL-WINDOWS.md +3 -3
- package/skills/browser-verify/SKILL.md +14 -5
- package/skills/code-review/SKILL.md +8 -2
- package/skills/commit/SKILL.md +7 -6
- package/skills/compact-and-continue/SKILL.md +9 -8
- package/skills/design-doc/SKILL.md +235 -0
- package/skills/explore/SKILL.md +1 -1
- package/skills/grilling/SKILL.md +4 -4
- package/skills/handoff/SKILL.md +4 -4
- package/skills/host/SKILL.md +1 -1
- package/skills/host/detect-host.sh +2 -2
- package/skills/host/notes.md +2 -2
- package/skills/host/questions.md +1 -1
- package/skills/implement/SKILL.md +20 -13
- package/skills/implement/decision-log.md +9 -8
- package/skills/implement/design-pass.md +16 -2
- package/skills/map/SKILL.md +15 -71
- package/skills/map/alignment.md +18 -27
- package/skills/map/frontend.md +1 -1
- package/skills/map/materialising.md +74 -0
- package/skills/map/trackers/files.md +4 -6
- package/skills/pre-commit-review/SKILL.md +15 -9
- package/skills/pre-commit-review/auto-fix.md +1 -1
- package/skills/quick-fix/SKILL.md +1 -1
- package/skills/record-context/SKILL.md +6 -6
- package/skills/setup/SKILL.md +15 -50
- package/skills/setup/browser.md +2 -2
- package/skills/setup/first-run.md +19 -8
- package/skills/setup/report.md +3 -2
- package/skills/setup/row-fixes.md +56 -9
- package/skills/sync/SKILL.md +12 -11
- package/skills/terminal-workspace/SKILL.md +2 -1
- package/skills/test-conventions/SKILL.md +2 -2
- package/skills/visual-docs/SKILL.md +69 -235
- package/skills/writing/SKILL.md +29 -217
- package/skills/writing/examples.md +62 -129
- package/docs/adr/0001-ste-writing-standard.md +0 -16
- package/docs/adr/0002-version-gate-not-auto-bump.md +0 -35
- package/docs/adr/0003-handoff-ack-command.md +0 -19
- package/docs/adr/0004-dev-setup-per-host.md +0 -13
- package/docs/adr/0005-two-orchestrators-per-host.md +0 -25
- package/docs/adr/0006-document-opener-service.md +0 -89
- package/docs/adr/0007-lead-check-reads-the-transcript.md +0 -87
- package/docs/adr/0008-cli-audits-skill-interviews.md +0 -37
- package/docs/adr/0009-verify-the-write-not-the-writer.md +0 -51
- package/docs/adr/0010-promote-dev-to-main-by-fast-forward.md +0 -115
- package/docs/adr/0011-node-header-is-the-edge-encoding.md +0 -20
- package/docs/adr/0012-node-kind-is-a-closed-set-of-five.md +0 -31
- package/docs/adr/0013-the-diagram-renderer-is-pure.md +0 -23
- package/docs/adr/0014-reading-a-node-hides-its-generated-diagram.md +0 -29
- package/docs/adr/0015-a-node-id-links-to-its-issue-through-an-anchor.md +0 -37
- package/docs/adr/0016-the-map-root-carries-no-status-of-its-own.md +0 -21
- package/docs/adr/0017-call-impeccable-copy-only-its-questions.md +0 -13
- package/docs/adr/0018-alignment-packs-use-local-viewers.md +0 -11
- package/docs/adr/index.md +0 -18
package/cli/package.json
CHANGED
package/docs/config-reference.md
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
# Project configuration
|
|
2
2
|
|
|
3
|
-
*Every key in
|
|
3
|
+
*Every key in `.acstack/project.yaml`, the values it takes, its default, and what changes when you change it.*
|
|
4
4
|
|
|
5
|
-
One file,
|
|
5
|
+
One file, `.acstack/project.yaml`, holds every setting that belongs to a project.
|
|
6
6
|
|
|
7
7
|
- **It names what to run**: the test, build, lint, typecheck, and format commands
|
|
8
8
|
- **It names where to look**: the source and test directories, and the frontend
|
|
@@ -18,7 +18,7 @@ Three terms first.
|
|
|
18
18
|
|
|
19
19
|
```mermaid
|
|
20
20
|
flowchart TD
|
|
21
|
-
FILE["acstack/project.yaml<br/>(written by /acstack:setup)"] --> WF["workflow.*<br/>switches, maps, handoff"]
|
|
21
|
+
FILE[".acstack/project.yaml<br/>(written by /acstack:setup)"] --> WF["workflow.*<br/>switches, maps, handoff"]
|
|
22
22
|
FILE --> RUN["commands.*, directories.*,<br/>test_markers, venv"]
|
|
23
23
|
FILE --> FE["frontend.*<br/>dev server, browser"]
|
|
24
24
|
WF --> SKILLS["commit, grilling, map,<br/>archive, handoff"]
|
|
@@ -44,7 +44,7 @@ flowchart TD
|
|
|
44
44
|
|
|
45
45
|
*The setup skill writes the whole file. To change one key, run `acstack config set`.*
|
|
46
46
|
|
|
47
|
-
-
|
|
47
|
+
- `.acstack/project.yaml` sits under the project root, beside `.acstack/domain-map.yaml`
|
|
48
48
|
- `/acstack:setup` writes it
|
|
49
49
|
- On a fresh project the skill detects the project type, then writes every key from a profile under `profiles/`
|
|
50
50
|
- On a project that already has the file, the skill leads with the health check and offers a menu of changes
|
|
@@ -54,7 +54,8 @@ flowchart TD
|
|
|
54
54
|
- The setup skill copies them from a profile
|
|
55
55
|
- An omitted one names nothing at all
|
|
56
56
|
|
|
57
|
-
|
|
57
|
+
These commands report configuration without changing settings.
|
|
58
|
+
CLI startup can repair the root Git ignore baseline before the command runs.
|
|
58
59
|
|
|
59
60
|
| Command | What it prints |
|
|
60
61
|
| --- | --- |
|
|
@@ -63,6 +64,104 @@ Four commands read the file and change nothing.
|
|
|
63
64
|
| `acstack config list` | every key the file states |
|
|
64
65
|
| `acstack design-gate` | whether a design review runs here, as `on` and exit 0 or one `off: <reason>` line per reason and exit 1 (section 3) |
|
|
65
66
|
|
|
67
|
+
### Project data stays local by default
|
|
68
|
+
|
|
69
|
+
- All ACStack-owned project records live under `.acstack/`
|
|
70
|
+
- The root `.gitignore` controls tracking, independently for every part
|
|
71
|
+
- No configuration key controls tracking
|
|
72
|
+
|
|
73
|
+
| Part | Canonical path |
|
|
74
|
+
| --- | --- |
|
|
75
|
+
| Project configuration | `.acstack/project.yaml` |
|
|
76
|
+
| Domain map | `.acstack/domain-map.yaml` |
|
|
77
|
+
| Living specs | `.acstack/specs/` |
|
|
78
|
+
| Maps | `.acstack/maps/` |
|
|
79
|
+
| Authored design sources | `.acstack/designs/` |
|
|
80
|
+
| Archives | `.acstack/archive/` |
|
|
81
|
+
| Legacy change records | `.acstack/changes/` |
|
|
82
|
+
| Legacy review artifacts (retained for explicit import) | `.acstack/alignment-packs/` |
|
|
83
|
+
| Canonical design reviews and imported history | `.acstack/design-reviews/` |
|
|
84
|
+
| Architecture decisions | `.acstack/decisions/` |
|
|
85
|
+
| Cross-domain glossary | `.acstack/CONTEXT.md` |
|
|
86
|
+
| Browser connection | `.acstack/agent-browser.json` |
|
|
87
|
+
| Verification knowledge | `.acstack/verification/VERIFICATION-KNOWLEDGE.md` |
|
|
88
|
+
| Test baseline | `.acstack/.test-baseline` |
|
|
89
|
+
| Decision logs | `.acstack/decision-logs/` |
|
|
90
|
+
| Continuation anchor | `.acstack/HANDOFF.md` |
|
|
91
|
+
| Agent handoffs | `.acstack/handoffs/` |
|
|
92
|
+
|
|
93
|
+
- `/acstack:setup` creates `.acstack/`, then immediately runs `~/.claude/acstack/bin/acstack project-data ensure`
|
|
94
|
+
- Setup asks which parts to track with a multi-select question, with none selected by default
|
|
95
|
+
- CLI and host session startup run `project-data ensure` before checking configuration
|
|
96
|
+
- `ensure` needs no config when `.acstack/` exists and does nothing when no project data exists
|
|
97
|
+
- It installs a managed `/.acstack/**` baseline at the start of the root `.gitignore`
|
|
98
|
+
- Existing user rules follow the baseline, preserving their exceptions
|
|
99
|
+
- Bare filesystem creation cannot trigger a command
|
|
100
|
+
- The first ACStack CLI invocation or session startup enforces the baseline; ACStack runs no filesystem watcher
|
|
101
|
+
- Add native exceptions after existing rules, outside the managed baseline, to track selected parts
|
|
102
|
+
- The user can select configuration, specs, and architecture decisions independently
|
|
103
|
+
|
|
104
|
+
```gitignore
|
|
105
|
+
# User rules after existing rules and the ACStack-managed baseline
|
|
106
|
+
!/.acstack/
|
|
107
|
+
!/.acstack/project.yaml
|
|
108
|
+
!/.acstack/specs/
|
|
109
|
+
!/.acstack/specs/**
|
|
110
|
+
!/.acstack/decisions/
|
|
111
|
+
!/.acstack/decisions/**
|
|
112
|
+
```
|
|
113
|
+
|
|
114
|
+
- Reopen `.acstack/` before any selected part to override earlier whole-directory ignores
|
|
115
|
+
- A nested file also needs its parent directory reopened, for example `!/.acstack/verification/` before its file exception
|
|
116
|
+
- Git ignore rules do not untrack files already in the Git index
|
|
117
|
+
- ACStack never force-adds ignored files or changes the Git index to enforce this policy
|
|
118
|
+
- ACStack retires `workflow.alignment_packs` auto-generation, approval, and tracking settings; existing fields have no effect
|
|
119
|
+
- This includes `approval_gate` and `commit_generated_packs`
|
|
120
|
+
- Setup and config writes no longer offer them; ACStack never silently rewrites or deletes existing files
|
|
121
|
+
- Native Git ignore rules alone control tracking
|
|
122
|
+
- Map-linked design approval uses the exact source, saved comments, and contribution inputs, without a new workflow flag
|
|
123
|
+
- `workflow.design_review` still controls only the frontend design pass
|
|
124
|
+
- Installed tools under `~/.claude/acstack/bin/`, XDG configuration, and host-owned `.claude/` settings keep their existing locations
|
|
125
|
+
- Helper programs and user code under `frontend.helpers_dir` stay where they are
|
|
126
|
+
- Verification metadata always uses `.acstack/verification/VERIFICATION-KNOWLEDGE.md`
|
|
127
|
+
|
|
128
|
+
### Explicit migration from the old layout
|
|
129
|
+
|
|
130
|
+
1. Update installed ACStack tools before moving project data
|
|
131
|
+
2. Stop old agent sessions and review processes; old CLI versions and hooks cannot read the new layout
|
|
132
|
+
3. From the checkout to migrate, run `~/.claude/acstack/bin/acstack project-data migrate`
|
|
133
|
+
4. Review the working-tree changes, then restart agents and reviews with the updated tools
|
|
134
|
+
|
|
135
|
+
- Migration preflights all moves and aborts on collisions without overwriting destination data
|
|
136
|
+
- It moves old `acstack/` project records, root `CONTEXT.md`, `.test-baseline`, and `agent-browser.json` into the canonical destinations
|
|
137
|
+
- It moves `docs/adr/` to `.acstack/decisions/` and old decision logs to `.acstack/decision-logs/`
|
|
138
|
+
- It moves verification knowledge, not arbitrary helper directories or their programs
|
|
139
|
+
- Previously tracked old paths become pending deletions; their new destinations stay local unless the user opts in
|
|
140
|
+
- Migration preserves local data and makes no Git index changes or automatic tracking exceptions
|
|
141
|
+
- Migrate each checkout explicitly; never move another checkout's data automatically
|
|
142
|
+
- Decision logs still belong to the main checkout at `<main checkout>/.acstack/decision-logs/`
|
|
143
|
+
- If that checkout remains on the legacy layout, stop and report an actionable migration error
|
|
144
|
+
- Do not create a partial `.acstack/` directory there as a workaround
|
|
145
|
+
|
|
146
|
+
### Explicit import from retired map reviews
|
|
147
|
+
|
|
148
|
+
- ACStack removes legacy `map --map` and `align-viewer` without aliases
|
|
149
|
+
- Use `design-doc <entry>` for authored design review
|
|
150
|
+
- Use `node walk`, `node frontier`, and `node diagram` for map planning
|
|
151
|
+
- Author the new design before importing legacy feedback
|
|
152
|
+
|
|
153
|
+
```sh
|
|
154
|
+
~/.claude/acstack/bin/acstack design-review migrate <entry> \
|
|
155
|
+
--legacy-dir <path> --mapping <json-file> [--feedback <json-file>]
|
|
156
|
+
```
|
|
157
|
+
|
|
158
|
+
- Choose a nonsymlink directory under `.acstack/alignment-packs/`
|
|
159
|
+
- Supply explicit target mappings; see the `design-doc` skill for mapping and reconciliation instructions
|
|
160
|
+
- Migration preserves source artifacts and decision logs unchanged
|
|
161
|
+
- Canonical `review.json` keeps imported feedback and approval history; historical approval never authorizes the current design
|
|
162
|
+
- Startup and archive never import automatically
|
|
163
|
+
- Design source, review evidence, imported history, and decision logs outlive temporary map nodes regardless of `workflow.maps.persist`
|
|
164
|
+
|
|
66
165
|
### 1.1. Which file a write lands in
|
|
67
166
|
|
|
68
167
|
*The key decides, and the key alone.*
|
|
@@ -70,7 +169,7 @@ Four commands read the file and change nothing.
|
|
|
70
169
|
- A `host.*` key describes the machine
|
|
71
170
|
- It goes to the global config at `~/.config/acstack/config.json`
|
|
72
171
|
- Every other key in this document describes the project
|
|
73
|
-
- It goes to
|
|
172
|
+
- It goes to `.acstack/project.yaml`
|
|
74
173
|
- Section 10 covers the `host.*` keys
|
|
75
174
|
- `acstack config get <key>` and `acstack config unset <key>` read the same key table and route the same way
|
|
76
175
|
|
|
@@ -152,7 +251,7 @@ So the result decides which path a write takes, and never the shape of the key.
|
|
|
152
251
|
|
|
153
252
|
*A file ACStack itself produced always reads back.*
|
|
154
253
|
|
|
155
|
-
- A project that holds
|
|
254
|
+
- A project that holds `.acstack/` and no `project.yaml` gets the file created
|
|
156
255
|
- A block stating nothing takes a key underneath it, whether the file spells that block as a bare colon, as `null` or as `~`
|
|
157
256
|
- That is the state `acstack config unset` leaves behind
|
|
158
257
|
- The tool accepts its own output
|
|
@@ -210,7 +309,7 @@ Three refusals protect a file neither command can handle.
|
|
|
210
309
|
|
|
211
310
|
| Key | Values | Default | What changes |
|
|
212
311
|
| --- | --- | --- | --- |
|
|
213
|
-
| `workflow.spec_sync` | `true`, `false` | `true` | the `commit` skill runs spec sync before it commits, unless this says `false`; with `false` the living specs under
|
|
312
|
+
| `workflow.spec_sync` | `true`, `false` | `true` | the `commit` skill runs spec sync before it commits, unless this says `false`; with `false` the living specs under `.acstack/specs/` stop tracking the code |
|
|
214
313
|
| `workflow.tdd.strict` | `true`, `false` | none | deprecated compatibility boolean; no sequencing effect, including explicit `true` |
|
|
215
314
|
| `workflow.tdd.orchestrator_strict` | `true`, `false` | none | deprecated compatibility boolean; no delegation effect, including explicit `true` |
|
|
216
315
|
| `workflow.frontend_verification` | `true`, `false` | `false` | the frontend-verifier runs only when this is `true`, the file configures a `frontend` block, and the change touched frontend files |
|
|
@@ -271,7 +370,7 @@ A **map** is a graph of question nodes and work nodes. A **tracker** is the back
|
|
|
271
370
|
| Key | Values | Default | What changes |
|
|
272
371
|
| --- | --- | --- | --- |
|
|
273
372
|
| `workflow.maps.tracker` | `github`, `files` | none | the `map`, `implement`, and `archive` skills read the matching backend document and use its operations |
|
|
274
|
-
| `workflow.maps.persist` | `true`, `false` | `false` | `true` moves a cleared map's node files to
|
|
373
|
+
| `workflow.maps.persist` | `true`, `false` | `false` | `true` moves a cleared map's node files to `.acstack/archive/[YYYY-MM-DD]-[name]/nodes/`; `false` deletes `.acstack/maps/<name>/` |
|
|
275
374
|
|
|
276
375
|
- An absent `workflow.maps.tracker` means nobody has chosen yet
|
|
277
376
|
- The `map` skill then picks at the moment it first writes a map's nodes down, confirms the choice with the user, and writes the key
|
|
@@ -423,7 +522,7 @@ Two limits are worth knowing.
|
|
|
423
522
|
- `200_000` reads as 200,000
|
|
424
523
|
- Exponent and float notation do not
|
|
425
524
|
- `2e5` and `2.0` fall back to the default
|
|
426
|
-
- The hook opens
|
|
525
|
+
- The hook opens `.acstack/project.yaml` relative to the working directory
|
|
427
526
|
- A session running outside the project root therefore gets the defaults, whatever the file says
|
|
428
527
|
|
|
429
528
|
## 7. commands, directories, test_markers and venv
|
|
@@ -433,7 +532,7 @@ Two limits are worth knowing.
|
|
|
433
532
|
| Key | Values | Default | What changes |
|
|
434
533
|
| --- | --- | --- | --- |
|
|
435
534
|
| `commands.test` | a shell command, or `null` | from the profile | the verification owner runs the configured tests |
|
|
436
|
-
| `commands.test_collect` | a shell command, or `null` | from the profile | the verification owner compares counts with `.test-baseline`; counts alone do not prove coverage |
|
|
535
|
+
| `commands.test_collect` | a shell command, or `null` | from the profile | the verification owner compares counts with `.acstack/.test-baseline`; counts alone do not prove coverage |
|
|
437
536
|
| `commands.build` | a shell command, or `null` | from the profile | the verification owner checks the build with it |
|
|
438
537
|
| `commands.lint` | a shell command, or `null` | from the profile | the verification owner lints with it, usually with a fix flag |
|
|
439
538
|
| `commands.typecheck` | a shell command, or `null` | from the profile | the verification owner type-checks with it |
|
|
@@ -461,7 +560,7 @@ Two limits are worth knowing.
|
|
|
461
560
|
| `frontend.directory` | a path | `frontend/` | where the frontend lives |
|
|
462
561
|
| `frontend.dev_server_url` | a URL | `http://localhost:3000` | the address the frontend-verifier opens |
|
|
463
562
|
| `frontend.dev_server_check` | a shell command | a `curl` of the URL | how the frontend-verifier decides the dev server is up |
|
|
464
|
-
| `frontend.helpers_dir` | a path | `<frontend.directory>/tests/helpers/` | where
|
|
563
|
+
| `frontend.helpers_dir` | a path | `<frontend.directory>/tests/helpers/` | where helper programs live; verification metadata always lives at `.acstack/verification/VERIFICATION-KNOWLEDGE.md` |
|
|
465
564
|
| `frontend.commands.dev` | a shell command | none | how the frontend-verifier starts the dev server; without it the verifier cannot start one itself |
|
|
466
565
|
| `frontend.commands.build` | a shell command | from the profile | the frontend build the verification owner runs |
|
|
467
566
|
| `frontend.commands.lint` | a shell command | from the profile | the frontend lint the verification owner runs |
|
|
@@ -480,7 +579,7 @@ The Chrome DevTools Protocol (CDP) is the wire protocol the verifier drives a br
|
|
|
480
579
|
| --- | --- | --- | --- |
|
|
481
580
|
| `frontend.browser.mode` | `remote`, `headless`, `local` | none | the mode `acstack config browser-mode` resolves for the frontend-verifier, weighed against the three host axes; it also picks the `cdp_port` default |
|
|
482
581
|
| `frontend.browser.fallback` | `none`, `remote`, `headless`, `local` | none | only `none` acts: it forbids another mode from standing in when the host does not declare the preferred one |
|
|
483
|
-
| `frontend.browser.cdp_port` | a whole number from 1 to 65535 | `19988` under `mode: remote`, `9555` otherwise | the port the frontend-verifier dials, and the port the `agent-browser-json` row of the check requires
|
|
582
|
+
| `frontend.browser.cdp_port` | a whole number from 1 to 65535 | `19988` under `mode: remote`, `9555` otherwise | the port the frontend-verifier dials, and the port the `agent-browser-json` row of the check requires `.acstack/agent-browser.json` to name |
|
|
484
583
|
|
|
485
584
|
The two defaults come from two different browsers.
|
|
486
585
|
|
|
@@ -491,7 +590,7 @@ The two defaults come from two different browsers.
|
|
|
491
590
|
The port default applies wherever the CLI needs a number.
|
|
492
591
|
|
|
493
592
|
- `acstack config check` holds a project that states no `cdp_port` to the default its mode implies
|
|
494
|
-
- It fails when
|
|
593
|
+
- It fails when `.acstack/agent-browser.json` names a different port
|
|
495
594
|
- `acstack config show` behaves the other way, printing only what the project states
|
|
496
595
|
- "What did the project say" and "which port do we dial" are different questions
|
|
497
596
|
|
package/docs/dev-setups.md
CHANGED
|
@@ -27,7 +27,7 @@ flowchart TD
|
|
|
27
27
|
AXES --> OPT["Optional axes<br/>(preview, terminal workspace, element picker, Orca topology)"]
|
|
28
28
|
ORCH -->|"pick the worktree tool"| WT["new-worktree, teardown-worktree"]
|
|
29
29
|
BROW -->|"pick the browser"| FV["frontend-verifier"]
|
|
30
|
-
PROJ["What this project prefers<br/>(frontend.browser.* in acstack/project.yaml)"] --> FV
|
|
30
|
+
PROJ["What this project prefers<br/>(frontend.browser.* in .acstack/project.yaml)"] --> FV
|
|
31
31
|
OPT -.->|"nothing reads them yet"| CHK["acstack config check lists them"]
|
|
32
32
|
```
|
|
33
33
|
|
|
@@ -46,9 +46,9 @@ flowchart TD
|
|
|
46
46
|
| `host.terminal_workspace` | `true`, `false` | no | global config | `/acstack:setup` offers the workspace once, and never asks again after this is set |
|
|
47
47
|
| `host.element_picker` | `stagewise`, `orca-design-mode`, `none` | no | global config | nothing; check 5 lists it |
|
|
48
48
|
| `host.orca.topology` | `local`, `remote` | no | global config | nothing; check 5 marks it inert unless `host.orchestrators.orca` is `true` |
|
|
49
|
-
| `frontend.browser.mode` | `remote`, `headless`, `local` | no |
|
|
50
|
-
| `frontend.browser.cdp_port` | a port number | no |
|
|
51
|
-
| `frontend.browser.fallback` | `none`, or any word | no |
|
|
49
|
+
| `frontend.browser.mode` | `remote`, `headless`, `local` | no | `.acstack/project.yaml` | the preference, weighed against the three host axes |
|
|
50
|
+
| `frontend.browser.cdp_port` | a port number | no | `.acstack/project.yaml` | `frontend-verifier`; defaults to `19988` for `remote` and `9555` otherwise |
|
|
51
|
+
| `frontend.browser.fallback` | `none`, or any word | no | `.acstack/project.yaml` | only `none` acts: it forbids a stand-in mode |
|
|
52
52
|
|
|
53
53
|
Where the file lives, and how the CLI reads a value:
|
|
54
54
|
|
|
@@ -74,6 +74,7 @@ Add `shift` to any of these to open it in a full tab instead of a popup.
|
|
|
74
74
|
| Key | Does |
|
|
75
75
|
|---|---|
|
|
76
76
|
| `e` | edit in `$EDITOR` |
|
|
77
|
+
| `i` | inspect Markdown in Frogmouth (install with `pipx install frogmouth`; existing `i` bindings take precedence) |
|
|
77
78
|
| `o` | open by rule, which for markdown is the reader |
|
|
78
79
|
| `b` | open in the browser you are sitting at |
|
|
79
80
|
| `D` | send the file to your laptop over Taildrop |
|
|
@@ -1562,7 +1562,7 @@ export ACSTACK_OPEN_CMD="ssh laptop open" # or any command taking a URL
|
|
|
1562
1562
|
- It needs a tab armed by hand before every session
|
|
1563
1563
|
- The tab it drives lives in a dedicated Chrome profile rather than your default browser
|
|
1564
1564
|
- The opener is the answer for reading
|
|
1565
|
-
-
|
|
1565
|
+
- A separate service opens documents without depending on the relay or the browser automation session
|
|
1566
1566
|
|
|
1567
1567
|
What it does is deliberately small:
|
|
1568
1568
|
|
package/docs/workflows.md
CHANGED
|
@@ -21,7 +21,7 @@ flowchart TD
|
|
|
21
21
|
F --> T
|
|
22
22
|
T --> C["Commit<br/>(acstack:commit)"]
|
|
23
23
|
C --> Y["Sync specs from the diff<br/>(domain-map.yaml)"]
|
|
24
|
-
Y --> L[("Living specs<br
|
|
24
|
+
Y --> L[("Living specs<br/>.acstack/specs/")]
|
|
25
25
|
M -->|"every question answered"| A["Archive<br/>(check the decisions landed,<br/>then delete the nodes)"]
|
|
26
26
|
A --> L
|
|
27
27
|
```
|
|
@@ -102,7 +102,7 @@ Nodes live in a tracker. That is the storage layer, and you can swap it.
|
|
|
102
102
|
- The first line of every issue body carries all of that node's edges
|
|
103
103
|
- One list call therefore returns the whole graph
|
|
104
104
|
- A sub-issue and a dependency mirror those edges, so GitHub's own interface draws the map
|
|
105
|
-
- Files under
|
|
105
|
+
- Files under `.acstack/maps/<name>/` are the fallback
|
|
106
106
|
- Frontmatter holds the edges, so those files carry no header line
|
|
107
107
|
- Frontier, claim, and resolve build on those four operations
|
|
108
108
|
- No tracker implements them itself
|
|
@@ -152,9 +152,9 @@ Nodes live in a tracker. That is the storage layer, and you can swap it.
|
|
|
152
152
|
- There is no question cap
|
|
153
153
|
- The set of answerable questions bounds itself
|
|
154
154
|
- **`record-context`** fires when a decision lands
|
|
155
|
-
- It writes an ADR under
|
|
156
|
-
- It writes a glossary term when a term got settled, in
|
|
157
|
-
- It writes a domain term in
|
|
155
|
+
- It writes an ADR under `.acstack/decisions/` only when the decision is hard to reverse *and* surprising *and* a real trade-off
|
|
156
|
+
- It writes a glossary term when a term got settled, in `.acstack/CONTEXT.md` for cross-domain vocabulary
|
|
157
|
+
- It writes a domain term in `.acstack/specs/<domain>/CONTEXT.md` instead
|
|
158
158
|
- It can write both, or neither
|
|
159
159
|
- ACStack generates the ADR index from the files
|
|
160
160
|
- Nobody hand-edits it
|
|
@@ -194,9 +194,9 @@ flowchart LR
|
|
|
194
194
|
|
|
195
195
|
`/acstack:commit` groups changes into MECE commits. MECE means mutually exclusive and collectively exhaustive: no change appears twice, and no change goes missing. Before writing them it does five things.
|
|
196
196
|
|
|
197
|
-
1. Reads
|
|
197
|
+
1. Reads `.acstack/domain-map.yaml` to map each changed file to a domain.
|
|
198
198
|
2. Works out what the diff adds, modifies or removes, for each affected domain with a `spec.md`.
|
|
199
|
-
3. Writes those entries into the domain's spec
|
|
199
|
+
3. Writes those entries into the domain's spec; it stages tracked specs and preserves ignored specs locally without force-adding them.
|
|
200
200
|
4. Flags source files that match no domain.
|
|
201
201
|
5. Checks the glossaries.
|
|
202
202
|
|
|
@@ -214,7 +214,7 @@ Four cases stop sync.
|
|
|
214
214
|
- no file matching a domain
|
|
215
215
|
- a change that touches only docs and config
|
|
216
216
|
|
|
217
|
-
**Without
|
|
217
|
+
**Without `.acstack/domain-map.yaml` this step does nothing, silently.**
|
|
218
218
|
|
|
219
219
|
- `/acstack:setup` generates that file
|
|
220
220
|
- `acstack config check` reports it as missing on a project set up before that existed
|
|
@@ -223,11 +223,16 @@ Four cases stop sync.
|
|
|
223
223
|
|
|
224
224
|
*A map is working state, not a record you keep. Archive checks the decisions reached your specs, your decision notes, and your glossary, then deletes the nodes.*
|
|
225
225
|
|
|
226
|
-
- `/acstack:archive` checks
|
|
227
|
-
-
|
|
226
|
+
- `/acstack:archive` checks all nodes, not just the frontier: no open questions, fog, or claims apart from the root
|
|
227
|
+
- A bound design requires completed feedback reconciliation and current exact-revision approval
|
|
228
|
+
- Archive checks living specs against implemented behavior, not proposals
|
|
229
|
+
- Archive applies `record-context`'s existing ADR and glossary criteria
|
|
230
|
+
- Archive records dropped scope, unresolved limits, and durable node provenance before disposal
|
|
231
|
+
- Design source, canonical review evidence, imported history, and decision logs survive regardless of `workflow.maps.persist`
|
|
232
|
+
- Archive never recursively deletes review artifacts or evidence-bearing handoffs
|
|
228
233
|
- It then disposes of the nodes
|
|
229
234
|
- It deletes them by default
|
|
230
|
-
- It moves them to
|
|
235
|
+
- It moves them to `.acstack/archive/<date>-<name>/nodes/` when `workflow.maps.persist` is `true`
|
|
231
236
|
- Keeping nodes is off by default
|
|
232
237
|
- A kept map is a second copy of every decision
|
|
233
238
|
- The two drift apart
|
|
@@ -237,14 +242,14 @@ Four cases stop sync.
|
|
|
237
242
|
- The user types `/acstack:archive`
|
|
238
243
|
- `/acstack:map` hands off to it once every node resolves
|
|
239
244
|
- The disposal step then asks you first
|
|
240
|
-
- Legacy
|
|
245
|
+
- Legacy `.acstack/changes/` directories from the pre-map workflow still archive the old way
|
|
241
246
|
- An upgrade therefore never strands work
|
|
242
247
|
|
|
243
248
|
## 7. Living specs
|
|
244
249
|
|
|
245
|
-
*What the project keeps. ACStack deletes a map once every question resolves.
|
|
250
|
+
*What the project keeps. ACStack deletes a map once every question resolves. `.acstack/specs/` outlives it.*
|
|
246
251
|
|
|
247
|
-
- Specs live at
|
|
252
|
+
- Specs live at `.acstack/specs/<domain>/spec.md`, organised by the domains in `domain-map.yaml`
|
|
248
253
|
- Each spec states numbered functional requirements (`FR-NNN`) in Given, When, Then form
|
|
249
254
|
- They are cumulative
|
|
250
255
|
- They describe only what the code already does
|
|
@@ -257,8 +262,9 @@ Two rules keep them honest.
|
|
|
257
262
|
- Archive verifies a completed map left nothing behind
|
|
258
263
|
- Both converge on the same files
|
|
259
264
|
- **Fix it when you see it**
|
|
260
|
-
-
|
|
261
|
-
-
|
|
265
|
+
- An agent that finds a contradiction corrects the spec or routes the correction to its owner
|
|
266
|
+
- A read-only reviewer reports the discrepancy to the completion owner
|
|
267
|
+
- The owner rewrites wrong behaviour, appends missing requirements, and deletes stale references
|
|
262
268
|
|
|
263
269
|
`/acstack:bootstrap` generates the first set from an existing codebase. A project never starts from an empty directory.
|
|
264
270
|
|
|
@@ -0,0 +1,273 @@
|
|
|
1
|
+
# ACStack design review
|
|
2
|
+
|
|
3
|
+
ACStack guides design authoring, saves browser feedback, reconciles optional map contributions, and records exact-revision approval with retained evidence.
|
|
4
|
+
|
|
5
|
+
<!-- Generated from the entry YAML and its element files; regenerate with design-doc --markdown -->
|
|
6
|
+
|
|
7
|
+
```mermaid
|
|
8
|
+
flowchart TD
|
|
9
|
+
element_user["Project developer<br/>actor"]
|
|
10
|
+
subgraph element_acstack["ACStack plugin"]
|
|
11
|
+
element_skills["Agent skills<br/>component · agent"]
|
|
12
|
+
element_host["Agent session setup<br/>component · agent"]
|
|
13
|
+
subgraph element_cli["CLI package"]
|
|
14
|
+
element_review-runtime["Review command and server<br/>component · cli, web"]
|
|
15
|
+
element_viewer["Browser review interface<br/>component · web"]
|
|
16
|
+
end
|
|
17
|
+
end
|
|
18
|
+
element_design-source["Authored design files<br/>store"]
|
|
19
|
+
element_github["GitHub<br/>external-system · web"]
|
|
20
|
+
element_user -->|"Requests design guidance from"| element_skills
|
|
21
|
+
element_user -->|"Optionally publishes the Markdown companion to"| element_github
|
|
22
|
+
element_skills -->|"Guides the agent to run"| element_review-runtime
|
|
23
|
+
element_host -->|"Registers"| element_skills
|
|
24
|
+
element_review-runtime -->|"Reads design source"| element_design-source
|
|
25
|
+
element_review-runtime <-->|"Exchanges the design and comments with"| element_viewer
|
|
26
|
+
```
|
|
27
|
+
|
|
28
|
+
## Review the design before implementation
|
|
29
|
+
|
|
30
|
+
ACStack saves design feedback, reconciles comments and optional map contributions, and records human approval of the exact reviewed inputs.
|
|
31
|
+
|
|
32
|
+
This example keeps the existing architecture: Agent skills guide the agent; the Review command and server validate source and save review evidence. The Browser review interface shows the design and collects feedback and approval. Review the responsibilities, containment, and labeled arrows before implementation.
|
|
33
|
+
|
|
34
|
+
### Author, review, reconcile, and approve
|
|
35
|
+
|
|
36
|
+
1. The developer asks the agent to prepare a design through the Agent skills registered by Agent session setup
|
|
37
|
+
2. The agent writes the entry, element YAML, and supporting Markdown in one bounded directory tree
|
|
38
|
+
3. The agent runs `acstack design-doc design.yaml --markdown /tmp/acstack-design-review.md` with an unused output path and keeps the server running
|
|
39
|
+
4. The server validates source and serves the prepared graph with bundled browser assets; the browser never reads YAML directly
|
|
40
|
+
5. The developer saves comments, chooses Send to agent, and pastes the copied prompt into the agent session
|
|
41
|
+
6. The agent reads the saved review, revises source, and uses `acstack design-review status design.yaml` to inspect feedback and optional map contributions
|
|
42
|
+
7. The agent explicitly reconciles each selected comment and current contribution, then resolves blocking human questions or marks dropped scope out of scope
|
|
43
|
+
8. The agent reopens changed source for review; the human chooses Approve this revision once reconciliation is current
|
|
44
|
+
9. The agent requires `approval.valid: true` from status before implementation, then runs the separate implementation checks
|
|
45
|
+
10. At map closeout, archive verifies implemented functional requirements in living specs, architecture decision records (ADRs), and agreed glossary terms before disposing of temporary nodes
|
|
46
|
+
|
|
47
|
+
The developer can manually publish the generated Markdown companion to GitHub. Publication does not transfer browser comments or approval, and ACStack does not track that publication automatically.
|
|
48
|
+
|
|
49
|
+
### Approval belongs to exact inputs
|
|
50
|
+
|
|
51
|
+
- Approval binds `sourceRevision`, `reviewRevision`, `commentsDigest`, and `mapInputsDigest`, not the rendered page alone
|
|
52
|
+
- Each selected comment and current contribution needs one explicit disposition: `applied`, `retained`, or `needs-human`, with a rationale
|
|
53
|
+
- Unresolved blocking decisions or a `needs-human` disposition prevent approval; comments alone never authorize implementation
|
|
54
|
+
- Source, saved feedback, or meaningful contribution changes reopen the gate; presentation regeneration alone preserves approval
|
|
55
|
+
|
|
56
|
+
- Use `design-review status` for the current tuple and contribution keys
|
|
57
|
+
- Follow `skills/design-doc/SKILL.md` for the reconciliation schema and `design-review reconcile <entry> --input <json-file>`
|
|
58
|
+
- Select earlier feedback with `--review-file <canonical-review.json>` when reconciling that history
|
|
59
|
+
- Original comments stay with their original version
|
|
60
|
+
- Previously selected histories remain review obligations after later source changes
|
|
61
|
+
|
|
62
|
+
This revised example is a new draft requiring fresh human approval.
|
|
63
|
+
|
|
64
|
+
### Map binding is optional
|
|
65
|
+
|
|
66
|
+
This portable example has no map binding. A project can add `planning: {tracker: files | github, map: <name>}` and put `Design entry: <repository-relative-path>` in its map root. Node bodies supply explicit design contributions; the map does not become the architecture graph.
|
|
67
|
+
|
|
68
|
+
Bundled browser assets require no external fetch or design upload. Agent-side reads of a GitHub-bound map still need GitHub access. The diagram's GitHub arrow describes manual Markdown publication, not tracker synchronization.
|
|
69
|
+
|
|
70
|
+
### Archive preserves evidence; legacy import is explicit
|
|
71
|
+
|
|
72
|
+
- Archive checks current approval and reconciliation before closing a bound map
|
|
73
|
+
- Archive verifies implemented requirements against source and verification evidence
|
|
74
|
+
- Archive records qualifying ADRs and glossary terms
|
|
75
|
+
- Archive retains design sources, canonical reviews, import history, original legacy artifacts, and decision logs independently of node disposal
|
|
76
|
+
|
|
77
|
+
- Use `node walk`, `node frontier`, and `node diagram` for planning; ACStack retires `map --map` and `align-viewer` without aliases
|
|
78
|
+
- Import legacy feedback only through `design-review migrate` with an explicit target mapping
|
|
79
|
+
- Treat imported approval as historical; imported comments require reconciliation and fresh exact-revision approval
|
|
80
|
+
- Startup and archive never migrate automatically
|
|
81
|
+
|
|
82
|
+
### Local source and optional GitHub publication
|
|
83
|
+
|
|
84
|
+
- Authored design files are the local YAML and supporting Markdown read by the Review command and server
|
|
85
|
+
- GitHub hosts a published copy of the generated companion only when the Project developer chooses to share it
|
|
86
|
+
- Git ignore rules control ordinary tracking; they neither publish files nor prevent local browser review
|
|
87
|
+
- Both the Authored design files and GitHub drawers explain source ownership, published copies, and ignore rules
|
|
88
|
+
|
|
89
|
+
### Containment and arrows keep their existing meaning
|
|
90
|
+
|
|
91
|
+
The ACStack plugin contains Agent skills, Agent session setup, and the CLI package. The CLI package contains the Review command and server and the Browser review interface. The Project developer, Authored design files, and GitHub remain outside the plugin.
|
|
92
|
+
|
|
93
|
+
- Each component is one entity, shown collapsed or expanded
|
|
94
|
+
- Nesting means containment; arrows connect responsible entities, never ancestors to descendants
|
|
95
|
+
- Read one-way arrows as actor, action, and target: the server reads source, and the developer optionally publishes Markdown
|
|
96
|
+
- The bidirectional review-session arrow covers the prepared graph, posted comments, and retrieved comments
|
|
97
|
+
- Concerns describe shared requirements without changing containment
|
|
98
|
+
|
|
99
|
+
### Optional repository context
|
|
100
|
+
|
|
101
|
+
- Authoring, reconciliation, approval, and migration guidance: `skills/design-doc/SKILL.md`
|
|
102
|
+
- Local review and lifecycle commands: `cli/src/commands/design-doc.ts`
|
|
103
|
+
- Bounded source validation, graph, and Markdown generation: `cli/src/lib/design-doc.ts`
|
|
104
|
+
- Contributions and exact-input approval: `cli/src/lib/design-map.ts`, `cli/src/lib/design-lifecycle.ts`
|
|
105
|
+
- Saved review history and legacy imports: `cli/src/lib/design-review.ts`, `cli/src/lib/design-migration.ts`
|
|
106
|
+
- Closeout and evidence retention: `skills/archive/SKILL.md`
|
|
107
|
+
|
|
108
|
+
- Run the review command from this example directory with a built CLI
|
|
109
|
+
- Choose `--port <port>` if another review uses the default port
|
|
110
|
+
- Use an unused path for each Markdown export
|
|
111
|
+
- Keep the companion beside source when its relative links must work on GitHub
|
|
112
|
+
- New designs default to Git-ignored `.acstack/designs/`; this repository intentionally tracks this public example
|
|
113
|
+
|
|
114
|
+
|
|
115
|
+
## Project developer
|
|
116
|
+
|
|
117
|
+
*Authors the design and reviews the exported artifact locally.*
|
|
118
|
+
|
|
119
|
+
- Identity: `user`
|
|
120
|
+
- Kind: actor
|
|
121
|
+
- Channels: none
|
|
122
|
+
- Source: [user.yaml](user.yaml)
|
|
123
|
+
|
|
124
|
+
|
|
125
|
+
|
|
126
|
+
## ACStack plugin
|
|
127
|
+
|
|
128
|
+
*Ships agent skills, session setup, and a bundled CLI.*
|
|
129
|
+
|
|
130
|
+
- Identity: `acstack`
|
|
131
|
+
- Kind: component
|
|
132
|
+
- Channels: none
|
|
133
|
+
- Source: [acstack.yaml](acstack.yaml)
|
|
134
|
+
|
|
135
|
+
|
|
136
|
+
|
|
137
|
+
## Agent skills
|
|
138
|
+
|
|
139
|
+
*Guide the agent through authoring and exporting a design for review.*
|
|
140
|
+
|
|
141
|
+
- Identity: `skills`
|
|
142
|
+
- Kind: component
|
|
143
|
+
- Channels: agent
|
|
144
|
+
- Source: [skills.yaml](skills.yaml)
|
|
145
|
+
|
|
146
|
+
## Honest review status
|
|
147
|
+
|
|
148
|
+
- Requirement: An exported review artifact must not imply that a reviewer approved a map or implementation.
|
|
149
|
+
- Design response: Comments and exports are not approval. Approval requires reconciled feedback and contributions, resolved blocking questions, and the exact source, review, comments, and map-input tuple. Implementation checks remain separate.
|
|
150
|
+
- Applies to: skills, review-runtime, viewer
|
|
151
|
+
|
|
152
|
+
## Agent session setup
|
|
153
|
+
|
|
154
|
+
*Registers ACStack skill commands and adds rules for planning, coding, and checking changes to the agent's session.*
|
|
155
|
+
|
|
156
|
+
- Identity: `host`
|
|
157
|
+
- Kind: component
|
|
158
|
+
- Channels: agent
|
|
159
|
+
- Source: [host.yaml](host.yaml)
|
|
160
|
+
|
|
161
|
+
|
|
162
|
+
|
|
163
|
+
## CLI package
|
|
164
|
+
|
|
165
|
+
*Ships the review command, local server, and browser review interface.*
|
|
166
|
+
|
|
167
|
+
- Identity: `cli`
|
|
168
|
+
- Kind: component
|
|
169
|
+
- Channels: none
|
|
170
|
+
- Source: [cli.yaml](cli.yaml)
|
|
171
|
+
|
|
172
|
+
|
|
173
|
+
|
|
174
|
+
## Review command and server
|
|
175
|
+
|
|
176
|
+
*Reads and validates authored YAML, serves the browser review interface, saves comments, and exports Markdown.*
|
|
177
|
+
|
|
178
|
+
- Identity: `review-runtime`
|
|
179
|
+
- Kind: component
|
|
180
|
+
- Channels: cli, web
|
|
181
|
+
- Source: [review-runtime.yaml](review-runtime.yaml)
|
|
182
|
+
|
|
183
|
+
## Offline review
|
|
184
|
+
|
|
185
|
+
- Requirement: Reviewers can inspect the design without uploading project details or fetching browser assets.
|
|
186
|
+
- Design response: The review command and server read bounded local source files and embed validated graph data with bundled browser assets, without uploading the design. Agent-side reads of GitHub-bound maps still require network access.
|
|
187
|
+
- Applies to: review-runtime, viewer, design-source
|
|
188
|
+
|
|
189
|
+
## Honest review status
|
|
190
|
+
|
|
191
|
+
- Requirement: An exported review artifact must not imply that a reviewer approved a map or implementation.
|
|
192
|
+
- Design response: Comments and exports are not approval. Approval requires reconciled feedback and contributions, resolved blocking questions, and the exact source, review, comments, and map-input tuple. Implementation checks remain separate.
|
|
193
|
+
- Applies to: skills, review-runtime, viewer
|
|
194
|
+
|
|
195
|
+
## Browser review interface
|
|
196
|
+
|
|
197
|
+
*Receives the prepared design graph and syncs comments with the local server.*
|
|
198
|
+
|
|
199
|
+
- Identity: `viewer`
|
|
200
|
+
- Kind: component
|
|
201
|
+
- Channels: web
|
|
202
|
+
- Source: [viewer.yaml](viewer.yaml)
|
|
203
|
+
|
|
204
|
+
## Offline review
|
|
205
|
+
|
|
206
|
+
- Requirement: Reviewers can inspect the design without uploading project details or fetching browser assets.
|
|
207
|
+
- Design response: The review command and server read bounded local source files and embed validated graph data with bundled browser assets, without uploading the design. Agent-side reads of GitHub-bound maps still require network access.
|
|
208
|
+
- Applies to: review-runtime, viewer, design-source
|
|
209
|
+
|
|
210
|
+
## Honest review status
|
|
211
|
+
|
|
212
|
+
- Requirement: An exported review artifact must not imply that a reviewer approved a map or implementation.
|
|
213
|
+
- Design response: Comments and exports are not approval. Approval requires reconciled feedback and contributions, resolved blocking questions, and the exact source, review, comments, and map-input tuple. Implementation checks remain separate.
|
|
214
|
+
- Applies to: skills, review-runtime, viewer
|
|
215
|
+
|
|
216
|
+
## Authored design files
|
|
217
|
+
|
|
218
|
+
*Holds the local YAML and supporting Markdown that the review server reads.*
|
|
219
|
+
|
|
220
|
+
- Identity: `design-source`
|
|
221
|
+
- Kind: store
|
|
222
|
+
- Channels: none
|
|
223
|
+
- Source: [store.yaml](store.yaml)
|
|
224
|
+
|
|
225
|
+
Authored design files define the design in the local checkout; GitHub hosts a published copy only if the developer chooses to share it.
|
|
226
|
+
|
|
227
|
+
- Local files drive the review
|
|
228
|
+
- The Review command and server read the local YAML and supporting Markdown to generate the browser view and Markdown companion
|
|
229
|
+
- Revise these source files when the design changes
|
|
230
|
+
- Local browser review and saved comments work without publishing design files to GitHub
|
|
231
|
+
- GitHub hosts a published copy
|
|
232
|
+
- The Project developer can commit and push the generated companion for others to read on GitHub
|
|
233
|
+
- The developer can publish the companion alone or include the authored source files
|
|
234
|
+
- GitHub does not replace the local files read by the review server or automatically receive its saved comments
|
|
235
|
+
- This diagram's publication arrow is separate from using GitHub issues as a map tracker
|
|
236
|
+
- Git ignore rules control tracking, not publication
|
|
237
|
+
- Ignore rules exclude matching untracked files from ordinary staging
|
|
238
|
+
- Removing an ignore rule does not stage, commit, or push anything
|
|
239
|
+
- Already tracked files remain tracked even if an ignore rule later matches them
|
|
240
|
+
- New project designs under `.acstack/` stay ignored by default; this public example is tracked separately
|
|
241
|
+
|
|
242
|
+
|
|
243
|
+
## Offline review
|
|
244
|
+
|
|
245
|
+
- Requirement: Reviewers can inspect the design without uploading project details or fetching browser assets.
|
|
246
|
+
- Design response: The review command and server read bounded local source files and embed validated graph data with bundled browser assets, without uploading the design. Agent-side reads of GitHub-bound maps still require network access.
|
|
247
|
+
- Applies to: review-runtime, viewer, design-source
|
|
248
|
+
|
|
249
|
+
## GitHub
|
|
250
|
+
|
|
251
|
+
*Hosts a published copy of the Markdown companion when the developer chooses to share it.*
|
|
252
|
+
|
|
253
|
+
- Identity: `github`
|
|
254
|
+
- Kind: external-system
|
|
255
|
+
- Channels: web
|
|
256
|
+
- Source: [github.yaml](github.yaml)
|
|
257
|
+
|
|
258
|
+
Authored design files define the design in the local checkout; GitHub hosts a published copy only if the developer chooses to share it.
|
|
259
|
+
|
|
260
|
+
- Local files drive the review
|
|
261
|
+
- The Review command and server read the local YAML and supporting Markdown to generate the browser view and Markdown companion
|
|
262
|
+
- Revise these source files when the design changes
|
|
263
|
+
- Local browser review and saved comments work without publishing design files to GitHub
|
|
264
|
+
- GitHub hosts a published copy
|
|
265
|
+
- The Project developer can commit and push the generated companion for others to read on GitHub
|
|
266
|
+
- The developer can publish the companion alone or include the authored source files
|
|
267
|
+
- GitHub does not replace the local files read by the review server or automatically receive its saved comments
|
|
268
|
+
- This diagram's publication arrow is separate from using GitHub issues as a map tracker
|
|
269
|
+
- Git ignore rules control tracking, not publication
|
|
270
|
+
- Ignore rules exclude matching untracked files from ordinary staging
|
|
271
|
+
- Removing an ignore rule does not stage, commit, or push anything
|
|
272
|
+
- Already tracked files remain tracked even if an ignore rule later matches them
|
|
273
|
+
- New project designs under `.acstack/` stay ignored by default; this public example is tracked separately
|