@bradygaster/squad-sdk 0.9.6-insider.3 → 0.10.0

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.
@@ -1,9 +1,21 @@
1
1
  /**
2
2
  * Git-native state backends for `.squad/` state storage.
3
3
  *
4
+ * Hardening: retry with exponential backoff for transient git errors,
5
+ * circuit-breaker to prevent cascading failures, startup verification,
6
+ * and observable error surfacing (no silent swallowing).
7
+ *
4
8
  * @module state-backend
5
9
  */
6
10
  import type { StorageProvider, StorageStats } from './storage/storage-provider.js';
11
+ /** Typed error for git command failures with stderr and command context. */
12
+ export declare class GitExecError extends Error {
13
+ readonly command: string;
14
+ readonly reason: string;
15
+ readonly stderr: string;
16
+ readonly name = "GitExecError";
17
+ constructor(command: string, reason: string, stderr: string);
18
+ }
7
19
  export type StateBackendType = 'local' | 'external' | 'orphan' | 'two-layer';
8
20
  export interface StateBackend {
9
21
  read(relativePath: string): string | undefined;
@@ -14,6 +26,56 @@ export interface StateBackend {
14
26
  append(relativePath: string, content: string): void;
15
27
  readonly name: string;
16
28
  }
29
+ type CircuitState = 'closed' | 'open' | 'half-open';
30
+ export declare class CircuitBreaker {
31
+ private readonly threshold;
32
+ private readonly cooldownMs;
33
+ private state;
34
+ private failures;
35
+ private lastFailureTime;
36
+ constructor(threshold?: number, cooldownMs?: number);
37
+ /** Execute an operation through the circuit breaker. */
38
+ execute<T>(fn: () => T, operation: string): T;
39
+ private onSuccess;
40
+ private onFailure;
41
+ get consecutiveFailures(): number;
42
+ get currentState(): CircuitState;
43
+ }
44
+ /**
45
+ * Thrown when an optimistic CAS write (update-ref expected-old) fails after
46
+ * exhausting all retry attempts. Callers may surface, requeue, or retry with
47
+ * application-level coordination. Distinct from GitExecError, which signals
48
+ * a real git failure (corruption, permission, broken repo).
49
+ */
50
+ export declare class StateBackendConcurrencyError extends Error {
51
+ readonly operation: string;
52
+ readonly attempts: number;
53
+ readonly lastStderr: string;
54
+ readonly name = "StateBackendConcurrencyError";
55
+ constructor(operation: string, attempts: number, lastStderr: string);
56
+ }
57
+ /**
58
+ * Attempt an atomic ref update with compare-and-swap semantics.
59
+ *
60
+ * `expectedOldSha` of `null` means "create only if does not exist"
61
+ * (passed as 40 zeros, git's canonical no-such-ref sentinel).
62
+ *
63
+ * Returns `{ ok: true }` on success, `{ ok: false, stderr }` on CAS conflict,
64
+ * and re-throws any non-CAS git failure (corruption, permission, etc.).
65
+ */
66
+ declare function tryUpdateRef(ref: string, newSha: string, expectedOldSha: string | null, cwd: string): {
67
+ ok: boolean;
68
+ stderr: string;
69
+ };
70
+ export declare function _setCasInjectorForTesting(fn: ((ref: string) => {
71
+ ok: boolean;
72
+ stderr: string;
73
+ } | null) | null): void;
74
+ /**
75
+ * Internal CAS primitive — exported for unit tests only.
76
+ * @internal
77
+ */
78
+ export declare const _tryUpdateRefForTesting: typeof tryUpdateRef;
17
79
  export declare class WorktreeBackend implements StateBackend {
18
80
  readonly name = "local";
19
81
  private readonly root;
@@ -34,16 +96,40 @@ export declare class GitNotesBackend implements StateBackend {
34
96
  readonly name = "git-notes";
35
97
  private readonly cwd;
36
98
  private readonly ref;
37
- private cachedAnchor;
99
+ private readonly breaker;
100
+ private _rootCommit;
38
101
  constructor(repoRoot: string);
102
+ /** Returns the root commit SHA — a stable anchor that never moves. Cached after first call. */
103
+ private rootCommit;
104
+ /** Resolve the current SHA of refs/notes/<ref>, or null if it doesn't exist. */
105
+ private readNotesRef;
39
106
  /**
40
- * Return the repo's root commit the first commit with no parents.
41
- * This commit exists on every branch, so the note persists across
42
- * branch switches (unlike HEAD, which moves with the checked-out branch).
107
+ * Load the JSON blob attached to the root commit at a SPECIFIC notes ref SHA.
108
+ * Reading at a pinned SHA (not the live ref tip) is the foundation of the CAS
109
+ * loop without it, a writer could observe state at version N, build version
110
+ * N+1, but race against another writer who already advanced to N+1' (losing
111
+ * data). With a pinned read, the subsequent update-ref CAS catches the race.
112
+ *
113
+ * NOTE: this relies on the notes tree having no fanout. Git uses fanout
114
+ * (ab/cdef.../) only when many notes are present; we only ever store a single
115
+ * note (on the root commit), so the path is just `<refSha>:<anchor>`.
43
116
  */
44
- private getAnchorCommit;
117
+ private loadBlobAt;
118
+ /** Convenience reader at the live ref tip (used for read-only operations). */
45
119
  private loadBlob;
46
- private saveBlob;
120
+ /**
121
+ * Build a new notes commit and attempt to atomically swing refs/notes/<ref>
122
+ * from `expectedOldRefSha` to it. Returns the same `{ ok, stderr }` shape as
123
+ * tryUpdateRef so the caller's retry loop can act.
124
+ */
125
+ private atomicSaveBlob;
126
+ /**
127
+ * Run a mutator under optimistic CAS. The mutator receives the current blob
128
+ * (re-read on every attempt) and may mutate it; its return value is forwarded
129
+ * to the caller on success. On CAS conflict, the loop retries with jittered
130
+ * backoff up to CAS_MAX_ATTEMPTS times, then throws StateBackendConcurrencyError.
131
+ */
132
+ private mutateBlob;
47
133
  read(relativePath: string): string | undefined;
48
134
  write(relativePath: string, content: string): void;
49
135
  exists(relativePath: string): boolean;
@@ -55,6 +141,7 @@ export declare class OrphanBranchBackend implements StateBackend {
55
141
  readonly name = "orphan";
56
142
  private readonly cwd;
57
143
  private readonly branch;
144
+ private readonly breaker;
58
145
  constructor(repoRoot: string, branch?: string);
59
146
  private ensureBranch;
60
147
  read(relativePath: string): string | undefined;
@@ -110,18 +197,34 @@ export declare class StateBackendStorageAdapter implements StorageProvider {
110
197
  /** Convert absolute path to relative path for the backend. */
111
198
  private toRelative;
112
199
  }
200
+ /**
201
+ * Result of promoteNotes — how many notes were moved, archived, or skipped.
202
+ */
203
+ export interface PromoteNotesResult {
204
+ /** Orphan keys written for notes flagged `promote_to_permanent`. */
205
+ promoted: string[];
206
+ /** Orphan keys written for notes flagged `archive_on_close`. */
207
+ archived: string[];
208
+ /** Count of notes that had neither flag and were left in place. */
209
+ skipped: number;
210
+ }
113
211
  /**
114
212
  * Two-Layer Backend — combines git-notes (commit-scoped annotations) with orphan
115
213
  * branch (permanent state). Reads from orphan for bulk state, writes to both:
116
214
  * - Git notes for commit-scoped "why" annotations (per-agent namespace)
117
215
  * - Orphan branch for permanent state (decisions, histories, logs)
118
216
  *
119
- * Ralph promotes notes with promote_to_permanent after PR merge.
217
+ * The notes layer is a real, callable consumer in this backend: call
218
+ * {@link TwoLayerBackend.promoteNotes} after a PR merges to move notes flagged
219
+ * with `promote_to_permanent` into the orphan store, and copy notes flagged
220
+ * with `archive_on_close` into `archive/`. {@link TwoLayerBackend.readNote}
221
+ * returns a single note's payload.
120
222
  */
121
223
  export declare class TwoLayerBackend implements StateBackend {
122
224
  readonly name = "two-layer";
123
- private readonly notes;
124
- private readonly orphan;
225
+ readonly notes: GitNotesBackend;
226
+ readonly orphan: OrphanBranchBackend;
227
+ private readonly repoRoot;
125
228
  constructor(repoRoot: string);
126
229
  /** Read from orphan (the permanent store) */
127
230
  read(key: string): string | undefined;
@@ -131,9 +234,51 @@ export declare class TwoLayerBackend implements StateBackend {
131
234
  exists(key: string): boolean;
132
235
  delete(key: string): boolean;
133
236
  append(key: string, value: string): void;
237
+ /**
238
+ * Read a single git-notes payload as parsed JSON.
239
+ *
240
+ * Returns `null` if no note exists on the given commit for the given ref,
241
+ * or if the note body is not valid JSON.
242
+ */
243
+ readNote(ref: string, commitSha: string): unknown | null;
244
+ /**
245
+ * Walk all notes attached to commits reachable from HEAD on the given ref
246
+ * and act based on their flags:
247
+ *
248
+ * - `promote_to_permanent: true` — write payload to the orphan layer under
249
+ * `promoted/<ref>/<sha>.json` and REMOVE the source note (the note has
250
+ * been promoted to permanent state and is no longer needed).
251
+ * - `archive_on_close: true` — copy payload to the orphan layer under
252
+ * `archive/<ref>/<sha>.json` and KEEP the source note (archive = copy).
253
+ * - Otherwise — leave the note alone (ephemeral, not worth promoting).
254
+ *
255
+ * Notes that fail to parse as JSON are counted as skipped.
256
+ */
257
+ promoteNotes(ref: string): PromoteNotesResult;
258
+ /** True for refs that look like `squad/<name>` — alphanumerics, dash, underscore, slash. */
259
+ private isSafeRef;
260
+ /** True for SHA-1 hex (40 chars) or SHA-256 hex (64 chars). */
261
+ private isSafeCommitSha;
262
+ /** Pass the ref through as path segments; normalizeKey will validate each. */
263
+ private sanitizeRefForKey;
134
264
  }
135
265
  export interface StateBackendConfig {
136
266
  stateBackend?: StateBackendType;
137
267
  }
138
268
  export declare function resolveStateBackend(squadDir: string, repoRoot: string, cliOverride?: StateBackendType): StateBackend;
269
+ /**
270
+ * Read-only health check for a state backend.
271
+ * Verifies the backend is accessible without mutating state.
272
+ *
273
+ * For {@link TwoLayerBackend}, both layers are probed independently — the
274
+ * notes layer can fail (corrupt notes ref, missing commits) even when the
275
+ * orphan layer is healthy, and we surface that explicitly.
276
+ */
277
+ export declare function verifyStateBackend(backend: StateBackend): {
278
+ ok: boolean;
279
+ error?: string;
280
+ };
281
+ /** @internal Reset the one-shot git-notes migration warn flag. Only for use in tests. */
282
+ export declare function _resetGitNotesMigrationWarnForTesting(): void;
283
+ export {};
139
284
  //# sourceMappingURL=state-backend.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"state-backend.d.ts","sourceRoot":"","sources":["../src/state-backend.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"state-backend.d.ts","sourceRoot":"","sources":["../src/state-backend.ts"],"names":[],"mappings":"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"}