@volter/twin-sentry 0.1.36 → 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +21 -134
- package/api/spec/SOURCE.md +15 -0
- package/api/spec/doc-examples.json +12 -0
- package/api/spec/openapi.json.gz +0 -0
- package/api/spec/patches.json +5350 -0
- package/api/spec/sources.json +122 -0
- package/api/src/fetch.ts +18 -0
- package/api/src/generated/surface.gen.json +1 -0
- package/api/src/generated/ui.gen.json +1 -0
- package/api/src/index.ts +3 -0
- package/api/src/manifest.ts +136 -0
- package/api/src/semantics/api.ts +246 -0
- package/api/src/semantics/around.ts +36 -0
- package/api/src/semantics/doors.ts +50 -0
- package/api/src/semantics/index.ts +19 -0
- package/api/src/semantics/shared.ts +35 -0
- package/api/src/semantics/states.ts +17 -0
- package/dist/api/spec/SOURCE.md +15 -0
- package/dist/api/spec/doc-examples.json +12 -0
- package/dist/api/spec/openapi.json.gz +0 -0
- package/dist/api/spec/patches.json +5350 -0
- package/dist/api/spec/sources.json +122 -0
- package/dist/api/src/fetch.d.ts +2 -0
- package/dist/api/src/fetch.js +17 -0
- package/dist/api/src/fetch.ts +18 -0
- package/dist/api/src/generated/surface.gen.json +1 -0
- package/dist/api/src/generated/ui.gen.json +1 -0
- package/dist/api/src/index.d.ts +2 -0
- package/dist/api/src/index.js +3 -0
- package/dist/api/src/index.ts +3 -0
- package/dist/api/src/manifest.d.ts +2 -0
- package/dist/api/src/manifest.js +135 -0
- package/dist/api/src/manifest.ts +136 -0
- package/dist/api/src/semantics/api.d.ts +13 -0
- package/dist/api/src/semantics/api.js +267 -0
- package/dist/api/src/semantics/api.ts +246 -0
- package/dist/api/src/semantics/around.d.ts +2 -0
- package/dist/api/src/semantics/around.js +41 -0
- package/dist/api/src/semantics/around.ts +36 -0
- package/dist/api/src/semantics/doors.d.ts +8 -0
- package/dist/api/src/semantics/doors.js +39 -0
- package/dist/api/src/semantics/doors.ts +50 -0
- package/dist/api/src/semantics/index.d.ts +2 -0
- package/dist/api/src/semantics/index.js +15 -0
- package/dist/api/src/semantics/index.ts +19 -0
- package/dist/api/src/semantics/shared.d.ts +15 -0
- package/dist/api/src/semantics/shared.js +27 -0
- package/dist/api/src/semantics/shared.ts +35 -0
- package/dist/api/src/semantics/states.d.ts +24 -0
- package/dist/api/src/semantics/states.js +17 -0
- package/dist/api/src/semantics/states.ts +17 -0
- package/dist/generated/pack-facts.json +87 -0
- package/dist/ingest/spec/SOURCE.md +30 -0
- package/dist/ingest/spec/authentication.mdx.gz +0 -0
- package/dist/ingest/spec/compression.mdx.gz +0 -0
- package/dist/ingest/spec/doc-examples.json +216 -0
- package/dist/ingest/spec/envelope-items.mdx.gz +0 -0
- package/dist/ingest/spec/envelopes.mdx.gz +0 -0
- package/dist/ingest/spec/openapi.json +178 -0
- package/dist/ingest/spec/rate-limiting.mdx.gz +0 -0
- package/dist/ingest/spec/sources.json +25 -0
- package/dist/ingest/spec/transport.mdx.gz +0 -0
- package/dist/ingest/spec/write-spec.ts +192 -0
- package/dist/ingest/src/fetch.d.ts +2 -0
- package/dist/ingest/src/fetch.js +15 -0
- package/dist/ingest/src/fetch.ts +16 -0
- package/dist/ingest/src/generated/surface.gen.json +1 -0
- package/dist/ingest/src/generated/ui.gen.json +1 -0
- package/dist/ingest/src/index.d.ts +2 -0
- package/dist/ingest/src/index.js +3 -0
- package/dist/ingest/src/index.ts +3 -0
- package/dist/ingest/src/manifest.d.ts +2 -0
- package/dist/ingest/src/manifest.js +34 -0
- package/dist/ingest/src/manifest.ts +39 -0
- package/dist/ingest/src/semantics/api.d.ts +2 -0
- package/dist/ingest/src/semantics/api.js +240 -0
- package/dist/ingest/src/semantics/api.ts +188 -0
- package/dist/ingest/src/semantics/around.d.ts +2 -0
- package/dist/ingest/src/semantics/around.js +6 -0
- package/dist/ingest/src/semantics/around.ts +7 -0
- package/dist/ingest/src/semantics/index.d.ts +2 -0
- package/dist/ingest/src/semantics/index.js +4 -0
- package/dist/ingest/src/semantics/index.ts +8 -0
- package/dist/ingest/src/semantics/shared.d.ts +4 -0
- package/dist/ingest/src/semantics/shared.js +2 -0
- package/dist/ingest/src/semantics/shared.ts +7 -0
- package/dist/ingest/src/semantics/states.d.ts +1 -0
- package/dist/ingest/src/semantics/states.js +2 -0
- package/dist/ingest/src/semantics/states.ts +2 -0
- package/dist/journeys/coverage.json +205 -0
- package/dist/journeys/customer-life.json +923 -0
- package/dist/journeys/customer-life.outline.md +51 -0
- package/dist/journeys/decisions.json +170 -0
- package/dist/journeys/demand.json +136 -0
- package/dist/journeys/score.json +231 -0
- package/dist/journeys/unreachable.json +29 -0
- package/dist/journeys/vendor-examples.json +474 -0
- package/dist/spec/sources.json +76 -0
- package/dist/src/cli.js +12 -27
- package/dist/src/fetch.d.ts +2 -0
- package/dist/src/fetch.js +9 -0
- package/dist/src/index.d.ts +5 -15
- package/dist/src/index.js +12 -75
- package/dist/src/manifest.d.ts +2 -0
- package/dist/src/manifest.js +34 -0
- package/dist/src/semantics/shared.d.ts +87 -0
- package/dist/src/semantics/shared.js +411 -0
- package/dist/src/server.d.ts +7 -0
- package/dist/src/server.js +7 -0
- package/generated/pack-facts.json +87 -0
- package/ingest/spec/SOURCE.md +30 -0
- package/ingest/spec/authentication.mdx.gz +0 -0
- package/ingest/spec/compression.mdx.gz +0 -0
- package/ingest/spec/doc-examples.json +216 -0
- package/ingest/spec/envelope-items.mdx.gz +0 -0
- package/ingest/spec/envelopes.mdx.gz +0 -0
- package/ingest/spec/openapi.json +178 -0
- package/ingest/spec/rate-limiting.mdx.gz +0 -0
- package/ingest/spec/sources.json +25 -0
- package/ingest/spec/transport.mdx.gz +0 -0
- package/ingest/spec/write-spec.ts +192 -0
- package/ingest/src/fetch.ts +16 -0
- package/ingest/src/generated/surface.gen.json +1 -0
- package/ingest/src/generated/ui.gen.json +1 -0
- package/ingest/src/index.ts +3 -0
- package/ingest/src/manifest.ts +39 -0
- package/ingest/src/semantics/api.ts +188 -0
- package/ingest/src/semantics/around.ts +7 -0
- package/ingest/src/semantics/index.ts +8 -0
- package/ingest/src/semantics/shared.ts +7 -0
- package/ingest/src/semantics/states.ts +2 -0
- package/journeys/coverage.json +205 -0
- package/journeys/customer-life.json +923 -0
- package/journeys/customer-life.outline.md +51 -0
- package/journeys/decisions.json +170 -0
- package/journeys/demand.json +136 -0
- package/journeys/score.json +231 -0
- package/journeys/unreachable.json +29 -0
- package/journeys/vendor-examples.json +474 -0
- package/package.json +16 -42
- package/spec/sources.json +76 -0
- package/src/cli.ts +12 -24
- package/src/fetch.ts +10 -0
- package/src/index.ts +12 -143
- package/src/manifest.ts +40 -0
- package/src/semantics/shared.ts +443 -0
- package/src/server.ts +8 -0
- package/client/sentry-mirror.css +0 -99
- package/client/sentry-mirror.tsx +0 -352
- package/dist/client/sentry-mirror.bundle.js +0 -388
- package/dist/client/sentry-mirror.css +0 -99
- package/dist/client/sentry-mirror.d.ts +0 -17
- package/dist/client/sentry-mirror.js +0 -156
- package/dist/client/sentry-mirror.tsx +0 -352
- package/dist/src/sentry-budget.d.ts +0 -50
- package/dist/src/sentry-budget.js +0 -145
- package/dist/src/sentry-capabilities.d.ts +0 -3
- package/dist/src/sentry-capabilities.js +0 -1180
- package/dist/src/sentry-conformance.d.ts +0 -22
- package/dist/src/sentry-conformance.js +0 -97
- package/dist/src/sentry-connector.d.ts +0 -77
- package/dist/src/sentry-connector.js +0 -226
- package/dist/src/sentry-events.d.ts +0 -54
- package/dist/src/sentry-events.js +0 -132
- package/dist/src/sentry-ingest.d.ts +0 -137
- package/dist/src/sentry-ingest.js +0 -387
- package/dist/src/sentry-mirror-ui.d.ts +0 -38
- package/dist/src/sentry-mirror-ui.js +0 -162
- package/dist/src/sentry-perform-harness.d.ts +0 -9
- package/dist/src/sentry-perform-harness.js +0 -20
- package/dist/src/sentry-server.d.ts +0 -14
- package/dist/src/sentry-server.js +0 -27
- package/dist/src/sentry-twin.d.ts +0 -17
- package/dist/src/sentry-twin.js +0 -1739
- package/dist/test-fixtures/sentry-openapi-operations.SOURCE.md +0 -24
- package/dist/test-fixtures/sentry-openapi-operations.json +0 -1837
- package/src/sentry-budget.ts +0 -171
- package/src/sentry-capabilities.ts +0 -1222
- package/src/sentry-conformance.ts +0 -110
- package/src/sentry-connector.ts +0 -260
- package/src/sentry-events.ts +0 -172
- package/src/sentry-ingest.ts +0 -471
- package/src/sentry-mirror-ui.ts +0 -162
- package/src/sentry-perform-harness.ts +0 -19
- package/src/sentry-server.ts +0 -35
- package/src/sentry-twin.ts +0 -1615
- package/test-fixtures/sentry-openapi-operations.SOURCE.md +0 -24
- package/test-fixtures/sentry-openapi-operations.json +0 -1837
package/README.md
CHANGED
|
@@ -1,142 +1,29 @@
|
|
|
1
1
|
# @volter/twin-sentry
|
|
2
2
|
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
`Sentry.captureException()` lands an event that the twin **groups into an issue**; browse the
|
|
6
|
-
issues/events/releases through the real Web API (`/api/0/...`) or the dashboard mirror.
|
|
7
|
-
Mirror real Sentry, simulate, and fork. Built on `@volter/world-core`.
|
|
3
|
+
Sentry's Protocol 3 twin serves the demanded applications in [journeys/demand.json](./journeys/demand.json).
|
|
4
|
+
The API and ingest share one vendor store.
|
|
8
5
|
|
|
9
|
-
|
|
6
|
+
| Wire | Behavior | Evidence |
|
|
7
|
+
|---|---|---|
|
|
8
|
+
| DSN hosts, `POST /api/<project>/envelope/` | Error/message events and issues, transactions, sessions, client reports, attachments, replay, profiles, cron check-ins and monitor configuration, feedback, logs and metrics. Receipt bytes and unknown items are retained in blobs. Plain, gzip, deflate, brotli and zstd requests; browser CORS. | [ingest/spec](./ingest/spec/SOURCE.md), with retained reference bytes and an offline writer |
|
|
9
|
+
| `sentry.io`, `us.sentry.io`, `de.sentry.io` | sentry-cli release creation, finalization, commits and previous-release lookup, repository listing and source-map chunk/artifact uploads; account project creation and client-key reads; declared vendor refresh reads. | [api/spec](./api/spec/SOURCE.md), Sentry's pinned OpenAPI document and evidenced patches |
|
|
10
10
|
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
a resolved/ignored issue **reopens** it (regression).
|
|
16
|
-
2. **Web API (the dashboard side, `/api/0/...`)** — issues (list with `query`/`sort`, retrieve,
|
|
17
|
-
resolve/ignore/unresolve/assign, delete, events), events, projects + keys/DSN, releases +
|
|
18
|
-
deploys + commits, organizations + teams, and alert rules + **signed webhooks**.
|
|
11
|
+
The application's SDK authenticates ingestion with its public DSN key. API calls use scoped personal tokens or
|
|
12
|
+
organization CI tokens, stored by their hash. The credential door is bootstrap signup: it creates the account,
|
|
13
|
+
first token, project and client key named by the environment, returning the same credentials at every boot.
|
|
14
|
+
Additional projects are created through `createOrganizationProject`; their DSNs are read through `listProjectKeys`.
|
|
19
15
|
|
|
20
|
-
|
|
21
|
-
I/O happens **only in the connector**, over an **injected client** (a fake in tests, a real
|
|
22
|
-
token-authed client in prod). `readOnly` rejects writes (vendor-shaped 405). An unmodeled
|
|
23
|
-
operation **fails like Sentry** (4xx JSON `{ detail }`) — never a fabricated success.
|
|
16
|
+
World account doors:
|
|
24
17
|
|
|
25
|
-
|
|
18
|
+
- `POST /_twin/app-credentials`: bootstrap account, first token and env-named project/DSN.
|
|
19
|
+
- `POST /_twin/organizations {slug, name?}`: additional account signup.
|
|
20
|
+
- `POST /_twin/auth-tokens {organization, name, kind?, scopes?}`: organization CI or scoped personal token issuance.
|
|
26
21
|
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
bunx world-sentry serve --port 9000
|
|
30
|
-
# point @sentry/node at DSN: http://twinpublickey...@127.0.0.1:9000/1
|
|
22
|
+
Vendor refresh lists organizations, projects, releases, monitors and check-ins to the end of their declared Link continuation. Events and issues are refreshed by their known subject ids, through the core's declared path mappings. Client keys stay under credential custody. Telemetry receipt is not deployed as an account change.
|
|
23
|
+
Sentry's API rate-limit page gives endpoint-specific response headers, without a numerical global allowance.
|
|
31
24
|
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
```
|
|
38
|
-
|
|
39
|
-
```ts
|
|
40
|
-
import * as Sentry from '@sentry/node';
|
|
41
|
-
Sentry.init({ dsn: 'http://twinpublickey00000000000000000000@127.0.0.1:9000/1' });
|
|
42
|
-
Sentry.captureException(new Error('boom')); // → a grouped issue in the twin
|
|
43
|
-
```
|
|
44
|
-
|
|
45
|
-
## Coverage
|
|
46
|
-
|
|
47
|
-
The honest denominator is the **capability manifest** (`src/sentry-capabilities.ts`): the real
|
|
48
|
-
Sentry surface, ranked core → common → niche, where every `done` capability is proven by an
|
|
49
|
-
**offline** `verify()` that drives real ingest/create → read → assert against the twin. The
|
|
50
|
-
baseline test (`src/sentry-capabilities.test.ts`) asserts via `assertManifestBaseline`: total
|
|
51
|
-
≥ 50, done > 0, **0 regressions**. Every capability is either `done` or `todo`.
|
|
52
|
-
|
|
53
|
-
**Modeled (core → niche):**
|
|
54
|
-
|
|
55
|
-
- **Ingestion** — store + envelope endpoints, DSN public-key auth (header/query/envelope),
|
|
56
|
-
message + exception events, deterministic grouping (incl. number normalization), distinct
|
|
57
|
-
grouping, regression reopen, culprit from the top in-app frame.
|
|
58
|
-
- **Issues** — list (`query` DSL: `is:`, `level:`, free text; `sort=date|freq|new`), retrieve,
|
|
59
|
-
resolve/ignore/unresolve/assign, delete, events + latest event, shortId/permalink/metadata,
|
|
60
|
-
**bulk** resolve/ignore (`?query`/`?id`), **merge** groups, **tag value distributions**
|
|
61
|
-
(`/tags/`, `/tags/:key/`), **grouping hashes** (`/hashes/`), **activity feed** (`/activity/`),
|
|
62
|
-
**user feedback** (`/user-feedback/`: submit + list crash-report comments, linked to the event's issue).
|
|
63
|
-
- **Events** — list, retrieve, tags/level/platform, exception stacktrace entries,
|
|
64
|
-
**attachments listing** (envelope `attachment` items → per-event metadata), **org event facets**
|
|
65
|
-
(`/events-facets/`: tag-value `topValues` distributions across the org's persisted events).
|
|
66
|
-
- **Projects** — list/retrieve/create/update/delete, project **keys/DSN** (list + create +
|
|
67
|
-
toggle/revoke/**delete** + **per-key rate-limit** config), **environments** (distinct envs),
|
|
68
|
-
**ownership rules + CODEOWNERS** (path/url/module → owners, schema-parsed), **inbound data
|
|
69
|
-
filters** (browser-extensions / legacy-browsers / localhost / web-crawlers toggles), **spike
|
|
70
|
-
protection** (org-level enable/disable per project — `/spike-protections/`).
|
|
71
|
-
- **Releases** — create/list/retrieve/update/delete, associate commits, **deploys**, **release
|
|
72
|
-
files / artifact registry** (source-map upload metadata), **commit files** (`/commitfiles/`:
|
|
73
|
-
files changed across a release's commits, flattened from each commit's patch set), **release
|
|
74
|
-
health** (crash-free session tallies over real persisted session envelopes — `/organizations/:org/sessions/`).
|
|
75
|
-
- **Organizations + teams** — list/retrieve/create/update/delete (org), list/create (teams),
|
|
76
|
-
**org members** (invite / list / role change / remove), **team membership** add/remove,
|
|
77
|
-
**SCIM 2.0 provisioning** (Users + Groups CRUD under `/scim/v2/` with faithful SCIM
|
|
78
|
-
envelopes / ListResponse / 409-on-duplicate), **org stats** (`stats_v2` totals over real
|
|
79
|
-
events), **integrations** (GitHub/Slack/PagerDuty install + config CRUD), **custom dashboards
|
|
80
|
-
+ widgets**, **Discover saved queries**.
|
|
81
|
-
- **Alerts + webhooks** — issue alert rules with **actions** (email/Slack/PagerDuty/MS Teams,
|
|
82
|
-
validated per-type), **metric alert rules** (`/alert-rules/`: aggregate + dataset + thresholds
|
|
83
|
-
with critical/warning triggers), **signed** (HMAC-SHA256 `Sentry-Hook-Signature`) webhooks on
|
|
84
|
-
**new-issue** + **regression** via an **injected deliverer** (offline `verify()`).
|
|
85
|
-
- **Mirror UI** — Issues stream (grouped errors: count / last-seen / level / status), Issue
|
|
86
|
-
detail (latest-event stacktrace + tags), **Dashboards** (custom widgets), **Discover** (query
|
|
87
|
-
builder scaffold + saved queries), Releases, Projects, **Alerts** (issue alert rules),
|
|
88
|
-
**Settings** (general / client keys-DSN / environments) — all backed by real twin state.
|
|
89
|
-
- **Connector** — pull (issues/projects/releases) + push (issue triage: resolve/ignore/assign)
|
|
90
|
-
over an injected executor, with confirm + idempotent re-push.
|
|
91
|
-
|
|
92
|
-
**Planned (`todo`) — the deeper engines Sentry runs that this twin has not built yet:**
|
|
93
|
-
|
|
94
|
-
- **Symbolication** (`sentry.events.symbolication`) — de-minify stacktrace frames against uploaded
|
|
95
|
-
source maps and debug files. Raw frames and the artifact registry are already faithful.
|
|
96
|
-
- **Span percentile aggregation** (`sentry.performance.span_aggregation`) — p50/p75/p95 computed
|
|
97
|
-
over the transaction and span events the twin already stores, plus the trace and time-series read
|
|
98
|
-
endpoints that serve it.
|
|
99
|
-
- **Session Replay segment ingest** (`sentry.replay.segment_ingest`) — accept and persist the
|
|
100
|
-
recorded rrweb/DOM segment uploads and serve the replay list, detail and segment reads.
|
|
101
|
-
- **Continuous profiling** (`sentry.performance.profiling`) — accept sampled stack-profile envelopes
|
|
102
|
-
and serve the flamegraph aggregation computed over them.
|
|
103
|
-
- **Grouping enhancements** (`sentry.ingest.grouping_enhancements`) — stack-aware
|
|
104
|
-
grouping-enhancement rules, fingerprint rules and frame heuristics on top of the deterministic
|
|
105
|
-
base fingerprint (exception type + value + culprit, or message, numbers normalized), which is
|
|
106
|
-
documented and already faithful-but-simple.
|
|
107
|
-
- **Cron monitors** (`sentry.crons.monitors`) — check-in endpoints plus a deterministic
|
|
108
|
-
heartbeat-miss detection engine over stored check-ins.
|
|
109
|
-
|
|
110
|
-
Several config-modeled surfaces persist and round-trip their CONFIG faithfully while their live
|
|
111
|
-
EXECUTION is likewise unbuilt: metric-alert threshold evaluation/firing, Discover arbitrary query
|
|
112
|
-
execution (the builder and saved queries are real), and attachment binary download (the metadata
|
|
113
|
-
listing is real; the bytes need a blob store). Alert-action config persists and round-trips, and no
|
|
114
|
-
notification is sent. Release-health crash-free counts ARE real exact tallies over persisted
|
|
115
|
-
sessions; only the time-series rollup is absent.
|
|
116
|
-
|
|
117
|
-
## Architecture
|
|
118
|
-
|
|
119
|
-
State and execution follow the shared [model](../../../docs/concepts/the-model.md) and
|
|
120
|
-
[architecture](../../../docs/contributing/architecture.md). The kernel owns storage and execution
|
|
121
|
-
mechanics; this package owns vendor semantics. Conformance tooling is a development dependency.
|
|
122
|
-
The [generated index](../../../generated/INDEX.md) records this package's protocol standing.
|
|
123
|
-
|
|
124
|
-
## Rate budget — the fail-closed backstop on live calls
|
|
125
|
-
|
|
126
|
-
`liveSentryExecute` is the **one place** this pack issues a live request, so every call it makes is charged
|
|
127
|
-
against a persistent, fail-closed spend ledger **before** the request goes out. Past the ceiling, or
|
|
128
|
-
while a `Retry-After`/429 cooldown is armed, it **throws instead of calling**. The ledger is keyed by
|
|
129
|
-
vendor and a hash of the credential (limits are per credential, so it is deliberately *not*
|
|
130
|
-
cwd-scoped) and persists across processes, so a fresh process does not get a fresh allowance; a
|
|
131
|
-
corrupt ledger counts as a **full** window rather than zero spend. There is no option to disable it,
|
|
132
|
-
and no value you can pass for `budget` that yields an unguarded client — an injected budget is
|
|
133
|
-
validated by *method identity*, so a subclass or a `Proxy` that replaces `checkBudget` is refused.
|
|
134
|
-
|
|
135
|
-
The declared numbers: **60 weighted units / 60s at weight 2 = 30 calls/minute — exactly the kernel's austere fallback**, because Sentry publishes *no* figure at all (per-endpoint windows, unstated). What the guard buys for an unknowable limit is the **cooldown**: `X-Sentry-Rate-Limit-Remaining: 0` and `Retry-After` become a persisted client-side stop instead of a retry storm. Issue/event list reads cost 4 — the paginated firehose the docs tell you not to poll.
|
|
136
|
-
|
|
137
|
-
The mechanism is **shared and vendor-agnostic** — it lives in the kernel (`@volter/world-core` →
|
|
138
|
-
`packages/world-core/src/rateBudget.ts`); what lives here in [`src/sentry-budget.ts`](src/sentry-budget.ts) is this vendor's
|
|
139
|
-
**declaration** (window, ceiling, per-endpoint weights, and a `reason` citing the limits above) plus
|
|
140
|
-
the vendor-bound `SentryBudget`. The rule is ratified as
|
|
141
|
-
[../../../docs/contributing/architecture.md](../../../docs/contributing/architecture.md) **D8**, and the kernel module's header documents what the
|
|
142
|
-
guard does *not* guarantee — read that before trusting it.
|
|
25
|
+
Every other API operation is the declared gap. Source maps are retained and assembled, without server symbolication.
|
|
26
|
+
Grouping follows explicit fingerprints, stack frames, exception or message; Sentry's configurable grouping engine is
|
|
27
|
+
not reproduced. Repository integrations, release deploys, team membership and additional client-key creation are
|
|
28
|
+
outside the demanded calls. Cron outcomes come from received check-ins; scheduled missed/timeout outcomes are not
|
|
29
|
+
synthesized. [STANDING.md](../STANDING.md) owns the procedure's form.
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
# Sentry's API
|
|
2
|
+
|
|
3
|
+
- **Why this document:** Sentry's own OpenAPI document for its web API, as it publishes it for its API reference:
|
|
4
|
+
getsentry/sentry-api-schema at `98ec014705fbecf18c2650097e4630afe51ffd85` (2026-09-29), `openapi-derefed.json`,
|
|
5
|
+
vendored gzipped and unchanged (`openapi.json.gz`).
|
|
6
|
+
- **Servers:** `https://{region}.sentry.io` (us, de); sentry-cli and the applications call `https://sentry.io/api/0/`.
|
|
7
|
+
- **Corrections** (`patches.json`, each with its evidence): the chunk upload (`/chunk-upload/`) and artifact bundle assembly
|
|
8
|
+
(`/artifactbundle/assemble/`) that sentry-cli uploads source maps through; and a single project's release paths
|
|
9
|
+
sentry-cli uses; and its previous-release-with-commits lookup during local git fallback. Their evidence is getsentry/sentry at `2efdd4760a75a3d395e3534b7f66a7fbb0c3f22e` and
|
|
10
|
+
getsentry/sentry-cli 2.58.4 and 2.58.5 (the versions the applications lock).
|
|
11
|
+
|
|
12
|
+
- **Resource normalization:** the five refresh reads reference named copies of their unchanged inline response schemas. The patches cite each operation in the pinned upstream document; no wire field is added or removed.
|
|
13
|
+
|
|
14
|
+
- **Vendored document SHA-256** (openapi.json.gz, decompressed bytes where gzipped): `bb07d2bb747b10b31c14722066cd1d11bd0bb76eea8dcfb5f341b4c421c1c1f9`.
|
|
15
|
+
- **Read by:** Codex contributor.
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
[
|
|
2
|
+
{
|
|
3
|
+
"title": "Event read requires the project scope",
|
|
4
|
+
"operation": "getProjectEvent",
|
|
5
|
+
"source": "https://raw.githubusercontent.com/getsentry/sentry-api-schema/98ec014705fbecf18c2650097e4630afe51ffd85/openapi-derefed.json",
|
|
6
|
+
"means": "getProjectEvent",
|
|
7
|
+
"status": 403,
|
|
8
|
+
"output": {
|
|
9
|
+
"detail": "You do not have permission to perform this action."
|
|
10
|
+
}
|
|
11
|
+
}
|
|
12
|
+
]
|
|
Binary file
|