v0.7.67: provenance ffs, files, landing fixes, library post - #6492
Conversation
…rom Automation) (#6489) * feat(library): What Is an Agentic Workflow? (And How It's Different From Automation) * content(library): restore original Zapier/Make wording in agentic-workflow post --------- Co-authored-by: Sim Pi Agent <pi@sim.ai>
|
The latest updates on your projects. Learn more about Vercel for GitHub. |
PR SummaryMedium Risk Overview Durable provenance posture — Unrecorded or inexact sidecars on memory, table rows, and knowledge no longer latch the whole registry by default. A new env flag Redaction false positives — Literals Provenance narrowing — When a value cannot be fully scanned (large refs, traversal limits, opaque accessors), export over-approximates with all candidate entries instead of marking provenance incomplete and refusing downstream model boundaries. Smaller changes — Workspace file editor maps Reviewed by Cursor Bugbot for commit 156ee3e. Configure here. |
Greptile SummaryThe PR makes durable secret-provenance handling configurable for memory, table rows, and knowledge results, while reducing false-positive matching for boolean/null literals. It also treats JSONL as plaintext in Monaco and adds a library article.
Confidence Score: 5/5The PR appears safe to merge because no unacknowledged actionable defects were identified. The changed behavior that permits under-redaction on unenforced durable surfaces and omits boolean/null matcher literals is explicitly documented as an intentional, feature-flagged compatibility posture, while enforced surfaces retain fail-closed behavior.
|
| Filename | Overview |
|---|---|
| apps/sim/lib/execution/durable-secret-provenance-enforcement.ts | Introduces cached, environment-controlled enforcement for unrecorded provenance across three durable surfaces. |
| apps/sim/lib/execution/durable-secret-provenance.ts | Extends durable provenance imports to apply the selected surface’s fail-closed or report-and-continue policy. |
| apps/sim/executor/handlers/agent/memory.ts | Applies the new policy when loading persisted memory and importing per-message provenance. |
| apps/sim/lib/table/rows/secret-provenance.ts | Allows non-exact row sidecars to be omitted from complete page provenance when table-row enforcement is disabled. |
| apps/sim/lib/knowledge/secret-provenance.ts | Applies knowledge-surface enforcement while importing document and embedding provenance. |
| apps/sim/executor/utils/resolved-secret-match-policy.ts | Classifies JSON boolean/null renderings as non-identifying literals that should not become secret matcher patterns. |
| apps/sim/executor/utils/resolved-secret-matcher.ts | Filters non-identifying literals before constructing detection and rendering matchers. |
| apps/sim/app/workspace/[workspaceId]/files/components/file-viewer/text-editor.tsx | Maps JSONL files to plaintext so Monaco does not apply single-document JSON validation. |
Flowchart
%%{init: {'theme': 'neutral'}}%%
flowchart LR
Store[Memory / table row / knowledge] --> Sidecar{Provenance exact?}
Sidecar -->|Yes| Import[Import secret entries]
Sidecar -->|No| Policy{Surface enforced?}
Policy -->|Yes| Refuse[Fail closed]
Policy -->|No| Report[Report and continue]
Import --> Projection[Model-bound projection]
Report --> Projection
Reviews (1): Last reviewed commit: "fix(provenance): feature flagged, inexac..." | Re-trigger Greptile
There was a problem hiding this comment.
Cursor Bugbot has reviewed your changes using high effort and found 1 potential issue.
❌ Bugbot Autofix is OFF. To automatically fix reported issues with cloud agents, enable autofix in the Cursor dashboard.
Reviewed by Cursor Bugbot for commit 156ee3e. Configure here.
* fix(provenance): name the importer that condemned a run A bundle that arrives already incomplete latches the whole registry one-way, so every later model projection in the run refuses. #6483 made the refusal say what went wrong; it could not say who. In production the answer was reason=source-provenance-incomplete with 23 candidate importers and no way to tell them apart, which is where the last investigation stopped. Carry a stable origin across the import boundary and retain it beside the reason. It inherits through forks and merges — the step that erased attribution before, since a tool crossing forks, imports, then merges back — so the refusal names the importer even though the latch happened frames earlier. Tool crossings take the tool id, so a tool-sourced bundle identifies itself rather than being inferred from timestamps. Origins are caller-supplied strings rather than a closed union, so unlike reasons they carry an explicit bound. No behaviour change: the field is optional, additive, and read only when building a log record. * fix(provenance): attribute the path-scoped and short-circuit latches too importProvenanceForValueAtInputPath took only { trusted }, so the five callers that bind a crossing to an input path — the block, loop, parallel and workflow resolvers, and the guardrails route — could not name themselves. Separately, six latches sit beside a tagged import on the path where the import did not run or returned false: a bundle already marked incomplete short-circuits the || before the import, and each catch latches directly. Those reported no origin while their neighbour reported one. * fix(provenance): stop a broad catch claiming an incomplete bundle The catch around table-row provenance loading also covers a database failure in loadTableRowSecretProvenance, which is not an incomplete bundle. Naming a reason the catch cannot know is the misattribution this work exists to remove, so it reports 'unspecified' with its origin, matching every sibling catch. The decrypt catch keeps its specific reason because its try wraps only the decrypt call.
`<EnvScript>` defaults to Next's `<Script strategy='beforeInteractive'>`, which does not assign `window.__ENV` — it pushes the assignment onto `self.__next_s`. That queue has one consumer, `appBootstrap`, which reads it once and short-circuits to `hydrate()` when empty. The bootstrap chunk's `<script async>` tag sits ~13KB earlier in the document than the env tag, so when that chunk runs first the queue drains empty, nothing drains it again, and `window.__ENV` stays undefined for the life of the document — every `getEnv` read empty until a reload wins the race. `disableNextScript` emits a plain inline `<script>` that assigns unconditionally, so a lost race costs a few milliseconds instead of the session. Also records whether the assignment was still missing at module-init so the residual (module-scope reads in `env-flags`, which freeze what they see) is measured rather than assumed.
…/blog and /library (#6496)
…ce (#6497) The agent's stored-memory read was the only durable-provenance check site with no test of its enforced path, and the only one whose control flow was restructured by hand. Pin both directions against the shape that failed in production: an unrecorded memory reads through and reports, and the same memory refuses once the memory surface is closed. Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com>

Uh oh!
There was an error while loading. Please reload this page.