zyrk 0.5.6 → 0.5.8

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 CHANGED
@@ -395,3 +395,9 @@ Install resolution has a five-minute deadline; each archive extraction has a
395
395
  two-minute deadline. Set `ZYRK_RESOLVE_TIMEOUT_MS` or `ZYRK_EXTRACT_TIMEOUT_MS`
396
396
  to an integer from `1` to `900000` milliseconds to adjust these timeouts.
397
397
  Graph, archive-entry, and byte limits still apply.
398
+
399
+ Platform gates run the complete check on Ubuntu and macOS/Node 24 and a
400
+ Windows CLI/artifact contract suite, including paths with spaces and Unicode.
401
+ Windows shared-store installation remains blocked until ACL isolation is
402
+ implemented and verified. See [compatibility gates](docs/compatibility-gates.md)
403
+ for the exact scope; passing portable-lock fixtures is separate from OS support.
package/VERSION CHANGED
@@ -1 +1 @@
1
- v0.5.6
1
+ v0.5.8
@@ -1 +1 @@
1
- {"version":3,"file":"main.d.ts","sourceRoot":"","sources":["../../src/cli/main.ts"],"names":[],"mappings":"AA2BA,OAAO,EAAe,SAAS,EAAe,MAAM,cAAc,CAAC;AACnE,OAAO,EAAE,SAAS,EAAE,CAAC;AACrB,OAAO,EAAoB,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAExE,OAAO,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAM3C,OAAO,EAAqC,KAAK,UAAU,EAAE,MAAM,YAAY,CAAC;AAEhF,eAAO,MAAM,uBAAuB,IAAI,CAAC;AA2DzC,wBAAgB,QAAQ,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAwBhD;AAED,MAAM,MAAM,SAAS,GAAG;IACtB,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;CAChB,CAAC;AA6EF;;;GAGG;AACH,wBAAgB,QAAQ,CACtB,MAAM,EAAE,UAAU,EAClB,OAAO,EAAE;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,MAAM,CAAC,UAAU,CAAA;CAAE,GACnD,SAAS,CAgDX;AAmBD,MAAM,MAAM,eAAe,GAAG;IAC5B,KAAK,EAAE,KAAK,CAAC;IACb,QAAQ,EAAE,cAAc,CAAC;CAC1B,CAAC;AAEF,MAAM,MAAM,aAAa,GAAG;IAC1B,IAAI,EAAE,SAAS,MAAM,EAAE,CAAC;IACxB,GAAG,EAAE,MAAM,CAAC,UAAU,CAAC;IACvB,MAAM,EAAE;QAAE,KAAK,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAA;KAAE,CAAC;IAC1C,MAAM,EAAE;QAAE,KAAK,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC;QAAC,KAAK,CAAC,EAAE,OAAO,CAAA;KAAE,CAAC;IAC3D,WAAW,CAAC,EAAE,MAAM,MAAM,CAAC;IAC3B,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,MAAM,OAAO,CAAC,eAAe,CAAC,CAAC;CACxC,CAAC;AAEF,gFAAgF;AAChF,wBAAsB,MAAM,CAAC,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,MAAM,CAAC,CA4ZpE"}
1
+ {"version":3,"file":"main.d.ts","sourceRoot":"","sources":["../../src/cli/main.ts"],"names":[],"mappings":"AA2BA,OAAO,EAAe,SAAS,EAAe,MAAM,cAAc,CAAC;AACnE,OAAO,EAAE,SAAS,EAAE,CAAC;AACrB,OAAO,EAAoB,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAExE,OAAO,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAM3C,OAAO,EAAqC,KAAK,UAAU,EAAE,MAAM,YAAY,CAAC;AAEhF,eAAO,MAAM,uBAAuB,IAAI,CAAC;AA2DzC,wBAAgB,QAAQ,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAyBhD;AAED,MAAM,MAAM,SAAS,GAAG;IACtB,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;CAChB,CAAC;AA6EF;;;GAGG;AACH,wBAAgB,QAAQ,CACtB,MAAM,EAAE,UAAU,EAClB,OAAO,EAAE;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,MAAM,CAAC,UAAU,CAAA;CAAE,GACnD,SAAS,CAgDX;AAmBD,MAAM,MAAM,eAAe,GAAG;IAC5B,KAAK,EAAE,KAAK,CAAC;IACb,QAAQ,EAAE,cAAc,CAAC;CAC1B,CAAC;AAEF,MAAM,MAAM,aAAa,GAAG;IAC1B,IAAI,EAAE,SAAS,MAAM,EAAE,CAAC;IACxB,GAAG,EAAE,MAAM,CAAC,UAAU,CAAC;IACvB,MAAM,EAAE;QAAE,KAAK,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAA;KAAE,CAAC;IAC1C,MAAM,EAAE;QAAE,KAAK,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC;QAAC,KAAK,CAAC,EAAE,OAAO,CAAA;KAAE,CAAC;IAC3D,WAAW,CAAC,EAAE,MAAM,MAAM,CAAC;IAC3B,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,MAAM,OAAO,CAAC,eAAe,CAAC,CAAC;CACxC,CAAC;AAEF,gFAAgF;AAChF,wBAAsB,MAAM,CAAC,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,MAAM,CAAC,CA4ZpE"}
package/dist/cli/main.js CHANGED
@@ -97,7 +97,7 @@ export function helpText(version) {
97
97
  }
98
98
  lines.push("", "Registry publishing and account commands (via your npm):");
99
99
  lines.push(...delegatedHelpLines());
100
- lines.push("", "zyrk never installs packages globally and never runs npm to do it.", "Need a global package? Run npm directly: npm install --global <package-spec>");
100
+ lines.push("", "Install timeouts: ZYRK_RESOLVE_TIMEOUT_MS and ZYRK_EXTRACT_TIMEOUT_MS (1..900000 ms).", "zyrk never installs packages globally and never runs npm to do it.", "Need a global package? Run npm directly: npm install --global <package-spec>");
101
101
  return `${lines.join("\n")}\n`;
102
102
  }
103
103
  function ok(stdout, parsed) {
@@ -1 +1 @@
1
- {"version":3,"file":"deploy.d.ts","sourceRoot":"","sources":["../../src/commands/deploy.ts"],"names":[],"mappings":"AAoEA,MAAM,MAAM,oBAAoB,GAAG;IACjC,OAAO,EAAE,QAAQ,GAAG,QAAQ,CAAC;IAC7B,IAAI,EAAE,SAAS,MAAM,EAAE,CAAC;IACxB,GAAG,EAAE,MAAM,CAAC;IACZ,GAAG,EAAE,MAAM,CAAC,UAAU,CAAC;IACvB,MAAM,EAAE;QAAE,KAAK,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAA;KAAE,CAAC;IAC1C,MAAM,EAAE;QAAE,KAAK,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAA;KAAE,CAAC;IAC1C,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB,CAAC;AAwEF,wBAAsB,gBAAgB,CACpC,OAAO,EAAE,oBAAoB,GAC5B,OAAO,CAAC,MAAM,CAAC,CAqZjB"}
1
+ {"version":3,"file":"deploy.d.ts","sourceRoot":"","sources":["../../src/commands/deploy.ts"],"names":[],"mappings":"AAwEA,MAAM,MAAM,oBAAoB,GAAG;IACjC,OAAO,EAAE,QAAQ,GAAG,QAAQ,CAAC;IAC7B,IAAI,EAAE,SAAS,MAAM,EAAE,CAAC;IACxB,GAAG,EAAE,MAAM,CAAC;IACZ,GAAG,EAAE,MAAM,CAAC,UAAU,CAAC;IACvB,MAAM,EAAE;QAAE,KAAK,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAA;KAAE,CAAC;IAC1C,MAAM,EAAE;QAAE,KAAK,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAA;KAAE,CAAC;IAC1C,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB,CAAC;AAwEF,wBAAsB,gBAAgB,CACpC,OAAO,EAAE,oBAAoB,GAC5B,OAAO,CAAC,MAAM,CAAC,CAoajB"}
@@ -1,3 +1,4 @@
1
+ import { selectPlatformGraph, selectWorkspacePlatform, } from "../install/platform.js";
1
2
  import { installedRegistryConfig } from "../install/registry-policy.js";
2
3
  /** Self-contained runtime deployment and explicit local Docker commands. */
3
4
  import { constants } from "node:fs";
@@ -179,7 +180,13 @@ export async function runDeployCommand(options) {
179
180
  const installedKeys = new Set(Array.isArray(state.contexts)
180
181
  ? state.contexts.filter((v) => typeof v === "string")
181
182
  : []);
182
- const installedNodes = resolved.nodes.filter((n) => installedKeys.has(n.key));
183
+ const activeResolved = selectPlatformGraph({
184
+ ...resolved,
185
+ roots: resolved.roots.filter((root) => installedKeys.has(root.target)),
186
+ }, new Set(Object.keys(object(manifest.optionalDependencies)
187
+ ? manifest.optionalDependencies
188
+ : {})));
189
+ const installedNodes = activeResolved.nodes.filter((n) => installedKeys.has(n.key));
183
190
  const graph = createGraphDoc(installedNodes.map((n) => ({ ...n, deps: n.edges })));
184
191
  const directories = privateGraph
185
192
  ? await privateDirectories(project, store, graph, state)
@@ -830,7 +837,7 @@ async function exportWorkspace(options, project, manifest, state, out, parent, f
830
837
  throw error("ZYRK_DEPLOY_ESCAPE", "Deployment output must be outside the managed store.");
831
838
  const barrier = await acquireLock(path.join(store.paths.locksDir, "liveness.lock"), { name: "workspace deployment retention" });
832
839
  try {
833
- const graph = locked.graph, byKey = new Map(graph.nodes.map((n) => [n.key, n]));
840
+ const graph = selectWorkspacePlatform(locked.graph, undefined, true), byKey = new Map(graph.nodes.map((n) => [n.key, n]));
834
841
  const selected = new Set();
835
842
  const visit = (key) => {
836
843
  if (selected.has(key))
@@ -1 +1 @@
1
- {"version":3,"file":"project.d.ts","sourceRoot":"","sources":["../../src/commands/project.ts"],"names":[],"mappings":"AAwDA,MAAM,MAAM,qBAAqB,GAAG;IAClC,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,SAAS,MAAM,EAAE,CAAC;IACxB,GAAG,EAAE,MAAM,CAAC;IACZ,GAAG,EAAE,MAAM,CAAC,UAAU,CAAC;IACvB,MAAM,EAAE;QAAE,KAAK,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAA;KAAE,CAAC;IAC1C,MAAM,EAAE;QAAE,KAAK,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAA;KAAE,CAAC;IAC1C,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB,CAAC;AAiJF,wBAAsB,iBAAiB,CACrC,OAAO,EAAE,qBAAqB,GAC7B,OAAO,CAAC,MAAM,CAAC,CAgRjB"}
1
+ {"version":3,"file":"project.d.ts","sourceRoot":"","sources":["../../src/commands/project.ts"],"names":[],"mappings":"AA4DA,MAAM,MAAM,qBAAqB,GAAG;IAClC,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,SAAS,MAAM,EAAE,CAAC;IACxB,GAAG,EAAE,MAAM,CAAC;IACZ,GAAG,EAAE,MAAM,CAAC,UAAU,CAAC;IACvB,MAAM,EAAE;QAAE,KAAK,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAA;KAAE,CAAC;IAC1C,MAAM,EAAE;QAAE,KAAK,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAA;KAAE,CAAC;IAC1C,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB,CAAC;AA+LF,wBAAsB,iBAAiB,CACrC,OAAO,EAAE,qBAAqB,GAC7B,OAAO,CAAC,MAAM,CAAC,CAgRjB"}
@@ -1,3 +1,4 @@
1
+ import { selectPlatformGraph, selectWorkspacePlatform, } from "../install/platform.js";
1
2
  import { discoverWorkspaces, findWorkspaceRoot, planWorkspaceDependencies, selectWorkspaceImporters, workspaceScriptOrder, } from "../install/workspaces.js";
2
3
  import { readWorkspaceLock } from "../install/workspace-lock.js";
3
4
  /** Project inspection and explicit execution (SPEC 12.2, 18.3.1, D-1). */
@@ -48,6 +49,7 @@ function validateState(raw) {
48
49
  (raw.linker !== undefined &&
49
50
  raw.linker !== "private" &&
50
51
  raw.linker !== "shared") ||
52
+ (raw.omitDev !== undefined && typeof raw.omitDev !== "boolean") ||
51
53
  !Array.isArray(raw.direct) ||
52
54
  raw.direct.some((e) => !object(e) ||
53
55
  typeof e.name !== "string" ||
@@ -67,7 +69,8 @@ async function load(project) {
67
69
  state.lockDigest !== sha512Hex(canonicalJson(locked.doc)))
68
70
  throw fail("ZYRK_LOCK_MISMATCH", "The workspace manifests, authoritative lock and installed generation disagree.");
69
71
  const importer = workspace.importers.find((item) => item.directory === project);
70
- const own = locked.graph.nodes.find((node) => node.kind === "local" && node.importer === importer?.id);
72
+ const activeGraph = selectWorkspacePlatform(locked.graph, undefined, state.omitDev);
73
+ const own = activeGraph.nodes.find((node) => node.kind === "local" && node.importer === importer?.id);
71
74
  if (!own)
72
75
  throw fail("ZYRK_LOCK_MISMATCH", "The selected workspace importer is absent from the authoritative graph.");
73
76
  return {
@@ -77,7 +80,7 @@ async function load(project) {
77
80
  roots: {
78
81
  ".": Object.fromEntries(own.edges.map((edge) => [edge.name, edge.target])),
79
82
  },
80
- nodes: Object.fromEntries(locked.graph.nodes.map((node) => [
83
+ nodes: Object.fromEntries(activeGraph.nodes.map((node) => [
81
84
  node.key,
82
85
  {
83
86
  name: node.name,
@@ -103,7 +106,29 @@ async function load(project) {
103
106
  if (sha512Hex(canonicalJson(doc)) !== state.lockDigest ||
104
107
  doc.zyrk === undefined)
105
108
  throw fail("ZYRK_LOCK_MISMATCH", "The installed generation and package-lock.json disagree.");
106
- return { state, extension: doc.zyrk };
109
+ const graph = selectPlatformGraph({
110
+ ...lockedGraph(doc),
111
+ roots: lockedGraph(doc).roots.filter((root) => state.direct.some((entry) => entry.name === root.name)),
112
+ }, new Set(Object.keys(object(doc.packages?.[""]?.optionalDependencies)
113
+ ? doc.packages[""].optionalDependencies
114
+ : {})));
115
+ return {
116
+ state,
117
+ extension: {
118
+ ...doc.zyrk,
119
+ roots: {
120
+ ".": Object.fromEntries(graph.roots.map((root) => [root.name, root.target])),
121
+ },
122
+ nodes: Object.fromEntries(graph.nodes.map((node) => [
123
+ node.key,
124
+ {
125
+ ...doc.zyrk.nodes[node.key],
126
+ edges: Object.fromEntries(node.edges.map((edge) => [edge.name, edge.target])),
127
+ peers: Object.fromEntries(node.peerBindings.map((peer) => [peer.name, peer.target])),
128
+ },
129
+ ])),
130
+ },
131
+ };
107
132
  }
108
133
  function emit(options, result, human) {
109
134
  options.stdout.write(options.json
@@ -1,5 +1,5 @@
1
1
  import { type RuntimePlatform, type FinalizedGraph } from "../resolve/resolver.ts";
2
2
  import type { WorkspaceGraph } from "./workspace-graph.ts";
3
3
  export declare function selectPlatformGraph(graph: FinalizedGraph, optionalRoots: ReadonlySet<string>, platform?: RuntimePlatform): FinalizedGraph;
4
- export declare function selectWorkspacePlatform(graph: WorkspaceGraph, platform?: RuntimePlatform): WorkspaceGraph;
4
+ export declare function selectWorkspacePlatform(graph: WorkspaceGraph, platform?: RuntimePlatform, omitDev?: boolean): WorkspaceGraph;
5
5
  //# sourceMappingURL=platform.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"platform.d.ts","sourceRoot":"","sources":["../../src/install/platform.ts"],"names":[],"mappings":"AAGA,OAAO,EAEL,KAAK,eAAe,EACpB,KAAK,cAAc,EACpB,MAAM,wBAAwB,CAAC;AAChC,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAuG3D,wBAAgB,mBAAmB,CACjC,KAAK,EAAE,cAAc,EACrB,aAAa,EAAE,WAAW,CAAC,MAAM,CAAC,EAClC,QAAQ,kBAAoB,GAC3B,cAAc,CAqBhB;AACD,wBAAgB,uBAAuB,CACrC,KAAK,EAAE,cAAc,EACrB,QAAQ,kBAAoB,GAC3B,cAAc,CAsBhB"}
1
+ {"version":3,"file":"platform.d.ts","sourceRoot":"","sources":["../../src/install/platform.ts"],"names":[],"mappings":"AAGA,OAAO,EAEL,KAAK,eAAe,EACpB,KAAK,cAAc,EACpB,MAAM,wBAAwB,CAAC;AAChC,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAuG3D,wBAAgB,mBAAmB,CACjC,KAAK,EAAE,cAAc,EACrB,aAAa,EAAE,WAAW,CAAC,MAAM,CAAC,EAClC,QAAQ,kBAAoB,GAC3B,cAAc,CAqBhB;AACD,wBAAgB,uBAAuB,CACrC,KAAK,EAAE,cAAc,EACrB,QAAQ,kBAAoB,EAC5B,OAAO,UAAQ,GACd,cAAc,CA+BhB"}
@@ -78,7 +78,14 @@ export function selectPlatformGraph(graph, optionalRoots, platform = currentPlat
78
78
  })),
79
79
  };
80
80
  }
81
- export function selectWorkspacePlatform(graph, platform = currentPlatform()) {
81
+ export function selectWorkspacePlatform(graph, platform = currentPlatform(), omitDev = false) {
82
+ if (omitDev)
83
+ graph = {
84
+ ...graph,
85
+ nodes: graph.nodes.map((node) => node.kind === "local"
86
+ ? { ...node, edges: node.edges.filter((edge) => edge.kind !== "dev") }
87
+ : node),
88
+ };
82
89
  const { active, viable, omissions } = select(graph.nodes, Object.entries(graph.importers).map(([name, target]) => ({ name, target })), platform);
83
90
  return {
84
91
  ...graph,
@@ -1 +1 @@
1
- {"version":3,"file":"workspace-install.d.ts","sourceRoot":"","sources":["../../src/install/workspace-install.ts"],"names":[],"mappings":"AAeA,OAAO,KAAK,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAuH9D,wBAAsB,uBAAuB,CAC3C,OAAO,EAAE,cAAc,GACtB,OAAO,CAAC,aAAa,CAAC,CAkrBxB"}
1
+ {"version":3,"file":"workspace-install.d.ts","sourceRoot":"","sources":["../../src/install/workspace-install.ts"],"names":[],"mappings":"AAeA,OAAO,KAAK,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAuH9D,wBAAsB,uBAAuB,CAC3C,OAAO,EAAE,cAAc,GACtB,OAAO,CAAC,aAAa,CAAC,CAmrBxB"}
@@ -189,7 +189,7 @@ export async function installWorkspaceProject(options) {
189
189
  : workspaceLockDoc(project, graph, fp), lockText = options.frozen
190
190
  ? await readFile(path.join(root, "package-lock.json"), "utf8")
191
191
  : JSON.stringify(doc, null, 2) + "\n";
192
- graph = selectWorkspacePlatform(graph, options.platform);
192
+ graph = selectWorkspacePlatform(graph, options.platform, options.omitDev);
193
193
  const warnings = graph.omissions.map((o) => `${o.name}: omitted incompatible optional workspace dependency.`);
194
194
  for (const importer of project.importers)
195
195
  for (const stage of ["preinstall", "install", "postinstall"])
@@ -528,6 +528,7 @@ export async function installWorkspaceProject(options) {
528
528
  linker: contexts.size ? "private" : "shared",
529
529
  workspaceRoot: root,
530
530
  importer: importer.id,
531
+ omitDev: options.omitDev === true,
531
532
  storeRoot: options.store.paths.root,
532
533
  instances: registration.instances,
533
534
  activeContexts: registration.contexts,
@@ -1 +1 @@
1
- {"version":3,"file":"workspace-lock.d.ts","sourceRoot":"","sources":["../../src/install/workspace-lock.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AASvD,OAAO,KAAK,EAAE,cAAc,EAAiB,MAAM,sBAAsB,CAAC;AAC1E,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AAGxD,MAAM,MAAM,qBAAqB,GAAG;IAClC,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;CAChB,CAAC;AAGF,wBAAgB,YAAY,CAAC,EAAE,EAAE,OAAO,GAAG,EAAE,IAAI,MAAM,CAqBtD;AACD,wBAAgB,gBAAgB,CAC9B,OAAO,EAAE,gBAAgB,EACzB,KAAK,EAAE,cAAc,EACrB,EAAE,EAAE,qBAAqB,GACxB,UAAU,CA0CZ;AACD,wBAAgB,wBAAwB,CAAC,GAAG,EAAE,OAAO,GAAG,cAAc,CAmTrE;AACD,wBAAsB,iBAAiB,CACrC,IAAI,EAAE,MAAM,EACZ,OAAO,CAAC,EAAE,gBAAgB,EAC1B,cAAc,CAAC,EAAE,MAAM,GAAG,CAAC,CAAC,IAAI,EAAE,MAAM,KAAK,MAAM,CAAC,EACpD,oBAAoB,UAAQ,GAC3B,OAAO,CAAC;IAAE,GAAG,EAAE,UAAU,CAAC;IAAC,KAAK,EAAE,cAAc,CAAA;CAAE,GAAG,IAAI,CAAC,CAmD5D"}
1
+ {"version":3,"file":"workspace-lock.d.ts","sourceRoot":"","sources":["../../src/install/workspace-lock.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AASvD,OAAO,KAAK,EAAE,cAAc,EAAiB,MAAM,sBAAsB,CAAC;AAC1E,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AAGxD,MAAM,MAAM,qBAAqB,GAAG;IAClC,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;CAChB,CAAC;AAGF,wBAAgB,YAAY,CAAC,EAAE,EAAE,OAAO,GAAG,EAAE,IAAI,MAAM,CAqBtD;AACD,wBAAgB,gBAAgB,CAC9B,OAAO,EAAE,gBAAgB,EACzB,KAAK,EAAE,cAAc,EACrB,EAAE,EAAE,qBAAqB,GACxB,UAAU,CA0CZ;AACD,wBAAgB,wBAAwB,CAAC,GAAG,EAAE,OAAO,GAAG,cAAc,CAmTrE;AACD,wBAAsB,iBAAiB,CACrC,IAAI,EAAE,MAAM,EACZ,OAAO,CAAC,EAAE,gBAAgB,EAC1B,cAAc,CAAC,EAAE,MAAM,GAAG,CAAC,CAAC,IAAI,EAAE,MAAM,KAAK,MAAM,CAAC,EACpD,oBAAoB,UAAQ,GAC3B,OAAO,CAAC;IAAE,GAAG,EAAE,UAAU,CAAC;IAAC,KAAK,EAAE,cAAc,CAAA;CAAE,GAAG,IAAI,CAAC,CAwD5D"}
@@ -325,8 +325,13 @@ export async function readWorkspaceLock(root, project, registryOrigin, allowPlat
325
325
  object(doc) &&
326
326
  object(doc.zyrk) &&
327
327
  doc.zyrk.version === 2 &&
328
- doc.zyrk.platformPolicy === undefined)
328
+ doc.zyrk.platformPolicy === undefined) {
329
+ const checked = structuredClone(doc);
330
+ checked.zyrk.platformPolicy =
331
+ "portable-optional/1";
332
+ validateWorkspaceLockDoc(checked);
329
333
  return null;
334
+ }
330
335
  const graph = validateWorkspaceLockDoc(doc);
331
336
  if (project) {
332
337
  const expected = new Map(project.importers.map((i) => [i.id, i]));
@@ -713,7 +713,7 @@ function internal(message) {
713
713
  }
714
714
  function budgetError(reason) {
715
715
  return new ZyrkError("ZYRK_RESOLUTION_FAILED", `Cannot resolve dependencies (${reason}).`, {
716
- remedy: "Review the dependency graph or explicitly increase the resolver limits for this operation.",
716
+ remedy: "Review the dependency graph. For a slow registry, set ZYRK_RESOLVE_TIMEOUT_MS to at most 900000 milliseconds before retrying; graph limits remain enforced.",
717
717
  });
718
718
  }
719
719
  class PlatformMismatch extends ZyrkError {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "zyrk",
3
- "version": "0.5.6",
3
+ "version": "0.5.8",
4
4
  "description": "Storage-efficient Node package manager: one verified store per user, shared across projects through links.",
5
5
  "license": "MIT",
6
6
  "type": "module",