Skip to content

feat(cache): add output globs for cache restoration#375

Open
branchseer wants to merge 1 commit intomainfrom
feat/output-globs
Open

feat(cache): add output globs for cache restoration#375
branchseer wants to merge 1 commit intomainfrom
feat/output-globs

Conversation

@branchseer
Copy link
Copy Markdown
Member

Summary

Adds an output field to cached tasks: archives files matching the configured globs after a successful run and restores them on cache hit.

  • Omitted or []: no output archiving (matches existing behavior)
  • ["dist/**"]: archive matching files; restore on cache hit
  • [{"pattern": "...", "base": "workspace" | "package"}]: explicit base directory
  • ["!dist/cache/**"]: negative patterns exclude files
  • This PR does not support {auto: true} — that comes in the follow-up feat(cache): restore output files on cache hit #321 (auto-detect via fspy)

Schema bumped to v12 (CacheEntryKey carries output_config, CacheEntryValue carries output_archive). Old caches reset on upgrade.

Test plan

  • CI green
  • New e2e fixture `output_cache_test/` covers archive+restore and negative-pattern exclusion
  • All 87 plan snapshots updated to include the new `output_config` field (default empty)

🤖 Generated with Claude Code

@socket-security
Copy link
Copy Markdown

socket-security Bot commented May 7, 2026

Review the following changes in direct dependencies. Learn more about Socket for GitHub.

Diff Package Supply Chain
Security
Vulnerability Quality Maintenance License
Addedcargo/​zstd@​0.13.310010093100100

View full report

Copy link
Copy Markdown

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 9dbd5b86b9

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment on lines +413 to +417
None,
CacheUpdateStatus::NotUpdated(CacheNotUpdatedReason::CacheHit),
Some(ExecutionError::Cache { kind: CacheErrorKind::Lookup, source: err }),
);
return SpawnOutcome::Failed;
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P1 Badge Treat archive extraction failures as cache misses

If the cached archive file is missing or unreadable (for example after partial cache cleanup, disk corruption, or interrupted writes), this branch turns a would-be cache hit into a hard task failure instead of re-running the task. Because output archives live outside SQLite, this can happen even when the fingerprint row is valid, and it will block builds until users manually clear the DB entry. Falling back to a cache miss path here would preserve correctness and availability.

Useful? React with 👍 / 👎.

Adds an `output` field to cached tasks: archives files matching the
configured globs after a successful run and restores them on cache hit.

Supports glob patterns, negative patterns, and `{pattern, base}` form
with explicit base directory. When `output` is omitted or empty, no
output archiving happens (matches prior behavior).

Schema version bumped to 12 (CacheEntryKey carries output_config,
CacheEntryValue carries output_archive). Old caches are reset on upgrade.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
@branchseer branchseer force-pushed the feat/output-globs branch from 9dbd5b8 to 6d03bc0 Compare May 7, 2026 08:22
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant