@xemahq/repo-build-tooling 0.2.0 → 0.2.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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@xemahq/repo-build-tooling",
3
- "version": "0.2.0",
3
+ "version": "0.2.1",
4
4
  "description": "Dev-time build tooling shared by every Xema repository. Ships as plain ESM with zero dependencies so the published artifact is the reviewed source.",
5
5
  "license": "Apache-2.0",
6
6
  "author": "Neuralchowder Inc. <developer@xema.dev> (https://xema.dev)",
@@ -322,8 +322,16 @@ function reExportsReach(entry, target, depth = 6, seen = new Set()) {
322
322
  * @param {string} subpath physical path inside the package, e.g. `dist/agent-composition/lib/x`
323
323
  * @param {string} original the full leaked specifier, for the proof and the error
324
324
  */
325
+ // NUL is the separator in the cache key because it cannot occur in a package
326
+ // name or a subpath, so no two distinct specifiers can collide on a
327
+ // concatenation. It MUST stay spelled as the unicode ESCAPE, never as a raw NUL
328
+ // byte in the source: one raw byte makes every binary-skipping search tool
329
+ // (ugrep, ripgrep, `grep -I`) classify the WHOLE file as binary and skip it
330
+ // silently, and a file no search can read is a file no audit, no review and no
331
+ // boundary check covers. Enforced by the aggregator boundary gate
332
+ // `grep-readable-sources`.
325
333
  function publicSpecifierFor(resolveFrom, pkg, subpath, original) {
326
- const cacheKey = `${pkg}${subpath}`;
334
+ const cacheKey = `${pkg}\u0000${subpath}`;
327
335
  if (specifierCache.has(cacheKey)) return specifierCache.get(cacheKey);
328
336
 
329
337
  let target;