@oss-autopilot/core 3.14.3 → 3.14.4

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.
@@ -489,10 +489,15 @@ export class GistStateStore {
489
489
  this.lastFetchedEtag = preReadEtag;
490
490
  reapplyStaged();
491
491
  // Preserve GistCorruptError so callers don't retry against a corrupt
492
- // remote. Any other failure surfaces as a concurrency error — the
493
- // gist content is still likely fine, the caller can refresh + retry.
492
+ // remote, and let rate-limit errors propagate unchanged so they aren't
493
+ // mistaken for a concurrency conflict a "refresh + retry" remediation
494
+ // would just hit the same limit (#1510). Any other failure surfaces as
495
+ // a concurrency error — the gist content is still likely fine, the
496
+ // caller can refresh + retry.
494
497
  if (readErr instanceof GistCorruptError)
495
498
  throw readErr;
499
+ if (isRateLimitError(readErr))
500
+ throw readErr;
496
501
  throw new GistConcurrencyError(preReadEtag, null);
497
502
  }
498
503
  const remoteStateJson = this.cachedFiles.get(STATE_FILE_NAME);
@@ -316,10 +316,13 @@ export class StateManager {
316
316
  // A push that fails after its internal retry means the Gist is no longer
317
317
  // the authoritative copy of our in-memory state — surface that as degraded
318
318
  // so `state --show`, the daily check, and doctor stop reporting healthy
319
- // (#1510). A later successful refresh/checkpoint can clear it.
320
- if (!pushed) {
321
- this.gistDegraded = true;
322
- }
319
+ // (#1510). A later successful checkpoint clears it again: without that, a
320
+ // single transient blip would latch a long-lived process (MCP server /
321
+ // dashboard) into "degraded" for its whole lifetime and could trigger an
322
+ // unnecessary re-bootstrap. A thrown GistConcurrencyError is deliberately
323
+ // left untouched here — a concurrent remote write is recoverable (refresh +
324
+ // retry), not a degradation of the Gist itself.
325
+ this.gistDegraded = !pushed;
323
326
  return pushed;
324
327
  }
325
328
  /** Whether this StateManager is backed by a Gist. */
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@oss-autopilot/core",
3
- "version": "3.14.3",
3
+ "version": "3.14.4",
4
4
  "description": "CLI and core library for managing open source contributions",
5
5
  "type": "module",
6
6
  "bin": {
@@ -54,7 +54,7 @@
54
54
  "dependencies": {
55
55
  "@octokit/plugin-throttling": "^11.0.3",
56
56
  "@octokit/rest": "^22.0.1",
57
- "@oss-scout/core": "^1.2.0",
57
+ "@oss-scout/core": "^1.2.1",
58
58
  "commander": "^15.0.0",
59
59
  "zod": "^4.4.3"
60
60
  },