You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Qualify actual wrong-region behavior live; do not assume redirects or errors.
Credential roles
Setup:
bearer token with project:read or stronger project scope only where
explicitly accepted;
used for project and client-key observation;
never projected.
Build:
separate org:ci credential for releases/source maps;
optional;
host-to-host projection only;
distinct build configuration/consumer;
never frontend/backend runtime;
do not claim arbitrary token-scope introspection if Sentry does not expose
it.
Runtime/browser:
public DSN only;
no management token.
Project-management credential:
out of v0.1 because project creation has side effects and conditional
organization scope.
Observed resources
sentry.project:
exact organization/project identity;
safe project fields;
status/platform where relevant;
origin/region;
accessibility.
sentry.client-key:
cursor-complete list;
key ID;
active/revoked state;
public DSN;
safe rate metadata;
no secret fields.
Selection:
explicit configured client-key ID wins if active and project-owned;
otherwise exactly one active eligible key;
zero active -> BLOCKED/MANUAL_ACTION;
multiple active -> BLOCKED/MANUAL_ACTION with safe IDs;
never select array[0];
stable repeated observation produces no diff.
Doctor reports revocation/rotation/ambiguity and supplied-DSN mismatch.
Secret-bearing read response
Sentry's client-key response can place:
secret;
dsn.secret;
beside dsn.public.
Manifest response policy must:
allow only safe ID/status/public DSN fields;
SUPPRESS_REPORT_PRESENCE for both legacy secret locations across arrays;
drop undeclared fields;
canonicalize before provider/log/cassette;
fail closed on moved/renamed/unparseable required fields.
Only dsn.public reaches provider code. Raw legacy secret bytes must be absent
from provider process, log, state, plan, receipt, diagnostic, cassette, and
Git.
Plan/actions
V0.1 is observe/project only:
VALIDATE;
OBSERVE;
NOOP;
PROJECT_OUTPUT;
BLOCKED;
MANUAL_ACTION;
DISCONNECT.
No remote CREATE/UPDATE/DELETE/IMPORT ownership is claimed.
PROJECT_OUTPUT is still an explicit approved host action. This proves the
same Plan/Apply/commit path works when there is no remote mutation.
error-tracking@1 output
Public/browser/runtime:
ERROR_TRACKING_MODE=sentry;
NEXT_PUBLIC_ERROR_TRACKING_MODE=sentry;
public DSN for browser;
same public DSN for backend SDK;
Sentry environment;
organization/project identifiers where contract permits;
release identifier where configured.
Sentry documents DSNs as safe to expose publicly. The generic contract must
mark DSN PUBLIC and browser-exposable, while still avoiding unnecessary
generic CLI display.
Build-only:
optional SENTRY_AUTH_TOKEN reference in a distinct error-tracking-build configuration;
Outcome
Create the Sentry reference provider as the observe/project-only
counterexample and prove:
correctly separated;
Sentry runs in parallel with Resend after the Stripe baseline.
Dependencies and parallelism
Provider foundation must be green:
Stripe baseline:
Sentry may proceed in parallel with the Resend provider once Stripe opens the
v0 baseline.
The protocol is not declared stable until Stripe, Sentry, and Resend all pass
the cross-provider contract matrix.
Repository ownership
This bootstrap issue is tracked in
codefly-dev/module-saas-starterbecausecodefly-dev/provider-sentrydoes not yet exist.Deliverables:
codefly-dev/provider-sentry;Operational prerequisites
Keep inside this issue:
org:cibuild credential;Default CI uses cassettes/conformance, not live Sentry.
Scope
Inputs
project:read);org:ci);error-tracking;error-tracking-build.No webhook/callback/ingress input is required.
Origin admission
Use host origin policy:
Qualify actual wrong-region behavior live; do not assume redirects or errors.
Credential roles
Setup:
project:reador stronger project scope only whereexplicitly accepted;
Build:
org:cicredential for releases/source maps;it.
Runtime/browser:
Project-management credential:
organization scope.
Observed resources
sentry.project:sentry.client-key:Selection:
array[0];Doctor reports revocation/rotation/ambiguity and supplied-DSN mismatch.
Secret-bearing read response
Sentry's client-key response can place:
secret;dsn.secret;beside
dsn.public.Manifest response policy must:
SUPPRESS_REPORT_PRESENCEfor both legacy secret locations across arrays;Only
dsn.publicreaches provider code. Raw legacy secret bytes must be absentfrom provider process, log, state, plan, receipt, diagnostic, cassette, and
Git.
Plan/actions
V0.1 is observe/project only:
PROJECT_OUTPUT;No remote CREATE/UPDATE/DELETE/IMPORT ownership is claimed.
PROJECT_OUTPUTis still an explicit approved host action. This proves thesame Plan/Apply/commit path works when there is no remote mutation.
error-tracking@1outputPublic/browser/runtime:
ERROR_TRACKING_MODE=sentry;NEXT_PUBLIC_ERROR_TRACKING_MODE=sentry;Sentry documents DSNs as safe to expose publicly. The generic contract must
mark DSN PUBLIC and browser-exposable, while still avoiding unnecessary
generic CLI display.
Build-only:
SENTRY_AUTH_TOKENreference in a distincterror-tracking-buildconfiguration;Setup token is not output at all.
Scope diagnostics
Be honest:
org:ciis appropriate for CI/release/source-map work;fully documented;
introspection;
sntrys_organization token can access project-readendpoints in live acceptance.
Rate limits
Normalize:
Observation/Doctor must be bounded and avoid aggressive polling.
Future mutation pressure test
Do not implement project creation in v0.1.
Add a documented/pure design pressure test for:
project:writeand conditionalorg:write;The purpose is to identify protocol assumptions hidden by an observe-only
provider, not to expand scope.
SaaS Starter migration
Replace
scripts/setup/sentry.shwith a thin non-writing shim only afterparity.
Do not port the current single-token conflation.
The shim:
codefly provider setup error-tracking;Required tests
Tier 0
PROJECT_OUTPUT-only plan;Tier 1 cassettes
secretanddsn.secret;Scan provider input/output, cassette, log, diagnostic, state, receipt, and
projection for poison setup/legacy secrets.
Tier 3 live Sentry
sntrys_project endpoint coverage;org:cibuild credential;Tier 4 starter dogfood
Security invariants
Acceptance criteria
codefly-dev/provider-sentryexists and passes provider conformance.keys safely.
secret/dsn.secretvalues are absent from every providerand persisted surface.
Explicit non-goals