@the-librarian/cli 1.17.0 → 1.17.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.
@@ -39,10 +39,12 @@ export interface EnableOptions extends AutoUpdateOptions {
39
39
  }
40
40
  export interface RunOptions extends AutoUpdateOptions {
41
41
  /**
42
- * Sink for the wrapper's one-line log entries (the timer's journal). Defaults
43
- * to a `process.stderr` writer; tests inject a recorder. Every wrapper outcome
44
- * (skip / update / failure) emits exactly one line here — and the wrapper never
45
- * throws, so the timer's unit always exits 0.
42
+ * Sink for the wrapper's one-line log entries. Defaults to SILENT (spec 074
43
+ * SC8): the runtime prints the wrapper's returned output to stdout, and
44
+ * systemd/cron send stdout and stderr to the same journal/mail — so a stderr
45
+ * default wrote every outcome twice. Tests inject a recorder. Every wrapper
46
+ * outcome (skip / update / failure) emits exactly one line here — and the
47
+ * wrapper never throws, so the timer's unit always exits 0.
46
48
  */
47
49
  log?: ((line: string) => void) | undefined;
48
50
  /** Health-wait bound for the inner `server update` (small in tests). */
@@ -52,17 +54,22 @@ export interface RunOptions extends AutoUpdateOptions {
52
54
  /** Injected current time for the due-check (tests). Default `new Date()`. */
53
55
  now?: Date | undefined;
54
56
  }
55
- /** Inputs to the pure service generator (only the librarian path — NEVER a secret). */
57
+ /** Inputs to the pure service generator (a path, a username, a dir — NEVER a secret). */
56
58
  export interface ServiceUnitInput {
57
59
  /** Absolute path to the `librarian` binary the oneshot runs with `server autoupdate --run`. */
58
60
  librarianPath: string;
61
+ /** The host user the oneshot runs as — the ENABLING user, who owns the deploy (spec 074). */
62
+ user: string;
63
+ /** The deploy dir baked into ExecStart as `--dir`, resolved at enable time (spec 074). */
64
+ deployDir: string;
59
65
  }
60
66
  /**
61
67
  * Generate the oneshot service unit text. PURE + unit-tested. Contains NO secret —
62
68
  * it runs `librarian server autoupdate --run`, which reads the settings from the
63
69
  * running container itself (via `docker exec`), so nothing sensitive is written
64
- * into this world-readable unit file. `Type=oneshot` because the wrapper runs to
65
- * completion each fire (it is the timer's job to schedule, not the service's).
70
+ * into this world-readable unit file (a username and a directory path are not
71
+ * secrets). `Type=oneshot` because the wrapper runs to completion each fire (it
72
+ * is the timer's job to schedule, not the service's).
66
73
  */
67
74
  export declare function generateServiceUnit(input: ServiceUnitInput): string;
68
75
  /**
@@ -77,11 +84,13 @@ export declare function generateTimerUnit(): string;
77
84
  /**
78
85
  * The crontab line for the cron fallback (systemd absent). Fires the wrapper at
79
86
  * minute 17 of every hour (off the top-of-hour to spread load), tagged with
80
- * {@link CRON_MARKER} so it can be found/replaced/removed idempotently. NO secret
81
- * — same reasoning as the systemd unit (the wrapper reads settings from the
82
- * container at run time).
87
+ * {@link CRON_MARKER} so it can be found/replaced/removed idempotently. Cron
88
+ * already fires as the enabling user (their crontab), but the deploy dir is
89
+ * baked explicitly anyway (spec 074 SC2) so a custom `--dir` passed to `enable`
90
+ * is honoured here too. NO secret — same reasoning as the systemd unit (the
91
+ * wrapper reads settings from the container at run time).
83
92
  */
84
- export declare function cronLine(librarianPath: string): string;
93
+ export declare function cronLine(librarianPath: string, deployDir: string): string;
85
94
  /** The one-line macOS-deferred notice (boot persistence + autoupdate are Linux-only for now). */
86
95
  export declare const MACOS_NOTICE: string;
87
96
  /** The configured auto-update state read from the running server. */
@@ -122,9 +131,17 @@ export declare function stampRunInServer(): Promise<boolean>;
122
131
  * server. On Linux with systemd: write the oneshot service + the .timer to
123
132
  * `/etc/systemd/system`, `daemon-reload`, then `enable --now` the TIMER (the
124
133
  * service is oneshot — only the timer is enabled). Idempotent: re-running rewrites
125
- * the SAME unit paths and re-enables, never duplicating. Where systemd is absent:
126
- * install an hourly cron line (idempotent via {@link CRON_MARKER}). On macOS: print
127
- * the deferred notice and skip cleanly.
134
+ * the SAME unit paths and re-enables, never duplicating — which is also the
135
+ * MIGRATION for units installed before spec 074 (they ran as root against root's
136
+ * home and failed every fire). Where systemd is absent: install an hourly cron
137
+ * line (idempotent via {@link CRON_MARKER}). On macOS: print the deferred notice
138
+ * and skip cleanly.
139
+ *
140
+ * SPEC 074: the fire context is resolved and VALIDATED here, at enable time —
141
+ * the unit runs as the enabling user against the deploy dir resolved from THEIR
142
+ * context (or an explicit `--dir`). No deploy-state at that dir is a hard
143
+ * teaching refusal: installing anyway would reproduce the silent hourly failure
144
+ * this spec exists to kill.
128
145
  *
129
146
  * The settings write (enabled=true + cadence) is best-effort: a down server is a
130
147
  * non-fatal hint (the timer is installed; the operator toggles from the dashboard
@@ -156,11 +173,6 @@ export declare function uninstallAutoUpdate(options?: AutoUpdateOptions): Promis
156
173
  * still reports the host-side timer state and exits 0.
157
174
  */
158
175
  export declare function autoUpdateStatus(options?: AutoUpdateOptions): Promise<AutoUpdateResult>;
159
- /** The fixed lock path: `~/.librarian/server/.autoupdate.lock` (no root needed). */
160
- export declare function autoUpdateLockPath(options: {
161
- home?: string | undefined;
162
- dir?: string | undefined;
163
- }): string;
164
176
  /**
165
177
  * The wrapper the timer/cron fires (spec §3 SC4/SC7). Reads the auto-update
166
178
  * settings from the RUNNING server, applies the due-check, and conditionally runs
@@ -1 +1 @@
1
- {"version":3,"file":"autoupdate.d.ts","sourceRoot":"","sources":["../../src/server/autoupdate.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"autoupdate.d.ts","sourceRoot":"","sources":["../../src/server/autoupdate.ts"],"names":[],"mappings":"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"}
@@ -35,14 +35,16 @@
35
35
  // Everything privileged routes through the injectable `docker.ts` runner (the
36
36
  // same seam boot.ts uses), so tests assert the exact systemctl/crontab/docker
37
37
  // argv without a real systemd, cron, or docker.
38
- import { closeSync, mkdirSync, mkdtempSync, openSync, readFileSync, rmSync, statSync, unlinkSync, writeFileSync, writeSync, } from "node:fs";
39
- import { tmpdir } from "node:os";
38
+ import { mkdtempSync, rmSync, writeFileSync } from "node:fs";
39
+ import { tmpdir, userInfo } from "node:os";
40
40
  import path from "node:path";
41
41
  import { librarianDir } from "../paths.js";
42
+ import { readDeployState } from "./deploy-state.js";
42
43
  import { run, which } from "./docker.js";
43
44
  import { redactSecrets } from "./redact.js";
44
45
  import { serverStatus } from "./status.js";
45
46
  import { CONTAINER_NAME } from "./up.js";
47
+ import { UpdateInProgressError } from "./update-lock.js";
46
48
  import { runUpdate, UpdateError } from "./update.js";
47
49
  // Cadence constants are defined LOCALLY here, NOT imported from `@librarian/core`, so
48
50
  // the public `@the-librarian/cli` stays lightweight — `core` pulls in node-llama-cpp /
@@ -93,14 +95,15 @@ export class AutoUpdateError extends Error {
93
95
  * Generate the oneshot service unit text. PURE + unit-tested. Contains NO secret —
94
96
  * it runs `librarian server autoupdate --run`, which reads the settings from the
95
97
  * running container itself (via `docker exec`), so nothing sensitive is written
96
- * into this world-readable unit file. `Type=oneshot` because the wrapper runs to
97
- * completion each fire (it is the timer's job to schedule, not the service's).
98
+ * into this world-readable unit file (a username and a directory path are not
99
+ * secrets). `Type=oneshot` because the wrapper runs to completion each fire (it
100
+ * is the timer's job to schedule, not the service's).
98
101
  */
99
102
  export function generateServiceUnit(input) {
100
- const { librarianPath } = input;
101
- // The path is validated whitespace/metacharacter-free before it reaches here
102
- // (see `assertSafeLibrarianPath` in `enableAutoUpdate`), so a bare (unquoted)
103
- // `ExecStart` token is safe — systemd splits ExecStart on whitespace.
103
+ const { librarianPath, user, deployDir } = input;
104
+ // Every interpolated token is validated whitespace/metacharacter-free before it
105
+ // reaches here (see `assertSafeSchedulerToken` in `enableAutoUpdate`), so bare
106
+ // (unquoted) tokens are safe — systemd splits ExecStart on whitespace.
104
107
  return [
105
108
  "[Unit]",
106
109
  "Description=The Librarian — auto-update check (host-scheduled)",
@@ -109,19 +112,23 @@ export function generateServiceUnit(input) {
109
112
  "",
110
113
  "[Service]",
111
114
  "Type=oneshot",
112
- // ROOT is required (not a smell): `server update` drives the host docker
113
- // daemon (build / stop / rm / run) and writes a 0600 deploy env-file under
114
- // /etc — neither is reachable from an unprivileged unit. We do NOT downgrade
115
- // the user; instead we add the defense-in-depth knob below.
116
- // NoNewPrivileges: even running as root, forbid this oneshot from gaining
117
- // ANY new privileges via setuid/setgid/capabilities on the binaries it execs
118
- // (docker/git) — an auto-executing root unit should grant no more than it needs.
115
+ // NOT root (spec 074): a system unit defaults to root, whose home holds no
116
+ // deploy-state — every fire failed with "No deploy-state found" while
117
+ // `autoupdate status` looked healthy. The ENABLING user is the one context
118
+ // where everything resolves: their `~/.librarian/server` is the deploy dir,
119
+ // they own the git clone (root git would refuse the dubious-ownership
120
+ // check), and they have docker access by construction (they ran `server up`).
121
+ `User=${user}`,
122
+ // NoNewPrivileges: forbid this oneshot from gaining ANY new privileges via
123
+ // setuid/setgid/capabilities on the binaries it execs (docker/git) — an
124
+ // auto-executing unit should grant no more than it needs.
119
125
  "NoNewPrivileges=true",
120
126
  // The wrapper reads the auto-update settings from the running container and,
121
- // if due, performs `server update`. It carries NO secret on this argv: the
122
- // settings + the container's credentials live in the container, reached via
123
- // `docker exec` at run time, not baked into this file.
124
- `ExecStart=${librarianPath} server autoupdate --run`,
127
+ // if due, performs `server update`. The deploy dir is pinned explicitly so
128
+ // the fire never depends on whose home the unit happens to resolve. It
129
+ // carries NO secret on this argv: the settings + the container's credentials
130
+ // live in the container, reached via `docker exec` at run time.
131
+ `ExecStart=${librarianPath} server autoupdate --run --dir ${deployDir}`,
125
132
  "",
126
133
  ].join("\n");
127
134
  }
@@ -155,12 +162,14 @@ export function generateTimerUnit() {
155
162
  /**
156
163
  * The crontab line for the cron fallback (systemd absent). Fires the wrapper at
157
164
  * minute 17 of every hour (off the top-of-hour to spread load), tagged with
158
- * {@link CRON_MARKER} so it can be found/replaced/removed idempotently. NO secret
159
- * — same reasoning as the systemd unit (the wrapper reads settings from the
160
- * container at run time).
165
+ * {@link CRON_MARKER} so it can be found/replaced/removed idempotently. Cron
166
+ * already fires as the enabling user (their crontab), but the deploy dir is
167
+ * baked explicitly anyway (spec 074 SC2) so a custom `--dir` passed to `enable`
168
+ * is honoured here too. NO secret — same reasoning as the systemd unit (the
169
+ * wrapper reads settings from the container at run time).
161
170
  */
162
- export function cronLine(librarianPath) {
163
- return `17 * * * * ${librarianPath} server autoupdate --run ${CRON_MARKER}`;
171
+ export function cronLine(librarianPath, deployDir) {
172
+ return `17 * * * * ${librarianPath} server autoupdate --run --dir ${deployDir} ${CRON_MARKER}`;
164
173
  }
165
174
  // --- librarian-path resolution -------------------------------------------
166
175
  /**
@@ -174,23 +183,22 @@ async function resolveLibrarianPath() {
174
183
  return resolved && resolved.trim().length > 0 ? resolved.trim() : DEFAULT_LIBRARIAN_PATH;
175
184
  }
176
185
  /**
177
- * Reject a `librarian` path that isn't safe to interpolate UNQUOTED into a systemd
178
- * `ExecStart` / a cron line (FIX I1). systemd splits `ExecStart` on whitespace and
179
- * cron passes the line to `/bin/sh`, so a path containing a space (e.g. an npm
186
+ * Reject a token that isn't safe to interpolate UNQUOTED into a systemd
187
+ * `ExecStart` / a cron line / a unit directive (FIX I1, extended by spec 074 to
188
+ * the deploy dir and the username). systemd splits `ExecStart` on whitespace and
189
+ * cron passes the line to `/bin/sh`, so a value containing a space (e.g. an npm
180
190
  * prefix under `/home/jane doe/`) or a shell metacharacter would silently break
181
- * the timer — or worse, inject. Rather than wrap quoting rules around two different
182
- * grammars, we REJECT at `enable` with a teaching error (the cleanest fix): the
183
- * resolved binary path must contain none of these characters. The operator then
184
- * symlinks/installs `librarian` to a clean path and re-runs.
191
+ * the timer — or worse, inject (a newline in a value could even smuggle a unit
192
+ * directive). Rather than wrap quoting rules around two different grammars, we
193
+ * REJECT at `enable` with a teaching error: the value must contain none of these
194
+ * characters. `remedy` tells the operator how to get a clean value.
185
195
  */
186
- function assertSafeLibrarianPath(librarianPath) {
196
+ function assertSafeSchedulerToken(value, label, remedy) {
187
197
  // Whitespace OR any shell/systemd-significant metacharacter is rejected.
188
- if (/\s/.test(librarianPath) || /["'`$\\;&|<>(){}*?!#~]/.test(librarianPath)) {
189
- throw new AutoUpdateError(`The resolved \`librarian\` path is not safe to schedule unquoted:\n ${librarianPath}\n\n` +
198
+ if (/\s/.test(value) || /["'`$\\;&|<>(){}*?!#~]/.test(value)) {
199
+ throw new AutoUpdateError(`The resolved ${label} is not safe to schedule unquoted:\n ${value}\n\n` +
190
200
  "It contains whitespace or a shell/systemd metacharacter, which would break the " +
191
- "systemd timer's ExecStart (or the cron line). Install or symlink `librarian` to a " +
192
- "path with no spaces or special characters (e.g. `/usr/local/bin/librarian`) and " +
193
- "re-run `librarian server autoupdate enable`.");
201
+ `systemd timer's ExecStart (or the cron line). ${remedy}`);
194
202
  }
195
203
  }
196
204
  // --- platform helpers ----------------------------------------------------
@@ -334,9 +342,17 @@ function failIfNonZero(cmd, args, result) {
334
342
  * server. On Linux with systemd: write the oneshot service + the .timer to
335
343
  * `/etc/systemd/system`, `daemon-reload`, then `enable --now` the TIMER (the
336
344
  * service is oneshot — only the timer is enabled). Idempotent: re-running rewrites
337
- * the SAME unit paths and re-enables, never duplicating. Where systemd is absent:
338
- * install an hourly cron line (idempotent via {@link CRON_MARKER}). On macOS: print
339
- * the deferred notice and skip cleanly.
345
+ * the SAME unit paths and re-enables, never duplicating — which is also the
346
+ * MIGRATION for units installed before spec 074 (they ran as root against root's
347
+ * home and failed every fire). Where systemd is absent: install an hourly cron
348
+ * line (idempotent via {@link CRON_MARKER}). On macOS: print the deferred notice
349
+ * and skip cleanly.
350
+ *
351
+ * SPEC 074: the fire context is resolved and VALIDATED here, at enable time —
352
+ * the unit runs as the enabling user against the deploy dir resolved from THEIR
353
+ * context (or an explicit `--dir`). No deploy-state at that dir is a hard
354
+ * teaching refusal: installing anyway would reproduce the silent hourly failure
355
+ * this spec exists to kill.
340
356
  *
341
357
  * The settings write (enabled=true + cadence) is best-effort: a down server is a
342
358
  * non-fatal hint (the timer is installed; the operator toggles from the dashboard
@@ -351,22 +367,44 @@ export async function enableAutoUpdate(options = {}) {
351
367
  // error, not a half-installed timer). Default daily.
352
368
  const cadence = resolveCadence(options.cadence);
353
369
  const librarianPath = await resolveLibrarianPath();
354
- // Reject a path that isn't safe to interpolate UNQUOTED into the unit/cron line
355
- // BEFORE touching the host (a bad path is a teaching error, not a broken timer).
356
- assertSafeLibrarianPath(librarianPath);
370
+ // Reject any value that isn't safe to interpolate UNQUOTED into the unit/cron
371
+ // line BEFORE touching the host (a bad value is a teaching error, not a broken
372
+ // timer): the binary path, the deploy dir, and the username all ride unquoted.
373
+ assertSafeSchedulerToken(librarianPath, "`librarian` path", "Install or symlink `librarian` to a path with no spaces or special characters " +
374
+ "(e.g. `/usr/local/bin/librarian`) and re-run `librarian server autoupdate enable`.");
375
+ const deployDir = options.dir ?? path.join(librarianDir(options.home), "server");
376
+ assertSafeSchedulerToken(deployDir, "deploy dir", "Move the deploy dir to a path with no spaces or special characters and re-run " +
377
+ "`librarian server autoupdate enable --dir <path>`.");
378
+ const user = userInfo().username;
379
+ assertSafeSchedulerToken(user, "username", "Run `librarian server autoupdate enable` as a user whose name has no special characters.");
380
+ // SPEC 074 SC3 — the hard gate. A timer installed against a dir with no
381
+ // deploy-state fails silently on every fire (fail-soft by design, root-only
382
+ // journal); refuse NOW, loudly, while a human is watching.
383
+ if (!readDeployState(deployDir)) {
384
+ const sudoUser = process.env.SUDO_USER;
385
+ throw new AutoUpdateError(`No deploy-state found at ${deployDir} — the auto-update timer must run as the user ` +
386
+ "who ran `librarian server up` (it reads that user's deploy dir and git clone, with " +
387
+ "their docker access).\n" +
388
+ "Re-run `librarian server autoupdate enable` as that user" +
389
+ (sudoUser
390
+ ? ` — you appear to be under sudo, so likely as \`${sudoUser}\` without the leading sudo ` +
391
+ "(the command sudos where it needs to)"
392
+ : "") +
393
+ " — or pass `--dir <path>` to point at the deploy dir.");
394
+ }
357
395
  const lines = [];
358
396
  if (await hasSystemd()) {
359
- await installUnit(AUTOUPDATE_SERVICE_NAME, servicePath(), generateServiceUnit({ librarianPath }));
397
+ await installUnit(AUTOUPDATE_SERVICE_NAME, servicePath(), generateServiceUnit({ librarianPath, user, deployDir }));
360
398
  await installUnit(AUTOUPDATE_TIMER_NAME, timerPath(), generateTimerUnit());
361
399
  // daemon-reload BEFORE enable --now so systemd sees the (possibly rewritten)
362
400
  // units. Only the TIMER is enabled (the service is oneshot, fired by the timer).
363
401
  await sudoSystemctl(["daemon-reload"]);
364
402
  await sudoSystemctl(["enable", "--now", AUTOUPDATE_TIMER_NAME]);
365
- lines.push(`Auto-update timer installed — ${AUTOUPDATE_TIMER_NAME} fires hourly and runs the due-check.`, ` Units: ${servicePath()} + ${timerPath()} (no secret in either file).`);
403
+ lines.push(`Auto-update timer installed — ${AUTOUPDATE_TIMER_NAME} fires hourly and runs the due-check.`, ` Runs as \`${user}\` against ${deployDir} (the deploy this user owns).`, ` Units: ${servicePath()} + ${timerPath()} (no secret in either file).`);
366
404
  }
367
405
  else {
368
- await installCron(librarianPath);
369
- lines.push("Auto-update cron entry installed — runs the due-check hourly (systemd not found).", ` Tagged \`${CRON_MARKER}\` in your crontab (remove with \`librarian server autoupdate uninstall\`).`);
406
+ await installCron(librarianPath, deployDir);
407
+ lines.push("Auto-update cron entry installed — runs the due-check hourly (systemd not found).", ` Runs as \`${user}\` against ${deployDir} (the deploy this user owns).`, ` Tagged \`${CRON_MARKER}\` in your crontab (remove with \`librarian server autoupdate uninstall\`).`);
370
408
  }
371
409
  // Write the enabled + cadence settings into the running server so the dashboard
372
410
  // reflects them. Best-effort — a down server is a hint, not a failure.
@@ -491,14 +529,14 @@ async function readCrontab() {
491
529
  return result.stdout.split("\n").filter((l) => l.length > 0);
492
530
  }
493
531
  /** Install (or refresh) our hourly cron line idempotently — strip any prior marker line first. */
494
- async function installCron(librarianPath) {
532
+ async function installCron(librarianPath, deployDir) {
495
533
  if ((await which("crontab")) === null) {
496
534
  throw new AutoUpdateError("Neither systemd nor crontab was found, so there's no host scheduler to install the " +
497
535
  "auto-update timer into. Install systemd or cron, or schedule " +
498
536
  "`librarian server autoupdate --run` to run hourly yourself.");
499
537
  }
500
538
  const kept = (await readCrontab()).filter((l) => !l.includes(CRON_MARKER));
501
- const next = [...kept, cronLine(librarianPath)].join("\n") + "\n";
539
+ const next = [...kept, cronLine(librarianPath, deployDir)].join("\n") + "\n";
502
540
  await writeCrontab(next);
503
541
  }
504
542
  /** Remove our tagged cron line (idempotent — a crontab without it is left as-is). */
@@ -588,98 +626,6 @@ async function isTimerInstalled() {
588
626
  return false;
589
627
  return (await readCrontab()).some((l) => l.includes(CRON_MARKER));
590
628
  }
591
- // --- the exclusive host lock (serialize concurrent updates, FIX C1) ------
592
- /**
593
- * After this many milliseconds an unrefreshed lockfile is treated as STALE and
594
- * reclaimed — a crashed/killed update (the holder never released its lock) must
595
- * not wedge auto-update forever. `server update` rebuilds + recreates, so a wide
596
- * margin (1h) is safe: a real in-flight update is far shorter, and a lock older
597
- * than this is from a dead process, not a slow one.
598
- */
599
- const LOCK_STALE_MS = 60 * 60 * 1000;
600
- /** The fixed lock path: `~/.librarian/server/.autoupdate.lock` (no root needed). */
601
- export function autoUpdateLockPath(options) {
602
- const dir = options.dir ?? path.join(librarianDir(options.home), "server");
603
- return path.join(dir, ".autoupdate.lock");
604
- }
605
- /**
606
- * Acquire an EXCLUSIVE host lock so two timer fires (or a fire overlapping a
607
- * manual `librarian server update`) can never both `docker stop`/`rm`/`run` the
608
- * same container — a window with NO running container would take the server down
609
- * (spec SC7). Implemented as an `O_CREAT|O_EXCL` lockfile (atomic on POSIX, no
610
- * root, no external `flock`): the create succeeds for exactly one caller.
611
- *
612
- * Returns the held lock on success, or `null` when another update already holds
613
- * it (the caller then SKIPS without stamping). A STALE lock (older than
614
- * {@link LOCK_STALE_MS} — a crashed holder) is reclaimed once, then retried.
615
- *
616
- * FAIL-SOFT: any lock-subsystem error (a read-only FS, a permissions problem)
617
- * throws here and is caught by `runAutoUpdate`'s outer guard, which logs + skips
618
- * — a lock problem must never crash the timer or leave the server mid-recreate.
619
- */
620
- function acquireUpdateLock(lockPath) {
621
- // Best-effort: ensure the directory exists (the deploy dir normally does).
622
- mkdirSync(path.dirname(lockPath), { recursive: true });
623
- const tryCreate = () => {
624
- let fd;
625
- try {
626
- // O_CREAT|O_EXCL|O_WRONLY → fails with EEXIST if the lockfile already exists.
627
- fd = openSync(lockPath, "wx");
628
- }
629
- catch (error) {
630
- if (error.code === "EEXIST")
631
- return null;
632
- throw error; // a real FS error → fail-soft up in runAutoUpdate
633
- }
634
- // Record our pid + acquisition time (debuggable; carries NO secret).
635
- try {
636
- writeSync(fd, `${process.pid} ${Date.now()}\n`);
637
- }
638
- finally {
639
- closeSync(fd);
640
- }
641
- let released = false;
642
- return {
643
- release() {
644
- if (released)
645
- return;
646
- released = true;
647
- try {
648
- unlinkSync(lockPath);
649
- }
650
- catch {
651
- // Already gone (e.g. reclaimed as stale elsewhere) — nothing to do.
652
- }
653
- },
654
- };
655
- };
656
- const held = tryCreate();
657
- if (held)
658
- return held;
659
- // The lock exists. If it's STALE (a crashed holder), reclaim it ONCE and retry.
660
- if (isLockStale(lockPath)) {
661
- try {
662
- unlinkSync(lockPath);
663
- }
664
- catch {
665
- // Someone else reclaimed it first — fall through to a single retry anyway.
666
- }
667
- return tryCreate(); // null again ⇒ a live holder won the race → skip
668
- }
669
- return null; // a live update is in progress → skip
670
- }
671
- /** True iff the lockfile is older than {@link LOCK_STALE_MS} (a crashed holder). */
672
- function isLockStale(lockPath) {
673
- try {
674
- // Prefer the timestamp written into the file; fall back to mtime.
675
- const written = Number.parseInt(readFileSync(lockPath, "utf8").trim().split(/\s+/)[1] ?? "", 10);
676
- const acquiredAt = Number.isFinite(written) ? written : statSync(lockPath).mtimeMs;
677
- return Date.now() - acquiredAt >= LOCK_STALE_MS;
678
- }
679
- catch {
680
- return false; // can't read it → don't reclaim (conservative: skip, don't steal)
681
- }
682
- }
683
629
  // --- the `--run` wrapper (what the timer calls) --------------------------
684
630
  /**
685
631
  * The wrapper the timer/cron fires (spec §3 SC4/SC7). Reads the auto-update
@@ -700,7 +646,10 @@ function isLockStale(lockPath) {
700
646
  * (never-run → due).
701
647
  */
702
648
  export async function runAutoUpdate(options = {}) {
703
- const log = options.log ?? ((line) => void process.stderr.write(`${line}\n`));
649
+ // Default sink is SILENT (spec 074 SC8): the outcome reaches the journal once,
650
+ // via the runtime's stdout print of the returned output. A stderr default
651
+ // duplicated every line (systemd journals both streams).
652
+ const log = options.log ?? (() => undefined);
704
653
  const now = options.now ?? new Date();
705
654
  try {
706
655
  const config = await readRunningConfig();
@@ -719,17 +668,9 @@ export async function runAutoUpdate(options = {}) {
719
668
  log(line);
720
669
  return { output: line };
721
670
  }
722
- // Due + enabled: take the EXCLUSIVE host lock before the actual update so two
723
- // timer fires (or a fire overlapping a manual `server update`) can never both
724
- // stop/rm/run the same container — a window with NO running container would
725
- // take the server down (spec SC7). If another update already holds the lock,
726
- // SKIP cleanly (do NOT stamp last_run_at — the in-flight update will stamp).
727
- const lock = acquireUpdateLock(autoUpdateLockPath(options));
728
- if (!lock) {
729
- const line = "autoupdate: another update in progress — skipping.";
730
- log(line);
731
- return { output: line };
732
- }
671
+ // Due + enabled: run the update. `runUpdate` itself holds the exclusive host
672
+ // lock (spec 074 SC5 — one acquisition point covers manual runs and timer
673
+ // fires alike); a lock already held surfaces as the typed refusal below.
733
674
  try {
734
675
  const result = await runUpdate({
735
676
  ...(options.home !== undefined ? { home: options.home } : {}),
@@ -752,20 +693,31 @@ export async function runAutoUpdate(options = {}) {
752
693
  return { output: `${line}\n${redactSecrets(result.output)}` };
753
694
  }
754
695
  catch (error) {
696
+ // Another update (a manual run, an overlapping fire) holds the lock: SKIP
697
+ // cleanly and do NOT stamp last_run_at — the in-flight holder stamps.
698
+ if (error instanceof UpdateInProgressError) {
699
+ const line = "autoupdate: another update in progress — skipping.";
700
+ log(line);
701
+ return { output: line };
702
+ }
755
703
  // The update failed — its own health-check rollback left the prior container
756
704
  // running. Do NOT stamp last_run_at (so the next fire retries). Log + exit 0.
757
705
  const detail = error instanceof UpdateError || error instanceof Error
758
706
  ? redactSecrets(error.message)
759
707
  : String(error);
760
- const line = `autoupdate: update failed — left the previous server running, did NOT stamp last_run_at (will retry next fire). ${firstLine(detail)}`;
708
+ // SPEC 074 SC6: a no-deploy-state failure from the TIMER means the unit
709
+ // predates 074 (it ran as root against root's home — the silent hourly
710
+ // failure this spec killed). Anyone seeing this line has the broken unit;
711
+ // teach the migration inline.
712
+ const migrationHint = /No deploy-state found/.test(detail)
713
+ ? " If this timer was installed by an older CLI (it ran as root against root's home), " +
714
+ "upgrade the CLI and re-run `librarian server autoupdate enable` as the user who ran " +
715
+ "`server up`."
716
+ : "";
717
+ const line = `autoupdate: update failed — left the previous server running, did NOT stamp last_run_at (will retry next fire). ${firstLine(detail)}${migrationHint}`;
761
718
  log(line);
762
719
  return { output: line };
763
720
  }
764
- finally {
765
- // Always release — a held lock that outlives the update would wedge the next
766
- // fire until the stale-reclaim window elapses.
767
- lock.release();
768
- }
769
721
  }
770
722
  catch (error) {
771
723
  // Belt-and-braces: ANY unexpected throw is swallowed so the timer never fails.
@@ -1 +1 @@
1
- {"version":3,"file":"autoupdate.js","sourceRoot":"","sources":["../../src/server/autoupdate.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"autoupdate.js","sourceRoot":"","sources":["../../src/server/autoupdate.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,30 @@
1
+ /** The fixed lock path: `<deployDir>/.autoupdate.lock` (no root needed). */
2
+ export declare function updateLockPath(options: {
3
+ home?: string | undefined;
4
+ dir?: string | undefined;
5
+ }): string;
6
+ /**
7
+ * The typed refusal `runUpdate` throws when another update holds the lock. The
8
+ * manual CLI surfaces `.message` as a teaching line; the auto-update wrapper
9
+ * catches the TYPE and logs its skip line instead (without stamping — the
10
+ * in-flight holder stamps).
11
+ */
12
+ export declare class UpdateInProgressError extends Error {
13
+ constructor(lockPath: string);
14
+ }
15
+ /** A held lock — call `release()` exactly once when the critical section ends. */
16
+ export interface HeldLock {
17
+ release(): void;
18
+ }
19
+ /**
20
+ * Acquire the EXCLUSIVE host update lock. Returns the held lock on success, or
21
+ * `null` when another update already holds it. A STALE lock (older than
22
+ * {@link LOCK_STALE_MS} — a crashed holder) is reclaimed once, then retried.
23
+ *
24
+ * Any lock-subsystem error (a read-only FS, a permissions problem) THROWS — the
25
+ * manual path surfaces it as an ordinary failure; the auto-update wrapper's
26
+ * outer fail-soft guard logs + skips (a lock problem must never crash the timer
27
+ * or leave the server mid-recreate).
28
+ */
29
+ export declare function acquireUpdateLock(lockPath: string): HeldLock | null;
30
+ //# sourceMappingURL=update-lock.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"update-lock.d.ts","sourceRoot":"","sources":["../../src/server/update-lock.ts"],"names":[],"mappings":"AAoCA,4EAA4E;AAC5E,wBAAgB,cAAc,CAAC,OAAO,EAAE;IACtC,IAAI,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC1B,GAAG,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CAC1B,GAAG,MAAM,CAGT;AAED;;;;;GAKG;AACH,qBAAa,qBAAsB,SAAQ,KAAK;gBAClC,QAAQ,EAAE,MAAM;CAU7B;AAED,kFAAkF;AAClF,MAAM,WAAW,QAAQ;IACvB,OAAO,IAAI,IAAI,CAAC;CACjB;AAED;;;;;;;;;GASG;AACH,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,MAAM,GAAG,QAAQ,GAAG,IAAI,CA8CnE"}
@@ -0,0 +1,120 @@
1
+ // The exclusive host update lock (FIX C1, moved here by spec 074 SC5).
2
+ //
3
+ // Two updates interleaving `docker stop` / `rm` / `run` on the same container
4
+ // leave a window with NO running container — the server would simply be down.
5
+ // Before 074 only the auto-update TIMER wrapper took this lock, so a manual
6
+ // `librarian server update` could still interleave with a timer fire (the lock's
7
+ // own doc claimed otherwise). The lock now lives in `runUpdate` itself — ONE
8
+ // acquisition point covering every caller — and this module exists so both
9
+ // `update.ts` (acquires) and `autoupdate.ts` (catches the typed refusal) can
10
+ // share it without a circular import.
11
+ //
12
+ // Implemented as an `O_CREAT|O_EXCL` lockfile (atomic on POSIX, no root, no
13
+ // external `flock`): the create succeeds for exactly one caller. A STALE lock
14
+ // (a crashed holder that never released) is reclaimed after {@link LOCK_STALE_MS}.
15
+ import { closeSync, mkdirSync, openSync, readFileSync, statSync, unlinkSync, writeSync, } from "node:fs";
16
+ import path from "node:path";
17
+ import { librarianDir } from "../paths.js";
18
+ /**
19
+ * After this many milliseconds an unrefreshed lockfile is treated as STALE and
20
+ * reclaimed — a crashed/killed update (the holder never released its lock) must
21
+ * not wedge updates forever. `server update` rebuilds + recreates, so a wide
22
+ * margin (1h) is safe: a real in-flight update is far shorter, and a lock older
23
+ * than this is from a dead process, not a slow one.
24
+ */
25
+ const LOCK_STALE_MS = 60 * 60 * 1000;
26
+ /** The fixed lock path: `<deployDir>/.autoupdate.lock` (no root needed). */
27
+ export function updateLockPath(options) {
28
+ const dir = options.dir ?? path.join(librarianDir(options.home), "server");
29
+ return path.join(dir, ".autoupdate.lock");
30
+ }
31
+ /**
32
+ * The typed refusal `runUpdate` throws when another update holds the lock. The
33
+ * manual CLI surfaces `.message` as a teaching line; the auto-update wrapper
34
+ * catches the TYPE and logs its skip line instead (without stamping — the
35
+ * in-flight holder stamps).
36
+ */
37
+ export class UpdateInProgressError extends Error {
38
+ constructor(lockPath) {
39
+ super(`Another update is already in progress (lock: ${lockPath}).\n` +
40
+ "A concurrent `librarian server update` or auto-update timer fire holds the exclusive " +
41
+ "update lock — wait for it to finish and re-run. If a previous update CRASHED, the " +
42
+ "lock is reclaimed automatically after 1 hour; remove the file yourself only if " +
43
+ "you're certain nothing is updating right now.");
44
+ this.name = "UpdateInProgressError";
45
+ }
46
+ }
47
+ /**
48
+ * Acquire the EXCLUSIVE host update lock. Returns the held lock on success, or
49
+ * `null` when another update already holds it. A STALE lock (older than
50
+ * {@link LOCK_STALE_MS} — a crashed holder) is reclaimed once, then retried.
51
+ *
52
+ * Any lock-subsystem error (a read-only FS, a permissions problem) THROWS — the
53
+ * manual path surfaces it as an ordinary failure; the auto-update wrapper's
54
+ * outer fail-soft guard logs + skips (a lock problem must never crash the timer
55
+ * or leave the server mid-recreate).
56
+ */
57
+ export function acquireUpdateLock(lockPath) {
58
+ // Best-effort: ensure the directory exists (the deploy dir normally does).
59
+ mkdirSync(path.dirname(lockPath), { recursive: true });
60
+ const tryCreate = () => {
61
+ let fd;
62
+ try {
63
+ // O_CREAT|O_EXCL|O_WRONLY → fails with EEXIST if the lockfile already exists.
64
+ fd = openSync(lockPath, "wx");
65
+ }
66
+ catch (error) {
67
+ if (error.code === "EEXIST")
68
+ return null;
69
+ throw error; // a real FS error → the caller decides (fail vs fail-soft)
70
+ }
71
+ // Record our pid + acquisition time (debuggable; carries NO secret).
72
+ try {
73
+ writeSync(fd, `${process.pid} ${Date.now()}\n`);
74
+ }
75
+ finally {
76
+ closeSync(fd);
77
+ }
78
+ let released = false;
79
+ return {
80
+ release() {
81
+ if (released)
82
+ return;
83
+ released = true;
84
+ try {
85
+ unlinkSync(lockPath);
86
+ }
87
+ catch {
88
+ // Already gone (e.g. reclaimed as stale elsewhere) — nothing to do.
89
+ }
90
+ },
91
+ };
92
+ };
93
+ const held = tryCreate();
94
+ if (held)
95
+ return held;
96
+ // The lock exists. If it's STALE (a crashed holder), reclaim it ONCE and retry.
97
+ if (isLockStale(lockPath)) {
98
+ try {
99
+ unlinkSync(lockPath);
100
+ }
101
+ catch {
102
+ // Someone else reclaimed it first — fall through to a single retry anyway.
103
+ }
104
+ return tryCreate(); // null again ⇒ a live holder won the race → skip
105
+ }
106
+ return null; // a live update is in progress → skip
107
+ }
108
+ /** True iff the lockfile is older than {@link LOCK_STALE_MS} (a crashed holder). */
109
+ function isLockStale(lockPath) {
110
+ try {
111
+ // Prefer the timestamp written into the file; fall back to mtime.
112
+ const written = Number.parseInt(readFileSync(lockPath, "utf8").trim().split(/\s+/)[1] ?? "", 10);
113
+ const acquiredAt = Number.isFinite(written) ? written : statSync(lockPath).mtimeMs;
114
+ return Date.now() - acquiredAt >= LOCK_STALE_MS;
115
+ }
116
+ catch {
117
+ return false; // can't read it → don't reclaim (conservative: skip, don't steal)
118
+ }
119
+ }
120
+ //# sourceMappingURL=update-lock.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"update-lock.js","sourceRoot":"","sources":["../../src/server/update-lock.ts"],"names":[],"mappings":"AAAA,uEAAuE;AACvE,EAAE;AACF,8EAA8E;AAC9E,8EAA8E;AAC9E,4EAA4E;AAC5E,iFAAiF;AACjF,6EAA6E;AAC7E,2EAA2E;AAC3E,6EAA6E;AAC7E,sCAAsC;AACtC,EAAE;AACF,4EAA4E;AAC5E,8EAA8E;AAC9E,mFAAmF;AAEnF,OAAO,EACL,SAAS,EACT,SAAS,EACT,QAAQ,EACR,YAAY,EACZ,QAAQ,EACR,UAAU,EACV,SAAS,GACV,MAAM,SAAS,CAAC;AACjB,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAE3C;;;;;;GAMG;AACH,MAAM,aAAa,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC;AAErC,4EAA4E;AAC5E,MAAM,UAAU,cAAc,CAAC,OAG9B;IACC,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,QAAQ,CAAC,CAAC;IAC3E,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,kBAAkB,CAAC,CAAC;AAC5C,CAAC;AAED;;;;;GAKG;AACH,MAAM,OAAO,qBAAsB,SAAQ,KAAK;IAC9C,YAAY,QAAgB;QAC1B,KAAK,CACH,gDAAgD,QAAQ,MAAM;YAC5D,uFAAuF;YACvF,oFAAoF;YACpF,iFAAiF;YACjF,+CAA+C,CAClD,CAAC;QACF,IAAI,CAAC,IAAI,GAAG,uBAAuB,CAAC;IACtC,CAAC;CACF;AAOD;;;;;;;;;GASG;AACH,MAAM,UAAU,iBAAiB,CAAC,QAAgB;IAChD,2EAA2E;IAC3E,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAEvD,MAAM,SAAS,GAAG,GAAoB,EAAE;QACtC,IAAI,EAAU,CAAC;QACf,IAAI,CAAC;YACH,8EAA8E;YAC9E,EAAE,GAAG,QAAQ,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;QAChC,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAK,KAA+B,CAAC,IAAI,KAAK,QAAQ;gBAAE,OAAO,IAAI,CAAC;YACpE,MAAM,KAAK,CAAC,CAAC,2DAA2D;QAC1E,CAAC;QACD,qEAAqE;QACrE,IAAI,CAAC;YACH,SAAS,CAAC,EAAE,EAAE,GAAG,OAAO,CAAC,GAAG,IAAI,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;QAClD,CAAC;gBAAS,CAAC;YACT,SAAS,CAAC,EAAE,CAAC,CAAC;QAChB,CAAC;QACD,IAAI,QAAQ,GAAG,KAAK,CAAC;QACrB,OAAO;YACL,OAAO;gBACL,IAAI,QAAQ;oBAAE,OAAO;gBACrB,QAAQ,GAAG,IAAI,CAAC;gBAChB,IAAI,CAAC;oBACH,UAAU,CAAC,QAAQ,CAAC,CAAC;gBACvB,CAAC;gBAAC,MAAM,CAAC;oBACP,oEAAoE;gBACtE,CAAC;YACH,CAAC;SACF,CAAC;IACJ,CAAC,CAAC;IAEF,MAAM,IAAI,GAAG,SAAS,EAAE,CAAC;IACzB,IAAI,IAAI;QAAE,OAAO,IAAI,CAAC;IAEtB,gFAAgF;IAChF,IAAI,WAAW,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC1B,IAAI,CAAC;YACH,UAAU,CAAC,QAAQ,CAAC,CAAC;QACvB,CAAC;QAAC,MAAM,CAAC;YACP,2EAA2E;QAC7E,CAAC;QACD,OAAO,SAAS,EAAE,CAAC,CAAC,iDAAiD;IACvE,CAAC;IACD,OAAO,IAAI,CAAC,CAAC,sCAAsC;AACrD,CAAC;AAED,oFAAoF;AACpF,SAAS,WAAW,CAAC,QAAgB;IACnC,IAAI,CAAC;QACH,kEAAkE;QAClE,MAAM,OAAO,GAAG,MAAM,CAAC,QAAQ,CAC7B,YAAY,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,EAC3D,EAAE,CACH,CAAC;QACF,MAAM,UAAU,GAAG,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC;QACnF,OAAO,IAAI,CAAC,GAAG,EAAE,GAAG,UAAU,IAAI,aAAa,CAAC;IAClD,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC,CAAC,kEAAkE;IAClF,CAAC;AACH,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"update.d.ts","sourceRoot":"","sources":["../../src/server/update.ts"],"names":[],"mappings":"AA+EA,MAAM,WAAW,aAAa;IAC5B,4EAA4E;IAC5E,GAAG,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACzB,4EAA4E;IAC5E,GAAG,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;IAC1B,2DAA2D;IAC3D,GAAG,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACzB,6BAA6B;IAC7B,IAAI,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC1B,wEAAwE;IACxE,QAAQ,CAAC,EAAE,MAAM,CAAC,QAAQ,GAAG,SAAS,CAAC;IACvC,mFAAmF;IACnF,cAAc,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACpC,sDAAsD;IACtD,gBAAgB,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACtC,iEAAiE;IACjE,YAAY,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CACnC;AAED,yFAAyF;AACzF,qBAAa,WAAY,SAAQ,KAAK;gBACxB,OAAO,EAAE,MAAM;CAI5B;AAED,MAAM,WAAW,YAAY;IAC3B,mFAAmF;IACnF,MAAM,EAAE,MAAM,CAAC;CAChB;AAED;;;;;;GAMG;AACH,wBAAsB,SAAS,CAAC,OAAO,GAAE,aAAkB,GAAG,OAAO,CAAC,YAAY,CAAC,CAmHlF"}
1
+ {"version":3,"file":"update.d.ts","sourceRoot":"","sources":["../../src/server/update.ts"],"names":[],"mappings":"AAgFA,MAAM,WAAW,aAAa;IAC5B,4EAA4E;IAC5E,GAAG,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACzB,4EAA4E;IAC5E,GAAG,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;IAC1B,2DAA2D;IAC3D,GAAG,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACzB,6BAA6B;IAC7B,IAAI,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC1B,wEAAwE;IACxE,QAAQ,CAAC,EAAE,MAAM,CAAC,QAAQ,GAAG,SAAS,CAAC;IACvC,mFAAmF;IACnF,cAAc,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACpC,sDAAsD;IACtD,gBAAgB,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACtC,iEAAiE;IACjE,YAAY,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CACnC;AAED,yFAAyF;AACzF,qBAAa,WAAY,SAAQ,KAAK;gBACxB,OAAO,EAAE,MAAM;CAI5B;AAED,MAAM,WAAW,YAAY;IAC3B,mFAAmF;IACnF,MAAM,EAAE,MAAM,CAAC;CAChB;AAED;;;;;;GAMG;AACH,wBAAsB,SAAS,CAAC,OAAO,GAAE,aAAkB,GAAG,OAAO,CAAC,YAAY,CAAC,CAgClF"}
@@ -66,6 +66,7 @@ import { run } from "./docker.js";
66
66
  import { preflight } from "./preflight.js";
67
67
  import { redactSecrets } from "./redact.js";
68
68
  import { buildRunArgs, CONTAINER_NAME, dirOwner, LEGACY_DASHBOARD_PORT, mintAgentToken, readDeployEnvFile, waitForHealthy, writeDeployEnvFile, } from "./up.js";
69
+ import { acquireUpdateLock, UpdateInProgressError, updateLockPath } from "./update-lock.js";
69
70
  /** A teaching error from `update`; the runtime renders `.message` as one stderr line. */
70
71
  export class UpdateError extends Error {
71
72
  constructor(message) {
@@ -92,6 +93,26 @@ export async function runUpdate(options = {}) {
92
93
  "(or the deploy dir is wrong). Run `librarian server up` first, " +
93
94
  "or pass `--dir <path>` to point at an existing deploy dir.");
94
95
  }
96
+ // SPEC 074 SC5: ONE exclusive lock serialises EVERY update — manual runs and
97
+ // auto-update timer fires alike — so two can never interleave stop/rm/run on
98
+ // the same container (a window with no running container takes the server
99
+ // down). Before 074 only the timer wrapper locked, so a manual update could
100
+ // race a fire. Held around everything from ref resolution to deploy-state
101
+ // write; released on success AND failure (a failure must not wedge the next
102
+ // fire — the stale-reclaim window is for crashes, not ordinary errors).
103
+ const lockPath = updateLockPath({ home: options.home, dir: options.dir });
104
+ const lock = acquireUpdateLock(lockPath);
105
+ if (!lock)
106
+ throw new UpdateInProgressError(lockPath);
107
+ try {
108
+ return await performUpdate(options, deployDir, state);
109
+ }
110
+ finally {
111
+ lock.release();
112
+ }
113
+ }
114
+ /** The locked body of {@link runUpdate} — everything after preflight/state/lock. */
115
+ async function performUpdate(options, deployDir, state) {
95
116
  // 2) Resolve the target ref (explicit `--ref` wins; else the latest tag).
96
117
  const targetRef = await resolveRef(options.ref);
97
118
  // 3) IDEMPOTENCY FIRST: already at the resolved ref AND healthy → clean no-op.
@@ -1 +1 @@
1
- {"version":3,"file":"update.js","sourceRoot":"","sources":["../../src/server/update.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"update.js","sourceRoot":"","sources":["../../src/server/update.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@the-librarian/cli",
3
- "version": "1.17.0",
3
+ "version": "1.17.1",
4
4
  "private": false,
5
5
  "publishConfig": {
6
6
  "access": "public"