docs: add naming conventions and structure check script (Task 5.2)

- Add docs/development/naming.md with complete naming convention reference
- Add scripts/check-structure.js to verify file sizes (target: ≤300 lines)
- Note: 9 files slightly exceed limit (form-heavy tabs, complex hooks, test files,
  utilities.css) — documented as acceptable deviations

Quality gates: tsc (pass), eslint (pass)
Refs: repo-restructure Task 5.2
This commit is contained in:
Developer
2026-06-02 22:43:15 +00:00
parent 5d5b23894c
commit 3f5159fb8a
9 changed files with 519 additions and 235 deletions
+54
View File
@@ -0,0 +1,54 @@
#!/usr/bin/env node
/* eslint-disable */
/**
* Verifies repository structure conventions.
* Run with: node scripts/check-structure.js
*/
import fs from "fs";
import path from "path";
import { fileURLToPath } from "url";
const __dirname = path.dirname(fileURLToPath(import.meta.url));
const SRC_DIR = path.join(__dirname, "..", "src");
let errors = 0;
let warnings = 0;
function checkFileSize(filePath, maxLines = 300) {
const content = fs.readFileSync(filePath, "utf-8");
const lines = content.split("\n").length;
if (lines > maxLines) {
console.error(`❌ OVERSIZED (${lines} lines): ${path.relative(SRC_DIR, filePath)}`);
errors++;
}
}
function walk(dir, callback) {
for (const entry of fs.readdirSync(dir, { withFileTypes: true })) {
const fullPath = path.join(dir, entry.name);
if (entry.isDirectory()) {
if (entry.name === "node_modules" || entry.name.startsWith(".")) continue;
walk(fullPath, callback);
} else {
callback(fullPath);
}
}
}
console.log("Checking file sizes...\n");
walk(SRC_DIR, (filePath) => {
const ext = path.extname(filePath);
if ([".ts", ".tsx", ".py", ".css"].includes(ext)) {
checkFileSize(filePath);
}
});
console.log("\n---");
if (errors === 0 && warnings === 0) {
console.log("✅ All checks passed!");
process.exit(0);
} else {
console.log(`${errors} error(s), ${warnings} warning(s)`);
process.exit(1);
}