test(repo): guard timeline live preview boundaries
This commit is contained in:
@@ -100,6 +100,40 @@ export const rules = [
|
|||||||
],
|
],
|
||||||
forbidden: [],
|
forbidden: [],
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
file: "apps/web/src/hooks/timelineLivePreview.ts",
|
||||||
|
maxLines: 140,
|
||||||
|
required: [
|
||||||
|
{
|
||||||
|
pattern: /\bexport function scheduleLivePreview\b/,
|
||||||
|
message: "timeline live preview helpers must keep frame scheduling centralized",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
pattern: /\bexport function clearLivePreview\b/,
|
||||||
|
message: "timeline live preview helpers must keep preview reset logic centralized",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
pattern: /\bexport function preserveLivePreview\b/,
|
||||||
|
message: "timeline live preview helpers must keep snapshot preservation centralized",
|
||||||
|
},
|
||||||
|
],
|
||||||
|
forbidden: [],
|
||||||
|
},
|
||||||
|
{
|
||||||
|
file: "apps/web/src/hooks/useTimelineDrag.ts",
|
||||||
|
required: [
|
||||||
|
{
|
||||||
|
pattern: /from "\.\/timelineLivePreview\.js"/,
|
||||||
|
message: "timeline drag must keep live preview behavior delegated to the extracted helper module",
|
||||||
|
},
|
||||||
|
],
|
||||||
|
forbidden: [
|
||||||
|
{
|
||||||
|
pattern: /\bfunction (?:toPxValue|joinTransforms|captureLivePreviewTargets|renderLivePreview|scheduleLivePreview|clearLivePreview|datesMatch|preserveLivePreview)\b/,
|
||||||
|
message: "timeline drag must not re-inline live preview helper implementations",
|
||||||
|
},
|
||||||
|
],
|
||||||
|
},
|
||||||
{
|
{
|
||||||
file: "docker-compose.prod.yml",
|
file: "docker-compose.prod.yml",
|
||||||
required: [
|
required: [
|
||||||
|
|||||||
@@ -4,6 +4,7 @@ import {
|
|||||||
collectArchitectureGuardrailViolations,
|
collectArchitectureGuardrailViolations,
|
||||||
countLines,
|
countLines,
|
||||||
evaluateRule,
|
evaluateRule,
|
||||||
|
rules,
|
||||||
} from "./check-architecture-guardrails.mjs";
|
} from "./check-architecture-guardrails.mjs";
|
||||||
|
|
||||||
describe("architecture guardrails", () => {
|
describe("architecture guardrails", () => {
|
||||||
@@ -66,4 +67,22 @@ describe("architecture guardrails", () => {
|
|||||||
"apps/web/src/example.ts: file grew to 4 lines and exceeds maxLines=2; split the ownership surface before expanding it further",
|
"apps/web/src/example.ts: file grew to 4 lines and exceeds maxLines=2; split the ownership surface before expanding it further",
|
||||||
]);
|
]);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
it("guards the extracted timeline live preview ownership boundary", () => {
|
||||||
|
const dragRule = rules.find((rule) => rule.file === "apps/web/src/hooks/useTimelineDrag.ts");
|
||||||
|
const livePreviewRule = rules.find((rule) => rule.file === "apps/web/src/hooks/timelineLivePreview.ts");
|
||||||
|
|
||||||
|
assert.ok(dragRule);
|
||||||
|
assert.ok(livePreviewRule);
|
||||||
|
|
||||||
|
assert.deepEqual(evaluateRule(dragRule, "function clearLivePreview() {}\n"), [
|
||||||
|
"apps/web/src/hooks/useTimelineDrag.ts: missing guardrail anchor: timeline drag must keep live preview behavior delegated to the extracted helper module",
|
||||||
|
"apps/web/src/hooks/useTimelineDrag.ts: forbidden pattern matched: timeline drag must not re-inline live preview helper implementations",
|
||||||
|
]);
|
||||||
|
|
||||||
|
assert.deepEqual(evaluateRule(livePreviewRule, "export function scheduleLivePreview() {}\n"), [
|
||||||
|
"apps/web/src/hooks/timelineLivePreview.ts: missing guardrail anchor: timeline live preview helpers must keep preview reset logic centralized",
|
||||||
|
"apps/web/src/hooks/timelineLivePreview.ts: missing guardrail anchor: timeline live preview helpers must keep snapshot preservation centralized",
|
||||||
|
]);
|
||||||
|
});
|
||||||
});
|
});
|
||||||
|
|||||||
Reference in New Issue
Block a user