claude-code-arcane 2.9.4 → 2.9.6
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 +14 -0
- package/dist/cli.js +27 -11
- package/docs/coding-standards.md +5 -17
- package/package.json +1 -1
- package/rules/code-comments.md +10 -4
- package/rules/data-files.md +1 -1
- package/rules/gamedev/engine-code.md +1 -1
- package/rules/gamedev/shader-code.md +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,3 +1,17 @@
|
|
|
1
|
+
## [2.9.6](https://github.com/SebastianLuser/claude-code-arcane/compare/v2.9.5...v2.9.6) (2026-09-07)
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
### Bug Fixes
|
|
5
|
+
|
|
6
|
+
* **rules:** make code-comments the only authority on comments ([99bb84e](https://github.com/SebastianLuser/claude-code-arcane/commit/99bb84e7612630ae67d4942b378ccd1881d4cf64))
|
|
7
|
+
|
|
8
|
+
## [2.9.5](https://github.com/SebastianLuser/claude-code-arcane/compare/v2.9.4...v2.9.5) (2026-09-07)
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
### Bug Fixes
|
|
12
|
+
|
|
13
|
+
* **update:** record the hash Arcane shipped, not the customized one on disk ([921c89d](https://github.com/SebastianLuser/claude-code-arcane/commit/921c89d25eb8167e1efbcd27ae233faf3beb85c8))
|
|
14
|
+
|
|
1
15
|
## [2.9.4](https://github.com/SebastianLuser/claude-code-arcane/compare/v2.9.3...v2.9.4) (2026-09-07)
|
|
2
16
|
|
|
3
17
|
|
package/dist/cli.js
CHANGED
|
@@ -2515,7 +2515,12 @@ Update available: ${chalk7.red(installedVersion)} -> ${chalk7.green(currentVersi
|
|
|
2515
2515
|
arcane_version: currentVersion,
|
|
2516
2516
|
source_version: currentVersion,
|
|
2517
2517
|
updated_at: (/* @__PURE__ */ new Date()).toISOString().replace(/\.\d{3}Z$/, "Z"),
|
|
2518
|
-
content_hashes:
|
|
2518
|
+
content_hashes: hashesToRecord(
|
|
2519
|
+
installedHashes,
|
|
2520
|
+
manifest.content_hashes ?? null,
|
|
2521
|
+
items,
|
|
2522
|
+
opts.force ?? false
|
|
2523
|
+
),
|
|
2519
2524
|
installed_skills: merged.skills,
|
|
2520
2525
|
installed_rules: allRules,
|
|
2521
2526
|
installed_agents: merged.agents,
|
|
@@ -2556,7 +2561,12 @@ Refreshed ${unhashed.length} file(s); no other changes to apply.`) : chalk7.gree
|
|
|
2556
2561
|
arcane_version: currentVersion,
|
|
2557
2562
|
source_version: currentVersion,
|
|
2558
2563
|
updated_at: (/* @__PURE__ */ new Date()).toISOString().replace(/\.\d{3}Z$/, "Z"),
|
|
2559
|
-
content_hashes:
|
|
2564
|
+
content_hashes: hashesToRecord(
|
|
2565
|
+
newHashes,
|
|
2566
|
+
manifest.content_hashes ?? null,
|
|
2567
|
+
items,
|
|
2568
|
+
opts.force ?? false
|
|
2569
|
+
),
|
|
2560
2570
|
installed_skills: merged.skills,
|
|
2561
2571
|
installed_rules: allRules,
|
|
2562
2572
|
installed_agents: merged.agents,
|
|
@@ -2621,19 +2631,25 @@ function granularAgentDivisions(entries) {
|
|
|
2621
2631
|
for (const division of whole) partial.delete(division);
|
|
2622
2632
|
return partial;
|
|
2623
2633
|
}
|
|
2624
|
-
function
|
|
2625
|
-
const
|
|
2626
|
-
skills: { ...
|
|
2627
|
-
rules: { ...
|
|
2628
|
-
agents: { ...
|
|
2629
|
-
hooks: { ...
|
|
2634
|
+
function hashesToRecord(fresh, previous, items, force) {
|
|
2635
|
+
const recorded = {
|
|
2636
|
+
skills: { ...fresh.skills },
|
|
2637
|
+
rules: { ...fresh.rules },
|
|
2638
|
+
agents: { ...fresh.agents },
|
|
2639
|
+
hooks: { ...fresh.hooks }
|
|
2630
2640
|
};
|
|
2631
2641
|
for (const item of items) {
|
|
2632
|
-
if (item.action !== "keep-foreign") continue;
|
|
2633
2642
|
const bucket = `${item.type}s`;
|
|
2634
|
-
|
|
2643
|
+
if (item.action === "keep-foreign") {
|
|
2644
|
+
delete recorded[bucket][item.name];
|
|
2645
|
+
continue;
|
|
2646
|
+
}
|
|
2647
|
+
if (item.action === "skip-customized" && !force) {
|
|
2648
|
+
const asInstalled = previous?.[bucket]?.[item.name];
|
|
2649
|
+
if (asInstalled) recorded[bucket][item.name] = asInstalled;
|
|
2650
|
+
}
|
|
2635
2651
|
}
|
|
2636
|
-
return
|
|
2652
|
+
return recorded;
|
|
2637
2653
|
}
|
|
2638
2654
|
function computeUpdatePlan(manifestHashes, installedHashes, sourceHashes, owned, exemptAgentDivisions = /* @__PURE__ */ new Set()) {
|
|
2639
2655
|
const items = [];
|
package/docs/coding-standards.md
CHANGED
|
@@ -55,10 +55,9 @@ Si podés hacerlo con la stdlib de Python, la escotilla no aplica.
|
|
|
55
55
|
|
|
56
56
|
## Comentarios
|
|
57
57
|
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
- **Anti-pattern:** comentarios que explican el obvio (`// increment counter` sobre `counter++`)
|
|
58
|
+
La regla vive en `.claude/rules/code-comments.md` y es la única autoridad.
|
|
59
|
+
No dupliques criterios acá: dos listas sobre comentarios siempre terminan
|
|
60
|
+
contradiciéndose, y gana la permisiva.
|
|
62
61
|
|
|
63
62
|
---
|
|
64
63
|
|
|
@@ -145,17 +144,6 @@ Antes de marcar trabajo como completo:
|
|
|
145
144
|
|
|
146
145
|
---
|
|
147
146
|
|
|
148
|
-
## Comments / Docs
|
|
147
|
+
## Comments / Docs
|
|
149
148
|
|
|
150
|
-
|
|
151
|
-
- Comentarios que describen WHAT (el código ya dice)
|
|
152
|
-
- Comentarios referenciando el task/PR actual ("added for JIRA-123")
|
|
153
|
-
- Docstrings multi-párrafo en funciones simples
|
|
154
|
-
- Comentarios `// removed X` para código borrado
|
|
155
|
-
- `// used by Y` (el tooling lo dice mejor)
|
|
156
|
-
|
|
157
|
-
**SÍ escribir comentarios cuando:**
|
|
158
|
-
- Explican el WHY que no es obvio
|
|
159
|
-
- Documentan workaround de un bug específico (con link al bug)
|
|
160
|
-
- Marcan invariantes o preconditions no-obvios
|
|
161
|
-
- APIs públicas consumidas por terceros
|
|
149
|
+
Ver `.claude/rules/code-comments.md`.
|
package/package.json
CHANGED
package/rules/code-comments.md
CHANGED
|
@@ -50,13 +50,19 @@ Comments are written in **English**, whatever language the conversation is in.
|
|
|
50
50
|
|
|
51
51
|
## Write
|
|
52
52
|
|
|
53
|
-
|
|
54
|
-
|
|
53
|
+
**The default is no comment.** The code says what it does and the commit says why it changed.
|
|
54
|
+
A new comment has to earn its place; it is never the neutral choice.
|
|
55
|
+
|
|
56
|
+
The whole list of exceptions:
|
|
57
|
+
|
|
58
|
+
- **Doc comments on public APIs** consumed from outside the module, one line. Private ones
|
|
59
|
+
need none.
|
|
55
60
|
- **Workarounds**, with a link to the upstream bug.
|
|
56
|
-
- **Non-obvious invariants or preconditions** a caller has to respect.
|
|
57
|
-
- **Doc comments on public APIs** consumed from outside the module. Private ones need none.
|
|
58
61
|
- **`TODO(@owner, YYYY-MM-DD): description`.** Never a bare `TODO`.
|
|
59
62
|
|
|
63
|
+
A comment shaped as a comparison with what used to be there — "X and not Y", "no longer X",
|
|
64
|
+
"now uses X" — is session narration wearing a technical disguise. It belongs in the commit.
|
|
65
|
+
|
|
60
66
|
## Shape
|
|
61
67
|
|
|
62
68
|
One line, unless the reason honestly needs two. A comment that needs a paragraph to explain
|
package/rules/data-files.md
CHANGED
|
@@ -15,7 +15,7 @@ paths:
|
|
|
15
15
|
- All JSON / YAML / TOML files must parse cleanly — malformed config blocks the build
|
|
16
16
|
- File naming: lowercase with hyphens or underscores, following `[domain]-[name].[ext]` pattern
|
|
17
17
|
- Every schema-bearing file must have a documented schema (JSON Schema, OpenAPI, Zod, Pydantic — whatever the stack uses)
|
|
18
|
-
- Numeric values with business meaning
|
|
18
|
+
- Numeric values with business meaning carry the unit in the key (`timeout_ms`, not bare `timeout`)
|
|
19
19
|
- Use consistent key naming within a file: camelCase for JSON, snake_case for YAML if that's the project convention — don't mix
|
|
20
20
|
- No orphaned entries — every record must be referenced by code, another config, or explicitly marked as a default/example
|
|
21
21
|
- Version config files when making breaking schema changes (`v1/`, `v2/` or explicit `schema_version` field)
|
|
@@ -9,7 +9,7 @@ paths:
|
|
|
9
9
|
- All engine APIs must be thread-safe OR explicitly documented as single-thread-only
|
|
10
10
|
- Profile before AND after every optimization — document the measured numbers
|
|
11
11
|
- Engine code must NEVER depend on gameplay code (strict dependency direction: engine <- gameplay)
|
|
12
|
-
-
|
|
12
|
+
- Public API doc comments stay to one line (see `code-comments`); usage examples belong in the docs, not the source
|
|
13
13
|
- Changes to public interfaces require a deprecation period and migration guide
|
|
14
14
|
- Use RAII / deterministic cleanup for all resources
|
|
15
15
|
- All engine systems must support graceful degradation
|
|
@@ -18,7 +18,7 @@ visual quality, performance, and cross-platform compatibility.
|
|
|
18
18
|
## Code Quality
|
|
19
19
|
- All uniforms/parameters must have descriptive names and appropriate hints
|
|
20
20
|
- Group related parameters (Unity: `[Header]`, Unreal: Category)
|
|
21
|
-
-
|
|
21
|
+
- Name non-obvious calculations rather than commenting them; comments follow `code-comments`
|
|
22
22
|
- No magic numbers — use named constants or documented uniform values
|
|
23
23
|
|
|
24
24
|
## Performance Requirements
|