mirror of
https://github.com/affaan-m/everything-claude-code.git
synced 2026-05-14 00:23:04 +08:00
145 lines
4.1 KiB
JavaScript
145 lines
4.1 KiB
JavaScript
'use strict';
|
|
|
|
const assert = require('assert');
|
|
const fs = require('fs');
|
|
const path = require('path');
|
|
|
|
const repoRoot = path.resolve(__dirname, '..', '..');
|
|
const legacyShimsDir = path.join(repoRoot, 'legacy-command-shims', 'commands');
|
|
|
|
let passed = 0;
|
|
let failed = 0;
|
|
|
|
function test(name, fn) {
|
|
try {
|
|
fn();
|
|
console.log(` ✓ ${name}`);
|
|
passed++;
|
|
} catch (error) {
|
|
console.log(` ✗ ${name}`);
|
|
console.log(` Error: ${error.message}`);
|
|
failed++;
|
|
}
|
|
}
|
|
|
|
function read(relativePath) {
|
|
return fs.readFileSync(path.join(repoRoot, relativePath), 'utf8');
|
|
}
|
|
|
|
function findLegacyDocumentDirs(dir) {
|
|
const results = [];
|
|
|
|
for (const entry of fs.readdirSync(dir, { withFileTypes: true })) {
|
|
if (entry.name === 'node_modules' || entry.name === '.git') {
|
|
continue;
|
|
}
|
|
|
|
const nextPath = path.join(dir, entry.name);
|
|
|
|
if (!entry.isDirectory()) {
|
|
continue;
|
|
}
|
|
|
|
if (entry.name.startsWith('_legacy-documents-')) {
|
|
results.push(path.relative(repoRoot, nextPath));
|
|
}
|
|
|
|
results.push(...findLegacyDocumentDirs(nextPath));
|
|
}
|
|
|
|
return results.sort();
|
|
}
|
|
|
|
console.log('\n=== Testing legacy artifact inventory ===\n');
|
|
|
|
test('legacy artifact inventory documents classification states', () => {
|
|
const source = read('docs/legacy-artifact-inventory.md');
|
|
|
|
for (const state of [
|
|
'Landed',
|
|
'Milestone-tracked',
|
|
'Salvage branch',
|
|
'Translator/manual review',
|
|
'Archive/no-action',
|
|
]) {
|
|
assert.ok(source.includes(state), `Missing classification state ${state}`);
|
|
}
|
|
});
|
|
|
|
test('any _legacy-documents directories are explicitly inventoried', () => {
|
|
const source = read('docs/legacy-artifact-inventory.md');
|
|
const dirs = findLegacyDocumentDirs(repoRoot);
|
|
|
|
for (const dir of dirs) {
|
|
assert.ok(source.includes(dir), `Missing legacy artifact inventory row for ${dir}`);
|
|
}
|
|
});
|
|
|
|
test('workspace-level legacy repos are inventoried without personal paths', () => {
|
|
const source = read('docs/legacy-artifact-inventory.md');
|
|
|
|
for (const dir of [
|
|
'../_legacy-documents-ecc-context-2026-04-30',
|
|
'../_legacy-documents-ecc-everything-claude-code-2026-04-30',
|
|
]) {
|
|
assert.ok(source.includes(dir), `Missing workspace legacy repo ${dir}`);
|
|
}
|
|
|
|
assert.ok(source.includes('Workspace-Level Legacy Repos'));
|
|
assert.ok(!source.includes('/Users/'), 'Inventory should avoid machine-local absolute paths');
|
|
});
|
|
|
|
test('workspace legacy import rules block raw private context', () => {
|
|
const source = read('docs/legacy-artifact-inventory.md');
|
|
|
|
for (const required of [
|
|
'Do not read, print, stage, or copy `.env` files',
|
|
'tokens',
|
|
'OAuth secrets',
|
|
'personal paths',
|
|
'private operator context',
|
|
'Do not import raw marketing drafts',
|
|
'public-safe ideas',
|
|
]) {
|
|
assert.ok(source.includes(required), `Missing import guardrail: ${required}`);
|
|
}
|
|
});
|
|
|
|
test('legacy command shims remain classified as an opt-in archive', () => {
|
|
const source = read('docs/legacy-artifact-inventory.md');
|
|
const readme = read('legacy-command-shims/README.md');
|
|
|
|
assert.ok(source.includes('legacy-command-shims/'));
|
|
assert.ok(source.includes('Archive/no-action'));
|
|
assert.ok(readme.includes('no longer loaded by the default plugin command surface'));
|
|
assert.ok(readme.includes('short-term migration compatibility'));
|
|
});
|
|
|
|
test('legacy command shim table tracks the current archive contents', () => {
|
|
const source = read('docs/legacy-artifact-inventory.md');
|
|
const shims = fs.readdirSync(legacyShimsDir)
|
|
.filter(fileName => fileName.endsWith('.md'))
|
|
.sort();
|
|
|
|
assert.strictEqual(shims.length, 12);
|
|
|
|
for (const shim of shims) {
|
|
assert.ok(source.includes(`\`${shim}\``), `Missing legacy shim ${shim}`);
|
|
}
|
|
});
|
|
|
|
test('stale salvage backlog records the remaining manual-review tail', () => {
|
|
const source = read('docs/legacy-artifact-inventory.md');
|
|
|
|
assert.ok(source.includes('#1687 zh-CN localization tail'));
|
|
assert.ok(source.includes('Translator/manual review'));
|
|
assert.ok(source.includes('#1746-#1752'));
|
|
});
|
|
|
|
if (failed > 0) {
|
|
console.log(`\nFailed: ${failed}`);
|
|
process.exit(1);
|
|
}
|
|
|
|
console.log(`\nPassed: ${passed}`);
|