bareloop 0.26.0 → 0.28.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.
@@ -13,6 +13,8 @@ export function globToPrefix(scope: string): string;
13
13
  * resolve to a PROPER subdirectory of the run directory. Absolute paths and
14
14
  * ".." segments escape it; "." / "./**" cover the whole run directory — where
15
15
  * the close suite lives. Windows spellings ("..\", "C:\") count as escapes.
16
+ * A `.git` or `node_modules` segment anywhere in the prefix is refused too
17
+ * (F178/F177, see {@link FORBIDDEN_SCOPE_SEGMENTS}).
16
18
  * Exported for the job validator: the operator's outer fence obeys the SAME
17
19
  * law through the same code — two containment transforms would be the F9
18
20
  * red-class one level up.
@@ -205,6 +207,26 @@ export function hasNestedQuantifier(src: string): boolean;
205
207
  * @param {(code: string, path: string, detail?: string) => void} red
206
208
  */
207
209
  export function sweepNestedQuantifiers(root: any, red: (code: string, path: string, detail?: string) => void): void;
210
+ /**
211
+ * Path segments a fence/scope may never contain, checked WHOLE-SEGMENT
212
+ * (`prefix.split('/')`), never substring — a look-alike (`.github`,
213
+ * `.gitignore`, `my.git`, `node_modules_util`) is a DIFFERENT name and stays
214
+ * admitted. hamr's ruling (option B, 2026-09-14, block both): F178 — a
215
+ * signed fence naming `.git` could let a worker write git's own files (refs,
216
+ * the seed, `info/exclude`) and hide those writes from `changedSet`. F177's
217
+ * follow-up — a signed fence naming `node_modules` directly is the same class
218
+ * of gap (an installed/worker-written file inside it is invisible to
219
+ * `changedSet` the same way, and installs are the person's job now, F177).
220
+ * This catches only a fence that NAMES one of these directly; a fence like
221
+ * `packages/api/**` that later reaches a NESTED `node_modules` beneath it is a
222
+ * distinct, only partially closeable gap — see the runtime belt in
223
+ * planrun.js for `node_modules` (`.git` has no such gap: there is exactly one
224
+ * `.git` per repo, always at the workdir root, so its own runtime belt is a
225
+ * single `fs.deny` entry). Both are inexpressible at declaration time, the
226
+ * same law #1 already applies to `..`.
227
+ * @type {readonly string[]}
228
+ */
229
+ export const FORBIDDEN_SCOPE_SEGMENTS: readonly string[];
208
230
  /**
209
231
  * PRD item 27/M2 close-bytes signature, orchestrator-flagged gap
210
232
  * (2026-09-06): a close stage's `cmd` can name an addressable script TWO