@rightkit/release 0.6.20 → 0.6.21
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/bin/darwin/rightkit-swap
CHANGED
|
Binary file
|
package/bin/rightkit-gate.mjs
CHANGED
|
@@ -1608,12 +1608,14 @@ async function runStages(o, args, root, git, io) {
|
|
|
1608
1608
|
// `main --all` compiles. A broker host's stage-sidecar child reaches Cargo through the stage's carrier (carried-cargo.mjs).
|
|
1609
1609
|
// right-release runs in appRoot (nested apps), so the repository-relative config is handed over absolute (Astra, second pass).
|
|
1610
1610
|
// On the snapshot route sidecars are staged ONCE per door run by the ledger bookkeeping (attribution diff, immutable staged entries).
|
|
1611
|
-
|
|
1612
|
-
|
|
1613
|
-
//
|
|
1611
|
+
// rightkit#1331: the declared compile inputs that are the app's web build output are produced in the snapshot before ANY compile reads them,
|
|
1612
|
+
// the sidecar builds included: the broker admits a compile only when every declared input is in the snapshot (HeardRight Mac 2026-11-02:
|
|
1613
|
+
// stage-sidecar's cargo build REJECTED "snapshot admission: tauri-app-next/dist: No such file or directory").
|
|
1614
1614
|
if (ok && ds) ok = await stageWebBuildOnce({ o, ds, root, git, appDir, cli, commonDir, commit, tree, stage, executor });
|
|
1615
|
-
// The Windows package-identity MSIX a Tauri app bundles (its release config's windows.identity), produced in the snapshot on Windows only.
|
|
1615
|
+
// The Windows package-identity MSIX a Tauri app bundles (its release config's windows.identity), produced in the snapshot on Windows only, for the same reason.
|
|
1616
1616
|
if (ok && ds) ok = await stageWindowsIdentityOnce({ o, ds, root, git, appDir, cli, commonDir, commit, tree, stage, executor });
|
|
1617
|
+
if (ok && ds) ok = await stageSidecarsOnce({ o, ds, root, git, configs: sidecarConfigs, appDir, cli, commonDir, commit, tree, stage, executor });
|
|
1618
|
+
else for (const config of ok ? sidecarConfigs : []) if (!await rightRelease(stage, ["stage-sidecar", "--config", path.join(root, config)])) { ok = false; break; }
|
|
1617
1619
|
let compiledDirs = []; let compiledBins = null; let qualifyOwed = [];
|
|
1618
1620
|
const reportOutputs = (dirs, bins = null) => { compiledDirs = [...dirs]; compiledBins = bins; };
|
|
1619
1621
|
if (ok) ok = (await (o.runCompile ?? (() => main(ds ? ["--all", "--commit", commit, "--snapshot", ds.path] : ["--all"], { ...io, cwd: root, readStdin: () => "", ...(ds ? { buildOwnership: ds.own, classAEarlier: true, snapshotLedger: ds.ledger?.entries ?? [], onCompileLedger: (entries) => { ds.compileAdmitted = entries; }, onDirectReceipt: (r) => { directReceipt = r; }, onCompileOutputs: reportOutputs, onQualifyOwed: (list) => { qualifyOwed = list; } } : {}) })))({ reportOutputs })) === 0;
|
|
@@ -1636,7 +1638,11 @@ async function runStages(o, args, root, git, io) {
|
|
|
1636
1638
|
// compile was already passed (a separately invoked `--to package` re-stages after the sync, so it never meets a missing externalBin).
|
|
1637
1639
|
// right-release then takes its identity from the selected commit and the verified snapshot (release-source-identity.mjs, row 7.04),
|
|
1638
1640
|
// never the checkout's HEAD, status or branch; its outputs, state and the sealed directory stay in the checkout's `.right-release`.
|
|
1639
|
-
|
|
1641
|
+
// The declared web build and Windows identity inputs first, as in the compile stage: the sidecar builds are broker-admitted only when every declared input is in the snapshot.
|
|
1642
|
+
ok = true;
|
|
1643
|
+
if (ds) ok = await stageWebBuildOnce({ o, ds, root, git, appDir, cli, commonDir, commit, tree, stage, executor });
|
|
1644
|
+
if (ok && ds) ok = await stageWindowsIdentityOnce({ o, ds, root, git, appDir, cli, commonDir, commit, tree, stage, executor });
|
|
1645
|
+
if (ok && ds) ok = await stageSidecarsOnce({ o, ds, root, git, configs: sidecarConfigsOf(), appDir, cli, commonDir, commit, tree, stage, executor });
|
|
1640
1646
|
// Source QA (right-release qa --stage source) exists for mac and win only; a mobile package is the signed build alone.
|
|
1641
1647
|
// Row 7.04c (R-T1, 7.09): the snapshot holds no Cargo target. On a direct host the checkout's output directory is resolved here, in the primary
|
|
1642
1648
|
// checkout, and handed to right-release absolute: it binds every manifest's target for this stage, and the sealed manifest must record it back
|
|
@@ -2868,6 +2874,11 @@ async function runDevTest(o, args, root, git, io, to, appRoot, appDir) {
|
|
|
2868
2874
|
// app's own prepare step may stage them too; the ledger's attribution check, not an environment marker, is what keeps that single and exact.
|
|
2869
2875
|
if (ds) {
|
|
2870
2876
|
const sidecarConfigs = committedSidecarConfigs({ o, git, commit, appDir, base: ds.path });
|
|
2877
|
+
// The declared web build and Windows identity inputs first: the sidecar builds are broker-admitted only when every declared input is in the snapshot.
|
|
2878
|
+
const rr = fileURLToPath(new URL("../cli/right-release.mjs", import.meta.url));
|
|
2879
|
+
if (!(await stageWebBuildOnce({ o, ds, root, git, appDir, cli: rr, commonDir, commit, tree, stage: to, executor, tag })) || !(await stageWindowsIdentityOnce({ o, ds, root, git, appDir, cli: rr, commonDir, commit, tree, stage: to, executor, tag }))) {
|
|
2880
|
+
o.err(`${tag} --to ${to} stopped: the declared compile inputs could not be produced; nothing compiled`); return 1;
|
|
2881
|
+
}
|
|
2871
2882
|
const staged = await stageSidecarsOnce({ o, ds, root, git, configs: sidecarConfigs, appDir, cli: fileURLToPath(new URL("../cli/right-release.mjs", import.meta.url)), commonDir, commit, tree, stage: to, executor, tag });
|
|
2872
2883
|
if (!staged) { o.err(`${tag} --to ${to} stopped: the declared sidecars could not be staged; nothing compiled`); return 1; }
|
|
2873
2884
|
}
|
package/deterministic-scans.mjs
CHANGED
|
@@ -1348,7 +1348,9 @@ export function planScans({
|
|
|
1348
1348
|
// A package that depends on another workspace package is therefore checked through a generated project that maps each sibling's
|
|
1349
1349
|
// exported entry points to its committed sources (TSC_PROJECT, built by the runner); every other package keeps its own tsconfig.
|
|
1350
1350
|
// `--noEmit` stays on the command line as well as in the project: the class A launch guard judges a tsc launch by its argv alone.
|
|
1351
|
-
|
|
1351
|
+
// Every workspace package is a possible sibling, whatever subset this plan checks (a publication plans only its units, and their
|
|
1352
|
+
// siblings' sources must still be mapped: publish scans of @rightkit/workspace-ui could not resolve @rightkit/mail-ui/*).
|
|
1353
|
+
const workspaceDirs = [...new Set([...(npmMap ? [...npmMap.values()].map((u) => u.dir) : []), ...listDir(path.join(liveRoot, "packages")).map((n) => `packages/${n}`)])].sort();
|
|
1352
1354
|
const manifestOf = (dir) => { try { return JSON.parse(readFile(path.join(liveRoot, dir, "package.json")).replace(/^/, "")); } catch { return null; } };
|
|
1353
1355
|
const workspaceNames = new Map(workspaceDirs.map((d) => [manifestOf(d)?.name, d]).filter(([n]) => typeof n === "string"));
|
|
1354
1356
|
const usesWorkspaceSibling = (dir) => {
|
|
@@ -2596,7 +2598,9 @@ export async function runScans(plan, options = {}) {
|
|
|
2596
2598
|
// generated outside the checked tree and removed after the run, so the check reads nothing a commit lacks and writes nothing.
|
|
2597
2599
|
let tscProject = null;
|
|
2598
2600
|
if (args.includes(TSC_PROJECT)) {
|
|
2599
|
-
|
|
2601
|
+
// The siblings are mapped in the same tree tsc runs in (a publication scans a content checkout and a live checkout of
|
|
2602
|
+
// one verified commit; mixing them puts the package outside the project's rootDir, TS6059).
|
|
2603
|
+
try { tscProject = writeTscProject({ contentRoot: rootDir(s.root), packageDir: path.join(rootDir(s.root), s.cwd ?? ""), workspace: s.tscWorkspace ?? [] }); }
|
|
2600
2604
|
catch (e) { advisory?.cleanup?.(); return { ...row, status: "fail", code: "TSC_PROJECT", detail: `${s.id}: the check project could not be built from the committed workspace: ${e.message}` }; }
|
|
2601
2605
|
args = args.map((a) => (a === TSC_PROJECT ? tscProject.file : a));
|
|
2602
2606
|
}
|
package/package.json
CHANGED
package/rightkit-versions.json
CHANGED
|
@@ -49,7 +49,7 @@
|
|
|
49
49
|
"@rightkit/qa": "0.6.2",
|
|
50
50
|
"@rightkit/qa-chrome": "0.1.12",
|
|
51
51
|
"@rightkit/react-shell": "0.7.2",
|
|
52
|
-
"@rightkit/release": "0.6.
|
|
52
|
+
"@rightkit/release": "0.6.21",
|
|
53
53
|
"@rightkit/settings-ui": "0.7.0",
|
|
54
54
|
"@rightkit/social-ui": "0.1.0",
|
|
55
55
|
"@rightkit/system-ui": "0.1.0",
|
package/snapshot-broker.mjs
CHANGED
|
@@ -424,6 +424,13 @@ function carryBrokerCargoOnce({ words, cwd, env, section, workspace, checkoutWor
|
|
|
424
424
|
const seen = operationOutcomeInOutput(`${out.stdout}\n${out.stderr}`) ?? (r.error?.code === "ETIMEDOUT" ? { code: "operation-deadline", deadlineMs: null, requestId: ref?.requestId ?? null, cancelConfirmed: null, terminalState: null, guard: true } : null);
|
|
425
425
|
if (seen) outcome = { status: "unverified", code: seen.code, message: seen.code === "operation-deadline" ? `the operation deadline${seen.deadlineMs ? ` of ${seen.deadlineMs} ms` : ""} passed${seen.guard ? " and the client was stopped by the gate's outer guard" : ""}; request ${seen.requestId ?? ref?.requestId ?? "unknown"}: cancelConfirmed: ${seen.cancelConfirmed ?? "unknown"}, terminal state: ${seen.terminalState ?? "not observed"}; the job is neither abandoned nor resubmitted and ownership stays UNKNOWN until every sub-handle is REAPED` : seen.code === "broker-busy" ? "every broker connection was busy (RK_BROKER_BUSY: a wait, not an outage); nothing was admitted" : "the broker was unavailable (RK_BROKER_UNAVAILABLE)", ...(ref ? { requestId: ref.requestId, workspace: ref.workspace } : {}) };
|
|
426
426
|
}
|
|
427
|
+
// The client's own account of a call that never got a request reference (it refused the carrier, or the broker refused the request before
|
|
428
|
+
// accepting it): its `rustright: <reason>` lines, which capture mode would otherwise drop (HeardRight Mac package 2026-11-02: exit 125 with
|
|
429
|
+
// no reason in the gate log). A bare `rustright: request <id>` line is not a reason.
|
|
430
|
+
if (outcome.status === "unverified" && capture && ref === null) {
|
|
431
|
+
const said = out.stderr.split(/\r?\n/).map((line) => line.trim()).filter((line) => /^rustright(?:[: ]|-)/.test(line) && !/^rustright: request [0-9a-f-]+$/.test(line));
|
|
432
|
+
if (said.length) outcome = { ...outcome, message: `${outcome.message}; the RustRight client said (exit ${r.status ?? "none"}): ${said.slice(-3).join(" | ").slice(0, 600)}` };
|
|
433
|
+
}
|
|
427
434
|
if (outcome.status === "unverified" && outcome.code === "operation-deadline") {
|
|
428
435
|
const settled = reconcileAfterCancel({ section, callHandle: made.carrier.ownership.handle, childEnv });
|
|
429
436
|
outcome = { ...outcome, message: `${outcome.message}; ${settled.note}`, reaped: settled.reaped, subHandle: settled.subHandle };
|
package/snapshot-check.mjs
CHANGED
|
@@ -305,7 +305,10 @@ export function installSnapshotDependencies({ checkout, snapshot, commit, tree,
|
|
|
305
305
|
const ms = now() - started;
|
|
306
306
|
if (failed(r) || /No projects matched the filters/.test(`${r?.stdout ?? ""}\n${r?.stderr ?? ""}`)) {
|
|
307
307
|
const out = `${r?.stdout ?? ""}\n${r?.stderr ?? ""}`;
|
|
308
|
-
|
|
308
|
+
// pnpm 12 prints the code on its own line and wraps the tarball URL ("from https://\n registry.npmjs.org/..."): the URL is rejoined first,
|
|
309
|
+
// and the code and its URL may be a few lines apart (Dell, 2026-11-02: the specific message never fired; only progress lines showed).
|
|
310
|
+
const joined = out.replace(/(https?:\/\/)\s+/g, "$1");
|
|
311
|
+
const miss = /ERR_PNPM_NO_OFFLINE_TARBALL[\s\S]{0,600}?(https?:\/\/\S+?\/-\/(\S+?)\.tgz)/.exec(joined);
|
|
309
312
|
const message = miss
|
|
310
313
|
? `root ${root}: ${miss[2]} is missing from the store ${storeDir} (offline install, no network fallback); install the checkout's dependencies so the store holds it, then run the check again`
|
|
311
314
|
: `root ${root}: offline dependency install failed (store ${storeDir}): ${tail(r) || r?.error?.message || `exit ${r?.status}`}`;
|
|
@@ -74,5 +74,11 @@ async function main() {
|
|
|
74
74
|
}
|
|
75
75
|
|
|
76
76
|
if (import.meta.url === pathToFileURL(process.argv[1] ?? "").href) {
|
|
77
|
-
main().catch((error) => {
|
|
77
|
+
main().catch((error) => {
|
|
78
|
+
console.error(`right-release stage-sidecar: ${error.code ? `[${error.code}] ` : ""}${error.message}`);
|
|
79
|
+
// The failed tool's own last words (a captured rustright or cargo stderr), which the message alone does not carry.
|
|
80
|
+
const tail = String(error.details?.stderr ?? "").trim().split(/\r?\n/).slice(-8).join("\n");
|
|
81
|
+
if (tail) console.error(`right-release stage-sidecar: its stderr ended:\n${tail}`);
|
|
82
|
+
process.exitCode = 1;
|
|
83
|
+
});
|
|
78
84
|
}
|