claudeos-core 2.1.1 → 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.
- package/CHANGELOG.md +426 -0
- package/README.de.md +32 -5
- package/README.es.md +32 -5
- package/README.fr.md +32 -5
- package/README.hi.md +32 -5
- package/README.ja.md +32 -5
- package/README.ko.md +32 -5
- package/README.md +32 -5
- package/README.ru.md +34 -5
- package/README.vi.md +32 -5
- package/README.zh-CN.md +32 -5
- package/bin/commands/init.js +81 -45
- package/content-validator/index.js +6 -1
- package/lib/env-parser.js +317 -0
- package/lib/memory-scaffold.js +7 -5
- package/package.json +1 -1
- package/pass-prompts/templates/angular/pass3.md +28 -13
- package/pass-prompts/templates/common/claude-md-scaffold.md +644 -0
- package/pass-prompts/templates/common/pass3-footer.md +185 -0
- package/pass-prompts/templates/common/pass4.md +6 -3
- package/pass-prompts/templates/common/staging-override.md +1 -1
- package/pass-prompts/templates/java-spring/pass3.md +31 -21
- package/pass-prompts/templates/kotlin-spring/pass3.md +34 -22
- package/pass-prompts/templates/node-express/pass3.md +30 -21
- package/pass-prompts/templates/node-fastify/pass3.md +28 -14
- package/pass-prompts/templates/node-nestjs/pass3.md +29 -14
- package/pass-prompts/templates/node-nextjs/pass3.md +34 -21
- package/pass-prompts/templates/node-vite/pass3.md +30 -13
- package/pass-prompts/templates/python-django/pass3.md +32 -21
- package/pass-prompts/templates/python-fastapi/pass3.md +33 -21
- package/pass-prompts/templates/python-flask/pass3.md +31 -13
- package/pass-prompts/templates/vue-nuxt/pass3.md +32 -13
- package/plan-installer/index.js +8 -0
- package/plan-installer/prompt-generator.js +18 -1
- package/plan-installer/stack-detector.js +16 -0
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,431 @@
|
|
|
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
|
+
|
|
3
429
|
## [2.1.1] — 2026-04-20
|
|
4
430
|
|
|
5
431
|
Docs-only maintenance release. No runtime behavior or API changes.
|
package/README.de.md
CHANGED
|
@@ -85,10 +85,20 @@ Dieser Unterschied summiert sich. 10 Aufgaben/Tag × 20 Minuten gespart = **übe
|
|
|
85
85
|
| **Vite / React SPA** | `package.json`, `vite.config.*` | 9 Kategorien, 55 Unterpunkte |
|
|
86
86
|
| **Angular** | `package.json`, `angular.json` | 12 Kategorien, 78 Unterpunkte |
|
|
87
87
|
|
|
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).
|
|
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).
|
|
89
89
|
|
|
90
90
|
**Sie geben nichts an. Alles wird automatisch erkannt.**
|
|
91
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
|
+
|
|
92
102
|
### Java-Domain-Erkennung (5 Muster mit Fallback)
|
|
93
103
|
|
|
94
104
|
| Priorität | Muster | Struktur | Beispiel |
|
|
@@ -364,7 +374,7 @@ cat claudeos-core/generated/pass4-prompt.md \
|
|
|
364
374
|
|
|
365
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`.
|
|
366
376
|
|
|
367
|
-
> **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/
|
|
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).
|
|
368
378
|
|
|
369
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.
|
|
370
380
|
|
|
@@ -474,6 +484,8 @@ Das Pass-3-Prompt-Template enthält zudem einen **Phase-1-Block „Read Once, Ex
|
|
|
474
484
|
- **Rule D** — Output-Knappheit: eine Zeile (`[WRITE]`/`[SKIP]`) zwischen Datei-Schreibvorgängen, keine Wiederholung der Fact-Tabelle, kein Echoing des Datei-Inhalts.
|
|
475
485
|
- **Rule E** — Batch-Idempotenz-Prüfung: ein `Glob` zu PHASE-2-Beginn statt Per-Target-`Read`-Aufrufe.
|
|
476
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
|
+
|
|
477
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.
|
|
478
490
|
|
|
479
491
|
---
|
|
@@ -483,7 +495,7 @@ Das Pass-3-Prompt-Template enthält zudem einen **Phase-1-Block „Read Once, Ex
|
|
|
483
495
|
```
|
|
484
496
|
your-project/
|
|
485
497
|
│
|
|
486
|
-
├── CLAUDE.md ← Claude-Code-Einstiegspunkt
|
|
498
|
+
├── CLAUDE.md ← Claude-Code-Einstiegspunkt (deterministische 8-Abschnitt-Struktur, v2.2.0)
|
|
487
499
|
│
|
|
488
500
|
├── .claude/
|
|
489
501
|
│ └── rules/ ← Glob-getriggerte Regeln
|
|
@@ -834,7 +846,14 @@ Nichts erforderlich — v2.1.0-Tools ignorieren `plan/`, wenn es fehlt oder leer
|
|
|
834
846
|
|
|
835
847
|
```
|
|
836
848
|
pass-prompts/templates/
|
|
837
|
-
├── common/ #
|
|
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)
|
|
838
857
|
├── java-spring/ # Java / Spring Boot
|
|
839
858
|
├── kotlin-spring/ # Kotlin / Spring Boot (CQRS, BFF, multi-module)
|
|
840
859
|
├── node-express/ # Node.js / Express
|
|
@@ -851,6 +870,8 @@ pass-prompts/templates/
|
|
|
851
870
|
|
|
852
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).
|
|
853
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
|
+
|
|
854
875
|
---
|
|
855
876
|
|
|
856
877
|
## Monorepo-Unterstützung
|
|
@@ -937,6 +958,12 @@ my-monorepo/ ← Hier ausführen: npx claudeos-core init
|
|
|
937
958
|
|
|
938
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.
|
|
939
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
|
+
|
|
940
967
|
---
|
|
941
968
|
|
|
942
969
|
## Mitwirken
|
|
@@ -946,7 +973,7 @@ Beiträge sind willkommen! Bereiche, in denen Hilfe am meisten benötigt wird:
|
|
|
946
973
|
- **Neue Stack-Templates** — Ruby/Rails, Go (Gin/Fiber/Echo), PHP (Laravel/Symfony), Rust (Axum/Actix), Svelte/SvelteKit, Remix
|
|
947
974
|
- **IDE-Integration** — VS-Code-Extension, IntelliJ-Plugin
|
|
948
975
|
- **CI/CD-Templates** — GitLab CI, CircleCI, Jenkins-Beispiele (GitHub Actions bereits ausgeliefert — siehe `.github/workflows/test.yml`)
|
|
949
|
-
- **Testabdeckung** — Erweiterung der Test-Suite (derzeit
|
|
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)
|
|
950
977
|
|
|
951
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.
|
|
952
979
|
|