fix(engine): print engine version, so a stale plugin cache is visible
Measured 2026-08-04: two repos (llm-security, config-audit) independently
proved the /repo-standard skill had resolved ${CLAUDE_PLUGIN_ROOT} to a
cached 0.1.1 while 0.2.0 was installed and the catalog pinned it — same
instruction, same variable, wrong engine. 0.1.1 has neither BADGE-COUNT nor
README-LANGUAGE, so a broadcast recommending the skill produced clean-looking
runs that could not have found what they were sent to find.
The header line and --json output now carry `repo-standard v<version>`
(headerLine/withEngineVersion, both pure and unit tested). SKILL.md tells the
reader to confirm it against the catalog pin before trusting green. The
stale-cache resolution itself is the harness's, not this repo's — not fixed
here, only made visible instead of silent.
TDD: 4 new tests. 111/111 green.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01496ZWasKPnA627crFBXWhe
This commit is contained in:
parent
d1b6274924
commit
f85b9d3229
7 changed files with 88 additions and 11 deletions
|
|
@ -29,6 +29,13 @@ import { fileURLToPath } from 'node:url';
|
|||
|
||||
const HERE = dirname(fileURLToPath(import.meta.url));
|
||||
const REGISTER_PATH = join(HERE, '..', 'register', 'repos.json');
|
||||
const PACKAGE_PATH = join(HERE, '..', 'package.json');
|
||||
|
||||
// This engine's own version, not the target repo's — distinct from
|
||||
// readPackageVersion(dir) below, which reads the REPO BEING CHECKED.
|
||||
export function readEngineVersion(path = PACKAGE_PATH) {
|
||||
return JSON.parse(readFileSync(path, 'utf8')).version;
|
||||
}
|
||||
|
||||
const LEVELS = ['OK', 'SKIP', 'WARN', 'ERROR'];
|
||||
|
||||
|
|
@ -980,11 +987,25 @@ const BUCKET_TITLE = {
|
|||
weakening: 'WEAKENING — present, but it reads as amateur',
|
||||
};
|
||||
|
||||
function render(result) {
|
||||
const mark = { OK: '✓', WARN: '!', ERROR: '✗', SKIP: '·' };
|
||||
// A stale plugin cache once served 0.1.1 while 0.2.0 was installed and
|
||||
// pinned, silently — the output looked like a clean pass, because nothing
|
||||
// said which engine had run. This is the fix: name the version so a wrong
|
||||
// engine is visible, not just correctable in hindsight.
|
||||
const MARK = { OK: '✓', WARN: '!', ERROR: '✗', SKIP: '·' };
|
||||
|
||||
export function headerLine(result, engineVersion) {
|
||||
const klass = result.klass ? ` [${result.klass}]` : '';
|
||||
const traits = result.traits?.length ? ` {${result.traits.join(', ')}}` : '';
|
||||
console.log(`\n${mark[result.status]} ${result.name}${klass}${traits} — ${result.status}`);
|
||||
return `${MARK[result.status]} ${result.name}${klass}${traits} — ${result.status} (repo-standard v${engineVersion})`;
|
||||
}
|
||||
|
||||
export function withEngineVersion(result, engineVersion) {
|
||||
return { ...result, engineVersion };
|
||||
}
|
||||
|
||||
function render(result, engineVersion) {
|
||||
const mark = MARK;
|
||||
console.log(`\n${headerLine(result, engineVersion)}`);
|
||||
|
||||
for (const bucket of BUCKETS) {
|
||||
const inBucket = result.findings.filter((f) => f.bucket === bucket);
|
||||
|
|
@ -1047,11 +1068,12 @@ async function main(argv) {
|
|||
}
|
||||
|
||||
const result = inspectRepo(dir, name, register, description, catalogNames);
|
||||
const engineVersion = readEngineVersion();
|
||||
|
||||
if (argv.includes('--json')) {
|
||||
console.log(JSON.stringify(result, null, 2));
|
||||
console.log(JSON.stringify(withEngineVersion(result, engineVersion), null, 2));
|
||||
} else {
|
||||
render(result);
|
||||
render(result, engineVersion);
|
||||
}
|
||||
process.exit(result.status === 'ERROR' ? 1 : 0);
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue