@agentvibes/guardrails 0.1.0 → 0.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +131 -5
- package/dist/astGrep.d.ts +3 -0
- package/dist/astGrep.js +15 -2
- package/dist/astGrep.js.map +1 -1
- package/dist/doctor.js +38 -2
- package/dist/doctor.js.map +1 -1
- package/dist/hookPostedit.js +18 -1
- package/dist/hookPostedit.js.map +1 -1
- package/dist/presetDrift.d.ts +31 -0
- package/dist/presetDrift.js +226 -0
- package/dist/presetDrift.js.map +1 -0
- package/dist/presetDriftTest.d.ts +1 -0
- package/dist/presetDriftTest.js +136 -0
- package/dist/presetDriftTest.js.map +1 -0
- package/dist/repoRules.d.ts +27 -0
- package/dist/repoRules.js +86 -0
- package/dist/repoRules.js.map +1 -0
- package/dist/repoRulesTest.d.ts +1 -0
- package/dist/repoRulesTest.js +122 -0
- package/dist/repoRulesTest.js.map +1 -0
- package/dist/screenScope.d.ts +16 -5
- package/dist/screenScope.js +66 -21
- package/dist/screenScope.js.map +1 -1
- package/dist/screenScopeTest.js +67 -7
- package/dist/screenScopeTest.js.map +1 -1
- package/dist/siblingCloneTest.d.ts +1 -0
- package/dist/siblingCloneTest.js +201 -0
- package/dist/siblingCloneTest.js.map +1 -0
- package/dist/testRules.js +77 -0
- package/dist/testRules.js.map +1 -1
- package/dist/twinCoverageTest.d.ts +1 -0
- package/dist/twinCoverageTest.js +262 -0
- package/dist/twinCoverageTest.js.map +1 -0
- package/dist/verify.d.ts +1 -1
- package/dist/verify.js +33 -8
- package/dist/verify.js.map +1 -1
- package/dist/verifyDiff.js +6 -5
- package/dist/verifyDiff.js.map +1 -1
- package/package.json +7 -3
- package/rules/__fixtures__/demo-mode-by-default/bad.ts +22 -0
- package/rules/__fixtures__/demo-mode-by-default/bad.tsx +22 -0
- package/rules/__fixtures__/demo-mode-by-default/good.ts +21 -0
- package/rules/__fixtures__/demo-mode-by-default/good.tsx +21 -0
- package/rules/__fixtures__/json-roundtrip/bad.ts +6 -0
- package/rules/__fixtures__/json-roundtrip/bad.tsx +8 -0
- package/rules/__fixtures__/json-roundtrip/good.ts +5 -0
- package/rules/__fixtures__/json-roundtrip/good.tsx +7 -0
- package/rules/__fixtures__/kind-if-without-match/bad.ts +17 -0
- package/rules/__fixtures__/kind-if-without-match/bad.tsx +18 -0
- package/rules/__fixtures__/kind-if-without-match/good.ts +14 -0
- package/rules/__fixtures__/kind-if-without-match/good.tsx +13 -0
- package/rules/__fixtures__/literal-union-in-component/components/bad.tsx +16 -0
- package/rules/__fixtures__/literal-union-in-component/components/good.tsx +25 -0
- package/rules/__fixtures__/non-exhaustive-match/bad.tsx +12 -0
- package/rules/__fixtures__/non-exhaustive-match/good.tsx +14 -0
- package/rules/__fixtures__/silent-default-return/bad.ts +9 -0
- package/rules/__fixtures__/silent-default-return/bad.tsx +10 -0
- package/rules/__fixtures__/silent-default-return/good.ts +17 -0
- package/rules/__fixtures__/silent-default-return/good.tsx +11 -0
- package/rules/demo-mode-by-default-ts.yml +17 -1
- package/rules/demo-mode-by-default.yml +17 -1
- package/rules/json-roundtrip-tsx.yml +26 -0
- package/rules/kind-if-without-match-tsx.yml +31 -0
- package/rules/literal-union-in-component-tsx.yml +81 -0
- package/rules/no-local-kit-clone-tsx.yml +16 -0
- package/rules/no-local-kit-clone.yml +16 -0
- package/rules/non-exhaustive-match-tsx.yml +48 -0
- package/rules/silent-default-return-tsx.yml +33 -0
package/dist/screenScopeTest.js
CHANGED
|
@@ -3,7 +3,7 @@ import { mkdirSync, mkdtempSync, rmSync, writeFileSync } from "node:fs";
|
|
|
3
3
|
import { tmpdir } from "node:os";
|
|
4
4
|
import { join } from "node:path";
|
|
5
5
|
import { packageRoot } from "./packagePaths.js";
|
|
6
|
-
import {
|
|
6
|
+
import { scopeExemptRuleIds } from "./screenScope.js";
|
|
7
7
|
// `[verify] screens` — the repo says where its screens are; the canon says which
|
|
8
8
|
// rules do not apply there (is-7067a0b8). Four directions, all executed:
|
|
9
9
|
// 1. with no declaration, a screen still fires — absent key, absent behaviour
|
|
@@ -19,6 +19,15 @@ import { screenExemptRuleIds } from "./screenScope.js";
|
|
|
19
19
|
const SCREEN = 'import { rootStore } from "../stores/rootStore";\n' +
|
|
20
20
|
'import { GalleryPageStore } from "../stores/GalleryPageStore";\n' +
|
|
21
21
|
'export const GalleryScreen = () => new GalleryPageStore(rootStore, "slug");\n';
|
|
22
|
+
// The canonical async union the kit publishes — what `no-local-kit-clone` tells
|
|
23
|
+
// every other repo to import instead of redeclaring.
|
|
24
|
+
const KIT_RESOURCE = "export type Resource<T> =\n" +
|
|
25
|
+
' | { kind: "idle" }\n' +
|
|
26
|
+
' | { kind: "loading" }\n' +
|
|
27
|
+
' | { kind: "ready"; value: T }\n' +
|
|
28
|
+
' | { kind: "error"; message: string };\n';
|
|
29
|
+
// Nothing to do with the kit: pins that the scope is one rule wide.
|
|
30
|
+
const EMPTY_CATCH = "export const go = () => {\n try { work() } catch (e) { }\n};\n";
|
|
22
31
|
// A leaf reaching past the boundary — banned everywhere, screens included.
|
|
23
32
|
const LEAF = 'import { galleryStore } from "../stores/gallery";\n' +
|
|
24
33
|
"export const Row = () => galleryStore.title;\n";
|
|
@@ -46,13 +55,23 @@ const fail = (m) => {
|
|
|
46
55
|
console.error(`FAIL screen-scope: ${m}`);
|
|
47
56
|
failed++;
|
|
48
57
|
};
|
|
49
|
-
// 0 —
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
58
|
+
// 0 — every registered scope has at least one rule carrying its marker, so no
|
|
59
|
+
// scope in the registry is inert. A scope with an empty exempt set filters
|
|
60
|
+
// nothing and would pass every other check below while doing nothing at all.
|
|
61
|
+
const exempt = scopeExemptRuleIds();
|
|
62
|
+
for (const [scope, ids] of exempt) {
|
|
63
|
+
if (ids.size === 0) {
|
|
64
|
+
fail(`no bundled rule declares \`appliesTo: not-${scope}\` — that scope would filter nothing`);
|
|
65
|
+
}
|
|
66
|
+
else {
|
|
67
|
+
console.log(` ok screen-scope: ${ids.size} rule(s) declare appliesTo: not-${scope}`);
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
if (exempt.get("screens")?.has("direct-store-import") !== true) {
|
|
71
|
+
fail("direct-store-import lost its `appliesTo: not-screens` marker");
|
|
53
72
|
}
|
|
54
|
-
|
|
55
|
-
|
|
73
|
+
if (exempt.get("kit-source")?.has("no-local-kit-clone") !== true) {
|
|
74
|
+
fail("no-local-kit-clone lost its `appliesTo: not-kit-source` marker");
|
|
56
75
|
}
|
|
57
76
|
// 1 — no declaration, no change
|
|
58
77
|
{
|
|
@@ -92,6 +111,47 @@ else {
|
|
|
92
111
|
rmSync(root, { recursive: true, force: true });
|
|
93
112
|
}
|
|
94
113
|
}
|
|
114
|
+
// 5 — the second scope, kit-source: `@agentvibes/kit` holds the canonical
|
|
115
|
+
// Resource<T>, and `no-local-kit-clone` (error tier) fires on it unless the
|
|
116
|
+
// repo declares the tree. Both directions, because a scope that swallows the
|
|
117
|
+
// rule everywhere would pass the declared half on its own.
|
|
118
|
+
{
|
|
119
|
+
const root = mkdtempSync(join(tmpdir(), "guardrails-kitsrc-"));
|
|
120
|
+
try {
|
|
121
|
+
mkdirSync(join(root, "src", "resource"), { recursive: true });
|
|
122
|
+
mkdirSync(join(root, ".agentvibes"), { recursive: true });
|
|
123
|
+
writeFileSync(join(root, "src", "resource", "resource.ts"), KIT_RESOURCE);
|
|
124
|
+
writeFileSync(join(root, ".agentvibes", "project.toml"), "");
|
|
125
|
+
const undeclared = verify(root);
|
|
126
|
+
if (!undeclared.out.includes("no-local-kit-clone")) {
|
|
127
|
+
fail("without [verify] kit_source the canonical Resource<T> must still be flagged");
|
|
128
|
+
}
|
|
129
|
+
else {
|
|
130
|
+
console.log(" ok screen-scope: undeclared repo still fires no-local-kit-clone");
|
|
131
|
+
}
|
|
132
|
+
writeFileSync(join(root, ".agentvibes", "project.toml"), '[verify]\nkit_source = "^src/"\n');
|
|
133
|
+
const declared = verify(root);
|
|
134
|
+
if (declared.out.includes("no-local-kit-clone")) {
|
|
135
|
+
fail("a declared kit source must not be flagged by no-local-kit-clone");
|
|
136
|
+
}
|
|
137
|
+
else {
|
|
138
|
+
console.log(" ok screen-scope: the kit's own Resource<T> stops firing once declared");
|
|
139
|
+
}
|
|
140
|
+
// The narrowness half: a rule that has nothing to do with kit-source keeps
|
|
141
|
+
// firing inside the declared tree.
|
|
142
|
+
writeFileSync(join(root, "src", "resource", "swallow.ts"), EMPTY_CATCH);
|
|
143
|
+
const still = verify(root);
|
|
144
|
+
if (!still.out.includes("catch-empty")) {
|
|
145
|
+
fail("kit_source must scope no-local-kit-clone only — catch-empty still applies");
|
|
146
|
+
}
|
|
147
|
+
else {
|
|
148
|
+
console.log(" ok screen-scope: kit_source scopes one rule, not the whole tree");
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
finally {
|
|
152
|
+
rmSync(root, { recursive: true, force: true });
|
|
153
|
+
}
|
|
154
|
+
}
|
|
95
155
|
// 4 — an unusable pattern is refused, not dropped
|
|
96
156
|
{
|
|
97
157
|
const root = fixture("^src/screens/[");
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"screenScopeTest.js","sourceRoot":"","sources":["../src/screenScopeTest.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAC/C,OAAO,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AACxE,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AACjC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"screenScopeTest.js","sourceRoot":"","sources":["../src/screenScopeTest.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,201 @@
|
|
|
1
|
+
import { spawnSync } from "node:child_process";
|
|
2
|
+
import { chmodSync, mkdirSync, mkdtempSync, readdirSync, readFileSync, rmSync, writeFileSync, } from "node:fs";
|
|
3
|
+
import { tmpdir } from "node:os";
|
|
4
|
+
import { join } from "node:path";
|
|
5
|
+
import { packageRoot } from "./packagePaths.js";
|
|
6
|
+
// The gate's sibling-repo clone, run for real (is-8774fe0e). A self-hosted
|
|
7
|
+
// runner keeps its _work directory between jobs and `actions/checkout` cleans
|
|
8
|
+
// only its own path, so the leftover `repos/<owner>/<name>` from the previous
|
|
9
|
+
// run made `git clone` exit 128 — and because that step sits before install,
|
|
10
|
+
// verify-diff and the metrics ratchet were both reported `skipped`. One green
|
|
11
|
+
// run, every run after it red, and nothing in the summary saying the ratchet
|
|
12
|
+
// had not executed.
|
|
13
|
+
//
|
|
14
|
+
// The script under test is EXTRACTED FROM THE WORKFLOW, not copied here: a
|
|
15
|
+
// copy would keep passing after someone edited the YAML, which is the failure
|
|
16
|
+
// mode this test exists to close.
|
|
17
|
+
const WORKFLOW = join(packageRoot, ".github", "workflows", "guardrails-gate.yml");
|
|
18
|
+
const STEP = "clone sibling repos (gits layout)";
|
|
19
|
+
/** The `run:` block of a named step, dedented, exactly as the runner would execute it. */
|
|
20
|
+
function stepScript(name) {
|
|
21
|
+
const lines = readFileSync(WORKFLOW, "utf8").split("\n");
|
|
22
|
+
const at = lines.findIndex((l) => l.trim() === `- name: ${name}`);
|
|
23
|
+
if (at < 0)
|
|
24
|
+
throw new Error(`no step named ${JSON.stringify(name)} in ${WORKFLOW}`);
|
|
25
|
+
const runAt = lines.findIndex((l, i) => i > at && /^\s+run:\s*\|\s*$/.test(l));
|
|
26
|
+
if (runAt < 0)
|
|
27
|
+
throw new Error(`step ${JSON.stringify(name)} has no block \`run: |\``);
|
|
28
|
+
const indent = (lines[runAt + 1] ?? "").match(/^\s*/)?.[0].length ?? 0;
|
|
29
|
+
if (indent === 0)
|
|
30
|
+
throw new Error(`step ${JSON.stringify(name)} has an empty run block`);
|
|
31
|
+
const body = [];
|
|
32
|
+
for (let i = runAt + 1; i < lines.length; i++) {
|
|
33
|
+
const l = lines[i];
|
|
34
|
+
if (l.trim() === "") {
|
|
35
|
+
body.push("");
|
|
36
|
+
continue;
|
|
37
|
+
}
|
|
38
|
+
if ((l.match(/^\s*/)?.[0].length ?? 0) < indent)
|
|
39
|
+
break;
|
|
40
|
+
body.push(l.slice(indent));
|
|
41
|
+
}
|
|
42
|
+
const script = body.join("\n");
|
|
43
|
+
if (/\$\{\{/.test(script)) {
|
|
44
|
+
throw new Error(`step ${JSON.stringify(name)} interpolates \${{ }} inside its script — a caller-supplied input would run as a command here; pass it through env: instead`);
|
|
45
|
+
}
|
|
46
|
+
return script;
|
|
47
|
+
}
|
|
48
|
+
// `git` stands in for the real one so the test needs no network. It reproduces
|
|
49
|
+
// exactly the rule under test — clone refuses a non-empty destination with
|
|
50
|
+
// exit 128 — and `realGitRefusesNonEmpty` below pins that claim to the actual
|
|
51
|
+
// git on this machine, so the shim cannot quietly become more permissive than
|
|
52
|
+
// the thing it imitates.
|
|
53
|
+
const GIT_SHIM = `#!/bin/sh
|
|
54
|
+
if [ "$1" != "clone" ]; then exit 0; fi
|
|
55
|
+
dest=""
|
|
56
|
+
for a in "$@"; do dest="$a"; done
|
|
57
|
+
if [ -d "$dest" ] && [ -n "$(ls -A "$dest" 2>/dev/null)" ]; then
|
|
58
|
+
echo "fatal: destination path '$dest' already exists and is not an empty directory." >&2
|
|
59
|
+
exit 128
|
|
60
|
+
fi
|
|
61
|
+
mkdir -p "$dest"
|
|
62
|
+
echo cloned > "$dest/CLONED"
|
|
63
|
+
exit 0
|
|
64
|
+
`;
|
|
65
|
+
let failed = 0;
|
|
66
|
+
const fail = (m) => {
|
|
67
|
+
console.error(`FAIL sibling-clone: ${m}`);
|
|
68
|
+
failed++;
|
|
69
|
+
};
|
|
70
|
+
/** Run the extracted step in `ws` with the shim on PATH. */
|
|
71
|
+
function runStep(ws, siblings, mainRepo, script, bin) {
|
|
72
|
+
const res = spawnSync("sh", ["-c", script], {
|
|
73
|
+
cwd: ws,
|
|
74
|
+
encoding: "utf8",
|
|
75
|
+
env: {
|
|
76
|
+
...process.env,
|
|
77
|
+
PATH: `${bin}:${process.env.PATH ?? ""}`,
|
|
78
|
+
SIBLING_TOKEN: "t0ken",
|
|
79
|
+
SIBLING_REPOS: siblings,
|
|
80
|
+
MAIN_REPO: mainRepo,
|
|
81
|
+
},
|
|
82
|
+
});
|
|
83
|
+
return { status: res.status ?? -1, out: `${res.stdout}${res.stderr}` };
|
|
84
|
+
}
|
|
85
|
+
/** The claim the shim rests on: real git clone refuses a non-empty destination. */
|
|
86
|
+
function realGitRefusesNonEmpty(base) {
|
|
87
|
+
const src = join(base, "origin");
|
|
88
|
+
const dest = join(base, "dest");
|
|
89
|
+
mkdirSync(src, { recursive: true });
|
|
90
|
+
mkdirSync(dest, { recursive: true });
|
|
91
|
+
writeFileSync(join(dest, "leftover.txt"), "from the previous run\n");
|
|
92
|
+
const g = (...a) => spawnSync("git", ["-C", src, ...a], { encoding: "utf8" });
|
|
93
|
+
spawnSync("git", ["init", "-q", src], { encoding: "utf8" });
|
|
94
|
+
writeFileSync(join(src, "f.txt"), "x\n");
|
|
95
|
+
g("add", "-A");
|
|
96
|
+
g("-c", "user.email=t@t", "-c", "user.name=t", "commit", "-qm", "init");
|
|
97
|
+
const r = spawnSync("git", ["clone", "--depth=1", src, dest], { encoding: "utf8" });
|
|
98
|
+
if (r.status !== 128 || !r.stderr.includes("already exists and is not an empty directory")) {
|
|
99
|
+
fail(`real \`git clone\` into a non-empty directory exited ${r.status} — the shim below imitates a rule this git no longer has: ${r.stderr.trim()}`);
|
|
100
|
+
}
|
|
101
|
+
else {
|
|
102
|
+
console.log(" ok sibling-clone: real git clone refuses a non-empty destination (128)");
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
const base = mkdtempSync(join(tmpdir(), "guardrails-sibclone-"));
|
|
106
|
+
try {
|
|
107
|
+
const script = stepScript(STEP);
|
|
108
|
+
console.log(` ok sibling-clone: extracted the real \`${STEP}\` script from the workflow`);
|
|
109
|
+
realGitRefusesNonEmpty(base);
|
|
110
|
+
const bin = join(base, "bin");
|
|
111
|
+
mkdirSync(bin, { recursive: true });
|
|
112
|
+
writeFileSync(join(bin, "git"), GIT_SHIM);
|
|
113
|
+
chmodSync(join(bin, "git"), 0o755);
|
|
114
|
+
// 1 — two consecutive runs in a workspace that is NOT cleaned between them.
|
|
115
|
+
// This is the acceptance criterion: the second run is the one that was red.
|
|
116
|
+
{
|
|
117
|
+
const ws = join(base, "ws-twice");
|
|
118
|
+
mkdirSync(ws, { recursive: true });
|
|
119
|
+
const first = runStep(ws, "byoklab/components", "byoklab/tg-gallery", script, bin);
|
|
120
|
+
if (first.status !== 0) {
|
|
121
|
+
fail(`first run on a clean workspace exited ${first.status}: ${first.out.trim()}`);
|
|
122
|
+
}
|
|
123
|
+
else {
|
|
124
|
+
console.log(" ok sibling-clone: first run on a clean workspace clones");
|
|
125
|
+
}
|
|
126
|
+
// The leftover the runner keeps, plus a file that must NOT survive: a
|
|
127
|
+
// sibling left from last week is a stale answer, not a cheap one.
|
|
128
|
+
writeFileSync(join(ws, "repos", "byoklab", "components", "STALE"), "last week\n");
|
|
129
|
+
const second = runStep(ws, "byoklab/components", "byoklab/tg-gallery", script, bin);
|
|
130
|
+
if (second.status !== 0) {
|
|
131
|
+
fail(`second run on the same workspace exited ${second.status} — the leftover clone is still fatal: ${second.out.trim()}`);
|
|
132
|
+
}
|
|
133
|
+
else {
|
|
134
|
+
console.log(" ok sibling-clone: second run on the SAME dirty workspace clones (was exit 128)");
|
|
135
|
+
}
|
|
136
|
+
const left = readdirSync(join(ws, "repos", "byoklab", "components"));
|
|
137
|
+
if (left.includes("STALE")) {
|
|
138
|
+
fail("the second run reused last run's tree — a stale sibling is a wrong gate answer");
|
|
139
|
+
}
|
|
140
|
+
else if (!left.includes("CLONED")) {
|
|
141
|
+
fail(`the second run left no clone behind: ${left.join(", ")}`);
|
|
142
|
+
}
|
|
143
|
+
else {
|
|
144
|
+
console.log(" ok sibling-clone: the second run's tree is fresh, not the leftover");
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
// 2 — several siblings, twice, because the loop is where a partial fix hides.
|
|
148
|
+
{
|
|
149
|
+
const ws = join(base, "ws-many");
|
|
150
|
+
mkdirSync(ws, { recursive: true });
|
|
151
|
+
const many = "byoklab/components byoklab/dam";
|
|
152
|
+
runStep(ws, many, "byoklab/tg-gallery", script, bin);
|
|
153
|
+
const again = runStep(ws, many, "byoklab/tg-gallery", script, bin);
|
|
154
|
+
if (again.status !== 0) {
|
|
155
|
+
fail(`the second run with two siblings exited ${again.status}: ${again.out.trim()}`);
|
|
156
|
+
}
|
|
157
|
+
else {
|
|
158
|
+
console.log(" ok sibling-clone: two siblings, second run still clean");
|
|
159
|
+
}
|
|
160
|
+
}
|
|
161
|
+
// 3 — the repo under test must never appear as a sibling: repos/$MAIN_REPO
|
|
162
|
+
// holds this run's own checkout, and the step now removes what it clones.
|
|
163
|
+
{
|
|
164
|
+
const ws = join(base, "ws-self");
|
|
165
|
+
const own = join(ws, "repos", "byoklab", "tg-gallery");
|
|
166
|
+
mkdirSync(own, { recursive: true });
|
|
167
|
+
writeFileSync(join(own, "package.json"), "{}\n");
|
|
168
|
+
const r = runStep(ws, "byoklab/tg-gallery", "byoklab/tg-gallery", script, bin);
|
|
169
|
+
if (r.status === 0) {
|
|
170
|
+
fail("listing the repo under test as its own sibling was accepted");
|
|
171
|
+
}
|
|
172
|
+
else if (readdirSync(own).length === 0) {
|
|
173
|
+
fail("the step deleted this run's own checkout before refusing");
|
|
174
|
+
}
|
|
175
|
+
else {
|
|
176
|
+
console.log(" ok sibling-clone: the repo under test is refused, its checkout untouched");
|
|
177
|
+
}
|
|
178
|
+
}
|
|
179
|
+
// 4 — an entry that is not owner/name is refused rather than turned into a
|
|
180
|
+
// path. `..` is the one that walks out of the workspace under rm -rf.
|
|
181
|
+
for (const bad of ["byoklab/components/../../..", "/etc", "notapair", "a/b/c"]) {
|
|
182
|
+
const ws = join(base, `ws-bad-${Buffer.from(bad).toString("hex")}`);
|
|
183
|
+
mkdirSync(ws, { recursive: true });
|
|
184
|
+
const r = runStep(ws, bad, "byoklab/tg-gallery", script, bin);
|
|
185
|
+
if (r.status === 0) {
|
|
186
|
+
fail(`sibling_repos entry ${JSON.stringify(bad)} was accepted`);
|
|
187
|
+
}
|
|
188
|
+
else {
|
|
189
|
+
console.log(` ok sibling-clone: refused sibling_repos entry ${JSON.stringify(bad)}`);
|
|
190
|
+
}
|
|
191
|
+
}
|
|
192
|
+
}
|
|
193
|
+
finally {
|
|
194
|
+
rmSync(base, { recursive: true, force: true });
|
|
195
|
+
}
|
|
196
|
+
if (failed > 0) {
|
|
197
|
+
console.error(`sibling-clone: ${failed} check(s) failed`);
|
|
198
|
+
process.exit(1);
|
|
199
|
+
}
|
|
200
|
+
console.log("sibling-clone: all checks passed");
|
|
201
|
+
//# sourceMappingURL=siblingCloneTest.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"siblingCloneTest.js","sourceRoot":"","sources":["../src/siblingCloneTest.ts"],"names":[],"mappings":"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"}
|
package/dist/testRules.js
CHANGED
|
@@ -221,6 +221,83 @@ const EXPECTATIONS = [
|
|
|
221
221
|
hits: 3,
|
|
222
222
|
goodSuffix: "screen-file-styling/good.screen.tsx",
|
|
223
223
|
},
|
|
224
|
+
// ── wave 3: closing the .tsx language gap (is-fc8916f7) ───────────────
|
|
225
|
+
// Five rules were `language: typescript` with no `-tsx` twin, so every
|
|
226
|
+
// React component file was invisible to them. Each now has both arms, and
|
|
227
|
+
// both arms are asserted here — an unexecuted twin is the unexecuted rule
|
|
228
|
+
// the iron rule at the top of this file forbids. `src/twinCoverageTest.ts`
|
|
229
|
+
// is what stops the sixth such rule from being written without a twin.
|
|
230
|
+
//
|
|
231
|
+
// Three of these five (`json-roundtrip`, `kind-if-without-match`,
|
|
232
|
+
// `silent-default-return`) had no fixture at all before this wave — they
|
|
233
|
+
// were canon rules nothing executed. Their .ts arms are asserted here for
|
|
234
|
+
// the first time.
|
|
235
|
+
{
|
|
236
|
+
rule: "non-exhaustive-match-tsx",
|
|
237
|
+
badSuffix: "non-exhaustive-match/bad.tsx",
|
|
238
|
+
hits: 2,
|
|
239
|
+
goodSuffix: "non-exhaustive-match/good.tsx",
|
|
240
|
+
},
|
|
241
|
+
{
|
|
242
|
+
rule: "json-roundtrip",
|
|
243
|
+
badSuffix: "json-roundtrip/bad.ts",
|
|
244
|
+
hits: 2,
|
|
245
|
+
goodSuffix: "json-roundtrip/good.ts",
|
|
246
|
+
},
|
|
247
|
+
{
|
|
248
|
+
rule: "json-roundtrip-tsx",
|
|
249
|
+
badSuffix: "json-roundtrip/bad.tsx",
|
|
250
|
+
hits: 2,
|
|
251
|
+
goodSuffix: "json-roundtrip/good.tsx",
|
|
252
|
+
},
|
|
253
|
+
{
|
|
254
|
+
rule: "kind-if-without-match",
|
|
255
|
+
badSuffix: "kind-if-without-match/bad.ts",
|
|
256
|
+
hits: 4,
|
|
257
|
+
goodSuffix: "kind-if-without-match/good.ts",
|
|
258
|
+
},
|
|
259
|
+
{
|
|
260
|
+
rule: "kind-if-without-match-tsx",
|
|
261
|
+
badSuffix: "kind-if-without-match/bad.tsx",
|
|
262
|
+
hits: 4,
|
|
263
|
+
goodSuffix: "kind-if-without-match/good.tsx",
|
|
264
|
+
},
|
|
265
|
+
{
|
|
266
|
+
rule: "literal-union-in-component-tsx",
|
|
267
|
+
badSuffix: "literal-union-in-component/components/bad.tsx",
|
|
268
|
+
hits: 4,
|
|
269
|
+
goodSuffix: "literal-union-in-component/components/good.tsx",
|
|
270
|
+
},
|
|
271
|
+
{
|
|
272
|
+
rule: "silent-default-return",
|
|
273
|
+
badSuffix: "silent-default-return/bad.ts",
|
|
274
|
+
hits: 8,
|
|
275
|
+
goodSuffix: "silent-default-return/good.ts",
|
|
276
|
+
},
|
|
277
|
+
{
|
|
278
|
+
rule: "silent-default-return-tsx",
|
|
279
|
+
badSuffix: "silent-default-return/bad.tsx",
|
|
280
|
+
hits: 8,
|
|
281
|
+
goodSuffix: "silent-default-return/good.tsx",
|
|
282
|
+
},
|
|
283
|
+
// ── the `as const` widening (is-9e66ec5a) ─────────────────────────────
|
|
284
|
+
// `demo-mode-by-default` guards the rule in fake-data.md and had no fixture
|
|
285
|
+
// at all — nothing executed it. Both arms are asserted now, and the bad
|
|
286
|
+
// fixture carries the four forms: the annotated one the rule always caught,
|
|
287
|
+
// plus `as const`, `as <Type>` and `satisfies <Type>`, which it did not.
|
|
288
|
+
// 4 of the 5 hits per file are the wrapped forms.
|
|
289
|
+
{
|
|
290
|
+
rule: "demo-mode-by-default-ts",
|
|
291
|
+
badSuffix: "demo-mode-by-default/bad.ts",
|
|
292
|
+
hits: 5,
|
|
293
|
+
goodSuffix: "demo-mode-by-default/good.ts",
|
|
294
|
+
},
|
|
295
|
+
{
|
|
296
|
+
rule: "demo-mode-by-default",
|
|
297
|
+
badSuffix: "demo-mode-by-default/bad.tsx",
|
|
298
|
+
hits: 5,
|
|
299
|
+
goodSuffix: "demo-mode-by-default/good.tsx",
|
|
300
|
+
},
|
|
224
301
|
];
|
|
225
302
|
// A file that is deliberately out of scope — same offending code as the bad
|
|
226
303
|
// fixture, sitting where an `ignores:` glob excludes it. Pins the glob: drop
|
package/dist/testRules.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"testRules.js","sourceRoot":"","sources":["../src/testRules.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"testRules.js","sourceRoot":"","sources":["../src/testRules.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|