251148c3ff
## Summary - add repository-wide quality tooling and verification scaffolding, including CI workflows, pnpm workspace setup, ESLint/Prettier/markdown checks, and generated-output verification helpers - reorganize skill sources and generation flow by introducing canonical `_source` variants, generator/manifests, reusable helper abstractions, and shared web-automation/browser utilities - clean up and expand documentation so the root README flows into docs and skill docs, with clearer development, reviewer, installer, and workflow guidance ## Notable changes - docs flow and consistency cleanup across `README.md`, `docs/README.md`, and related docs - new scripts for `check`, docs verification, generated-file verification, shell portability, and safe directory replacement - refactors in Atlassian and web-automation skill runtimes to reduce duplication and centralize reusable code - changelog, development documentation, and CI surface updates ## Test Plan - [ ] `pnpm run check` - [ ] review generated/manifests and skill sync outputs - [ ] smoke-check docs flow from `README.md` to `docs/README.md` to skill docs ## Notes - this branch currently includes tracked `skills/web-automation/shared/node_modules` content that should be reviewed carefully as potentially noisy/accidental committed artifacts Co-authored-by: Stefano Fiorini <stefano.fiorini@firsthorizon.com> Reviewed-on: #1
72 lines
3.2 KiB
JavaScript
72 lines
3.2 KiB
JavaScript
/**
|
|
* verify-docs-flow.test.mjs — unit tests for the docs-flow verifier (M2, S-206)
|
|
*
|
|
* Tests the exported functions from scripts/verify-docs-flow.mjs.
|
|
* Each test is structured as a RED → GREEN cycle: we first verify the function
|
|
* exists and behaves correctly; any structural violation surfaces as a clear
|
|
* test failure rather than a cryptic runtime error.
|
|
*/
|
|
|
|
import { test, describe } from "node:test";
|
|
import assert from "node:assert/strict";
|
|
import path from "node:path";
|
|
import { fileURLToPath } from "node:url";
|
|
|
|
const __dirname = path.dirname(fileURLToPath(import.meta.url));
|
|
const REPO_ROOT = path.resolve(__dirname, "../..");
|
|
|
|
// ── Helpers ────────────────────────────────────────────────────────────────
|
|
|
|
/**
|
|
* Import the verifier lazily so missing-module errors surface as test
|
|
* failures rather than crashing the whole suite.
|
|
*/
|
|
async function loadVerifier() {
|
|
const verifierPath = path.join(REPO_ROOT, "scripts", "verify-docs-flow.mjs");
|
|
return import(verifierPath);
|
|
}
|
|
|
|
// ── S-206 acceptance checks ────────────────────────────────────────────────
|
|
|
|
describe("verify-docs-flow.mjs", () => {
|
|
test("module exists and exports required functions", async () => {
|
|
const mod = await loadVerifier();
|
|
assert.equal(typeof mod.checkDocsIndexCoverage, "function",
|
|
"must export checkDocsIndexCoverage");
|
|
assert.equal(typeof mod.checkReviewerMatrixConsistency, "function",
|
|
"must export checkReviewerMatrixConsistency");
|
|
assert.equal(typeof mod.checkTelegramAgentCoverage, "function",
|
|
"must export checkTelegramAgentCoverage");
|
|
assert.equal(typeof mod.checkRepoPathsExist, "function",
|
|
"must export checkRepoPathsExist");
|
|
});
|
|
|
|
test("checkDocsIndexCoverage: every docs/*.md is linked from docs/README.md", async () => {
|
|
const { checkDocsIndexCoverage } = await loadVerifier();
|
|
const errors = await checkDocsIndexCoverage(REPO_ROOT);
|
|
assert.deepEqual(errors, [],
|
|
`docs/README.md coverage errors:\n${errors.join("\n")}`);
|
|
});
|
|
|
|
test("checkReviewerMatrixConsistency: reviewer tables consistent across canonical sources", async () => {
|
|
const { checkReviewerMatrixConsistency } = await loadVerifier();
|
|
const errors = await checkReviewerMatrixConsistency(REPO_ROOT);
|
|
assert.deepEqual(errors, [],
|
|
`Reviewer matrix inconsistency errors:\n${errors.join("\n")}`);
|
|
});
|
|
|
|
test("checkTelegramAgentCoverage: Telegram doc lists all agents with Pi helpers", async () => {
|
|
const { checkTelegramAgentCoverage } = await loadVerifier();
|
|
const errors = await checkTelegramAgentCoverage(REPO_ROOT);
|
|
assert.deepEqual(errors, [],
|
|
`Telegram coverage errors:\n${errors.join("\n")}`);
|
|
});
|
|
|
|
test("checkRepoPathsExist: all repo-relative paths in README.md and docs/ exist", async () => {
|
|
const { checkRepoPathsExist } = await loadVerifier();
|
|
const errors = await checkRepoPathsExist(REPO_ROOT);
|
|
assert.deepEqual(errors, [],
|
|
`Broken repo-relative path references:\n${errors.join("\n")}`);
|
|
});
|
|
});
|