@rightkit/release 0.6.11 → 0.6.13

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.
@@ -1394,8 +1394,11 @@ async function runStages(o, args, root, git, io) {
1394
1394
  };
1395
1395
  const sealedNow = receipt.stages.package?.ok ? (o.sealedFor ?? sealedFor)({ root: appRoot, commit, platform }) : null;
1396
1396
  const sealedIntact = Boolean(sealedNow && sealedNow.id === receipt.stages.package.sealed && sealedNow.digest === receipt.stages.package.manifestSha256);
1397
- // Every deterministic rule and scan must run before compilation, for every door stage.
1398
- const earlyTier = "release";
1397
+ // Every deterministic scan (full class A) runs before any compile, for every door stage. The app rules run at the tier the stage
1398
+ // owes: dev, test and package take the compile-tier rules; qualify and release add the release-only rules (approvals, ratified
1399
+ // rulings, notice digests), which are conditions for publishing, not for compiling (Adrian, 2026-10-30, rightkit#1296; the
1400
+ // 2026-10-28 change to release tier everywhere was never his decision and blocked HeardRight's dev and test builds).
1401
+ const earlyTier = ["qualify", "release"].includes(to) ? "release" : "compile";
1399
1402
  const tierAtLeast = (have, need) => have === "release" || need === "compile";
1400
1403
  for (const stage of stages) {
1401
1404
  if (stage === "check" && receipt.stages.check?.ok && tierAtLeast(receipt.stages.check.ruleTier ?? "compile", earlyTier)) { o.out(`${tag} [check] already passed (${receipt.stages.check.ruleTier ?? "compile"} tier) for this exact input (commit, tree, lockfiles, gate, toolchain)`); continue; }
@@ -2084,15 +2087,12 @@ export async function main(argv, io = {}) {
2084
2087
  }
2085
2088
  const requestedTier = option("--rule-tier") ?? "compile";
2086
2089
  if (!["compile", "release"].includes(requestedTier)) { o.err(`rightkit-gate: check --rule-tier must be compile or release, not ${JSON.stringify(requestedTier)}`); return 2; }
2087
- // Full admission cannot be downgraded by a caller's tier flag. Partial views retain their requested tier.
2090
+ // Full admission runs every deterministic scan; its app rules run at the tier the stage owes (compile unless named): dev, test
2091
+ // and package compile on the compile-tier rules, qualify and release name the release tier (rightkit#1296).
2088
2092
  const fullAdmission = args.includes("--full-a") && !args.includes("--list") && !args.includes("--print-baseline") && !args.includes("--only");
2089
2093
  const stripSnapshot = (list) => { const i = list.indexOf("--snapshot"); return i < 0 ? list : [...list.slice(0, i), ...list.slice(i + 2)]; };
2090
2094
  const appArgs = stripSnapshot(args.slice(1).filter((a) => a !== "--full-a"));
2091
- if (fullAdmission) {
2092
- const tierIndex = appArgs.indexOf("--rule-tier");
2093
- if (tierIndex >= 0) appArgs.splice(tierIndex, 2);
2094
- appArgs.push("--rule-tier", "release");
2095
- }
2095
+ if (fullAdmission && !appArgs.includes("--rule-tier")) appArgs.push("--rule-tier", requestedTier);
2096
2096
  const appCheck = await (o.appCheck ?? (await import("../app-check.mjs")).main)(appArgs, { out: o.out, err: o.err, label: "check", cwd: o.cwd });
2097
2097
  if (args.includes("--list") || args.includes("--print-baseline") || args.includes("--only") || o.classA === false) {
2098
2098
  // A view of the app rules, never a class A verdict: say so, so no caller can take its exit 0 for a full check.
@@ -2107,8 +2107,8 @@ export async function main(argv, io = {}) {
2107
2107
  }
2108
2108
  const repoArg = option("--repo");
2109
2109
  const checkCwd = repoArg ? path.resolve(o.cwd, repoArg) : o.cwd;
2110
- // Admission uses the full tier; a partial diagnostic check may choose either tier.
2111
- const ruleTier = fullAdmission ? "release" : requestedTier;
2110
+ // The app rules' tier is the stage's (rightkit#1296); class A's deterministic scans are the same at either tier.
2111
+ const ruleTier = requestedTier;
2112
2112
  const classA = await main(["--class-a", "--rule-tier", ruleTier, ...(args.includes("--full-a") ? ["--full-a"] : []), ...(args.includes("--worktree") ? ["--worktree"] : ["--commit", snapshotCommit?.commit ?? option("--commit") ?? "HEAD"]), ...(snapshotDir ? ["--snapshot", snapshotDir] : [])], { ...io, cwd: checkCwd });
2113
2113
  // RightKit checking itself: its own rules (line endings, consumer recipes, npm surface, version copies and the version feed, dispatcher
2114
2114
  // pins, consumer locks, generated docs, temp paths: scripts/preflight.mjs) and its exports' import safety are class A for the RightKit repository.
@@ -2941,7 +2941,9 @@ export const callingGatePath = () => fs.realpathSync(fileURLToPath(import.meta.u
2941
2941
  if (invokedDirectly) {
2942
2942
  // Every child this run starts that can reach rustright (scans, unit stages, right-release dev/test, their builds) inherits it.
2943
2943
  process.env.RIGHTKIT_CALLING_GATE = callingGatePath();
2944
- // Production carries the RustRight snapshot carrier (`o.snapshotBroker`, item 7 rows 7.20 to 7.24): the door's seam for a broker host.
2945
- // The per-compile broker (pins, declared inputs, ownership, receipts) is built where the snapshot compile runs. Tests inject their own.
2946
- import("../snapshot-broker.mjs").then(({ PRODUCTION_SNAPSHOT_CARRIER }) => main(process.argv.slice(2), { snapshotBroker: PRODUCTION_SNAPSHOT_CARRIER })).then((code) => process.exit(code), (e) => { console.error(`rightkit-gate: ${e?.stack ?? e}`); process.exit(2); });
2944
+ // Interim (decision 2): production carries no snapshot carrier until every child that reaches Cargo has one (item 7 row 7.24,
2945
+ // right-release dev and test, is not wired). With it wired early, 0.6.12 refused every dev, test and sidecar package build on the
2946
+ // Mac and the Dell (rightkit#1296, HeardRight 2026-10-30); without it they keep the checkout route, as in 0.6.10. Linux takes the
2947
+ // snapshot route regardless (direct, no carrier). Tests inject a carrier. The cutover commit wires PRODUCTION_SNAPSHOT_CARRIER here.
2948
+ Promise.resolve(main(process.argv.slice(2))).then((code) => process.exit(code), (e) => { console.error(`rightkit-gate: ${e?.stack ?? e}`); process.exit(2); });
2947
2949
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@rightkit/release",
3
- "version": "0.6.11",
3
+ "version": "0.6.13",
4
4
  "description": "Portable release CLI/SDK with fail-closed public GitHub Releases and private R2 + RightApps distribution.",
5
5
  "license": "MIT OR Apache-2.0",
6
6
  "type": "module",
@@ -32,7 +32,7 @@
32
32
  "@rightkit/qa": "0.6.2",
33
33
  "@rightkit/qa-chrome": "0.1.12",
34
34
  "@rightkit/react-shell": "0.7.2",
35
- "@rightkit/release": "0.6.11",
35
+ "@rightkit/release": "0.6.13",
36
36
  "@rightkit/settings-ui": "0.7.0",
37
37
  "@rightkit/tauri": "0.3.0",
38
38
  "@rightkit/tauri-shell": "0.1.3",
@@ -378,7 +378,9 @@
378
378
  "0.6.6",
379
379
  "0.6.7",
380
380
  "0.6.8",
381
- "0.6.10"
381
+ "0.6.10",
382
+ "0.6.11",
383
+ "0.6.12"
382
384
  ],
383
385
  "@rightkit/settings-ui": [
384
386
  "0.1.0",
@@ -640,7 +642,7 @@
640
642
  "@rightkit/qa": "0.6.1",
641
643
  "@rightkit/qa-chrome": "0.1.12",
642
644
  "@rightkit/react-shell": "0.7.2",
643
- "@rightkit/release": "0.6.10",
645
+ "@rightkit/release": "0.6.12",
644
646
  "@rightkit/settings-ui": "0.7.0",
645
647
  "@rightkit/shell": "0.1.1",
646
648
  "@rightkit/tauri": "0.3.0",