@de-otio/repo-aegis-core 0.3.3 → 0.4.1
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/dist/deny-set.d.ts +8 -0
- package/dist/deny-set.d.ts.map +1 -1
- package/dist/deny-set.js +44 -3
- package/dist/deny-set.js.map +1 -1
- package/dist/deny-set.test.js +86 -2
- package/dist/deny-set.test.js.map +1 -1
- package/dist/render.test.js +4 -1
- package/dist/render.test.js.map +1 -1
- package/package.json +1 -1
- package/src/deny-set.test.ts +103 -2
- package/src/deny-set.ts +45 -3
- package/src/render.test.ts +4 -1
package/dist/deny-set.d.ts
CHANGED
|
@@ -1,5 +1,13 @@
|
|
|
1
1
|
import type { RepoConfig } from "./repo.js";
|
|
2
2
|
export declare const ALWAYS_FILE_STEM = "_always";
|
|
3
|
+
/**
|
|
4
|
+
* Minimum engagement-identifier length for the auto-block self-marker (see
|
|
5
|
+
* computeDenySet). Identifiers shorter than this are NOT auto-added as patterns,
|
|
6
|
+
* because a 2–3 character literal (e.g. `qa`, `ci`, `api`) matched
|
|
7
|
+
* case-insensitively as a substring would flood unrelated content with false
|
|
8
|
+
* positives. Such engagements should carry explicit markers instead.
|
|
9
|
+
*/
|
|
10
|
+
export declare const MIN_AUTO_BLOCK_IDENTIFIER_LENGTH = 4;
|
|
3
11
|
export interface DenySetFile {
|
|
4
12
|
stem: string;
|
|
5
13
|
path: string;
|
package/dist/deny-set.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"deny-set.d.ts","sourceRoot":"","sources":["../src/deny-set.ts"],"names":[],"mappings":"AAgBA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AAE5C,eAAO,MAAM,gBAAgB,YAAY,CAAC;AAE1C,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,OAAO;IACtB,KAAK,EAAE,WAAW,EAAE,CAAC;IACrB,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB;;;;;;;;;OASG;IACH,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC;IAC1B,aAAa,EAAE,MAAM,CAAC;IACtB,QAAQ,EAAE,MAAM,EAAE,CAAC;CACpB;AAED,MAAM,WAAW,cAAc;IAC7B,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB;;;OAGG;IACH,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAC3B;
|
|
1
|
+
{"version":3,"file":"deny-set.d.ts","sourceRoot":"","sources":["../src/deny-set.ts"],"names":[],"mappings":"AAgBA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AAE5C,eAAO,MAAM,gBAAgB,YAAY,CAAC;AAE1C;;;;;;GAMG;AACH,eAAO,MAAM,gCAAgC,IAAI,CAAC;AAOlD,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,OAAO;IACtB,KAAK,EAAE,WAAW,EAAE,CAAC;IACrB,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB;;;;;;;;;OASG;IACH,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC;IAC1B,aAAa,EAAE,MAAM,CAAC;IACtB,QAAQ,EAAE,MAAM,EAAE,CAAC;CACpB;AAED,MAAM,WAAW,cAAc;IAC7B,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB;;;OAGG;IACH,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAC3B;AAwED;;;;;;;;;GASG;AACH,wBAAgB,cAAc,CAAC,IAAI,EAAE,UAAU,EAAE,IAAI,GAAE,cAAmB,GAAG,OAAO,CA8HnF"}
|
package/dist/deny-set.js
CHANGED
|
@@ -5,10 +5,24 @@ import { existsSync, mkdirSync, readFileSync, readdirSync, statSync, writeFileSy
|
|
|
5
5
|
import { dirname, join } from "node:path";
|
|
6
6
|
import { denySetCachePath as defaultDenySetCachePath, markersDir as defaultMarkersDir, } from "./paths.js";
|
|
7
7
|
export const ALWAYS_FILE_STEM = "_always";
|
|
8
|
-
|
|
9
|
-
|
|
8
|
+
/**
|
|
9
|
+
* Minimum engagement-identifier length for the auto-block self-marker (see
|
|
10
|
+
* computeDenySet). Identifiers shorter than this are NOT auto-added as patterns,
|
|
11
|
+
* because a 2–3 character literal (e.g. `qa`, `ci`, `api`) matched
|
|
12
|
+
* case-insensitively as a substring would flood unrelated content with false
|
|
13
|
+
* positives. Such engagements should carry explicit markers instead.
|
|
14
|
+
*/
|
|
15
|
+
export const MIN_AUTO_BLOCK_IDENTIFIER_LENGTH = 4;
|
|
16
|
+
/** Escape a string so it matches literally when used as a regex pattern. */
|
|
17
|
+
function escapeRegexLiteral(s) {
|
|
18
|
+
return s.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
|
|
19
|
+
}
|
|
20
|
+
// Bumped to 2 when patternSources was added; bumped to 3 when engagement
|
|
21
|
+
// identifiers became auto-blocked self-markers (the computed pattern set changed
|
|
22
|
+
// without any marker-file mtime change, so older caches must be invalidated —
|
|
23
|
+
// the read path's schemaVersion check returns null, falling through to
|
|
10
24
|
// recompute).
|
|
11
|
-
const DENY_SET_CACHE_VERSION =
|
|
25
|
+
const DENY_SET_CACHE_VERSION = 3;
|
|
12
26
|
/**
|
|
13
27
|
* Build a fingerprint of the inputs to computeDenySet. Two calls with the
|
|
14
28
|
* same fingerprint produce the same deny set. Includes:
|
|
@@ -140,6 +154,33 @@ export function computeDenySet(repo, opts = {}) {
|
|
|
140
154
|
patternSources.push(f.stem);
|
|
141
155
|
}
|
|
142
156
|
}
|
|
157
|
+
// Auto-block each engagement's own identifier as an always-on self-marker.
|
|
158
|
+
//
|
|
159
|
+
// The patterns above come only from marker-file *contents*. An engagement
|
|
160
|
+
// whose marker file is empty therefore contributes nothing — yet the
|
|
161
|
+
// engagement id is itself operator-chosen and typically customer-derived. It
|
|
162
|
+
// is, in fact, the string most prone to leaking: it appears in this tool's
|
|
163
|
+
// own `status` output and registry, so it readily enters an author's context
|
|
164
|
+
// and gets emitted by reflex. Without this, a zero-marker engagement is
|
|
165
|
+
// "configured but inert" — registered, listed under `blocked:`, protecting
|
|
166
|
+
// nothing.
|
|
167
|
+
//
|
|
168
|
+
// The id is added as an escaped, case-insensitive literal (identical matching
|
|
169
|
+
// to every other marker). For customer-coupled / scratch classes the repo's
|
|
170
|
+
// OWN engagement files are already excluded from `files` (the filter above),
|
|
171
|
+
// so a repo may still mention its own engagement id; only OTHER engagements'
|
|
172
|
+
// ids are blocked. `_always` is a system stem, not an identifier.
|
|
173
|
+
for (const f of files) {
|
|
174
|
+
if (f.stem === ALWAYS_FILE_STEM)
|
|
175
|
+
continue;
|
|
176
|
+
if (f.stem.length < MIN_AUTO_BLOCK_IDENTIFIER_LENGTH)
|
|
177
|
+
continue;
|
|
178
|
+
const literal = escapeRegexLiteral(f.stem);
|
|
179
|
+
if (patterns.includes(literal))
|
|
180
|
+
continue; // already present as an explicit marker
|
|
181
|
+
patterns.push(literal);
|
|
182
|
+
patternSources.push(f.stem);
|
|
183
|
+
}
|
|
143
184
|
const result = {
|
|
144
185
|
files,
|
|
145
186
|
patterns,
|
package/dist/deny-set.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"deny-set.js","sourceRoot":"","sources":["../src/deny-set.ts"],"names":[],"mappings":"AAAA,4CAA4C;AAC5C,qDAAqD;AACrD,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EACL,UAAU,EACV,SAAS,EACT,YAAY,EACZ,WAAW,EACX,QAAQ,EACR,aAAa,GACd,MAAM,SAAS,CAAC;AACjB,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EACL,gBAAgB,IAAI,uBAAuB,EAC3C,UAAU,IAAI,iBAAiB,GAChC,MAAM,YAAY,CAAC;AAGpB,MAAM,CAAC,MAAM,gBAAgB,GAAG,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"deny-set.js","sourceRoot":"","sources":["../src/deny-set.ts"],"names":[],"mappings":"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"}
|
package/dist/deny-set.test.js
CHANGED
|
@@ -5,7 +5,8 @@ import assert from "node:assert/strict";
|
|
|
5
5
|
import { existsSync, mkdtempSync, mkdirSync, readdirSync, readFileSync, writeFileSync, rmSync } from "node:fs";
|
|
6
6
|
import { tmpdir } from "node:os";
|
|
7
7
|
import { join } from "node:path";
|
|
8
|
-
import { computeDenySet, ALWAYS_FILE_STEM } from "./deny-set.js";
|
|
8
|
+
import { computeDenySet, ALWAYS_FILE_STEM, MIN_AUTO_BLOCK_IDENTIFIER_LENGTH, } from "./deny-set.js";
|
|
9
|
+
import { scanText } from "./scan.js";
|
|
9
10
|
let tmp;
|
|
10
11
|
let markersDir;
|
|
11
12
|
function setupMarkers() {
|
|
@@ -99,7 +100,7 @@ describe("computeDenySet", () => {
|
|
|
99
100
|
const ds = computeDenySet(repo, { markersDir, cachePath });
|
|
100
101
|
assert.ok(existsSync(cachePath), "cache file written");
|
|
101
102
|
const cached = JSON.parse(readFileSync(cachePath, "utf8"));
|
|
102
|
-
assert.equal(cached.schemaVersion,
|
|
103
|
+
assert.equal(cached.schemaVersion, 3);
|
|
103
104
|
assert.equal(typeof cached.key, "string");
|
|
104
105
|
assert.equal(cached.key.length, 64, "fingerprint is sha256 hex");
|
|
105
106
|
assert.deepEqual(cached.patterns, ds.patterns);
|
|
@@ -139,6 +140,89 @@ describe("computeDenySet", () => {
|
|
|
139
140
|
assert.equal(ds.patternSources[acmeIdx], "customer-a");
|
|
140
141
|
}
|
|
141
142
|
});
|
|
143
|
+
describe("auto-block engagement identifiers (self-marker)", () => {
|
|
144
|
+
it("blocks each engagement's own id, not just its marker-file contents", () => {
|
|
145
|
+
const ds = computeDenySet(makeRepo("private-strict"), { markersDir, cachePath: null });
|
|
146
|
+
assert.ok(ds.patterns.includes("customer-a"), "engagement id is auto-blocked");
|
|
147
|
+
assert.ok(ds.patterns.includes("customer-b"), "engagement id is auto-blocked");
|
|
148
|
+
// The id pattern is attributed to its own engagement.
|
|
149
|
+
const idx = ds.patterns.indexOf("customer-a");
|
|
150
|
+
assert.equal(ds.patternSources?.[idx], "customer-a");
|
|
151
|
+
});
|
|
152
|
+
it("a ZERO-marker engagement still blocks its own identifier (the close-call fix)", () => {
|
|
153
|
+
// An engagement registered with no markers materialises an empty (header-
|
|
154
|
+
// only) marker file. Before the fix it contributed nothing — so the
|
|
155
|
+
// customer-derived id leaked freely. It must now block its own id.
|
|
156
|
+
writeFileSync(join(markersDir, "zero-marker-customer.txt"), "; no markers populated yet\n");
|
|
157
|
+
try {
|
|
158
|
+
const ds = computeDenySet(makeRepo("private-strict"), { markersDir, cachePath: null });
|
|
159
|
+
assert.ok(ds.patterns.includes("zero-marker-customer"), "zero-marker engagement must still block its identifier");
|
|
160
|
+
// And it actually matches content (case-insensitively), end to end.
|
|
161
|
+
const hits = scanText("see ~/repos/Zero-Marker-Customer/notes.md", ds);
|
|
162
|
+
assert.equal(hits.length, 1, "identifier match fires case-insensitively");
|
|
163
|
+
assert.equal(hits[0]?.engagement, "zero-marker-customer");
|
|
164
|
+
}
|
|
165
|
+
finally {
|
|
166
|
+
rmSync(join(markersDir, "zero-marker-customer.txt"));
|
|
167
|
+
}
|
|
168
|
+
});
|
|
169
|
+
it("does NOT auto-block the _always system stem", () => {
|
|
170
|
+
const ds = computeDenySet(makeRepo("private-strict"), { markersDir, cachePath: null });
|
|
171
|
+
assert.ok(!ds.patterns.includes(ALWAYS_FILE_STEM), "_always is not an identifier");
|
|
172
|
+
});
|
|
173
|
+
it("escapes regex-special characters in the identifier", () => {
|
|
174
|
+
// A stem with regex metacharacters must be matched literally, not as a
|
|
175
|
+
// pattern (e.g. `a.b+c` must not also match `axbcc`).
|
|
176
|
+
writeFileSync(join(markersDir, "a.b+c.txt"), "; empty\n");
|
|
177
|
+
try {
|
|
178
|
+
const ds = computeDenySet(makeRepo("private-strict"), { markersDir, cachePath: null });
|
|
179
|
+
assert.ok(ds.patterns.includes("a\\.b\\+c"), "special chars are escaped");
|
|
180
|
+
assert.equal(scanText("literal a.b+c here", ds).length, 1, "matches the literal");
|
|
181
|
+
assert.equal(scanText("regex axbcc here", ds).length, 0, "does not match as a regex");
|
|
182
|
+
}
|
|
183
|
+
finally {
|
|
184
|
+
rmSync(join(markersDir, "a.b+c.txt"));
|
|
185
|
+
}
|
|
186
|
+
});
|
|
187
|
+
it("skips identifiers shorter than the guard (false-positive safety)", () => {
|
|
188
|
+
assert.ok(MIN_AUTO_BLOCK_IDENTIFIER_LENGTH >= 3);
|
|
189
|
+
writeFileSync(join(markersDir, "qa.txt"), "; empty\n");
|
|
190
|
+
try {
|
|
191
|
+
const ds = computeDenySet(makeRepo("private-strict"), { markersDir, cachePath: null });
|
|
192
|
+
assert.ok(!ds.patterns.includes("qa"), "too-short id is not auto-blocked");
|
|
193
|
+
}
|
|
194
|
+
finally {
|
|
195
|
+
rmSync(join(markersDir, "qa.txt"));
|
|
196
|
+
}
|
|
197
|
+
});
|
|
198
|
+
it("ignores a stale-schema cache so the auto-block takes effect on upgrade", () => {
|
|
199
|
+
// A pre-0.4 cache has the old schemaVersion and patterns WITHOUT the
|
|
200
|
+
// engagement identifiers (and the same fingerprint key, since no marker
|
|
201
|
+
// file changed). computeDenySet must ignore it and recompute, or the fix
|
|
202
|
+
// would be silently inert on machines with a warm cache.
|
|
203
|
+
const cachePath = join(tmp, "cache-stale-schema.json");
|
|
204
|
+
writeFileSync(cachePath, JSON.stringify({
|
|
205
|
+
schemaVersion: 2,
|
|
206
|
+
key: "stale-but-shaped-key",
|
|
207
|
+
files: [],
|
|
208
|
+
patterns: ["acme-corp"],
|
|
209
|
+
patternSources: ["customer-a"],
|
|
210
|
+
combinedRegex: "acme-corp",
|
|
211
|
+
warnings: [],
|
|
212
|
+
}));
|
|
213
|
+
const ds = computeDenySet(makeRepo("private-strict"), { markersDir, cachePath });
|
|
214
|
+
assert.ok(ds.patterns.includes("customer-a"), "stale-schema cache must be ignored; identifier auto-blocked after recompute");
|
|
215
|
+
rmSync(cachePath, { force: true });
|
|
216
|
+
});
|
|
217
|
+
it("customer-coupled: blocks OTHER engagement ids but not the repo's own", () => {
|
|
218
|
+
const ds = computeDenySet(makeRepo("customer-coupled", ["customer-a"]), {
|
|
219
|
+
markersDir,
|
|
220
|
+
cachePath: null,
|
|
221
|
+
});
|
|
222
|
+
assert.ok(!ds.patterns.includes("customer-a"), "own id is not blocked (file excluded)");
|
|
223
|
+
assert.ok(ds.patterns.includes("customer-b"), "other engagement id is blocked");
|
|
224
|
+
});
|
|
225
|
+
});
|
|
142
226
|
it("preserves mid-line ; characters in marker patterns", () => {
|
|
143
227
|
// Regression: legitimate patterns containing `;` (e.g. `db;internal`,
|
|
144
228
|
// `key;value` form codenames) used to be silently truncated at the
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"deny-set.test.js","sourceRoot":"","sources":["../src/deny-set.test.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"deny-set.test.js","sourceRoot":"","sources":["../src/deny-set.test.ts"],"names":[],"mappings":"AAAA,4CAA4C;AAC5C,qDAAqD;AACrD,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,WAAW,CAAC;AACxD,OAAO,MAAM,MAAM,oBAAoB,CAAC;AACxC,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,SAAS,EAAE,WAAW,EAAE,YAAY,EAAY,aAAa,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AACzH,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AACjC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EACL,cAAc,EACd,gBAAgB,EAChB,gCAAgC,GACjC,MAAM,eAAe,CAAC;AACvB,OAAO,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AAGrC,IAAI,GAAW,CAAC;AAChB,IAAI,UAAkB,CAAC;AAEvB,SAAS,YAAY;IACnB,MAAM,CAAC,UAAU,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;IACrD,SAAS,CAAC,UAAU,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAC3C,aAAa,CAAC,IAAI,CAAC,UAAU,EAAE,GAAG,gBAAgB,MAAM,CAAC,EAAE,0BAA0B,CAAC,CAAC;IACvF,aAAa,CAAC,IAAI,CAAC,UAAU,EAAE,gBAAgB,CAAC,EAAE,yBAAyB,CAAC,CAAC;IAC7E,aAAa,CAAC,IAAI,CAAC,UAAU,EAAE,gBAAgB,CAAC,EAAE,yBAAyB,CAAC,CAAC;AAC/E,CAAC;AAED,SAAS,QAAQ,CAAC,GAAc,EAAE,cAAwB,EAAE;IAC1D,OAAO;QACL,GAAG,EAAE,WAAW;QAChB,SAAS,EAAE,IAAI;QACf,KAAK,EAAE,GAAG;QACV,aAAa,EAAE,IAAI;QACnB,WAAW;KACZ,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,GAAG,EAAE;IACV,GAAG,GAAG,WAAW,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,qBAAqB,CAAC,CAAC,CAAC;IACzD,UAAU,GAAG,IAAI,CAAC,GAAG,EAAE,SAAS,CAAC,CAAC;IAClC,YAAY,EAAE,CAAC;AACjB,CAAC,CAAC,CAAC;AAEH,KAAK,CAAC,GAAG,EAAE;IACT,MAAM,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;AAChD,CAAC,CAAC,CAAC;AAEH,QAAQ,CAAC,gBAAgB,EAAE,GAAG,EAAE;IAC9B,EAAE,CAAC,mDAAmD,EAAE,GAAG,EAAE;QAC3D,MAAM,EAAE,GAAG,cAAc,CAAC,QAAQ,CAAC,gBAAgB,CAAC,EAAE,EAAE,UAAU,EAAE,IAAI,CAAC,GAAG,EAAE,aAAa,CAAC,EAAE,CAAC,CAAC;QAChG,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;QACpC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,aAAa,EAAE,EAAE,CAAC,CAAC;IACrC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,4DAA4D,EAAE,GAAG,EAAE;QACpE,MAAM,EAAE,GAAG,cAAc,CAAC,QAAQ,CAAC,iBAAiB,CAAC,EAAE,EAAE,UAAU,EAAE,CAAC,CAAC;QACvE,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;QACjC,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC,CAAC;QAC7C,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC;QAC1C,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,wBAAwB,CAAC,CAAC,CAAC;IAC5D,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,yCAAyC,EAAE,GAAG,EAAE;QACjD,MAAM,EAAE,GAAG,cAAc,CAAC,QAAQ,CAAC,gBAAgB,CAAC,EAAE,EAAE,UAAU,EAAE,CAAC,CAAC;QACtE,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;IACnC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,4CAA4C,EAAE,GAAG,EAAE;QACpD,MAAM,EAAE,GAAG,cAAc,CACvB,QAAQ,CAAC,iBAAiB,EAAE,CAAC,YAAY,CAAC,CAAC,EAC3C,EAAE,UAAU,EAAE,CACf,CAAC;QACF,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;QAClC,uCAAuC;QACvC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;QACjC,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC,CAAC;IAC/C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,6DAA6D,EAAE,GAAG,EAAE;QACrE,MAAM,EAAE,GAAG,cAAc,CACvB,QAAQ,CAAC,kBAAkB,EAAE,CAAC,YAAY,CAAC,CAAC,EAC5C,EAAE,UAAU,EAAE,CACf,CAAC;QACF,MAAM,KAAK,GAAG,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,CAAC;QAC/C,MAAM,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC,gBAAgB,EAAE,YAAY,CAAC,CAAC,CAAC;QAC1D,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC;QAC1C,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,wBAAwB,CAAC,CAAC,CAAC;QAC1D,MAAM,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC,CAAC;IAChD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,wCAAwC,EAAE,GAAG,EAAE;QAChD,MAAM,EAAE,GAAG,cAAc,CACvB,QAAQ,CAAC,kBAAkB,EAAE,CAAC,YAAY,CAAC,CAAC,EAC5C,EAAE,UAAU,EAAE,CACf,CAAC;QACF,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,wBAAwB,CAAC,CAAC,CAAC;IAC5D,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,4DAA4D,EAAE,GAAG,EAAE;QACpE,MAAM,EAAE,GAAG,cAAc,CACvB,QAAQ,CAAC,kBAAkB,EAAE,CAAC,YAAY,EAAE,YAAY,CAAC,CAAC,EAC1D,EAAE,UAAU,EAAE,CACf,CAAC;QACF,MAAM,KAAK,GAAG,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,CAAC;QAC/C,MAAM,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC,gBAAgB,CAAC,CAAC,CAAC;QAC5C,MAAM,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC,CAAC;QAC9C,MAAM,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC;IAC7C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,qFAAqF,EAAE,GAAG,EAAE;QAC7F,MAAM,EAAE,GAAG,cAAc,CAAC,QAAQ,CAAC,kBAAkB,EAAE,EAAE,CAAC,EAAE,EAAE,UAAU,EAAE,CAAC,CAAC;QAC5E,qFAAqF;QACrF,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;IACnC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,2CAA2C,EAAE,GAAG,EAAE;QACnD,MAAM,EAAE,GAAG,cAAc,CACvB,QAAQ,CAAC,SAAS,EAAE,CAAC,YAAY,CAAC,CAAC,EACnC,EAAE,UAAU,EAAE,CACf,CAAC;QACF,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;IACnC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,qDAAqD,EAAE,GAAG,EAAE;QAC7D,aAAa,CACX,IAAI,CAAC,UAAU,EAAE,gBAAgB,CAAC,EAClC,sEAAsE,CACvE,CAAC;QACF,MAAM,EAAE,GAAG,cAAc,CAAC,QAAQ,CAAC,gBAAgB,CAAC,EAAE,EAAE,UAAU,EAAE,CAAC,CAAC;QACtE,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,eAAe,CAAC,CAAC,CAAC;QACjD,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,gBAAgB,CAAC,CAAC,CAAC;QAClD,MAAM,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;QACzD,UAAU;QACV,MAAM,CAAC,IAAI,CAAC,UAAU,EAAE,gBAAgB,CAAC,CAAC,CAAC;IAC7C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,qDAAqD,EAAE,GAAG,EAAE;QAC7D,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,kBAAkB,CAAC,CAAC;QAChD,MAAM,IAAI,GAAG,QAAQ,CAAC,gBAAgB,CAAC,CAAC;QACxC,MAAM,EAAE,GAAG,cAAc,CAAC,IAAI,EAAE,EAAE,UAAU,EAAE,SAAS,EAAE,CAAC,CAAC;QAC3D,MAAM,CAAC,EAAE,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,oBAAoB,CAAC,CAAC;QACvD,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,SAAS,EAAE,MAAM,CAAC,CAMxD,CAAC;QACF,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,aAAa,EAAE,CAAC,CAAC,CAAC;QACtC,MAAM,CAAC,KAAK,CAAC,OAAO,MAAM,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;QAC1C,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,MAAM,EAAE,EAAE,EAAE,2BAA2B,CAAC,CAAC;QACjE,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,QAAQ,EAAE,EAAE,CAAC,QAAQ,CAAC,CAAC;QAC/C,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,aAAa,EAAE,EAAE,CAAC,aAAa,CAAC,CAAC;IACvD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,8DAA8D,EAAE,GAAG,EAAE;QACtE,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,uBAAuB,CAAC,CAAC;QACrD,MAAM,IAAI,GAAG,QAAQ,CAAC,gBAAgB,CAAC,CAAC;QACxC,MAAM,GAAG,GAAG,cAAc,CAAC,IAAI,EAAE,EAAE,UAAU,EAAE,SAAS,EAAE,CAAC,CAAC;QAE5D,0DAA0D;QAC1D,MAAM,QAAQ,GAAG,IAAI,CAAC,UAAU,EAAE,gBAAgB,CAAC,CAAC;QACpD,aAAa,CAAC,QAAQ,EAAE,gCAAgC,CAAC,CAAC;QAE1D,MAAM,GAAG,GAAG,cAAc,CAAC,IAAI,EAAE,EAAE,UAAU,EAAE,SAAS,EAAE,CAAC,CAAC;QAC5D,MAAM,CAAC,YAAY,CAAC,GAAG,CAAC,QAAQ,EAAE,GAAG,CAAC,QAAQ,EAAE,wCAAwC,CAAC,CAAC;QAC1F,MAAM,CAAC,EAAE,CAAC,GAAG,CAAC,QAAQ,CAAC,QAAQ,CAAC,8BAA8B,CAAC,CAAC,CAAC;QAEjE,gCAAgC;QAChC,YAAY,EAAE,CAAC;IACjB,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,kCAAkC,EAAE,GAAG,EAAE;QAC1C,MAAM,IAAI,GAAG,QAAQ,CAAC,gBAAgB,CAAC,CAAC;QACxC,MAAM,YAAY,GAAG,WAAW,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC;QAC9E,cAAc,CAAC,IAAI,EAAE,EAAE,UAAU,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QACtD,MAAM,KAAK,GAAG,WAAW,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC;QACvE,MAAM,CAAC,KAAK,CAAC,KAAK,EAAE,YAAY,EAAE,iCAAiC,CAAC,CAAC;IACvE,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,+CAA+C,EAAE,GAAG,EAAE;QACvD,MAAM,IAAI,GAAG,QAAQ,CAAC,gBAAgB,CAAC,CAAC;QACxC,MAAM,EAAE,GAAG,cAAc,CAAC,IAAI,EAAE,EAAE,UAAU,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QACjE,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,cAAc,EAAE,MAAM,EAAE,EAAE,CAAC,QAAQ,CAAC,MAAM,EAAE,oBAAoB,CAAC,CAAC;QAClF,yEAAyE;QACzE,MAAM,SAAS,GAAG,EAAE,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,KAAK,wBAAwB,CAAC,CAAC;QAC7E,IAAI,SAAS,IAAI,CAAC,EAAE,CAAC;YACnB,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,cAAe,CAAC,SAAS,CAAC,EAAE,SAAS,CAAC,CAAC;QACzD,CAAC;QACD,MAAM,OAAO,GAAG,EAAE,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,KAAK,WAAW,CAAC,CAAC;QAC9D,IAAI,OAAO,IAAI,CAAC,EAAE,CAAC;YACjB,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,cAAe,CAAC,OAAO,CAAC,EAAE,YAAY,CAAC,CAAC;QAC1D,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,iDAAiD,EAAE,GAAG,EAAE;QAC/D,EAAE,CAAC,oEAAoE,EAAE,GAAG,EAAE;YAC5E,MAAM,EAAE,GAAG,cAAc,CAAC,QAAQ,CAAC,gBAAgB,CAAC,EAAE,EAAE,UAAU,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;YACvF,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,YAAY,CAAC,EAAE,+BAA+B,CAAC,CAAC;YAC/E,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,YAAY,CAAC,EAAE,+BAA+B,CAAC,CAAC;YAC/E,sDAAsD;YACtD,MAAM,GAAG,GAAG,EAAE,CAAC,QAAQ,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC;YAC9C,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,cAAc,EAAE,CAAC,GAAG,CAAC,EAAE,YAAY,CAAC,CAAC;QACvD,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,+EAA+E,EAAE,GAAG,EAAE;YACvF,0EAA0E;YAC1E,oEAAoE;YACpE,mEAAmE;YACnE,aAAa,CAAC,IAAI,CAAC,UAAU,EAAE,0BAA0B,CAAC,EAAE,8BAA8B,CAAC,CAAC;YAC5F,IAAI,CAAC;gBACH,MAAM,EAAE,GAAG,cAAc,CAAC,QAAQ,CAAC,gBAAgB,CAAC,EAAE,EAAE,UAAU,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;gBACvF,MAAM,CAAC,EAAE,CACP,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,sBAAsB,CAAC,EAC5C,wDAAwD,CACzD,CAAC;gBACF,oEAAoE;gBACpE,MAAM,IAAI,GAAG,QAAQ,CAAC,2CAA2C,EAAE,EAAE,CAAC,CAAC;gBACvE,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,2CAA2C,CAAC,CAAC;gBAC1E,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,sBAAsB,CAAC,CAAC;YAC5D,CAAC;oBAAS,CAAC;gBACT,MAAM,CAAC,IAAI,CAAC,UAAU,EAAE,0BAA0B,CAAC,CAAC,CAAC;YACvD,CAAC;QACH,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,6CAA6C,EAAE,GAAG,EAAE;YACrD,MAAM,EAAE,GAAG,cAAc,CAAC,QAAQ,CAAC,gBAAgB,CAAC,EAAE,EAAE,UAAU,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;YACvF,MAAM,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,gBAAgB,CAAC,EAAE,8BAA8B,CAAC,CAAC;QACrF,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,oDAAoD,EAAE,GAAG,EAAE;YAC5D,uEAAuE;YACvE,sDAAsD;YACtD,aAAa,CAAC,IAAI,CAAC,UAAU,EAAE,WAAW,CAAC,EAAE,WAAW,CAAC,CAAC;YAC1D,IAAI,CAAC;gBACH,MAAM,EAAE,GAAG,cAAc,CAAC,QAAQ,CAAC,gBAAgB,CAAC,EAAE,EAAE,UAAU,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;gBACvF,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,WAAW,CAAC,EAAE,2BAA2B,CAAC,CAAC;gBAC1E,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,oBAAoB,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,EAAE,qBAAqB,CAAC,CAAC;gBAClF,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,kBAAkB,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,EAAE,2BAA2B,CAAC,CAAC;YACxF,CAAC;oBAAS,CAAC;gBACT,MAAM,CAAC,IAAI,CAAC,UAAU,EAAE,WAAW,CAAC,CAAC,CAAC;YACxC,CAAC;QACH,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,kEAAkE,EAAE,GAAG,EAAE;YAC1E,MAAM,CAAC,EAAE,CAAC,gCAAgC,IAAI,CAAC,CAAC,CAAC;YACjD,aAAa,CAAC,IAAI,CAAC,UAAU,EAAE,QAAQ,CAAC,EAAE,WAAW,CAAC,CAAC;YACvD,IAAI,CAAC;gBACH,MAAM,EAAE,GAAG,cAAc,CAAC,QAAQ,CAAC,gBAAgB,CAAC,EAAE,EAAE,UAAU,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;gBACvF,MAAM,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,kCAAkC,CAAC,CAAC;YAC7E,CAAC;oBAAS,CAAC;gBACT,MAAM,CAAC,IAAI,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC,CAAC;YACrC,CAAC;QACH,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,wEAAwE,EAAE,GAAG,EAAE;YAChF,qEAAqE;YACrE,wEAAwE;YACxE,yEAAyE;YACzE,yDAAyD;YACzD,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,yBAAyB,CAAC,CAAC;YACvD,aAAa,CACX,SAAS,EACT,IAAI,CAAC,SAAS,CAAC;gBACb,aAAa,EAAE,CAAC;gBAChB,GAAG,EAAE,sBAAsB;gBAC3B,KAAK,EAAE,EAAE;gBACT,QAAQ,EAAE,CAAC,WAAW,CAAC;gBACvB,cAAc,EAAE,CAAC,YAAY,CAAC;gBAC9B,aAAa,EAAE,WAAW;gBAC1B,QAAQ,EAAE,EAAE;aACb,CAAC,CACH,CAAC;YACF,MAAM,EAAE,GAAG,cAAc,CAAC,QAAQ,CAAC,gBAAgB,CAAC,EAAE,EAAE,UAAU,EAAE,SAAS,EAAE,CAAC,CAAC;YACjF,MAAM,CAAC,EAAE,CACP,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,YAAY,CAAC,EAClC,6EAA6E,CAC9E,CAAC;YACF,MAAM,CAAC,SAAS,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;QACrC,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,sEAAsE,EAAE,GAAG,EAAE;YAC9E,MAAM,EAAE,GAAG,cAAc,CAAC,QAAQ,CAAC,kBAAkB,EAAE,CAAC,YAAY,CAAC,CAAC,EAAE;gBACtE,UAAU;gBACV,SAAS,EAAE,IAAI;aAChB,CAAC,CAAC;YACH,MAAM,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,YAAY,CAAC,EAAE,uCAAuC,CAAC,CAAC;YACxF,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,YAAY,CAAC,EAAE,gCAAgC,CAAC,CAAC;QAClF,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,oDAAoD,EAAE,GAAG,EAAE;QAC5D,sEAAsE;QACtE,mEAAmE;QACnE,oEAAoE;QACpE,gBAAgB;QAChB,aAAa,CACX,IAAI,CAAC,UAAU,EAAE,gBAAgB,CAAC,EAClC,wDAAwD,CACzD,CAAC;QACF,MAAM,EAAE,GAAG,cAAc,CAAC,QAAQ,CAAC,gBAAgB,CAAC,EAAE,EAAE,UAAU,EAAE,CAAC,CAAC;QACtE,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,aAAa,CAAC,EAAE,8BAA8B,CAAC,CAAC;QAC/E,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,cAAc,CAAC,EAAE,kCAAkC,CAAC,CAAC;QACpF,MAAM,CAAC,EAAE,CACP,CAAC,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,uBAAuB,CAAC,CAAC,EAC3D,+CAA+C,CAChD,CAAC;QACF,MAAM,CAAC,IAAI,CAAC,UAAU,EAAE,gBAAgB,CAAC,CAAC,CAAC;IAC7C,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
|
package/dist/render.test.js
CHANGED
|
@@ -138,7 +138,10 @@ describe("renderMarkers", () => {
|
|
|
138
138
|
classExplicit: true,
|
|
139
139
|
engagements: [],
|
|
140
140
|
}, { markersDir: dir });
|
|
141
|
-
|
|
141
|
+
// "foo-marker" is the file content; "customer-a" is the engagement
|
|
142
|
+
// identifier auto-blocked as a self-marker (see computeDenySet). The header
|
|
143
|
+
// comment lines must NOT appear.
|
|
144
|
+
assert.deepEqual(ds.patterns, ["foo-marker", "customer-a"]);
|
|
142
145
|
// No pattern in the deny set should be a comment line.
|
|
143
146
|
for (const p of ds.patterns) {
|
|
144
147
|
assert.ok(!p.startsWith(";"), `pattern leaked from header: ${p}`);
|
package/dist/render.test.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"render.test.js","sourceRoot":"","sources":["../src/render.test.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"render.test.js","sourceRoot":"","sources":["../src/render.test.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
package/src/deny-set.test.ts
CHANGED
|
@@ -5,7 +5,12 @@ import assert from "node:assert/strict";
|
|
|
5
5
|
import { existsSync, mkdtempSync, mkdirSync, readdirSync, readFileSync, statSync, writeFileSync, rmSync } from "node:fs";
|
|
6
6
|
import { tmpdir } from "node:os";
|
|
7
7
|
import { join } from "node:path";
|
|
8
|
-
import {
|
|
8
|
+
import {
|
|
9
|
+
computeDenySet,
|
|
10
|
+
ALWAYS_FILE_STEM,
|
|
11
|
+
MIN_AUTO_BLOCK_IDENTIFIER_LENGTH,
|
|
12
|
+
} from "./deny-set.js";
|
|
13
|
+
import { scanText } from "./scan.js";
|
|
9
14
|
import type { RepoConfig, RepoClass } from "./repo.js";
|
|
10
15
|
|
|
11
16
|
let tmp: string;
|
|
@@ -140,7 +145,7 @@ describe("computeDenySet", () => {
|
|
|
140
145
|
patterns: string[];
|
|
141
146
|
combinedRegex: string;
|
|
142
147
|
};
|
|
143
|
-
assert.equal(cached.schemaVersion,
|
|
148
|
+
assert.equal(cached.schemaVersion, 3);
|
|
144
149
|
assert.equal(typeof cached.key, "string");
|
|
145
150
|
assert.equal(cached.key.length, 64, "fingerprint is sha256 hex");
|
|
146
151
|
assert.deepEqual(cached.patterns, ds.patterns);
|
|
@@ -187,6 +192,102 @@ describe("computeDenySet", () => {
|
|
|
187
192
|
}
|
|
188
193
|
});
|
|
189
194
|
|
|
195
|
+
describe("auto-block engagement identifiers (self-marker)", () => {
|
|
196
|
+
it("blocks each engagement's own id, not just its marker-file contents", () => {
|
|
197
|
+
const ds = computeDenySet(makeRepo("private-strict"), { markersDir, cachePath: null });
|
|
198
|
+
assert.ok(ds.patterns.includes("customer-a"), "engagement id is auto-blocked");
|
|
199
|
+
assert.ok(ds.patterns.includes("customer-b"), "engagement id is auto-blocked");
|
|
200
|
+
// The id pattern is attributed to its own engagement.
|
|
201
|
+
const idx = ds.patterns.indexOf("customer-a");
|
|
202
|
+
assert.equal(ds.patternSources?.[idx], "customer-a");
|
|
203
|
+
});
|
|
204
|
+
|
|
205
|
+
it("a ZERO-marker engagement still blocks its own identifier (the close-call fix)", () => {
|
|
206
|
+
// An engagement registered with no markers materialises an empty (header-
|
|
207
|
+
// only) marker file. Before the fix it contributed nothing — so the
|
|
208
|
+
// customer-derived id leaked freely. It must now block its own id.
|
|
209
|
+
writeFileSync(join(markersDir, "zero-marker-customer.txt"), "; no markers populated yet\n");
|
|
210
|
+
try {
|
|
211
|
+
const ds = computeDenySet(makeRepo("private-strict"), { markersDir, cachePath: null });
|
|
212
|
+
assert.ok(
|
|
213
|
+
ds.patterns.includes("zero-marker-customer"),
|
|
214
|
+
"zero-marker engagement must still block its identifier",
|
|
215
|
+
);
|
|
216
|
+
// And it actually matches content (case-insensitively), end to end.
|
|
217
|
+
const hits = scanText("see ~/repos/Zero-Marker-Customer/notes.md", ds);
|
|
218
|
+
assert.equal(hits.length, 1, "identifier match fires case-insensitively");
|
|
219
|
+
assert.equal(hits[0]?.engagement, "zero-marker-customer");
|
|
220
|
+
} finally {
|
|
221
|
+
rmSync(join(markersDir, "zero-marker-customer.txt"));
|
|
222
|
+
}
|
|
223
|
+
});
|
|
224
|
+
|
|
225
|
+
it("does NOT auto-block the _always system stem", () => {
|
|
226
|
+
const ds = computeDenySet(makeRepo("private-strict"), { markersDir, cachePath: null });
|
|
227
|
+
assert.ok(!ds.patterns.includes(ALWAYS_FILE_STEM), "_always is not an identifier");
|
|
228
|
+
});
|
|
229
|
+
|
|
230
|
+
it("escapes regex-special characters in the identifier", () => {
|
|
231
|
+
// A stem with regex metacharacters must be matched literally, not as a
|
|
232
|
+
// pattern (e.g. `a.b+c` must not also match `axbcc`).
|
|
233
|
+
writeFileSync(join(markersDir, "a.b+c.txt"), "; empty\n");
|
|
234
|
+
try {
|
|
235
|
+
const ds = computeDenySet(makeRepo("private-strict"), { markersDir, cachePath: null });
|
|
236
|
+
assert.ok(ds.patterns.includes("a\\.b\\+c"), "special chars are escaped");
|
|
237
|
+
assert.equal(scanText("literal a.b+c here", ds).length, 1, "matches the literal");
|
|
238
|
+
assert.equal(scanText("regex axbcc here", ds).length, 0, "does not match as a regex");
|
|
239
|
+
} finally {
|
|
240
|
+
rmSync(join(markersDir, "a.b+c.txt"));
|
|
241
|
+
}
|
|
242
|
+
});
|
|
243
|
+
|
|
244
|
+
it("skips identifiers shorter than the guard (false-positive safety)", () => {
|
|
245
|
+
assert.ok(MIN_AUTO_BLOCK_IDENTIFIER_LENGTH >= 3);
|
|
246
|
+
writeFileSync(join(markersDir, "qa.txt"), "; empty\n");
|
|
247
|
+
try {
|
|
248
|
+
const ds = computeDenySet(makeRepo("private-strict"), { markersDir, cachePath: null });
|
|
249
|
+
assert.ok(!ds.patterns.includes("qa"), "too-short id is not auto-blocked");
|
|
250
|
+
} finally {
|
|
251
|
+
rmSync(join(markersDir, "qa.txt"));
|
|
252
|
+
}
|
|
253
|
+
});
|
|
254
|
+
|
|
255
|
+
it("ignores a stale-schema cache so the auto-block takes effect on upgrade", () => {
|
|
256
|
+
// A pre-0.4 cache has the old schemaVersion and patterns WITHOUT the
|
|
257
|
+
// engagement identifiers (and the same fingerprint key, since no marker
|
|
258
|
+
// file changed). computeDenySet must ignore it and recompute, or the fix
|
|
259
|
+
// would be silently inert on machines with a warm cache.
|
|
260
|
+
const cachePath = join(tmp, "cache-stale-schema.json");
|
|
261
|
+
writeFileSync(
|
|
262
|
+
cachePath,
|
|
263
|
+
JSON.stringify({
|
|
264
|
+
schemaVersion: 2,
|
|
265
|
+
key: "stale-but-shaped-key",
|
|
266
|
+
files: [],
|
|
267
|
+
patterns: ["acme-corp"],
|
|
268
|
+
patternSources: ["customer-a"],
|
|
269
|
+
combinedRegex: "acme-corp",
|
|
270
|
+
warnings: [],
|
|
271
|
+
}),
|
|
272
|
+
);
|
|
273
|
+
const ds = computeDenySet(makeRepo("private-strict"), { markersDir, cachePath });
|
|
274
|
+
assert.ok(
|
|
275
|
+
ds.patterns.includes("customer-a"),
|
|
276
|
+
"stale-schema cache must be ignored; identifier auto-blocked after recompute",
|
|
277
|
+
);
|
|
278
|
+
rmSync(cachePath, { force: true });
|
|
279
|
+
});
|
|
280
|
+
|
|
281
|
+
it("customer-coupled: blocks OTHER engagement ids but not the repo's own", () => {
|
|
282
|
+
const ds = computeDenySet(makeRepo("customer-coupled", ["customer-a"]), {
|
|
283
|
+
markersDir,
|
|
284
|
+
cachePath: null,
|
|
285
|
+
});
|
|
286
|
+
assert.ok(!ds.patterns.includes("customer-a"), "own id is not blocked (file excluded)");
|
|
287
|
+
assert.ok(ds.patterns.includes("customer-b"), "other engagement id is blocked");
|
|
288
|
+
});
|
|
289
|
+
});
|
|
290
|
+
|
|
190
291
|
it("preserves mid-line ; characters in marker patterns", () => {
|
|
191
292
|
// Regression: legitimate patterns containing `;` (e.g. `db;internal`,
|
|
192
293
|
// `key;value` form codenames) used to be silently truncated at the
|
package/src/deny-set.ts
CHANGED
|
@@ -18,6 +18,20 @@ import type { RepoConfig } from "./repo.js";
|
|
|
18
18
|
|
|
19
19
|
export const ALWAYS_FILE_STEM = "_always";
|
|
20
20
|
|
|
21
|
+
/**
|
|
22
|
+
* Minimum engagement-identifier length for the auto-block self-marker (see
|
|
23
|
+
* computeDenySet). Identifiers shorter than this are NOT auto-added as patterns,
|
|
24
|
+
* because a 2–3 character literal (e.g. `qa`, `ci`, `api`) matched
|
|
25
|
+
* case-insensitively as a substring would flood unrelated content with false
|
|
26
|
+
* positives. Such engagements should carry explicit markers instead.
|
|
27
|
+
*/
|
|
28
|
+
export const MIN_AUTO_BLOCK_IDENTIFIER_LENGTH = 4;
|
|
29
|
+
|
|
30
|
+
/** Escape a string so it matches literally when used as a regex pattern. */
|
|
31
|
+
function escapeRegexLiteral(s: string): string {
|
|
32
|
+
return s.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
|
|
33
|
+
}
|
|
34
|
+
|
|
21
35
|
export interface DenySetFile {
|
|
22
36
|
stem: string;
|
|
23
37
|
path: string;
|
|
@@ -50,10 +64,12 @@ export interface DenySetOptions {
|
|
|
50
64
|
cachePath?: string | null;
|
|
51
65
|
}
|
|
52
66
|
|
|
53
|
-
// Bumped to 2 when patternSources was added;
|
|
54
|
-
//
|
|
67
|
+
// Bumped to 2 when patternSources was added; bumped to 3 when engagement
|
|
68
|
+
// identifiers became auto-blocked self-markers (the computed pattern set changed
|
|
69
|
+
// without any marker-file mtime change, so older caches must be invalidated —
|
|
70
|
+
// the read path's schemaVersion check returns null, falling through to
|
|
55
71
|
// recompute).
|
|
56
|
-
const DENY_SET_CACHE_VERSION =
|
|
72
|
+
const DENY_SET_CACHE_VERSION = 3;
|
|
57
73
|
|
|
58
74
|
interface CacheEntry {
|
|
59
75
|
schemaVersion: number;
|
|
@@ -205,6 +221,32 @@ export function computeDenySet(repo: RepoConfig, opts: DenySetOptions = {}): Den
|
|
|
205
221
|
patternSources.push(f.stem);
|
|
206
222
|
}
|
|
207
223
|
}
|
|
224
|
+
|
|
225
|
+
// Auto-block each engagement's own identifier as an always-on self-marker.
|
|
226
|
+
//
|
|
227
|
+
// The patterns above come only from marker-file *contents*. An engagement
|
|
228
|
+
// whose marker file is empty therefore contributes nothing — yet the
|
|
229
|
+
// engagement id is itself operator-chosen and typically customer-derived. It
|
|
230
|
+
// is, in fact, the string most prone to leaking: it appears in this tool's
|
|
231
|
+
// own `status` output and registry, so it readily enters an author's context
|
|
232
|
+
// and gets emitted by reflex. Without this, a zero-marker engagement is
|
|
233
|
+
// "configured but inert" — registered, listed under `blocked:`, protecting
|
|
234
|
+
// nothing.
|
|
235
|
+
//
|
|
236
|
+
// The id is added as an escaped, case-insensitive literal (identical matching
|
|
237
|
+
// to every other marker). For customer-coupled / scratch classes the repo's
|
|
238
|
+
// OWN engagement files are already excluded from `files` (the filter above),
|
|
239
|
+
// so a repo may still mention its own engagement id; only OTHER engagements'
|
|
240
|
+
// ids are blocked. `_always` is a system stem, not an identifier.
|
|
241
|
+
for (const f of files) {
|
|
242
|
+
if (f.stem === ALWAYS_FILE_STEM) continue;
|
|
243
|
+
if (f.stem.length < MIN_AUTO_BLOCK_IDENTIFIER_LENGTH) continue;
|
|
244
|
+
const literal = escapeRegexLiteral(f.stem);
|
|
245
|
+
if (patterns.includes(literal)) continue; // already present as an explicit marker
|
|
246
|
+
patterns.push(literal);
|
|
247
|
+
patternSources.push(f.stem);
|
|
248
|
+
}
|
|
249
|
+
|
|
208
250
|
const result: DenySet = {
|
|
209
251
|
files,
|
|
210
252
|
patterns,
|
package/src/render.test.ts
CHANGED
|
@@ -192,7 +192,10 @@ describe("renderMarkers", () => {
|
|
|
192
192
|
},
|
|
193
193
|
{ markersDir: dir },
|
|
194
194
|
);
|
|
195
|
-
|
|
195
|
+
// "foo-marker" is the file content; "customer-a" is the engagement
|
|
196
|
+
// identifier auto-blocked as a self-marker (see computeDenySet). The header
|
|
197
|
+
// comment lines must NOT appear.
|
|
198
|
+
assert.deepEqual(ds.patterns, ["foo-marker", "customer-a"]);
|
|
196
199
|
// No pattern in the deny set should be a comment line.
|
|
197
200
|
for (const p of ds.patterns) {
|
|
198
201
|
assert.ok(!p.startsWith(";"), `pattern leaked from header: ${p}`);
|