acstack 0.54.2 → 0.54.4

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.
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "acstack",
3
3
  "description": "Agentic coding stack where planning grows only as far as needed: a map of decisions, tasks, checks, and handoffs behind a pluggable tracker.",
4
- "version": "0.54.2",
4
+ "version": "0.54.4",
5
5
  "author": {
6
6
  "name": "ac8318740"
7
7
  },
package/README.md CHANGED
@@ -55,13 +55,10 @@ Install the plugin:
55
55
  /plugin install acstack@ac-agentic-coding
56
56
  ```
57
57
 
58
- Then, in your project:
58
+ Then, in your Git repository, use `/acstack:implement`, `/acstack:quick-fix`, or `/acstack:pre-commit-review` directly. Without project configuration, ACStack follows repository instructions and discovers tooling from manifests, tests, and CI.
59
59
 
60
- ```
61
- /acstack:setup
62
- ```
63
-
64
- - `/acstack:setup` detects the project type, then writes `project.yaml` with workflow settings into the project folder
60
+ - Optional: `/acstack:setup` detects the project type and writes `project.yaml` for saved workflow settings and storage-backed features such as maps and living specs
61
+ - Existing configuration keeps its gates; invalid configuration or project-data conflicts require repair, not an unconfigured fallback
65
62
  - All ACStack-owned project records live in one project folder per repository, shared by all of its worktrees
66
63
  - `~/.claude/acstack/bin/acstack project-data path` prints it; by default it is `~/.acstack/projects/<key>/`, outside the repository
67
64
  - Run `acstack project-data mode tracked` to keep the records in the repository's `.acstack/` and commit them instead
@@ -69,7 +66,7 @@ Then, in your project:
69
66
  - Update installed ACStack tools before migrating an older project
70
67
  - Stop old agents and reviews, run `~/.claude/acstack/bin/acstack project-data migrate`, then restart with updated tools
71
68
  - Migration aborts on collisions without overwrites or Git index changes; tracked old paths become pending deletions
72
- - The SessionStart hook loads the orchestrator instructions whenever it detects an ACStack project
69
+ - The SessionStart hook loads the orchestrator instructions in Git repositories, even without project setup
73
70
  - Your CLAUDE.md stays clean for project-specific content
74
71
  - Upgrading from a version before 0.8.0 means deleting one stale `@import` line (see [docs/migrate-0.8.md](docs/migrate-0.8.md))
75
72
 
@@ -82,7 +79,7 @@ pi install npm:@tintinweb/pi-subagents
82
79
  pi install npm:acstack
83
80
  ```
84
81
 
85
- Then, in your project, run `/acstack:setup`.
82
+ Then use the general workflows in your Git repository immediately. Run `/acstack:setup` only when you want saved project settings or storage-backed features, as described above.
86
83
 
87
84
  - Every skill runs under the same name as on Claude Code, e.g. `/acstack:map`
88
85
  - `/acstack map` does the same
@@ -92,7 +89,7 @@ Then, in your project, run `/acstack:setup`.
92
89
  - The extension lists the skills in the system prompt instead, so the model still reads one when the task matches
93
90
  - `pi/extension.ts` does what the Claude Code hooks do
94
91
  - It links the CLI at `~/.claude/acstack/bin/acstack`
95
- - It adds the orchestrator instructions to the system prompt in an ACStack project
92
+ - It adds the orchestrator instructions in Git repositories, even without project setup
96
93
  - It lists ACStack's skills in the system prompt in every session
97
94
  - It re-injects a handoff after a compaction
98
95
  - It nudges with a continuity-versus-freshness checkpoint as the context fills
@@ -33,7 +33,7 @@ ACStack keeps project data in the project folder, the path `~/.claude/acstack/bi
33
33
 
34
34
  You do not read `frontend.browser.mode` or `frontend.browser.fallback`. Step 3 asks the ACStack CLI which browser mode to use, and the CLI reads both.
35
35
 
36
- If `<project folder>/project.yaml` has no `frontend` section, report SKIP and exit.
36
+ If `<project folder>/project.yaml` is absent or has no `frontend` section, report SKIP (no configured frontend verification) and exit. Do not create configuration or require setup for general work. Report unreadable or invalid configuration and project-data resolution errors instead of treating them as absent.
37
37
 
38
38
  ## Step 0: Read the knowledge base
39
39
 
@@ -15,7 +15,7 @@ You are read-only: do not edit source, tests, or specs.
15
15
  ## Establish scope and ownership
16
16
 
17
17
  Read the supplied requirements, affected paths, known risks, and available command results.
18
- Read `project.yaml` in the project folder that `~/.claude/acstack/bin/acstack project-data path` prints for commands, directories, environment activation, and applicable frontend gates.
18
+ Read `project.yaml` when present in the project folder that `~/.claude/acstack/bin/acstack project-data path` prints for commands, directories, environment activation, and applicable frontend gates. Without it, discover tooling from repository instructions, manifests, existing tests, and CI under Project configuration in `orchestrator/AGENTS.md`. Do not require setup, invent commands, or bypass invalid config or resolution errors.
19
19
 
20
20
  - Distinguish focused review from ownership of completion verification
21
21
  - If the assignment is unclear, clarify it with the delegating session before duplicating checks
@@ -17,7 +17,9 @@ Implement the assigned requirements under the shared Implementation discipline i
17
17
 
18
18
  ## Project configuration
19
19
 
20
- Read `project.yaml` in the project folder that `~/.claude/acstack/bin/acstack project-data path` prints for project-specific settings:
20
+ Read `project.yaml` when present in the project folder that `~/.claude/acstack/bin/acstack project-data path` prints. Without configuration, discover settings from repository instructions, manifests, existing tests, and CI under Project configuration in `orchestrator/AGENTS.md`; do not require setup or invent commands. Report invalid config and resolution errors rather than bypassing them.
21
+
22
+ Configured settings:
21
23
 
22
24
  - `directories.source` – where to write source code
23
25
  - `directories.tests` – test directory, subject to assigned ownership
@@ -26,7 +26,9 @@ You write tests from requirements and application programming interface (API) co
26
26
 
27
27
  ## Project configuration
28
28
 
29
- Read `project.yaml` in the project folder that `~/.claude/acstack/bin/acstack project-data path` prints for project-specific settings:
29
+ Read `project.yaml` when present in the project folder that `~/.claude/acstack/bin/acstack project-data path` prints. Without configuration, discover settings from repository instructions, manifests, existing tests, and CI under Project configuration in `orchestrator/AGENTS.md`; do not require setup or invent commands. Report invalid config and resolution errors rather than bypassing them.
30
+
31
+ Configured settings:
30
32
 
31
33
  - `directories.tests` – where to create test files
32
34
  - `directories.source` – source code root (for mirroring structure)
@@ -33,7 +33,7 @@ ACStack keeps project data in the project folder, the path `~/.claude/acstack/bi
33
33
 
34
34
  You do not read `frontend.browser.mode` or `frontend.browser.fallback`. Step 3 asks the ACStack CLI which browser mode to use, and the CLI reads both.
35
35
 
36
- If `<project folder>/project.yaml` has no `frontend` section, report SKIP and exit.
36
+ If `<project folder>/project.yaml` is absent or has no `frontend` section, report SKIP (no configured frontend verification) and exit. Do not create configuration or require setup for general work. Report unreadable or invalid configuration and project-data resolution errors instead of treating them as absent.
37
37
 
38
38
  ## Step 0: Read the knowledge base
39
39
 
@@ -15,7 +15,7 @@ You are read-only: do not edit source, tests, or specs.
15
15
  ## Establish scope and ownership
16
16
 
17
17
  Read the supplied requirements, affected paths, known risks, and available command results.
18
- Read `project.yaml` in the project folder that `~/.claude/acstack/bin/acstack project-data path` prints for commands, directories, environment activation, and applicable frontend gates.
18
+ Read `project.yaml` when present in the project folder that `~/.claude/acstack/bin/acstack project-data path` prints for commands, directories, environment activation, and applicable frontend gates. Without it, discover tooling from repository instructions, manifests, existing tests, and CI under Project configuration in `orchestrator/AGENTS.md`. Do not require setup, invent commands, or bypass invalid config or resolution errors.
19
19
 
20
20
  - Distinguish focused review from ownership of completion verification
21
21
  - If the assignment is unclear, clarify it with the delegating session before duplicating checks
@@ -17,7 +17,9 @@ Implement the assigned requirements under the shared Implementation discipline i
17
17
 
18
18
  ## Project configuration
19
19
 
20
- Read `project.yaml` in the project folder that `~/.claude/acstack/bin/acstack project-data path` prints for project-specific settings:
20
+ Read `project.yaml` when present in the project folder that `~/.claude/acstack/bin/acstack project-data path` prints. Without configuration, discover settings from repository instructions, manifests, existing tests, and CI under Project configuration in `orchestrator/AGENTS.md`; do not require setup or invent commands. Report invalid config and resolution errors rather than bypassing them.
21
+
22
+ Configured settings:
21
23
 
22
24
  - `directories.source` – where to write source code
23
25
  - `directories.tests` – test directory, subject to assigned ownership
@@ -26,7 +26,9 @@ You write tests from requirements and application programming interface (API) co
26
26
 
27
27
  ## Project configuration
28
28
 
29
- Read `project.yaml` in the project folder that `~/.claude/acstack/bin/acstack project-data path` prints for project-specific settings:
29
+ Read `project.yaml` when present in the project folder that `~/.claude/acstack/bin/acstack project-data path` prints. Without configuration, discover settings from repository instructions, manifests, existing tests, and CI under Project configuration in `orchestrator/AGENTS.md`; do not require setup or invent commands. Report invalid config and resolution errors rather than bypassing them.
30
+
31
+ Configured settings:
30
32
 
31
33
  - `directories.tests` – where to create test files
32
34
  - `directories.source` – source code root (for mirroring structure)
package/cli/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "acstack-cli",
3
- "version": "0.54.2",
3
+ "version": "0.54.4",
4
4
  "description": "CLI for the ACStack agentic coding stack",
5
5
  "type": "module",
6
6
  "license": "MIT",
@@ -2,13 +2,17 @@
2
2
 
3
3
  *Every key in `project.yaml`, the values it takes, its default, and what changes when you change it.*
4
4
 
5
- One file, `<project folder>/project.yaml`, holds every setting that belongs to a project.
5
+ Optional `<project folder>/project.yaml` holds saved ACStack project settings.
6
6
  The project folder is the repository's ACStack data folder, the path `~/.claude/acstack/bin/acstack project-data path` prints (section 1 explains where it lives).
7
7
 
8
+ General implementation, investigation, and review work without setup. Without this file, agents use repository instructions, manifests, existing tests, and CI to discover commands and directories. They do not invent commands or create configuration automatically. Run `/acstack:setup` when you want saved settings or storage-backed features such as maps and living specs.
9
+
10
+ Existing configuration keeps its gates. Unreadable or invalid configuration, legacy data, and project-data conflicts require the reported repair; they are not absent-config fallbacks. Orphan warnings alone do not block general work.
11
+
8
12
  - **It names what to run**: the test, build, lint, typecheck, and format commands
9
13
  - **It names where to look**: the source and test directories, and the frontend
10
14
  - **It configures required gates**: spec sync, frontend verification, and design review
11
- - **Every skill and every agent reads it** before it runs anything
15
+ - **Agents read it when present** before running project checks
12
16
  - **A key you leave out takes the default** this document gives it
13
17
 
14
18
  Three terms first.
@@ -70,7 +74,8 @@ These commands report configuration without changing settings.
70
74
 
71
75
  - `~/.claude/acstack/bin/acstack project-data path` prints the project folder's absolute path, even before the folder exists
72
76
  - It exits non-zero outside a Git repository
73
- - It exits non-zero with a message naming the fix when legacy data, an orphaned entry, or a conflict needs attention
77
+ - It exits non-zero with a repair message for legacy, invalid, or conflicting data
78
+ - Orphan warnings do not block a valid current repository or adopt the orphan's settings
74
79
  - The session-start hook states the same path in the agent's context
75
80
  - This document writes a part inside it as `<project folder>/project.yaml`, `<project folder>/specs/`, and so on
76
81
  - `/acstack:setup` creates the folder with `mkdir -p "$(~/.claude/acstack/bin/acstack project-data path)"`
@@ -124,6 +124,9 @@ export function decide({ toolName, toolInput, cwd, main, ledger, settings }) {
124
124
  if (!main || !ledger) return { block: false };
125
125
  const file = wholeReadTarget(toolName, toolInput, cwd);
126
126
  if (!file) return { block: false };
127
+ // Native image reads are attachments; shell readers still dump bytes.
128
+ // shortcut: use image extensions, add content detection if extensionless images need exemption.
129
+ if (String(toolName).toLowerCase() === 'read' && /\.(png|jpe?g|gif|webp|bmp)$/i.test(file)) return { block: false };
127
130
  // Resolved only for a whole-file read, since it costs a CLI call.
128
131
  settings ??= readGuardSettings(cwd);
129
132
  if (!settings.enabled) return { block: false };
@@ -142,7 +145,7 @@ export function blockMessage(bytes) {
142
145
  const kb = Math.round(bytes / 1024);
143
146
  const tokens = Math.round(bytes / 4 / 1000) * 1000;
144
147
  return [
145
- `This file is ${kb} KB (about ${tokens.toLocaleString('en-US')} tokens), and reading all of it is usually unnecessary. Instead:`,
148
+ `This file is ${kb} KB (rough text estimate: ${tokens.toLocaleString('en-US')} tokens), and reading all of it is usually unnecessary. Instead:`,
146
149
  '',
147
150
  '- Search for what you need, then read only that range',
148
151
  "- Or hand the question to an investigator, as ACStack's Delegate investigation section describes",
@@ -186,11 +186,6 @@ if ! project_folder=$(acstack_project_folder "$cli_wrapper"); then
186
186
  exit 0
187
187
  fi
188
188
 
189
- if [ ! -f "$project_folder/project.yaml" ]; then
190
- echo 'acstack: no project config found. Run /acstack:setup to set up.' >&2
191
- exit 0
192
- fi
193
-
194
189
  claude_md="${plugin_root}/orchestrator/AGENTS.md"
195
190
 
196
191
  if [ -z "$plugin_root" ] || [ ! -r "$claude_md" ]; then
@@ -102,7 +102,15 @@ ACStack runs on Claude Code, Codex, and pi. The skills name each capability once
102
102
  - Never silently migrate data or work around legacy data by creating a partial project folder
103
103
  - Never change the Git index or force-add files to track project data
104
104
 
105
- All project-specific commands and paths come from `<project folder>/project.yaml`. Read this file before you run any build, test or lint command. If it doesn't exist, prompt the user to run `/acstack:setup`.
105
+ Project setup is optional for general implementation, investigation, and review. Resolve the project folder first; a prospective path or a folder without `project.yaml` is not an error.
106
+
107
+ - When `<project folder>/project.yaml` exists, read it before running build, test, or lint commands and preserve its configured gates
108
+ - Without it, use repository instructions, manifests, existing tests, and CI to discover commands, directories, and environment activation
109
+ - Do not invent commands, assume a profile, or create configuration automatically
110
+ - If no useful check is discoverable, report that limit or ask for the missing command
111
+ - An unreadable or invalid configuration is not absent configuration. Report it and stop work that depends on it; do not bypass its gates
112
+ - Legacy, conflicting, or invalid project-data resolution also requires the reported repair, not an unconfigured fallback. Orphan warnings alone do not block work
113
+ - Offer `/acstack:setup` when the user wants saved project settings or storage-backed features such as maps, living specs, or configured browser verification; do not require it for general work
106
114
 
107
115
  Key fields:
108
116
 
@@ -390,7 +398,7 @@ Read-only reviewers report discrepancies to the completion owner.
390
398
 
391
399
  The verification owner gathers evidence for the final revision. Opening a PR does not require running every test locally.
392
400
 
393
- Read `<project folder>/project.yaml` for the available commands and inspect the project's CI configuration before relying on it:
401
+ Use `<project folder>/project.yaml` when present, otherwise discover commands under Project configuration above. Inspect the project's CI configuration before relying on it:
394
402
 
395
403
  1. Use focused local checks by default: cover changed behavior, affected callers, and relevant integration paths
396
404
  2. Run applicable build, lint, and typecheck checks; scope them when the tooling supports it
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "acstack",
3
- "version": "0.54.2",
3
+ "version": "0.54.4",
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",
@@ -39,7 +39,7 @@ ACStack keeps project data in the project folder, the path `~/.claude/acstack/bi
39
39
 
40
40
  You do not read `frontend.browser.mode` or `frontend.browser.fallback`. Step 3 asks the ACStack CLI which browser mode to use, and the CLI reads both.
41
41
 
42
- If `<project folder>/project.yaml` has no `frontend` section, report SKIP and exit.
42
+ If `<project folder>/project.yaml` is absent or has no `frontend` section, report SKIP (no configured frontend verification) and exit. Do not create configuration or require setup for general work. Report unreadable or invalid configuration and project-data resolution errors instead of treating them as absent.
43
43
 
44
44
  ## Step 0: Read the knowledge base
45
45
 
@@ -19,7 +19,7 @@ You are read-only: do not edit source, tests, or specs.
19
19
  ## Establish scope and ownership
20
20
 
21
21
  Read the supplied requirements, affected paths, known risks, and available command results.
22
- Read `project.yaml` in the project folder that `~/.claude/acstack/bin/acstack project-data path` prints for commands, directories, environment activation, and applicable frontend gates.
22
+ Read `project.yaml` when present in the project folder that `~/.claude/acstack/bin/acstack project-data path` prints for commands, directories, environment activation, and applicable frontend gates. Without it, discover tooling from repository instructions, manifests, existing tests, and CI under Project configuration in `orchestrator/AGENTS.md`. Do not require setup, invent commands, or bypass invalid config or resolution errors.
23
23
 
24
24
  - Distinguish focused review from ownership of completion verification
25
25
  - If the assignment is unclear, clarify it with the delegating session before duplicating checks
@@ -23,7 +23,9 @@ Implement the assigned requirements under the shared Implementation discipline i
23
23
 
24
24
  ## Project configuration
25
25
 
26
- Read `project.yaml` in the project folder that `~/.claude/acstack/bin/acstack project-data path` prints for project-specific settings:
26
+ Read `project.yaml` when present in the project folder that `~/.claude/acstack/bin/acstack project-data path` prints. Without configuration, discover settings from repository instructions, manifests, existing tests, and CI under Project configuration in `orchestrator/AGENTS.md`; do not require setup or invent commands. Report invalid config and resolution errors rather than bypassing them.
27
+
28
+ Configured settings:
27
29
 
28
30
  - `directories.source` – where to write source code
29
31
  - `directories.tests` – test directory, subject to assigned ownership
@@ -32,7 +32,9 @@ You write tests from requirements and application programming interface (API) co
32
32
 
33
33
  ## Project configuration
34
34
 
35
- Read `project.yaml` in the project folder that `~/.claude/acstack/bin/acstack project-data path` prints for project-specific settings:
35
+ Read `project.yaml` when present in the project folder that `~/.claude/acstack/bin/acstack project-data path` prints. Without configuration, discover settings from repository instructions, manifests, existing tests, and CI under Project configuration in `orchestrator/AGENTS.md`; do not require setup or invent commands. Report invalid config and resolution errors rather than bypassing them.
36
+
37
+ Configured settings:
36
38
 
37
39
  - `directories.tests` – where to create test files
38
40
  - `directories.source` – source code root (for mirroring structure)
package/pi/extension.ts CHANGED
@@ -648,13 +648,9 @@ export default function acstack(pi: ExtensionAPI): void {
648
648
 
649
649
  const orchestratorFile = path.join(packageRoot, "orchestrator", "AGENTS.md");
650
650
  const styleFile = path.join(packageRoot, "output-styles", "ac-writing-style.md");
651
- const isProject = (cwd: string) => {
652
- const folder = projectFolder(undefined, cwd);
653
- return folder !== null && fs.existsSync(path.join(folder, "project.yaml"));
654
- };
655
651
  let warnedSubagents = false;
656
652
 
657
- pi.on("session_start", async (event, ctx) => {
653
+ pi.on("session_start", async (_event, ctx) => {
658
654
  if (!delegated) linkClis(ctx);
659
655
  projectFolders.delete(path.resolve(ctx.cwd));
660
656
  if (projectFolder(ctx, ctx.cwd) === null) return;
@@ -668,10 +664,6 @@ export default function acstack(pi: ExtensionAPI): void {
668
664
  "warning",
669
665
  );
670
666
  }
671
-
672
- if (event.reason === "startup" && !isProject(ctx.cwd)) {
673
- report(ctx, "acstack: no project config found. Run /acstack:setup to set up.");
674
- }
675
667
  });
676
668
 
677
669
  // /acstack map <args> and /acstack:map <args> both run ACStack's own map
@@ -685,9 +677,10 @@ export default function acstack(pi: ExtensionAPI): void {
685
677
  // Every session, like the plugin's skills on Claude Code.
686
678
  if (skillsPrompt) sections["acstack-skills"] = skillsPrompt;
687
679
 
688
- if (isProject(ctx.cwd)) {
680
+ const folder = projectFolder(undefined, ctx.cwd);
681
+ if (folder !== null) {
689
682
  const orchestrator = readText(orchestratorFile);
690
- if (orchestrator) sections["acstack-orchestrator"] = `${orchestratorFor(orchestrator, delegated ? "delegated" : "lead")}\n\nThis repository's ACStack project folder: ${projectFolder(undefined, ctx.cwd)}\n`;
683
+ if (orchestrator) sections["acstack-orchestrator"] = `${orchestratorFor(orchestrator, delegated ? "delegated" : "lead")}\n\nThis repository's ACStack project folder: ${folder}\n`;
691
684
  else report(ctx, `acstack: could not read ${orchestratorFile}`, "warning");
692
685
  }
693
686
 
@@ -45,7 +45,7 @@ For each planned commit:
45
45
 
46
46
  **This step is non-negotiable.** After drafting the commit message but BEFORE creating the commit, spec sync runs automatically.
47
47
 
48
- The project folder is the path `~/.claude/acstack/bin/acstack project-data path` prints. Read `<project folder>/project.yaml` – if `workflow.spec_sync` is `true` (or not explicitly `false`), run spec sync:
48
+ The project folder is the path `~/.claude/acstack/bin/acstack project-data path` prints. Follow Project configuration in `orchestrator/AGENTS.md` for resolution errors and invalid config. If `project.yaml` is absent, commit using repository instructions without creating ACStack records. When present, read it; if `workflow.spec_sync` is `true` (or not explicitly `false`), run spec sync:
49
49
 
50
50
  1. Read `<project folder>/domain-map.yaml` (if exists)
51
51
  2. Map staged files to spec domains
@@ -62,7 +62,7 @@ The project folder is the path `~/.claude/acstack/bin/acstack project-data path`
62
62
 
63
63
  **Skip spec sync ONLY when:**
64
64
 
65
- - `workflow.spec_sync` is explicitly `false` in project.yaml
65
+ - `project.yaml` is absent, or `workflow.spec_sync` is explicitly `false`
66
66
  - No `<project folder>/domain-map.yaml` exists
67
67
  - Changed files don't match any domain
68
68
  - Changes are docs/config only (no behavioral changes)
@@ -104,4 +104,4 @@ If commit fails due to pre-commit hooks:
104
104
  - NEVER use `git add -A` or `git add .` – stage specific files
105
105
  - Always create NEW commits after hook failures
106
106
  - Prefer specific file staging over broad patterns
107
- - Spec sync is MANDATORY – do not skip it unless explicitly disabled in project.yaml
107
+ - Spec sync is MANDATORY when configured project records exist, unless disabled or the skip conditions above apply
@@ -91,9 +91,11 @@ You have full context of the ACStack system. Use it naturally, don't force it.
91
91
 
92
92
  ### Check for context
93
93
 
94
- At the start, quickly check what exists – maps on the configured tracker
95
- (`ls "$(~/.claude/acstack/bin/acstack project-data path)/maps/"` on the files backend) and living specs
96
- (`~/.claude/acstack/bin/acstack list --specs --json`).
94
+ When project configuration exists, check existing maps on its configured tracker
95
+ and existing living specs. Without configuration, explore from repository guidance
96
+ and code without requiring setup or creating records. Follow Project configuration
97
+ in `orchestrator/AGENTS.md` for resolution errors and invalid configuration;
98
+ neither is an absent-config fallback.
97
99
 
98
100
  ### When no map exists
99
101
 
@@ -21,10 +21,13 @@ $ARGUMENTS
21
21
 
22
22
  ### 1. Find the work
23
23
 
24
- Check the configured tracker for maps (`workflow.maps.tracker` in
25
- `<project folder>/project.yaml`, where the project folder is the path
26
- `~/.claude/acstack/bin/acstack project-data path` prints; the map skill's `trackers/` docs declare the
27
- operations – files backend shown below).
24
+ Resolve the project folder with `~/.claude/acstack/bin/acstack project-data path`.
25
+ Preserve reported resolution errors; do not treat them as missing setup.
26
+ When `project.yaml` exists and configures `workflow.maps.tracker`, check that
27
+ tracker for maps (the map skill's `trackers/` docs declare its operations).
28
+ Without configuration, work directly on the request without tracker writes.
29
+ If the request names a map, establish its storage prerequisite first rather
30
+ than silently ignoring it.
28
31
 
29
32
  **A map exists** (or `$ARGUMENTS` names one):
30
33
 
@@ -56,7 +59,10 @@ small unit of work, and nothing has to declare it small.
56
59
 
57
60
  ### 2. Read project configuration
58
61
 
59
- Read `<project folder>/project.yaml` for build/test/lint commands and directory paths.
62
+ Read `<project folder>/project.yaml` when present. Otherwise discover commands,
63
+ directories, and environment activation from repository instructions, manifests,
64
+ existing tests, and CI, under Project configuration in `orchestrator/AGENTS.md`.
65
+ Do not invent commands or treat invalid configuration as absent.
60
66
 
61
67
  ### 3. Create feature branch
62
68
 
@@ -32,6 +32,8 @@ Load that context before your first edit under `frontend.directory`. Load it onc
32
32
 
33
33
  **Check the design gate first**
34
34
 
35
+ This pass requires project configuration with a `frontend` section. If configuration is absent, skip this optional pass and use discovered repository checks; do not require setup. Follow Project configuration in `orchestrator/AGENTS.md` for invalid configuration and resolution errors rather than silently skipping them.
36
+
35
37
  The design gate is the set of optional checks impeccable adds to acstack's pipeline. `workflow.design_review` in `<project folder>/project.yaml` turns the gate on; the project folder is the path `~/.claude/acstack/bin/acstack project-data path` prints. Ask acstack for the answer:
36
38
 
37
39
  ```bash
@@ -24,7 +24,11 @@ Two backends ship in this skill's directory: `trackers/github.md` for repos
24
24
  with GitHub auth, and `trackers/files.md` as the fallback.
25
25
 
26
26
  ACStack keeps project data in the project folder, the path
27
- `~/.claude/acstack/bin/acstack project-data path` prints.
27
+ `~/.claude/acstack/bin/acstack project-data path` prints. If `project.yaml` is
28
+ absent, chart in conversation without tracker writes. Before persisting a map,
29
+ ask the user to establish its project settings through `/acstack:setup`;
30
+ do not create configuration implicitly. Invalid configuration or resolution
31
+ errors require repair under Project configuration in `orchestrator/AGENTS.md`.
28
32
  `workflow.maps.tracker` in `<project folder>/project.yaml` (`github` or `files`) records
29
33
  the project's choice. If the key names a backend, read the matching doc and use
30
34
  its operations. If the key is absent, pick at materialisation time – the moment
@@ -34,8 +38,8 @@ Recommend `github` when the repo qualifies, `files` otherwise. Confirm the
34
38
  choice with the user. Then write the key, so later sessions need not re-decide.
35
39
  ## Which mode
36
40
 
37
- One command runs two modes, and what already exists picks between them. Check
38
- the configured tracker for existing maps – `ls "$(~/.claude/acstack/bin/acstack project-data path)/maps/"` on the files
41
+ One command runs two modes, and what already exists picks between them. When
42
+ a tracker is configured, check it for existing maps – `ls "$(~/.claude/acstack/bin/acstack project-data path)/maps/"` on the files
39
43
  backend, `gh label list --search "map:" --json name` on GitHub.
40
44
 
41
45
  If `$ARGUMENTS` names a map, or exactly one exists, work its frontier – the
@@ -59,14 +59,14 @@ git status --short
59
59
  git log --oneline -3 # recent context
60
60
  ```
61
61
 
62
- Read `<project folder>/project.yaml` to understand the project's directory layout, commands, and conventions. ACStack keeps it in the project folder, the path `~/.claude/acstack/bin/acstack project-data path` prints.
62
+ Read `<project folder>/project.yaml` when present to understand directories, commands, and conventions. The project folder is the path `~/.claude/acstack/bin/acstack project-data path` prints. Without configuration, discover these from repository instructions, manifests, existing tests, and CI under Project configuration in `orchestrator/AGENTS.md`; do not require setup. Report resolution errors or invalid config rather than treating them as absent.
63
63
 
64
- Categorize changed files into scopes using the project configuration:
64
+ Categorize changed files using configured or discovered directories:
65
65
 
66
- - **source**: files under `directories.source` from project.yaml
67
- - **frontend**: files under `frontend.directory` from project.yaml (if configured)
66
+ - **source**: files under configured `directories.source`, or discovered source directories
67
+ - **frontend**: files under configured `frontend.directory`, or discovered frontend directories
68
68
  - **config**: `*.yaml`, `*.toml`, `*.json`, config files, etc.
69
- - **tests**: files under `directories.tests` from project.yaml
69
+ - **tests**: files under configured `directories.tests`, or discovered test directories
70
70
  - **other**: everything else
71
71
 
72
72
  Judge changes by effect, including behavior changed through config, assets, or shipped guidance.
@@ -85,7 +85,7 @@ Read `../../output-styles/ac-writing-style.md` relative to this skill directory;
85
85
  **Living specs and architecture:**
86
86
 
87
87
  ```
88
- Read the living specs relevant to this change:
88
+ Read existing living specs relevant to this change; skip if none exist:
89
89
  - Check the <project folder>/specs/ directory listing
90
90
  - Read spec.md files for domains touched by the changed files
91
91
  (use <project folder>/domain-map.yaml to map files -> domains)
@@ -95,9 +95,11 @@ Apply the shared policy to the minimal fix.
95
95
  ## Step 6: Verify
96
96
 
97
97
  Use focused regression checks while fixing. One verification owner gathers the
98
- required final checks from `project.yaml` in the project folder, the path `~/.claude/acstack/bin/acstack project-data path` prints, under Build verification in
99
- `orchestrator/AGENTS.md`, reusing valid evidence rather than rerunning commands
100
- for every fix or handoff.
98
+ required final checks under Build verification in `orchestrator/AGENTS.md`,
99
+ using `project.yaml` when present or discovered repository tooling when absent.
100
+ Follow its Project configuration policy for resolution errors and invalid config;
101
+ do not require setup for a general fix. Reuse valid evidence rather than rerunning
102
+ commands for every fix or handoff.
101
103
 
102
104
  Preserve configured frontend gates. Do not claim completion with failed or blocked
103
105
  required checks or unverified configured browser behavior.
@@ -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 `<project folder>/project.yaml` for `directories.source`, `directories.tests`, and `frontend` config. The project folder is the path `~/.claude/acstack/bin/acstack project-data path` prints.
10
+ Read `<project folder>/project.yaml` when present for `directories.source`, `directories.tests`, and `frontend`. The project folder is the path `~/.claude/acstack/bin/acstack project-data path` prints. Without config, follow repository instructions and existing tests for placement and runner commands; use the examples below only where they fit that project. Follow Project configuration in `orchestrator/AGENTS.md` for invalid config or resolution errors, not a silent fallback.
11
11
 
12
12
  ```
13
13
  Backend code? → <tests-dir>/<mirror-source-path>/test_<module>.py
@@ -32,7 +32,7 @@ Mirror the source directory structure. Example: `src/auth/sessions.py` → `test
32
32
  Colocated with source. Example: `src/hooks/useAuth.ts` → `src/hooks/__tests__/useAuth.test.ts`.
33
33
 
34
34
  - Components: `.test.tsx`, pure functions: `.test.ts`
35
- - Run with `frontend.commands.test` from project.yaml
35
+ - Run with configured `frontend.commands.test`, or the discovered repository test command
36
36
 
37
37
  ## Layer 3: E2E Tests (Browser)
38
38