When it runs
The local cache is enabled by default whensedum run starts inside a Git
checkout during development. It is off by default in CI and always off outside
Git. A fresh clone has no cache. --no-locator-cache disables it for one run.
Targets that depend on a runtime placeholder bypass the cache.
In CI, --locator-cache-ci or SEDUM_LOCATOR_CACHE_CI=1 opts in; an explicit
--no-locator-cache wins. Opting in still requires a Git checkout. Set CI=0
or CI=false only when the environment is genuinely a development run.
sedum cache clear removes the cache and its digest key for the current
worktree. The files are in that worktree’s Git metadata, outside the tracked
tree; Sedum does not change the project’s .gitignore. A linked worktree has
its own cache. There is no age-based expiry in 0.1. Incompatible formats or
matching rules, corrupt data, and failed current-page validation cause misses
and invalidation. Local files are not uploaded to a hosted cache.
Parallel lanes
Lanes and concurrent runs in one worktree share the cache safely:- Each entry is written under its own lock and moved into place atomically.
- An invalidation removes an entry only if it still holds the recipe that lane saw.
- A lock left by a crashed run is broken once it is more than ten seconds old.
conflict and keeps its model result, and the run summary counts the conflict. The test itself is unaffected.
What is retained
The stored key is a keyed digest of the full origin, path, query, fragment, operation, and normalized target sentence. Fortype steps, Sedum removes the
value operand before making this key, so different values for the same field
can reuse one recipe. The recipe contains bounded role,
tag, input type, state, and structural path, plus keyed digests of permitted
identity and nearby-label signals. It does not store the raw URL, sentence,
labels, page text, current input values, or HTML. The 256-bit digest key stays
beside the cache in Git metadata. Digests reduce accidental disclosure from a
copied cache entry; a person who can read both the entry and key may still
test guesses against them. Clear the cache when working with sensitive pages
or when sharing the checkout’s Git metadata.
The cache is separate from the classification cache in .sedum/. On a miss,
the normal Resolver may send the step sentence and allowed page excerpts to
the configured model provider; see TypeSafe provider
and Clef provider. Locator recipes are provider-independent:
a locally revalidated hit can be reused after changing providers, so that hit
does not test the selected provider’s decision quality.
Run results and evidence have their own privacy controls in
run results.
Each action’s RunResult.locator.cache records hit, miss, or bypassed,
the reason, whether fallback called the locator model, and proven target-change
evidence. Terminal output shows the same outcome. A changed or stale recipe
remains visible even when the subsequent model-selected action succeeds.
A miss with reason not_cacheable means the target has no signal that can
safely find it again, for example an <input type="submit"> button whose
name is its runtime value, so that step always uses the model. A run outside a
Git checkout reports bypassed (outside_git) and prints a hint to run
git init.