@cat-factory/kernel 0.120.0 → 0.121.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.
@@ -0,0 +1,37 @@
1
+ import type { VcsProvider } from './vcs-types.js';
2
+ /** In-repo docs the VCS remedies deep-link to. */
3
+ export declare const VCS_DOC_URLS: {
4
+ /** GitHub connect / repo linking. */
5
+ readonly githubIntegration: "https://github.com/kibertoad/cat-factory/blob/main/backend/docs/github-integration.md";
6
+ /** GitHub App auth + operations. */
7
+ readonly githubOperations: "https://github.com/kibertoad/cat-factory/blob/main/backend/docs/github-operations.md";
8
+ /** Provider-neutral VCS layer (GitHub + GitLab). */
9
+ readonly vcsProviders: "https://github.com/kibertoad/cat-factory/blob/main/backend/docs/vcs-providers.md";
10
+ };
11
+ /** GitHub settings pages a remedy points at (the host is fixed for github.com). */
12
+ export declare const GITHUB_SETTINGS_URLS: {
13
+ readonly installations: 'https://github.com/settings/installations';
14
+ };
15
+ /** The inputs a VCS client has on hand when a request fails, used to pick the remedy. */
16
+ export interface VcsHttpErrorContext {
17
+ provider: VcsProvider;
18
+ /** The HTTP status of the failed response. */
19
+ status: number;
20
+ /** The request method, for the raw detail line. */
21
+ method: string;
22
+ /** The request URL, for the raw detail line. */
23
+ url: string;
24
+ /** The response body (already truncated by the caller), for the raw detail line. */
25
+ body?: string;
26
+ /** True when rate-limit headers say the quota is exhausted (GitHub) or the status is 429. */
27
+ rateLimited?: boolean;
28
+ /** Epoch-ms the rate limit resets, when the response exposed it. */
29
+ resetAt?: number | null;
30
+ }
31
+ /**
32
+ * Build the message for a failed VCS HTTP request: the raw `<Provider> <method> <url> → <status>:
33
+ * <body>` line (unchanged, so downstream detail surfaces and greps still work) followed, when the
34
+ * status maps to a known cause, by a cause + remedy sentence with a doc link.
35
+ */
36
+ export declare function describeVcsApiError(ctx: VcsHttpErrorContext): string;
37
+ //# sourceMappingURL=vcs-errors.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"vcs-errors.d.ts","sourceRoot":"","sources":["../../src/domain/vcs-errors.ts"],"names":[],"mappings":"AAkBA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAA;AAOjD,kDAAkD;AAClD,eAAO,MAAM,YAAY;IACvB,qCAAqC;aACrC,iBAAiB;IACjB,oCAAoC;aACpC,gBAAgB;IAChB,oDAAoD;aACpD,YAAY;CACJ,CAAA;AAEV,mFAAmF;AACnF,eAAO,MAAM,oBAAoB;aAC/B,aAAa,EAAE,2CAA2C;CAClD,CAAA;AAEV,yFAAyF;AACzF,MAAM,WAAW,mBAAmB;IAClC,QAAQ,EAAE,WAAW,CAAA;IACrB,8CAA8C;IAC9C,MAAM,EAAE,MAAM,CAAA;IACd,mDAAmD;IACnD,MAAM,EAAE,MAAM,CAAA;IACd,gDAAgD;IAChD,GAAG,EAAE,MAAM,CAAA;IACX,oFAAoF;IACpF,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,6FAA6F;IAC7F,WAAW,CAAC,EAAE,OAAO,CAAA;IACrB,oEAAoE;IACpE,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;CACxB;AAmDD;;;;GAIG;AACH,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,mBAAmB,GAAG,MAAM,CAMpE"}
@@ -0,0 +1,90 @@
1
+ // ---------------------------------------------------------------------------
2
+ // Human remedies for VCS (GitHub / GitLab) HTTP failures.
3
+ //
4
+ // Every `fetch`-based VCS client used to throw the same bare status dump for any non-2xx
5
+ // response — `GitHub GET <url> → 401: <body>` — which named the symptom but not the cause or
6
+ // the fix, so a rejected token, an exhausted rate limit, and a missing scope all read the
7
+ // same. This module is the SINGLE place that turns a `{ provider, status }` into an actionable
8
+ // message: it preserves that raw first line (callers and detectors still surface it as detail,
9
+ // and it stays greppable) and appends a cause + remedy sentence that names the UI location
10
+ // first, the env/PAT alternative second, and links the relevant docs.
11
+ //
12
+ // Error IDENTITY still rides the structured `status` field on `GitHubApiError` / `GitLabApiError`
13
+ // (that is what consumers branch on) — this only enriches the human `message`, so elaborating it
14
+ // never changes classification. Both clients live in different packages (`@cat-factory/server` and
15
+ // `@cat-factory/gitlab`) but share `@cat-factory/kernel`, so keeping the copy here keeps the two
16
+ // providers' remedies from drifting and lets the mapping be unit-tested in one place.
17
+ // ---------------------------------------------------------------------------
18
+ // In-repo docs are linked as stable GitHub blob URLs on `main`. Kernel sits BELOW the server
19
+ // layer, so it cannot import `@cat-factory/server`'s `config/docs.ts`; per the doc-URL convention
20
+ // a package outside the server layer keeps its own equivalent — this is that equivalent.
21
+ const REPO_DOC_BLOB_BASE = 'https://github.com/kibertoad/cat-factory/blob/main';
22
+ /** In-repo docs the VCS remedies deep-link to. */
23
+ export const VCS_DOC_URLS = {
24
+ /** GitHub connect / repo linking. */
25
+ githubIntegration: `${REPO_DOC_BLOB_BASE}/backend/docs/github-integration.md`,
26
+ /** GitHub App auth + operations. */
27
+ githubOperations: `${REPO_DOC_BLOB_BASE}/backend/docs/github-operations.md`,
28
+ /** Provider-neutral VCS layer (GitHub + GitLab). */
29
+ vcsProviders: `${REPO_DOC_BLOB_BASE}/backend/docs/vcs-providers.md`,
30
+ };
31
+ /** GitHub settings pages a remedy points at (the host is fixed for github.com). */
32
+ export const GITHUB_SETTINGS_URLS = {
33
+ installations: 'https://github.com/settings/installations',
34
+ };
35
+ /** Human label for a provider, matching the raw message prefix the clients used to emit. */
36
+ function providerLabel(provider) {
37
+ return provider === 'github' ? 'GitHub' : 'GitLab';
38
+ }
39
+ function githubRemedy(ctx) {
40
+ const { status, rateLimited, resetAt } = ctx;
41
+ const docs = VCS_DOC_URLS;
42
+ if (status === 401) {
43
+ return `Cause: the GitHub token was rejected — it was revoked or has expired, or the App's private key was rotated. Fix: reconnect the GitHub App for this workspace (Settings → GitHub); in local mode, mint a fresh GITHUB_PAT. Manage installations at ${GITHUB_SETTINGS_URLS.installations}. See ${docs.githubOperations}.`;
44
+ }
45
+ if ((status === 403 && rateLimited) || status === 429) {
46
+ const resetNote = typeof resetAt === 'number' ? ` The limit resets at ${new Date(resetAt).toISOString()}.` : '';
47
+ return `Cause: the GitHub API rate limit was exceeded.${resetNote} Fix: wait for the reset before retrying — a GitHub App installation has a much higher limit than a personal access token. See ${docs.githubOperations}.`;
48
+ }
49
+ if (status === 403) {
50
+ return `Cause: the GitHub token lacks a required permission or scope for this call. Fix: grant the missing permission (e.g. contents, pull requests, or checks) on the App and re-accept the installation at ${GITHUB_SETTINGS_URLS.installations}, or re-mint the PAT with the needed scopes. See ${docs.githubOperations}.`;
51
+ }
52
+ if (status === 404) {
53
+ return `Cause: the repository or installation is not visible to this token — the App may not be installed on it, or it was renamed or deleted. Fix: confirm the App is installed on the target repo and this workspace points at the right installation, then reconnect GitHub if it is stale. See ${docs.githubIntegration}.`;
54
+ }
55
+ if (status >= 500) {
56
+ return `Cause: GitHub returned a server error — this is usually transient. Fix: retry shortly. See ${docs.githubOperations}.`;
57
+ }
58
+ return undefined;
59
+ }
60
+ function gitlabRemedy(ctx) {
61
+ const { status } = ctx;
62
+ const docs = VCS_DOC_URLS;
63
+ if (status === 401) {
64
+ return `Cause: the GitLab access token was rejected — it was revoked or has expired. Fix: update the token on the GitLab connection (Settings → Integrations); create a new one under your GitLab host → Preferences → Access Tokens with the \`api\` scope. See ${docs.vcsProviders}.`;
65
+ }
66
+ if (status === 429) {
67
+ return `Cause: the GitLab API rate limit was exceeded. Fix: wait before retrying. See ${docs.vcsProviders}.`;
68
+ }
69
+ if (status === 403) {
70
+ return `Cause: the GitLab token lacks the required scope or role for this call. Fix: it needs the \`api\` scope and at least the Developer or Maintainer role on the project. See ${docs.vcsProviders}.`;
71
+ }
72
+ if (status === 404) {
73
+ return `Cause: the GitLab project is not visible to this token — confirm the project path/id and that the token's user is a member of it. See ${docs.vcsProviders}.`;
74
+ }
75
+ if (status >= 500) {
76
+ return `Cause: GitLab returned a server error — this is usually transient. Fix: retry shortly. See ${docs.vcsProviders}.`;
77
+ }
78
+ return undefined;
79
+ }
80
+ /**
81
+ * Build the message for a failed VCS HTTP request: the raw `<Provider> <method> <url> → <status>:
82
+ * <body>` line (unchanged, so downstream detail surfaces and greps still work) followed, when the
83
+ * status maps to a known cause, by a cause + remedy sentence with a doc link.
84
+ */
85
+ export function describeVcsApiError(ctx) {
86
+ const rawLine = `${providerLabel(ctx.provider)} ${ctx.method} ${ctx.url} → ${ctx.status}${ctx.body ? `: ${ctx.body}` : ''}`;
87
+ const remedy = ctx.provider === 'github' ? githubRemedy(ctx) : gitlabRemedy(ctx);
88
+ return remedy ? `${rawLine}\n${remedy}` : rawLine;
89
+ }
90
+ //# sourceMappingURL=vcs-errors.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"vcs-errors.js","sourceRoot":"","sources":["../../src/domain/vcs-errors.ts"],"names":[],"mappings":"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"}
@@ -12,9 +12,9 @@
12
12
  * - `binary_artifacts` — its rows are only half the story: the backing blob BYTES
13
13
  * (R2 / S3 / filesystem) must be deleted through the `BinaryBlobBackend` port at
14
14
  * the service layer, not by bare SQL. Deleting the metadata row here would strand
15
- * the bytes forever (the row is the only handle on the blob key). Reclaimed by the
16
- * workspace-delete blob purge instead. (Until that lands, these rows continue to
17
- * orphan exactly as before no regression from this list.)
15
+ * the bytes forever (the row is the only handle on the blob key). Reclaimed instead
16
+ * by `WorkspaceService.delete`, which purges rows + bytes together through the
17
+ * `BinaryArtifactStore.deleteByWorkspace` port BEFORE this cascade runs.
18
18
  * - Runtime-specific tables that only exist on one facade (e.g. the Cloudflare-only
19
19
  * `live_containers` Durable-Object tracking table) are appended by that facade.
20
20
  */
@@ -36,9 +36,9 @@
36
36
  * - `binary_artifacts` — its rows are only half the story: the backing blob BYTES
37
37
  * (R2 / S3 / filesystem) must be deleted through the `BinaryBlobBackend` port at
38
38
  * the service layer, not by bare SQL. Deleting the metadata row here would strand
39
- * the bytes forever (the row is the only handle on the blob key). Reclaimed by the
40
- * workspace-delete blob purge instead. (Until that lands, these rows continue to
41
- * orphan exactly as before no regression from this list.)
39
+ * the bytes forever (the row is the only handle on the blob key). Reclaimed instead
40
+ * by `WorkspaceService.delete`, which purges rows + bytes together through the
41
+ * `BinaryArtifactStore.deleteByWorkspace` port BEFORE this cascade runs.
42
42
  * - Runtime-specific tables that only exist on one facade (e.g. the Cloudflare-only
43
43
  * `live_containers` Durable-Object tracking table) are appended by that facade.
44
44
  */
package/dist/index.d.ts CHANGED
@@ -18,6 +18,7 @@ export { type StepResolverContext, type StepResolution, type StepCompletionResol
18
18
  export { type ProviderToken, defineProviderToken, wireProvider, getProvider, isProviderWired, requireProvider, clearProviders, } from './domain/provider-registry.js';
19
19
  export { type VcsProvider, type VcsConnectionRef, type VcsRepoRef, VCS_PROVIDERS, isVcsProvider, githubConnectionRef, githubInstallationId, } from './domain/vcs-types.js';
20
20
  export { type VcsProviderBundle, registerVcsProvider, getVcsProvider, isVcsProviderRegistered, requireVcsProvider, resolveVcsProvider, registeredVcsProviders, clearVcsProviders, } from './domain/vcs-registry.js';
21
+ export { type VcsHttpErrorContext, describeVcsApiError, VCS_DOC_URLS, GITHUB_SETTINGS_URLS, } from './domain/vcs-errors.js';
21
22
  export { CI_AGENT_KIND, CI_FIXER_AGENT_KIND, CONFLICTS_AGENT_KIND, CONFLICT_RESOLVER_AGENT_KIND, POST_RELEASE_HEALTH_AGENT_KIND, ON_CALL_AGENT_KIND, HUMAN_REVIEW_AGENT_KIND, FIXER_AGENT_KIND, DOC_QUALITY_AGENT_KIND, DOC_FIXER_AGENT_KIND, type CiVerdict, type ReleaseGateVerdict, aggregateCi, aggregateRepoCi, headFields, isCiGreen, listFailingChecks, listFailingChecksAcrossRepos, describeFailingChecks, describeFailingRepos, classifyReleaseHealth, describeRegressedSignals, renderReleaseEvidence, } from './domain/gate-logic.js';
22
23
  export { type DocStructureInput, type DocStructureAnalysis, type Heading, analyzeDocStructure, documentHeadings, hasDocStructureIssues, resolveDocLinkPath, } from './domain/doc-quality-logic.js';
23
24
  export * from './ports/index.js';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/dist/index.js CHANGED
@@ -43,6 +43,7 @@ export { defineProviderToken, wireProvider, getProvider, isProviderWired, requir
43
43
  // connection. See `domain/vcs-types.ts` / `domain/vcs-registry.ts`.
44
44
  export { VCS_PROVIDERS, isVcsProvider, githubConnectionRef, githubInstallationId, } from './domain/vcs-types.js';
45
45
  export { registerVcsProvider, getVcsProvider, isVcsProviderRegistered, requireVcsProvider, resolveVcsProvider, registeredVcsProviders, clearVcsProviders, } from './domain/vcs-registry.js';
46
+ export { describeVcsApiError, VCS_DOC_URLS, GITHUB_SETTINGS_URLS, } from './domain/vcs-errors.js';
46
47
  // Pure gate logic + gate/helper agent-kind constants, shared by the built-in gate suite
47
48
  // (`@cat-factory/gates`) and the engine. See `domain/gate-logic.ts`.
48
49
  export { CI_AGENT_KIND, CI_FIXER_AGENT_KIND, CONFLICTS_AGENT_KIND, CONFLICT_RESOLVER_AGENT_KIND, POST_RELEASE_HEALTH_AGENT_KIND, ON_CALL_AGENT_KIND, HUMAN_REVIEW_AGENT_KIND, FIXER_AGENT_KIND, DOC_QUALITY_AGENT_KIND, DOC_FIXER_AGENT_KIND, aggregateCi, aggregateRepoCi, headFields, isCiGreen, listFailingChecks, listFailingChecksAcrossRepos, describeFailingChecks, describeFailingRepos, classifyReleaseHealth, describeRegressedSignals, renderReleaseEvidence, } from './domain/gate-logic.js';
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
@@ -65,6 +65,21 @@ export interface BinaryArtifactStore {
65
65
  * Drives the configurable per-workspace retention cleanup (default 14 days).
66
66
  */
67
67
  pruneOlderThan(workspaceId: string, olderThan: number): Promise<number>;
68
+ /**
69
+ * Board-delete reclaim: delete EVERY artifact in the workspace — BOTH the metadata rows
70
+ * AND their bytes — and return how many were removed. Called from the workspace-delete
71
+ * path (the retention sweeps only ever see LIVE workspaces via `listVisible`, so a deleted
72
+ * workspace's artifacts would otherwise leak the heavy blob bytes forever). Same fail-safe
73
+ * blobs-first ordering as {@link pruneOlderThan}: a blob whose delete throws keeps its
74
+ * metadata row (the only handle on the key) rather than orphaning the bytes.
75
+ *
76
+ * NOTE the asymmetry with {@link pruneOlderThan}'s retry story: the retention sweep revisits
77
+ * a LIVE workspace hourly, so a row it retains is genuinely retried; but a DELETED workspace
78
+ * never reappears in `listVisible`, so a row retained here is NOT auto-retried — it needs an
79
+ * out-of-band reclaim. The composed store therefore logs (via its injected logger) whenever a
80
+ * blob delete fails so the residual leak is surfaced rather than silent.
81
+ */
82
+ deleteByWorkspace(workspaceId: string): Promise<number>;
68
83
  }
69
84
  /** Per-runtime metadata persistence (D1 ⇄ Drizzle). Bytes live elsewhere. */
70
85
  export interface BinaryArtifactMetadataStore {
@@ -79,6 +94,10 @@ export interface BinaryArtifactMetadataStore {
79
94
  listOlderThan(workspaceId: string, olderThan: number): Promise<BinaryArtifactRecord[]>;
80
95
  /** Delete metadata rows in the workspace created before `olderThan`; returns the count. */
81
96
  deleteOlderThan(workspaceId: string, olderThan: number): Promise<number>;
97
+ /** Every record in the workspace — for the workspace-delete purge. */
98
+ listByWorkspace(workspaceId: string): Promise<BinaryArtifactRecord[]>;
99
+ /** Delete every metadata row in the workspace; returns the count. */
100
+ deleteByWorkspace(workspaceId: string): Promise<number>;
82
101
  }
83
102
  /**
84
103
  * The pluggable blob backend — the "custom adapter interface". Implement this to
@@ -115,5 +134,14 @@ export declare function createBinaryArtifactStore(deps: {
115
134
  blob: BinaryBlobBackend;
116
135
  idGenerator: IdGenerator;
117
136
  clock: Clock;
137
+ /**
138
+ * Optional structural logger for best-effort diagnostics. Used only to SURFACE a partial
139
+ * reclaim (one or more blob deletes failed, so their metadata rows are retained) — otherwise
140
+ * that residual leak would be silent. See {@link BinaryArtifactStore.deleteByWorkspace} for
141
+ * why the workspace-delete path in particular has no auto-retry to fall back on.
142
+ */
143
+ logger?: {
144
+ warn(obj: Record<string, unknown>, msg?: string): void;
145
+ };
118
146
  }): BinaryArtifactStore;
119
147
  //# sourceMappingURL=binary-artifacts.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"binary-artifacts.d.ts","sourceRoot":"","sources":["../../src/ports/binary-artifacts.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"binary-artifacts.d.ts","sourceRoot":"","sources":["../../src/ports/binary-artifacts.ts"],"names":[],"mappings":"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"}
@@ -27,7 +27,48 @@ async function sha256Hex(bytes) {
27
27
  * metadata row. Deleting removes the bytes best-effort then the metadata.
28
28
  */
29
29
  export function createBinaryArtifactStore(deps) {
30
- const { metadata, blob, idGenerator, clock } = deps;
30
+ const { metadata, blob, idGenerator, clock, logger } = deps;
31
+ // Shared fail-safe reclaim for a batch of records (drives both `pruneOlderThan` and
32
+ // `deleteByWorkspace`). Delete the BYTES first (best-effort per blob, so one stuck object
33
+ // doesn't strand the rest), then drop the metadata rows. The invariant in both directions:
34
+ // NEVER drop a metadata row whose blob is still present-but-failed-to-delete, because that
35
+ // would orphan the bytes forever (the metadata is the only handle on the key). So a blob
36
+ // delete that throws keeps its metadata row, leaving the pair intact — and the common
37
+ // all-succeeded path still collapses to a single bulk delete. We also never keep a metadata
38
+ // row pointing at already-deleted bytes.
39
+ //
40
+ // Whether the retained pair is genuinely retried depends on the caller: `pruneOlderThan` runs
41
+ // against a LIVE workspace the sweep revisits hourly (real retry), but `deleteByWorkspace`'s
42
+ // workspace never reappears in `listVisible` (no auto-retry — an out-of-band reclaim is
43
+ // needed). Either way a non-empty failure set is a leak worth surfacing, so we log it here
44
+ // rather than swallowing it silently at every call site.
45
+ async function reclaim(records, bulkDelete) {
46
+ const failed = new Set();
47
+ for (const record of records) {
48
+ try {
49
+ await blob.delete(record.storageKey);
50
+ }
51
+ catch {
52
+ // Tolerate a backend hiccup on a single object; retain its metadata so a later reclaim
53
+ // retries the blob delete instead of orphaning the bytes.
54
+ failed.add(record.id);
55
+ }
56
+ }
57
+ // Fast path: every blob went, so a single range delete reclaims all the metadata.
58
+ if (failed.size === 0)
59
+ return bulkDelete();
60
+ logger?.warn({ workspaceId: records[0]?.workspaceId, failed: failed.size, total: records.length }, 'binary-artifact reclaim: some blob deletes failed; their metadata rows are retained (bytes not yet reclaimed)');
61
+ // Otherwise delete only the rows whose bytes are confirmed gone, one at a time, leaving the
62
+ // failed pairs (row + blob) intact for a later reclaim.
63
+ let removed = 0;
64
+ for (const record of records) {
65
+ if (failed.has(record.id))
66
+ continue;
67
+ await metadata.delete(record.workspaceId, record.id);
68
+ removed += 1;
69
+ }
70
+ return removed;
71
+ }
31
72
  return {
32
73
  async store(input) {
33
74
  const id = idGenerator.next('art');
@@ -83,38 +124,12 @@ export function createBinaryArtifactStore(deps) {
83
124
  await metadata.delete(workspaceId, id);
84
125
  },
85
126
  async pruneOlderThan(workspaceId, olderThan) {
86
- // Delete the BYTES first (best-effort per blob, so one stuck object doesn't strand the
87
- // rest), then drop the metadata rows. The invariant in both directions: we NEVER drop a
88
- // metadata row whose blob is still present-but-failed-to-delete, because that would orphan
89
- // the bytes forever (the metadata is the only handle the next sweep has on the key). So a
90
- // blob delete that throws keeps its metadata row, leaving the pair intact for the next
91
- // sweep to retry — and the common all-succeeded path still collapses to a single bulk
92
- // delete. We also never keep a metadata row pointing at already-deleted bytes.
93
127
  const expired = await metadata.listOlderThan(workspaceId, olderThan);
94
- const failed = new Set();
95
- for (const record of expired) {
96
- try {
97
- await blob.delete(record.storageKey);
98
- }
99
- catch {
100
- // Tolerate a backend hiccup on a single object; retain its metadata so the next sweep
101
- // retries the blob delete instead of orphaning the bytes.
102
- failed.add(record.id);
103
- }
104
- }
105
- // Fast path: every blob went, so a single range delete reclaims all the metadata.
106
- if (failed.size === 0)
107
- return metadata.deleteOlderThan(workspaceId, olderThan);
108
- // Otherwise delete only the rows whose bytes are confirmed gone, one at a time, leaving
109
- // the failed pairs (row + blob) for the next sweep.
110
- let removed = 0;
111
- for (const record of expired) {
112
- if (failed.has(record.id))
113
- continue;
114
- await metadata.delete(workspaceId, record.id);
115
- removed += 1;
116
- }
117
- return removed;
128
+ return reclaim(expired, () => metadata.deleteOlderThan(workspaceId, olderThan));
129
+ },
130
+ async deleteByWorkspace(workspaceId) {
131
+ const all = await metadata.listByWorkspace(workspaceId);
132
+ return reclaim(all, () => metadata.deleteByWorkspace(workspaceId));
118
133
  },
119
134
  };
120
135
  }
@@ -1 +1 @@
1
- {"version":3,"file":"binary-artifacts.js","sourceRoot":"","sources":["../../src/ports/binary-artifacts.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"binary-artifacts.js","sourceRoot":"","sources":["../../src/ports/binary-artifacts.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@cat-factory/kernel",
3
- "version": "0.120.0",
3
+ "version": "0.121.1",
4
4
  "description": "Shared vocabulary, pure logic, and port interfaces for the Agent Architecture Board.",
5
5
  "repository": {
6
6
  "type": "git",