@cleocode/core 2026.10.7 → 2026.10.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.
Files changed (105) hide show
  1. package/dist/build-provenance.json +2 -2
  2. package/dist/cloud/nexus-link.d.ts +15 -0
  3. package/dist/cloud/nexus-link.d.ts.map +1 -1
  4. package/dist/cloud/nexus-link.js +25 -0
  5. package/dist/cloud/nexus-link.js.map +1 -1
  6. package/dist/cloud/nexus-vault.d.ts +14 -1
  7. package/dist/cloud/nexus-vault.d.ts.map +1 -1
  8. package/dist/cloud/nexus-vault.js +72 -5
  9. package/dist/cloud/nexus-vault.js.map +1 -1
  10. package/dist/cloud/replica-rebind.d.ts +51 -0
  11. package/dist/cloud/replica-rebind.d.ts.map +1 -0
  12. package/dist/cloud/replica-rebind.js +101 -0
  13. package/dist/cloud/replica-rebind.js.map +1 -0
  14. package/dist/doctor/container-reaper.d.ts +107 -0
  15. package/dist/doctor/container-reaper.d.ts.map +1 -0
  16. package/dist/doctor/container-reaper.js +194 -0
  17. package/dist/doctor/container-reaper.js.map +1 -0
  18. package/dist/store/sync/apply/applier.d.ts +3 -0
  19. package/dist/store/sync/apply/applier.d.ts.map +1 -1
  20. package/dist/store/sync/apply/applier.js +208 -85
  21. package/dist/store/sync/apply/applier.js.map +1 -1
  22. package/dist/store/sync/capture.d.ts +23 -3
  23. package/dist/store/sync/capture.d.ts.map +1 -1
  24. package/dist/store/sync/capture.js +31 -3
  25. package/dist/store/sync/capture.js.map +1 -1
  26. package/dist/store/sync/collision-settle.d.ts +62 -0
  27. package/dist/store/sync/collision-settle.d.ts.map +1 -0
  28. package/dist/store/sync/collision-settle.js +156 -0
  29. package/dist/store/sync/collision-settle.js.map +1 -0
  30. package/dist/store/sync/conflicts.d.ts +11 -0
  31. package/dist/store/sync/conflicts.d.ts.map +1 -1
  32. package/dist/store/sync/conflicts.js +18 -0
  33. package/dist/store/sync/conflicts.js.map +1 -1
  34. package/dist/store/sync/inherit.d.ts +15 -8
  35. package/dist/store/sync/inherit.d.ts.map +1 -1
  36. package/dist/store/sync/inherit.js +28 -11
  37. package/dist/store/sync/inherit.js.map +1 -1
  38. package/dist/store/sync/merge/types.d.ts +6 -0
  39. package/dist/store/sync/merge/types.d.ts.map +1 -1
  40. package/dist/store/sync/pull.d.ts +23 -2
  41. package/dist/store/sync/pull.d.ts.map +1 -1
  42. package/dist/store/sync/pull.js +27 -2
  43. package/dist/store/sync/pull.js.map +1 -1
  44. package/dist/store/sync/rebind.d.ts +112 -0
  45. package/dist/store/sync/rebind.d.ts.map +1 -0
  46. package/dist/store/sync/rebind.js +187 -0
  47. package/dist/store/sync/rebind.js.map +1 -0
  48. package/dist/store/sync/reconcile.d.ts +93 -0
  49. package/dist/store/sync/reconcile.d.ts.map +1 -0
  50. package/dist/store/sync/reconcile.js +330 -0
  51. package/dist/store/sync/reconcile.js.map +1 -0
  52. package/dist/store/sync/repair.d.ts +5 -0
  53. package/dist/store/sync/repair.d.ts.map +1 -1
  54. package/dist/store/sync/repair.js +2 -2
  55. package/dist/store/sync/repair.js.map +1 -1
  56. package/dist/store/sync/replica.d.ts +28 -1
  57. package/dist/store/sync/replica.d.ts.map +1 -1
  58. package/dist/store/sync/replica.js +17 -3
  59. package/dist/store/sync/replica.js.map +1 -1
  60. package/dist/store/sync/retire.d.ts +161 -0
  61. package/dist/store/sync/retire.d.ts.map +1 -0
  62. package/dist/store/sync/retire.js +193 -0
  63. package/dist/store/sync/retire.js.map +1 -0
  64. package/dist/store/sync/schema.d.ts +27 -0
  65. package/dist/store/sync/schema.d.ts.map +1 -1
  66. package/dist/store/sync/schema.js +43 -0
  67. package/dist/store/sync/schema.js.map +1 -1
  68. package/dist/store/sync/sealer.d.ts +10 -0
  69. package/dist/store/sync/sealer.d.ts.map +1 -1
  70. package/dist/store/sync/sealer.js +51 -5
  71. package/dist/store/sync/sealer.js.map +1 -1
  72. package/dist/store/sync/segments.d.ts.map +1 -1
  73. package/dist/store/sync/segments.js +6 -2
  74. package/dist/store/sync/segments.js.map +1 -1
  75. package/dist/store/sync/uid-alias.d.ts +100 -0
  76. package/dist/store/sync/uid-alias.d.ts.map +1 -0
  77. package/dist/store/sync/uid-alias.js +169 -0
  78. package/dist/store/sync/uid-alias.js.map +1 -0
  79. package/dist/store/table-classification.d.ts.map +1 -1
  80. package/dist/store/table-classification.js +48 -0
  81. package/dist/store/table-classification.js.map +1 -1
  82. package/dist/tasks/change-set.d.ts.map +1 -1
  83. package/dist/tasks/change-set.js +16 -5
  84. package/dist/tasks/change-set.js.map +1 -1
  85. package/dist/tasks/complete-ci.d.ts.map +1 -1
  86. package/dist/tasks/complete-ci.js +7 -1
  87. package/dist/tasks/complete-ci.js.map +1 -1
  88. package/dist/tasks/done-plan.d.ts.map +1 -1
  89. package/dist/tasks/done-plan.js +24 -17
  90. package/dist/tasks/done-plan.js.map +1 -1
  91. package/dist/tasks/evidence.d.ts.map +1 -1
  92. package/dist/tasks/evidence.js +3 -2
  93. package/dist/tasks/evidence.js.map +1 -1
  94. package/dist/tasks/gate-runner.d.ts +20 -0
  95. package/dist/tasks/gate-runner.d.ts.map +1 -1
  96. package/dist/tasks/gate-runner.js +141 -19
  97. package/dist/tasks/gate-runner.js.map +1 -1
  98. package/dist/validation/engine-ops.d.ts.map +1 -1
  99. package/dist/validation/engine-ops.js +2 -0
  100. package/dist/validation/engine-ops.js.map +1 -1
  101. package/migrations/sync-journal/20261009130000_t13278-replica-retire/migration.sql +29 -0
  102. package/migrations/sync-journal/20261009140000_t13366-retire-confirm/migration.sql +18 -0
  103. package/migrations/sync-journal/20261010150000_t13397-uid-alias/migration.sql +32 -0
  104. package/migrations/sync-journal/20261010160000_t13399-rekey-follow/migration.sql +57 -0
  105. package/package.json +13 -13
@@ -0,0 +1 @@
1
+ {"version":3,"file":"replica-rebind.js","sourceRoot":"","sources":["../../src/cloud/replica-rebind.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,107 @@
1
+ /**
2
+ * Bounded reaper for throwaway containers (T13436), behind
3
+ * `cleo doctor system --repair` (dry run) and `--repair --apply`.
4
+ *
5
+ * The convention: a throwaway container is started with `docker run --rm` or
6
+ * labelled `cleo.task=<id>` and `cleo.ttl=<duration>` (`4h`, `2d`). The reaper
7
+ * removes exactly two things:
8
+ * - STOPPED containers carrying `cleo.ttl` created longer ago than it (opted in
9
+ * by the label);
10
+ * - anonymous volumes no container uses (64-hex names: the ones
11
+ * `docker run` without `--rm` leaves behind, from any container).
12
+ *
13
+ * A RUNNING labelled container is never removed: one past its ttl since it
14
+ * last STARTED (a restart resets the clock, creation does not) is only
15
+ * reported, because a reused container may be mid-test (T13451). It never
16
+ * touches an unlabelled container or a named volume.
17
+ *
18
+ * @task T13436
19
+ * @epic T13434
20
+ */
21
+ /** The label that opts a container into reaping, with its time to live. */
22
+ export declare const CLEO_TTL_LABEL = "cleo.ttl";
23
+ /** The label naming the task a container was started for. */
24
+ export declare const CLEO_TASK_LABEL = "cleo.task";
25
+ /** `docker ps` columns {@link planContainerReap} reads; labels last (they may hold anything but tabs). */
26
+ export declare const LABELLED_FORMAT = "{{.ID}}\t{{.Names}}\t{{.Image}}\t{{.CreatedAt}}\t{{.State}}\t{{.Labels}}";
27
+ /** A labelled container past its ttl. */
28
+ export interface ReapContainer {
29
+ readonly id: string;
30
+ readonly name: string;
31
+ readonly image: string;
32
+ readonly task: string | null;
33
+ readonly ttl: string;
34
+ /** Since creation for a stopped container, since its last start for a running one. */
35
+ readonly ageSec: number;
36
+ }
37
+ /** One removal and its outcome. */
38
+ export interface ReapOutcome {
39
+ readonly target: string;
40
+ readonly kind: 'container' | 'volume';
41
+ readonly ok: boolean;
42
+ readonly error?: string;
43
+ }
44
+ /** What the reaper found, and (with `--apply`) what it removed. */
45
+ export interface ContainerReapPlan {
46
+ readonly mode: 'dry-run' | 'apply';
47
+ /** False when docker is absent or did not answer: nothing was assessed. */
48
+ readonly dockerAvailable: boolean;
49
+ /** Stopped containers past their ttl: removed by `--apply`. */
50
+ readonly containers: readonly ReapContainer[];
51
+ /** Running containers past their ttl since their last start: reported, never removed. */
52
+ readonly runningExpired: readonly ReapContainer[];
53
+ readonly volumes: readonly string[];
54
+ /** Labelled containers whose `cleo.ttl` could not be parsed (left alone). */
55
+ readonly invalidTtl: readonly string[];
56
+ readonly applied: readonly ReapOutcome[];
57
+ }
58
+ /** Raw docker output for {@link planContainerReap}. */
59
+ export interface ContainerReapInput {
60
+ /** `docker ps -a --filter label=cleo.ttl --format` {@link LABELLED_FORMAT}. */
61
+ readonly labelledContainers: string | null;
62
+ /** Full container id → `State.StartedAt` (RFC 3339), for the running candidates. */
63
+ readonly startedAt: Readonly<Record<string, string>>;
64
+ /**
65
+ * Full container id → `State.FinishedAt`, for the stopped candidates: a stopped
66
+ * container's ttl runs from when it last stopped, so one reused across runs
67
+ * is not removed between them. Docker's zero time (never started) falls back
68
+ * to `CreatedAt`.
69
+ */
70
+ readonly finishedAt?: Readonly<Record<string, string>>;
71
+ /** `docker volume ls -q -f dangling=true`. */
72
+ readonly danglingVolumes: string | null;
73
+ readonly nowMs: number;
74
+ }
75
+ /** `90s`, `30m`, `4h`, `2d` to seconds; `null` when not a duration. */
76
+ export declare function parseTtl(ttl: string): number | null;
77
+ /**
78
+ * Decide what to reap. Pure.
79
+ *
80
+ * @example
81
+ * ```ts
82
+ * planContainerReap({ labelledContainers, danglingVolumes, nowMs: Date.now() }).containers;
83
+ * ```
84
+ *
85
+ * @task T13436
86
+ */
87
+ export declare function planContainerReap(input: ContainerReapInput): ContainerReapPlan;
88
+ /** Runs `docker <args>`; resolves to the error text, or `null` on success. */
89
+ export type DockerRunFn = (args: readonly string[]) => Promise<string | null>;
90
+ /**
91
+ * Read docker for {@link planContainerReap}. Never throws; an absent docker
92
+ * gives `null` outputs and a plan with `dockerAvailable: false`.
93
+ *
94
+ * @task T13436
95
+ */
96
+ export declare function collectContainerReapInput(): Promise<ContainerReapInput>;
97
+ /**
98
+ * Remove exactly what `plan` lists: each expired STOPPED labelled container
99
+ * with `docker rm -v`, never `-f`, so one started since the plan is refused by
100
+ * docker and reported (its anonymous volumes go with it, named ones never do),
101
+ * then each anonymous dangling volume. A volume that gained a user since the
102
+ * plan is refused by docker and reported, not forced.
103
+ *
104
+ * @task T13436
105
+ */
106
+ export declare function applyContainerReap(plan: ContainerReapPlan, docker?: DockerRunFn): Promise<ContainerReapPlan>;
107
+ //# sourceMappingURL=container-reaper.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"container-reaper.d.ts","sourceRoot":"","sources":["../../src/doctor/container-reaper.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAMH,2EAA2E;AAC3E,eAAO,MAAM,cAAc,aAAa,CAAC;AACzC,6DAA6D;AAC7D,eAAO,MAAM,eAAe,cAAc,CAAC;AAE3C,0GAA0G;AAC1G,eAAO,MAAM,eAAe,6EACgD,CAAC;AAE7E,yCAAyC;AACzC,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,sFAAsF;IACtF,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;CACzB;AAED,mCAAmC;AACnC,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,IAAI,EAAE,WAAW,GAAG,QAAQ,CAAC;IACtC,QAAQ,CAAC,EAAE,EAAE,OAAO,CAAC;IACrB,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;CACzB;AAED,mEAAmE;AACnE,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,IAAI,EAAE,SAAS,GAAG,OAAO,CAAC;IACnC,2EAA2E;IAC3E,QAAQ,CAAC,eAAe,EAAE,OAAO,CAAC;IAClC,+DAA+D;IAC/D,QAAQ,CAAC,UAAU,EAAE,SAAS,aAAa,EAAE,CAAC;IAC9C,yFAAyF;IACzF,QAAQ,CAAC,cAAc,EAAE,SAAS,aAAa,EAAE,CAAC;IAClD,QAAQ,CAAC,OAAO,EAAE,SAAS,MAAM,EAAE,CAAC;IACpC,6EAA6E;IAC7E,QAAQ,CAAC,UAAU,EAAE,SAAS,MAAM,EAAE,CAAC;IACvC,QAAQ,CAAC,OAAO,EAAE,SAAS,WAAW,EAAE,CAAC;CAC1C;AAED,uDAAuD;AACvD,MAAM,WAAW,kBAAkB;IACjC,+EAA+E;IAC/E,QAAQ,CAAC,kBAAkB,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3C,oFAAoF;IACpF,QAAQ,CAAC,SAAS,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;IACrD;;;;;OAKG;IACH,QAAQ,CAAC,UAAU,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;IACvD,8CAA8C;IAC9C,QAAQ,CAAC,eAAe,EAAE,MAAM,GAAG,IAAI,CAAC;IACxC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;CACxB;AAED,uEAAuE;AACvE,wBAAgB,QAAQ,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAInD;AAeD;;;;;;;;;GASG;AACH,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,kBAAkB,GAAG,iBAAiB,CAgD9E;AAID,8EAA8E;AAC9E,MAAM,MAAM,WAAW,GAAG,CAAC,IAAI,EAAE,SAAS,MAAM,EAAE,KAAK,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;AAwB9E;;;;;GAKG;AACH,wBAAsB,yBAAyB,IAAI,OAAO,CAAC,kBAAkB,CAAC,CAyB7E;AAED;;;;;;;;GAQG;AACH,wBAAsB,kBAAkB,CACtC,IAAI,EAAE,iBAAiB,EACvB,MAAM,GAAE,WAA2B,GAClC,OAAO,CAAC,iBAAiB,CAAC,CAgB5B"}
@@ -0,0 +1,194 @@
1
+ /**
2
+ * Bounded reaper for throwaway containers (T13436), behind
3
+ * `cleo doctor system --repair` (dry run) and `--repair --apply`.
4
+ *
5
+ * The convention: a throwaway container is started with `docker run --rm` or
6
+ * labelled `cleo.task=<id>` and `cleo.ttl=<duration>` (`4h`, `2d`). The reaper
7
+ * removes exactly two things:
8
+ * - STOPPED containers carrying `cleo.ttl` created longer ago than it (opted in
9
+ * by the label);
10
+ * - anonymous volumes no container uses (64-hex names: the ones
11
+ * `docker run` without `--rm` leaves behind, from any container).
12
+ *
13
+ * A RUNNING labelled container is never removed: one past its ttl since it
14
+ * last STARTED (a restart resets the clock, creation does not) is only
15
+ * reported, because a reused container may be mid-test (T13451). It never
16
+ * touches an unlabelled container or a named volume.
17
+ *
18
+ * @task T13436
19
+ * @epic T13434
20
+ */
21
+ import { execFile } from 'node:child_process';
22
+ import { promisify } from 'node:util';
23
+ import { parseDockerCreatedAt } from './system-health.js';
24
+ /** The label that opts a container into reaping, with its time to live. */
25
+ export const CLEO_TTL_LABEL = 'cleo.ttl';
26
+ /** The label naming the task a container was started for. */
27
+ export const CLEO_TASK_LABEL = 'cleo.task';
28
+ /** `docker ps` columns {@link planContainerReap} reads; labels last (they may hold anything but tabs). */
29
+ export const LABELLED_FORMAT = '{{.ID}}\t{{.Names}}\t{{.Image}}\t{{.CreatedAt}}\t{{.State}}\t{{.Labels}}';
30
+ /** `90s`, `30m`, `4h`, `2d` to seconds; `null` when not a duration. */
31
+ export function parseTtl(ttl) {
32
+ const m = /^(\d+)([smhd])$/.exec(ttl.trim());
33
+ if (!m)
34
+ return null;
35
+ return Number(m[1]) * { s: 1, m: 60, h: 3600, d: 86400 }[m[2]];
36
+ }
37
+ /** Docker's `k=v,k=v` label list to a map. */
38
+ function parseLabels(labels) {
39
+ const out = new Map();
40
+ for (const pair of labels.split(',')) {
41
+ const eq = pair.indexOf('=');
42
+ if (eq > 0)
43
+ out.set(pair.slice(0, eq).trim(), pair.slice(eq + 1).trim());
44
+ }
45
+ return out;
46
+ }
47
+ /** Anonymous volumes have docker-generated 64-hex names; named volumes do not. */
48
+ const ANONYMOUS_VOLUME = /^[0-9a-f]{64}$/;
49
+ /**
50
+ * Decide what to reap. Pure.
51
+ *
52
+ * @example
53
+ * ```ts
54
+ * planContainerReap({ labelledContainers, danglingVolumes, nowMs: Date.now() }).containers;
55
+ * ```
56
+ *
57
+ * @task T13436
58
+ */
59
+ export function planContainerReap(input) {
60
+ const containers = [];
61
+ const runningExpired = [];
62
+ const invalidTtl = [];
63
+ const timeOf = (map, id) => {
64
+ const full = Object.keys(map).find((k) => k.startsWith(id));
65
+ const at = full === undefined ? '' : (map[full] ?? '');
66
+ // Docker's zero time means "never"; drop sub-millisecond digits Date.parse may not accept.
67
+ return at === '' || at.startsWith('0001-')
68
+ ? Number.NaN
69
+ : Date.parse(at.replace(/(\.\d{3})\d+/, '$1'));
70
+ };
71
+ for (const line of (input.labelledContainers ?? '').split('\n')) {
72
+ const [id, name, image, createdAt, state, rawLabels = ''] = line.split('\t');
73
+ if (!id || !name || !image || !createdAt || !state)
74
+ continue;
75
+ const labels = parseLabels(rawLabels);
76
+ const ttl = labels.get(CLEO_TTL_LABEL);
77
+ if (ttl === undefined)
78
+ continue;
79
+ const ttlSec = parseTtl(ttl);
80
+ const running = state === 'running' || state === 'restarting' || state === 'paused';
81
+ const finished = timeOf(input.finishedAt ?? {}, id);
82
+ const since = running
83
+ ? timeOf(input.startedAt, id)
84
+ : Number.isNaN(finished)
85
+ ? parseDockerCreatedAt(createdAt)
86
+ : finished;
87
+ if (ttlSec === null || Number.isNaN(since)) {
88
+ invalidTtl.push(name);
89
+ continue;
90
+ }
91
+ const ageSec = Math.round((input.nowMs - since) / 1000);
92
+ if (ageSec <= ttlSec)
93
+ continue;
94
+ const entry = { id, name, image, task: labels.get(CLEO_TASK_LABEL) ?? null, ttl, ageSec };
95
+ (running ? runningExpired : containers).push(entry);
96
+ }
97
+ const volumes = (input.danglingVolumes ?? '')
98
+ .split('\n')
99
+ .map((v) => v.trim())
100
+ .filter((v) => ANONYMOUS_VOLUME.test(v));
101
+ return {
102
+ mode: 'dry-run',
103
+ dockerAvailable: input.labelledContainers !== null || input.danglingVolumes !== null,
104
+ containers,
105
+ runningExpired,
106
+ volumes,
107
+ invalidTtl,
108
+ applied: [],
109
+ };
110
+ }
111
+ const execFileAsync = promisify(execFile);
112
+ const defaultDocker = async (args) => {
113
+ try {
114
+ await execFileAsync('docker', [...args], { timeout: 60_000, encoding: 'utf8' });
115
+ return null;
116
+ }
117
+ catch (err) {
118
+ return err instanceof Error ? (err.message.split('\n')[0] ?? err.message) : String(err);
119
+ }
120
+ };
121
+ const readDocker = async (args) => {
122
+ try {
123
+ const { stdout } = await execFileAsync('docker', [...args], {
124
+ timeout: 5000,
125
+ maxBuffer: 32 * 1024 * 1024,
126
+ encoding: 'utf8',
127
+ });
128
+ return stdout;
129
+ }
130
+ catch {
131
+ return null;
132
+ }
133
+ };
134
+ /**
135
+ * Read docker for {@link planContainerReap}. Never throws; an absent docker
136
+ * gives `null` outputs and a plan with `dockerAvailable: false`.
137
+ *
138
+ * @task T13436
139
+ */
140
+ export async function collectContainerReapInput() {
141
+ const [labelledContainers, danglingVolumes] = await Promise.all([
142
+ readDocker(['ps', '-a', '--filter', `label=${CLEO_TTL_LABEL}`, '--format', LABELLED_FORMAT]),
143
+ readDocker(['volume', 'ls', '-q', '-f', 'dangling=true']),
144
+ ]);
145
+ const ids = (labelledContainers ?? '')
146
+ .split('\n')
147
+ .map((l) => l.split('\t')[0] ?? '')
148
+ .filter((id) => id !== '');
149
+ const startedAt = {};
150
+ const finishedAt = {};
151
+ if (ids.length > 0) {
152
+ const out = await readDocker([
153
+ 'inspect',
154
+ '--format',
155
+ '{{.Id}}\t{{.State.StartedAt}}\t{{.State.FinishedAt}}',
156
+ ...ids,
157
+ ]);
158
+ for (const line of (out ?? '').split('\n')) {
159
+ const [id, started, finished] = line.split('\t');
160
+ if (id && started)
161
+ startedAt[id] = started;
162
+ if (id && finished)
163
+ finishedAt[id] = finished;
164
+ }
165
+ }
166
+ return { labelledContainers, danglingVolumes, startedAt, finishedAt, nowMs: Date.now() };
167
+ }
168
+ /**
169
+ * Remove exactly what `plan` lists: each expired STOPPED labelled container
170
+ * with `docker rm -v`, never `-f`, so one started since the plan is refused by
171
+ * docker and reported (its anonymous volumes go with it, named ones never do),
172
+ * then each anonymous dangling volume. A volume that gained a user since the
173
+ * plan is refused by docker and reported, not forced.
174
+ *
175
+ * @task T13436
176
+ */
177
+ export async function applyContainerReap(plan, docker = defaultDocker) {
178
+ const applied = [];
179
+ for (const c of plan.containers) {
180
+ const error = await docker(['rm', '-v', c.id]);
181
+ applied.push({
182
+ target: c.name,
183
+ kind: 'container',
184
+ ok: error === null,
185
+ ...(error ? { error } : {}),
186
+ });
187
+ }
188
+ for (const v of plan.volumes) {
189
+ const error = await docker(['volume', 'rm', v]);
190
+ applied.push({ target: v, kind: 'volume', ok: error === null, ...(error ? { error } : {}) });
191
+ }
192
+ return { ...plan, mode: 'apply', applied };
193
+ }
194
+ //# sourceMappingURL=container-reaper.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"container-reaper.js","sourceRoot":"","sources":["../../src/doctor/container-reaper.ts"],"names":[],"mappings":"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"}
@@ -39,6 +39,9 @@
39
39
  * so the sealer echoes nothing; row meta is set to the engine's state,
40
40
  * conflicts are recorded, and the transaction is marked `applied`,
41
41
  * `conflict` (something recorded) or `void` (every op refused).
42
+ * A late transaction of a replica retired earlier in the stream is
43
+ * inherited history (§3.5 D5, T13278): applied the same way, but its merge
44
+ * conflicts are not recorded against the successor's reconcile.
42
45
  *
43
46
  * Passes repeat while a pass applies something, so a transaction pending on
44
47
  * a row a later transaction inserts applies in the same call.
@@ -1 +1 @@
1
- {"version":3,"file":"applier.d.ts","sourceRoot":"","sources":["../../../../src/store/sync/apply/applier.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAyDG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAChD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AA+BtD,OAAO,EAUL,KAAK,UAAU,EAIhB,MAAM,kBAAkB,CAAC;AAQ1B,wCAAwC;AACxC,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,KAAK,EAAE,UAAU,CAAC;IAC3B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,uEAAuE;IACvE,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,oDAAoD;IACpD,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,MAAM,CAAC;IAC5B;;;OAGG;IACH,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,IAAI,CAAC;IAC3B,gDAAgD;IAChD,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAC5B,yDAAyD;IACzD,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAC1B,+FAA+F;IAC/F,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IACzB,2EAA2E;IAC3E,QAAQ,CAAC,eAAe,CAAC,EAAE,MAAM,CAAC;CACnC;AAED,2EAA2E;AAC3E,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,gCAAgC;IAChC,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,uEAAuE;IACvE,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,yFAAyF;IACzF,QAAQ,CAAC,IAAI,EAAE,SAAS,MAAM,EAAE,CAAC;IACjC,6FAA6F;IAC7F,QAAQ,CAAC,UAAU,EAAE,UAAU,GAAG,IAAI,CAAC;IACvC,qEAAqE;IACrE,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;CAC3B;AAilCD,0FAA0F;AAC1F,eAAO,MAAM,eAAe,OAAQ,CAAC;AACrC,sEAAsE;AACtE,eAAO,MAAM,cAAc,KAAK,CAAC;AAsMjC;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,eAAe,CAAC,EAAE,EAAE,YAAY,EAAE,IAAI,EAAE,kBAAkB,GAAG,WAAW,CA2IvF"}
1
+ {"version":3,"file":"applier.d.ts","sourceRoot":"","sources":["../../../../src/store/sync/apply/applier.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4DG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAChD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAiCtD,OAAO,EAUL,KAAK,UAAU,EAIhB,MAAM,kBAAkB,CAAC;AAU1B,wCAAwC;AACxC,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,KAAK,EAAE,UAAU,CAAC;IAC3B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,uEAAuE;IACvE,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,oDAAoD;IACpD,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,MAAM,CAAC;IAC5B;;;OAGG;IACH,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,IAAI,CAAC;IAC3B,gDAAgD;IAChD,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAC5B,yDAAyD;IACzD,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAC1B,+FAA+F;IAC/F,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IACzB,2EAA2E;IAC3E,QAAQ,CAAC,eAAe,CAAC,EAAE,MAAM,CAAC;CACnC;AAED,2EAA2E;AAC3E,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,gCAAgC;IAChC,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,uEAAuE;IACvE,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,yFAAyF;IACzF,QAAQ,CAAC,IAAI,EAAE,SAAS,MAAM,EAAE,CAAC;IACjC,6FAA6F;IAC7F,QAAQ,CAAC,UAAU,EAAE,UAAU,GAAG,IAAI,CAAC;IACvC,qEAAqE;IACrE,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;CAC3B;AAysCD,0FAA0F;AAC1F,eAAO,MAAM,eAAe,OAAQ,CAAC;AACrC,sEAAsE;AACtE,eAAO,MAAM,cAAc,KAAK,CAAC;AAgNjC;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,eAAe,CAAC,EAAE,EAAE,YAAY,EAAE,IAAI,EAAE,kBAAkB,GAAG,WAAW,CA2JvF"}