@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.
@@ -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;
@@ -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;AAsED;;;;;;;;;GASG;AACH,wBAAgB,cAAc,CAAC,IAAI,EAAE,UAAU,EAAE,IAAI,GAAE,cAAmB,GAAG,OAAO,CAoGnF"}
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
- // Bumped to 2 when patternSources was added; v1 caches are invalidated
9
- // (the read path's schemaVersion check returns null, falling through to
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 = 2;
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,
@@ -1 +1 @@
1
- {"version":3,"file":"deny-set.js","sourceRoot":"","sources":["../src/deny-set.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"deny-set.js","sourceRoot":"","sources":["../src/deny-set.ts"],"names":[],"mappings":"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"}
@@ -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, 2);
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":"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"}
@@ -138,7 +138,10 @@ describe("renderMarkers", () => {
138
138
  classExplicit: true,
139
139
  engagements: [],
140
140
  }, { markersDir: dir });
141
- assert.deepEqual(ds.patterns, ["foo-marker"]);
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}`);
@@ -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
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@de-otio/repo-aegis-core",
3
- "version": "0.3.3",
3
+ "version": "0.4.1",
4
4
  "description": "Core library for repo-aegis: engagement registry, deny-set computation, marker scanner",
5
5
  "license": "GPL-3.0-or-later",
6
6
  "author": "Richard Myers",
@@ -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 { computeDenySet, ALWAYS_FILE_STEM } from "./deny-set.js";
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, 2);
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; v1 caches are invalidated
54
- // (the read path's schemaVersion check returns null, falling through to
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 = 2;
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,
@@ -192,7 +192,10 @@ describe("renderMarkers", () => {
192
192
  },
193
193
  { markersDir: dir },
194
194
  );
195
- assert.deepEqual(ds.patterns, ["foo-marker"]);
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}`);