claudeos-core 2.1.0 → 2.2.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 (35) hide show
  1. package/CHANGELOG.md +456 -0
  2. package/README.de.md +33 -39
  3. package/README.es.md +33 -39
  4. package/README.fr.md +33 -39
  5. package/README.hi.md +33 -39
  6. package/README.ja.md +33 -39
  7. package/README.ko.md +37 -43
  8. package/README.md +37 -43
  9. package/README.ru.md +35 -39
  10. package/README.vi.md +33 -39
  11. package/README.zh-CN.md +33 -39
  12. package/bin/commands/init.js +81 -45
  13. package/content-validator/index.js +6 -1
  14. package/lib/env-parser.js +317 -0
  15. package/lib/memory-scaffold.js +7 -5
  16. package/package.json +1 -1
  17. package/pass-prompts/templates/angular/pass3.md +28 -13
  18. package/pass-prompts/templates/common/claude-md-scaffold.md +644 -0
  19. package/pass-prompts/templates/common/pass3-footer.md +185 -0
  20. package/pass-prompts/templates/common/pass4.md +6 -3
  21. package/pass-prompts/templates/common/staging-override.md +1 -1
  22. package/pass-prompts/templates/java-spring/pass3.md +31 -21
  23. package/pass-prompts/templates/kotlin-spring/pass3.md +34 -22
  24. package/pass-prompts/templates/node-express/pass3.md +30 -21
  25. package/pass-prompts/templates/node-fastify/pass3.md +28 -14
  26. package/pass-prompts/templates/node-nestjs/pass3.md +29 -14
  27. package/pass-prompts/templates/node-nextjs/pass3.md +34 -21
  28. package/pass-prompts/templates/node-vite/pass3.md +30 -13
  29. package/pass-prompts/templates/python-django/pass3.md +32 -21
  30. package/pass-prompts/templates/python-fastapi/pass3.md +33 -21
  31. package/pass-prompts/templates/python-flask/pass3.md +31 -13
  32. package/pass-prompts/templates/vue-nuxt/pass3.md +32 -13
  33. package/plan-installer/index.js +8 -0
  34. package/plan-installer/prompt-generator.js +18 -1
  35. package/plan-installer/stack-detector.js +16 -0
package/CHANGELOG.md CHANGED
@@ -1,5 +1,461 @@
1
1
  # Changelog
2
2
 
3
+ ## [2.2.0] — 2026-04-21
4
+
5
+ Adds deterministic CLAUDE.md structure. Generated `CLAUDE.md` files now follow
6
+ an 8-section scaffold with fixed titles and order, driven by `pass-prompts/
7
+ templates/common/claude-md-scaffold.md`. Content within each section still
8
+ adapts to the project, but the structural skeleton no longer drifts between
9
+ projects or runs.
10
+
11
+ ### Added
12
+
13
+ - **`pass-prompts/templates/common/claude-md-scaffold.md`** (new, ~630 lines).
14
+ Single source of truth for CLAUDE.md structure. Defines the 8 sections
15
+ (Role Definition / Project Overview / Build & Run Commands / Core
16
+ Architecture / Directory Structure / Standard · Rules · Skills
17
+ Reference / DO NOT Read / Common Rules & Memory (L4); titles are
18
+ emitted in the project's output language), per-section generation
19
+ rules, dynamic substitution variables (`{PROJECT_NAME}`,
20
+ `{OUTPUT_LANG}`, `{PROJECT_CONTEXT}`), and a post-generation validation
21
+ checklist. Section 8 has TWO required sub-sections: a Common Rules
22
+ sub-section (meta-summary table of `paths: ["**/*"]` universal rules)
23
+ and an L4 Memory sub-section (memory file table + workflow). All 12 stack-specific Pass 3 prompts
24
+ now delegate CLAUDE.md structure to this scaffold and supply only
25
+ stack-specific hints (2-4 lines each).
26
+
27
+ - **`lib/env-parser.js`** (new). Parses `.env*` files into structured
28
+ `{port, host, apiTarget, vars, source}` used by stack-detector. Search
29
+ order prefers `.env.example` (committed, canonical) over local `.env`
30
+ variants. Port detection recognizes 16+ convention variable names across
31
+ Vite, Next.js, Nuxt, Angular, Node, and Python frameworks. Exposes
32
+ utilities (`parseEnvContent`, `extractPort`, `extractHost`,
33
+ `extractApiTarget`, `readStackEnvInfo`) plus a sensitive-variable
34
+ filter (`isSensitiveVarName`, `redactSensitiveVars`) that redacts
35
+ values of PASSWORD/SECRET/TOKEN/API_KEY/CREDENTIAL/PRIVATE_KEY-style
36
+ variables to a `***REDACTED***` sentinel before the vars map reaches
37
+ any downstream consumer. DATABASE_URL is whitelisted for
38
+ stack-detector back-compat. 39 unit tests in `tests/env-parser.test.js`
39
+ (30 core + 9 redaction).
40
+
41
+ ### Changed
42
+
43
+ - **All 12 Pass 3 prompts** (`angular/`, `java-spring/`, `kotlin-spring/`,
44
+ `node-express/`, `node-fastify/`, `node-nestjs/`, `node-nextjs/`,
45
+ `node-vite/`, `python-django/`, `python-fastapi/`, `python-flask/`,
46
+ `vue-nuxt/`). Two separate changes per file:
47
+ 1. The previous 5-bullet CLAUDE.md generation block (`- Role definition`,
48
+ `- Build & Run Commands`, `- Core architecture diagram`, `- {stack item}`,
49
+ `- Standard/Skills/Guide reference table`) is replaced by a scaffold
50
+ reference plus stack-specific hints. The `CRITICAL — CLAUDE.md Reference
51
+ Table Completeness` warning above the block is also removed (the
52
+ scaffold's validation checklist supersedes it).
53
+ 2. The `40.infra/*` `paths` frontmatter spec is split per-file. Previously
54
+ all three infra rules (environment-config, logging-monitoring, cicd-
55
+ deployment) received the same category-level `paths` value, which caused
56
+ the logging-monitoring rule to never auto-load on source code edits
57
+ (its `paths` only matched `.env`, `*.config.*`, `*.json`, `*.yml`,
58
+ `Dockerfile*` — none of which are source files). Per-file paths now
59
+ match each rule's actual guardrail target: environment-config → env/
60
+ config files, logging-monitoring → source code extensions (`.ts`/`.tsx`/
61
+ `.py`/`.java`/`.kt` per stack), cicd-deployment → CI YAML + source.
62
+
63
+ - **`pass-prompts/templates/common/pass3-footer.md`** — five new `CRITICAL`
64
+ blocks added:
65
+ - **`00.standard-reference.md` Composition**: scopes the mechanical
66
+ standards index strictly. REQUIRES a forward reference to
67
+ `claudeos-core/standard/00.core/04.doc-writing-guide.md` (generated
68
+ by Pass 4 but indexed at Pass 3 time to prevent a gap between passes).
69
+ FORBIDS a redundant "DO NOT Read / context waste" section inside
70
+ `00.standard-reference.md` — that information belongs solely in
71
+ CLAUDE.md Section 7, which is both more complete (includes project-
72
+ specific build-output and external-module paths) and not reloaded
73
+ on every edit. The 6 stacks (java-spring, kotlin-spring, node-express,
74
+ node-nextjs, python-django, python-fastapi) whose Pass 3 prompts
75
+ previously hardcoded a `## DO NOT Read` block in the reference file
76
+ have been cleaned up.
77
+ - **`.env` Is the Source of Truth for Runtime Configuration**: when
78
+ `pass2-merged.json` contains `stack.envInfo`, ports/hosts/API targets
79
+ declared in the project's `.env.example` MUST be used over framework
80
+ defaults. Affects Section 2's table, Section 3's inline run-command
81
+ comments, and any rule referencing port values (e.g., CORS origins
82
+ in auth rules).
83
+ - **Rule `paths` Must Match Rule Content**: enforces that each rule's
84
+ `paths` frontmatter matches the file types its guardrails actually
85
+ target. Explicitly prohibits copying `paths` across sibling rule files
86
+ in the same category, and tells the LLM to re-verify "when should
87
+ Claude Code auto-load this rule?" as the criterion for paths. Added
88
+ because a category-level paths shortcut in earlier Pass 3 prompts
89
+ caused the logging-monitoring rule to never match source code edits.
90
+ - **CLAUDE.md Scaffold Compliance**: enforces the 8-section structure at
91
+ generation time. Explicitly forbids adding sections with titles like
92
+ "Required to Observe While Working", "Rules Summary", "Documentation
93
+ Writing Rules", "AI Common Rules", "L4 Memory Integration Rules",
94
+ "Common Rules", or any title whose category meaning is "rules"
95
+ beyond the 8 fixed section names (the same blocklist is applied in
96
+ every output language, matching on the translated equivalents).
97
+ Adds a mandatory post-generation check (count `^## ` headings; must
98
+ equal 8; merge surplus into the correct section or move to `rules/*`
99
+ / `standard/*`). The expanded blocklist closes a rename loophole
100
+ discovered during dogfooding on a Vite + React frontend project
101
+ where the LLM appended a §9 whose title combined "Documentation
102
+ Writing + AI Common Rules + Memory Layer (L4)" to collect
103
+ rule-related content.
104
+ - **CLAUDE.md Does Not Duplicate Rules**: clarifies that CLAUDE.md
105
+ describes structure, not enforcement. Lists four categories of content
106
+ that do NOT belong in CLAUDE.md (coding rules, domain-specific rules,
107
+ multi-file sync rules, work procedures) and points each to its proper
108
+ home in rules/standard/skills/guide.
109
+
110
+ - **`pass-prompts/templates/common/claude-md-scaffold.md`** (in addition to
111
+ the new-file Add above) was tightened after initial dogfooding:
112
+ - Hard constraints section now leads with **"EXACTLY 8 SECTIONS. No more,
113
+ no less."** plus a recovery procedure for surplus sections.
114
+ - Section 6 Rules sub-section explicitly notes that the
115
+ `.claude/rules/00.core/*` wildcard row already COVERS
116
+ `51.doc-writing-rules.md` and `52.ai-work-rules.md` — eliminating the
117
+ perceived need to create a separate section enumerating those rules.
118
+ - Validation checks section lists common surplus section patterns with
119
+ target destinations so the LLM can act rather than just detect.
120
+
121
+ - **`plan-installer/prompt-generator.js`** — embeds the scaffold inline
122
+ into `pass3-prompt.md` at generation time. The 12 stack-specific Pass 3
123
+ templates and `pass3-footer.md` both reference
124
+ `pass-prompts/templates/common/claude-md-scaffold.md` by path, but that
125
+ path is relative to the claudeos-core package, not the user project.
126
+ The generator now reads the scaffold and inserts it between the Phase 1
127
+ fact-table block and the stack-specific body, wrapped in explicit
128
+ `# === EMBEDDED: claude-md-scaffold.md ===` markers so the LLM can locate
129
+ it. Without this embed the scaffold references would point to a file
130
+ Claude Code cannot resolve at runtime. Load is optional (`existsSafe`)
131
+ so a missing scaffold does not crash generation — the rest of the
132
+ prompt is still produced, just without the deterministic structure
133
+ enforcement.
134
+
135
+ - **`plan-installer/stack-detector.js`** — now calls `readStackEnvInfo`
136
+ before returning and attaches the result as `stack.envInfo` on
137
+ project-analysis.json. When the project's `.env.example` (or fallback
138
+ `.env`) declares a port AND no earlier detector won (Spring Boot
139
+ application.yml still takes precedence), the parsed port is promoted
140
+ to `stack.port`. This closes a long-standing gap where Vite projects
141
+ that customized their dev port via `.env` (e.g., `VITE_DESKTOP_PORT=3000`)
142
+ received the framework-default 5173 in CLAUDE.md.
143
+ Host and API target values are also captured for downstream use.
144
+
145
+ - **`plan-installer/index.js`** — port resolution precedence documented
146
+ in code comments. The existing `defaultPort` fallback chain (Vite 5173,
147
+ Next.js 3000, Django 8000, etc.) is now explicitly labeled "last resort"
148
+ and runs only when neither stack-detector's direct detection (Spring
149
+ application.yml) nor the env-parser populated `stack.port`.
150
+
151
+ - **`pass-prompts/templates/common/claude-md-scaffold.md`** Section 2
152
+ (Project Overview) and Section 3 (Build & Run Commands) rules now
153
+ reference `stack.envInfo` as authoritative for port/host/API-target
154
+ values. Section 2 requires env-annotated rows in the project overview
155
+ table when the project declares them (e.g., `| Dev Server Port | 3000
156
+ (VITE_DESKTOP_PORT) |`), and Section 3 requires inline port comments
157
+ next to run commands to match the env-declared value. Framework defaults
158
+ are explicitly labeled "last resort" in both rules.
159
+
160
+ ### Why this matters
161
+
162
+ When claudeos-core was applied to three sibling projects in the same
163
+ organization (one Spring Boot backend, two Vite + React frontends), the
164
+ generated files were content-correct — standards, rules, and skills
165
+ accurately captured each project's patterns — but the `CLAUDE.md` files
166
+ had different section counts (8, 8, 9), different section names, and
167
+ different section orders. Claude Code reads CLAUDE.md first on every
168
+ session; inconsistent structure across repos made it harder for
169
+ developers (and Claude Code) to know where to look for a given piece of
170
+ information. v2.2.0 fixes the structure while leaving content
171
+ project-specific.
172
+
173
+ The removed "Required to Observe While Working" section was a symptom
174
+ of the same problem: different projects put different rules there, most
175
+ of which duplicated
176
+ content already in `.claude/rules/*` (auto-loaded) or `claudeos-core/
177
+ standard/*` (detailed patterns). Removing it eliminates a redundant
178
+ maintenance surface and reinforces the "one rule, one home" principle.
179
+
180
+ Dogfooding also uncovered a latent paths bug. The `40.infra/*` rules
181
+ shared a single category-level `paths` frontmatter that only matched
182
+ config/infra file extensions (`.env`, `*.config.*`, `*.json`, `*.yml`,
183
+ `Dockerfile*`). This meant the logging-monitoring rule — whose guardrails
184
+ cover `console.log` misuse, PII in logs, and `catch {}` swallowing —
185
+ never auto-loaded when editing `.ts`/`.tsx`/`.py`/`.java` files, i.e.,
186
+ exactly when it was needed. The rule body was correct; its activation
187
+ trigger was mis-scoped. v2.2.0 now specifies per-file `paths` in the Pass
188
+ 3 prompts and adds a `Rule paths Must Match Rule Content` CRITICAL block
189
+ to the footer so future rules cannot inherit the wrong scope by default.
190
+
191
+ A third dogfooding finding exposed a different layer of the same
192
+ philosophy violation. The stack detector parsed Spring Boot's
193
+ `application.yml` for `server.port`, but for Node/Vite projects it
194
+ simply used a hardcoded framework default (Vite → 5173) whenever no
195
+ Spring-style config was found — even when the project declared its
196
+ actual port in `.env.example` (e.g., `VITE_DESKTOP_PORT=3000`). This
197
+ meant CLAUDE.md's §2 table and §3 run-command
198
+ comments showed the Vite theoretical default instead of what the project
199
+ actually runs. The root cause was structural: the detector had no
200
+ `.env` parser beyond a DATABASE_URL check for DB identification. v2.2.0
201
+ introduces `lib/env-parser.js` with convention-aware port/host/API-target
202
+ extraction, and the scaffold and footer now treat `.env.example` as the
203
+ canonical source of runtime configuration — framework defaults are
204
+ last-resort only. This also captures host and API-target values that
205
+ previously never appeared in generated CLAUDE.md at all.
206
+
207
+ A fourth dogfooding iteration on a Spring Boot backend project
208
+ (regenerated with the interim v2.2.0 scaffold that only allowed a single
209
+ Section 8 titled "Memory (L4)") found the LLM producing a §9 titled
210
+ "Common Rules & Memory (L4)" — even with the expanded blocklist from
211
+ the earlier frontend-project fix.
212
+ The §9 contained both (a) a meta-summary table of `paths: ["**/*"]`
213
+ rules (51.doc-writing-rules + 52.ai-work-rules) and (b) a restated L4
214
+ memory table labeled "L4 Memory Files (Re-declaration)". Close
215
+ inspection showed (a) was genuinely useful content the scaffold had no
216
+ legitimate home for — a developer-facing summary of which rules
217
+ auto-load on every edit, complementary to Section 6's directory index.
218
+ The LLM kept inventing §9 because the information it wanted to convey
219
+ was real. v2.2.0 resolves this by promoting Section 8 to "Common Rules
220
+ & Memory (L4)" with two required sub-sections: one for common rules
221
+ auto-loaded on every edit (meta-summary only, not rule bodies) and one
222
+ for L4 memory referenced on-demand. This acknowledges that "which rules
223
+ auto-load universally" is a legitimate meta-information category that
224
+ deserves a visible home, while keeping the always-8-sections contract
225
+ intact. The duplicate §9 "re-declaration" anti-pattern is now
226
+ explicitly named and forbidden in both the scaffold
227
+ and the footer.
228
+
229
+ Finally, the same backend-project inspection also surfaced two smaller
230
+ but real bugs in `00.standard-reference.md` generation. First, 6 of the
231
+ 12 Pass 3 stack prompts hardcoded a `## DO NOT Read (context waste)`
232
+ section at the bottom of the reference file — a shadow of CLAUDE.md
233
+ Section 7 that was less complete (missed project-specific paths like
234
+ `build/` or external modules) and lived at the wrong layer: `00.standard-
235
+ reference.md` reloads on every edit via `paths: ["**/*"]`, while
236
+ Section 7 loads once per session. Second, `claudeos-core/standard/00.
237
+ core/04.doc-writing-guide.md` is generated by Pass 4 (Required output
238
+ #12) but never appeared in the Pass 3-generated reference index, creating
239
+ a gap the moment Pass 4 ran. v2.2.0 adds a `00.standard-reference.md
240
+ Composition` CRITICAL block to the footer that codifies: (a) always
241
+ include the Pass 4 forward reference, (b) never include a DO NOT Read
242
+ section (Section 7 is the single source of truth), (c) keep the per-
243
+ edit payload minimal (paths only, no descriptions — descriptions live
244
+ in Section 6 which is session-time budget). The 6 inline hardcoded
245
+ DO NOT Read blocks have been removed from the stack prompts and
246
+ replaced with explicit inline notes pointing to the footer rule.
247
+
248
+ Three additional risks surfaced during pre-release cross-checking
249
+ and were addressed in the same release cycle. **First**, the scaffold's
250
+ "Section 6 Rules: Always include 60.memory/*" directive, added during
251
+ Section 8 redesign, was not echoed in the 12 stack Pass 3 prompts'
252
+ rule-category listings — so the LLM received conflicting signals
253
+ (scaffold says include, stack prompt doesn't mention it). Real dogfooding
254
+ on the backend project confirmed the category was being omitted from
255
+ the generated CLAUDE.md §6 Rules table. v2.2.0 fixes both sides: each stack
256
+ Pass 3 prompt now explicitly lists `60.memory/*` as a forward-reference
257
+ rule category (generated by Pass 4, but indexed at Pass 3 time), and the
258
+ scaffold's Sub-section 2 guidance is strengthened with an example row
259
+ and a "mandatory — do NOT omit" note. **Second**, the existing Migration
260
+ guidance mentioned `--force` but did not explain why `npx claudeos-core
261
+ init` (without `--force`) silently fails to adopt v2.2.0 improvements on
262
+ upgrades. Under Rule B idempotency, existing generated files are skipped
263
+ as "already exists", meaning users running plain `init` on a v2.1.x
264
+ project see no visible change. v2.2.0 adds (a) a dedicated "upgrade
265
+ detected" warning in bin/commands/init.js that fires when a pre-v2.2.0
266
+ CLAUDE.md is detected before the resume/fresh prompt, and (b) an expanded
267
+ Migration section in CHANGELOG that makes the `--force` requirement and
268
+ preservation semantics (memory/ content kept, generated files replaced)
269
+ explicit. **Third**, the new `.env.example` → CLAUDE.md pipeline created
270
+ a theoretical pathway for accidentally committed secrets in `.env.example`
271
+ to be amplified into the project's public-facing documentation. Although
272
+ `.env.example` is conventionally a placeholder file, real-world projects
273
+ occasionally check in real values by mistake. v2.2.0 adds a
274
+ sensitive-variable filter (`lib/env-parser.js`: `isSensitiveVarName`,
275
+ `redactSensitiveVars`) that replaces values of variables matching
276
+ PASSWORD/SECRET/TOKEN/API_KEY/CREDENTIAL/PRIVATE_KEY patterns with a
277
+ `***REDACTED***` sentinel before the vars map reaches any downstream
278
+ consumer. Port/host/API-target extraction uses a whitelist of
279
+ config-relevant keys and is unaffected. The scaffold also gains an
280
+ explicit SECURITY directive forbidding reference to sensitive variables
281
+ in CLAUDE.md as defense-in-depth. `DATABASE_URL` remains unredacted
282
+ because stack-detector's DB identification path has depended on it since
283
+ v1.x — changing that would be a breaking change.
284
+
285
+ ### Migration
286
+
287
+ Existing projects keep working. The prompt-generator change affects only
288
+ how `pass3-prompt.md` is assembled on the next `init` or `refresh` run —
289
+ installed standards, rules, skills, memory, and CLAUDE.md in existing
290
+ projects are not touched until the user regenerates.
291
+
292
+ **⚠️ Important: `--force` is REQUIRED to adopt v2.2.0 improvements.**
293
+
294
+ claudeos-core's Pass 3 runs under Rule B (idempotency): if a target file
295
+ already exists on disk, it is skipped during regeneration. This is
296
+ designed to protect hand-edited content from being overwritten, but it
297
+ means **a plain `npx claudeos-core init` on an existing v2.1.x project
298
+ will NOT apply v2.2.0 improvements** because the old files (CLAUDE.md,
299
+ `00.standard-reference.md`, `40.infra/*-rules.md`, memory rules, etc.)
300
+ will all be skipped as "already exists".
301
+
302
+ To actually adopt v2.2.0's improvements (8-section CLAUDE.md, per-file
303
+ `40.infra/*` paths, `.env.example`-based port accuracy, Section 8
304
+ redesign, forward-referenced `04.doc-writing-guide.md`, `60.memory/*`
305
+ row), regenerate via:
306
+
307
+ ```
308
+ npx claudeos-core init --force
309
+ ```
310
+
311
+ `--force` overwrites existing generated files while leaving untouched:
312
+ - Your source code
313
+ - `claudeos-core/memory/` content (decision-log, failure-patterns entries
314
+ you've accumulated) — these are append-only and preserved
315
+ - Any non-generated files under the project root
316
+
317
+ If you want to preview changes first, regenerate into a scratch copy of
318
+ the project, diff the resulting files against your current ones, and
319
+ then decide whether to `--force` on the real project. Key files to
320
+ diff: `CLAUDE.md`, `.claude/rules/00.core/00.standard-reference.md`,
321
+ `.claude/rules/40.infra/02.logging-monitoring-rules.md` (paths change
322
+ is the most visible delta).
323
+
324
+ No manual edits are required after `--force`; the scaffold handles
325
+ everything. Hand-edited content in `claudeos-core/standard/**` that
326
+ you want preserved should be committed to version control before
327
+ running `--force` so you can diff/merge any overwrites.
328
+
329
+ ### Notes
330
+
331
+ - 39 new tests added in `tests/env-parser.test.js` (30 core + 9 sensitive-
332
+ variable redaction). All tests continue to pass: **563 pre-existing + 39
333
+ new = 602 total**.
334
+ - No file-format breaking changes. Existing `claudeos-core/standard/`,
335
+ `.claude/rules/`, and `claudeos-core/skills/` content in installed
336
+ projects is unaffected — only the CLAUDE.md generated at the project
337
+ root changes shape on regeneration. The `40.infra/*` rule `paths`
338
+ values will update on next regeneration, which changes when those
339
+ rules auto-load (more accurately scoped); the rule content itself
340
+ does not change. `stack.envInfo` is a new additive field — older
341
+ project-analysis.json files without it still work.
342
+ - Discovered via dogfooding on three real production projects:
343
+ - Structural drift (3 different CLAUDE.md layouts) prompted the scaffold.
344
+ - A Vite + React frontend project produced a §9 surplus section under
345
+ a renamed title that bypassed the initial forbidden-sections blocklist
346
+ — fixed by expanding the blocklist and adding the mandatory
347
+ post-generation §-count check.
348
+ - The `40.infra/*` paths mismatch surfaced when inspecting a generated
349
+ `02.logging-monitoring-rules.md` and confirming via grep that its
350
+ guardrails (source-code-level: PII logging, silent swallow, console
351
+ use) could never auto-load given the file's own paths frontmatter
352
+ (config-only).
353
+ - The Vite port mismatch (5173 in CLAUDE.md when `.env.example`
354
+ declared 3000) exposed the absence of any `.env` parsing in
355
+ stack-detector beyond DATABASE_URL — prompted the new
356
+ `lib/env-parser.js` utility and the `.env Is the Source of Truth`
357
+ CRITICAL footer block.
358
+ - A second Spring Boot backend regeneration against the interim
359
+ scaffold produced §9 "Common Rules & Memory (L4)" despite the
360
+ expanded blocklist, because the LLM's desired content (a
361
+ meta-summary of `paths: ["**/*"]` universal rules, complementary to
362
+ Section 6's directory index) had no legitimate home in the original
363
+ 8-section design. Resolved by redesigning Section 8 into two
364
+ sub-sections — a Common Rules sub-section for the universal-rules
365
+ meta-summary and an L4 Memory sub-section for the memory
366
+ table/workflow. The "L4 Memory Files (Re-declaration)" anti-pattern
367
+ (duplicate memory table inside a second section) is now explicitly
368
+ named and forbidden.
369
+ - Inspection of the same backend-project output showed a generated
370
+ `00.standard-reference.md` carrying a hardcoded `## DO NOT Read
371
+ (context waste)` section (a partial duplicate of CLAUDE.md Section 7)
372
+ and missing `00.core/04.doc-writing-guide.md` (created later by
373
+ Pass 4). Fixed in the 6 affected Pass 3 stack prompts and formalized
374
+ as the `00.standard-reference.md Composition` CRITICAL block so
375
+ future stacks cannot reintroduce either defect.
376
+ - Pre-release cross-check found the scaffold's `60.memory/*` "Always
377
+ include" directive was not mirrored in any of the 12 stack Pass 3
378
+ prompts' rule-category listings, causing the backend project's
379
+ CLAUDE.md §6 Rules table to omit `60.memory/*` entirely. Fixed by adding the
380
+ forward-reference row to all 12 stack prompts and strengthening the
381
+ scaffold's Sub-section 2 guidance with an example row and "mandatory"
382
+ wording.
383
+ - Pre-release cross-check flagged that a plain `npx claudeos-core init`
384
+ on an existing v2.1.x project would silently skip v2.2.0 improvements
385
+ under Rule B idempotency. Added a CLAUDE.md marker-based detection
386
+ in `bin/commands/init.js` that warns about the `--force` requirement
387
+ before the resume/fresh prompt, plus an expanded Migration section
388
+ covering preservation semantics and preview workflow.
389
+ - Pre-release cross-check identified that values in `.env.example`
390
+ flow through to CLAUDE.md, creating a leak pathway for accidentally
391
+ committed secrets. Added sensitive-variable redaction in
392
+ `lib/env-parser.js` (PASSWORD/SECRET/TOKEN/API_KEY/CREDENTIAL/
393
+ PRIVATE_KEY patterns replaced with `***REDACTED***` sentinel) plus
394
+ a SECURITY directive in the scaffold as defense-in-depth.
395
+
396
+ ---
397
+
398
+ ## [2.1.2] — 2026-04-21
399
+
400
+ Post-release regression fix for v2.1.0 master plan removal cleanup.
401
+
402
+ ### Fixed
403
+
404
+ - **`content-validator`: `plan/` directory no longer required.** On fresh
405
+ v2.1.0+ projects `npx claudeos-core health` always failed because
406
+ `content-validator/index.js` pushed a `MISSING: plan directory not found`
407
+ error when `claudeos-core/plan/` was absent. Master plan generation was
408
+ explicitly removed in v2.1.0 — `plan-validator` (v2.1.0 `Fixed`) and
409
+ `manifest-generator` (v2.1.0 `Fixed`) were both updated to tolerate a
410
+ missing `plan/` directory, but `content-validator` was missed during
411
+ that cleanup. It now silently skips the plan/ check when the directory
412
+ is absent (with an informational `plan/ not present (expected post-v2.1.0)`
413
+ log line), matching the contract established by the other validators.
414
+ The directory contents are still validated when present (legacy projects
415
+ or user-authored plan files are unaffected).
416
+
417
+ ### Notes
418
+
419
+ - All 563 existing tests continue to pass. No new tests added — the fix
420
+ is a one-line behavior change (`errors.push(...)` → `console.log(...)`)
421
+ with a comment documenting the v2.1.0 context, and regression risk is
422
+ covered by routine `health` runs rather than an integration test.
423
+ - Discovered via dogfooding on a real Vite 6 + React 19 project: 62
424
+ generated files, all Pass 1–4 stages succeeded, but `health` failed
425
+ at content-validator. No other cleanup gaps found.
426
+
427
+ ---
428
+
429
+ ## [2.1.1] — 2026-04-20
430
+
431
+ Docs-only maintenance release. No runtime behavior or API changes.
432
+
433
+ ### Changed
434
+
435
+ - **README: dropped `What's New in v2.1.0` section** from all 10 language
436
+ READMEs (`README.md`, `README.ko.md`, `README.ja.md`, `README.zh-CN.md`,
437
+ `README.es.md`, `README.vi.md`, `README.hi.md`, `README.ru.md`,
438
+ `README.fr.md`, `README.de.md`). Post-release cleanup — the section's
439
+ job is done once the release ships, and the same content is preserved
440
+ in `CHANGELOG.md` for anyone who wants the historical detail.
441
+
442
+ - **README: dropped the `Real production case: 18-domain admin frontend
443
+ (2026-04-20)` subsection** under _Auto-scaling by Project Size_ across
444
+ all 10 language READMEs. The per-stage breakdown table (9 rows) and its
445
+ surrounding prose are removed. The trailing empirical reference in the
446
+ FAQ "What is Pass 3 split mode" answer (the `Empirically verified up
447
+ to 18 domains × 101 files × 102 minutes …` sentence with its now-dead
448
+ link) is also removed so no orphan reference remains.
449
+
450
+ ### Notes
451
+
452
+ - Each README drops ~33 lines; total net change across translations is
453
+ ~330 lines removed. No code, tests, prompts, or generated artifacts
454
+ are touched — `npm pack` contents are identical to v2.1.0 apart from
455
+ the README files and `package.json`/`package-lock.json` version bump.
456
+
457
+ ---
458
+
3
459
  ## [2.1.0] — 2026-04-20
4
460
 
5
461
  This release addresses the primary cause of `Prompt is too long` failures in
package/README.de.md CHANGED
@@ -12,20 +12,6 @@ ClaudeOS-Core liest Ihre Codebasis, extrahiert jedes Muster, das es findet, und
12
12
 
13
13
  ---
14
14
 
15
- ## Neuerungen in v2.1.0
16
-
17
- v2.1.0 architektiert Pass 3 neu, um `Prompt is too long`-Fehler bei mittleren bis großen Projekten zu eliminieren. Zuvor musste ein einzelner Pass-3-Aufruf den gesamten Dokumentationsbaum in einem Rutsch ausgeben — Dutzende von Dateien über `CLAUDE.md`, Rules, Standards, Skills und Guides hinweg — und der akkumulierte Output überschritt ab ca. 5 Domains zuverlässig das Context-Fenster. Die Lösung ist strukturell, kein Prompt-Tuning:
18
-
19
- - **Pass 3 Split-Mode** (immer aktiv) — Pass 3 wird in sequenzielle `claude -p`-Aufrufe aufgeteilt (`3a` → `3b-core` → `3b-N` → `3c-core` → `3c-N` → `3d-aux`). Jede Stage startet mit einem **frischen Context-Fenster**, sodass Output-Akkumulations-Overflows unabhängig von der Projektgröße strukturell unmöglich sind.
20
- - **Fact Sheet zwischen Stages** — Stage `3a` liest die Pass-2-Analyse einmal und destilliert sie in ein 5–10 KB großes `pass3a-facts.md`. Alle späteren Stages referenzieren diese Fact Sheet anstatt die 100–500 KB große `pass2-merged.json` neu zu lesen, wodurch die Konsistenz über Dateien und frische Contexts hinweg erhalten bleibt.
21
- - **Batch-Unterteilung** (automatisch ab 16 Domains) — Stages 3b/3c werden zusätzlich in Batches von je 15 Domains aufgeteilt, sodass jede Stage unter ~50 Ausgabedateien bleibt. Ein 18-Domain-Admin-Frontend (React 19 + Vite 6) läuft in **102 Minuten mit 101 generierten Dateien über 8 Stages durch, null Overflow-Fehler** (echter Produktionslauf, 2026-04-20).
22
- - **Master-Plan-Generierung entfernt** — `claudeos-core/plan/*-master.md`-Dateien werden nicht mehr generiert. Master Plans waren ein internes Backup, das Claude Code zur Laufzeit nicht konsumierte, und ihre Aggregation in Pass 3d war ein primärer Overflow-Auslöser. Verwenden Sie stattdessen `git` für Backup/Restore.
23
- - **Pass 4 Gap-Fill: `skills/00.shared/MANIFEST.md`** — Wenn Pass 3c das Skill-Register auslässt (skill-spärliche Projekte), erstellt Pass 4 jetzt automatisch einen Stub, damit `.claude/rules/50.sync/03.skills-sync.md` niemals auf eine nicht existierende Datei zeigt.
24
-
25
- Ein paar kleinere Fixes: `memory --help` zeigt nun die Memory-Subcommand-Hilfe an (zuvor wurde die Top-Level-Hilfe gezeigt); `memory score` hinterlässt keine doppelten `importance`-Zeilen mehr; die `memory compact`-Summary-Marker sind jetzt korrekte Markdown-Listenelemente. Volle Details: [CHANGELOG.md](./CHANGELOG.md).
26
-
27
- ---
28
-
29
15
  ## Warum ClaudeOS-Core?
30
16
 
31
17
  Jedes andere Claude-Code-Tool funktioniert so:
@@ -99,10 +85,20 @@ Dieser Unterschied summiert sich. 10 Aufgaben/Tag × 20 Minuten gespart = **übe
99
85
  | **Vite / React SPA** | `package.json`, `vite.config.*` | 9 Kategorien, 55 Unterpunkte |
100
86
  | **Angular** | `package.json`, `angular.json` | 12 Kategorien, 78 Unterpunkte |
101
87
 
102
- Automatisch erkannt: Sprache und Version, Framework und Version (einschließlich Vite als SPA-Framework), ORM (MyBatis, JPA, Exposed, Prisma, TypeORM, SQLAlchemy usw.), Datenbank (PostgreSQL, MySQL, Oracle, MongoDB, SQLite), Paketmanager (Gradle, Maven, npm, yarn, pnpm, pip, poetry), Architektur (CQRS, BFF — aus Modulnamen), Multi-Modul-Struktur (aus settings.gradle), Monorepo (Turborepo, pnpm-workspace, Lerna, npm/yarn workspaces).
88
+ Automatisch erkannt: Sprache und Version, Framework und Version (einschließlich Vite als SPA-Framework), ORM (MyBatis, JPA, Exposed, Prisma, TypeORM, SQLAlchemy usw.), Datenbank (PostgreSQL, MySQL, Oracle, MongoDB, SQLite), Paketmanager (Gradle, Maven, npm, yarn, pnpm, pip, poetry), Architektur (CQRS, BFF — aus Modulnamen), Multi-Modul-Struktur (aus settings.gradle), Monorepo (Turborepo, pnpm-workspace, Lerna, npm/yarn workspaces), **Laufzeitkonfiguration aus `.env.example`** (v2.2.0 — extrahiert port/host/API-target aus über 16 Konventions-Variablennamen in den Frameworks Vite · Next.js · Nuxt · Angular · Node · Python).
103
89
 
104
90
  **Sie geben nichts an. Alles wird automatisch erkannt.**
105
91
 
92
+ ### `.env`-basierte Laufzeitkonfiguration (v2.2.0)
93
+
94
+ v2.2.0 fügt `lib/env-parser.js` hinzu, damit die generierte `CLAUDE.md` widerspiegelt, was das Projekt tatsächlich deklariert, statt Framework-Defaults.
95
+
96
+ - **Suchreihenfolge**: `.env.example` (kanonisch, committet) → `.env.local.example` → `.env.sample` → `.env.template` → `.env` → `.env.local` → `.env.development`. Die `.example`-Variante gewinnt, weil sie die entwickler-neutrale Shape-of-Truth ist, nicht die lokalen Overrides eines einzelnen Contributors.
97
+ - **Erkannte Port-Variablen-Konventionen**: `VITE_PORT` / `VITE_DEV_PORT` / `VITE_DESKTOP_PORT` / `NEXT_PUBLIC_PORT` / `NUXT_PORT` / `NG_PORT` / `APP_PORT` / `SERVER_PORT` / `HTTP_PORT` / `DEV_PORT` / `FLASK_RUN_PORT` / `UVICORN_PORT` / `DJANGO_PORT` / generisches `PORT`. Framework-spezifische Namen gewinnen gegenüber dem generischen `PORT`, wenn beide vorhanden sind.
98
+ - **Host & API-Target**: `VITE_DEV_HOST` / `VITE_API_TARGET` / `NEXT_PUBLIC_API_URL` / `NUXT_PUBLIC_API_BASE` / `BACKEND_URL` / `PROXY_TARGET` usw.
99
+ - **Priorität**: Spring Boots `application.yml` `server.port` gewinnt weiterhin (framework-native Config), dann der in `.env` deklarierte Port, dann der Framework-Default (Vite 5173, Next.js 3000, Django 8000 usw.) als letzte Rückfall-Option.
100
+ - **Redaction sensibler Variablen**: Werte von Variablen, die den Mustern `PASSWORD` / `SECRET` / `TOKEN` / `API_KEY` / `ACCESS_KEY` / `PRIVATE_KEY` / `CREDENTIAL` / `JWT_SECRET` / `CLIENT_SECRET` / `SESSION_SECRET` / `BEARER` / `SALT` entsprechen, werden durch `***REDACTED***` ersetzt, bevor sie einen nachgelagerten Generator erreichen. Defense-in-Depth gegen versehentlich committed Secrets in `.env.example`. `DATABASE_URL` ist explizit auf der Allowlist für die Stack-Detector-DB-Identifikations-Back-Compat.
101
+
106
102
  ### Java-Domain-Erkennung (5 Muster mit Fallback)
107
103
 
108
104
  | Priorität | Muster | Struktur | Beispiel |
@@ -378,7 +374,7 @@ cat claudeos-core/generated/pass4-prompt.md \
378
374
 
379
375
  **Verifikation:** `claudeos-core/memory/` sollte 4 Dateien enthalten (`decision-log.md`, `failure-patterns.md`, `compaction.md`, `auto-rule-update.md`), `.claude/rules/60.memory/` sollte 4 Rule-Dateien enthalten, und `CLAUDE.md` sollte einen angehängten Abschnitt `## Memory (L4)` haben. Marker: `claudeos-core/generated/pass4-memory.json`.
380
376
 
381
- > **v2.1.0 Gap-Fill:** Pass 4 stellt zudem sicher, dass `claudeos-core/skills/00.shared/MANIFEST.md` existiert. Wenn Pass 3c die Datei ausgelassen hat (möglich bei skill-spärlichen Projekten, weil die Stack-`pass3.md`-Templates `MANIFEST.md` unter den Generierungszielen listen, aber nicht als REQUIRED markieren), erzeugt das Gap-Fill einen minimalen Stub, damit `.claude/rules/50.sync/03.skills-sync.md` stets ein gültiges Referenzziel hat. Idempotent: wird übersprungen, wenn die Datei bereits echten Inhalt hat (>20 Zeichen).
377
+ > **v2.1.0 Gap-Fill:** Pass 4 stellt zudem sicher, dass `claudeos-core/skills/00.shared/MANIFEST.md` existiert. Wenn Pass 3c die Datei ausgelassen hat (möglich bei skill-spärlichen Projekten, weil die Stack-`pass3.md`-Templates `MANIFEST.md` unter den Generierungszielen listen, aber nicht als REQUIRED markieren), erzeugt das Gap-Fill einen minimalen Stub, damit `.claude/rules/50.sync/02.skills-sync.md` (v2.2.0-Pfad — die Anzahl der Sync-Regeln wurde von 3 auf 2 reduziert, was `03` war, ist jetzt `02`) stets ein gültiges Referenzziel hat. Idempotent: wird übersprungen, wenn die Datei bereits echten Inhalt hat (>20 Zeichen).
382
378
 
383
379
  > **Hinweis:** Wenn `claude -p` fehlschlägt oder `pass4-prompt.md` fehlt, fällt die automatisierte Pipeline auf ein statisches Scaffold über `lib/memory-scaffold.js` zurück (mit Claude-getriebener Übersetzung, wenn `--lang` nicht-englisch ist). Der statische Fallback läuft nur innerhalb von `npx claudeos-core init` — der manuelle Modus erfordert, dass Pass 4 erfolgreich ist.
384
380
 
@@ -488,6 +484,8 @@ Das Pass-3-Prompt-Template enthält zudem einen **Phase-1-Block „Read Once, Ex
488
484
  - **Rule D** — Output-Knappheit: eine Zeile (`[WRITE]`/`[SKIP]`) zwischen Datei-Schreibvorgängen, keine Wiederholung der Fact-Tabelle, kein Echoing des Datei-Inhalts.
489
485
  - **Rule E** — Batch-Idempotenz-Prüfung: ein `Glob` zu PHASE-2-Beginn statt Per-Target-`Read`-Aufrufe.
490
486
 
487
+ In **v2.2.0** bettet Pass 3 zusätzlich ein deterministisches CLAUDE.md-Scaffold (`pass-prompts/templates/common/claude-md-scaffold.md`) inline in den Prompt ein. Dies fixiert die Titel und die Reihenfolge der 8 obersten Abschnitte, sodass die generierte `CLAUDE.md` nicht mehr zwischen Projekten drifted, während der Inhalt jedes Abschnitts sich weiterhin an jedes Projekt anpasst. Der neue `.env`-Parser des Stack-Detectors (`lib/env-parser.js`) liefert `stack.envInfo` an den Prompt, sodass Port/Host/API-Target-Zeilen mit dem übereinstimmen, was das Projekt tatsächlich deklariert, statt mit Framework-Defaults.
488
+
491
489
  **Pass 4** baut die L4-Memory-Schicht auf: persistente Team-Wissensdateien (decision-log, failure-patterns, Compaction-Policy, auto-rule-update) plus die `60.memory/`-Regeln, die zukünftigen Sessions mitteilen, wann und wie diese Dateien gelesen/geschrieben werden sollen. Die Memory-Schicht ist das, was Claude Code erlaubt, Lehren über Sessions hinweg anzusammeln, anstatt sie jedes Mal neu zu entdecken. Wenn `--lang` nicht-englisch ist, wird der statische Fallback-Inhalt über Claude übersetzt, bevor er geschrieben wird. v2.1.0 fügt ein Gap-Fill für `skills/00.shared/MANIFEST.md` hinzu, falls Pass 3c es ausgelassen hat.
492
490
 
493
491
  ---
@@ -497,7 +495,7 @@ Das Pass-3-Prompt-Template enthält zudem einen **Phase-1-Block „Read Once, Ex
497
495
  ```
498
496
  your-project/
499
497
 
500
- ├── CLAUDE.md ← Claude-Code-Einstiegspunkt
498
+ ├── CLAUDE.md ← Claude-Code-Einstiegspunkt (deterministische 8-Abschnitt-Struktur, v2.2.0)
501
499
 
502
500
  ├── .claude/
503
501
  │ └── rules/ ← Glob-getriggerte Regeln
@@ -591,24 +589,6 @@ Stage-Anzahl-Formel (bei aktivierter Batch-Teilung): `1 (3a) + 1 (3b-core) + N (
591
589
 
592
590
  Pass 4 (Memory-Scaffolding) fügt je nach Ausführungspfad (Claude-getriebene Generierung oder statischer Fallback) ~30 Sekunden bis 5 Minuten hinzu. Für Multi-Stack-Projekte (z. B. Java + React) werden Backend- und Frontend-Domains zusammen gezählt. Ein Projekt mit 6 Backend- + 4 Frontend-Domains = 10 gesamt = Stufe Mittel.
593
591
 
594
- ### Reale Produktions-Fallstudie: 18-Domain-Admin-Frontend (2026-04-20)
595
-
596
- Ein React-19- + Vite-6- + TypeScript-Admin-Frontend mit 18 Domains und 6 Domain-Gruppen lief End-to-End in **102 Minuten mit 101 generierten Dateien** durch. Stage-Aufschlüsselung:
597
-
598
- | Stage | Dateien | Zeit | Dateien/min |
599
- |---|---|---|---|
600
- | `3a` (Fakten-Extraktion) | 1 (`pass3a-facts.md`) | 8m 44s | — |
601
- | `3b-core` (CLAUDE.md + gemeinsam) | 24 | 22m 10s | 1,1 |
602
- | `3b-1` (15 Domains) | 30 | 10m 6s | **3,0** |
603
- | `3b-2` (3 Domains) | 6 | 4m 34s | 1,3 |
604
- | `3c-core` (Guides + geteilt) | 11 | 8m 31s | 1,3 |
605
- | `3c-1` (15 Domains) | 8 | 5m 11s | **1,5** |
606
- | `3c-2` (3 Domains) | 3 | 3m 50s | 0,8 |
607
- | `3d-aux` (database + mcp) | 3 | 2m 52s | 1,0 |
608
- | Pass 4 | 12 | 5m 36s | 2,1 |
609
-
610
- Der Durchsatz ist bei den batched Domain-Stages deutlich höher (3b-1: 3,0 Dateien/min vs. 3b-core: 1,1 Dateien/min), weil Stages mit frischem Context von engen, wiederholbaren Per-Domain-Mustern profitieren. Verifikation komplett grün: `plan-validator`, `sync-checker`, `content-validator`, `pass-json-validator` — null Overflow-Fehler, null Abschneidungen.
611
-
612
592
  ---
613
593
 
614
594
  ## Verifikations-Tools
@@ -811,8 +791,7 @@ Nein. Es erstellt nur `CLAUDE.md`, `.claude/rules/` und `claudeos-core/`. Ihr be
811
791
  Es ruft `claude -p` mehrfach über die 4 Passes hinweg auf. Im v2.1.0-Split-Mode expandiert allein Pass 3 je nach Projektgröße in 4–14+ Stages (siehe [Auto-Scaling](#auto-scaling-nach-projektgröße)). Ein typisches kleines Projekt (1–15 Domains) verwendet insgesamt 8–9 `claude -p`-Aufrufe; ein 18-Domain-Projekt 11; ein 60-Domain-Projekt 15–17. Jede Stage läuft mit einem frischen Context-Fenster — die Token-Kosten pro Aufruf sind sogar niedriger als beim früheren Single-Call-Pass-3, weil keine Stage den gesamten Datei-Baum in einem Context halten muss. Wenn `--lang` nicht-englisch ist, kann der statische Fallback-Pfad einige zusätzliche `claude -p`-Aufrufe für Übersetzungen auslösen; Ergebnisse werden in `claudeos-core/generated/.i18n-cache-<lang>.json` gecacht, sodass nachfolgende Läufe sie wiederverwenden. Das liegt im Rahmen der normalen Claude-Code-Nutzung.
812
792
 
813
793
  **F: Was ist der Pass-3-Split-Mode und warum wurde er in v2.1.0 eingeführt?**
814
- Vor v2.1.0 führte Pass 3 einen einzigen `claude -p`-Aufruf aus, der den gesamten generierten Datei-Baum (`CLAUDE.md`, Standards, Rules, Skills, Guides — typischerweise 30–60 Dateien) in einer Antwort ausgeben musste. Das funktionierte bei kleinen Projekten, traf aber bei ca. 5 Domains zuverlässig auf `Prompt is too long`-Output-Akkumulations-Fehler. Der Fehler war nicht aus der Input-Größe vorhersagbar — er hing davon ab, wie ausführlich jede generierte Datei ausfiel, und konnte dasselbe Projekt intermittierend treffen. Der Split-Mode umgeht das Problem strukturell: Pass 3 wird in sequenzielle Stages aufgeteilt (`3a` → `3b-core` → `3b-N` → `3c-core` → `3c-N` → `3d-aux`), jede ein separater `claude -p`-Aufruf mit frischem Context-Fenster. Die Konsistenz über Stages hinweg wird durch `pass3a-facts.md` erhalten, eine 5–10 KB große destillierte Fact Sheet, die jede spätere Stage referenziert, anstatt `pass2-merged.json` erneut zu lesen. Der `pass3-complete.json`-Marker trägt ein `groupsCompleted`-Array, sodass ein Crash während `3c-2` ab `3c-2` fortgesetzt wird (nicht ab `3a`), was doppelte Token-Kosten vermeidet. Empirisch verifiziert bis 18 Domains × 101 Dateien × 102 Minuten ohne Overflow — siehe [Auto-Scaling](#auto-scaling-nach-projektgröße) für die reale Produktionsaufschlüsselung.
815
-
794
+ Vor v2.1.0 führte Pass 3 einen einzigen `claude -p`-Aufruf aus, der den gesamten generierten Datei-Baum (`CLAUDE.md`, Standards, Rules, Skills, Guides — typischerweise 30–60 Dateien) in einer Antwort ausgeben musste. Das funktionierte bei kleinen Projekten, traf aber bei ca. 5 Domains zuverlässig auf `Prompt is too long`-Output-Akkumulations-Fehler. Der Fehler war nicht aus der Input-Größe vorhersagbar — er hing davon ab, wie ausführlich jede generierte Datei ausfiel, und konnte dasselbe Projekt intermittierend treffen. Der Split-Mode umgeht das Problem strukturell: Pass 3 wird in sequenzielle Stages aufgeteilt (`3a` → `3b-core` → `3b-N` → `3c-core` → `3c-N` → `3d-aux`), jede ein separater `claude -p`-Aufruf mit frischem Context-Fenster. Die Konsistenz über Stages hinweg wird durch `pass3a-facts.md` erhalten, eine 5–10 KB große destillierte Fact Sheet, die jede spätere Stage referenziert, anstatt `pass2-merged.json` erneut zu lesen. Der `pass3-complete.json`-Marker trägt ein `groupsCompleted`-Array, sodass ein Crash während `3c-2` ab `3c-2` fortgesetzt wird (nicht ab `3a`), was doppelte Token-Kosten vermeidet.
816
795
  **F: Soll ich die generierten Dateien in Git committen?**
817
796
  Ja, empfohlen. Ihr Team kann dieselben Claude-Code-Standards teilen. Erwägen Sie, `claudeos-core/generated/` in `.gitignore` aufzunehmen (Analyse-JSON ist regenerierbar).
818
797
 
@@ -867,7 +846,14 @@ Nichts erforderlich — v2.1.0-Tools ignorieren `plan/`, wenn es fehlt oder leer
867
846
 
868
847
  ```
869
848
  pass-prompts/templates/
870
- ├── common/ # Gemeinsamer Header/Footer + pass4 + staging-override
849
+ ├── common/ # gemeinsame header/footer + pass4 + staging-override + CLAUDE.md scaffold (v2.2.0)
850
+ │ ├── header.md # Rolle + Ausgabeformat-Direktive (alle Passes)
851
+ │ ├── pass3-footer.md # Post-Pass-3 health-check-Anweisung + 5 CRITICAL Guardrail-Blöcke (v2.2.0)
852
+ │ ├── pass3-phase1.md # „Read Once, Extract Facts"-Block mit Rules A-E (v2.1.0)
853
+ │ ├── pass4.md # Memory-Scaffolding-Prompt (v2.0.0)
854
+ │ ├── staging-override.md # Leitet .claude/rules/**-Schreibvorgänge auf .staged-rules/** um (v2.0.0)
855
+ │ ├── claude-md-scaffold.md # Deterministische 8-Abschnitt-CLAUDE.md-Vorlage (v2.2.0)
856
+ │ └── lang-instructions.json # Ausgabedirektiven pro Sprache (10 Sprachen)
871
857
  ├── java-spring/ # Java / Spring Boot
872
858
  ├── kotlin-spring/ # Kotlin / Spring Boot (CQRS, BFF, multi-module)
873
859
  ├── node-express/ # Node.js / Express
@@ -884,6 +870,8 @@ pass-prompts/templates/
884
870
 
885
871
  `plan-installer` erkennt Ihren Stack/Ihre Stacks automatisch und setzt dann typ-spezifische Prompts zusammen. NestJS, Vue/Nuxt, Vite SPA und Flask verwenden jeweils dedizierte Templates mit framework-spezifischen Analyse-Kategorien (z. B. `@Module`/`@Injectable`/Guards für NestJS; `<script setup>`/Pinia/useFetch für Vue; Client-Side-Routing/`VITE_`-Env für Vite; Blueprint/`app.factory`/Flask-SQLAlchemy für Flask). Für Multi-Stack-Projekte werden separate `pass1-backend-prompt.md` und `pass1-frontend-prompt.md` generiert, während `pass3-prompt.md` die Generierungsziele beider Stacks kombiniert. In v2.1.0 wird dem Pass-3-Template `common/pass3-phase1.md` (der „Read Once, Extract Facts"-Block mit Rules A–E) vorangestellt, bevor es pro Split-Mode-Stage zugeschnitten wird. Pass 4 verwendet unabhängig vom Stack das gemeinsame `common/pass4.md`-Template (Memory-Scaffolding).
886
872
 
873
+ **In v2.2.0** bettet der Pass-3-Prompt zusätzlich `common/claude-md-scaffold.md` (die deterministische 8-Abschnitt-CLAUDE.md-Vorlage) inline zwischen dem phase1-Block und dem stack-spezifischen Körper ein — dies fixiert die Abschnittsstruktur, sodass generierte CLAUDE.md nicht zwischen Projekten abweichen, während der Inhalt weiterhin projektspezifisch angepasst wird. Vorlagen werden **English-first** geschrieben; die Sprachinjektion aus `lang-instructions.json` weist das LLM an, Abschnittstitel und Fließtext zum Emit-Zeitpunkt in die Zielausgabesprache zu übersetzen.
874
+
887
875
  ---
888
876
 
889
877
  ## Monorepo-Unterstützung
@@ -970,6 +958,12 @@ my-monorepo/ ← Hier ausführen: npx claudeos-core init
970
958
 
971
959
  **„CLAUDEOS_SKIP_TRANSLATION=1 is set but --lang='ko' requires translation" InitError (v2.0.0)** — Sie haben die Test-only-Env-Var `CLAUDEOS_SKIP_TRANSLATION=1` in Ihrer Shell gesetzt (wahrscheinlich ein Rest aus CI-/Test-Setup) UND eine nicht-englische `--lang` gewählt. Diese Env-Var short-circuit den Übersetzungs-Pfad, von dem Pass 4's statischer Fallback und Gap-Fill für nicht-englischen Output abhängen. `init` erkennt den Konflikt beim Sprachwahl-Zeitpunkt und bricht sofort ab (anstatt mitten in Pass 4 mit einem verwirrenden verschachtelten Fehler zu crashen). Fix: Entweder `unset CLAUDEOS_SKIP_TRANSLATION` vor dem Ausführen oder `npx claudeos-core init --lang en` verwenden.
972
960
 
961
+ **Warnung "⚠️ v2.2.0 upgrade detected" (v2.2.0)** — Deine existierende `CLAUDE.md` wurde mit einer Pre-v2.2.0-Version generiert. Die Standard-Resume-Mode-Regeneration wird existierende Dateien unter Rule B idempotency überspringen, daher werden die strukturellen Verbesserungen von v2.2.0 (8-Abschnitt-CLAUDE.md-Scaffold, Per-File-Paths in `40.infra/*`, `.env.example`-basierte Port-Genauigkeit, Section-8-Redesign mit `Common Rules & Memory (L4)` (neu gestaltet mit zwei Unterabschnitten: Common Rules · L4 Memory), `60.memory/*`-Rule-Zeile, forward-referenced `04.doc-writing-guide.md`) NICHT angewendet. Fix: Mit `npx claudeos-core init --force` erneut ausführen. Das überschreibt generierte Dateien (`CLAUDE.md`, `.claude/rules/`, `claudeos-core/standard/`, `claudeos-core/skills/`, `claudeos-core/guide/`) und bewahrt dabei `claudeos-core/memory/` (akkumulierte decision-log-, failure-patterns-Einträge — append-only). Committe das Projekt vorher, wenn du die Überschreibungen vor dem Akzeptieren diff-en möchtest.
962
+
963
+ **Port in CLAUDE.md weicht von `.env.example` ab (v2.2.0)** — Der neue `.env`-Parser des Stack-Detectors (`lib/env-parser.js`) liest zuerst `.env.example` (kanonisch, committed), dann `.env`-Varianten als Fallback. Erkannte Port-Variablen: `PORT`, `VITE_PORT`, `VITE_DESKTOP_PORT`, `NEXT_PUBLIC_PORT`, `NUXT_PORT`, `DJANGO_PORT` usw. Für Spring Boot hat `server.port` aus `application.yml` weiterhin Vorrang vor `.env` (framework-native Config gewinnt). Wenn dein Projekt einen ungewöhnlichen Env-Variablennamen verwendet, benenne ihn auf eine anerkannte Konvention um oder stelle eine Issue-Anfrage zur Erweiterung von `PORT_VAR_KEYS`. Framework-Defaults (Vite 5173, Next.js 3000, Django 8000) werden nur verwendet, wenn sowohl direkte Detection als auch `.env` still bleiben.
964
+
965
+ **Secret-Werte als `***REDACTED***` in generierten Docs (v2.2.0)** — Erwartetes Verhalten. Der `.env`-Parser von v2.2.0 redact-iert automatisch Werte von Variablen, die den Mustern `PASSWORD`/`SECRET`/`TOKEN`/`API_KEY`/`CREDENTIAL`/`PRIVATE_KEY` entsprechen, bevor sie irgendeinen Generator erreichen. Das ist Defense-in-Depth gegen versehentlich in `.env.example` committed Secrets. `DATABASE_URL` bleibt unverändert für Stack-Detector-DB-Identifikations-Back-Compat. Wenn du irgendwo in der generierten `CLAUDE.md` `***REDACTED***` siehst, ist das ein Bug — redact-ierte Werte sollten nicht in der Tabelle landen; bitte erstelle eine Issue. Nicht-sensible Runtime-Config (Port, Host, API Target, NODE_ENV usw.) kommt unverändert durch.
966
+
973
967
  ---
974
968
 
975
969
  ## Mitwirken
@@ -979,7 +973,7 @@ Beiträge sind willkommen! Bereiche, in denen Hilfe am meisten benötigt wird:
979
973
  - **Neue Stack-Templates** — Ruby/Rails, Go (Gin/Fiber/Echo), PHP (Laravel/Symfony), Rust (Axum/Actix), Svelte/SvelteKit, Remix
980
974
  - **IDE-Integration** — VS-Code-Extension, IntelliJ-Plugin
981
975
  - **CI/CD-Templates** — GitLab CI, CircleCI, Jenkins-Beispiele (GitHub Actions bereits ausgeliefert — siehe `.github/workflows/test.yml`)
982
- - **Testabdeckung** — Erweiterung der Test-Suite (derzeit 563 Tests über 29 Test-Dateien, die Scanner, Stack-Erkennung, Domain-Grouping, Plan-Parsing, Prompt-Generierung, CLI-Selectors, Monorepo-Erkennung, Vite-SPA-Erkennung, Verifikations-Tools, L4-Memory-Scaffold, Pass-2-Resume-Validierung, Pass-3-Guards 1/2/3 (H1-Sentinel + H2-BOM-aware-Empty-File + strikter Stale-Marker-Unlink), Pass-3-Split-Mode-Batch-Unterteilung, Pass-3-Partial-Marker-Resume (v2.1.0), Pass-4-Marker-Content-Validierung + Stale-Marker-Unlink-Striktheit + scaffoldSkillsManifest-Gap-Fill (v2.1.0), Translation-Env-Skip-Guard + Early-Fail-Fast + CI-Workflow, staged-rules-Move, lang-aware-Translation-Fallback, Master-Plan-Removal-Regressions-Suite (v2.1.0), Memory-Score/Compact-Formatting-Regression (v2.1.0) und AI-Work-Rules-Template-Struktur abdecken)
976
+ - **Testabdeckung** — Erweiterung der Test-Suite (derzeit 602 Tests über 30 Test-Dateien, die Scanner, Stack-Erkennung, Domain-Grouping, Plan-Parsing, Prompt-Generierung, CLI-Selectors, Monorepo-Erkennung, Vite-SPA-Erkennung, Verifikations-Tools, L4-Memory-Scaffold, Pass-2-Resume-Validierung, Pass-3-Guards 1/2/3 (H1-Sentinel + H2-BOM-aware-Empty-File + strikter Stale-Marker-Unlink), Pass-3-Split-Mode-Batch-Unterteilung, Pass-3-Partial-Marker-Resume (v2.1.0), Pass-4-Marker-Content-Validierung + Stale-Marker-Unlink-Striktheit + scaffoldSkillsManifest-Gap-Fill (v2.1.0), Translation-Env-Skip-Guard + Early-Fail-Fast + CI-Workflow, staged-rules-Move, lang-aware-Translation-Fallback, Master-Plan-Removal-Regressions-Suite (v2.1.0), Memory-Score/Compact-Formatting-Regression (v2.1.0) und AI-Work-Rules-Template-Struktur und `.env`-Parser Port/Host/API-Target-Extraktion + Redaction sensibler Variablen (v2.2.0) abdecken)
983
977
 
984
978
  Siehe [`CONTRIBUTING.md`](./CONTRIBUTING.md) für die vollständige Liste der Bereiche, den Code-Style, die Commit-Konvention und die Schritt-für-Schritt-Anleitung zum Hinzufügen eines neuen Stack-Templates.
985
979