Skip to content

Predicate Caching Impl - #268

Open
kurasaiteja wants to merge 5 commits into
symposium-dev:mainfrom
kurasaiteja:feat/predicate-caching-events
Open

Predicate Caching Impl#268
kurasaiteja wants to merge 5 commits into
symposium-dev:mainfrom
kurasaiteja:feat/predicate-caching-events

Conversation

@kurasaiteja

Copy link
Copy Markdown
Contributor

What does this PR do?

Implements the predicate-caching RFD (#262). Custom predicates now emitWatch{File,Env,Time} JSONL events on stdout. Symposium caches their exit-coderesult in ~/.symposium/cache/predicates/<workspace-hash>.json and skips
re-evaluation until a watched file, env var, or TTL becomes stale.

Three granular events on a #[non_exhaustive] CustomPredicateEvent enum

  • WatchFile(PathBuf) result depends on this file's mtime + size.
  • WatchEnv(String) result depends on this env var's current value.
  • WatchTime(u64) result becomes stale after this many milliseconds.
  • WatchTime(0) disables caching.

Exit status still determines pass/fail. Events only control cache lifetime.

Cache layout

Per-workspace cache file at <SymposiumDirs::cache_dir>/predicates/<sha256(canonical workspace_root)>.json
I think isolating by workspace prevents two projects on the same machine that emit the same predicate string from stepping on each other's cached answers. Schema version tag invalidates on Symposium upgrade.

Note

  • Built-ins (path_exists, env, shell) stay uncached for now. path_exists is one stat, env is one hashmap lookup and the cache check would cost the same as just running them, so caching them doesn't buy anything. If it's useful to route them through the cache for observability, happy to add.
Disclosure questions

AI disclosure.

  • I used an AI tool for research, autocomplete, or in other minimal ways
  • The AI tool authored small parts of the code (e.g., autocomplete, comments)
  • The AI tool authored large parts of the code
  • Other: (explain)

Questions for reviewers.

Adds Watch{File,Env,Time} events on a non_exhaustive enum plus SDK emitter and consumer parser.
Unions Watch events into a set with a CacheTtl and captures mtime+size / env-value fingerprints.
at <cache_dir>/predicates/<sha256(workspace)>.json with schema-version invalidation.
Thin wrappers that emit WatchEnv/WatchFile before delegating to std, so predicates cache correctly.
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