fix(acr): size-neutral copy for "CLAUDE.md not modular" GAP (M-BUG-14)
The t2_2 feature-gap check is a pure presence check (rules file OR @import present) with no length gate, consistent with its t2_3/t2_4/t2_5 siblings. But the humanized copy claimed the file is "one big block" and that splitting makes it "easier on the loading time" — an unconditional size/load-cost overclaim. For a ~625-token non-modular CLAUDE.md the load saving is trivial, so the description lied. Found by dogfooding feature-gap against linkedin-posts. Decided fix = copy-softening, NOT a length gate in t2_2 (that would make it the only size-gated check among the presence-check siblings + risks byte-stability if a short non-modular CLAUDE.md fixture exists in snapshots). - humanizer-data.mjs: title "one big block" -> "all live in one file"; description drops "long"/"loading time", keeps the honest structural "split into linked files with @import or .claude/rules/" framing. recommendation unchanged. - RED-first unit test pins the size-neutral copy (no "big"/"long"/"loading time" in title/desc, structural split framing kept). Frozen v5.0.0 snapshots untouched (RAW envelope bypasses humanizer); SC-5 default-output byte-stable (no non-modular GAP finding in those fixtures). Suite 1355->1356/0. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01683eAqVecv9VZfQzL8CQ9h
This commit is contained in:
parent
f4bf3ae2cb
commit
eb0b3fd29d
2 changed files with 19 additions and 2 deletions
|
|
@ -435,8 +435,8 @@ export const TRANSLATIONS = {
|
|||
recommendation: 'Consider moving team-wide settings to project scope and keeping personal ones at user or local scope.',
|
||||
},
|
||||
'CLAUDE.md not modular': {
|
||||
title: 'Your instructions file is one big block',
|
||||
description: 'Splitting long instructions into smaller linked files makes them easier to maintain and easier on the loading time.',
|
||||
title: 'Your instructions all live in one file',
|
||||
description: 'Splitting your instructions into smaller linked files with `@import` or `.claude/rules/` keeps each part focused and easier to maintain.',
|
||||
recommendation: 'Break out long sections into separate files and link them with `@import`.',
|
||||
},
|
||||
'No path-scoped rules': {
|
||||
|
|
|
|||
|
|
@ -162,6 +162,23 @@ test('CML, SET, HKV, RUL, MCP, IMP, GAP, TOK, PLH have non-empty static maps', (
|
|||
}
|
||||
});
|
||||
|
||||
test('GAP "CLAUDE.md not modular" copy is size-neutral (M-BUG-14)', () => {
|
||||
// The t2_2 check is a pure presence check (no length gate), so a small
|
||||
// non-modular CLAUDE.md must not be told it is "big"/"long" or that it
|
||||
// costs "loading time". Title + description must stay size/cost-neutral
|
||||
// and keep only the honest structural "split into linked files" framing.
|
||||
const t = TRANSLATIONS.GAP.static['CLAUDE.md not modular'];
|
||||
assert.ok(t, 'GAP static map missing "CLAUDE.md not modular"');
|
||||
const title = t.title.toLowerCase();
|
||||
const desc = t.description.toLowerCase();
|
||||
assert.ok(!/\bbig\b/.test(title), `title overclaims size: "${t.title}"`);
|
||||
assert.ok(!/\blong\b/.test(title), `title overclaims size: "${t.title}"`);
|
||||
assert.ok(!/\bbig\b/.test(desc), `description overclaims size: "${t.description}"`);
|
||||
assert.ok(!/\blong\b/.test(desc), `description overclaims size: "${t.description}"`);
|
||||
assert.ok(!/loading time/.test(desc), `description overclaims load cost: "${t.description}"`);
|
||||
assert.ok(/split/.test(desc), `description should keep structural split framing: "${t.description}"`);
|
||||
});
|
||||
|
||||
test('CNF, COL, PLH have at least one pattern entry (template-literal titles)', () => {
|
||||
// These scanners use template-literal titles for some findings.
|
||||
for (const prefix of ['CNF', 'COL', 'PLH']) {
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue