mirror of
https://github.com/ksyasuda/SubMiner.git
synced 2026-03-20 12:11:28 -07:00
feat(stats): add v1 immersion stats dashboard (#19)
This commit is contained in:
68
scripts/docs-knowledge-base.test.ts
Normal file
68
scripts/docs-knowledge-base.test.ts
Normal file
@@ -0,0 +1,68 @@
|
||||
import assert from 'node:assert/strict';
|
||||
import { existsSync, readFileSync } from 'node:fs';
|
||||
import { join } from 'node:path';
|
||||
import test from 'node:test';
|
||||
|
||||
const repoRoot = process.cwd();
|
||||
|
||||
function read(relativePath: string): string {
|
||||
return readFileSync(join(repoRoot, relativePath), 'utf8');
|
||||
}
|
||||
|
||||
const requiredDocs = [
|
||||
'docs/README.md',
|
||||
'docs/architecture/README.md',
|
||||
'docs/architecture/domains.md',
|
||||
'docs/architecture/layering.md',
|
||||
'docs/knowledge-base/README.md',
|
||||
'docs/knowledge-base/core-beliefs.md',
|
||||
'docs/knowledge-base/catalog.md',
|
||||
'docs/knowledge-base/quality.md',
|
||||
'docs/workflow/README.md',
|
||||
'docs/workflow/planning.md',
|
||||
'docs/workflow/verification.md',
|
||||
] as const;
|
||||
|
||||
const metadataFields = ['Status:', 'Last verified:', 'Owner:', 'Read when:'] as const;
|
||||
|
||||
test('required internal knowledge-base docs exist', () => {
|
||||
for (const relativePath of requiredDocs) {
|
||||
assert.equal(existsSync(join(repoRoot, relativePath)), true, `${relativePath} should exist`);
|
||||
}
|
||||
});
|
||||
|
||||
test('core internal docs include metadata fields', () => {
|
||||
for (const relativePath of requiredDocs) {
|
||||
const contents = read(relativePath);
|
||||
for (const field of metadataFields) {
|
||||
assert.match(contents, new RegExp(field.replace(/[.*+?^${}()|[\]\\]/g, '\\$&')));
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
test('AGENTS.md is a compact map to internal docs', () => {
|
||||
const agentsContents = read('AGENTS.md');
|
||||
const lineCount = agentsContents.trimEnd().split('\n').length;
|
||||
|
||||
assert.ok(lineCount <= 110, `AGENTS.md should stay compact; got ${lineCount} lines`);
|
||||
assert.match(agentsContents, /\.\/docs\/README\.md/);
|
||||
assert.match(agentsContents, /\.\/docs\/architecture\/README\.md/);
|
||||
assert.match(agentsContents, /\.\/docs\/workflow\/README\.md/);
|
||||
assert.match(agentsContents, /\.\/docs\/workflow\/verification\.md/);
|
||||
assert.match(agentsContents, /\.\/docs\/knowledge-base\/README\.md/);
|
||||
assert.match(agentsContents, /\.\/docs\/RELEASING\.md/);
|
||||
assert.match(agentsContents, /`docs-site\/` is user-facing/);
|
||||
assert.doesNotMatch(agentsContents, /\.\/docs-site\/development\.md/);
|
||||
assert.doesNotMatch(agentsContents, /\.\/docs-site\/architecture\.md/);
|
||||
});
|
||||
|
||||
test('docs-site contributor docs point internal readers to docs/', () => {
|
||||
const developmentContents = read('docs-site/development.md');
|
||||
const architectureContents = read('docs-site/architecture.md');
|
||||
const docsReadmeContents = read('docs-site/README.md');
|
||||
|
||||
assert.match(developmentContents, /docs\/README\.md/);
|
||||
assert.match(developmentContents, /docs\/architecture\/README\.md/);
|
||||
assert.match(architectureContents, /docs\/architecture\/README\.md/);
|
||||
assert.match(docsReadmeContents, /docs\/README\.md/);
|
||||
});
|
||||
Reference in New Issue
Block a user