Skip to content

Privacy Policy

Version 1.1 · Last updated 2026-08-07 · Effective 2026-08-07.

EPM Workbench is local-first. Your rules live as plain files in your workspace, your credentials live in VS Code’s own secret store, and calls to your Oracle EPM Pod go straight to Oracle. This policy explains the narrow set of data that does leave your machine, who processes it, why, and how to switch the optional network features off.

SolveX Solutions LLC, a North Carolina limited liability company (“we”, “us”), publishes the EPM Workbench extension for VS Code and operates the account portal and hosted services at epmworkbench.com. For the purposes of the EU/UK GDPR, we act as the data controller for account and billing data, and as a data processor for the rule content transiently handled by the hosted Groovy language server (see below).

  • Legal entity: SolveX Solutions LLC, a North Carolina limited liability company (USA)
  • Privacy and legal contact: epm-workbench@solvex.now
  • Registered address and (where required) EU/UK representative: pending (see the notice at the top of this page).
  • Rule bodies are plain .groovy / .csc files in your workspace. Nothing is hidden in a proprietary store.
  • Oracle EPM credentials (Service Account passwords and OAuth refresh tokens) are stored in VS Code SecretStorage on your machine, keyed by account. They are never written into pod.json, never committed to your repository, never sent to us, and never appear in run journals or logs. A credential is resolved on your machine and used only to authenticate the request to your Pod.
  • Calls to your Oracle EPM Pod go directly to the Pod URL you configure. They are not proxied through any EPM Workbench service: your rules and data go from your machine straight to Oracle.

We keep no copy of your rules, data, or credentials on our infrastructure. There is no hosted tenancy.

Groovy language intelligence connects by default to our hosted language service. When this connection is active, the following is transmitted to that server:

  • Open rule text (every tier). The text of Groovy rule files you open or edit is sent for transient processing: that is how completions, hovers, and diagnostics are computed. Rule text is held in memory only for the life of the connection: it is not written to disk on the server, does not appear in operational logs, and is never used to train models. Operational logs record connection metadata (IP address, tier, extension version), rule file names, and error summaries, not rule bodies.
  • The Pod’s rule content (paid tiers only). Cross-artifact Full Application Intelligence sends the Pod’s authored content (rules, templates, and scripts) plus supporting artifact context (Connection names and Smart List entries) so the language service can operate across your whole application. This content is never stored: it is held in memory only, for the purpose of providing you autocompletion, intellisense, and cross-artifact expansion. Connection URLs, usernames, domains, and passwords never leave your machine. The server refuses this sync for sessions without a valid Offline or Full Seat Key.
  • Your Seat Key (when you have entered one). The signed key travels in a connection header so the server can verify your tier. Its payload contains your organization name, tier, seat count, and expiry, nothing else.
  • Connection metadata inherent to any network request (notably your IP address) is observed by the server and our host.
  • A client authenticity claim. Each connection attempt presents a short-lived signature proving the request comes from a genuine published build of the extension rather than from a script pointed at our server. It contains a random value, a timestamp, and the extension version. It carries no account, machine, or installation identifier, and the signing key is the same in every copy of a given release, so it cannot distinguish one user from another.

Lawful basis (GDPR Art. 6(1)(f), legitimate interests): operating and securing the language service you have chosen to use, and attributing connections for abuse-prevention and licensing. You can object by disabling the connection (below), in which case calc-script intelligence continues to work fully offline. Oracle credentials are never sent to the language server, and the first connected session shows a one-time in-product notice with these facts and a disable action.

Once a day the extension makes an anonymous conditional GET for the API Reference (Docs tab) catalog from the LSP host. The request carries no identifiers (no account, workspace, Pod, or install ID), only an If-None-Match ETag of the catalog it already has, so an unchanged catalog returns 304 Not Modified with no body. Nothing about your rules, data, or credentials is sent.

The extension sends usage and error telemetry to our managed telemetry service using VS Code’s standard telemetry library (@vscode/extension-telemetry). It honors VS Code’s global telemetry.telemetryLevel setting: usage events are sent only at all, error events at error and above, and nothing is sent at off.

  • Usage events are coarse product actions: extension activation, language server connect, corpus sync, at-rest validation scans, seat key refresh, and which verbs/features are used. Events carry your tier, the active Pod kind (connected or offline), and your Pod count, never your application name or Pod URL.
  • Error events carry the error message, stack trace, and (for Oracle API failures) Oracle’s error code and HTTP status.
  • Standard properties added by the library ride along on every event: the installation identifier (vscode.env.machineId), a session identifier, extension version, VS Code version, and OS/platform.
  • Never included: rule text, dimension data, credentials, Pod URLs, or anything read from your workspace files or SecretStorage.

Lawful basis (GDPR Art. 6(1)(f), legitimate interests): understanding usage and diagnosing defects in a pre-1.0 product. Control: set VS Code’s telemetry.telemetryLevel to off (or error to keep only crash reporting).

  • Disable the hosted Groovy language server: set epmWorkbench.lsp.provider: "local" in your VS Code settings. This is the supported off switch: Groovy intelligence then runs only on your own machine, using the language service the extension ships, and no rule text is sent anywhere. It needs Java 21 or newer installed; without it, Groovy-specific features stop. Calc-script intelligence is pure local TypeScript and keeps working offline either way.

  • Disable the daily catalog check: set epmWorkbench.apiReference.autoUpdate: false to keep the catalog bundled in the extension.

  • Disable telemetry: set VS Code’s telemetry.telemetryLevel to off.

With epmWorkbench.lsp.provider: "local", apiReference.autoUpdate: false, and telemetry.telemetryLevel: off, and working entirely in Offline Mode, the extension makes no network calls of its own.

When you buy seats or start a trial, we (and our processors) handle the data needed to run your account: your email, seat assignments, and the billing details you enter with our payment processor. Payment card details are handled by Stripe and are not stored on our systems.

Payments are processed by Stripe, which receives your name, email, billing and payment details, and subscription/seat quantity. Payment card details never touch our systems.

Beyond Stripe, we use a small number of infrastructure providers for hosting, telemetry, and transactional email. Oracle credentials and Pod data never reach any of them; they never leave your machine. The full, current sub-processor list is available on request at epm-workbench@solvex.now, and will be available to account admins from the account portal. We will notify account admins of material changes, and a Data Processing Addendum for enterprise procurement is planned as a fast-follow.

  • Rule content sent to the language server: processed in memory only, for the life of the connection. It is not written to disk or to operational logs, so there is nothing to retain.
  • Language server session records: when a connection to the hosted language service closes, we keep one record of it: your organization and tier (from your Seat Key), the extension version, and the times the session opened and closed. We use these for service health, abuse-prevention, and licensing. They are retained for 180 days, then deleted automatically by a scheduled job.
  • Platform infrastructure logs: the runtime logs kept for the servers themselves record connection metadata (including IP addresses), rule file names, and error summaries. Their retention is set by our hosting plan and is currently 7 days, far shorter than the 180 days above; after that they age out at the provider. We will update this figure here if the plan changes.
  • Telemetry events: retained in our telemetry service for 90 days (the service’s default retention period), then deleted automatically.
  • Account and billing data: retained while your account is active and for the period afterward required by tax and accounting law.

Depending on where you live, you may have rights to access, correct, delete, port, or object to the processing of your personal data (GDPR/UK GDPR), or to know about and delete personal information and to opt out of “sale”/“sharing” (CCPA/CPRA: note we do not sell or share personal information for cross-context behavioral advertising). To exercise any right, contact epm-workbench@solvex.now. We will respond within the timeframe the applicable law requires.

EPM Workbench is an independent product and is not affiliated with, endorsed by, or sponsored by Oracle. Oracle and Oracle EPM are trademarks of Oracle Corporation.