From ff7caec49e36676e7ff32e574ba7385de2645dd7 Mon Sep 17 00:00:00 2001 From: valgulnecron <39313199+ValgulNecron@users.noreply.github.com> Date: Tue, 6 Oct 2026 23:34:08 +0200 Subject: [PATCH 01/47] docs(specs): add 022 default telemetry dashboard spec Spec, plan, research, data model, contracts, quickstart and tasks for a default telemetry destination, extended opt-out telemetry with a first-login notice, signed reports with install-ID claims, and a private receiver dashboard with a small public summary. OD-1 (the default domain) is open and blocks merge; OD-2 to OD-4 are ruled. Co-Authored-By: Claude Opus 5.5 Claude-Session: https://claude.ai/code/session_01S7krnvWjW1a6bW5doxiVHB Signed-off-by: valgulnecron <39313199+ValgulNecron@users.noreply.github.com> --- .../OPEN-DECISIONS.md | 75 +++ .../checklists/requirements.md | 58 ++ .../contracts/api-telemetry-http.md | 94 +++ .../contracts/install-config.md | 85 +++ .../contracts/receiver-http.md | 126 ++++ .../contracts/report-schema.md | 122 ++++ .../data-model.md | 241 +++++++ specs/022-default-telemetry-dashboard/plan.md | 244 ++++++++ .../quickstart.md | 145 +++++ .../research.md | 428 +++++++++++++ specs/022-default-telemetry-dashboard/spec.md | 437 +++++++++++++ .../022-default-telemetry-dashboard/tasks.md | 587 ++++++++++++++++++ 12 files changed, 2642 insertions(+) create mode 100644 specs/022-default-telemetry-dashboard/OPEN-DECISIONS.md create mode 100644 specs/022-default-telemetry-dashboard/checklists/requirements.md create mode 100644 specs/022-default-telemetry-dashboard/contracts/api-telemetry-http.md create mode 100644 specs/022-default-telemetry-dashboard/contracts/install-config.md create mode 100644 specs/022-default-telemetry-dashboard/contracts/receiver-http.md create mode 100644 specs/022-default-telemetry-dashboard/contracts/report-schema.md create mode 100644 specs/022-default-telemetry-dashboard/data-model.md create mode 100644 specs/022-default-telemetry-dashboard/plan.md create mode 100644 specs/022-default-telemetry-dashboard/quickstart.md create mode 100644 specs/022-default-telemetry-dashboard/research.md create mode 100644 specs/022-default-telemetry-dashboard/spec.md create mode 100644 specs/022-default-telemetry-dashboard/tasks.md diff --git a/specs/022-default-telemetry-dashboard/OPEN-DECISIONS.md b/specs/022-default-telemetry-dashboard/OPEN-DECISIONS.md new file mode 100644 index 000000000..1d0d49025 --- /dev/null +++ b/specs/022-default-telemetry-dashboard/OPEN-DECISIONS.md @@ -0,0 +1,75 @@ +# Open Decisions + +**Status**: 1 open (OD-1), 3 ruled (OD-2, OD-3, OD-4) on 2026-10-06. + +Per CLAUDE.md rule 10, an open value MUST NOT be committed as a settled contract in code, chart defaults or docs until it is ruled here. + +--- + +### OD-1: Default telemetry domain + +**Status**: OPEN. **Blocks merge of this feature's PR.** + +**Question**: Which domain (and ingest path) is the project's default telemetry destination? + +**Why it matters**: FR-001 needs a concrete default. FR-002 forbids shipping a placeholder. Until this is ruled, the default stays unset, stock installs keep today's behavior, and the opt-out default (FR-003) has no effect. + +**Context**: the project website has no custom domain yet. It is served from GitHub Pages at `valgulnecron.github.io/gameplane-website` (`website/src/config.ts`: `CUSTOM_DOMAIN` is undefined). GitHub Pages is static hosting, so it can't receive reports. + +**Options**: +1. Register one project domain and use `telemetry.`. The website can move to the same domain later. +2. A dedicated domain used only for telemetry. + +**Recommended default**: (1). A host users already know from the docs looks more trustworthy in the first-login notice and the Admin Settings destination line (FR-004, FR-017), and there is only one domain to register and renew. + +**Interim ruling (2026-10-06, user)**: The domain is not decided yet. +- Implementation proceeds with `telemetry.DefaultEndpoint` left **blank**, as FR-002 allows. +- The feature's PR **MUST NOT merge until a domain is chosen**, recorded here as RULED, and set in `DefaultEndpoint`. + +**How the block is enforced** (plan.md, Merge gate): +- The PR stays a **draft** until this decision is ruled. GitHub does not allow merging drafts, and the master ruleset has no required status checks that could block the merge instead. +- A dedicated CI job, `telemetry-default-gate`, fails while `DefaultEndpoint` is empty or isn't `https`. + +**Blocks**: +- merge of the feature PR +- FR-001's default value +- the FR-008 upgrade notes +- the destination copy in the first-login notice and Admin Settings designs + +--- + +### OD-2: Provider hosting, ownership, and data-handling statement + +**Status**: RULED (2026-10-06, user) + +**Question**: Who runs the default provider, and where is its data-handling statement published? + +**Ruling**: The project maintainers run the default provider. The data-handling statement is a page on the project website, in the `website` submodule. It is linked from: +- the first-login notice (FR-004) +- Admin Settings → Telemetry (FR-017) +- the upgrade notes (FR-008) + +**Consequences**: +- The statement page is new website work. It goes through the submodule's own PR flow, and the website's design-first rule applies only if it needs a new screen layout. +- The dashboard links to the statement through one constant, because the website URL changes once `CUSTOM_DOMAIN` is set (see OD-1). +- The statement states the OD-3 and OD-4 periods. + +--- + +### OD-3: Aggregate retention ceiling + +**Status**: RULED (2026-10-06, user) + +**Question**: How long does the provider keep daily aggregates? FR-020 sets a floor of 12 months. + +**Ruling**: **24 months**. `RETENTION_DAYS` defaults to `730`, the Helm value `api.telemetry.receiver.retentionDays` defaults to `730`, and the enforced minimum is 365. Two years covers year-over-year comparison, and the stated limit appears in the OD-2 statement. + +--- + +### OD-4: Activity-record inactivity expiry + +**Status**: RULED (2026-10-06, user) + +**Question**: How long after an install's last report does the provider delete its activity record? An activity record holds the transformed install ID, the first-seen date, the last-seen date and the last version (FR-015). + +**Ruling**: **90 days**. `ACTIVITY_EXPIRY_DAYS` defaults to `90`, the Helm value `api.telemetry.receiver.activityExpiryDays` defaults to `90`, and the enforced minimum is 31, because the expiry must stay longer than the 30-day lapsed window (US5). This keeps new and lapsed counts accurate for installs that go quiet for a season, and the period appears in the OD-2 statement. diff --git a/specs/022-default-telemetry-dashboard/checklists/requirements.md b/specs/022-default-telemetry-dashboard/checklists/requirements.md new file mode 100644 index 000000000..c2555491f --- /dev/null +++ b/specs/022-default-telemetry-dashboard/checklists/requirements.md @@ -0,0 +1,58 @@ +# Specification Quality Checklist: Default telemetry destination and telemetry dashboard + +**Purpose**: Validate specification completeness and quality before proceeding to planning +**Created**: 2026-10-06 +**Feature**: [spec.md](../spec.md) + +## Content Quality + +- [x] No implementation details (languages, frameworks, APIs) +- [x] Focused on user value and business needs +- [x] Written for non-technical stakeholders +- [x] All mandatory sections completed + +## Requirement Completeness + +- [x] No [NEEDS CLARIFICATION] markers remain +- [x] Requirements are testable and unambiguous +- [x] Success criteria are measurable +- [x] Success criteria are technology-agnostic (no implementation details) +- [x] All acceptance scenarios are defined +- [x] Edge cases are identified +- [x] Scope is clearly bounded +- [x] Dependencies and assumptions identified + +## Feature Readiness + +- [x] All functional requirements have clear acceptance criteria +- [x] User scenarios cover primary flows +- [x] Feature meets measurable outcomes defined in Success Criteria +- [x] No implementation details leak into specification + +## Notes + +- Iteration 1 left two clarification markers. In iteration 2 (2026-10-06) the user answered them: + - Q1: opt-out for new installs, with a first-login notice. + - Q2: a private receiver-hosted dashboard plus a public summary API limited to headline counts. + + The answers are recorded in spec.md → Clarifications. All items pass. +- Iteration 3 (2026-10-06) added extended telemetry: + - Q3: all four categories (environment, game usage, feature adoption, install ID). + - Q4: two tiers, both on by default for new installs. + + FRs were renumbered to FR-001 through FR-034. OD-4 (activity-record expiry) was added. No new markers; all items still pass. +- Iteration 4 (2026-10-06) added report signing at the user's request: + - Q5: the key is derived from a random secret in the install's database plus the install ID. + - Q6: mismatches are refused, and the install rotates its ID on a claim conflict. + + It added US7, FR-035 to FR-038 (appended, so earlier numbers are unchanged), SC-014 and SC-015, and updated FR-011, FR-012, FR-013 and FR-015. All items still pass. +- Iteration 5 (2026-10-06), from the analysis remediation during implement: + - Q7: turning basic off also turns extended off, and the UI disables the extended switch (FR-003, FR-019). + - Q8: operational metrics move behind the dashboard credential (FR-030). + - Q9: a provider runbook is added (T093). + - Q10: the provider dashboard is designed in `telemetry-receiver/telemetry-dashboard.pen`. + + No new markers; all items still pass. +- The domain is deliberately left unsettled in OPEN-DECISIONS OD-1, as CLAUDE.md rule 10 requires. It is not a clarification marker. The user ruled on 2026-10-06 that the feature PR is blocked until OD-1 is ruled. +- The Assumptions section cites repo process (Pencil design-first, E2E coverage, `telemetry-receiver/specs.md` upkeep) as governance constraints. These describe process, not implementation, and are kept on purpose. +- Size bands in US4 scenario 3 restate the provider's existing published buckets, so they are a product contract rather than an implementation choice. diff --git a/specs/022-default-telemetry-dashboard/contracts/api-telemetry-http.md b/specs/022-default-telemetry-dashboard/contracts/api-telemetry-http.md new file mode 100644 index 000000000..65d53ba26 --- /dev/null +++ b/specs/022-default-telemetry-dashboard/contracts/api-telemetry-http.md @@ -0,0 +1,94 @@ +# Contract: Gameplane API telemetry endpoints + +**Requirements**: FR-003–FR-005, FR-012, FR-017–FR-019, FR-035, FR-037. **Research**: R10–R13, R18, R20. + +All routes are behind session auth. RBAC entries are added to `api/internal/rbac/rbac.go` before the `{segment: "admin", perm: "*"}` fallback: + +```go +{method: "GET", segment: "admin", prefix: "/admin/telemetry", perm: "config:read"}, +{segment: "admin", prefix: "/admin/telemetry", perm: "config:manage"}, +``` + +## `GET /admin/telemetry` (`config:read`) + +```json +{ + "destination": { "kind": "default", "host": "telemetry.example.org" }, + "operatorDisabled": false, + "consent": { "basic": true, "extended": true, "source": "default" }, + "installId": "3f1c2a9e-8b4d-4e57-9a61-0c2d7e5b9f10", + "preview": { "version": "0.3.0", "servers": 3, "templates": 7, "ext": { "...": "see report-schema.md" } }, + "status": { "lastAttemptAt": "2026-10-06T09:12:44Z", "lastSuccessAt": "2026-10-06T09:12:44Z", "lastOutcome": "ok", "lastIdRotationAt": null } +} +``` + +- **`destination.kind`** is one of `default`, `custom`, `bundled`, `disabled` or `none`. `destination.host` is only the URL host, never the path, query or credentials, and is `null` for `disabled` and `none` (FR-017). +- **`consent`** holds the stored choice. When `operatorDisabled` is true, the stored values are reported but have no effect. +- **`installId`** is `null` whenever extended is off (FR-012). +- **`preview`** is the exact report the reporter would send now, built by the same function (SC-006). It is `null` when basic is off or the destination is `disabled` or `none`. When collection fails partway, the fields that failed are reported as they would be sent: `0` for counts, `other` for categories. +- **`status.lastOutcome`** is `never`, `ok` or `failed`. A failure detail is never exposed; the UI renders a fixed phrase (US3 scenario 2). +- **`status.lastIdRotationAt`** is when the reporter last replaced the ID because the receiver said it was claimed by another key (FR-037), or `null`. The UI renders "Install ID replaced on : the destination reported it was in use by another key." +- **The preview's `ext`** includes `key` (the public key for the current ID) and `sentAt` (the preview time). The signature header isn't shown. +- **`signing_secret` is never returned** by this or any other endpoint (FR-012). + +## `PUT /admin/config/telemetry` (`config:manage`, existing route `PUT /admin/config/{section}`, `api/internal/handlers/config.go:56`) + +Body: `{"sendMetrics": bool, "extended": bool}`. + +| Case | Result | +|---|---| +| `sendMetrics: false` (whatever `extended` says) | Saved as `extended: false` as well, then continues as "Valid" below (FR-003). | +| Operator disabled telemetry (`kind = disabled`) | `409` "telemetry is disabled by the operator" | +| Valid | `200`. In the same transaction: the config row is saved, `consent_source` becomes `admin`, the install ID is created or deleted to match `extended`, and the schedule opens (`next_due_at` set as in R12) or closes (`NULL`). | + +The response body is unchanged from the current section save. + +## `POST /admin/telemetry/install-id` (`config:manage`) + +Rotates the install ID. + +- `200 {"installId": ""}` on success. +- `409` when extended is off (there is no ID to reset). + +The old ID is discarded and never sent again (US3 scenario 4). + +## `GET /admin/telemetry/notice` (`config:manage`; a user without it gets `{"pending": false}`) + +```json +{ + "pending": true, + "destination": { "kind": "default", "host": "telemetry.example.org" }, + "fields": { + "basic": ["version", "servers", "templates"], + "extended": ["installId", "env.k8s", "env.distro", "env.arch", "env.nodes", "games", "features"] + } +} +``` + +`pending` is computed as in data-model.md under "Notice pending". When it is `false`, the other keys are omitted. + +## `POST /admin/telemetry/notice` (`config:manage`) + +Body: `{"action": "seen" | "keep" | "extended-off" | "all-off"}`. + +| Action | Effect | +|---|---| +| `seen` | Sets `notice_shown_at` if it isn't set yet, and opens the schedule (`next_due_at = now + U(0, 15m)`). Records no ack. Idempotent. | +| `keep` | Ack (`action=keep`). Consent unchanged. | +| `extended-off` | Ack. `extended=false`, `consent_source=admin`, install ID deleted. | +| `all-off` | Ack. `sendMetrics=false`, `extended=false`, `consent_source=admin`, install ID deleted, schedule closed. | + +- Every action returns `204`. +- Every action returns `409` when the notice isn't pending for the caller, except `seen`, which is a no-op in that case. + +## Audit + +Each mutating request above is audited through the existing middleware, as all `/admin/*` writes are. Install IDs are never written to audit `target` or `reason`. + +## Web client (`web/src/lib/api.ts`) + +- `Telemetry.get()` +- `Telemetry.resetInstallId()` +- `Telemetry.notice()` +- `Telemetry.ack(action)` +- `TelemetryCfg` in `web/src/lib/config.ts` gains `extended: boolean`. diff --git a/specs/022-default-telemetry-dashboard/contracts/install-config.md b/specs/022-default-telemetry-dashboard/contracts/install-config.md new file mode 100644 index 000000000..9d994249d --- /dev/null +++ b/specs/022-default-telemetry-dashboard/contracts/install-config.md @@ -0,0 +1,85 @@ +# Contract: install-time configuration (Helm values, API flags and environment) + +**Requirements**: FR-001, FR-002, FR-005, FR-006, FR-009, FR-033; SC-004. **Research**: R3, R12, R13, R15, R17. + +## Helm values (`charts/gameplane/values.yaml`) + +```yaml +api: + telemetry: + # NEW. false = hard off: the API never sends telemetry, whatever the admin + # toggles say. This is the single setting for air-gapped and + # privacy-sensitive clusters (FR-005, SC-004). + enabled: true + # Empty = the project's default provider (compiled into the API; unset + # until OPEN-DECISIONS OD-1 is ruled). Set a URL to send reports to your + # own receiver instead (FR-005, FR-006). + endpoint: "" + authSecretRef: { name: "", key: token } # unchanged + # NEW, testing only. Spacing between reports. Don't change in production. + interval: 24h + receiver: + enabled: false # unchanged; auto-wires the API when endpoint is empty + replicas: 1 # must stay 1 while persistence is enabled (the template fails otherwise) + resources: {} + persistence: # NEW (FR-020) + enabled: true + size: 1Gi + storageClassName: "" + dashboard: # NEW (FR-022, FR-028) + tokenSecretRef: { name: "", key: token } # empty name = no dashboard listener + # Extra NetworkPolicy peers allowed to reach the dashboard port + # (port-forward works without any). + ingressFrom: [] + publicSummary: + enabled: false # NEW (FR-031) + pepperSecretRef: { name: "", key: pepper } # NEW (R5), optional + retentionDays: 730 # NEW (OD-3: 24 months) + activityExpiryDays: 90 # NEW (OD-4) + ingestSourceDailyLimit: 20 # NEW (R6) + trustedProxyCIDRs: [] # NEW (R6) +``` + +All new keys are read with `hasKey` or `dig` guards, so `helm upgrade --reuse-values` from beta.8 renders exactly what it rendered before (the F-214 precedent). + +## How values render + +| Values | API arguments and environment | Destination kind | +|---|---|---| +| `enabled: false` | `--telemetry-disabled` | `disabled` | +| `endpoint: ""`, `receiver.enabled: true` | `--telemetry-endpoint=http://gameplane-telemetry-receiver..svc:8080/ingest`, `GAMEPLANE_TELEMETRY_BUNDLED=true` | `bundled` | +| `endpoint: "https://…"` | `--telemetry-endpoint=https://…` | `custom` | +| `endpoint: ""`, `receiver.enabled: false` | *(no endpoint argument)* | `default`, or `none` while `DefaultEndpoint` is empty | +| `defaultModuleSource.enabled: true` | `--official-module-source=` | — | +| `interval` set | `GAMEPLANE_TELEMETRY_INTERVAL=` | — | + +`enabled: false` takes precedence over both the endpoint and the receiver. The receiver itself is still deployed if `receiver.enabled` is true. + +## API flags and environment (`api/cmd/main.go`) + +| Flag | Env | Default | Change | +|---|---|---|---| +| `--telemetry-endpoint` | `GAMEPLANE_TELEMETRY_ENDPOINT` | `""` | **Semantics change**: empty now means "use `telemetry.DefaultEndpoint`" rather than "off". This is identical in behaviour while the constant is empty. | +| `--telemetry-disabled` | `GAMEPLANE_TELEMETRY_DISABLED` | `false` | New. | +| — | `GAMEPLANE_TELEMETRY_BUNDLED` | `false` | New. Set only by the chart. | +| `--telemetry-interval` | `GAMEPLANE_TELEMETRY_INTERVAL` | `24h` | New. Minimum `1m`; lower values are a startup error. | +| `--official-module-source` | `GAMEPLANE_OFFICIAL_MODULE_SOURCE` | `""` | New. Empty means every module counts as `custom`. | +| — | `GAMEPLANE_TELEMETRY_AUTH` | `""` | Unchanged. | + +`telemetry.DefaultEndpoint` (`api/internal/telemetry`) is the only place the project URL lives (FR-002). It must use `https`; a non-https value fails startup (FR-009). + +## Receiver chart rendering (`templates/telemetry-receiver.yaml`) + +- **Workload.** The Deployment keeps `replicas: {{ $r.replicas }}`, adds `strategy: Recreate`, and fails rendering when `replicas > 1 && persistence.enabled`. +- **Volumes.** When `persistence.enabled`, a PVC `gameplane-telemetry-receiver-data` is mounted at `/data`. Otherwise an `emptyDir` is mounted there and the template adds a NOTES warning. In both cases the root filesystem stays read-only. +- **Environment.** `DATA_DIR=/data`, `DASHBOARD_TOKEN` and `ID_PEPPER` from their `secretKeyRef`s when named, `PUBLIC_SUMMARY`, `RETENTION_DAYS`, `ACTIVITY_EXPIRY_DAYS`, `INGEST_SOURCE_DAILY_LIMIT` and `TRUSTED_PROXY_CIDRS`. +- **Service.** Adds port `dashboard` (8081 → 8081) when the dashboard token is named. +- **NetworkPolicy.** Port 8080 admits only the API pod. Port 8081 admits `dashboard.ingressFrom` peers, plus the Prometheus namespace when `serviceMonitors.scrapeNamespaceSelector` is set; that rule moves from 8080 to 8081, because `/metrics` now lives there. With no peers configured, port-forward still works. +- **ServiceMonitor** (`templates/servicemonitors.yaml`). It renders only when `dashboard.tokenSecretRef.name` is set, and scrapes port `dashboard`, path `/metrics`, with `bearerTokenSecret` pointing at that Secret. When `serviceMonitors.enabled` and the receiver are on without a token, NOTES prints a warning and no ServiceMonitor is rendered. + +## Test and dev installs (research R17) + +`deploy/kind/e2e.sh` and `deploy/kind/up.sh` must pass `--set api.telemetry.receiver.enabled=true`, so that no test or dev install ever reaches the project provider. The CI `helm template` checks (`.github/workflows/ci.yaml:775-804`) gain assertions for: + +- the `disabled`, `bundled` and `custom` renderings above +- `--reuse-values` compatibility with beta.8 diff --git a/specs/022-default-telemetry-dashboard/contracts/receiver-http.md b/specs/022-default-telemetry-dashboard/contracts/receiver-http.md new file mode 100644 index 000000000..a0de232ef --- /dev/null +++ b/specs/022-default-telemetry-dashboard/contracts/receiver-http.md @@ -0,0 +1,126 @@ +# Contract: telemetry-receiver HTTP surface + +**Requirements**: FR-014, FR-016, FR-020–FR-033, FR-035–FR-038. **Research**: R3, R5–R9, R20. + +The receiver runs two listeners. The dashboard listener is never started unless `DASHBOARD_TOKEN` is set. + +## Public listener: `LISTEN_ADDR` (default `:8080`) + +| Route | Method | Auth | Success | Failures | +|---|---|---|---|---| +| `/ingest` | POST | `AUTH_TOKEN` when set (unchanged). Reports with `ext` also need a valid `Gameplane-Telemetry-Signature`. | `204`, including for same-day duplicates (counted only in `duplicates`) | `400` structural error ([report-schema.md](report-schema.md)); `401` bad or missing token; `403` `bad_signature`, `stale` or `replay`; `409` `id_claimed`; `413` body over 16 KiB; `429` per-source daily limit reached | +| `/v1/summary` | GET | none | `200` JSON (below) | `404` when `PUBLIC_SUMMARY` is not `true`; `429` per-source rate limit | +| `/healthz` | GET | none | `200 ok` | — | + +### `GET /v1/summary` response (FR-029, FR-030) + +```json +{ + "asOf": "2026-10-05", + "reportsLatestDay": 412, + "reports30d": 11873, + "reportsTotal": 98211, + "activeInstalls30d": 1290 +} +``` + +- The response has exactly these five keys and nothing else. +- `asOf` is the latest complete UTC day. +- Response headers: + - `Content-Type: application/json` + - `Cache-Control: public, max-age=3600` + - `ETag` + - `Access-Control-Allow-Origin: *` +- The response is served from a snapshot recomputed at most every 5 minutes. +- With no data at all, every count is `0` and `asOf` is the previous UTC day. The summary is a counter, not a chart, so zeros here are accurate. + +The public listener answers `404` for `/metrics`. Operational metrics live only on the dashboard listener, behind the token (FR-030). + +### New `/metrics` series (operations only) + +- `gameplane_telemetry_duplicates_total` +- `gameplane_telemetry_rate_limited_total{route}` +- `gameplane_telemetry_extended_reports_total` +- `gameplane_telemetry_refused_total{reason="bad_signature"|"stale"|"id_claimed"|"replay"}` + +The existing series keep their names and in-memory semantics. + +## Dashboard listener: `DASHBOARD_LISTEN_ADDR` (default `:8081`, only when `DASHBOARD_TOKEN` is set) + +| Route | Method | Auth | Success | When unauthenticated | +|---|---|---|---|---| +| `/login` | GET | none | Login form, which contains no data | — | +| `/login` | POST | form field `token`, same-origin `Origin` required | `303` to `/`, sets the session cookie | Login form re-rendered with "Invalid credentials". `429` after 5 attempts per minute per source. | +| `/logout` | POST | session, same-origin | `303` to `/login`, clears the cookie | `303` to `/login` | +| `/` | GET | session | Overview HTML for `?range=7\|30\|90\|365` (default 30; invalid values become 30) | `303` to `/login` | +| `/api/v1/views` | GET | session cookie, or `Authorization: Bearer ` | `200` JSON with the same view model the HTML renders | `401 {"error":"unauthorized"}` | +| `/metrics` | GET | `Authorization: Bearer ` only | Prometheus text (existing series, plus the new counters below) | `401 {"error":"unauthorized"}` | +| `/static/*` | GET | none | Embedded CSS and icons only | — | + +**Session cookie**: `gp_telemetry_session`, attributes `HttpOnly; Secure; SameSite=Strict; Path=/; Max-Age=43200`. The value is `expiry || HMAC(K, expiry)`, where `K` is derived from `DASHBOARD_TOKEN` (research R8). Changing the token invalidates every session. + +**Headers on every dashboard response**: + +- `Content-Security-Policy: default-src 'none'; style-src 'self'; img-src 'self' data:; form-action 'self'; frame-ancestors 'none'; base-uri 'none'` +- `X-Content-Type-Options: nosniff` +- `Referrer-Policy: no-referrer` +- `Cache-Control: no-store` + +**Refusal invariant (FR-023, SC-011)**: an unauthenticated response never contains: + +- any figure +- any date other than the page chrome +- any version, category or module name +- anything that varies with whether data exists + +An E2E check (R17) compares the unauthenticated response against the login page from an empty receiver. + +### `GET /api/v1/views` response shape + +```json +{ + "range": 30, + "asOf": "2026-10-05", + "empty": false, + "basic": { + "reportsPerDay": [{"day": "2026-09-06", "reports": 401}], + "versions": [{"label": "0.3.0", "reports": 8123}, {"label": "Other", "reports": 52}, {"label": "Invalid", "reports": 3}], + "fleet": { + "servers": {"bands": [{"le": "0", "reports": 120}], "median": 2}, + "templates": {"bands": [{"le": "0", "reports": 15}], "median": 4} + }, + "latestDay": {"serversTotal": 1840, "templatesTotal": 2611} + }, + "extended": { + "coverage": 0.71, + "installs": {"active1d": 290, "active7d": 812, "active30d": 1290}, + "newPerDay": [{"day": "2026-09-06", "count": 12}], + "lapsedPerDay": [{"day": "2026-09-06", "count": 4}], + "versionsByInstall": {"windowDays": 30, "items": [{"label": "0.3.0", "installs": 1011}]}, + "env": {"k8s": [{"label": "1.31", "share": 0.42}], "distro": [], "arch": [], "nodes": []}, + "games": [{"module": "minecraft-java", "installsShare": 0.63, "serversPerDay": 2140.5}, {"module": "custom", "installsShare": 0.08, "serversPerDay": 77.1}], + "features": [{"feature": "wakeOnConnect", "share": 0.18}], + "tunnels": [{"label": "playit", "share": 0.05}], + "clusters": [], "db": [], "language": [] + } +} +``` + +- When the range has no data: `empty: true`, with `basic` and `extended` set to `null`. The HTML renders the empty state (FR-027). +- When there is basic data but no extended reports: `extended: null`, and the HTML explains that no reports in the range included extended data. + +## Configuration + +| Variable | Default | Meaning | +|---|---|---| +| `LISTEN_ADDR` | `:8080` | Public listener. | +| `DASHBOARD_LISTEN_ADDR` | `:8081` | Dashboard listener. | +| `DASHBOARD_TOKEN` | *(empty)* | Dashboard credential, from a Secret. Empty means no dashboard listener. | +| `AUTH_TOKEN` | *(empty)* | Ingest token (unchanged). | +| `DATA_DIR` | *(empty)* | SQLite directory. Empty means in-memory, and a startup warning is logged. | +| `PUBLIC_SUMMARY` | `false` | Enables `/v1/summary`. | +| `TRUSTED_PROXY_CIDRS` | *(empty)* | Comma-separated CIDRs whose `X-Forwarded-For` is trusted. | +| `INGEST_SOURCE_DAILY_LIMIT` | `20` | Accepted reports per source per UTC day. `0` means unlimited. | +| `RETENTION_DAYS` | `730` (OD-3) | Daily aggregate retention. Minimum 365. | +| `ACTIVITY_EXPIRY_DAYS` | `90` (OD-4) | Activity record expiry. Minimum 31. | +| `ID_PEPPER` | *(empty)* | HMAC pepper for install IDs, from a Secret. Empty means one is generated and kept in `meta`. | diff --git a/specs/022-default-telemetry-dashboard/contracts/report-schema.md b/specs/022-default-telemetry-dashboard/contracts/report-schema.md new file mode 100644 index 000000000..459e6e8bc --- /dev/null +++ b/specs/022-default-telemetry-dashboard/contracts/report-schema.md @@ -0,0 +1,122 @@ +# Contract: Telemetry report schema + +**Owner**: `telemetryschema/` (research R1). The API builds reports with this package and the receiver decodes them with it. +**Requirements**: FR-010, FR-011, FR-013, FR-016, FR-035–FR-038. + +## Body + +The body is one JSON object. Keys are case-sensitive. Duplicate keys, unknown keys, `null` values and trailing content are all rejected. The body may be at most 16 KiB, which is unchanged. + +### Basic tier (unchanged) + +```json +{ "version": "0.3.0", "servers": 3, "templates": 7 } +``` + +### Basic and extended tiers + +```json +{ + "version": "0.3.0", + "servers": 3, + "templates": 7, + "ext": { + "schema": 1, + "installId": "3f1c2a9e-8b4d-4e57-9a61-0c2d7e5b9f10", + "env": { "k8s": "1.31", "distro": "k3s", "arch": ["amd64"], "nodes": "1" }, + "games": { "official": { "minecraft-java": 2, "terraria": 1 }, "custom": 0 }, + "features": { + "wakeOnConnect": true, "tunnels": ["playit"], "capture": false, + "backups": true, "sso": false, "auditForwarding": false, + "clusters": "1", "db": "sqlite", "language": "en" + }, + "key": "pV0mY3Qn8wK2b7cXlR4sTt9uJ1eHaZ6dFgQmNoP5rSk", + "sentAt": "2026-10-06T09:12:44Z" + } +} +``` + +Sent with the header: + +```text +Gameplane-Telemetry-Signature: ed25519= +``` + +## Field rules + +| Path | Type | Allowed values | When the value doesn't fit | +|---|---|---|---| +| `version` | string | `^[A-Za-z0-9][A-Za-z0-9._+-]{0,31}$` | The receiver buckets it as `invalid`. | +| `servers`, `templates` | integer | ≥ 0 | 400 | +| `ext` | object | optional | — | +| `ext.schema` | integer | `1` | A higher value gets 400, which triggers the API's basic-only fallback. | +| `ext.installId` | string | lowercase UUIDv4 | The receiver ignores `ext` and counts the report as basic. | +| `ext.env.k8s` | string | `1.`, where minor is 1–3 digits | `other` | +| `ext.env.distro` | string | `k3s` `rke2` `k0s` `eks` `gke` `aks` `openshift` `microk8s` `minikube` `kind` `doks` `talos` `other` | `other` | +| `ext.env.arch` | string[] | non-empty, sorted, unique, drawn from `amd64` `arm64` `arm` `ppc64le` `s390x` `riscv64` `other` | Unknown members become `other`. An empty array gets 400. | +| `ext.env.nodes` | string | `1` `2-3` `4-10` `11-50` `51+` | `other` | +| `ext.games.official` | object | keys are module names from the embedded catalog, values are integers ≥ 1 | Unknown keys are added to `custom`. A non-positive value gets 400. | +| `ext.games.custom` | integer | ≥ 0 | 400 | +| `ext.features.wakeOnConnect`, `capture`, `backups`, `sso`, `auditForwarding` | boolean | — | 400 | +| `ext.features.tunnels` | string[] | sorted, unique, drawn from `frp` `tailscale` `playit` (may be empty) | Unknown members become `other`. | +| `ext.features.clusters` | string | `1` `2-3` `4-10` `11+` | `other` | +| `ext.features.db` | string | `sqlite` `postgres` | `other` | +| `ext.features.language` | string | `en` (spec 019 extends this list) | `other` | +| `ext.key` | string | base64url (unpadded) encoding of a 32-byte Ed25519 public key | 400 | +| `ext.sentAt` | string | RFC 3339 UTC | 400 if it doesn't parse. 403 `stale` if it is outside `[now − 36h, now + 1h]`. | + +## Signature and claim (FR-035–FR-038, research R20) + +**Key derivation** (install side, `telemetryschema.DeriveKey`): + +```text +seed = HKDF-SHA256(ikm = signing_secret, salt = installId, + info = "gameplane-telemetry-signing-v1", L = 32) +priv = ed25519.NewKeyFromSeed(seed) +``` + +- `signing_secret` is 32 random bytes created once on the install. It never leaves the install. +- The key is unique to the ID, so a new ID always means a new key. + +**Signing**: `Gameplane-Telemetry-Signature: ed25519=`. +- `body` is the exact bytes POSTed. +- The header is required whenever `ext` is present, and absent on basic-only reports. + +**Verification** (receiver, `telemetryschema.Verify`, then claim lookup). Checks run in this order, and the first failure wins: + +| Check | Failure | +|---|---| +| Header present and well-formed, and the signature verifies with `ext.key` over the body | 403 `{"error":"bad_signature"}` | +| `sentAt` within `[now − 36h, now + 1h]` | 403 `{"error":"stale"}` | +| The ID is unclaimed (it gets claimed: `key_fp = SHA-256(key)`), or it is claimed with the same `key_fp` | 409 `{"error":"id_claimed"}` | +| `sentAt` is later than the ID's last accepted `sentAt` | 403 `{"error":"replay"}` | + +A refused report changes no stored data. + +## Band functions (exported by `telemetryschema`) + +| Function | Input → band | +|---|---| +| `NodeBand(n)` | 1 → `1`; 2–3 → `2-3`; 4–10 → `4-10`; 11–50 → `11-50`; over 50 → `51+` | +| `ClusterBand(n)` | n counts the local cluster plus registered clusters. 1 → `1`; 2–3 → `2-3`; 4–10 → `4-10`; over 10 → `11+` | +| `FleetBands` | `0,1,2,5,10,25,50,100,250,+Inf`, the same buckets as today's Prometheus histograms | + +## Privacy guarantees enforced by the schema + +- No field can hold free text. Every string is matched against a pattern or an enumeration, or is the install ID, the public key, or the send time. +- Module names can come only from the embedded catalog. +- Player counts, names, namespaces, hostnames, addresses, and custom module names cannot be represented in the schema. + +## Catalog + +`telemetryschema/catalog.txt` lists one official module name per line, generated from `charts/gameplane/values.yaml` → `defaultModuleSource.oci.modules`. `hack/check-telemetry-catalog.sh` fails CI when the two differ (research R15). + +## Compatibility + +| Install → receiver | Result | +|---|---| +| Old install (basic only) → new receiver | Accepted, counted as basic. | +| New install with `ext` → a receiver released before this feature (≤ v0.3.0) | 400. The install re-POSTs basic only, which is accepted, and suppresses `ext` for that endpoint for 7 days. | +| New install with `ext.schema` N → receiver that supports a lower schema | 400. Same fallback as the row above. | +| Install whose ID is claimed by another key → new receiver | 409. The install replaces its ID, re-signs and re-POSTs once (FR-037). | +| Bad signature, stale send time or replay → new receiver | 403. Counts as a failed attempt with normal backoff. No fallback and no ID rotation. | diff --git a/specs/022-default-telemetry-dashboard/data-model.md b/specs/022-default-telemetry-dashboard/data-model.md new file mode 100644 index 000000000..896f6552d --- /dev/null +++ b/specs/022-default-telemetry-dashboard/data-model.md @@ -0,0 +1,241 @@ +# Data Model: Default telemetry destination, extended telemetry, and telemetry dashboard + +**Feature**: [spec.md](spec.md) | **Research**: [research.md](research.md) + +There are three places where data lives: + +- **Wire**: the report itself, shared by both sides. Field-level rules are in [contracts/report-schema.md](contracts/report-schema.md). +- **API**: the install's own database, SQLite or PostgreSQL, through portable migration `015`. +- **Receiver**: the provider's SQLite file. + +All timestamps are RFC 3339 UTC strings bound from Go. All days are UTC calendar days written `YYYY-MM-DD`. + +--- + +## Wire (package `telemetryschema`) + +### Report + +| Field | Type | Rule | +|---|---|---| +| `version` | string | Required. Sanitised on the receiver to `invalid` unless it matches `^[A-Za-z0-9][A-Za-z0-9._+-]{0,31}$`. Unchanged from today. | +| `servers` | int | Required, ≥ 0. Unchanged. | +| `templates` | int | Required, ≥ 0. Unchanged. | +| `ext` | ExtendedPart | Optional. Present only while the extended tier is on (FR-011). | + +### ExtendedPart + +| Field | Type | Rule | +|---|---|---| +| `schema` | int | Required, `1`. A receiver rejects values above the one it supports with 400. | +| `installId` | string | Required. Lowercase UUIDv4. A malformed ID makes the receiver drop `ext` and count the report as basic only. | +| `env` | Env | Required. | +| `games` | Games | Required. | +| `features` | Features | Required. | +| `key` | string | Required. Base64url (unpadded) 32-byte Ed25519 public key derived for this `installId` (R20). | +| `sentAt` | string | Required. RFC 3339 UTC send time. Accepted window `[now − 36h, now + 1h]`. Must be strictly later than the ID's last accepted `sentAt`. | + +**Signature**: the header `Gameplane-Telemetry-Signature: ed25519=` covers the exact body bytes. It is required whenever `ext` is present and must be absent on basic-only reports (FR-035, FR-038). + +- **Env**: + - `k8s` (enumerated pattern `1.N`, otherwise `other`) + - `distro` (enumeration) + - `arch` (non-empty sorted set from an enumeration) + - `nodes` (band) +- **Games**: + - `official`: a map from catalog module name to its server count (int ≥ 1; zero entries are omitted) + - `custom`: int ≥ 0 +- **Features**: + - booleans: `wakeOnConnect`, `capture`, `backups`, `sso`, `auditForwarding` + - `tunnels` (sorted set from an enumeration, may be empty) + - `clusters` (band) + - `db` (enumeration) + - `language` (enumeration) + +Validation and sanitisation are identical on both sides because both import the same package (research R1): + +- **Structural errors** reject the report with 400: + - wrong JSON types + - unknown keys + - duplicate keys + - negative counts + - more than one JSON value +- **Out-of-set values** are kept and become `other`. Unknown module keys are folded into `custom`. + +--- + +## API (install side) + +### `config` row, key `telemetry` (existing table, extended value) + +| Field | Type | Meaning | +|---|---|---| +| `sendMetrics` | bool | Basic tier consent. Existing field. | +| `extended` | bool | Extended tier consent. New. Saving `sendMetrics: false` always stores `extended: false` too (FR-003). | + +If the row is absent, both tiers are off. The row is written by `PUT /admin/config/telemetry`, by the notice actions, and by the one-time seeding step (R10). + +### `telemetry_state` (new table, exactly one row, `id = 'singleton'`) + +| Column | Type | Null | Meaning | +|---|---|---|---| +| `id` | TEXT PK | no | Always `'singleton'`. | +| `consent_source` | TEXT | no | `default` (seeded on a fresh install), `legacy` (seeded on upgrade), or `admin` (an admin made an explicit choice). | +| `install_id` | TEXT | yes | UUIDv4. Present only while `config.telemetry.extended` is true (FR-012). | +| `notice_shown_at` | TEXT | yes | When an admin's dashboard first rendered the notice. Set once. | +| `next_due_at` | TEXT | yes | When the next report is due. NULL while the gate is closed. | +| `last_attempt_at` | TEXT | yes | When the last POST was attempted. | +| `last_success_at` | TEXT | yes | When a report was last accepted (2xx). | +| `last_outcome` | TEXT | no | `never` (default), `ok`, or `failed`. | +| `consecutive_failures` | INTEGER | no | Default 0. Drives backoff (R12). | +| `ext_unsupported_until` | TEXT | yes | Fallback marker (R2). | +| `ext_unsupported_endpoint` | TEXT | yes | The endpoint the fallback marker applies to. The marker is cleared when the destination changes. | +| `signing_secret` | TEXT | yes | 32 random bytes, base64. Created with the first install ID and kept for the install's lifetime. Never returned by any endpoint, logged or audited (FR-012, FR-035). | +| `last_id_rotation_at` | TEXT | yes | When the reporter last replaced the ID after a 409 `id_claimed` (FR-037). | + +No HTTP endpoint writes this table directly. It is written by: + +- the seeding step +- the post-save hook for the `telemetry` config section +- the notice endpoint +- the install-ID reset endpoint +- the reporter + +### `telemetry_notice_acks` (new table) + +| Column | Type | Meaning | +|---|---|---| +| `user_id` | TEXT PK | The admin who dismissed the notice. Deleted in Go when the user is removed (migrations README rule 3). | +| `acked_at` | TEXT | When the notice was dismissed. | +| `action` | TEXT | `keep`, `extended-off`, or `all-off`. | + +### Migration `015_telemetry_state.sql` (portable, `common/`) + +The migration creates the two tables above with `CREATE TABLE`. It contains: + +- no `AUTOINCREMENT` +- no `datetime(...)` +- `last_outcome` with `DEFAULT 'never'` +- `consecutive_failures` with `DEFAULT 0` + +Seeding is **not** in SQL. It is the Go post-migration step from R10, because it has to read the existing JSON config value. + +### Derived values (not stored) + +- **Destination**: `{kind: default|custom|bundled|disabled|none, host}`, resolved from flags at startup (R13). +- **Effective consent**: + - `basicOn = sendMetrics && kind ∉ {disabled, none}` + - `extendedOn = basicOn && extended` +- **Gate open**: `basicOn && (consent_source ≠ 'default' || notice_shown_at ≠ NULL)`. +- **Notice pending (per user)**: all of these hold: + - the user has `config:manage` + - `kind ∉ {disabled, none}` + - `consent_source = 'default'` + - the user has no ack row +- **Preview**: the exact `Report` the reporter would build now (SC-006). It is produced by the same `Collect` function. + +### State transitions: consent + +```text + fresh DB (R10) upgrade (R10) + │ │ + ▼ ▼ + ┌──────────────────────────┐ ┌──────────────────────────┐ + │ default │ │ legacy │ + │ basic=on ext=on │ │ basic=saved|off ext=off │ + │ reports gated on notice │ │ no notice │ + └──────────┬───────────────┘ └───────────┬──────────────┘ + notice "seen" opens the gate │ + (consent_source stays default) │ + │ any admin choice: settings save or notice action + └──────────────┬────────────────┘ + ▼ + ┌──────────────────────┐ + │ admin │ + │ basic / ext as saved │ + └──────────────────────┘ +``` + +- **Install ID**: + - `extended` changes from false to true → generate a new ID. + - `extended` changes from true to false → set the ID to NULL. + - Reset → replace the ID. The old ID is never sent again (US3 scenarios 4 and 5). + - A 409 `id_claimed` from the receiver → replace the ID automatically and set `last_id_rotation_at` (FR-037). + - The signing key is never stored. It is derived from `signing_secret` and the current ID on each send, so every change of ID changes the key (R20). +- **Operator disabled** (`kind = disabled`) overrides every state. Toggles are refused with 409, and nothing is sent (FR-005). + +### State transitions: schedule (R12) + +```text +gate closed ──gate opens──▶ due at now+U(0,15m) ──claim──▶ attempt + ▲ │ + │ gate closes (next_due_at = NULL) 2xx ◀──────────┤ + │ │ │ error / non-2xx + │ ▼ ▼ + └──────────────────────────────── due at now+interval+jitter + (or now+backoff after an error) +``` + +Responses inside one attempt: + +- **400 with `ext` present**: re-POST without `ext` once, and set `ext_unsupported_*` (R2). +- **409 `id_claimed`**: replace the install ID (keeping `signing_secret`), set `last_id_rotation_at`, re-sign and re-POST once. A second 409 counts as an error (R20). +- **403** (`bad_signature`, `stale` or `replay`): counts as an error, with normal backoff. The ID is never rotated. + +--- + +## Receiver (provider side, SQLite at `$DATA_DIR/telemetry.db`) + +| Table | Key | Columns | Written by | +|---|---|---|---| +| `meta` | `key` | `value` | Startup and ingest. Keys: `schema_version`, `pepper` (only when `ID_PEPPER` is unset), `collection_started`, `reports_total`, `rollover_through`. | +| `daily_basic` | `day` | `reports`, `duplicates`, `servers_sum`, `templates_sum` | Ingest (every accepted report; `duplicates` instead of `reports` for per-ID same-day repeats). | +| `daily_version` | `(day, version)` | `reports` | Ingest. `version` is the sanitised value or `invalid`. | +| `daily_fleet` | `(day, metric, value)` | `reports` | Ingest. `metric` is `servers` or `templates`. `value` is the exact count 0–1000, or `1001` for more than 1000. | +| `daily_ext` | `day` | `ext_reports`, `active_installs`, `new_installs`, `lapsed_installs` | Ingest for the first three. Rollover for `lapsed_installs`. | +| `daily_dim` | `(day, dim, value)` | `installs` | Ingest of a non-duplicate extended report. See the dimension list below. | +| `daily_game` | `(day, module)` | `installs`, `servers` | Ingest. `module` is a catalog name or `custom`. | +| `activity` | `id_hmac` | `key_fp` (SHA-256 of the claiming public key), `first_seen`, `last_seen`, `last_sent_at`, `last_version` | Ingest: inserting a row *is* the claim (R20). Deleted by expiry, and the claim expires with it (FR-038). | + +`daily_dim` dimensions: + +- `k8s`, `distro`, `arch` (one row per architecture present), `nodes` +- `tunnel` (one row per provider present) +- `clusters`, `db`, `language` +- `feature` with value `wakeOnConnect`, `capture`, `backups`, `sso` or `auditForwarding` (a row only when the value is true) + +Every `value` is a `telemetryschema` enumeration member or `other`, so the row count per day is bounded by the size of those sets. + +### Invariants + +- **Nothing raw is stored.** There are no raw reports, source addresses or untransformed install IDs (FR-014, SC-012). Source addresses exist only in the in-memory limiters (R6). +- **Extended attributes are never keyed by ID.** `activity` has no column for any of them (FR-014). +- **Refused reports leave no trace.** A report refused by the signature, window, claim or replay checks changes no table (FR-036). Only the in-memory limiter and the `rate_limited` and `refused` metrics see it. +- **No full public keys are stored.** `key_fp` is enough to check the claim, because the key arrives with every report. +- **One extended contribution per install per day.** At most one extended report per `id_hmac` per day changes any aggregate (R5). +- **The running total never decreases.** `reports_total` is only ever incremented, so retention sweeps don't change the public "total since collection began". + +### Lifecycle jobs (hourly, idempotent, resumable through `rollover_through`) + +1. **Finalise each completed day D** after `rollover_through`: set `daily_ext[D].lapsed_installs = count(activity where last_seen = D − 30 days)`. +2. **Expire activity records** where `last_seen < today − ACTIVITY_EXPIRY_DAYS`. This uses OD-4 (ruled: 90 days), with an enforced minimum of 31. +3. **Delete `daily_*` rows** where `day < today − RETENTION_DAYS`. This uses OD-3 (ruled: 730 days, i.e. 24 months), with an enforced minimum of 365 (FR-020). + +### Derived views (computed at read time, [contracts/receiver-http.md](contracts/receiver-http.md)) + +The range R is 7, 30, 90 or 365 days and ends on the latest complete day. + +| View | Computation | +|---|---| +| Reports per day | `daily_basic.reports` series over R | +| Version adoption (reports) | `daily_version` summed over R. Top 10 by count, then `Other` (the rest) and `Invalid`. | +| Fleet distribution and median | `daily_fleet` summed over R. Bands `0,1,2,5,10,25,50,100,250,250+` are applied at read. The exact median comes from the cumulative counts. | +| Latest-day totals | `daily_basic.servers_sum`, `templates_sum` for the latest complete day | +| Unique active installs | `count(activity where last_seen ≥ asOf − {0, 6, 29})` | +| New and lapsed installs | `daily_ext.new_installs` and `lapsed_installs` series over R | +| Version adoption (installs) | `activity.last_version` for records with `last_seen` inside `min(R, ACTIVITY_EXPIRY_DAYS)`. The window used is shown. | +| Environment, games, feature shares | Σ `installs` ÷ Σ `daily_ext.ext_reports` over R (install-day weighted, research R4) | +| Extended coverage (FR-026) | Σ `ext_reports` ÷ Σ `reports` over R | +| Public summary (FR-029) | `reports` for asOf; Σ `reports` over the 30 days ending asOf; `meta.reports_total`; `count(activity where last_seen ≥ asOf − 29)`; `asOf` | + +`asOf` is the latest complete UTC day, which is yesterday. When no `daily_basic` row exists in R, every view returns its empty state instead of zeros (FR-027). diff --git a/specs/022-default-telemetry-dashboard/plan.md b/specs/022-default-telemetry-dashboard/plan.md new file mode 100644 index 000000000..0de446c2e --- /dev/null +++ b/specs/022-default-telemetry-dashboard/plan.md @@ -0,0 +1,244 @@ +# Implementation Plan: Default telemetry destination, extended telemetry, and telemetry dashboard + +**Branch**: `feat/default-telemetry-dashboard` (not yet created; the spec-kit script derived `022-default-telemetry-dashboard`) | **Date**: 2026-10-06 | **Spec**: [spec.md](spec.md) + +**Input**: Feature specification from `specs/022-default-telemetry-dashboard/spec.md` + +## Summary + +Telemetry gets a compiled-in default destination and two consent tiers, and the receiver becomes a small provider with durable aggregates, a private dashboard and a public summary. + +**Destination.** The API gains one authoritative default destination, `telemetry.DefaultEndpoint`. It is empty until OD-1 is ruled, so behaviour is unchanged until then. An operator can still choose a custom destination, the bundled receiver, or a hard **disable** (`api.telemetry.enabled=false`). + +**Consent.** Consent splits into a **basic** tier and an **extended** tier: +- **Fresh installs** (detected inside `Store.Migrate`) seed both tiers on, but nothing is sent until an admin's dashboard has displayed the first-login notice. +- **Upgraded installs** keep their saved basic choice, and extended stays off. + +**Reporter.** The reporter switches to a persisted, claim-based schedule that survives restarts and sends at most one report per 24 h. It also falls back to basic-only for receivers older than this feature. + +**Extended report.** It adds: +- a random install ID +- environment categories +- per-official-module server counts, with everything else summed as `custom` +- feature-adoption flags + +All of these come from a new shared stdlib-only module, `telemetryschema/`, so the API and the receiver validate the same fixed categories. + +**Signed reports (US7).** Every extended report is signed with Ed25519. The key is derived (HKDF) from a random secret kept in the install's database, combined with the current install ID, so resets produce unlinkable keys. The receiver binds each ID to the first key that uses it, and refuses, without counting anything, reports that are unsigned, tampered, stale, replayed or signed by another key. When an install's ID is claimed by someone else, it replaces the ID automatically and resends (research R20). + +**Receiver.** `telemetry-receiver` stores only **daily aggregates** plus **expiring activity records** (an HMAC of the install ID, first and last seen, last version) in SQLite on a PVC. Per-ID, per-day deduplication and in-memory per-source limits keep the counts honest. It serves: +- a **private, token-protected, server-rendered dashboard** on its own port +- an **opt-in public summary** of five counts + +The Admin Settings Telemetry section and the new notice banner are designed in `design.pen` first. The receiver's pages are designed in their own Pencil file, `telemetry-receiver/telemetry-dashboard.pen`, which starts from a copy of the HeroUI design. Prometheus `/metrics` moves behind the dashboard token, and a runbook documents how to run the project's receiver. + +## Technical Context + +**Language/Version**: Go 1.26 for `api`, `telemetry-receiver` and the new `telemetryschema`. TypeScript (strict) and React 19 for `web`. Helm 3 templates. + +**Primary Dependencies**: existing ones only, apart from the receiver gaining `modernc.org/sqlite`, which the API already uses. +- API: chi, client-go (dynamic and typed), `modernc.org/sqlite` / `pgx`. +- Receiver: `prometheus/client_golang`, plus `modernc.org/sqlite` (new to the receiver), stdlib `html/template` and `embed`. +- Web: HeroUI v3, TanStack Query. No new web dependency. + +**Storage**: +- API: migration `015_telemetry_state.sql` in `common/` (portable to SQLite and PostgreSQL), plus the existing `config` key `telemetry`. +- Receiver: SQLite file at `$DATA_DIR/telemetry.db` on a RWO PVC, or in-memory when `DATA_DIR` is unset. + +**Testing** (CI only, per constitution VI). Signing adds tests for derivation vectors, verification failure cases, and claim, replay and window rules: +- `go test` with coverage gates: `telemetryschema` 90 (new), `telemetry-receiver` 70, `api` 80. +- API envtest handler suites. +- vitest for the web. +- `helm template` assertions in `ci.yaml`. +- Kind E2E: new `telemetry` bucket, plus an assertion in the `upgrade` bucket. +- New lint script `hack/check-telemetry-catalog.sh`. + +**Target Platform**: Kubernetes (k3s, kind, managed), with linux/amd64 and arm64 distroless images. The default provider is the same receiver image, run by the project maintainers (OD-2). + +**Project Type**: Multi-component: Go services, a React dashboard, a Helm chart, and a new shared Go library module. + +**Performance Goals**: +- Ingest: 10,000 reports per day (about 0.1 req/s average, bursty) at the default provider. +- Dashboard: the 365-day view within 3 s (SC-010), backed by pre-aggregated daily rows. +- Public summary: served from a 5-minute snapshot. +- Install side: one collection pass per report or preview, with a bounded list of local CRs and nodes. Signing costs one HKDF and one Ed25519 signature per send. + +**Constraints**: +- No raw reports, source IPs or untransformed IDs are ever persisted (FR-014, SC-012). +- Every stored category is bounded by an enumeration. +- At most one accepted report per 24 h (FR-007). +- Every extended report is signed, and the signing secret never leaves the install (FR-035). +- `https` with full verification for the default destination (FR-009). +- The receiver stays a single static binary with a read-only root filesystem. +- The dashboard has no JavaScript and a strict CSP. +- `--reuse-values` from beta.8 must render unchanged. + +**Scale/Scope**: +- About 10k reporting installs. +- 12–24 months of daily aggregates. +- About 10k activity records. +- 5 new API routes or route variants. +- 1 rewritten settings section, plus 1 new banner. +- About 5 new frames in `design.pen`, and about 4 in `telemetry-receiver/telemetry-dashboard.pen`. +- 1 new Go module. +- 1 new protocol element: signed extended reports with a claim on first use (R20). + +No NEEDS CLARIFICATION remains. Every technical unknown is resolved in [research.md](research.md) (R1–R20). OD-2, OD-3 and OD-4 are ruled (2026-10-06). OD-1, the domain, is still open: implementation proceeds with the default blank, and the feature PR can't merge until OD-1 is ruled (see Merge gate). + +## Constitution Check + +*GATE: Must pass before Phase 0 research. Re-checked after Phase 1 design.* + +| Principle | Gate | Pre-design | Post-design | +|---|---|---|---| +| **I. E2E-tested delivery** | Every user-facing path has a Kind E2E in a registered bucket. | Planned. | **PASS**: new `telemetry` bucket with `TestTelemetryLifecycle` (`t.Parallel()`, unique names, sequential subtests because they mutate cluster-wide Helm state); `upgrade` bucket assertion (R17). Registered in `test/e2e/buckets.sh` and the CI matrix. | +| **II. Design-first UI** | Dashboard UI is designed in `design.pen` via the Pencil MCP before React or HTML is written, and touched nodes are exported to `design-export/`. | Planned. | **PASS**: frames for the notice banner, the five Telemetry settings states, and the receiver login, overview, empty and refusal pages (R18). `.pen` files are touched only through Pencil MCP. The export lands in the same commit. The receiver pages use a third Pencil source, `telemetry-receiver/telemetry-dashboard.pen` (spec Q10), exported to `telemetry-receiver/design-export/`. Principle II names only `design.pen` and `website.pen`, so this file follows the same rules by analogy: Pencil MCP only, design before code, export in the same commit. | +| **III. Best practice / no suppression** | No `//nolint` or `eslint-disable`; `%w` wrapping; strict TS; no CRD edits without codegen. | — | **PASS**: no CRD type changes, so CLAUDE.md rule 7 doesn't apply. The new module gets the standard lint config, and nothing is excluded. | +| **IV. Spec-driven; per-module `specs.md`** | Behaviour changes update `specs.md` in the same change. | — | **PASS** (planned): `telemetryschema/specs.md` (new), `telemetry-receiver/specs.md` and README (invariants rewritten: "daily aggregates and expiring activity records, never raw reports", "basic or extended report"), `api/specs.md`, `web/specs.md`. | +| **V. Delegate via Workflow** | Implementation goes through Workflow scripts, haiku first, review one tier up, `model:` set on every `agent()`. | — | **PASS** (process): the tasks phase produces scout briefs; implementation waves are split by component (see Delivery slices). | +| **VI. CI does the heavy lifting** | Locally only `go build` and `tsc --noEmit`. | — | **PASS**: quickstart lists only compile checks locally; everything else is CI. | +| CLAUDE.md core rule 3: login privacy | Unauthenticated views reveal nothing. | — | **PASS**: the receiver's refusal invariant (contracts/receiver-http.md). The Gameplane `/login` is untouched, and the notice appears only after authentication. | +| CLAUDE.md core rule 9: K8s primitives first | — | — | **PASS**: PVC for receiver data; Secrets for the dashboard token and pepper; NetworkPolicy for the dashboard port. | +| CLAUDE.md core rule 10: operator authority | — | — | **PASS**: the reporter only reads CRs; nothing bypasses reconciliation. This is the reporter's existing placement in the API. | +| CLAUDE.md system override 10: unsettled values | — | — | **PASS**: the domain stays empty (OD-1). Retention (730 days) and activity expiry (90 days) are ruled values (OD-3, OD-4). | + +**Result**: no violations. The one structural addition, a 16th Go module, is recorded under Complexity Tracking as a deliberate cost rather than a violation. + +## Project Structure + +### Documentation (this feature) + +```text +specs/022-default-telemetry-dashboard/ +├── spec.md +├── OPEN-DECISIONS.md # OD-1 open (blocks merge); OD-2..OD-4 ruled +├── plan.md # this file +├── research.md # R1–R20 +├── data-model.md +├── quickstart.md +├── contracts/ +│ ├── report-schema.md # wire format, enums, bands, compatibility +│ ├── receiver-http.md # ingest, summary, dashboard routes, auth, env +│ ├── api-telemetry-http.md# admin routes, config PUT semantics, notice +│ └── install-config.md # Helm values, API flags, rendering table +├── checklists/requirements.md +└── tasks.md # /speckit-tasks (not created here) +``` + +### Source Code (repository root) + +```text +telemetryschema/ NEW stdlib-only module (R1) +├── go.mod module github.com/ValgulNecron/gameplane/telemetryschema +├── report.go Report / ExtendedPart / Env / Games / Features, JSON encode +├── decode.go strict decoder (moved from telemetry-receiver/main.go decodePayload, extended) +├── enums.go distro, arch, tunnel, db, language sets; NodeBand / ClusterBand / FleetBands +├── catalog.go, catalog.txt embedded official module list (R15) +├── sign.go DeriveKey (HKDF → Ed25519), Sign, Verify, signature header codec (R20) +├── *_test.go, .testcoverage.yml (90) +└── specs.md + +telemetry-receiver/ +├── main.go config + two listeners (slimmed) +├── ingest.go /ingest: auth, size cap, decode, signature/window/claim/replay checks (R20), limiter, dedupe, aggregate write +├── store.go SQLite schema, migrations, writes, rollover/expiry/retention jobs +├── views.go view model for the dashboard + public summary +├── dashboard.go token login, signed cookie, CSP, handlers +├── summary.go /v1/summary snapshot cache, CORS, ETag +├── ratelimit.go per-source daily counter + token buckets, trusted proxies +├── web/ go:embed templates + CSS + inline-SVG chart partials (no JS) +├── go.mod + modernc.org/sqlite, + replace ../telemetryschema +├── Dockerfile + COPY telemetryschema/ +├── README.md, specs.md rewritten invariants/config +└── *_test.go incl. synthetic-population accuracy (SC-008), 365-day view timing (SC-010) + +api/ +├── cmd/main.go new flags (install-config.md), reporter wiring +├── Dockerfile + COPY telemetryschema/ +├── go.mod + require/replace telemetryschema +├── internal/telemetry/ +│ ├── telemetry.go Reporter: destination resolution, gate, schedule claim, sign + send, 400 fallback, 409 ID rotation +│ ├── collect.go builds the Report (also used by the preview) +│ ├── distro.go R16 heuristics +│ └── *_test.go +├── internal/db/ +│ ├── migrations/common/015_telemetry_state.sql +│ ├── telemetry.go state/ack queries, claim UPDATE +│ └── db.go Migrate: fresh detection + one-time seed (R10) +├── internal/handlers/ +│ ├── telemetry.go GET /admin/telemetry, POST install-id, notice GET/POST +│ ├── config.go telemetry validator (extended ⇒ sendMetrics) + post-save hook + 409 +│ └── telemetry_envtest_test.go +├── internal/rbac/rbac.go /admin/telemetry entries before the admin wildcard +└── specs.md + +web/src/ +├── lib/api.ts, lib/config.ts Telemetry client; TelemetryCfg.extended +├── components/ui/TelemetryNotice.tsx banner (+ .test.tsx) +├── components/AppLayout.tsx mounts the notice for config:manage holders +└── routes/AdminSettings.tsx TelemetrySection rewrite (+ tests) + +charts/gameplane/ +├── values.yaml install-config.md keys +├── templates/api.yaml --telemetry-disabled, BUNDLED, interval, official source +├── templates/telemetry-receiver.yaml PVC, Recreate, env, dashboard port, NetworkPolicy +└── testdata/ reuse-values fixture assertions + +test/e2e/telemetry_e2e_test.go TestTelemetryLifecycle (R17) +test/e2e/buckets.sh + telemetry bucket; upgrade bucket assertion +deploy/kind/{e2e.sh,up.sh} explicit bundled receiver +hack/check-telemetry-catalog.sh catalog drift check (wired into make lint) + +design.pen → design-export/{json,screenshots}/ notice, settings states +telemetry-receiver/telemetry-dashboard.pen → telemetry-receiver/design-export/{json,screenshots}/ receiver login, overview, empty +docs/{install.md,architecture.md,security.md,telemetry-provider.md}, CHANGELOG.md, docs/agent-architecture.md, CLAUDE.md (repo map + coverage list) +go.work, Makefile (GO_MODULES), .github/workflows/ci.yaml (matrices, path filters, e2e bucket), .github/dependabot.yml +website/ (submodule): platform-settings-telemetry.mdx, helm-values-reference.mdx, air-gapped-installation.mdx +``` + +**Structure Decision**: the work spreads across existing components, plus one new root-level library module, `telemetryschema/`, which follows the netguard and gameaction pattern. No other new top-level directories are added. + +## Delivery slices (input for `/speckit-tasks`) + +The slices are implementation waves on **one feature branch and one PR**, in this order. The PR stays a draft until OD-1 is ruled (Merge gate), so none of this reaches `master` before the domain exists. + +1. **Contract module.** Add `telemetryschema`, move the receiver's decoder into it with no behaviour change, and add `sign.go` (key derivation, signing and verification, R20). Wire the new module through CI, the Makefile, `go.work`, Dependabot and the docs maps. Add the catalog and its drift check. +2. **Receiver provider** (US4, US5, US6, and US7 on the provider side; the signature, window, claim and replay checks come before any write): + - SQLite store, extended decode, dedupe, limits, and rollover/retention + - the dashboard (after its frames in `telemetry-receiver/telemetry-dashboard.pen`), `/metrics` moved behind the token, and the public summary + - chart persistence, dashboard and NetworkPolicy changes + - receiver `specs.md` and README +3. **API reporter and consent** (US1, US2, US3, and US7 on the install side: `signing_secret`, signing, rotation on 409): + - migration 015, the seed inside Migrate, and destination resolution + - the scheduler, claim and fallback, and collection + - the admin routes, RBAC and config hook + - chart flags; explicit receiver settings in the e2e and dev scripts +4. **Web** (US1, US3 UI): the `design.pen` frames and export first, then the notice banner and the settings section. +5. **E2E and docs:** the `telemetry` bucket, the upgrade assertion, FR-008 docs and CHANGELOG, `docs/security.md` threat-model additions, and website pages (through the submodule's own PR flow). + +Slices 2 and 3 can run in parallel once slice 1 is committed. Slice 4 needs slice 3's routes. Slice 5 needs everything before it. + +## Cross-spec dependencies + +- **019 localization-language-packs** (Draft) owns adding languages to the `telemetryschema` `language` enumeration and wiring the configured default. Until then `language` is always `en` (R19). + +## Merge gate (OD-1, user ruling 2026-10-06) + +The domain isn't decided. Implementation proceeds with `telemetry.DefaultEndpoint = ""`, but **the feature PR MUST NOT merge until OD-1 is ruled** and the constant is set. This is enforced in two ways: + +- **Draft PR.** The PR stays a **draft** until then. GitHub does not allow merging drafts, and the `master` ruleset (`18692396`) has no required status checks, so a failing check alone wouldn't block the merge. +- **CI job `telemetry-default-gate`.** It fails while `DefaultEndpoint` is empty or isn't `https`. It runs as its own job, so its failure never hides the results of other jobs. After merge it keeps enforcing FR-002 and FR-009. + +## Release checklist + +- **OD-2 (ruled).** The project maintainers run the provider. The data-handling statement page on the project website is published, states 24-month retention (OD-3) and 90-day activity expiry (OD-4), and is linked from the notice, the settings and the upgrade notes through one URL constant. +- **FR-008.** The upgrade notes include the warning for installs whose basic toggle was already on. + +## Complexity Tracking + +There are no constitution violations. One deliberate structural cost is recorded so reviewers can weigh it: + +| Addition | Why needed | Simpler alternative rejected because | +|---|---|---| +| 16th Go module `telemetryschema/` (CI matrices, coverage gate 90, Dependabot, `go.work`, docs maps, `specs.md`) | FR-013 requires one fixed, published category set that both sides apply identically, and SC-006 requires the preview to match the payload. | Duplicating the enumerations relies on cross-module fixture tests that drift silently. Importing a receiver sub-package from the API inverts the dependency and drags SQLite and Prometheus into the API's module graph (research R1). | +| Receiver persistence (SQLite plus PVC) and a web UI in a component that was previously stateless | FR-020 (durable history) and FR-022 (a dashboard served by the receiver, clarification Q2). | Prometheus can't hold per-install deduplication state or survive restarts without extra infrastructure. Reusing the React app couples the receiver's release to the dashboard (research R3, R7). | diff --git a/specs/022-default-telemetry-dashboard/quickstart.md b/specs/022-default-telemetry-dashboard/quickstart.md new file mode 100644 index 000000000..a5f59d928 --- /dev/null +++ b/specs/022-default-telemetry-dashboard/quickstart.md @@ -0,0 +1,145 @@ +# Quickstart: validating feature 022 + +**Feature**: [spec.md](spec.md) | **Contracts**: [contracts/](contracts/) + +CI is the verification authority (constitution VI, CLAUDE.md rule 8). Locally, run only compile checks. The scenarios below are what the `telemetry` and `upgrade` E2E buckets automate (research R17). They are written so that a reviewer can also walk through them by hand on a dev Kind cluster. + +## Local compile checks (the only local verification) + +```sh +cd telemetryschema && go build ./... && cd .. +cd telemetry-receiver && go build ./... && cd .. +cd api && go build ./... && cd .. +cd web && npx tsc --noEmit && cd .. +helm template gameplane charts/gameplane --set api.telemetry.enabled=false | grep -- --telemetry-disabled +``` + +## CI runs + +| What | Where | +|---|---| +| Unit and coverage for `telemetryschema` (gate 90), `telemetry-receiver` (gate 70) and `api` (gate 80) | `go test` matrix (`ci.yaml` module lists) | +| API handler and migration integration | `make test-integration` (envtest) | +| Web components | vitest (`web` job) | +| Chart renderings | `helm template` checks | +| End to end | `make test-e2e-bucket BUCKET=telemetry`, and `BUCKET=upgrade` | +| Catalog drift | `hack/check-telemetry-catalog.sh` in `make lint` | + +## Manual walk-through on a dev cluster + +**Prerequisites**: + +- `git submodule update --init` +- `make dev-up` (with `up.sh` deploying the bundled receiver, per [install-config.md](contracts/install-config.md)) +- a dashboard token Secret: + +```sh +kubectl -n gameplane-system create secret generic telemetry-dashboard \ + --from-literal=token="$(openssl rand -hex 24)" +helm upgrade gameplane charts/gameplane --reuse-values \ + --set api.telemetry.receiver.dashboard.tokenSecretRef.name=telemetry-dashboard \ + --set api.telemetry.receiver.publicSummary.enabled=true \ + --set api.telemetry.interval=2m +``` + +### S1: a fresh install defaults on and is gated by the notice (US1; FR-003, FR-004) + +1. Sign in to the dashboard as the bootstrap admin. + - **Expect** the telemetry banner, naming the in-cluster receiver host and listing the basic and extended fields. +2. Before you sign in, `GET /admin/telemetry` returns `consent.source = "default"` and `status.lastOutcome = "never"`. No report arrives while nobody has seen the notice. +3. Leave the banner showing for one interval. + - **Expect** `lastOutcome = "ok"` and the receiver's `/api/v1/views` showing `extended.installs.active1d = 1`. + +### S2: the tiers and the install ID (US3; FR-012, FR-018, FR-019) + +1. Admin Settings → Telemetry shows the destination kind `bundled`, both switches, the install ID, the preview and the status line. +2. Turn off the extended switch and save. + - **Expect** the install ID disappears from the preview, and the next report's `ext_reports` count doesn't increase. +3. Turn it back on. + - **Expect** a new ID. +4. Choose "Reset ID". + - **Expect** a new ID, and the next report counted as a new install. +5. Compare the preview JSON with what the receiver counted. + - **Expect** them to agree field for field (SC-006). + +### S3: at most one accepted report per interval across restarts (FR-007, SC-005) + +```sh +kubectl -n gameplane-system rollout restart deploy/gameplane-api +``` + +- **Expect**: over the next 3 intervals, `daily_basic.reports` increases by 3 ± 1, and never by more than 1 within a single interval. + +### S4: the private dashboard and the refusal (US4; FR-022, FR-023, FR-027) + +```sh +kubectl -n gameplane-system port-forward svc/gameplane-telemetry-receiver 8081:8081 +``` + +1. Open `http://localhost:8081/`. + - **Expect** a redirect to the login page, which contains no figures. +2. Sign in with the token. + - **Expect** the overview for 30 days. 7, 90 and 365 also work. +3. `curl -s localhost:8081/api/v1/views` + - **Expect** `401 {"error":"unauthorized"}`. +4. `curl -s -o /dev/null -w '%{http_code}' -H "Authorization: Bearer $TOKEN" localhost:8081/metrics` + - **Expect** `200`, and `401` without the header (spec Q8). +5. Rotate the Secret and restart the receiver. + - **Expect** the old session is rejected and the data is intact (FR-028). +6. On a receiver with no data: + - **Expect** the empty state, with no zero-filled charts. + +### S5: the public summary (US6; FR-029–FR-032) + +```sh +kubectl -n gameplane-system port-forward svc/gameplane-telemetry-receiver 8080:8080 +curl -si localhost:8080/v1/summary +``` + +- **Expect** exactly the five keys from [receiver-http.md](contracts/receiver-http.md), plus `Cache-Control: public, max-age=3600` and `Access-Control-Allow-Origin: *`. +- With `publicSummary.enabled=false`: **expect** `404`. +- `curl -si localhost:8080/metrics`: **expect** `404`. Metrics live only on the dashboard port (FR-030). + +### S6: operator disable and redirect (US2; FR-005, SC-003, SC-004) + +1. `helm upgrade … --reuse-values --set api.telemetry.enabled=false` + - **Expect** the settings section shows "disabled by the operator", the switches are disabled, `PUT /admin/config/telemetry` returns `409`, and the receiver gets no reports over 3 intervals. +2. `--set api.telemetry.enabled=true --set api.telemetry.endpoint=http:///ingest` + - **Expect** reports arrive only at the other receiver, and the settings show the kind `custom`. + +### S7: an old receiver still gets basic reports (FR-016, SC-013) + +Point `api.telemetry.endpoint` at a Deployment running `ghcr.io/valgulnecron/gameplane/telemetry-receiver:v0.2.0-beta.8`. + +- **Expect** the API logs one 400 followed by an accepted basic-only POST, and later reports go basic-only without a 400 first. + +### S8: upgrades preserve the existing choice (US1 scenarios 5 and 6; FR-003) + +This is automated in the `upgrade` bucket. A beta.8 install with no saved choice, upgraded to this version: + +- **Expect** `consent.source = "legacy"`, both tiers off, and `GET /admin/telemetry/notice` returning `pending: false`. +- If `sendMetrics` was true before the upgrade: **expect** basic on and extended off. + +### S9: forged reports are refused, and a claimed ID heals itself (US7; FR-035–FR-038, SC-014, SC-015) + +This is automated in the `telemetry` bucket with a test-only signing client built on `telemetryschema`. + +1. Take the install's current ID from `GET /admin/telemetry` and POST a report with that ID, signed by a different key. + - **Expect** `409 {"error":"id_claimed"}`, and no change to `/api/v1/views`. +2. POST an extended report with no signature header, then a correctly signed report with one body byte changed, then a byte-for-byte resend of an accepted report. + - **Expect** `403` with `bad_signature`, `bad_signature` and `replay` respectively, and no change to any figure. +3. Reset the install ID, and immediately claim the new ID with the test client's own key before the install reports. + - **Expect** the install's next attempt to get a 409, replace its ID and have the resend accepted. `GET /admin/telemetry` then shows a new `installId` and a set `status.lastIdRotationAt`. + +## Merge gate (OD-1) + +The feature PR stays a **draft** until OD-1 is ruled. The CI job `telemetry-default-gate` fails while `telemetry.DefaultEndpoint` is empty or isn't `https`. To unblock: + +- record the domain as RULED in OPEN-DECISIONS OD-1 +- set `DefaultEndpoint` +- update the destination copy in the designs and docs + +## Release checklist + +- **OD-2.** The data-handling statement page on the project website is published, states 24-month retention (OD-3) and 90-day activity expiry (OD-4), and is linked from the notice, the settings and the upgrade notes. +- **FR-008 upgrade notes.** They are written in `CHANGELOG.md`, `docs/install.md` and the website telemetry page. diff --git a/specs/022-default-telemetry-dashboard/research.md b/specs/022-default-telemetry-dashboard/research.md new file mode 100644 index 000000000..2d5139f42 --- /dev/null +++ b/specs/022-default-telemetry-dashboard/research.md @@ -0,0 +1,428 @@ +# Research: Default telemetry destination, extended telemetry, and telemetry dashboard + +**Feature**: [spec.md](spec.md) | **Plan**: [plan.md](plan.md) | **Date**: 2026-10-06 + +Each entry records a decision, why it was made, and what else was considered. Facts about current code cite `file:line` as of `master` at `d2cc7956`. + +## Baseline facts + +- **Reporter.** `api/internal/telemetry/telemetry.go` is a ticker loop. Its first report goes out one full interval (24 h) after process start (`Run`, `time.NewTicker(r.interval)`). An API that restarts more often than daily therefore never reports, which violates FR-007. It reads the admin toggle from `config.telemetry.sendMetrics` (`enabled()`), and counts GameServers and GameTemplates on the local cluster only (`count()`). +- **Wiring.** `api/cmd/main.go:392` starts the reporter with a hard-coded `24*time.Hour`. `--telemetry-endpoint`/`GAMEPLANE_TELEMETRY_ENDPOINT` defaults to `""`, which means off (`api/cmd/main.go:541`). +- **Chart.** `charts/gameplane/templates/api.yaml:323-329` auto-wires `http://gameplane-telemetry-receiver..svc:8080/ingest` when `api.telemetry.receiver.enabled` is set and `api.telemetry.endpoint` is empty. The receiver is a `Deployment` with `replicas: {{ $r.replicas }}`, `readOnlyRootFilesystem`, and no volume. Its NetworkPolicy admits port 8080 only from the API pod, plus an optional Prometheus namespace (`charts/gameplane/templates/telemetry-receiver.yaml`). +- **Receiver.** `telemetry-receiver/main.go` uses only stdlib and `client_golang`. Its strict token-walking decoder (`decodePayload`) rejects any key other than `version`, `servers` and `templates`. Metrics are kept in memory only. +- **API storage.** SQLite is the default and PostgreSQL is optional. New migrations go in `api/internal/db/migrations/common/` as portable SQL; the latest is `014_sessions_digest_reset.sql`. `Store.Migrate` (`api/internal/db/db.go:99`) is called by both `serve` (`api/cmd/main.go:163`) and `bootstrap-admin` (`api/cmd/bootstrap.go:47`). +- **API RBAC.** The API's ClusterRole already grants `get/list/watch` on `nodes`, all Gameplane CRDs including `clusters`, `modulesources` and `backupschedules`, and discovery (`charts/gameplane/templates/api.yaml:15-65`). The handlers already list nodes (`api/internal/handlers/cluster.go:187`) and read `ServerVersion()` (`cluster.go:446`). +- **API replicas.** `charts/gameplane/values.yaml:120` says "Keep at 1", because SQLite is single-writer and some locks are per-process. +- **Admin permissions.** `/admin/config` splits `config:read` (GET) from `config:manage` (`api/internal/rbac/rbac.go:209-210`). Any other `/admin/*` route falls through to the admin wildcard (`rbac.go:217`). +- **Module provenance.** A module-managed GameTemplate carries `gameplane.local/module-name` and `gameplane.local/module-source` labels (`operator/api/v1alpha1/module_types.go:135-139`). The chart's default ModuleSource (`defaultModuleSource.name: default`, OCI `ghcr.io/valgulnecron/gameplane-modules`) lists the official catalog in `defaultModuleSource.oci.modules` (`charts/gameplane/values.yaml:548-584`) and verifies bundles against the chart-shipped cosign key. +- **Web.** There is no i18n framework yet (spec 019 is still Draft), so UI strings are English literals. `AppLayout.tsx:213` already mounts a sticky global banner (`SafeModeBanner`), which is the placement precedent. `AdminSettings.tsx:1545-1576` holds the current single-switch `TelemetrySection`. +- **E2E.** No telemetry E2E exists today. The buckets are `operator api-auth api-roles api-rbac api-agent api-mods ratelimit bot-fast bot-heavy multicluster upgrade` (`test/e2e/buckets.sh:357`). Every bucket shares one Helm install in `deploy/kind/e2e.sh:301`, and `Env.PortForward` exists (`test/e2e/env.go:342`). +- **Egress.** The chart restricts egress only in the games namespace (`networkpolicies.yaml`). The API pod's egress is unrestricted, so the default destination needs no chart egress change. + +--- + +## R1. One source of truth for the report contract + +**Decision**: Add a new stdlib-only Go module, `telemetryschema/`. It holds the basic and extended report types, every enumeration and band, the band functions, the strict decoder (moved out of the receiver's `decodePayload` and extended), sanitisation, and the embedded official-module catalog. `api` and `telemetry-receiver` both import it through `replace ../telemetryschema`, following the netguard and gameaction precedent (`api/go.mod:5-16`, `api/Dockerfile:7-9`). + +**Rationale**: +- FR-013 requires a *fixed, published* set of categories. Having one package define the categories that the API sends and the receiver accepts means the two sides cannot drift. +- SC-006 requires the preview to match the payload, which is easier when both are built from the same types. +- The receiver stays a single static binary, so it can still be run standalone. + +**Alternatives considered**: +- *Duplicate the enumerations in both modules and test them against a shared fixture.* This is cheaper up front, but tests that read across modules are brittle and drift is only caught after the fact. +- *Have the API import a sub-package of the receiver module.* This inverts the dependency (client depends on server) and pulls the receiver's `sqlite` and `prometheus` dependencies into the API's module graph. + +**Cost**: a 16th Go module must be added to `go.work`, `Makefile` `GO_MODULES`, both module matrices in `.github/workflows/ci.yaml` (`:457` and `:549`), the CI path filters, Dependabot, the `CLAUDE.md` repo map and coverage list, and `docs/agent-architecture.md`. It also needs its own `specs.md` (constitution IV). The coverage gate is **90**, matching gameproto (90) and slightly below netguard and gameaction (91), which are the other pure-logic shared libraries. This cost is recorded in plan.md under Complexity Tracking. + +## R2. Wire format and backward compatibility + +**Decision**: The three basic fields stay at the top level, unchanged. The extended tier is one optional object, `ext`, with its own `schema` integer (starting at `1`). The full shape is in [contracts/report-schema.md](contracts/report-schema.md). The same `POST ` URL carries both tiers. + +Fallback for older receivers (FR-016, SC-013): +- If a report that carries `ext` gets HTTP **400**, the API immediately re-POSTs the same report without `ext`, once. +- The API then records `ext_unsupported_until = now + 7 days` for that endpoint, so it doesn't send two POSTs every day. +- A receiver that understands `ext` but not a newer `ext.schema` value also answers 400, so the same fallback applies. +- Identity refusals use different codes, so they never trigger this fallback: **403** for a bad signature, stale send time or replay, and **409** for an ID claimed by another key (R20). + +**Rationale**: +- Old receivers reject unknown keys (`decodePayload` default branch), so a 400 is a guaranteed and observable signal. +- Keeping one URL means operators who configured a full `/ingest` URL don't have to reconfigure anything. + +**Alternatives considered**: +- *A versioned path such as `/v2/ingest`.* Deriving it from an operator-supplied URL is fragile, and the old receiver's 404 would need the same fallback logic anyway. +- *Negotiating through a header.* Old receivers ignore headers, so they would still reject the body. + +## R3. Receiver persistence + +**Decision**: Store data in SQLite, using `modernc.org/sqlite` (pure Go, `CGO_ENABLED=0`, and already vetted because the API uses it at `api/go.mod:41`). +- **Location.** The file is `$DATA_DIR/telemetry.db`. When `DATA_DIR` is unset, the receiver uses an in-memory database and logs a warning, so a standalone `docker run` with no volume keeps working, but nothing survives a restart. +- **Chart.** The chart always sets `DATA_DIR=/data` and mounts a PVC by default (`receiver.persistence.enabled: true`, 1 Gi). It uses `strategy: Recreate`, and the template fails if `replicas > 1` while persistence is enabled. +- **Writes.** All writes go through one serialized writer, with WAL mode on. + +**Rationale**: +- FR-020 and SC-009 require data to survive restarts. +- 12–24 months of daily aggregates plus about 10k activity records amounts to a few MB. +- SQLite fits a single-replica collector and the distroless image, and needs no new infrastructure (constitution: Kubernetes primitives, meaning a PVC, first). + +**Alternatives considered**: +- *PostgreSQL.* This would add an operational dependency for every self-hoster. +- *A JSON file rewritten atomically.* Rewriting it on every ingest doesn't scale to 10k activity records. +- *Prometheus remote storage.* That stores raw-ish time series and cannot do the per-install deduplication from R5. + +## R4. Aggregation model (FR-020) + +**Decision**: Pre-aggregate per UTC day at ingest time. The tables are listed in [data-model.md](data-model.md) §Receiver. +- **Fleet sizes.** These are stored as an **exact-value histogram** per day and metric, with values capped at 1000 (`1001` means "over 1000"). The FR-024 size bands and the exact median are both derived when the data is read. +- **Extended dimensions.** These go in one generic `daily_dim(day, dim, value, installs)` table, whose `dim` and `value` come only from `telemetryschema` enumerations. +- **Games.** These go in `daily_game(day, module, installs, servers)`. +- **Cumulative total.** A running total of reports is kept in `meta`, so the public summary's "total since collection began" (FR-029) is unaffected by retention sweeps. + +**Rationale**: +- Every dashboard view becomes a scan of at most 365 rows per dimension, which keeps SC-010 (under 3 s) comfortable. +- Bounded enumerations bound the row count, so hostile input can't grow tables without limit (Edge Cases: malicious values). +- An exact histogram gives the real median that US4 scenario 3 asks for; band-only storage would only give a median band. + +**Alternatives considered**: +- *Storing reports and aggregating at read time.* FR-014 forbids storing raw reports. +- *Storing bands only.* This loses the exact median. + +**Range semantics**: +- **Basic "per day" views** chart daily values over the range. +- **Extended install-share views** (environment, games, features) show the sum of daily install counts divided by the sum of daily extended reports over the range, which is a share weighted by install-days. Each view is labelled "share of reporting installs, averaged over the range". +- **By-install version adoption** (US5 scenario 6) uses activity records, so it covers at most the activity-expiry window (OD-4). The dashboard states that window. + +## R5. Unique installs without linking attributes (FR-014, FR-015) + +**Decision**: +- **Install ID.** The API generates a UUIDv4 from `crypto/rand`. +- **Transformed ID.** The receiver stores only `HMAC-SHA256(pepper, installID)`, hex-encoded. The pepper comes from `ID_PEPPER`, a Secret. If that is unset, the receiver generates 32 random bytes on first start and keeps them in `meta`. +- **Activity record.** Each record holds the transformed ID, `key_fp` (the claim, R20), `first_seen`, `last_seen`, `last_sent_at` (replay guard, R20) and `last_version`. Nothing else. +- **Per-day deduplication.** For an extended report that has passed the R20 signature and claim checks: + - If no record exists, the receiver inserts one, which also claims the ID, and counts the report as `new_installs++` and `active_installs++`. + - If `last_seen < today`, it updates the record and counts `active_installs++`. + - If `last_seen == today`, the report is a **duplicate**. It is answered with 204 but changes no aggregate, basic or extended; only `daily_basic.duplicates` is incremented. +- **Lapsed installs.** An hourly rollover finalizes each completed day D. It sets `lapsed_installs[D] = count(activity where last_seen = D − 30)` and then deletes records whose `last_seen` is older than the expiry (OD-4, ruled: 90 days; the enforced minimum is 31). + +**Rationale**: +- An HMAC with a secret pepper means the stored value can't be matched against an ID taken from an install without that pepper. +- No extended attribute is ever written next to the ID, as FR-014 requires. +- Per-day deduplication stops restarts, retries and replays from inflating counts (Edge Cases: frequent restarts, spoofing). +- SC-008 (within 1 %) holds because uniques are exact distinct counts, not estimates. + +**Alternatives considered**: +- *HyperLogLog sketches.* These are approximate (around 1–2 % error) and can't give exact new and lapsed counts. +- *Plain SHA-256 of the ID.* An attacker who knows the ID can link it. That is low risk, but the pepper costs nothing. + +## R6. Per-source limits and source addresses (FR-014, FR-021, FR-032) + +**Decision**: All limits are in memory only and keyed by source IP, which is never written to disk. +- **Ingest.** At most `INGEST_SOURCE_DAILY_LIMIT` *accepted* reports per source per UTC day, default **20**. Over the limit the receiver returns `429`. +- **Public summary.** A token bucket of 60 requests per minute per source, burst 10. +- **Dashboard login.** 5 attempts per minute per source. +- **Source IP.** This is the TCP peer address. `X-Forwarded-For` is trusted only when the peer falls inside `TRUSTED_PROXY_CIDRS` (default empty). +- **Cleanup.** Limiter state is purged at UTC midnight and whenever an entry has been idle for 10 minutes. + +**Rationale**: +- A default of 20 tolerates CGNAT and shared egress (several homelabs behind one address) while capping how much one source can distort a day. +- Trusting proxy headers only from configured networks stops clients from spoofing their source by setting `X-Forwarded-For` themselves. + +**Alternatives considered**: +- *A limit of 1 per source per day.* This breaks every install behind a shared NAT. +- *Proof-of-work or registration.* This can't be done without per-install secrets (spec Assumptions). + +## R7. Private dashboard delivery (FR-022–FR-028) + +**Decision**: +- **Rendering.** The receiver renders the dashboard itself with `html/template`. CSS and templates are embedded with `go:embed`, and charts are **inline SVG** generated server-side. There is **no JavaScript**. +- **Range selection.** The range is chosen with plain links (`?range=7|30|90|365`, default 30). +- **Listener.** The dashboard has its own listener, `DASHBOARD_LISTEN_ADDR` (default `:8081`), separate from the public listener (`:8080`: ingest, healthz, public summary). Prometheus `/metrics` also moves to the dashboard listener, behind the token (spec Q8), so no aggregate other than the public summary is readable from the public port. +- **CSP.** `default-src 'none'; style-src 'self'; img-src 'self' data:; form-action 'self'; frame-ancestors 'none'; base-uri 'none'`. +- **Chart design.** Designs come from frames in `telemetry-receiver/telemetry-dashboard.pen` (spec Q10), a separate Pencil file seeded with a copy of the HeroUI design, exported to `telemetry-receiver/design-export/`. The rendered HTML recreates the HeroUI look in plain CSS, because there is no React (constitution II, by analogy). The `dataviz` skill is applied when the frames are designed and again when the SVG is implemented. + +**Rationale**: +- Rendering in-process keeps the receiver one static binary with no build toolchain, as required for self-hosting (FR-033). +- Without JavaScript, the CSP can be very strict. +- A separate port lets the project's provider expose only `:8080` publicly while the dashboard stays private at the network level as well. + +**Alternatives considered**: +- *Reusing the `web/` React app.* This would couple the receiver's release to the dashboard build, and the dashboard isn't deployed next to a public provider. +- *A Grafana dashboard.* This needs Grafana and Prometheus history, can't express the dedupe-aware install views, and would expose the provider's metrics endpoint. + +## R8. Dashboard access credential (FR-022, FR-023, FR-028) + +**Decision**: There is one operator credential, `DASHBOARD_TOKEN`, which comes from a Secret. +- **No token.** If `DASHBOARD_TOKEN` is unset, the dashboard listener **is not started** at all, so the dashboard is unavailable rather than open. +- **Browser login.** `POST /login` compares the token in constant time. On success it sets a cookie containing `expiry || HMAC-SHA256(K, expiry)`, where `K = HMAC-SHA256(DASHBOARD_TOKEN, "gameplane-telemetry-session")`. The cookie is `HttpOnly; Secure; SameSite=Strict; Path=/` with a 12 h lifetime. Because `K` is derived from the token, replacing the token invalidates every session, and the stored data is untouched. +- **CSRF.** `POST /login` and `POST /logout` require a same-origin `Origin` (or `Referer`) header in addition to SameSite. +- **Scripts.** The JSON views endpoint also accepts `Authorization: Bearer `. +- **Refusals.** Any unauthenticated HTML request is redirected to `/login`. Any unauthenticated JSON request gets `401 {"error":"unauthorized"}`. A wrong token re-renders the login page with "Invalid credentials". No response varies with whether any data exists. + +**Rationale**: +- Single-credential access is a spec Assumption. +- A stateless signed cookie needs no session table, and it rotates naturally with the token. +- The generic responses follow the same privacy posture as Gameplane's own login (CLAUDE.md core rule 3). + +**Alternatives considered**: +- *HTTP Basic auth.* Browsers cache it, and it can't be logged out of. +- *OIDC.* This is out of scope, since there are no multi-user accounts on the provider. + +## R9. Public summary (FR-029–FR-032) + +**Decision**: `GET /v1/summary` on the public listener, returning only the five values in [contracts/receiver-http.md](contracts/receiver-http.md). +- **When disabled.** If `PUBLIC_SUMMARY` is not `true` (the default), the route returns 404. +- **Caching.** The response is computed from a snapshot cached for 5 minutes, sent with `Cache-Control: public, max-age=3600` and an `ETag`. +- **CORS.** `Access-Control-Allow-Origin: *`, because the response is read-only and carries no credentials. +- **Rate limit.** As in R6. + +**Rationale**: +- Badge and website use cases need cross-origin reads that can be cached. +- The snapshot cache keeps public polling off the database (FR-032, US6 scenario 4). + +**Alternatives considered**: +- *A shields.io badge format.* It's a different representation of the same data, and can be added later without changing the data contract. + +## R10. Telling a new install from an existing one + +**Decision**: +- **Fresh check.** `Store.Migrate` checks whether `schema_migrations` held **zero rows** when it started; if so, the database is fresh. +- **Seeding.** After applying migrations, `Migrate` runs a one-time seeding step in the same process. If no `telemetry_state` row exists, it inserts one: + - **fresh:** `consent_source='default'`, and `config.telemetry = {"sendMetrics":true,"extended":true}`. + - **existing:** `consent_source='legacy'`. Any saved `config.telemetry` is kept, with `extended:false` added; with nothing saved, the config row stays absent, which means off. + +**Rationale**: +- The check runs inside `Migrate`, which both entrypoints call, so it's correct whichever runs first. That includes `bootstrap-admin` running before the first `serve`, which would otherwise make a fresh install look existing. +- Reinstalling over an existing PVC, or reusing a populated PostgreSQL database, counts as existing, as the spec's Edge Cases require. + +**Alternatives considered**: +- *Counting users.* Wrong after `bootstrap-admin`. +- *A Helm hook that marks fresh installs.* Breaks for `--reuse-values` and non-Helm installs. +- *A pure-SQL migration.* Portable SQL can't read the existing JSON config value. + +## R11. Consent, notice and state storage (FR-003–FR-005, FR-012, FR-017–FR-019) + +**Decision**: Three stores, split by who may write them. +- **`config.telemetry`** (existing key → JSON) holds the admin's choice, `{sendMetrics, extended}`. It is still edited via `PUT /admin/config/telemetry` (`api/internal/handlers/config.go:56`). Saving `sendMetrics: false` also saves `extended: false` (FR-003, spec Q7), and the UI disables the extended switch and shows it off while basic is off. A post-save hook for the `telemetry` section (following the `auth` hook at `api/internal/handlers/config.go:131`) does three things in the same transaction: + - sets `consent_source='admin'` + - deletes the install ID when extended goes off + - creates one when extended goes on + + When the operator has disabled telemetry, the handler returns `409`. +- **`telemetry_state`** (new singleton table) holds machine state: consent source, install ID, notice-shown time, schedule, delivery status, and the extended-fallback marker. No admin config endpoint can write it. +- **`telemetry_notice_acks`** (new table, keyed by `user_id`) records each admin's notice dismissal. +- **Notice condition.** The notice is pending for a user who holds `config:manage` when all of these hold: + - a destination is in effect, meaning the kind isn't `none` or `disabled` + - `consent_source = 'default'` + - the user has no ack row +- **Report gate.** Reports are allowed only when `sendMetrics` is true, the destination kind is not `disabled` or `none`, and either `consent_source` isn't `'default'` or `notice_shown_at` is set. + +**Rationale**: +- The install ID can't be written through the generic config endpoint, so no config write can set or spoof it. +- The Admin Settings section keeps its existing save flow. +- "Shown" is recorded when the dashboard actually renders the notice (`POST .../notice {"action":"seen"}`), which matches the spec's "shown" wording more closely than recording when the API serves it. + +**Alternatives considered**: +- *Everything in `config.telemetry`.* An admin `PUT /admin/config/telemetry` could then set the ID, and the delivery state would show up in GET `/admin/config`. +- *Gating reports on dismissal instead of display.* Stricter than the spec ("within 1 hour of the notice being *shown*"), and it would leave telemetry stuck if an admin never clicks. + +## R12. Scheduling (FR-007, SC-005) + +**Decision**: The schedule is persisted, and replicas claim each slot. +- **Polling.** The reporter checks every `min(5m, interval/4)`. +- **Gate open.** When the gate first opens (notice seen, or admin consent), it sets `next_due_at = now + U(0, min(15m, interval/4))`. +- **Claiming a slot.** A process claims a due slot with: + ```sql + UPDATE telemetry_state + SET next_due_at = ?, last_attempt_at = ? + WHERE id = 'singleton' AND next_due_at = ? + ``` + It proceeds only if exactly one row changed. +- **After success.** `next_due_at = now + interval + U(0, interval/48)`. +- **After failure.** Back off 1 h, 2 h, 4 h, and so on, capped at `interval`, tracked in `consecutive_failures`. Reports are never queued or replayed. +- **Interval setting.** `--telemetry-interval` / `GAMEPLANE_TELEMETRY_INTERVAL` (default `24h`, minimum `1m`; chart value documented as testing-only). + +**Rationale**: +- Persisting the schedule survives restarts. +- The conditional UPDATE is portable to SQLite and Postgres and stays safe even if someone ignores "Keep at 1" for API replicas. +- A spacing of at least `interval` after every *accepted* report gives the "at most one per 24 h" guarantee. +- Jitter spreads load on the default provider. + +**Alternatives considered**: +- *Keeping the ticker.* Defeated by restarts. +- *Leader election.* Too heavy for a once-a-day POST. + +## R13. Resolving the destination (FR-001, FR-002, FR-005, FR-006, FR-009, FR-017) + +**Decision**: The API resolves exactly one destination kind, in this order: + +| Condition (first match wins) | Kind | Endpoint | +|---|---|---| +| `--telemetry-disabled` / `GAMEPLANE_TELEMETRY_DISABLED=true` | `disabled` | none | +| endpoint flag set and `GAMEPLANE_TELEMETRY_BUNDLED=true` (set only by the chart's auto-wiring) | `bundled` | the flag value | +| endpoint flag set | `custom` | the flag value | +| `telemetry.DefaultEndpoint != ""` | `default` | the constant | +| otherwise | `none` | none | + +- `telemetry.DefaultEndpoint` is a Go constant in `api/internal/telemetry`, and is **`""` until OD-1 is ruled**. The feature PR can't merge while it is empty (plan.md, Merge gate). That makes it the single authoritative place FR-002 asks for. The chart never repeats the URL. +- The `default` kind requires an `https` scheme; a non-https default is a startup error. TLS uses the system roots with full verification, as FR-009 requires. +- `custom` and `bundled` keep today's behaviour: any scheme, because the bundled receiver is plain in-cluster HTTP. +- The chart's new value `api.telemetry.enabled` (default `true`) renders `--telemetry-disabled` when false. The template uses `hasKey`, because `--reuse-values` from beta.8 lacks the key (F-214 precedent at `api.yaml:394-399`). + +**Rationale**: SC-004 requires a single setting for either action: `api.telemetry.enabled=false` disables telemetry, and `api.telemetry.endpoint=…` redirects it. The `none` kind keeps today's behaviour exactly until a domain exists. + +## R14. Where each extended field comes from (FR-011) + +No new RBAC is needed; every source is already readable (see the baseline facts). + +| Field | Source | Notes | +|---|---|---| +| `env.k8s` | `Discovery().ServerVersion()` Major/Minor | Digits are kept. Values not matching `^1\.[0-9]{1,3}$` are sent as `other`. | +| `env.distro` | R16 heuristics | | +| `env.arch` | `node.Status.NodeInfo.Architecture` across local nodes | Sorted and unique; any non-enumerated value is sent as `other`. | +| `env.nodes` | local node count | Bands: `1`, `2-3`, `4-10`, `11-50`, `51+`. The spec's "50+" means more than 50. | +| `games` | local GameServers → `spec.templateRef` → GameTemplate labels | See R15. | +| `features.wakeOnConnect` | any local GameServer with `spec.idle.wakeOnConnect` | `operator/api/v1alpha1/gameserver_types.go:152`, `:218` | +| `features.tunnels` | set of `spec.tunnel.provider` where `tunnel.enabled` | Enumeration: `frp`, `tailscale`, `playit`. | +| `features.capture` | API `cfg.captureFeatureEnabled` | | +| `features.backups` | at least one BackupSchedule in the cluster | | +| `features.sso` | Helm OIDC configured (`cfg.oidcIssuer != ""`), or a DB `auth` provider of kind `oidc`, `google` or `github` that is enabled | | +| `features.auditForwarding` | `cfg.auditWebhookURL != ""`, or the S3 sink is configured (`cfg.auditS3Endpoint != "" && cfg.auditS3Bucket != ""`, `api/cmd/main.go:234`) | stdout logging doesn't count | +| `features.clusters` | 1 (local) plus the number of `Cluster` CRs | Bands: `1`, `2-3`, `4-10`, `11+` | +| `features.db` | `cfg.dbDriver` | `sqlite` or `postgres` | +| `features.language` | `"en"` until spec 019 ships a language setting | Spec 019 owns adding real values to the enumeration. | + +**Counting scope**: servers, templates and games are counted on the **local cluster only**, the same as today's basic `servers` and `templates`. FR-010 keeps the basic semantics unchanged, and remote reads can fail. Multi-cluster use shows up through `features.clusters`. + +## R15. Official modules and look-alikes (FR-011, FR-034) + +**Decision**: +- **On the install.** + - The chart passes `--official-module-source=` (`GAMEPLANE_OFFICIAL_MODULE_SOURCE`), and only when `defaultModuleSource.enabled`. + - A GameServer counts as running official module `m` only if its template has all three of: + - `managed-by=Module` + - `module-source` equal to that source's name + - `module-name = m`, where `m` appears in the source's `spec.oci.modules[].name` (or the git index) + - Everything else is summed under `custom`: manual templates, uploads, other sources, and look-alike names. No other name ever leaves the cluster. +- **On the receiver.** `telemetryschema` embeds `catalog.txt`, which is generated from `charts/gameplane/values.yaml` `defaultModuleSource.oci.modules`. The receiver folds any key not in that list into `custom`, which bounds cardinality and blocks spoofed names. +- **Drift check.** A new script, `hack/check-telemetry-catalog.sh`, fails `make lint` and CI when the list and the chart differ. It runs alongside `hack/check-specs.sh`. + +**Known limitation**: a module added to the catalog after a receiver was built counts as `custom` on that receiver until the receiver is updated. This is documented. + +## R16. Kubernetes distribution detection + +**Decision**: The first match wins, using signals the API can already read: + +| Distribution | Signal | +|---|---| +| `k3s` | `gitVersion` contains `+k3s` | +| `rke2` | `gitVersion` contains `+rke2` | +| `k0s` | `gitVersion` contains `+k0s` | +| `eks` | `gitVersion` contains `-eks-` | +| `gke` | `gitVersion` contains `-gke.` | +| `aks` | node label `kubernetes.azure.com/cluster` | +| `openshift` | node label `node.openshift.io/os_id` | +| `microk8s` | node label `microk8s.io/cluster` | +| `minikube` | node label `minikube.k8s.io/name` | +| `kind` | node `spec.providerID` starts with `kind://` | +| `doks` | `providerID` starts with `digitalocean://` | +| `talos` | `nodeInfo.osImage` starts with `Talos` | +| `other` | anything else, including plain kubeadm | + +**Rationale**: no new RBAC and no kube-system reads are needed, and the list is fixed and published (FR-013). Plain kubeadm can't be told apart cheaply, so it falls into `other`, which is accepted. + +## R17. E2E strategy (constitution I) + +**Decision**: +- **New `telemetry` bucket.** It contains one top-level test, `TestTelemetryLifecycle`, which calls `t.Parallel()` and runs ordered subtests. It is the bucket's only test, because later steps run `helm upgrade` on that bucket's own cluster. The receiver's ingest limit is raised for this cluster (`INGEST_SOURCE_DAILY_LIMIT=0`, meaning unlimited) and `api.telemetry.interval=1m`. The subtests, in order: + - The fresh install's notice is pending. + - Recording it as seen makes the first report arrive at the bundled receiver. + - Duplicate reports on the same day are deduplicated. + - Turning extended off makes the next report basic-only. + - Resetting the ID shows up as a new install. + - An API pod restart causes no extra report. + - Pointing at a custom destination running the pinned `v0.2.0-beta.8` receiver image gets basic reports accepted, via the extended fallback. + - The public summary returns exactly five keys. + - A report reusing the install's ID but signed with another key gets 409. An unsigned report, a tampered body and a replayed body each get 403. None of them change any figure (SC-014). + - A second test-only client claims a freshly reset ID before the install's first report. The install's next attempt then returns 409, it rotates its ID, and its report is accepted (SC-015). + - An unauthenticated dashboard request reveals nothing. + - `api.telemetry.enabled=false` leads to zero further reports over 3 intervals, and the settings show "disabled by operator". +- **Upgrade bucket.** Add an assertion that a beta.8 install with no saved choice upgrades to `sendMetrics=false`, `extended=false`, and no pending notice. +- **No test or dev install may ever reach the project provider.** `deploy/kind/e2e.sh` and `deploy/kind/up.sh` set `api.telemetry.receiver.enabled=true` explicitly, and the CI `helm template` jobs assert this. Without it, every CI and dev install would report to the project provider once OD-1 sets the default. + +**Rationale**: +- The lifecycle steps depend on each other's state, so one sequential test is the honest shape. +- An isolated bucket keeps the cluster-wide `helm upgrade` away from other buckets and the login budget (CLAUDE.md: about 7 admin logins per bucket) untouched. +- Test-only configuration lives in chart values, not in production code paths. + +## R18. Admin UI surface (US1, US3; constitution II) + +**Decision**: +- **Notice.** A new `TelemetryNotice` banner, mounted in `AppLayout` next to `SafeModeBanner` and shown only to holders of `config:manage`. It records "seen" when it mounts and offers three actions: "Keep sharing", "Turn off extended", and "Turn off all". Each action records an acknowledgement, and the banner also links to Admin Settings. +- **Settings.** `AdminSettings` `TelemetrySection` is rewritten to show: + - the destination line (kind and host, with a link to the data-handling statement on the project website, per the OD-2 ruling) + - two switches; the extended switch is disabled while basic is off + - the install ID with a "Reset ID" action, confirmed in a dialog + - the live preview, as read-only formatted JSON + - the delivery status line + - when the operator has disabled telemetry, both switches are disabled and an explanatory message is shown +- **Copy.** The subtitle "No server names, player counts, or identifying data" changes to say that the extended tier includes a random install ID (FR-019). +- **Design.** The notice and settings frames are designed first in `design.pen` and exported to `design-export/` (core rule 1). The receiver's pages are designed in `telemetry-receiver/telemetry-dashboard.pen` and exported to `telemetry-receiver/design-export/`. The frames are: + - the notice banner + - the Telemetry settings section in its default, custom, bundled, disabled and none states + - the receiver's dashboard login, overview (basic plus extended), empty-state and refusal pages + +## R19. The language field before spec 019 + +**Decision**: `features.language` is always sent as `"en"`, and the enumeration is `["en"]`. When spec 019 lands, it adds its packs to the `telemetryschema` enumeration and wires the configured default. This cross-spec dependency is recorded in plan.md. + +**Rationale**: FR-011 lists the field and FR-013 requires a fixed set. Sending a constant is honest about the current product state, and 019 extends it without a schema bump, because new enumeration values on an older receiver fold into `other`. + +## R20. Signed reports and install-ID claims (FR-035–FR-038, US7) + +**Decision**: +- **Algorithm.** Ed25519 (`crypto/ed25519`) with HKDF-SHA256 (`crypto/hkdf`). Both are stdlib (Go 1.24+), so `telemetryschema` stays stdlib-only and owns signing and verification for both sides. +- **Stable local value (Q5).** + - `telemetry_state.signing_secret` holds 32 bytes from `crypto/rand`, base64-encoded. It is created the first time an install ID is created and kept for the install's lifetime, including across ID resets and extended off/on. + - No endpoint, log, audit event or report ever exposes it. + - It is never derived from the cluster's identity (kube-system UID, node names and so on), which keeps FR-012 intact. +- **Key derivation.** The key is: + + ```text + seed = HKDF-SHA256(ikm = signing_secret, salt = installId, info = "gameplane-telemetry-signing-v1", L = 32) + priv = ed25519.NewKeyFromSeed(seed) + ``` + + It is recomputed on every send and never stored. Because `installId` is part of the derivation, a reset (or an automatic rotation) yields a key that can't be linked to the previous one (US7 scenario 5). +- **What's on the wire.** + - `ext.key` holds the base64url (unpadded) 32-byte public key. + - `ext.sentAt` holds the RFC 3339 UTC send time. + - The header `Gameplane-Telemetry-Signature: ed25519=` signs the exact request body bytes. Signing raw bytes avoids JSON canonicalisation pitfalls, and because the key and send time are inside the body, both are covered. + - Basic-only reports carry neither the fields nor the header (FR-038). +- **Receiver checks.** These run in order for reports that carry `ext`. They happen before the limiter counts the report as accepted and before any write. Every refusal has a fixed body and changes nothing: + 1. If the header is missing or malformed, or the signature doesn't verify against `ext.key` over the body: **403** `{"error":"bad_signature"}`. + 2. If `sentAt` is outside `[now − 36h, now + 1h]`: **403** `{"error":"stale"}`. + 3. The receiver looks up `activity[HMAC(pepper, installId)]`. + - **Absent**: it claims the ID by inserting a record with `key_fp = SHA-256(ext.key)` and `last_sent_at = sentAt`. + - **Present**: if `key_fp` differs, **409** `{"error":"id_claimed"}`. If `sentAt ≤ last_sent_at`, **403** `{"error":"replay"}`. Otherwise it updates the record. + 4. Aggregation and per-day deduplication then follow R5. +- **API behaviour (Q6).** + - **409**: generate a new install ID (keep `signing_secret`), set `last_id_rotation_at`, rebuild and re-sign the report, and re-POST once in the same attempt. A second 409 in a row is recorded as `failed` with normal backoff, and the ID isn't rotated again until the next attempt. + - **403**: recorded as `failed` with normal backoff. The ID is never rotated (Edge Cases: install clock wrong). +- **Claim lifetime.** The claim is the activity record. It expires when the record does (90 days, OD-4) and is re-established by the next valid report (FR-038). + +**Rationale**: +- A claim on first use needs no project-issued secret and no registration step, which suits anonymous installs. +- Per-ID derived keys make "claim" and "reset unlinkability" the same mechanism. +- Signing the raw body covers every field, including the tier contents. +- Strictly increasing `sentAt` per ID, combined with the 36 h window, blocks replays of captured reports. Per-day deduplication alone would still let a capture be replayed on the next day. +- Storing the key's fingerprint rather than the key itself avoids keeping a second linkable identifier; the full key arrives with every report anyway. + +**What signing does not solve**: anyone can invent fresh IDs and keys and claim them, so fabricated installs are still possible. Per-source limits (R6) and the "approximate, self-reported" labelling remain the defence. Real attestation would need a secret issued by the project to each install, which the anonymous model rules out (spec Assumptions). + +**Alternatives considered**: +- *A secret stored in a Kubernetes Secret.* It survives a database wipe, but the ID doesn't, so there's no gain, and anyone who can read Secrets in the namespace could forge reports (Q5). +- *The kube-system namespace UID.* It isn't secret, needs new `namespaces` RBAC, and conflicts with FR-012 (Q5). +- *HMAC with a key shared with the provider.* The provider would then hold the secret and could forge reports itself, and the secret would have to be distributed. +- *Counting only the basic part on a mismatch.* An impersonator would still inflate basic counts (Q6). +- *Mutual TLS client certificates.* This needs a CA and per-install issuance, and breaks for plain-HTTP bundled receivers. diff --git a/specs/022-default-telemetry-dashboard/spec.md b/specs/022-default-telemetry-dashboard/spec.md new file mode 100644 index 000000000..099788c8c --- /dev/null +++ b/specs/022-default-telemetry-dashboard/spec.md @@ -0,0 +1,437 @@ +# Feature Specification: Default telemetry destination, extended telemetry, and telemetry dashboard + +**Feature Branch**: `feat/default-telemetry-dashboard` (not yet created) + +**Created**: 2026-10-06 + +**Status**: Draft (clarified) + +**Input**: User description: "Right now telemetry is only something someone can add. i want to add a default to a domain (not yet defined) and also build a dashboard to show the data provided by the telemetry provider". Follow-ups: "also could we extend the telemetry?" and "right now there is no verif for data sent. so i want a way for server to 'claim' the id with a key derivated from stable local value to sign the data so no one can impersonatte other id" + +## Clarifications + +### Session 2026-10-06 + +- Q1: Once a default destination exists, is telemetry opt-in or opt-out? → A: **Opt-out for new installs.** Fresh installs report unless an admin turns it off, and an admin notice on first login explains this. Existing installs keep their saved choice. Installs that never saved a choice stay off. +- Q2: Who is the dashboard for, and where does it live? → A: **A private, access-controlled page served by the receiver itself**, for whoever operates a provider (the project's or a self-hosted one). Alongside it, a **small public API** exposes only headline counts and none of the other anonymized data. +- Q3: What should extended telemetry add? → A: **All four categories:** + - environment (Kubernetes version, distribution, CPU architecture, node-count band) + - game usage (servers per official catalog module, with everything else counted as "custom") + - feature adoption (which optional features are in use) + - a random anonymous install ID +- Q4: How do admins consent to extended data? → A: **Two tiers with separate toggles, both on by default for new installs.** The first-login notice covers both. +- Q5: What local value is the signing key derived from? → A: **A random secret created once on the install and kept in its database**, combined with the install ID. Resetting the ID therefore yields a new, unlinkable key. Nothing derived from the cluster's own identity is used. +- Q7: What happens on save when basic is turned off while extended is on? → A: **Extended is turned off with it**, and saving succeeds. The dashboard also disables the extended switch whenever basic is off. +- Q8: Where do the provider's operational metrics live? → A: **Behind the dashboard credential, on the private port.** No aggregate is readable from the provider's public port except the public summary. +- Q9: Is running the project's receiver in scope? → A: **A runbook only.** It documents deployment, TLS, secrets, the public summary and backups. No infrastructure code. +- Q10: Where is the provider dashboard designed? → A: **In its own Pencil file**, `telemetry-receiver/telemetry-dashboard.pen`, which starts from a copy of the HeroUI design. +- Q6: What happens when a report's signature is wrong, or its ID is already claimed by another key? → A: **The provider refuses it and counts nothing.** When the refusal says the ID belongs to another key, the install automatically replaces its ID (and with it the key) and resends. + +## Context + +Today an install sends anonymous usage reports (`{version, servers, templates}`, about once a day) only if **two** gates are both open: + +1. **Whether**: an admin turns on **Admin Settings → Telemetry → Send anonymous usage metrics** (off by default). +2. **Where**: the operator configures a destination at install time, either an external receiver address or the bundled in-cluster receiver. Out of the box there is no destination, so the reporter never runs, even when the admin toggle is on. + +So telemetry only works when someone adds a destination. This feature makes five changes: + +- It gives gate 2 a default: the project-operated telemetry provider at a domain that hasn't been chosen yet (OPEN-DECISIONS OD-1). +- It turns telemetry on by default for **new** installs (Q1). +- It adds an **extended** tier of richer, still name-free data, behind its own toggle (Q3, Q4). +- It adds a private dashboard and a minimal public summary API on the provider (Q2). +- It makes extended reports verifiable. Each install signs them with a key tied to its install ID, and the provider binds each ID to the first key that uses it, so no one can report under another install's ID (Q5, Q6). + +The receiver currently keeps only in-memory counters that reset on restart, stores nothing durable, and rejects any report field beyond the original three. Supporting this feature means it must: + +- keep durable **aggregate** history +- keep a minimal per-install activity record for unique-install counts +- accept the extended report while still accepting basic reports from older installs + +Raw reports are still never stored. + +## User Scenarios & Testing *(mandatory)* + +### User Story 1 - New installs report by default, with an informed opt-out (Priority: P1) + +An operator installs Gameplane fresh with default settings. When an admin first signs in, a notice explains three things: + +- anonymous usage metrics are on, in two tiers: **basic** and **extended** +- exactly what each tier sends, including that extended includes a random install ID +- where the data goes + +The notice lets the admin turn off extended only, or turn off everything. If the admin leaves telemetry on, reports reach the project's default telemetry provider, and nobody has to configure anything. + +**Why this priority**: This is the core ask. A stock install produces adoption signal without setup, and the notice keeps the opt-out informed. + +**Independent Test**: Fresh install pointed at a test provider standing in for the default domain. Sign in as admin, confirm the notice, leave telemetry on, and confirm that a report arrives and is accepted. Repeat, turning off extended only, and confirm that only the basic report arrives. Repeat, turning off everything, and confirm that nothing arrives. + +**Acceptance Scenarios**: + +1. **Given** a fresh install with no telemetry destination configured, **When** the first admin signs in, **Then** a notice states that basic and extended usage metrics are on, lists every field each tier sends, names the destination, and offers one-step actions to turn off extended only or everything. +2. **Given** a fresh install where an admin has seen the notice and left both tiers on, **When** time passes, **Then** the first report, basic plus extended, reaches the default provider within 1 hour of the notice being shown, and reports continue about once a day. +3. **Given** a fresh install where no admin has signed in yet, **When** time passes, **Then** nothing is sent. +4. **Given** a fresh install where an admin turns everything off before the first report, **When** time passes, **Then** nothing is ever sent. +5. **Given** an install that existed before this feature and never saved a telemetry choice, **When** it is upgraded, **Then** both tiers stay off and no notice claims telemetry is on. +6. **Given** an install that existed before this feature with basic telemetry already on, **When** it is upgraded, **Then** basic stays on and extended stays off until an admin turns it on. +7. **Given** an install whose operator configured a custom destination or the bundled receiver before this feature, **When** it is upgraded, **Then** it keeps reporting only to that destination and never to the default provider. + +--- + +### User Story 2 - Operators can redirect or hard-disable telemetry at install time (Priority: P1) + +An operator running an air-gapped or privacy-sensitive cluster sets one install-time option that guarantees the install never contacts any telemetry destination, whatever an admin later toggles. Another operator points reports at their own receiver instead of the project default. + +**Why this priority**: Telemetry that is on by default is only acceptable if operators can refuse it before any data leaves. A hard off-switch protects air-gapped clusters, regulated environments, and anyone who doesn't want the install contacting a project-run service. It has to ship with the default, not after it. + +**Independent Test**: Install with telemetry explicitly disabled, sign in as admin, and observe for a full reporting cycle that no notice claims telemetry is on and no outbound telemetry connection is made. Repeat with a custom destination and confirm that reports arrive there only. + +**Acceptance Scenarios**: + +1. **Given** an install with telemetry explicitly disabled at install time, **When** an admin opens Admin Settings → Telemetry, **Then** both toggles are unavailable and a message says the operator has disabled telemetry for this install. +2. **Given** an install with telemetry explicitly disabled, **When** any amount of time passes, **Then** no connection is made to any telemetry destination, and the US1 first-login notice is not shown. +3. **Given** an install with a custom destination, **When** reports are sent, **Then** they go only to the custom destination, and the US1 notice names that destination instead of the project default. + +--- + +### User Story 3 - Admins see where data goes and exactly what is sent (Priority: P2) + +At any time, an admin opens Admin Settings → Telemetry. They see: + +- the destination host +- the two tier toggles +- the current install ID, with a way to reset it +- a literal preview of the next report, including every extended field when that tier is on +- while telemetry is on, when the last report was sent and whether it succeeded + +**Why this priority**: Informed opt-out depends on admins being able to see the destination and exact payload at any time, not only in the one-time notice. The pipeline works without this, so it ranks P2. + +**Independent Test**: Open the Telemetry settings on installs with the default, custom, bundled, and disabled destinations, each with extended on and off. Confirm that each shows the correct destination and a preview identical to what the provider receives. + +**Acceptance Scenarios**: + +1. **Given** the default destination, **When** an admin views Telemetry settings, **Then** the default provider's host is shown, labelled as the Gameplane project's telemetry service. +2. **Given** telemetry is on, **When** an admin views Telemetry settings, **Then** the last successful report time and the outcome of the last attempt are shown. Failures appear as a short, non-technical status, such as "Last attempt failed, will retry". +3. **Given** the preview, **When** the next report is sent, **Then** the payload the provider receives has the same fields and values as the preview at that moment. +4. **Given** extended telemetry is on, **When** an admin resets the install ID, **Then** the preview immediately shows a new ID, and the old ID is never sent again. +5. **Given** extended telemetry is turned off, **When** an admin views Telemetry settings, **Then** no install ID is shown or kept. Turning extended back on creates a new ID. + +--- + +### User Story 4 - Provider operator views aggregate telemetry on a private dashboard (Priority: P2) + +A provider operator opens the provider's private dashboard. This is the project maintainers for the default provider, or a self-hoster for their own receiver. After proving access, they see, for a chosen time range: + +- how many installs reported +- which Gameplane versions they run +- how large their fleets are + +**Why this priority**: The project needs the collected data to be readable before it can prioritize work with it. It ranks P2 because it depends on data from US1 existing. + +**Independent Test**: Feed a provider a known set of synthetic basic reports across several days, open the dashboard with valid access, and confirm that every figure matches the expected aggregates. Open it without access and confirm that no figure is revealed. + +**Acceptance Scenarios**: + +1. **Given** reports from multiple days, **When** an authorized viewer picks a range of 7, 30, 90, or 365 days, **Then** the dashboard shows a per-day count of reports received. +2. **Given** reports from several versions, **When** an authorized viewer looks at version adoption, **Then** it shows each version's share of reports over the range. Versions outside the top 10 are grouped as "Other", and malformed versions appear as "Invalid". +3. **Given** reports with varying server and template counts, **When** an authorized viewer looks at fleet size, **Then** it shows the distribution in the same size bands the provider already uses (0, 1, 2, 5, 10, 25, 50, 100, 250, 250+) and the median per install. +4. **Given** no reports in the selected range, **When** an authorized viewer opens the dashboard, **Then** an empty state explains that no data has been received yet. It shows no zero-filled charts that could look like real data. +5. **Given** the provider has restarted, **When** an authorized viewer opens the dashboard, **Then** all history within the retention period is still shown. +6. **Given** a viewer without valid access, **When** they open the dashboard or any of its data, **Then** access is refused with a generic message. Nothing is revealed: no figures, no date ranges, no version names, and no hint about whether any data exists. + +--- + +### User Story 5 - Extended telemetry shows how Gameplane is actually used (Priority: P3) + +Using extended data, the provider operator sees on the dashboard: + +- unique active installs, with new and lapsed installs +- which Kubernetes versions, distributions, architectures, and cluster sizes installs run on +- which official games are most run +- which optional features are actually used + +These answer questions that basic counts can't, such as "how many installs are single-node homelabs on arm64?" or "is anyone using relay tunnels?". + +**Why this priority**: It turns adoption counts into prioritization signal. The basic pipeline and dashboard (US1–US4) are useful without it, so it ranks P3. + +**Independent Test**: Feed a provider a synthetic population of installs with known IDs, environments, games, and features over several weeks, including ID resets, upgrades, and installs that stop reporting. Confirm that every extended figure on the dashboard matches the expected values. + +**Acceptance Scenarios**: + +1. **Given** extended reports over a range, **When** an authorized viewer looks at installs, **Then** the dashboard shows: + - unique active installs for the latest day and the trailing 7 and 30 days + - new installs (first seen) per period + - lapsed installs (not seen for 30 days) per period +2. **Given** extended reports, **When** an authorized viewer looks at environment, **Then** it shows each install's share by Kubernetes minor version, distribution, CPU architecture, and node-count band. +3. **Given** extended reports, **When** an authorized viewer looks at game usage, **Then** it shows, for each official module, the number of installs running it and the total servers using it, plus a single "custom" figure for all non-official modules. +4. **Given** extended reports, **When** an authorized viewer looks at feature adoption, **Then** it shows the share of installs using each tracked feature. +5. **Given** some installs share only basic data, **When** an authorized viewer looks at any extended figure, **Then** the dashboard states how many of the reports in the range included extended data, so coverage is clear. +6. **Given** an install that upgraded within the range, **When** an authorized viewer looks at version adoption by install, **Then** the install is counted on its latest reported version. + +--- + +### User Story 6 - Anyone can read headline counts from a public summary API (Priority: P3) + +A website, README badge, or curious user asks the provider's public summary API how many installs are reporting. They get headline counts only. Version adoption, fleet sizes, environment, games, features, and per-day history stay private to the dashboard. + +**Why this priority**: It lets the project show adoption publicly (badges, website) without exposing the detailed anonymized data. The private dashboard and data collection are useful without it, so it ranks P3. + +**Independent Test**: Feed a provider known reports, call the public summary without credentials, and confirm that it returns exactly the allowed headline counts and nothing else. Disable the public summary and confirm that it is unavailable. + +**Acceptance Scenarios**: + +1. **Given** the public summary is enabled, **When** anyone requests it without credentials, **Then** it returns only the values listed in FR-029. +2. **Given** the public summary, **When** its response is inspected, **Then** it contains no version names, fleet-size data, server or template totals, environment, game, or feature data, per-day series, or install IDs. +3. **Given** the provider operator has not enabled the public summary, **When** anyone requests it, **Then** it is unavailable. +4. **Given** heavy repeated polling of the public summary, **When** requests keep arriving, **Then** the provider keeps serving reports and the dashboard normally. + +--- + +### User Story 7 - No one can report under another install's ID (Priority: P3) + +Someone learns an install's ID, for example from a screenshot of Admin Settings, and sends forged reports under it to skew that install's version, environment or feature figures. The provider rejects them, because the ID was claimed by the real install's key and the forger can't produce that key. + +**Why this priority**: Unique-install and per-install figures are only as trustworthy as the IDs behind them. The pipeline and dashboard work without this, so it ranks P3, but it has to ship with the extended tier, because a published ID would otherwise be forgeable from day one. + +**Independent Test**: Against a provider that has accepted signed reports from an install, send reports carrying the same ID but signed with a different key, unsigned, with an altered body, or with an old send time. Confirm that every one is refused and no figure changes. Then have a fresh install's ID claimed by a different key first, and confirm that the install replaces its ID and its next report is accepted. + +**Acceptance Scenarios**: + +1. **Given** an install ID claimed by the install's key, **When** a report arrives with that ID signed by any other key, **Then** the provider refuses it and no aggregate or activity record changes. +2. **Given** a signed report, **When** any byte of its body is changed in transit, **Then** the provider refuses it. +3. **Given** an extended report without a signature, with a send time outside the accepted window, or replaying a report already accepted, **When** it arrives, **Then** the provider refuses it. +4. **Given** an install whose ID was claimed by someone else first, **When** its report is refused for that reason, **Then** the install replaces its ID and key, resends once, the resent report is accepted as a new install, and Admin Settings shows that the ID was replaced. +5. **Given** an install that resets its ID, **When** its next report arrives, **Then** it carries a new key, and the provider can't tell that the old and new IDs belong to the same install. +6. **Given** a basic-only report, **When** it arrives, **Then** no signature is required, because it carries no ID to impersonate. + +--- + +### Edge Cases + +- **Admin enabled the toggle before this feature, with no destination configured.** That consent was saved while it had no effect. After upgrade, basic reports start going to the default provider. Extended stays off (US1 scenario 6). The upgrade notes MUST call this out (FR-008). +- **New install vs. existing install.** An install counts as new only if it has no prior Gameplane state when it first starts on this version. Reinstalling over existing persisted state counts as existing, so an operator's or admin's previous choice is never silently flipped to on. +- **Install with no admin sign-in.** A headless or automated install where no admin ever signs in sends nothing, because the notice is never shown (FR-004). +- **Install ID reset.** The install appears to the provider as one new install, and its old ID lapses after 30 days. Dashboard install counts can briefly be off by one per reset. This is accepted and documented on the dashboard. +- **Duplicated ID.** A cluster restored from a backup, or cloned, can share an ID with its source. Such installs are counted as one until an admin resets the ID. This is an accepted limitation. +- **Unrecognized values.** An unrecognized Kubernetes distribution, an unknown architecture, or a version that doesn't parse is reported as "other". Raw strings are never sent. +- **Look-alike module names.** A module that shares a name with an official catalog module, but comes from any other source, counts as "custom". Its name is never sent. +- **Older provider.** A self-hosted provider older than this feature rejects extended reports. The install still delivers its basic report to it (FR-016). +- **Older installs.** The provider keeps accepting basic-only reports from installs older than this feature. +- **No route to the internet** (air-gapped cluster or restrictive egress). Delivery fails quietly. No user-facing error appears beyond the US3 status line, retries are bounded so a failure never becomes a request storm, and the rest of the product is unaffected. +- **Frequent restarts.** An install whose control plane restarts more often than once a day must still report about daily, and must never send more than one report per day (FR-007). Repeated restarts must not inflate counts. +- **Default provider unreachable or rejecting reports.** The install backs off and retries at the next cycle. Reports are never queued and replayed in bulk. +- **Spoofed or flooded reports.** The default provider accepts reports from anyone on the internet without a shared secret. Signing (FR-035–FR-038) stops anyone from reporting under an ID that another key has claimed. It can't stop someone from inventing new IDs and keys, so fabricated installs and basic reports remain possible. The provider limits how many reports a single source can submit. Dashboard and public-summary figures are presented as approximate and self-reported. +- **ID seen before its first report.** If someone copies an ID from the Admin Settings preview and claims it before the install's first report, the install's report is refused as already claimed. The install then replaces its ID automatically (FR-037), and the forger is left holding an ID nobody uses. +- **Install clock wrong.** A report whose send time falls outside the accepted window is refused. The install keeps its ID, backs off as for any failed delivery, and Admin Settings shows the failure. The ID is never rotated for this reason. +- **Claim expiry.** When an ID's activity record expires after 90 days without reports (OD-4), its claim goes with it. An install that returns after that is treated as new, and its own key claims the ID again. +- **Restored database.** Restoring the install's database from a backup restores the same secret and ID, and so the same key, and reports keep being accepted. Losing the database makes the install new (Edge Cases: new vs. existing install), with a new ID and secret. +- **Malicious values.** Malicious version strings, and malicious values in any other field, fall into "Invalid" or "other" buckets. Hostile input can't create unbounded dashboard categories or inject content into the dashboard. +- **Default domain not decided at release time.** A build MUST NOT ship with a placeholder destination (FR-002). Until OD-1 is ruled, the default stays unset. In that case new installs have no destination, the reporter never runs, and the US1 notice is not shown. +- **Explicit disable conflicts with the admin toggles.** The operator's install-time disable always wins over both tiers. +- **Lost or leaked dashboard access.** The provider operator can replace the dashboard access credential without losing any stored data. + +## Requirements *(mandatory)* + +### Functional Requirements + +**Default destination & consent** + +- **FR-001**: When the operator has not configured a telemetry destination, the system MUST use the project's default telemetry provider as the destination. +- **FR-002**: The default destination MUST be defined in exactly one authoritative place, and MUST NOT ship as a placeholder or unresolvable value. Until OD-1 is ruled, the default MUST be unset, which keeps today's behavior. +- **FR-003**: Telemetry MUST have two tiers with independent admin controls: **basic** and **extended**. Extended can only be on while basic is on, and turning basic off turns extended off. The tier defaults are: + - On a **new** install with a destination in effect, both tiers MUST default to **on**. + - On an install that existed before this feature, a saved basic choice MUST be kept, and if no choice was ever saved, basic MUST stay **off**. + - Extended MUST default to **off** on every pre-existing install. +- **FR-004**: On a new install where telemetry defaults to on, the system MUST show the first admin who signs in a notice. The notice: + - lists the exact fields of both tiers + - states that extended includes a random install ID + - names the destination host + - offers one-step actions to turn off extended only, or everything + + No report MUST be sent before an admin has been shown this notice. Once dismissed, the notice MUST NOT reappear for that admin. +- **FR-005**: An operator MUST be able to set, at install time, either a custom destination (which replaces the default) or an explicit **disabled** state. When disabled, no telemetry of either tier is ever sent, whatever the admin toggles say, and the FR-004 notice is not shown. +- **FR-006**: Destinations the operator configured before this feature, whether a custom destination or the bundled in-cluster receiver, MUST keep working unchanged after upgrade, and MUST NOT also send to the default provider. +- **FR-007**: While telemetry is on, an install MUST send about one report per day of uptime, survive control-plane restarts without skipping days, and send no more than one report in any 24-hour window. +- **FR-008**: The release that introduces this feature MUST state the following in its upgrade notes and install documentation: + - that new installs share basic and extended data by default + - exactly what each tier contains + - which existing installs are affected (those whose basic toggle was already on) + - how to disable telemetry at install time and from the dashboard +- **FR-009**: Reports to the default provider MUST travel only over an encrypted connection with a verified server identity. + +**Payload & privacy** + +- **FR-010**: The **basic** report MUST stay exactly the current three fields: version, server count, and template count. +- **FR-011**: The **extended** report MUST add the following, and only these, sent only while the extended tier is on: + 1. **Install ID**: a random identifier (FR-012). + 2. **Environment**: + - Kubernetes minor version + - distribution category (from a fixed published list, plus "other") + - CPU architecture(s) of the nodes + - node-count band: 1, 2–3, 4–10, 11–50, 50+ + 3. **Game usage**: the server count for each module from the official catalog, plus one combined count for all other modules, labelled "custom". + 4. **Feature adoption**: + - wake-on-connect in use (yes/no) + - relay tunnel types in use + - packet capture enabled (yes/no) + - any server with backups configured (yes/no) + - single sign-on enabled (yes/no) + - audit forwarding in use (yes/no) + - registered-cluster band: 1, 2–3, 4–10, 10+ + - database backend category + - default dashboard language + 5. **Proof of identity**: the install's public signing key and the time the report was sent. The report is signed (FR-035). +- **FR-012**: The install ID MUST be random and not derived from any cluster, host, network, or user attribute. It MUST be kept only on the install. An admin MUST be able to reset it at any time. It MUST be deleted when the extended tier is turned off, and a new one created if the tier is turned back on. The install's signing secret (FR-035) MUST likewise be kept only on the install, and MUST never be sent, displayed or exported through any Gameplane interface. +- **FR-013**: Every extended value MUST come from a fixed, published set of categories or bands, except per-module server counts (non-negative integers), the install ID, the public signing key and the send time. Values that don't fit MUST be sent as "other". Neither tier MUST carry names, namespaces, hostnames, addresses, player counts, custom module names, or free text. +- **FR-014**: The provider MUST NOT store raw reports or source network addresses. It MAY keep source addresses transiently, and only to enforce per-source request limits. It MUST NOT store any extended attribute (environment, games, features) linked to an install ID. Extended attributes exist on the provider only as aggregates. +- **FR-015**: For unique-install counting, the provider MAY keep one **activity record** per install ID, holding only: + - a one-way transformed form of the ID + - a fingerprint of the key that claimed the ID (FR-036) + - the first-seen date + - the last-seen date + - the send time of the latest accepted report, used only to refuse replays (FR-036) + - the last reported version + + It MUST delete the record once the install has been inactive for the period set in OD-4. +- **FR-016**: The provider MUST keep accepting basic-only reports. An install whose provider rejects extended reports MUST still deliver its basic report to that provider. + +**Admin transparency** + +- **FR-017**: Admin Settings → Telemetry MUST show the destination host currently in effect: the project default, a custom destination, the bundled receiver, or disabled by the operator. +- **FR-018**: Admin Settings → Telemetry MUST show a preview of the next report's exact field values, including every extended field and the install ID when that tier is on. While telemetry is on, it MUST also show the time of the last successful report and the outcome of the last attempt. +- **FR-019**: Admin Settings → Telemetry MUST present basic and extended as separate controls, and MUST offer an install-ID reset while extended is on. When extended is on, no product copy may claim that no identifying data is sent. Instead, it MUST state that a random install ID is included. While basic is off, the extended control MUST be disabled and shown as off. + +**Provider storage** + +- **FR-020**: The provider MUST keep **daily aggregates** (UTC) for at least 12 months, and they MUST survive provider restarts. + - **From basic data**, per day: + - reports accepted + - count per sanitized version + - server and template distributions by size band + - server and template totals + - **From extended data**, per day: + - unique active installs, and new installs + - per-category counts for each environment field + - installs and servers per official module, plus "custom" + - per-feature adoption counts + - the number of reports that included extended data +- **FR-021**: The provider MUST limit how many reports a single source can submit per day, so that one source can't distort the figures by flooding. + +**Private dashboard** + +- **FR-022**: The provider MUST serve a private dashboard of the FR-020 aggregates for 7-, 30-, 90-, and 365-day ranges, viewable only by viewers who present the provider operator's access credential. +- **FR-023**: Unauthenticated access to the dashboard or its data MUST be refused with a generic message that reveals no figures, dates, categories, or whether any data exists. +- **FR-024**: The dashboard MUST show these **basic** views: + - reports per day as a trend + - version adoption, with the top 10 versions plus "Other" and "Invalid" + - fleet-size distributions and medians for servers and templates + - total servers and templates on the latest day + - a "data as of" timestamp +- **FR-025**: The dashboard MUST show these **extended** views: + - unique active installs (latest day, trailing 7 and 30 days) + - new and lapsed installs per period + - version adoption by install + - environment breakdowns + - game usage by installs and by servers, including "custom" + - feature adoption shares +- **FR-026**: The dashboard MUST label basic figures as approximate and self-reported. Every extended view MUST show what share of reports in the range included extended data. +- **FR-027**: The dashboard MUST show a clear empty state when there is no data in the selected range, rather than zero-valued charts. +- **FR-028**: The provider operator MUST be able to replace the dashboard access credential without losing stored data. Until a credential is configured, the dashboard MUST stay unavailable rather than open. + +**Public summary API** + +- **FR-029**: The provider MUST offer a public summary that needs no credentials and returns **only**: + - reports received on the latest complete day + - reports received over the trailing 30 days + - total reports received since collection began + - unique active installs over the trailing 30 days (from extended data) + - a "data as of" date +- **FR-030**: The public summary MUST NOT expose any other aggregate, any category breakdown, any per-day series, or any install ID. No other unauthenticated endpoint of the provider may expose aggregates either. Operational metrics MUST require the dashboard credential (FR-022). +- **FR-031**: The public summary MUST be off unless the provider operator enables it. The project's default provider enables it. +- **FR-032**: The public summary MUST be rate-limited per source, and safe for clients to cache, so that public polling can't degrade report ingestion or the dashboard. + +**Self-hosted parity** + +- **FR-033**: The bundled in-cluster receiver and standalone self-hosted receivers MUST offer the same storage, private dashboard, and public summary as the default provider, under the same defaults. +- **FR-034**: The official module catalog used for game-usage reporting MUST be the same published list the install already trusts as its official module source. Any module the install did not get from that source counts as "custom". + +**Report authenticity** + +- **FR-035**: Every extended report MUST be signed. The signing key MUST be derived from a random secret created once on the install and kept in its database, combined with the current install ID. The key is therefore unique to that ID, and an ID reset yields a new key that can't be linked to the old one. The secret and private key MUST never leave the install. The report carries the public key and its send time, and the signature MUST cover the whole report as sent. +- **FR-036**: The provider MUST bind an install ID to the key of the first validly signed report that uses it (the **claim**). From then on it MUST accept reports for that ID only when they are signed by the same key. It MUST refuse, without changing any aggregate or activity record, any extended report that is: + - unsigned, or carries a signature that doesn't verify against the whole report + - signed with a send time more than 36 hours old or more than 1 hour in the future + - signed by a key other than the one that claimed its ID + - sent no later than the latest report already accepted for its ID (a replay) +- **FR-037**: When the provider refuses a report because its ID is claimed by another key, the install MUST replace its ID, and so its key, and resend once in the same attempt. Admin Settings MUST show when the ID was last replaced for this reason. A refusal for any other reason MUST NOT trigger a replacement. +- **FR-038**: A claim MUST last exactly as long as the ID's activity record, and expire with it (FR-015, OD-4). Basic-only reports carry no ID and need no signature. + +### Key Entities + +- **Basic report**: one anonymous sample from one install, carrying version, server count, and template count. Unchanged by this feature. +- **Extended report**: the basic report plus an install ID, environment categories, per-official-module server counts with a "custom" total, feature-adoption flags and bands, the public signing key and the send time. It is signed (FR-035) and sent only while the extended tier is on. +- **Install ID**: a random identifier kept only on the install. An admin can reset it, and it's deleted when extended is turned off. The install also replaces it automatically when it turns out to be claimed by another key (FR-037). +- **Install signing secret**: random bytes created once on the install and kept in its database. Combined with the install ID, they derive the signing key. They are never sent or shown. +- **Telemetry destination**: where an install's reports go. Exactly one of: project default, operator-specified custom destination, bundled in-cluster receiver, or disabled. +- **Telemetry consent**: the admin's on/off choice for each tier. Basic and extended default to on for new installs. For existing installs, basic keeps its saved choice (or stays off if none was saved), and extended stays off. Consent is evaluated before every report, and an operator's disabled destination overrides both tiers. +- **Telemetry notice acknowledgement**: per admin, whether the FR-004 notice has been shown and dismissed. It gates the first report on new installs. +- **Delivery status**: per install, the last attempt time, the last successful report time, and the last outcome. Shown to admins and never sent anywhere. +- **Daily aggregate**: per calendar day (UTC) on the provider. Holds the basic and extended tallies listed in FR-020. It's the only form in which report contents are kept. +- **Activity record**: per install ID on the provider. Holds the transformed ID, the fingerprint of the key that claimed it, the first-seen and last-seen dates, the latest accepted send time, and the last version. It expires after inactivity (OD-4), and the claim expires with it. +- **Dashboard access credential**: the provider operator's secret that unlocks the private dashboard. It can be replaced without touching stored data. +- **Public summary**: a view derived from daily aggregates and activity records, limited to the values listed in FR-029. + +## Success Criteria *(mandatory)* + +### Measurable Outcomes + +- **SC-001**: On a fresh install with default settings, the first report is accepted by the default provider within 1 hour of the first admin seeing the notice, with zero telemetry configuration steps. +- **SC-002**: Turning telemetry off takes one action from the first-login notice and one action from Admin Settings, either for extended only or for everything. After turning off extended, no further report carries an install ID or any extended field. After turning off everything, the install makes zero connections to any telemetry destination over a 48-hour observation. +- **SC-003**: Over a 48-hour observation, an install with telemetry disabled at install time, or an upgraded install that never saved a choice, makes zero connections to any telemetry destination. +- **SC-004**: An operator can disable or redirect telemetry by changing exactly one install-time setting. +- **SC-005**: Over 7 days of operation that includes at least 3 control-plane restarts, an install with telemetry on produces 7 ± 1 reports, never more than one in any 24-hour window. +- **SC-006**: In 100% of sampled reports, the Admin Settings preview matches the payload the provider receives, field for field. +- **SC-007**: An authorized viewer can find the following within 1 minute of opening the dashboard, without any other tool: + - unique active installs over 30 days + - the most common version + - the median fleet size + - the five most-run official games + - the share of single-node installs +- **SC-008**: For a synthetic population with known truth, including restarts, upgrades, and installs that stop reporting, the dashboard's 30-day unique-active-install count is within 1% of the true count. +- **SC-009**: After a provider restart, 100% of daily aggregates and activity records within their retention periods are still present. +- **SC-010**: With 12 months of history at 10,000 reports per day, the dashboard shows the 365-day view within 3 seconds. +- **SC-011**: Every response from the public summary contains only the values listed in FR-029. An unauthenticated request to the private dashboard reveals none of its figures. +- **SC-012**: An audit of everything the provider keeps finds only: + - dates, category labels, counts, and band tallies + - activity records holding a transformed ID, a key fingerprint, two dates, one send time, and a version + + It finds no raw reports, network addresses, untransformed IDs, full public keys, or extended attributes linked to any ID. +- **SC-013**: An install on this version that reports to a provider older than this feature still has 100% of its basic reports accepted. +- **SC-014**: In a test of every forgery case in US7 scenarios 1–3 against a claimed ID, 100% of forged reports are refused and 0 figures change. +- **SC-015**: An install whose ID was claimed by another key has a report accepted under a new ID within the same delivery attempt in 100% of tested cases. + +## Assumptions + +- The default provider is operated by the Gameplane project. Its maintainers run it, and its data-handling statement is a page on the project website (OD-2, ruled). The domain (OD-1) is still open. Implementation proceeds with the default unset (FR-002), and the feature PR doesn't merge until OD-1 is ruled. +- "Telemetry provider" means the receiving service, whether that is the project-run default or a self-hosted or bundled receiver. All of them speak the same report format. +- Unique-install figures are available only for installs that share extended data, because only extended reports carry an install ID. Basic-only installs are counted as reports per day. +- The install ID is pseudonymous rather than anonymous: it links one install's reports over time. That is why it's confined to the extended tier, never linked to stored extended attributes (FR-014), resettable, and deleted when extended is turned off (FR-012). Signing protects existing IDs from impersonation. Fabricated new installs can only be limited by per-source limits, because there's no way to tell a real install from an invented one without a project-issued secret. +- The provider accepts unauthenticated reports from the public internet, because a shared secret can't be distributed to every install. Optional token-protected ingest for self-hosted receivers keeps working. +- The private dashboard uses a single operator-held access credential. Multi-user accounts and roles on the provider are out of scope. +- The public summary is aimed at badges and website counters. It's read-only and needs no credentials. +- Daily aggregates are kept for 24 months (OD-3, ruled; FR-020 floor 12 months). Activity records expire after 90 days of inactivity (OD-4, ruled). +- Game-usage and feature-adoption values come from what the control plane already knows about its own resources and settings. No data is collected from inside game servers or from players. +- The first-login notice (US1), the Admin Settings changes (US3), and the provider's private dashboard (US4, US5) are designed in Pencil before they're built (constitution Principle II). The notice and settings are designed in `design.pen`. The provider dashboard is designed in its own Pencil file, `telemetry-receiver/telemetry-dashboard.pen`, which starts from a copy of the HeroUI design, and its snapshot is exported to `telemetry-receiver/design-export/`. Opt-out, tier, disabled, custom-destination, restart, ID-reset, old-provider, public-summary, forged-report and ID-conflict paths get E2E coverage (constitution Principle I). +- Changes to provider behavior update `telemetry-receiver/specs.md` and its README in the same change, and reporter changes update `api/specs.md` (constitution Principle IV). Two receiver invariants change: + - "stores nothing persistent" becomes "stores daily aggregates and expiring activity records only, never raw reports" + - "exactly three fields" becomes "basic or extended report, both strictly validated" +- Changing telemetry from opt-in to opt-out for new installs, and adding the extended tier, reverses the documented "off by default" and "no identifying data" promises. Every doc and UI string that makes those promises (install docs, chart comments, receiver README, website telemetry page, the Admin Settings subtitle) is updated in the same change. +- Out of scope: + - player counts or any per-player data + - per-server details beyond the per-module counts + - custom module names + - free-text fields + - telemetry from game agents + - exporting raw data + - alerting on telemetry + - buying or provisioning the domain diff --git a/specs/022-default-telemetry-dashboard/tasks.md b/specs/022-default-telemetry-dashboard/tasks.md new file mode 100644 index 000000000..6d86ec7f1 --- /dev/null +++ b/specs/022-default-telemetry-dashboard/tasks.md @@ -0,0 +1,587 @@ +--- + +description: "Task list for feature 022: default telemetry destination, extended telemetry, signed reports, and telemetry dashboard" +--- + +# Tasks: Default telemetry destination, extended telemetry, and telemetry dashboard + +**Input**: Design documents from `specs/022-default-telemetry-dashboard/` + +**Prerequisites**: [plan.md](plan.md), [spec.md](spec.md), [research.md](research.md), [data-model.md](data-model.md), [contracts/](contracts/), [quickstart.md](quickstart.md), [OPEN-DECISIONS.md](OPEN-DECISIONS.md) + +**Tests**: Test tasks are required, not optional. Constitution Principle I needs E2E coverage for every user-facing path, the spec's Assumptions list the E2E paths, and CLAUDE.md sets per-module coverage gates (telemetryschema 90, telemetry-receiver 70, api 80, web 92/76/82/92). + +**Organization**: Tasks are grouped by user story (US1–US7 from spec.md), so each story can be built and verified on its own on top of Phases 1–2. + +## Format: `[ID] [P?] [Story] Description` + +- **[P]**: can run in parallel (different files, no dependency on unfinished tasks) +- **[Story]**: the user story the task belongs to (US1–US7) + +## Execution rules (CLAUDE.md, binding on every task) + +- **Verification.** Locally, run only `go build ./...` (inside the module) and `cd web && npx tsc --noEmit`. Never run `go test`, `npm test`, `make test|lint|cover`, envtest or E2E locally (rule 8). CI is the verification authority. +- **Delegation.** Implementation runs through `Workflow` scripts. Agents start at `haiku`, set `model:` on every `agent()`, and get reviewed one tier up. One scout writes a brief per phase with exact `file:line` and before/after code, and fixers edit blind from that brief (rules 13, 18). +- **Design first.** Any task that changes `design.pen` or `telemetry-receiver/telemetry-dashboard.pen` uses Pencil MCP only, never generic file tools (rule 2). Ask the user to open the file and save in the Pencil UI, then run the `design-export` skill, and commit the export with the design (rule 1). The receiver file exports to `telemetry-receiver/design-export/{json,screenshots}/`. +- **Commits.** Commit each logical unit signed (`git commit -s`) with conventional prefixes and the `Co-Authored-By` / `Claude-Session` trailers. Never amend pushed commits (rule 11). +- **Tests.** Don't delete or weaken a test. Tests whose behaviour this feature intentionally changes are listed in T002 and need sign-off first (system override 1). +- **Merge gate.** The PR stays a **draft** until OPEN-DECISIONS OD-1 is ruled (plan.md, Merge gate). + +--- + +## Phase 1: Setup (shared infrastructure) + +**Purpose**: Create the branch, get test sign-off, and wire the new `telemetryschema` module into the build. + +- [X] T001 Create branch `feat/default-telemetry-dashboard` from `master` and commit `specs/022-default-telemetry-dashboard/` (`.specify/feature.json` is git-ignored, so it stays local) as `docs(specs): add 022 default telemetry dashboard spec`. +- [X] T002 Get **explicit human sign-off** (system override 1) to rewrite these existing tests so they assert the new behaviour. Rewrites must keep or raise coverage and never delete a case without a replacement: + - `api/internal/telemetry/telemetry_test.go`: `TestReportOnce_EnabledPostsAnonymousCounts`, `TestReportOnce_SendsAuthHeader`, `TestReportOnce_DisabledSkipsPost`. The reporter's constructor and send path change (research R12). + - `api/internal/telemetry/telemetry_branches_test.go`: `TestNew_DefaultsInterval`, `TestEnabled_Branches`, `TestCount_UnknownKind`, `TestReportOnce_EndpointErrorPropagates`. + - `web/src/routes/AdminSettings.test.tsx`, test "shows telemetry toggle and saves setting". `findByRole("switch")` assumes one switch, and there will be two (FR-019). + - `web/src/routes/AdminSettings_sections.test.tsx`, test "toggles telemetry and saves". It may need the new `GET /admin/telemetry` handler. + + - `telemetry-receiver/main_test.go` (added 2026-10-06 for spec Q8): the `metrics()` helper (lines 38–50) calls the dashboard handler with `Authorization: Bearer ` instead of the public `routes()`, `TestMetricsMethodNotAllowed` (line 138) targets that handler, and a new case asserts that `GET /metrics` on the public `routes()` returns `404`. The `decodePayload` tests stay unchanged, because T017 keeps a `decodePayload` wrapper. + - `.github/workflows/ci.yaml`, the "observability scrape TLS/reachability" step (about lines 773–812): the receiver ServiceMonitor and NetworkPolicy renders also set `api.telemetry.receiver.dashboard.tokenSecretRef.name`, the ServiceMonitor check expects `port: dashboard` and `bearerTokenSecret`, the NetworkPolicy check expects the Prometheus namespace on port 8081, and a new check asserts no receiver ServiceMonitor renders without a token. + + **Signed off 2026-10-06** by the user ("Approve all", then "Approve" for the `/metrics` changes). Record the sign-off in the PR description. +- [ ] T003 Create `telemetryschema/go.mod` (`module github.com/ValgulNecron/gameplane/telemetryschema`, `go 1.26.0`, no requires) and `telemetryschema/doc.go` with a package comment: "the shared telemetry report contract used by api and telemetry-receiver; see specs/022-default-telemetry-dashboard/contracts/report-schema.md". +- [ ] T004 Add `./telemetryschema` to the `use` block in `go.work`, and add `telemetryschema` to `GO_MODULES` in `Makefile:43` (after `gameproto`). +- [ ] T005 [P] Add `telemetryschema` to both Go module matrices in `.github/workflows/ci.yaml` (the `module:` lists at about lines 457 and 549). Add `telemetryschema/**` everywhere `telemetry-receiver/**` appears as a path filter (about line 119), and to the api and telemetry-receiver image path filters in `.github/workflows/publish-edge.yaml`. Add a `gomod` entry for `/telemetryschema` in `.github/dependabot.yml`, copied from the `/telemetry-receiver` entry at about line 176. +- [ ] T006 [P] Create `telemetryschema/.testcoverage.yml` (copy the `telemetry-receiver/.testcoverage.yml` format with `total: 90` and an updated header comment) and a non-empty `telemetryschema/specs.md` skeleton with the sections Purpose, Responsibilities, External interface (linking `specs/022-default-telemetry-dashboard/contracts/report-schema.md`), Key invariants, and Testing & coverage, so that `hack/check-specs.sh` passes. +- [ ] T007 [P] Update the repository docs maps: + - `CLAUDE.md`: in the repository map add `telemetryschema/ shared telemetry report contract (api, telemetry-receiver)`; change "links all 15 Go modules" to 16; add `telemetryschema 90` to the coverage minimums; add a row to the Architecture table. + - `docs/agent-architecture.md`: add a `telemetryschema/specs.md` row next to Telemetry-Receiver (line 29). +- [ ] T008 [P] Make the module-list checks accept the new module. Inspect how `hack/check-ci-report-coverage.sh`, `hack/check-publish-edge-paths.sh` and `hack/check-specs.sh` enumerate modules, and add `telemetryschema` to any list they read. Edit the lists only, not the checks' logic. +- [ ] T009 Wire the dependency: + - Add `require github.com/ValgulNecron/gameplane/telemetryschema v0.0.0` and `replace github.com/ValgulNecron/gameplane/telemetryschema => ../telemetryschema` to `api/go.mod`, `telemetry-receiver/go.mod` and `test/e2e/go.mod`, following the netguard pattern at `api/go.mod:5-9`. + - Add `COPY telemetryschema/ ./telemetryschema/` to `api/Dockerfile` next to `COPY netguard/` (line 7). + - In `telemetry-receiver/Dockerfile`, copy `telemetryschema/` before `go mod download` so that the `replace` path resolves. + +**Checkpoint**: an empty `telemetryschema` module builds and is wired into CI, and the test sign-off is recorded. + +--- + +## Phase 2: Foundational (blocking prerequisites) + +**Purpose**: The shared report contract, install-side state and collection, and receiver storage. Every user story depends on them. + +**⚠️ CRITICAL**: No user-story work starts until this phase is done. + +### Report contract (`telemetryschema/`) + +- [ ] T010 [P] Create `telemetryschema/report.go`: + - Types `Report{Version string; Servers, Templates int; Ext *Extended}`, `Extended{Schema int; InstallID string; Env Env; Games Games; Features Features; Key string; SentAt time.Time}`, `Env{K8s, Distro string; Arch []string; Nodes string}`, `Games{Official map[string]int; Custom int}`, and `Features{WakeOnConnect bool; Tunnels []string; Capture, Backups, SSO, AuditForwarding bool; Clusters, DB, Language string}`. + - JSON tags exactly as in `contracts/report-schema.md`. + - `Encode(Report) ([]byte, error)`, which emits sorted map keys and sorted arrays so the output is deterministic. +- [ ] T011 [P] Create `telemetryschema/enums.go`: + - The enumerations from the field-rules table in `contracts/report-schema.md`: Distros, Arches, Tunnels, DBs, `Languages = ["en"]`, NodeBands and ClusterBands. + - `VersionRE` (moved from `telemetry-receiver/main.go:52`). + - `K8sMinorRE = ^1\.[0-9]{1,3}$`. + - `NodeBand(n int) string` (1, 2-3, 4-10, 11-50, 51+), `ClusterBand(n int) string` (1, 2-3, 4-10, 11+), and `FleetBands = []float64{0,1,2,5,10,25,50,100,250}`. + - `SanitizeEnum(set, v) string`, which returns `other` for unknown values. +- [ ] T012 Create `telemetryschema/decode.go`, with `Decode(body []byte) (Report, DecodeInfo, error)`: + - Port the strict token-walking logic from `decodePayload` in `telemetry-receiver/main.go:85-186`: exactly one object, exact case-sensitive keys, no duplicates or nulls, nothing trailing. + - Extend it with the optional `ext` object, validated against the field-rules table in `contracts/report-schema.md`. + - Structural errors wrap `ErrInvalidPayload` with `%w`. `ext.schema > 1` returns `ErrUnsupportedSchema`. + - Out-of-set values become `other`. Unknown `games.official` keys are added to `Custom`, using the catalog from T013. + - A malformed `installId` sets `DecodeInfo.ExtDropped = true` and returns `Ext = nil`. +- [ ] T013 [P] Create `telemetryschema/catalog.txt` (one module name per line, copied from `charts/gameplane/values.yaml` `defaultModuleSource.oci.modules` at about line 583) and `telemetryschema/catalog.go` (`//go:embed catalog.txt`, `IsOfficial(name string) bool`, `Catalog() []string`). + - Add `hack/check-telemetry-catalog.sh` (POSIX sh). It extracts the values.yaml list and diffs it with `catalog.txt`, exiting 1 with the diff on mismatch. + - Add a `check-telemetry-catalog` target to `Makefile`, and add it to the `lint:` prerequisites at `Makefile:266`. +- [ ] T014 [P] Create `telemetryschema/sign.go` (research R20): + - `const SignatureHeader = "Gameplane-Telemetry-Signature"`. + - `NewSecret() ([]byte, error)`: 32 bytes from `crypto/rand`. + - `DeriveKey(secret []byte, installID string) (ed25519.PrivateKey, error)`: `crypto/hkdf` with SHA-256, salt = installID, info = `gameplane-telemetry-signing-v1`, 32-byte seed, then `ed25519.NewKeyFromSeed`. + - `PublicKeyString(priv) string`: base64url, unpadded. + - `Sign(priv, body []byte) string`: returns `ed25519=`. + - `Verify(header, publicKey string, body []byte) error`, wrapping `ErrBadSignature`. + - `KeyFingerprint(publicKey string) string`: hex SHA-256 of the raw key. +- [ ] T015 [P] Create `telemetryschema/decode_test.go`, `enums_test.go`, `catalog_test.go` and `sign_test.go`, covering: + - every reject case already covered by `telemetry-receiver/main_test.go` `TestDecodePayloadRequiresExactKeys` + - every `ext` rule, including `other` folding, unknown modules going to `Custom`, `ExtDropped`, and schema 2 being rejected + - band boundaries 1/2/3/4/10/11/50/51 and clusters 10/11 + - catalog membership + - a fixed `DeriveKey` vector, sign/verify round trip, a single-byte tamper failing, and different IDs deriving different keys +- [ ] T016 [P] Create `telemetryschema/specs.md` with the full content, replacing the T006 skeleton: types, enumerations, bands, the signature scheme, invariants (no free text, bounded categories), and the compatibility table from `contracts/report-schema.md`. +- [ ] T017 Change `telemetry-receiver/main.go` to delegate decoding to `telemetryschema.Decode`: + - Keep `decodePayload(body []byte) (payload, error)` as a thin wrapper, so the existing `main_test.go` tests keep compiling and passing unchanged. + - The wrapper returns `errInvalidPayload` for any report that carries `ext`. This keeps today's behaviour until T072. + - Replace the local `versionRE` with `telemetryschema.VersionRE`. + +### Install-side state (API database) + +- [ ] T018 Create `api/internal/db/migrations/common/015_telemetry_state.sql` with tables `telemetry_state` and `telemetry_notice_acks`, with exactly the columns in `data-model.md` § API, including `signing_secret` and `last_id_rotation_at`. Follow the portability rules in `api/internal/db/migrations/README.md`: no `AUTOINCREMENT`, no `datetime(...)`, no `INSERT OR`, and no comment line ending in `;`. +- [ ] T019 Change `Store.Migrate` in `api/internal/db/db.go:99`: + - Before applying anything, count rows in `schema_migrations`. `fresh := count == 0`. + - After applying, call `s.seedTelemetryState(ctx, fresh)`. +- [ ] T020 Create `api/internal/db/telemetry.go`: + - `seedTelemetryState` (research R10), idempotent through `INSERT ... ON CONFLICT (id) DO NOTHING`: + - **fresh**: `consent_source='default'`, and upsert the config key `telemetry` = `{"sendMetrics":true,"extended":true}`. + - **otherwise**: `consent_source='legacy'`. If the config key `telemetry` exists, rewrite it with `extended:false` added. + - Helpers: + - `TelemetryState` struct with `GetTelemetryState` and `UpdateTelemetryState` + - `ClaimTelemetryDue(ctx, expected, next, now string) (bool, error)`, using `UPDATE telemetry_state SET next_due_at=?, last_attempt_at=? WHERE id='singleton' AND next_due_at=?` + - `SetInstallID` and `ClearInstallID` + - `EnsureSigningSecret`, which creates the secret once and never returns it outside the package API used by `api/internal/telemetry` + - `MarkNoticeShown`, which sets the value only if NULL + - `InsertNoticeAck`, `HasNoticeAck` and `DeleteNoticeAcksForUser` +- [ ] T021 Call `DeleteNoticeAcksForUser` from the existing account-removal path in `api/internal/db/users.go`, in the same place other per-user rows are deleted (migrations README rule 3). +- [ ] T022 [P] Create `api/internal/db/telemetry_test.go`, covering: + - fresh versus existing seeding, including running `Migrate` twice (the bootstrap-admin then serve order), an existing DB with `sendMetrics:true`, and an existing DB with no telemetry row + - two concurrent `ClaimTelemetryDue` calls where exactly one wins + - notice ack lifecycle and user deletion + + `TestSharedMigrationsArePortable` in `api/internal/db/migrations_test.go` must pass for 015 without edits. + +### Install-side destination and collection (`api/internal/telemetry/`) + +- [ ] T023 Create `api/internal/telemetry/destination.go`: + - `const DefaultEndpoint = ""`, with a comment: "Project default telemetry destination. Empty until specs/022…/OPEN-DECISIONS.md OD-1 is ruled; the feature PR must not merge while empty (hack/check-telemetry-default.sh)." + - `type Destination struct{ Kind, URL, Host string }` + - `ResolveDestination(disabled bool, endpoint string, bundled bool) (Destination, error)`, implementing the research R13 table. A `default` kind whose scheme isn't `https` returns an error. +- [ ] T024 [P] Create `hack/check-telemetry-default.sh` (POSIX sh). It reads the `DefaultEndpoint` value from `api/internal/telemetry/destination.go` and exits 1 unless it is non-empty and starts with `https://`. Add a separate job `telemetry-default-gate` to `.github/workflows/ci.yaml` that runs only this script. Don't add it to `make lint`. +- [ ] T025 Add flags in `api/cmd/main.go`: + - `--telemetry-disabled` / `GAMEPLANE_TELEMETRY_DISABLED` + - `--telemetry-interval` / `GAMEPLANE_TELEMETRY_INTERVAL` (default `24h`; a value below `1m` is a startup error) + - `--official-module-source` / `GAMEPLANE_OFFICIAL_MODULE_SOURCE` + - `GAMEPLANE_TELEMETRY_BUNDLED`, read from the environment only + + Change the `--telemetry-endpoint` help text at line 541 to "URL to POST anonymous usage metrics to (empty = the project default)". Resolve the destination once at startup through `telemetry.ResolveDestination`, and exit on error. +- [ ] T026 Create `api/internal/telemetry/collect.go` with `Collect(ctx, deps) (telemetryschema.Report, error)`. `deps` holds the kube client, store, config flags, version and official source. + - **Basic.** Keep the current local-cluster counts from `count()` in `telemetry.go:146`. + - **Extended.** Build it only when `extendedOn`, from the research R14 table: discovery `ServerVersion`, local nodes, GameServers, GameTemplate labels, BackupSchedules, `Cluster` CRs, `cfg.captureFeatureEnabled`, the OIDC flag or a DB `auth` provider, the audit webhook or S3 sink, and `cfg.dbDriver`. `language` is `"en"`. + - **Signing fields.** `Key` = `PublicKeyString(DeriveKey(secret, installID))` and `SentAt = now`. + - **Partial failures.** A failure for one field yields `0` or `other`, not an error. +- [ ] T027 [P] Create `api/internal/telemetry/official.go`. Following research R15, a GameServer counts as official module `m` only when its template has all of: + - label `gameplane.local/managed-by=Module` + - label `gameplane.local/module-source` equal to `--official-module-source` + - label `gameplane.local/module-name=m`, with `m` in that ModuleSource's `spec.oci.modules[].name` (or its git index), and `telemetryschema.IsOfficial(m)` + + Everything else, including look-alike names, adds to `Custom`. +- [ ] T028 [P] Create `api/internal/telemetry/distro.go` with `detectDistro(gitVersion string, nodes []corev1.Node) string`, implementing the research R16 table in order. +- [ ] T029 [P] Create `api/internal/telemetry/collect_test.go`, `official_test.go`, `distro_test.go` and `destination_test.go`, using the fake dynamic and typed clients: + - every R14 field, including partial-failure fallbacks + - official, custom, upload-source and look-alike modules + - every R16 row plus kubeadm becoming `other` + - every R13 row, plus a non-https default being rejected + +### Receiver storage (`telemetry-receiver/`) + +- [ ] T030 Create `telemetry-receiver/store.go`: + - Open `modernc.org/sqlite` (add it to `telemetry-receiver/go.mod`) at `$DATA_DIR/telemetry.db`. When `DATA_DIR` is empty, use `file::memory:?cache=shared` and log a warning. + - Enable WAL, with a single writer goroutine or a mutex. + - Create every table in `data-model.md` § Receiver, including `activity.key_fp` and `activity.last_sent_at`. + - Initialise `meta` keys `schema_version`, `collection_started` and `reports_total`. Generate and store `pepper` when `ID_PEPPER` is unset. +- [ ] T031 Extend `loadConfig` in `telemetry-receiver/main.go` with every variable in the `contracts/receiver-http.md` Configuration table. Enforce `RETENTION_DAYS ≥ 365` and `ACTIVITY_EXPIRY_DAYS ≥ 31` (OD-3, OD-4), failing with a startup error. Add the second listener scaffold, which starts only when `DASHBOARD_TOKEN` is set. Keep `TestLoadConfigDefaults` passing. +- [ ] T032 Add receiver persistence to the chart: + - In `charts/gameplane/values.yaml`, add the `api.telemetry.receiver` keys `persistence`, `dashboard`, `publicSummary`, `pepperSecretRef`, `retentionDays: 730`, `activityExpiryDays: 90`, `ingestSourceDailyLimit: 20` and `trustedProxyCIDRs`, per `contracts/install-config.md`. + - In `charts/gameplane/templates/telemetry-receiver.yaml`: + - a PVC `gameplane-telemetry-receiver-data`, or an `emptyDir` when persistence is disabled, mounted at `/data`, with `DATA_DIR=/data` + - `strategy: Recreate` + - a `fail` when `replicas > 1` and persistence is enabled + - env passthrough for the retention, expiry, limit and proxy settings + - Read every new key through a `hasKey` or `dig` guard (F-214 precedent at `templates/api.yaml:394-399`). +- [ ] T033 [P] Create `telemetry-receiver/store_test.go`, covering schema creation, reopening the same `DATA_DIR` (aggregates and pepper survive, SC-009), and in-memory mode. + +**Checkpoint**: the contract, state, collection and storage foundations exist, and user stories can start. + +--- + +## Phase 3: User Story 1 — New installs report by default, with an informed opt-out (P1) 🎯 MVP + +**Goal**: A fresh install reports to the resolved destination by default, but only after an admin's dashboard has shown the notice. The notice lets the admin turn off extended or everything. + +**Independent Test**: Fresh Kind install with the bundled receiver. Sign in, and the notice is pending. Once it has been shown, a report reaches the receiver within one interval. "Turn off all" stops all reports. An upgraded beta.8 install stays off with no notice. + +- [ ] T034 [US1] Rewrite `api/internal/telemetry/telemetry.go` (research R12, data-model § schedule): + - The `Reporter` takes the `Destination`, interval, store, collect deps and auth header. + - The tick is `min(5m, interval/4)`. + - It evaluates "Gate open" (data-model § Derived values). While the gate is closed, `next_due_at` stays NULL. When it opens, `next_due_at = now + U(0, min(15m, interval/4))`. + - It claims each slot with `ClaimTelemetryDue`, then builds the report with `Collect`, encodes it, and signs it with `telemetryschema.Sign` when `Ext != nil`. + - It POSTs with `Content-Type: application/json`, the `Authorization` header when configured, and the signature header. + - **400 with ext present**: re-POST without `ext` once, and set `ext_unsupported_until = now+7d` and `ext_unsupported_endpoint`. + - **2xx**: set `last_success_at` and `last_outcome='ok'`, reset `consecutive_failures`, and set `next_due_at = now + interval + U(0, interval/48)`. + - **Other errors**: set `last_outcome='failed'`, and back off `min(1h·2^n, interval)`. + - Never queue or replay reports. +- [ ] T035 [US1] Create `api/internal/telemetry/consent.go` with `ApplyConsent(ctx, tx, basic, extended bool, source string)`, shared by the config hook and the notice actions. It: + - writes the config key `telemetry` + - sets `consent_source` + - creates or clears the install ID (creating the signing secret through `EnsureSigningSecret` when an ID is created) + - opens or closes the schedule + + It returns `ErrOperatorDisabled` when the destination kind is `disabled`. +- [ ] T036 [US1] Replace the reporter start at `api/cmd/main.go:392` (`telemetry.New(..., 24*time.Hour)`) with the new constructor, using the resolved destination and the interval flag. +- [ ] T037 [US1] Extend `api/internal/handlers/config.go` for the `telemetry` section: + - Add `Extended bool \`json:"extended"\`` to `telemetryCfg` (line 724). + - Normalise instead of rejecting: when `sendMetrics` is false, store `extended: false` too (FR-003, spec Q7). There is no 422 for this case. + - In `put`, add a `telemetry` post-save hook next to the `auth` hook at line 131. It calls `telemetry.ApplyConsent(..., "admin")` in the same transaction as the config upsert, and returns `409` "telemetry is disabled by the operator" on `ErrOperatorDisabled`. +- [ ] T038 [US1] Create `api/internal/handlers/telemetry.go` with `GET /admin/telemetry/notice` and `POST /admin/telemetry/notice`, exactly as in `contracts/api-telemetry-http.md` (the pending computation from data-model § Derived values; the four actions through `ApplyConsent`; `204` or `409`). Mount it in `api/cmd/main.go` next to the config handlers. In `api/internal/rbac/rbac.go`, add `{method: "GET", segment: "admin", prefix: "/admin/telemetry", perm: "config:read"}` and `{segment: "admin", prefix: "/admin/telemetry", perm: "config:manage"}` **before** `{segment: "admin", perm: "*"}` (line 217). The GET handler itself returns `{"pending":false}` to callers without `config:manage`. +- [ ] T039 [P] [US1] Rewrite the signed-off tests from T002 in `api/internal/telemetry/telemetry_test.go` and `telemetry_branches_test.go`, and add new cases using a fake clock and `httptest`: + - no POST while the source is `default` and the notice hasn't been seen + - the first POST within 15 minutes of `MarkNoticeShown` + - spacing of at least the interval + - a new Reporter on the same database doesn't send early (restart) + - the 400 fallback, then 7 days of basic-only + - backoff growth and cap + - two Reporters sharing one database send one POST per slot + - the auth header is still sent +- [ ] T040 [P] [US1] Create `api/internal/handlers/telemetry_envtest_test.go`, covering: + - the notice is pending only for `config:manage` holders, a `default` source, and a destination other than `none` or `disabled` + - `seen` sets `notice_shown_at` once + - the effects of `keep`, `extended-off` and `all-off` + - `409` when not pending + - `PUT /admin/config/telemetry` with `{sendMetrics:false, extended:true}` returning 200 and storing `extended:false` with the ID deleted; 200 with side effects (ID created and deleted, `consent_source=admin`); and 409 when the operator has disabled telemetry + + The existing `api/internal/handlers/config_test.go:144-156` must pass unchanged. +- [ ] T041 [US1] Design the "Telemetry notice" banner in `design.pen` through Pencil MCP, with states for the default and the bundled destination. It lists the basic fields and the extended fields (stating that a random install ID is included), shows the destination host, offers the actions "Keep sharing", "Turn off extended" and "Turn off all", links to Admin Settings, and links to the data-handling statement. Ask the user to save, run the `design-export` skill (`design-export/json/.json`, `design-export/screenshots/.png`, `design-export/MANIFEST.md`), and commit the design and export together. +- [ ] T042 [P] [US1] In `web/src/lib/api.ts`, add `Telemetry.notice()` and `Telemetry.ack(action: "seen" | "keep" | "extended-off" | "all-off")` with response types from `contracts/api-telemetry-http.md`. Add an MSW default handler for `GET /admin/telemetry/notice` (`{pending:false}`) wherever the shared test handlers live (the same place the `/admin/config` defaults come from; `web/src/test/`). +- [ ] T043 [US1] Create `web/src/components/ui/TelemetryNotice.tsx`, implementing the T041 design. It uses TanStack Query for `Telemetry.notice()` and posts `seen` once on mount with `void`. Each action calls `ack` and invalidates the `["telemetry"]` and `["admin-config"]` queries. Mount it in `web/src/components/AppLayout.tsx` beside the `SafeModeBanner` block (line 213), only for users who hold `config:manage`, using the existing permission helper the layout uses for admin navigation. +- [ ] T044 [P] [US1] Create `web/src/components/ui/TelemetryNotice.test.tsx`, and add an `AppLayout` test case, covering: + - it renders only while pending + - `seen` is posted exactly once + - each action posts the right body and hides the banner + - it is hidden for users without `config:manage` +- [ ] T045 [US1] In `deploy/kind/e2e.sh` (the helm command at about line 301) and `deploy/kind/up.sh` (its helm install), add `--set api.telemetry.receiver.enabled=true` with the comment "never let CI or dev installs reach the project provider (spec 022 R17)". +- [ ] T046 [US1] Register a new bucket `telemetry`, using the `e2e-test-authoring` skill: + - in `test/e2e/buckets.sh`: add it to `bucket_names` (line 357), add a `list_bucket` case, and add `bucket_telemetry()` returning `TestTelemetryLifecycle` + - in the e2e matrix in `.github/workflows/ci.yaml` (about line 1140): `parallel: 1`, `test_timeout: 25m`, `job_timeout: 60` +- [ ] T047 [US1] Create `test/e2e/telemetry_e2e_test.go` with `TestTelemetryLifecycle`. It calls `t.Parallel()` and runs ordered `t.Run` subtests (research R17). + - **Setup.** Create the Secret `telemetry-dashboard`, then run `helm upgrade --reuse-values` (pattern: `test/e2e/upgrade_e2e_test.go:118`) with these values: + - `api.telemetry.interval=1m` + - `api.telemetry.receiver.dashboard.tokenSecretRef.name=telemetry-dashboard` + - `api.telemetry.receiver.publicSummary.enabled=true` + - `api.telemetry.receiver.ingestSourceDailyLimit=0` + - **Subtests:** + - `notice_pending_on_fresh_install` + - `seen_opens_gate_and_first_report_arrives`, asserted through the receiver's `/metrics` `gameplane_telemetry_reports_total` on the dashboard port 8081 with `Authorization: Bearer `, over `Env.PortForward` (`test/e2e/env.go:342`). That route comes from T067; the bucket runs on the finished branch, so the ordering is safe + - `all_off_stops_reports`, followed by turning telemetry back on through `PUT /admin/config/telemetry` + - `api_restart_does_not_resend_early` + - Keep admin logins to 2 or fewer (bucket login budget). +- [ ] T048 [US1] In `test/e2e/upgrade_e2e_test.go` (`TestUpgrade_FromPreviousRelease`), add assertions after the upgrade: `GET /admin/telemetry/notice` returns `pending:false`, and the `GET /admin/config` `telemetry` section is absent or `{sendMetrics:false}` (US1 scenario 5). + +**Checkpoint**: US1 is demonstrable end to end against the bundled receiver, which still counts reports in memory only. + +--- + +## Phase 4: User Story 2 — Operators can redirect or hard-disable telemetry (P1) + +**Goal**: One install-time setting disables or redirects telemetry. The UI and the API reflect the operator's choice. + +**Independent Test**: With `api.telemetry.enabled=false`, no report arrives over 3 intervals, the settings show "disabled by the operator", and `PUT` returns 409. With a custom endpoint, reports arrive only there. An old (beta.8) receiver still gets basic reports. + +- [ ] T049 [US2] Change the chart: + - `charts/gameplane/values.yaml`: add `api.telemetry.enabled: true` and `api.telemetry.interval: 24h`, with comments from `contracts/install-config.md`. Rewrite the comment block at lines 231-235 to say that an empty endpoint means the project default. + - `charts/gameplane/templates/api.yaml` (lines 323-329): + - render `--telemetry-disabled` when `enabled` is false (`hasKey` guard, default true) + - render `GAMEPLANE_TELEMETRY_BUNDLED=true` when auto-wiring the receiver + - render `--official-module-source={{ .Values.defaultModuleSource.name }}` when `defaultModuleSource.enabled` + - render `GAMEPLANE_TELEMETRY_INTERVAL` from `api.telemetry.interval` +- [ ] T050 [P] [US2] Add `helm template` assertions to `.github/workflows/ci.yaml` (next to lines 775-804): + - `enabled=false` renders `--telemetry-disabled` + - the receiver renders `--telemetry-endpoint=http://gameplane-telemetry-receiver…` and `GAMEPLANE_TELEMETRY_BUNDLED` + - a custom endpoint renders without `BUNDLED` + - defaults render no endpoint + - `charts/gameplane/testdata/upgrade-from-v0.2.0-beta.8-values.yaml` renders with `--reuse-values` semantics without failing +- [ ] T051 [US2] Add `GET /admin/telemetry` to `api/internal/handlers/telemetry.go`. It returns `destination`, `operatorDisabled` and `consent`, with `installId`, `preview` and `status` set to `null` until T057. +- [ ] T052 [US2] Design the Telemetry section of Admin Settings in `design.pen` through Pencil MCP, as one frame per destination state: `default`, `custom`, `bundled`, `disabled` (both switches disabled, with a "disabled by the operator" message) and `none`. Include, for use by US3 and US7: + - the basic switch and the extended switch + - the install-ID row with a "Reset ID" action and a confirm dialog + - the read-only preview JSON block + - the status line, in the never, ok, failed and "ID replaced on " variants + - the new subtitle that names the install ID + + Ask the user to save, run `design-export`, and commit. +- [ ] T053 [US2] Change `TelemetrySection` in `web/src/routes/AdminSettings.tsx` (lines 1545-1576) to query `Telemetry.get()` (new in `web/src/lib/api.ts`) and render the destination line and the `disabled` and `none` states from the T052 design. Keep the existing basic switch's accessible name "Enable telemetry" or "Disable telemetry". +- [ ] T054 [P] [US2] Tests: + - Create `web/src/routes/AdminSettings_telemetry.test.tsx` covering each destination state, and that the switches are disabled and saving is blocked when the operator has disabled telemetry. + - Extend `api/internal/handlers/telemetry_envtest_test.go` with every `destination.kind` and `operatorDisabled`. + - Add the MSW default for `GET /admin/telemetry`. +- [ ] T055 [US2] Add these subtests to `test/e2e/telemetry_e2e_test.go`: + - `custom_destination_receives_only`: deploy a second receiver Deployment and Service with a unique name in the release namespace, `helm upgrade --reuse-values --set api.telemetry.endpoint=`, and assert that its counter rises and the bundled receiver's doesn't. + - `old_receiver_gets_basic`: the custom destination runs the beta.8 image `ghcr.io/valgulnecron/gameplane/telemetry-receiver:`. The scout confirms the tag format from `.github/workflows/release.yaml`. Assert that reports are accepted (FR-016, SC-013). + - `operator_disabled_sends_nothing`: this must be the **last** subtest. Run `--set api.telemetry.enabled=false` and assert zero new reports over 3 intervals, `PUT /admin/config/telemetry` returning 409, and the notice not pending. + +**Checkpoint**: US1 and US2 together cover the P1 install-side behaviour. + +--- + +## Phase 5: User Story 3 — Admins see where data goes and exactly what is sent (P2) + +**Goal**: Admin Settings shows the destination, both tier switches, the install ID with reset, a live preview identical to the payload, and the delivery status. + +**Independent Test**: For each destination, with extended on and off, the preview matches what the receiver recorded. A reset shows a new ID. Turning extended off removes the ID. + +- [ ] T056 [US3] Add `POST /admin/telemetry/install-id` to `api/internal/handlers/telemetry.go`. It rotates through `SetInstallID(newUUIDv4)`, returns `200 {"installId"}`, and returns `409` when extended is off. +- [ ] T057 [US3] Complete `GET /admin/telemetry`: + - `installId` (null when extended is off) + - `preview`, which is the `Collect` output and null when basic is off or the kind is `disabled` or `none` + - `status` with `lastAttemptAt`, `lastSuccessAt`, `lastOutcome` and `lastIdRotationAt` + + Never include `signing_secret`. +- [ ] T058 [P] [US3] In `web/src/lib/config.ts`, add `extended: boolean` to `TelemetryCfg` (line 86). In `web/src/lib/api.ts`, give `Telemetry.get()` its full response type and add `Telemetry.resetInstallId()`. In `web/src/test/factories.ts`, change the default at line 305 to `telemetry: { sendMetrics: false, extended: false }`. +- [ ] T059 [US3] Finish `TelemetrySection` in `web/src/routes/AdminSettings.tsx` from the T052 design: + - the extended switch (accessible name "Enable extended telemetry" or "Disable extended telemetry"), disabled and shown off while basic is off; turning basic off also clears extended in the form draft (FR-019, spec Q7) + - the install-ID row with "Reset ID" and its confirm dialog + - the preview JSON block + - the status line with fixed phrases + - the subtitle and helper copy from FR-019, replacing "No server names, player counts, or identifying data." + + Saves go through the existing `useSectionForm` and `PUT /admin/config/telemetry`. +- [ ] T060 [P] [US3] Rewrite the T002-approved cases in `web/src/routes/AdminSettings.test.tsx` and `AdminSettings_sections.test.tsx` for two switches, and extend `AdminSettings_telemetry.test.tsx` with these cases: extended disabled and shown off while basic is off, turning basic off clears extended in the saved body, the reset flow, preview rendering, and status phrases. In `api/internal/handlers/telemetry_envtest_test.go`, add a case where the preview equals the body the reporter POSTs to an `httptest` receiver at the same instant, ignoring `ext.sentAt` (SC-006). +- [ ] T061 [US3] Add these subtests to `test/e2e/telemetry_e2e_test.go`, before the US2 subtests: + - `extended_off_sends_basic_only` + - `reset_id_counts_as_new_install`, asserted through the receiver's views once US5 lands (until then, through the `gameplane_telemetry_extended_reports_total` metric on port 8081 with the Bearer token) + - `preview_matches_received`, comparing the preview's version, servers and templates with the receiver's recorded latest-day values + +**Checkpoint**: P1 and P2 install-side stories are complete. + +--- + +## Phase 6: User Story 4 — Private dashboard of aggregate telemetry (P2) + +**Goal**: The receiver persists basic aggregates and serves a token-protected, server-rendered dashboard that reveals nothing to unauthenticated visitors. + +**Independent Test**: Feed synthetic basic reports across several days, sign in, and check every figure for 7, 30, 90 and 365 days. Every unauthenticated response is identical whether data exists or not. Rotating the token invalidates sessions without losing data. + +- [ ] T062 [P] [US4] Create `telemetry-receiver/ratelimit.go` (research R6): + - a per-source accepted-reports-per-UTC-day counter, where `INGEST_SOURCE_DAILY_LIMIT=0` means unlimited + - a generic token bucket + - idle purge after 10 minutes and a reset at midnight + - `sourceIP(r *http.Request, trusted []netip.Prefix) netip.Addr`, which honours `X-Forwarded-For` only when the peer is inside `TRUSTED_PROXY_CIDRS` + - addresses are never written to the store or the logs +- [ ] T063 [US4] Move the ingest handler from `telemetry-receiver/main.go` to a new `telemetry-receiver/ingest.go`, keeping auth, the size cap and status codes. Add the per-source limit (`429` plus `gameplane_telemetry_rate_limited_total{route="ingest"}`). Write the basic aggregates (`daily_basic.reports`, `servers_sum` and `templates_sum`; `daily_version`; `daily_fleet` with values capped at 1001; `meta.reports_total`) in one transaction. Keep the existing Prometheus series; they are served from the dashboard listener (T067). The existing `main_test.go` ingest tests and `cardinality_test.go` (added upstream in #578) must pass unchanged; only the T002-approved `/metrics` changes apply. Those tests call `newServer(config{})` and then `s.ingest` and `s.reg` directly, 160 times from one source, so the zero-value `config` must mean an in-memory store and no per-source limit (the 20-per-day default is applied by `loadConfig`, not by the zero value), `newServer` keeps its signature, and the 128-label `versionLabel` budget stays. +- [ ] T064 [US4] In `telemetry-receiver/store.go`, add an hourly lifecycle job that is idempotent and resumes from `meta.rollover_through`. It deletes `daily_*` rows older than `RETENTION_DAYS`, and is started from `serve`. US5 adds the lapsed and expiry steps. +- [ ] T065 [US4] Create `telemetry-receiver/views.go` with `BuildViews(ctx, store, rangeDays int, now time.Time) (Views, error)` for the basic block in the `contracts/receiver-http.md` `/api/v1/views` shape: + - `reportsPerDay` + - versions as the top 10, then `Other`, then `Invalid` + - fleet bands and the exact median + - `latestDay` totals + - `empty` + - `asOf` = yesterday (UTC) + + Invalid ranges fall back to 30. +- [ ] T066 [US4] Load the `dataviz` skill, then design the receiver pages in `telemetry-receiver/telemetry-dashboard.pen` (seeded with a copy of the HeroUI design, spec Q10) through Pencil MCP: the login page (also used for the refusal, with "Invalid credentials"), the overview's basic section with the range selector (7, 30, 90, 365), the empty state, and the "approximate, self-reported" labelling (FR-026). Ask the user to open that file, then save it, run `design-export` into `telemetry-receiver/design-export/`, and commit. +- [ ] T067 [US4] Create `telemetry-receiver/dashboard.go`, mounted on `DASHBOARD_LISTEN_ADDR` only when `DASHBOARD_TOKEN` is set. It implements these routes from `contracts/receiver-http.md`: + - `GET /login` and `POST /login`, comparing the token in constant time, with a login limit of 5 per minute per source and a same-origin `Origin`/`Referer` check + - `POST /logout` + - `GET /` + - `GET /api/v1/views`, accepting the cookie or `Authorization: Bearer` + - `GET /metrics`, accepting `Authorization: Bearer` only, serving the existing Prometheus registry; remove `/metrics` from the public `routes()` so that it answers `404` there (FR-030, spec Q8) + - `/static/*` + + The cookie is `gp_telemetry_session` = `expiry || HMAC(K, expiry)`, where `K = HMAC-SHA256(DASHBOARD_TOKEN, "gameplane-telemetry-session")`, with `HttpOnly; Secure; SameSite=Strict; Max-Age=43200`. Unauthenticated HTML requests get `303` to `/login`, and unauthenticated JSON requests get `401 {"error":"unauthorized"}`. Every response carries the CSP, `nosniff`, `no-referrer` and `no-store` headers. +- [ ] T068 [US4] Create `telemetry-receiver/web/`, embedded with `go:embed`: `layout.html`, `login.html` and `overview.html` (basic section), `style.css`, and inline-SVG chart partials (line or bar for reports per day, horizontal bars for versions, a histogram for fleet sizes), following the T066 design. There is no JavaScript, and the range is chosen with links. +- [ ] T069 [US4] Change the chart for the dashboard, in `charts/gameplane/templates/telemetry-receiver.yaml`: + - `DASHBOARD_TOKEN` from `dashboard.tokenSecretRef` when it is named + - Service port `dashboard` (8081) when the token is named + - a NetworkPolicy rule for port 8081 admitting `dashboard.ingressFrom` peers; move the `serviceMonitors.scrapeNamespaceSelector` rule (`telemetry-receiver.yaml:107-116`) from port 8080 to 8081 + - `INGEST_SOURCE_DAILY_LIMIT` and `TRUSTED_PROXY_CIDRS` env + - in `templates/servicemonitors.yaml`, render the receiver ServiceMonitor only when `dashboard.tokenSecretRef.name` is set, with `port: dashboard`, `path: /metrics` and `bearerTokenSecret: {name: , key: token}` + - create `templates/NOTES.txt`, which prints a warning when `serviceMonitors.enabled` and the bundled receiver are on but no dashboard token is named (no receiver ServiceMonitor is rendered) + - apply the T002-approved changes to the `ci.yaml` "observability scrape" step + - a `CHANGELOG.md` note under T094: receiver metrics now need the dashboard token +- [ ] T070 [P] [US4] Create `telemetry-receiver/views_test.go`, `dashboard_test.go` and `ratelimit_test.go`, covering: + - the exact figures for a synthetic multi-day dataset in every range + - the empty state + - the **refusal invariant**: every unauthenticated response body and status is byte-identical between an empty store and a populated one + - rotating the token invalidates an old cookie and keeps the data + - Origin checks + - the CSP header + - the login limit + - the ingest 429 response + - `X-Forwarded-For` honoured only from trusted peers + - `GET /metrics` returns `404` on the public listener, `401` on the dashboard listener without the Bearer token, and `200` with it +- [ ] T071 [US4] Add these subtests to `test/e2e/telemetry_e2e_test.go`: + - `dashboard_refuses_unauthenticated`, where `/` returns 303 to a login page that contains no digits from the data and `/api/v1/views` returns 401 + - `dashboard_shows_reports`, which signs in with the Secret's token through `Env.PortForward` on 8081, and asserts that `reportsPerDay` holds the reports from earlier subtests and that `empty` is false + +**Checkpoint**: the provider keeps history and shows basic views privately. + +--- + +## Phase 7: User Story 5 — Extended telemetry shows how Gameplane is used (P3) + +**Goal**: The receiver accepts extended reports, deduplicates them per install per day, and shows install, environment, game and feature views. + +**Independent Test**: A synthetic population (known IDs, environments, games and features over several weeks, with resets, upgrades and lapses) produces exact extended figures, and a 30-day unique count within 1% (SC-008). + +- [ ] T072 [US5] In `telemetry-receiver/ingest.go`, accept `ext`, removing the T017 reject-on-ext in the `decodePayload` wrapper's caller. Keep the wrapper's tested behaviour for the basic path. With `id_hmac = HMAC-SHA256(pepper, installId)` (research R5): + - **Record absent**: insert the record, `new_installs++`, `active_installs++`. + - **`last_seen < today`**: update the record, `active_installs++`. + - **Same day**: a duplicate. Increment `daily_basic.duplicates` and `gameplane_telemetry_duplicates_total`, and write nothing else. + - **Non-duplicate**: write `daily_ext.ext_reports`, `daily_dim` (every dimension listed in data-model § Receiver) and `daily_game` (`installs++`, `servers += n`, with `custom` for the rest), and increment `gameplane_telemetry_extended_reports_total`. +- [ ] T073 [US5] Extend the lifecycle job in `telemetry-receiver/store.go`. For each finalised day D, set `lapsed_installs[D] = count(activity where last_seen = D − 30)`, then delete activity rows with `last_seen < today − ACTIVITY_EXPIRY_DAYS`. +- [ ] T074 [US5] In `telemetry-receiver/views.go`, add the `extended` block: + - coverage + - `installs.active1d`, `active7d` and `active30d` + - `newPerDay` and `lapsedPerDay` + - `versionsByInstall` with `windowDays = min(range, ACTIVITY_EXPIRY_DAYS)` + - shares for `env.*`, `games`, `features`, `tunnels`, `clusters`, `db` and `language`, weighted by install-days as in research R4 + + The block is `null` when the range has no extended reports. +- [ ] T075 [US5] In `telemetry-receiver/telemetry-dashboard.pen`, add the overview's extended section: install KPIs, new and lapsed trends, environment, game and feature breakdowns, and the coverage note. Load the `dataviz` skill for charts and categorical colours. Ask the user to open that file, then save it, run `design-export` into `telemetry-receiver/design-export/`, and commit. +- [ ] T076 [US5] Add `telemetry-receiver/web/overview_extended.html` and its chart partials, following the T075 design. When `extended` is null, render the "no reports in this range included extended data" message. +- [ ] T077 [P] [US5] Create `telemetry-receiver/population_test.go`, `ingest_ext_test.go` and `views_perf_test.go`: + - **Synthetic population** with a fake clock: resets, upgrades and lapses. Assert exact new, lapsed and active counts, and a 30-day unique count within 1% (SC-008). + - **Dedupe**: same ID, same day. + - **Schema check**: `activity` has exactly the columns `id_hmac, key_fp, first_seen, last_seen, last_sent_at, last_version` (FR-014, SC-012). + - **Performance**: seed 365 days at 10,000 reports per day as aggregates, and assert `BuildViews(365)` takes under 3 s (SC-010). +- [ ] T078 [US5] Add the subtest `extended_counted_once_per_day` to `test/e2e/telemetry_e2e_test.go`. Two reports from the same ID on the same day give `active1d = 1` and duplicates ≥ 1. After `extended_off_sends_basic_only` (T061), `ext_reports` doesn't increase. + +**Checkpoint**: extended data is collected and visible. Signature enforcement follows in US7. + +--- + +## Phase 8: User Story 6 — Public summary API (P3) + +**Goal**: An opt-in, unauthenticated, cacheable endpoint exposes exactly five headline values. + +**Independent Test**: With the summary enabled, the response has exactly five keys, plus cache and CORS headers. When disabled it returns 404. Heavy polling doesn't slow ingest. + +- [ ] T079 [US6] Create `telemetry-receiver/summary.go` with `GET /v1/summary` on the public listener, exactly as in `contracts/receiver-http.md`: + - `404` unless `PUBLIC_SUMMARY=true` + - a snapshot recomputed at most every 5 minutes + - `Cache-Control: public, max-age=3600`, `ETag` with 304 support, and `Access-Control-Allow-Origin: *` + - a token bucket of 60 per minute with burst 10 per source (`429` plus the `route="summary"` metric) + + `reportsTotal` comes from `meta.reports_total`. +- [ ] T080 [P] [US6] In `charts/gameplane/templates/telemetry-receiver.yaml`, render `PUBLIC_SUMMARY` from `publicSummary.enabled` (`hasKey` guard, default false). +- [ ] T081 [P] [US6] Create `telemetry-receiver/summary_test.go`, covering exactly five keys (decode into a map and assert its length), 404 when disabled, the headers, ETag and 304, the limiter, and that `reportsTotal` is unchanged after a retention sweep. +- [ ] T082 [US6] Add the subtest `public_summary_five_keys` to `test/e2e/telemetry_e2e_test.go`, through `Env.PortForward` on 8080. + +--- + +## Phase 9: User Story 7 — No one can report under another install's ID (P3) + +**Goal**: The receiver enforces signatures, the send-time window, first-use claims and replay rules before any write, and installs heal themselves after a claim conflict. + +**Independent Test**: Every forgery case is refused with no figure changed (SC-014). An install whose ID was claimed first by someone else rotates its ID and is accepted in the same attempt (SC-015). + +- [ ] T083 [US7] In `telemetry-receiver/ingest.go`, add the checks in the order of the `contracts/report-schema.md` § Signature and claim table, **before** the limiter counts the report as accepted and before any write: + - `telemetryschema.Verify`, which fails with 403 `bad_signature` + - the window `[now−36h, now+1h]`, which fails with 403 `stale` + - the claim: insert with `key_fp` and `last_sent_at`, or compare `key_fp`, which fails with 409 `id_claimed` + - `sentAt > last_sent_at`, which fails with 403 `replay` + + Responses use fixed JSON bodies, and `gameplane_telemetry_refused_total{reason}` is incremented. Basic-only reports skip all of these checks. +- [ ] T084 [US7] In `api/internal/telemetry/telemetry.go`, handle a 409 `id_claimed` inside the same attempt: replace the install ID (keeping `signing_secret`), set `last_id_rotation_at`, re-`Collect`, re-sign and re-POST once. A second 409 is recorded as `failed`. A 403 is recorded as `failed` with normal backoff, and never rotates. +- [ ] T085 [US7] In `TelemetrySection` in `web/src/routes/AdminSettings.tsx`, render the status variant "Install ID replaced on : the destination reported it was in use by another key" when `status.lastIdRotationAt` is set, using the T052 design. +- [ ] T086 [P] [US7] Create `telemetry-receiver/ingest_sign_test.go`, covering the full forgery matrix: another key gives 409; an unsigned report, a one-byte tamper, a stale `sentAt`, a future `sentAt` and a byte-identical replay each give 403. In every case, assert that every table's row counts are unchanged (SC-014). Cover claim expiry together with re-claim (FR-038). +- [ ] T087 [P] [US7] Add cases to `api/internal/telemetry/telemetry_test.go`: a 409 then 204 sequence rotates the ID and sends with a new key in the same attempt (SC-015); 409 twice gives `failed`; 403 doesn't rotate. Add a web test case for the rotation status line in `web/src/routes/AdminSettings_telemetry.test.tsx`. +- [ ] T088 [US7] Create `test/e2e/telemetry_client_test.go`, a test-only helper that builds and signs reports with `telemetryschema` and a throwaway secret. Add these subtests to `TestTelemetryLifecycle`, before the US2 subtests: + - `forged_other_key_gets_409` + - `unsigned_tampered_replayed_get_403`, asserting that the views are unchanged + - `claimed_id_rotates_and_recovers`: reset the ID, claim the new ID with the helper's key, wait one interval, then assert that `lastIdRotationAt` is set, `installId` has changed, and `lastOutcome = "ok"` + +--- + +## Phase 10: Polish and cross-cutting concerns + +- [ ] T089 [P] Rewrite `telemetry-receiver/specs.md` and `telemetry-receiver/README.md` to match the shipped behaviour: + - the two listeners, the configuration table and the dashboard + - invariants: "stores daily aggregates and expiring activity records only, never raw reports or addresses", "basic or extended report, both strictly validated", and "extended reports must be signed" + - the dependency list (`modernc.org/sqlite` and `telemetryschema`) +- [ ] T090 [P] Update `api/specs.md`: the Telemetry responsibility line at line 21, the new flags in the line 81 list, the `/admin/telemetry*` routes in the admin route list near line 171, and the migration 015 tables. Update `web/specs.md` for the notice banner and the Telemetry section. +- [ ] T091 [P] Rewrite `docs/install.md` § Telemetry (from line 415) per FR-008: + - new installs share basic and extended data by default after the notice + - the exact fields of each tier, including the install ID and signing + - who is affected on upgrade, with a warning for installs whose basic toggle was already on + - `api.telemetry.enabled=false`, a custom endpoint, the bundled receiver, the dashboard token and the public summary + + Update `docs/architecture.md:408-410`. +- [ ] T092 [P] Add to the `docs/security.md` threat model: the public unauthenticated ingest and summary, the pseudonymous install ID, signing (what it does and doesn't stop: fabricated installs), dashboard authentication and the refusal invariant, source-address handling, and the pepper. +- [ ] T093 [P] Create `docs/telemetry-provider.md`, a runbook for running the project's receiver (OD-2): deploying the image, TLS termination, keeping `:8081` private, the `DASHBOARD_TOKEN` and `ID_PEPPER` Secrets and their rotation, `PUBLIC_SUMMARY=true`, `TRUSTED_PROXY_CIDRS`, retention (`RETENTION_DAYS`, `ACTIVITY_EXPIRY_DAYS`), scraping `/metrics` with the token, and backing up and restoring `telemetry.db`. Link it from `docs/install.md` § Telemetry and `telemetry-receiver/README.md`. +- [ ] T094 [P] Add a `CHANGELOG.md` entry with the FR-008 upgrade notes, breaking-ish behaviour notes ("empty `api.telemetry.endpoint` now means the project default"; "the receiver's `/metrics` moved to the dashboard port and needs the dashboard token"), and links to the docs. +- [ ] T095 Add a single statement-URL constant for the data-handling statement (OD-2), for example in the module `web/src` already uses for docs links. If there is none, create `web/src/lib/links.ts`. Use it in `TelemetryNotice.tsx` and `TelemetrySection`. +- [ ] T096 Make the website changes in the `website/` submodule, following its own `CLAUDE.md` and PR flow (default branch `main`): + - a data-handling statement page (OD-2: maintainers operate it; 24-month aggregates, OD-3; 90-day activity expiry, OD-4; signing; no raw reports or IPs) + - updates to `src/content/docs/platform-settings-telemetry.mdx`, `helm-values-reference.mdx` and `air-gapped-installation.mdx` (set `api.telemetry.enabled=false`) + + Then commit the submodule pointer bump in the root. +- [ ] T097 Run the `security-review` skill over the branch diff and fix the confirmed findings through a small fix workflow. +- [ ] T098 Push the branch and open the PR **as a draft**, using the `ship-branch` skill. Add labels through REST (rule 14): `type: feature`, `area: api`, `area: web`, `area: chart`, `area: e2e`, `area: shared` and `area: specs`. The PR body states: + - the OD-1 merge gate + - the T002 sign-off list + - that `telemetry-default-gate` is expected to fail until OD-1 is ruled +- [ ] T099 Once OD-1 is ruled: set `DefaultEndpoint` in `api/internal/telemetry/destination.go`, mark OD-1 RULED in `specs/022-default-telemetry-dashboard/OPEN-DECISIONS.md`, update the destination copy in `design.pen` (with re-export) and the docs, confirm `telemetry-default-gate` passes, and mark the PR ready for review. +- [ ] T100 After merge: `git mv specs/022-default-telemetry-dashboard specs/done_022-default-telemetry-dashboard` and update in-repo references as a `docs:` commit (rule 16, constitution IV). Then delete the remote and local branch (rule 12). + +--- + +## Dependencies and execution order + +### Phase dependencies + +- **Phase 1** has no prerequisites. T002 (sign-off) must be done before T039, T060 and T087 touch existing tests. +- **Phase 2** depends on Phase 1 and blocks every story. + - Within it, the contract tasks T010–T016 come before T017, T026 and T030. + - T018 → T019 → T020 → T021 and T022. + - T023 → T024 and T025. +- **US1 (Phase 3)** depends on Phase 2. +- **US2 (Phase 4)** depends on Phase 2. T051 and T053 build on the US1 handler file and section. Its E2E subtests (T055) must stay last in `TestTelemetryLifecycle`. +- **US3 (Phase 5)** depends on US2's T051–T053 (the same handler and section). +- **US4 (Phase 6)** depends only on Phase 2, so it can run in parallel with US1–US3. +- **US5 (Phase 7)** depends on US4: the ingest, store and views files. +- **US6 (Phase 8)** depends on US4: aggregates and `meta.reports_total`. +- **US7 (Phase 9)**: + - T083 and T086 depend on US5 (ext ingest) + - T084 and T087 depend on US1 (the reporter) + - T085 depends on US3 + - T088 depends on T083 and T084 +- **Polish (Phase 10)** depends on every story. T099 also waits for OD-1, and T100 waits for the merge. + +### Story order (graph) + +```text +Setup → Foundational ─┬─ US1 → US2 → US3 ─────────────┐ + └─ US4 → US5 ─┬─ US6 ├─ US7 → Polish → (OD-1) → T099 → merge → T100 + └─────────────────┘ +``` + +### Within each story + +1. Design (`design.pen` or `telemetry-receiver/telemetry-dashboard.pen`, then export). +2. Data and state. +3. Server logic. +4. HTTP and UI. +5. Unit and envtest tests. +6. E2E subtests. + +Commit after each logical unit. + +## Parallel opportunities + +- **Phase 1**: T005, T006, T007 and T008 together, after T004. +- **Phase 2**: + - T010, T011, T013 and T014 in parallel, then T012, then T015 and T016. + - The API state chain (T018–T022) runs alongside the contract work. + - T027, T028 and T029 in parallel, after T023. + - The receiver store (T030–T033) runs alongside the API tasks. +- **Across stories**: once Phase 2 is done, the **install-side track** (US1 → US2 → US3) and the **provider track** (US4 → US5 → US6) run as two parallel workflows. + +Parallel example for US4: + +```text +Wave A (parallel): T062 ratelimit.go | T065 views.go | T066 telemetry-dashboard.pen frames +Wave B: T063 ingest.go (needs T062) | T067 dashboard.go +Wave C: T068 templates (needs T066, T067) | T069 chart +Wave D (parallel): T070 unit tests | T071 E2E subtests +``` + +Parallel example for US1: + +```text +Wave A (parallel): T034 reporter | T035 consent.go | T041 notice design +Wave B (parallel): T037 config hook | T038 notice handlers | T042 web client +Wave C: T043 TelemetryNotice (needs T041, T042) | T036 wiring +Wave D (parallel): T039 | T040 | T044 | T045 | T046, then T047 and T048 +``` + +## Implementation strategy + +- **MVP (US1 + US2, both P1).** Default-on with the notice gate, the operator disable and redirect, and E2E against the bundled receiver. This alone fixes today's "telemetry never works" problem, including the restart bug. +- **Then:** + - US3, for transparency + - US4, the provider's history and private dashboard, which can be built alongside US1–US3 + - US5, US6 and US7 together, because signing (US7) must ship with extended acceptance (US5): an unsigned extended tier must not reach `master` +- **Single PR.** Everything lands through one draft PR that stays unmergeable until OD-1 is ruled (plan.md, Merge gate). Run CI after each phase to catch regressions early. From 732903f3daba8dccbec308ae1678070be3009490 Mon Sep 17 00:00:00 2001 From: valgulnecron <39313199+ValgulNecron@users.noreply.github.com> Date: Tue, 6 Oct 2026 23:41:54 +0200 Subject: [PATCH 02/47] chore(telemetryschema): add the shared telemetry report module Create the stdlib-only telemetryschema module that api and telemetry-receiver will share, and wire it into go.work, GO_MODULES, the CI lint and unit matrices, path filters, Dependabot, the coverage gate (90), the docs maps and both Dockerfiles (spec 022 T003-T009). The go.mod require/replace lines land with the first import. Co-Authored-By: Claude Opus 5.5 Claude-Session: https://claude.ai/code/session_01S7krnvWjW1a6bW5doxiVHB Signed-off-by: valgulnecron <39313199+ValgulNecron@users.noreply.github.com> --- .github/dependabot.yml | 14 +++++++++ .github/workflows/ci.yaml | 5 +-- .github/workflows/publish-edge.yaml | 1 + CLAUDE.md | 8 +++-- Makefile | 2 +- api/Dockerfile | 7 +++-- docs/agent-architecture.md | 1 + go.work | 1 + .../022-default-telemetry-dashboard/tasks.md | 16 +++++----- telemetry-receiver/Dockerfile | 3 ++ telemetryschema/.testcoverage.yml | 13 ++++++++ telemetryschema/doc.go | 4 +++ telemetryschema/go.mod | 3 ++ telemetryschema/specs.md | 31 +++++++++++++++++++ 14 files changed, 92 insertions(+), 17 deletions(-) create mode 100644 telemetryschema/.testcoverage.yml create mode 100644 telemetryschema/doc.go create mode 100644 telemetryschema/go.mod create mode 100644 telemetryschema/specs.md diff --git a/.github/dependabot.yml b/.github/dependabot.yml index db5f61800..c6f851104 100644 --- a/.github/dependabot.yml +++ b/.github/dependabot.yml @@ -172,6 +172,20 @@ updates: svcutil-minor-patch: update-types: ["minor", "patch"] + - package-ecosystem: "gomod" + directory: "/telemetryschema" + schedule: + interval: "weekly" + day: "monday" + time: "03:00" + commit-message: + prefix: "chore(deps)" + include: "scope" + open-pull-requests-limit: 5 + groups: + telemetryschema-minor-patch: + update-types: ["minor", "patch"] + - package-ecosystem: "gomod" directory: "/telemetry-receiver" schedule: diff --git a/.github/workflows/ci.yaml b/.github/workflows/ci.yaml index 665d55b93..64436208f 100644 --- a/.github/workflows/ci.yaml +++ b/.github/workflows/ci.yaml @@ -117,6 +117,7 @@ jobs: - 'agent/**' - 'audit-syslog-bridge/**' - 'telemetry-receiver/**' + - 'telemetryschema/**' - 'sentinel/**' - 'mcp-server/**' - 'capture-sidecar/**' @@ -454,7 +455,7 @@ jobs: strategy: fail-fast: false matrix: - module: [netguard, gameaction, gameproto, operator, agent, api, sentinel, audit-syslog-bridge, telemetry-receiver, mcp-server, capture-sidecar, svcutil, tunnel, gp-module, test/e2e] + module: [netguard, gameaction, gameproto, telemetryschema, operator, agent, api, sentinel, audit-syslog-bridge, telemetry-receiver, mcp-server, capture-sidecar, svcutil, tunnel, gp-module, test/e2e] steps: - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 - name: verify lint gate configuration @@ -546,7 +547,7 @@ jobs: strategy: fail-fast: false matrix: - module: [netguard, gameaction, gameproto, operator, api, agent, audit-syslog-bridge, telemetry-receiver, sentinel, mcp-server, capture-sidecar, svcutil, tunnel, gp-module] + module: [netguard, gameaction, gameproto, telemetryschema, operator, api, agent, audit-syslog-bridge, telemetry-receiver, sentinel, mcp-server, capture-sidecar, svcutil, tunnel, gp-module] arch: [amd64, arm64] steps: - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 diff --git a/.github/workflows/publish-edge.yaml b/.github/workflows/publish-edge.yaml index 750681607..6476d29f7 100644 --- a/.github/workflows/publish-edge.yaml +++ b/.github/workflows/publish-edge.yaml @@ -28,6 +28,7 @@ on: - "netguard/**" - "gameaction/**" - "gameproto/**" + - "telemetryschema/**" - "svcutil/**" - "gp-module/**" - "audit-syslog-bridge/**" diff --git a/CLAUDE.md b/CLAUDE.md index 0812e1985..f3e0b893e 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -35,6 +35,7 @@ Run every session. netguard/ SSRF dial-guard: IsAllowed (operator module sources, API sinks, agent loopback RCON); IsPublic (agent mod downloads, API Steam resolver) gameaction/ console-injection guard + command renderer (api, agent) gameproto/ Minecraft/Terraria handshake parser (sentinel) +telemetryschema/ shared telemetry report contract (api, telemetry-receiver) gp-module/ module authoring CLI: init/validate/preview/package operator/ controller-runtime operator api/v1alpha1/ CRD types (edit here, then `make generate manifests`); zz_generated.deepcopy.go GENERATED @@ -59,7 +60,7 @@ test/e2e/ Kind E2E suite (//go:build e2e) docs/ architecture, security, modules design.pen canonical Pencil dashboard design cosign.pub image + module signature key -go.work links all 15 Go modules (incl. test/e2e) +go.work links all 16 Go modules (incl. test/e2e) Makefile canonical task runner ``` @@ -68,13 +69,13 @@ After cloning: `git submodule update --init` (`modules/` required for `make dev- ## Commands (always via Makefile) - **Dev:** `make dev-up` (Kind + OCI registry :5001 + Helm), `make web-dev` (Vite, proxies in-cluster API), `make dev-load` (load built images; run `make images` first), `make dev-install` (Helm upgrade), `make dev-down`. -- **Build:** `make build` (all Go + web), `make build-go` (14 modules in GO_MODULES, all but test/e2e), `make build-web` (`npm ci && npm run build`), `make images`. +- **Build:** `make build` (all Go + web), `make build-go` (15 modules in GO_MODULES, all but test/e2e), `make build-web` (`npm ci && npm run build`), `make images`. - **Codegen:** `make generate` (deepcopy), `make manifests` (CRD/RBAC YAML, synced to `charts/gameplane/crds/`), `make modules-push`, `make tidy`. - **Tests (CI only — never run locally, see Rule 8):** `make test`, `make test-integration` (envtest operator+api), `make test-e2e` (~10–20 min), `make test-e2e-bucket BUCKET=(operator|api-auth|api-roles|api-rbac|api-agent|api-mods|ratelimit|bot-fast|bot-heavy|multicluster|upgrade)`. - **E2E conventions:** register new tests in `test/e2e/buckets.sh`; `t.Parallel()` + unique names; guard shared resources (`ociPushMu` for module pushes, `ensureResticRepo(t)` for shared backup repos). Rate limits per cluster: IP burst 10 (5/min), user burst 6 (3/min) — cap an API bucket at ~7 admin logins. - **Lint:** `make lint` = gofmt, go vet, golangci-lint, ESLint, `check-specs`, `check-doc-versions`, `check-links`. -**Coverage minimums:** netguard 91, gameaction 91, gameproto 90, gp-module 80, operator 72, api 80, agent 90, svcutil 90; audit-syslog-bridge, telemetry-receiver, sentinel, capture-sidecar, mcp-server, tunnel 70; web 92 lines / 76 functions / 82 branches / 92 statements. +**Coverage minimums:** netguard 91, gameaction 91, gameproto 90, telemetryschema 90, gp-module 80, operator 72, api 80, agent 90, svcutil 90; audit-syslog-bridge, telemetry-receiver, sentinel, capture-sidecar, mcp-server, tunnel 70; web 92 lines / 76 functions / 82 branches / 92 statements. ## Core rules @@ -114,6 +115,7 @@ After cloning: `git submodule update --init` (`modules/` required for `make dev- | netguard | Go | dial-time SSRF prevention: `IsAllowed` (operator/API module sources and sinks, agent loopback RCON), `IsPublic` (agent mod downloads, API Steam resolver) | | gameaction | Go | validates console input against schemas; escapes injection | | gameproto | Go | Minecraft/Terraria wire parser for connection filtering | +| telemetryschema | Go | stdlib-only shared telemetry report contract: types, strict decode, official module catalog, report signing (api, telemetry-receiver) | | gp-module | Go | module CLI: scaffold, offline validate, dry-run preview, OCI package | | svcutil | Go | stdlib-only env + graceful shutdown (`RunHTTP`) | | operator | Go, controller-runtime | authoritative reconciler for 9 CRDs (`GameServer`, `GameTemplate`, …) | diff --git a/Makefile b/Makefile index e3c664e85..4c3e53253 100644 --- a/Makefile +++ b/Makefile @@ -40,7 +40,7 @@ KUBECONFIG_ENV := KUBE_CONTEXT := kind-$(KIND_CLUSTER) endif -GO_MODULES := netguard gameaction gameproto gp-module operator api agent audit-syslog-bridge telemetry-receiver sentinel mcp-server capture-sidecar svcutil tunnel +GO_MODULES := netguard gameaction gameproto telemetryschema gp-module operator api agent audit-syslog-bridge telemetry-receiver sentinel mcp-server capture-sidecar svcutil tunnel GO_INTEGRATION_MODULES := operator api # test/e2e is a separate module (its own go.mod, excluded from the coverage diff --git a/api/Dockerfile b/api/Dockerfile index d0358d958..1d2e26994 100644 --- a/api/Dockerfile +++ b/api/Dockerfile @@ -1,12 +1,13 @@ FROM --platform=$BUILDPLATFORM golang:1.27-alpine AS build WORKDIR /src -# netguard, gameaction, and gp-module are in-repo modules the API depends on via local -# replaces (../netguard, ../gameaction, ../gp-module); copy them first so `go mod -# download` and the build resolve them. +# netguard, gameaction, gp-module, and telemetryschema are in-repo modules the API depends +# on via local replaces (../netguard, ../gameaction, ../gp-module, ../telemetryschema); +# copy them first so `go mod download` and the build resolve them. COPY netguard/ ./netguard/ COPY gameaction/ ./gameaction/ COPY gp-module/ ./gp-module/ +COPY telemetryschema/ ./telemetryschema/ COPY api/go.mod api/go.sum* ./api/ WORKDIR /src/api RUN go mod download diff --git a/docs/agent-architecture.md b/docs/agent-architecture.md index 7bc68b795..30f794204 100644 --- a/docs/agent-architecture.md +++ b/docs/agent-architecture.md @@ -27,6 +27,7 @@ This document is the **first stop** for AI agents modifying or extending Gamepla | **Tunnel** | `tunnel/specs.md` | Relay client supervisor for integrating with external tunnels (frp, Tailscale, playit). | | **Audit-Syslog-Bridge** | `audit-syslog-bridge/specs.md` | Relay forwarding HTTP JSON audit events to external syslog servers. | | **Telemetry-Receiver** | `telemetry-receiver/specs.md` | Ingests and processes anonymous usage telemetry from the API. | +| **Telemetryschema** | `telemetryschema/specs.md` | Shared telemetry report contract (types, enumerations, strict decode, official module catalog, report signing) used by the API and the telemetry-receiver. | | **MCP-Server** | `mcp-server/specs.md` | Read-only Model Context Protocol server exposing cluster state to AI tools. | | **Svcutil** | `svcutil/specs.md` | Shared stdlib-only env and graceful-shutdown helpers used by backend components. | diff --git a/go.work b/go.work index 96d05a6d2..69a166196 100644 --- a/go.work +++ b/go.work @@ -13,6 +13,7 @@ use ( ./operator ./sentinel ./svcutil + ./telemetryschema ./telemetry-receiver ./test/e2e ./tunnel diff --git a/specs/022-default-telemetry-dashboard/tasks.md b/specs/022-default-telemetry-dashboard/tasks.md index 6d86ec7f1..4afd5834c 100644 --- a/specs/022-default-telemetry-dashboard/tasks.md +++ b/specs/022-default-telemetry-dashboard/tasks.md @@ -44,16 +44,16 @@ description: "Task list for feature 022: default telemetry destination, extended - `.github/workflows/ci.yaml`, the "observability scrape TLS/reachability" step (about lines 773–812): the receiver ServiceMonitor and NetworkPolicy renders also set `api.telemetry.receiver.dashboard.tokenSecretRef.name`, the ServiceMonitor check expects `port: dashboard` and `bearerTokenSecret`, the NetworkPolicy check expects the Prometheus namespace on port 8081, and a new check asserts no receiver ServiceMonitor renders without a token. **Signed off 2026-10-06** by the user ("Approve all", then "Approve" for the `/metrics` changes). Record the sign-off in the PR description. -- [ ] T003 Create `telemetryschema/go.mod` (`module github.com/ValgulNecron/gameplane/telemetryschema`, `go 1.26.0`, no requires) and `telemetryschema/doc.go` with a package comment: "the shared telemetry report contract used by api and telemetry-receiver; see specs/022-default-telemetry-dashboard/contracts/report-schema.md". -- [ ] T004 Add `./telemetryschema` to the `use` block in `go.work`, and add `telemetryschema` to `GO_MODULES` in `Makefile:43` (after `gameproto`). -- [ ] T005 [P] Add `telemetryschema` to both Go module matrices in `.github/workflows/ci.yaml` (the `module:` lists at about lines 457 and 549). Add `telemetryschema/**` everywhere `telemetry-receiver/**` appears as a path filter (about line 119), and to the api and telemetry-receiver image path filters in `.github/workflows/publish-edge.yaml`. Add a `gomod` entry for `/telemetryschema` in `.github/dependabot.yml`, copied from the `/telemetry-receiver` entry at about line 176. -- [ ] T006 [P] Create `telemetryschema/.testcoverage.yml` (copy the `telemetry-receiver/.testcoverage.yml` format with `total: 90` and an updated header comment) and a non-empty `telemetryschema/specs.md` skeleton with the sections Purpose, Responsibilities, External interface (linking `specs/022-default-telemetry-dashboard/contracts/report-schema.md`), Key invariants, and Testing & coverage, so that `hack/check-specs.sh` passes. -- [ ] T007 [P] Update the repository docs maps: +- [X] T003 Create `telemetryschema/go.mod` (`module github.com/ValgulNecron/gameplane/telemetryschema`, `go 1.26.0`, no requires) and `telemetryschema/doc.go` with a package comment: "the shared telemetry report contract used by api and telemetry-receiver; see specs/022-default-telemetry-dashboard/contracts/report-schema.md". +- [X] T004 Add `./telemetryschema` to the `use` block in `go.work`, and add `telemetryschema` to `GO_MODULES` in `Makefile:43` (after `gameproto`). +- [X] T005 [P] Add `telemetryschema` to both Go module matrices in `.github/workflows/ci.yaml` (the `module:` lists at about lines 457 and 549). Add `telemetryschema/**` everywhere `telemetry-receiver/**` appears as a path filter (about line 119), and to the api and telemetry-receiver image path filters in `.github/workflows/publish-edge.yaml`. Add a `gomod` entry for `/telemetryschema` in `.github/dependabot.yml`, copied from the `/telemetry-receiver` entry at about line 176. +- [X] T006 [P] Create `telemetryschema/.testcoverage.yml` (copy the `telemetry-receiver/.testcoverage.yml` format with `total: 90` and an updated header comment) and a non-empty `telemetryschema/specs.md` skeleton with the sections Purpose, Responsibilities, External interface (linking `specs/022-default-telemetry-dashboard/contracts/report-schema.md`), Key invariants, and Testing & coverage, so that `hack/check-specs.sh` passes. +- [X] T007 [P] Update the repository docs maps: - `CLAUDE.md`: in the repository map add `telemetryschema/ shared telemetry report contract (api, telemetry-receiver)`; change "links all 15 Go modules" to 16; add `telemetryschema 90` to the coverage minimums; add a row to the Architecture table. - `docs/agent-architecture.md`: add a `telemetryschema/specs.md` row next to Telemetry-Receiver (line 29). -- [ ] T008 [P] Make the module-list checks accept the new module. Inspect how `hack/check-ci-report-coverage.sh`, `hack/check-publish-edge-paths.sh` and `hack/check-specs.sh` enumerate modules, and add `telemetryschema` to any list they read. Edit the lists only, not the checks' logic. +- [X] T008 [P] Make the module-list checks accept the new module. Inspect how `hack/check-ci-report-coverage.sh`, `hack/check-publish-edge-paths.sh` and `hack/check-specs.sh` enumerate modules, and add `telemetryschema` to any list they read. Edit the lists only, not the checks' logic. - [ ] T009 Wire the dependency: - - Add `require github.com/ValgulNecron/gameplane/telemetryschema v0.0.0` and `replace github.com/ValgulNecron/gameplane/telemetryschema => ../telemetryschema` to `api/go.mod`, `telemetry-receiver/go.mod` and `test/e2e/go.mod`, following the netguard pattern at `api/go.mod:5-9`. + - Add `require github.com/ValgulNecron/gameplane/telemetryschema v0.0.0` and `replace github.com/ValgulNecron/gameplane/telemetryschema => ../telemetryschema` to `api/go.mod` and `telemetry-receiver/go.mod` in the same change as their first import (T026, T017), following the netguard pattern at `api/go.mod:5-9`. `test/e2e/go.mod` gets the same lines in T088, with the test-only signing client. - Add `COPY telemetryschema/ ./telemetryschema/` to `api/Dockerfile` next to `COPY netguard/` (line 7). - In `telemetry-receiver/Dockerfile`, copy `telemetryschema/` before `go mod download` so that the `replace` path resolves. @@ -168,7 +168,7 @@ description: "Task list for feature 022: default telemetry destination, extended ### Receiver storage (`telemetry-receiver/`) - [ ] T030 Create `telemetry-receiver/store.go`: - - Open `modernc.org/sqlite` (add it to `telemetry-receiver/go.mod`) at `$DATA_DIR/telemetry.db`. When `DATA_DIR` is empty, use `file::memory:?cache=shared` and log a warning. + - Open `modernc.org/sqlite` (add it to `telemetry-receiver/go.mod`) at `$DATA_DIR/telemetry.db`. When `DATA_DIR` is empty, use a private in-memory database per store (`:memory:` with `SetMaxOpenConns(1)`, not a process-wide shared cache, so the many `newServer(config{})` calls in the existing tests stay isolated) and log a warning. `newServer(cfg config) *server` keeps its signature and opens an in-memory store; `main` opens the configured store and passes it in through a second constructor. - Enable WAL, with a single writer goroutine or a mutex. - Create every table in `data-model.md` § Receiver, including `activity.key_fp` and `activity.last_sent_at`. - Initialise `meta` keys `schema_version`, `collection_started` and `reports_total`. Generate and store `pepper` when `ID_PEPPER` is unset. diff --git a/telemetry-receiver/Dockerfile b/telemetry-receiver/Dockerfile index f5a0e5037..601faa041 100644 --- a/telemetry-receiver/Dockerfile +++ b/telemetry-receiver/Dockerfile @@ -1,6 +1,9 @@ FROM --platform=$BUILDPLATFORM golang:1.27-alpine AS build WORKDIR /src +# telemetryschema is an in-repo module the receiver depends on via a local replace +# (../telemetryschema); copy it first so `go mod download` and the build resolve it. +COPY telemetryschema/ ./telemetryschema/ COPY telemetry-receiver/go.mod telemetry-receiver/go.sum* ./telemetry-receiver/ WORKDIR /src/telemetry-receiver RUN go mod download diff --git a/telemetryschema/.testcoverage.yml b/telemetryschema/.testcoverage.yml new file mode 100644 index 000000000..e23a2029e --- /dev/null +++ b/telemetryschema/.testcoverage.yml @@ -0,0 +1,13 @@ +# Coverage threshold gate for the shared telemetryschema module. +# Enforced by `make cover-go-check` via go-test-coverage/v2. +# +# telemetryschema is the stdlib-only report contract shared by api and +# telemetry-receiver: types, enumerations, strict decoding, the official module +# catalog and report signing. All of it is unit-testable, so the gate is 90%. +profile: coverage/unit.out +github-action-output: false + +threshold: + file: 0 + package: 0 + total: 90 diff --git a/telemetryschema/doc.go b/telemetryschema/doc.go new file mode 100644 index 000000000..1aee4814e --- /dev/null +++ b/telemetryschema/doc.go @@ -0,0 +1,4 @@ +// Package telemetryschema is the shared telemetry report contract used by api +// and telemetry-receiver; see +// specs/022-default-telemetry-dashboard/contracts/report-schema.md. +package telemetryschema diff --git a/telemetryschema/go.mod b/telemetryschema/go.mod new file mode 100644 index 000000000..13b0c8e5c --- /dev/null +++ b/telemetryschema/go.mod @@ -0,0 +1,3 @@ +module github.com/ValgulNecron/gameplane/telemetryschema + +go 1.26.0 diff --git a/telemetryschema/specs.md b/telemetryschema/specs.md new file mode 100644 index 000000000..89eb4ddf0 --- /dev/null +++ b/telemetryschema/specs.md @@ -0,0 +1,31 @@ +# telemetryschema — Specification + +**Status:** skeleton (spec 022, filled in by T016) +**Module / package:** `github.com/ValgulNecron/gameplane/telemetryschema` +**Dependencies:** stdlib only (Go 1.26+) + +## Purpose + +Shared telemetry report contract used by `api` (reporter and preview) and `telemetry-receiver` (ingest), so both sides decode, validate and sign the same report shape. + +## Responsibilities + +1. Define the report types and enumerations. +2. Decode and validate report bodies, mapping out-of-set values to `other`. +3. Hold the official module catalog. +4. Sign and verify reports. + +(Skeleton: the full list is written in task T016.) + +## External interface + +See [`specs/022-default-telemetry-dashboard/contracts/report-schema.md`](../specs/022-default-telemetry-dashboard/contracts/report-schema.md). + +## Key invariants + +- No free text in a report; every category is bounded. +- Stdlib only; no network or filesystem access. + +## Testing & coverage + +Unit tests only. Coverage gate: 90% total, set in `.testcoverage.yml` and enforced by `make cover-go-check`. From 19efcc6546c80b44c4ff9cd501c52dae78c4fd9b Mon Sep 17 00:00:00 2001 From: valgulnecron <39313199+ValgulNecron@users.noreply.github.com> Date: Wed, 7 Oct 2026 00:18:18 +0200 Subject: [PATCH 03/47] feat(telemetryschema): report contract, strict decode, catalog and signing Add the report types with deterministic Encode, the enumerations and bands, a strict Decode that keeps the receiver's basic-path behaviour and validates the optional ext object, the embedded official-module catalog with a drift check against values.yaml, and Ed25519 report signing with HKDF-derived per-ID keys (spec 022 T010-T016). Co-Authored-By: Claude Opus 5.5 Claude-Session: https://claude.ai/code/session_01S7krnvWjW1a6bW5doxiVHB Signed-off-by: valgulnecron <39313199+ValgulNecron@users.noreply.github.com> --- Makefile | 6 +- hack/check-telemetry-catalog.sh | 72 ++++ telemetryschema/catalog.go | 39 ++ telemetryschema/catalog.txt | 16 + telemetryschema/catalog_test.go | 78 ++++ telemetryschema/decode.go | 414 ++++++++++++++++++++ telemetryschema/decode_test.go | 672 ++++++++++++++++++++++++++++++++ telemetryschema/enums.go | 83 ++++ telemetryschema/enums_test.go | 151 +++++++ telemetryschema/report.go | 128 ++++++ telemetryschema/sign.go | 106 +++++ telemetryschema/sign_test.go | 316 +++++++++++++++ telemetryschema/specs.md | 121 +++++- 13 files changed, 2190 insertions(+), 12 deletions(-) create mode 100755 hack/check-telemetry-catalog.sh create mode 100644 telemetryschema/catalog.go create mode 100644 telemetryschema/catalog.txt create mode 100644 telemetryschema/catalog_test.go create mode 100644 telemetryschema/decode.go create mode 100644 telemetryschema/decode_test.go create mode 100644 telemetryschema/enums.go create mode 100644 telemetryschema/enums_test.go create mode 100644 telemetryschema/report.go create mode 100644 telemetryschema/sign.go create mode 100644 telemetryschema/sign_test.go diff --git a/Makefile b/Makefile index 4c3e53253..ae81e015e 100644 --- a/Makefile +++ b/Makefile @@ -254,6 +254,10 @@ test-doc-versions: ## Run the fixture tests for hack/check-doc-versions.sh check-links: ## Verify internal documentation links and anchors resolve hack/check-links.sh +.PHONY: check-telemetry-catalog +check-telemetry-catalog: ## Verify telemetryschema/catalog.txt matches the chart's official module list + hack/check-telemetry-catalog.sh + .PHONY: check-dev-load-images check-dev-load-images: ## Verify `dev-load` loads every image `images` builds hack/check-dev-load-images.sh @@ -263,7 +267,7 @@ test-up-registry: ## Run the fixture tests for deploy/kind/up.sh's registry/cont hack/test-up-registry.sh .PHONY: lint -lint: check-doc-versions check-links check-specs check-dev-load-images test-up-registry lint-go lint-web ## Run all linters +lint: check-doc-versions check-links check-specs check-telemetry-catalog check-dev-load-images test-up-registry lint-go lint-web ## Run all linters .PHONY: lint-go lint-go: ## Run golangci-lint across all modules diff --git a/hack/check-telemetry-catalog.sh b/hack/check-telemetry-catalog.sh new file mode 100755 index 000000000..ca4f275b1 --- /dev/null +++ b/hack/check-telemetry-catalog.sh @@ -0,0 +1,72 @@ +#!/bin/sh +# check-telemetry-catalog.sh: Verify that telemetryschema/catalog.txt lists +# exactly the official modules in charts/gameplane/values.yaml +# (defaultModuleSource.oci.modules), in the same order (spec 022, research R15). +# +# Purpose: +# The telemetry receiver folds any game name that is not in the embedded +# catalog into "custom". If the chart's official module list and the catalog +# drift apart, a new official module would be counted as custom. This check +# fails make lint and CI on any difference. +# +# To fix a failure, make catalog.txt match the chart list (one name per line, +# same order, no blank lines) and keep telemetryschema tests in step. +# +# Test overrides: +# VALUES_FILE: values.yaml to read (default: charts/gameplane/values.yaml) +# CATALOG_FILE: catalog to compare (default: telemetryschema/catalog.txt) +# +# Exit codes: +# 0 = catalog.txt matches values.yaml +# 1 = mismatch (the diff is printed), or a file is missing or yields no modules + +set -eu + +ROOT=$(cd "$(dirname "$0")/.." && pwd) +VALUES_FILE=${VALUES_FILE:-$ROOT/charts/gameplane/values.yaml} +CATALOG_FILE=${CATALOG_FILE:-$ROOT/telemetryschema/catalog.txt} + +# extract_modules prints the names under defaultModuleSource.oci.modules, one +# per line. It is a line-based scan keyed on the chart's fixed indentation: +# a top-level key at column 0, "oci:" at 2 spaces, "modules:" at 4 spaces and +# list items "- name" at 6 spaces. +extract_modules() { + awk ' + /^defaultModuleSource:/ { top = 1; next } + top && /^[^ #]/ { exit } + top && /^ [A-Za-z]/ { oci = ($0 ~ /^ oci:/); mods = 0; next } + top && oci && /^ modules:/ { mods = 1; next } + top && oci && mods && /^ - / { + name = $0 + sub(/^ - /, "", name) + sub(/[ \t]*#.*$/, "", name) + sub(/[ \t]+$/, "", name) + print name + next + } + top && oci && mods && /^ [A-Za-z]/ { mods = 0 } + ' "$1" +} + +for f in "$VALUES_FILE" "$CATALOG_FILE"; do + if [ ! -f "$f" ]; then + echo "check-telemetry-catalog: $f not found" >&2 + exit 1 + fi +done + +expected=$(mktemp) +trap 'rm -f "$expected"' EXIT HUP INT TERM +extract_modules "$VALUES_FILE" >"$expected" + +if [ ! -s "$expected" ]; then + echo "check-telemetry-catalog: no modules found under defaultModuleSource.oci.modules in $VALUES_FILE" >&2 + exit 1 +fi + +if diff -u "$expected" "$CATALOG_FILE" >&2; then + echo "check-telemetry-catalog: catalog.txt matches values.yaml ($(wc -l <"$expected" | tr -d ' ') modules)" + exit 0 +fi +echo "check-telemetry-catalog: telemetryschema/catalog.txt differs from defaultModuleSource.oci.modules in values.yaml (- values.yaml, + catalog.txt)" >&2 +exit 1 diff --git a/telemetryschema/catalog.go b/telemetryschema/catalog.go new file mode 100644 index 000000000..e90c22c17 --- /dev/null +++ b/telemetryschema/catalog.go @@ -0,0 +1,39 @@ +package telemetryschema + +import ( + _ "embed" + "slices" + "strings" +) + +// catalogText is catalog.txt, generated from charts/gameplane/values.yaml +// defaultModuleSource.oci.modules; hack/check-telemetry-catalog.sh fails when +// the two differ. +// +//go:embed catalog.txt +var catalogText string + +// officialModules is catalogText split into names, in file order. +var officialModules = parseCatalog(catalogText) + +// parseCatalog splits catalog text into module names, skipping blank lines. +func parseCatalog(text string) []string { + var names []string + for _, line := range strings.Split(text, "\n") { + if name := strings.TrimSpace(line); name != "" { + names = append(names, name) + } + } + return names +} + +// IsOfficial reports whether name is an official module in the embedded +// catalog. +func IsOfficial(name string) bool { + return slices.Contains(officialModules, name) +} + +// Catalog returns a copy of the official module names, in catalog order. +func Catalog() []string { + return slices.Clone(officialModules) +} diff --git a/telemetryschema/catalog.txt b/telemetryschema/catalog.txt new file mode 100644 index 000000000..74ad800ae --- /dev/null +++ b/telemetryschema/catalog.txt @@ -0,0 +1,16 @@ +7-days-to-die +ark-survival-ascended +cs2 +dayz +dont-starve-together +enshrouded +factorio +garrys-mod +minecraft-java +palworld +project-zomboid +rust +satisfactory +terraria +valheim +v-rising diff --git a/telemetryschema/catalog_test.go b/telemetryschema/catalog_test.go new file mode 100644 index 000000000..4daffa20d --- /dev/null +++ b/telemetryschema/catalog_test.go @@ -0,0 +1,78 @@ +package telemetryschema + +import ( + "reflect" + "regexp" + "testing" +) + +// TestIsOfficial checks catalog membership: exact, case-sensitive names only. +func TestIsOfficial(t *testing.T) { + t.Parallel() + for _, name := range []string{"minecraft-java", "terraria", "valheim", "7-days-to-die", "v-rising", "cs2"} { + if !IsOfficial(name) { + t.Errorf("IsOfficial(%q) = false, want true", name) + } + } + for _, name := range []string{"", "custom", "other", "Minecraft-Java", "minecraft-java ", " terraria", "minecraft", "minecraft-java2", "my-private-game"} { + if IsOfficial(name) { + t.Errorf("IsOfficial(%q) = true, want false", name) + } + } +} + +// TestCatalog checks the embedded list is well formed and that Catalog hands +// out a copy. +func TestCatalog(t *testing.T) { + t.Parallel() + got := Catalog() + if len(got) == 0 { + t.Fatal("catalog is empty") + } + name := regexp.MustCompile(`^[a-z0-9][a-z0-9-]*$`) + seen := map[string]bool{} + for _, n := range got { + if !name.MatchString(n) { + t.Errorf("catalog entry %q is not a module name", n) + } + if seen[n] { + t.Errorf("catalog entry %q is duplicated", n) + } + seen[n] = true + if !IsOfficial(n) { + t.Errorf("IsOfficial(%q) = false for a catalog entry", n) + } + } + for _, n := range []string{"minecraft-java", "terraria", "valheim"} { + if !seen[n] { + t.Errorf("catalog is missing %q", n) + } + } + + got[0] = "tampered" + if IsOfficial("tampered") || Catalog()[0] == "tampered" { + t.Fatal("mutating the result of Catalog changed the catalog") + } +} + +// TestParseCatalog covers blank lines, surrounding whitespace and CRLF input. +func TestParseCatalog(t *testing.T) { + t.Parallel() + cases := []struct { + name string + in string + want []string + }{ + {"empty", "", nil}, + {"only blanks", "\n \n\t\n", nil}, + {"simple", "a\nb\n", []string{"a", "b"}}, + {"no trailing newline", "a\nb", []string{"a", "b"}}, + {"blank lines and spaces", "\n a \n\n\tb\t\n", []string{"a", "b"}}, + {"crlf", "a\r\nb\r\n", []string{"a", "b"}}, + } + for _, tc := range cases { + if got := parseCatalog(tc.in); !reflect.DeepEqual(got, tc.want) { + t.Errorf("%s: parseCatalog(%q) = %#v, want %#v", tc.name, tc.in, got, tc.want) + } + } +} diff --git a/telemetryschema/decode.go b/telemetryschema/decode.go new file mode 100644 index 000000000..10d21ce17 --- /dev/null +++ b/telemetryschema/decode.go @@ -0,0 +1,414 @@ +package telemetryschema + +import ( + "bytes" + "encoding/base64" + "encoding/json" + "errors" + "fmt" + "io" + "math" + "slices" + "sort" + "time" +) + +// ErrInvalidPayload is wrapped by every error Decode returns for a body that +// is not a valid report: not exactly one JSON object, an unknown, duplicate or +// missing key, a null or wrongly typed value, a structurally invalid extended +// part, or trailing content. +var ErrInvalidPayload = errors.New("invalid payload") + +// ErrUnsupportedSchema is returned when ext.schema is newer than this package +// understands. It wraps ErrInvalidPayload, so errors.Is(err, ErrInvalidPayload) +// is also true and a caller that maps both to 400 needs one check. +var ErrUnsupportedSchema = fmt.Errorf("%w: unsupported ext schema", ErrInvalidPayload) + +// SchemaVersion is the extended-tier schema this package reads and writes. +const SchemaVersion = 1 + +// keySize is the length in bytes of an Ed25519 public key. +const keySize = 32 + +// DecodeInfo reports non-fatal outcomes of Decode. +type DecodeInfo struct { + // ExtDropped is true when the body carried an ext part that was discarded + // because ext.installId is not a lowercase UUIDv4. The returned Report is + // then a valid basic report with Ext == nil. + ExtDropped bool +} + +// Decode parses a report body that has already been read in full. It accepts +// exactly one JSON object with version, servers and templates present and an +// optional ext object; keys are matched case-sensitively, and unknown keys, +// duplicate keys, null values, wrongly typed values and trailing content are +// rejected at every nesting level. Every ext field is required. +// +// Out-of-set enumeration values are folded to "other", arrays are returned +// sorted and de-duplicated (never nil), and unknown games.official modules are +// added to games.custom. Structural errors wrap ErrInvalidPayload; an +// ext.schema above SchemaVersion returns ErrUnsupportedSchema. Staleness of +// sentAt is the receiver's check, not Decode's. +func Decode(body []byte) (Report, DecodeInfo, error) { + dec := json.NewDecoder(bytes.NewReader(body)) + top, err := readObject(dec, "report") + if err != nil { + return Report{}, DecodeInfo{}, err + } + + // Check for trailing content. + switch err := dec.Decode(&struct{}{}); { + case errors.Is(err, io.EOF): + // exactly one value + case err != nil: + return Report{}, DecodeInfo{}, fmt.Errorf("%w: trailing content after the report: %w", ErrInvalidPayload, err) + default: + return Report{}, DecodeInfo{}, fmt.Errorf("%w: trailing content after the report", ErrInvalidPayload) + } + + if err := top.expect([]string{"version", "servers", "templates"}, []string{"ext"}); err != nil { + return Report{}, DecodeInfo{}, err + } + var r Report + if r.Version, err = asString(top.m["version"], "version"); err != nil { + return Report{}, DecodeInfo{}, err + } + if r.Servers, err = asCount(top.m["servers"], "servers", 0); err != nil { + return Report{}, DecodeInfo{}, err + } + if r.Templates, err = asCount(top.m["templates"], "templates", 0); err != nil { + return Report{}, DecodeInfo{}, err + } + extRaw, hasExt := top.m["ext"] + if !hasExt { + return r, DecodeInfo{}, nil + } + ext, err := decodeExt(extRaw) + if err != nil { + return Report{}, DecodeInfo{}, err + } + if ext == nil { + return r, DecodeInfo{ExtDropped: true}, nil + } + r.Ext = ext + return r, DecodeInfo{}, nil +} + +// object is a strictly read JSON object: its raw member values by key. +type object struct { + what string + m map[string]json.RawMessage +} + +// readObject reads one JSON object from dec: an opening brace, string keys +// without duplicates, non-null values, and a closing brace. what names the +// object in error messages. +func readObject(dec *json.Decoder, what string) (object, error) { + // Expect opening brace + tok, err := dec.Token() + if err != nil { + return object{}, fmt.Errorf("%w: %w", ErrInvalidPayload, err) + } + if tok != json.Delim('{') { + return object{}, fmt.Errorf("%w: %s: expected JSON object", ErrInvalidPayload, what) + } + + o := object{what: what, m: make(map[string]json.RawMessage)} + for dec.More() { + // Get the key + tok, err := dec.Token() + if err != nil { + return object{}, fmt.Errorf("%w: %w", ErrInvalidPayload, err) + } + key, ok := tok.(string) + if !ok { + return object{}, fmt.Errorf("%w: %s: expected string key", ErrInvalidPayload, what) + } + // Check for duplicate keys + if _, dup := o.m[key]; dup { + return object{}, fmt.Errorf("%w: %s: duplicate key %q", ErrInvalidPayload, what, key) + } + // Read the value raw so its type is validated carefully later. + var raw json.RawMessage + if err := dec.Decode(&raw); err != nil { + return object{}, fmt.Errorf("%w: %w", ErrInvalidPayload, err) + } + // Reject null values + if bytes.Equal(raw, []byte("null")) { + return object{}, fmt.Errorf("%w: %s: null value for key %q", ErrInvalidPayload, what, key) + } + o.m[key] = raw + } + + // Expect closing brace + tok, err = dec.Token() + if err != nil { + return object{}, fmt.Errorf("%w: %w", ErrInvalidPayload, err) + } + if tok != json.Delim('}') { + return object{}, fmt.Errorf("%w: %s: expected closing brace", ErrInvalidPayload, what) + } + return o, nil +} + +// readNested reads raw, a value taken from a parent object, as an object. +func readNested(raw json.RawMessage, what string) (object, error) { + return readObject(json.NewDecoder(bytes.NewReader(raw)), what) +} + +// expect rejects the object when a required key is missing or when it holds a +// key that is neither required nor optional. +func (o object) expect(required, optional []string) error { + for _, k := range required { + if _, ok := o.m[k]; !ok { + return fmt.Errorf("%w: %s: missing required field %q", ErrInvalidPayload, o.what, k) + } + } + for k := range o.m { + if !slices.Contains(required, k) && !slices.Contains(optional, k) { + return fmt.Errorf("%w: %s: unknown field %q", ErrInvalidPayload, o.what, k) + } + } + return nil +} + +// asString decodes raw as a JSON string. +func asString(raw json.RawMessage, what string) (string, error) { + var s string + if err := json.Unmarshal(raw, &s); err != nil { + return "", fmt.Errorf("%w: %s must be string: %w", ErrInvalidPayload, what, err) + } + return s, nil +} + +// asCount decodes raw as a JSON integer of at least minimum. +func asCount(raw json.RawMessage, what string, minimum int) (int, error) { + var n int + if err := json.Unmarshal(raw, &n); err != nil { + return 0, fmt.Errorf("%w: %s must be integer: %w", ErrInvalidPayload, what, err) + } + if n < minimum { + return 0, fmt.Errorf("%w: %s must be at least %d", ErrInvalidPayload, what, minimum) + } + return n, nil +} + +// asBool decodes raw as a JSON boolean. +func asBool(raw json.RawMessage, what string) (bool, error) { + var b bool + if err := json.Unmarshal(raw, &b); err != nil { + return false, fmt.Errorf("%w: %s must be boolean: %w", ErrInvalidPayload, what, err) + } + return b, nil +} + +// asEnumSet decodes raw as a JSON array of strings, folds every member that is +// not in set to "other", and returns the result sorted and de-duplicated. The +// result is never nil. An element that is null or not a string is invalid. +func asEnumSet(raw json.RawMessage, what string, set []string) ([]string, error) { + var in []*string + if err := json.Unmarshal(raw, &in); err != nil { + return nil, fmt.Errorf("%w: %s must be an array of strings: %w", ErrInvalidPayload, what, err) + } + out := make([]string, 0, len(in)) + for _, p := range in { + if p == nil { + return nil, fmt.Errorf("%w: %s must not contain null", ErrInvalidPayload, what) + } + out = append(out, SanitizeEnum(set, *p)) + } + sort.Strings(out) + return slices.Compact(out), nil +} + +// asEnum decodes raw as a JSON string and folds it into set. +func asEnum(raw json.RawMessage, what string, set []string) (string, error) { + s, err := asString(raw, what) + if err != nil { + return "", err + } + return SanitizeEnum(set, s), nil +} + +// decodePublicKey decodes an unpadded base64url Ed25519 public key. +func decodePublicKey(s string) ([]byte, error) { + b, err := base64.RawURLEncoding.Strict().DecodeString(s) + if err != nil { + return nil, fmt.Errorf("key is not unpadded base64url: %w", err) + } + if len(b) != keySize { + return nil, fmt.Errorf("key is %d bytes, want %d", len(b), keySize) + } + return b, nil +} + +// decodeExt validates and sanitises the ext object. It returns (nil, nil) when +// the whole part must be dropped because installId is malformed; every other +// structural problem is an error, and a schema above SchemaVersion wins over +// all of them. +func decodeExt(raw json.RawMessage) (*Extended, error) { + o, err := readNested(raw, "ext") + if err != nil { + return nil, err + } + // The schema is checked first: a newer schema may legitimately carry + // fields this package does not know. + if sr, ok := o.m["schema"]; ok { + n, err := asCount(sr, "ext.schema", 0) + if err != nil { + return nil, err + } + if n > SchemaVersion { + return nil, fmt.Errorf("%w: %d", ErrUnsupportedSchema, n) + } + } + required := []string{"schema", "installId", "env", "games", "features", "key", "sentAt"} + if err := o.expect(required, nil); err != nil { + return nil, err + } + var e Extended + if e.Schema, err = asCount(o.m["schema"], "ext.schema", SchemaVersion); err != nil { + return nil, err + } + if e.InstallID, err = asString(o.m["installId"], "ext.installId"); err != nil { + return nil, err + } + if e.Env, err = decodeEnv(o.m["env"]); err != nil { + return nil, err + } + if e.Games, err = decodeGames(o.m["games"]); err != nil { + return nil, err + } + if e.Features, err = decodeFeatures(o.m["features"]); err != nil { + return nil, err + } + if e.Key, err = asString(o.m["key"], "ext.key"); err != nil { + return nil, err + } + if _, err := decodePublicKey(e.Key); err != nil { + return nil, fmt.Errorf("%w: ext.%w", ErrInvalidPayload, err) + } + sentAt, err := asString(o.m["sentAt"], "ext.sentAt") + if err != nil { + return nil, err + } + if e.SentAt, err = time.Parse(time.RFC3339, sentAt); err != nil { + return nil, fmt.Errorf("%w: ext.sentAt is not RFC 3339: %w", ErrInvalidPayload, err) + } + e.SentAt = e.SentAt.UTC() + // A malformed ID drops the extended part only after the rest has been + // validated, so the report still counts as basic. + if !installIDRE.MatchString(e.InstallID) { + return nil, nil + } + return &e, nil +} + +// decodeEnv validates ext.env. +func decodeEnv(raw json.RawMessage) (Env, error) { + o, err := readNested(raw, "ext.env") + if err != nil { + return Env{}, err + } + if err := o.expect([]string{"k8s", "distro", "arch", "nodes"}, nil); err != nil { + return Env{}, err + } + var e Env + k8s, err := asString(o.m["k8s"], "ext.env.k8s") + if err != nil { + return Env{}, err + } + e.K8s = other + if K8sMinorRE.MatchString(k8s) { + e.K8s = k8s + } + if e.Distro, err = asEnum(o.m["distro"], "ext.env.distro", Distros); err != nil { + return Env{}, err + } + if e.Arch, err = asEnumSet(o.m["arch"], "ext.env.arch", Arches); err != nil { + return Env{}, err + } + if len(e.Arch) == 0 { + return Env{}, fmt.Errorf("%w: ext.env.arch must not be empty", ErrInvalidPayload) + } + if e.Nodes, err = asEnum(o.m["nodes"], "ext.env.nodes", NodeBands); err != nil { + return Env{}, err + } + return e, nil +} + +// decodeGames validates ext.games. Counts of modules outside the catalog are +// added to Custom. +func decodeGames(raw json.RawMessage) (Games, error) { + o, err := readNested(raw, "ext.games") + if err != nil { + return Games{}, err + } + if err := o.expect([]string{"official", "custom"}, nil); err != nil { + return Games{}, err + } + g := Games{Official: map[string]int{}} + if g.Custom, err = asCount(o.m["custom"], "ext.games.custom", 0); err != nil { + return Games{}, err + } + official, err := readNested(o.m["official"], "ext.games.official") + if err != nil { + return Games{}, err + } + for name, v := range official.m { + n, err := asCount(v, "ext.games.official."+name, 1) + if err != nil { + return Games{}, err + } + if IsOfficial(name) { + g.Official[name] = n + continue + } + if g.Custom > math.MaxInt-n { + return Games{}, fmt.Errorf("%w: ext.games.custom overflows", ErrInvalidPayload) + } + g.Custom += n + } + return g, nil +} + +// decodeFeatures validates ext.features. +func decodeFeatures(raw json.RawMessage) (Features, error) { + o, err := readNested(raw, "ext.features") + if err != nil { + return Features{}, err + } + required := []string{"wakeOnConnect", "tunnels", "capture", "backups", "sso", "auditForwarding", "clusters", "db", "language"} + if err := o.expect(required, nil); err != nil { + return Features{}, err + } + var f Features + bools := []struct { + key string + dst *bool + }{ + {"wakeOnConnect", &f.WakeOnConnect}, + {"capture", &f.Capture}, + {"backups", &f.Backups}, + {"sso", &f.SSO}, + {"auditForwarding", &f.AuditForwarding}, + } + for _, b := range bools { + if *b.dst, err = asBool(o.m[b.key], "ext.features."+b.key); err != nil { + return Features{}, err + } + } + if f.Tunnels, err = asEnumSet(o.m["tunnels"], "ext.features.tunnels", Tunnels); err != nil { + return Features{}, err + } + if f.Clusters, err = asEnum(o.m["clusters"], "ext.features.clusters", ClusterBands); err != nil { + return Features{}, err + } + if f.DB, err = asEnum(o.m["db"], "ext.features.db", DBs); err != nil { + return Features{}, err + } + if f.Language, err = asEnum(o.m["language"], "ext.features.language", Languages); err != nil { + return Features{}, err + } + return f, nil +} diff --git a/telemetryschema/decode_test.go b/telemetryschema/decode_test.go new file mode 100644 index 000000000..305b8e208 --- /dev/null +++ b/telemetryschema/decode_test.go @@ -0,0 +1,672 @@ +package telemetryschema + +import ( + "encoding/json" + "errors" + "reflect" + "strings" + "testing" + "time" +) + +const ( + testID = "3f1c2a9e-8b4d-4e57-9a61-0c2d7e5b9f10" + testKey = "sVjEWoD28OPh_Gx5V4QWBw8kMurJ9uZS_r1JDe8Dgls" + + basicBody = `{"version":"1.0.0","servers":1,"templates":2}` + + // validExt is a complete, valid ext object. Tests derive variants from it + // with mut, setAt and delAt. + validExt = `{"schema":1,"installId":"` + testID + `",` + + `"env":{"k8s":"1.31","distro":"k3s","arch":["amd64"],"nodes":"1"},` + + `"games":{"official":{"minecraft-java":2,"terraria":1},"custom":0},` + + `"features":{"wakeOnConnect":true,"tunnels":["playit"],"capture":false,"backups":true,` + + `"sso":false,"auditForwarding":false,"clusters":"1","db":"sqlite","language":"en"},` + + `"key":"` + testKey + `","sentAt":"2026-10-06T09:12:44Z"}` +) + +// withExt wraps an ext object in a complete report body. +func withExt(ext string) []byte { + return []byte(`{"version":"0.3.0","servers":3,"templates":7,"ext":` + ext + `}`) +} + +// mut replaces old with replacement in validExt and panics when old is absent, +// so a stale test fixture fails loudly instead of silently testing nothing. +func mut(old, replacement string) string { + if !strings.Contains(validExt, old) { + panic("fixture does not contain " + old) + } + return strings.Replace(validExt, old, replacement, 1) +} + +// edit parses validExt into a generic tree, applies fn to the object at path +// (every element but the last is a nested object) and re-encodes it. +func edit(t *testing.T, path []string, fn func(obj map[string]any, key string)) string { + t.Helper() + var root map[string]any + if err := json.Unmarshal([]byte(validExt), &root); err != nil { + t.Fatalf("parse fixture: %v", err) + } + obj := root + for _, p := range path[:len(path)-1] { + next, ok := obj[p].(map[string]any) + if !ok { + t.Fatalf("fixture path %v: %q is not an object", path, p) + } + obj = next + } + fn(obj, path[len(path)-1]) + out, err := json.Marshal(root) + if err != nil { + t.Fatalf("encode variant: %v", err) + } + return string(out) +} + +// setAt returns validExt with the value at path replaced by val. +func setAt(t *testing.T, val any, path ...string) string { + t.Helper() + return edit(t, path, func(obj map[string]any, key string) { + if _, ok := obj[key]; !ok { + t.Fatalf("fixture has no key %v", path) + } + obj[key] = val + }) +} + +// delAt returns validExt with the key at path removed. +func delAt(t *testing.T, path ...string) string { + t.Helper() + return edit(t, path, func(obj map[string]any, key string) { + if _, ok := obj[key]; !ok { + t.Fatalf("fixture has no key %v", path) + } + delete(obj, key) + }) +} + +// TestDecodeBasicAccepts covers valid basic reports, including zero counts and +// trailing whitespace. +func TestDecodeBasicAccepts(t *testing.T) { + t.Parallel() + cases := []struct { + name string + body string + want Report + }{ + {"minimal", basicBody, Report{Version: "1.0.0", Servers: 1, Templates: 2}}, + {"zero counts", `{"version":"1.0.0","servers":0,"templates":0}`, Report{Version: "1.0.0"}}, + {"trailing newline", basicBody + "\n", Report{Version: "1.0.0", Servers: 1, Templates: 2}}, + {"surrounding whitespace", " " + basicBody + " \r\n\t", Report{Version: "1.0.0", Servers: 1, Templates: 2}}, + {"any key order", `{"templates":2,"servers":1,"version":"1.0.0"}`, Report{Version: "1.0.0", Servers: 1, Templates: 2}}, + {"hostile version is kept for the receiver to bucket", `{"version":"", "1/2", "1\n", strings.Repeat("a", 33), "ünï"} + for _, v := range valid { + if !VersionRE.MatchString(v) { + t.Errorf("VersionRE rejects %q", v) + } + } + for _, v := range invalid { + if VersionRE.MatchString(v) { + t.Errorf("VersionRE accepts %q", v) + } + } +} + +// TestK8sMinorRE checks the 1. pattern. +func TestK8sMinorRE(t *testing.T) { + t.Parallel() + for _, v := range []string{"1.0", "1.9", "1.31", "1.123"} { + if !K8sMinorRE.MatchString(v) { + t.Errorf("K8sMinorRE rejects %q", v) + } + } + for _, v := range []string{"", "1", "1.", "1.1234", "2.1", "v1.31", "1.31.2", "1.x", "01.31", "1.31\n"} { + if K8sMinorRE.MatchString(v) { + t.Errorf("K8sMinorRE accepts %q", v) + } + } +} diff --git a/telemetryschema/report.go b/telemetryschema/report.go new file mode 100644 index 000000000..735afab45 --- /dev/null +++ b/telemetryschema/report.go @@ -0,0 +1,128 @@ +package telemetryschema + +import ( + "encoding/json" + "fmt" + "slices" + "sort" + "time" +) + +// Report is one telemetry report: the basic tier (Version, Servers, +// Templates) plus the optional extended tier (Ext). Ext is non-nil only while +// the install's extended tier is on. +type Report struct { + Version string `json:"version"` + Servers int `json:"servers"` + Templates int `json:"templates"` + Ext *Extended `json:"ext,omitempty"` +} + +// Extended is the extended tier of a report. Every field is required on the +// wire. Key is the base64url (unpadded) Ed25519 public key derived for +// InstallID (see DeriveKey); SentAt is the send time. +type Extended struct { + Schema int `json:"schema"` + InstallID string `json:"installId"` + Env Env `json:"env"` + Games Games `json:"games"` + Features Features `json:"features"` + Key string `json:"key"` + SentAt time.Time `json:"sentAt"` +} + +// Env describes the install's environment, using only enumerated values. +type Env struct { + K8s string `json:"k8s"` + Distro string `json:"distro"` + Arch []string `json:"arch"` + Nodes string `json:"nodes"` +} + +// Games counts local GameServers: Official maps an official catalog module +// name to its server count, Custom counts every other server. +type Games struct { + Official map[string]int `json:"official"` + Custom int `json:"custom"` +} + +// Features records which optional features are in use. +type Features struct { + WakeOnConnect bool `json:"wakeOnConnect"` + Tunnels []string `json:"tunnels"` + Capture bool `json:"capture"` + Backups bool `json:"backups"` + SSO bool `json:"sso"` + AuditForwarding bool `json:"auditForwarding"` + Clusters string `json:"clusters"` + DB string `json:"db"` + Language string `json:"language"` +} + +// wireExtended is Extended as it appears on the wire: SentAt is a +// second-precision RFC 3339 UTC string. +type wireExtended struct { + Schema int `json:"schema"` + InstallID string `json:"installId"` + Env Env `json:"env"` + Games Games `json:"games"` + Features Features `json:"features"` + Key string `json:"key"` + SentAt string `json:"sentAt"` +} + +// wireReport is Report as it appears on the wire. +type wireReport struct { + Version string `json:"version"` + Servers int `json:"servers"` + Templates int `json:"templates"` + Ext *wireExtended `json:"ext,omitempty"` +} + +// Encode returns the canonical JSON body for r. The output is deterministic: +// arrays are sorted and de-duplicated, object keys are sorted (encoding/json +// sorts map keys), nil arrays and maps are written as [] and {} (never null), +// and SentAt is written in UTC at second precision. Encode does not fold +// out-of-set values; Decode does. Negative counts are rejected with +// ErrInvalidPayload. +func Encode(r Report) ([]byte, error) { + if r.Servers < 0 || r.Templates < 0 { + return nil, fmt.Errorf("%w: counts must be non-negative", ErrInvalidPayload) + } + w := wireReport{Version: r.Version, Servers: r.Servers, Templates: r.Templates} + if e := r.Ext; e != nil { + official := make(map[string]int, len(e.Games.Official)) + for k, v := range e.Games.Official { + official[k] = v + } + env := e.Env + env.Arch = sortedSet(env.Arch) + feat := e.Features + feat.Tunnels = sortedSet(feat.Tunnels) + w.Ext = &wireExtended{ + Schema: e.Schema, + InstallID: e.InstallID, + Env: env, + Games: Games{Official: official, Custom: e.Games.Custom}, + Features: feat, + Key: e.Key, + SentAt: e.SentAt.UTC().Format(time.RFC3339), + } + } + out, err := json.Marshal(w) + if err != nil { + return nil, fmt.Errorf("telemetryschema: encode report: %w", err) + } + return out, nil +} + +// sortedSet returns a sorted, de-duplicated copy of in. It never returns nil, +// so the JSON form is [] rather than null. +func sortedSet(in []string) []string { + out := slices.Clone(in) + if out == nil { + out = []string{} + } + sort.Strings(out) + return slices.Compact(out) +} diff --git a/telemetryschema/sign.go b/telemetryschema/sign.go new file mode 100644 index 000000000..4a404f5d3 --- /dev/null +++ b/telemetryschema/sign.go @@ -0,0 +1,106 @@ +package telemetryschema + +import ( + "crypto/ed25519" + "crypto/hkdf" + "crypto/rand" + "crypto/sha256" + "encoding/base64" + "encoding/hex" + "errors" + "fmt" + "strings" +) + +// SignatureHeader is the HTTP request header that carries the report +// signature. It is required when the report has an ext part and absent +// otherwise. +const SignatureHeader = "Gameplane-Telemetry-Signature" + +// signaturePrefix starts the header value: "ed25519=". +const signaturePrefix = "ed25519=" + +// SecretSize is the length in bytes of the install's signing secret. +const SecretSize = 32 + +// keyInfo is the HKDF context string for signing-key derivation. +const keyInfo = "gameplane-telemetry-signing-v1" + +// ErrBadSignature is wrapped by every Verify failure: a missing or malformed +// header, a malformed public key, or a signature that does not match. +var ErrBadSignature = errors.New("bad signature") + +// NewSecret returns a new signing secret: SecretSize random bytes. +func NewSecret() ([]byte, error) { + secret := make([]byte, SecretSize) + if _, err := rand.Read(secret); err != nil { + return nil, fmt.Errorf("telemetryschema: generate signing secret: %w", err) + } + return secret, nil +} + +// DeriveKey derives the Ed25519 signing key for installID from the install's +// signing secret: seed = HKDF-SHA256(secret, salt = installID, info = +// "gameplane-telemetry-signing-v1", 32 bytes). The key is unique to the ID, so +// a new ID always yields an unlinkable key. Callers recompute it on every send +// and never store it. +func DeriveKey(secret []byte, installID string) (ed25519.PrivateKey, error) { + if len(secret) != SecretSize { + return nil, fmt.Errorf("telemetryschema: signing secret is %d bytes, want %d", len(secret), SecretSize) + } + if installID == "" { + return nil, errors.New("telemetryschema: install ID is empty") + } + seed, err := hkdf.Key(sha256.New, secret, []byte(installID), keyInfo, ed25519.SeedSize) + if err != nil { + return nil, fmt.Errorf("telemetryschema: derive signing key: %w", err) + } + return ed25519.NewKeyFromSeed(seed), nil +} + +// PublicKeyString returns the public half of priv as unpadded base64url, the +// form carried in ext.key. +func PublicKeyString(priv ed25519.PrivateKey) string { + // An Ed25519 private key is seed || public key. + return base64.RawURLEncoding.EncodeToString(priv[ed25519.SeedSize:]) +} + +// Sign signs the exact body bytes and returns the header value +// "ed25519=". +func Sign(priv ed25519.PrivateKey, body []byte) string { + return signaturePrefix + base64.RawURLEncoding.EncodeToString(ed25519.Sign(priv, body)) +} + +// Verify checks that header, the value of SignatureHeader, is a valid +// signature of body under publicKey, an unpadded base64url Ed25519 public key. +// Every failure wraps ErrBadSignature. +func Verify(header, publicKey string, body []byte) error { + encoded, ok := strings.CutPrefix(header, signaturePrefix) + if !ok { + return fmt.Errorf("%w: header must start with %q", ErrBadSignature, signaturePrefix) + } + sig, err := base64.RawURLEncoding.Strict().DecodeString(encoded) + if err != nil || len(sig) != ed25519.SignatureSize { + return fmt.Errorf("%w: malformed signature", ErrBadSignature) + } + pub, err := decodePublicKey(publicKey) + if err != nil { + return fmt.Errorf("%w: %w", ErrBadSignature, err) + } + if !ed25519.Verify(pub, body, sig) { + return fmt.Errorf("%w: signature does not match", ErrBadSignature) + } + return nil +} + +// KeyFingerprint returns the hex SHA-256 of the raw public key bytes, the +// receiver's stored claim (key_fp). It returns "" when publicKey is not a +// valid unpadded base64url 32-byte key. +func KeyFingerprint(publicKey string) string { + raw, err := decodePublicKey(publicKey) + if err != nil { + return "" + } + sum := sha256.Sum256(raw) + return hex.EncodeToString(sum[:]) +} diff --git a/telemetryschema/sign_test.go b/telemetryschema/sign_test.go new file mode 100644 index 000000000..1ce4e6480 --- /dev/null +++ b/telemetryschema/sign_test.go @@ -0,0 +1,316 @@ +package telemetryschema + +import ( + "bytes" + "crypto/ed25519" + "encoding/base64" + "encoding/hex" + "errors" + "strings" + "testing" + "time" +) + +// Fixed vector: secret = bytes 0x00..0x1f, ID = testID. These values were +// computed once with this package and pin the derivation (HKDF-SHA256, +// salt = installID, info = "gameplane-telemetry-signing-v1") so an accidental +// change to it, which would orphan every install's claim, fails a test. +const ( + vectorSeedHex = "ba8437e857f84d8a133ba2bdd61e9487835821b360b0ea80eaae8214510c34e4" + vectorPublic = testKey + vectorFP = "91acb03049b6b19322b826facc44ff4cb52f241170856c5ae17cf97d60525654" + vectorBody = "hello gameplane" + vectorHeader = "ed25519=52awxyQ-StRsfZ1vVDldOkSsGpSqV-UK49-DF3KJN9fJJb0UomHqlaTNeFpL1-EwT-8k4wEoq2MZGoEazHTFCw" + otherID = "9b2e7c14-5d3a-4f68-8e0b-1a4c6d8f2e37" +) + +// vectorSecret returns the fixed secret 0x00..0x1f. +func vectorSecret() []byte { + secret := make([]byte, SecretSize) + for i := range secret { + secret[i] = byte(i) + } + return secret +} + +// vectorKey derives the fixed vector's private key. +func vectorKey(t *testing.T) ed25519.PrivateKey { + t.Helper() + priv, err := DeriveKey(vectorSecret(), testID) + if err != nil { + t.Fatalf("DeriveKey: %v", err) + } + return priv +} + +// TestDeriveKeyVector pins the derivation, the public key string, the +// fingerprint and a signature to fixed values. +func TestDeriveKeyVector(t *testing.T) { + t.Parallel() + priv := vectorKey(t) + if got := hex.EncodeToString(priv.Seed()); got != vectorSeedHex { + t.Fatalf("seed = %s, want %s", got, vectorSeedHex) + } + pub := PublicKeyString(priv) + if pub != vectorPublic { + t.Fatalf("PublicKeyString = %s, want %s", pub, vectorPublic) + } + if len(pub) != 43 || strings.ContainsAny(pub, "=+/") { + t.Fatalf("public key %q is not unpadded base64url of 32 bytes", pub) + } + if got := KeyFingerprint(pub); got != vectorFP { + t.Fatalf("KeyFingerprint = %s, want %s", got, vectorFP) + } + // Ed25519 signing is deterministic, so the header is a fixed value too. + if got := Sign(priv, []byte(vectorBody)); got != vectorHeader { + t.Fatalf("Sign = %s, want %s", got, vectorHeader) + } + if err := Verify(vectorHeader, vectorPublic, []byte(vectorBody)); err != nil { + t.Fatalf("Verify(vector): %v", err) + } +} + +// TestDeriveKeyIsDeterministicAndPerID checks that the same inputs give the +// same key and that a different ID or secret gives a different key. +func TestDeriveKeyIsDeterministicAndPerID(t *testing.T) { + t.Parallel() + a := vectorKey(t) + b := vectorKey(t) + if !bytes.Equal(a, b) { + t.Fatal("same secret and ID gave different keys") + } + other, err := DeriveKey(vectorSecret(), otherID) + if err != nil { + t.Fatalf("DeriveKey: %v", err) + } + if bytes.Equal(a, other) || PublicKeyString(a) == PublicKeyString(other) { + t.Fatal("different IDs derived the same key") + } + secret2 := vectorSecret() + secret2[0] ^= 0xff + diff, err := DeriveKey(secret2, testID) + if err != nil { + t.Fatalf("DeriveKey: %v", err) + } + if bytes.Equal(a, diff) { + t.Fatal("different secrets derived the same key") + } + if KeyFingerprint(PublicKeyString(a)) == KeyFingerprint(PublicKeyString(other)) { + t.Fatal("different keys share a fingerprint") + } +} + +// TestDeriveKeyRejectsBadInput covers the input checks. +func TestDeriveKeyRejectsBadInput(t *testing.T) { + t.Parallel() + for name, secret := range map[string][]byte{ + "nil": nil, + "empty": {}, + "short": make([]byte, SecretSize-1), + "long": make([]byte, SecretSize+1), + } { + if _, err := DeriveKey(secret, testID); err == nil { + t.Errorf("%s secret: expected error", name) + } + } + if _, err := DeriveKey(vectorSecret(), ""); err == nil { + t.Error("empty install ID: expected error") + } +} + +// TestNewSecret checks the length and that two secrets differ. +func TestNewSecret(t *testing.T) { + t.Parallel() + a, err := NewSecret() + if err != nil { + t.Fatalf("NewSecret: %v", err) + } + b, err := NewSecret() + if err != nil { + t.Fatalf("NewSecret: %v", err) + } + if len(a) != SecretSize || len(b) != SecretSize { + t.Fatalf("lengths = %d, %d, want %d", len(a), len(b), SecretSize) + } + if bytes.Equal(a, b) { + t.Fatal("two secrets are identical") + } + if _, err := DeriveKey(a, testID); err != nil { + t.Fatalf("a new secret must be usable: %v", err) + } +} + +// TestSignVerifyRoundTrip signs an encoded report with a derived key and +// verifies it with the ext.key the decoder returns. +func TestSignVerifyRoundTrip(t *testing.T) { + t.Parallel() + priv := vectorKey(t) + body, err := Encode(Report{ + Version: "0.3.0", Servers: 1, Templates: 1, + Ext: &Extended{ + Schema: 1, InstallID: testID, + Env: Env{K8s: "1.31", Distro: "k3s", Arch: []string{"amd64"}, Nodes: "1"}, + Features: Features{Clusters: "1", DB: "sqlite", Language: "en"}, + Key: PublicKeyString(priv), + SentAt: time.Date(2026, 10, 6, 9, 12, 44, 0, time.UTC), + }, + }) + if err != nil { + t.Fatalf("Encode: %v", err) + } + header := Sign(priv, body) + if !strings.HasPrefix(header, "ed25519=") { + t.Fatalf("header %q lacks the ed25519= prefix", header) + } + r, _, err := Decode(body) + if err != nil { + t.Fatalf("Decode: %v", err) + } + if err := Verify(header, r.Ext.Key, body); err != nil { + t.Fatalf("Verify: %v", err) + } +} + +// TestVerifyDetectsEverySingleByteTamper flips each bit-0 of the body in turn, +// then of the signature, and expects a failure every time. +func TestVerifyDetectsEverySingleByteTamper(t *testing.T) { + t.Parallel() + priv := vectorKey(t) + body := []byte(`{"version":"0.3.0","servers":3,"templates":7}`) + header := Sign(priv, body) + pub := PublicKeyString(priv) + if err := Verify(header, pub, body); err != nil { + t.Fatalf("untampered body: %v", err) + } + for i := range body { + tampered := bytes.Clone(body) + tampered[i] ^= 0x01 + err := Verify(header, pub, tampered) + if !errors.Is(err, ErrBadSignature) { + t.Fatalf("flipping body byte %d: err = %v, want ErrBadSignature", i, err) + } + } + if err := Verify(header, pub, append(bytes.Clone(body), ' ')); !errors.Is(err, ErrBadSignature) { + t.Fatalf("appended byte: err = %v, want ErrBadSignature", err) + } + if err := Verify(header, pub, body[:len(body)-1]); !errors.Is(err, ErrBadSignature) { + t.Fatalf("truncated body: err = %v, want ErrBadSignature", err) + } + if err := Verify(header, pub, nil); !errors.Is(err, ErrBadSignature) { + t.Fatalf("empty body: err = %v, want ErrBadSignature", err) + } + + sig, err := base64.RawURLEncoding.DecodeString(strings.TrimPrefix(header, "ed25519=")) + if err != nil { + t.Fatalf("decode signature: %v", err) + } + for i := range sig { + tampered := bytes.Clone(sig) + tampered[i] ^= 0x01 + h := "ed25519=" + base64.RawURLEncoding.EncodeToString(tampered) + if err := Verify(h, pub, body); !errors.Is(err, ErrBadSignature) { + t.Fatalf("flipping signature byte %d: err = %v, want ErrBadSignature", i, err) + } + } +} + +// TestVerifyRejectsWrongKey checks that another ID's key cannot verify. +func TestVerifyRejectsWrongKey(t *testing.T) { + t.Parallel() + body := []byte("body") + header := Sign(vectorKey(t), body) + other, err := DeriveKey(vectorSecret(), otherID) + if err != nil { + t.Fatalf("DeriveKey: %v", err) + } + if err := Verify(header, PublicKeyString(other), body); !errors.Is(err, ErrBadSignature) { + t.Fatalf("err = %v, want ErrBadSignature", err) + } +} + +// TestVerifyRejectsMalformedHeaders covers every malformed header form. +func TestVerifyRejectsMalformedHeaders(t *testing.T) { + t.Parallel() + body := []byte(vectorBody) + raw := strings.TrimPrefix(vectorHeader, "ed25519=") + sig, err := base64.RawURLEncoding.DecodeString(raw) + if err != nil { + t.Fatalf("decode vector: %v", err) + } + cases := map[string]string{ + "empty": "", + "prefix only": "ed25519=", + "no separator": "ed25519", + "wrong algorithm": "rsa=" + raw, + "uppercase algorithm": "ED25519=" + raw, + "leading space": " " + vectorHeader, + "space after equals": "ed25519= " + raw, + "trailing space": vectorHeader + " ", + "bare signature": raw, + "not base64": "ed25519=!!!!", + "standard base64": "ed25519=" + base64.StdEncoding.EncodeToString(sig), + "padded": vectorHeader + "==", + "too short": "ed25519=" + raw[:len(raw)-4], + "too long": vectorHeader + "AAAA", + "one byte": "ed25519=AA", + "non-canonical tail": "ed25519=" + raw[:len(raw)-1] + "B", + "two signatures": vectorHeader + ",ed25519=" + raw, + } + for name, header := range cases { + t.Run(name, func(t *testing.T) { + err := Verify(header, vectorPublic, body) + if !errors.Is(err, ErrBadSignature) { + t.Fatalf("err = %v, want ErrBadSignature", err) + } + }) + } +} + +// TestVerifyRejectsMalformedKeys covers every malformed public key form. +func TestVerifyRejectsMalformedKeys(t *testing.T) { + t.Parallel() + body := []byte(vectorBody) + cases := map[string]string{ + "empty": "", + "short": vectorPublic[:42], + "long": vectorPublic + "AA", + "padded": vectorPublic + "=", + "not base64": "!!!" + vectorPublic[3:], + "standard": strings.ReplaceAll(vectorPublic, "_", "/"), + "non-canonical": vectorPublic[:42] + "t", + "whitespace": " " + vectorPublic, + } + for name, key := range cases { + t.Run(name, func(t *testing.T) { + err := Verify(vectorHeader, key, body) + if !errors.Is(err, ErrBadSignature) { + t.Fatalf("err = %v, want ErrBadSignature", err) + } + }) + } +} + +// TestKeyFingerprint checks the fingerprint form and its rejection of bad keys. +func TestKeyFingerprint(t *testing.T) { + t.Parallel() + fp := KeyFingerprint(vectorPublic) + if len(fp) != 64 || fp != strings.ToLower(fp) { + t.Fatalf("fingerprint %q is not 64 lowercase hex characters", fp) + } + if _, err := hex.DecodeString(fp); err != nil { + t.Fatalf("fingerprint is not hex: %v", err) + } + for _, bad := range []string{"", "short", vectorPublic + "=", vectorPublic[:42]} { + if got := KeyFingerprint(bad); got != "" { + t.Errorf("KeyFingerprint(%q) = %q, want empty", bad, got) + } + } +} + +// TestSignatureHeaderName pins the header name shared by both sides. +func TestSignatureHeaderName(t *testing.T) { + t.Parallel() + if SignatureHeader != "Gameplane-Telemetry-Signature" { + t.Fatalf("SignatureHeader = %q", SignatureHeader) + } +} diff --git a/telemetryschema/specs.md b/telemetryschema/specs.md index 89eb4ddf0..064361a1b 100644 --- a/telemetryschema/specs.md +++ b/telemetryschema/specs.md @@ -1,31 +1,130 @@ # telemetryschema — Specification -**Status:** skeleton (spec 022, filled in by T016) +**Status:** pre-v1 (spec 022) **Module / package:** `github.com/ValgulNecron/gameplane/telemetryschema` **Dependencies:** stdlib only (Go 1.26+) ## Purpose -Shared telemetry report contract used by `api` (reporter and preview) and `telemetry-receiver` (ingest), so both sides decode, validate and sign the same report shape. +Shared telemetry report contract used by `api` (reporter and preview) and `telemetry-receiver` (ingest). Both sides import this one package, so the categories the API sends and the receiver accepts cannot drift, and the preview an admin sees is built from the same types as the payload. ## Responsibilities -1. Define the report types and enumerations. -2. Decode and validate report bodies, mapping out-of-set values to `other`. -3. Hold the official module catalog. -4. Sign and verify reports. +1. Define the report types: the basic tier (`version`, `servers`, `templates`) and the optional extended tier (`ext`). +2. Hold every enumeration, the band functions and the version and Kubernetes-minor patterns. +3. Decode and validate report bodies strictly, folding out-of-set values to `other`. +4. Encode reports deterministically. +5. Hold the embedded official module catalog. +6. Derive signing keys, sign report bodies and verify signatures. -(Skeleton: the full list is written in task T016.) +## Non-goals / boundaries -## External interface +- Does **not** talk to the network, the filesystem (beyond the embedded catalog) or Kubernetes. All of it is pure and unit-testable. +- Does **not** enforce the 16 KiB body limit, the `sentAt` freshness window, install-ID claims, replay protection or rate limits. Those are the receiver's checks. +- Does **not** store the signing secret or the signing key. The API stores the secret and recomputes the key on every send. +- Does **not** decide what an install reports. The API collects the values and builds a `Report`. -See [`specs/022-default-telemetry-dashboard/contracts/report-schema.md`](../specs/022-default-telemetry-dashboard/contracts/report-schema.md). +## Directory & package layout + +``` +telemetryschema/ +├── doc.go # package comment +├── report.go # Report, Extended, Env, Games, Features; Encode +├── enums.go # enumerations, bands, VersionRE, K8sMinorRE, SanitizeEnum +├── decode.go # Decode, DecodeInfo, ErrInvalidPayload, ErrUnsupportedSchema +├── catalog.go # IsOfficial, Catalog (embeds catalog.txt) +├── catalog.txt # official module names, one per line (generated from the chart) +├── sign.go # NewSecret, DeriveKey, PublicKeyString, Sign, Verify, KeyFingerprint +├── *_test.go # unit tests +├── go.mod # module, stdlib-only, no requires +└── .testcoverage.yml # 90% coverage gate +``` + +## External interface / contracts + +The wire contract is [`specs/022-default-telemetry-dashboard/contracts/report-schema.md`](../specs/022-default-telemetry-dashboard/contracts/report-schema.md); the rules below are what this package enforces. + +### Types + +| Type | Fields | +|---|---| +| `Report` | `Version string`, `Servers int`, `Templates int`, `Ext *Extended` (nil on a basic-only report) | +| `Extended` | `Schema int`, `InstallID string`, `Env Env`, `Games Games`, `Features Features`, `Key string`, `SentAt time.Time` | +| `Env` | `K8s string`, `Distro string`, `Arch []string`, `Nodes string` | +| `Games` | `Official map[string]int`, `Custom int` | +| `Features` | `WakeOnConnect`, `Capture`, `Backups`, `SSO`, `AuditForwarding bool`; `Tunnels []string`; `Clusters`, `DB`, `Language string` | + +JSON tags are the camelCase names in the contract (`installId`, `wakeOnConnect`, `auditForwarding`, `sentAt`, and so on). + +### Enumerations + +| Name | Members | +|---|---| +| `Distros` | `k3s` `rke2` `k0s` `eks` `gke` `aks` `openshift` `microk8s` `minikube` `kind` `doks` `talos` `other` | +| `Arches` | `amd64` `arm64` `arm` `ppc64le` `s390x` `riscv64` `other` | +| `Tunnels` | `frp` `tailscale` `playit` | +| `DBs` | `sqlite` `postgres` | +| `Languages` | `en` | +| `NodeBands` | `1` `2-3` `4-10` `11-50` `51+` | +| `ClusterBands` | `1` `2-3` `4-10` `11+` | + +`SanitizeEnum(set, v)` returns `v` when it is in `set` and `other` otherwise. `K8sMinorRE` is `^1\.[0-9]{1,3}$`; any other `env.k8s` value becomes `other`. `VersionRE` is `^[A-Za-z0-9][A-Za-z0-9._+-]{0,31}$`. + +### Bands + +| Function | Input to band | +|---|---| +| `NodeBand(n)` | n ≤ 1 → `1`; 2–3 → `2-3`; 4–10 → `4-10`; 11–50 → `11-50`; over 50 → `51+` | +| `ClusterBand(n)` | n ≤ 1 → `1`; 2–3 → `2-3`; 4–10 → `4-10`; over 10 → `11+` | +| `FleetBands` | `0,1,2,5,10,25,50,100,250` (the `+Inf` bucket is implicit) | + +### Decode + +`Decode(body) (Report, DecodeInfo, error)` accepts exactly one JSON object and nothing after it except whitespace. + +- **Rejected** (the error wraps `ErrInvalidPayload`), at every nesting level: unknown keys, duplicate keys, `null` values, wrongly typed values, keys with the wrong case, and missing required keys. `version`, `servers` and `templates` are required; `ext` is optional; every `ext` field is required. +- **Range rules:** `servers`, `templates` and `games.custom` are at least 0; `games.official` counts are at least 1; `env.arch` is non-empty; `ext.schema` is 1; `ext.key` is unpadded base64url of exactly 32 bytes; `ext.sentAt` parses as RFC 3339 and is returned in UTC. +- **Folded, not rejected:** out-of-set enumeration values become `other`. `env.arch` and `features.tunnels` are returned sorted, de-duplicated after folding, and never nil. +- **Catalog:** `games.official` keys outside the embedded catalog add their count to `games.custom`; the returned `Official` map holds catalog names only. +- **Schema gate:** `ext.schema` above 1 returns `ErrUnsupportedSchema`, checked before the other `ext` rules. It wraps `ErrInvalidPayload`, so one `errors.Is` check covers both. +- **Install ID:** when `ext.installId` is not a lowercase UUIDv4, the rest of `ext` is validated, then `DecodeInfo.ExtDropped` is set and `Ext` is nil. The basic report stays valid. + +`Encode(Report)` is deterministic: struct field order is fixed, map keys and arrays are sorted, nil arrays and maps are written as `[]` and `{}`, and `sentAt` is written in UTC at second precision. `Decode(Encode(r))` returns `r` for a valid report. + +### Catalog + +`catalog.txt` lists the official module names, one per line, in the order of `charts/gameplane/values.yaml` → `defaultModuleSource.oci.modules`. `hack/check-telemetry-catalog.sh` (part of `make lint`) fails when the two differ. `IsOfficial(name)` is an exact, case-sensitive match; `Catalog()` returns a copy. + +### Signatures + +- `SignatureHeader` is `Gameplane-Telemetry-Signature`. It is required when the report has `ext` and absent otherwise. +- `NewSecret()` returns 32 random bytes (`SecretSize`). The API keeps it for the install's lifetime. +- `DeriveKey(secret, installID)` derives `seed = HKDF-SHA256(ikm = secret, salt = installID, info = "gameplane-telemetry-signing-v1", L = 32)` and returns `ed25519.NewKeyFromSeed(seed)`. The key is unique to the ID, so a new ID always means an unlinkable new key. +- `PublicKeyString(priv)` is the unpadded base64url public key carried in `ext.key`. +- `Sign(priv, body)` returns `ed25519=`. +- `Verify(header, publicKey, body)` returns nil, or an error wrapping `ErrBadSignature` for a missing or malformed header, a malformed key, or a signature that does not match. +- `KeyFingerprint(publicKey)` is the hex SHA-256 of the raw public key (the receiver's claim, `key_fp`), or `""` for a malformed key. + +### Compatibility + +| Install to receiver | Result | +|---|---| +| Old install (basic only) to a new receiver | Accepted, counted as basic. | +| New install with `ext` to a receiver released before this feature | 400. The install re-POSTs basic only and suppresses `ext` for that endpoint for 7 days. | +| `ext.schema` above what the receiver supports | 400 (`ErrUnsupportedSchema`). Same fallback as the row above. | +| ID already claimed by another key | 409. The install replaces its ID, re-signs and re-POSTs once. | +| Bad signature, stale send time or replay | 403. A failed attempt with normal backoff; no fallback and no ID rotation. | + +A module added to the chart catalog after a receiver was built counts as `custom` on that receiver until it is updated. A new enumeration member on an older receiver folds into `other`. ## Key invariants -- No free text in a report; every category is bounded. +- No field can hold free text: every string is matched against a pattern or an enumeration, or is the install ID, the public key or the send time. +- Every category is bounded: module names come only from the embedded catalog, and enumeration values only from their sets (or `other`). +- Player counts, names, namespaces, hostnames, addresses and custom module names cannot be represented. +- Both sides validate with the same code, so a report the API builds from this package always decodes on a receiver built from the same version. - Stdlib only; no network or filesystem access. ## Testing & coverage -Unit tests only. Coverage gate: 90% total, set in `.testcoverage.yml` and enforced by `make cover-go-check`. +Unit tests only (`decode_test.go`, `enums_test.go`, `catalog_test.go`, `sign_test.go`). They cover every reject case of the receiver's original decoder, every `ext` rule, the band boundaries, catalog membership, a fixed key-derivation vector, the sign and verify round trip, single-byte tampering, malformed headers and keys, and different IDs deriving different keys. Coverage gate: 90% total, set in `.testcoverage.yml` and enforced by `make cover-go-check`. From 5976abf02c3e19e91c51f7b664de5c127ba84f14 Mon Sep 17 00:00:00 2001 From: valgulnecron <39313199+ValgulNecron@users.noreply.github.com> Date: Wed, 7 Oct 2026 00:18:19 +0200 Subject: [PATCH 04/47] chore: list telemetryschema in docs and repo tooling Add the new module to the dependency doc, README component table, devcontainer module warm-up, CodeRabbit shared-package instructions and the auto-label area map (area: shared). Co-Authored-By: Claude Opus 5.5 Claude-Session: https://claude.ai/code/session_01S7krnvWjW1a6bW5doxiVHB Signed-off-by: valgulnecron <39313199+ValgulNecron@users.noreply.github.com> --- .coderabbit.yaml | 2 +- .devcontainer/post-create.sh | 2 +- README.md | 2 ++ docs/dependencies.md | 23 ++++++++++++++++++++--- hack/auto_label.py | 1 + 5 files changed, 25 insertions(+), 5 deletions(-) diff --git a/.coderabbit.yaml b/.coderabbit.yaml index 2768b7c42..09e72a9d7 100644 --- a/.coderabbit.yaml +++ b/.coderabbit.yaml @@ -261,7 +261,7 @@ reviews: - label: "area: specs" instructions: Apply when changes touch specs/ or spec.md files (specs/done_008-hardened-github-actions/, design contracts, decision records). - label: "area: shared" - instructions: Apply when changes touch shared Go packages (netguard/, gameaction/, gameproto/, svcutil/) used by operator, api, and agent. + instructions: Apply when changes touch shared Go packages (netguard/, gameaction/, gameproto/, svcutil/, telemetryschema/) used by operator, api, agent, and telemetry-receiver. - label: "area: optional-components" instructions: Apply when changes touch optional or sidecar components (sentinel/, capture-sidecar/, mcp-server/, tunnel/, audit-syslog-bridge/, telemetry-receiver/). - label: "breaking" diff --git a/.devcontainer/post-create.sh b/.devcontainer/post-create.sh index 2ca378ddf..f9b0f8b5f 100755 --- a/.devcontainer/post-create.sh +++ b/.devcontainer/post-create.sh @@ -76,7 +76,7 @@ log "fetching envtest binaries for K8s 1.36.2" # ---------- Go module cache warmup ---------- # Go modules from go.work. Derived from 'use' entries in go.work. # Keep in sync with go.work when adding/removing modules. -for m in agent api audit-syslog-bridge capture-sidecar gameaction gameproto mcp-server netguard operator sentinel svcutil telemetry-receiver test/e2e tunnel; do +for m in agent api audit-syslog-bridge capture-sidecar gameaction gameproto mcp-server netguard operator sentinel svcutil telemetry-receiver telemetryschema test/e2e tunnel; do log "go mod download ($m)" ( cd "$m" && go mod download ) done diff --git a/README.md b/README.md index 5f4a2c139..7c008093d 100644 --- a/README.md +++ b/README.md @@ -154,6 +154,7 @@ its own operator and storage; users and authorization stay central. See | `gameaction/` | Go | Security guard and command renderer for custom module admin actions. | | `netguard/` | Go | SSRF protection layer for outgoing mod downloads and OCI module fetches. | | `svcutil/` | Go | Shared HTTP server lifecycle and environment configuration utilities. | +| `telemetryschema/` | Go | Shared telemetry report contract (types, strict decoder, official module catalog, report signing) used by the API and `telemetry-receiver`. | | `audit-syslog-bridge/` | Go | HTTP-JSON to syslog relay [optional] for audit logging infrastructure. | | `telemetry-receiver/` | Go | Collector [optional] for anonymous daily usage reports. | | `mcp-server/` | Go | Strictly read-only Model Context Protocol server [optional] for AI tools. | @@ -190,6 +191,7 @@ Gameplane extends Kubernetes using custom resources under `gameplane.local/v1alp ├── gameaction/ # Console injection guard & action command renderer ├── netguard/ # SSRF dial-guard library ├── svcutil/ # Shared HTTP server & env utilities +├── telemetryschema/ # Shared telemetry report contract (types, decoder, signing) ├── audit-syslog-bridge/ # Optional syslog relay for audit logs ├── telemetry-receiver/ # Optional anonymous usage telemetry receiver ├── mcp-server/ # Optional read-only Model Context Protocol server diff --git a/docs/dependencies.md b/docs/dependencies.md index 6cb48f058..b399a399f 100644 --- a/docs/dependencies.md +++ b/docs/dependencies.md @@ -1,9 +1,9 @@ # Dependency report This is a component-by-component inventory of Gameplane's third-party -dependencies and why each one is there. It covers all 15 Go modules that -share `go.work` (`netguard`, `gameaction`, `gameproto`, `svcutil`, -`operator`, `api`, `agent`, `audit-syslog-bridge` [optional], +dependencies and why each one is there. It covers all 16 Go modules that +share `go.work` (`netguard`, `gameaction`, `gameproto`, `telemetryschema`, +`svcutil`, `operator`, `api`, `agent`, `audit-syslog-bridge` [optional], `telemetry-receiver` [optional], `sentinel` [optional], `capture-sidecar` [optional], `tunnel` [optional], `gp-module`, `mcp-server` [optional], `test/e2e`), the @@ -39,6 +39,7 @@ were added and verified on **2026-09-26**. | `netguard/` | Go | 0 (stdlib only) | Shared SSRF dial-guard used by the operator and agent | | `gameaction/` | Go | 0 (stdlib only) | Shared console-injection guard + command-template renderer used by the agent and API | | `gameproto/` | Go | 0 (stdlib only) | Shared Minecraft/Terraria handshake classifier used by sentinel | +| `telemetryschema/` | Go | 0 (stdlib only) | Shared telemetry report contract (types, strict decoder, official module catalog, report signing) used by the API reporter and the telemetry receiver | | `svcutil/` | Go | 0 (stdlib only) | Shared env-parsing + graceful-shutdown helpers (no active importers yet) | | `operator/` | Go | 19 | controller-runtime reconciler for the 8 CRDs; module OCI pull/verify, git/OCI fetch, restic-backup scheduling | | `api/` | Go | 17 | chi REST + WebSocket gateway: auth (local + OIDC), RBAC, K8s client, SQLite/Postgres persistence, notifications | @@ -103,6 +104,22 @@ Imported by: Also a local `replace` module (`replace github.com/ValgulNecron/gameplane/gameproto => ../gameproto` in `sentinel/go.mod`); same Dockerfile `COPY` requirement as netguard. +### telemetryschema + +`telemetryschema/go.mod` has **no `require` block at all** — it imports only the +Go standard library (`bytes`, `crypto/ed25519`, `crypto/hkdf`, `crypto/rand`, +`crypto/sha256`, `embed`, `encoding/base64`, `encoding/hex`, `encoding/json`, +`errors`, `fmt`, `io`, `math`, `regexp`, `slices`, `sort`, `strings`, `time`). It +is the shared telemetry report contract: the basic and extended report types, +the fixed category enumerations and band functions, the strict decoder, the +embedded official-module catalog, and Ed25519 report signing. + +Imported by (spec 022, in progress): +- `telemetry-receiver/` — to decode and validate reports (`Decode`) and to verify signatures (`Verify`). +- `api/` — to build, encode and sign the reporter's payload and the admin preview. + +Both importers use a local `replace` module (`replace github.com/ValgulNecron/gameplane/telemetryschema => ../telemetryschema`); the same Dockerfile `COPY` requirement as netguard applies. + ### svcutil `svcutil/go.mod` has **no `require` block at all** — stdlib only diff --git a/hack/auto_label.py b/hack/auto_label.py index ca68ad8d2..6aff61c12 100755 --- a/hack/auto_label.py +++ b/hack/auto_label.py @@ -62,6 +62,7 @@ "tunnel": "area: optional-components", "audit-syslog-bridge": "area: optional-components", "telemetry-receiver": "area: optional-components", + "telemetryschema": "area: shared", } AREA_BY_FILE = { From 1ab7ee6b010354ee45af79d887b032201b103b9e Mon Sep 17 00:00:00 2001 From: valgulnecron <39313199+ValgulNecron@users.noreply.github.com> Date: Wed, 7 Oct 2026 00:18:20 +0200 Subject: [PATCH 05/47] feat(api): telemetry install state, destination and collection Migration 015 adds telemetry_state and telemetry_notice_acks. Migrate tells fresh installs from upgrades and seeds consent (default vs legacy). Add destination resolution with an empty DefaultEndpoint gated by a separate CI job until OD-1 is ruled, the telemetry flags, and the basic plus extended collector with official-module and distribution detection (spec 022 T009, T018-T029). Three existing tests still assume no telemetry config row on a fresh store; the next commit updates them. Co-Authored-By: Claude Opus 5.5 Claude-Session: https://claude.ai/code/session_01S7krnvWjW1a6bW5doxiVHB Signed-off-by: valgulnecron <39313199+ValgulNecron@users.noreply.github.com> --- .github/workflows/ci.yaml | 15 + api/cmd/main.go | 47 +- api/go.mod | 7 + api/internal/db/db.go | 16 +- .../migrations/common/015_telemetry_state.sql | 30 + api/internal/db/telemetry.go | 322 ++++++++++ api/internal/db/telemetry_test.go | 549 ++++++++++++++++++ api/internal/db/users.go | 5 +- api/internal/telemetry/collect.go | 298 ++++++++++ api/internal/telemetry/collect_test.go | 490 ++++++++++++++++ api/internal/telemetry/destination.go | 80 +++ api/internal/telemetry/destination_test.go | 74 +++ api/internal/telemetry/distro.go | 54 ++ api/internal/telemetry/distro_test.go | 71 +++ api/internal/telemetry/official.go | 75 +++ api/internal/telemetry/official_test.go | 113 ++++ hack/check-telemetry-default.sh | 44 ++ 17 files changed, 2283 insertions(+), 7 deletions(-) create mode 100644 api/internal/db/migrations/common/015_telemetry_state.sql create mode 100644 api/internal/db/telemetry.go create mode 100644 api/internal/db/telemetry_test.go create mode 100644 api/internal/telemetry/collect.go create mode 100644 api/internal/telemetry/collect_test.go create mode 100644 api/internal/telemetry/destination.go create mode 100644 api/internal/telemetry/destination_test.go create mode 100644 api/internal/telemetry/distro.go create mode 100644 api/internal/telemetry/distro_test.go create mode 100644 api/internal/telemetry/official.go create mode 100644 api/internal/telemetry/official_test.go create mode 100755 hack/check-telemetry-default.sh diff --git a/.github/workflows/ci.yaml b/.github/workflows/ci.yaml index 64436208f..a20e100d1 100644 --- a/.github/workflows/ci.yaml +++ b/.github/workflows/ci.yaml @@ -533,6 +533,21 @@ jobs: version: v2.12.2 working-directory: ${{ matrix.module }} + # Merge gate for spec 022: the project default telemetry destination + # (DefaultEndpoint in api/internal/telemetry/destination.go) must be an https + # URL. Expected to fail until OPEN-DECISIONS OD-1 is ruled. Deliberately + # separate: not part of `make lint`, and not in the `report` job's needs. + telemetry-default-gate: + name: telemetry default gate + runs-on: ubuntu-latest + timeout-minutes: 5 + permissions: + contents: read + steps: + - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 + - name: check the default telemetry destination + run: sh hack/check-telemetry-default.sh + go: name: go (${{ matrix.module }} / ${{ matrix.arch }}) needs: [changes] diff --git a/api/cmd/main.go b/api/cmd/main.go index 1df6ab41d..4d998f085 100644 --- a/api/cmd/main.go +++ b/api/cmd/main.go @@ -154,6 +154,20 @@ func main() { } cfg.trustedProxies = validProxies + // Resolve where telemetry goes once, now: a bad default endpoint or an + // interval below one minute is a configuration error, not something to + // discover at the first report. + if cfg.telemetryInterval < time.Minute { + logger.Error("invalid --telemetry-interval (minimum 1m)", "value", cfg.telemetryInterval.String()) + os.Exit(1) + } + telemetryDest, err := telemetry.ResolveDestination(cfg.telemetryDisabled, cfg.telemetryEndpoint, cfg.telemetryBundled) + if err != nil { + logger.Error("resolve telemetry destination", "err", err) + os.Exit(1) + } + logger.Info("telemetry destination", "kind", telemetryDest.Kind, "host", telemetryDest.Host) + store, err := db.Open(ctx, cfg.dbDriver, cfg.dbDSN) if err != nil { logger.Error("open db", "err", err) @@ -387,9 +401,10 @@ func main() { ws.Mount(p, reg, cfg.agentCABundle, cfg.agentClientCert, cfg.agentClientKey, ws.AgentGatewayOptions{Namespace: cfg.namespace}) }) - // Opt-in, off-by-default anonymous usage telemetry. No-op unless an - // endpoint is configured AND the admin enabled the sendMetrics toggle. - go telemetry.New(store, k8s, cfg.telemetryEndpoint, cfg.telemetryAuth, Version, 24*time.Hour).Run(ctx) + // Anonymous usage telemetry. No-op when the resolved destination is + // disabled or none (an empty URL), or when the admin turned the + // sendMetrics toggle off. + go telemetry.New(store, k8s, telemetryDest.URL, cfg.telemetryAuth, Version, cfg.telemetryInterval).Run(ctx) // Opt-in audit-event retention. Off by default (0 days = keep forever); // when set, a daily sweep prunes events past the window so the table @@ -483,6 +498,10 @@ type config struct { telemetryEndpoint string telemetryAuth string + telemetryDisabled bool + telemetryBundled bool + telemetryInterval time.Duration + officialModuleSource string clusterOps bool clusterExternalAddress string updateChannel string @@ -538,7 +557,16 @@ func (c *config) bindFlags(fs *flag.FlagSet) { "Comma-separated IdP group(s) seeding the operator role") fs.StringVar(&c.oidcRoleMappingViewer, "oidc-role-mapping-viewer", envOr("GAMEPLANE_OIDC_ROLE_MAPPING_VIEWER", ""), "Comma-separated IdP group(s) seeding the viewer role") - fs.StringVar(&c.telemetryEndpoint, "telemetry-endpoint", envOr("GAMEPLANE_TELEMETRY_ENDPOINT", ""), "URL to POST anonymous usage metrics to (empty = telemetry off)") + fs.StringVar(&c.telemetryEndpoint, "telemetry-endpoint", envOr("GAMEPLANE_TELEMETRY_ENDPOINT", ""), "URL to POST anonymous usage metrics to (empty = the project default)") + fs.BoolVar(&c.telemetryDisabled, "telemetry-disabled", envOr("GAMEPLANE_TELEMETRY_DISABLED", "") == "true", + "hard-disable telemetry: nothing is ever sent, whatever the admin toggles say") + fs.DurationVar(&c.telemetryInterval, "telemetry-interval", envOrDuration("GAMEPLANE_TELEMETRY_INTERVAL", 24*time.Hour), + "spacing between telemetry reports (minimum 1m; shorter values are for testing only)") + fs.StringVar(&c.officialModuleSource, "official-module-source", envOr("GAMEPLANE_OFFICIAL_MODULE_SOURCE", ""), + "name of the official ModuleSource, so telemetry can tell official game modules from custom ones (empty = every module counts as custom)") + // Set only by the chart when it auto-wires the bundled in-cluster + // receiver, so it is read from the environment and has no flag. + c.telemetryBundled = envOr("GAMEPLANE_TELEMETRY_BUNDLED", "") == "true" // Like the audit webhook auth, the telemetry ingest token is a // credential and only comes from the environment (a mounted Secret), // never a flag. @@ -634,6 +662,17 @@ func envOrInt(key string, def int) int { return def } +// envOrDuration reads a duration env var ("24h", "30m"), falling back to def +// when unset or unparseable, like envOrInt. +func envOrDuration(key string, def time.Duration) time.Duration { + if v, ok := os.LookupEnv(key); ok { + if d, err := time.ParseDuration(v); err == nil { + return d + } + } + return def +} + // envOrInt64 reads a 64-bit integer env var, falling back to def when unset or // unparseable (a malformed value shouldn't crash startup — it degrades to // the safe default). diff --git a/api/go.mod b/api/go.mod index 7b6c3fffc..2f29c1648 100644 --- a/api/go.mod +++ b/api/go.mod @@ -22,6 +22,13 @@ require github.com/ValgulNecron/gameplane/gp-module v0.0.0 // `go build ./api/...`. replace github.com/ValgulNecron/gameplane/gp-module => ../gp-module +require github.com/ValgulNecron/gameplane/telemetryschema v0.0.0 + +// telemetryschema is an in-repo module (no published version); resolve it +// locally both inside the go.work workspace and for standalone +// `go build ./api/...`. +replace github.com/ValgulNecron/gameplane/telemetryschema => ../telemetryschema + require ( github.com/coder/websocket v1.8.15 github.com/coreos/go-oidc/v3 v3.21.0 diff --git a/api/internal/db/db.go b/api/internal/db/db.go index c92e61d65..999a7efe6 100644 --- a/api/internal/db/db.go +++ b/api/internal/db/db.go @@ -95,7 +95,9 @@ func (s *Store) LockUserManagement() (unlock func()) { // written per dialect), then the shared set (migrations/common/, 013 // onward, portable SQL that both drivers run unchanged). See // migrations/README.md. Each file runs in a single transaction; failures -// are fatal. +// are fatal. Afterwards it seeds the telemetry_state row once (see +// seedTelemetryState), which is why it first notes whether the database was +// fresh. func (s *Store) Migrate(ctx context.Context) error { if _, err := s.DB.ExecContext(ctx, `CREATE TABLE IF NOT EXISTS schema_migrations (version TEXT PRIMARY KEY, applied_at TEXT NOT NULL)`, @@ -103,6 +105,16 @@ func (s *Store) Migrate(ctx context.Context) error { return fmt.Errorf("create schema_migrations: %w", err) } + // A database whose schema_migrations is still empty is a fresh install; + // the telemetry consent seeding below depends on telling it apart from an + // upgrade. Counting here, before anything is applied, keeps the answer + // right whichever entrypoint (bootstrap-admin or serve) migrates first. + var recorded int + if err := s.DB.QueryRowContext(ctx, `SELECT COUNT(*) FROM schema_migrations`).Scan(&recorded); err != nil { + return fmt.Errorf("count schema_migrations: %w", err) + } + fresh := recorded == 0 + files, err := migrationFiles(migrations, s.Driver) if err != nil { return err @@ -124,7 +136,7 @@ func (s *Store) Migrate(ctx context.Context) error { return fmt.Errorf("migration %s: %w", f.name, err) } } - return nil + return s.seedTelemetryState(ctx, fresh) } // Migration directories inside the embedded FS. legacyMigrationDirs maps a diff --git a/api/internal/db/migrations/common/015_telemetry_state.sql b/api/internal/db/migrations/common/015_telemetry_state.sql new file mode 100644 index 000000000..420302b79 --- /dev/null +++ b/api/internal/db/migrations/common/015_telemetry_state.sql @@ -0,0 +1,30 @@ +-- Telemetry install state (spec 022). One singleton row holds the consent +-- source, the extended-tier install ID, the report schedule and the signing +-- secret. Timestamps are RFC 3339 UTC text bound from Go, so there is no +-- database-side clock and the file runs unchanged on SQLite and PostgreSQL. +-- The row is seeded by Store.Migrate in Go, because seeding has to read the +-- existing JSON value of config key telemetry, which portable SQL cannot do. +CREATE TABLE telemetry_state ( + id TEXT PRIMARY KEY, + consent_source TEXT NOT NULL, + install_id TEXT, + notice_shown_at TEXT, + next_due_at TEXT, + last_attempt_at TEXT, + last_success_at TEXT, + last_outcome TEXT NOT NULL DEFAULT 'never', + consecutive_failures INTEGER NOT NULL DEFAULT 0, + ext_unsupported_until TEXT, + ext_unsupported_endpoint TEXT, + signing_secret TEXT, + last_id_rotation_at TEXT +); + +-- One row per admin who dismissed the consent notice. user_id is the users.id +-- value as text. Rows are deleted in Go when the user is removed, because the +-- shipped SQLite DSN runs with foreign keys off. +CREATE TABLE telemetry_notice_acks ( + user_id TEXT PRIMARY KEY, + acked_at TEXT NOT NULL, + action TEXT NOT NULL +); diff --git a/api/internal/db/telemetry.go b/api/internal/db/telemetry.go new file mode 100644 index 000000000..1e1aab546 --- /dev/null +++ b/api/internal/db/telemetry.go @@ -0,0 +1,322 @@ +package db + +import ( + "context" + "crypto/rand" + "database/sql" + "encoding/base64" + "encoding/json" + "errors" + "fmt" + "strconv" +) + +// telemetrySingletonID is the primary key of the one telemetry_state row. +const telemetrySingletonID = "singleton" + +// Consent sources recorded in telemetry_state.consent_source. +const ( + // TelemetryConsentDefault marks a fresh install seeded with the project + // default (basic and extended on, reports gated on the notice). + TelemetryConsentDefault = "default" + // TelemetryConsentLegacy marks an install that existed before the + // extended tier; its saved choice is kept and extended stays off. + TelemetryConsentLegacy = "legacy" + // TelemetryConsentAdmin marks an install whose admin made an explicit + // choice. + TelemetryConsentAdmin = "admin" +) + +// TelemetryState is the persisted telemetry machine state. Timestamp fields +// hold RFC 3339 UTC text, and the empty string stands for SQL NULL. The +// signing secret is deliberately not a field: it is reachable only through +// EnsureSigningSecret, so no handler can serialise it by accident. +type TelemetryState struct { + ConsentSource string + InstallID string + NoticeShownAt string + NextDueAt string + LastAttemptAt string + LastSuccessAt string + LastOutcome string + ConsecutiveFailures int + ExtUnsupportedUntil string + ExtUnsupportedEndpoint string + LastIDRotationAt string +} + +// seedTelemetryState inserts the singleton telemetry_state row once and, only +// when this call inserted it, applies the consent seeding. fresh reports that +// schema_migrations held no rows when Migrate started. Running it again, for +// example bootstrap-admin followed by serve, finds the row and changes +// nothing, so a fresh install never flips to legacy. +func (s *Store) seedTelemetryState(ctx context.Context, fresh bool) error { + source := TelemetryConsentLegacy + if fresh { + source = TelemetryConsentDefault + } + tx, err := s.DB.BeginTx(ctx, nil) + if err != nil { + return fmt.Errorf("seed telemetry state: begin: %w", err) + } + defer func() { _ = tx.Rollback() }() + + res, err := tx.ExecContext(ctx, + `INSERT INTO telemetry_state(id, consent_source) VALUES (?, ?) ON CONFLICT (id) DO NOTHING`, + telemetrySingletonID, source) + if err != nil { + return fmt.Errorf("seed telemetry state: insert: %w", err) + } + inserted, err := res.RowsAffected() + if err != nil { + return fmt.Errorf("seed telemetry state: rows affected: %w", err) + } + if inserted == 0 { + return nil + } + + if fresh { + if err := upsertConfigTx(ctx, tx, "telemetry", `{"sendMetrics":true,"extended":true}`); err != nil { + return fmt.Errorf("seed telemetry state: %w", err) + } + } else { + raw, ok, err := ConfigValueTx(ctx, tx, "telemetry") + if err != nil { + return fmt.Errorf("seed telemetry state: read config: %w", err) + } + if ok { + if rewritten, changed := withExtendedOff(raw); changed { + if err := upsertConfigTx(ctx, tx, "telemetry", rewritten); err != nil { + return fmt.Errorf("seed telemetry state: %w", err) + } + } + } + } + if err := tx.Commit(); err != nil { + return fmt.Errorf("seed telemetry state: commit: %w", err) + } + return nil +} + +// withExtendedOff returns raw, a JSON object, with "extended":false added. +// A value that is not a JSON object is left alone (changed is false) rather +// than overwritten. +func withExtendedOff(raw string) (string, bool) { + var m map[string]json.RawMessage + if err := json.Unmarshal([]byte(raw), &m); err != nil || m == nil { + return raw, false + } + m["extended"] = json.RawMessage("false") + out, err := json.Marshal(m) + if err != nil { + return raw, false + } + return string(out), true +} + +// upsertConfigTx writes one config row inside tx, stamping updated_at in the +// layout the other config writers use. +func upsertConfigTx(ctx context.Context, tx *sql.Tx, key, value string) error { + if _, err := tx.ExecContext(ctx, + `INSERT INTO config(key, value, updated_at) VALUES (?, ?, ?) + ON CONFLICT (key) DO UPDATE SET value = excluded.value, updated_at = excluded.updated_at`, + key, value, NowTimestamp()); err != nil { + return fmt.Errorf("write config %q: %w", key, err) + } + return nil +} + +// GetTelemetryState reads the singleton row. NULL columns come back as the +// empty string. A missing row (Migrate not run) wraps sql.ErrNoRows. +func (s *Store) GetTelemetryState(ctx context.Context) (TelemetryState, error) { + var st TelemetryState + err := s.DB.QueryRowContext(ctx, + `SELECT consent_source, COALESCE(install_id, ''), COALESCE(notice_shown_at, ''), + COALESCE(next_due_at, ''), COALESCE(last_attempt_at, ''), COALESCE(last_success_at, ''), + last_outcome, consecutive_failures, COALESCE(ext_unsupported_until, ''), + COALESCE(ext_unsupported_endpoint, ''), COALESCE(last_id_rotation_at, '') + FROM telemetry_state WHERE id = ?`, telemetrySingletonID).Scan( + &st.ConsentSource, &st.InstallID, &st.NoticeShownAt, + &st.NextDueAt, &st.LastAttemptAt, &st.LastSuccessAt, + &st.LastOutcome, &st.ConsecutiveFailures, &st.ExtUnsupportedUntil, + &st.ExtUnsupportedEndpoint, &st.LastIDRotationAt) + if err != nil { + return TelemetryState{}, fmt.Errorf("get telemetry state: %w", err) + } + return st, nil +} + +// UpdateTelemetryState writes every field of st back to the singleton row, +// storing empty strings as NULL. It never touches the signing secret. +func (s *Store) UpdateTelemetryState(ctx context.Context, st TelemetryState) error { + res, err := s.DB.ExecContext(ctx, + `UPDATE telemetry_state SET + consent_source = ?, install_id = NULLIF(?, ''), notice_shown_at = NULLIF(?, ''), + next_due_at = NULLIF(?, ''), last_attempt_at = NULLIF(?, ''), last_success_at = NULLIF(?, ''), + last_outcome = ?, consecutive_failures = ?, ext_unsupported_until = NULLIF(?, ''), + ext_unsupported_endpoint = NULLIF(?, ''), last_id_rotation_at = NULLIF(?, '') + WHERE id = ?`, + st.ConsentSource, st.InstallID, st.NoticeShownAt, + st.NextDueAt, st.LastAttemptAt, st.LastSuccessAt, + st.LastOutcome, st.ConsecutiveFailures, st.ExtUnsupportedUntil, + st.ExtUnsupportedEndpoint, st.LastIDRotationAt, + telemetrySingletonID) + if err != nil { + return fmt.Errorf("update telemetry state: %w", err) + } + return requireOneRow(res, "update telemetry state") +} + +// ClaimTelemetryDue claims the report slot whose next_due_at equals expected +// by moving it to next and stamping last_attempt_at with now (all RFC 3339 +// UTC text). It reports true only when this call changed the row, so of +// several replicas racing for one slot exactly one proceeds. A NULL +// next_due_at never matches, because the gate-open step sets the first slot. +func (s *Store) ClaimTelemetryDue(ctx context.Context, expected, next, now string) (bool, error) { + res, err := s.DB.ExecContext(ctx, + `UPDATE telemetry_state SET next_due_at = ?, last_attempt_at = ? + WHERE id = ? AND next_due_at = ?`, + next, now, telemetrySingletonID, expected) + if err != nil { + return false, fmt.Errorf("claim telemetry slot: %w", err) + } + n, err := res.RowsAffected() + if err != nil { + return false, fmt.Errorf("claim telemetry slot: rows affected: %w", err) + } + return n == 1, nil +} + +// SetInstallID stores the extended-tier install ID. +func (s *Store) SetInstallID(ctx context.Context, id string) error { + res, err := s.DB.ExecContext(ctx, + `UPDATE telemetry_state SET install_id = ? WHERE id = ?`, id, telemetrySingletonID) + if err != nil { + return fmt.Errorf("set install id: %w", err) + } + return requireOneRow(res, "set install id") +} + +// ClearInstallID removes the install ID (the extended tier went off). +func (s *Store) ClearInstallID(ctx context.Context) error { + res, err := s.DB.ExecContext(ctx, + `UPDATE telemetry_state SET install_id = NULL WHERE id = ?`, telemetrySingletonID) + if err != nil { + return fmt.Errorf("clear install id: %w", err) + } + return requireOneRow(res, "clear install id") +} + +// EnsureSigningSecret returns the install's 32-byte signing secret, creating +// it on first use. Concurrent first calls agree on one value because the +// write only lands while the column is NULL and the loser re-reads. The +// secret is for api/internal/telemetry key derivation only: it is never part +// of TelemetryState, an HTTP response, a log line or an audit event. +func (s *Store) EnsureSigningSecret(ctx context.Context) ([]byte, error) { + if secret, err := s.readSigningSecret(ctx); err != nil || secret != nil { + return secret, err + } + fresh := make([]byte, 32) + if _, err := rand.Read(fresh); err != nil { + return nil, fmt.Errorf("generate signing secret: %w", err) + } + if _, err := s.DB.ExecContext(ctx, + `UPDATE telemetry_state SET signing_secret = ? WHERE id = ? AND signing_secret IS NULL`, + base64.StdEncoding.EncodeToString(fresh), telemetrySingletonID); err != nil { + return nil, fmt.Errorf("store signing secret: %w", err) + } + secret, err := s.readSigningSecret(ctx) + if err != nil { + return nil, err + } + if secret == nil { + return nil, errors.New("store signing secret: no telemetry_state row") + } + return secret, nil +} + +// readSigningSecret returns the stored secret, or nil when none is set yet or +// the row is absent. +func (s *Store) readSigningSecret(ctx context.Context) ([]byte, error) { + var enc sql.NullString + err := s.DB.QueryRowContext(ctx, + `SELECT signing_secret FROM telemetry_state WHERE id = ?`, telemetrySingletonID).Scan(&enc) + if errors.Is(err, sql.ErrNoRows) { + return nil, nil + } + if err != nil { + return nil, fmt.Errorf("read signing secret: %w", err) + } + if !enc.Valid || enc.String == "" { + return nil, nil + } + secret, err := base64.StdEncoding.DecodeString(enc.String) + if err != nil { + return nil, fmt.Errorf("decode signing secret: %w", err) + } + return secret, nil +} + +// MarkNoticeShown records when the consent notice was first rendered. The +// value is set once: later calls leave the first timestamp in place. +func (s *Store) MarkNoticeShown(ctx context.Context, now string) error { + if _, err := s.DB.ExecContext(ctx, + `UPDATE telemetry_state SET notice_shown_at = ? WHERE id = ? AND notice_shown_at IS NULL`, + now, telemetrySingletonID); err != nil { + return fmt.Errorf("mark notice shown: %w", err) + } + return nil +} + +// InsertNoticeAck records that userID dismissed the notice with action (keep, +// extended-off or all-off) at ackedAt (RFC 3339 UTC). The first dismissal stands; repeats are ignored. +func (s *Store) InsertNoticeAck(ctx context.Context, userID int64, action string, ackedAt string) error { + if _, err := s.DB.ExecContext(ctx, + `INSERT INTO telemetry_notice_acks(user_id, acked_at, action) VALUES (?, ?, ?) + ON CONFLICT (user_id) DO NOTHING`, + strconv.FormatInt(userID, 10), ackedAt, action); err != nil { + return fmt.Errorf("insert notice ack: %w", err) + } + return nil +} + +// HasNoticeAck reports whether userID has dismissed the notice. +func (s *Store) HasNoticeAck(ctx context.Context, userID int64) (bool, error) { + var one int + err := s.DB.QueryRowContext(ctx, + `SELECT 1 FROM telemetry_notice_acks WHERE user_id = ?`, strconv.FormatInt(userID, 10)).Scan(&one) + if errors.Is(err, sql.ErrNoRows) { + return false, nil + } + if err != nil { + return false, fmt.Errorf("has notice ack: %w", err) + } + return true, nil +} + +// DeleteNoticeAcksForUser removes a user's notice ack. ex is the open +// transaction of the account removal, or nil to run on the store directly. +// The telemetry_notice_acks table has no foreign key, so removal is explicit. +func (s *Store) DeleteNoticeAcksForUser(ctx context.Context, ex Execer, userID int64) error { + if ex == nil { + ex = s.DB + } + if _, err := ex.ExecContext(ctx, + `DELETE FROM telemetry_notice_acks WHERE user_id = ?`, strconv.FormatInt(userID, 10)); err != nil { + return fmt.Errorf("delete notice acks: %w", err) + } + return nil +} + +// requireOneRow fails when an UPDATE of the singleton matched no row, which +// means Migrate has not seeded telemetry_state. +func requireOneRow(res sql.Result, op string) error { + n, err := res.RowsAffected() + if err != nil { + return fmt.Errorf("%s: rows affected: %w", op, err) + } + if n != 1 { + return fmt.Errorf("%s: %w", op, sql.ErrNoRows) + } + return nil +} diff --git a/api/internal/db/telemetry_test.go b/api/internal/db/telemetry_test.go new file mode 100644 index 000000000..06a380743 --- /dev/null +++ b/api/internal/db/telemetry_test.go @@ -0,0 +1,549 @@ +package db + +import ( + "database/sql" + "encoding/base64" + "encoding/json" + "errors" + "sync" + "testing" +) + +// telemetryConfig returns the raw telemetry config value and whether the key +// exists. +func telemetryConfig(t *testing.T, s *Store) (string, bool) { + t.Helper() + v, ok, err := s.ConfigValue(t.Context(), "telemetry") + if err != nil { + t.Fatalf("read telemetry config: %v", err) + } + return v, ok +} + +// existingInstallStore returns a migrated store rewound to the state of an +// install that ran before migration 015: no telemetry tables, 015 unrecorded, +// and telemetryValue (when non-empty) saved as config key telemetry. The next +// Migrate sees recorded migrations, so it treats the database as existing. +func existingInstallStore(t *testing.T, telemetryValue string) *Store { + t.Helper() + s := newRBACStore(t) + ctx := t.Context() + for _, stmt := range []string{ + `DROP TABLE telemetry_state`, + `DROP TABLE telemetry_notice_acks`, + `DELETE FROM schema_migrations WHERE version = '015_telemetry_state.sql'`, + `DELETE FROM config WHERE key = 'telemetry'`, + } { + if _, err := s.DB.ExecContext(ctx, stmt); err != nil { + t.Fatalf("%s: %v", stmt, err) + } + } + if telemetryValue != "" { + if _, err := s.DB.ExecContext(ctx, + `INSERT INTO config(key, value, updated_at) VALUES ('telemetry', ?, ?)`, + telemetryValue, "2026-01-01 00:00:00"); err != nil { + t.Fatalf("seed telemetry config: %v", err) + } + } + if err := s.Migrate(ctx); err != nil { + t.Fatalf("migrate existing install: %v", err) + } + return s +} + +func TestMigrate_FreshInstallSeedsTelemetryDefault(t *testing.T) { + s := newRBACStore(t) + st, err := s.GetTelemetryState(t.Context()) + if err != nil { + t.Fatalf("get state: %v", err) + } + if st.ConsentSource != TelemetryConsentDefault { + t.Errorf("consent source = %q, want default", st.ConsentSource) + } + if st.LastOutcome != "never" || st.ConsecutiveFailures != 0 { + t.Errorf("outcome/failures = %q/%d, want never/0", st.LastOutcome, st.ConsecutiveFailures) + } + if st.InstallID != "" || st.NoticeShownAt != "" || st.NextDueAt != "" { + t.Errorf("a fresh seed must leave id, notice and schedule empty, got %+v", st) + } + v, ok := telemetryConfig(t, s) + if !ok || v != `{"sendMetrics":true,"extended":true}` { + t.Errorf("config telemetry = %q (present=%v), want both tiers on", v, ok) + } +} + +// bootstrap-admin migrates before the first serve; the second Migrate must +// not turn a fresh install into a legacy one or undo an admin's choice. +func TestMigrate_TwiceKeepsFreshInstallDefault(t *testing.T) { + s := newRBACStore(t) + ctx := t.Context() + if err := s.Migrate(ctx); err != nil { + t.Fatalf("second migrate: %v", err) + } + st, err := s.GetTelemetryState(ctx) + if err != nil { + t.Fatalf("get state: %v", err) + } + if st.ConsentSource != TelemetryConsentDefault { + t.Fatalf("consent source after a second migrate = %q, want default", st.ConsentSource) + } + if v, _ := telemetryConfig(t, s); v != `{"sendMetrics":true,"extended":true}` { + t.Fatalf("config after a second migrate = %q", v) + } + + // An admin choice made between the two runs survives a later Migrate. + if _, err := s.DB.ExecContext(ctx, + `UPDATE config SET value = '{"sendMetrics":false,"extended":false}' WHERE key = 'telemetry'`); err != nil { + t.Fatalf("admin save: %v", err) + } + if err := s.Migrate(ctx); err != nil { + t.Fatalf("third migrate: %v", err) + } + if v, _ := telemetryConfig(t, s); v != `{"sendMetrics":false,"extended":false}` { + t.Fatalf("admin choice overwritten: %q", v) + } +} + +func TestMigrate_ExistingInstallWithSendMetricsIsLegacy(t *testing.T) { + s := existingInstallStore(t, `{"sendMetrics":true}`) + st, err := s.GetTelemetryState(t.Context()) + if err != nil { + t.Fatalf("get state: %v", err) + } + if st.ConsentSource != TelemetryConsentLegacy { + t.Fatalf("consent source = %q, want legacy", st.ConsentSource) + } + v, ok := telemetryConfig(t, s) + if !ok { + t.Fatal("the saved telemetry config must be kept") + } + var got map[string]bool + if err := json.Unmarshal([]byte(v), &got); err != nil { + t.Fatalf("config %q is not a JSON object of booleans: %v", v, err) + } + if len(got) != 2 || !got["sendMetrics"] || got["extended"] { + t.Fatalf("config = %v, want sendMetrics kept true and extended false", got) + } +} + +func TestMigrate_ExistingInstallWithoutTelemetryRowStaysOff(t *testing.T) { + s := existingInstallStore(t, "") + st, err := s.GetTelemetryState(t.Context()) + if err != nil { + t.Fatalf("get state: %v", err) + } + if st.ConsentSource != TelemetryConsentLegacy { + t.Fatalf("consent source = %q, want legacy", st.ConsentSource) + } + if v, ok := telemetryConfig(t, s); ok { + t.Fatalf("no telemetry config row may be created for a legacy install, got %q", v) + } +} + +func TestMigrate_ExistingInstallLeavesUnusableConfigAlone(t *testing.T) { + for _, raw := range []string{`{bad`, `null`, `[1]`} { + s := existingInstallStore(t, raw) + if v, _ := telemetryConfig(t, s); v != raw { + t.Errorf("config %q was rewritten to %q", raw, v) + } + st, err := s.GetTelemetryState(t.Context()) + if err != nil || st.ConsentSource != TelemetryConsentLegacy { + t.Errorf("config %q: state = %+v, err = %v, want a legacy row", raw, st, err) + } + } +} + +func TestMigrate_ExistingInstallTwiceDoesNotRewriteAgain(t *testing.T) { + s := existingInstallStore(t, `{"sendMetrics":true}`) + ctx := t.Context() + // An admin turns the extended tier on after the upgrade. + if _, err := s.DB.ExecContext(ctx, + `UPDATE config SET value = '{"sendMetrics":true,"extended":true}' WHERE key = 'telemetry'`); err != nil { + t.Fatalf("admin save: %v", err) + } + if err := s.Migrate(ctx); err != nil { + t.Fatalf("migrate again: %v", err) + } + if v, _ := telemetryConfig(t, s); v != `{"sendMetrics":true,"extended":true}` { + t.Fatalf("a later migrate rewrote the admin's config: %q", v) + } +} + +func TestTelemetryState_UpdateRoundTripAndNulls(t *testing.T) { + s := newRBACStore(t) + ctx := t.Context() + want := TelemetryState{ + ConsentSource: TelemetryConsentAdmin, + InstallID: "3f1c2a9e-8b4d-4e57-9a61-0c2d7e5b9f10", + NoticeShownAt: "2026-10-06T09:00:00Z", + NextDueAt: "2026-10-07T09:05:00Z", + LastAttemptAt: "2026-10-06T09:05:00Z", + LastSuccessAt: "2026-10-06T09:05:01Z", + LastOutcome: "ok", + ConsecutiveFailures: 3, + ExtUnsupportedUntil: "2026-10-13T09:05:00Z", + ExtUnsupportedEndpoint: "https://telemetry.example/ingest", + LastIDRotationAt: "2026-10-05T00:00:00Z", + } + if err := s.UpdateTelemetryState(ctx, want); err != nil { + t.Fatalf("update: %v", err) + } + got, err := s.GetTelemetryState(ctx) + if err != nil { + t.Fatalf("get: %v", err) + } + if got != want { + t.Fatalf("round trip:\n got %+v\nwant %+v", got, want) + } + + // Empty strings are stored as NULL, not as empty text. + cleared := TelemetryState{ConsentSource: TelemetryConsentAdmin, LastOutcome: "never"} + if err := s.UpdateTelemetryState(ctx, cleared); err != nil { + t.Fatalf("update cleared: %v", err) + } + var nulls int + if err := s.DB.QueryRowContext(ctx, + `SELECT COUNT(*) FROM telemetry_state + WHERE install_id IS NULL AND notice_shown_at IS NULL AND next_due_at IS NULL + AND last_attempt_at IS NULL AND last_success_at IS NULL AND ext_unsupported_until IS NULL + AND ext_unsupported_endpoint IS NULL AND last_id_rotation_at IS NULL`).Scan(&nulls); err != nil { + t.Fatalf("count nulls: %v", err) + } + if nulls != 1 { + t.Fatal("empty fields must be stored as NULL") + } +} + +func TestTelemetryState_UpdateKeepsSigningSecret(t *testing.T) { + s := newRBACStore(t) + ctx := t.Context() + secret, err := s.EnsureSigningSecret(ctx) + if err != nil { + t.Fatalf("ensure secret: %v", err) + } + if err := s.UpdateTelemetryState(ctx, TelemetryState{ConsentSource: TelemetryConsentAdmin, LastOutcome: "ok"}); err != nil { + t.Fatalf("update: %v", err) + } + again, err := s.EnsureSigningSecret(ctx) + if err != nil { + t.Fatalf("ensure again: %v", err) + } + if string(again) != string(secret) { + t.Fatal("UpdateTelemetryState must not change the signing secret") + } +} + +func TestClaimTelemetryDue_MovesSlotOnce(t *testing.T) { + s := newRBACStore(t) + ctx := t.Context() + const due, next, now = "2026-10-06T10:00:00Z", "2026-10-07T10:03:00Z", "2026-10-06T10:00:05Z" + if err := s.UpdateTelemetryState(ctx, TelemetryState{ + ConsentSource: TelemetryConsentAdmin, LastOutcome: "never", NextDueAt: due, + }); err != nil { + t.Fatalf("seed schedule: %v", err) + } + + if won, err := s.ClaimTelemetryDue(ctx, "2026-01-01T00:00:00Z", next, now); err != nil || won { + t.Fatalf("claim with a stale slot = %v, %v; want false, nil", won, err) + } + if won, err := s.ClaimTelemetryDue(ctx, due, next, now); err != nil || !won { + t.Fatalf("claim of the due slot = %v, %v; want true, nil", won, err) + } + st, err := s.GetTelemetryState(ctx) + if err != nil { + t.Fatalf("get: %v", err) + } + if st.NextDueAt != next || st.LastAttemptAt != now { + t.Fatalf("after the claim next/attempt = %q/%q, want %q/%q", st.NextDueAt, st.LastAttemptAt, next, now) + } + if won, err := s.ClaimTelemetryDue(ctx, due, next, now); err != nil || won { + t.Fatalf("second claim of the same slot = %v, %v; want false, nil", won, err) + } +} + +func TestClaimTelemetryDue_NullSlotNeverMatches(t *testing.T) { + s := newRBACStore(t) + if won, err := s.ClaimTelemetryDue(t.Context(), "", "2026-10-07T00:00:00Z", "2026-10-06T00:00:00Z"); err != nil || won { + t.Fatalf("claim while the gate is closed = %v, %v; want false, nil", won, err) + } +} + +func TestClaimTelemetryDue_ConcurrentCallersOneWins(t *testing.T) { + s := newRBACStore(t) + ctx := t.Context() + const due = "2026-10-06T10:00:00Z" + if err := s.UpdateTelemetryState(ctx, TelemetryState{ + ConsentSource: TelemetryConsentAdmin, LastOutcome: "never", NextDueAt: due, + }); err != nil { + t.Fatalf("seed schedule: %v", err) + } + + const callers = 8 + var ( + wg sync.WaitGroup + mu sync.Mutex + wins int + errs []error + ) + start := make(chan struct{}) + for range callers { + wg.Add(1) + go func() { + defer wg.Done() + <-start + won, err := s.ClaimTelemetryDue(ctx, due, "2026-10-07T10:00:00Z", "2026-10-06T10:00:01Z") + mu.Lock() + defer mu.Unlock() + if err != nil { + errs = append(errs, err) + } + if won { + wins++ + } + }() + } + close(start) + wg.Wait() + if len(errs) != 0 { + t.Fatalf("claim errors: %v", errs) + } + if wins != 1 { + t.Fatalf("%d concurrent claims won, want exactly 1", wins) + } +} + +func TestInstallID_SetAndClear(t *testing.T) { + s := newRBACStore(t) + ctx := t.Context() + const id = "3f1c2a9e-8b4d-4e57-9a61-0c2d7e5b9f10" + if err := s.SetInstallID(ctx, id); err != nil { + t.Fatalf("set: %v", err) + } + if st, _ := s.GetTelemetryState(ctx); st.InstallID != id { + t.Fatalf("install id = %q, want %q", st.InstallID, id) + } + if err := s.ClearInstallID(ctx); err != nil { + t.Fatalf("clear: %v", err) + } + if st, _ := s.GetTelemetryState(ctx); st.InstallID != "" { + t.Fatalf("install id after clear = %q, want empty", st.InstallID) + } +} + +func TestEnsureSigningSecret_CreatedOnceAndStable(t *testing.T) { + s := newRBACStore(t) + ctx := t.Context() + first, err := s.EnsureSigningSecret(ctx) + if err != nil { + t.Fatalf("ensure: %v", err) + } + if len(first) != 32 { + t.Fatalf("secret length = %d, want 32", len(first)) + } + second, err := s.EnsureSigningSecret(ctx) + if err != nil { + t.Fatalf("ensure again: %v", err) + } + if string(first) != string(second) { + t.Fatal("the secret changed between calls") + } + // Stored as base64 text, and the same value after ID changes. + var enc string + if err := s.DB.QueryRowContext(ctx, `SELECT signing_secret FROM telemetry_state`).Scan(&enc); err != nil { + t.Fatalf("read column: %v", err) + } + if raw, err := base64.StdEncoding.DecodeString(enc); err != nil || string(raw) != string(first) { + t.Fatalf("stored secret %q does not decode to the returned secret (err=%v)", enc, err) + } + if err := s.SetInstallID(ctx, "3f1c2a9e-8b4d-4e57-9a61-0c2d7e5b9f10"); err != nil { + t.Fatalf("set id: %v", err) + } + if err := s.ClearInstallID(ctx); err != nil { + t.Fatalf("clear id: %v", err) + } + third, err := s.EnsureSigningSecret(ctx) + if err != nil || string(third) != string(first) { + t.Fatalf("the secret must survive ID changes, got err=%v", err) + } +} + +func TestEnsureSigningSecret_ConcurrentFirstCallsAgree(t *testing.T) { + s := newRBACStore(t) + ctx := t.Context() + const callers = 6 + results := make([][]byte, callers) + var wg sync.WaitGroup + for i := range callers { + wg.Add(1) + go func() { + defer wg.Done() + secret, err := s.EnsureSigningSecret(ctx) + if err != nil { + t.Errorf("ensure: %v", err) + return + } + results[i] = secret + }() + } + wg.Wait() + for i := 1; i < callers; i++ { + if string(results[i]) != string(results[0]) { + t.Fatalf("caller %d got a different secret", i) + } + } +} + +func TestEnsureSigningSecret_Errors(t *testing.T) { + ctx := t.Context() + + s := newRBACStore(t) + if _, err := s.DB.ExecContext(ctx, `DELETE FROM telemetry_state`); err != nil { + t.Fatalf("delete row: %v", err) + } + if _, err := s.EnsureSigningSecret(ctx); err == nil { + t.Error("want an error when there is no telemetry_state row to hold the secret") + } + + s = newRBACStore(t) + if _, err := s.DB.ExecContext(ctx, `UPDATE telemetry_state SET signing_secret = '!!not base64!!'`); err != nil { + t.Fatalf("corrupt secret: %v", err) + } + if _, err := s.EnsureSigningSecret(ctx); err == nil { + t.Error("want an error for a stored secret that is not base64") + } +} + +func TestMarkNoticeShown_SetsOnce(t *testing.T) { + s := newRBACStore(t) + ctx := t.Context() + if err := s.MarkNoticeShown(ctx, "2026-10-06T09:00:00Z"); err != nil { + t.Fatalf("first mark: %v", err) + } + if err := s.MarkNoticeShown(ctx, "2026-10-06T12:00:00Z"); err != nil { + t.Fatalf("second mark: %v", err) + } + st, err := s.GetTelemetryState(ctx) + if err != nil { + t.Fatalf("get: %v", err) + } + if st.NoticeShownAt != "2026-10-06T09:00:00Z" { + t.Fatalf("notice_shown_at = %q, want the first timestamp", st.NoticeShownAt) + } +} + +func TestNoticeAck_Lifecycle(t *testing.T) { + s := newRBACStore(t) + ctx := t.Context() + admin := insertUser(t, s, "notice-admin", "admin") + other := insertUser(t, s, "notice-other", "admin") + + if has, err := s.HasNoticeAck(ctx, admin); err != nil || has { + t.Fatalf("before any ack: has=%v err=%v", has, err) + } + if err := s.InsertNoticeAck(ctx, admin, "keep", "2026-10-06T09:00:00Z"); err != nil { + t.Fatalf("insert: %v", err) + } + if has, err := s.HasNoticeAck(ctx, admin); err != nil || !has { + t.Fatalf("after ack: has=%v err=%v", has, err) + } + if has, _ := s.HasNoticeAck(ctx, other); has { + t.Fatal("an ack must belong to one user only") + } + + // The first dismissal stands. + if err := s.InsertNoticeAck(ctx, admin, "all-off", "2026-10-06T10:00:00Z"); err != nil { + t.Fatalf("repeat insert: %v", err) + } + var count int + if err := s.DB.QueryRowContext(ctx, `SELECT COUNT(*) FROM telemetry_notice_acks WHERE action = 'keep'`).Scan(&count); err != nil || count != 1 { + t.Fatalf("the first action must be kept: count=%d err=%v", count, err) + } + + if err := s.DeleteNoticeAcksForUser(ctx, nil, admin); err != nil { + t.Fatalf("delete: %v", err) + } + if has, _ := s.HasNoticeAck(ctx, admin); has { + t.Fatal("ack still present after DeleteNoticeAcksForUser") + } +} + +func TestDeleteUser_RemovesNoticeAck(t *testing.T) { + s := newRBACStore(t) + ctx := t.Context() + gone := insertUser(t, s, "ack-removed", "admin") + kept := insertUser(t, s, "ack-kept", "admin") + for _, id := range []int64{gone, kept} { + if err := s.InsertNoticeAck(ctx, id, "keep", "2026-10-06T09:00:00Z"); err != nil { + t.Fatalf("insert ack: %v", err) + } + } + if err := s.DeleteUser(ctx, gone); err != nil { + t.Fatalf("delete user: %v", err) + } + if has, _ := s.HasNoticeAck(ctx, gone); has { + t.Error("the removed user's ack must be deleted with the account") + } + if has, _ := s.HasNoticeAck(ctx, kept); !has { + t.Error("another user's ack must survive") + } +} + +func TestTelemetryState_MissingRowIsAnError(t *testing.T) { + s := newRBACStore(t) + ctx := t.Context() + if _, err := s.DB.ExecContext(ctx, `DELETE FROM telemetry_state`); err != nil { + t.Fatalf("delete row: %v", err) + } + if _, err := s.GetTelemetryState(ctx); !errors.Is(err, sql.ErrNoRows) { + t.Errorf("Get on a missing row = %v, want sql.ErrNoRows", err) + } + if err := s.UpdateTelemetryState(ctx, TelemetryState{ConsentSource: "admin", LastOutcome: "never"}); !errors.Is(err, sql.ErrNoRows) { + t.Errorf("Update on a missing row = %v, want sql.ErrNoRows", err) + } + if err := s.SetInstallID(ctx, "x"); !errors.Is(err, sql.ErrNoRows) { + t.Errorf("SetInstallID on a missing row = %v, want sql.ErrNoRows", err) + } + if err := s.ClearInstallID(ctx); !errors.Is(err, sql.ErrNoRows) { + t.Errorf("ClearInstallID on a missing row = %v, want sql.ErrNoRows", err) + } +} + +func TestTelemetryHelpers_ClosedDatabaseErrors(t *testing.T) { + s := newRBACStore(t) + ctx := t.Context() + if err := s.Close(); err != nil { + t.Fatalf("close: %v", err) + } + checks := map[string]func() error{ + "migrate": func() error { return s.Migrate(ctx) }, + "seed": func() error { return s.seedTelemetryState(ctx, true) }, + "get": func() error { _, err := s.GetTelemetryState(ctx); return err }, + "update": func() error { return s.UpdateTelemetryState(ctx, TelemetryState{}) }, + "claim": func() error { _, err := s.ClaimTelemetryDue(ctx, "a", "b", "c"); return err }, + "setID": func() error { return s.SetInstallID(ctx, "x") }, + "clearID": func() error { return s.ClearInstallID(ctx) }, + "secret": func() error { _, err := s.EnsureSigningSecret(ctx); return err }, + "markNotice": func() error { return s.MarkNoticeShown(ctx, "t") }, + "insertAck": func() error { return s.InsertNoticeAck(ctx, 1, "keep", "t") }, + "hasAck": func() error { _, err := s.HasNoticeAck(ctx, 1); return err }, + "deleteAcks": func() error { return s.DeleteNoticeAcksForUser(ctx, nil, 1) }, + "deleteUser": func() error { return s.DeleteUser(ctx, 1) }, + } + for name, fn := range checks { + if err := fn(); err == nil { + t.Errorf("%s: want an error from a closed database", name) + } + } +} + +func TestWithExtendedOff(t *testing.T) { + got, changed := withExtendedOff(`{"sendMetrics":true,"extra":1}`) + if !changed || got != `{"extended":false,"extra":1,"sendMetrics":true}` { + t.Errorf("object: got %q changed=%v", got, changed) + } + for _, raw := range []string{``, `{bad`, `null`, `"str"`} { + if out, changed := withExtendedOff(raw); changed || out != raw { + t.Errorf("%q: got %q changed=%v, want it left alone", raw, out, changed) + } + } +} diff --git a/api/internal/db/users.go b/api/internal/db/users.go index f8a7d998d..c68ee742a 100644 --- a/api/internal/db/users.go +++ b/api/internal/db/users.go @@ -8,7 +8,7 @@ import ( // DeleteUser removes a user account and every row tied to it, in one // transaction: the account's SSO links, preferences, sessions, API tokens and -// role bindings are deleted, and the share links it created are revoked +// role bindings and telemetry notice ack are deleted, and the share links it created are revoked // (revocation, not a delete, keeps their audit trail). The rows are removed // explicitly rather than left to ON DELETE CASCADE, because the shipped // SQLite DSN runs with foreign keys off. Deleting an unknown id is a no-op. @@ -38,6 +38,9 @@ func (s *Store) DeleteUser(ctx context.Context, userID int64) error { if err := s.DeleteUserBindings(ctx, tx, userID); err != nil { return fmt.Errorf("delete user: %w", err) } + if err := s.DeleteNoticeAcksForUser(ctx, tx, userID); err != nil { + return fmt.Errorf("delete user: %w", err) + } if _, err := tx.ExecContext(ctx, `DELETE FROM users WHERE id = ?`, userID); err != nil { return fmt.Errorf("delete user: users row: %w", err) } diff --git a/api/internal/telemetry/collect.go b/api/internal/telemetry/collect.go new file mode 100644 index 000000000..9ff4b886a --- /dev/null +++ b/api/internal/telemetry/collect.go @@ -0,0 +1,298 @@ +package telemetry + +import ( + "context" + "encoding/json" + "errors" + "fmt" + "regexp" + "sort" + "time" + + corev1 "k8s.io/api/core/v1" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + "k8s.io/apimachinery/pkg/apis/meta/v1/unstructured" + + "github.com/ValgulNecron/gameplane/api/internal/db" + "github.com/ValgulNecron/gameplane/api/internal/kube" + "github.com/ValgulNecron/gameplane/telemetryschema" +) + +// extSchema is the extended-part schema version this build emits. +const extSchema = 1 + +// other is the value every enumerated field falls back to. +const other = "other" + +// nonDigits matches a run of non-digits, which is stripped from the +// discovery minor version ("31+" on EKS and GKE becomes "31"). +var nonDigits = regexp.MustCompile(`[^0-9]+`) + +// Flags are the install settings Collect reads. They come from API flags +// and environment, which live in package main, so the caller copies the +// relevant values in. +type Flags struct { + // CaptureEnabled mirrors --capture-enabled. + CaptureEnabled bool + // OIDCConfigured is true when the Helm OIDC issuer flag is set. + OIDCConfigured bool + // AuditWebhook is true when --audit-webhook-url is set. + AuditWebhook bool + // AuditS3 is true when both the S3 audit endpoint and bucket are set. + AuditS3 bool + // DBDriver is --db-driver, "sqlite" or "postgres". + DBDriver string + // OfficialModuleSource is --official-module-source; empty means every + // module counts as custom. + OfficialModuleSource string +} + +// Deps is what Collect reads from. Kube and Store are required. +type Deps struct { + Kube *kube.Client + Store *db.Store + Flags Flags + Version string + // Extended asks for the extended part (the gate's extendedOn). + Extended bool + // Now returns the current time; nil means time.Now. Tests set it. + Now func() time.Time +} + +// Collect builds the report the reporter would send now, and the same value +// backs the admin preview. The basic counts cover the local cluster only. +// When deps.Extended is set it also fills the extended part from the sources +// in research R14. A field whose source can't be read yields 0, false or +// "other" rather than an error; the only errors are a missing install ID and +// a failure to derive the signing key, because the part can't be signed +// without them. +func Collect(ctx context.Context, deps Deps) (telemetryschema.Report, error) { + servers := listItems(ctx, deps, "servers") + templates := listItems(ctx, deps, "templates") + rep := telemetryschema.Report{ + Version: deps.Version, + Servers: len(servers), + Templates: len(templates), + } + if !deps.Extended { + return rep, nil + } + ext, err := collectExtended(ctx, deps, servers, templates) + if err != nil { + return telemetryschema.Report{}, err + } + rep.Ext = ext + return rep, nil +} + +// listItems lists every object of one kube.GVRs kind across namespaces. A +// failure yields no items, so the count is 0. +func listItems(ctx context.Context, deps Deps, kind string) []unstructured.Unstructured { + gvr, ok := kube.GVRs[kind] + if !ok || deps.Kube == nil || deps.Kube.Dynamic == nil { + return nil + } + list, err := deps.Kube.Dynamic.Resource(gvr).List(ctx, metav1.ListOptions{}) + if err != nil { + return nil + } + return list.Items +} + +// collectExtended builds the extended part and signs it with the key derived +// from the install ID and the stored secret. +func collectExtended(ctx context.Context, deps Deps, servers, templates []unstructured.Unstructured) (*telemetryschema.Extended, error) { + now := time.Now + if deps.Now != nil { + now = deps.Now + } + state, err := deps.Store.GetTelemetryState(ctx) + if err != nil { + return nil, fmt.Errorf("collect telemetry: %w", err) + } + if state.InstallID == "" { + return nil, errors.New("collect telemetry: extended report needs an install id") + } + secret, err := deps.Store.EnsureSigningSecret(ctx) + if err != nil { + return nil, fmt.Errorf("collect telemetry: %w", err) + } + priv, err := telemetryschema.DeriveKey(secret, state.InstallID) + if err != nil { + return nil, fmt.Errorf("collect telemetry: derive key: %w", err) + } + + nodes, nodesOK := listNodes(ctx, deps) + gitVersion, minor := serverVersion(deps) + nodeBand := other + if nodesOK && len(nodes) > 0 { + nodeBand = telemetryschema.NodeBand(len(nodes)) + } + + return &telemetryschema.Extended{ + Schema: extSchema, + InstallID: state.InstallID, + Env: telemetryschema.Env{ + K8s: minor, + Distro: detectDistro(gitVersion, nodes), + Arch: nodeArches(nodes), + Nodes: nodeBand, + }, + Games: countGames(ctx, deps, servers, templates), + Features: collectFeatures(ctx, deps, servers), + Key: telemetryschema.PublicKeyString(priv), + SentAt: now().UTC().Truncate(time.Second), + }, nil +} + +// listNodes lists the local cluster's nodes. ok is false when the call failed. +func listNodes(ctx context.Context, deps Deps) ([]corev1.Node, bool) { + if deps.Kube == nil || deps.Kube.Typed == nil { + return nil, false + } + list, err := deps.Kube.Typed.CoreV1().Nodes().List(ctx, metav1.ListOptions{}) + if err != nil { + return nil, false + } + return list.Items, true +} + +// serverVersion returns the API server's gitVersion (for distro detection) +// and its minor version as "1.N", or "other" when it can't be read or doesn't +// fit the 1.N pattern. Non-digit suffixes such as the "+" of "31+" are +// dropped. +func serverVersion(deps Deps) (gitVersion, minor string) { + if deps.Kube == nil || deps.Kube.Typed == nil { + return "", other + } + v, err := deps.Kube.Typed.Discovery().ServerVersion() + if err != nil || v == nil { + return "", other + } + minor = v.Major + "." + nonDigits.ReplaceAllString(v.Minor, "") + if !telemetryschema.K8sMinorRE.MatchString(minor) { + minor = other + } + return v.GitVersion, minor +} + +// nodeArches returns the sorted, unique CPU architectures of nodes. Values +// outside the enumeration become "other", and a cluster with no readable +// node reports ["other"] because the wire schema rejects an empty list. +func nodeArches(nodes []corev1.Node) []string { + seen := map[string]bool{} + for i := range nodes { + a := nodes[i].Status.NodeInfo.Architecture + if a == "" { + continue + } + seen[telemetryschema.SanitizeEnum(telemetryschema.Arches, a)] = true + } + if len(seen) == 0 { + return []string{other} + } + return sortedKeys(seen) +} + +// sortedKeys returns the keys of set in ascending order. +func sortedKeys(set map[string]bool) []string { + out := make([]string, 0, len(set)) + for k := range set { + out = append(out, k) + } + sort.Strings(out) + return out +} + +// countGames counts GameServers per official module and the rest as custom. +// A server whose template can't be found, or whose template isn't official +// (see officialModule), counts as custom. Only catalog names ever appear as +// keys. +func countGames(ctx context.Context, deps Deps, servers, templates []unstructured.Unstructured) telemetryschema.Games { + labelsByTemplate := make(map[string]map[string]string, len(templates)) + for i := range templates { + labelsByTemplate[templates[i].GetName()] = templates[i].GetLabels() + } + listed := map[string]bool{} + if deps.Kube != nil { + listed = listedModules(ctx, deps.Kube.Dynamic, deps.Flags.OfficialModuleSource) + } + games := telemetryschema.Games{Official: map[string]int{}} + for i := range servers { + tmplName, _, _ := unstructured.NestedString(servers[i].Object, "spec", "templateRef", "name") + m := officialModule(labelsByTemplate[tmplName], deps.Flags.OfficialModuleSource, listed) + if m == "" { + games.Custom++ + continue + } + games.Official[m]++ + } + return games +} + +// collectFeatures reads the feature flags and bands from the local cluster +// and the API's own configuration. +func collectFeatures(ctx context.Context, deps Deps, servers []unstructured.Unstructured) telemetryschema.Features { + tunnels := map[string]bool{} + wake := false + for i := range servers { + if on, _, _ := unstructured.NestedBool(servers[i].Object, "spec", "idle", "wakeOnConnect"); on { + wake = true + } + if on, _, _ := unstructured.NestedBool(servers[i].Object, "spec", "tunnel", "enabled"); on { + p, _, _ := unstructured.NestedString(servers[i].Object, "spec", "tunnel", "provider") + tunnels[telemetryschema.SanitizeEnum(telemetryschema.Tunnels, p)] = true + } + } + return telemetryschema.Features{ + WakeOnConnect: wake, + Tunnels: sortedKeys(tunnels), + Capture: deps.Flags.CaptureEnabled, + Backups: len(listItems(ctx, deps, "schedules")) > 0, + SSO: deps.Flags.OIDCConfigured || hasSSOProvider(ctx, deps.Store), + AuditForwarding: deps.Flags.AuditWebhook || deps.Flags.AuditS3, + Clusters: telemetryschema.ClusterBand(1 + countClusters(ctx, deps)), + DB: telemetryschema.SanitizeEnum(telemetryschema.DBs, deps.Flags.DBDriver), + Language: "en", + } +} + +// countClusters counts registered Cluster CRs, 0 when they can't be listed. +func countClusters(ctx context.Context, deps Deps) int { + if deps.Kube == nil || deps.Kube.Dynamic == nil { + return 0 + } + list, err := deps.Kube.Dynamic.Resource(kube.GVRCluster).List(ctx, metav1.ListOptions{}) + if err != nil { + return 0 + } + return len(list.Items) +} + +// hasSSOProvider reports whether the admin-managed "auth" config holds an +// enabled oidc, google or github provider. A missing, unreadable or +// malformed row is false. +func hasSSOProvider(ctx context.Context, store *db.Store) bool { + if store == nil { + return false + } + raw, ok, err := store.ConfigValue(ctx, "auth") + if err != nil || !ok { + return false + } + var cfg struct { + Providers []struct { + Kind string `json:"kind"` + Enabled bool `json:"enabled"` + } `json:"providers"` + } + if json.Unmarshal([]byte(raw), &cfg) != nil { + return false + } + for _, p := range cfg.Providers { + if p.Enabled && (p.Kind == "oidc" || p.Kind == "google" || p.Kind == "github") { + return true + } + } + return false +} diff --git a/api/internal/telemetry/collect_test.go b/api/internal/telemetry/collect_test.go new file mode 100644 index 000000000..20688b2de --- /dev/null +++ b/api/internal/telemetry/collect_test.go @@ -0,0 +1,490 @@ +package telemetry + +import ( + "context" + "errors" + "reflect" + "strings" + "testing" + "time" + + corev1 "k8s.io/api/core/v1" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + "k8s.io/apimachinery/pkg/apis/meta/v1/unstructured" + "k8s.io/apimachinery/pkg/runtime" + "k8s.io/apimachinery/pkg/runtime/schema" + "k8s.io/apimachinery/pkg/version" + fakediscovery "k8s.io/client-go/discovery/fake" + dynamicfake "k8s.io/client-go/dynamic/fake" + "k8s.io/client-go/kubernetes/fake" + clienttesting "k8s.io/client-go/testing" + + "github.com/ValgulNecron/gameplane/api/internal/db" + "github.com/ValgulNecron/gameplane/api/internal/kube" + "github.com/ValgulNecron/gameplane/telemetryschema" +) + +const testInstallID = "3f1c2a9e-8b4d-4e57-9a61-0c2d7e5b9f10" + +// collectOpts describes the fake cluster collectKubeClients builds. +type collectOpts struct { + nodes []corev1.Node + serverInfo *version.Info + dynamic []runtime.Object + // nodesFail, versionFail and dynamicFail make the named calls error: + // dynamicFail keys are fake verbs ("list", "get"). + nodesFail bool + versionFail bool + dynamicFail map[string]bool +} + +// collectKubeClients builds a kube.Client over the typed and dynamic fakes. +func collectKubeClients(t *testing.T, o collectOpts) *kube.Client { + t.Helper() + cs := fake.NewSimpleClientset() + for i := range o.nodes { + if _, err := cs.CoreV1().Nodes().Create(context.Background(), &o.nodes[i], metav1.CreateOptions{}); err != nil { + t.Fatalf("create node: %v", err) + } + } + if o.serverInfo != nil { + cs.Discovery().(*fakediscovery.FakeDiscovery).FakedServerVersion = o.serverInfo + } + boom := func(clienttesting.Action) (bool, runtime.Object, error) { + return true, nil, errors.New("boom") + } + if o.nodesFail { + cs.PrependReactor("list", "nodes", boom) + } + if o.versionFail { + cs.PrependReactor("get", "version", boom) + } + dyn := dynamicfake.NewSimpleDynamicClientWithCustomListKinds(runtime.NewScheme(), + map[schema.GroupVersionResource]string{ + kube.GVRs["servers"]: "GameServerList", + kube.GVRs["templates"]: "GameTemplateList", + kube.GVRs["schedules"]: "BackupScheduleList", + kube.GVRCluster: "ClusterList", + kube.GVRModuleSource: "ModuleSourceList", + }, o.dynamic...) + for verb := range o.dynamicFail { + dyn.PrependReactor(verb, "*", boom) + } + return &kube.Client{Typed: cs, Dynamic: dyn} +} + +// collectStore returns a migrated in-memory store. withID also stores the +// test install ID. +func collectStore(t *testing.T, withID bool) *db.Store { + t.Helper() + s, err := db.Open(t.Context(), "sqlite", ":memory:") + if err != nil { + t.Fatalf("open: %v", err) + } + t.Cleanup(func() { _ = s.Close() }) + if err := s.Migrate(t.Context()); err != nil { + t.Fatalf("migrate: %v", err) + } + if withID { + if err := s.SetInstallID(t.Context(), testInstallID); err != nil { + t.Fatalf("set install id: %v", err) + } + } + return s +} + +func putConfig(t *testing.T, s *db.Store, key, value string) { + t.Helper() + if _, err := s.DB.ExecContext(t.Context(), + `INSERT INTO config(key, value, updated_at) VALUES (?, ?, ?) + ON CONFLICT (key) DO UPDATE SET value = excluded.value, updated_at = excluded.updated_at`, + key, value, "2026-01-01 00:00:00"); err != nil { + t.Fatalf("put config %q: %v", key, err) + } +} + +func gpObject(kind, name, ns string) *unstructured.Unstructured { + o := &unstructured.Unstructured{} + o.SetAPIVersion("gameplane.local/v1alpha1") + o.SetKind(kind) + o.SetName(name) + if ns != "" { + o.SetNamespace(ns) + } + return o +} + +// serverObj builds a GameServer using template tmpl. wake sets +// spec.idle.wakeOnConnect; tunnelProvider (when non-empty) sets spec.tunnel +// with the given enabled value. +func serverObj(name, tmpl string, wake bool, tunnelProvider string, tunnelEnabled bool) *unstructured.Unstructured { + o := gpObject("GameServer", name, "gameplane-games") + _ = unstructured.SetNestedField(o.Object, tmpl, "spec", "templateRef", "name") + if wake { + _ = unstructured.SetNestedField(o.Object, true, "spec", "idle", "wakeOnConnect") + } + if tunnelProvider != "" { + _ = unstructured.SetNestedField(o.Object, tunnelEnabled, "spec", "tunnel", "enabled") + _ = unstructured.SetNestedField(o.Object, tunnelProvider, "spec", "tunnel", "provider") + } + return o +} + +// templateObj builds a cluster-scoped GameTemplate with the given labels. +func templateObj(name string, labels map[string]string) *unstructured.Unstructured { + o := gpObject("GameTemplate", name, "") + if labels != nil { + o.SetLabels(labels) + } + return o +} + +// moduleTemplate builds a GameTemplate stamped the way the operator stamps a +// module-managed one. +func moduleTemplate(name, source, module string) *unstructured.Unstructured { + return templateObj(name, map[string]string{ + labelManagedBy: managedByModule, + labelModuleSource: source, + labelModuleName: module, + }) +} + +func moduleSourceObj(name string, ociModules, statusModules []string) *unstructured.Unstructured { + o := gpObject("ModuleSource", name, "") + names := func(in []string) []any { + out := make([]any, 0, len(in)) + for _, n := range in { + out = append(out, map[string]any{"name": n}) + } + return out + } + if ociModules != nil { + _ = unstructured.SetNestedSlice(o.Object, names(ociModules), "spec", "oci", "modules") + } + if statusModules != nil { + _ = unstructured.SetNestedSlice(o.Object, names(statusModules), "status", "modules") + } + return o +} + +func fixedNow() time.Time { return time.Date(2026, 10, 6, 9, 12, 44, 123456789, time.UTC) } + +func TestCollect_BasicCountsLocalClusterOnly(t *testing.T) { + k := collectKubeClients(t, collectOpts{dynamic: []runtime.Object{ + serverObj("a", "t1", false, "", false), + serverObj("b", "t1", false, "", false), + templateObj("t1", nil), + }}) + rep, err := Collect(t.Context(), Deps{Kube: k, Store: collectStore(t, true), Version: "v1.2.3"}) + if err != nil { + t.Fatalf("collect: %v", err) + } + if rep.Version != "v1.2.3" || rep.Servers != 2 || rep.Templates != 1 { + t.Fatalf("basic report = %+v, want {v1.2.3 2 1}", rep) + } + if rep.Ext != nil { + t.Fatal("the extended part must be absent when Extended is false") + } +} + +func TestCollect_BasicListFailureIsZeroNotError(t *testing.T) { + k := collectKubeClients(t, collectOpts{ + dynamic: []runtime.Object{serverObj("a", "t1", false, "", false)}, + dynamicFail: map[string]bool{"list": true}, + }) + rep, err := Collect(t.Context(), Deps{Kube: k, Store: collectStore(t, false), Version: "v1"}) + if err != nil { + t.Fatalf("collect: %v", err) + } + if rep.Servers != 0 || rep.Templates != 0 { + t.Fatalf("failed lists must count as 0, got %+v", rep) + } +} + +func TestCollect_NilClients(t *testing.T) { + for name, k := range map[string]*kube.Client{"nil client": nil, "empty client": {}} { + rep, err := Collect(t.Context(), Deps{Kube: k, Store: collectStore(t, true), Version: "v1", Extended: true, Now: fixedNow}) + if err != nil { + t.Fatalf("%s: collect: %v", name, err) + } + if rep.Servers != 0 || rep.Templates != 0 || rep.Ext == nil { + t.Fatalf("%s: report = %+v", name, rep) + } + if rep.Ext.Env.K8s != "other" || rep.Ext.Env.Nodes != "other" || !reflect.DeepEqual(rep.Ext.Env.Arch, []string{"other"}) { + t.Errorf("%s: env = %+v, want other fallbacks", name, rep.Ext.Env) + } + } +} + +func TestCollect_ExtendedFullReport(t *testing.T) { + const official = "default" + nodes := []corev1.Node{ + testNode("n1", nil, "", "Ubuntu 24.04", "amd64"), + testNode("n2", nil, "", "Ubuntu 24.04", "arm64"), + } + k := collectKubeClients(t, collectOpts{ + nodes: nodes, + serverInfo: &version.Info{Major: "1", Minor: "31+", GitVersion: "v1.31.2+k3s1"}, + dynamic: []runtime.Object{ + moduleSourceObj(official, []string{"minecraft-java", "terraria", "minecraft-java-evil"}, nil), + moduleTemplate("mc", official, "minecraft-java"), + moduleTemplate("tr", official, "terraria"), + moduleTemplate("upload-mc", "uploads", "minecraft-java"), + moduleTemplate("lookalike", official, "minecraft-java-evil"), + templateObj("manual", nil), + serverObj("s1", "mc", true, "", false), + serverObj("s2", "mc", false, "", false), + serverObj("s3", "tr", false, "playit", true), + serverObj("s4", "manual", false, "", false), + serverObj("s5", "ghost", false, "", false), // template does not exist + serverObj("s6", "mc", false, "frp", false), // tunnel configured but off + serverObj("s7", "upload-mc", false, "", false), + serverObj("s8", "lookalike", false, "", false), + gpObject("BackupSchedule", "nightly", "gameplane-games"), + gpObject("Cluster", "remote-a", ""), + gpObject("Cluster", "remote-b", ""), + }, + }) + store := collectStore(t, true) + putConfig(t, store, "auth", `{"providers":[{"name":"local","kind":"local","enabled":true},{"name":"g","kind":"google","enabled":true}]}`) + secret, err := store.EnsureSigningSecret(t.Context()) + if err != nil { + t.Fatalf("secret: %v", err) + } + priv, err := telemetryschema.DeriveKey(secret, testInstallID) + if err != nil { + t.Fatalf("derive: %v", err) + } + + rep, err := Collect(t.Context(), Deps{ + Kube: k, Store: store, Version: "v0.3.0", Extended: true, Now: fixedNow, + Flags: Flags{ + CaptureEnabled: true, AuditS3: true, DBDriver: "sqlite", OfficialModuleSource: official, + }, + }) + if err != nil { + t.Fatalf("collect: %v", err) + } + if rep.Version != "v0.3.0" || rep.Servers != 8 || rep.Templates != 5 { + t.Fatalf("basic part = %+v, want {v0.3.0 8 5}", rep) + } + ext := rep.Ext + if ext == nil { + t.Fatal("missing extended part") + } + if ext.Schema != 1 || ext.InstallID != testInstallID { + t.Errorf("schema/id = %d/%q", ext.Schema, ext.InstallID) + } + wantEnv := telemetryschema.Env{K8s: "1.31", Distro: "k3s", Arch: []string{"amd64", "arm64"}, Nodes: telemetryschema.NodeBand(2)} + if !reflect.DeepEqual(ext.Env, wantEnv) { + t.Errorf("env = %+v, want %+v", ext.Env, wantEnv) + } + wantGames := telemetryschema.Games{Official: map[string]int{"minecraft-java": 3, "terraria": 1}, Custom: 4} + if !reflect.DeepEqual(ext.Games, wantGames) { + t.Errorf("games = %+v, want %+v", ext.Games, wantGames) + } + wantFeatures := telemetryschema.Features{ + WakeOnConnect: true, Tunnels: []string{"playit"}, Capture: true, Backups: true, SSO: true, + AuditForwarding: true, Clusters: telemetryschema.ClusterBand(3), DB: "sqlite", Language: "en", + } + if !reflect.DeepEqual(ext.Features, wantFeatures) { + t.Errorf("features = %+v, want %+v", ext.Features, wantFeatures) + } + if want := telemetryschema.PublicKeyString(priv); ext.Key != want { + t.Errorf("key = %q, want the key derived from the secret and install ID (%q)", ext.Key, want) + } + if want := time.Date(2026, 10, 6, 9, 12, 44, 0, time.UTC); !ext.SentAt.Equal(want) { + t.Errorf("sentAt = %v, want %v (UTC, whole seconds)", ext.SentAt, want) + } +} + +func TestCollect_ExtendedFieldsFallBackWhenSourcesFail(t *testing.T) { + k := collectKubeClients(t, collectOpts{ + nodesFail: true, + versionFail: true, + dynamicFail: map[string]bool{"list": true, "get": true}, + }) + rep, err := Collect(t.Context(), Deps{ + Kube: k, Store: collectStore(t, true), Version: "v1", Extended: true, Now: fixedNow, + Flags: Flags{DBDriver: "mysql", OfficialModuleSource: "default"}, + }) + if err != nil { + t.Fatalf("a failing source must not fail the report: %v", err) + } + ext := rep.Ext + if ext == nil { + t.Fatal("missing extended part") + } + wantEnv := telemetryschema.Env{K8s: "other", Distro: "other", Arch: []string{"other"}, Nodes: "other"} + if !reflect.DeepEqual(ext.Env, wantEnv) { + t.Errorf("env = %+v, want %+v", ext.Env, wantEnv) + } + if len(ext.Games.Official) != 0 || ext.Games.Custom != 0 { + t.Errorf("games = %+v, want empty", ext.Games) + } + f := ext.Features + if f.WakeOnConnect || f.Backups || f.SSO || f.Capture || f.AuditForwarding || len(f.Tunnels) != 0 { + t.Errorf("features = %+v, want everything off", f) + } + if f.Clusters != telemetryschema.ClusterBand(1) || f.DB != "other" || f.Language != "en" { + t.Errorf("features = %+v, want cluster band of 1, db other, language en", f) + } +} + +func TestCollect_ExtendedErrors(t *testing.T) { + ctx := t.Context() + deps := func(s *db.Store) Deps { + return Deps{Kube: collectKubeClients(t, collectOpts{}), Store: s, Version: "v1", Extended: true, Now: fixedNow} + } + + if _, err := Collect(ctx, deps(collectStore(t, false))); err == nil || !strings.Contains(err.Error(), "install id") { + t.Errorf("no install ID: got %v, want an install id error", err) + } + + missing := collectStore(t, true) + if _, err := missing.DB.ExecContext(ctx, `DELETE FROM telemetry_state`); err != nil { + t.Fatalf("delete state: %v", err) + } + if _, err := Collect(ctx, deps(missing)); err == nil { + t.Error("a missing telemetry_state row must be an error") + } + + badSecret := collectStore(t, true) + if _, err := badSecret.DB.ExecContext(ctx, `UPDATE telemetry_state SET signing_secret = '!!not base64!!'`); err != nil { + t.Fatalf("corrupt secret: %v", err) + } + if _, err := Collect(ctx, deps(badSecret)); err == nil { + t.Error("an unreadable signing secret must be an error") + } +} + +func TestCollect_DefaultClockIsNow(t *testing.T) { + rep, err := Collect(t.Context(), Deps{ + Kube: collectKubeClients(t, collectOpts{}), Store: collectStore(t, true), Version: "v1", Extended: true, + }) + if err != nil { + t.Fatalf("collect: %v", err) + } + if d := time.Since(rep.Ext.SentAt); d < -time.Minute || d > time.Minute { + t.Fatalf("sentAt %v is not the current time", rep.Ext.SentAt) + } +} + +func TestServerVersion_MinorForms(t *testing.T) { + cases := []struct { + major, minor, want string + }{ + {"1", "31", "1.31"}, + {"1", "31+", "1.31"}, + {"1", "9", "1.9"}, + {"1", "", "other"}, + {"1", "1234", "other"}, + {"2", "0", "other"}, + {"", "", "other"}, + } + for _, tc := range cases { + k := collectKubeClients(t, collectOpts{serverInfo: &version.Info{Major: tc.major, Minor: tc.minor, GitVersion: "v1.0.0"}}) + git, minor := serverVersion(Deps{Kube: k}) + if minor != tc.want || git != "v1.0.0" { + t.Errorf("major=%q minor=%q: got %q (git %q), want %q", tc.major, tc.minor, minor, git, tc.want) + } + } + + failing := collectKubeClients(t, collectOpts{versionFail: true}) + if git, minor := serverVersion(Deps{Kube: failing}); git != "" || minor != "other" { + t.Errorf("discovery error: got %q/%q, want empty/other", git, minor) + } +} + +func TestNodeArches(t *testing.T) { + node := func(arch string) corev1.Node { return testNode("n", nil, "", "", arch) } + cases := []struct { + name string + nodes []corev1.Node + want []string + }{ + {"sorted and unique", []corev1.Node{node("arm64"), node("amd64"), node("arm64")}, []string{"amd64", "arm64"}}, + {"unknown becomes other", []corev1.Node{node("s390x"), node("sparc")}, []string{"other", "s390x"}}, + {"empty architecture is skipped", []corev1.Node{node(""), node("amd64")}, []string{"amd64"}}, + {"no nodes", nil, []string{"other"}}, + {"only blank architectures", []corev1.Node{node("")}, []string{"other"}}, + } + for _, tc := range cases { + if got := nodeArches(tc.nodes); !reflect.DeepEqual(got, tc.want) { + t.Errorf("%s: got %v, want %v", tc.name, got, tc.want) + } + } +} + +func TestCollectFeatures_TunnelsAreSanitisedAndSorted(t *testing.T) { + servers := []unstructured.Unstructured{ + *serverObj("a", "t", false, "tailscale", true), + *serverObj("b", "t", false, "frp", true), + *serverObj("c", "t", false, "tailscale", true), + *serverObj("d", "t", false, "my-private-relay", true), + *serverObj("e", "t", false, "playit", false), + } + f := collectFeatures(t.Context(), Deps{Store: collectStore(t, false), Flags: Flags{DBDriver: "postgres"}}, servers) + if want := []string{"frp", "other", "tailscale"}; !reflect.DeepEqual(f.Tunnels, want) { + t.Errorf("tunnels = %v, want %v", f.Tunnels, want) + } + if f.DB != "postgres" { + t.Errorf("db = %q, want postgres", f.DB) + } +} + +func TestCollectFeatures_SSOAndAuditSources(t *testing.T) { + ctx := t.Context() + store := collectStore(t, false) + base := func(f Flags) telemetryschema.Features { return collectFeatures(ctx, Deps{Store: store, Flags: f}, nil) } + + if f := base(Flags{}); f.SSO || f.AuditForwarding { + t.Errorf("nothing configured: got %+v", f) + } + if f := base(Flags{OIDCConfigured: true}); !f.SSO { + t.Error("the Helm OIDC flag must count as SSO") + } + if f := base(Flags{AuditWebhook: true}); !f.AuditForwarding { + t.Error("the audit webhook must count as audit forwarding") + } + if f := base(Flags{AuditS3: true}); !f.AuditForwarding { + t.Error("the S3 audit sink must count as audit forwarding") + } +} + +func TestHasSSOProvider(t *testing.T) { + ctx := t.Context() + if hasSSOProvider(ctx, nil) { + t.Error("a nil store has no providers") + } + cases := []struct { + name string + raw string // empty = no row + want bool + }{ + {"no row", "", false}, + {"malformed", `{not json`, false}, + {"no providers", `{"providers":[]}`, false}, + {"local only", `{"providers":[{"name":"local","kind":"local","enabled":true}]}`, false}, + {"oidc disabled", `{"providers":[{"name":"o","kind":"oidc","enabled":false}]}`, false}, + {"oidc enabled", `{"providers":[{"name":"o","kind":"oidc","enabled":true}]}`, true}, + {"google enabled", `{"providers":[{"name":"g","kind":"google","enabled":true}]}`, true}, + {"github enabled", `{"providers":[{"name":"h","kind":"github","enabled":true}]}`, true}, + {"unknown kind", `{"providers":[{"name":"x","kind":"saml","enabled":true}]}`, false}, + } + for _, tc := range cases { + store := collectStore(t, false) + if tc.raw != "" { + putConfig(t, store, "auth", tc.raw) + } + if got := hasSSOProvider(ctx, store); got != tc.want { + t.Errorf("%s: got %v, want %v", tc.name, got, tc.want) + } + } + + closed := collectStore(t, false) + _ = closed.Close() + if hasSSOProvider(ctx, closed) { + t.Error("a store read error must count as no provider") + } +} diff --git a/api/internal/telemetry/destination.go b/api/internal/telemetry/destination.go new file mode 100644 index 000000000..6406d525a --- /dev/null +++ b/api/internal/telemetry/destination.go @@ -0,0 +1,80 @@ +package telemetry + +import ( + "fmt" + "net/url" + "strings" +) + +// DefaultEndpoint is the project default telemetry destination. Empty until +// specs/022-default-telemetry-dashboard/OPEN-DECISIONS.md OD-1 is ruled; the +// feature PR must not merge while empty (hack/check-telemetry-default.sh). +const DefaultEndpoint = "" + +// Destination kinds, in the order ResolveDestination considers them. +const ( + // KindDisabled is a hard off set by the operator; nothing is ever sent. + KindDisabled = "disabled" + // KindBundled is the chart's in-cluster receiver. + KindBundled = "bundled" + // KindCustom is an operator-supplied endpoint. + KindCustom = "custom" + // KindDefault is the project default, DefaultEndpoint. + KindDefault = "default" + // KindNone means no destination is in effect, so nothing is sent. + KindNone = "none" +) + +// Destination is where reports go. URL is empty for the disabled and none +// kinds. Host is the URL's host (with any port), safe to show to admins. +type Destination struct { + Kind string + URL string + Host string +} + +// ResolveDestination picks the one destination for this process from the +// operator's settings, first match wins: disabled, then bundled (an endpoint +// plus the chart's bundled marker), then custom (any endpoint), then the +// project default when DefaultEndpoint is set, otherwise none. The default +// must use https; any other scheme is an error so a typo can't send reports +// in clear text. +func ResolveDestination(disabled bool, endpoint string, bundled bool) (Destination, error) { + return resolveDestination(disabled, endpoint, bundled, DefaultEndpoint) +} + +// resolveDestination is ResolveDestination with the project default passed +// in, so the default branches can be exercised without editing the constant. +func resolveDestination(disabled bool, endpoint string, bundled bool, defaultEndpoint string) (Destination, error) { + endpoint = strings.TrimSpace(endpoint) + switch { + case disabled: + return Destination{Kind: KindDisabled}, nil + case endpoint != "" && bundled: + return Destination{Kind: KindBundled, URL: endpoint, Host: hostOf(endpoint)}, nil + case endpoint != "": + return Destination{Kind: KindCustom, URL: endpoint, Host: hostOf(endpoint)}, nil + case defaultEndpoint != "": + u, err := url.Parse(defaultEndpoint) + if err != nil { + return Destination{}, fmt.Errorf("default telemetry endpoint: %w", err) + } + if u.Scheme != "https" || u.Host == "" { + return Destination{}, fmt.Errorf("default telemetry endpoint %q must be an https URL", defaultEndpoint) + } + return Destination{Kind: KindDefault, URL: defaultEndpoint, Host: u.Host}, nil + default: + return Destination{Kind: KindNone}, nil + } +} + +// hostOf returns the host of rawURL, or "" when it doesn't parse. Custom and +// bundled endpoints keep today's behaviour of accepting any value, so a bad +// one is not an error here. +func hostOf(rawURL string) string { + u, err := url.Parse(rawURL) + if err != nil { + return "" + } + return u.Host +} diff --git a/api/internal/telemetry/destination_test.go b/api/internal/telemetry/destination_test.go new file mode 100644 index 000000000..9f16b9104 --- /dev/null +++ b/api/internal/telemetry/destination_test.go @@ -0,0 +1,74 @@ +package telemetry + +import "testing" + +func TestResolveDestination_Table(t *testing.T) { + const ( + bundledURL = "http://gameplane-telemetry-receiver.gameplane-system.svc:8080/ingest" + defaultURL = "https://telemetry.example.org/ingest" + ) + cases := []struct { + name string + disabled bool + endpoint string + bundled bool + defaultURL string + wantKind string + wantURL string + wantHost string + wantErr bool + }{ + {name: "disabled wins over endpoint and default", disabled: true, endpoint: "https://x.example/i", defaultURL: defaultURL, wantKind: KindDisabled}, + {name: "disabled wins over bundled", disabled: true, endpoint: bundledURL, bundled: true, wantKind: KindDisabled}, + {name: "bundled needs an endpoint and the marker", endpoint: bundledURL, bundled: true, defaultURL: defaultURL, + wantKind: KindBundled, wantURL: bundledURL, wantHost: "gameplane-telemetry-receiver.gameplane-system.svc:8080"}, + {name: "custom keeps any scheme", endpoint: "http://collector.lan:9000/in", defaultURL: defaultURL, + wantKind: KindCustom, wantURL: "http://collector.lan:9000/in", wantHost: "collector.lan:9000"}, + {name: "custom endpoint is trimmed", endpoint: " https://c.example/i \n", wantKind: KindCustom, + wantURL: "https://c.example/i", wantHost: "c.example"}, + {name: "custom with an unparsable URL is not an error", endpoint: "://bad", wantKind: KindCustom, wantURL: "://bad"}, + {name: "default when nothing else is set", defaultURL: defaultURL, + wantKind: KindDefault, wantURL: defaultURL, wantHost: "telemetry.example.org"}, + {name: "bundled marker alone does not use the default", bundled: true, defaultURL: defaultURL, + wantKind: KindDefault, wantURL: defaultURL, wantHost: "telemetry.example.org"}, + {name: "none when there is no endpoint and no default", wantKind: KindNone}, + {name: "none when only the bundled marker is set", bundled: true, wantKind: KindNone}, + {name: "default over http is rejected", defaultURL: "http://telemetry.example.org/ingest", wantErr: true}, + {name: "default without a host is rejected", defaultURL: "https://", wantErr: true}, + {name: "default that does not parse is rejected", defaultURL: "%%", wantErr: true}, + } + for _, tc := range cases { + t.Run(tc.name, func(t *testing.T) { + got, err := resolveDestination(tc.disabled, tc.endpoint, tc.bundled, tc.defaultURL) + if tc.wantErr { + if err == nil { + t.Fatalf("want an error, got %+v", got) + } + return + } + if err != nil { + t.Fatalf("unexpected error: %v", err) + } + want := Destination{Kind: tc.wantKind, URL: tc.wantURL, Host: tc.wantHost} + if got != want { + t.Fatalf("got %+v, want %+v", got, want) + } + }) + } +} + +func TestResolveDestination_UsesProjectConstant(t *testing.T) { + got, err := ResolveDestination(true, "", false) + if err != nil || got.Kind != KindDisabled || got.URL != "" { + t.Fatalf("disabled: got %+v, %v", got, err) + } + got, err = ResolveDestination(false, "http://collector.lan/in", false) + if err != nil || got.Kind != KindCustom { + t.Fatalf("custom: got %+v, %v", got, err) + } + // Whatever DefaultEndpoint holds must itself resolve: empty means none, + // anything else must be a valid https URL. + if _, err := ResolveDestination(false, "", false); err != nil { + t.Fatalf("DefaultEndpoint %q does not resolve: %v", DefaultEndpoint, err) + } +} diff --git a/api/internal/telemetry/distro.go b/api/internal/telemetry/distro.go new file mode 100644 index 000000000..f1edc5378 --- /dev/null +++ b/api/internal/telemetry/distro.go @@ -0,0 +1,54 @@ +package telemetry + +import ( + "strings" + + corev1 "k8s.io/api/core/v1" +) + +// detectDistro names the Kubernetes distribution from signals the API can +// already read, without any new RBAC. The first matching rule wins, in the +// order of research R16: the server's gitVersion suffix, then well-known node +// labels, then the node providerID prefix, then the node OS image. Anything +// else, including plain kubeadm, is "other". +func detectDistro(gitVersion string, nodes []corev1.Node) string { + for _, r := range []struct{ name, marker string }{ + {"k3s", "+k3s"}, + {"rke2", "+rke2"}, + {"k0s", "+k0s"}, + {"eks", "-eks-"}, + {"gke", "-gke."}, + } { + if strings.Contains(gitVersion, r.marker) { + return r.name + } + } + for _, r := range []struct{ name, label string }{ + {"aks", "kubernetes.azure.com/cluster"}, + {"openshift", "node.openshift.io/os_id"}, + {"microk8s", "microk8s.io/cluster"}, + {"minikube", "minikube.k8s.io/name"}, + } { + for i := range nodes { + if _, ok := nodes[i].Labels[r.label]; ok { + return r.name + } + } + } + for _, r := range []struct{ name, prefix string }{ + {"kind", "kind://"}, + {"doks", "digitalocean://"}, + } { + for i := range nodes { + if strings.HasPrefix(nodes[i].Spec.ProviderID, r.prefix) { + return r.name + } + } + } + for i := range nodes { + if strings.HasPrefix(nodes[i].Status.NodeInfo.OSImage, "Talos") { + return "talos" + } + } + return "other" +} diff --git a/api/internal/telemetry/distro_test.go b/api/internal/telemetry/distro_test.go new file mode 100644 index 000000000..ae7690227 --- /dev/null +++ b/api/internal/telemetry/distro_test.go @@ -0,0 +1,71 @@ +package telemetry + +import ( + "testing" + + corev1 "k8s.io/api/core/v1" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" +) + +// testNode builds a Node with just the fields detectDistro and nodeArches read. +func testNode(name string, labels map[string]string, providerID, osImage, arch string) corev1.Node { + return corev1.Node{ + ObjectMeta: metav1.ObjectMeta{Name: name, Labels: labels}, + Spec: corev1.NodeSpec{ProviderID: providerID}, + Status: corev1.NodeStatus{NodeInfo: corev1.NodeSystemInfo{ + OSImage: osImage, + Architecture: arch, + }}, + } +} + +func TestDetectDistro_EveryRow(t *testing.T) { + plain := testNode("n", nil, "", "Ubuntu 24.04", "amd64") + cases := []struct { + name string + gitVersion string + nodes []corev1.Node + want string + }{ + {"k3s", "v1.31.2+k3s1", []corev1.Node{plain}, "k3s"}, + {"rke2", "v1.30.4+rke2r1", []corev1.Node{plain}, "rke2"}, + {"k0s", "v1.31.1+k0s", []corev1.Node{plain}, "k0s"}, + {"eks", "v1.29.4-eks-036c24b", []corev1.Node{plain}, "eks"}, + {"gke", "v1.29.4-gke.1043002", []corev1.Node{plain}, "gke"}, + {"aks label", "v1.30.0", []corev1.Node{testNode("n", map[string]string{"kubernetes.azure.com/cluster": "MC_x"}, "", "", "amd64")}, "aks"}, + {"openshift label", "v1.30.0", []corev1.Node{testNode("n", map[string]string{"node.openshift.io/os_id": "rhcos"}, "", "", "amd64")}, "openshift"}, + {"microk8s label", "v1.30.0", []corev1.Node{testNode("n", map[string]string{"microk8s.io/cluster": "true"}, "", "", "amd64")}, "microk8s"}, + {"minikube label", "v1.30.0", []corev1.Node{testNode("n", map[string]string{"minikube.k8s.io/name": "minikube"}, "", "", "amd64")}, "minikube"}, + {"kind providerID", "v1.31.0", []corev1.Node{testNode("n", nil, "kind://docker/kind/kind-control-plane", "", "amd64")}, "kind"}, + {"doks providerID", "v1.30.2", []corev1.Node{testNode("n", nil, "digitalocean://123456", "", "amd64")}, "doks"}, + {"talos osImage", "v1.31.0", []corev1.Node{testNode("n", nil, "", "Talos (v1.8.0)", "amd64")}, "talos"}, + {"plain kubeadm is other", "v1.31.0", []corev1.Node{plain}, "other"}, + {"no nodes and no marker is other", "", nil, "other"}, + {"match on a later node", "v1.30.0", []corev1.Node{plain, testNode("w", nil, "kind://docker/kind/w", "", "arm64")}, "kind"}, + } + for _, tc := range cases { + t.Run(tc.name, func(t *testing.T) { + if got := detectDistro(tc.gitVersion, tc.nodes); got != tc.want { + t.Fatalf("detectDistro(%q) = %q, want %q", tc.gitVersion, got, tc.want) + } + }) + } +} + +// The first matching row wins, in the order of research R16. +func TestDetectDistro_Precedence(t *testing.T) { + kindNode := testNode("n", map[string]string{"minikube.k8s.io/name": "m"}, "kind://docker/x", "Talos", "amd64") + if got := detectDistro("v1.31.0+k3s1", []corev1.Node{kindNode}); got != "k3s" { + t.Errorf("gitVersion marker must beat labels and providerID, got %q", got) + } + if got := detectDistro("v1.31.0", []corev1.Node{kindNode}); got != "minikube" { + t.Errorf("a node label must beat providerID and osImage, got %q", got) + } + noLabel := testNode("n", nil, "kind://docker/x", "Talos", "amd64") + if got := detectDistro("v1.31.0", []corev1.Node{noLabel}); got != "kind" { + t.Errorf("providerID must beat osImage, got %q", got) + } + if got := detectDistro("v1.31.0+k3s1-eks-1", nil); got != "k3s" { + t.Errorf("k3s must be checked before eks, got %q", got) + } +} diff --git a/api/internal/telemetry/official.go b/api/internal/telemetry/official.go new file mode 100644 index 000000000..a7e7a89ff --- /dev/null +++ b/api/internal/telemetry/official.go @@ -0,0 +1,75 @@ +package telemetry + +import ( + "context" + + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + "k8s.io/apimachinery/pkg/apis/meta/v1/unstructured" + "k8s.io/client-go/dynamic" + + "github.com/ValgulNecron/gameplane/api/internal/kube" + "github.com/ValgulNecron/gameplane/telemetryschema" +) + +// Labels the operator stamps on a module-managed GameTemplate +// (operator/api/v1alpha1/module_types.go). The API module doesn't import the +// operator module, so the values are repeated here. +const ( + labelManagedBy = "gameplane.local/managed-by" + labelModuleName = "gameplane.local/module-name" + labelModuleSource = "gameplane.local/module-source" + managedByModule = "Module" +) + +// listedModules returns the module names the ModuleSource called source +// serves: spec.oci.modules[].name plus the names in status.modules (the +// source's indexed catalog, which is where a git source's names appear). A +// missing source, an empty source name or any read error yields an empty set, +// so every server then counts as custom. +func listedModules(ctx context.Context, dyn dynamic.Interface, source string) map[string]bool { + out := map[string]bool{} + if source == "" || dyn == nil { + return out + } + ms, err := dyn.Resource(kube.GVRModuleSource).Get(ctx, source, metav1.GetOptions{}) + if err != nil { + return out + } + if mods, found, _ := unstructured.NestedSlice(ms.Object, "spec", "oci", "modules"); found { + addModuleNames(out, mods) + } + if mods, found, _ := unstructured.NestedSlice(ms.Object, "status", "modules"); found { + addModuleNames(out, mods) + } + return out +} + +// addModuleNames adds the "name" of every map entry in mods to set. +func addModuleNames(set map[string]bool, mods []any) { + for _, m := range mods { + entry, ok := m.(map[string]any) + if !ok { + continue + } + if name, ok := entry["name"].(string); ok && name != "" { + set[name] = true + } + } +} + +// officialModule returns the official module name a GameTemplate with these +// labels provides, or "" when it isn't one. It is official only when it is +// managed by a Module, comes from the official ModuleSource (source, from +// --official-module-source), names a module that source lists, and that name +// is in the embedded catalog. Manual templates, uploads, other sources and +// look-alike names all return "" and are counted as custom. +func officialModule(labels map[string]string, source string, listed map[string]bool) string { + if source == "" || labels[labelManagedBy] != managedByModule || labels[labelModuleSource] != source { + return "" + } + name := labels[labelModuleName] + if name == "" || !listed[name] || !telemetryschema.IsOfficial(name) { + return "" + } + return name +} diff --git a/api/internal/telemetry/official_test.go b/api/internal/telemetry/official_test.go new file mode 100644 index 000000000..5441edfaf --- /dev/null +++ b/api/internal/telemetry/official_test.go @@ -0,0 +1,113 @@ +package telemetry + +import ( + "context" + "testing" + + "k8s.io/apimachinery/pkg/runtime" +) + +func TestOfficialModule_Table(t *testing.T) { + listed := map[string]bool{ + "minecraft-java": true, + "terraria": true, + "minecraft-java-evil": true, // listed by the source, but not in the embedded catalog + "private-game-by-user": true, + } + good := map[string]string{ + labelManagedBy: managedByModule, + labelModuleSource: "default", + labelModuleName: "minecraft-java", + } + with := func(key, val string) map[string]string { + out := map[string]string{} + for k, v := range good { + out[k] = v + } + if val == "" { + delete(out, key) + } else { + out[key] = val + } + return out + } + cases := []struct { + name string + labels map[string]string + source string + want string + }{ + {"official module", good, "default", "minecraft-java"}, + {"another official module", with(labelModuleName, "terraria"), "default", "terraria"}, + {"nil labels (manual template)", nil, "default", ""}, + {"not managed by a module", with(labelManagedBy, ""), "default", ""}, + {"managed by something else", with(labelManagedBy, "Helm"), "default", ""}, + {"upload source", with(labelModuleSource, "uploads"), "default", ""}, + {"source label missing", with(labelModuleSource, ""), "default", ""}, + {"no official source configured", good, "", ""}, + {"module name missing", with(labelModuleName, ""), "default", ""}, + {"module not listed by the source", with(labelModuleName, "valheim"), "default", ""}, + {"look-alike name outside the catalog", with(labelModuleName, "minecraft-java-evil"), "default", ""}, + {"listed but not in the catalog", with(labelModuleName, "private-game-by-user"), "default", ""}, + } + for _, tc := range cases { + t.Run(tc.name, func(t *testing.T) { + if got := officialModule(tc.labels, tc.source, listed); got != tc.want { + t.Fatalf("officialModule = %q, want %q", got, tc.want) + } + }) + } +} + +func TestListedModules_UnionOfSpecAndStatus(t *testing.T) { + src := moduleSourceObj("default", []string{"minecraft-java", "terraria"}, []string{"terraria", "valheim"}) + k := collectKubeClients(t, collectOpts{dynamic: []runtime.Object{src}}) + got := listedModules(context.Background(), k.Dynamic, "default") + for _, name := range []string{"minecraft-java", "terraria", "valheim"} { + if !got[name] { + t.Errorf("%s missing from %v", name, got) + } + } + if len(got) != 3 { + t.Errorf("got %v, want exactly three names", got) + } +} + +func TestListedModules_EmptyOnProblems(t *testing.T) { + ctx := context.Background() + src := moduleSourceObj("default", []string{"minecraft-java"}, nil) + k := collectKubeClients(t, collectOpts{dynamic: []runtime.Object{src}}) + + if got := listedModules(ctx, k.Dynamic, ""); len(got) != 0 { + t.Errorf("empty source name: got %v", got) + } + if got := listedModules(ctx, nil, "default"); len(got) != 0 { + t.Errorf("nil client: got %v", got) + } + if got := listedModules(ctx, k.Dynamic, "absent"); len(got) != 0 { + t.Errorf("unknown source: got %v", got) + } + + failing := collectKubeClients(t, collectOpts{ + dynamic: []runtime.Object{src}, + dynamicFail: map[string]bool{"get": true}, + }) + if got := listedModules(ctx, failing.Dynamic, "default"); len(got) != 0 { + t.Errorf("a failing Get must yield an empty set, got %v", got) + } +} + +func TestAddModuleNames_SkipsMalformedEntries(t *testing.T) { + set := map[string]bool{} + addModuleNames(set, []any{ + map[string]any{"name": "terraria"}, + map[string]any{"name": ""}, + map[string]any{"name": 7}, + map[string]any{"other": "x"}, + "not-a-map", + nil, + }) + if len(set) != 1 || !set["terraria"] { + t.Fatalf("got %v, want only terraria", set) + } +} diff --git a/hack/check-telemetry-default.sh b/hack/check-telemetry-default.sh new file mode 100755 index 000000000..6c0fe453e --- /dev/null +++ b/hack/check-telemetry-default.sh @@ -0,0 +1,44 @@ +#!/bin/sh +# check-telemetry-default.sh: fail unless the project default telemetry +# destination is set to an https URL (spec 022, research R13). +# +# api/internal/telemetry/destination.go holds DefaultEndpoint, the one place +# the project URL lives. It stays empty until OPEN-DECISIONS OD-1 is ruled, so +# this check is EXPECTED to fail until then. It is the merge gate for the +# feature PR and runs as its own CI job (telemetry-default-gate); it is +# deliberately not part of `make lint`. +# +# Exit codes: +# 0 = DefaultEndpoint is non-empty and starts with https:// +# 1 = it is empty, not https, or the constant could not be found + +set -eu + +cd "$(dirname "$0")/.." +file="${TELEMETRY_DESTINATION_FILE:-api/internal/telemetry/destination.go}" + +if [ ! -r "$file" ]; then + echo "check-telemetry-default: cannot read $file" >&2 + exit 1 +fi + +line=$(grep -E '^const DefaultEndpoint = "' "$file" || true) +if [ -z "$line" ]; then + echo "check-telemetry-default: no 'const DefaultEndpoint = \"...\"' line in $file" >&2 + exit 1 +fi + +value=$(printf '%s\n' "$line" | sed -e 's/^const DefaultEndpoint = "//' -e 's/".*$//') +case "$value" in +https://?*) + echo "check-telemetry-default: DefaultEndpoint is set ($value)" + ;; +"") + echo "check-telemetry-default: DefaultEndpoint is empty; rule OPEN-DECISIONS OD-1 and set it before merging" >&2 + exit 1 + ;; +*) + echo "check-telemetry-default: DefaultEndpoint must start with https:// (got: $value)" >&2 + exit 1 + ;; +esac From dd29e1a90a420b377ad5645582092984b0b6638d Mon Sep 17 00:00:00 2001 From: valgulnecron <39313199+ValgulNecron@users.noreply.github.com> Date: Wed, 7 Oct 2026 00:18:21 +0200 Subject: [PATCH 06/47] feat(telemetry-receiver): SQLite store, config and shared decoder Add the SQLite aggregate store (private in-memory store when DATA_DIR is unset), the new configuration with retention and expiry minimums, the dashboard listener scaffold, chart persistence, and delegate payload decoding to telemetryschema (spec 022 T009, T017, T030-T033). Co-Authored-By: Claude Opus 5.5 Claude-Session: https://claude.ai/code/session_01S7krnvWjW1a6bW5doxiVHB Signed-off-by: valgulnecron <39313199+ValgulNecron@users.noreply.github.com> --- .../templates/telemetry-receiver.yaml | 78 +++ charts/gameplane/values.yaml | 35 ++ telemetry-receiver/go.mod | 21 +- telemetry-receiver/go.sum | 52 +- telemetry-receiver/main.go | 310 +++++++----- telemetry-receiver/store.go | 245 +++++++++ telemetry-receiver/store_test.go | 474 ++++++++++++++++++ 7 files changed, 1085 insertions(+), 130 deletions(-) create mode 100644 telemetry-receiver/store.go create mode 100644 telemetry-receiver/store_test.go diff --git a/charts/gameplane/templates/telemetry-receiver.yaml b/charts/gameplane/templates/telemetry-receiver.yaml index f5d93f96f..69efce1ce 100644 --- a/charts/gameplane/templates/telemetry-receiver.yaml +++ b/charts/gameplane/templates/telemetry-receiver.yaml @@ -5,6 +5,38 @@ condition in api.yaml). */ -}} {{- if and (eq (include "gameplane.apiEnabled" .) "true") .Values.api.telemetry.receiver.enabled (not .Values.api.telemetry.endpoint) }} {{- $r := .Values.api.telemetry.receiver }} +{{- /* + Every key added after v0.2.0-beta.8 may be absent after `helm upgrade + --reuse-values` (F-214), so each is read through a guard: a missing block + becomes an empty dict, and hasKey (not `default`) keeps an explicit 0 or + false the operator set. Absent keys fall back to the values.yaml defaults. +*/}} +{{- $persistence := $r.persistence | default dict }} +{{- $persistenceEnabled := ternary $persistence.enabled true (hasKey $persistence "enabled") }} +{{- $dashboard := $r.dashboard | default dict }} +{{- $dashboardToken := $dashboard.tokenSecretRef | default dict }} +{{- $pepper := $r.pepperSecretRef | default dict }} +{{- $publicSummary := $r.publicSummary | default dict }} +{{- if and $persistenceEnabled (gt (int $r.replicas) 1) }} +{{- fail "api.telemetry.receiver.replicas must be 1 while api.telemetry.receiver.persistence.enabled is true: the SQLite store has a single writer" }} +{{- end }} +{{- if $persistenceEnabled }} +apiVersion: v1 +kind: PersistentVolumeClaim +metadata: + name: gameplane-telemetry-receiver-data + namespace: {{ .Release.Namespace }} + labels: {{- include "gameplane.labels" . | nindent 4 }} +spec: + accessModes: [ReadWriteOnce] + {{- with $persistence.storageClassName }} + storageClassName: {{ . | quote }} + {{- end }} + resources: + requests: + storage: {{ $persistence.size | default "1Gi" | quote }} +--- +{{- end }} # Anonymous-usage-telemetry collector. The API POSTs its daily # {version, servers, templates} report here; this validates it and # exposes aggregate Prometheus metrics. It touches no Kubernetes API, so @@ -17,6 +49,10 @@ metadata: labels: {{- include "gameplane.labels" . | nindent 4 }} spec: replicas: {{ $r.replicas }} + # One writer owns the SQLite file, so a rollout must stop the old pod + # before the new one starts. + strategy: + type: Recreate selector: matchLabels: { app.kubernetes.io/name: gameplane-telemetry-receiver } template: @@ -28,6 +64,9 @@ spec: securityContext: runAsNonRoot: true runAsUser: 65532 + # The image is distroless nonroot (UID 65532); fsGroup makes the + # PVC (or emptyDir) mounted at /data writable by that user. + fsGroup: 65532 seccompProfile: { type: RuntimeDefault } containers: - name: receiver @@ -35,6 +74,34 @@ spec: imagePullPolicy: {{ .Values.image.pullPolicy }} env: - { name: LISTEN_ADDR, value: ":8080" } + - { name: DATA_DIR, value: "/data" } + - name: PUBLIC_SUMMARY + value: {{ ($publicSummary.enabled | default false) | quote }} + - name: RETENTION_DAYS + value: {{ (ternary $r.retentionDays 730 (hasKey $r "retentionDays")) | int64 | quote }} + - name: ACTIVITY_EXPIRY_DAYS + value: {{ (ternary $r.activityExpiryDays 90 (hasKey $r "activityExpiryDays")) | int64 | quote }} + - name: INGEST_SOURCE_DAILY_LIMIT + value: {{ (ternary $r.ingestSourceDailyLimit 20 (hasKey $r "ingestSourceDailyLimit")) | int64 | quote }} + {{- with $r.trustedProxyCIDRs }} + - name: TRUSTED_PROXY_CIDRS + value: {{ join "," . | quote }} + {{- end }} + {{- if $dashboardToken.name }} + # The dashboard listener only starts when this is set. + - name: DASHBOARD_TOKEN + valueFrom: + secretKeyRef: + name: {{ $dashboardToken.name }} + key: {{ $dashboardToken.key | default "token" }} + {{- end }} + {{- if $pepper.name }} + - name: ID_PEPPER + valueFrom: + secretKeyRef: + name: {{ $pepper.name }} + key: {{ $pepper.key | default "pepper" }} + {{- end }} {{- if .Values.api.telemetry.authSecretRef.name }} # Require the same shared token the API sends as its # Authorization header, so the receiver rejects POSTs from @@ -55,6 +122,17 @@ spec: allowPrivilegeEscalation: false readOnlyRootFilesystem: true capabilities: { drop: [ALL] } + volumeMounts: + - { name: data, mountPath: /data } + volumes: + - name: data + {{- if $persistenceEnabled }} + persistentVolumeClaim: + claimName: gameplane-telemetry-receiver-data + {{- else }} + # Persistence is disabled: aggregates are lost when the pod restarts. + emptyDir: {} + {{- end }} {{- with .Values.image.pullSecrets }} imagePullSecrets: {{- toYaml . | nindent 8 }} {{- end }} diff --git a/charts/gameplane/values.yaml b/charts/gameplane/values.yaml index 3de37b9fa..e8509818b 100644 --- a/charts/gameplane/values.yaml +++ b/charts/gameplane/values.yaml @@ -256,8 +256,43 @@ api: # pointed at it automatically. receiver: enabled: false + # Must stay 1 while persistence is enabled: the SQLite file on the PVC + # has a single writer, so the template fails the render otherwise. replicas: 1 resources: {} + # Aggregate storage (SQLite on a PVC mounted at /data). With + # persistence disabled an emptyDir is used instead and every + # aggregate is lost when the pod restarts. + persistence: + enabled: true + size: 1Gi + storageClassName: "" + # Private dashboard (spec 022). The dashboard listener only starts when + # tokenSecretRef.name names a Secret holding the dashboard token. + dashboard: + tokenSecretRef: + name: "" + key: token + # Extra NetworkPolicy peers allowed to reach the dashboard port + # (port-forward works without any). Not rendered yet. + ingressFrom: [] + # Serve the public aggregate counters on GET /v1/summary. + publicSummary: + enabled: false + # Optional HMAC pepper for install IDs, sourced from a Secret. Empty + # name = the receiver generates one and keeps it in its database. + pepperSecretRef: + name: "" + key: pepper + # Daily aggregate retention in days. Minimum 365 (the receiver + # refuses to start below that). + retentionDays: 730 + # Per-install activity record expiry in days. Minimum 31. + activityExpiryDays: 90 + # Accepted reports per source address per UTC day; 0 = unlimited. + ingestSourceDailyLimit: 20 + # CIDRs whose X-Forwarded-For header is trusted for the source address. + trustedProxyCIDRs: [] oidc: enabled: false diff --git a/telemetry-receiver/go.mod b/telemetry-receiver/go.mod index cb2452613..2af7c63b6 100644 --- a/telemetry-receiver/go.mod +++ b/telemetry-receiver/go.mod @@ -2,18 +2,35 @@ module github.com/ValgulNecron/gameplane/telemetry-receiver go 1.26.0 -require github.com/prometheus/client_golang v1.24.1 +require ( + github.com/ValgulNecron/gameplane/telemetryschema v0.0.0-00010101000000-000000000000 + github.com/prometheus/client_golang v1.24.1 + modernc.org/sqlite v1.60.1 +) + +// telemetryschema is an in-repo module (no published version); resolve it +// locally both inside the go.work workspace and for standalone +// `go build ./telemetry-receiver/...`. +replace github.com/ValgulNecron/gameplane/telemetryschema => ../telemetryschema require ( github.com/beorn7/perks v1.0.1 // indirect github.com/cespare/xxhash/v2 v2.3.0 // indirect github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc // indirect + github.com/dustin/go-humanize v1.0.1 // indirect + github.com/google/uuid v1.6.0 // indirect github.com/klauspost/compress v1.19.2 // indirect + github.com/mattn/go-isatty v0.0.24 // indirect github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 // indirect + github.com/ncruces/go-strftime v1.0.0 // indirect github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 // indirect github.com/prometheus/client_model v0.6.2 // indirect github.com/prometheus/common v0.70.1 // indirect github.com/prometheus/procfs v0.21.1 // indirect - golang.org/x/sys v0.47.0 // indirect + github.com/remyoudompheng/bigfft v0.0.0-20230129092748-24d4a6f8daec // indirect + golang.org/x/sys v0.48.0 // indirect google.golang.org/protobuf v1.36.12-0.20260120151049-f2248ac996af // indirect + modernc.org/libc v1.77.1 // indirect + modernc.org/mathutil v1.7.1 // indirect + modernc.org/memory v1.12.1 // indirect ) diff --git a/telemetry-receiver/go.sum b/telemetry-receiver/go.sum index df703f664..fbffac2a6 100644 --- a/telemetry-receiver/go.sum +++ b/telemetry-receiver/go.sum @@ -4,14 +4,26 @@ github.com/cespare/xxhash/v2 v2.3.0 h1:UL815xU9SqsFlibzuggzjXhog7bL6oX9BbNZnL2UF github.com/cespare/xxhash/v2 v2.3.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc h1:U9qPSI2PIWSS1VwoXQT9A3Wy9MM3WgvqSxFWenqJduM= github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/dustin/go-humanize v1.0.1 h1:GzkhY7T5VNhEkwH0PVJgjz+fX1rhBrR7pRT3mDkpeCY= +github.com/dustin/go-humanize v1.0.1/go.mod h1:Mu1zIs6XwVuF/gI1OepvI0qD18qycQx+mFykh5fBlto= github.com/google/go-cmp v0.7.0 h1:wk8382ETsv4JYUZwIsn6YpYiWiBsYLSJiTsyBybVuN8= github.com/google/go-cmp v0.7.0/go.mod h1:pXiqmnSA92OHEEa9HXL2W4E7lf9JzCmGVUdgjX3N/iU= +github.com/google/pprof v0.0.0-20260802141513-ef3492d7dac3 h1:LMLX+LgTNWpfvCBdFebv6EsYotImrt/Ppc5cXIriCSo= +github.com/google/pprof v0.0.0-20260802141513-ef3492d7dac3/go.mod h1:jl5iWTm0/hd5PjEYEOuwAJ57L/CibdZfrqZ5XA5GrCk= +github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0= +github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= +github.com/hashicorp/golang-lru/v2 v2.0.7 h1:a+bsQ5rvGLjzHuww6tVxozPZFVghXaHOwFs4luLUK2k= +github.com/hashicorp/golang-lru/v2 v2.0.7/go.mod h1:QeFd9opnmA6QUJc5vARoKUSoFhyfM2/ZepoAG6RGpeM= github.com/klauspost/compress v1.19.2 h1:hMRETovs/pu/dVWN7zIT1PGG8t509MwT6bO7XSi26R8= github.com/klauspost/compress v1.19.2/go.mod h1:cwPg85FWrGar70rWktvGQj8/hthj3wpl0PGDogxkrSQ= github.com/kylelemons/godebug v1.1.0 h1:RPNrshWIDI6G2gRW9EHilWtl7Z6Sb1BR0xunSBf0SNc= github.com/kylelemons/godebug v1.1.0/go.mod h1:9/0rRGxNHcop5bhtWyNeEfOS8JIWk580+fNqagV/RAw= +github.com/mattn/go-isatty v0.0.24 h1:tGZZoVgT/KiqK1c8ocVLeDS8BSWMRd47J3Lbz7vsReI= +github.com/mattn/go-isatty v0.0.24/go.mod h1:nMCL3Zebbrt45jsMDgnfIwz6ydEQApk5oEI3HqDio6A= github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 h1:C3w9PqII01/Oq1c1nUAm88MOHcQC9l5mIlSMApZMrHA= github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822/go.mod h1:+n7T8mK8HuQTcFwEeznm/DIxMOiR9yIdICNftLE1DvQ= +github.com/ncruces/go-strftime v1.0.0 h1:HMFp8mLCTPp341M/ZnA4qaf7ZlsbTc+miZjCLOFAw7w= +github.com/ncruces/go-strftime v1.0.0/go.mod h1:Fwc5htZGVVkseilnfgOVb9mKy6w1naJmn9CehxcKcls= github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 h1:Jamvg5psRIccs7FGNTlIRMkT8wgtp5eCXdBlqhYGL6U= github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= github.com/prometheus/client_golang v1.24.1 h1:JnJkREXzWxUdCuPFpIWZiPispT9xVV59uiuyR2bPlnU= @@ -22,15 +34,51 @@ github.com/prometheus/common v0.70.1 h1:1HvjP4D5oL3t8RsPlwxA9onvvStjtIHYE5XuuwOi github.com/prometheus/common v0.70.1/go.mod h1:VdFUQDMZK3VLkurFUVhia6uys/0suUp86TJz5qbJRhc= github.com/prometheus/procfs v0.21.1 h1:GljZCt+zSTS+NZq88cyQ1LjZ+RCHp3uVuabBWA5+OJI= github.com/prometheus/procfs v0.21.1/go.mod h1:aB55Cww9pdSJVHk0hUf0inxWyyjPogFIjmHKYgMKmtY= +github.com/remyoudompheng/bigfft v0.0.0-20230129092748-24d4a6f8daec h1:W09IVJc94icq4NjY3clb7Lk8O1qJ8BdBEF8z0ibU0rE= +github.com/remyoudompheng/bigfft v0.0.0-20230129092748-24d4a6f8daec/go.mod h1:qqbHyh8v60DhA7CoWK5oRCqLrMHRGoxYCSS9EjAz6Eo= github.com/stretchr/testify v1.11.1 h1:7s2iGBzp5EwR7/aIZr8ao5+dra3wiQyKjjFuvgVKu7U= github.com/stretchr/testify v1.11.1/go.mod h1:wZwfW3scLgRK+23gO65QZefKpKQRnfz6sD981Nm4B6U= go.uber.org/goleak v1.3.0 h1:2K3zAYmnTNqV73imy9J1T3WC+gmCePx2hEGkimedGto= go.uber.org/goleak v1.3.0/go.mod h1:CoHD4mav9JJNrW/WLlf7HGZPjdw8EucARQHekz1X6bE= go.yaml.in/yaml/v2 v2.4.4 h1:tuyd0P+2Ont/d6e2rl3be67goVK4R6deVxCUX5vyPaQ= go.yaml.in/yaml/v2 v2.4.4/go.mod h1:gMZqIpDtDqOfM0uNfy0SkpRhvUryYH0Z6wdMYcacYXQ= -golang.org/x/sys v0.47.0 h1:o7XGOvZQCADBQQ4Y7VNq2dRWQR7JmOUW8Kxx4ZsNgWs= -golang.org/x/sys v0.47.0/go.mod h1:4GL1E5IUh+htKOUEOaiffhrAeqysfVGipDYzABqnCmw= +golang.org/x/mod v0.41.0 h1:qJmnOUb4YB+FsEuM3HcWucdZASCPGhsX6uljO6pog0c= +golang.org/x/mod v0.41.0/go.mod h1:Ek9pY8RKWXwsWvd3rQiHYtMqkjSUV+s1Rj7j4H5Ur6o= +golang.org/x/sync v0.23.0 h1:KameEIfc1IkluZyXWLn39Wd4tURc6GbCiISGiZm2bQk= +golang.org/x/sync v0.23.0/go.mod h1:sUUOizhqBxiL6pEWpqNLUiaJn1ShEbZ6BBqskPbjZm0= +golang.org/x/sys v0.48.0 h1:bbX/i/6MgT9BVLM9RT1thmxL04yeTAhbEz4SyadbXoo= +golang.org/x/sys v0.48.0/go.mod h1:hNLxWAXmnKAxqDtdwIYC4bM9oQPEecfsnNMuSxOs3og= +golang.org/x/tools v0.50.0 h1:c2ifzfcuY7L90lZ2aKd8S4K2NpASF08SZx9ZuJkHmSU= +golang.org/x/tools v0.50.0/go.mod h1:7ulVMw3831Mwi5EZD6RomGyffr4VFjuNYXf2BbCEAV0= google.golang.org/protobuf v1.36.12-0.20260120151049-f2248ac996af h1:+5/Sw3GsDNlEmu7TfklWKPdQ0Ykja5VEmq2i817+jbI= google.golang.org/protobuf v1.36.12-0.20260120151049-f2248ac996af/go.mod h1:HTf+CrKn2C3g5S8VImy6tdcUvCska2kB7j23XfzDpco= gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= +modernc.org/cc/v4 v4.29.7 h1:q+NXGJ0bK3b4TXFYQQVr9pYETGnmwFWkrUzJnMya/Tg= +modernc.org/cc/v4 v4.29.7/go.mod h1:OnovgIhbbMXMu1aISnJ0wvVD1KnW+cAUJkIrAWh+kVI= +modernc.org/ccgo/v4 v4.36.1 h1:ZNIUZAryN0UgnJwtyxrdEzcFc3yD4Cu4AzjfPXsLsIE= +modernc.org/ccgo/v4 v4.36.1/go.mod h1:rrtGc2QkS239nYb/mQNuBMyjq3/y3ZXWbBjPoV3wqzA= +modernc.org/fileutil v1.4.0 h1:j6ZzNTftVS054gi281TyLjHPp6CPHr2KCxEXjEbD6SM= +modernc.org/fileutil v1.4.0/go.mod h1:EqdKFDxiByqxLk8ozOxObDSfcVOv/54xDs/DUHdvCUU= +modernc.org/gc/v2 v2.6.5 h1:nyqdV8q46KvTpZlsw66kWqwXRHdjIlJOhG6kxiV/9xI= +modernc.org/gc/v2 v2.6.5/go.mod h1:YgIahr1ypgfe7chRuJi2gD7DBQiKSLMPgBQe9oIiito= +modernc.org/gc/v3 v3.1.5 h1:21ldfPfRYE31Tb7B3mwAK8gy1AxP4+dKjrOQPfqakoc= +modernc.org/gc/v3 v3.1.5/go.mod h1:HFK/6AGESC7Ex+EZJhJ2Gni6cTaYpSMmU/cT9RmlfYY= +modernc.org/goabi0 v0.2.0 h1:HvEowk7LxcPd0eq6mVOAEMai46V+i7Jrj13t4AzuNks= +modernc.org/goabi0 v0.2.0/go.mod h1:CEFRnnJhKvWT1c1JTI3Avm+tgOWbkOu5oPA8eH8LnMI= +modernc.org/libc v1.77.1 h1:Ct8j47QtiZ1Enj2DtFXQtUqrPCAjdCmPjtCuvrYQ0Hs= +modernc.org/libc v1.77.1/go.mod h1:87/pZ4L6nD1zqW4nItuS12YO7hN1igAah34xjnQo/W0= +modernc.org/mathutil v1.7.1 h1:GCZVGXdaN8gTqB1Mf/usp1Y/hSqgI2vAGGP4jZMCxOU= +modernc.org/mathutil v1.7.1/go.mod h1:4p5IwJITfppl0G4sUEDtCr4DthTaT47/N3aT6MhfgJg= +modernc.org/memory v1.12.1 h1:nFMiWrpStgZczNl6XI9GnIk/rWhYIyHGUaR04pGbp9g= +modernc.org/memory v1.12.1/go.mod h1:/JP4VbVC+K5sU2wZi9bHoq2MAkCnrt2r98UGeSK7Mjw= +modernc.org/opt v0.2.0 h1:tGyef5ApycA7FSEOMraay9SaTk5zmbx7Tu+cJs4QKZg= +modernc.org/opt v0.2.0/go.mod h1:03fq9lsNfvkYSfxrfUhZCWPk1lm4cq4N+Bh//bEtgns= +modernc.org/sortutil v1.2.1 h1:+xyoGf15mM3NMlPDnFqrteY07klSFxLElE2PVuWIJ7w= +modernc.org/sortutil v1.2.1/go.mod h1:7ZI3a3REbai7gzCLcotuw9AC4VZVpYMjDzETGsSMqJE= +modernc.org/sqlite v1.60.1 h1:/blz53O951KWFOso4QQvEs/Fq6cDBKLtMVrYNSeJVKw= +modernc.org/sqlite v1.60.1/go.mod h1:1dIoEagfDE72QytD5scH1lxARtaUgKgHC/NuApA27r0= +modernc.org/strutil v1.2.1 h1:UneZBkQA+DX2Rp35KcM69cSsNES9ly8mQWD71HKlOA0= +modernc.org/strutil v1.2.1/go.mod h1:EHkiggD70koQxjVdSBM3JKM7k6L0FbGE5eymy9i3B9A= +modernc.org/token v1.1.0 h1:Xl7Ap9dKaEs5kLoOQeQmPWevfnk/DM5qcLcYlA8ys6Y= +modernc.org/token v1.1.0/go.mod h1:UGzOrNV1mAFSEB63lOFHIpNRUVMvYTc6yu1SMY/XTDM= diff --git a/telemetry-receiver/main.go b/telemetry-receiver/main.go index ed897aa49..d2735fac7 100644 --- a/telemetry-receiver/main.go +++ b/telemetry-receiver/main.go @@ -5,29 +5,31 @@ // validates it, logs it structurally, and exposes aggregate Prometheus // metrics so an operator can chart adoption without storing raw reports. // -// It is deliberately standalone (own module, stdlib + client_golang -// only) so it can run anywhere: in-cluster via the Helm chart's -// api.telemetry.receiver.enabled, or on a public host collecting reports -// from many installs. +// It is deliberately standalone (own module, stdlib + client_golang + +// modernc.org/sqlite, no cgo) so it can run anywhere: in-cluster via the +// Helm chart's api.telemetry.receiver.enabled, or on a public host +// collecting reports from many installs. Aggregates live in a SQLite file +// under DATA_DIR (see store.go); raw reports are never stored. package main import ( - "bytes" "context" "crypto/subtle" - "encoding/json" "errors" "fmt" "io" "log/slog" "net/http" + "net/netip" "os" "os/signal" - "regexp" + "strconv" + "strings" "sync" "syscall" "time" + "github.com/ValgulNecron/gameplane/telemetryschema" "github.com/prometheus/client_golang/prometheus" "github.com/prometheus/client_golang/prometheus/promhttp" ) @@ -47,22 +49,112 @@ const ( idleTimeout = 120 * time.Second ) -// versionRE limits each label's syntax. The separate per-server budget -// limits how many different valid labels can be retained. -var versionRE = regexp.MustCompile(`^[A-Za-z0-9][A-Za-z0-9._+-]{0,31}$`) - +// maxVersionLabels bounds how many different valid version labels are +// retained; telemetryschema.VersionRE limits each label's syntax. const maxVersionLabels = 128 +// Configuration defaults and the enforced minimums for the two retention +// settings (spec 022 OD-3, OD-4). +const ( + defaultDashboardListen = ":8081" + defaultIngestSourceDailyLimit = 20 + defaultRetentionDays = 730 + defaultActivityExpiryDays = 90 + minRetentionDays = 365 + minActivityExpiryDays = 31 +) + +// config holds the receiver's settings. The zero value is valid and means +// "no per-source limits, in-memory store, no dashboard"; loadConfig applies +// the production defaults. type config struct { listen string authToken string + + // dashboardListen is the dashboard listener address; the listener only + // starts when dashboardToken is set. + dashboardListen string + dashboardToken string + // dataDir is the SQLite directory. Empty means an in-memory store. + dataDir string + publicSummary bool + // trustedProxyCIDRs are the peers whose X-Forwarded-For is trusted. + trustedProxyCIDRs []netip.Prefix + // ingestSourceDailyLimit is the accepted reports per source per UTC day; + // 0 means unlimited. + ingestSourceDailyLimit int + retentionDays int + activityExpiryDays int + // idPepper is the HMAC pepper for install IDs; empty means the store + // generates one and keeps it in meta. + idPepper string + + // loadErrs collects environment values that could not be parsed, so that + // validate can report them as startup errors. + loadErrs []error } +// loadConfig reads the environment. It never fails: unparsable values are +// recorded in loadErrs and reported by validate. func loadConfig() config { - return config{ - listen: envOr("LISTEN_ADDR", ":8080"), - authToken: envOr("AUTH_TOKEN", ""), + cfg := config{ + listen: envOr("LISTEN_ADDR", ":8080"), + authToken: envOr("AUTH_TOKEN", ""), + dashboardListen: envOr("DASHBOARD_LISTEN_ADDR", defaultDashboardListen), + dashboardToken: envOr("DASHBOARD_TOKEN", ""), + dataDir: envOr("DATA_DIR", ""), + publicSummary: strings.EqualFold(strings.TrimSpace(envOr("PUBLIC_SUMMARY", "")), "true"), + idPepper: envOr("ID_PEPPER", ""), + } + cfg.ingestSourceDailyLimit = cfg.envInt("INGEST_SOURCE_DAILY_LIMIT", defaultIngestSourceDailyLimit) + cfg.retentionDays = cfg.envInt("RETENTION_DAYS", defaultRetentionDays) + cfg.activityExpiryDays = cfg.envInt("ACTIVITY_EXPIRY_DAYS", defaultActivityExpiryDays) + for _, raw := range strings.Split(envOr("TRUSTED_PROXY_CIDRS", ""), ",") { + raw = strings.TrimSpace(raw) + if raw == "" { + continue + } + p, err := netip.ParsePrefix(raw) + if err != nil { + cfg.loadErrs = append(cfg.loadErrs, fmt.Errorf("TRUSTED_PROXY_CIDRS: %w", err)) + continue + } + cfg.trustedProxyCIDRs = append(cfg.trustedProxyCIDRs, p) + } + return cfg +} + +// envInt reads an integer variable. Unset or blank gives fallback; a value +// that is not an integer records an error and gives fallback. +func (c *config) envInt(key string, fallback int) int { + raw := strings.TrimSpace(os.Getenv(key)) + if raw == "" { + return fallback + } + n, err := strconv.Atoi(raw) + if err != nil { + c.loadErrs = append(c.loadErrs, fmt.Errorf("%s: %w", key, err)) + return fallback + } + return n +} + +// validate rejects settings the receiver must not start with. The zero +// config is deliberately not validated: tests and newServer use it to mean +// "no limits"; only run validates the configuration read from the +// environment. +func (c config) validate() error { + errs := append([]error(nil), c.loadErrs...) + if c.retentionDays < minRetentionDays { + errs = append(errs, fmt.Errorf("RETENTION_DAYS must be at least %d, got %d", minRetentionDays, c.retentionDays)) + } + if c.activityExpiryDays < minActivityExpiryDays { + errs = append(errs, fmt.Errorf("ACTIVITY_EXPIRY_DAYS must be at least %d, got %d", minActivityExpiryDays, c.activityExpiryDays)) + } + if c.ingestSourceDailyLimit < 0 { + errs = append(errs, fmt.Errorf("INGEST_SOURCE_DAILY_LIMIT must not be negative, got %d", c.ingestSourceDailyLimit)) } + return errors.Join(errs...) } func envOr(key, fallback string) string { @@ -79,122 +171,33 @@ type payload struct { Templates int } -// errInvalidPayload is returned by decodePayload for any body that is not -// exactly one JSON object carrying all three required fields with exact -// case-sensitive key matching and no duplicates. +// errInvalidPayload is returned by decodePayload for any body that +// telemetryschema.Decode rejects, and for any report that carries the +// extended tier, which the receiver does not accept yet. var errInvalidPayload = errors.New("invalid payload") -// decodePayload parses a body that has already been read in full. It accepts -// exactly one JSON object with version, servers and templates present and no -// other fields; keys are matched case-sensitively and duplicates are rejected; -// anything after that object other than whitespace is rejected. +// decodePayload parses a body that has already been read in full. It is a +// thin wrapper over telemetryschema.Decode, which owns the strict parsing +// rules (exactly one object, exact case-sensitive keys, no duplicates or +// nulls, nothing trailing). Every failure, including an unsupported +// schema, is reported as errInvalidPayload with the cause kept in the +// chain. Reports carrying ext are rejected too, which preserves the +// receiver's behaviour until it accepts the extended tier (T072). func decodePayload(body []byte) (payload, error) { - dec := json.NewDecoder(bytes.NewReader(body)) - - // Expect opening brace - tok, err := dec.Token() - if err != nil { - return payload{}, fmt.Errorf("%w: %w", errInvalidPayload, err) - } - if tok != json.Delim('{') { - return payload{}, fmt.Errorf("%w: expected JSON object", errInvalidPayload) - } - - var p payload - seen := make(map[string]bool) - foundVersion, foundServers, foundTemplates := false, false, false - - // Iterate through object key-value pairs - for dec.More() { - // Get the key - tok, err := dec.Token() - if err != nil { - return payload{}, fmt.Errorf("%w: %w", errInvalidPayload, err) - } - - key, ok := tok.(string) - if !ok { - return payload{}, fmt.Errorf("%w: expected string key", errInvalidPayload) - } - - // Check for duplicate keys - if seen[key] { - return payload{}, fmt.Errorf("%w: duplicate key %q", errInvalidPayload, key) - } - seen[key] = true - - // Decode the value into a RawMessage to validate type carefully - var raw json.RawMessage - if err := dec.Decode(&raw); err != nil { - return payload{}, fmt.Errorf("%w: %w", errInvalidPayload, err) - } - - // Reject null values - if bytes.Equal(raw, []byte("null")) { - return payload{}, fmt.Errorf("%w: null value for key %q", errInvalidPayload, key) - } - - // Handle each key - switch key { - case "version": - foundVersion = true - var v string - if err := json.Unmarshal(raw, &v); err != nil { - return payload{}, fmt.Errorf("%w: version must be string: %w", errInvalidPayload, err) - } - p.Version = v - - case "servers": - foundServers = true - var s int - if err := json.Unmarshal(raw, &s); err != nil { - return payload{}, fmt.Errorf("%w: servers must be integer: %w", errInvalidPayload, err) - } - p.Servers = s - - case "templates": - foundTemplates = true - var t int - if err := json.Unmarshal(raw, &t); err != nil { - return payload{}, fmt.Errorf("%w: templates must be integer: %w", errInvalidPayload, err) - } - p.Templates = t - - default: - return payload{}, fmt.Errorf("%w: unknown field %q", errInvalidPayload, key) - } - } - - // Expect closing brace - tok, err = dec.Token() + rep, info, err := telemetryschema.Decode(body) if err != nil { return payload{}, fmt.Errorf("%w: %w", errInvalidPayload, err) } - if tok != json.Delim('}') { - return payload{}, fmt.Errorf("%w: expected closing brace", errInvalidPayload) - } - - // Check that all required fields were present - if !foundVersion || !foundServers || !foundTemplates { - return payload{}, fmt.Errorf("%w: missing required field", errInvalidPayload) + if rep.Ext != nil || info.ExtDropped { + return payload{}, fmt.Errorf("%w: extended reports are not accepted", errInvalidPayload) } - - // Check for trailing content - switch err := dec.Decode(&struct{}{}); { - case errors.Is(err, io.EOF): - // exactly one value - case err != nil: - return payload{}, fmt.Errorf("%w: trailing content after the report: %w", errInvalidPayload, err) - default: - return payload{}, fmt.Errorf("%w: trailing content after the report", errInvalidPayload) - } - - return p, nil + return payload{Version: rep.Version, Servers: rep.Servers, Templates: rep.Templates}, nil } type server struct { - cfg config - reg *prometheus.Registry + cfg config + reg *prometheus.Registry + store *store versionMu sync.Mutex versions map[string]struct{} @@ -204,11 +207,28 @@ type server struct { templates prometheus.Histogram } +// newServer builds a server backed by a private in-memory store, whatever +// cfg.dataDir says. Tests use it; main goes through newServerWithStore. func newServer(cfg config) *server { + memCfg := cfg + memCfg.dataDir = "" + st, err := openStore(context.Background(), memCfg) + if err != nil { + // Opening a private in-memory database only fails if the SQLite + // driver itself is broken, which is not recoverable. + panic(fmt.Sprintf("telemetry-receiver: in-memory store: %v", err)) + } + return newServerWithStore(cfg, st) +} + +// newServerWithStore builds a server over a store the caller opened and +// owns. +func newServerWithStore(cfg config, st *store) *server { reg := prometheus.NewRegistry() s := &server{ cfg: cfg, reg: reg, + store: st, versions: make(map[string]struct{}), reports: prometheus.NewCounterVec(prometheus.CounterOpts{ Name: "gameplane_telemetry_reports_total", @@ -241,6 +261,13 @@ func (s *server) routes() http.Handler { return mux } +// dashboardRoutes is the scaffold for the dashboard listener. It has no +// routes yet, so every request gets a 404; the dashboard, its login and the +// token-protected /metrics arrive with later tasks (T067). +func (s *server) dashboardRoutes() http.Handler { + return http.NewServeMux() +} + func (s *server) ingest(w http.ResponseWriter, req *http.Request) { if s.cfg.authToken != "" { got := req.Header.Get("Authorization") @@ -284,7 +311,7 @@ func (s *server) ingest(w http.ResponseWriter, req *http.Request) { // Overflow reports still count, but share one label. Never evict entries: // CounterVec would otherwise retain every old label and keep growing. func (s *server) versionLabel(version string) string { - if !versionRE.MatchString(version) || version == "invalid" { + if !telemetryschema.VersionRE.MatchString(version) || version == "invalid" { return "invalid" } if version == "other" { @@ -313,26 +340,57 @@ func newHTTPServer(addr string, h http.Handler) *http.Server { } func run(cfg config) error { + if err := cfg.validate(); err != nil { + return fmt.Errorf("invalid configuration: %w", err) + } ctx, stop := signal.NotifyContext(context.Background(), syscall.SIGINT, syscall.SIGTERM) defer stop() return serve(ctx, cfg) } func serve(ctx context.Context, cfg config) error { - s := newServer(cfg) + st, err := openStore(ctx, cfg) + if err != nil { + return fmt.Errorf("open store: %w", err) + } + defer func() { + if cerr := st.close(); cerr != nil { + slog.Error("close store", "err", cerr) + } + }() + s := newServerWithStore(cfg, st) + srv := newHTTPServer(cfg.listen, s.routes()) - errCh := make(chan error, 1) + servers := []*http.Server{srv} + errCh := make(chan error, 2) go func() { slog.Info("telemetry-receiver listening", "addr", cfg.listen, "version", Version, "auth", cfg.authToken != "") - errCh <- srv.ListenAndServe() + errCh <- fmt.Errorf("listen on %s: %w", cfg.listen, srv.ListenAndServe()) }() + // The dashboard listener only exists when a token is configured, so an + // unconfigured receiver never exposes it. + if cfg.dashboardToken != "" { + dsrv := newHTTPServer(cfg.dashboardListen, s.dashboardRoutes()) + servers = append(servers, dsrv) + go func() { + slog.Info("telemetry-receiver dashboard listening", "addr", cfg.dashboardListen) + errCh <- fmt.Errorf("dashboard listen on %s: %w", cfg.dashboardListen, dsrv.ListenAndServe()) + }() + } select { case err := <-errCh: - return fmt.Errorf("listen on %s: %w", cfg.listen, err) + for _, h := range servers { + _ = h.Close() + } + return err case <-ctx.Done(): shutdownCtx, cancel := context.WithTimeout(context.WithoutCancel(ctx), 5*time.Second) defer cancel() - return srv.Shutdown(shutdownCtx) + var errs []error + for _, h := range servers { + errs = append(errs, h.Shutdown(shutdownCtx)) + } + return errors.Join(errs...) } } diff --git a/telemetry-receiver/store.go b/telemetry-receiver/store.go new file mode 100644 index 000000000..9bfbf8489 --- /dev/null +++ b/telemetry-receiver/store.go @@ -0,0 +1,245 @@ +package main + +import ( + "context" + "crypto/rand" + "database/sql" + "encoding/hex" + "errors" + "fmt" + "log/slog" + "net/url" + "os" + "path/filepath" + "sync" + "time" + + _ "modernc.org/sqlite" // registers the "sqlite" database/sql driver +) + +// storeFileName is the SQLite file created inside DATA_DIR. +const storeFileName = "telemetry.db" + +// schemaVersion is written to meta.schema_version on first open. +const schemaVersion = "1" + +// Keys of the meta table (data-model.md, Receiver). +const ( + metaSchemaVersion = "schema_version" + metaPepper = "pepper" + metaCollectionStart = "collection_started" + metaReportsTotal = "reports_total" +) + +const ( + // pepperBytes is the size of a generated install-ID pepper. + pepperBytes = 32 + // storeBusyTimeoutMsec bounds how long a connection waits on a locked + // database before failing. + storeBusyTimeoutMsec = 5000 +) + +// storeSchema creates every receiver table. All statements are idempotent +// so reopening an existing DATA_DIR is a no-op. Days are UTC calendar days +// written YYYY-MM-DD; other timestamps are RFC 3339 UTC strings bound from +// Go. Nothing here stores a raw report, a source address or a raw install +// ID. +var storeSchema = []string{ + `CREATE TABLE IF NOT EXISTS meta ( + key TEXT PRIMARY KEY, + value TEXT NOT NULL + )`, + `CREATE TABLE IF NOT EXISTS daily_basic ( + day TEXT PRIMARY KEY, + reports INTEGER NOT NULL DEFAULT 0, + duplicates INTEGER NOT NULL DEFAULT 0, + servers_sum INTEGER NOT NULL DEFAULT 0, + templates_sum INTEGER NOT NULL DEFAULT 0 + )`, + `CREATE TABLE IF NOT EXISTS daily_version ( + day TEXT NOT NULL, + version TEXT NOT NULL, + reports INTEGER NOT NULL DEFAULT 0, + PRIMARY KEY (day, version) + )`, + `CREATE TABLE IF NOT EXISTS daily_fleet ( + day TEXT NOT NULL, + metric TEXT NOT NULL, + value INTEGER NOT NULL, + reports INTEGER NOT NULL DEFAULT 0, + PRIMARY KEY (day, metric, value) + )`, + `CREATE TABLE IF NOT EXISTS daily_ext ( + day TEXT PRIMARY KEY, + ext_reports INTEGER NOT NULL DEFAULT 0, + active_installs INTEGER NOT NULL DEFAULT 0, + new_installs INTEGER NOT NULL DEFAULT 0, + lapsed_installs INTEGER NOT NULL DEFAULT 0 + )`, + `CREATE TABLE IF NOT EXISTS daily_dim ( + day TEXT NOT NULL, + dim TEXT NOT NULL, + value TEXT NOT NULL, + installs INTEGER NOT NULL DEFAULT 0, + PRIMARY KEY (day, dim, value) + )`, + `CREATE TABLE IF NOT EXISTS daily_game ( + day TEXT NOT NULL, + module TEXT NOT NULL, + installs INTEGER NOT NULL DEFAULT 0, + servers INTEGER NOT NULL DEFAULT 0, + PRIMARY KEY (day, module) + )`, + `CREATE TABLE IF NOT EXISTS activity ( + id_hmac TEXT PRIMARY KEY, + key_fp TEXT NOT NULL, + first_seen TEXT NOT NULL, + last_seen TEXT NOT NULL, + last_sent_at TEXT NOT NULL, + last_version TEXT NOT NULL + )`, + `CREATE INDEX IF NOT EXISTS activity_last_seen ON activity (last_seen)`, +} + +// store is the receiver's SQLite-backed aggregate store. A single writer +// is enforced with mu: every write goes through exec, so WAL readers never +// contend with more than one writer. +type store struct { + db *sql.DB + mu sync.Mutex // serializes writers + pepper []byte + // mem reports whether the store is a private in-memory database. + mem bool +} + +// storeDSN builds the modernc.org/sqlite DSN for the on-disk database: WAL +// journaling, a busy timeout and enforced foreign keys. +func storeDSN(path string) string { + q := url.Values{} + q.Add("_pragma", "journal_mode(WAL)") + q.Add("_pragma", fmt.Sprintf("busy_timeout(%d)", storeBusyTimeoutMsec)) + q.Add("_pragma", "foreign_keys(1)") + return (&url.URL{Scheme: "file", Path: filepath.ToSlash(path), RawQuery: q.Encode()}).String() +} + +// openStore opens (creating if needed) the store described by cfg. With +// cfg.dataDir empty the database is private to this store and lives in +// memory (a warning is logged); otherwise it is $DATA_DIR/telemetry.db in +// WAL mode. The pepper is cfg.idPepper when set, else a random value that +// is generated once and kept in meta so it survives restarts. +func openStore(ctx context.Context, cfg config) (*store, error) { + var db *sql.DB + mem := cfg.dataDir == "" + if mem { + slog.Warn("DATA_DIR is empty: telemetry aggregates are kept in memory and lost on restart") + // ":memory:" without a shared cache gives every connection its own + // database, so the pool is pinned to one connection that is never + // recycled. Each store therefore owns a private database. + var err error + db, err = sql.Open("sqlite", ":memory:") + if err != nil { + return nil, fmt.Errorf("open in-memory store: %w", err) + } + db.SetMaxOpenConns(1) + db.SetMaxIdleConns(1) + db.SetConnMaxLifetime(0) + db.SetConnMaxIdleTime(0) + } else { + if err := os.MkdirAll(cfg.dataDir, 0o750); err != nil { + return nil, fmt.Errorf("create data dir %s: %w", cfg.dataDir, err) + } + var err error + db, err = sql.Open("sqlite", storeDSN(filepath.Join(cfg.dataDir, storeFileName))) + if err != nil { + return nil, fmt.Errorf("open store in %s: %w", cfg.dataDir, err) + } + } + st := &store{db: db, mem: mem} + if err := st.init(ctx, cfg.idPepper); err != nil { + return nil, errors.Join(err, db.Close()) + } + return st, nil +} + +// init creates the schema and seeds the meta keys. It is safe to run on an +// existing database: existing meta values are never overwritten. +func (s *store) init(ctx context.Context, envPepper string) error { + if err := s.db.PingContext(ctx); err != nil { + return fmt.Errorf("ping store: %w", err) + } + for _, stmt := range storeSchema { + if err := s.exec(ctx, stmt); err != nil { + return fmt.Errorf("create schema: %w", err) + } + } + if err := s.metaInit(ctx, metaSchemaVersion, schemaVersion); err != nil { + return err + } + if err := s.metaInit(ctx, metaCollectionStart, time.Now().UTC().Format(time.RFC3339)); err != nil { + return err + } + if err := s.metaInit(ctx, metaReportsTotal, "0"); err != nil { + return err + } + if envPepper != "" { + s.pepper = []byte(envPepper) + return nil + } + raw := make([]byte, pepperBytes) + if _, err := rand.Read(raw); err != nil { + return fmt.Errorf("generate pepper: %w", err) + } + if err := s.metaInit(ctx, metaPepper, hex.EncodeToString(raw)); err != nil { + return err + } + stored, ok, err := s.metaGet(ctx, metaPepper) + if err != nil { + return err + } + if !ok { + return errors.New("pepper missing from meta after initialization") + } + s.pepper = []byte(stored) + return nil +} + +// exec runs one write statement under the single-writer lock. +func (s *store) exec(ctx context.Context, query string, args ...any) error { + s.mu.Lock() + defer s.mu.Unlock() + if _, err := s.db.ExecContext(ctx, query, args...); err != nil { + return fmt.Errorf("exec: %w", err) + } + return nil +} + +// metaInit inserts a meta key only when it does not exist yet. +func (s *store) metaInit(ctx context.Context, key, value string) error { + if err := s.exec(ctx, + `INSERT INTO meta (key, value) VALUES (?, ?) ON CONFLICT (key) DO NOTHING`, + key, value); err != nil { + return fmt.Errorf("init meta %s: %w", key, err) + } + return nil +} + +// metaGet returns the value for a meta key and whether it exists. +func (s *store) metaGet(ctx context.Context, key string) (string, bool, error) { + var v string + err := s.db.QueryRowContext(ctx, `SELECT value FROM meta WHERE key = ?`, key).Scan(&v) + if errors.Is(err, sql.ErrNoRows) { + return "", false, nil + } + if err != nil { + return "", false, fmt.Errorf("read meta %s: %w", key, err) + } + return v, true, nil +} + +// close releases the database. +func (s *store) close() error { + if err := s.db.Close(); err != nil { + return fmt.Errorf("close store: %w", err) + } + return nil +} diff --git a/telemetry-receiver/store_test.go b/telemetry-receiver/store_test.go new file mode 100644 index 000000000..2f3e5ec3d --- /dev/null +++ b/telemetry-receiver/store_test.go @@ -0,0 +1,474 @@ +package main + +import ( + "context" + "errors" + "io/fs" + "net" + "net/http" + "net/http/httptest" + "os" + "path/filepath" + "strings" + "sync" + "testing" + "time" +) + +// wantTables lists every table data-model.md § Receiver requires. +var wantTables = []string{ + "meta", "daily_basic", "daily_version", "daily_fleet", + "daily_ext", "daily_dim", "daily_game", "activity", +} + +func openTestStore(t *testing.T, cfg config) *store { + t.Helper() + st, err := openStore(context.Background(), cfg) + if err != nil { + t.Fatalf("openStore: %v", err) + } + t.Cleanup(func() { _ = st.close() }) + return st +} + +func mustMeta(t *testing.T, st *store, key string) string { + t.Helper() + v, ok, err := st.metaGet(context.Background(), key) + if err != nil { + t.Fatalf("metaGet(%s): %v", key, err) + } + if !ok { + t.Fatalf("meta key %q missing", key) + } + return v +} + +func countRows(t *testing.T, st *store, query string, args ...any) int { + t.Helper() + var n int + if err := st.db.QueryRowContext(context.Background(), query, args...).Scan(&n); err != nil { + t.Fatalf("count (%s): %v", query, err) + } + return n +} + +func TestStoreCreatesSchemaAndMeta(t *testing.T) { + st := openTestStore(t, config{dataDir: t.TempDir()}) + for _, name := range wantTables { + if n := countRows(t, st, `SELECT count(*) FROM sqlite_master WHERE type = 'table' AND name = ?`, name); n != 1 { + t.Errorf("table %s: found %d, want 1", name, n) + } + } + // The activity claim columns the spec calls out by name. + for _, col := range []string{"key_fp", "last_sent_at"} { + if n := countRows(t, st, `SELECT count(*) FROM pragma_table_info('activity') WHERE name = ?`, col); n != 1 { + t.Errorf("activity.%s: found %d, want 1", col, n) + } + } + if got := mustMeta(t, st, "schema_version"); got != "1" { + t.Errorf("schema_version = %q, want 1", got) + } + if got := mustMeta(t, st, "reports_total"); got != "0" { + t.Errorf("reports_total = %q, want 0", got) + } + if _, err := time.Parse(time.RFC3339, mustMeta(t, st, "collection_started")); err != nil { + t.Errorf("collection_started is not RFC 3339: %v", err) + } + // A generated pepper is 32 random bytes, hex encoded, and kept in meta. + pepper := mustMeta(t, st, "pepper") + if len(pepper) != 64 || string(st.pepper) != pepper { + t.Errorf("pepper = %q (store holds %q), want 64 hex chars matching the store", pepper, st.pepper) + } + if st.mem { + t.Error("an on-disk store reported itself as in-memory") + } +} + +func TestStoreUsesWALOnDisk(t *testing.T) { + dir := t.TempDir() + st := openTestStore(t, config{dataDir: dir}) + var mode string + if err := st.db.QueryRowContext(context.Background(), `PRAGMA journal_mode`).Scan(&mode); err != nil { + t.Fatalf("read journal_mode: %v", err) + } + if mode != "wal" { + t.Errorf("journal_mode = %q, want wal", mode) + } + if _, err := os.Stat(filepath.Join(dir, "telemetry.db")); err != nil { + t.Errorf("telemetry.db not created in DATA_DIR: %v", err) + } +} + +func TestStoreCreatesMissingDataDir(t *testing.T) { + dir := filepath.Join(t.TempDir(), "a", "b") + st := openTestStore(t, config{dataDir: dir}) + if st.mem { + t.Error("store with DATA_DIR set must not be in-memory") + } + if _, err := os.Stat(filepath.Join(dir, "telemetry.db")); err != nil { + t.Errorf("telemetry.db not created in new directory: %v", err) + } +} + +// SC-009: aggregates and the pepper survive a restart on the same DATA_DIR. +func TestStoreReopenKeepsAggregatesAndPepper(t *testing.T) { + ctx := context.Background() + dir := t.TempDir() + + first, err := openStore(context.Background(), config{dataDir: dir}) + if err != nil { + t.Fatalf("first open: %v", err) + } + pepper := string(first.pepper) + started := mustMeta(t, first, "collection_started") + if err := first.exec(ctx, + `INSERT INTO daily_basic (day, reports, servers_sum, templates_sum) VALUES (?, ?, ?, ?)`, + "2026-10-05", 7, 21, 14); err != nil { + t.Fatalf("insert daily_basic: %v", err) + } + if err := first.exec(ctx, + `INSERT INTO activity (id_hmac, key_fp, first_seen, last_seen, last_sent_at, last_version) VALUES (?, ?, ?, ?, ?, ?)`, + "abc123", "fp", "2026-10-01", "2026-10-05", "2026-10-05T10:00:00Z", "0.3.0"); err != nil { + t.Fatalf("insert activity: %v", err) + } + if err := first.exec(ctx, `UPDATE meta SET value = ? WHERE key = 'reports_total'`, "42"); err != nil { + t.Fatalf("update reports_total: %v", err) + } + if err := first.close(); err != nil { + t.Fatalf("close: %v", err) + } + + second := openTestStore(t, config{dataDir: dir}) + if got := string(second.pepper); got != pepper { + t.Errorf("pepper changed across restart: %q -> %q", pepper, got) + } + if got := mustMeta(t, second, "collection_started"); got != started { + t.Errorf("collection_started changed across restart: %q -> %q", started, got) + } + if got := mustMeta(t, second, "reports_total"); got != "42" { + t.Errorf("reports_total = %q after restart, want 42 (initialisation must not reset it)", got) + } + if n := countRows(t, second, `SELECT reports FROM daily_basic WHERE day = ?`, "2026-10-05"); n != 7 { + t.Errorf("daily_basic reports = %d after restart, want 7", n) + } + if n := countRows(t, second, `SELECT count(*) FROM activity WHERE id_hmac = ?`, "abc123"); n != 1 { + t.Errorf("activity rows = %d after restart, want 1", n) + } +} + +func TestStoreEnvPepperIsUsedAndNotStored(t *testing.T) { + dir := t.TempDir() + st := openTestStore(t, config{dataDir: dir, idPepper: "from-secret"}) + if got := string(st.pepper); got != "from-secret" { + t.Errorf("pepper = %q, want the configured value", got) + } + if n := countRows(t, st, `SELECT count(*) FROM meta WHERE key = 'pepper'`); n != 0 { + t.Errorf("meta holds %d pepper rows, want 0 when ID_PEPPER is set", n) + } +} + +func TestStoreInMemoryIsPrivatePerStore(t *testing.T) { + ctx := context.Background() + a := openTestStore(t, config{}) + b := openTestStore(t, config{}) + if !a.mem || !b.mem { + t.Fatal("DATA_DIR empty must give in-memory stores") + } + if err := a.exec(ctx, `INSERT INTO daily_basic (day, reports) VALUES (?, ?)`, "2026-10-05", 1); err != nil { + t.Fatalf("insert into a: %v", err) + } + if n := countRows(t, a, `SELECT count(*) FROM daily_basic`); n != 1 { + t.Errorf("store a has %d rows, want 1", n) + } + if n := countRows(t, b, `SELECT count(*) FROM daily_basic`); n != 0 { + t.Errorf("store b sees %d rows from store a, want 0 (no shared cache)", n) + } + if string(a.pepper) == string(b.pepper) { + t.Error("two in-memory stores generated the same pepper") + } +} + +// newServer keeps its signature and always uses a private in-memory store, +// even when the config names a DATA_DIR. +func TestNewServerOpensPrivateMemoryStore(t *testing.T) { + dir := t.TempDir() + s1 := newServer(config{dataDir: dir}) + s2 := newServer(config{}) + t.Cleanup(func() { _ = s1.store.close(); _ = s2.store.close() }) + if !s1.store.mem || !s2.store.mem { + t.Fatal("newServer must open an in-memory store") + } + if _, err := os.Stat(filepath.Join(dir, "telemetry.db")); !errors.Is(err, fs.ErrNotExist) { + t.Errorf("newServer created a file in DATA_DIR (stat err = %v)", err) + } + if s1.store == s2.store { + t.Error("two servers share one store") + } +} + +func TestStoreSerialisesConcurrentWriters(t *testing.T) { + ctx := context.Background() + st := openTestStore(t, config{dataDir: t.TempDir()}) + const writers = 20 + var wg sync.WaitGroup + errs := make(chan error, writers) + for range writers { + wg.Add(1) + go func() { + defer wg.Done() + errs <- st.exec(ctx, `UPDATE meta SET value = CAST(value AS INTEGER) + 1 WHERE key = 'reports_total'`) + }() + } + wg.Wait() + close(errs) + for err := range errs { + if err != nil { + t.Errorf("concurrent write: %v", err) + } + } + if got := mustMeta(t, st, "reports_total"); got != "20" { + t.Errorf("reports_total = %q after %d increments, want 20", got, writers) + } +} + +func TestStoreMetaGetMissingKey(t *testing.T) { + st := openTestStore(t, config{}) + v, ok, err := st.metaGet(context.Background(), "no-such-key") + if err != nil || ok || v != "" { + t.Errorf("metaGet(missing) = %q, %v, %v; want empty, false, nil", v, ok, err) + } +} + +func TestOpenStoreErrors(t *testing.T) { + // DATA_DIR that cannot be created because a regular file is in the way. + blocker := filepath.Join(t.TempDir(), "file") + if err := os.WriteFile(blocker, []byte("x"), 0o600); err != nil { + t.Fatalf("write blocker: %v", err) + } + if _, err := openStore(context.Background(), config{dataDir: filepath.Join(blocker, "sub")}); err == nil { + t.Error("expected an error when DATA_DIR cannot be created") + } + + // A DATA_DIR whose telemetry.db is not a SQLite database. + dir := t.TempDir() + junk := strings.Repeat("this is not a sqlite database\n", 20) + if err := os.WriteFile(filepath.Join(dir, "telemetry.db"), []byte(junk), 0o600); err != nil { + t.Fatalf("write junk db: %v", err) + } + if _, err := openStore(context.Background(), config{dataDir: dir}); err == nil { + t.Error("expected an error opening a corrupt telemetry.db") + } +} + +func clearConfigEnv(t *testing.T) { + t.Helper() + for _, k := range []string{ + "LISTEN_ADDR", "AUTH_TOKEN", "DASHBOARD_LISTEN_ADDR", "DASHBOARD_TOKEN", "DATA_DIR", + "PUBLIC_SUMMARY", "TRUSTED_PROXY_CIDRS", "INGEST_SOURCE_DAILY_LIMIT", + "RETENTION_DAYS", "ACTIVITY_EXPIRY_DAYS", "ID_PEPPER", + } { + // t.Setenv registers the restore; the variable must then be truly + // unset so loadConfig sees "not set", not "set to empty". + t.Setenv(k, "") + if err := os.Unsetenv(k); err != nil { + t.Fatalf("unset %s: %v", k, err) + } + } +} + +func TestLoadConfigNewDefaults(t *testing.T) { + clearConfigEnv(t) + cfg := loadConfig() + if cfg.dashboardListen != ":8081" || cfg.dashboardToken != "" || cfg.dataDir != "" || + cfg.publicSummary || len(cfg.trustedProxyCIDRs) != 0 || cfg.idPepper != "" { + t.Fatalf("defaults = %+v", cfg) + } + if cfg.ingestSourceDailyLimit != 20 || cfg.retentionDays != 730 || cfg.activityExpiryDays != 90 { + t.Fatalf("numeric defaults = %+v", cfg) + } + if err := cfg.validate(); err != nil { + t.Fatalf("defaults must validate: %v", err) + } +} + +func TestLoadConfigNewEnv(t *testing.T) { + clearConfigEnv(t) + t.Setenv("DASHBOARD_LISTEN_ADDR", ":9091") + t.Setenv("DASHBOARD_TOKEN", "dash") + t.Setenv("DATA_DIR", "/data") + t.Setenv("PUBLIC_SUMMARY", "true") + t.Setenv("TRUSTED_PROXY_CIDRS", "10.0.0.0/8, 192.168.1.0/24,") + t.Setenv("INGEST_SOURCE_DAILY_LIMIT", "0") + t.Setenv("RETENTION_DAYS", "365") + t.Setenv("ACTIVITY_EXPIRY_DAYS", "31") + t.Setenv("ID_PEPPER", "pep") + cfg := loadConfig() + if cfg.dashboardListen != ":9091" || cfg.dashboardToken != "dash" || cfg.dataDir != "/data" || + !cfg.publicSummary || cfg.idPepper != "pep" { + t.Fatalf("env override = %+v", cfg) + } + if cfg.ingestSourceDailyLimit != 0 || cfg.retentionDays != 365 || cfg.activityExpiryDays != 31 { + t.Fatalf("numeric override = %+v", cfg) + } + if len(cfg.trustedProxyCIDRs) != 2 || cfg.trustedProxyCIDRs[0].String() != "10.0.0.0/8" || + cfg.trustedProxyCIDRs[1].String() != "192.168.1.0/24" { + t.Fatalf("trustedProxyCIDRs = %v", cfg.trustedProxyCIDRs) + } + if err := cfg.validate(); err != nil { + t.Fatalf("minimum values must validate: %v", err) + } + t.Setenv("PUBLIC_SUMMARY", "yes") + if loadConfig().publicSummary { + t.Error("PUBLIC_SUMMARY other than true must stay off") + } +} + +func TestConfigValidateErrors(t *testing.T) { + cases := []struct { + name string + env map[string]string + want string + }{ + {"retention below minimum", map[string]string{"RETENTION_DAYS": "364"}, "RETENTION_DAYS"}, + {"activity expiry below minimum", map[string]string{"ACTIVITY_EXPIRY_DAYS": "30"}, "ACTIVITY_EXPIRY_DAYS"}, + {"negative source limit", map[string]string{"INGEST_SOURCE_DAILY_LIMIT": "-1"}, "INGEST_SOURCE_DAILY_LIMIT"}, + {"non-integer retention", map[string]string{"RETENTION_DAYS": "forever"}, "RETENTION_DAYS"}, + {"non-integer limit", map[string]string{"INGEST_SOURCE_DAILY_LIMIT": "many"}, "INGEST_SOURCE_DAILY_LIMIT"}, + {"bad proxy CIDR", map[string]string{"TRUSTED_PROXY_CIDRS": "10.0.0.0/8,nonsense"}, "TRUSTED_PROXY_CIDRS"}, + } + for _, tc := range cases { + t.Run(tc.name, func(t *testing.T) { + clearConfigEnv(t) + for k, v := range tc.env { + t.Setenv(k, v) + } + err := loadConfig().validate() + if err == nil || !strings.Contains(err.Error(), tc.want) { + t.Fatalf("validate() = %v, want an error mentioning %s", err, tc.want) + } + }) + } + + // Every problem is reported, not just the first. + clearConfigEnv(t) + t.Setenv("RETENTION_DAYS", "1") + t.Setenv("ACTIVITY_EXPIRY_DAYS", "1") + err := loadConfig().validate() + if err == nil || !strings.Contains(err.Error(), "RETENTION_DAYS") || !strings.Contains(err.Error(), "ACTIVITY_EXPIRY_DAYS") { + t.Fatalf("validate() = %v, want both settings reported", err) + } +} + +func TestRunRejectsInvalidConfig(t *testing.T) { + clearConfigEnv(t) + t.Setenv("RETENTION_DAYS", "30") + err := run(loadConfig()) + if err == nil || !strings.Contains(err.Error(), "RETENTION_DAYS") { + t.Fatalf("run() = %v, want a configuration error", err) + } +} + +func TestDashboardRoutesScaffoldIsEmpty(t *testing.T) { + s := newServer(config{}) + t.Cleanup(func() { _ = s.store.close() }) + rec := httptest.NewRecorder() + s.dashboardRoutes().ServeHTTP(rec, httptest.NewRequest(http.MethodGet, "/", nil)) + if rec.Code != http.StatusNotFound { + t.Fatalf("dashboard scaffold / = %d, want 404", rec.Code) + } +} + +// freeAddr returns a loopback address that was free a moment ago. +func freeAddr(t *testing.T) string { + t.Helper() + l, err := (&net.ListenConfig{}).Listen(context.Background(), "tcp", "127.0.0.1:0") + if err != nil { + t.Fatalf("reserve port: %v", err) + } + addr := l.Addr().String() + if err := l.Close(); err != nil { + t.Fatalf("release port: %v", err) + } + return addr +} + +func TestServeStartsDashboardOnlyWithToken(t *testing.T) { + dashAddr := freeAddr(t) + ctx, cancel := context.WithCancel(context.Background()) + done := make(chan error, 1) + go func() { + done <- serve(ctx, config{ + listen: "127.0.0.1:0", + dashboardListen: dashAddr, + dashboardToken: "tok", + }) + }() + + // The scaffold has no routes, so a live dashboard listener answers 404. + var status int + deadline := time.Now().Add(5 * time.Second) + for time.Now().Before(deadline) { + req, err := http.NewRequestWithContext(ctx, http.MethodGet, "http://"+dashAddr+"/", nil) + if err != nil { + t.Fatalf("build request: %v", err) + } + resp, err := http.DefaultClient.Do(req) + if err == nil { + status = resp.StatusCode + _ = resp.Body.Close() + break + } + time.Sleep(50 * time.Millisecond) + } + if status != http.StatusNotFound { + t.Fatalf("dashboard listener status = %d, want 404 from the empty scaffold", status) + } + cancel() + select { + case err := <-done: + if err != nil { + t.Fatalf("serve returned %v after cancel, want nil", err) + } + case <-time.After(5 * time.Second): + t.Fatal("serve did not shut down") + } +} + +func TestServeNoDashboardWithoutToken(t *testing.T) { + dashAddr := freeAddr(t) + ctx, cancel := context.WithCancel(context.Background()) + done := make(chan error, 1) + go func() { done <- serve(ctx, config{listen: "127.0.0.1:0", dashboardListen: dashAddr}) }() + time.Sleep(200 * time.Millisecond) + conn, err := (&net.Dialer{Timeout: time.Second}).DialContext(context.Background(), "tcp", dashAddr) + if err == nil { + _ = conn.Close() + t.Error("dashboard listener is up although DASHBOARD_TOKEN is unset") + } + cancel() + if err := <-done; err != nil { + t.Fatalf("serve returned %v after cancel, want nil", err) + } +} + +func TestServeBadDashboardAddr(t *testing.T) { + err := serve(context.Background(), config{ + listen: "127.0.0.1:0", + dashboardListen: "not-an-addr", + dashboardToken: "tok", + }) + if err == nil || !strings.Contains(err.Error(), "dashboard listen") { + t.Fatalf("serve() = %v, want a dashboard listen error", err) + } +} + +func TestServeFailsWhenStoreCannotOpen(t *testing.T) { + blocker := filepath.Join(t.TempDir(), "file") + if err := os.WriteFile(blocker, []byte("x"), 0o600); err != nil { + t.Fatalf("write blocker: %v", err) + } + err := serve(context.Background(), config{listen: "127.0.0.1:0", dataDir: filepath.Join(blocker, "sub")}) + if err == nil || !strings.Contains(err.Error(), "open store") { + t.Fatalf("serve() = %v, want an open store error", err) + } +} From 8f29ead14ed93601682e56d676460cab3876c6e7 Mon Sep 17 00:00:00 2001 From: valgulnecron <39313199+ValgulNecron@users.noreply.github.com> Date: Wed, 7 Oct 2026 00:22:37 +0200 Subject: [PATCH 07/47] fix(api): adapt tests to the seeded telemetry default; BIGINT ack user_id Migrate now seeds the fresh-install telemetry default, so the reporter test helpers upsert or remove that row (T002) and TestConfig_GetEmpty becomes TestConfig_GetFreshInstallDefaults, asserting the seeded default (approved 2026-10-07). telemetry_notice_acks.user_id is now BIGINT to match users.id. Co-Authored-By: Claude Opus 5.5 Claude-Session: https://claude.ai/code/session_01S7krnvWjW1a6bW5doxiVHB Signed-off-by: valgulnecron <39313199+ValgulNecron@users.noreply.github.com> --- .../migrations/common/015_telemetry_state.sql | 8 +++---- api/internal/db/telemetry.go | 12 +++++------ api/internal/db/users.go | 11 +++++----- api/internal/handlers/config_test.go | 21 ++++++++++++++++--- .../telemetry/telemetry_branches_test.go | 8 +++++-- api/internal/telemetry/telemetry_test.go | 2 +- 6 files changed, 41 insertions(+), 21 deletions(-) diff --git a/api/internal/db/migrations/common/015_telemetry_state.sql b/api/internal/db/migrations/common/015_telemetry_state.sql index 420302b79..0f8328e36 100644 --- a/api/internal/db/migrations/common/015_telemetry_state.sql +++ b/api/internal/db/migrations/common/015_telemetry_state.sql @@ -20,11 +20,11 @@ CREATE TABLE telemetry_state ( last_id_rotation_at TEXT ); --- One row per admin who dismissed the consent notice. user_id is the users.id --- value as text. Rows are deleted in Go when the user is removed, because the --- shipped SQLite DSN runs with foreign keys off. +-- One row per admin who dismissed the consent notice. user_id is users.id. +-- Rows are deleted in Go when the user is removed, because the shipped +-- SQLite DSN runs with foreign keys off. CREATE TABLE telemetry_notice_acks ( - user_id TEXT PRIMARY KEY, + user_id BIGINT PRIMARY KEY, acked_at TEXT NOT NULL, action TEXT NOT NULL ); diff --git a/api/internal/db/telemetry.go b/api/internal/db/telemetry.go index 1e1aab546..675ba8f25 100644 --- a/api/internal/db/telemetry.go +++ b/api/internal/db/telemetry.go @@ -8,7 +8,6 @@ import ( "encoding/json" "errors" "fmt" - "strconv" ) // telemetrySingletonID is the primary key of the one telemetry_state row. @@ -268,13 +267,14 @@ func (s *Store) MarkNoticeShown(ctx context.Context, now string) error { return nil } -// InsertNoticeAck records that userID dismissed the notice with action (keep, -// extended-off or all-off) at ackedAt (RFC 3339 UTC). The first dismissal stands; repeats are ignored. +// InsertNoticeAck records that userID dismissed the notice with action +// (keep, extended-off or all-off) at ackedAt (RFC 3339 UTC). The first +// dismissal stands; repeats are ignored. func (s *Store) InsertNoticeAck(ctx context.Context, userID int64, action string, ackedAt string) error { if _, err := s.DB.ExecContext(ctx, `INSERT INTO telemetry_notice_acks(user_id, acked_at, action) VALUES (?, ?, ?) ON CONFLICT (user_id) DO NOTHING`, - strconv.FormatInt(userID, 10), ackedAt, action); err != nil { + userID, ackedAt, action); err != nil { return fmt.Errorf("insert notice ack: %w", err) } return nil @@ -284,7 +284,7 @@ func (s *Store) InsertNoticeAck(ctx context.Context, userID int64, action string func (s *Store) HasNoticeAck(ctx context.Context, userID int64) (bool, error) { var one int err := s.DB.QueryRowContext(ctx, - `SELECT 1 FROM telemetry_notice_acks WHERE user_id = ?`, strconv.FormatInt(userID, 10)).Scan(&one) + `SELECT 1 FROM telemetry_notice_acks WHERE user_id = ?`, userID).Scan(&one) if errors.Is(err, sql.ErrNoRows) { return false, nil } @@ -302,7 +302,7 @@ func (s *Store) DeleteNoticeAcksForUser(ctx context.Context, ex Execer, userID i ex = s.DB } if _, err := ex.ExecContext(ctx, - `DELETE FROM telemetry_notice_acks WHERE user_id = ?`, strconv.FormatInt(userID, 10)); err != nil { + `DELETE FROM telemetry_notice_acks WHERE user_id = ?`, userID); err != nil { return fmt.Errorf("delete notice acks: %w", err) } return nil diff --git a/api/internal/db/users.go b/api/internal/db/users.go index c68ee742a..fa1ed7544 100644 --- a/api/internal/db/users.go +++ b/api/internal/db/users.go @@ -7,11 +7,12 @@ import ( ) // DeleteUser removes a user account and every row tied to it, in one -// transaction: the account's SSO links, preferences, sessions, API tokens and -// role bindings and telemetry notice ack are deleted, and the share links it created are revoked -// (revocation, not a delete, keeps their audit trail). The rows are removed -// explicitly rather than left to ON DELETE CASCADE, because the shipped -// SQLite DSN runs with foreign keys off. Deleting an unknown id is a no-op. +// transaction: the account's SSO links, preferences, sessions, API tokens, +// role bindings, and telemetry notice acks are deleted, and the share links +// it created are revoked (revocation, not a delete, keeps their audit trail). +// The rows are removed explicitly rather than left to ON DELETE CASCADE, +// because the shipped SQLite DSN runs with foreign keys off. Deleting an +// unknown id is a no-op. func (s *Store) DeleteUser(ctx context.Context, userID int64) error { tx, err := s.DB.BeginTx(ctx, nil) if err != nil { diff --git a/api/internal/handlers/config_test.go b/api/internal/handlers/config_test.go index 273f13e5a..3fbe87561 100644 --- a/api/internal/handlers/config_test.go +++ b/api/internal/handlers/config_test.go @@ -65,7 +65,7 @@ func doReq(t *testing.T, method, url string, body any) (int, []byte) { return resp.StatusCode, out } -func TestConfig_GetEmpty(t *testing.T) { +func TestConfig_GetFreshInstallDefaults(t *testing.T) { srv, _ := newConfigServer(t) status, body := doReq(t, "GET", srv.URL+"/admin/config", nil) if status != 200 { @@ -75,8 +75,23 @@ func TestConfig_GetEmpty(t *testing.T) { if err := json.Unmarshal(body, &got); err != nil { t.Fatalf("unmarshal: %v; body=%s", err, body) } - if len(got) != 0 { - t.Fatalf("want empty map, got %v", got) + // Migrate seeds the telemetry default on a fresh install (spec 022 FR-003). + if len(got) != 1 { + t.Fatalf("want one key, got %d: %v", len(got), got) + } + raw, ok := got["telemetry"] + if !ok { + t.Fatalf("want telemetry key, got %v", got) + } + var cfg map[string]any + if err := json.Unmarshal(raw, &cfg); err != nil { + t.Fatalf("unmarshal telemetry: %v", err) + } + if sendMetrics, ok := cfg["sendMetrics"].(bool); !ok || !sendMetrics { + t.Fatalf("want sendMetrics=true, got %v", cfg) + } + if extended, ok := cfg["extended"].(bool); !ok || !extended { + t.Fatalf("want extended=true, got %v", cfg) } } diff --git a/api/internal/telemetry/telemetry_branches_test.go b/api/internal/telemetry/telemetry_branches_test.go index 3f381dc04..c4a08e9ba 100644 --- a/api/internal/telemetry/telemetry_branches_test.go +++ b/api/internal/telemetry/telemetry_branches_test.go @@ -11,8 +11,9 @@ import ( "github.com/ValgulNecron/gameplane/api/internal/db" ) -// bareStore is a migrated store with no telemetry config row (telStore -// seeds one; some branches need its absence). +// bareStore is a migrated store with no telemetry config row. Migrate seeds +// the fresh-install default; this helper removes it so some branches behave as +// before. func bareStore(ctx context.Context, t *testing.T) *db.Store { t.Helper() store, err := db.Open(ctx, "sqlite", "file:"+filepath.Join(t.TempDir(), "t.db")) @@ -23,6 +24,9 @@ func bareStore(ctx context.Context, t *testing.T) *db.Store { if err := store.Migrate(ctx); err != nil { t.Fatalf("migrate: %v", err) } + if _, err := store.DB.ExecContext(ctx, `DELETE FROM config WHERE key = 'telemetry'`); err != nil { + t.Fatalf("delete telemetry: %v", err) + } return store } diff --git a/api/internal/telemetry/telemetry_test.go b/api/internal/telemetry/telemetry_test.go index 878461050..0ec929cca 100644 --- a/api/internal/telemetry/telemetry_test.go +++ b/api/internal/telemetry/telemetry_test.go @@ -30,7 +30,7 @@ func telStore(t *testing.T, sendMetrics bool) *db.Store { } val, _ := json.Marshal(map[string]bool{"sendMetrics": sendMetrics}) if _, err := store.DB.ExecContext(context.Background(), - `INSERT INTO config(key, value, updated_at) VALUES ('telemetry', ?, ?)`, + `INSERT INTO config(key, value, updated_at) VALUES ('telemetry', ?, ?) ON CONFLICT (key) DO UPDATE SET value = excluded.value, updated_at = excluded.updated_at`, string(val), "2026-01-01T00:00:00Z", ); err != nil { t.Fatalf("seed config: %v", err) From d7449ae58d6ee416b00b5f0b588e8b8a840c95a8 Mon Sep 17 00:00:00 2001 From: valgulnecron <39313199+ValgulNecron@users.noreply.github.com> Date: Wed, 7 Oct 2026 00:22:38 +0200 Subject: [PATCH 08/47] fix(telemetryschema): require canonical base64url; run the catalog check in CI Reject keys and signatures whose base64url form is not canonical (Go's decoder skips embedded newlines), list "other" among tunnel values, and run make check-telemetry-catalog in the lint job with path filters for the catalog, its script and values.yaml. Co-Authored-By: Claude Opus 5.5 Claude-Session: https://claude.ai/code/session_01S7krnvWjW1a6bW5doxiVHB Signed-off-by: valgulnecron <39313199+ValgulNecron@users.noreply.github.com> --- .github/workflows/ci.yaml | 6 ++++++ telemetryschema/decode.go | 3 +++ telemetryschema/decode_test.go | 1 + telemetryschema/enums.go | 2 +- telemetryschema/enums_test.go | 2 +- telemetryschema/sign.go | 3 +++ telemetryschema/sign_test.go | 35 +++++++++++++++++----------------- telemetryschema/specs.md | 2 +- 8 files changed, 34 insertions(+), 20 deletions(-) diff --git a/.github/workflows/ci.yaml b/.github/workflows/ci.yaml index a20e100d1..a1c0ed84c 100644 --- a/.github/workflows/ci.yaml +++ b/.github/workflows/ci.yaml @@ -186,6 +186,9 @@ jobs: specs: - '**/specs.md' - 'hack/check-specs.sh' + - 'hack/check-telemetry-catalog.sh' + - 'telemetryschema/catalog.txt' + - 'charts/gameplane/values.yaml' - 'hack/check-dev-load-images.sh' - 'hack/test-up-registry.sh' - 'deploy/kind/up.sh' @@ -477,6 +480,9 @@ jobs: - name: check specs compliance if: matrix.module == 'netguard' run: make check-specs + - name: check telemetry catalog + if: matrix.module == 'netguard' + run: make check-telemetry-catalog # Repository-wide check that `dev-load` loads every image `images` builds # (F-255); gated to one matrix entry like check-specs (ruling D5). - name: check dev-load image coverage diff --git a/telemetryschema/decode.go b/telemetryschema/decode.go index 10d21ce17..fab147bd3 100644 --- a/telemetryschema/decode.go +++ b/telemetryschema/decode.go @@ -239,6 +239,9 @@ func decodePublicKey(s string) ([]byte, error) { if len(b) != keySize { return nil, fmt.Errorf("key is %d bytes, want %d", len(b), keySize) } + if base64.RawURLEncoding.EncodeToString(b) != s { + return nil, fmt.Errorf("key is not unpadded base64url: %w", err) + } return b, nil } diff --git a/telemetryschema/decode_test.go b/telemetryschema/decode_test.go index 305b8e208..8276f7013 100644 --- a/telemetryschema/decode_test.go +++ b/telemetryschema/decode_test.go @@ -348,6 +348,7 @@ func TestDecodeExtRejects(t *testing.T) { "key standard base64": setAt(t, strings.ReplaceAll(testKey, "_", "/"), "key"), "key not base64": setAt(t, "!!!"+testKey[3:], "key"), "key non-canonical": setAt(t, testKey[:42]+"t", "key"), + "key with newline": setAt(t, testKey[:20]+"\n"+testKey[20:], "key"), "sentAt empty": setAt(t, "", "sentAt"), "sentAt words": setAt(t, "yesterday", "sentAt"), "sentAt date only": setAt(t, "2026-10-06", "sentAt"), diff --git a/telemetryschema/enums.go b/telemetryschema/enums.go index 384361a5e..3baf5decd 100644 --- a/telemetryschema/enums.go +++ b/telemetryschema/enums.go @@ -27,7 +27,7 @@ var ( // Arches lists the recognised CPU architectures. Arches = []string{"amd64", "arm64", "arm", "ppc64le", "s390x", "riscv64", "other"} // Tunnels lists the recognised tunnel providers. - Tunnels = []string{"frp", "tailscale", "playit"} + Tunnels = []string{"frp", "tailscale", "playit", "other"} // DBs lists the recognised API database drivers. DBs = []string{"sqlite", "postgres"} // Languages lists the recognised dashboard languages. diff --git a/telemetryschema/enums_test.go b/telemetryschema/enums_test.go index bc5748c88..c63108102 100644 --- a/telemetryschema/enums_test.go +++ b/telemetryschema/enums_test.go @@ -102,7 +102,7 @@ func TestEnumerationContents(t *testing.T) { }{ {"Distros", Distros, []string{"k3s", "rke2", "k0s", "eks", "gke", "aks", "openshift", "microk8s", "minikube", "kind", "doks", "talos", "other"}}, {"Arches", Arches, []string{"amd64", "arm64", "arm", "ppc64le", "s390x", "riscv64", "other"}}, - {"Tunnels", Tunnels, []string{"frp", "tailscale", "playit"}}, + {"Tunnels", Tunnels, []string{"frp", "tailscale", "playit", "other"}}, {"DBs", DBs, []string{"sqlite", "postgres"}}, {"Languages", Languages, []string{"en"}}, {"NodeBands", NodeBands, []string{"1", "2-3", "4-10", "11-50", "51+"}}, diff --git a/telemetryschema/sign.go b/telemetryschema/sign.go index 4a404f5d3..7cb748d04 100644 --- a/telemetryschema/sign.go +++ b/telemetryschema/sign.go @@ -83,6 +83,9 @@ func Verify(header, publicKey string, body []byte) error { if err != nil || len(sig) != ed25519.SignatureSize { return fmt.Errorf("%w: malformed signature", ErrBadSignature) } + if base64.RawURLEncoding.EncodeToString(sig) != encoded { + return fmt.Errorf("%w: malformed signature", ErrBadSignature) + } pub, err := decodePublicKey(publicKey) if err != nil { return fmt.Errorf("%w: %w", ErrBadSignature, err) diff --git a/telemetryschema/sign_test.go b/telemetryschema/sign_test.go index 1ce4e6480..d3e6cc54f 100644 --- a/telemetryschema/sign_test.go +++ b/telemetryschema/sign_test.go @@ -238,23 +238,24 @@ func TestVerifyRejectsMalformedHeaders(t *testing.T) { t.Fatalf("decode vector: %v", err) } cases := map[string]string{ - "empty": "", - "prefix only": "ed25519=", - "no separator": "ed25519", - "wrong algorithm": "rsa=" + raw, - "uppercase algorithm": "ED25519=" + raw, - "leading space": " " + vectorHeader, - "space after equals": "ed25519= " + raw, - "trailing space": vectorHeader + " ", - "bare signature": raw, - "not base64": "ed25519=!!!!", - "standard base64": "ed25519=" + base64.StdEncoding.EncodeToString(sig), - "padded": vectorHeader + "==", - "too short": "ed25519=" + raw[:len(raw)-4], - "too long": vectorHeader + "AAAA", - "one byte": "ed25519=AA", - "non-canonical tail": "ed25519=" + raw[:len(raw)-1] + "B", - "two signatures": vectorHeader + ",ed25519=" + raw, + "empty": "", + "prefix only": "ed25519=", + "no separator": "ed25519", + "wrong algorithm": "rsa=" + raw, + "uppercase algorithm": "ED25519=" + raw, + "leading space": " " + vectorHeader, + "space after equals": "ed25519= " + raw, + "trailing space": vectorHeader + " ", + "bare signature": raw, + "not base64": "ed25519=!!!!", + "standard base64": "ed25519=" + base64.StdEncoding.EncodeToString(sig), + "padded": vectorHeader + "==", + "too short": "ed25519=" + raw[:len(raw)-4], + "too long": vectorHeader + "AAAA", + "one byte": "ed25519=AA", + "non-canonical tail": "ed25519=" + raw[:len(raw)-1] + "B", + "signature with newline": "ed25519=" + raw[:len(raw)/2] + "\n" + raw[len(raw)/2:], + "two signatures": vectorHeader + ",ed25519=" + raw, } for name, header := range cases { t.Run(name, func(t *testing.T) { diff --git a/telemetryschema/specs.md b/telemetryschema/specs.md index 064361a1b..519b186bc 100644 --- a/telemetryschema/specs.md +++ b/telemetryschema/specs.md @@ -62,7 +62,7 @@ JSON tags are the camelCase names in the contract (`installId`, `wakeOnConnect`, |---|---| | `Distros` | `k3s` `rke2` `k0s` `eks` `gke` `aks` `openshift` `microk8s` `minikube` `kind` `doks` `talos` `other` | | `Arches` | `amd64` `arm64` `arm` `ppc64le` `s390x` `riscv64` `other` | -| `Tunnels` | `frp` `tailscale` `playit` | +| `Tunnels` | `frp` `tailscale` `playit` `other` | | `DBs` | `sqlite` `postgres` | | `Languages` | `en` | | `NodeBands` | `1` `2-3` `4-10` `11-50` `51+` | From 258c28c3f1d71821d0457ed67340777459894bd5 Mon Sep 17 00:00:00 2001 From: valgulnecron <39313199+ValgulNecron@users.noreply.github.com> Date: Wed, 7 Oct 2026 00:22:39 +0200 Subject: [PATCH 09/47] fix(chart): no receiver PVC on --reuse-values upgrades; render-time retention minimums An absent persistence block (upgrade with --reuse-values from beta.8) now counts as disabled, so the upgrade adds no PVC. retentionDays < 365 or activityExpiryDays < 31 fails rendering instead of crash-looping. Co-Authored-By: Claude Opus 5.5 Claude-Session: https://claude.ai/code/session_01S7krnvWjW1a6bW5doxiVHB Signed-off-by: valgulnecron <39313199+ValgulNecron@users.noreply.github.com> --- charts/gameplane/templates/telemetry-receiver.yaml | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/charts/gameplane/templates/telemetry-receiver.yaml b/charts/gameplane/templates/telemetry-receiver.yaml index 69efce1ce..f9744df4f 100644 --- a/charts/gameplane/templates/telemetry-receiver.yaml +++ b/charts/gameplane/templates/telemetry-receiver.yaml @@ -10,9 +10,11 @@ --reuse-values` (F-214), so each is read through a guard: a missing block becomes an empty dict, and hasKey (not `default`) keeps an explicit 0 or false the operator set. Absent keys fall back to the values.yaml defaults. + In particular: an absent persistence block (an upgrade with --reuse-values + from beta.8) counts as disabled, so the upgrade adds no PVC. */}} {{- $persistence := $r.persistence | default dict }} -{{- $persistenceEnabled := ternary $persistence.enabled true (hasKey $persistence "enabled") }} +{{- $persistenceEnabled := ternary $persistence.enabled false (hasKey $persistence "enabled") }} {{- $dashboard := $r.dashboard | default dict }} {{- $dashboardToken := $dashboard.tokenSecretRef | default dict }} {{- $pepper := $r.pepperSecretRef | default dict }} @@ -20,6 +22,12 @@ {{- if and $persistenceEnabled (gt (int $r.replicas) 1) }} {{- fail "api.telemetry.receiver.replicas must be 1 while api.telemetry.receiver.persistence.enabled is true: the SQLite store has a single writer" }} {{- end }} +{{- if and (hasKey $r "retentionDays") (lt (int $r.retentionDays) 365) }} +{{- fail "api.telemetry.receiver.retentionDays must be at least 365 (spec 022 OD-3)" }} +{{- end }} +{{- if and (hasKey $r "activityExpiryDays") (lt (int $r.activityExpiryDays) 31) }} +{{- fail "api.telemetry.receiver.activityExpiryDays must be at least 31 (spec 022 OD-4)" }} +{{- end }} {{- if $persistenceEnabled }} apiVersion: v1 kind: PersistentVolumeClaim From a42da213a961a35e89b4fdc1965f1e9c6b7e542e Mon Sep 17 00:00:00 2001 From: valgulnecron <39313199+ValgulNecron@users.noreply.github.com> Date: Wed, 7 Oct 2026 00:22:40 +0200 Subject: [PATCH 10/47] docs(specs): 022 sync contracts with phase 2 review; mark T009-T033 done Co-Authored-By: Claude Opus 5.5 Claude-Session: https://claude.ai/code/session_01S7krnvWjW1a6bW5doxiVHB Signed-off-by: valgulnecron <39313199+ValgulNecron@users.noreply.github.com> --- .../contracts/install-config.md | 2 +- .../contracts/report-schema.md | 6 +- .../data-model.md | 2 +- .../022-default-telemetry-dashboard/tasks.md | 58 ++++++++++--------- 4 files changed, 35 insertions(+), 33 deletions(-) diff --git a/specs/022-default-telemetry-dashboard/contracts/install-config.md b/specs/022-default-telemetry-dashboard/contracts/install-config.md index 9d994249d..fbe654584 100644 --- a/specs/022-default-telemetry-dashboard/contracts/install-config.md +++ b/specs/022-default-telemetry-dashboard/contracts/install-config.md @@ -40,7 +40,7 @@ api: trustedProxyCIDRs: [] # NEW (R6) ``` -All new keys are read with `hasKey` or `dig` guards, so `helm upgrade --reuse-values` from beta.8 renders exactly what it rendered before (the F-214 precedent). +All new keys are read with `hasKey` or `dig` guards (the F-214 precedent), so `helm upgrade --reuse-values` from beta.8 needs no new values and adds no storage: an absent `persistence` block counts as disabled (an `emptyDir`), and other absent keys fall back to the defaults above. `retentionDays` below 365 or `activityExpiryDays` below 31 fails rendering, so a bad value never reaches a crash-looping pod. ## How values render diff --git a/specs/022-default-telemetry-dashboard/contracts/report-schema.md b/specs/022-default-telemetry-dashboard/contracts/report-schema.md index 459e6e8bc..6faf201b9 100644 --- a/specs/022-default-telemetry-dashboard/contracts/report-schema.md +++ b/specs/022-default-telemetry-dashboard/contracts/report-schema.md @@ -50,7 +50,7 @@ Gameplane-Telemetry-Signature: ed25519=`, where minor is 1–3 digits | `other` | | `ext.env.distro` | string | `k3s` `rke2` `k0s` `eks` `gke` `aks` `openshift` `microk8s` `minikube` `kind` `doks` `talos` `other` | `other` | | `ext.env.arch` | string[] | non-empty, sorted, unique, drawn from `amd64` `arm64` `arm` `ppc64le` `s390x` `riscv64` `other` | Unknown members become `other`. An empty array gets 400. | @@ -58,11 +58,11 @@ Gameplane-Telemetry-Signature: ed25519=` instead of the public `routes()`, `TestMetricsMethodNotAllowed` (line 138) targets that handler, and a new case asserts that `GET /metrics` on the public `routes()` returns `404`. The `decodePayload` tests stay unchanged, because T017 keeps a `decodePayload` wrapper. - `.github/workflows/ci.yaml`, the "observability scrape TLS/reachability" step (about lines 773–812): the receiver ServiceMonitor and NetworkPolicy renders also set `api.telemetry.receiver.dashboard.tokenSecretRef.name`, the ServiceMonitor check expects `port: dashboard` and `bearerTokenSecret`, the NetworkPolicy check expects the Prometheus namespace on port 8081, and a new check asserts no receiver ServiceMonitor renders without a token. - **Signed off 2026-10-06** by the user ("Approve all", then "Approve" for the `/metrics` changes). Record the sign-off in the PR description. + - `api/internal/handlers/config_test.go` `TestConfig_GetEmpty` (added 2026-10-07): Migrate now seeds the fresh-install telemetry default, so it becomes `TestConfig_GetFreshInstallDefaults` and asserts exactly the seeded `telemetry` key. The `telStore` and `bareStore` helpers in the reporter tests above upsert or remove the seeded row, with no assertion changes. + + **Signed off 2026-10-06** by the user ("Approve all", then "Approve" for the `/metrics` changes; "Assert the seeded default" for `TestConfig_GetEmpty` on 2026-10-07). Record the sign-off in the PR description. - [X] T003 Create `telemetryschema/go.mod` (`module github.com/ValgulNecron/gameplane/telemetryschema`, `go 1.26.0`, no requires) and `telemetryschema/doc.go` with a package comment: "the shared telemetry report contract used by api and telemetry-receiver; see specs/022-default-telemetry-dashboard/contracts/report-schema.md". - [X] T004 Add `./telemetryschema` to the `use` block in `go.work`, and add `telemetryschema` to `GO_MODULES` in `Makefile:43` (after `gameproto`). - [X] T005 [P] Add `telemetryschema` to both Go module matrices in `.github/workflows/ci.yaml` (the `module:` lists at about lines 457 and 549). Add `telemetryschema/**` everywhere `telemetry-receiver/**` appears as a path filter (about line 119), and to the api and telemetry-receiver image path filters in `.github/workflows/publish-edge.yaml`. Add a `gomod` entry for `/telemetryschema` in `.github/dependabot.yml`, copied from the `/telemetry-receiver` entry at about line 176. @@ -52,7 +54,7 @@ description: "Task list for feature 022: default telemetry destination, extended - `CLAUDE.md`: in the repository map add `telemetryschema/ shared telemetry report contract (api, telemetry-receiver)`; change "links all 15 Go modules" to 16; add `telemetryschema 90` to the coverage minimums; add a row to the Architecture table. - `docs/agent-architecture.md`: add a `telemetryschema/specs.md` row next to Telemetry-Receiver (line 29). - [X] T008 [P] Make the module-list checks accept the new module. Inspect how `hack/check-ci-report-coverage.sh`, `hack/check-publish-edge-paths.sh` and `hack/check-specs.sh` enumerate modules, and add `telemetryschema` to any list they read. Edit the lists only, not the checks' logic. -- [ ] T009 Wire the dependency: +- [X] T009 Wire the dependency: - Add `require github.com/ValgulNecron/gameplane/telemetryschema v0.0.0` and `replace github.com/ValgulNecron/gameplane/telemetryschema => ../telemetryschema` to `api/go.mod` and `telemetry-receiver/go.mod` in the same change as their first import (T026, T017), following the netguard pattern at `api/go.mod:5-9`. `test/e2e/go.mod` gets the same lines in T088, with the test-only signing client. - Add `COPY telemetryschema/ ./telemetryschema/` to `api/Dockerfile` next to `COPY netguard/` (line 7). - In `telemetry-receiver/Dockerfile`, copy `telemetryschema/` before `go mod download` so that the `replace` path resolves. @@ -69,26 +71,26 @@ description: "Task list for feature 022: default telemetry destination, extended ### Report contract (`telemetryschema/`) -- [ ] T010 [P] Create `telemetryschema/report.go`: +- [X] T010 [P] Create `telemetryschema/report.go`: - Types `Report{Version string; Servers, Templates int; Ext *Extended}`, `Extended{Schema int; InstallID string; Env Env; Games Games; Features Features; Key string; SentAt time.Time}`, `Env{K8s, Distro string; Arch []string; Nodes string}`, `Games{Official map[string]int; Custom int}`, and `Features{WakeOnConnect bool; Tunnels []string; Capture, Backups, SSO, AuditForwarding bool; Clusters, DB, Language string}`. - JSON tags exactly as in `contracts/report-schema.md`. - `Encode(Report) ([]byte, error)`, which emits sorted map keys and sorted arrays so the output is deterministic. -- [ ] T011 [P] Create `telemetryschema/enums.go`: +- [X] T011 [P] Create `telemetryschema/enums.go`: - The enumerations from the field-rules table in `contracts/report-schema.md`: Distros, Arches, Tunnels, DBs, `Languages = ["en"]`, NodeBands and ClusterBands. - `VersionRE` (moved from `telemetry-receiver/main.go:52`). - `K8sMinorRE = ^1\.[0-9]{1,3}$`. - `NodeBand(n int) string` (1, 2-3, 4-10, 11-50, 51+), `ClusterBand(n int) string` (1, 2-3, 4-10, 11+), and `FleetBands = []float64{0,1,2,5,10,25,50,100,250}`. - `SanitizeEnum(set, v) string`, which returns `other` for unknown values. -- [ ] T012 Create `telemetryschema/decode.go`, with `Decode(body []byte) (Report, DecodeInfo, error)`: +- [X] T012 Create `telemetryschema/decode.go`, with `Decode(body []byte) (Report, DecodeInfo, error)`: - Port the strict token-walking logic from `decodePayload` in `telemetry-receiver/main.go:85-186`: exactly one object, exact case-sensitive keys, no duplicates or nulls, nothing trailing. - Extend it with the optional `ext` object, validated against the field-rules table in `contracts/report-schema.md`. - Structural errors wrap `ErrInvalidPayload` with `%w`. `ext.schema > 1` returns `ErrUnsupportedSchema`. - Out-of-set values become `other`. Unknown `games.official` keys are added to `Custom`, using the catalog from T013. - A malformed `installId` sets `DecodeInfo.ExtDropped = true` and returns `Ext = nil`. -- [ ] T013 [P] Create `telemetryschema/catalog.txt` (one module name per line, copied from `charts/gameplane/values.yaml` `defaultModuleSource.oci.modules` at about line 583) and `telemetryschema/catalog.go` (`//go:embed catalog.txt`, `IsOfficial(name string) bool`, `Catalog() []string`). +- [X] T013 [P] Create `telemetryschema/catalog.txt` (one module name per line, copied from `charts/gameplane/values.yaml` `defaultModuleSource.oci.modules` at about line 583) and `telemetryschema/catalog.go` (`//go:embed catalog.txt`, `IsOfficial(name string) bool`, `Catalog() []string`). - Add `hack/check-telemetry-catalog.sh` (POSIX sh). It extracts the values.yaml list and diffs it with `catalog.txt`, exiting 1 with the diff on mismatch. - - Add a `check-telemetry-catalog` target to `Makefile`, and add it to the `lint:` prerequisites at `Makefile:266`. -- [ ] T014 [P] Create `telemetryschema/sign.go` (research R20): + - Add a `check-telemetry-catalog` target to `Makefile`, and add it to the `lint:` prerequisites at `Makefile:266`. CI runs it as a `lint (netguard)` step, and the `specs` path filter covers the script, `telemetryschema/catalog.txt` and `charts/gameplane/values.yaml`. +- [X] T014 [P] Create `telemetryschema/sign.go` (research R20): - `const SignatureHeader = "Gameplane-Telemetry-Signature"`. - `NewSecret() ([]byte, error)`: 32 bytes from `crypto/rand`. - `DeriveKey(secret []byte, installID string) (ed25519.PrivateKey, error)`: `crypto/hkdf` with SHA-256, salt = installID, info = `gameplane-telemetry-signing-v1`, 32-byte seed, then `ed25519.NewKeyFromSeed`. @@ -96,25 +98,25 @@ description: "Task list for feature 022: default telemetry destination, extended - `Sign(priv, body []byte) string`: returns `ed25519=`. - `Verify(header, publicKey string, body []byte) error`, wrapping `ErrBadSignature`. - `KeyFingerprint(publicKey string) string`: hex SHA-256 of the raw key. -- [ ] T015 [P] Create `telemetryschema/decode_test.go`, `enums_test.go`, `catalog_test.go` and `sign_test.go`, covering: +- [X] T015 [P] Create `telemetryschema/decode_test.go`, `enums_test.go`, `catalog_test.go` and `sign_test.go`, covering: - every reject case already covered by `telemetry-receiver/main_test.go` `TestDecodePayloadRequiresExactKeys` - every `ext` rule, including `other` folding, unknown modules going to `Custom`, `ExtDropped`, and schema 2 being rejected - band boundaries 1/2/3/4/10/11/50/51 and clusters 10/11 - catalog membership - a fixed `DeriveKey` vector, sign/verify round trip, a single-byte tamper failing, and different IDs deriving different keys -- [ ] T016 [P] Create `telemetryschema/specs.md` with the full content, replacing the T006 skeleton: types, enumerations, bands, the signature scheme, invariants (no free text, bounded categories), and the compatibility table from `contracts/report-schema.md`. -- [ ] T017 Change `telemetry-receiver/main.go` to delegate decoding to `telemetryschema.Decode`: +- [X] T016 [P] Create `telemetryschema/specs.md` with the full content, replacing the T006 skeleton: types, enumerations, bands, the signature scheme, invariants (no free text, bounded categories), and the compatibility table from `contracts/report-schema.md`. +- [X] T017 Change `telemetry-receiver/main.go` to delegate decoding to `telemetryschema.Decode`: - Keep `decodePayload(body []byte) (payload, error)` as a thin wrapper, so the existing `main_test.go` tests keep compiling and passing unchanged. - The wrapper returns `errInvalidPayload` for any report that carries `ext`. This keeps today's behaviour until T072. - Replace the local `versionRE` with `telemetryschema.VersionRE`. ### Install-side state (API database) -- [ ] T018 Create `api/internal/db/migrations/common/015_telemetry_state.sql` with tables `telemetry_state` and `telemetry_notice_acks`, with exactly the columns in `data-model.md` § API, including `signing_secret` and `last_id_rotation_at`. Follow the portability rules in `api/internal/db/migrations/README.md`: no `AUTOINCREMENT`, no `datetime(...)`, no `INSERT OR`, and no comment line ending in `;`. -- [ ] T019 Change `Store.Migrate` in `api/internal/db/db.go:99`: +- [X] T018 Create `api/internal/db/migrations/common/015_telemetry_state.sql` with tables `telemetry_state` and `telemetry_notice_acks`, with exactly the columns in `data-model.md` § API, including `signing_secret` and `last_id_rotation_at`. Follow the portability rules in `api/internal/db/migrations/README.md`: no `AUTOINCREMENT`, no `datetime(...)`, no `INSERT OR`, and no comment line ending in `;`. +- [X] T019 Change `Store.Migrate` in `api/internal/db/db.go:99`: - Before applying anything, count rows in `schema_migrations`. `fresh := count == 0`. - After applying, call `s.seedTelemetryState(ctx, fresh)`. -- [ ] T020 Create `api/internal/db/telemetry.go`: +- [X] T020 Create `api/internal/db/telemetry.go`: - `seedTelemetryState` (research R10), idempotent through `INSERT ... ON CONFLICT (id) DO NOTHING`: - **fresh**: `consent_source='default'`, and upsert the config key `telemetry` = `{"sendMetrics":true,"extended":true}`. - **otherwise**: `consent_source='legacy'`. If the config key `telemetry` exists, rewrite it with `extended:false` added. @@ -125,8 +127,8 @@ description: "Task list for feature 022: default telemetry destination, extended - `EnsureSigningSecret`, which creates the secret once and never returns it outside the package API used by `api/internal/telemetry` - `MarkNoticeShown`, which sets the value only if NULL - `InsertNoticeAck`, `HasNoticeAck` and `DeleteNoticeAcksForUser` -- [ ] T021 Call `DeleteNoticeAcksForUser` from the existing account-removal path in `api/internal/db/users.go`, in the same place other per-user rows are deleted (migrations README rule 3). -- [ ] T022 [P] Create `api/internal/db/telemetry_test.go`, covering: +- [X] T021 Call `DeleteNoticeAcksForUser` from the existing account-removal path in `api/internal/db/users.go`, in the same place other per-user rows are deleted (migrations README rule 3). +- [X] T022 [P] Create `api/internal/db/telemetry_test.go`, covering: - fresh versus existing seeding, including running `Migrate` twice (the bootstrap-admin then serve order), an existing DB with `sendMetrics:true`, and an existing DB with no telemetry row - two concurrent `ClaimTelemetryDue` calls where exactly one wins - notice ack lifecycle and user deletion @@ -135,31 +137,31 @@ description: "Task list for feature 022: default telemetry destination, extended ### Install-side destination and collection (`api/internal/telemetry/`) -- [ ] T023 Create `api/internal/telemetry/destination.go`: +- [X] T023 Create `api/internal/telemetry/destination.go`: - `const DefaultEndpoint = ""`, with a comment: "Project default telemetry destination. Empty until specs/022…/OPEN-DECISIONS.md OD-1 is ruled; the feature PR must not merge while empty (hack/check-telemetry-default.sh)." - `type Destination struct{ Kind, URL, Host string }` - `ResolveDestination(disabled bool, endpoint string, bundled bool) (Destination, error)`, implementing the research R13 table. A `default` kind whose scheme isn't `https` returns an error. -- [ ] T024 [P] Create `hack/check-telemetry-default.sh` (POSIX sh). It reads the `DefaultEndpoint` value from `api/internal/telemetry/destination.go` and exits 1 unless it is non-empty and starts with `https://`. Add a separate job `telemetry-default-gate` to `.github/workflows/ci.yaml` that runs only this script. Don't add it to `make lint`. -- [ ] T025 Add flags in `api/cmd/main.go`: +- [X] T024 [P] Create `hack/check-telemetry-default.sh` (POSIX sh). It reads the `DefaultEndpoint` value from `api/internal/telemetry/destination.go` and exits 1 unless it is non-empty and starts with `https://`. Add a separate job `telemetry-default-gate` to `.github/workflows/ci.yaml` that runs only this script. Don't add it to `make lint`. +- [X] T025 Add flags in `api/cmd/main.go`: - `--telemetry-disabled` / `GAMEPLANE_TELEMETRY_DISABLED` - `--telemetry-interval` / `GAMEPLANE_TELEMETRY_INTERVAL` (default `24h`; a value below `1m` is a startup error) - `--official-module-source` / `GAMEPLANE_OFFICIAL_MODULE_SOURCE` - `GAMEPLANE_TELEMETRY_BUNDLED`, read from the environment only Change the `--telemetry-endpoint` help text at line 541 to "URL to POST anonymous usage metrics to (empty = the project default)". Resolve the destination once at startup through `telemetry.ResolveDestination`, and exit on error. -- [ ] T026 Create `api/internal/telemetry/collect.go` with `Collect(ctx, deps) (telemetryschema.Report, error)`. `deps` holds the kube client, store, config flags, version and official source. +- [X] T026 Create `api/internal/telemetry/collect.go` with `Collect(ctx, deps) (telemetryschema.Report, error)`. `deps` holds the kube client, store, config flags, version and official source. - **Basic.** Keep the current local-cluster counts from `count()` in `telemetry.go:146`. - **Extended.** Build it only when `extendedOn`, from the research R14 table: discovery `ServerVersion`, local nodes, GameServers, GameTemplate labels, BackupSchedules, `Cluster` CRs, `cfg.captureFeatureEnabled`, the OIDC flag or a DB `auth` provider, the audit webhook or S3 sink, and `cfg.dbDriver`. `language` is `"en"`. - **Signing fields.** `Key` = `PublicKeyString(DeriveKey(secret, installID))` and `SentAt = now`. - **Partial failures.** A failure for one field yields `0` or `other`, not an error. -- [ ] T027 [P] Create `api/internal/telemetry/official.go`. Following research R15, a GameServer counts as official module `m` only when its template has all of: +- [X] T027 [P] Create `api/internal/telemetry/official.go`. Following research R15, a GameServer counts as official module `m` only when its template has all of: - label `gameplane.local/managed-by=Module` - label `gameplane.local/module-source` equal to `--official-module-source` - label `gameplane.local/module-name=m`, with `m` in that ModuleSource's `spec.oci.modules[].name` (or its git index), and `telemetryschema.IsOfficial(m)` Everything else, including look-alike names, adds to `Custom`. -- [ ] T028 [P] Create `api/internal/telemetry/distro.go` with `detectDistro(gitVersion string, nodes []corev1.Node) string`, implementing the research R16 table in order. -- [ ] T029 [P] Create `api/internal/telemetry/collect_test.go`, `official_test.go`, `distro_test.go` and `destination_test.go`, using the fake dynamic and typed clients: +- [X] T028 [P] Create `api/internal/telemetry/distro.go` with `detectDistro(gitVersion string, nodes []corev1.Node) string`, implementing the research R16 table in order. +- [X] T029 [P] Create `api/internal/telemetry/collect_test.go`, `official_test.go`, `distro_test.go` and `destination_test.go`, using the fake dynamic and typed clients: - every R14 field, including partial-failure fallbacks - official, custom, upload-source and look-alike modules - every R16 row plus kubeadm becoming `other` @@ -167,13 +169,13 @@ description: "Task list for feature 022: default telemetry destination, extended ### Receiver storage (`telemetry-receiver/`) -- [ ] T030 Create `telemetry-receiver/store.go`: +- [X] T030 Create `telemetry-receiver/store.go`: - Open `modernc.org/sqlite` (add it to `telemetry-receiver/go.mod`) at `$DATA_DIR/telemetry.db`. When `DATA_DIR` is empty, use a private in-memory database per store (`:memory:` with `SetMaxOpenConns(1)`, not a process-wide shared cache, so the many `newServer(config{})` calls in the existing tests stay isolated) and log a warning. `newServer(cfg config) *server` keeps its signature and opens an in-memory store; `main` opens the configured store and passes it in through a second constructor. - Enable WAL, with a single writer goroutine or a mutex. - Create every table in `data-model.md` § Receiver, including `activity.key_fp` and `activity.last_sent_at`. - Initialise `meta` keys `schema_version`, `collection_started` and `reports_total`. Generate and store `pepper` when `ID_PEPPER` is unset. -- [ ] T031 Extend `loadConfig` in `telemetry-receiver/main.go` with every variable in the `contracts/receiver-http.md` Configuration table. Enforce `RETENTION_DAYS ≥ 365` and `ACTIVITY_EXPIRY_DAYS ≥ 31` (OD-3, OD-4), failing with a startup error. Add the second listener scaffold, which starts only when `DASHBOARD_TOKEN` is set. Keep `TestLoadConfigDefaults` passing. -- [ ] T032 Add receiver persistence to the chart: +- [X] T031 Extend `loadConfig` in `telemetry-receiver/main.go` with every variable in the `contracts/receiver-http.md` Configuration table. Enforce `RETENTION_DAYS ≥ 365` and `ACTIVITY_EXPIRY_DAYS ≥ 31` (OD-3, OD-4), failing with a startup error. Add the second listener scaffold, which starts only when `DASHBOARD_TOKEN` is set. Keep `TestLoadConfigDefaults` passing. +- [X] T032 Add receiver persistence to the chart: - In `charts/gameplane/values.yaml`, add the `api.telemetry.receiver` keys `persistence`, `dashboard`, `publicSummary`, `pepperSecretRef`, `retentionDays: 730`, `activityExpiryDays: 90`, `ingestSourceDailyLimit: 20` and `trustedProxyCIDRs`, per `contracts/install-config.md`. - In `charts/gameplane/templates/telemetry-receiver.yaml`: - a PVC `gameplane-telemetry-receiver-data`, or an `emptyDir` when persistence is disabled, mounted at `/data`, with `DATA_DIR=/data` @@ -181,7 +183,7 @@ description: "Task list for feature 022: default telemetry destination, extended - a `fail` when `replicas > 1` and persistence is enabled - env passthrough for the retention, expiry, limit and proxy settings - Read every new key through a `hasKey` or `dig` guard (F-214 precedent at `templates/api.yaml:394-399`). -- [ ] T033 [P] Create `telemetry-receiver/store_test.go`, covering schema creation, reopening the same `DATA_DIR` (aggregates and pepper survive, SC-009), and in-memory mode. +- [X] T033 [P] Create `telemetry-receiver/store_test.go`, covering schema creation, reopening the same `DATA_DIR` (aggregates and pepper survive, SC-009), and in-memory mode. **Checkpoint**: the contract, state, collection and storage foundations exist, and user stories can start. @@ -210,7 +212,7 @@ description: "Task list for feature 022: default telemetry destination, extended - opens or closes the schedule It returns `ErrOperatorDisabled` when the destination kind is `disabled`. -- [ ] T036 [US1] Replace the reporter start at `api/cmd/main.go:392` (`telemetry.New(..., 24*time.Hour)`) with the new constructor, using the resolved destination and the interval flag. +- [ ] T036 [US1] **Closes an interim consent gap (security review of 1ab7ee6b): until this task lands, fresh installs are seeded `sendMetrics:true` while the old reporter checks only that flag, so it can send before the notice. This task and T034 must ship in the same PR as Phase 2.** Replace the reporter start at `api/cmd/main.go:392` (`telemetry.New(..., 24*time.Hour)`) with the new constructor, using the resolved destination and the interval flag. - [ ] T037 [US1] Extend `api/internal/handlers/config.go` for the `telemetry` section: - Add `Extended bool \`json:"extended"\`` to `telemetryCfg` (line 724). - Normalise instead of rejecting: when `sendMetrics` is false, store `extended: false` too (FR-003, spec Q7). There is no 422 for this case. From 4c742e7d6b64df4f2063a3c7f2e00e54f9e5b807 Mon Sep 17 00:00:00 2001 From: valgulnecron <39313199+ValgulNecron@users.noreply.github.com> Date: Wed, 7 Oct 2026 00:53:41 +0200 Subject: [PATCH 11/47] feat(telemetry-receiver): persisted aggregates, private dashboard listener and views Move ingest to ingest.go with per-source daily limits and one-transaction aggregate writes, add the hourly lifecycle job, BuildViews for the basic block, and the token-protected dashboard listener (login, session cookie, strict CSP, refusal invariant, /api/v1/views). /metrics moves behind the dashboard token and answers 404 on the public port (spec 022 T062-T065, T067, T070; main_test.go /metrics changes approved under T002). The HTML templates are placeholders until T068. Co-Authored-By: Claude Opus 5.5 Claude-Session: https://claude.ai/code/session_01S7krnvWjW1a6bW5doxiVHB Signed-off-by: valgulnecron <39313199+ValgulNecron@users.noreply.github.com> --- telemetry-receiver/dashboard.go | 322 ++++++++++++++ telemetry-receiver/dashboard_test.go | 569 ++++++++++++++++++++++++ telemetry-receiver/ingest.go | 144 ++++++ telemetry-receiver/ingest_test.go | 168 +++++++ telemetry-receiver/lifecycle_test.go | 207 +++++++++ telemetry-receiver/main.go | 114 ++--- telemetry-receiver/main_test.go | 86 +++- telemetry-receiver/ratelimit.go | 188 ++++++++ telemetry-receiver/ratelimit_test.go | 338 ++++++++++++++ telemetry-receiver/store.go | 128 ++++++ telemetry-receiver/views.go | 302 +++++++++++++ telemetry-receiver/views_test.go | 327 ++++++++++++++ telemetry-receiver/web/layout.html | 15 + telemetry-receiver/web/login.html | 9 + telemetry-receiver/web/overview.html | 18 + telemetry-receiver/web/static/style.css | 3 + 16 files changed, 2840 insertions(+), 98 deletions(-) create mode 100644 telemetry-receiver/dashboard.go create mode 100644 telemetry-receiver/dashboard_test.go create mode 100644 telemetry-receiver/ingest.go create mode 100644 telemetry-receiver/ingest_test.go create mode 100644 telemetry-receiver/lifecycle_test.go create mode 100644 telemetry-receiver/ratelimit.go create mode 100644 telemetry-receiver/ratelimit_test.go create mode 100644 telemetry-receiver/views.go create mode 100644 telemetry-receiver/views_test.go create mode 100644 telemetry-receiver/web/layout.html create mode 100644 telemetry-receiver/web/login.html create mode 100644 telemetry-receiver/web/overview.html create mode 100644 telemetry-receiver/web/static/style.css diff --git a/telemetry-receiver/dashboard.go b/telemetry-receiver/dashboard.go new file mode 100644 index 000000000..2a5a3aaf4 --- /dev/null +++ b/telemetry-receiver/dashboard.go @@ -0,0 +1,322 @@ +package main + +import ( + "bytes" + "crypto/hmac" + "crypto/sha256" + "crypto/subtle" + "embed" + "encoding/base64" + "encoding/json" + "fmt" + "html/template" + "io/fs" + "log/slog" + "mime" + "net/http" + "net/url" + "path" + "strconv" + "strings" + "time" + + "github.com/prometheus/client_golang/prometheus/promhttp" +) + +// webFS holds the dashboard templates and static files (no JavaScript). +// T068 replaces the placeholder files in web/. +// +//go:embed web +var webFS embed.FS + +const ( + sessionCookie = "gp_telemetry_session" + // sessionMaxAge is the cookie lifetime in seconds (12 hours). + sessionMaxAge = 43200 + sessionTTL = sessionMaxAge * time.Second + // sessionKeyLabel is the HMAC message that derives the cookie key K from + // DASHBOARD_TOKEN (research R8). + sessionKeyLabel = "gameplane-telemetry-session" + // loginPerMinute is the login attempt limit per source (research R6). + loginPerMinute = 5 + // maxLoginBody bounds the login form body. + maxLoginBody = 4 << 10 + + // dashboardCSP is sent on every dashboard response. + dashboardCSP = "default-src 'none'; style-src 'self'; img-src 'self' data:; form-action 'self'; frame-ancestors 'none'; base-uri 'none'" + + // invalidCredentials is the only login failure message; it never says + // whether the token was close, missing or unconfigured. + invalidCredentials = "Invalid credentials" + unauthorizedBody = `{"error":"unauthorized"}` +) + +// dashboard serves the private dashboard listener. +type dashboard struct { + s *server + token string + key []byte + pages map[string]*template.Template + static fs.FS + logins *bucketLimiter +} + +// dashboardRoutes returns the handler of the dashboard listener. It is only +// mounted when DASHBOARD_TOKEN is set; with an empty token every +// authenticated route refuses, so it can never be open. +func (s *server) dashboardRoutes() http.Handler { + static, err := fs.Sub(webFS, "web/static") + if err != nil { + panic(fmt.Sprintf("telemetry-receiver: embedded static files: %v", err)) + } + d := &dashboard{ + s: s, + token: s.cfg.dashboardToken, + key: sessionKey(s.cfg.dashboardToken), + pages: make(map[string]*template.Template), + static: static, + logins: newBucketLimiter(loginPerMinute, loginPerMinute), + } + for _, page := range []string{"login", "overview"} { + d.pages[page] = template.Must(template.New(page).ParseFS(webFS, "web/layout.html", "web/"+page+".html")) + } + mux := http.NewServeMux() + mux.HandleFunc("GET /login", d.loginPage) + mux.HandleFunc("POST /login", d.loginSubmit) + mux.HandleFunc("POST /logout", d.logout) + mux.HandleFunc("GET /{$}", d.overview) + mux.HandleFunc("GET /api/v1/views", d.apiViews) + mux.HandleFunc("GET /metrics", d.metrics) + mux.HandleFunc("GET /static/{file}", d.serveStatic) + return secureHeaders(mux) +} + +// secureHeaders sets the headers every dashboard response carries, including +// the mux's own 404 and 405 answers. +func secureHeaders(next http.Handler) http.Handler { + return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + h := w.Header() + h.Set("Content-Security-Policy", dashboardCSP) + h.Set("X-Content-Type-Options", "nosniff") + h.Set("Referrer-Policy", "no-referrer") + h.Set("Cache-Control", "no-store") + next.ServeHTTP(w, r) + }) +} + +// sessionKey derives K = HMAC-SHA256(token, "gameplane-telemetry-session"). +func sessionKey(token string) []byte { + m := hmac.New(sha256.New, []byte(token)) + m.Write([]byte(sessionKeyLabel)) + return m.Sum(nil) +} + +// tokenEqual compares in constant time. Hashing first makes the comparison +// independent of the lengths. +func tokenEqual(a, b string) bool { + ha, hb := sha256.Sum256([]byte(a)), sha256.Sum256([]byte(b)) + return subtle.ConstantTimeCompare(ha[:], hb[:]) == 1 +} + +// sessionMAC returns HMAC-SHA256(K, expiry). +func (d *dashboard) sessionMAC(expiry string) []byte { + m := hmac.New(sha256.New, d.key) + m.Write([]byte(expiry)) + return m.Sum(nil) +} + +// newSessionValue returns the cookie value expiry || HMAC(K, expiry), written +// as ".". +func (d *dashboard) newSessionValue(now time.Time) string { + expiry := strconv.FormatInt(now.Add(sessionTTL).Unix(), 10) + return expiry + "." + base64.RawURLEncoding.EncodeToString(d.sessionMAC(expiry)) +} + +// sessionValid reports whether the request carries an unexpired cookie +// signed with the key derived from the current token. +func (d *dashboard) sessionValid(r *http.Request) bool { + if d.token == "" { + return false + } + c, err := r.Cookie(sessionCookie) + if err != nil { + return false + } + expiry, encoded, found := strings.Cut(c.Value, ".") + if !found { + return false + } + mac, err := base64.RawURLEncoding.DecodeString(encoded) + if err != nil || !hmac.Equal(mac, d.sessionMAC(expiry)) { + return false + } + until, err := strconv.ParseInt(expiry, 10, 64) + return err == nil && until > d.s.now().Unix() +} + +// bearerValid reports whether the request has Authorization: Bearer . +func (d *dashboard) bearerValid(r *http.Request) bool { + if d.token == "" { + return false + } + got, ok := strings.CutPrefix(r.Header.Get("Authorization"), "Bearer ") + return ok && tokenEqual(got, d.token) +} + +// sameOrigin requires an Origin (or, failing that, Referer) whose host is the +// request's own Host. A missing or "null" origin is refused. +func sameOrigin(r *http.Request) bool { + raw := r.Header.Get("Origin") + if raw == "" { + raw = r.Header.Get("Referer") + } + if raw == "" { + return false + } + u, err := url.Parse(raw) + if err != nil || u.Host == "" { + return false + } + return strings.EqualFold(u.Host, r.Host) +} + +func (d *dashboard) render(w http.ResponseWriter, status int, page string, data any) { + var buf bytes.Buffer + if err := d.pages[page].ExecuteTemplate(&buf, "layout", data); err != nil { + slog.Error("render dashboard page", "page", page, "err", err) + http.Error(w, "internal error", http.StatusInternalServerError) + return + } + w.Header().Set("Content-Type", "text/html; charset=utf-8") + w.WriteHeader(status) + _, _ = w.Write(buf.Bytes()) +} + +func writeUnauthorized(w http.ResponseWriter) { + w.Header().Set("Content-Type", "application/json") + w.WriteHeader(http.StatusUnauthorized) + _, _ = w.Write([]byte(unauthorizedBody)) +} + +type loginData struct{ Error string } + +func (d *dashboard) loginPage(w http.ResponseWriter, _ *http.Request) { + d.render(w, http.StatusOK, "login", loginData{}) +} + +func (d *dashboard) loginSubmit(w http.ResponseWriter, r *http.Request) { + if !d.logins.allow(sourceIP(r, d.s.cfg.trustedProxyCIDRs), d.s.now()) { + d.s.rateLimited.WithLabelValues(routeLogin).Inc() + w.Header().Set("Retry-After", "60") + http.Error(w, "too many attempts", http.StatusTooManyRequests) + return + } + if !sameOrigin(r) { + http.Error(w, "forbidden", http.StatusForbidden) + return + } + r.Body = http.MaxBytesReader(w, r.Body, maxLoginBody) + if err := r.ParseForm(); err != nil || d.token == "" || !tokenEqual(r.PostForm.Get("token"), d.token) { + d.render(w, http.StatusUnauthorized, "login", loginData{Error: invalidCredentials}) + return + } + now := d.s.now() + http.SetCookie(w, &http.Cookie{ + Name: sessionCookie, + Value: d.newSessionValue(now), + Path: "/", + MaxAge: sessionMaxAge, + HttpOnly: true, + Secure: true, + SameSite: http.SameSiteStrictMode, + }) + http.Redirect(w, r, "/", http.StatusSeeOther) +} + +func (d *dashboard) logout(w http.ResponseWriter, r *http.Request) { + if !sameOrigin(r) { + http.Error(w, "forbidden", http.StatusForbidden) + return + } + http.SetCookie(w, &http.Cookie{ + Name: sessionCookie, + Path: "/", + MaxAge: -1, + HttpOnly: true, + Secure: true, + SameSite: http.SameSiteStrictMode, + }) + http.Redirect(w, r, "/login", http.StatusSeeOther) +} + +// rangeParam reads ?range=; invalid or missing values become defaultRange. +func rangeParam(r *http.Request) int { + n, err := strconv.Atoi(r.URL.Query().Get("range")) + if err != nil { + return defaultRange + } + return normalizeRange(n) +} + +func (d *dashboard) overview(w http.ResponseWriter, r *http.Request) { + if !d.sessionValid(r) { + http.Redirect(w, r, "/login", http.StatusSeeOther) + return + } + v, err := BuildViews(r.Context(), d.s.store, rangeParam(r), d.s.now()) + if err != nil { + slog.Error("build views", "err", err) + http.Error(w, "internal error", http.StatusInternalServerError) + return + } + d.render(w, http.StatusOK, "overview", v) +} + +func (d *dashboard) apiViews(w http.ResponseWriter, r *http.Request) { + if !d.sessionValid(r) && !d.bearerValid(r) { + writeUnauthorized(w) + return + } + v, err := BuildViews(r.Context(), d.s.store, rangeParam(r), d.s.now()) + if err != nil { + slog.Error("build views", "err", err) + http.Error(w, "internal error", http.StatusInternalServerError) + return + } + body, err := json.Marshal(v) + if err != nil { + slog.Error("encode views", "err", err) + http.Error(w, "internal error", http.StatusInternalServerError) + return + } + w.Header().Set("Content-Type", "application/json") + _, _ = w.Write(body) +} + +// metrics serves the Prometheus registry to a Bearer token only; the session +// cookie is not accepted here (FR-030, spec Q8). +func (d *dashboard) metrics(w http.ResponseWriter, r *http.Request) { + if !d.bearerValid(r) { + writeUnauthorized(w) + return + } + promhttp.HandlerFor(d.s.reg, promhttp.HandlerOpts{}).ServeHTTP(w, r) +} + +// serveStatic serves one embedded static file. It reads the file itself +// rather than using http.ServeFileFS, whose error responses drop the +// Cache-Control header that every dashboard response must carry. +func (d *dashboard) serveStatic(w http.ResponseWriter, r *http.Request) { + name := r.PathValue("file") + data, err := fs.ReadFile(d.static, name) + if err != nil { + http.NotFound(w, r) + return + } + ctype := mime.TypeByExtension(path.Ext(name)) + if ctype == "" { + ctype = "application/octet-stream" + } + w.Header().Set("Content-Type", ctype) + _, _ = w.Write(data) +} diff --git a/telemetry-receiver/dashboard_test.go b/telemetry-receiver/dashboard_test.go new file mode 100644 index 000000000..5a98b7ed3 --- /dev/null +++ b/telemetry-receiver/dashboard_test.go @@ -0,0 +1,569 @@ +package main + +import ( + "context" + "encoding/json" + "net/http" + "net/http/httptest" + "net/netip" + "net/url" + "strings" + "testing" + "time" +) + +const ( + dashToken = "dash-token-for-tests" + dashOrigin = "http://example.com" // httptest.NewRequest uses Host example.com +) + +var dashNow = time.Date(2026, 10, 7, 12, 0, 0, 0, time.UTC) + +// newDash builds a receiver with a fixed clock and returns it with its +// dashboard handler. +func newDash(t *testing.T, cfg config) (*server, http.Handler) { + t.Helper() + if cfg.dashboardToken == "" { + cfg.dashboardToken = dashToken + } + s := newServer(cfg) + s.now = func() time.Time { return dashNow } + return s, s.dashboardRoutes() +} + +// seedDash stores reports on the latest complete day (2026-10-06) and the +// day before it. +func seedDash(t *testing.T, s *server) { + t.Helper() + for _, r := range []struct { + day, version string + servers, tpl int + }{ + {"2026-10-06", "1.0.0", 7, 21}, + {"2026-10-06", "1.0.0", 3, 4}, + {"2026-10-05", "2.3.4", 99, 98}, + } { + if err := s.store.recordBasic(context.Background(), r.day, r.version, r.servers, r.tpl); err != nil { + t.Fatalf("seed: %v", err) + } + } +} + +type dashReq struct { + method, path string + header map[string]string + body string + cookie *http.Cookie + remote string +} + +func doDash(t *testing.T, h http.Handler, r dashReq) *httptest.ResponseRecorder { + t.Helper() + if r.method == "" { + r.method = http.MethodGet + } + req := httptest.NewRequestWithContext(t.Context(), r.method, r.path, strings.NewReader(r.body)) + if r.body != "" { + req.Header.Set("Content-Type", "application/x-www-form-urlencoded") + } + for k, v := range r.header { + req.Header.Set(k, v) + } + if r.cookie != nil { + req.AddCookie(r.cookie) + } + if r.remote != "" { + req.RemoteAddr = r.remote + } + rec := httptest.NewRecorder() + h.ServeHTTP(rec, req) + return rec +} + +func loginForm(token string) string { return url.Values{"token": {token}}.Encode() } + +func sameOriginHeader() map[string]string { return map[string]string{"Origin": dashOrigin} } + +func bearer(token string) map[string]string { + return map[string]string{"Authorization": "Bearer " + token} +} + +// signIn logs in with the right token and returns the session cookie. +func signIn(t *testing.T, h http.Handler) *http.Cookie { + t.Helper() + rec := doDash(t, h, dashReq{method: http.MethodPost, path: "/login", header: sameOriginHeader(), body: loginForm(dashToken)}) + if rec.Code != http.StatusSeeOther || rec.Header().Get("Location") != "/" { + t.Fatalf("login: %d Location %q, want 303 /", rec.Code, rec.Header().Get("Location")) + } + for _, c := range rec.Result().Cookies() { + if c.Name == sessionCookie { + return &http.Cookie{Name: c.Name, Value: c.Value} + } + } + t.Fatal("login set no session cookie") + return nil +} + +func TestDashboardRefusalInvariant(t *testing.T) { + _, empty := newDash(t, config{}) + populated, full := newDash(t, config{}) + seedDash(t, populated) + wrongOrigin := map[string]string{"Origin": "http://evil.example"} + cases := []struct { + name string + req dashReq + code int + }{ + {"login page", dashReq{path: "/login"}, http.StatusOK}, + {"wrong token", dashReq{method: http.MethodPost, path: "/login", header: sameOriginHeader(), body: loginForm("nope")}, http.StatusUnauthorized}, + {"login without origin", dashReq{method: http.MethodPost, path: "/login", body: loginForm("nope")}, http.StatusForbidden}, + {"login cross origin", dashReq{method: http.MethodPost, path: "/login", header: wrongOrigin, body: loginForm(dashToken)}, http.StatusForbidden}, + {"overview", dashReq{path: "/"}, http.StatusSeeOther}, + {"overview range 7", dashReq{path: "/?range=7"}, http.StatusSeeOther}, + {"overview bad range", dashReq{path: "/?range=bogus"}, http.StatusSeeOther}, + {"views", dashReq{path: "/api/v1/views"}, http.StatusUnauthorized}, + {"views wrong bearer", dashReq{path: "/api/v1/views", header: bearer("nope")}, http.StatusUnauthorized}, + {"views forged cookie", dashReq{path: "/api/v1/views", cookie: &http.Cookie{Name: sessionCookie, Value: "AAAA"}}, http.StatusUnauthorized}, + {"metrics", dashReq{path: "/metrics"}, http.StatusUnauthorized}, + {"metrics wrong bearer", dashReq{path: "/metrics", header: bearer("nope")}, http.StatusUnauthorized}, + {"logout", dashReq{method: http.MethodPost, path: "/logout", header: sameOriginHeader()}, http.StatusSeeOther}, + {"unknown path", dashReq{path: "/admin"}, http.StatusNotFound}, + {"unknown static file", dashReq{path: "/static/missing.css"}, http.StatusNotFound}, + {"template is not static", dashReq{path: "/static/overview.html"}, http.StatusNotFound}, + } + for _, tc := range cases { + t.Run(tc.name, func(t *testing.T) { + a, b := doDash(t, empty, tc.req), doDash(t, full, tc.req) + if a.Code != tc.code || b.Code != tc.code { + t.Fatalf("status = %d (empty) / %d (populated), want %d", a.Code, b.Code, tc.code) + } + if a.Body.String() != b.Body.String() { + t.Fatalf("body differs between an empty and a populated store:\nempty: %q\npopulated: %q", a.Body, b.Body) + } + for _, h := range []string{"Content-Type", "Location", "Set-Cookie", "Content-Security-Policy", "Cache-Control"} { + if a.Header().Get(h) != b.Header().Get(h) { + t.Fatalf("header %s differs: %q vs %q", h, a.Header().Get(h), b.Header().Get(h)) + } + } + // Nothing from the data may appear in a refusal. + for _, leak := range []string{"2026-10-0", "1.0.0", "2.3.4", "99"} { + if strings.Contains(b.Body.String(), leak) { + t.Fatalf("refusal body contains %q: %q", leak, b.Body) + } + } + }) + } +} + +func TestDashboardLoginFlow(t *testing.T) { + _, h := newDash(t, config{}) + + page := doDash(t, h, dashReq{path: "/login"}) + if page.Code != http.StatusOK || !strings.Contains(page.Body.String(), `name="token"`) || + !strings.Contains(page.Header().Get("Content-Type"), "text/html") { + t.Fatalf("login page: %d %q", page.Code, page.Body) + } + if strings.Contains(page.Body.String(), invalidCredentials) { + t.Fatal("a fresh login page must not show the error") + } + + bad := doDash(t, h, dashReq{method: http.MethodPost, path: "/login", header: sameOriginHeader(), body: loginForm("wrong")}) + if bad.Code != http.StatusUnauthorized || !strings.Contains(bad.Body.String(), invalidCredentials) { + t.Fatalf("wrong token: %d %q", bad.Code, bad.Body) + } + if len(bad.Result().Cookies()) != 0 { + t.Fatal("a failed login must not set a cookie") + } + + ok := doDash(t, h, dashReq{method: http.MethodPost, path: "/login", header: sameOriginHeader(), body: loginForm(dashToken)}) + if ok.Code != http.StatusSeeOther || ok.Header().Get("Location") != "/" { + t.Fatalf("login: %d Location %q", ok.Code, ok.Header().Get("Location")) + } + cookies := ok.Result().Cookies() + if len(cookies) != 1 { + t.Fatalf("cookies = %d, want 1", len(cookies)) + } + c := cookies[0] + if c.Name != "gp_telemetry_session" || !c.HttpOnly || !c.Secure || c.SameSite != http.SameSiteStrictMode || + c.Path != "/" || c.MaxAge != 43200 || c.Value == "" { + t.Fatalf("cookie attributes = %+v", c) + } + + session := &http.Cookie{Name: c.Name, Value: c.Value} + home := doDash(t, h, dashReq{path: "/", cookie: session}) + if home.Code != http.StatusOK || !strings.Contains(home.Header().Get("Content-Type"), "text/html") || home.Body.Len() == 0 { + t.Fatalf("overview with session: %d", home.Code) + } + redirect := doDash(t, h, dashReq{path: "/"}) + if redirect.Code != http.StatusSeeOther || redirect.Header().Get("Location") != "/login" { + t.Fatalf("overview without session: %d Location %q", redirect.Code, redirect.Header().Get("Location")) + } + + out := doDash(t, h, dashReq{method: http.MethodPost, path: "/logout", header: sameOriginHeader(), cookie: session}) + if out.Code != http.StatusSeeOther || out.Header().Get("Location") != "/login" { + t.Fatalf("logout: %d Location %q", out.Code, out.Header().Get("Location")) + } + cleared := out.Result().Cookies() + if len(cleared) != 1 || cleared[0].Name != sessionCookie || cleared[0].MaxAge >= 0 { + t.Fatalf("logout must clear the cookie, got %+v", cleared) + } +} + +func TestDashboardOriginChecks(t *testing.T) { + cases := []struct { + name string + header map[string]string + want int + }{ + {"no origin or referer", nil, http.StatusForbidden}, + {"foreign origin", map[string]string{"Origin": "http://evil.example"}, http.StatusForbidden}, + {"null origin", map[string]string{"Origin": "null"}, http.StatusForbidden}, + {"unparsable origin", map[string]string{"Origin": "::bad"}, http.StatusForbidden}, + {"foreign referer", map[string]string{"Referer": "http://evil.example/login"}, http.StatusForbidden}, + {"same-origin origin", map[string]string{"Origin": dashOrigin}, http.StatusSeeOther}, + {"same-origin referer", map[string]string{"Referer": dashOrigin + "/login"}, http.StatusSeeOther}, + {"origin wins over referer", map[string]string{"Origin": "http://evil.example", "Referer": dashOrigin + "/login"}, http.StatusForbidden}, + } + for _, tc := range cases { + t.Run("login "+tc.name, func(t *testing.T) { + _, h := newDash(t, config{}) // a fresh login limiter per case + rec := doDash(t, h, dashReq{method: http.MethodPost, path: "/login", header: tc.header, body: loginForm(dashToken)}) + if rec.Code != tc.want { + t.Fatalf("status = %d, want %d", rec.Code, tc.want) + } + }) + t.Run("logout "+tc.name, func(t *testing.T) { + _, h := newDash(t, config{}) + rec := doDash(t, h, dashReq{method: http.MethodPost, path: "/logout", header: tc.header}) + if rec.Code != tc.want { + t.Fatalf("status = %d, want %d", rec.Code, tc.want) + } + }) + } +} + +func TestDashboardRotatingTheTokenInvalidatesSessionsAndKeepsData(t *testing.T) { + s, h := newDash(t, config{dashboardToken: "old-token"}) + seedDash(t, s) + login := doDash(t, h, dashReq{method: http.MethodPost, path: "/login", header: sameOriginHeader(), body: loginForm("old-token")}) + if login.Code != http.StatusSeeOther { + t.Fatalf("login with the old token: %d", login.Code) + } + old := &http.Cookie{Name: sessionCookie, Value: login.Result().Cookies()[0].Value} + if rec := doDash(t, h, dashReq{path: "/api/v1/views", cookie: old}); rec.Code != http.StatusOK { + t.Fatalf("old cookie before rotation: %d", rec.Code) + } + + // Same store, new token. + rotated := newServerWithStore(config{dashboardToken: "new-token"}, s.store) + rotated.now = s.now + h2 := rotated.dashboardRoutes() + if rec := doDash(t, h2, dashReq{path: "/", cookie: old}); rec.Code != http.StatusSeeOther { + t.Fatalf("old cookie after rotation, overview: %d, want 303", rec.Code) + } + if rec := doDash(t, h2, dashReq{path: "/api/v1/views", cookie: old}); rec.Code != http.StatusUnauthorized { + t.Fatalf("old cookie after rotation, views: %d, want 401", rec.Code) + } + if rec := doDash(t, h2, dashReq{path: "/api/v1/views", header: bearer("old-token")}); rec.Code != http.StatusUnauthorized { + t.Fatalf("old bearer after rotation: %d, want 401", rec.Code) + } + rec := doDash(t, h2, dashReq{path: "/api/v1/views", header: bearer("new-token")}) + if rec.Code != http.StatusOK { + t.Fatalf("new bearer: %d", rec.Code) + } + var v Views + if err := json.Unmarshal(rec.Body.Bytes(), &v); err != nil { + t.Fatal(err) + } + if v.Empty || v.Basic == nil || v.Basic.LatestDay.ServersTotal != 10 { + t.Fatalf("data lost after rotation: %+v", v) + } +} +func TestDashboardRejectsExpiredTamperedAndMalformedCookies(t *testing.T) { + s, h := newDash(t, config{}) + now := dashNow + s.now = func() time.Time { return now } + good := signIn(t, h) + if rec := doDash(t, h, dashReq{path: "/", cookie: good}); rec.Code != http.StatusOK { + t.Fatalf("fresh cookie: %d", rec.Code) + } + // Change a character inside the MAC, away from its last character, which + // carries base64 padding bits that do not affect the decoded bytes. + flip := func(v string) string { + i := len(v) - 5 + c := "A" + if v[i:i+1] == "A" { + c = "B" + } + return v[:i] + c + v[i+1:] + } + for name, value := range map[string]string{ + "tampered mac": flip(good.Value), + "tampered expiry": "9" + good.Value, + "no separator": strings.ReplaceAll(good.Value, ".", ""), + "not base64": "!!!", + "too short": "AAAA", + "empty": "", + "truncated": good.Value[:len(good.Value)-4], + "extra trailing": good.Value + "AAAA", + } { + rec := doDash(t, h, dashReq{path: "/", cookie: &http.Cookie{Name: sessionCookie, Value: value}}) + if rec.Code != http.StatusSeeOther { + t.Errorf("%s: status = %d, want 303", name, rec.Code) + } + } + now = now.Add(12*time.Hour - time.Second) + if rec := doDash(t, h, dashReq{path: "/", cookie: good}); rec.Code != http.StatusOK { + t.Fatalf("cookie just before expiry: %d", rec.Code) + } + now = now.Add(time.Second) + if rec := doDash(t, h, dashReq{path: "/", cookie: good}); rec.Code != http.StatusSeeOther { + t.Fatalf("expired cookie: %d, want 303", rec.Code) + } +} + +func TestDashboardSecurityHeadersOnEveryResponse(t *testing.T) { + _, h := newDash(t, config{}) + session := signIn(t, h) + want := map[string]string{ + "Content-Security-Policy": "default-src 'none'; style-src 'self'; img-src 'self' data:; form-action 'self'; frame-ancestors 'none'; base-uri 'none'", + "X-Content-Type-Options": "nosniff", + "Referrer-Policy": "no-referrer", + "Cache-Control": "no-store", + } + for name, r := range map[string]dashReq{ + "login page": {path: "/login"}, + "failed login": {method: http.MethodPost, path: "/login", header: sameOriginHeader(), body: loginForm("x")}, + "forbidden login": {method: http.MethodPost, path: "/login"}, + "redirect": {path: "/"}, + "overview": {path: "/", cookie: session}, + "views": {path: "/api/v1/views", cookie: session}, + "unauthorized": {path: "/api/v1/views"}, + "metrics": {path: "/metrics", header: bearer(dashToken)}, + "metrics refused": {path: "/metrics"}, + "method": {method: http.MethodPost, path: "/metrics"}, + "static": {path: "/static/style.css"}, + "static missing": {path: "/static/nope.css"}, + "static traversal": {path: "/static/..%2Flogin.html"}, + "not found": {path: "/nope"}, + "logout": {method: http.MethodPost, path: "/logout", header: sameOriginHeader()}, + } { + rec := doDash(t, h, r) + for k, v := range want { + if got := rec.Header().Get(k); got != v { + t.Errorf("%s: header %s = %q, want %q", name, k, got, v) + } + } + } +} + +func TestDashboardLoginLimitIsFivePerMinutePerSource(t *testing.T) { + s, h := newDash(t, config{}) + attempt := func(remote string) *httptest.ResponseRecorder { + return doDash(t, h, dashReq{method: http.MethodPost, path: "/login", header: sameOriginHeader(), body: loginForm("wrong"), remote: remote}) + } + for i := range 5 { + if rec := attempt("192.0.2.1:1000"); rec.Code != http.StatusUnauthorized { + t.Fatalf("attempt %d: status = %d, want 401", i+1, rec.Code) + } + } + limited := attempt("192.0.2.1:2000") + if limited.Code != http.StatusTooManyRequests || limited.Header().Get("Retry-After") == "" { + t.Fatalf("sixth attempt: %d Retry-After %q, want 429 with Retry-After", limited.Code, limited.Header().Get("Retry-After")) + } + // The limit also stops a correct token. + right := doDash(t, h, dashReq{method: http.MethodPost, path: "/login", header: sameOriginHeader(), body: loginForm(dashToken), remote: "192.0.2.1:3000"}) + if right.Code != http.StatusTooManyRequests { + t.Fatalf("correct token while limited: %d, want 429", right.Code) + } + if rec := attempt("192.0.2.9:1000"); rec.Code != http.StatusUnauthorized { + t.Fatalf("another source: %d, want 401", rec.Code) + } + if got := counterValue(t, s, "gameplane_telemetry_rate_limited_total", "route", "login"); got != 2 { + t.Fatalf("rate_limited_total{route=login} = %v, want 2", got) + } +} + +func TestDashboardLoginLimitUsesForwardedSourceFromTrustedProxy(t *testing.T) { + _, h := newDash(t, config{trustedProxyCIDRs: []netip.Prefix{netip.MustParsePrefix("10.0.0.0/8")}}) + attempt := func(xff string) int { + return doDash(t, h, dashReq{ + method: http.MethodPost, path: "/login", remote: "10.0.0.1:1000", + header: map[string]string{"Origin": dashOrigin, "X-Forwarded-For": xff}, body: loginForm("wrong"), + }).Code + } + for range 5 { + if code := attempt("203.0.113.5"); code != http.StatusUnauthorized { + t.Fatalf("status = %d, want 401", code) + } + } + if code := attempt("203.0.113.5"); code != http.StatusTooManyRequests { + t.Fatalf("sixth attempt from the same client: %d, want 429", code) + } + if code := attempt("203.0.113.6"); code != http.StatusUnauthorized { + t.Fatalf("another client behind the proxy: %d, want 401", code) + } +} + +func TestDashboardViewsEndpoint(t *testing.T) { + s, h := newDash(t, config{}) + seedDash(t, s) + session := signIn(t, h) + + for name, r := range map[string]dashReq{ + "bearer": {path: "/api/v1/views", header: bearer(dashToken)}, + "cookie": {path: "/api/v1/views", cookie: session}, + } { + rec := doDash(t, h, r) + if rec.Code != http.StatusOK || rec.Header().Get("Content-Type") != "application/json" { + t.Fatalf("%s: %d %q", name, rec.Code, rec.Header().Get("Content-Type")) + } + var v Views + if err := json.Unmarshal(rec.Body.Bytes(), &v); err != nil { + t.Fatalf("%s: %v", name, err) + } + if v.Range != 30 || v.AsOf != "2026-10-06" || v.Empty || v.Basic == nil { + t.Fatalf("%s: %+v", name, v) + } + if want := (LatestDayRow{ServersTotal: 10, TemplatesTotal: 25}); v.Basic.LatestDay != want { + t.Fatalf("%s: latestDay = %+v, want %+v", name, v.Basic.LatestDay, want) + } + var raw map[string]json.RawMessage + if err := json.Unmarshal(rec.Body.Bytes(), &raw); err != nil { + t.Fatal(err) + } + if string(raw["extended"]) != "null" { + t.Fatalf("%s: extended = %s, want null", name, raw["extended"]) + } + var basic map[string]json.RawMessage + if err := json.Unmarshal(raw["basic"], &basic); err != nil { + t.Fatal(err) + } + for _, key := range []string{"reportsPerDay", "versions", "fleet", "latestDay"} { + if _, ok := basic[key]; !ok { + t.Errorf("%s: basic has no %q key", name, key) + } + } + } + + ranges := map[string]int{"": 30, "?range=7": 7, "?range=90": 90, "?range=365": 365, "?range=abc": 30, "?range=8": 30} + for query, want := range ranges { + rec := doDash(t, h, dashReq{path: "/api/v1/views" + query, header: bearer(dashToken)}) + var v Views + if err := json.Unmarshal(rec.Body.Bytes(), &v); err != nil || v.Range != want { + t.Errorf("query %q: range = %d (err %v), want %d", query, v.Range, err, want) + } + } + + refused := doDash(t, h, dashReq{path: "/api/v1/views"}) + if refused.Code != http.StatusUnauthorized || refused.Body.String() != `{"error":"unauthorized"}` || + refused.Header().Get("Content-Type") != "application/json" { + t.Fatalf("unauthenticated views: %d %q", refused.Code, refused.Body) + } +} + +func TestDashboardViewsEmptyStore(t *testing.T) { + _, h := newDash(t, config{}) + rec := doDash(t, h, dashReq{path: "/api/v1/views?range=7", header: bearer(dashToken)}) + var raw map[string]json.RawMessage + if err := json.Unmarshal(rec.Body.Bytes(), &raw); err != nil { + t.Fatal(err) + } + if string(raw["empty"]) != "true" || string(raw["basic"]) != "null" || string(raw["extended"]) != "null" { + t.Fatalf("empty store view = %s", rec.Body) + } + session := signIn(t, h) + if page := doDash(t, h, dashReq{path: "/", cookie: session}); page.Code != http.StatusOK { + t.Fatalf("overview on an empty store: %d", page.Code) + } +} + +func TestDashboardMetricsAcceptsBearerOnly(t *testing.T) { + s, h := newDash(t, config{}) + session := signIn(t, h) + s.reports.WithLabelValues("1.0.0").Inc() + for name, r := range map[string]dashReq{ + "no credentials": {path: "/metrics"}, + "wrong bearer": {path: "/metrics", header: bearer("nope")}, + "basic scheme": {path: "/metrics", header: map[string]string{"Authorization": "Basic " + dashToken}}, + "bare token": {path: "/metrics", header: map[string]string{"Authorization": dashToken}}, + "cookie only": {path: "/metrics", cookie: session}, + } { + rec := doDash(t, h, r) + if rec.Code != http.StatusUnauthorized || rec.Body.String() != `{"error":"unauthorized"}` { + t.Errorf("%s: %d %q, want 401 unauthorized", name, rec.Code, rec.Body) + } + } + rec := doDash(t, h, dashReq{path: "/metrics", header: bearer(dashToken)}) + if rec.Code != http.StatusOK { + t.Fatalf("with the bearer token: %d", rec.Code) + } + for _, series := range []string{ + `gameplane_telemetry_reports_total{version="1.0.0"} 1`, + `gameplane_telemetry_rate_limited_total{route="ingest"} 0`, + `gameplane_telemetry_rate_limited_total{route="login"} 0`, + } { + if !strings.Contains(rec.Body.String(), series) { + t.Errorf("metrics lack %s", series) + } + } + if post := doDash(t, h, dashReq{method: http.MethodPost, path: "/metrics", header: bearer(dashToken)}); post.Code != http.StatusMethodNotAllowed { + t.Fatalf("POST /metrics: %d, want 405", post.Code) + } +} + +func TestDashboardWithoutTokenFailsClosed(t *testing.T) { + s := newServer(config{}) // no dashboard token + s.now = func() time.Time { return dashNow } + h := s.dashboardRoutes() + for name, r := range map[string]dashReq{ + "empty bearer": {path: "/api/v1/views", header: map[string]string{"Authorization": "Bearer "}}, + "empty metrics bearer": {path: "/metrics", header: map[string]string{"Authorization": "Bearer "}}, + } { + if rec := doDash(t, h, r); rec.Code != http.StatusUnauthorized { + t.Errorf("%s: %d, want 401", name, rec.Code) + } + } + login := doDash(t, h, dashReq{method: http.MethodPost, path: "/login", header: sameOriginHeader(), body: loginForm("")}) + if login.Code != http.StatusUnauthorized || len(login.Result().Cookies()) != 0 { + t.Fatalf("login with an empty token: %d, want 401 and no cookie", login.Code) + } + // A cookie signed with the key of the empty token is refused. + forger := &dashboard{s: s, key: sessionKey("")} + forged := &http.Cookie{Name: sessionCookie, Value: forger.newSessionValue(dashNow)} + if rec := doDash(t, h, dashReq{path: "/", cookie: forged}); rec.Code != http.StatusSeeOther { + t.Fatalf("forged cookie: %d, want 303", rec.Code) + } + if rec := doDash(t, h, dashReq{path: "/api/v1/views", cookie: forged}); rec.Code != http.StatusUnauthorized { + t.Fatalf("forged cookie, views: %d, want 401", rec.Code) + } +} + +func TestDashboardStatic(t *testing.T) { + _, h := newDash(t, config{}) + css := doDash(t, h, dashReq{path: "/static/style.css"}) + if css.Code != http.StatusOK || !strings.HasPrefix(css.Header().Get("Content-Type"), "text/css") || css.Body.Len() == 0 { + t.Fatalf("style.css: %d %q", css.Code, css.Header().Get("Content-Type")) + } + for _, path := range []string{"/static/", "/static/login.html", "/static/layout.html", "/static/nope.css", "/static/..%2Flogin.html"} { + if rec := doDash(t, h, dashReq{path: path}); rec.Code != http.StatusNotFound { + t.Errorf("%s: %d, want 404", path, rec.Code) + } + } +} + +func TestDashboardStoreFailureIs500(t *testing.T) { + s, h := newDash(t, config{}) + session := signIn(t, h) + if _, err := s.store.db.ExecContext(context.Background(), "DROP TABLE daily_basic"); err != nil { + t.Fatal(err) + } + for name, r := range map[string]dashReq{ + "overview": {path: "/", cookie: session}, + "views": {path: "/api/v1/views", header: bearer(dashToken)}, + } { + if rec := doDash(t, h, r); rec.Code != http.StatusInternalServerError { + t.Errorf("%s with a broken store: %d, want 500", name, rec.Code) + } + } +} diff --git a/telemetry-receiver/ingest.go b/telemetry-receiver/ingest.go new file mode 100644 index 000000000..94388178e --- /dev/null +++ b/telemetry-receiver/ingest.go @@ -0,0 +1,144 @@ +package main + +import ( + "context" + "crypto/subtle" + "database/sql" + "errors" + "fmt" + "io" + "log/slog" + "net/http" + + "github.com/ValgulNecron/gameplane/telemetryschema" +) + +const ( + // fleetCap is the stored fleet-size value for "more than 1000": exact + // counts 0-1000 are kept, anything larger shares this row (research R4). + fleetCap = 1001 + // maxSummedCount clamps one report's servers/templates contribution to + // the daily sums, so a hostile count cannot overflow the integer column. + maxSummedCount = 1_000_000 +) + +// Fleet histogram metric names stored in daily_fleet.metric. +const ( + fleetMetricServers = "servers" + fleetMetricTemplates = "templates" +) + +func (s *server) ingest(w http.ResponseWriter, req *http.Request) { + if s.cfg.authToken != "" { + got := req.Header.Get("Authorization") + if subtle.ConstantTimeCompare([]byte(got), []byte(s.cfg.authToken)) != 1 { + http.Error(w, "unauthorized", http.StatusUnauthorized) + return + } + } + // Read the whole body first so the size limit applies to all of it, not + // just to the part a JSON decoder happens to consume. + body, err := io.ReadAll(http.MaxBytesReader(w, req.Body, maxBody)) + if err != nil { + var tooBig *http.MaxBytesError + if errors.As(err, &tooBig) { + http.Error(w, "body too large", http.StatusRequestEntityTooLarge) + return + } + http.Error(w, "invalid payload", http.StatusBadRequest) + return + } + p, err := decodePayload(body) + if err != nil { + http.Error(w, "invalid payload", http.StatusBadRequest) + return + } + if p.Servers < 0 || p.Templates < 0 { + http.Error(w, "invalid payload", http.StatusBadRequest) + return + } + // The per-source daily limit counts accepted reports only, so it sits + // after validation: a malformed request never uses up a source's budget. + // The address is used for the counter and then dropped (FR-014). + if !s.daily.take(sourceIP(req, s.cfg.trustedProxyCIDRs), s.now()) { + s.rateLimited.WithLabelValues(routeIngest).Inc() + http.Error(w, "rate limit exceeded", http.StatusTooManyRequests) + return + } + version := s.versionLabel(p.Version) + if err := s.store.recordBasic(req.Context(), dayString(s.now()), version, p.Servers, p.Templates); err != nil { + slog.Error("telemetry report not stored", "err", err) + http.Error(w, "internal error", http.StatusInternalServerError) + return + } + + slog.Info("telemetry report", + "version", version, "servers", p.Servers, "templates", p.Templates) + s.reports.WithLabelValues(version).Inc() + s.servers.Observe(float64(p.Servers)) + s.templates.Observe(float64(p.Templates)) + w.WriteHeader(http.StatusNoContent) +} + +// versionLabel retains the first 128 valid versions for this process. +// Overflow reports still count, but share one label. Never evict entries: +// CounterVec would otherwise retain every old label and keep growing. +func (s *server) versionLabel(version string) string { + if !telemetryschema.VersionRE.MatchString(version) || version == "invalid" { + return "invalid" + } + if version == "other" { + return "other" + } + s.versionMu.Lock() + defer s.versionMu.Unlock() + if _, ok := s.versions[version]; ok { + return version + } + if len(s.versions) >= maxVersionLabels { + return "other" + } + s.versions[version] = struct{}{} + return version +} + +// recordBasic writes one accepted basic report into the aggregates for day +// in a single transaction: daily_basic, daily_version, daily_fleet (two +// rows) and meta.reports_total. version must already be a bounded label +// (versionLabel). Nothing identifying the report or its source is stored. +func (s *store) recordBasic(ctx context.Context, day, version string, servers, templates int) error { + return s.writeTx(ctx, func(tx *sql.Tx) error { + if _, err := tx.ExecContext(ctx, + `INSERT INTO daily_basic (day, reports, servers_sum, templates_sum) VALUES (?, 1, ?, ?) + ON CONFLICT (day) DO UPDATE SET + reports = reports + 1, + servers_sum = servers_sum + excluded.servers_sum, + templates_sum = templates_sum + excluded.templates_sum`, + day, min(servers, maxSummedCount), min(templates, maxSummedCount)); err != nil { + return fmt.Errorf("record daily_basic: %w", err) + } + if _, err := tx.ExecContext(ctx, + `INSERT INTO daily_version (day, version, reports) VALUES (?, ?, 1) + ON CONFLICT (day, version) DO UPDATE SET reports = reports + 1`, + day, version); err != nil { + return fmt.Errorf("record daily_version: %w", err) + } + for _, f := range []struct { + metric string + n int + }{{fleetMetricServers, servers}, {fleetMetricTemplates, templates}} { + if _, err := tx.ExecContext(ctx, + `INSERT INTO daily_fleet (day, metric, value, reports) VALUES (?, ?, ?, 1) + ON CONFLICT (day, metric, value) DO UPDATE SET reports = reports + 1`, + day, f.metric, min(f.n, fleetCap)); err != nil { + return fmt.Errorf("record daily_fleet %s: %w", f.metric, err) + } + } + if _, err := tx.ExecContext(ctx, + `UPDATE meta SET value = CAST(CAST(value AS INTEGER) + 1 AS TEXT) WHERE key = ?`, + metaReportsTotal); err != nil { + return fmt.Errorf("record reports_total: %w", err) + } + return nil + }) +} diff --git a/telemetry-receiver/ingest_test.go b/telemetry-receiver/ingest_test.go new file mode 100644 index 000000000..73fef6de4 --- /dev/null +++ b/telemetry-receiver/ingest_test.go @@ -0,0 +1,168 @@ +package main + +import ( + "context" + "database/sql" + "errors" + "net/http" + "testing" + "time" +) + +func TestIngestWritesBasicAggregatesInOneTransaction(t *testing.T) { + s := newServer(config{}) + now := time.Date(2026, 10, 7, 10, 0, 0, 0, time.UTC) + s.now = func() time.Time { return now } + for _, body := range []string{ + `{"version":"1.0.0","servers":2,"templates":5}`, + `{"version":"1.0.0","servers":0,"templates":300}`, + `{"version":"2.0.0","servers":5000,"templates":5}`, + `{"version":"","servers":1,"templates":1}`, + } { + if code := ingestFrom(t, s, "192.0.2.1:1000", body); code != http.StatusNoContent { + t.Fatalf("%s: status = %d, want 204", body, code) + } + } + now = now.Add(24 * time.Hour) + if code := ingestFrom(t, s, "192.0.2.1:1000", `{"version":"1.0.0","servers":3,"templates":3}`); code != http.StatusNoContent { + t.Fatalf("next day: status = %d", code) + } + + st := s.store + day := "2026-10-07" + if got := countRows(t, st, `SELECT reports FROM daily_basic WHERE day = ?`, day); got != 4 { + t.Errorf("daily_basic.reports = %d, want 4", got) + } + if got := countRows(t, st, `SELECT servers_sum FROM daily_basic WHERE day = ?`, day); got != 2+0+5000+1 { + t.Errorf("daily_basic.servers_sum = %d, want 5003", got) + } + if got := countRows(t, st, `SELECT templates_sum FROM daily_basic WHERE day = ?`, day); got != 5+300+5+1 { + t.Errorf("daily_basic.templates_sum = %d, want 311", got) + } + if got := countRows(t, st, `SELECT duplicates FROM daily_basic WHERE day = ?`, day); got != 0 { + t.Errorf("daily_basic.duplicates = %d, want 0", got) + } + for version, want := range map[string]int{"1.0.0": 2, "2.0.0": 1, "invalid": 1} { + if got := countRows(t, st, `SELECT reports FROM daily_version WHERE day = ? AND version = ?`, day, version); got != want { + t.Errorf("daily_version[%s] = %d, want %d", version, got, want) + } + } + if got := countRows(t, st, `SELECT count(*) FROM daily_version WHERE day = ?`, day); got != 3 { + t.Errorf("daily_version rows = %d, want 3", got) + } + // Fleet values are exact up to 1000 and 5000 shares the 1001 row. + for _, f := range []struct { + metric string + value int + want int + }{ + {"servers", 0, 1}, {"servers", 1, 1}, {"servers", 2, 1}, {"servers", 1001, 1}, + {"templates", 5, 2}, {"templates", 300, 1}, {"templates", 1, 1}, + } { + got := countRows(t, st, `SELECT reports FROM daily_fleet WHERE day = ? AND metric = ? AND value = ?`, day, f.metric, f.value) + if got != f.want { + t.Errorf("daily_fleet[%s=%d] = %d, want %d", f.metric, f.value, got, f.want) + } + } + if got := countRows(t, st, `SELECT count(*) FROM daily_fleet WHERE value > 1001`); got != 0 { + t.Errorf("%d fleet rows above the 1001 cap", got) + } + // The second day has its own rows and the total counts every report. + if got := countRows(t, st, `SELECT reports FROM daily_basic WHERE day = ?`, "2026-10-08"); got != 1 { + t.Errorf("next day daily_basic.reports = %d, want 1", got) + } + if got := mustMeta(t, st, "reports_total"); got != "5" { + t.Errorf("reports_total = %s, want 5", got) + } + // Nothing extended or identifying was written. + for _, table := range []string{"daily_ext", "daily_dim", "daily_game", "activity"} { + if got := countRows(t, st, "SELECT count(*) FROM "+table); got != 0 { + t.Errorf("%s has %d rows after basic reports, want 0", table, got) + } + } +} + +func TestIngestClampsSummedCounts(t *testing.T) { + s := newServer(config{}) + s.now = func() time.Time { return time.Date(2026, 10, 7, 10, 0, 0, 0, time.UTC) } + for range 2 { + if code := ingestFrom(t, s, "192.0.2.1:1000", `{"version":"1.0.0","servers":5000000,"templates":7000000}`); code != http.StatusNoContent { + t.Fatalf("status = %d, want 204", code) + } + } + if got := countRows(t, s.store, `SELECT servers_sum FROM daily_basic`); got != 2*maxSummedCount { + t.Errorf("servers_sum = %d, want %d", got, 2*maxSummedCount) + } + if got := countRows(t, s.store, `SELECT templates_sum FROM daily_basic`); got != 2*maxSummedCount { + t.Errorf("templates_sum = %d, want %d", got, 2*maxSummedCount) + } + if got := countRows(t, s.store, `SELECT reports FROM daily_fleet WHERE metric = 'servers' AND value = 1001`); got != 2 { + t.Errorf("fleet 1001 row = %d, want 2", got) + } +} + +func TestIngestStoreFailureIs500AndCountsNothing(t *testing.T) { + s := newServer(config{}) + if err := s.store.close(); err != nil { + t.Fatal(err) + } + if code := ingestFrom(t, s, "192.0.2.1:1000", okReport); code != http.StatusInternalServerError { + t.Fatalf("status = %d, want 500", code) + } + if got := counterValue(t, s, "gameplane_telemetry_reports_total", "version", "1.0.0"); got != 0 { + t.Fatalf("a report that was not stored was counted: %v", got) + } +} + +func TestRecordBasicRollsBackWhenAnyStatementFails(t *testing.T) { + st := openTestStore(t, config{}) + ctx := context.Background() + if _, err := st.db.ExecContext(ctx, "DROP TABLE daily_fleet"); err != nil { + t.Fatal(err) + } + if err := st.recordBasic(ctx, "2026-10-07", "1.0.0", 1, 1); err == nil { + t.Fatal("recordBasic with a missing table: want an error") + } + for _, q := range []string{`SELECT count(*) FROM daily_basic`, `SELECT count(*) FROM daily_version`} { + if got := countRows(t, st, q); got != 0 { + t.Errorf("%s = %d after a failed write, want 0 (rolled back)", q, got) + } + } + if got := mustMeta(t, st, "reports_total"); got != "0" { + t.Errorf("reports_total = %s after a failed write, want 0", got) + } +} + +func TestWriteTxCommitsOnSuccessAndRollsBackOnError(t *testing.T) { + st := openTestStore(t, config{}) + ctx := context.Background() + insert := func(tx *sql.Tx, key string) error { + _, err := tx.ExecContext(ctx, `INSERT INTO meta (key, value) VALUES (?, 'v')`, key) + return err + } + if err := st.writeTx(ctx, func(tx *sql.Tx) error { return insert(tx, "kept") }); err != nil { + t.Fatalf("writeTx: %v", err) + } + boom := errors.New("boom") + err := st.writeTx(ctx, func(tx *sql.Tx) error { + if err := insert(tx, "dropped"); err != nil { + return err + } + return boom + }) + if !errors.Is(err, boom) { + t.Fatalf("writeTx error = %v, want it to wrap boom", err) + } + if got := countRows(t, st, `SELECT count(*) FROM meta WHERE key = 'kept'`); got != 1 { + t.Errorf("committed row count = %d, want 1", got) + } + if got := countRows(t, st, `SELECT count(*) FROM meta WHERE key = 'dropped'`); got != 0 { + t.Errorf("rolled-back row count = %d, want 0", got) + } + if err := st.close(); err != nil { + t.Fatal(err) + } + if err := st.writeTx(ctx, func(*sql.Tx) error { return nil }); err == nil { + t.Fatal("writeTx on a closed store: want an error") + } +} diff --git a/telemetry-receiver/lifecycle_test.go b/telemetry-receiver/lifecycle_test.go new file mode 100644 index 000000000..da78daa84 --- /dev/null +++ b/telemetry-receiver/lifecycle_test.go @@ -0,0 +1,207 @@ +package main + +import ( + "context" + "reflect" + "testing" + "time" +) + +// dailyTables are the day-keyed tables the retention sweep covers. +var dailyTables = []string{"daily_basic", "daily_version", "daily_fleet", "daily_ext", "daily_dim", "daily_game"} + +var lifecycleNow = time.Date(2026, 10, 7, 3, 30, 0, 0, time.UTC) // yesterday is 2026-10-06 + +func TestPendingDays(t *testing.T) { + cases := []struct { + name string + through string + want []string + }{ + {"never run gives yesterday only", "", []string{"2026-10-06"}}, + {"unparsable marker gives yesterday only", "garbage", []string{"2026-10-06"}}, + {"already through yesterday", "2026-10-06", nil}, + {"marker in the future", "2026-12-01", nil}, + {"one day behind", "2026-10-05", []string{"2026-10-06"}}, + {"three days behind", "2026-10-03", []string{"2026-10-04", "2026-10-05", "2026-10-06"}}, + } + for _, tc := range cases { + t.Run(tc.name, func(t *testing.T) { + if got := pendingDays(tc.through, lifecycleNow); !reflect.DeepEqual(got, tc.want) { + t.Fatalf("pendingDays(%q) = %v, want %v", tc.through, got, tc.want) + } + }) + } + long := pendingDays("2000-01-01", lifecycleNow) + if len(long) != maxRolloverCatchup || long[len(long)-1] != "2026-10-06" { + t.Fatalf("a long outage returned %d days ending %s, want %d ending 2026-10-06", + len(long), long[len(long)-1], maxRolloverCatchup) + } +} + +// seedAllDaily puts one row in every daily_* table for day, plus an +// activity record that the retention sweep must not touch. +func seedAllDaily(t *testing.T, st *store, day string) { + t.Helper() + ctx := context.Background() + for _, q := range []string{ + `INSERT INTO daily_basic (day, reports) VALUES (?, 1)`, + `INSERT INTO daily_version (day, version, reports) VALUES (?, '1.0.0', 1)`, + `INSERT INTO daily_fleet (day, metric, value, reports) VALUES (?, 'servers', 1, 1)`, + `INSERT INTO daily_ext (day, ext_reports) VALUES (?, 1)`, + `INSERT INTO daily_dim (day, dim, value, installs) VALUES (?, 'k8s', '1.31', 1)`, + `INSERT INTO daily_game (day, module, installs, servers) VALUES (?, 'custom', 1, 1)`, + } { + if _, err := st.db.ExecContext(ctx, q, day); err != nil { + t.Fatalf("seed %s: %v", q, err) + } + } +} + +func dailyRows(t *testing.T, st *store, day string) int { + t.Helper() + total := 0 + for _, table := range dailyTables { + total += countRows(t, st, "SELECT count(*) FROM "+table+" WHERE day = ?", day) + } + return total +} + +func TestLifecycleDeletesDailyRowsOlderThanRetention(t *testing.T) { + st := openTestStore(t, config{}) + ctx := context.Background() + // With retention 365 and today 2026-10-07 the cutoff is 2025-10-07: + // that day is kept, the day before it is deleted. + seedAllDaily(t, st, "2025-10-06") + seedAllDaily(t, st, "2025-10-07") + seedAllDaily(t, st, "2026-10-06") + if _, err := st.db.ExecContext(ctx, + `INSERT INTO activity (id_hmac, key_fp, first_seen, last_seen, last_sent_at, last_version) + VALUES ('h', 'k', '2020-01-01', '2020-01-02', '2020-01-02T00:00:00Z', '1.0.0')`); err != nil { + t.Fatal(err) + } + if err := st.lifecycleOnce(ctx, lifecycleNow, 365); err != nil { + t.Fatalf("lifecycleOnce: %v", err) + } + if got := dailyRows(t, st, "2025-10-06"); got != 0 { + t.Errorf("rows older than the retention remain: %d", got) + } + if got := dailyRows(t, st, "2025-10-07"); got != len(dailyTables) { + t.Errorf("rows on the cutoff day = %d, want %d", got, len(dailyTables)) + } + if got := dailyRows(t, st, "2026-10-06"); got != len(dailyTables) { + t.Errorf("recent rows = %d, want %d", got, len(dailyTables)) + } + if got := countRows(t, st, `SELECT count(*) FROM activity`); got != 1 { + t.Errorf("the retention sweep touched activity: %d rows", got) + } + if got := mustMeta(t, st, "reports_total"); got != "0" { + t.Errorf("the sweep changed reports_total: %s", got) + } +} + +func TestLifecycleIsIdempotentAndResumesFromRolloverMarker(t *testing.T) { + st := openTestStore(t, config{}) + ctx := context.Background() + if _, ok, err := st.metaGet(ctx, "rollover_through"); err != nil || ok { + t.Fatalf("rollover_through before the first run: ok=%v err=%v, want unset", ok, err) + } + seedAllDaily(t, st, "2026-10-06") + for range 3 { + if err := st.lifecycleOnce(ctx, lifecycleNow, 365); err != nil { + t.Fatal(err) + } + if got := mustMeta(t, st, "rollover_through"); got != "2026-10-06" { + t.Fatalf("rollover_through = %s, want 2026-10-06", got) + } + if got := dailyRows(t, st, "2026-10-06"); got != len(dailyTables) { + t.Fatalf("a repeated run changed the data: %d rows", got) + } + } + // A later run resumes from the marker and advances it. + if err := st.lifecycleOnce(ctx, lifecycleNow.Add(48*time.Hour), 365); err != nil { + t.Fatal(err) + } + if got := mustMeta(t, st, "rollover_through"); got != "2026-10-08" { + t.Fatalf("rollover_through = %s, want 2026-10-08", got) + } + // The marker never moves backwards, e.g. after a clock correction. + if err := st.lifecycleOnce(ctx, lifecycleNow, 365); err != nil { + t.Fatal(err) + } + if got := mustMeta(t, st, "rollover_through"); got != "2026-10-08" { + t.Fatalf("rollover_through moved back to %s", got) + } +} + +func TestLifecycleWithoutRetentionDeletesNothing(t *testing.T) { + st := openTestStore(t, config{}) + ctx := context.Background() + seedAllDaily(t, st, "2001-01-01") + for _, retention := range []int{0, -1} { + if err := st.lifecycleOnce(ctx, lifecycleNow, retention); err != nil { + t.Fatal(err) + } + if got := dailyRows(t, st, "2001-01-01"); got != len(dailyTables) { + t.Fatalf("retention %d deleted rows: %d left", retention, got) + } + } + if got := mustMeta(t, st, "rollover_through"); got != "2026-10-06" { + t.Fatalf("rollover_through = %s, want 2026-10-06", got) + } +} + +func TestLifecycleFailsOnClosedStore(t *testing.T) { + st := openTestStore(t, config{}) + if err := st.close(); err != nil { + t.Fatal(err) + } + if err := st.lifecycleOnce(context.Background(), lifecycleNow, 365); err == nil { + t.Fatal("lifecycleOnce on a closed store: want an error") + } +} + +func TestRunLifecycleRunsImmediatelyAndStopsOnCancel(t *testing.T) { + st := openTestStore(t, config{}) + seedAllDaily(t, st, "2020-01-01") + ctx, cancel := context.WithCancel(context.Background()) + done := make(chan struct{}) + go func() { + defer close(done) + st.runLifecycle(ctx, 365, func() time.Time { return lifecycleNow }) + }() + deadline := time.Now().Add(5 * time.Second) + for dailyRows(t, st, "2020-01-01") != 0 { + if time.Now().After(deadline) { + cancel() + t.Fatal("the first lifecycle pass did not run") + } + time.Sleep(10 * time.Millisecond) + } + cancel() + select { + case <-done: + case <-time.After(5 * time.Second): + t.Fatal("runLifecycle did not stop after the context was cancelled") + } +} + +func TestRunLifecycleLogsFailuresAndKeepsGoing(t *testing.T) { + st := openTestStore(t, config{}) + if err := st.close(); err != nil { + t.Fatal(err) + } + ctx, cancel := context.WithCancel(context.Background()) + done := make(chan struct{}) + go func() { + defer close(done) + st.runLifecycle(ctx, 365, func() time.Time { return lifecycleNow }) + }() + time.Sleep(50 * time.Millisecond) + cancel() + select { + case <-done: + case <-time.After(5 * time.Second): + t.Fatal("runLifecycle did not stop after a failed pass") + } +} diff --git a/telemetry-receiver/main.go b/telemetry-receiver/main.go index d2735fac7..0b796e232 100644 --- a/telemetry-receiver/main.go +++ b/telemetry-receiver/main.go @@ -14,7 +14,6 @@ package main import ( "context" - "crypto/subtle" "errors" "fmt" "io" @@ -31,7 +30,6 @@ import ( "github.com/ValgulNecron/gameplane/telemetryschema" "github.com/prometheus/client_golang/prometheus" - "github.com/prometheus/client_golang/prometheus/promhttp" ) // Version is set at build time via -ldflags "-X main.Version=...". @@ -49,6 +47,12 @@ const ( idleTimeout = 120 * time.Second ) +// Route label values of gameplane_telemetry_rate_limited_total. +const ( + routeIngest = "ingest" + routeLogin = "login" +) + // maxVersionLabels bounds how many different valid version labels are // retained; telemetryschema.VersionRE limits each label's syntax. const maxVersionLabels = 128 @@ -202,9 +206,15 @@ type server struct { versionMu sync.Mutex versions map[string]struct{} - reports *prometheus.CounterVec - servers prometheus.Histogram - templates prometheus.Histogram + // now is the clock for day bucketing and limiter windows; tests replace it. + now func() time.Time + // daily is the per-source accepted-reports-per-UTC-day counter (T062). + daily *dailyLimiter + + reports *prometheus.CounterVec + servers prometheus.Histogram + templates prometheus.Histogram + rateLimited *prometheus.CounterVec } // newServer builds a server backed by a private in-memory store, whatever @@ -230,6 +240,8 @@ func newServerWithStore(cfg config, st *store) *server { reg: reg, store: st, versions: make(map[string]struct{}), + now: time.Now, + daily: newDailyLimiter(cfg.ingestSourceDailyLimit), reports: prometheus.NewCounterVec(prometheus.CounterOpts{ Name: "gameplane_telemetry_reports_total", Help: "Telemetry reports accepted, by reported Gameplane version.", @@ -246,8 +258,16 @@ func newServerWithStore(cfg config, st *store) *server { Help: "Distribution of GameTemplate counts across reports.", Buckets: []float64{0, 1, 2, 5, 10, 25, 50, 100, 250}, }), + rateLimited: prometheus.NewCounterVec(prometheus.CounterOpts{ + Name: "gameplane_telemetry_rate_limited_total", + Help: "Requests refused by a per-source limit, by route.", + }, []string{"route"}), } - reg.MustRegister(s.reports, s.servers, s.templates) + reg.MustRegister(s.reports, s.servers, s.templates, s.rateLimited) + // Make the series visible from the start, so a scrape shows 0 rather + // than nothing. + s.rateLimited.WithLabelValues(routeIngest) + s.rateLimited.WithLabelValues(routeLogin) return s } @@ -256,79 +276,10 @@ func (s *server) routes() http.Handler { mux.HandleFunc("GET /healthz", func(w http.ResponseWriter, _ *http.Request) { _, _ = io.WriteString(w, "ok") }) - mux.Handle("GET /metrics", promhttp.HandlerFor(s.reg, promhttp.HandlerOpts{})) mux.HandleFunc("POST /ingest", s.ingest) return mux } -// dashboardRoutes is the scaffold for the dashboard listener. It has no -// routes yet, so every request gets a 404; the dashboard, its login and the -// token-protected /metrics arrive with later tasks (T067). -func (s *server) dashboardRoutes() http.Handler { - return http.NewServeMux() -} - -func (s *server) ingest(w http.ResponseWriter, req *http.Request) { - if s.cfg.authToken != "" { - got := req.Header.Get("Authorization") - if subtle.ConstantTimeCompare([]byte(got), []byte(s.cfg.authToken)) != 1 { - http.Error(w, "unauthorized", http.StatusUnauthorized) - return - } - } - // Read the whole body first so the size limit applies to all of it, not - // just to the part a JSON decoder happens to consume. - body, err := io.ReadAll(http.MaxBytesReader(w, req.Body, maxBody)) - if err != nil { - var tooBig *http.MaxBytesError - if errors.As(err, &tooBig) { - http.Error(w, "body too large", http.StatusRequestEntityTooLarge) - return - } - http.Error(w, "invalid payload", http.StatusBadRequest) - return - } - p, err := decodePayload(body) - if err != nil { - http.Error(w, "invalid payload", http.StatusBadRequest) - return - } - if p.Servers < 0 || p.Templates < 0 { - http.Error(w, "invalid payload", http.StatusBadRequest) - return - } - version := s.versionLabel(p.Version) - - slog.Info("telemetry report", - "version", version, "servers", p.Servers, "templates", p.Templates) - s.reports.WithLabelValues(version).Inc() - s.servers.Observe(float64(p.Servers)) - s.templates.Observe(float64(p.Templates)) - w.WriteHeader(http.StatusNoContent) -} - -// versionLabel retains the first 128 valid versions for this process. -// Overflow reports still count, but share one label. Never evict entries: -// CounterVec would otherwise retain every old label and keep growing. -func (s *server) versionLabel(version string) string { - if !telemetryschema.VersionRE.MatchString(version) || version == "invalid" { - return "invalid" - } - if version == "other" { - return "other" - } - s.versionMu.Lock() - defer s.versionMu.Unlock() - if _, ok := s.versions[version]; ok { - return version - } - if len(s.versions) >= maxVersionLabels { - return "other" - } - s.versions[version] = struct{}{} - return version -} - func newHTTPServer(addr string, h http.Handler) *http.Server { return &http.Server{ Addr: addr, @@ -360,6 +311,19 @@ func serve(ctx context.Context, cfg config) error { }() s := newServerWithStore(cfg, st) + // The hourly lifecycle job (retention sweep, day rollover) stops before + // the store is closed: defers run last-in first. + lifeCtx, stopLife := context.WithCancel(ctx) + lifeDone := make(chan struct{}) + go func() { + defer close(lifeDone) + st.runLifecycle(lifeCtx, cfg.retentionDays, time.Now) + }() + defer func() { + stopLife() + <-lifeDone + }() + srv := newHTTPServer(cfg.listen, s.routes()) servers := []*http.Server{srv} errCh := make(chan error, 2) diff --git a/telemetry-receiver/main_test.go b/telemetry-receiver/main_test.go index 85846136d..81b092823 100644 --- a/telemetry-receiver/main_test.go +++ b/telemetry-receiver/main_test.go @@ -8,17 +8,44 @@ import ( "net/http" "net/http/httptest" "strings" + "sync" "testing" "time" ) +// testDashboardToken is the dashboard credential of every testServer. +const testDashboardToken = "test-dashboard-token" + +// testDashboards maps each public test server to the dashboard handler of +// the same receiver, because /metrics is served only on the dashboard +// listener (FR-030, spec Q8). +var testDashboards sync.Map + func testServer(t *testing.T, cfg config) *httptest.Server { t.Helper() - srv := httptest.NewServer(newServer(cfg).routes()) - t.Cleanup(srv.Close) + if cfg.dashboardToken == "" { + cfg.dashboardToken = testDashboardToken + } + s := newServer(cfg) + srv := httptest.NewServer(s.routes()) + testDashboards.Store(srv, s.dashboardRoutes()) + t.Cleanup(func() { + testDashboards.Delete(srv) + srv.Close() + }) return srv } +// dashboardHandler returns the dashboard handler paired with a test server. +func dashboardHandler(t *testing.T, srv *httptest.Server) http.Handler { + t.Helper() + h, ok := testDashboards.Load(srv) + if !ok { + t.Fatal("no dashboard handler registered for the test server") + } + return h.(http.Handler) +} + func post(t *testing.T, srv *httptest.Server, body string, headers map[string]string) *http.Response { t.Helper() req, err := http.NewRequestWithContext(context.Background(), http.MethodPost, srv.URL+"/ingest", strings.NewReader(body)) @@ -37,17 +64,14 @@ func post(t *testing.T, srv *httptest.Server, body string, headers map[string]st func metrics(t *testing.T, srv *httptest.Server) string { t.Helper() - req, err := http.NewRequestWithContext(context.Background(), http.MethodGet, srv.URL+"/metrics", nil) - if err != nil { - t.Fatalf("build request: %v", err) - } - resp, err := http.DefaultClient.Do(req) - if err != nil { - t.Fatalf("get metrics: %v", err) - } - defer resp.Body.Close() - b, _ := io.ReadAll(resp.Body) - return string(b) + req := httptest.NewRequestWithContext(context.Background(), http.MethodGet, "/metrics", nil) + req.Header.Set("Authorization", "Bearer "+testDashboardToken) + rec := httptest.NewRecorder() + dashboardHandler(t, srv).ServeHTTP(rec, req) + if rec.Code != http.StatusOK { + t.Fatalf("get metrics: status = %d, want 200", rec.Code) + } + return rec.Body.String() } func TestIngestCountsReport(t *testing.T) { @@ -137,17 +161,33 @@ func TestIngestMethodNotAllowed(t *testing.T) { func TestMetricsMethodNotAllowed(t *testing.T) { srv := testServer(t, config{}) - req, err := http.NewRequestWithContext(context.Background(), http.MethodPost, srv.URL+"/metrics", nil) - if err != nil { - t.Fatalf("build request: %v", err) + req := httptest.NewRequestWithContext(context.Background(), http.MethodPost, "/metrics", nil) + rec := httptest.NewRecorder() + dashboardHandler(t, srv).ServeHTTP(rec, req) + if rec.Code != http.StatusMethodNotAllowed { + t.Fatalf("status = %d, want 405", rec.Code) } - resp, err := http.DefaultClient.Do(req) - if err != nil { - t.Fatalf("post: %v", err) - } - defer resp.Body.Close() - if resp.StatusCode != http.StatusMethodNotAllowed { - t.Fatalf("status = %d, want 405", resp.StatusCode) +} + +// /metrics is not served on the public listener at all (FR-030, spec Q8). +func TestMetricsNotServedOnPublicListener(t *testing.T) { + srv := testServer(t, config{}) + for _, auth := range []string{"", "Bearer " + testDashboardToken} { + req, err := http.NewRequestWithContext(context.Background(), http.MethodGet, srv.URL+"/metrics", nil) + if err != nil { + t.Fatalf("build request: %v", err) + } + if auth != "" { + req.Header.Set("Authorization", auth) + } + resp, err := http.DefaultClient.Do(req) + if err != nil { + t.Fatalf("get: %v", err) + } + resp.Body.Close() + if resp.StatusCode != http.StatusNotFound { + t.Fatalf("Authorization %q: status = %d, want 404", auth, resp.StatusCode) + } } } diff --git a/telemetry-receiver/ratelimit.go b/telemetry-receiver/ratelimit.go new file mode 100644 index 000000000..a1067ef03 --- /dev/null +++ b/telemetry-receiver/ratelimit.go @@ -0,0 +1,188 @@ +package main + +import ( + "net" + "net/http" + "net/netip" + "strings" + "sync" + "time" +) + +// Per-source limiter bounds (research R6). All limiter state is in memory +// only; source addresses are never written to the store or the logs (FR-014). +const ( + // limiterIdleTTL is how long an idle token bucket is kept before it is + // purged. An idle bucket has refilled completely, so purging loses nothing. + limiterIdleTTL = 10 * time.Minute + // limiterSweepEvery is how often the lazy idle sweep runs. + limiterSweepEvery = time.Minute + // limiterMaxSources bounds how many sources one limiter tracks. A source + // that does not fit is let through untracked rather than growing memory + // without limit. + limiterMaxSources = 100_000 +) + +// dayString formats t as a UTC calendar day, YYYY-MM-DD. +func dayString(t time.Time) string { + return t.UTC().Format(time.DateOnly) +} + +// dailyLimiter counts accepted reports per source per UTC day. The counts +// are reset when the UTC day changes. A limit of 0 means unlimited and keeps +// no state. +type dailyLimiter struct { + mu sync.Mutex + limit int + max int + day string + counts map[netip.Addr]int +} + +func newDailyLimiter(limit int) *dailyLimiter { + return &dailyLimiter{limit: limit, max: limiterMaxSources, counts: make(map[netip.Addr]int)} +} + +// take records one accepted report from src at now. It returns false, and +// records nothing, when src has already used its limit for the UTC day of now. +func (l *dailyLimiter) take(src netip.Addr, now time.Time) bool { + if l.limit <= 0 { + return true + } + l.mu.Lock() + defer l.mu.Unlock() + if day := dayString(now); day != l.day { + l.day = day + l.counts = make(map[netip.Addr]int) + } + n, tracked := l.counts[src] + if !tracked && len(l.counts) >= l.max { + return true + } + if n >= l.limit { + return false + } + l.counts[src] = n + 1 + return true +} + +// bucketLimiter is a generic per-source token bucket. +type bucketLimiter struct { + mu sync.Mutex + rate float64 // tokens added per second + burst float64 + max int + day string + lastSweep time.Time + buckets map[netip.Addr]*bucket +} + +type bucket struct { + tokens float64 + last time.Time +} + +// newBucketLimiter returns a limiter that refills perMinute tokens per +// minute up to burst. A new source starts with a full bucket. +func newBucketLimiter(perMinute, burst int) *bucketLimiter { + return &bucketLimiter{ + rate: float64(perMinute) / 60, + burst: float64(burst), + max: limiterMaxSources, + buckets: make(map[netip.Addr]*bucket), + } +} + +// allow takes one token for src at now and reports whether one was left. +func (l *bucketLimiter) allow(src netip.Addr, now time.Time) bool { + l.mu.Lock() + defer l.mu.Unlock() + l.sweep(now) + b, ok := l.buckets[src] + if !ok { + if len(l.buckets) >= l.max { + return true + } + b = &bucket{tokens: l.burst, last: now} + l.buckets[src] = b + } + if elapsed := now.Sub(b.last).Seconds(); elapsed > 0 { + b.tokens = min(l.burst, b.tokens+elapsed*l.rate) + b.last = now + } + if b.tokens < 1 { + return false + } + b.tokens-- + return true +} + +// sweep resets every bucket at UTC midnight and, at most once a minute, +// purges buckets idle for longer than limiterIdleTTL. The caller holds mu. +func (l *bucketLimiter) sweep(now time.Time) { + if day := dayString(now); day != l.day { + l.day = day + l.buckets = make(map[netip.Addr]*bucket) + l.lastSweep = now + return + } + if now.Sub(l.lastSweep) < limiterSweepEvery { + return + } + l.lastSweep = now + for src, b := range l.buckets { + if now.Sub(b.last) >= limiterIdleTTL { + delete(l.buckets, src) + } + } +} + +// sourceIP returns the address a request is attributed to: the TCP peer, +// unless the peer is inside trusted, in which case it is the right-most +// X-Forwarded-For entry that is not itself trusted. An unparsable +// X-Forwarded-For falls back to the peer. An unparsable peer yields the zero +// Addr, which all such requests share. +func sourceIP(r *http.Request, trusted []netip.Prefix) netip.Addr { + peer := peerAddr(r.RemoteAddr) + if !peer.IsValid() || !inPrefixes(trusted, peer) { + return peer + } + parts := strings.Split(strings.Join(r.Header.Values("X-Forwarded-For"), ","), ",") + for i := len(parts) - 1; i >= 0; i-- { + raw := strings.TrimSpace(parts[i]) + if raw == "" { + continue + } + a, err := netip.ParseAddr(raw) + if err != nil { + return peer + } + a = a.Unmap().WithZone("") + if !inPrefixes(trusted, a) { + return a + } + } + return peer +} + +// peerAddr parses a net/http RemoteAddr ("host:port"). +func peerAddr(remote string) netip.Addr { + host, _, err := net.SplitHostPort(remote) + if err != nil { + host = remote + } + a, err := netip.ParseAddr(host) + if err != nil { + return netip.Addr{} + } + return a.Unmap().WithZone("") +} + +func inPrefixes(prefixes []netip.Prefix, a netip.Addr) bool { + for _, p := range prefixes { + if p.Contains(a) { + return true + } + } + return false +} diff --git a/telemetry-receiver/ratelimit_test.go b/telemetry-receiver/ratelimit_test.go new file mode 100644 index 000000000..26e376938 --- /dev/null +++ b/telemetry-receiver/ratelimit_test.go @@ -0,0 +1,338 @@ +package main + +import ( + "context" + "fmt" + "net/http" + "net/http/httptest" + "net/netip" + "strings" + "testing" + "time" +) + +var limiterNow = time.Date(2026, 10, 7, 10, 0, 0, 0, time.UTC) + +func addr(s string) netip.Addr { return netip.MustParseAddr(s) } + +func TestDailyLimiterCapsPerSourcePerUTCDay(t *testing.T) { + l := newDailyLimiter(2) + a, b := addr("192.0.2.1"), addr("192.0.2.2") + if !l.take(a, limiterNow) || !l.take(a, limiterNow) { + t.Fatal("first two reports from a source must be accepted") + } + if l.take(a, limiterNow) { + t.Fatal("third report from the same source must be refused") + } + if !l.take(b, limiterNow) { + t.Fatal("another source has its own budget") + } + if l.take(a, limiterNow.Add(13*time.Hour-time.Second)) { + t.Fatal("still the same UTC day: must stay refused") + } + if !l.take(a, limiterNow.Add(14*time.Hour)) { + t.Fatal("the counter resets at UTC midnight") + } +} + +func TestDailyLimiterZeroMeansUnlimitedAndKeepsNoState(t *testing.T) { + l := newDailyLimiter(0) + for range 500 { + if !l.take(addr("192.0.2.1"), limiterNow) { + t.Fatal("limit 0 must never refuse") + } + } + if len(l.counts) != 0 { + t.Fatalf("limit 0 tracked %d sources, want 0", len(l.counts)) + } +} + +func TestDailyLimiterSourceCapLetsUntrackedSourcesThrough(t *testing.T) { + l := newDailyLimiter(1) + l.max = 1 + a, b := addr("192.0.2.1"), addr("192.0.2.2") + if !l.take(a, limiterNow) { + t.Fatal("tracked source, first report") + } + for range 3 { + if !l.take(b, limiterNow) { + t.Fatal("a source that does not fit is let through untracked") + } + } + if l.take(a, limiterNow) { + t.Fatal("the tracked source is still limited") + } + if len(l.counts) != 1 { + t.Fatalf("tracked %d sources, want 1", len(l.counts)) + } +} + +func TestBucketLimiterBurstRefillAndSeparateSources(t *testing.T) { + l := newBucketLimiter(60, 2) // one token per second, burst 2 + a, b := addr("192.0.2.1"), addr("192.0.2.2") + if !l.allow(a, limiterNow) || !l.allow(a, limiterNow) { + t.Fatal("the burst of 2 must be allowed") + } + if l.allow(a, limiterNow) { + t.Fatal("burst exhausted: must be refused") + } + if !l.allow(b, limiterNow) { + t.Fatal("another source has its own bucket") + } + if !l.allow(a, limiterNow.Add(time.Second)) { + t.Fatal("one token is refilled after a second") + } + if l.allow(a, limiterNow.Add(time.Second)) { + t.Fatal("only one token was refilled") + } + // The bucket never holds more than the burst, however long it idles. + later := limiterNow.Add(5 * time.Second) + if !l.allow(a, later) || !l.allow(a, later) || l.allow(a, later) { + t.Fatal("after a long idle the bucket holds exactly the burst") + } +} + +func TestBucketLimiterPurgesIdleSources(t *testing.T) { + l := newBucketLimiter(1, 1) + a, b := addr("192.0.2.1"), addr("192.0.2.2") + l.allow(a, limiterNow) + l.allow(b, limiterNow.Add(5*time.Minute)) + if len(l.buckets) != 2 { + t.Fatalf("buckets = %d, want 2 before the idle purge", len(l.buckets)) + } + l.allow(b, limiterNow.Add(11*time.Minute)) + if _, ok := l.buckets[a]; ok { + t.Fatal("source a idle for 11 minutes must be purged") + } + if _, ok := l.buckets[b]; !ok || len(l.buckets) != 1 { + t.Fatalf("source b idle for 6 minutes must be kept; buckets = %d", len(l.buckets)) + } +} + +func TestBucketLimiterResetsAtUTCMidnight(t *testing.T) { + l := newBucketLimiter(1, 1) // one token per minute + a := addr("192.0.2.1") + late := time.Date(2026, 10, 7, 23, 59, 50, 0, time.UTC) + if !l.allow(a, late) { + t.Fatal("first request") + } + if l.allow(a, late.Add(10*time.Second-time.Nanosecond)) { + t.Fatal("before midnight the bucket is still empty") + } + if !l.allow(a, late.Add(10*time.Second)) { + t.Fatal("limiter state is reset at UTC midnight") + } +} + +func TestBucketLimiterSourceCapLetsUntrackedSourcesThrough(t *testing.T) { + l := newBucketLimiter(1, 1) + l.max = 1 + a, b := addr("192.0.2.1"), addr("192.0.2.2") + if !l.allow(a, limiterNow) { + t.Fatal("tracked source, first request") + } + for range 3 { + if !l.allow(b, limiterNow) { + t.Fatal("a source that does not fit is let through untracked") + } + } + if l.allow(a, limiterNow) { + t.Fatal("the tracked source is still limited") + } +} + +func reqFrom(remote string, xff ...string) *http.Request { + r := httptest.NewRequestWithContext(context.Background(), http.MethodGet, "/", nil) + r.RemoteAddr = remote + for _, v := range xff { + r.Header.Add("X-Forwarded-For", v) + } + return r +} + +func TestSourceIPHonoursForwardedForOnlyFromTrustedPeers(t *testing.T) { + trusted := []netip.Prefix{netip.MustParsePrefix("10.0.0.0/8"), netip.MustParsePrefix("2001:db8::/32")} + cases := []struct { + name string + remote string + xff []string + trusted []netip.Prefix + want string // empty means the zero Addr + }{ + {"untrusted peer ignores header", "192.0.2.1:4000", []string{"203.0.113.9"}, trusted, "192.0.2.1"}, + {"no trusted list ignores header", "10.0.0.1:4000", []string{"203.0.113.9"}, nil, "10.0.0.1"}, + {"trusted peer uses header", "10.0.0.1:4000", []string{"203.0.113.9"}, trusted, "203.0.113.9"}, + {"right-most untrusted entry wins", "10.0.0.1:4000", []string{"198.51.100.1, 203.0.113.9"}, trusted, "203.0.113.9"}, + {"trusted hops are skipped", "10.0.0.1:4000", []string{"203.0.113.9, 10.0.0.5"}, trusted, "203.0.113.9"}, + {"all entries trusted gives the peer", "10.0.0.1:4000", []string{"10.0.0.7"}, trusted, "10.0.0.1"}, + {"no header gives the peer", "10.0.0.1:4000", nil, trusted, "10.0.0.1"}, + {"unparsable entry gives the peer", "10.0.0.1:4000", []string{"garbage"}, trusted, "10.0.0.1"}, + {"empty entries give the peer", "10.0.0.1:4000", []string{", ,"}, trusted, "10.0.0.1"}, + {"several header lines are joined", "10.0.0.1:4000", []string{"198.51.100.1", "203.0.113.9"}, trusted, "203.0.113.9"}, + {"ipv6 trusted peer", "[2001:db8::1]:4000", []string{"203.0.113.9"}, trusted, "203.0.113.9"}, + {"ipv4-mapped peer is unmapped", "[::ffff:10.0.0.1]:4000", []string{"::ffff:203.0.113.9"}, trusted, "203.0.113.9"}, + {"peer without a port", "10.0.0.1", []string{"203.0.113.9"}, trusted, "203.0.113.9"}, + {"unparsable peer is the zero address", "garbage", []string{"203.0.113.9"}, trusted, ""}, + } + for _, tc := range cases { + t.Run(tc.name, func(t *testing.T) { + got := sourceIP(reqFrom(tc.remote, tc.xff...), tc.trusted) + if tc.want == "" { + if got.IsValid() { + t.Fatalf("sourceIP = %v, want the zero Addr", got) + } + return + } + if got != addr(tc.want) { + t.Fatalf("sourceIP = %v, want %s", got, tc.want) + } + }) + } +} + +// counterValue reads a counter series from the server's registry; it is 0 +// when the series does not exist. +func counterValue(t *testing.T, s *server, name, labelName, labelValue string) float64 { + t.Helper() + families, err := s.reg.Gather() + if err != nil { + t.Fatalf("gather: %v", err) + } + for _, f := range families { + if f.GetName() != name { + continue + } + for _, m := range f.Metric { + for _, l := range m.Label { + if l.GetName() == labelName && l.GetValue() == labelValue { + return m.GetCounter().GetValue() + } + } + } + } + return 0 +} + +const okReport = `{"version":"1.0.0","servers":1,"templates":1}` + +func ingestFrom(t *testing.T, s *server, remote, body string, xff ...string) int { + t.Helper() + r := httptest.NewRequestWithContext(t.Context(), http.MethodPost, "/ingest", strings.NewReader(body)) + r.RemoteAddr = remote + for _, v := range xff { + r.Header.Add("X-Forwarded-For", v) + } + w := httptest.NewRecorder() + s.ingest(w, r) + return w.Code +} + +func TestIngestRateLimitReturns429(t *testing.T) { + s := newServer(config{ingestSourceDailyLimit: 2}) + now := limiterNow + s.now = func() time.Time { return now } + for i := range 2 { + if code := ingestFrom(t, s, "192.0.2.1:1000", okReport); code != http.StatusNoContent { + t.Fatalf("report %d: status = %d, want 204", i, code) + } + } + r := httptest.NewRequestWithContext(t.Context(), http.MethodPost, "/ingest", strings.NewReader(okReport)) + r.RemoteAddr = "192.0.2.1:2000" // another port, same source + w := httptest.NewRecorder() + s.ingest(w, r) + if w.Code != http.StatusTooManyRequests { + t.Fatalf("third report: status = %d, want 429", w.Code) + } + if got := counterValue(t, s, "gameplane_telemetry_rate_limited_total", "route", "ingest"); got != 1 { + t.Fatalf("rate_limited_total{route=ingest} = %v, want 1", got) + } + // A refused report changes nothing: two reports are stored and counted. + if got := mustMeta(t, s.store, "reports_total"); got != "2" { + t.Fatalf("reports_total = %s, want 2", got) + } + if got := countRows(t, s.store, `SELECT reports FROM daily_basic WHERE day = ?`, "2026-10-07"); got != 2 { + t.Fatalf("daily_basic.reports = %d, want 2", got) + } + if got := counterValue(t, s, "gameplane_telemetry_reports_total", "version", "1.0.0"); got != 2 { + t.Fatalf("reports_total{version} = %v, want 2", got) + } + // Another source is unaffected, and the next UTC day starts afresh. + if code := ingestFrom(t, s, "192.0.2.9:1000", okReport); code != http.StatusNoContent { + t.Fatalf("other source: status = %d, want 204", code) + } + now = now.Add(24 * time.Hour) + if code := ingestFrom(t, s, "192.0.2.1:1000", okReport); code != http.StatusNoContent { + t.Fatalf("next day: status = %d, want 204", code) + } +} + +func TestIngestRateLimitOnlyCountsAcceptedReports(t *testing.T) { + s := newServer(config{ingestSourceDailyLimit: 1}) + for range 5 { + if code := ingestFrom(t, s, "192.0.2.1:1000", `{not json`); code != http.StatusBadRequest { + t.Fatalf("invalid report: status = %d, want 400", code) + } + } + if code := ingestFrom(t, s, "192.0.2.1:1000", okReport); code != http.StatusNoContent { + t.Fatalf("valid report after invalid ones: status = %d, want 204", code) + } + if code := ingestFrom(t, s, "192.0.2.1:1000", okReport); code != http.StatusTooManyRequests { + t.Fatalf("second valid report: status = %d, want 429", code) + } +} + +func TestIngestRateLimitZeroIsUnlimited(t *testing.T) { + s := newServer(config{}) + for i := range 60 { + if code := ingestFrom(t, s, "192.0.2.1:1000", okReport); code != http.StatusNoContent { + t.Fatalf("report %d: status = %d, want 204", i, code) + } + } + if got := counterValue(t, s, "gameplane_telemetry_rate_limited_total", "route", "ingest"); got != 0 { + t.Fatalf("rate_limited_total = %v, want 0", got) + } +} + +func TestIngestRateLimitHonoursForwardedForOnlyFromTrustedPeers(t *testing.T) { + s := newServer(config{ + ingestSourceDailyLimit: 1, + trustedProxyCIDRs: []netip.Prefix{netip.MustParsePrefix("10.0.0.0/8")}, + }) + // A trusted proxy: the forwarded client is the source. + if code := ingestFrom(t, s, "10.0.0.1:1000", okReport, "203.0.113.5"); code != http.StatusNoContent { + t.Fatalf("client 1: status = %d, want 204", code) + } + if code := ingestFrom(t, s, "10.0.0.1:1000", okReport, "203.0.113.5"); code != http.StatusTooManyRequests { + t.Fatalf("client 1 again: status = %d, want 429", code) + } + if code := ingestFrom(t, s, "10.0.0.1:1000", okReport, "203.0.113.6"); code != http.StatusNoContent { + t.Fatalf("client 2 behind the same proxy: status = %d, want 204", code) + } + // An untrusted peer cannot choose its source by sending the header. + if code := ingestFrom(t, s, "192.0.2.1:1000", okReport, "203.0.113.50"); code != http.StatusNoContent { + t.Fatalf("untrusted peer: status = %d, want 204", code) + } + for i := range 3 { + spoof := fmt.Sprintf("203.0.113.%d", 100+i) + if code := ingestFrom(t, s, "192.0.2.1:1000", okReport, spoof); code != http.StatusTooManyRequests { + t.Fatalf("spoofed header %s: status = %d, want 429", spoof, code) + } + } +} + +func TestPeerAddr(t *testing.T) { + for in, want := range map[string]string{ + "192.0.2.1:80": "192.0.2.1", + "[2001:db8::1]:80": "2001:db8::1", + "192.0.2.1": "192.0.2.1", + "[::ffff:192.0.2.1]:80": "192.0.2.1", + "[fe80::1%eth0]:80": "fe80::1", + } { + if got := peerAddr(in); got != addr(want) { + t.Errorf("peerAddr(%q) = %v, want %s", in, got, want) + } + } + if peerAddr("not an address").IsValid() { + t.Error("peerAddr of garbage must be the zero Addr") + } +} diff --git a/telemetry-receiver/store.go b/telemetry-receiver/store.go index 9bfbf8489..fc1b305af 100644 --- a/telemetry-receiver/store.go +++ b/telemetry-receiver/store.go @@ -29,6 +29,9 @@ const ( metaPepper = "pepper" metaCollectionStart = "collection_started" metaReportsTotal = "reports_total" + // metaRolloverThrough is the last completed UTC day the lifecycle job + // has finalised (data-model.md, Lifecycle jobs). + metaRolloverThrough = "rollover_through" ) const ( @@ -243,3 +246,128 @@ func (s *store) close() error { } return nil } + +// writeTx runs fn in one transaction under the single-writer lock. The +// transaction commits when fn returns nil and rolls back otherwise. fn must +// use only tx: the in-memory store has a single connection, so reading +// through s.db inside fn would deadlock. +func (s *store) writeTx(ctx context.Context, fn func(tx *sql.Tx) error) error { + s.mu.Lock() + defer s.mu.Unlock() + tx, err := s.db.BeginTx(ctx, nil) + if err != nil { + return fmt.Errorf("begin transaction: %w", err) + } + if err := fn(tx); err != nil { + return errors.Join(err, rollbackErr(tx.Rollback())) + } + if err := tx.Commit(); err != nil { + return fmt.Errorf("commit transaction: %w", err) + } + return nil +} + +// rollbackErr hides sql.ErrTxDone, which only means the transaction had +// already ended. +func rollbackErr(err error) error { + if errors.Is(err, sql.ErrTxDone) { + return nil + } + return err +} + +const ( + // lifecycleInterval is how often the lifecycle job runs. + lifecycleInterval = time.Hour + // maxRolloverCatchup bounds how many missed days one run finalises after + // a long outage. + maxRolloverCatchup = 400 +) + +// retentionSweeps delete the daily_* rows older than the cutoff day (the one +// bound parameter). The statements are constants, never built from input. +var retentionSweeps = []string{ + `DELETE FROM daily_basic WHERE day < ?`, + `DELETE FROM daily_version WHERE day < ?`, + `DELETE FROM daily_fleet WHERE day < ?`, + `DELETE FROM daily_ext WHERE day < ?`, + `DELETE FROM daily_dim WHERE day < ?`, + `DELETE FROM daily_game WHERE day < ?`, +} + +// pendingDays returns the completed UTC days after through, up to and +// including yesterday (relative to now), oldest first. An empty through +// yields just yesterday. At most maxRolloverCatchup days are returned. +func pendingDays(through string, now time.Time) []string { + yesterday := now.UTC().Truncate(24*time.Hour).AddDate(0, 0, -1) + last, err := time.Parse(time.DateOnly, through) + if through == "" || err != nil { + return []string{dayString(yesterday)} + } + first := last.AddDate(0, 0, 1) + if earliest := yesterday.AddDate(0, 0, 1-maxRolloverCatchup); first.Before(earliest) { + first = earliest + } + var days []string + for d := first; !d.After(yesterday); d = d.AddDate(0, 0, 1) { + days = append(days, dayString(d)) + } + return days +} + +// lifecycleOnce runs one pass of the lifecycle job. It is idempotent: it +// finalises the completed days after meta.rollover_through, then deletes +// daily_* rows older than retentionDays. A retentionDays of zero or less +// (the zero config) deletes nothing. US5 adds the lapsed-install and +// activity-expiry steps inside the loop over pending days. +func (s *store) lifecycleOnce(ctx context.Context, now time.Time, retentionDays int) error { + through, _, err := s.metaGet(ctx, metaRolloverThrough) + if err != nil { + return err + } + now = now.UTC() + days := pendingDays(through, now) + cutoff := dayString(now.AddDate(0, 0, -retentionDays)) + return s.writeTx(ctx, func(tx *sql.Tx) error { + if len(days) > 0 { + // Never move the marker backwards. + if _, err := tx.ExecContext(ctx, + `INSERT INTO meta (key, value) VALUES (?, ?) + ON CONFLICT (key) DO UPDATE SET value = excluded.value WHERE excluded.value > meta.value`, + metaRolloverThrough, days[len(days)-1]); err != nil { + return fmt.Errorf("advance rollover_through: %w", err) + } + } + if retentionDays <= 0 { + return nil + } + for _, sweep := range retentionSweeps { + if _, err := tx.ExecContext(ctx, sweep, cutoff); err != nil { + return fmt.Errorf("retention sweep: %w", err) + } + } + return nil + }) +} + +// runLifecycle runs lifecycleOnce immediately and then every +// lifecycleInterval until ctx is cancelled. Failures are logged and retried +// on the next tick. +func (s *store) runLifecycle(ctx context.Context, retentionDays int, now func() time.Time) { + run := func() { + if err := s.lifecycleOnce(ctx, now(), retentionDays); err != nil && ctx.Err() == nil { + slog.Error("telemetry lifecycle job failed", "err", err) + } + } + run() + t := time.NewTicker(lifecycleInterval) + defer t.Stop() + for { + select { + case <-ctx.Done(): + return + case <-t.C: + run() + } + } +} diff --git a/telemetry-receiver/views.go b/telemetry-receiver/views.go new file mode 100644 index 000000000..dff699121 --- /dev/null +++ b/telemetry-receiver/views.go @@ -0,0 +1,302 @@ +package main + +import ( + "context" + "database/sql" + "fmt" + "sort" + "time" +) + +// validRanges are the dashboard ranges in days (FR-022); anything else falls +// back to defaultRange. +var validRanges = []int{7, 30, 90, 365} + +const ( + defaultRange = 30 + // topVersions is how many versions are listed before "Other" (FR-024). + topVersions = 10 + // Labels of the two aggregate version rows. Stored rows use the lower-case + // forms written by versionLabel. + versionOtherLabel = "Other" + versionInvalidLabel = "Invalid" + versionOtherStored = "other" + versionInvalidStore = "invalid" +) + +// fleetBandBounds are the inclusive upper bounds of the fleet-size bands +// (data-model.md); a final "250+" band takes everything above the last bound. +var fleetBandBounds = []int{0, 1, 2, 5, 10, 25, 50, 100, 250} + +// fleetBandOver is the label of the last, open-ended fleet band. +const fleetBandOver = "250+" + +// Views is the dashboard view model, the body of GET /api/v1/views +// (contracts/receiver-http.md). Extended stays nil until US5 fills it. +type Views struct { + Range int `json:"range"` + AsOf string `json:"asOf"` + Empty bool `json:"empty"` + Basic *BasicViews `json:"basic"` + Extended *ExtendedViews `json:"extended"` +} + +// ExtendedViews is the extended block, added by US5. +type ExtendedViews struct{} + +// BasicViews is the basic block (FR-024). +type BasicViews struct { + ReportsPerDay []DayReports `json:"reportsPerDay"` + Versions []VersionRow `json:"versions"` + Fleet FleetViews `json:"fleet"` + LatestDay LatestDayRow `json:"latestDay"` +} + +// DayReports is one day of the reports-per-day trend. +type DayReports struct { + Day string `json:"day"` + Reports int64 `json:"reports"` +} + +// VersionRow is one version-adoption bar. +type VersionRow struct { + Label string `json:"label"` + Reports int64 `json:"reports"` +} + +// FleetViews holds the fleet-size distributions. +type FleetViews struct { + Servers FleetDistribution `json:"servers"` + Templates FleetDistribution `json:"templates"` +} + +// FleetDistribution is a banded histogram plus the exact median. A median of +// 1001 means "more than 1000". +type FleetDistribution struct { + Bands []FleetBand `json:"bands"` + Median float64 `json:"median"` +} + +// FleetBand is one histogram band; Le is the inclusive upper bound ("250+" +// for the open band). +type FleetBand struct { + Le string `json:"le"` + Reports int64 `json:"reports"` +} + +// LatestDayRow holds the totals for the as-of day. +type LatestDayRow struct { + ServersTotal int64 `json:"serversTotal"` + TemplatesTotal int64 `json:"templatesTotal"` +} + +// normalizeRange returns days when it is a valid range, else defaultRange. +func normalizeRange(days int) int { + for _, r := range validRanges { + if days == r { + return days + } + } + return defaultRange +} + +// BuildViews computes the basic dashboard views over the rangeDays ending +// on the latest complete UTC day, which is yesterday relative to now. An +// invalid rangeDays falls back to 30. When no daily_basic row exists in the +// range the result is the empty state: Empty is true and Basic is nil. +func BuildViews(ctx context.Context, st *store, rangeDays int, now time.Time) (Views, error) { + rangeDays = normalizeRange(rangeDays) + asOf := now.UTC().Truncate(24*time.Hour).AddDate(0, 0, -1) + from := asOf.AddDate(0, 0, 1-rangeDays) + v := Views{Range: rangeDays, AsOf: dayString(asOf)} + fromDay, toDay := dayString(from), dayString(asOf) + + perDay, latest, err := queryDailyBasic(ctx, st.db, fromDay, toDay, v.AsOf) + if err != nil { + return Views{}, err + } + if len(perDay) == 0 { + v.Empty = true + return v, nil + } + b := &BasicViews{LatestDay: latest} + b.ReportsPerDay = denseDays(from, rangeDays, perDay) + if b.Versions, err = queryVersions(ctx, st.db, fromDay, toDay); err != nil { + return Views{}, err + } + if b.Fleet.Servers, err = queryFleet(ctx, st.db, fleetMetricServers, fromDay, toDay); err != nil { + return Views{}, err + } + if b.Fleet.Templates, err = queryFleet(ctx, st.db, fleetMetricTemplates, fromDay, toDay); err != nil { + return Views{}, err + } + v.Basic = b + return v, nil +} + +// queryDailyBasic returns reports per day that has a row in [from, to], and +// the totals of the asOf day (zero when it has no row). +func queryDailyBasic(ctx context.Context, db *sql.DB, from, to, asOf string) (map[string]int64, LatestDayRow, error) { + rows, err := db.QueryContext(ctx, + `SELECT day, reports, servers_sum, templates_sum FROM daily_basic WHERE day >= ? AND day <= ?`, from, to) + if err != nil { + return nil, LatestDayRow{}, fmt.Errorf("query daily_basic: %w", err) + } + defer func() { _ = rows.Close() }() + perDay := make(map[string]int64) + var latest LatestDayRow + for rows.Next() { + var day string + var reports, servers, templates int64 + if err := rows.Scan(&day, &reports, &servers, &templates); err != nil { + return nil, LatestDayRow{}, fmt.Errorf("scan daily_basic: %w", err) + } + perDay[day] = reports + if day == asOf { + latest = LatestDayRow{ServersTotal: servers, TemplatesTotal: templates} + } + } + if err := rows.Err(); err != nil { + return nil, LatestDayRow{}, fmt.Errorf("read daily_basic: %w", err) + } + return perDay, latest, nil +} + +// denseDays lists every day of the range, oldest first, with 0 for days that +// have no row. +func denseDays(from time.Time, n int, perDay map[string]int64) []DayReports { + out := make([]DayReports, 0, n) + for i := range n { + day := dayString(from.AddDate(0, 0, i)) + out = append(out, DayReports{Day: day, Reports: perDay[day]}) + } + return out +} + +// queryVersions sums daily_version over [from, to] and returns the top +// topVersions versions by reports (ties by label), then Other, then Invalid. +// Other and Invalid are left out when they have no reports. +func queryVersions(ctx context.Context, db *sql.DB, from, to string) ([]VersionRow, error) { + rows, err := db.QueryContext(ctx, + `SELECT version, SUM(reports) FROM daily_version WHERE day >= ? AND day <= ? GROUP BY version`, from, to) + if err != nil { + return nil, fmt.Errorf("query daily_version: %w", err) + } + defer func() { _ = rows.Close() }() + var named []VersionRow + var other, invalid int64 + for rows.Next() { + var version string + var n int64 + if err := rows.Scan(&version, &n); err != nil { + return nil, fmt.Errorf("scan daily_version: %w", err) + } + switch version { + case versionInvalidStore: + invalid += n + case versionOtherStored: + other += n + default: + named = append(named, VersionRow{Label: version, Reports: n}) + } + } + if err := rows.Err(); err != nil { + return nil, fmt.Errorf("read daily_version: %w", err) + } + sort.Slice(named, func(i, j int) bool { + if named[i].Reports != named[j].Reports { + return named[i].Reports > named[j].Reports + } + return named[i].Label < named[j].Label + }) + if len(named) > topVersions { + for _, r := range named[topVersions:] { + other += r.Reports + } + named = named[:topVersions] + } + out := append([]VersionRow{}, named...) + if other > 0 { + out = append(out, VersionRow{Label: versionOtherLabel, Reports: other}) + } + if invalid > 0 { + out = append(out, VersionRow{Label: versionInvalidLabel, Reports: invalid}) + } + return out, nil +} + +// queryFleet sums the exact-value histogram of one metric over [from, to], +// then derives the bands and the exact median. +func queryFleet(ctx context.Context, db *sql.DB, metric, from, to string) (FleetDistribution, error) { + rows, err := db.QueryContext(ctx, + `SELECT value, SUM(reports) FROM daily_fleet WHERE metric = ? AND day >= ? AND day <= ? + GROUP BY value ORDER BY value`, metric, from, to) + if err != nil { + return FleetDistribution{}, fmt.Errorf("query daily_fleet %s: %w", metric, err) + } + defer func() { _ = rows.Close() }() + var hist []fleetPoint + for rows.Next() { + var p fleetPoint + if err := rows.Scan(&p.value, &p.reports); err != nil { + return FleetDistribution{}, fmt.Errorf("scan daily_fleet: %w", err) + } + hist = append(hist, p) + } + if err := rows.Err(); err != nil { + return FleetDistribution{}, fmt.Errorf("read daily_fleet: %w", err) + } + return FleetDistribution{Bands: fleetBands(hist), Median: fleetMedian(hist)}, nil +} + +// fleetPoint is one exact histogram entry; points are sorted by value. +type fleetPoint struct { + value int + reports int64 +} + +// fleetBands folds an exact histogram into the fixed bands. Every band is +// returned, including empty ones, so a histogram has a stable shape. +func fleetBands(hist []fleetPoint) []FleetBand { + bands := make([]FleetBand, 0, len(fleetBandBounds)+1) + for _, bound := range fleetBandBounds { + bands = append(bands, FleetBand{Le: fmt.Sprint(bound)}) + } + bands = append(bands, FleetBand{Le: fleetBandOver}) + for _, p := range hist { + i := len(fleetBandBounds) + for k, bound := range fleetBandBounds { + if p.value <= bound { + i = k + break + } + } + bands[i].Reports += p.reports + } + return bands +} + +// fleetMedian returns the exact median of the histogram: the middle value, +// or the mean of the two middle values for an even count. It is 0 for an +// empty histogram. hist must be sorted by value. +func fleetMedian(hist []fleetPoint) float64 { + var total int64 + for _, p := range hist { + total += p.reports + } + if total == 0 { + return 0 + } + at := func(rank int64) int { + var seen int64 + for _, p := range hist { + seen += p.reports + if rank < seen { + return p.value + } + } + return hist[len(hist)-1].value + } + lo, hi := at((total-1)/2), at(total/2) + return float64(lo+hi) / 2 +} diff --git a/telemetry-receiver/views_test.go b/telemetry-receiver/views_test.go new file mode 100644 index 000000000..808431b16 --- /dev/null +++ b/telemetry-receiver/views_test.go @@ -0,0 +1,327 @@ +package main + +import ( + "context" + "encoding/json" + "fmt" + "reflect" + "strings" + "testing" + "time" +) + +// viewsNow is the clock of the views tests: the latest complete day (asOf) +// is 2026-10-06. +var viewsNow = time.Date(2026, 10, 7, 12, 0, 0, 0, time.UTC) + +// viewsDay returns the day offset days before asOf (2026-10-06). +func viewsDay(offset int) string { + return dayString(viewsNow.AddDate(0, 0, -1-offset)) +} + +// seedViews writes a synthetic multi-day dataset. Reports sit at 0, 3, 10, +// 40, 100 and 400 days before asOf, so each range holds a different subset. +func seedViews(t *testing.T, st *store) { + t.Helper() + for _, r := range []struct { + offset int + version string + servers, templates int + }{ + {0, "1.0.0", 2, 5}, + {0, "1.0.0", 0, 0}, + {0, "2.0.0", 12, 300}, + {3, "1.0.0", 1, 1}, + {3, "invalid", 3, 4}, + {10, "1.1.0", 7, 11}, + {40, "0.9.0", 100, 2000}, + {40, "other", 1001, 0}, + {100, "0.8.0", 0, 0}, + {400, "0.1.0", 5, 5}, + } { + if err := st.recordBasic(context.Background(), viewsDay(r.offset), r.version, r.servers, r.templates); err != nil { + t.Fatalf("seed: %v", err) + } + } +} + +func vr(label string, n int64) VersionRow { return VersionRow{Label: label, Reports: n} } + +func bandReports(d FleetDistribution) []int64 { + out := make([]int64, 0, len(d.Bands)) + for _, b := range d.Bands { + out = append(out, b.Reports) + } + return out +} + +func TestBuildViewsExactFiguresPerRange(t *testing.T) { + st := openTestStore(t, config{}) + seedViews(t, st) + cases := []struct { + rangeDays int + firstDay string + totalReports int64 + versions []VersionRow + serverBands []int64 + serverMedian float64 + templateBands []int64 + templateMed float64 + }{ + {7, "2026-09-30", 5, + []VersionRow{vr("1.0.0", 3), vr("2.0.0", 1), vr("Invalid", 1)}, + []int64{1, 1, 1, 1, 0, 1, 0, 0, 0, 0}, 2, + []int64{1, 1, 0, 2, 0, 0, 0, 0, 0, 1}, 4}, + {30, "2026-09-07", 6, + []VersionRow{vr("1.0.0", 3), vr("1.1.0", 1), vr("2.0.0", 1), vr("Invalid", 1)}, + []int64{1, 1, 1, 1, 1, 1, 0, 0, 0, 0}, 2.5, + []int64{1, 1, 0, 2, 0, 1, 0, 0, 0, 1}, 4.5}, + {90, "2026-07-09", 8, + []VersionRow{vr("1.0.0", 3), vr("0.9.0", 1), vr("1.1.0", 1), vr("2.0.0", 1), vr("Other", 1), vr("Invalid", 1)}, + []int64{1, 1, 1, 1, 1, 1, 0, 1, 0, 1}, 5, + []int64{2, 1, 0, 2, 0, 1, 0, 0, 0, 2}, 4.5}, + {365, "2025-10-07", 9, + []VersionRow{vr("1.0.0", 3), vr("0.8.0", 1), vr("0.9.0", 1), vr("1.1.0", 1), vr("2.0.0", 1), vr("Other", 1), vr("Invalid", 1)}, + []int64{2, 1, 1, 1, 1, 1, 0, 1, 0, 1}, 3, + []int64{3, 1, 0, 2, 0, 1, 0, 0, 0, 2}, 4}, + } + wantLe := []string{"0", "1", "2", "5", "10", "25", "50", "100", "250", "250+"} + for _, tc := range cases { + t.Run(fmt.Sprintf("range_%d", tc.rangeDays), func(t *testing.T) { + v, err := BuildViews(context.Background(), st, tc.rangeDays, viewsNow) + if err != nil { + t.Fatalf("BuildViews: %v", err) + } + if v.Range != tc.rangeDays || v.AsOf != "2026-10-06" || v.Empty || v.Basic == nil || v.Extended != nil { + t.Fatalf("header = range %d asOf %s empty %v basic nil %v extended %v", + v.Range, v.AsOf, v.Empty, v.Basic == nil, v.Extended) + } + days := v.Basic.ReportsPerDay + if len(days) != tc.rangeDays || days[0].Day != tc.firstDay || days[len(days)-1].Day != "2026-10-06" { + t.Fatalf("reportsPerDay spans %d days from %s to %s", len(days), days[0].Day, days[len(days)-1].Day) + } + var total int64 + for _, d := range days { + total += d.Reports + } + if total != tc.totalReports { + t.Errorf("reports in range = %d, want %d", total, tc.totalReports) + } + if got := days[len(days)-1].Reports; got != 3 { + t.Errorf("reports on asOf = %d, want 3", got) + } + if !reflect.DeepEqual(v.Basic.Versions, tc.versions) { + t.Errorf("versions = %+v, want %+v", v.Basic.Versions, tc.versions) + } + for name, c := range map[string]struct { + got FleetDistribution + bands []int64 + median float64 + }{ + "servers": {v.Basic.Fleet.Servers, tc.serverBands, tc.serverMedian}, + "templates": {v.Basic.Fleet.Templates, tc.templateBands, tc.templateMed}, + } { + if got := bandReports(c.got); !reflect.DeepEqual(got, c.bands) { + t.Errorf("%s bands = %v, want %v", name, got, c.bands) + } + if c.got.Median != c.median { + t.Errorf("%s median = %v, want %v", name, c.got.Median, c.median) + } + for i, b := range c.got.Bands { + if b.Le != wantLe[i] { + t.Errorf("%s band %d le = %q, want %q", name, i, b.Le, wantLe[i]) + } + } + } + if want := (LatestDayRow{ServersTotal: 14, TemplatesTotal: 305}); v.Basic.LatestDay != want { + t.Errorf("latestDay = %+v, want %+v", v.Basic.LatestDay, want) + } + }) + } +} + +func TestBuildViewsReportsPerDayIsDense(t *testing.T) { + st := openTestStore(t, config{}) + seedViews(t, st) + v, err := BuildViews(context.Background(), st, 7, viewsNow) + if err != nil { + t.Fatalf("BuildViews: %v", err) + } + want := []DayReports{ + {"2026-09-30", 0}, {"2026-10-01", 0}, {"2026-10-02", 0}, {"2026-10-03", 2}, + {"2026-10-04", 0}, {"2026-10-05", 0}, {"2026-10-06", 3}, + } + if !reflect.DeepEqual(v.Basic.ReportsPerDay, want) { + t.Fatalf("reportsPerDay = %+v, want %+v", v.Basic.ReportsPerDay, want) + } +} + +func TestBuildViewsInvalidRangeFallsBackTo30(t *testing.T) { + st := openTestStore(t, config{}) + seedViews(t, st) + for _, n := range []int{0, -7, 5, 31, 366, 1000} { + v, err := BuildViews(context.Background(), st, n, viewsNow) + if err != nil { + t.Fatalf("range %d: %v", n, err) + } + if v.Range != 30 || len(v.Basic.ReportsPerDay) != 30 { + t.Errorf("range %d: got range %d with %d days, want 30", n, v.Range, len(v.Basic.ReportsPerDay)) + } + } +} + +func TestBuildViewsEmptyState(t *testing.T) { + st := openTestStore(t, config{}) + check := func(label string) { + t.Helper() + for _, r := range validRanges { + v, err := BuildViews(context.Background(), st, r, viewsNow) + if err != nil { + t.Fatalf("%s range %d: %v", label, r, err) + } + if !v.Empty || v.Basic != nil || v.Extended != nil || v.AsOf != "2026-10-06" || v.Range != r { + t.Fatalf("%s range %d: %+v, want the empty state", label, r, v) + } + } + } + check("empty store") + // Reports from today (not yet a complete day) and from beyond the + // widest range do not leave the empty state. + if err := st.recordBasic(context.Background(), "2026-10-07", "1.0.0", 1, 1); err != nil { + t.Fatal(err) + } + if err := st.recordBasic(context.Background(), "2024-01-01", "1.0.0", 1, 1); err != nil { + t.Fatal(err) + } + check("only out-of-range data") + body, err := json.Marshal(Views{Range: 30, AsOf: "2026-10-06", Empty: true}) + if err != nil { + t.Fatal(err) + } + if !strings.Contains(string(body), `"basic":null`) || !strings.Contains(string(body), `"extended":null`) { + t.Fatalf("empty view JSON = %s, want basic and extended null", body) + } +} + +func TestBuildViewsTopTenVersionsThenOtherAndInvalid(t *testing.T) { + st := openTestStore(t, config{}) + ctx := context.Background() + day := viewsDay(1) + // Twelve named versions with 12, 11, ... 1 reports, plus other and + // invalid rows. The two smallest named versions fold into Other. + for i := range 12 { + for range 12 - i { + if err := st.recordBasic(ctx, day, fmt.Sprintf("3.%d.0", i), 1, 1); err != nil { + t.Fatal(err) + } + } + } + for range 4 { + if err := st.recordBasic(ctx, day, "other", 1, 1); err != nil { + t.Fatal(err) + } + } + if err := st.recordBasic(ctx, day, "invalid", 1, 1); err != nil { + t.Fatal(err) + } + v, err := BuildViews(ctx, st, 7, viewsNow) + if err != nil { + t.Fatal(err) + } + got := v.Basic.Versions + if len(got) != 12 { + t.Fatalf("versions = %+v, want 10 named + Other + Invalid", got) + } + for i := range 10 { + if want := vr(fmt.Sprintf("3.%d.0", i), int64(12-i)); got[i] != want { + t.Errorf("versions[%d] = %+v, want %+v", i, got[i], want) + } + } + // Other = 4 (stored "other") + 2 + 1 (3.10.0 and 3.11.0). + if got[10] != vr("Other", 7) || got[11] != vr("Invalid", 1) { + t.Errorf("tail = %+v %+v, want Other 7 and Invalid 1", got[10], got[11]) + } +} + +func TestBuildViewsOmitsOtherAndInvalidWithoutReports(t *testing.T) { + st := openTestStore(t, config{}) + if err := st.recordBasic(context.Background(), viewsDay(0), "1.0.0", 1, 1); err != nil { + t.Fatal(err) + } + v, err := BuildViews(context.Background(), st, 7, viewsNow) + if err != nil { + t.Fatal(err) + } + if want := []VersionRow{vr("1.0.0", 1)}; !reflect.DeepEqual(v.Basic.Versions, want) { + t.Fatalf("versions = %+v, want %+v", v.Basic.Versions, want) + } +} + +func TestBuildViewsLatestDayZeroWhenAsOfHasNoRow(t *testing.T) { + st := openTestStore(t, config{}) + if err := st.recordBasic(context.Background(), viewsDay(3), "1.0.0", 4, 9); err != nil { + t.Fatal(err) + } + v, err := BuildViews(context.Background(), st, 7, viewsNow) + if err != nil { + t.Fatal(err) + } + if v.Empty || v.Basic.LatestDay != (LatestDayRow{}) { + t.Fatalf("latestDay = %+v (empty %v), want zeros with data in range", v.Basic.LatestDay, v.Empty) + } +} + +func TestBuildViewsReadErrors(t *testing.T) { + for _, drop := range []string{"daily_basic", "daily_version", "daily_fleet"} { + t.Run(drop, func(t *testing.T) { + st := openTestStore(t, config{}) + if err := st.recordBasic(context.Background(), viewsDay(0), "1.0.0", 1, 1); err != nil { + t.Fatal(err) + } + if _, err := st.db.ExecContext(context.Background(), "DROP TABLE "+drop); err != nil { + t.Fatal(err) + } + if _, err := BuildViews(context.Background(), st, 7, viewsNow); err == nil { + t.Fatalf("BuildViews with %s dropped: want an error", drop) + } + }) + } +} + +func TestFleetMedian(t *testing.T) { + cases := []struct { + name string + hist []fleetPoint + want float64 + }{ + {"empty", nil, 0}, + {"single", []fleetPoint{{4, 1}}, 4}, + {"odd", []fleetPoint{{1, 1}, {2, 1}, {9, 1}}, 2}, + {"even mean", []fleetPoint{{1, 1}, {2, 1}, {3, 1}, {10, 1}}, 2.5}, + {"weighted", []fleetPoint{{0, 5}, {10, 1}}, 0}, + {"cap value", []fleetPoint{{1001, 3}}, 1001}, + } + for _, tc := range cases { + t.Run(tc.name, func(t *testing.T) { + if got := fleetMedian(tc.hist); got != tc.want { + t.Fatalf("median = %v, want %v", got, tc.want) + } + }) + } +} + +func TestFleetBandsBoundaries(t *testing.T) { + hist := []fleetPoint{{0, 1}, {1, 2}, {2, 3}, {3, 4}, {5, 5}, {6, 6}, {250, 7}, {251, 8}, {1001, 9}} + want := []int64{1, 2, 3, 9, 6, 0, 0, 0, 7, 17} + if got := bandReports(FleetDistribution{Bands: fleetBands(hist)}); !reflect.DeepEqual(got, want) { + t.Fatalf("bands = %v, want %v", got, want) + } +} + +func TestNormalizeRange(t *testing.T) { + for in, want := range map[int]int{7: 7, 30: 30, 90: 90, 365: 365, 0: 30, 8: 30, -1: 30} { + if got := normalizeRange(in); got != want { + t.Errorf("normalizeRange(%d) = %d, want %d", in, got, want) + } + } +} diff --git a/telemetry-receiver/web/layout.html b/telemetry-receiver/web/layout.html new file mode 100644 index 000000000..8c329b30d --- /dev/null +++ b/telemetry-receiver/web/layout.html @@ -0,0 +1,15 @@ +{{define "layout"}} + + + + +Gameplane telemetry + + + +
+{{template "content" .}} +
+ + +{{end}} diff --git a/telemetry-receiver/web/login.html b/telemetry-receiver/web/login.html new file mode 100644 index 000000000..b4c0da521 --- /dev/null +++ b/telemetry-receiver/web/login.html @@ -0,0 +1,9 @@ +{{define "content"}} +

Sign in

+{{if .Error}}

{{.Error}}

{{end}} +
+ + + +
+{{end}} diff --git a/telemetry-receiver/web/overview.html b/telemetry-receiver/web/overview.html new file mode 100644 index 000000000..415456279 --- /dev/null +++ b/telemetry-receiver/web/overview.html @@ -0,0 +1,18 @@ +{{define "content"}} +

Telemetry overview

+
+
Range (days)
{{.Range}}
+
As of
{{.AsOf}}
+
Empty
{{.Empty}}
+{{with .Basic}} +{{range .ReportsPerDay}}
Reports on {{.Day}}
{{.Reports}}
+{{end}} +{{range .Versions}}
Version {{.Label}}
{{.Reports}}
+{{end}} +
Servers median
{{.Fleet.Servers.Median}}
+
Templates median
{{.Fleet.Templates.Median}}
+
Servers on latest day
{{.LatestDay.ServersTotal}}
+
Templates on latest day
{{.LatestDay.TemplatesTotal}}
+{{end}} +
+{{end}} diff --git a/telemetry-receiver/web/static/style.css b/telemetry-receiver/web/static/style.css new file mode 100644 index 000000000..7bb749ff0 --- /dev/null +++ b/telemetry-receiver/web/static/style.css @@ -0,0 +1,3 @@ +body { font-family: system-ui, sans-serif; margin: 2rem auto; max-width: 48rem; padding: 0 1rem; } +dt { font-weight: 600; } +dd { margin: 0 0 0.5rem; } From aab6eeea4d1e95b6733f688b4289a69d4c53b74f Mon Sep 17 00:00:00 2001 From: valgulnecron <39313199+ValgulNecron@users.noreply.github.com> Date: Wed, 7 Oct 2026 01:31:57 +0200 Subject: [PATCH 12/47] design: telemetry receiver dashboard pages in the pink theme Add telemetry-receiver/telemetry-dashboard.pen (HeroUI kit copy, re-themed to the shared pink tokens from web/src/styles/globals.css) with the receiver login, refused login, overview (basic and extended sections), empty state and no-extended-data frames, plus their JSON, PNG and token exports (spec 022 T066, T075). Co-Authored-By: Claude Opus 5.5 Claude-Session: https://claude.ai/code/session_01S7krnvWjW1a6bW5doxiVHB Signed-off-by: valgulnecron <39313199+ValgulNecron@users.noreply.github.com> --- telemetry-receiver/design-export/MANIFEST.md | 39 + .../design-export/json/HBYBE.json | 169 + .../design-export/json/Z079vK.json | 321 + .../design-export/json/a7wUpP.json | 187 + .../design-export/json/i0xK1E.json | 6005 +++++ .../design-export/json/jy9Rn.json | 66 + .../design-export/json/y49Ie.json | 131 + .../design-export/screenshots/HBYBE.png | Bin 0 -> 194189 bytes .../design-export/screenshots/Z079vK.png | Bin 0 -> 285562 bytes .../design-export/screenshots/a7wUpP.png | Bin 0 -> 202466 bytes .../design-export/screenshots/i0xK1E.png | Bin 0 -> 1285242 bytes .../design-export/screenshots/jy9Rn.png | Bin 0 -> 56864 bytes .../design-export/screenshots/y49Ie.png | Bin 0 -> 36684 bytes .../design-export/variables.json | 168 + telemetry-receiver/telemetry-dashboard.pen | 19838 ++++++++++++++++ 15 files changed, 26924 insertions(+) create mode 100644 telemetry-receiver/design-export/MANIFEST.md create mode 100644 telemetry-receiver/design-export/json/HBYBE.json create mode 100644 telemetry-receiver/design-export/json/Z079vK.json create mode 100644 telemetry-receiver/design-export/json/a7wUpP.json create mode 100644 telemetry-receiver/design-export/json/i0xK1E.json create mode 100644 telemetry-receiver/design-export/json/jy9Rn.json create mode 100644 telemetry-receiver/design-export/json/y49Ie.json create mode 100644 telemetry-receiver/design-export/screenshots/HBYBE.png create mode 100644 telemetry-receiver/design-export/screenshots/Z079vK.png create mode 100644 telemetry-receiver/design-export/screenshots/a7wUpP.png create mode 100644 telemetry-receiver/design-export/screenshots/i0xK1E.png create mode 100644 telemetry-receiver/design-export/screenshots/jy9Rn.png create mode 100644 telemetry-receiver/design-export/screenshots/y49Ie.png create mode 100644 telemetry-receiver/design-export/variables.json create mode 100644 telemetry-receiver/telemetry-dashboard.pen diff --git a/telemetry-receiver/design-export/MANIFEST.md b/telemetry-receiver/design-export/MANIFEST.md new file mode 100644 index 000000000..fa3e482b1 --- /dev/null +++ b/telemetry-receiver/design-export/MANIFEST.md @@ -0,0 +1,39 @@ +# telemetry-dashboard.pen export manifest + +This is a snapshot of `telemetry-receiver/telemetry-dashboard.pen` for review in git. The `.pen` file is accessed only through Pencil MCP. It holds the receiver's private dashboard pages for spec 022 (T066, T075), built on a copy of the HeroUI design-system kit. + +## Contents (2026-10-07, first export) + +| Node | Frame | Spec | +|---|---|---| +| `HBYBE` | Receiver / Login | T066, FR-022 | +| `a7wUpP` | Receiver / Login — refused (generic "Invalid credentials") | T066, FR-023 | +| `i0xK1E` | Receiver / Overview: basic section (KPIs, reports per day, versions, servers per install) and extended section (coverage, install KPIs, new and lapsed small multiples, environment, games, feature adoption, privacy footnote) | T066, T075, FR-024–FR-027 | +| `Z079vK` | Receiver / Overview — empty (no zero-filled charts) | T066, FR-027 | +| `jy9Rn` | Receiver / Extended — none in range | T075, T076 | +| `y49Ie` | Telemetry components: `sDDfo` Telemetry/Stat tile, `wPbIp` Telemetry/Share row | T066 | + +`variables.json` lists every colour and font token, light and dark, for the server-rendered CSS (T068). + +## Theme + +- **Palette.** This follows the pink theme the main app and website share: the `web/src/styles/globals.css` values under the same HeroUI token names, the same as `website/website-export`. The kit copy in this file is re-themed with it. +- **Typography.** Fonts are Geist (sans) and JetBrains Mono (headings, eyebrows, wordmark). +- **Modes.** The frames are rendered in dark mode, the website's default. Light values are defined for every token. +- **Chart tokens.** + - `chart/series-1` is pink: `#DB2777` light, `#EC4899` dark. Brand `#FF4FA3` is too light for dark-surface marks. + - `chart/series-2` is blue: `#2a78d6` light, `#3987e5` dark, used for lapsed installs. + - Both pass the dataviz validator in both modes against the file's surfaces (`#FFF7FB`, `#1C1A20`). + - `chart/grid`, `chart/baseline` and `chart/track` are recessive hairline and track tones. +- **Chart rules.** Columns start at zero, there is a single y-axis, and only the latest value is labelled. Small multiples share a scale. A "View as table" link gives a table alternative, because the CSP-locked pages have no JavaScript for hover. + +## Method + +- **JSON.** `Get(id, {depth: 40, includePathGeometry: true})` was printed from one `execute` call. A script split the output into `json/.json` (2-space indent, UTF-8, trailing newline). The compact re-serialisation length of every file matches `JSON.stringify` in Pencil exactly, and no file contains `"..."` elisions. +- **PNG.** `Export(ids, "png", …, {scale: 2})`. Login, refused and empty are 2880×1800, the overview is 2880×5634, "none in range" is 2880×328 and the components frame is 1624×354. +- **Content checks.** Each string matched only its own file: + - "Invalid credentials" → `a7wUpP` + - "No reports yet" → `Z079vK` + - "Lapsed installs per day" → `i0xK1E` + - "No reports in this range included extended data" → `jy9Rn` + - "DASHBOARD_TOKEN value" → `HBYBE`, `a7wUpP` diff --git a/telemetry-receiver/design-export/json/HBYBE.json b/telemetry-receiver/design-export/json/HBYBE.json new file mode 100644 index 000000000..e065a0638 --- /dev/null +++ b/telemetry-receiver/design-export/json/HBYBE.json @@ -0,0 +1,169 @@ +{ + "type": "frame", + "id": "HBYBE", + "x": 3567.959083557127, + "y": 1020.8789062499995, + "name": "Receiver / Login", + "theme": { + "semantic": "dark" + }, + "clip": true, + "width": 1440, + "height": 900, + "fill": "$background/background", + "layout": "vertical", + "justifyContent": "center", + "alignItems": "center", + "children": [ + { + "id": "f7gFY", + "type": "ref", + "ref": "f07b1", + "name": "Login card", + "width": 400, + "padding": 32, + "gap": 24, + "stroke": "$border", + "strokeWidth": 1, + "strokeAlignment": "inner", + "children": [ + { + "type": "frame", + "id": "RFl9o", + "name": "Heading", + "width": "fill_container", + "layout": "vertical", + "gap": 10, + "children": [ + { + "type": "frame", + "id": "yItF3", + "name": "Brand", + "gap": 10, + "alignItems": "center", + "children": [ + { + "type": "rectangle", + "id": "Nn2ic", + "name": "Logo", + "fill": { + "type": "image", + "enabled": true, + "url": "../website/design-assets/gameplane-icon.png", + "mode": "contain" + }, + "width": 24, + "height": 24 + }, + { + "type": "text", + "id": "v4e5d", + "name": "Wordmark", + "fill": "$foreground/foreground", + "content": "gameplane", + "fontFamily": "$typography/font-mono", + "fontSize": 15, + "fontWeight": "600" + } + ] + }, + { + "type": "text", + "id": "dsE3s", + "name": "Eyebrow", + "fill": "$accent/accent", + "content": "PRIVATE DASHBOARD", + "fontFamily": "$typography/font-mono", + "fontSize": 11, + "fontWeight": "normal", + "letterSpacing": 1.5 + }, + { + "type": "text", + "id": "CC9oc", + "name": "Title", + "fill": "$foreground/foreground", + "content": "Gameplane telemetry", + "fontFamily": "$typography/font-mono", + "fontSize": 24, + "fontWeight": "600" + }, + { + "type": "text", + "id": "c0nVDt", + "name": "Subtitle", + "fill": "$foreground/secondary", + "textGrowth": "fixed-width", + "width": "fill_container", + "content": "Private dashboard. Sign in with the dashboard token.", + "fontFamily": "$typography/font-sans", + "fontSize": 14, + "fontWeight": "normal" + } + ] + }, + { + "type": "frame", + "id": "MTBth", + "name": "Form", + "width": "fill_container", + "layout": "vertical", + "gap": 16, + "children": [ + { + "id": "w3zMra", + "type": "ref", + "ref": "Tu3H4", + "name": "Token field", + "width": "fill_container", + "descendants": { + "I4m7NO": { + "content": "Dashboard token" + }, + "DJsYb": { + "content": "••••••••••••••••••••••••" + }, + "PvRXY": { + "content": "The DASHBOARD_TOKEN value from the receiver's Secret." + } + } + }, + { + "id": "V9VTdg", + "type": "ref", + "ref": "hvQ4m", + "name": "Sign in", + "width": "fill_container", + "justifyContent": "center", + "descendants": { + "UYKSN": { + "enabled": false + }, + "y9bBK0": { + "content": "Sign in" + } + } + } + ] + } + ] + }, + { + "type": "frame", + "id": "eKQ9o", + "name": "Footer gap", + "width": 10, + "height": 24 + }, + { + "type": "text", + "id": "UKIoU", + "name": "Footnote", + "fill": "$foreground/muted", + "content": "Sessions last 12 hours. Rotating the token signs everyone out.", + "fontFamily": "$typography/font-sans", + "fontSize": 12, + "fontWeight": "normal" + } + ] +} diff --git a/telemetry-receiver/design-export/json/Z079vK.json b/telemetry-receiver/design-export/json/Z079vK.json new file mode 100644 index 000000000..40af934c9 --- /dev/null +++ b/telemetry-receiver/design-export/json/Z079vK.json @@ -0,0 +1,321 @@ +{ + "type": "frame", + "id": "Z079vK", + "x": 8327.959083557127, + "y": 1020.8789062499995, + "name": "Receiver / Overview — empty", + "theme": { + "semantic": "dark" + }, + "clip": true, + "width": 1440, + "height": 900, + "fill": "$background/background", + "layout": "vertical", + "children": [ + { + "type": "frame", + "id": "eJ6OT", + "name": "Top bar", + "width": "fill_container", + "height": 64, + "stroke": "$border", + "strokeWidth": { + "bottom": 1 + }, + "strokeAlignment": "inner", + "padding": [ + 0, + 40 + ], + "justifyContent": "space_between", + "alignItems": "center", + "children": [ + { + "type": "frame", + "id": "fLKfk", + "name": "Brand", + "gap": 10, + "alignItems": "center", + "children": [ + { + "type": "rectangle", + "id": "Oy7L3", + "name": "Logo", + "fill": { + "type": "image", + "enabled": true, + "url": "../website/design-assets/gameplane-icon.png", + "mode": "contain" + }, + "width": 24, + "height": 24 + }, + { + "type": "text", + "id": "k0J6XW", + "name": "Wordmark", + "fill": "$foreground/foreground", + "content": "gameplane", + "fontFamily": "$typography/font-mono", + "fontSize": 15, + "fontWeight": "600" + }, + { + "type": "text", + "id": "W2GPI", + "name": "Slash", + "fill": "$foreground/muted", + "content": "/", + "fontFamily": "$typography/font-sans", + "fontSize": 15, + "fontWeight": "normal" + }, + { + "type": "text", + "id": "FgVOn", + "name": "Product", + "fill": "$foreground/foreground", + "content": "Telemetry", + "fontFamily": "$typography/font-sans", + "fontSize": 15, + "fontWeight": "normal" + }, + { + "id": "th45R", + "type": "ref", + "ref": "Q401P", + "name": "Approx chip", + "descendants": { + "wH6ey": { + "content": "Approximate · self-reported" + } + } + } + ] + }, + { + "type": "frame", + "id": "YA8Cg", + "name": "Session", + "gap": 16, + "alignItems": "center", + "children": [ + { + "type": "text", + "id": "L19QW", + "name": "As of", + "fill": "$foreground/muted", + "content": "No data yet", + "fontFamily": "$typography/font-sans", + "fontSize": 13, + "fontWeight": "normal" + }, + { + "id": "R6ROEM", + "type": "ref", + "ref": "bCpKh", + "name": "Sign out", + "descendants": { + "Watg8": { + "icon": "log-out" + }, + "U8ICg": { + "content": "Sign out" + } + } + } + ] + } + ] + }, + { + "type": "frame", + "id": "W1xXA", + "name": "Content", + "width": "fill_container", + "layout": "vertical", + "gap": 32, + "padding": [ + 32, + 40, + 48, + 40 + ], + "children": [ + { + "type": "frame", + "id": "Y9ifbZ", + "name": "Title row", + "width": "fill_container", + "justifyContent": "space_between", + "alignItems": "end", + "children": [ + { + "type": "frame", + "id": "N3wvSC", + "name": "Title block", + "width": 760, + "layout": "vertical", + "gap": 8, + "children": [ + { + "type": "text", + "id": "m2ly0", + "name": "Eyebrow", + "fill": "$accent/accent", + "content": "PROVIDER OVERVIEW", + "fontFamily": "$typography/font-mono", + "fontSize": 12, + "fontWeight": "normal", + "letterSpacing": 1.5 + }, + { + "type": "text", + "id": "uw4PM", + "name": "Title", + "fill": "$foreground/foreground", + "content": "Usage across reporting installs", + "fontFamily": "$typography/font-mono", + "fontSize": 32, + "fontWeight": "600" + }, + { + "type": "text", + "id": "ZiECk", + "name": "Subtitle", + "fill": "$foreground/muted", + "textGrowth": "fixed-width", + "width": "fill_container", + "content": "Daily aggregates from self-reported, anonymous reports. Every figure is approximate: installs choose to report, and nothing is verified beyond the report signature.", + "lineHeight": 1.5, + "fontFamily": "$typography/font-sans", + "fontSize": 15, + "fontWeight": "normal" + } + ] + }, + { + "id": "Iz2y7", + "type": "ref", + "ref": "sklNL", + "name": "Range", + "children": [ + { + "id": "hnl8m", + "type": "ref", + "ref": "nO0GM", + "name": "7 days", + "descendants": { + "x5KZZd": { + "content": "7 days" + } + } + }, + { + "id": "LUA0n", + "type": "ref", + "ref": "iEQse", + "name": "30 days", + "descendants": { + "BtgBT": { + "content": "30 days" + } + } + }, + { + "id": "g25lA", + "type": "ref", + "ref": "nO0GM", + "name": "90 days", + "descendants": { + "x5KZZd": { + "content": "90 days" + } + } + }, + { + "id": "Y3uyQw", + "type": "ref", + "ref": "nO0GM", + "name": "365 days", + "descendants": { + "x5KZZd": { + "content": "365 days" + } + } + } + ] + } + ] + }, + { + "type": "frame", + "id": "A1PwG", + "name": "Empty state", + "width": "fill_container", + "height": 420, + "fill": "$surface/surface", + "cornerRadius": "$radius/3xl", + "stroke": "$border", + "strokeWidth": 1, + "strokeAlignment": "inner", + "layout": "vertical", + "gap": 12, + "padding": 40, + "justifyContent": "center", + "alignItems": "center", + "children": [ + { + "type": "frame", + "id": "q5cEEN", + "name": "Icon wrap", + "width": 48, + "height": 48, + "fill": "$accent/soft", + "cornerRadius": 12, + "justifyContent": "center", + "alignItems": "center", + "children": [ + { + "type": "icon", + "id": "iSRaQ", + "name": "Icon", + "width": 22, + "height": 22, + "icon": "inbox", + "library": "lucide", + "fill": "$accent/accent" + } + ] + }, + { + "type": "text", + "id": "T5Kr4b", + "name": "Title", + "fill": "$foreground/foreground", + "content": "No reports yet", + "fontFamily": "$typography/font-mono", + "fontSize": 20, + "fontWeight": "600" + }, + { + "type": "text", + "id": "JJM29", + "name": "Body", + "fill": "$foreground/muted", + "textGrowth": "fixed-width", + "width": 520, + "content": "Figures appear once this receiver has accepted reports for a full UTC day. Installs send to POST /ingest on the public port; nothing is shown until there is data, so no chart is drawn from zeros.", + "lineHeight": 1.5, + "textAlign": "center", + "fontFamily": "$typography/font-sans", + "fontSize": 14, + "fontWeight": "normal" + } + ] + } + ] + } + ] +} diff --git a/telemetry-receiver/design-export/json/a7wUpP.json b/telemetry-receiver/design-export/json/a7wUpP.json new file mode 100644 index 000000000..ad9f6ff82 --- /dev/null +++ b/telemetry-receiver/design-export/json/a7wUpP.json @@ -0,0 +1,187 @@ +{ + "type": "frame", + "id": "a7wUpP", + "x": 5127.959083557127, + "y": 1020.8789062499995, + "name": "Receiver / Login — refused", + "theme": { + "semantic": "dark" + }, + "clip": true, + "width": 1440, + "height": 900, + "fill": "$background/background", + "layout": "vertical", + "justifyContent": "center", + "alignItems": "center", + "children": [ + { + "id": "v4MbR", + "type": "ref", + "ref": "f07b1", + "name": "Login card", + "width": 400, + "padding": 32, + "gap": 24, + "stroke": "$border", + "strokeWidth": 1, + "strokeAlignment": "inner", + "children": [ + { + "type": "frame", + "id": "ojnmT", + "name": "Heading", + "width": "fill_container", + "layout": "vertical", + "gap": 10, + "children": [ + { + "type": "frame", + "id": "d3ASU", + "name": "Brand", + "gap": 10, + "alignItems": "center", + "children": [ + { + "type": "rectangle", + "id": "tOXnc", + "name": "Logo", + "fill": { + "type": "image", + "enabled": true, + "url": "../website/design-assets/gameplane-icon.png", + "mode": "contain" + }, + "width": 24, + "height": 24 + }, + { + "type": "text", + "id": "Rj0dV", + "name": "Wordmark", + "fill": "$foreground/foreground", + "content": "gameplane", + "fontFamily": "$typography/font-mono", + "fontSize": 15, + "fontWeight": "600" + } + ] + }, + { + "type": "text", + "id": "E5yaH", + "name": "Eyebrow", + "fill": "$accent/accent", + "content": "PRIVATE DASHBOARD", + "fontFamily": "$typography/font-mono", + "fontSize": 11, + "fontWeight": "normal", + "letterSpacing": 1.5 + }, + { + "type": "text", + "id": "bVf7f", + "name": "Title", + "fill": "$foreground/foreground", + "content": "Gameplane telemetry", + "fontFamily": "$typography/font-mono", + "fontSize": 24, + "fontWeight": "600" + }, + { + "type": "text", + "id": "GZktc", + "name": "Subtitle", + "fill": "$foreground/secondary", + "textGrowth": "fixed-width", + "width": "fill_container", + "content": "Private dashboard. Sign in with the dashboard token.", + "fontFamily": "$typography/font-sans", + "fontSize": 14, + "fontWeight": "normal" + } + ] + }, + { + "id": "D2oxw0", + "type": "ref", + "ref": "YxI4e", + "name": "Refusal alert", + "width": "fill_container", + "descendants": { + "K5BCAi": { + "content": "Invalid credentials" + }, + "jLj0v": { + "enabled": false + }, + "BLuJ9": { + "enabled": false + } + } + }, + { + "type": "frame", + "id": "XgGt2", + "name": "Form", + "width": "fill_container", + "layout": "vertical", + "gap": 16, + "children": [ + { + "id": "lZ2GC", + "type": "ref", + "ref": "Tu3H4", + "name": "Token field", + "width": "fill_container", + "descendants": { + "I4m7NO": { + "content": "Dashboard token" + }, + "DJsYb": { + "content": "••••••••••••••••••••••••" + }, + "PvRXY": { + "content": "The DASHBOARD_TOKEN value from the receiver's Secret." + } + } + }, + { + "id": "W9k1fv", + "type": "ref", + "ref": "hvQ4m", + "name": "Sign in", + "width": "fill_container", + "justifyContent": "center", + "descendants": { + "UYKSN": { + "enabled": false + }, + "y9bBK0": { + "content": "Sign in" + } + } + } + ] + } + ] + }, + { + "type": "frame", + "id": "E1qJ3", + "name": "Footer gap", + "width": 10, + "height": 24 + }, + { + "type": "text", + "id": "vbkKX", + "name": "Footnote", + "fill": "$foreground/muted", + "content": "Sessions last 12 hours. Rotating the token signs everyone out.", + "fontFamily": "$typography/font-sans", + "fontSize": 12, + "fontWeight": "normal" + } + ] +} diff --git a/telemetry-receiver/design-export/json/i0xK1E.json b/telemetry-receiver/design-export/json/i0xK1E.json new file mode 100644 index 000000000..681aa21b7 --- /dev/null +++ b/telemetry-receiver/design-export/json/i0xK1E.json @@ -0,0 +1,6005 @@ +{ + "type": "frame", + "id": "i0xK1E", + "x": 6727.959083557127, + "y": 1020.8789062499995, + "name": "Receiver / Overview", + "theme": { + "semantic": "dark" + }, + "clip": true, + "width": 1440, + "fill": "$background/background", + "layout": "vertical", + "children": [ + { + "type": "frame", + "id": "PrCYy", + "name": "Top bar", + "width": "fill_container", + "height": 64, + "stroke": "$border", + "strokeWidth": { + "bottom": 1 + }, + "strokeAlignment": "inner", + "padding": [ + 0, + 40 + ], + "justifyContent": "space_between", + "alignItems": "center", + "children": [ + { + "type": "frame", + "id": "EsFiy", + "name": "Brand", + "gap": 10, + "alignItems": "center", + "children": [ + { + "type": "rectangle", + "id": "RDJgN", + "name": "Logo", + "fill": { + "type": "image", + "enabled": true, + "url": "../website/design-assets/gameplane-icon.png", + "mode": "contain" + }, + "width": 24, + "height": 24 + }, + { + "type": "text", + "id": "ma9hV", + "name": "Wordmark", + "fill": "$foreground/foreground", + "content": "gameplane", + "fontFamily": "$typography/font-mono", + "fontSize": 15, + "fontWeight": "600" + }, + { + "type": "text", + "id": "bBhW1", + "name": "Slash", + "fill": "$foreground/muted", + "content": "/", + "fontFamily": "$typography/font-sans", + "fontSize": 15, + "fontWeight": "normal" + }, + { + "type": "text", + "id": "BZqrR", + "name": "Product", + "fill": "$foreground/foreground", + "content": "Telemetry", + "fontFamily": "$typography/font-sans", + "fontSize": 15, + "fontWeight": "normal" + }, + { + "id": "Y4ENwh", + "type": "ref", + "ref": "Q401P", + "name": "Approx chip", + "descendants": { + "wH6ey": { + "content": "Approximate · self-reported" + } + } + } + ] + }, + { + "type": "frame", + "id": "lIxVZ", + "name": "Session", + "gap": 16, + "alignItems": "center", + "children": [ + { + "type": "text", + "id": "W416z", + "name": "As of", + "fill": "$foreground/muted", + "content": "Data through 2026-10-06 (UTC)", + "fontFamily": "$typography/font-sans", + "fontSize": 13, + "fontWeight": "normal" + }, + { + "id": "vkzqR", + "type": "ref", + "ref": "bCpKh", + "name": "Sign out", + "descendants": { + "Watg8": { + "icon": "log-out" + }, + "U8ICg": { + "content": "Sign out" + } + } + } + ] + } + ] + }, + { + "type": "frame", + "id": "ZDH5z", + "name": "Content", + "width": "fill_container", + "layout": "vertical", + "gap": 32, + "padding": [ + 32, + 40, + 48, + 40 + ], + "children": [ + { + "type": "frame", + "id": "EEm5G", + "name": "Title row", + "width": "fill_container", + "justifyContent": "space_between", + "alignItems": "end", + "children": [ + { + "type": "frame", + "id": "cHCb4", + "name": "Title block", + "width": 760, + "layout": "vertical", + "gap": 8, + "children": [ + { + "type": "text", + "id": "BLOll", + "name": "Eyebrow", + "fill": "$accent/accent", + "content": "PROVIDER OVERVIEW", + "fontFamily": "$typography/font-mono", + "fontSize": 12, + "fontWeight": "normal", + "letterSpacing": 1.5 + }, + { + "type": "text", + "id": "gTaru", + "name": "Title", + "fill": "$foreground/foreground", + "content": "Usage across reporting installs", + "fontFamily": "$typography/font-mono", + "fontSize": 32, + "fontWeight": "600" + }, + { + "type": "text", + "id": "v8Ohz", + "name": "Subtitle", + "fill": "$foreground/muted", + "textGrowth": "fixed-width", + "width": "fill_container", + "content": "Daily aggregates from self-reported, anonymous reports. Every figure is approximate: installs choose to report, and nothing is verified beyond the report signature.", + "lineHeight": 1.5, + "fontFamily": "$typography/font-sans", + "fontSize": 15, + "fontWeight": "normal" + } + ] + }, + { + "id": "Gwgkx", + "type": "ref", + "ref": "sklNL", + "name": "Range", + "children": [ + { + "id": "spB9q", + "type": "ref", + "ref": "nO0GM", + "name": "7 days", + "descendants": { + "x5KZZd": { + "content": "7 days" + } + } + }, + { + "id": "CEvvH", + "type": "ref", + "ref": "iEQse", + "name": "30 days", + "descendants": { + "BtgBT": { + "content": "30 days" + } + } + }, + { + "id": "rcNte", + "type": "ref", + "ref": "nO0GM", + "name": "90 days", + "descendants": { + "x5KZZd": { + "content": "90 days" + } + } + }, + { + "id": "kZitx", + "type": "ref", + "ref": "nO0GM", + "name": "365 days", + "descendants": { + "x5KZZd": { + "content": "365 days" + } + } + } + ] + } + ] + }, + { + "type": "frame", + "id": "WyzQu", + "name": "Basic heading", + "width": "fill_container", + "layout": "vertical", + "gap": 4, + "children": [ + { + "type": "text", + "id": "NaBPb", + "name": "Heading", + "fill": "$foreground/foreground", + "content": "Basic reports", + "fontFamily": "$typography/font-mono", + "fontSize": 20, + "fontWeight": "600" + }, + { + "type": "text", + "id": "YTarC", + "name": "Sub", + "fill": "$foreground/muted", + "content": "Version, server count and template count from every report, basic or extended.", + "fontFamily": "$typography/font-sans", + "fontSize": 14, + "fontWeight": "normal" + } + ] + }, + { + "type": "frame", + "id": "iOskc", + "name": "Basic KPIs", + "width": "fill_container", + "gap": 16, + "children": [ + { + "id": "WySx8", + "type": "ref", + "ref": "sDDfo", + "name": "Reports, latest day", + "width": "fill_container", + "descendants": { + "yia1E": { + "content": "Reports, latest day" + }, + "tZRdh": { + "content": "1,284" + }, + "oPQEN": { + "content": "2026-10-06 (UTC)" + } + } + }, + { + "id": "kzCOI", + "type": "ref", + "ref": "sDDfo", + "name": "Reports, last 30 days", + "width": "fill_container", + "descendants": { + "yia1E": { + "content": "Reports, last 30 days" + }, + "tZRdh": { + "content": "37,912" + }, + "oPQEN": { + "content": "Sep 7 – Oct 6" + } + } + }, + { + "id": "hubU0", + "type": "ref", + "ref": "sDDfo", + "name": "Reports since collection began", + "width": "fill_container", + "descendants": { + "yia1E": { + "content": "Reports since collection began" + }, + "tZRdh": { + "content": "412,055" + }, + "oPQEN": { + "content": "Since 2026-03-02" + } + } + }, + { + "id": "LI86z", + "type": "ref", + "ref": "sDDfo", + "name": "Median servers per install", + "width": "fill_container", + "descendants": { + "yia1E": { + "content": "Median servers per install" + }, + "tZRdh": { + "content": "3" + }, + "oPQEN": { + "content": "Latest day; mean 4.6" + } + } + } + ] + }, + { + "type": "frame", + "id": "rTyW6", + "name": "Reports per day", + "width": "fill_container", + "fill": "$surface/surface", + "cornerRadius": "$radius/3xl", + "stroke": "$border", + "strokeWidth": 1, + "strokeAlignment": "inner", + "layout": "vertical", + "gap": 16, + "padding": 20, + "children": [ + { + "type": "frame", + "id": "EHBKg", + "name": "Header", + "width": "fill_container", + "justifyContent": "space_between", + "children": [ + { + "type": "frame", + "id": "poOcW", + "name": "Titles", + "layout": "vertical", + "gap": 4, + "children": [ + { + "type": "text", + "id": "wurGm", + "name": "Title", + "fill": "$foreground/foreground", + "content": "Reports per day", + "fontFamily": "$typography/font-sans", + "fontSize": 15, + "fontWeight": "600" + }, + { + "type": "text", + "id": "rZQiH", + "name": "Sub", + "fill": "$foreground/muted", + "content": "Accepted reports per UTC day, last 30 days", + "fontFamily": "$typography/font-sans", + "fontSize": 13, + "fontWeight": "normal" + } + ] + }, + { + "type": "text", + "id": "LWxly", + "name": "Table link", + "fill": "$accent/accent", + "content": "View as table", + "fontFamily": "$typography/font-sans", + "fontSize": 13, + "fontWeight": "normal" + } + ] + }, + { + "type": "frame", + "id": "FZz94", + "name": "Plot row", + "width": "fill_container", + "gap": 8, + "children": [ + { + "type": "frame", + "id": "r2jIv", + "name": "Y axis", + "width": 44, + "height": 208, + "layout": "vertical", + "justifyContent": "space_between", + "alignItems": "end", + "children": [ + { + "type": "text", + "id": "lDbNf", + "name": "Tick 1,500", + "fill": "$foreground/muted", + "content": "1,500", + "fontFamily": "$typography/font-sans", + "fontSize": 11, + "fontWeight": "normal" + }, + { + "type": "text", + "id": "gfX9J", + "name": "Tick 1,000", + "fill": "$foreground/muted", + "content": "1,000", + "fontFamily": "$typography/font-sans", + "fontSize": 11, + "fontWeight": "normal" + }, + { + "type": "text", + "id": "RpyKE", + "name": "Tick 500", + "fill": "$foreground/muted", + "content": "500", + "fontFamily": "$typography/font-sans", + "fontSize": 11, + "fontWeight": "normal" + }, + { + "type": "text", + "id": "uhswv", + "name": "Tick 0", + "fill": "$foreground/muted", + "content": "0", + "fontFamily": "$typography/font-sans", + "fontSize": 11, + "fontWeight": "normal" + } + ] + }, + { + "type": "frame", + "id": "itl6U", + "name": "Plot", + "width": 1260, + "height": 208, + "layout": "none", + "children": [ + { + "type": "rectangle", + "id": "ehS8J", + "x": 0, + "y": 4, + "name": "Grid 0", + "fill": "$chart/grid", + "width": 1260, + "height": 1 + }, + { + "type": "rectangle", + "id": "RM4fJ", + "x": 0, + "y": 70.66666666666667, + "name": "Grid 1", + "fill": "$chart/grid", + "width": 1260, + "height": 1 + }, + { + "type": "rectangle", + "id": "scHGZ", + "x": 0, + "y": 137.33333333333334, + "name": "Grid 2", + "fill": "$chart/grid", + "width": 1260, + "height": 1 + }, + { + "type": "rectangle", + "id": "DogbT", + "x": 0, + "y": 204, + "name": "Baseline", + "fill": "$chart/baseline", + "width": 1260, + "height": 1 + }, + { + "type": "frame", + "id": "z70gC", + "x": 0, + "y": -20, + "name": "Columns", + "width": 1260, + "height": 224, + "alignItems": "end", + "children": [ + { + "type": "frame", + "id": "z5eSP5", + "name": "Day 1", + "width": 42, + "layout": "vertical", + "gap": 4, + "alignItems": "center", + "children": [ + { + "type": "rectangle", + "cornerRadius": [ + 4, + 4, + 0, + 0 + ], + "id": "NpPE9", + "name": "Column", + "fill": "$chart/series-1", + "width": 20, + "height": 149 + } + ] + }, + { + "type": "frame", + "id": "InasO", + "name": "Day 2", + "width": 42, + "layout": "vertical", + "gap": 4, + "alignItems": "center", + "children": [ + { + "type": "rectangle", + "cornerRadius": [ + 4, + 4, + 0, + 0 + ], + "id": "blVmn", + "name": "Column", + "fill": "$chart/series-1", + "width": 20, + "height": 152 + } + ] + }, + { + "type": "frame", + "id": "S0c3P5", + "name": "Day 3", + "width": 42, + "layout": "vertical", + "gap": 4, + "alignItems": "center", + "children": [ + { + "type": "rectangle", + "cornerRadius": [ + 4, + 4, + 0, + 0 + ], + "id": "xVz1h", + "name": "Column", + "fill": "$chart/series-1", + "width": 20, + "height": 153 + } + ] + }, + { + "type": "frame", + "id": "gIes7", + "name": "Day 4", + "width": 42, + "layout": "vertical", + "gap": 4, + "alignItems": "center", + "children": [ + { + "type": "rectangle", + "cornerRadius": [ + 4, + 4, + 0, + 0 + ], + "id": "h00jy", + "name": "Column", + "fill": "$chart/series-1", + "width": 20, + "height": 155 + } + ] + }, + { + "type": "frame", + "id": "cZqOZ", + "name": "Day 5", + "width": 42, + "layout": "vertical", + "gap": 4, + "alignItems": "center", + "children": [ + { + "type": "rectangle", + "cornerRadius": [ + 4, + 4, + 0, + 0 + ], + "id": "S4olM", + "name": "Column", + "fill": "$chart/series-1", + "width": 20, + "height": 156 + } + ] + }, + { + "type": "frame", + "id": "zpa9L", + "name": "Day 6", + "width": 42, + "layout": "vertical", + "gap": 4, + "alignItems": "center", + "children": [ + { + "type": "rectangle", + "cornerRadius": [ + 4, + 4, + 0, + 0 + ], + "id": "akFYW", + "name": "Column", + "fill": "$chart/series-1", + "width": 20, + "height": 147 + } + ] + }, + { + "type": "frame", + "id": "UQMno", + "name": "Day 7", + "width": 42, + "layout": "vertical", + "gap": 4, + "alignItems": "center", + "children": [ + { + "type": "rectangle", + "cornerRadius": [ + 4, + 4, + 0, + 0 + ], + "id": "K4f0E8", + "name": "Column", + "fill": "$chart/series-1", + "width": 20, + "height": 145 + } + ] + }, + { + "type": "frame", + "id": "ZtVqm", + "name": "Day 8", + "width": 42, + "layout": "vertical", + "gap": 4, + "alignItems": "center", + "children": [ + { + "type": "rectangle", + "cornerRadius": [ + 4, + 4, + 0, + 0 + ], + "id": "c41OTM", + "name": "Column", + "fill": "$chart/series-1", + "width": 20, + "height": 155 + } + ] + }, + { + "type": "frame", + "id": "CzyFK", + "name": "Day 9", + "width": 42, + "layout": "vertical", + "gap": 4, + "alignItems": "center", + "children": [ + { + "type": "rectangle", + "cornerRadius": [ + 4, + 4, + 0, + 0 + ], + "id": "wuxFw", + "name": "Column", + "fill": "$chart/series-1", + "width": 20, + "height": 157 + } + ] + }, + { + "type": "frame", + "id": "JkRh7", + "name": "Day 10", + "width": 42, + "layout": "vertical", + "gap": 4, + "alignItems": "center", + "children": [ + { + "type": "rectangle", + "cornerRadius": [ + 4, + 4, + 0, + 0 + ], + "id": "O0XwqM", + "name": "Column", + "fill": "$chart/series-1", + "width": 20, + "height": 159 + } + ] + }, + { + "type": "frame", + "id": "GPoP1", + "name": "Day 11", + "width": 42, + "layout": "vertical", + "gap": 4, + "alignItems": "center", + "children": [ + { + "type": "rectangle", + "cornerRadius": [ + 4, + 4, + 0, + 0 + ], + "id": "jJg0u", + "name": "Column", + "fill": "$chart/series-1", + "width": 20, + "height": 160 + } + ] + }, + { + "type": "frame", + "id": "IKV9c", + "name": "Day 12", + "width": 42, + "layout": "vertical", + "gap": 4, + "alignItems": "center", + "children": [ + { + "type": "rectangle", + "cornerRadius": [ + 4, + 4, + 0, + 0 + ], + "id": "AVr3K", + "name": "Column", + "fill": "$chart/series-1", + "width": 20, + "height": 161 + } + ] + }, + { + "type": "frame", + "id": "YaNBo", + "name": "Day 13", + "width": 42, + "layout": "vertical", + "gap": 4, + "alignItems": "center", + "children": [ + { + "type": "rectangle", + "cornerRadius": [ + 4, + 4, + 0, + 0 + ], + "id": "xrTlP", + "name": "Column", + "fill": "$chart/series-1", + "width": 20, + "height": 151 + } + ] + }, + { + "type": "frame", + "id": "KxeCR", + "name": "Day 14", + "width": 42, + "layout": "vertical", + "gap": 4, + "alignItems": "center", + "children": [ + { + "type": "rectangle", + "cornerRadius": [ + 4, + 4, + 0, + 0 + ], + "id": "wNeIt", + "name": "Column", + "fill": "$chart/series-1", + "width": 20, + "height": 149 + } + ] + }, + { + "type": "frame", + "id": "jUFhJ", + "name": "Day 15", + "width": 42, + "layout": "vertical", + "gap": 4, + "alignItems": "center", + "children": [ + { + "type": "rectangle", + "cornerRadius": [ + 4, + 4, + 0, + 0 + ], + "id": "S2bIOp", + "name": "Column", + "fill": "$chart/series-1", + "width": 20, + "height": 160 + } + ] + }, + { + "type": "frame", + "id": "wniFH", + "name": "Day 16", + "width": 42, + "layout": "vertical", + "gap": 4, + "alignItems": "center", + "children": [ + { + "type": "rectangle", + "cornerRadius": [ + 4, + 4, + 0, + 0 + ], + "id": "G4H63L", + "name": "Column", + "fill": "$chart/series-1", + "width": 20, + "height": 162 + } + ] + }, + { + "type": "frame", + "id": "xUpKT", + "name": "Day 17", + "width": 42, + "layout": "vertical", + "gap": 4, + "alignItems": "center", + "children": [ + { + "type": "rectangle", + "cornerRadius": [ + 4, + 4, + 0, + 0 + ], + "id": "ylFmR", + "name": "Column", + "fill": "$chart/series-1", + "width": 20, + "height": 163 + } + ] + }, + { + "type": "frame", + "id": "LVN8u", + "name": "Day 18", + "width": 42, + "layout": "vertical", + "gap": 4, + "alignItems": "center", + "children": [ + { + "type": "rectangle", + "cornerRadius": [ + 4, + 4, + 0, + 0 + ], + "id": "JNSrg", + "name": "Column", + "fill": "$chart/series-1", + "width": 20, + "height": 164 + } + ] + }, + { + "type": "frame", + "id": "p7bhT", + "name": "Day 19", + "width": 42, + "layout": "vertical", + "gap": 4, + "alignItems": "center", + "children": [ + { + "type": "rectangle", + "cornerRadius": [ + 4, + 4, + 0, + 0 + ], + "id": "YvPGq", + "name": "Column", + "fill": "$chart/series-1", + "width": 20, + "height": 166 + } + ] + }, + { + "type": "frame", + "id": "tzVMN", + "name": "Day 20", + "width": 42, + "layout": "vertical", + "gap": 4, + "alignItems": "center", + "children": [ + { + "type": "rectangle", + "cornerRadius": [ + 4, + 4, + 0, + 0 + ], + "id": "Cwn6p", + "name": "Column", + "fill": "$chart/series-1", + "width": 20, + "height": 155 + } + ] + }, + { + "type": "frame", + "id": "jt3C1", + "name": "Day 21", + "width": 42, + "layout": "vertical", + "gap": 4, + "alignItems": "center", + "children": [ + { + "type": "rectangle", + "cornerRadius": [ + 4, + 4, + 0, + 0 + ], + "id": "B3ZW9n", + "name": "Column", + "fill": "$chart/series-1", + "width": 20, + "height": 152 + } + ] + }, + { + "type": "frame", + "id": "qsYxX", + "name": "Day 22", + "width": 42, + "layout": "vertical", + "gap": 4, + "alignItems": "center", + "children": [ + { + "type": "rectangle", + "cornerRadius": [ + 4, + 4, + 0, + 0 + ], + "id": "VOVr1", + "name": "Column", + "fill": "$chart/series-1", + "width": 20, + "height": 163 + } + ] + }, + { + "type": "frame", + "id": "myPLG", + "name": "Day 23", + "width": 42, + "layout": "vertical", + "gap": 4, + "alignItems": "center", + "children": [ + { + "type": "rectangle", + "cornerRadius": [ + 4, + 4, + 0, + 0 + ], + "id": "t1rje", + "name": "Column", + "fill": "$chart/series-1", + "width": 20, + "height": 165 + } + ] + }, + { + "type": "frame", + "id": "NV5dX", + "name": "Day 24", + "width": 42, + "layout": "vertical", + "gap": 4, + "alignItems": "center", + "children": [ + { + "type": "rectangle", + "cornerRadius": [ + 4, + 4, + 0, + 0 + ], + "id": "zGHCv", + "name": "Column", + "fill": "$chart/series-1", + "width": 20, + "height": 167 + } + ] + }, + { + "type": "frame", + "id": "UbiJU", + "name": "Day 25", + "width": 42, + "layout": "vertical", + "gap": 4, + "alignItems": "center", + "children": [ + { + "type": "rectangle", + "cornerRadius": [ + 4, + 4, + 0, + 0 + ], + "id": "T2GSn7", + "name": "Column", + "fill": "$chart/series-1", + "width": 20, + "height": 168 + } + ] + }, + { + "type": "frame", + "id": "thEOO", + "name": "Day 26", + "width": 42, + "layout": "vertical", + "gap": 4, + "alignItems": "center", + "children": [ + { + "type": "rectangle", + "cornerRadius": [ + 4, + 4, + 0, + 0 + ], + "id": "LbbCa", + "name": "Column", + "fill": "$chart/series-1", + "width": 20, + "height": 169 + } + ] + }, + { + "type": "frame", + "id": "N08Apm", + "name": "Day 27", + "width": 42, + "layout": "vertical", + "gap": 4, + "alignItems": "center", + "children": [ + { + "type": "rectangle", + "cornerRadius": [ + 4, + 4, + 0, + 0 + ], + "id": "jyLUn", + "name": "Column", + "fill": "$chart/series-1", + "width": 20, + "height": 158 + } + ] + }, + { + "type": "frame", + "id": "gNm4A", + "name": "Day 28", + "width": 42, + "layout": "vertical", + "gap": 4, + "alignItems": "center", + "children": [ + { + "type": "rectangle", + "cornerRadius": [ + 4, + 4, + 0, + 0 + ], + "id": "fSZus", + "name": "Column", + "fill": "$chart/series-1", + "width": 20, + "height": 157 + } + ] + }, + { + "type": "frame", + "id": "cvTAF", + "name": "Day 29", + "width": 42, + "layout": "vertical", + "gap": 4, + "alignItems": "center", + "children": [ + { + "type": "rectangle", + "cornerRadius": [ + 4, + 4, + 0, + 0 + ], + "id": "M8UwO0", + "name": "Column", + "fill": "$chart/series-1", + "width": 20, + "height": 168 + } + ] + }, + { + "type": "frame", + "id": "snyg0", + "name": "Day 30", + "width": 42, + "layout": "vertical", + "gap": 4, + "alignItems": "center", + "children": [ + { + "type": "text", + "id": "rbAnN", + "name": "Value label", + "fill": "$foreground/foreground", + "content": "1,284", + "fontFamily": "$typography/font-sans", + "fontSize": 11, + "fontWeight": "600" + }, + { + "type": "rectangle", + "cornerRadius": [ + 4, + 4, + 0, + 0 + ], + "id": "g1YRBL", + "name": "Column", + "fill": "$chart/series-1", + "width": 20, + "height": 171 + } + ] + } + ] + } + ] + } + ] + }, + { + "type": "frame", + "id": "Bt3QV", + "name": "X axis", + "width": "fill_container", + "padding": [ + 0, + 0, + 0, + 52 + ], + "children": [ + { + "type": "frame", + "id": "M4cUj", + "name": "X 1", + "width": 42, + "height": 14, + "justifyContent": "center", + "children": [ + { + "type": "text", + "id": "S4zhC", + "name": "Label", + "fill": "$foreground/muted", + "content": "Sep 7", + "fontFamily": "$typography/font-sans", + "fontSize": 11, + "fontWeight": "normal" + } + ] + }, + { + "type": "frame", + "id": "irNR9", + "name": "X 2", + "width": 42, + "height": 14, + "justifyContent": "center" + }, + { + "type": "frame", + "id": "XTio8", + "name": "X 3", + "width": 42, + "height": 14, + "justifyContent": "center" + }, + { + "type": "frame", + "id": "k38ubo", + "name": "X 4", + "width": 42, + "height": 14, + "justifyContent": "center" + }, + { + "type": "frame", + "id": "meJSb", + "name": "X 5", + "width": 42, + "height": 14, + "justifyContent": "center" + }, + { + "type": "frame", + "id": "fvMy1", + "name": "X 6", + "width": 42, + "height": 14, + "justifyContent": "center" + }, + { + "type": "frame", + "id": "Gi10h", + "name": "X 7", + "width": 42, + "height": 14, + "justifyContent": "center" + }, + { + "type": "frame", + "id": "sxkq4", + "name": "X 8", + "width": 42, + "height": 14, + "justifyContent": "center", + "children": [ + { + "type": "text", + "id": "W8qe74", + "name": "Label", + "fill": "$foreground/muted", + "content": "Sep 14", + "fontFamily": "$typography/font-sans", + "fontSize": 11, + "fontWeight": "normal" + } + ] + }, + { + "type": "frame", + "id": "c8FG2", + "name": "X 9", + "width": 42, + "height": 14, + "justifyContent": "center" + }, + { + "type": "frame", + "id": "xlbNh", + "name": "X 10", + "width": 42, + "height": 14, + "justifyContent": "center" + }, + { + "type": "frame", + "id": "MTXE9", + "name": "X 11", + "width": 42, + "height": 14, + "justifyContent": "center" + }, + { + "type": "frame", + "id": "vQUPg", + "name": "X 12", + "width": 42, + "height": 14, + "justifyContent": "center" + }, + { + "type": "frame", + "id": "A0jjv", + "name": "X 13", + "width": 42, + "height": 14, + "justifyContent": "center" + }, + { + "type": "frame", + "id": "KuEti", + "name": "X 14", + "width": 42, + "height": 14, + "justifyContent": "center" + }, + { + "type": "frame", + "id": "WG8Df", + "name": "X 15", + "width": 42, + "height": 14, + "justifyContent": "center", + "children": [ + { + "type": "text", + "id": "MUVNi", + "name": "Label", + "fill": "$foreground/muted", + "content": "Sep 21", + "fontFamily": "$typography/font-sans", + "fontSize": 11, + "fontWeight": "normal" + } + ] + }, + { + "type": "frame", + "id": "fXfoH", + "name": "X 16", + "width": 42, + "height": 14, + "justifyContent": "center" + }, + { + "type": "frame", + "id": "vMXSq", + "name": "X 17", + "width": 42, + "height": 14, + "justifyContent": "center" + }, + { + "type": "frame", + "id": "qf1sj", + "name": "X 18", + "width": 42, + "height": 14, + "justifyContent": "center" + }, + { + "type": "frame", + "id": "YzSdz", + "name": "X 19", + "width": 42, + "height": 14, + "justifyContent": "center" + }, + { + "type": "frame", + "id": "ENZVx", + "name": "X 20", + "width": 42, + "height": 14, + "justifyContent": "center" + }, + { + "type": "frame", + "id": "x0qIV", + "name": "X 21", + "width": 42, + "height": 14, + "justifyContent": "center" + }, + { + "type": "frame", + "id": "Og5PT", + "name": "X 22", + "width": 42, + "height": 14, + "justifyContent": "center", + "children": [ + { + "type": "text", + "id": "n2HIzG", + "name": "Label", + "fill": "$foreground/muted", + "content": "Sep 28", + "fontFamily": "$typography/font-sans", + "fontSize": 11, + "fontWeight": "normal" + } + ] + }, + { + "type": "frame", + "id": "d67ks", + "name": "X 23", + "width": 42, + "height": 14, + "justifyContent": "center" + }, + { + "type": "frame", + "id": "SE93c", + "name": "X 24", + "width": 42, + "height": 14, + "justifyContent": "center" + }, + { + "type": "frame", + "id": "iusfp", + "name": "X 25", + "width": 42, + "height": 14, + "justifyContent": "center" + }, + { + "type": "frame", + "id": "etd4K", + "name": "X 26", + "width": 42, + "height": 14, + "justifyContent": "center" + }, + { + "type": "frame", + "id": "lGgoB", + "name": "X 27", + "width": 42, + "height": 14, + "justifyContent": "center" + }, + { + "type": "frame", + "id": "jH0Zu", + "name": "X 28", + "width": 42, + "height": 14, + "justifyContent": "center" + }, + { + "type": "frame", + "id": "A29IAZ", + "name": "X 29", + "width": 42, + "height": 14, + "justifyContent": "center", + "children": [ + { + "type": "text", + "id": "kTkYU", + "name": "Label", + "fill": "$foreground/muted", + "content": "Oct 5", + "fontFamily": "$typography/font-sans", + "fontSize": 11, + "fontWeight": "normal" + } + ] + }, + { + "type": "frame", + "id": "IPQap", + "name": "X 30", + "width": 42, + "height": 14, + "justifyContent": "center" + } + ] + } + ] + }, + { + "type": "frame", + "id": "p8RL2", + "name": "Basic breakdowns", + "width": "fill_container", + "gap": 16, + "children": [ + { + "type": "frame", + "id": "Waady", + "name": "Versions", + "width": "fill_container", + "fill": "$surface/surface", + "cornerRadius": "$radius/3xl", + "stroke": "$border", + "strokeWidth": 1, + "strokeAlignment": "inner", + "layout": "vertical", + "gap": 16, + "padding": 20, + "children": [ + { + "type": "frame", + "id": "BTPQR", + "name": "Titles", + "layout": "vertical", + "gap": 4, + "children": [ + { + "type": "text", + "id": "HlgPb", + "name": "Title", + "fill": "$foreground/foreground", + "content": "Versions", + "fontFamily": "$typography/font-sans", + "fontSize": 15, + "fontWeight": "600" + }, + { + "type": "text", + "id": "uO6sB", + "name": "Sub", + "fill": "$foreground/muted", + "textGrowth": "fixed-width", + "width": 600, + "content": "Reports on the latest day by reported version. Top 10, then Other and Invalid.", + "fontFamily": "$typography/font-sans", + "fontSize": 13, + "fontWeight": "normal" + } + ] + }, + { + "type": "frame", + "id": "jjkwN", + "name": "Bars", + "width": "fill_container", + "layout": "vertical", + "gap": 10, + "children": [ + { + "id": "UYCro", + "type": "ref", + "ref": "wPbIp", + "name": "Version 0.3.0", + "width": "fill_container", + "descendants": { + "j1J75": { + "content": "0.3.0", + "fill": "$foreground/foreground" + }, + "dMFUm": { + "width": 432 + }, + "uTqdm": { + "content": "812" + } + } + }, + { + "id": "GIRd2", + "type": "ref", + "ref": "wPbIp", + "name": "Version 0.3.0-rc.1", + "width": "fill_container", + "descendants": { + "j1J75": { + "content": "0.3.0-rc.1", + "fill": "$foreground/foreground" + }, + "dMFUm": { + "width": 107 + }, + "uTqdm": { + "content": "201" + } + } + }, + { + "id": "tKNOd", + "type": "ref", + "ref": "wPbIp", + "name": "Version 0.2.0-beta.8", + "width": "fill_container", + "descendants": { + "j1J75": { + "content": "0.2.0-beta.8", + "fill": "$foreground/foreground" + }, + "dMFUm": { + "width": 76 + }, + "uTqdm": { + "content": "143" + } + } + }, + { + "id": "o7v436", + "type": "ref", + "ref": "wPbIp", + "name": "Version 0.2.0-beta.7", + "width": "fill_container", + "descendants": { + "j1J75": { + "content": "0.2.0-beta.7", + "fill": "$foreground/foreground" + }, + "dMFUm": { + "width": 32 + }, + "uTqdm": { + "content": "61" + } + } + }, + { + "id": "vmMgu", + "type": "ref", + "ref": "wPbIp", + "name": "Version 0.2.0-beta.6", + "width": "fill_container", + "descendants": { + "j1J75": { + "content": "0.2.0-beta.6", + "fill": "$foreground/foreground" + }, + "dMFUm": { + "width": 14 + }, + "uTqdm": { + "content": "27" + } + } + }, + { + "id": "J6DG4", + "type": "ref", + "ref": "wPbIp", + "name": "Version 0.2.0-beta.5", + "width": "fill_container", + "descendants": { + "j1J75": { + "content": "0.2.0-beta.5", + "fill": "$foreground/foreground" + }, + "dMFUm": { + "width": 5 + }, + "uTqdm": { + "content": "9" + } + } + }, + { + "id": "n1k1ys", + "type": "ref", + "ref": "wPbIp", + "name": "Version dev", + "width": "fill_container", + "descendants": { + "j1J75": { + "content": "dev", + "fill": "$foreground/foreground" + }, + "dMFUm": { + "width": 2 + }, + "uTqdm": { + "content": "4" + } + } + }, + { + "id": "aFTHI", + "type": "ref", + "ref": "wPbIp", + "name": "Version Other", + "width": "fill_container", + "descendants": { + "j1J75": { + "content": "Other", + "fill": "$foreground/muted" + }, + "dMFUm": { + "width": 13 + }, + "uTqdm": { + "content": "24" + } + } + }, + { + "id": "EmQ33", + "type": "ref", + "ref": "wPbIp", + "name": "Version Invalid", + "width": "fill_container", + "descendants": { + "j1J75": { + "content": "Invalid", + "fill": "$foreground/muted" + }, + "dMFUm": { + "width": 2 + }, + "uTqdm": { + "content": "3" + } + } + } + ] + } + ] + }, + { + "type": "frame", + "id": "U44h65", + "name": "Fleet size", + "width": "fill_container", + "fill": "$surface/surface", + "cornerRadius": "$radius/3xl", + "stroke": "$border", + "strokeWidth": 1, + "strokeAlignment": "inner", + "layout": "vertical", + "gap": 16, + "padding": 20, + "children": [ + { + "type": "frame", + "id": "DIXJG", + "name": "Titles", + "layout": "vertical", + "gap": 4, + "children": [ + { + "type": "text", + "id": "adjqS", + "name": "Title", + "fill": "$foreground/foreground", + "content": "Servers per install", + "fontFamily": "$typography/font-sans", + "fontSize": 15, + "fontWeight": "600" + }, + { + "type": "text", + "id": "YGPWl", + "name": "Sub", + "fill": "$foreground/muted", + "textGrowth": "fixed-width", + "width": 600, + "content": "Installs on the latest day by game-server count. Median 3, mean 4.6.", + "fontFamily": "$typography/font-sans", + "fontSize": 13, + "fontWeight": "normal" + } + ] + }, + { + "type": "frame", + "id": "YDYbk", + "name": "Plot row", + "width": "fill_container", + "gap": 8, + "children": [ + { + "type": "frame", + "id": "mpEfM", + "name": "Y axis", + "width": 44, + "height": 188, + "layout": "vertical", + "justifyContent": "space_between", + "alignItems": "end", + "children": [ + { + "type": "text", + "id": "nT2NS", + "name": "Tick 400", + "fill": "$foreground/muted", + "content": "400", + "fontFamily": "$typography/font-sans", + "fontSize": 11, + "fontWeight": "normal" + }, + { + "type": "text", + "id": "iL2Mm", + "name": "Tick 200", + "fill": "$foreground/muted", + "content": "200", + "fontFamily": "$typography/font-sans", + "fontSize": 11, + "fontWeight": "normal" + }, + { + "type": "text", + "id": "ovHB0", + "name": "Tick 0", + "fill": "$foreground/muted", + "content": "0", + "fontFamily": "$typography/font-sans", + "fontSize": 11, + "fontWeight": "normal" + } + ] + }, + { + "type": "frame", + "id": "CG2nD", + "name": "Plot", + "width": 580, + "height": 188, + "layout": "none", + "children": [ + { + "type": "rectangle", + "id": "aXWl4", + "x": 0, + "y": 94, + "name": "Grid mid", + "fill": "$chart/grid", + "width": 580, + "height": 1 + }, + { + "type": "rectangle", + "id": "cYdRA", + "x": 0, + "y": 4, + "name": "Grid top", + "fill": "$chart/grid", + "width": 580, + "height": 1 + }, + { + "type": "rectangle", + "id": "rszg8", + "x": 0, + "y": 184, + "name": "Baseline", + "fill": "$chart/baseline", + "width": 580, + "height": 1 + }, + { + "type": "frame", + "id": "s9D8Th", + "x": 0, + "y": -16, + "name": "Columns", + "width": 580, + "height": 200, + "alignItems": "end", + "children": [ + { + "type": "frame", + "id": "reyUt", + "name": "Band 0", + "width": 58, + "layout": "vertical", + "gap": 4, + "alignItems": "center", + "children": [ + { + "type": "rectangle", + "cornerRadius": [ + 4, + 4, + 0, + 0 + ], + "id": "p84xhn", + "name": "Column", + "fill": "$chart/series-1", + "width": 24, + "height": 18 + } + ] + }, + { + "type": "frame", + "id": "RpQdP", + "name": "Band 1", + "width": 58, + "layout": "vertical", + "gap": 4, + "alignItems": "center", + "children": [ + { + "type": "text", + "id": "C6TPdA", + "name": "Value label", + "fill": "$foreground/foreground", + "content": "388", + "fontFamily": "$typography/font-sans", + "fontSize": 11, + "fontWeight": "600" + }, + { + "type": "rectangle", + "cornerRadius": [ + 4, + 4, + 0, + 0 + ], + "id": "AaTqq", + "name": "Column", + "fill": "$chart/series-1", + "width": 24, + "height": 175 + } + ] + }, + { + "type": "frame", + "id": "ho3un", + "name": "Band 2", + "width": 58, + "layout": "vertical", + "gap": 4, + "alignItems": "center", + "children": [ + { + "type": "rectangle", + "cornerRadius": [ + 4, + 4, + 0, + 0 + ], + "id": "wAb0H", + "name": "Column", + "fill": "$chart/series-1", + "width": 24, + "height": 111 + } + ] + }, + { + "type": "frame", + "id": "s0YGas", + "name": "Band 3–5", + "width": 58, + "layout": "vertical", + "gap": 4, + "alignItems": "center", + "children": [ + { + "type": "rectangle", + "cornerRadius": [ + 4, + 4, + 0, + 0 + ], + "id": "lNkS6", + "name": "Column", + "fill": "$chart/series-1", + "width": 24, + "height": 153 + } + ] + }, + { + "type": "frame", + "id": "dpBDC", + "name": "Band 6–10", + "width": 58, + "layout": "vertical", + "gap": 4, + "alignItems": "center", + "children": [ + { + "type": "rectangle", + "cornerRadius": [ + 4, + 4, + 0, + 0 + ], + "id": "hiiSo", + "name": "Column", + "fill": "$chart/series-1", + "width": 24, + "height": 68 + } + ] + }, + { + "type": "frame", + "id": "Pp20f", + "name": "Band 11–25", + "width": 58, + "layout": "vertical", + "gap": 4, + "alignItems": "center", + "children": [ + { + "type": "rectangle", + "cornerRadius": [ + 4, + 4, + 0, + 0 + ], + "id": "c0IdCw", + "name": "Column", + "fill": "$chart/series-1", + "width": 24, + "height": 35 + } + ] + }, + { + "type": "frame", + "id": "bUATG", + "name": "Band 26–50", + "width": 58, + "layout": "vertical", + "gap": 4, + "alignItems": "center", + "children": [ + { + "type": "rectangle", + "cornerRadius": [ + 4, + 4, + 0, + 0 + ], + "id": "AWB3G", + "name": "Column", + "fill": "$chart/series-1", + "width": 24, + "height": 11 + } + ] + }, + { + "type": "frame", + "id": "Ln3uf", + "name": "Band 51–100", + "width": 58, + "layout": "vertical", + "gap": 4, + "alignItems": "center", + "children": [ + { + "type": "rectangle", + "cornerRadius": [ + 4, + 4, + 0, + 0 + ], + "id": "l9OsCk", + "name": "Column", + "fill": "$chart/series-1", + "width": 24, + "height": 4 + } + ] + }, + { + "type": "frame", + "id": "VwdWm", + "name": "Band 101–250", + "width": 58, + "layout": "vertical", + "gap": 4, + "alignItems": "center", + "children": [ + { + "type": "rectangle", + "cornerRadius": [ + 4, + 4, + 0, + 0 + ], + "id": "yUnHi", + "name": "Column", + "fill": "$chart/series-1", + "width": 24, + "height": 2 + } + ] + }, + { + "type": "frame", + "id": "d07UWo", + "name": "Band 250+", + "width": 58, + "layout": "vertical", + "gap": 4, + "alignItems": "center", + "children": [ + { + "type": "rectangle", + "cornerRadius": [ + 4, + 4, + 0, + 0 + ], + "id": "vcnPm", + "name": "Column", + "fill": "$chart/series-1", + "width": 24, + "height": 2 + } + ] + } + ] + } + ] + } + ] + }, + { + "type": "frame", + "id": "J39J9", + "name": "X axis", + "width": "fill_container", + "padding": [ + 0, + 0, + 0, + 52 + ], + "children": [ + { + "type": "frame", + "id": "J3Ib1", + "name": "X 0", + "width": 58, + "height": 14, + "justifyContent": "center", + "children": [ + { + "type": "text", + "id": "TqaxM", + "name": "Label", + "fill": "$foreground/muted", + "content": "0", + "fontFamily": "$typography/font-sans", + "fontSize": 11, + "fontWeight": "normal" + } + ] + }, + { + "type": "frame", + "id": "uRPEI", + "name": "X 1", + "width": 58, + "height": 14, + "justifyContent": "center", + "children": [ + { + "type": "text", + "id": "zDLJt", + "name": "Label", + "fill": "$foreground/muted", + "content": "1", + "fontFamily": "$typography/font-sans", + "fontSize": 11, + "fontWeight": "normal" + } + ] + }, + { + "type": "frame", + "id": "h7vLr", + "name": "X 2", + "width": 58, + "height": 14, + "justifyContent": "center", + "children": [ + { + "type": "text", + "id": "yLtgH", + "name": "Label", + "fill": "$foreground/muted", + "content": "2", + "fontFamily": "$typography/font-sans", + "fontSize": 11, + "fontWeight": "normal" + } + ] + }, + { + "type": "frame", + "id": "TtGcG", + "name": "X 3–5", + "width": 58, + "height": 14, + "justifyContent": "center", + "children": [ + { + "type": "text", + "id": "vHWYV", + "name": "Label", + "fill": "$foreground/muted", + "content": "3–5", + "fontFamily": "$typography/font-sans", + "fontSize": 11, + "fontWeight": "normal" + } + ] + }, + { + "type": "frame", + "id": "nG5OI", + "name": "X 6–10", + "width": 58, + "height": 14, + "justifyContent": "center", + "children": [ + { + "type": "text", + "id": "ecex2", + "name": "Label", + "fill": "$foreground/muted", + "content": "6–10", + "fontFamily": "$typography/font-sans", + "fontSize": 11, + "fontWeight": "normal" + } + ] + }, + { + "type": "frame", + "id": "ENTZH", + "name": "X 11–25", + "width": 58, + "height": 14, + "justifyContent": "center", + "children": [ + { + "type": "text", + "id": "nOODW", + "name": "Label", + "fill": "$foreground/muted", + "content": "11–25", + "fontFamily": "$typography/font-sans", + "fontSize": 11, + "fontWeight": "normal" + } + ] + }, + { + "type": "frame", + "id": "Th42X", + "name": "X 26–50", + "width": 58, + "height": 14, + "justifyContent": "center", + "children": [ + { + "type": "text", + "id": "YQgnf", + "name": "Label", + "fill": "$foreground/muted", + "content": "26–50", + "fontFamily": "$typography/font-sans", + "fontSize": 11, + "fontWeight": "normal" + } + ] + }, + { + "type": "frame", + "id": "w9yqCf", + "name": "X 51–100", + "width": 58, + "height": 14, + "justifyContent": "center", + "children": [ + { + "type": "text", + "id": "Deys8", + "name": "Label", + "fill": "$foreground/muted", + "content": "51–100", + "fontFamily": "$typography/font-sans", + "fontSize": 11, + "fontWeight": "normal" + } + ] + }, + { + "type": "frame", + "id": "qm5a7", + "name": "X 101–250", + "width": 58, + "height": 14, + "justifyContent": "center", + "children": [ + { + "type": "text", + "id": "vDHQs", + "name": "Label", + "fill": "$foreground/muted", + "content": "101–250", + "fontFamily": "$typography/font-sans", + "fontSize": 11, + "fontWeight": "normal" + } + ] + }, + { + "type": "frame", + "id": "NLU1i", + "name": "X 250+", + "width": 58, + "height": 14, + "justifyContent": "center", + "children": [ + { + "type": "text", + "id": "MY7si", + "name": "Label", + "fill": "$foreground/muted", + "content": "250+", + "fontFamily": "$typography/font-sans", + "fontSize": 11, + "fontWeight": "normal" + } + ] + } + ] + }, + { + "type": "text", + "id": "KeDpH", + "name": "Axis title", + "fill": "$foreground/muted", + "content": "Game servers per install", + "fontFamily": "$typography/font-sans", + "fontSize": 11, + "fontWeight": "normal" + } + ] + } + ] + }, + { + "type": "rectangle", + "id": "N3PIj", + "name": "Section divider", + "fill": "$separator/separator", + "width": "fill_container", + "height": 1 + }, + { + "type": "frame", + "id": "oW2pt", + "name": "Extended heading", + "width": "fill_container", + "justifyContent": "space_between", + "alignItems": "end", + "children": [ + { + "type": "frame", + "id": "D8zEc", + "name": "Titles", + "width": 900, + "layout": "vertical", + "gap": 4, + "children": [ + { + "type": "text", + "id": "RtFVZ", + "name": "Heading", + "fill": "$foreground/foreground", + "content": "Extended reports", + "fontFamily": "$typography/font-mono", + "fontSize": 20, + "fontWeight": "600" + }, + { + "type": "text", + "id": "kUcKw", + "name": "Sub", + "fill": "$foreground/muted", + "textGrowth": "fixed-width", + "width": "fill_container", + "content": "Installs that also share the extended tier. Each install counts once per day; shares are weighted by install-days in the range.", + "fontFamily": "$typography/font-sans", + "fontSize": 14, + "fontWeight": "normal" + } + ] + }, + { + "type": "frame", + "id": "YLA8E", + "name": "Coverage", + "layout": "vertical", + "gap": 6, + "alignItems": "end", + "children": [ + { + "type": "text", + "id": "q0byl", + "name": "Coverage label", + "fill": "$foreground/secondary", + "content": "Coverage: 71% of reports in range include extended data", + "fontFamily": "$typography/font-sans", + "fontSize": 13, + "fontWeight": "normal" + }, + { + "type": "frame", + "id": "gXFmK", + "name": "Coverage meter", + "width": 320, + "height": 8, + "fill": "$chart/track", + "cornerRadius": 4, + "children": [ + { + "type": "rectangle", + "cornerRadius": 4, + "id": "lO0v9", + "name": "Fill", + "fill": "$chart/series-1", + "width": 227, + "height": 8 + } + ] + } + ] + } + ] + }, + { + "type": "frame", + "id": "GwrDY", + "name": "Install KPIs", + "width": "fill_container", + "gap": 16, + "children": [ + { + "id": "aRoss", + "type": "ref", + "ref": "sDDfo", + "name": "Active installs, latest day", + "width": "fill_container", + "descendants": { + "yia1E": { + "content": "Active installs, latest day" + }, + "tZRdh": { + "content": "912" + }, + "oPQEN": { + "content": "2026-10-06 (UTC)" + } + } + }, + { + "id": "R2Bns", + "type": "ref", + "ref": "sDDfo", + "name": "Active, last 7 days", + "width": "fill_container", + "descendants": { + "yia1E": { + "content": "Active, last 7 days" + }, + "tZRdh": { + "content": "1,031" + }, + "oPQEN": { + "content": "Unique installs" + } + } + }, + { + "id": "UMt1g", + "type": "ref", + "ref": "sDDfo", + "name": "Active, last 30 days", + "width": "fill_container", + "descendants": { + "yia1E": { + "content": "Active, last 30 days" + }, + "tZRdh": { + "content": "1,106" + }, + "oPQEN": { + "content": "Unique installs" + } + } + }, + { + "id": "Ga6OP", + "type": "ref", + "ref": "sDDfo", + "name": "New installs, last 30 days", + "width": "fill_container", + "descendants": { + "yia1E": { + "content": "New installs, last 30 days" + }, + "tZRdh": { + "content": "214" + }, + "oPQEN": { + "content": "First report in range" + } + } + }, + { + "id": "okh9E", + "type": "ref", + "ref": "sDDfo", + "name": "Lapsed, last 30 days", + "width": "fill_container", + "descendants": { + "yia1E": { + "content": "Lapsed, last 30 days" + }, + "tZRdh": { + "content": "87" + }, + "oPQEN": { + "content": "No report for 30 days" + } + } + } + ] + }, + { + "type": "frame", + "id": "IkA62", + "name": "New and lapsed", + "width": "fill_container", + "gap": 16, + "children": [ + { + "type": "frame", + "id": "kohdp", + "name": "New installs per day", + "width": "fill_container", + "fill": "$surface/surface", + "cornerRadius": "$radius/3xl", + "stroke": "$border", + "strokeWidth": 1, + "strokeAlignment": "inner", + "layout": "vertical", + "gap": 16, + "padding": 20, + "children": [ + { + "type": "frame", + "id": "WQjKA", + "name": "Titles", + "layout": "vertical", + "gap": 4, + "children": [ + { + "type": "text", + "id": "L78e6", + "name": "Title", + "fill": "$foreground/foreground", + "content": "New installs per day", + "fontFamily": "$typography/font-sans", + "fontSize": 15, + "fontWeight": "600" + }, + { + "type": "text", + "id": "nWMZz", + "name": "Sub", + "fill": "$foreground/muted", + "content": "First accepted report from an install ID", + "fontFamily": "$typography/font-sans", + "fontSize": 13, + "fontWeight": "normal" + } + ] + }, + { + "type": "frame", + "id": "o4RFwP", + "name": "Plot row", + "width": "fill_container", + "gap": 8, + "children": [ + { + "type": "frame", + "id": "ym7NT", + "name": "Y axis", + "width": 28, + "height": 148, + "layout": "vertical", + "justifyContent": "space_between", + "alignItems": "end", + "children": [ + { + "type": "text", + "id": "jejpp", + "name": "Tick 15", + "fill": "$foreground/muted", + "content": "15", + "fontFamily": "$typography/font-sans", + "fontSize": 11, + "fontWeight": "normal" + }, + { + "type": "text", + "id": "P5aiv", + "name": "Tick 10", + "fill": "$foreground/muted", + "content": "10", + "fontFamily": "$typography/font-sans", + "fontSize": 11, + "fontWeight": "normal" + }, + { + "type": "text", + "id": "AwNN9", + "name": "Tick 5", + "fill": "$foreground/muted", + "content": "5", + "fontFamily": "$typography/font-sans", + "fontSize": 11, + "fontWeight": "normal" + }, + { + "type": "text", + "id": "Z6mKj", + "name": "Tick 0", + "fill": "$foreground/muted", + "content": "0", + "fontFamily": "$typography/font-sans", + "fontSize": 11, + "fontWeight": "normal" + } + ] + }, + { + "type": "frame", + "id": "fQjoT", + "name": "Plot", + "width": 570, + "height": 148, + "layout": "none", + "children": [ + { + "type": "rectangle", + "id": "IytaL", + "x": 0, + "y": 4, + "name": "Grid 0", + "fill": "$chart/grid", + "width": 570, + "height": 1 + }, + { + "type": "rectangle", + "id": "GWhSK", + "x": 0, + "y": 50.666666666666664, + "name": "Grid 1", + "fill": "$chart/grid", + "width": 570, + "height": 1 + }, + { + "type": "rectangle", + "id": "dWBkG", + "x": 0, + "y": 97.33333333333333, + "name": "Grid 2", + "fill": "$chart/grid", + "width": 570, + "height": 1 + }, + { + "type": "rectangle", + "id": "IE11Z", + "x": 0, + "y": 144, + "name": "Baseline", + "fill": "$chart/baseline", + "width": 570, + "height": 1 + }, + { + "type": "frame", + "id": "oRmhw", + "x": 0, + "y": -16, + "name": "Columns", + "width": 570, + "height": 160, + "alignItems": "end", + "children": [ + { + "type": "frame", + "id": "c2JI0d", + "name": "Day 1", + "width": 19, + "layout": "vertical", + "gap": 4, + "alignItems": "center", + "children": [ + { + "type": "rectangle", + "cornerRadius": [ + 3, + 3, + 0, + 0 + ], + "id": "sRswa", + "name": "Column", + "fill": "$chart/series-1", + "width": 12, + "height": 56 + } + ] + }, + { + "type": "frame", + "id": "VSj5w", + "name": "Day 2", + "width": 19, + "layout": "vertical", + "gap": 4, + "alignItems": "center", + "children": [ + { + "type": "rectangle", + "cornerRadius": [ + 3, + 3, + 0, + 0 + ], + "id": "b4FuhU", + "name": "Column", + "fill": "$chart/series-1", + "width": 12, + "height": 65 + } + ] + }, + { + "type": "frame", + "id": "Y7c3f", + "name": "Day 3", + "width": 19, + "layout": "vertical", + "gap": 4, + "alignItems": "center", + "children": [ + { + "type": "rectangle", + "cornerRadius": [ + 3, + 3, + 0, + 0 + ], + "id": "S07Rr7", + "name": "Column", + "fill": "$chart/series-1", + "width": 12, + "height": 84 + } + ] + }, + { + "type": "frame", + "id": "La65r", + "name": "Day 4", + "width": 19, + "layout": "vertical", + "gap": 4, + "alignItems": "center", + "children": [ + { + "type": "rectangle", + "cornerRadius": [ + 3, + 3, + 0, + 0 + ], + "id": "C7kPJ", + "name": "Column", + "fill": "$chart/series-1", + "width": 12, + "height": 47 + } + ] + }, + { + "type": "frame", + "id": "Jl9Z3", + "name": "Day 5", + "width": 19, + "layout": "vertical", + "gap": 4, + "alignItems": "center", + "children": [ + { + "type": "rectangle", + "cornerRadius": [ + 3, + 3, + 0, + 0 + ], + "id": "YZeiI", + "name": "Column", + "fill": "$chart/series-1", + "width": 12, + "height": 75 + } + ] + }, + { + "type": "frame", + "id": "H8qZvr", + "name": "Day 6", + "width": 19, + "layout": "vertical", + "gap": 4, + "alignItems": "center", + "children": [ + { + "type": "rectangle", + "cornerRadius": [ + 3, + 3, + 0, + 0 + ], + "id": "pGKYf", + "name": "Column", + "fill": "$chart/series-1", + "width": 12, + "height": 37 + } + ] + }, + { + "type": "frame", + "id": "cmwpi", + "name": "Day 7", + "width": 19, + "layout": "vertical", + "gap": 4, + "alignItems": "center", + "children": [ + { + "type": "rectangle", + "cornerRadius": [ + 3, + 3, + 0, + 0 + ], + "id": "P39eWq", + "name": "Column", + "fill": "$chart/series-1", + "width": 12, + "height": 28 + } + ] + }, + { + "type": "frame", + "id": "dy6uF", + "name": "Day 8", + "width": 19, + "layout": "vertical", + "gap": 4, + "alignItems": "center", + "children": [ + { + "type": "rectangle", + "cornerRadius": [ + 3, + 3, + 0, + 0 + ], + "id": "B7uoL", + "name": "Column", + "fill": "$chart/series-1", + "width": 12, + "height": 84 + } + ] + }, + { + "type": "frame", + "id": "sfUUn", + "name": "Day 9", + "width": 19, + "layout": "vertical", + "gap": 4, + "alignItems": "center", + "children": [ + { + "type": "rectangle", + "cornerRadius": [ + 3, + 3, + 0, + 0 + ], + "id": "qZzeP", + "name": "Column", + "fill": "$chart/series-1", + "width": 12, + "height": 103 + } + ] + }, + { + "type": "frame", + "id": "uWAKs", + "name": "Day 10", + "width": 19, + "layout": "vertical", + "gap": 4, + "alignItems": "center", + "children": [ + { + "type": "rectangle", + "cornerRadius": [ + 3, + 3, + 0, + 0 + ], + "id": "D6zKZ", + "name": "Column", + "fill": "$chart/series-1", + "width": 12, + "height": 65 + } + ] + }, + { + "type": "frame", + "id": "ua4GB", + "name": "Day 11", + "width": 19, + "layout": "vertical", + "gap": 4, + "alignItems": "center", + "children": [ + { + "type": "rectangle", + "cornerRadius": [ + 3, + 3, + 0, + 0 + ], + "id": "pfWt0", + "name": "Column", + "fill": "$chart/series-1", + "width": 12, + "height": 75 + } + ] + }, + { + "type": "frame", + "id": "ca97S", + "name": "Day 12", + "width": 19, + "layout": "vertical", + "gap": 4, + "alignItems": "center", + "children": [ + { + "type": "rectangle", + "cornerRadius": [ + 3, + 3, + 0, + 0 + ], + "id": "KVbRG", + "name": "Column", + "fill": "$chart/series-1", + "width": 12, + "height": 93 + } + ] + }, + { + "type": "frame", + "id": "O0tsH", + "name": "Day 13", + "width": 19, + "layout": "vertical", + "gap": 4, + "alignItems": "center", + "children": [ + { + "type": "rectangle", + "cornerRadius": [ + 3, + 3, + 0, + 0 + ], + "id": "jBr0N", + "name": "Column", + "fill": "$chart/series-1", + "width": 12, + "height": 37 + } + ] + }, + { + "type": "frame", + "id": "xVAVP", + "name": "Day 14", + "width": 19, + "layout": "vertical", + "gap": 4, + "alignItems": "center", + "children": [ + { + "type": "rectangle", + "cornerRadius": [ + 3, + 3, + 0, + 0 + ], + "id": "EE7O7", + "name": "Column", + "fill": "$chart/series-1", + "width": 12, + "height": 47 + } + ] + }, + { + "type": "frame", + "id": "PHymd", + "name": "Day 15", + "width": 19, + "layout": "vertical", + "gap": 4, + "alignItems": "center", + "children": [ + { + "type": "rectangle", + "cornerRadius": [ + 3, + 3, + 0, + 0 + ], + "id": "s7onNl", + "name": "Column", + "fill": "$chart/series-1", + "width": 12, + "height": 75 + } + ] + }, + { + "type": "frame", + "id": "aKFiw", + "name": "Day 16", + "width": 19, + "layout": "vertical", + "gap": 4, + "alignItems": "center", + "children": [ + { + "type": "rectangle", + "cornerRadius": [ + 3, + 3, + 0, + 0 + ], + "id": "ol8P1", + "name": "Column", + "fill": "$chart/series-1", + "width": 12, + "height": 84 + } + ] + }, + { + "type": "frame", + "id": "mCkG3", + "name": "Day 17", + "width": 19, + "layout": "vertical", + "gap": 4, + "alignItems": "center", + "children": [ + { + "type": "rectangle", + "cornerRadius": [ + 3, + 3, + 0, + 0 + ], + "id": "XZl62", + "name": "Column", + "fill": "$chart/series-1", + "width": 12, + "height": 112 + } + ] + }, + { + "type": "frame", + "id": "iwRFf", + "name": "Day 18", + "width": 19, + "layout": "vertical", + "gap": 4, + "alignItems": "center", + "children": [ + { + "type": "rectangle", + "cornerRadius": [ + 3, + 3, + 0, + 0 + ], + "id": "EiBO2", + "name": "Column", + "fill": "$chart/series-1", + "width": 12, + "height": 65 + } + ] + }, + { + "type": "frame", + "id": "CrRQ2", + "name": "Day 19", + "width": 19, + "layout": "vertical", + "gap": 4, + "alignItems": "center", + "children": [ + { + "type": "rectangle", + "cornerRadius": [ + 3, + 3, + 0, + 0 + ], + "id": "Pwfez", + "name": "Column", + "fill": "$chart/series-1", + "width": 12, + "height": 93 + } + ] + }, + { + "type": "frame", + "id": "V9ooQE", + "name": "Day 20", + "width": 19, + "layout": "vertical", + "gap": 4, + "alignItems": "center", + "children": [ + { + "type": "rectangle", + "cornerRadius": [ + 3, + 3, + 0, + 0 + ], + "id": "PQHxL", + "name": "Column", + "fill": "$chart/series-1", + "width": 12, + "height": 47 + } + ] + }, + { + "type": "frame", + "id": "l3DFyW", + "name": "Day 21", + "width": 19, + "layout": "vertical", + "gap": 4, + "alignItems": "center", + "children": [ + { + "type": "rectangle", + "cornerRadius": [ + 3, + 3, + 0, + 0 + ], + "id": "IrXZH", + "name": "Column", + "fill": "$chart/series-1", + "width": 12, + "height": 37 + } + ] + }, + { + "type": "frame", + "id": "bPs9q", + "name": "Day 22", + "width": 19, + "layout": "vertical", + "gap": 4, + "alignItems": "center", + "children": [ + { + "type": "rectangle", + "cornerRadius": [ + 3, + 3, + 0, + 0 + ], + "id": "dnjBt", + "name": "Column", + "fill": "$chart/series-1", + "width": 12, + "height": 84 + } + ] + }, + { + "type": "frame", + "id": "HuVhZ", + "name": "Day 23", + "width": 19, + "layout": "vertical", + "gap": 4, + "alignItems": "center", + "children": [ + { + "type": "rectangle", + "cornerRadius": [ + 3, + 3, + 0, + 0 + ], + "id": "K7nP3", + "name": "Column", + "fill": "$chart/series-1", + "width": 12, + "height": 75 + } + ] + }, + { + "type": "frame", + "id": "LmVIV", + "name": "Day 24", + "width": 19, + "layout": "vertical", + "gap": 4, + "alignItems": "center", + "children": [ + { + "type": "rectangle", + "cornerRadius": [ + 3, + 3, + 0, + 0 + ], + "id": "rIi37", + "name": "Column", + "fill": "$chart/series-1", + "width": 12, + "height": 103 + } + ] + }, + { + "type": "frame", + "id": "v8atQO", + "name": "Day 25", + "width": 19, + "layout": "vertical", + "gap": 4, + "alignItems": "center", + "children": [ + { + "type": "rectangle", + "cornerRadius": [ + 3, + 3, + 0, + 0 + ], + "id": "WlniK", + "name": "Column", + "fill": "$chart/series-1", + "width": 12, + "height": 121 + } + ] + }, + { + "type": "frame", + "id": "LkHnd", + "name": "Day 26", + "width": 19, + "layout": "vertical", + "gap": 4, + "alignItems": "center", + "children": [ + { + "type": "rectangle", + "cornerRadius": [ + 3, + 3, + 0, + 0 + ], + "id": "rdBQ3", + "name": "Column", + "fill": "$chart/series-1", + "width": 12, + "height": 93 + } + ] + }, + { + "type": "frame", + "id": "k5FhJ", + "name": "Day 27", + "width": 19, + "layout": "vertical", + "gap": 4, + "alignItems": "center", + "children": [ + { + "type": "rectangle", + "cornerRadius": [ + 3, + 3, + 0, + 0 + ], + "id": "O2DWD", + "name": "Column", + "fill": "$chart/series-1", + "width": 12, + "height": 56 + } + ] + }, + { + "type": "frame", + "id": "n932tK", + "name": "Day 28", + "width": 19, + "layout": "vertical", + "gap": 4, + "alignItems": "center", + "children": [ + { + "type": "rectangle", + "cornerRadius": [ + 3, + 3, + 0, + 0 + ], + "id": "QvO87", + "name": "Column", + "fill": "$chart/series-1", + "width": 12, + "height": 47 + } + ] + }, + { + "type": "frame", + "id": "bGgTJ", + "name": "Day 29", + "width": 19, + "layout": "vertical", + "gap": 4, + "alignItems": "center", + "children": [ + { + "type": "rectangle", + "cornerRadius": [ + 3, + 3, + 0, + 0 + ], + "id": "G7Wn2T", + "name": "Column", + "fill": "$chart/series-1", + "width": 12, + "height": 84 + } + ] + }, + { + "type": "frame", + "id": "WhjYb", + "name": "Day 30", + "width": 19, + "layout": "vertical", + "gap": 4, + "alignItems": "center", + "children": [ + { + "type": "text", + "id": "GvXpz", + "name": "Value label", + "fill": "$foreground/foreground", + "content": "7", + "fontFamily": "$typography/font-sans", + "fontSize": 11, + "fontWeight": "600" + }, + { + "type": "rectangle", + "cornerRadius": [ + 3, + 3, + 0, + 0 + ], + "id": "T6Y94", + "name": "Column", + "fill": "$chart/series-1", + "width": 12, + "height": 65 + } + ] + } + ] + } + ] + } + ] + }, + { + "type": "frame", + "id": "gOkG8", + "name": "X axis", + "width": 606, + "padding": [ + 0, + 0, + 0, + 36 + ], + "justifyContent": "space_between", + "children": [ + { + "type": "text", + "id": "ervGE", + "name": "X Sep 7", + "fill": "$foreground/muted", + "content": "Sep 7", + "fontFamily": "$typography/font-sans", + "fontSize": 11, + "fontWeight": "normal" + }, + { + "type": "text", + "id": "a2GW8", + "name": "X Sep 21", + "fill": "$foreground/muted", + "content": "Sep 21", + "fontFamily": "$typography/font-sans", + "fontSize": 11, + "fontWeight": "normal" + }, + { + "type": "text", + "id": "C6cZG", + "name": "X Oct 6", + "fill": "$foreground/muted", + "content": "Oct 6", + "fontFamily": "$typography/font-sans", + "fontSize": 11, + "fontWeight": "normal" + } + ] + } + ] + }, + { + "type": "frame", + "id": "D8ofHq", + "name": "Lapsed installs per day", + "width": "fill_container", + "fill": "$surface/surface", + "cornerRadius": "$radius/3xl", + "stroke": "$border", + "strokeWidth": 1, + "strokeAlignment": "inner", + "layout": "vertical", + "gap": 16, + "padding": 20, + "children": [ + { + "type": "frame", + "id": "Qjo3F", + "name": "Titles", + "layout": "vertical", + "gap": 4, + "children": [ + { + "type": "text", + "id": "lPda7", + "name": "Title", + "fill": "$foreground/foreground", + "content": "Lapsed installs per day", + "fontFamily": "$typography/font-sans", + "fontSize": 15, + "fontWeight": "600" + }, + { + "type": "text", + "id": "NMwMD", + "name": "Sub", + "fill": "$foreground/muted", + "content": "Installs whose last report was 30 days earlier", + "fontFamily": "$typography/font-sans", + "fontSize": 13, + "fontWeight": "normal" + } + ] + }, + { + "type": "frame", + "id": "Z0E8bU", + "name": "Plot row", + "width": "fill_container", + "gap": 8, + "children": [ + { + "type": "frame", + "id": "vULf9", + "name": "Y axis", + "width": 28, + "height": 148, + "layout": "vertical", + "justifyContent": "space_between", + "alignItems": "end", + "children": [ + { + "type": "text", + "id": "bK7yi", + "name": "Tick 15", + "fill": "$foreground/muted", + "content": "15", + "fontFamily": "$typography/font-sans", + "fontSize": 11, + "fontWeight": "normal" + }, + { + "type": "text", + "id": "xKq7c", + "name": "Tick 10", + "fill": "$foreground/muted", + "content": "10", + "fontFamily": "$typography/font-sans", + "fontSize": 11, + "fontWeight": "normal" + }, + { + "type": "text", + "id": "FrUJZ", + "name": "Tick 5", + "fill": "$foreground/muted", + "content": "5", + "fontFamily": "$typography/font-sans", + "fontSize": 11, + "fontWeight": "normal" + }, + { + "type": "text", + "id": "D7B7t", + "name": "Tick 0", + "fill": "$foreground/muted", + "content": "0", + "fontFamily": "$typography/font-sans", + "fontSize": 11, + "fontWeight": "normal" + } + ] + }, + { + "type": "frame", + "id": "Yn1gC", + "name": "Plot", + "width": 570, + "height": 148, + "layout": "none", + "children": [ + { + "type": "rectangle", + "id": "VlMsG", + "x": 0, + "y": 4, + "name": "Grid 0", + "fill": "$chart/grid", + "width": 570, + "height": 1 + }, + { + "type": "rectangle", + "id": "g82r0i", + "x": 0, + "y": 50.666666666666664, + "name": "Grid 1", + "fill": "$chart/grid", + "width": 570, + "height": 1 + }, + { + "type": "rectangle", + "id": "Zmurq", + "x": 0, + "y": 97.33333333333333, + "name": "Grid 2", + "fill": "$chart/grid", + "width": 570, + "height": 1 + }, + { + "type": "rectangle", + "id": "itHgw", + "x": 0, + "y": 144, + "name": "Baseline", + "fill": "$chart/baseline", + "width": 570, + "height": 1 + }, + { + "type": "frame", + "id": "M8hyoM", + "x": 0, + "y": -16, + "name": "Columns", + "width": 570, + "height": 160, + "alignItems": "end", + "children": [ + { + "type": "frame", + "id": "JHU6d", + "name": "Day 1", + "width": 19, + "layout": "vertical", + "gap": 4, + "alignItems": "center", + "children": [ + { + "type": "rectangle", + "cornerRadius": [ + 3, + 3, + 0, + 0 + ], + "id": "MxfRd", + "name": "Column", + "fill": "$chart/series-2", + "width": 12, + "height": 19 + } + ] + }, + { + "type": "frame", + "id": "yjWt7", + "name": "Day 2", + "width": 19, + "layout": "vertical", + "gap": 4, + "alignItems": "center", + "children": [ + { + "type": "rectangle", + "cornerRadius": [ + 3, + 3, + 0, + 0 + ], + "id": "q6JXl", + "name": "Column", + "fill": "$chart/series-2", + "width": 12, + "height": 28 + } + ] + }, + { + "type": "frame", + "id": "jGTXx", + "name": "Day 3", + "width": 19, + "layout": "vertical", + "gap": 4, + "alignItems": "center", + "children": [ + { + "type": "rectangle", + "cornerRadius": [ + 3, + 3, + 0, + 0 + ], + "id": "xBSEy", + "name": "Column", + "fill": "$chart/series-2", + "width": 12, + "height": 19 + } + ] + }, + { + "type": "frame", + "id": "TnTV3", + "name": "Day 4", + "width": 19, + "layout": "vertical", + "gap": 4, + "alignItems": "center", + "children": [ + { + "type": "rectangle", + "cornerRadius": [ + 3, + 3, + 0, + 0 + ], + "id": "MF5xk", + "name": "Column", + "fill": "$chart/series-2", + "width": 12, + "height": 37 + } + ] + }, + { + "type": "frame", + "id": "sTOVc", + "name": "Day 5", + "width": 19, + "layout": "vertical", + "gap": 4, + "alignItems": "center", + "children": [ + { + "type": "rectangle", + "cornerRadius": [ + 3, + 3, + 0, + 0 + ], + "id": "c3FTSh", + "name": "Column", + "fill": "$chart/series-2", + "width": 12, + "height": 28 + } + ] + }, + { + "type": "frame", + "id": "z74CGq", + "name": "Day 6", + "width": 19, + "layout": "vertical", + "gap": 4, + "alignItems": "center", + "children": [ + { + "type": "rectangle", + "cornerRadius": [ + 3, + 3, + 0, + 0 + ], + "id": "g08k9", + "name": "Column", + "fill": "$chart/series-2", + "width": 12, + "height": 9 + } + ] + }, + { + "type": "frame", + "id": "qxQ6s", + "name": "Day 7", + "width": 19, + "layout": "vertical", + "gap": 4, + "alignItems": "center", + "children": [ + { + "type": "rectangle", + "cornerRadius": [ + 3, + 3, + 0, + 0 + ], + "id": "TDQv0", + "name": "Column", + "fill": "$chart/series-2", + "width": 12, + "height": 19 + } + ] + }, + { + "type": "frame", + "id": "xfu5D", + "name": "Day 8", + "width": 19, + "layout": "vertical", + "gap": 4, + "alignItems": "center", + "children": [ + { + "type": "rectangle", + "cornerRadius": [ + 3, + 3, + 0, + 0 + ], + "id": "xjBRo", + "name": "Column", + "fill": "$chart/series-2", + "width": 12, + "height": 28 + } + ] + }, + { + "type": "frame", + "id": "dZosB", + "name": "Day 9", + "width": 19, + "layout": "vertical", + "gap": 4, + "alignItems": "center", + "children": [ + { + "type": "rectangle", + "cornerRadius": [ + 3, + 3, + 0, + 0 + ], + "id": "AMBLC", + "name": "Column", + "fill": "$chart/series-2", + "width": 12, + "height": 37 + } + ] + }, + { + "type": "frame", + "id": "IqsEy", + "name": "Day 10", + "width": 19, + "layout": "vertical", + "gap": 4, + "alignItems": "center", + "children": [ + { + "type": "rectangle", + "cornerRadius": [ + 3, + 3, + 0, + 0 + ], + "id": "m4n1Vt", + "name": "Column", + "fill": "$chart/series-2", + "width": 12, + "height": 19 + } + ] + }, + { + "type": "frame", + "id": "oc8bt", + "name": "Day 11", + "width": 19, + "layout": "vertical", + "gap": 4, + "alignItems": "center", + "children": [ + { + "type": "rectangle", + "cornerRadius": [ + 3, + 3, + 0, + 0 + ], + "id": "UL6ow", + "name": "Column", + "fill": "$chart/series-2", + "width": 12, + "height": 28 + } + ] + }, + { + "type": "frame", + "id": "x1MdoE", + "name": "Day 12", + "width": 19, + "layout": "vertical", + "gap": 4, + "alignItems": "center", + "children": [ + { + "type": "rectangle", + "cornerRadius": [ + 3, + 3, + 0, + 0 + ], + "id": "Hn2hY", + "name": "Column", + "fill": "$chart/series-2", + "width": 12, + "height": 47 + } + ] + }, + { + "type": "frame", + "id": "JIgLl", + "name": "Day 13", + "width": 19, + "layout": "vertical", + "gap": 4, + "alignItems": "center", + "children": [ + { + "type": "rectangle", + "cornerRadius": [ + 3, + 3, + 0, + 0 + ], + "id": "Hxuyb", + "name": "Column", + "fill": "$chart/series-2", + "width": 12, + "height": 19 + } + ] + }, + { + "type": "frame", + "id": "as6Wj", + "name": "Day 14", + "width": 19, + "layout": "vertical", + "gap": 4, + "alignItems": "center", + "children": [ + { + "type": "rectangle", + "cornerRadius": [ + 3, + 3, + 0, + 0 + ], + "id": "bhlml", + "name": "Column", + "fill": "$chart/series-2", + "width": 12, + "height": 9 + } + ] + }, + { + "type": "frame", + "id": "OqXAN", + "name": "Day 15", + "width": 19, + "layout": "vertical", + "gap": 4, + "alignItems": "center", + "children": [ + { + "type": "rectangle", + "cornerRadius": [ + 3, + 3, + 0, + 0 + ], + "id": "RoHcb", + "name": "Column", + "fill": "$chart/series-2", + "width": 12, + "height": 28 + } + ] + }, + { + "type": "frame", + "id": "zTQ4X", + "name": "Day 16", + "width": 19, + "layout": "vertical", + "gap": 4, + "alignItems": "center", + "children": [ + { + "type": "rectangle", + "cornerRadius": [ + 3, + 3, + 0, + 0 + ], + "id": "CJy4y", + "name": "Column", + "fill": "$chart/series-2", + "width": 12, + "height": 37 + } + ] + }, + { + "type": "frame", + "id": "nna2a", + "name": "Day 17", + "width": 19, + "layout": "vertical", + "gap": 4, + "alignItems": "center", + "children": [ + { + "type": "rectangle", + "cornerRadius": [ + 3, + 3, + 0, + 0 + ], + "id": "ShsE0", + "name": "Column", + "fill": "$chart/series-2", + "width": 12, + "height": 19 + } + ] + }, + { + "type": "frame", + "id": "b3tQ8", + "name": "Day 18", + "width": 19, + "layout": "vertical", + "gap": 4, + "alignItems": "center", + "children": [ + { + "type": "rectangle", + "cornerRadius": [ + 3, + 3, + 0, + 0 + ], + "id": "dh3X7", + "name": "Column", + "fill": "$chart/series-2", + "width": 12, + "height": 28 + } + ] + }, + { + "type": "frame", + "id": "MVv3S", + "name": "Day 19", + "width": 19, + "layout": "vertical", + "gap": 4, + "alignItems": "center", + "children": [ + { + "type": "rectangle", + "cornerRadius": [ + 3, + 3, + 0, + 0 + ], + "id": "adyxe", + "name": "Column", + "fill": "$chart/series-2", + "width": 12, + "height": 28 + } + ] + }, + { + "type": "frame", + "id": "ojOzc", + "name": "Day 20", + "width": 19, + "layout": "vertical", + "gap": 4, + "alignItems": "center", + "children": [ + { + "type": "rectangle", + "cornerRadius": [ + 3, + 3, + 0, + 0 + ], + "id": "GICVn", + "name": "Column", + "fill": "$chart/series-2", + "width": 12, + "height": 19 + } + ] + }, + { + "type": "frame", + "id": "nxDoE", + "name": "Day 21", + "width": 19, + "layout": "vertical", + "gap": 4, + "alignItems": "center", + "children": [ + { + "type": "rectangle", + "cornerRadius": [ + 3, + 3, + 0, + 0 + ], + "id": "xsDPO", + "name": "Column", + "fill": "$chart/series-2", + "width": 12, + "height": 9 + } + ] + }, + { + "type": "frame", + "id": "haiYL", + "name": "Day 22", + "width": 19, + "layout": "vertical", + "gap": 4, + "alignItems": "center", + "children": [ + { + "type": "rectangle", + "cornerRadius": [ + 3, + 3, + 0, + 0 + ], + "id": "EVORr", + "name": "Column", + "fill": "$chart/series-2", + "width": 12, + "height": 37 + } + ] + }, + { + "type": "frame", + "id": "Ru1Uq", + "name": "Day 23", + "width": 19, + "layout": "vertical", + "gap": 4, + "alignItems": "center", + "children": [ + { + "type": "rectangle", + "cornerRadius": [ + 3, + 3, + 0, + 0 + ], + "id": "u6x5kM", + "name": "Column", + "fill": "$chart/series-2", + "width": 12, + "height": 28 + } + ] + }, + { + "type": "frame", + "id": "wNch4", + "name": "Day 24", + "width": 19, + "layout": "vertical", + "gap": 4, + "alignItems": "center", + "children": [ + { + "type": "rectangle", + "cornerRadius": [ + 3, + 3, + 0, + 0 + ], + "id": "NuY5y", + "name": "Column", + "fill": "$chart/series-2", + "width": 12, + "height": 19 + } + ] + }, + { + "type": "frame", + "id": "l5umTv", + "name": "Day 25", + "width": 19, + "layout": "vertical", + "gap": 4, + "alignItems": "center", + "children": [ + { + "type": "rectangle", + "cornerRadius": [ + 3, + 3, + 0, + 0 + ], + "id": "obrv5", + "name": "Column", + "fill": "$chart/series-2", + "width": 12, + "height": 47 + } + ] + }, + { + "type": "frame", + "id": "A2JCkx", + "name": "Day 26", + "width": 19, + "layout": "vertical", + "gap": 4, + "alignItems": "center", + "children": [ + { + "type": "rectangle", + "cornerRadius": [ + 3, + 3, + 0, + 0 + ], + "id": "zTJkH", + "name": "Column", + "fill": "$chart/series-2", + "width": 12, + "height": 28 + } + ] + }, + { + "type": "frame", + "id": "kyayT", + "name": "Day 27", + "width": 19, + "layout": "vertical", + "gap": 4, + "alignItems": "center", + "children": [ + { + "type": "rectangle", + "cornerRadius": [ + 3, + 3, + 0, + 0 + ], + "id": "E2ECy", + "name": "Column", + "fill": "$chart/series-2", + "width": 12, + "height": 19 + } + ] + }, + { + "type": "frame", + "id": "lPoNF", + "name": "Day 28", + "width": 19, + "layout": "vertical", + "gap": 4, + "alignItems": "center", + "children": [ + { + "type": "rectangle", + "cornerRadius": [ + 3, + 3, + 0, + 0 + ], + "id": "J3McA", + "name": "Column", + "fill": "$chart/series-2", + "width": 12, + "height": 9 + } + ] + }, + { + "type": "frame", + "id": "iA9mD", + "name": "Day 29", + "width": 19, + "layout": "vertical", + "gap": 4, + "alignItems": "center", + "children": [ + { + "type": "rectangle", + "cornerRadius": [ + 3, + 3, + 0, + 0 + ], + "id": "DDODx", + "name": "Column", + "fill": "$chart/series-2", + "width": 12, + "height": 28 + } + ] + }, + { + "type": "frame", + "id": "G3EVz", + "name": "Day 30", + "width": 19, + "layout": "vertical", + "gap": 4, + "alignItems": "center", + "children": [ + { + "type": "text", + "id": "j9Kxr", + "name": "Value label", + "fill": "$foreground/foreground", + "content": "4", + "fontFamily": "$typography/font-sans", + "fontSize": 11, + "fontWeight": "600" + }, + { + "type": "rectangle", + "cornerRadius": [ + 3, + 3, + 0, + 0 + ], + "id": "MMi9n", + "name": "Column", + "fill": "$chart/series-2", + "width": 12, + "height": 37 + } + ] + } + ] + } + ] + } + ] + }, + { + "type": "frame", + "id": "Qi78V", + "name": "X axis", + "width": 606, + "padding": [ + 0, + 0, + 0, + 36 + ], + "justifyContent": "space_between", + "children": [ + { + "type": "text", + "id": "ZQpkW", + "name": "X Sep 7", + "fill": "$foreground/muted", + "content": "Sep 7", + "fontFamily": "$typography/font-sans", + "fontSize": 11, + "fontWeight": "normal" + }, + { + "type": "text", + "id": "F2fZj", + "name": "X Sep 21", + "fill": "$foreground/muted", + "content": "Sep 21", + "fontFamily": "$typography/font-sans", + "fontSize": 11, + "fontWeight": "normal" + }, + { + "type": "text", + "id": "TyxT1", + "name": "X Oct 6", + "fill": "$foreground/muted", + "content": "Oct 6", + "fontFamily": "$typography/font-sans", + "fontSize": 11, + "fontWeight": "normal" + } + ] + } + ] + } + ] + }, + { + "type": "frame", + "id": "vyryH", + "name": "Environment row 1", + "width": "fill_container", + "gap": 16, + "children": [ + { + "type": "frame", + "id": "c6yNe1", + "name": "Kubernetes version", + "width": "fill_container", + "fill": "$surface/surface", + "cornerRadius": "$radius/3xl", + "stroke": "$border", + "strokeWidth": 1, + "strokeAlignment": "inner", + "layout": "vertical", + "gap": 14, + "padding": 20, + "children": [ + { + "type": "frame", + "id": "ts7Ae", + "name": "Titles", + "width": "fill_container", + "layout": "vertical", + "gap": 4, + "children": [ + { + "type": "text", + "id": "x6UDGY", + "name": "Title", + "fill": "$foreground/foreground", + "content": "Kubernetes version", + "fontFamily": "$typography/font-sans", + "fontSize": 15, + "fontWeight": "600" + }, + { + "type": "text", + "id": "isshR", + "name": "Sub", + "fill": "$foreground/muted", + "textGrowth": "fixed-width", + "width": "fill_container", + "content": "Share of install-days by reported minor version.", + "fontFamily": "$typography/font-sans", + "fontSize": 13, + "fontWeight": "normal" + } + ] + }, + { + "type": "frame", + "id": "xRdeX", + "name": "Bars", + "width": "fill_container", + "layout": "vertical", + "gap": 10, + "children": [ + { + "id": "wjOTK", + "type": "ref", + "ref": "wPbIp", + "name": "1.31", + "width": "fill_container", + "descendants": { + "j1J75": { + "content": "1.31", + "fill": "$foreground/foreground" + }, + "dMFUm": { + "width": 164, + "cornerRadius": [ + 0, + 4, + 4, + 0 + ] + }, + "uTqdm": { + "content": "38%" + } + } + }, + { + "id": "mCGa5", + "type": "ref", + "ref": "wPbIp", + "name": "1.30", + "width": "fill_container", + "descendants": { + "j1J75": { + "content": "1.30", + "fill": "$foreground/foreground" + }, + "dMFUm": { + "width": 117, + "cornerRadius": [ + 0, + 4, + 4, + 0 + ] + }, + "uTqdm": { + "content": "27%" + } + } + }, + { + "id": "uFp1s", + "type": "ref", + "ref": "wPbIp", + "name": "1.32", + "width": "fill_container", + "descendants": { + "j1J75": { + "content": "1.32", + "fill": "$foreground/foreground" + }, + "dMFUm": { + "width": 78, + "cornerRadius": [ + 0, + 4, + 4, + 0 + ] + }, + "uTqdm": { + "content": "18%" + } + } + }, + { + "id": "apyWg", + "type": "ref", + "ref": "wPbIp", + "name": "1.29", + "width": "fill_container", + "descendants": { + "j1J75": { + "content": "1.29", + "fill": "$foreground/foreground" + }, + "dMFUm": { + "width": 39, + "cornerRadius": [ + 0, + 4, + 4, + 0 + ] + }, + "uTqdm": { + "content": "9%" + } + } + }, + { + "id": "GkAhZ", + "type": "ref", + "ref": "wPbIp", + "name": "Other", + "width": "fill_container", + "descendants": { + "j1J75": { + "content": "Other", + "fill": "$foreground/muted" + }, + "dMFUm": { + "width": 35, + "cornerRadius": [ + 0, + 4, + 4, + 0 + ] + }, + "uTqdm": { + "content": "8%" + } + } + } + ] + } + ] + }, + { + "type": "frame", + "id": "nABaC", + "name": "Distribution", + "width": "fill_container", + "fill": "$surface/surface", + "cornerRadius": "$radius/3xl", + "stroke": "$border", + "strokeWidth": 1, + "strokeAlignment": "inner", + "layout": "vertical", + "gap": 14, + "padding": 20, + "children": [ + { + "type": "frame", + "id": "gvGga", + "name": "Titles", + "width": "fill_container", + "layout": "vertical", + "gap": 4, + "children": [ + { + "type": "text", + "id": "WU9QN", + "name": "Title", + "fill": "$foreground/foreground", + "content": "Distribution", + "fontFamily": "$typography/font-sans", + "fontSize": 15, + "fontWeight": "600" + }, + { + "type": "text", + "id": "P3DHlg", + "name": "Sub", + "fill": "$foreground/muted", + "textGrowth": "fixed-width", + "width": "fill_container", + "content": "Share of install-days by detected distribution.", + "fontFamily": "$typography/font-sans", + "fontSize": 13, + "fontWeight": "normal" + } + ] + }, + { + "type": "frame", + "id": "UShQw", + "name": "Bars", + "width": "fill_container", + "layout": "vertical", + "gap": 10, + "children": [ + { + "id": "ysbp4", + "type": "ref", + "ref": "wPbIp", + "name": "k3s", + "width": "fill_container", + "descendants": { + "j1J75": { + "content": "k3s", + "fill": "$foreground/foreground" + }, + "dMFUm": { + "width": 199, + "cornerRadius": [ + 0, + 4, + 4, + 0 + ] + }, + "uTqdm": { + "content": "46%" + } + } + }, + { + "id": "ERFfG", + "type": "ref", + "ref": "wPbIp", + "name": "rke2", + "width": "fill_container", + "descendants": { + "j1J75": { + "content": "rke2", + "fill": "$foreground/foreground" + }, + "dMFUm": { + "width": 52, + "cornerRadius": [ + 0, + 4, + 4, + 0 + ] + }, + "uTqdm": { + "content": "12%" + } + } + }, + { + "id": "dm7Jd", + "type": "ref", + "ref": "wPbIp", + "name": "microk8s", + "width": "fill_container", + "descendants": { + "j1J75": { + "content": "microk8s", + "fill": "$foreground/foreground" + }, + "dMFUm": { + "width": 39, + "cornerRadius": [ + 0, + 4, + 4, + 0 + ] + }, + "uTqdm": { + "content": "9%" + } + } + }, + { + "id": "Cnm2F", + "type": "ref", + "ref": "wPbIp", + "name": "eks", + "width": "fill_container", + "descendants": { + "j1J75": { + "content": "eks", + "fill": "$foreground/foreground" + }, + "dMFUm": { + "width": 30, + "cornerRadius": [ + 0, + 4, + 4, + 0 + ] + }, + "uTqdm": { + "content": "7%" + } + } + }, + { + "id": "Ys8ZE", + "type": "ref", + "ref": "wPbIp", + "name": "talos", + "width": "fill_container", + "descendants": { + "j1J75": { + "content": "talos", + "fill": "$foreground/foreground" + }, + "dMFUm": { + "width": 26, + "cornerRadius": [ + 0, + 4, + 4, + 0 + ] + }, + "uTqdm": { + "content": "6%" + } + } + }, + { + "id": "hnLEu", + "type": "ref", + "ref": "wPbIp", + "name": "gke", + "width": "fill_container", + "descendants": { + "j1J75": { + "content": "gke", + "fill": "$foreground/foreground" + }, + "dMFUm": { + "width": 22, + "cornerRadius": [ + 0, + 4, + 4, + 0 + ] + }, + "uTqdm": { + "content": "5%" + } + } + }, + { + "id": "E1JJDc", + "type": "ref", + "ref": "wPbIp", + "name": "kind", + "width": "fill_container", + "descendants": { + "j1J75": { + "content": "kind", + "fill": "$foreground/foreground" + }, + "dMFUm": { + "width": 13, + "cornerRadius": [ + 0, + 4, + 4, + 0 + ] + }, + "uTqdm": { + "content": "3%" + } + } + }, + { + "id": "cyGTq", + "type": "ref", + "ref": "wPbIp", + "name": "Other", + "width": "fill_container", + "descendants": { + "j1J75": { + "content": "Other", + "fill": "$foreground/muted" + }, + "dMFUm": { + "width": 52, + "cornerRadius": [ + 0, + 4, + 4, + 0 + ] + }, + "uTqdm": { + "content": "12%" + } + } + } + ] + } + ] + } + ] + }, + { + "type": "frame", + "id": "HRCgy", + "name": "Environment row 2", + "width": "fill_container", + "gap": 16, + "children": [ + { + "type": "frame", + "id": "y7r64", + "name": "Architecture", + "width": "fill_container", + "fill": "$surface/surface", + "cornerRadius": "$radius/3xl", + "stroke": "$border", + "strokeWidth": 1, + "strokeAlignment": "inner", + "layout": "vertical", + "gap": 14, + "padding": 20, + "children": [ + { + "type": "frame", + "id": "MMhPC", + "name": "Titles", + "width": "fill_container", + "layout": "vertical", + "gap": 4, + "children": [ + { + "type": "text", + "id": "k8ASe", + "name": "Title", + "fill": "$foreground/foreground", + "content": "Architecture", + "fontFamily": "$typography/font-sans", + "fontSize": 15, + "fontWeight": "600" + }, + { + "type": "text", + "id": "qkzeO", + "name": "Sub", + "fill": "$foreground/muted", + "textGrowth": "fixed-width", + "width": "fill_container", + "content": "Share of install-days reporting each node architecture. Mixed clusters report several, so shares add up to more than 100%.", + "fontFamily": "$typography/font-sans", + "fontSize": 13, + "fontWeight": "normal" + } + ] + }, + { + "type": "frame", + "id": "EK8eL", + "name": "Bars", + "width": "fill_container", + "layout": "vertical", + "gap": 10, + "children": [ + { + "id": "f43md", + "type": "ref", + "ref": "wPbIp", + "name": "amd64", + "width": "fill_container", + "descendants": { + "j1J75": { + "content": "amd64", + "fill": "$foreground/foreground" + }, + "dMFUm": { + "width": 350, + "cornerRadius": [ + 0, + 4, + 4, + 0 + ] + }, + "uTqdm": { + "content": "81%" + } + } + }, + { + "id": "SyiIg", + "type": "ref", + "ref": "wPbIp", + "name": "arm64", + "width": "fill_container", + "descendants": { + "j1J75": { + "content": "arm64", + "fill": "$foreground/foreground" + }, + "dMFUm": { + "width": 112, + "cornerRadius": [ + 0, + 4, + 4, + 0 + ] + }, + "uTqdm": { + "content": "26%" + } + } + }, + { + "id": "p9B19", + "type": "ref", + "ref": "wPbIp", + "name": "arm", + "width": "fill_container", + "descendants": { + "j1J75": { + "content": "arm", + "fill": "$foreground/foreground" + }, + "dMFUm": { + "width": 9, + "cornerRadius": [ + 0, + 4, + 4, + 0 + ] + }, + "uTqdm": { + "content": "2%" + } + } + }, + { + "id": "SvWZd", + "type": "ref", + "ref": "wPbIp", + "name": "Other", + "width": "fill_container", + "descendants": { + "j1J75": { + "content": "Other", + "fill": "$foreground/muted" + }, + "dMFUm": { + "width": 4, + "cornerRadius": [ + 0, + 4, + 4, + 0 + ] + }, + "uTqdm": { + "content": "1%" + } + } + } + ] + } + ] + }, + { + "type": "frame", + "id": "b8fCX", + "name": "Cluster nodes", + "width": "fill_container", + "fill": "$surface/surface", + "cornerRadius": "$radius/3xl", + "stroke": "$border", + "strokeWidth": 1, + "strokeAlignment": "inner", + "layout": "vertical", + "gap": 14, + "padding": 20, + "children": [ + { + "type": "frame", + "id": "m4Yk7", + "name": "Titles", + "width": "fill_container", + "layout": "vertical", + "gap": 4, + "children": [ + { + "type": "text", + "id": "gsYLI", + "name": "Title", + "fill": "$foreground/foreground", + "content": "Cluster nodes", + "fontFamily": "$typography/font-sans", + "fontSize": 15, + "fontWeight": "600" + }, + { + "type": "text", + "id": "mEv68", + "name": "Sub", + "fill": "$foreground/muted", + "textGrowth": "fixed-width", + "width": "fill_container", + "content": "Share of install-days by node-count band.", + "fontFamily": "$typography/font-sans", + "fontSize": 13, + "fontWeight": "normal" + } + ] + }, + { + "type": "frame", + "id": "T2PQjM", + "name": "Bars", + "width": "fill_container", + "layout": "vertical", + "gap": 10, + "children": [ + { + "id": "NSTAz", + "type": "ref", + "ref": "wPbIp", + "name": "1", + "width": "fill_container", + "descendants": { + "j1J75": { + "content": "1", + "fill": "$foreground/foreground" + }, + "dMFUm": { + "width": 251, + "cornerRadius": [ + 0, + 4, + 4, + 0 + ] + }, + "uTqdm": { + "content": "58%" + } + } + }, + { + "id": "Oxw93", + "type": "ref", + "ref": "wPbIp", + "name": "2–3", + "width": "fill_container", + "descendants": { + "j1J75": { + "content": "2–3", + "fill": "$foreground/foreground" + }, + "dMFUm": { + "width": 95, + "cornerRadius": [ + 0, + 4, + 4, + 0 + ] + }, + "uTqdm": { + "content": "22%" + } + } + }, + { + "id": "wAcAs", + "type": "ref", + "ref": "wPbIp", + "name": "4–10", + "width": "fill_container", + "descendants": { + "j1J75": { + "content": "4–10", + "fill": "$foreground/foreground" + }, + "dMFUm": { + "width": 60, + "cornerRadius": [ + 0, + 4, + 4, + 0 + ] + }, + "uTqdm": { + "content": "14%" + } + } + }, + { + "id": "JRkXA", + "type": "ref", + "ref": "wPbIp", + "name": "11–50", + "width": "fill_container", + "descendants": { + "j1J75": { + "content": "11–50", + "fill": "$foreground/foreground" + }, + "dMFUm": { + "width": 22, + "cornerRadius": [ + 0, + 4, + 4, + 0 + ] + }, + "uTqdm": { + "content": "5%" + } + } + }, + { + "id": "J2Wm5", + "type": "ref", + "ref": "wPbIp", + "name": "51+", + "width": "fill_container", + "descendants": { + "j1J75": { + "content": "51+", + "fill": "$foreground/foreground" + }, + "dMFUm": { + "width": 4, + "cornerRadius": [ + 0, + 4, + 4, + 0 + ] + }, + "uTqdm": { + "content": "1%" + } + } + } + ] + } + ] + } + ] + }, + { + "type": "frame", + "id": "X93xNq", + "name": "Usage row", + "width": "fill_container", + "gap": 16, + "children": [ + { + "type": "frame", + "id": "D0Xo8", + "name": "Games", + "width": "fill_container", + "fill": "$surface/surface", + "cornerRadius": "$radius/3xl", + "stroke": "$border", + "strokeWidth": 1, + "strokeAlignment": "inner", + "layout": "vertical", + "gap": 14, + "padding": 20, + "children": [ + { + "type": "frame", + "id": "rOjQF", + "name": "Titles", + "width": "fill_container", + "layout": "vertical", + "gap": 4, + "children": [ + { + "type": "text", + "id": "FP9Oc", + "name": "Title", + "fill": "$foreground/foreground", + "content": "Games", + "fontFamily": "$typography/font-sans", + "fontSize": 15, + "fontWeight": "600" + }, + { + "type": "text", + "id": "HcHrn", + "name": "Sub", + "fill": "$foreground/muted", + "textGrowth": "fixed-width", + "width": "fill_container", + "content": "Share of install-days running at least one server of each official module. Uploaded and third-party modules count as Custom.", + "fontFamily": "$typography/font-sans", + "fontSize": 13, + "fontWeight": "normal" + } + ] + }, + { + "type": "frame", + "id": "t1UGtz", + "name": "Bars", + "width": "fill_container", + "layout": "vertical", + "gap": 10, + "children": [ + { + "id": "gfdQc", + "type": "ref", + "ref": "wPbIp", + "name": "minecraft-java", + "width": "fill_container", + "descendants": { + "j1J75": { + "content": "minecraft-java", + "fill": "$foreground/foreground" + }, + "dMFUm": { + "width": 264, + "cornerRadius": [ + 0, + 4, + 4, + 0 + ] + }, + "uTqdm": { + "content": "61%" + } + } + }, + { + "id": "n7fklX", + "type": "ref", + "ref": "wPbIp", + "name": "terraria", + "width": "fill_container", + "descendants": { + "j1J75": { + "content": "terraria", + "fill": "$foreground/foreground" + }, + "dMFUm": { + "width": 78, + "cornerRadius": [ + 0, + 4, + 4, + 0 + ] + }, + "uTqdm": { + "content": "18%" + } + } + }, + { + "id": "exoBx", + "type": "ref", + "ref": "wPbIp", + "name": "valheim", + "width": "fill_container", + "descendants": { + "j1J75": { + "content": "valheim", + "fill": "$foreground/foreground" + }, + "dMFUm": { + "width": 65, + "cornerRadius": [ + 0, + 4, + 4, + 0 + ] + }, + "uTqdm": { + "content": "15%" + } + } + }, + { + "id": "U3TWG5", + "type": "ref", + "ref": "wPbIp", + "name": "palworld", + "width": "fill_container", + "descendants": { + "j1J75": { + "content": "palworld", + "fill": "$foreground/foreground" + }, + "dMFUm": { + "width": 48, + "cornerRadius": [ + 0, + 4, + 4, + 0 + ] + }, + "uTqdm": { + "content": "11%" + } + } + }, + { + "id": "DKLuV", + "type": "ref", + "ref": "wPbIp", + "name": "factorio", + "width": "fill_container", + "descendants": { + "j1J75": { + "content": "factorio", + "fill": "$foreground/foreground" + }, + "dMFUm": { + "width": 39, + "cornerRadius": [ + 0, + 4, + 4, + 0 + ] + }, + "uTqdm": { + "content": "9%" + } + } + }, + { + "id": "t8Lxu", + "type": "ref", + "ref": "wPbIp", + "name": "rust", + "width": "fill_container", + "descendants": { + "j1J75": { + "content": "rust", + "fill": "$foreground/foreground" + }, + "dMFUm": { + "width": 30, + "cornerRadius": [ + 0, + 4, + 4, + 0 + ] + }, + "uTqdm": { + "content": "7%" + } + } + }, + { + "id": "Ybgs3", + "type": "ref", + "ref": "wPbIp", + "name": "satisfactory", + "width": "fill_container", + "descendants": { + "j1J75": { + "content": "satisfactory", + "fill": "$foreground/foreground" + }, + "dMFUm": { + "width": 26, + "cornerRadius": [ + 0, + 4, + 4, + 0 + ] + }, + "uTqdm": { + "content": "6%" + } + } + }, + { + "id": "V36hc1", + "type": "ref", + "ref": "wPbIp", + "name": "Custom", + "width": "fill_container", + "descendants": { + "j1J75": { + "content": "Custom", + "fill": "$foreground/muted" + }, + "dMFUm": { + "width": 95, + "cornerRadius": [ + 0, + 4, + 4, + 0 + ] + }, + "uTqdm": { + "content": "22%" + } + } + } + ] + } + ] + }, + { + "type": "frame", + "id": "twyVG", + "name": "Feature adoption", + "width": "fill_container", + "fill": "$surface/surface", + "cornerRadius": "$radius/3xl", + "stroke": "$border", + "strokeWidth": 1, + "strokeAlignment": "inner", + "layout": "vertical", + "gap": 14, + "padding": 20, + "children": [ + { + "type": "frame", + "id": "VLjMc", + "name": "Titles", + "width": "fill_container", + "layout": "vertical", + "gap": 4, + "children": [ + { + "type": "text", + "id": "LleaT", + "name": "Title", + "fill": "$foreground/foreground", + "content": "Feature adoption", + "fontFamily": "$typography/font-sans", + "fontSize": 15, + "fontWeight": "600" + }, + { + "type": "text", + "id": "FiOPQ", + "name": "Sub", + "fill": "$foreground/muted", + "textGrowth": "fixed-width", + "width": "fill_container", + "content": "Share of install-days with each feature in use.", + "fontFamily": "$typography/font-sans", + "fontSize": 13, + "fontWeight": "normal" + } + ] + }, + { + "type": "frame", + "id": "bUAgs", + "name": "Bars", + "width": "fill_container", + "layout": "vertical", + "gap": 10, + "children": [ + { + "id": "Y1CuHR", + "type": "ref", + "ref": "wPbIp", + "name": "Backups", + "width": "fill_container", + "descendants": { + "j1J75": { + "content": "Backups", + "fill": "$foreground/foreground" + }, + "L6Z5jA": { + "fill": "$chart/track", + "cornerRadius": 4 + }, + "dMFUm": { + "width": 225, + "cornerRadius": 4 + }, + "uTqdm": { + "content": "52%" + } + } + }, + { + "id": "G1KQk", + "type": "ref", + "ref": "wPbIp", + "name": "Wake on connect", + "width": "fill_container", + "descendants": { + "j1J75": { + "content": "Wake on connect", + "fill": "$foreground/foreground" + }, + "L6Z5jA": { + "fill": "$chart/track", + "cornerRadius": 4 + }, + "dMFUm": { + "width": 147, + "cornerRadius": 4 + }, + "uTqdm": { + "content": "34%" + } + } + }, + { + "id": "dRRIa", + "type": "ref", + "ref": "wPbIp", + "name": "Tunnels", + "width": "fill_container", + "descendants": { + "j1J75": { + "content": "Tunnels", + "fill": "$foreground/foreground" + }, + "L6Z5jA": { + "fill": "$chart/track", + "cornerRadius": 4 + }, + "dMFUm": { + "width": 91, + "cornerRadius": 4 + }, + "uTqdm": { + "content": "21%" + } + } + }, + { + "id": "JkAiq", + "type": "ref", + "ref": "wPbIp", + "name": "SSO", + "width": "fill_container", + "descendants": { + "j1J75": { + "content": "SSO", + "fill": "$foreground/foreground" + }, + "L6Z5jA": { + "fill": "$chart/track", + "cornerRadius": 4 + }, + "dMFUm": { + "width": 82, + "cornerRadius": 4 + }, + "uTqdm": { + "content": "19%" + } + } + }, + { + "id": "kbwG7", + "type": "ref", + "ref": "wPbIp", + "name": "PostgreSQL", + "width": "fill_container", + "descendants": { + "j1J75": { + "content": "PostgreSQL", + "fill": "$foreground/foreground" + }, + "L6Z5jA": { + "fill": "$chart/track", + "cornerRadius": 4 + }, + "dMFUm": { + "width": 48, + "cornerRadius": 4 + }, + "uTqdm": { + "content": "11%" + } + } + }, + { + "id": "u5vRJn", + "type": "ref", + "ref": "wPbIp", + "name": "Audit forwarding", + "width": "fill_container", + "descendants": { + "j1J75": { + "content": "Audit forwarding", + "fill": "$foreground/foreground" + }, + "L6Z5jA": { + "fill": "$chart/track", + "cornerRadius": 4 + }, + "dMFUm": { + "width": 35, + "cornerRadius": 4 + }, + "uTqdm": { + "content": "8%" + } + } + }, + { + "id": "oO1hy", + "type": "ref", + "ref": "wPbIp", + "name": "Multi-cluster", + "width": "fill_container", + "descendants": { + "j1J75": { + "content": "Multi-cluster", + "fill": "$foreground/foreground" + }, + "L6Z5jA": { + "fill": "$chart/track", + "cornerRadius": 4 + }, + "dMFUm": { + "width": 26, + "cornerRadius": 4 + }, + "uTqdm": { + "content": "6%" + } + } + }, + { + "id": "z6RegB", + "type": "ref", + "ref": "wPbIp", + "name": "Packet capture", + "width": "fill_container", + "descendants": { + "j1J75": { + "content": "Packet capture", + "fill": "$foreground/foreground" + }, + "L6Z5jA": { + "fill": "$chart/track", + "cornerRadius": 4 + }, + "dMFUm": { + "width": 17, + "cornerRadius": 4 + }, + "uTqdm": { + "content": "4%" + } + } + } + ] + } + ] + } + ] + }, + { + "type": "frame", + "id": "DJxkA", + "name": "Footnote", + "width": "fill_container", + "stroke": "$separator/separator", + "strokeWidth": { + "top": 1 + }, + "strokeAlignment": "inner", + "layout": "vertical", + "gap": 6, + "padding": [ + 16, + 0, + 0, + 0 + ], + "children": [ + { + "type": "text", + "id": "BPXtv", + "name": "Note", + "fill": "$foreground/muted", + "textGrowth": "fixed-width", + "width": "fill_container", + "content": "All figures are approximate and self-reported. Reports are anonymous; extended reports are signed by a key the install derives locally, which stops impersonation but not invented installs.", + "lineHeight": 1.5, + "fontFamily": "$typography/font-sans", + "fontSize": 12, + "fontWeight": "normal" + }, + { + "type": "text", + "id": "N1Jwcs", + "name": "Note", + "fill": "$foreground/muted", + "textGrowth": "fixed-width", + "width": "fill_container", + "content": "Install IDs are stored only as keyed hashes. Activity records expire 90 days after an install's last report, and daily aggregates are kept for 24 months. No IP address or raw report is stored.", + "lineHeight": 1.5, + "fontFamily": "$typography/font-sans", + "fontSize": 12, + "fontWeight": "normal" + } + ] + } + ] + } + ] +} diff --git a/telemetry-receiver/design-export/json/jy9Rn.json b/telemetry-receiver/design-export/json/jy9Rn.json new file mode 100644 index 000000000..717838c48 --- /dev/null +++ b/telemetry-receiver/design-export/json/jy9Rn.json @@ -0,0 +1,66 @@ +{ + "type": "frame", + "id": "jy9Rn", + "x": 8327.959083557127, + "y": 2040.8789062499995, + "name": "Receiver / Extended — none in range", + "theme": { + "semantic": "dark" + }, + "width": 1440, + "fill": "$background/background", + "layout": "vertical", + "gap": 16, + "padding": [ + 32, + 40 + ], + "children": [ + { + "type": "text", + "id": "Xb6cp", + "name": "Heading", + "fill": "$foreground/foreground", + "content": "Extended reports", + "fontFamily": "$typography/font-mono", + "fontSize": 20, + "fontWeight": "600" + }, + { + "type": "frame", + "id": "TRz9s", + "name": "Message", + "width": "fill_container", + "fill": "$surface/surface", + "cornerRadius": "$radius/3xl", + "stroke": "$border", + "strokeWidth": 1, + "strokeAlignment": "inner", + "gap": 12, + "padding": 20, + "alignItems": "center", + "children": [ + { + "type": "icon", + "id": "tN7f3", + "name": "Icon", + "width": 18, + "height": 18, + "icon": "info", + "library": "lucide", + "fill": "$foreground/muted" + }, + { + "type": "text", + "id": "NZUcy", + "name": "Text", + "fill": "$foreground/secondary", + "content": "No reports in this range included extended data. Basic figures above still cover every report.", + "fontFamily": "$typography/font-sans", + "fontSize": 14, + "fontWeight": "normal" + } + ] + } + ] +} diff --git a/telemetry-receiver/design-export/json/y49Ie.json b/telemetry-receiver/design-export/json/y49Ie.json new file mode 100644 index 000000000..c6dae311f --- /dev/null +++ b/telemetry-receiver/design-export/json/y49Ie.json @@ -0,0 +1,131 @@ +{ + "type": "frame", + "id": "y49Ie", + "x": 3567.959083557127, + "y": 2040.8789062499995, + "name": "Telemetry components", + "theme": { + "semantic": "dark" + }, + "fill": "$background/background", + "gap": 48, + "padding": 32, + "children": [ + { + "type": "frame", + "id": "sDDfo", + "name": "Telemetry/Stat tile", + "reusable": true, + "width": 280, + "fill": "$surface/surface", + "cornerRadius": "$radius/3xl", + "stroke": "$border", + "strokeWidth": 1, + "strokeAlignment": "inner", + "effect": { + "type": "shadow", + "shadowType": "outer", + "color": "#0000000A", + "offset": { + "x": 0, + "y": 2 + }, + "blur": 4 + }, + "layout": "vertical", + "gap": 6, + "padding": 16, + "children": [ + { + "type": "text", + "id": "yia1E", + "name": "Label", + "fill": "$foreground/secondary", + "content": "Reports, latest day", + "fontFamily": "$typography/font-sans", + "fontSize": 13, + "fontWeight": "normal" + }, + { + "type": "text", + "id": "tZRdh", + "name": "Value", + "fill": "$foreground/foreground", + "content": "1,284", + "fontFamily": "$typography/font-sans", + "fontSize": 28, + "fontWeight": "600" + }, + { + "type": "text", + "id": "oPQEN", + "name": "Note", + "fill": "$foreground/muted", + "content": "2026-10-06 (UTC)", + "fontFamily": "$typography/font-sans", + "fontSize": 12, + "fontWeight": "normal" + } + ] + }, + { + "type": "frame", + "id": "wPbIp", + "name": "Telemetry/Share row", + "reusable": true, + "width": 420, + "gap": 12, + "alignItems": "center", + "children": [ + { + "type": "text", + "id": "j1J75", + "name": "Label", + "fill": "$foreground/foreground", + "textGrowth": "fixed-width", + "width": 128, + "content": "k3s", + "fontFamily": "$typography/font-sans", + "fontSize": 13, + "fontWeight": "normal" + }, + { + "type": "frame", + "id": "L6Z5jA", + "name": "Track", + "width": "fill_container", + "height": 12, + "children": [ + { + "type": "rectangle", + "cornerRadius": [ + 0, + 4, + 4, + 0 + ], + "id": "dMFUm", + "name": "Bar", + "fill": "$chart/series-1", + "width": 140, + "height": 12 + } + ] + }, + { + "type": "text", + "id": "uTqdm", + "name": "Value", + "fill": "$foreground/secondary", + "textGrowth": "fixed-width", + "width": 48, + "content": "48%", + "textAlign": "right", + "fontFamily": "$typography/font-sans", + "fontSize": 13, + "fontWeight": "normal" + } + ] + } + ] +} diff --git a/telemetry-receiver/design-export/screenshots/HBYBE.png b/telemetry-receiver/design-export/screenshots/HBYBE.png new file mode 100644 index 0000000000000000000000000000000000000000..82c5c3f22fac0955b90fe05bff69f29116114be5 GIT binary patch literal 194189 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
3oWj})0NX< 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 literal 0 HcmV?d00001 diff --git a/telemetry-receiver/design-export/screenshots/Z079vK.png b/telemetry-receiver/design-export/screenshots/Z079vK.png new file mode 100644 index 0000000000000000000000000000000000000000..43319786c52f3b72aa4af7dcea42d0f44c82df8e GIT binary patch literal 285562 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�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 KuZR`YWB&&V^^gJp literal 0 HcmV?d00001 diff --git a/telemetry-receiver/design-export/screenshots/a7wUpP.png b/telemetry-receiver/design-export/screenshots/a7wUpP.png new file mode 100644 index 0000000000000000000000000000000000000000..2c1540d29841c43c3da5e269a179de2bd52c63cf GIT binary patch literal 202466 zcmb4McOca7A9ojJG;B&nlk8I2Tqs4MWM)N0_R1c2ze1rjQFcShCVSntjEYbydqhUr zD%VjNc|Oncyx*_)>ph;~nwEy@2Kp`ZR8&+OjvZAwMMcGcprTqwOS=|) zll~RKMn%O)bxh^ZX%E;?`!#1a)dzuJnClPbHiyC-_PQ+VNm|@27qyx&L!fWfo;uSP zQKz!zwuZ=@g2DTfv9nyA9nxR1E+P(H8#!p|ji zoX8Qos%d6EL_F>6VX~&wv|kwnc9Or2dV+=(Jd314Y0#`kxEGFRVcw2NhZp{>8*G1w zQlt``dY)aJs(ofDnIHe=0ae5vk`Y7C-V}?!NjeMg-D?i5*+Xcmsdd!L+wd(h133q? zBTR?1AG`#>cLT@JRIZvuz6GBeS9_EX!DoutMi>riBQ(wYZ@1~DMC0Rr9n#T1N^G7D zOmnnD2%08piJFyS#SEB$!OnzHQQ?$`*aY7~p=^1kddx7egA@+nb@&IdePVvZSi!8Y8P&W*fEeM8w2Vht z>Xj+!xm097)ne+^QF37*e!}TVUWP#@6AXa-OajFuUiZC*H#Gi-R5X}4!og?btYva9}ePjO7GGXw`Fsn^47r5?=S(ELEMaXS}|VdgbK&AO_25MDTT9e~yW;iHZh$xXg^6lJ84VGKm;#-X^2 zL>GuCxb6x3t8m}{O1Uu%u6wE4=Xk1DNYa@0>YvCNhn9F+PNXQkAJc0#EgTpKp5WJR z$jruwS)9t3?o|W^YdhluD4Qc@3Y`p`$fb^QO*|0n81&^SL@)XtfI|A?aiCNJ7*gr< z#Yq1ABlw$itf;&qZq|`Q0kH_z{WC>lhluhAthvnaB}@f&g3vAY0|{#I5+GwWR60bs z!(U{WR8D?1C|SA0TYf=O%Pfj7~r2*g9CUw#E(syK*oL= zH%Pe?5d+tyAVex|y;bDEM@`eDtRO`w_#@Yw9)NKvyfW+zYsNo1RwQ~FVwst7 zDCTTo%uxFWIWab=15}tC--ttnHCu)##m$4jkQG#_Gl{79&XmDSQS&icAY|2eX>uO^ z%?s?1@~=LO;-FdHd&2zVgXQj;F& zw)E5uEJaPz=`&H@d>uUy6l2X7LU#vf_193=yh{oQs;WRbgcN>*wE04-H_zAQGpCww zQQ}?6qfGGar1J(&Zbb~t*rW<3tDtscn^rpV-l{xG-h3T|3aaV^XtG*&kU2zYuHppv z5M7R7vO!VOmvNKLNJAEpn-UEEdnZ6myHy0Rs+9~s$z(HLAb(OacvNP<+W0DZnH4l% zBi6N%pfT)+Ul7)$4FnadwK4f5`oStPC6C#_41)kQD%4cJ2d_?2MhpH+^DY6%d@`l4 zVFjhHj`k%F6UbFUHuz8w*UBHMDol)bBDMtp8=w7z*78h}~EGJ_{|Q{u%Tl#gm3Wh|UBw z8FtTw2Qy-Q6ErvF%{f6<=(RJxfzTqH(Qy++a=MA$54wHovA0rR1Vi=C0K*$y!qm|9%VeY$0Vsr>Hf6SM#&m93K%!BGb4UJg; z6uRUev?LC4{V5M+J*=%$)7A)eeP4Z|*r?$SFo@XD4*?|IMH-@~N&bZ1x{|9fc7^^3 zO!z7LC3#XIGxCAau&vhI@i7q8jxW)^1w*qPh^AVv`R2yp8kGY(5vu{E>TJ+ z3Oy%&4Rm{q)A$P3gd^3_mk8j(4*9neh3ZYT$00PTooFP6a^f*aAxfwY79at18w>li zi>x!VP^1gl7rzs8mj~pET1C7Qizw@gL>!^OY~>%+)6gq{30_MSI@VZz)BF+j z1Aq&ifpg?&M8wmu5TaxJ%rP}cY#5rz0Tfj7j3C=eI;kiMdpA1>hMfJrkd&l?=%r#QX`pj{%9BN;P;pI7EE zpb1fQk%xhhg;PXv^}Ve^U2-e5{O9H_AP$VxZp5Q#Io6 zl32BQB$QmchBuhJ`Gh4F!YlsFFnEOQhF~H6jDeX?To*k@V$je7zj}63(V2;Y5xcx8 z6vcEWWrW^LdGi`!V0#zLA_%Ym0qI`KnxoDGT!{4yk&$teXxG!#o12|N39gIh7jfOY zLZE-fSZ@+oZzXs2-YVY$1*)?3LIB5+P-c8UZldBSsOBmqsa5Z&hCf`XtR! zb0DLsa~Q%0s;EI4A4)6F8Igb-E0WqV`89U1Clih7ExH-s$G#rRH!GA_3Ro}z|6JF8>UFMG)00u66xWhB(t*+MO`l9 z#{Yz18Y4?v!8`xp!7^?D&0cD2zeiLl%7n(1f}tDGJO`YbQ(r;kRE&yIg4DwQBfbqY zq!pc`c0qGZ7~-K$V;`f#4;t6zk7&R?mk|#JOq1D;L4hd4?1R5|1vMg&KsBf*n{>3{ zvJX@T%@hUm#H_-k>;^<}z)O;di269B`3kc7t^3JvOMngJxUa~V;@82h6G4qJ+Fv+b z|0n>HQoVil33MINtg$j)u{89HOQ;6^&g64zJ7_m{5XreMzB*t z@zIn@82tcPPUA;+LL~_mOZ|efkdY0<#%X3O!elET&G7H5&f82HK)>3+-OXUUa;A?Wn)AOu-I)s*4H2*zE=(_0Zy@yEavZ>i_OaD^O@t$5(gGis4Al(kUr zB)%4akvajoL=8gz3sfzrT)BUmu@S$frEGC7gg#{-Rf$zX)Jkb3)8?4EpFvrWborVgjlt7s0$XmN|=4(@^n^Tj3bLg81yILMaTB?VJtNm!Ol}EA!=(dT;m3NeFi)SBW@$vDUncoh7#zM%|3V+ zDURapV9A8Q5$DTE!!7Ipry=q`KZ&FXf25>@v8!Z=zI_>lR|$XduOzWytq_1B zL${YQkV5%RB3SVA#Zeo{qxdii@3QWJLPMIZvM@emy16ZW74L?3Ia*Iar!q4Y&q+{Z zrGutma|`-8JY+p0-Eg39g(lJ4;r6Snp(8c`61Higu{p|K|BoxRr+0!47!TiNumS{} zqf4SZ{y-vpL8pVQEJC0k0Kb|q(WJP7*DV006TH8@$xVsiYPUQV+%6PHz*~H z%tIM6W*k|q^V8eGRBvB@Z4@ZD+M_F+0m2xXYRjhNZ3w=@h;@_$iJJB_C>|BQwadh= z+|{Qc@8P`w9wC3MdL@C~6t3@zEQs5aMCkM>Scw2AZbAYWu08mMnUqts@{pfMEf=zx zUphy~gQ@nnFf@`DVjxlfV$&-dCxOJ*_0k#hL)0xCT6l}X2ls#QX}F)Q!Coih!CHL| zNU|>k%-*dqfxpniY2eQbCpKi^%K`{4xGsrv#en1wom)W;mFwrZdnCPm6f`p?`STCH zCSDL_ur@wf@CD}zAephlI93r{{1HH+2S$Pqdu}^&me5(D0WMOP@h!Ke|Tvr88xj0q-R>+1z`>EPnZWxen z!T88$wqdoIC!Ge$dBWAumzDA_(LVHAfOFVD;Y<|>B&`mk|IMw^0p*;qy>l27!J@oq zQbNgS=8q{AP>4EE&Y2bw8-o6mj-d_lMvj~A?@K^0*8=58=3fjyP9js(C7L!U^(GY* z-aiq)`wlEe{!>T(M)C(&iDjX%2wKHX?%d9>Q>zTgMp?j)pM)-O=6PA#pD}iJfL{L} zJnMDfS?z6K2}j^&rWJ(L!9)loCd~#^5AZ~0gNrq;( zVFS+@LvSER6WL^e=tRJ#lVF(}I@M#@s6Vbo`a4T!wb%b&@M zQtGt%tGc``py1Q~`pBn(skmNGMv>>jH1rP5ujJ}ZZ*7bgY=3nhNrEb9}NR0Rd7p> zRwc1>NUgu+PGTknpcD;8+m~DOKe`k#GaAfniLdyJcZ8s%1E7>T5{=m&hTZ}nq0l=* z9MJ=y#MOzY#zTqnRX5an(Cg-(NhD!2s({)EZ}#}`;8#MU-M`E6BbBRm0Q*Yswslw6 z&Qv65B8NL<(gEuhbZ>PlSj{+|nllzD~bERbM4e0<)D?#Mlf-OCWEiM~g$LCB1Mw-}1g{&oWQq0w?egfLi&*WEZl zHA2Qwn=ExTi$-Rz+I74!K=RL#m>%rd2>STFD~HyLF>?UVJpijY?F;PmeBxzDS^Ssy zU;p6bZ~|ZjeeRKchS{0Z$LM&1Y*POMs{#yQHnS7GOI>+A7H-^a3cj ze+`T$rXZa(bCuFXdlKh^8QX8jCjKI-1h^d07al8yX(k3+w@SislMkrnEXM(gcCwJo z8v%LO_;+`~>`)hJjIQJ4@E2wwu&gJ*-{gveX9cX|c%D1c)mnTRM^XQKt4l{@R!1AW3h;NURS>)CvQ@0>IN7lO2EaE!LU-Kt2%!>s8~g?#B8H3`BMnmDhWQSdgDfL3 zm;ZLFlU8QIUQ2~lTcfsu(drF9`M0$fNQUKrPHwcGIz(N`kPrVS=^h1fcT8b+Atd`Q zPFO$X=FKPy5btxj7jGCpSR7d?>pFfDn5XYhHtCMjH0Cjv)pf(TE8`NC%yX^vD>};1 zL2p`x0FOefke~dZl2(cW=S?s%fJIuc35C13-~$kmVJaq5Rrcv zJ}W7r_E|l&!qzA1p#v87xrPFSiK0en7Kp`QEJ=`A3D#?WWth^nqAJYeZX^#o4x?9% z39o=a;r15^29a0L)V~*I*}Ro?wqIKgF%R zK>4@5!Je3=<_mY(tPUYSHW|tQf86$kr2A~VIO@rhh2I6U1%MM2hf@{*0RmW}=ms%H zl|v>1PQeZpAPExTdO`U}wZHWpZ!o;K0WuHx2EJiy)0WK?fSXBpc} zz&!TDD(<2F7J$%=gJ&SGQp!F?SVqSA(Z98xX92?PjQyovODYSzsIcE*gC$oX5M#Hd zauBS!{t=R*-S_q0U~Q%&j%txqmXsW8lYwCH=7>Yxlr}{WC!Rt8OIB;+f3`S)UGF~3 zWBmUjTh~2cn$>n37#PSiSW$=`kmY3qmBhN6;?G~ki@_+|bdUOv>O~MP|G+v~N=~)K z^P>FL#s6%!ctR>ykTR}{+Cm5c?cof&#n-RLYaREFzsJSkpf5PB*Y4R4o*vLfkk)db z_J2WL3|I&nS%BTd(aqHM_&XGaeE4H*xab4wMkt=5x}K5Xe!?*}EF(daAowh-V{LPWeM4(hyf{|0fG>p{y~A@IlL520mb@fj01=MdLfOF4?qIxS zJI2?LKK??~jEu%e10Mp$>eCU5)F%1?_*%f4`o)pV6$iTN!;q&)Uko9W^yoPZ-VT|} z5))PZW#p=hW8}8i^$0Lg*hY-wLmh|dV8lj5G9gkU44ByUtQuI;*4tW&&o>^^4iF6w z`}`l=Cu7rYuwx)9I1V2g17oYFaKQ{^L%#uGdbwu@xkT!3BXd@(e425tM|jhJpqV1+ z7BkMjrsx0-3P8L|$GL?IHJtU>Qts)#hf<_Uufk<(QLB|U`uVEbB&J%9sX)Xwo<7)Z>HoH1_5%c0C1JNMNMxF%hki@) zCkE@k+vtOafdeF)(9Xm>4a2UKteB0JfDwyxJCCAm8`{u)$R; z3na}^&=vr9x;fm&xFl2bU++c1VgkpLL!etPO@SaH!6Z?7fbHcg;C*=edacL+l|;z_ zHnU_Ps8r$9rTW5u00b8FX&}Dyjky7~AX=%S)&8kDngeMW;j$JMBtw(szQRg8{woHfd-LiFZc-Q z(leyF-^Qs&Sho;Ps^O=>$d~aL=}m+-_WPBLWd^Ouw;#EYbOsH|9mKW(Zhuc00Q-3Z z&2~h+MFGtwoj{YXa;(z4OAAnWP_Q)abc{Z*T8ew$3X#Q8si(xL=_{k5F zbJFBzdcv6;ImpcTmw*k-5O+d6hv%FzDUuY{iAb~HXD`)5{z}fPbyY3+us`wM64H4VFH(UG>aSLOZ zJH=%T96m{oh?`x6%@8je!TyftGJ=#zB#(mDS%^o(BTdoVB=i17C0MB9?Bh7t(CD@O zXaq4H7Y{<(P^P5@khaHuZXiFnWwr&TM|{~I29J6KF>*!j=VRCn;w0AdTP7u401-a| z(8wv@&&-z*jg(zYB_wzPAL&51n#ciWOn+t?utq$#@TmT?n9XDWH#Qg)GUGLXegRLT zuud9j1cvOs>?Z8+8hChZ&X-@F_S>ny6b4Tfk*v z(9G}=O8p%UjmMz`W{WCDlPFJWBa*W(nE9{h3i^(qxH}Lm?lx55N32ap@qR1xRxsp# ztxKdUxHmW)DLO(KnORRY6`C&!>WJs=J{QH;0`TgBM6{8~QJC~^FhYC+gdZ$e+XAO! z9R}zp>GNe)dv--qW3~@K7JRltaMhPoJ+ zQ+_raZ)S;LnN0pkA|O=C&xYesy&2eW9rF8atPN9gHk=R(02e?t<&&F6h~EBTr7aua zA~vRJ0|6-DLxwuKA2%#KRDKh7mTT(}jr zhuVl(bo{NoLqi}KAsAMqDwwTYS{kPGS4Ag9;c++2__84zzSl@Nxb~A?YGvT?Ckilw zHifDS6p?O%(_@%jB{jefURWQTxISc?w_;OV1dR`Ikq8@zlTH*vr{6$Uuj%kTxQ9A= zwP!(JWIP{v0tm|Xg(!dpN||QsKh>aJAXuDf!rdBxYKPyzh6Y4fkadOq5gYVmKwB~b z;@bo9CW=HKgek592wZ(50xYPPq~sNmxj(cjtc+OaBJGNZIV4&bP^{%y`5zB!DeH>J zDvXiZKv21Fj_%LRaR=Cn2peb7 zjqp+m2mhA?Y($~_h8x8r5c1&6G#l=OI8muuVaR)U8pCtJiXc`TT9~?zGLA(nz;CP? z3y}nJ0GQ!Wl_)g32lyrG!L31e)dOb(6q34si3LKV^X&HEqf^;O{qF znjw@Dpw%^s>W3NTV6l;Hyq$d8`8=~0`OW}xYJ$W`I33=|FuO`5gCz%&B^lDw;hpre z6y4^4ZypXxog}BjU!jSa{VKGIRs#ao`=9$6yk|x!(41b?;4t~nAmCGz#?E#UW8$k1 zL2BUN1kDhr{8u3ALtb`!jb3~Cin|uc(=06AtZ+Wzz{{3A&IQ$mvBPLRA|qj7yW-gu zy_?Yh5*Lau!rX*9B@$1$gi+AhwRFqTT3mmq4(cfiQK$=c0G7l648d{|*x5N>|0 zkb*6hgBuWHIs+^7LkdbY=$DYytaX=#Q?Pl3JYF>820|LlFMPG@DGS8gx08rtlf%eFMyObFszZRgE#tzsFHc67FwIXs8mbw2(g<8<<@LV*^+S$tqfH-2w=TJa8hO2$!d` z`j-+r3{G|;Jd5TdSupTd+W}4tHsJN+r5b)-7vYo^3O_*-vR4--y_n+%4J#R@e&2Tv zbvPH&B)Q&~lmsDz?xk+S-4#c0v*a?OLfwPxr5I-48H6O=&j$_vSI#6$>f)ihPc98z zhR)6K=^!v?=12znOa4cqpXbog-%oD(xP5>(SFLXo{1oBT8c`)yptQeo;=eK(q7+d9 z%1^jcYe0^87R{wj2`B!E`F@3rVDLc@i<NR`DM-EFfG_$Ul?GVMY8{c(t~VPN%d5& z%2DT^;Vc&0xfTTn+2R!dn5T!24GLvZdLkSz4MYxblF98`7QPYHCQY8j0}JC{N59l{E?dqHhAmHrpuqpS5FeN5D$`qVPsaU^ zj2DyZ@49zS*c)}+sxET&v=kk!?d2{kRu@}b8u7z(60roC1TOV)9hN=ki}@*@24;hI z*1|g-C;Q%giHIBBxQSPe$IpLZ=0g44m-MiMYw8u-mpo^`1n~x)$+O>ZKC{Gt8bG@iKI3R9>LBJMa21-o=8=UZwt{jbDBY#|3Jx*)rNu!qrji zD^ctL?%2r=p{ud%26&D@VAGOpF+J{8!!YN6J|M_22@ST;iEN$O^G+ z^l`fxH}wUM*}12(IL$2|Xq)Tp7>hfzyt$*yU$NNt=LL_si3&$IzrxLqqRQO;yrq8Q z6LVwp)5)9S%D6>EMFaPJJb5F|Hv!zXgm)hCN~j4@qmFCUMdPh`4w9p9dt(ZUWh2}N z_VF2)`ptc>2y!2gjB+2Is5R~=sh0KdRbqss6JHodhfqrMtkiky`nuOBi# z4i1N)3CX&cSb464{y*Es{Mt6)YE!!z9qB;3shwI&ZUYkzXQk!6Wug@oe~#Vo+k4l2 zdLONEM|-ubk0y^HzFWc`KIl-Sy=6L~_^%a(oW@`VbrPOu-?7Edd-j}%)S6kLFf}A z+U@a|5iWpbqFVPckgS%N`ND+w5N0Xp7}Jprz?h^LW?u~_EDSr>nMOMV3a(cOyLU+e zPg7K23E?f@RCdGDS0NE~lA~k2#-+s#5$-=dNAzFmq>|le1azFFV^#?6B4J2fS+R`N zF#Dg7yw8|NzWdC7j?T{eioF)CJ>2H&#^zteu^6@NB3ch)q(RrG$C4nBf-j=<2vhcXLC&GPkqSmx@20M`#q*oZ& zL3*@^!}OO!kG;zQtH%;*zol;xU-E)910iDM7!?g{$bR}ND$n7EOyeQQ1~LkfG}vcT z;k}(-Pjw7;mU!oRHj0fd^tSsC{^v(nXwoV|PGk56l}K&BKgTcxpJANdVYUrxPUup& zyI+B%T>f$^Mx>sTUQ)8&2k*kJ`PRAPd?@a)uvrAUqM~XU)dQI0Ak1~h}en0i?@9D;QsZSeyT^ygwFB1ktkrjFf1E{ z*JwVrn^f{gd80290?w&0>|O%!Pk};2vs75=10tnujvS9V_++t`NSd_kwO|e3H=~|u zKP?}U&d%;+`Y=i_FY)~33VGMja-Mf&IEv(HtE(F#rN4STa9Gz21rHG`JiY(Gfr@Bp zm+iY`gva2dE9|dx(8ZA)+KI=5JtzAvlnFiV-0aNlsPI1)^7~L3Ia%S%@kP^-Mnt2) zy5*gy0FEtOJ5+B#FQ~Zt?9M5j8wV2zkpS4&tAiSHzq02}c6Gz(`fu(*L*>wF%o+{! z6_SZ?9tW>q*U+#}55DFY+KA*AzWVL;ADdV$*iClIM#%D!wvNr9wMCO zfzgD^k(vhwk}o~NmZHUv(j3R^?eWqzn-9Hsi#dTIK;>d%();dM>g#Hilo4us=I$`$xgAlUNtY?$ZD6dS&-0^Edb4K0~nOdEOXJVi6$kdQH6( zu_jp8aOF?Q9>xo1 z{utU0FJ|hsPk~_mn`^6qYWa)1x=M-t?nCWm5M$o3;rd>iA1RR%mTtP17|9keF=BTv z4(OonOIVfz31xTg`7p{};w5pJV5}cmw6Ke6YjYscFU}sv)sqKgVeYuKK0%rzVb&&# zo=2+R+TF8zi|ZQopO6_Sl1|-2hi-1jK6B46@3qDd>748Nq3ga7JU}M>U-kqOLkWZf zJtqV@JL*&aQ?jtIsEL&qx)t$s1YZldaAvXK`VGt`U~I&F`E-2PQ+bQNDM(O{J4HT> za{Bss=dD<0Qr6~EJ*keYegBG;o)F$ZAEr`}@2wdiQvED$(HA;oMT$IB8f{Iafgw%d zoO@_m=$9>U`E6z-5ipo6rw?Sjof3nin~TWrE?IvTl~|d`so9whl+2iX^C=H*E#`;*T<$;Gl2c;s~uQUJW8eiK~6^5AmBd9^Z|saLFR#E=VJ z&&((SX6C$|4<^IE=@cinOQ6P*9cGvt|0Bifo0>RZJqSE(_{7ewTF`Ft%snC=)|&b>b8 z*cXPHv$HMy+_#fpDqf66t<2)CU;jY0cM&K~DjOh%2$QC!U4H@cu5;h+%c4rjFI)*M zMrWLTC2_eqJC!QtP!rSZN61M0bQbxv=D8n%Q7Rt)PXsd-ykMax_|^faxr{LeVEC^@ z$PBu~14EFgtAT-)R<^dG1up#;xL7b>-;{)nW7NJ(cUKpwQRecvQ-0oIH*p6nBv6RO z5q{KLCRl=x;s-(PrH^*Ryf|JMiUU&QENi1l%;F{&48=I$jw+b!t1R}M%<{bJH?zXH z5%Eu{LzVg5q4CZfr6H+HB4%hpA&{faz6w0A)?R{{D`_+RK}`DNsrvMGYKr7ul_K~)4sVH zoHTSrAjmeTu6KrXwE%nI*GZdCcH}Lv5MiNgaYWqx23x!YZIKZ@E%vGaAlLY1YBm4n ztf?Z^<#**6-0+RUy9odR7DGMYBd2;2dNhwZl(?wM$6_V03sDyp6$2bO5Jeg_H5QHY z#=vmcdDzVkdJ0R4Ihu^tqYPXdGDiF-~!AdrqK8aj=cv`tH3R+aXE z{%NA8=PZV=vF)2QT(Xhyo8dIuROw2<4D`Xwk>RVykEP-BH+a+P$$p7-FPlFb!#vcPbac$yCk0W^GF zhNJ}seN!7iP1-l(B~EeRbSN%*A|a$dwVxCLTCRXW7r6J41U0W8b4wLIJo{LCI%8cplBEd ze%VcFinu~5O~@cksK4_g`gbWg;pRj5eVXRQ%CE@41^K_-Kt-0DPD{z}FoUidC4HU* zT!il@#P|rMe3TD}pKJSF*q|erg@Rp#0u_$o{@VVg4FFbwU-AEN3?w5OzcP~jv#ga5 zfpk;LXZsr2IlSNk7cES%5b-6VB0 zjCm2&1<0N`esbwb1vXlg*$!?k!O08pl$w1@iKFm7w@i=eoQUpTJ(JKzQ~zBTY9DM4 z=oSbF_s!&drZ4dLfs%^Mwb~`tU_G|HZq5p&>WYfV?qdla;Uo7)V)}0O-R`^Fr)xWb zWr|PmUk(W2SVma|D38&z{v|&*hTc_w=grj0~?@`5k_&#OnXS zGeJvEh*i_NN7C zB?hdF-@$(nKI7yK_(tjll-#8Di;x{Yyi2_m{9oSxA=Lb0$KHm3m^3;(nc-H}&5)m0 zPhaiU9Dl4O$f4O^7Mv6Cf&HZLk=D4=jl~CMLIhM=_cFZ*|Fh`eW>26KjqOo34_qei zulOIWoYwGed}R*w%U1`XV!^fINW27mo{Sg~Meq|RUS-{jV=zeXE}hen6Jr0MAbYN; z+h8(TOF(7(lh20>Wi5g>tTyy}FVr-d$4!M<(Z4s+OR=9+vjDkyZcfFZnofYgWAkcJ z?hk^WF4jJ4IT9}%PqZ(rV7?L=4YiH$=F)HrBdzvTjH2R8NiV==VCF0udpJIk+!J*t zRJ&j4#odqqfu(anwt8|G{n+SJ>$Ha-hKTCQJ)T#RTO7J`tI()y^6+>GOH}nU(T4>k znVEZ9mRRYZrDo-NnD`uMWX%$aa=*p>A-bXM6~+{(;eX%{RKgBEnAd=u%`LouTIi*4 z_Aet)U#~wGrbVBcE*Q(6<=Qj%DM0D$(y`3_&R++*OBo%?7IhydzF-qFU+8;UvBy1* zrEICk35+UEO{ezhGh*yndM>3d+rkZYUyspYbAP5euI0n_L8`*Si|uXERZy&XEOAB! zLFyhLl@f^@glh@g>c#iJWW{Wm`^cn4vK}TC4G5p!4~JQ_gYNeU+iMlcX@Z9 zJF|-CqPy&9vCBG3#|uC@C`il4pLh^zzJIX+dsTmdS*1B4F zvEs?SNK^mCoU7*PA3R?y2us^0F0=vJOtk_zN_@IcT1Mxd3jyNi|}-?U%u!Iq$^0uElrD*vJHoY`7?-WPag^kp)P&vSh)kt^>`;!YGR3VM)5BU%ZgtYqQ?;wewBhrmtU{1{M1&#{v^M z-`8_G)ZS;`5TIn6Is4t|rAt{DOYEYrZRXfSMPXp1yo1-dWA!Iq^+Yo$vOeXRtLx?r z=x(|w#3N`Tl$LR-!azN<@QnIpvScSdJ4%UQ~`*%Sd`$&eOH$H(qu1uIQn)YT~BkX+Un8Xx7|&#%bwAh_!6_=l8h??2WvTG}q$ip-qfzSrXV z;qDY2x8T6a%E-MlshpqpZ{NbDs$xht@4cMo9_`!BaxrN_x3FqbOs?^igV2V6w=hfyr z)2`F{;$p+wz3lY&Mhl#Cl!Rcv+!jVmjMg7O1tzd(cwkk4x{4&sr2Yiz^RcHwqGhK( zd5GCB4NLvF)ma|x>0+Uxti9er*uJ8tMB6m9Qb~EJ@a2)r_Znxy)75)pI7~&hY}wM2 zy1DL%b~sggG_`!XRHc}|zfbgH!DpdEPeYPN+r8|cX`0#&rq0}u>c0A_r%F*ltXAP? zN{XD@P~_0(psf>cr1~NsW!pvB<-Ym;efUTyC(}9}M?|#q+s1BHMH#VL#pNoeq0FlC zTG_I^j$HG!P9MaWs7c3efK-xRd%>{ z`i2}BE;|y&!(B8|sO~c!V){BwdU=8Oe6O)vv-FYcTRx3cwA$s_d1~)bA%%uzLttVBvH;?-C%Vy`^80o8xIWuBtAgbpUU$4`@-!(O#-Qe7<8fp2T=Ul;# zkP6w3O#AO038}KR+=VC&yyqmy7JR^`m&&K1u+?|$B|gSpuLE3hXdMs7+8*Y&G zn{4QwVOiqV)bvf2o-0V$bA&bc%y^TQK=~&w9=4)(Z;h=UvsKlNzK``gh7}dB4u-ex zpbrSNvbHr@lvckY8gA;{(>&Ynt5-gw;Ug&M-_lW(m74yRKgQME$g_7e`$|uYTgx7| z&c!tbb7KAl(z>R;(^9itmwN^tDc-SbwJ*BVesLJE-*{fx;w}y8=|QJ1)VfOV&LZuh z{GN^D_v^N@^~bo|xB2}{ZPw3OtM5B~AZxtAH@Drbb+$rGw3gXfJIh|}%F^e&QiH8F zRkPnT{h7T-3M>!)a4(%qo&69|s&A8@BD%|XxraBee3Sp|<=LA26*9myl#EWbSo-^2E^H}baUCiyAt1Ecb8Lrt@_?xox=eKl!T z=_N{+)YKFPQzXo-Kc5NX3z&&XQv(IiC&p`YovU!hW=l zDmyiu4XRWZJ0Z~cxcaLds3{V>Mj`f>& z-)`_YH@6k&hiA{`LOb7Y#S*o^Cu^Ke7b$P-}wmz9=Lur(U!|ZcvIb54pTo@;iB>fdDqSSK;8( z^Ks%0VBDS>iMn85NYWjXu_E19SQI$KipP}h`h5s)NKVO8`?g=UHcHaJjZM#J4-j<_ zPy%<)2X(P`Ee#{LRC%rs=XGw&70NvkD<`dU{!D8oyRqy0qi^0CSUAnR6-qD9tnxdU z+hRS~WSjjiq_=1LC$^}p#?6+|Oy3?1JvP^qe)|5AYE>YYJ>#35&0D>PobG=L-7N7| z&u5`$U6q

S={^y`-&qSw`vp=Y7xgOVmn9xV4R!aJy+(=yXU_Oankkq!oVuE;U|W zSLIa2%^P9t=J{Q>o{*Mi$6m0Nd z(&zZg%Wo7DCP!L1pIUn+XWq!z12!-hM2kEY1kKPnU& zJ;J*%lvOR7I^tZ;q*|F*Iz5~}*H>2lNzareh}+Er5FM}iwq$@D8 zG#=*9I&&*WercA)Kzg{P)}hmP=Gv_t{dN6gufnc!ITY_T@gAP`_&J;x(i@f4^daY> zx=W{JT#0t(NN&x(>T*C*=iQ963dSp=_9ZKCl27?`plGC}<%N!go`zuBvtAz%Z&ZYc zm2w(8X(&I7acT?peNbq<-U;@F$ae#!=!H*#4KH6M3uh}WTwHu) zQB_nI$`p{u*-@XxwgtF+m+e#Xcj7`St*%xI(-ktF5V=;*>-}ZE$)R%bq`(h5D?oEj zHb>uls2I-K6Q-)&GX_E|xh)}QTs&3wvsFJ`v}&9kQe9@0u&lYZKS*G?ChknZ^9Xui z7tWqvUu>UBvwc!`L-gIFmau%KO<@Q7tytah7ZncyJUit)+FpluV^=hJO<{yH}nfz8VD_|4v$ zyDswN#e*sTrOCMP?5md=jh`Bcve5_3xu{*Tj9V;mwaRG+u@hj)S?BiW$!Uh7jY6#S zlT{+DeG!AxVxMNNxNHHbv~S(rud&~S@{-dE3n%t}*0-3}?f-VJ{ZiwJAlu~rg(i!z z!%tj#v)_om*a7zK{&KM%uC9(s5ULkLv zii=YcmxBDeuklygUEK9`;@EYieIAR`jW#b-if6kQs0Z%p#m1dB$##(x^nT^pU4Ct^ zUCWCH*7?Q_xlXoRI?lhaDfW91Tb1?I()o+Fw!)p(eKq%com*et-J{*2`$>*h(!M}yB;TTE zszEb^L9Cb$xQ&R^-18B}xqX-9jirIRn79ezs1wQ3r)w_)auAx~l6F2_V3b@R`(Nnh zNtW`U4P3f|6FjMd$NKL}^rt^=ce@RcZR%TOcSdG3Y0|CLE~?P7^?%XX8o2F6XhwEM z!j3V6^`A%awE!%PKph9wNBeW6^Xh@lx|N6D2Gn6Q-=$H(0eAH_7pTZ(&*k+Lyengg z^Bd?l*giEDcy@1b{b^yz1N?_9dn>!=7UsWfIFUL2QmB$gJ%#t;bpH#s?ThK#vaSp$ zS)}Z>Pu6$KytF-aEZT0*mx7BPlb)H;%yH_|ud?RPI(=~n3(Z!TDU+JKQf2<;u#hfe zTBOU=OHEK-3^Np{5sMJA0X4mr#nQ2Wx~k5lAB|GqlXh5)mdpgF=5+`jY_)CBZGC-f zhfQdckq$1>u(!ACXnb}oRmbp2{;-@{|1**4XL&giwk7H^r%eTF;v5ph%i3;* z6b(j?ynla&ot``HOqOs#u6$yyt0`&iW|-EBumA;0BOn0=(Ox-EzGD;(*)A$jZqlPx zn=5|=az}9lSm|8mc{qLInEIE7IEDQirN7=0v19^H>8k1C_eQ4j{7R$+zY6{nknKOOpBTO{NNq zSrx}RYRn8+8O7W`;~w1*ja%2l;YZw+Mul*!M0`KZ_vNT(3E#Fs$6LM{BYa4_yQ@L` z-BWU6yK8)ees~V>k7ovn-C$^3RtdG`4Bw^rl)C@J!Q#^qsnqQs+f0PRte%-BomGi` z(OnCSkpHyR)zsjg^}GjVpmaPp%cW<`O6`o=6^$x$-*8T2(J+DBFo7T3OhG(jck;X5 zD)+Rh&xGaimlQec;yWq-vF*W(~0aNuMQ z*~rCh+W9r9$)-r#{NwAxJJfybxA43>R=?xn-7&e87ZWaOexkV%-&I37x#Jc;vW*vH zf4&+NJL@7h-e$bl^ZVe%2k(o8cppmoK@M{wqgpuoxNYfNU+?6pvmjpC!)C*yXL#`m z=U#J_g5mBEe^8#S5s1@c58T9S;@M);3sz}T<$i$J)L7L0X+}A-`o|KV`{(;QEhfIc zx%Bhi7D1L53;{QGX>MZczkO@RFMB>9n#QfYqOPu`C4tIUBZLR^XFUUa&juNDlW}qH zjyC-tH^j~f9ZElF{fx7tiS-rNgYD|h_FHv@CE4>_J3czwhF-5q+sbv_c<+|LO<{F% zzJ?16i6s`ZW0m?B=Qdc}V>@``ZdY5={^DKRyi`tyM?E-lZdzTez~fnEF9mfspHdfLvq>wskoj@pf%sV^mxLJKUbQBh zluR#K`F_diyDnQY?TntKea?;dlkYVe?7&`|hQ7(lxE~W20GSe)9mW(+v*qos6&I}B zlz@F<9FRtNiZBS)g`5@`saB3KJjFb9EV)E6*TnT5sNMnL2Hw-VZ1VWx>7jzD%FOE9 zgB2G-(%IJeInFdqp?$l@4)b0cbjaVmq~A7DHtI5tTIOLdl3Tp4Z`12uHE&ZU*)d%! zZ$6cD_~A1r6(^fxSM9g**rXQf_?T7I9ai(xVA=C7p}?rkl12E_1^$Y+vHtSo<#(Kh za~i|fX~FIXE$|=O1p!ryKk%e-Li|aok%;S{jLYZC&2ZV zv2fXD97_Hn<~PoeS__s)e(3h+Xh5-_^E8O)wty7wm;tlfp3OzBDaTWIQfl{v*Gfg4 zWhEq`fp?K+BzZpA$uR&{W_i5ojLJzsjDdF;?Tel4mO-{0)$QW}O`dP2ySsYxLa$e* zaK@Q9wazx>iexyh@e-`)gsEL-7 ze$e3|V_)Q2B(+rYsr&J0Dp!a|uC49#$Qp~EA_{Cm=@}<87jAj<%Z!TfE9TX{wvSa+ znL2ufd-K<#PI-xul9|#%<2tFH8Y^q-=dH2KmzQU&6z{c40^d2?KI+HCyEvd~4r*H0 zl{e0vYx9{rkqOE&l_1nL9chdT_&Ms&HfR{-$ld3!A?L!Bp|DqK1me#Ka=Qj|MPaVg(9?!WKR=6h(~GxeV`B~$|-kgsQg zoh2@$aAtu*aL~{r4k=WE0N({DIK~@+>q#?{!Zh>4z1^PUIw`izlDxtFOhTQPoI|ZS zd6r`*ltPOpLo$t=TE8s0n9sM}ulV7)*Zu9s$i*Mgk<*n^kqVw_HTMt5wk95rVsGg1 zlf9rB&8eNJSvOxBE3u>0|BZ>$!u{k6t+SFm!MAoCsk&yFu4C)q_fDwO+r%(hMy;st zdw1!q^+>bqPd!uL0~@8f(6b}%byr&*%66Q(ZT-9mc;lY<%NuWakId;sQ4c76Qu&Z` zkFJEv?!{T3VH?xy%RkHFptNpI->HJF2be_2eTh3~KlK_MP7wERQ#$J>ZDZTaM$etT zJY*Rbw!Ad+C0uC72kW=%csvk3Uw5plY_Ul+Fi8J_HbGF#0j|vJuhg`ijd^EDqZxh%YZaE98%EkOCDO zCvD@@R4skSvJ3so;bNn~E_2<^hlpEIvBX2%V}eQ$1uK_HWoybYyO79M=h~THJ73K< zR`+vq33nP?TsZz!e=RhuZ4~VkPVniN|jkWcQtG{d%#X z`(9p0uz^Dvx3*>N^Fq-L{?n$KVPbJbP6c)*&ueP?a%y(PoW2|4B3gRte7XaNv8&To z=hsio@0>Vz9mI+UH_A_C*gPnH8vBfTcZMCivpeVe0+d%OOxz0l6k4WJ6?})wK7X5Ahi4-wznNAvXet`N z-&dyZxqLcGct%8~)6=psra{WC>cpj-+#6FiZcAEu(KhX8xKZ1L_#8=*4Iqx+--0?0 z_We|v5w_vp)PrHyIziHtbhN|nSXOG%wZ1ELa|bl#7gf~T7w$Rs*F-XBcgAu_@cz_3 z9w#FWwp!e`(@xX~;WG8!aY5q&>z$BGPdqpAD(nN*rOd0rto^6$OZ74fX9YVm&udgX z?@l&4BRn%|)0XelOLzSKz8nx#J>J<9=D%?o_v4aGuOYo zGpeqrV|t{?CcPwEW%zE_V(g49lj6_j|5J9=0Zp!L|JZR%6i^hg5NQ?ZJbDlX3F*cI zD$>$9CdWWUK&6zLD7mpAHDIJl2na)9)EFp8ZH!3{7-Qf4P=e<@-}`<4jWKxcUH8@T zyI2(9=3@oQxRRPto z9@6vIZ*PCJ7WQSSK}{F5P+*$1mQ(Tz8sC58pP)}Wbo*yJ4aItwCnhyEbCLIZ`=is( zYU_=AlN*ZaVk9NEKe&*IZaW9l{v1E5|Ji@C>m`^?xf*|7nwb3grJnbVhpVltK1%tQ2N zz)}egJifzlbUiWtYOEB$_KOj~<2)H9v$n*3e_74P^`UZOx8)`pE}BIfSXt?y3KSW` z*`s9}c9(yz4l^Op30KVH7&Um)NWh#D*IGr^FhtZ#vqAHIvEsd;=A z--pC{a(j63yAB=MH}Lr}$lZuhEDCBzjE9>{qvCS+#|YLkEEA>$u;R3!2j;NiUT#X| z*{Z`NTLw^mK|vz8GbNK~aE;7HwS7I2CiD6V2FrF}$sm|<-dQMGFZ~EwkU<-l|EwjC z@%lHbx>7*80P}nJ_#>0;?Fn%kzq_SaBD}}75ta#-?EN2xtIyJ?TY6quA9p=Foxh5remW8Q2#xK?BFJkh%zTH6bUPwIyM%ut2>o)4wazUr z_4)agR%+gmNxZ-Dw$nlb$*1DGzy0)0+zhU_{rJ{*O#7UR#|vJLDEx7gZ8$>%zuZK= zmz(QY%ejCQ?M&;@XD;Dt)eR5Yo2+IjyZ`+7`N~go2p){ zuQ7^uo=G>w6kwR69DD%EP1$lq?tIDiB>RGMRO9n(-QGwunM7f=D;l*D zoSIKEZg)k~>l|F)IFC`Ty%gi?-=9|{*#jyz7!}%Hiu}fcXQx`TAo*Z&FgozzjV*o3Z@3~Y9nV8_YV|2uZ%kjGfs3EDJlTomeH7NEiY)}bExI3 zd(aQdRLD*C<8(KHtwd_=iIqGz zp3?9Uj5N7bF}BBu%}u)7%Uo62(Xp1CWv1VXY<`h$>UdfrIdQ-!+Zqt`oZC$k*MhdR zf`%-o5_Q$0dVwb?X(}G(LMb?V$28N<##lZLf0Q8?m*};h{^ueY)^xT8oCIyH{B00F zSgd=#s`04d;`;1c_@|YX$z!(x=ebTfXNtrn2@77jQC**wS%4|fP1iVB6Je6s-6@@Y z!l7N9-C?L^rj@-)-JxRMsMPWzaAR${Qd)Yhj7HRFXWtg8cb^(Is^bGKhQDN6pxas1 z*sKe>4KQU|OFfTcCy#P0c@s+b?N{Sucq5H$O;LYjpX?LjFVKx6{3*RtnqAvhKTJcL z&8-UCzqd)eLOA%ETq4fxvZu|FBtxC_%P0lOR(8CJxeW$*4vx~Ui*)d2-}4XXnZ>5% z*T%q4$$iZA(~Y@jQnrvjd)>OR%ZCwsAa7U|bT7bp2i>y6{bF6hbqc&|ZTnN?@q#V4 zOq`?Kg^tvs#cR?uvEmkzr7CH<>7pgkg^9SHE46}k!gXisa+7LSoY7SiJ}aCGx|lxT zfO?@ct_5!icz^18$;R0WM|n9!O9o$LcAgW&7LbZQ>04^de6p!E)=4nrNkV&*`h}be z3eu9^v=w-n17#j$keJ+0(N6P54I7a4((SyHq=n66O`@&TBG%L;UHFb3{rROK!2#UC zqW!ZITwdtRP4agy-=3JvVQs-1f)_-Kzq^1M;-kpI^L)Z7HwJ}*3X-rhTB^p53fKuD z4?7WYK55B3@u--LnyCu%`CDWoTQ&Ms`Vm0LcGJe##?Gwy)l;SmJkhnWd~tqafh`oCBEK~OBPs%uOM>bFMA$1cc1fZx_ft2O{b_G`J}f3@aZZhhEj z3%OaquD{#<@*hAc|I!&BFa_z|l(%a(rrlF1ySi3Utn^u|)@!G?f0tW_JCN`X zhIU=|ZIw{3Qu06lx*zDIc&CIvk6NsM115Wyax#lAR?%ho{bgrVgRWWli=Tr50X`6eSEnvFi0@EXC-%SG%i8B(UkCn}^S8uT%Wnhg^#17e zWn;Yfs5N?J#Rz=2cx|;;_3p^aF!P^8fLQGM_3baA4*eA=1TWUOE(=^K2(gD$?003Q z!)reIZx35NhF}YlFPNk^&=lJ}gR;;6hl^bmqIy8=aqsOCE*BUr?q6l07s#-Z$o+YV z%UR1!;F8VXJzq5^v>AK1{lBrs5&=96fj$gOb6e>{hb}iD;M8@6|4xApsCQfN+%#VK z7uNcjcK*j{m+wG{8_?SQIskM$b70fwRad?6fuE#V{`?xzXea^tVhWbCVEzK$AG;p; z-w(TTriNqS$=sHWDgu?b82QE!_c|z(tuKeZEjz zKhv=3^FIK~7U!H+-{Oke+v)~-zT8xjCYGn*_DPw3aP7rxG@mmYM; ztCE!`}3|5Z5lq(x7*vfPxOokRw1f45n5Kr);tgZv3Gesmyp2dwiB!yVd zH<>2>Df(?>J*L>*SPor}t616OP4wD7L}8)rBZdlPdC4 z$6<=me%F+bv1^*##BT~2E!Lx7G4s7ibgB+Ujlf$U@>N#Y`3otSPf$Lq7g`!}!Hd7t zR^$rDw-)z4%D>6%?Rl(Ta%78Wu~C{Dskg6!ZjuFW{UE46dBr2m0bkLYVJoQT=UzeA zJ194Y3G3CQaI+(f9Ek@AXVRN)fwDQ>qgW;fgMb)ap3jXk=&YGg<7~N?UR%*q1cM~ppt<5b9ruYk&td$N|HZyEcf1L zzmfLxLJ|C#JDWbQ?!EEflW*53cC8~mdfvw#_oK#nI?KfRN-X~|*FSW8?$k`5He<~_ zmF$(b(tm7K>A)Fa=YwPRW&C#Li++m zwcB+?oX&a>()}3aDOpy&g~CZ+hvSRv&GYu2<{IZ{TcBz^wUu`bZQFp7@w40SaiW_|*vw4+*FM>vhmt%Ydv~gjQX}Y(dMh0exXIbbShap9j_w%R;bK!i z=Ld1Ud3JD@0J;KvlG&?MYrl7B+=Y5*ccrpu_d!igMYWh03o$)T?-kCqk!0sL!!6T|Vav;Xb=!y5P6`emqB1 z+<&#tDuY+zQ5>gP%0>DhxTNWE!Sfj${=+&3H|X+{1&S3Zi2U;&{)0uAuM`c*=MVqL zOtZ^ytd{mp5iSl4dr!$u`P0})1|4oj>qmu}p7XGni!&OR*zKnn;xm>tJ?jd8>cAt% zH$OYYvK&qR!fpIOdS`>)M>mI##!fY2WCi}4Lg<{uRgjZc$Z9UMqR1e^+{|nQVUcvd z>6Fa=($c-w#nVygLt9X=)3P0Vk2dUEU-^sDU)G~;=0N2R)S3Pqe0&Yx)ENiqsLiou z)32PW3=qX4F|AuTyN}9x+@f~^S$WFoR4>x*`*>%zmD8{zqPZw*oWm;Gzz0)QGyp9-&sq zin-&f?`NQf7*32cGuTPl>5czB(9>fuQWH%d`Cxsv0x{3_;oQf{a)}E3Wr=5t+G7xT zm+~L%!Mob^JIzWOANMyHoD{D_1@oBd@+Y?b&x2&{rC~5&7GFZvW^9Rr8`H`vevDq3ojUFqMgv#ro($F>_ycD{__7W7QQ^&g24CiIOQ z&<~X;y)_ew@40WZZ@|Fg&3X6w&*}6}4`;7@HQKTaRsjBuPOq)KIP@vvEsSlVb7A9gkr&$zdPj^TRIN z&$jKEImE2Kx%g^)1d@Ct?+DS4N)pcOlFpRwM^~mB)1#-jwhM2|q)zhZM$BU5ZHF$S z^z%p(=C>bcw<;(`_P0Dg6t#mU!28_u!;e_N!+Fz#+O&|E7RFV-JEJ?_6thQV*RvO1 zQ1b@r9l0aQ(I}v(pc?$(UM2(hxAxlTq#*9 z3H>lZ-_N3+Rd?o3qt$5UUP)5^ol{1AlTLGzvMn9##sX?pkxlx6Qys?cZolxr);~9H zTr!+s4)&yyXT91YRKl4v8$YiEsjn?IX&Cxfop!J=8DfsoCqsiSMz$Z1X_^rwMFYN6 zrI7sHhSY0Y5rrN8&cw}CRk*iN!8utpmU{l%mLz$7Pv6?@c%X#OrUbMeDmE1Y4XPtA zr`@h1WCitd3mt$`NVnhz8t}I`k;{`qZS4-`!4Y>U!Pm&X!}-+SEcab$9rb3gQlF?P zADE3JcfqwR)fQI#oL@_^*h9Ly_px2xbFF8+>z@w8T+Pq+vmC~9rK}=~kE2K8cDB`H zCKTpcY6=Zz9P&PKwMS4Zv~lyPeOP`A7E_NN?C^vZ5N0PGu zBgeD5#y_o-`=cAILlx2Mc6D1P+>qXMHre^c+_y)m=e`~PXAEB4LQl)I;p8N!JZ82 zN%hG7`OG8Ls^$W*?D4LS2)5UG>6hHpX)|qgUm}%*%v3hS@CD) z#!W&iId;d!Rj`JiN@g9{WojEXO_{B#?6=aduIJ2QP*JRUOop4E7y14sGkwR>A+$+;-M3bLfL$l|{F=y^yS*eSwA3exDC#>QEEX8dVOJn0VeP#7vJx7T(1+4|1lJ zSljZ&mT9o$883vxgCQWY8W}8DgMJL-`wG&^JB|j_-2dXF0Ke!r_~myi)RvMcG#Bx? zjsN^BRL{py^Kf*y2^sN1M2F3Js3UL2PIBvv)SPA9KzeO^ECa=#bFm& ztvJWh*+aWCX*|beWb^OB7IGA3D9i1)-iVKQBG>YL|LeLnGxqfA0z29o=&+R?Y;jP?0=M!pbq#%5IGD}bT0%;0UwKG&1;MKY6yCM@v}YEZp`Eu=JM&!9iGhzhGnA|?xW%iCPdVW`a|n){NZMCtBi;jge~?%3sscZmpB%2p6r z8*Bo|@Y;rZ9*qxfx zwa3OczpYBL>{Lke)*Bp7tapUsx*qkny(Rpj<^G}OZMMYmZ-`2uUZ5BVn+&BB= z^JgLXfrs($*I0bTir~pH*(oj5iJJ5)Mnn)a;X@({^-S0bEuy6}vv7I^g%8o2QBnmH z1bCHQc5*pnLFghl4`ns?%o|!V`cq!?4|TMAqhj5dbp4UP@2dU$)(cen8OXco0Uy?& z&vdyXV96O8DR8E8IBoP(^R~>IM-|Z5t#xUR zBV@bSNIFg*Z&&RZDgsULHLzS^Nk99!+mp;}B57=@w>`53lhZLBAC!S8-Xh5G^LZtl z-2}htcN~~%_ttkUFOzUV76pQW9yizr)2(7inZ4N13G>TWy5RnlFA``C;HowJwT}B& zk8L535#R{&EhDF1*RJ~Q;P30`km6MUf^z?w3^w+XDhJHIqc-z$Q>xVMp*mH9UKJEh zidYQjw0kIz8j`h;YE{iCy4_u)*eiA0@P$HHjl}zdIc)B}OdS*c(TNZllybND(5q(9 ze|06iUPIKLU_vL(WvFYn?=8KEMHuDjLZwsQQ<#2y_ zh1dL!J4HG%SzxU_E>NCkS`eZCP~*zGh{@t>=2p$xH-pY+)Hr|y)KsOgNpQi$yR+@g zCRam`>9zxk<5a1>0>#R+nr2-{3u4%LylyM^M=|pv>5{o&amY)$d<7TC-YrJ680Kzg z^pCZU1Ybl0H*KM-e=rSt|2>DM9L27cf+#q~6Lzux-t7hw9q-2v>h z8QVlOirzKwoK=g-$n6-TS(J*}5vNONmyG|&YmskM{W3I9bx6}h+Ywtxz%I5k8x2(y zW(u)&;`r8ix@5Lp^5;0CY$kB*Z&4X?E`QX$+0CA`oC}!3Mnsj&($ZN5@x>Si9S?Im zdXhD!8gpeFlNa}6A|e;$190KjO(`W%(jx!eO}*YJ$7Y>}km*lnAe<_ILOsCaKk>$1 zjTX0`fyzFWC;4DFdjCaZew;&<8_c$_KX?mKA_8AJGq=+n@&1dZSxMRVfkq_@VFh~K zh@x1G?~}jqfp9Jwix%4Z>Y!6Nu32vC{$EedI^;S&dy%a}R5`-%M)#*&%;Vx?VQ@<@O`|4}sAsKBS(8YdcWq@Nv*8W*M1ZnHPLO~^DI)m|$=Q~rd*h(}J ze0O0f*lHc}%hMnSX!%e|p-@?1@1=Vyq@0Mn>%2<+LmcqaHm-bXvEVq72p%2Ze0~j1 zmybr-o%iR9k3CuVF#oT2L*al73dH&+= zEGMH@|KBy0hCwViw&Omoh1{=?N!j%O;kYYhEPyq5Qi&d(=)BC8|2weT@~4&#1OLCO*We%E(ejUMmUe}{=G*l2zaDpm zX9D7(n;uWT^s~;_AivJw|5($ViUv1r{#N|V8v45FE5ZL65iLXUE#DZ49X#0VeOGB0 z_wrjyeDbgIutNSlgHWwbexuC+u=49-*~|YAg8_MqhaR0Be`%4i|DWJ)gY4kZ#UE_7 zmcL>EW_$iBep?{Lztt%L94^oY>Sk7}2@K*VpZ~RCXOX%M8`f_C1^+F_&u?5qZcs%j z+jRB6=}>?#$@bc}zVY%#AN{i1|388ObVblAjjOt{a{-8u#D3=&;H(vWw^pE*pc)4u z*(m0i+ZeI-FB1 z=@*}`nd6^(5q~0WEs^^zM6mFt>+-zU|FOmQXWeAw9BWIR#m4}_Bz1#tLx`76yK zOZwv9_+ycNgUS%W9@*VqB-lUD$H1rl-R8We15-&a$&~#`pxYL}b6aND#TWls1Mc|? z0oiCVTgf$r+yLzQg-+vTW%r+L)`do z1$^ezI<9n7Wj&Z8*7cjpuBs5un-lhD5Y>9OC{FwPF)0>7y&o{=6EB%$&=Q>*C_(1{6Fm z%zft@@SHlw+yZqS4Q>jE&^P9XrfZQ7<&X9j-;un?1|R^yu!PB^zZsl4S*ZAK@6YeN zWBv?7{N?XDb5}0@4%up0vt{1)RJNjAPkXjy5=Jck7O?1q1Ox8+Om#_8Yd^ zQV~@$(I+(!%TsPpGDetgPEp`4q+)$L;j9hf8I%##M)56r(yup$D9+zE^rgB}9KqPu z$Gg!P)jLE2F8uW)BUaYAClQATZL}UxQJi(I+oE%N$NaS2=E&Zf3-85hM|;`10wmT$ ziIiUy{DkIxw%3d*lG&PHT~FQq$hYD5^AZx3>$VJAu&WpcOs2jK31Q6*DC#++^?>pG zrzb+B&Lv-c^+LnM0gS$2GQk*RF4FZ}&c^TSccBMJOo zfcM3@o#)FxS~L)?8gh0|(nnu=Yk>_SOBUkpU6G$GJ9`1hk;US!Z}RV}H{o4>woNFr zoK4)?kHw_7raPHh&(CVTUb|LWZ&sCa>lieI-F!?=C#50^S zTqXv;j8<#tjhsJPIzvF2PHjQ;|sG941yJA z;p@By;tmao8Q9WloWZEjXN4fiuIUu}&IzHWfw5UiM$kloJ)^koxo;wEeqtV(8+<6w zl(0ulDAOxK4Q;1GdbIZh5|fcWUADyo#bpNoaWKPdLt^gWag}{hED^@I0J9)MsL8XT zu$wd|XKbd`ds05{JOWF^6pm=W^t)oy1F`G*|3I~TM!=>Dj0t+~V0f|=8gWBnZJLq|Cea4ZUnFRs8v+JU zT>FBH>V+=*Z1uO{T37&sb4j&Eb=!3nZuc9J?_$~5DZ#B+e+X3pnn>|xl=CUXyUzf~ zpEzFAjGRW*v$oBj+Wf}rvQJjw{ipKN<*C}or+`Y}sTD2tOY~0m27p3modGhDxpNAt7hpc~tv*}i~cPjx(R z1qtxt{;yy@+sL1FvMDDi@k4VYcEZ1CDEUy&*L%A|=tTqa&(oW*z~q;2<2%e_VD7E# z_w9FtrdeUpWCbIoHjMJ&0nhvof4$^tafcySExS+Qzr}TM=Ad)52iRUW(N$I5=6g6x z_W1ZGcz?kjk_p%3@~SZvrqFaZ$njwymwho$qV9{8&P` z!Q*;(moW9N2w0#6nB&X@V`i0>LBbqrA_ac}c)BCty{IUbb{T}qRLUSFDbs_G^J=Hy z>i}+@q)5s18xa_15-n?j=?$UNDFi_%Q4)@ps#Y19mE`9NQA4tGNYwnEA$)Xm%X48E zU9yzk&+^um0cazDPlx=IrZ#cQzW9yg@l<=gn~NH))(J+5QSK&L-PrjksJ$!b;Mw~*_F9C=$ z(0mXI3ugE<9SU3IG^=fFHuZ;3o2p8sw`aa_X->WNoQ*xBa3p#c+EC8PyrM$50-#`t zOp!bRL{Cd#_>EWkSJVa1wyK4wp#tN*dIpRw+Una?6kM*Gy4Ddg!KGgU)k|})Z>@fsn#bN{Y0K5n8{7=ETzThIM6HU;5tjP02En{5m!G7|Wt#EaGZJL*Q< z3+pCErg^D0^H`wYxke-rf=Nh2eyl3-VYzu-kZ;J0%d^c>5tWbGv@=}61U~&SqP=E} zn>l}_n_H6PW|e52^?H=E+1x39lFWJDym;z-YsvIH==IXkkmgnMaWp}^xC4fvMQ;*@ z7^j%L4~G-$L~@f#Uw=u)_1mcCtHa-)MBnQEf^P$UR~SsxgD%R~9IKTgXgBu<;r-c0 zx~h+bNGijzuvigHPIh>NmGHplMpGv(JT8|Ifd~D!<26TkH^W0XO7M3BGk3kdw6W{^ z&seXqv5Ui`!;-*dV_u?Fu2MjI4*0A;e(KqlfQJt|1cN!Y=Tdyn_2+O6LhiCE>Zqs3 zFod1wKmC#CPq2HYFbcbqmzQ&-lod!U?(gMcc_p&j5-H&wP2_jf$tw<3+@AK3>s_n= z{pvtmyY}B*0OgDWg~l2OirC#wWrkKYZhvjl*R*S=_Hej9QDa+Sg=LhvLtWwdPwPd< zD7t2`%}GkQQjER|x;4cCX6!D@dmD>(q7{jDD^ly;rVzQve)NfQSYx(PgA{;XvQ5Od z0Eoqrzi}=0nuwu#Ifn7Q<``=$D=OX@eU?MF)q;jdiZnh4aMp;pCSQ7?{%^q&Js2G7Z zG)EQdo6U|-ZBdls>rk84M0vF0uwpFtyYf?Q#kP;mcLS4(L7GF$vNi|Z^Sf5pVSnHvrPaLPe{We2ML)yP{7hpMspY7(B3MTp{s}zKUQ;$L6*Yc>rjz1>q@DU zz*oCD{O;qF1IjL*KFLVwKk1X^;uuGZkIyG{av|>3I9G*m@8ka_4#Nsi)cQEhy^cX+ zYSUmE{o33vT%N9(yBxs$4C>~U)g^f5yy=n~_&oILPvX2EEAe~(Xm3@OWXWho4MeQj8-8YWx%Ku=MUQuL0~lgH4+b5UcFXq&u}*W31GoY2X~M8{url9U?b&4 z^1pt_2Rg&5CY;|0Ml_ohaiSHA`35U=ZVQr2 zkvApIx$;%!mrJxK^b*e~sjqi8SOIXWIO&Qf>jkO=bFuR$ zP``(jvK5ZZ&O>2~6_ERo-LS!r&Hxlt&n!$p+hq_S3PwHI;7F;ZYr6la69)+JmS9Z0 zUc;Zo5QN~K9@j|_@q^a232-IdY=B!xoPBy9A_>;bEGLkejn zDg6?EeYhX(Ip113Z3q+Cw>h(0KkKaBPd=oTmDPDbFSi z+2U#LiRZ(N)4UClvikd>sbc+DcZ}g_UATGE)(01;v&}89(52mq5ME$nshkTqVg;}b z0szl)NFQJ?!F&$8HM}1!>^9?QwO~~Nh*Zt;#47|m#@xk~%YGoP+r%|#DBLeD{u|)A zgJ9D1&sgt%BjD~HVWau97WM*UjlKK$G_FSFb%e-Iy#x_!fxdeLA8=$1NOTLdw`Pn) zu_FshYsZ`{b}E_iwS2D3QEe$b(eUvJJh_N(s?#-N*q13!Yd@|qm3fbR>M)O6L)8=b zu5`15<^^)@S&V1c;b$K5MScC{7 z!xkcG!Q3ll-(AU1mc3>lq(=Bq-UC}Bp{EYc{Up?X!U}Q&Z&u?XxXpcRE<`Ftu?;~2 zJ=qGkPBU~*XYUox>uf}J*GaOH2;MR_CY}K5MU#NWPO*)9wBH=KEa-s6z4jWTIw3f^ zXIt`4RG7#)O!|N@!3u;|j{wOM^HTRV_;h)%tn7#o5t*B%qk_zA&&`8Ilx)Xhj6!Rhg?)Vfq>U_ZOaqX$KP>}Y$ z1@K@z5)k2yA#SC5quaTtP`@o+P8_ipqys-^Sqmhl1GQPXLJ< z(l=he-xg-xG&xDuF;U4g_hq@=S#QHm&B3|eq+`3&0HO!{IJ&`<92QH%Q4m07I44Eu z3q=t*c1c}lVfBQ&JsH+0F9UH7K@ot=2VoO&su41bX~EhV5Ez4dclJzCftYj3kK0A3Cb@N&^c1umX=dDascovD?0zrSWy+nY{O)DqC=76p)4 zNStmam>EvKSZIQFZld>q8!I4D&aW|EWxuhVVTW|nASdKOd>C1t0s;7iM_m?_7TBQX zb35US##y19h6?~Af`-BMgD~-Cv+8lw@H9w7p~rGeMbPCYnAFqFPcj|GMkyJk=FZBl zqdGW_OK?F?ALIe4^89YKDvmsy+2w44bI_<|rCs>cdsR%`AW-j3)9H zBka(J<3$YrdeGODFw(+9L*T-OdLLd$m}2DfC1(O<&Y`HLrn_^p&dDEz#5e#)c|91_ zzd_lpa3jmNhXUI#k+i@)q2~-H~1;z9UuO)syUEw|Jf zLe^>n8y^4?yLBbND5T+oqME7}oHF$=Bj4)4= zg}JJrWt8A%oA)_u(mPA#Q6)H3IMIYbyK5IyAYgWH0jn$^c5AaSw|1ZD*5$r{0{z<% zM%7{0&tJH^Kz=aW_~Q+Co21&@R&&V?M`*;nrK?MX_p>~R*YwP~CNZ9Rga`rKine`% z>5-Kgo}D1OhKwF5VT>Sg#_RxXTN6$8YAuw&7+E0G*$s@Du76x<1z=;30IX0{(qG2h z28Id#FHBJ(Ft^55=+abC5qYig9l(s^+)_ItElQXh2j{(5y6Ra70o&qGUt57mg^M=1 zogtmQBV34Y!4e&*C!+Kx(>Se*XOZhV(hj845cTCH-yR-n-k;B$lC^EgLl=$L%M$gK zjlcL-uv0Rm%-sJ_Q?~9Wxm*c7j49~v*c9SANoZ{z&VDTgXArvyMVOZD_@t1@4giOX z)aC?{4p=K`w5o=(Kt|Zn2K=@L*q#KFwaGTHcT(tC22t|7n?0chpe~DrD9nm+cL7M? zSy1I<_nRb;Bjkx{-;wNKM*@vyl?Y&a4Ian<)KMhPhdoz+@+yi4K=+aDDkdkI@QKNr z9CP)t>YPxx8n&*<{&Ww2Tx&IIT%vPN>~p#@59 z&sDex0i*;5!a@EUH5s&JepfjKvs`CBsA*8^W^EBZ;|tW zJwjziQZ*zp$f=91)jKY)3tL?XQR?0{F<)9hE;Q_X{Lgv21L5nLxwbbw-^s`h7&Gk% z?$#O(8QkKwx^+-B`0 zk-gHV3FpYRhN30;U++&zcKc=b|4>&~7pLglgcrjbi?@7e3B#v4$U(^%6ZUf zhYel0sVX!wcr*9K2TlNr>>-K(?xLxy`Xu=aDx<_Fy>LWEuN4DOaWctBls*BVse|l| zz)C>9IpFTkeDXvAR72tOytv8-T(rgbt?3{SkO_g>2W&a~41FH<`K*cx+5uoW(q0{! z0vnVrP$P0ZfmMw@>wdl-lYUOdy1sLlvJ61yie}38}W|l8&wi z4?dK6vvMTyMLAHmD-a|ZTxUz@RAaH>fC*{-{SPY{DO#x^V!Wa$1I^E=VDW+exRHc} zL`yo)?FiQak6{L19RrAW5afp0syR>{Ae`vB{@wmR?&(ePOqV(8xu-$EVd_5zG$5t3 zIr#451=A8R4`!fA7GonzivV{huRFUWThe<#4Pf6VZ9@P^HG3gp(wp40&qURj`F?i^ z4?wo*&Yz#9^nCbT^pTDR(nhYnt7rR>JSe!&1@G;*Ak!j`-RZ&4=}9WOrZN?QK!BHJUMb0Nh$=HB0lxkTB!~? zr<*aFt-6l6IQH$68N&N*^CqVlDK7O)Bl8AEk*q69++#L932&-`o!DVZD%DD5ezu(y zCa`bM&9GrGb;;ddtP-?*JI~WY%3sc&48zhZ^8-a54Dm<{9EY)9I9}eWNzjf)ZlH%`f%p}mi@!RXDCRY~!(jFlViTQ4q2vE1$@2W=YlUrXnUSq4eUn!i z2M>(rpX`_OwHuBRv1x^jE+j^`1p_}0r3yM#7SJpY*uxJ_z}9|k0do3jm=)82bL>GPU>5HNkoSVTr8$lV_X|Iv{|1tl-SXw2kweEb0c z^cxt+=Z9h(2N0~V_?MNhk9=fQF;Y^x%YgIy(QN)|q(ZGuiUxJaW^&r=;x~qMM~)52 zKQdHd_Hrn3cmKL>kP6NR0OiOF5Jr8CyDT-w3IH~P9Sd=zW3{4D8Y?}z_f*Sn{PZ~{ zpk1HyTApB5@?qB9wx7QMg-)9QP%cRC7YDi6b2M+$gVhP6Y93#J2U}Zw!sgHCSC8KeWADG20qHGL;SDbM2liy{)DI z7L47xt^z>yNMYM7#|>?gA}lM|4eT-LZIIe!w_c4yzk_XE(^9w2EVS@bv8Pacf%pej z0Y!bkczt%_p!kM^!2ZJfZSahI-8F z=+r!};nZs<7;=fvPsn=Uuery2tDYVnztUQeK-a8_zsapYPzL*@QKjQDvj_Rj6;7LP z7-FPIzPDvchn1Z0nUB9zM8y&<=cc2ON3j4w6mlSuWSt6iNv1UST9h26>(92nJOz$D zYwJdQ&dS=m=>$k_$lB#prQol+OFq%}xmn z)Wx)#yG9X<;7Hb(Qq3a_SyiH7NUiE?b7$Zl4()?nBQTA|*Y_rwO`~|-^6630WGxgHl-x6sm^?w-Vr!LYAoauWA4tZRRaMfU>gakwP)|hFKbP=?yw99-!Tnxh6c*- z@Cv?FKx>*HGrUbfF|g+?5A(Jj5diB!`4bFMlO6I3Wpo_?SgOCC8F~R}`%=hZBUGBB zSwf{H^1+4R8r%st^fyf5ypj7iu;yiay;+kol;VRrCiI9Ps~QtcaRly1J_H(yYfXHZ zX;oDos90nnpzi>w5j`^%fi9p$kYHcS)V!hJXa$NaYy1U7UQ_-0r<$+2Inb=Owa+=?Mr>zrFXS{^M zHC9`NGBb4T-Q~a@q#!GFClW)g1{#(JS~x@`Z;Ge4Zf^h?5U?QnkhtxQSlE=&7m2^p zvwEQ_lf`T!rywe8Yy6l%FlJSO!w%7d&~1yue`GN61EK&7(*Tt)ox8LZ=D zC?K-zDZk=?l69NM!}a;@0_XpOb2V@2Q;>c;f9dJq961#*{o_;~M|m1qP^NUf8{m56 z07+3Cpzr=!cL?Fp;b{q47O0KBDd(@NzR{#n8oh_6ABg%XcmVUzXj9h@5+wt>>JE!I6RD_fsbY=N84sztI))g~i| zK%W?RBbTeEAj;jd?WMqyaRt-fAmf@*S_nCtWmIMTFM2e+Xsl)wDwcr+ zsoHVgBmPi#5!fSACp0<}3NI1?^4S~RYUc0FyixXeA73RXj+(lg8LQ8N+VdkkY~;S7 zRWQLMHzo0#CVaL5R8IVP_@$>40*}}d6tpxOYdR!5?_4BINVMMwyNvo2@7DM@6OjFe z;C&I$X8@ABhbo~BQ=o5!0d1Q@VNel+286Ur6`&9kMo4CWiaO5;ZqE*zl*_0KtRH~` z<-wBkY12ZIHM2P+<_umk4^93tlN8mWaq=o&lJ^hAA7wB-RE9prhuMUfPb8anDei?a z=hJ+)!nB_2Pr>F!$tMTd^$m}K?}@nNON*-&K}9tDeSA3=z$`(Tvt4-qs=XuFe?&!qPW2x(5=CsU{f9<=Dw#4Y2_vn0(OISLC#?PMTMCs zX)lmhCm@jdNm5Is)9{04)lE1{FWYo)NZcVjRk)nLIGV({28B$ zL40|O&KwQJ2jvJ%0Dx{wAVx@=DN?JBqOn>0C)$`0BVRS2|-0HCp+;Tgm_qrcz|MoaWdJ(AoPR|Y4Dc+ml zyaGJcFp#?yseRGkWFdD&@LY-_-ZnFCY*MEe%H0ui%5dSI{XyIz^3Fojg`#R6uf5_Hd0t`}w1If(=VPQjA=ZITAS`k8aJLQTkS0Pq{9Kd^y$1L(+w zy4u7LLGYf3+X#!%&FX2mxI5Sw73*;Wp!`+hs^h6`C+@$jI@ax?P_1weX znN5GBMmmyUtehQ91A*akED*{RwvI50X)r|yXWKCt4!%%1*h|oaJ`17qUw&Le;!3Qq z*zk>!Qs3;8Gn*VUf0)y>q4;}m_#^)zCpZ!9ZRYh&c@&fsJnWvnzvJwS3b1gGARxAU z6g#i7o_kNjFD<%z2Dbz#XxtqM+)Dbjd3Mk$Ai=dTJUyE2W#NnTm=|~j=Fmskrx9%P zGFfk&`|ftn_2=Qj6Xl)E`%c&OdFKkm#Q6BJ%J*qj25j*^*;w;3j(ZLm)FVK``A+bj z^Z4Fj?7Z`kgpmKlTb?Rlf7_lPvjo*O=kL!Ek2j&elb*i^rI`bur^hoP5f;u69CRvIxUHI>OQ3k-cvNSHm`O%r@FXlRa zcL6+PH1-wvKS%gy>?@xhq`Es1Bpf;>gp3?O1@n<0W*SzAx@GP&qhI(mjK_OCn@UGM4NgOWAIS-^sU2QUsX=L5+0NlLMOw39uxKFp&o$G z)LQu1AF+82)}RV{bl41BhVShI+@K-{bjS1ls197=*;4R$_SWh)XJ1^P+MU9@s4Bas5uc^!f_ zBoK-rAn%uF5(X3ydXiczio2n3{iS6*ygh@S0T2BV0Sg`(SbM+mr;7}Bl=Gh*2JOLr zMSk}zTeqdsTG96c2>d0F6JQ|Y`xw~na?q&~S_OdYIrzQb2?_#C3!QVlP!>j_+po6G zpTV8AkraLv27H{VE??R{DCP#erfJZ&s7BuBvnjJR!o0qbvN`;IJpfswGHsXz)I}~i zLVqOPUb7E)3%TSl%$3Oq6V+IIg3UUq`SSSi8A|N74hd85j0TF2;MNklFA{|n69Hj{u zkY2(_@6wS#!YB}_5s(@nQbUg+kdXeJV8glhz4w0qVmzGevi91mJkMHB1DGVqL+5V# zdjEYbuR!MHrQByPD``NuF8<_A5x>E4F7i$1rj^>sg_9f~d}W>UJgyf9T+%5T?Lf?d zxEN@m+J8nAy1t(`^$)vxSdT=EX|YNU)$qREhiV|1+?MV-eV7}GKjdR&7VL?J6?iCL zI>WV}7Zo19KY?gNNuCkL#eyPDh=P8ET9_V0z6S~Cc_3B*4TlRAwt1Sk|x3Z zol#gz92o?(QXBRQ1N7v}g0kxmgUm3h2c^8!St@HlQE(Hc_xz_tY@ts&%GvZ`AiZnM z54Tj&1ek$L!R~JCgEU-UF={Rc{{3+jKsoefugI4j$^1TYTyO!9b`UGRIXtO! zz5-}SV3>7>$_yAK z8W2PXd31V1#WjB724*=V%fGKRoLT+EZ2$*6Wq+K<4FIK-0r#|-p%hE&aciukMPK3Z zbILn9{#84i8)j^L{+f>eyt^YX`Cp~_4hwB{`mrGyr(XjgS()WRI~U)j`I{T)ZlDsv z)vwLbzA9Wgmk5tu;Y&-2c=?ki-dt|qudWIN*JHyK zf4pb=uZTxSzDBgS=>qTkCFpR@7vp5*U z>woU`jt(xod>erHUu_IN<@8l3f&UrY(Si7B`p=3k-J}JE2v?Veb7%xa^iEOm>jK;6 z$&0Y~=6?m%=2|54+t?+$ie;6fN1K zICvcBq7!V*8j4{T(T1>W&tE!wxV7Z}D+BH^n;WxW7&rcRT(t);e%rY5Km5M4W|(V4 z@b%ogn!=sauYWcI;FGa=Y+MgQ0XRamONr?!Uxjn@z=JPgyD#Ff?Fx651NY_pejKs& z)#j`d_eK8;fo8W1;LdMb2u$3=z0v2-AP$lYJGnbDy}1vR2384`8B)nOns+kM)0D@om7- zUA+W3Kl7Dnxm$aS_ol@355xZFRs6zvvVR0H+C)C_y^ zY#+-3rO-Zs#1+1;(c#&xGyh$z_2&hDbcx4!YW7#sI89z3V;e;vUSu4if=baQjv;l@k+=LG)` zFZea%5})KHzQ$dK-%IL#6}s8mTi*Rt1ptu6e={0?E#WE_hFgc*Yo0GU`@5w4;MZ@K z;mt2-d<4*%H9m>Ld4TAN{U_eUA7tw<3g$oXAHO_yScbb~?Xl;-t}`I|i3h&?-B;=O zpGNQm=ydZYnDzfm z!F>EXw^-pm4H?rf@r`W;jc)(<7o1z?o=TLn(+_MnOZF4{r{(&t41QWhu9|;h4y<OZ~Uc*0i4Lm~&HOI|z3ylIMg^W6Aan!tyRLZ6$S z`?i7h*SMY%?h>gS}b4a2Mas*NH@*7hTb@8bFyoZ84CLGy~#GQ z9CmWkU|GaVS#w*LIFXc=i3nK{(Gf@D`h=ccSgg_dbuj&f_~alq^~LByZ-~(Tl!jn( z9rdQu+}#T394*J$tY-2TH|6zAM8^y}?1|>ZUz`W3q#$=VPs$VbvZlsuj@rX*gQ9)? z&c923cGoM5+BfW4+&k31^9qNr9)^{9b{Q1d^e7Sg?3i0>r(}}f-9L_bR_fK15Zg2u zjN~Ay9dzWkyAjRd99Xt3Xzgbi`otMR@~!I^l;8d&*-ja|J=b7yP~i99FWq?k`1BzG ztu6b@EWlb?pv8j+;inX3jvp%6b!gu{=>}@~;#pkqZE~kV>&VDRgHp=kDP-#u+OzAW zf^%0Y0pu-7qiIq%_Ekd)h_6Wct{Hy6UNgvBZ*oJpmw2{|@to%G+Y2WBKKCRSEV0CS zE9h@}qjU5lcG$n7FWx%$^t+Hfc8so|ypWlhvB|#C6N+78d(Bep zs4MXX@y(c9Z)dMGU$Cz#C2{h)M0P)AA^l@`5s}q`fa_-9&jg3KqlRYo>>OHOe3t7& zYka?7oJ^gKw|49MJn~S(V&RXf6L)cst5~D2s|hucS=+7Msg>@9+iw>m_ucxpvOWzI z0Uvk_C}ZD8i~K*W=Lh&B$L;i-Mg%9wz2Gd2hVz}nb7;;%>+q13N6&U2iP@_$H9Z%I z9g@To=N+2E56;1LM7!GGKIKIQ1w~hiss}s>!r;c@5;|3Nk1xU_0P+OiuBNLCrGabk zxb#VHCJ<6fGg4!HTy3a8$DXAvmG({=tH+B*C)G!*uI!=ttvS%j@6retG)p4{DL$H%++4$@HOHmJUvdo*@t6y1bGha!cN5b5I`MX%;CJ$cLe>cfNixmI)mq1B zyMzQ^*$vhFfp`1v?;Se6?4J(;nD=tU;#m6XzkR9I`;X_R2!p6)IhZ~gx!B|LPc+uh zne`dzLP;H>t=o~x-}M3sGV+qyA>kV`mghieuyK{Zu%@=X$*NZ#H6HzKkz6l$!^s!* zIhT;TP>v<79_d{f%P|aA9Sy?4dQ}LV3}1ibqry#B=Z7UgZz0oeglykc zRQ!niO=EC3_QSvqhna2zn7@}uOUCa{dMFopVrh?UUmsSzb1zxlHm{mGrdK`{gWssYBJt zXhY6F-+rgoTknz5XVyaICpA0Y^K~CsUH8MeB_QY@-tpz^6b(9#FR7`WszDnW#LKku zX~2jO@>;UYgw>EwtYL3$*<}CJsvp6vc3fL39q$*nU@y5GSg$ZauGxFGrc18-<39%{ zAr+?(HD+~-O=<=C^A)ziZ0%!4dXxR1AgWHQiA) zy@9T)^83*EJ1rR8yJ#bXEAC6X*-So+c&hAQg}t+l8h~+2hMb*D8y?p>mMTj8yl!(Y z=;Q2O<5K?zO`rD<5i<;Xv%+E*gl*kz>Ln+KNgh`2lNa62dA)5Cpw_VFHV!3(H~7b) z`)$iN+wqby*BX_wVr`^{fEp9ZPrhC68CSN-yOLjN@sdLUGJ-zp>>-`{nLMA7GEAm{+hnDYo~>I41Z+YI4j>83*Wj5?*3O`fZ?>|5YNa~$80cbr+2X zVTApRBvA_*bFrc*}KOysJP4rMtvN;#`aK@wP0zwb;W-c((`v zQcK0dw`%y<6>RfP5Zv}*<3E9Rq`jeJDum5TX3aOtd#Wl@Q!aQtJbLlIkLpTQDHfz7 ziC9MoU_DolAoAzERgpHgs2SV%tfpT=(y2^l9b*Y#%gD4)P_dvyJUPI*i6FP!UVHYG zH<}(-+R4yZoGxu+6xR&iC5)~p-Y%azmD1-LGtfX<^X$TzMRT+m!Y>BQK-OBLWa^L- z$a5+b9+)xOYGRI(+fSdc!dh9cbxD( zLQGQzjdiD~zzD$Ag4sv>{2-FCAKT(h39=pSEtIAXPpZ&}FQQ>nrbCCvVma(EJWr|G z#GW*|!{vJ8OvuKO7YTJG0)~K@UCtkAM=?pt%q0Pg4%*+^ z0Jj(B$?IE#?>ab{XY^ad)KZ?ber3KUVNFLQ%{Fkbu(vjO>b-6Ul*Hbdqq|<5aKUC& zr(sFTRMALM$p3oydOIJBIic&s+VH>zLpw@zF-5^X|>(mi7bv}iC8Qh`~MtDt6onOj~4)RuI z9xOH5wsUV$i4lON(}O=3Y+Z%#9$B`pK7fU(OPZD+26o6|MjOr)#5%7j>mPPIfMEQLyn#K%?X=|Cgya0#r2 zKVG_-kausN0=mWdj9WxqS4qS|OC2TEYx2~TBlr6D8Em&pdc_GlaH`7n5OsRVGuR>= zYlqw>yeM!$y@vu!#RF~BJI6yPv3CT9NQ#x7~e#!QuuaixpQAdkqr5vD3 zYX`I-YpTotND*oF!@dclxK49XMDhBB&Pd8UrP;3|REQXHnJ5(gm;iNC z*YkzG;Qf=pCd#|xR3n1CI!%UD<064ay zLGPunOLz^Sax<4|y(U+%+7fG+!AXDfTXN|QJO_ryG)T=aYFkiPyk{JhRiZ|WmxK(| zX>rozHvECj=XF|e--*Y*;(!Z1s*LcI2385{D$u<-~ttN^El9q#) z^D~{224|`}wyX|z9C+eb-K7h*t_(1# zTbXa~sX;N;R-ej26+ELFW3%YAk|t8s|!*_4>j( z7G7!USGuUgtYp=V`i+X?SyUJ&sf#}D-%G%*UxgNf*mDJy;O3PJev7rMb>g;&nz==> zm;}e1MKKjh0mv4P3Y-~OL1EFKQ+>O!=eo`-EU*s5+mI)Oj}&lTF~CfuSIu68IWtayt*R&fgK z^q-g6tNQuH1>bqoH`57ds5X7VLK6Wc6o-@Sf>vwGJTyCK`EZzPa5t z$a45D!G>JG8Kon9x@aI>1ZTqex;kj!R@OiOgi3kq=W_Qo1(z$f0U zx8q9;YDU>;{r1at^c8`MI_>6dd}DTj9%6Ir!yvoZcsaXt2g)bqF`H?Mnnyb_eEWyQ zf2uRLe}0o>GD0|MkT6B?aoW%G7JlcbyE8UDu8YylXR59+&PKMMH6#u&wQDEN^e|5Kpx(TpSyQAdI;vduCjdV#_#IX$N|qvO&FBA2R%Q04wuh`&Yk zf;)4G2Us%dFU&COV90T~xEU|jD<)GAl>gDfvq?>MY$)LlG29c(kfy0I-XhWw z;oI4@RQNtyh>;t5{_{YV`%UMyXvP}XA)ElL^89tCR>~fwk<(glJ>2}OudJ-3j6Jw| zQiW23MoXAQOS5@*kr?>^v(+oI1~oSbJ~bYIXd%WbpgF~0HVV@>^iH|# zb^tE9(EaiDR__bpRs)l10#PK!s=oU|xWZ ztb;jB(X?0(IwsPkzbHwH|3iAfN|?G7buKq|22<#q@cb{V?tIW{na+x1S)w9qPQ6=t zKJ!XS9zaIA9)71`FeOH`tU1RgxdZ+N^Duy;ww?icxCr9)9Vto(`sp!SI}C2 z3}yp6J{myY6Zp_U;)agc02WG`6llE_Sr~8HW-LS5Nz6xXZ#z{>?l5??%@g=qM ze1Q%gsj$xmd&A7KuO0@S0D$p|c=Sp^dxa}UqbA}`m9;0wPE+CY6F!X>qIej3+lp^P zbE--OS>lbZqFwES-=T8i`K*=2;ciW*9Z_B_ewizi2%8rr_4JjtLFbOdbf_;$ON##7 zdoQ%rz_jD-QJl#$zGLa(+xu!Q;BK^!A0>Os@3vomej?@wf~yg1pn zEEGk-`E$TZ{EJXBGGZh0At`~;h^&(?sgnVTwBqH(eNd(qgZDC}=Fl~4$u!6^)l^+@ zfHiGASKWUF6X21KrlM#^_|yYn;fEs#r(&WwK`aEhuKstWvuqj>mc>{`D-q@SYw;^B zHQCY7+1RDF|Sp z>ZM-HA!md;l^rgx1#u7CKA=lSkxOu<68$aCr_vK5plcQNE=~3AMzVIh-%FcUgfb3I zhGN~iFHj;@1}CEr^)2<2?6!wu?@9cPNjNx>CQM90u$ek>e#jc=TvlG_oplXAyfi+t z=~Jy8Nh>Y@|5OLep3peF=PlTmn0C+Nr7k=2%G6*qb{@v25}5`9&9xJ}Qhi~|-6eHR zwK-RZluPMzSh=h4eVUU=b2MUDfFwsX7!=}tL3zC~p{3xu;!r>@vt8X}KYAy74Pm|F zD))XYS3ZgeCZ^C5u1*9<ALs#+>mnPCXuw&@` z-rzUK(~*hO8cw#@V>M?d{GGfIlT@>pwdS|fmR-O{PL5%^nay&l=PoAShD=JOOwD*9 z*biu)rV^Jhf}s=j0Uly1s@3BASrZ1ZxEy0d{KQfD{=(8XV$FhECu+ZB66?e=WH%cw zLEM^T#(DFxjmf;qv73#Z?ey1|Bna9o*E*gbsW8w!4OhM)ai|&U8`e~aK?Ky-6`0~` zMxm}_9yK=p*nz5u#HY1+006&w`>gI*1nZbby{6V%^X{A=n~oQCb2%wy7XCrO18M&4 zxR#;;cx5v2qm0;iwQm1tb```hwhpQFYP`2MCkKG1;C*pd9-70S+u)A#Q^dAVyO7Iy z5@Y?&z#_XDb|=@?JG7dnJbw5*MkSG!y~&~iVHzv7HwT?(bDys&nrE;ZgL7~^Unfp7NSzXn9f0*?+PpB81n z!AD!`;Hmz-ow5~dZHVt1TKq9-B>a}eQ2x+5ZVgtF?=mzRh_Sh;SU%l1a4SjHf)zG3 zem~dDy2z^2Sg!6IYkUPi%~R5SSpuvh=HGFM4MQ;9g2>&ThQgh@g$W;};dw_CVlZX8 z=bmqGA1pZwuRW&syw5kXnpnF)(RXn6P04PL&(VDrS;uqWR0~ih$QSk|#{=O%3em9@ z4QnK^+x=C`Y8hkkM^YjrX68-9>vS_B{~A|5q~L<7J1xJ>-9*stH>r7KurM~5^fY!J zg$P(7sq<*epE6oJLY_sQhTjt*esn-vVqo&0TKn(d!Y)!#>!rUm3Gz%dn53FEM9Cd* zO0arWLZ@mk`rio0y4D{!+7LaV&}SkF?+~60mn;3~Dj3E#5#?F;LOZIpC3ZVH#3clU zEx`X`B`j(jAku;`VMMIX!I z`-SmC$pDVmdY z$~d{cjr3~b8DJX>y494h(?;$+Cp~>Mk=DC>N9}tIZf*O=@2Shx3?Mu#($u#Bw74kqit6&fwloDBxglfUyQ>;%04TC&QcBX#ZSLVrPF;z8y6A7?1rE#`I0@vv&ait zuO4)i-&DC)CGXcU*tWYTGG^Jqyf>-B$vmyE`iR1Z7F+O%jL;Jl*LEA~h?RApEJOal z>HunOTA(5n58UH(t^HX&v+Dfs9i3*W2b&-c)kL;f+)_HL|aGB*c4g0ZI>IrJ} zhyN&GKf(ktyK!1}??U=GVg^EJRu|3zsL&t?4##h4M#>)bK#xY1wILSXcv~-9+nQ8_ zN)TS%Uns_nO_QeoJ{Li~(eeIPWxlQFxd--l{d<}K_C86(V^!;KAY^+A1lnB)!Ux{% zn^+FMsrk;#OmVY)cum~?OTu}z9+2^LCBGeC)7O_UTcf^G60#43T1kqxuH&4c4d)H+ zH5^YkYjeFcsLB_vE>v+v``xI&JK~o^JWo?R%3Xx?<#Ar9Zu_$48S5Mfg7emA$~8)# zs51Ui{clE9Dbyz07d~a4Kikv-gzHz#xd6@d-6A~WYx--8eejV~#K(Ue76;4XG8NQx z#iFz;2pv&<_YFF3Fh>ZBUt&rmOoJMP9*Z!LO#3|67I-Y?;G|Cm_#CQ`1_CZlfzhnKIDo87 zFpNKIGkorZrsoS;r<$=Ew~BG&jzgof_7Vx0vYai3W%K>#VQl6z*1>_uU$@mgSki6V zlc4O0bRUjcnqqV>$sYFCAXWHK(Rl#GV_GNkGgk`lA)wyf28h?AT zC8`*A>Wrh`A`qY(*@#+=(I^LcIFN~oxot$&1EIF|7X|p+fm#a=w3WNX)`cbE{$4t* z9IyV=H|~zlA^)ZlXyttQ!HKV;%(Y7Bg^y|hx&M%`9d{Z2{MJx@MHvuaRjraWldo8VmqH-vrzy*m#zv)q)B9Zzgofkp)pIjaF$7ip ztBgLtu}0&4AmL4Kq>j0#+SYR(OU0~eu92`)Jl#8m19X4G$4mFwDGro&xu%%v=#Wq4 z>vp&fS^KJ#UbOOU`dmE}5Rr77;Qs<_vwB0~W|UCbd`B+)GpjWks+#t&XJ^mC`FAYJ zD9F8Py5D8?!{07!W}xd@Jq8jcFJswxI6>AO>^aF?mXTi|rTLGhqhORIDb$B+tB_R_ z&ohc@w@Pmfolgl0iM+|@aqhvB{^FLxnY|*>Gf{gLm&;>yRBInd2ImbF>3W=vNy_Y` z6e~<=|LLl3%BQ({DV%XG;PWS@RfM8RxZi^Jq2ct4(Wlj{=0_OtV&eGhiLt84v3Dk- z#QA%I*}BP5+y#75;O|9wK$B+FIq??o&^%}ZpcQBFu~GOh!svks0~yJBa@OiA)?VFiSf@+c*ir|wwtII+ zvsSpj3yB>`pFjy3=D7Q8D5=t#{?Q*)@(*lf=2<{q9+IbA(`S;y={V0gei5Q4nNg$EF{d zE5tLe-yD6Or)9U+A7M=-&YB40aVHAH(6;!lYbuFks)3_+w97}C(&%8w z98s>dX0m=hYqY++%K_?oKByzqCZ)*|ryg^|b)gMqCn2Z9583b9ktc$qR(COlaPaNI z3lo;$*5gif(RIPg4btZNk&S;oXL;>LfMxk0|YvWI2|?ORh_|+%0mU_MJzBzl-my&u@Vou6MX2H%IWg zUydcyHCCe)yB=c%_HsrLG(gS4C;9VEL zQZ2K&Nty#K#_ww)w$FicefL*rx6Gt2j(Ea|$L2bSFlifRie1hzPt*y3OOY8U=9&3d zm2#=VN&fOzHXZslX~)NaREU@QyoFMs*J{m!+XfSsZqdRDXU+Gtb2H&0YU>#ZIr5Gz zKp>lk;fkj}Ojj2StB2n?GHGdZ-5UC^I+P+W{aJ;8h?9)M6yg2x-p+m!(-qMk)pJfX zKYzJX#$&JFoyA1Cm*uB7R1BVtx;StD`O`lx>#yUJG6@!)i$`1i&l=@ z&upOsmvSfWAf_7U!~lcRyCu`XV)$xHvkcuEBIoQcA>|gD)M`xfSv?&E4LLW!W0Qlm z{ZvD@0cimAUtp28H<%_(PMS=Rv5M)^qz2EW0DDYtE``N=)RH`DmXql8eZETto&yr^}m(7_T8@?sY5Y%;91> zI$)pOA4$r8H?O|3W640Kf#4*lVfL;17FA7St#TjvUZ1oQ3+t-aYc}d07pZ>Nl~55D zYNz*n2^>Dwl(C=v?jZpkMgZR*OP}ZB)zS`p2;c1eyB`0Hx8}qms(Pc4Q>}M`7pt97 zq7^Qh^g(eho~PGPvD4qPevW>@dq#ogx8%?+TU}5*-@`s&te#$j2Y554I;|gpM7sAd z;|(KAEMFd!|D?HSsN%XryH@O|KTh1-*Fd7v9Ys6j8|{v=GJr^g=xnub&;|_3yAAUK z728Gq7fEx5p2|7PB;BTZzz{DH!aa;Amd1^~DRb;|!&kA463@vu%iv8oQ>N}=e@BBz zmN%v`r<~kZ(o`dC{9W|2qAwe(4?Prh46ZO#iZ)9IA~CC27(T{x;H+5dgOOTNRbSc| zg6`A4SnL(u;`<_CV2F^dAegS`elvRr$npB$MRsdT#2mteUwP+%9t)c9HO@YwkV6Qu zt>kQx;s=|e2B4%ELD3P^E5u^+^LcpXk#P@XC&dLQhcKogAHkd~Cc>5d@Y`g0KEz78 zCpzRTJDi$D7V`IGruEon1PBrE+$x3n{tz2_{i9#L%9F1ckPAyYhurlg zr1U}e(vOOc$-E=JRAE|CXZO3aYD@8c_^Olg>#*XmZWFtgz%_C(#bvrJE^cW)67cJ? zbUzlA6pqF*#4*UXC?kLyxFKj2(bFeNNnCNa*!t14BROipnE}&Jkx2| zyf|SZ?{lxcqN4l_+xvjKZQ5wNWvR;>MtXekF#@m&I$64RqL=3REAA7^7`A<8aZ3TH znzrQxGoD0FOULJ0v)7{Qo3)P_>S6K0crdd2l`4tdjS+SKSY*SRwqTvWBb0An zR~=82oW@?0IM`Bg*b#!|$<6BPoKN$=)}!Txufh2tZ%8QWJaqQ0mGAYI!0Xs_#M?;N zj`h+tL+M@d)9nca!^w(t&!XJsm4nhj%(i9%v?H<11*?&6N)0;ZQEL)3y5Ccm3#mwB zpKpuFHn`sLNL09m;Dz~>ryp2_xb7?)DL()dnCz*jq(oR4){@wXUj3BNXHH;v@rhe8 z0GMFzxN~lPzLe*&h`2o^`!W4FO>P})PQOQCDYxZZBLG=GIB;fJuO4q3XvxA~^fI=s z#Bb?V*SNUWdcn271FUxFDXuLp5{52XLavwe`+GHc1w4^oe$9%?S3vJ{?D#3Mx@#4* zWj_Fmu($cm$bO6Tw^+b#%LGC1FL1yOJm>Z^TNO8CvhgObj7{Bz4M-j+L}<0=!o#UN zFi>-pol;sTDDSw$+(9N62riP}3h-poj26UVwDACbswyShZ#A#GSO;g$%_jQWerB>( zjyxr&6*OPw10{wxHC^7TdSQuNPYG*-kF3Qjp=6C8ME*68zQrLFRH%(H+wDq=CBPf0 zugoZQRriXu>bO`6Y&@cemoijSZike24{CpohF?)}>6!8i!9*QNiPD%!a{>3sv}6`c zpvlW>J>}D~JfA!@>BVyZz^8RG`pRcrAv}QF=>bqd)jiJedYbS7Il2(L7-^AdDzc2S5iwZIY6nzlZup8B_nx1mnOMQ7xPck)zG6E@W zlgWo~xD8S7eA{zU+~Ox_kt_6phJ25dpg3+KBX0YWKKmtV6PLX;Le!0zok{ZuAWVclruwaWBe!TzjkO zv_RV5A!h01s<{fv$hyYofQ75WBxXzSt2)Daa>S7(!Lzqsu%W$s`a;x3P&31Y(wIqz zfL+mPO{FJ0_ZZ0q&q?+f2bNVndAC#WaB>iz3VJ<#r*H0pXMMNN7|bxlAgi%ux-R+oHCR zb--B9G{;TIY>tlRT$H`XYB+X~WG7N9&9LFeA@86Sj8w-PXbF$F@I8)Z*if;tCJ90# zV(xj<;$-bILYGeWTH~AL9fRtlGfPgBG+}@TYx2hLqs~fj5%T)Po4}yqkIa|rfA%1w zK`I=#y{;^=tITDU`Or-Ao33GSqg2 z-+3)&CBrY}d{MWno`M~iN=OGXee^~tQ9Zc&q3Ntid`c8(IZGhyo}eAQP(T5!{jLVR zmX_~#s0%jo&{Rl2#j`pvyeY5OSWR3@Dh5CCiO7E7a&ilm>x_X!++SUJXdwa7Mj~u| zZWpAFo}X7e!?nxNXl6~^Df!7Y0OM#e2k@G0;fLg`Qh`KWxqixgB)a;Pwa&__lrOl;mk?^nG*Qhlfke%O8`1n&uymF1+IRC1fze%X7klk-%0T= zhhM3cE=8#y85M3ncb=ZF_k;H8CL3}_{v$wrZv zfXndD`iX+}Gg#+JYh3xg?zgL%h*XO}TXEoY4IY|?0LYxXezWUtW}qi&Z`hqf&ND^c zsFe9mHzo#T69*+NAbfLDu2+XmeE{+_GSRY5tjNfnqPH%V(NGNQm{$>s&Cp7sewf^; ztDdZfm%w4;T%aTy+(4Y-^UF@D@=)VOh)C&y3K?ovO`#3aMUEPDEumP+*nSRWR<5{^{z89saBOIh)7tD4aatJAS)FvXo%g*nXa_h z35Z!~CWx~(T(63fA)%VZAa=D0EKnL9-0z4f|9n+HJ1F}#y0ydUEr z>0}DJ5KKfcm#NvkMj9G0gcdR~*Ns1<*OT)(ML;2xpf*|?5H#E?r8z)48%ecKY^m_M zqu7-fVbIKC0ZKWd({I{8!6tcvtuy^HQqiasHhQdAvYdL0sj2cwOD=4_zA3nV-EHdN z(8RNp5@QnbbWDRWcp&&8xfVKzVW^|FlZhO*!a?F^-M!J!3RC2&cdI8XEgrD%5eMQu z-?yx{MpuE&C;W}Uq!}fvl={b90+G3N#=rWX&Z+>k9Svt(ReIIG8HjCiAGYlu<1|8~ zoQN`YsI_X&LBL7jknynW2pGBjf_Hz1K!u9-TaTBC#pj(QSglytOAjOqHWve=`3}k2 zR<_YhNK|0(a0%9wsWFhBn93_X%PS~*mB5+}nWLzA7M7H_>69-f;W_9?K0|hzUo=*f)1K!#q`ny(@pi%pATkUIq%;TJl&U&tvk

J5syZQ*OjAqz9JH`8}xK*SxQ&VC8_qpW1J&Z*g*9%!cduv}5C}nq%yk@GF#I zpsO#n#D^W-r6-T`Un=7oLcCD0M|fGYrE9d#pWaP2rNlroA^QQ6T%xwp>o7C;AcFrO z=_->OTNtqQ?>su%J1ef=aTaRZ#|o=^C1ZzDxAAKx_H@>aBsw7Th*7?`s2gYsqIiE0 zMB4$<6i9i4H?YwYkfn2tegPhi-FlC+=_;w12-SeBrP%2!jjY$y>&Y`H$*XDpA3_AF zH%^Y|#6U?qp3lFSP!L3Pzgh;MTW1uJ^-=z&5(_%#gA}f=o!brPX&hou zM`51qz|bq7616~MCrunqQP<@THW3qnJo3!y0-h;m{3*)2z(6PhZ_%5hVPli#i3whL zypw25N{Yfe2i{eZ17Jw;u`${8hl^ z0zbzobOUn=lf#h8PG9LUA9oFIs)v(-0f@*{B#dsHJ}_Q%@a4_Q@2VDO{mkQ2sl-6NxZByue2uWuNqGnbwR32g)u@T z=#}Bs7;1AV&QRHd17X{zl4moMXym^cCm+`o){MQ*?@5G}vW-?g``;4s!@sG`^8Pgl~dEBw~eQ*PqR2C2s!+x$#BdcZ9S##oGq zW9Z5f5hBiFCV&k4^j>vWSKkU;o1Sw8VrEEh@n@xXupiKDZv%I78&o2J17rXRr{MJ> z1M1X2MYFI7Qj!l4z?)f`81A-sev#fTU7jPkZIxRIrbpOuz;QVicHUZ08UA|~DuXxWfiywA;Vq;prT<;p&8NYsq9@Y} zwI!Ps_PM_r0dReh$=UcjRGHx`Zvz{&Ngnif(`W;H+gM=tS^X;OHC7R{yxp=- zw~&Pqs~cEYnB{@dX0uk54RvSV%j5;P!W`}sHUk| zY5hf|Gm)C!@Jb;<%i6>U!1M_W_qSOToIW;0e6r4OBH^Hu5_EU2JX>l^mUI#TYFHu? z8W^Z_)>s|6qy0=>d(bHIm5E>ap{; zk*3SE0f394Y!7i2S*Q2U$%qc2I-iIA$}zuAj_Bs4YdHIvS9ri2;zw$sCQe=8oZfAr zSEhl9>g-O_RB=`2Vr?`c?|cqYNOdyor%O6Li!9R$BdvY(o!@hzM6ek5!GN@4pfAL95v8J--i5`|y}U-{exkNQGbn>bmQGNO47pXDxT zkt1-OFB~43{t^fQzWU?R*A{EQH`kz#LAOZA3y_vd^$%QjgwF~RpAe-+S@+?xTM(LS z-g8Ty5a(p|z<11bPZ&%ORn4UVyxD%`$F_W7w!P%`yX}wWn(C9w1)EIuRf{cNU+DrY zZTs$5Pv=4i>2V&Y=@#{wJ(8X;t4ACPFWk+H?9F)mWTg&(e&+JRf}nK^%W7l@@0TP- zhQ!vlTo~auf#H4#x{+Z4X!m=6ss6jJL(tPlzXNNL0s2kG8YN@n)pvJp0SNro(UYZn zxy-_B=E_7w&j5;+z53}g->S~hZ>6@k?|OOTlI5nM@3RyHBH05^%U$=~llk;DcJzH5 z*PuXKdR?xm$wf}8&-c~7W%#Gsw^#u8%M78duf9*kGKBm36V(P> z0LZ1PNA5r8Y%XO0btJx5DERtUZF0x|*m&&qGH|<<273dmu(2|9S4;6`X<#E^W-Fcq8AH7$;y#D*te)_ddEAZNbJ7sH63*av=MLhbs zVg*;4ferb-xL-c}7{F^=fD~RT=qLEaLSR{3n)*J>FCQ+^c3k;UA8V6X@7iaH;I3CL z%Jutttx9ew`_Di2eFoeyQMLkeZuoTS@K04q+GLM^sj2q;+5c|87mNU2cO9UzPHtlD zZAjPuFxqcxP~^>B?9`DR|B?%!a5iuKJ@mGox!g3kCi8K$|HucEtqqoqAHK`&mk*l- z=rxMFesX~W-1U3RK7HKjo3uXW-?bZ{*KpIjfpeq>$tl51{<9mi8aC;F9>6< zs9z#-``)W9KQY;)3$K}P@%j$1`uhD3srWvy*G4<~4YsbTMt*4i_adx`UF(kkf{Ye_ z6poeLP#iq05Oj4IAWZiF$daR#d8RhL#i}}LHWzO*|6&e{>pWjvRjJyelv;0+eD1b` zdllr{I&B<;S;E%0-{!#`O(Pu`bA#qbn+gzb=+A_FdR}7*axtB&j#pO_M9jlJ$$AD^ z+X}9koY{F(>DN6+Uv6-}9Yr-SLe>FVAV$>xI{gzvGg)&j44Van7_^Q8;5FBFdSUgA z1+!@5^!nQy^k_SduTK5#xL?J!pI;3@PxQ@Ini?AuVZ;!!D@NH!Wp0}bzz(;}hM16M zGV#gOBRp83JA}RtY9?Oqct3P3Wy?y?{QJz_l(En8W>H%2I+gHZTI!P+V_l3Wb$J6`0YodqE(aa~_{l+B zE}4Z0Wgd*@Ht$&4vG^Z_$dbdI97p5a)-OwtvAA{Ot8UXj@qi&*lg;%bx%ZDWiR&zO zaS1Tfm#RrE1L%|PK*n~+Tpw1q96g7_Gqg8gB1&j-pU==iGRxOv-!=Ih^bfZj@3ZT_LyN5{oU^&kx+Eg#Jc}M_0G81Xm+`kd0?Ayao86C&HLIRmy1%RW z?+Rnq9Vn!-?C#(6y+QlNrIE3Fs{?SPk;H1}v*&;Sh!58@t8o?dAM*_k0uT)3`L0v^ zn4%so$s5|Gg{Hd%Es`)ROY>S1b{KY~68;5%e?F8__>xO{s`mi6-!4EQ%#Akyspud8 z`*^>ww|u(2XB)s67%)y%mfAE@U~n0T-*#=32K%nG`eV5^*mgWfPWt|jz2OcPu=XBr z+nK{95Av;oI4ld4N9E}#&&uwX+}wk9=L$VDD&TT9-i}Fko&#KY>_VX+0N66ny1w$H zSg)-Q6R~vCAU+Gge_{P=a85|D4Kk6`@qD zmYM8*`;@(skj%_vC3{}CrOb%zQ9_xS*QOL@U3-QiTswPSe&>zLGP4q6=wBTCCdN>;UWxm(KrQF_@a8=`zG&T42(Z zc1&~RC<}H&5T5Rbv7a{`I7p$7K8D2phdd_}?w2#>c(LcMS%AudIVREJVI4VMZz(~S z2w{-F_d0*v2^`CVmKLW6p`8SJXMP9{vP&?-d?ivWYN>MIx*-Cp>yce^eKtFoP2(k< z+s{|cF99U%66AJ^S=A>cPBbn){-r)!)lYgHUlMa2R=3lE)5WZx9p^UBj@yhF_*ab6 zKJ@UIaIRUp%}@iB>z9!d2nG7Mblp*+f%0y`c$`(cjMh^i{ovgZ^x?c?LpEJHtAUnK zHg!S@vg2$I`|-vEMOmmKguQ(`NKNj#lipLjoB*j0`KYYh56}7-yR-LNe0zO4IC1Bm z!l(#7ZFw5N<~xCEQbpaC2)s>gignn4jGje+yHT}|RNQy285TJ8wRElpPn65m_`i(+ zi3oN*=BTVO-p>APWS5mjajF(n2Sm%YCTJ{i&8|$R0g4xHrCsc3O}Kr<1LU9e`WD;* zs6%j9bG;Z;Qe>E>jHh0LTJov;W8skvPU1UvH~Y-1%3fqXL;MO0@SunBQnfdJsmhuRPr1 zZ8h2jeVRiN+!=;sb>(y>fRNdrUq7U|Hv12~W$b>==hq&+Hq~l6J=XC#6D6vl5j3$j zfGm;me<}j%TiARu)edf@@B)GE9hIzg6?E2`9e2tue17Fpw4Ca^e%bD_3@X7W%!}RA z0qXwF-NY1i%qkQxTGVGgQCX$!ENnb`?hdGsi@1N_=|(TE?e%S(h`>UEp$Zs=e4p-N zIj5hLbfe1F`LxoN#pwo+kQB5(7Yf6qcUr4h_nw0bFKMvqqzhwuTg7BS(U{t~>ktqC zZoyXO*1aXgBW|_YsHzdhXN$pf$9c|pqK=bG!02)dcn`5i|-sHkF{wIe7(G3+0vhSvh z-P#kdvNYloe4tkIU*AD24mW0YNh|>4&3n z97rzB5;DT69e_|EzJt}JST0XiL)ZrFDbi-NvBK3NU`KQ#56mFFG?xcW8^9faD&z~X z#I@)SR2w%Ciiz@BQjWZiu&uRk1fGo;gqw_ASX`ZjubFlaww7RmTuSOeEM`gdGD^P z6&(HAlVE5CXBkObYD;4;J}<`Si&;!-Ri)3^X+O>!CEbUkj0l{dOUmwhl-{qZ@%45c zY!~I~Igi;Wojh?gxB`m>oDrQTXa-1CDC#c^THo(Yd#3U1r!zC5WP5j!WQQA#7KhYt zea%I3@T)*s826TVZhZL9Ghxg;#NV#-pPp{;H=>wbcjb=kf~PMHu(xY&DdRWgm? zAUeVFX9L`(hmNxQEdoyCf($YC2T#!cb^t^-$o$Vw7=P@x(+d3u9)uN5QnW3^VO?yT zr|?~MU<9~?g&dE6M@XO%5Z%n+#mH`|K1lf>iqGp-{|^JyRYBCAqBd~YdRK5BLD!}6kV#wyb%$A!UflP)0T9{{p9FV@6brD% z{u$3_{&h7-t!>*y1z^~(ro0Q&+j9??X)oKj^qwQ6hi_T+ADlj*8s`t z3JAP+bj$#f`kw>Lh(IKph@#@$*y;Dhgqk}Gn*YZD2vHV5GE}$V-fflw7X_OBJMK>Y zZGf5C17~3KvqE=vx&`mq2{gBg!TlQzV*DUJVdP7+KhpUBFw<<%qDS1QK+boOc?MCD7cNPycW1u`z?CTu6bs?LCZT%J&uon!7XP{%r;@ z0dR>B+$ZXZa|lC3k=3o&&|jCN4W|DmmEbC)>jU)XjYs>o3n6c;JlWs<#qajZ6>4p% zQ)pUVC`zcg6EXYm^+E&3tk*p&<3rT}z5=&Unp-a2zlj4b&(63)%)LhEx%p$X2_EM6 z?6G;Bb?qd0I4&;;f7{5^Vep;)%;*_rT zb?<-{p?&pXw;)84)jj=12)d8hJhOLV-ZshrAKr92keTgEvlJ-A|BsAs9Gl0=F=am8I zU=!@_hASdq?Y}Y6*Fi;b_I`5;@^wbLX^m&RVVkjK?|Qy6ccNz`fc0XHv^R_Spt`14huI z4I}yANR7yVXf+Z^K?%_+`I)=*|3K=PpMX}fZVw-0)et(uUG-1jzqH<}+A3OnyY-Me zj1g~F(er;+|1vQa_%`nt$akNhuc^U)7pDObWU#*uYM--s@oRs-Ej#IdJ{{~YS&!x` zAPq65__zKSeE@hCP+h=C_Z75G8yYY0J^D$NjATGhguNZvI#d?RD=%p{+j)p4ENm&xJ7z=Z5dp*pys!gp>R-s?Tz&<~xb!XQamEbO_pSFg(b{x-Y=MEvJh!@uMDCS#sclSD90u%GTXVAD0T7xvD zd>d!c-L?hpT$9;pAY3Su-RT7r6QpSWXqo-MwjkZn*u7$4tf)D?Ur%u1sJ4k8i- z?k$-QJ!+p%m|%5a7Fiu_pfR`#<|o3K@aABJWwaeNH$z$`8gviDZF~Xk5snK3Zf!4u z<{``*H@DX$VcU(%5Dmm;eD`kV>#oe1Odo#olT&ndG-D>z(Jx-#xGUT(=Z;gp<>%h4 z)w5FX?|UTK4u-KNT%n#jN|!Gh3B*i3>5Cl zI@XdjYYB&EFZF{NL}rdFlBC`YKvIQ-HK>)FH76K9SVg~;Z#?{B{!7(}hhlXfb6Ia@ zEb@!KXPdULfn34!CwzzB(s=b<$;8+l7EI3^jPVZ=E%p~ti{y{9k&6$aPsbTy@t&cJ>rMHK2k5cy=_I!w? z_DvG>ed0s2Vch-+H@}Mz#>;OyO1yowzrnm;2w9grO2Z}PWHd-aWq`|`AxEcN7iUi>#E)?XW6;IPFJV;rUc2Jd%v=8H;?lPrgNV z_`W;5q&aI2ay1cJb5TA-Ygs zI?)S7&OZaQD!w13&GGrvo~dE{g6>;WptgXSi^rJr@`r(eTEBZzM){2~KTN*4BO=92 z*lr!MxGNKGagk{(K+Af@{jh4Mvi04A@#d!43C-s39qqbk_aCvePZnCH52un?)5xj4 z-aYz|FZPQ0=jdjb^FkH#0M%Y8{gyUr7p=TDto zUw+*h!M>T2=i-~%b;cQQ&nEp4WW?NtoJH|G7aZp*DTWkf2Ml;<*A6Ag{GzGPTDsbq z^s-vP{{U?fov4jV@{-xR;4-J~g)vB2rAoqct?62eA4(?B`*yNx37H^m6mnL}K4~@h zW$<#GymVGfn-wsUlACtKa$da#d9!Wn1Z|#G+*pN#c}J=|Q<$4u^~<4r>4F3uxi-$o zNUdqlX9e*+27LkoLTQ4hkxQSP(r?iFSy9C07q`)cb}i2Xn%TmmK*_Pm&VK!sl@PY6 ztE0`cIx~&+OW9>--$Wa_>bwMm7Nae>;^xEQ*Ul`?;8tXfI*Byz9`Fl=(~!(hbFE3F zU;XGXGoO%*QOsEFi_(hHns_i8@$iYa5BtfNpfU{yzUGTa>NzWmZ}VveeVtC<>z)iY z(>Y*%JsWC0W+zjEN~K0AIFvhx2{>hDP40VW8a}w3M$OCV$JHSM|MiyJu{368s6IR) z>D*Wtdv$N_dFuk^PEnJefrYNKKqYHMP+}-&B~@oBD|}H=sNS}O46CbJfx%6}72@Gf zPme3R9I34u?Ja)%**jbhk~nQ5^8A) zA_&b=9EfM#&~IQuXe9pLCG(&7+xTQ13E`u49_Xid%2X4Q&cm=$)gUm`o~Vw9O%;-v zSxhrLIF-r}YHe8Q!j}|DQ-cFf5~W+76up3PSvm5q+pP3+ zE=#2CZN`A;5)q5=nJ39>ALPfJoxVN?xv?JhC%BUjisV?HbdB2i~w)}#g ziA?W&Lt*9`d*Ldw53o(4#hkpS$S+pPRGlXu?%Yk`b=@ppVKeH=Bjda zbf^nd1dSGcaqIYt_Z)PDjjr{_#eQjLFDQbrt4JpE-Nhq_@+Jfnmc<63vOTJ@iO(x+_d9 zl3uS5ebr>RED-RrC(I}I?Zl{HIlXkhr%%b?o1U(to$g8f+%M!f%&wA|(4Fsc`y6W6DO2NROYF_yt-d%9L_w%etEs)|-LgmJa0pW;RjRhO0sdmF4w4TI(-nrok&EoStv_PrN z(F!y7q-u@6?247%yRW}lIkVVvnVcw7=VYdeHoccgdpf;AE9OgtM+1^lI5etqE><)^ zf8-1?WuGsv78^Z%kx9pGU5y9RsN?dA(Gkm1OCJj>8pJZ3X^B4gH+43ZT{(n&qnz|nXC4u3~o2d z4>fS=-#3$d=BB?wk4m+!e@z9t6!0C14%F5;hc_SSPn{r=L>2)rLWkOPe3NW69ux^% z&9Sj?8{aQ!9*{=OCd%V9O`geDF}YZSil1hz9nD+RJ3c7JRq>X-IqUMngMB$zEMTd; zEk$`!{PEi)wuuwzw>^!2PMyhY7|d`c9qh?6(~fJ`ekd6)mBGQh8sIar^0={Kwmtvt z!RWUvl_kMQS0gW8wvjo-+IO*hvIWMdJ5}j{snzAb+N-}eTGM|;dMzE3RFIw&ch@W7 z8u{flDBK~M3EBsnj9A+_9oPSKa#l(2NdoMYm;^$!%+EkImhdG)Qh@C+3)?zMApGdMsS^^JA2q%Lt|aCB>q9Imw9-y_OD_a~hf|JmJ%quXGxD)E-fBJ91JmCj(QF zIG08vSbS;vmn+Nh1pSN=i3jMKs(}Qla#u;aE~yaT7twqU2BI1^W@+Zn9*u_d=b;Cu zr|D#k*+Rn3HA)E6M@?Ugdap?{G3*rmA-16^iB&XY*8cW@LtlgAkS8Fr@qkE}sMtih z4APQ5{dQucV=jL#u&YBO)6sGqkyg%vZgZF+j5QtWk+?PLB1gkzYV~k5U-{bns9=xA zuN%ZAuRlmL@+ok}+NGEDm%bX}DLYGEFjSrF$`q*stk6&~1ot2sBE3A)wEuydPU9IUgo>G?NHGeL8@ot|>K{o?XOWbRdb9BW;-_yOjceia4i>)#M^C0>${s8CUDH-Lk*8EVKFSc)`Fbp2P&AC;gIGXLpEYT^ zM6avWig_6yD{l(UAp{-ZzTHueU?~_JNmgx3#AV%gg;xSt(c7#ehOB-xs0!4NUip6%U@{jER*K7_OY0j(C4wY znb75emB0bJ&Xj+gsDM-XeiNnPZM!ZVojE`_}w6?apr5Gs9n`imcJW&?6gc-AuB zUi?5I>)FMgl634YyuiW8)3nKsv^9Ago|YIIlGG_NH5M0oIi;rip`;2~SnL`@eeQjW z9IG|Y&+mSD8RrNd#key+l+56VtMlmF*xg+{reDG~{S{Q;*H#MRry*+PN)lxhpPt|d z3F}>ahLI9XTP>8(QlhIZzo)K}VGSzH_I;ikpgzRLTVO77yR?+t&VRvGdcdWuA?ML> zFN2sie^Hy9ko^xTZ`8*}EupB`hx;>@kB$uAU;St@R8n>P%^I7|bCvK(?km4`W>;-j zdIN{$q*b`y(wT=FM`767QPK;WCu(}qfKTm zPUDP2fdV80{izhQ#vE%C8IO64vqx2RVznDAWRn6{Gg-+@HRhspDCWT?2+Sti{e_2J_MhfYTMp5*0py+30#v@+S5Kz(+?UzGpu3z?BgmCPYk=2l((vcvmS zYMtI+?ltFjxFg`uq0t9w$F=b&A+S;WZ|=h61K#nF;At(;TxNivmb7TQA7)>dYH zcn`g5AQz~?zQSA?Nh73pKdwuHIx8~scJm^MSSNpN2yK4D<>vCAquPg3!-z26oEj}f zZr-Nh2y-qzHNRJh1>BjnqxDuUO3lXRutdjSuP^fjKU3G_ys}ULOh?a&0^5AO-qfK0 zBB3~Gbyur*lkFnxIcmt&_SZS>u{vTddP{w8x*90Cl8}d@BkX9o85RK$iLf|c_m5zc z)ZP<2;1pOp;U`G|*^s_fxY%WStur|%$qO^y?{z(}Ih)0Ig7=O?dMKUN!%uCMUyEE~ z^X`^+48O{$Dbv*I%)kuBSvNjtx!O!gLiOT_+L=8iZ%TQ5u_k-vs)6jVK} z`!XkAk8<5__;O)re_xKgnqmi!tJBN?1gDV8Z+37+@Q~dj!;1XIp&Km*d}_tFJpLVj zM^Eeg7z)$w?&~SqH~-B$u{kqaG(*osjBH%$wcgF%my zyJQcLH2mBcgOwvDYo}wU=VZgw;^7<`&)xFwNGwgQR5U)zoKS?UsavuT<-uDovSU$1 zD$hQp>u3S8%c!;5XNlMwc6$HRlAjxU+tZ=n%oPpUKSB5pkf7t0Xv7$$BT}14m2R5G z^_n>pq8cmOsz=Zob7#88@L*EG5CurFT`2}ml~lPOo=C2qw5NIv{JrkoC3J*GqY~GI z!n|sc@oRat%E#?RjG?7rel=rwyNyqj*1HdM5 zL?3MrfdpM_lot_!ySQ+XU|ge^pMqP8@a^1-AFCJjjJ#bDHED zdQOE*m`6EYjLiG~ZpPztW@JtCB) z6BREEj&Bn3(~nvipU77i#oJu;b)vnYbI$0J82m@0iEaOb$BoQdHK{TZ(U)SO z8F^N3wcbUk2pLtF+rPIRbOc7l!nS94HL=}A$G@vnLWJ_!Hy>ZV#1fIr^S-v+NfXil z?IiK*V2Ttq^2(B@e38N^P?%dj-fpdF)|zTh#VuSUx-9pJiv|T8pl;@eA&A_!X<8*& zd!v^Vm!6`okL7({HT95}O8Y9qL|tL6)MP)OZ*o}hoAtHM>DhwMT#bw@FOwUp$^rhN zq$=<}%yW>0E~r?@BE0a^p~mJKdS^S6dTqe@fmBLM}B+)lQRru51W-g$n2!|-WjNYW7 z;IF$5CEJD#xY7#gl~ulyx|KZIcIVu$iZkY!uoC#sauWa%P4&UGFY&RNTGS%F#K+{i zX36v!-_5C9IY*w5oRK=SQ!Nn@0p`AA4;UXt`zae6gXfkN|7 zKW|vt4F;3Y2J`mlO1V|83>Y_-BpTt@vZ!U|T6~T0G+|PgY;YXAz#0ClLel(Yx7hs` zHXZ01W!u*?hgJ4Lr*c{`z1WV%#t&C2;zb0dQj70PS5cDmewz2|cr!ja;ta?rdg*TC zOnvgFLlrEhQ4jg;&1Kps1}(o0tB=|niRi&P*W`qg-jsi`5@#zD)2^63 z?--7Ct>&g9YEkNbE}}mvEa_@a715EZfst#?$y9VN9VVc`ntZG^+PFFWD`pI?;w!Qv zxW(`oDHMVS06i|2-~@Vh7ePOV8;$!e1aMAA?(^!esTnFb7$pduIg@6P;`kUrYO2hN50!`4Lp2U_S#S2?rzLIrZ9$7q5<`H^DO3)(!f#zVr-H(Ft^DHC7^;ty zPCLmfx_+TC{p;(6;gfdn!}gY-qLK<;a#U)_pSXBFlFwp!rX?9gd4wwR2(_T7tHsRm zp|y-bW>6g*((Y#vVx416iVL5)G`UwBLQ)#Q^j~WG&#pzVK7q_?F`q?emhDJ&L#A4) zRIth!);0b174l3w%0bD1HIj@u056147m8}Y^_q-6|HvQF;cz-D(k7@sb)5Q;v{>|e zea}Y|Qsv-=1pqabc_lTPiN{{D>~GPFbt)eSv0A(W;H2n>4#yLtgCv4;;fuYMuNJ1R z&L;oVFtp=*Xw77$cG8fVi}bYAUG`t~WREBGdQ+Yb=9NyDwR%Qf;M+V$Hac z@ZKNO55O7EIMev{)V_zk_rhLu#X4(5hZla_0HthHVL~_%EMyhHrLM}+BX2u${&uL9 zf}O`GfA38+s4nyHO%sYWS2NIKZclAshKU`{nqXgYA$hK7+Dj#HZ5u_MY zq`7Z~6u@Eu7tgyokMb@if3s?kmmREN=IA7$dAW{)JOBFP0=Mo?9hw&IC@ysw=4MjD!(8#DSOHcQeWjZht6*}yLUvl#R zc!^lhqKZ(V^(P5O2Iq)l&-$CCYXN5WuB%{>%bLFCSa_^?pp=`h@hO*La35mxr7r!# zDw~-buj^T7qvP4N2K2UD6&g#239~kD>epQW7@Yh>9sR@O)+NVDg?Bkq88GX+<5L17 zBaedGZ;Elw|KQHFm1qfh%wwcRE28_5oy0`#G=M;7GF%9zV6)*ucCZ|s&(e3$YdMbFO>JxH0sjw2b&(x94dD&W&M}ExjpcA zGRbVdwsx4A%&LY-;ElDihbqqpN;zO^A0#wTB}rdQb-u6CAIudlRqc26TjH<_SAYph z3*c^@$<8d&#fyj*&`Tmpco|`19I5W1?-C7a$>e9;Z9%s*cBC*kE@)*=$oeFIoG-Jc zlhLUeH!L_Nl&Ab{9sRn)_(M6$15Zu+ie z08jZeD*B|1ust(3i|2A)ibtSAP1FymH|*UapwHvS!8Y}ITl5Lk7f!AT`8A7Q;)vHA zP#fZz{fP33@m12I6YI_dESP|MEA9$i0eNeaHI#zjE>|8_h;!4DoDQ>n*>lo9V_d;I z)S^dh@D=&j%nQqunMtcIE51YMA1@l};%hOe%LRu|`qxr{ThcpHRn^IjYV4?E>Wu!J zBN>XTSEq(n8!hFP*wt66nK=sqB(<2%zj|lHEH~Syw~(K%Kba65kXmyJ_(#M#$oof+ zbd=}8wFUWTg+{t<7Jv)dmthrgY48Ji-!qIXCCdA(Ne9@P0%NgjRDHcIOila?&_x(g z=0qAz5}gL;lbe#A9rpq5u*lQ5l4}ttb-?Yjw-CVcav6yDYkkP13$q8)EX2qFL^x4z z^NGto4m8B!q@J$IFkQJ@@13vpX)@O+@PvMsgh~*lA*PUd+IeDh|MbYCX8(2`5`a~C zw#OwEB`Q?$>F?{8`gM3(&t;+}S>MG!hR#QiM(N`P&?E&2bi-PWD^rohK-c1IY;t;Q|-4GtDr4TymLM`V3|94h2r`v=)v1Zg8eCFlo@JFP4N9YpmdCR+^# ztXO3Lm}4||On7EJx%^A8&j{ z)MDU;{MdWFr409UY|uxGOw5J2(Q~uuaL$9H%Y(v!o^L*<@7)&<-R!YP=2|cP0(ZL8 z`}}0~CgOXM@&Q*xv~zl~52*8!;gzdc^aJ_NN}z_n`vSAnXk=lGiPpY;zttMo{;| z+ZQ86((<*K@GBOTAl#w`057vYMAKksuNcgSY&VZ?oe9D1L#M9I4SshZ?)nE^#opnNkIZpS3*d4Go7DSWO|&OYg9D+ zRy-LEz?VT(z@wRzbd7`(`EHS}i;jMUn$an6(c2X>=}O`8V;aYzgZcOpEIAx5x!$S0 za=~bFtS1Z<*W3uK_?HBUk8?mCJDuBhgwL&KSHh6QpO{=~YS@TAb#+V%qRo`1D`z4J z72`k@K=A5&2i35iuc4}Ig*FOK6{E`yX_O+FMn`B=tgGv- zgGMw6jT%?u(|*78^NkN6B6V1D;fv>)p{i+mMGsUiV6_#fhUI0oj6Iu9pk50)Ig}pXRk8FbmX|kY zk42uK|2_win6;!U>kcU5(!r-&5ymk>1Yy@J-NM4dU%=O&+swgm)j74M!L=OD^_f2E zs~D~~lgu2mo^j9t0(Ow9AXw!;C(wMh zKKCpTDB9&)wiQ;(ijS3KCy8|xwY5kz1^zyzlZX||Y8R!j=L9=1%e&6R(Bl&f1J+1Q zc#RWkfhcCtg{l{!ZzCAkK7;CShf`QE|Fpf%Q>X1^YzQGXjWS%dfqbRic#cc^h-4cKjeY~`x2zaNeZ8@A zIW&Jx5psHP*0vtlIC>MzvO*Nw5^LiJupZKjGWa9nr%>u9Mfa`Gyok&GxZMQ-<^!AU z@ot98ws2>HyBK{u$sMBtC3Ol<(D?kwUz$5#=MF;=bA!?fIV?BMWo0$b&AeRQQcz0| zz?hzF@GGjA)9sY_7uSXBCJLW@i`jt$WP{b;J=_U`k|beFxMSZm#+ScfDE4kv$5v0) zGzi3qiJXbiSzm3PBtZwpCuD6bgk$Lo`Y<;0DKuKyYd5p ze0cd!>;4u@mOhox_9$$8?2bDh=>o&h`zC6s_-sPa5?TR^6dMU_zIgw-zfpMiqx6o(>1hN?0K^I z`nn-D{i{wLZ)}S|!$A3_PQ2czV-oMKg!RIJcu?TW`{Q*rxt(`pkXvS6FJ1N?pg}+x z!O|#h_FEQ@T7HaQ=zQPm+g7?Y-T{zfzIQ`dXdyfQyy7xesp%ZOxLGSE21)eu8N2+L zWVXy-a?53N*r$_@-pl1Xm^_8loNKrA?LF@D0nwfQ$+Nyku&>_ad|=IO zPJ_yLTBQx!3AO7R3+0FoQRDkBG&J4dY8ePrl@54kqPNiw53)A%2YAfKH zHf;Fp<%$qS$9REeIocEZp*jS~3^D7dN=pK4rRF%ipqcvN&p{{V;VtrP4-YH{s3E8D zWwY)BZaQiV>Oj`n%Y4mL_pD|7<&H`7*!m`J*)C8%Y?ANRN{Z^dkZF65T|jheUyYRs z4n06_!b$L7o9lq#&%NT_(zvJUs0qE-P4d!fm~!P>+Pe>JURTirX0ex#HE%6>MB-FH zRBV&HOYIZVXDIo09s3I$?qgB&Kwk;yGV?Gh7=I~;)}489%Ns6 z9ZdqQ8W(PCtKybxF(G3Dt4B=R#OL@lSCN{M@M<36c0lF)Q!!h2xEqS#EtJIxViQxi zEpQeI5j4hAmU}fSd;mit-N<#c|y;UOueoj_Na`Kc81Bk z3(G9*{aClkNeYJCS~#E>6L=FNZ3U1FA$$oLtVM(rm?#_R1#Wed$_GyaQUsTteTwL4 zP;#y~5GVmVwLU-$HNo9AUr$W4T{y<)?4)D1%od;JOTsudUxHA8@hiv91k_xrv_(DGo zYHk8}>kN&sJ@tM4+yHu!6V*i`8@5OgV^0JXd;qUJpAJ(#b5xMbA|sNlf|+}hnlKOi zkyTw~nMuBz+ShYl1mn0n8BganF!3l1WS%h7mgUeqK zCsU|w+4jH@;}l<3%RNi7rvlbK1gZQS887ngK42pc`a9C+C8lKIPV85 z@qKfKDB*(PS}XaPII|$O>oW2S~y)T5yOtR(K1jPl&z4P`q!r3`s7h`>8fE`XVm zj)F=JlVj2SzMhvRr&tEWPiF+4uWISbgnCjOdhke3(qY&c` z`@*hI!qqJ=7&>pg9mYYnUVUU^2Wp{A=ZF{UhtWDALho&-WDmj)U%ovmVCw4GBQ(N$ z&p7S7K9#5N?6Sw3={Zc#I>ZRrQVdy)7O8(C!e5I@Rlp2XS`ColJ15%;(`30R74 zCd9oz3*5%mt2F|fya(-NGLGAcRfB)aivn`Bf^T{h7U;Qtmt+j4jbsg4dl*X zb$N;VQS3Ug6#nsXtqO1-Q>eh z-Fb}JkwLIY-56!CS3;kgG^nZ8^PF(z{7=chyOy8@*t&~?4J3h~Merql|2ABLk>1=3 zP1}6{GG0*r^Z%9)+@c98vW9gEU_DouZWnRx$(=m2BS8~OT4)J~Y=9*cwLB8UImEid z6c3`Y$<$bm{-*@$TH={5;Jiq@-5pB-a!Ahz9JoD*S;p`GQ%10E3S{*uqF-Pgl@XazTP#&JMHLqc*+~QR5is$tS8qWq;?^@x z3NY06|JMJEBN1Dy6sQwJ%?PTL_=Mzdxe^-$>belafioU7!r!v`5UG$@=7(~%q`4db;h#sbJxbM{ol6?B;pgG zdGs`N&gK2vWi~FG?wWxqBk*a>XCh?5Iq%rLGr!xPojeNTgZzwrSGCp`jff(z0~OD9 z@W{^n*`OkJ1~$>qqBEPeYMa33iP2jS+@@EwTcjXaST8$_gc!x{IxQ}R|1dWgBuvjl z0-E{MIqsM&Q1LxSFJ9ldg1_--=`G-^YsfP`^^8WgFs#Ub;*I*Lu_K9gxS2gFy)BZ|C{}Vgk@9CXP$#s z(>-Y3ULk_#=shgJh@HdV*1NF@w^7h}T3u&nRT9`BLDnw4h<)4EiU9}@;i3hP(-Q>i z|D;OCt}X9^O0x*@%!<3i=84c7;OO??|0YqJN}_Hr#3g%Fg4YSCYfb=E!{%3;9Qij# z497JRfpV}1&1SclihAAB&-J?ZbIfKA`@gyPt1Kj_wKlXuA_X*DP8&f59K`=y|#;X&5DzCQt%d5oC z6-5ym7J2P%3%4&Wp1p~14Yl- z+pi@m_ViqYb#43Y7hdf77f&bT4n}o-)OVR{PdIkp`w;OqNfD=rFP_^;WyAx@Q+x8i z%bRe*@gsb8Edq9(7*y~rU7DY;BxZM;sh1qZ%=cunYYCoP(fsSxwc_#<#Qj4nF0)jh zUZ4a=UB6w!LEd|d;w9VIu8sIa9)q*Ph`)}3*Vf%JIRR$Zrh+%jh_ef@=LBKg zCT5J1#YU}K_U3;nnhw@RE}qnJL!s0L@dOvWxfGBGISNbTh$)!KE30!=AAbzG_bWM| z59=>)1);GULbFZEAD5rKBzioBWWIMkuw?pJO>A!YF=C2h{qr{#T*-s!F%0gofCCrh zcG4Hjeh^{?>i2l3~zdmV*UAwUDtm5h?I_FULpOxwEfH zuA=n)MCRU~l@GhB=2bxN>Q?sTaLN^rBdRI4vU3MN30*^4Xf>|b_qfhGsARAOht~${ z=TJ;rUCS}=%t;4*(g$OMk`p9^j8cvkTx~5N{4c5GNCq3~F_&=H2ht67b32U}>hHJrBiqNHQd`-w$3adrbj${Z7%);hkG` zO5U9fUz+2&*2N*Pnz0614y3r(@jOS>x7R+T7R{Xu_Upcpq*{}jH*j}(yg;4TajJs% zZj;o+EaUP(_`A8fD(JCZ77zBFTLwz6O~x4Jyhp{C<%LaFU=Ss@|3RxOSTC0r(ovB_|qso&3Q zR6W9LJFGT0oWy9BRy5c2BUhT2QuAVU@ye9-@@S^wx0N1e%K*%;GW-HCw`BE9BP&!h zVz@b}bGB7ya9A;F#a~Frcgp$Khh_Q8&54we6lG4Tr99Qe)*b}(B~x2{Z?%Zv&a&fQGGbeqN}5T zkN!O<`YO18R?M)Hl3mQ;%XijU%md4k$bs^ON)|@VdeH53Yz*0R-xrkjzeL-b&aRc8 z+h?||n(eJ;!B__E#yXnG4><#_ zH4@=`eU*h5RHXl~k3{q%A>Ojb-KMv8)RAdhLv6RHxkezDR< z56`w~1wTPB9s8vwT5Hip?>eItUnU>UTa&d`&7~Onz(FO~uXKz#IpI?;hK2xZ50Mlkf4;L2D9E*8)q?-4Hiaxrhqyz)3%-mEJW8ox8 z=16KmckvRl`O01ND-XK&=)9zrp@irRpsvoF!dDj)xx`paUnY)Uzm_!8w24iW@#0f z{&dVwqrlD_5bdi4;ho6XWr)#Imqy!r+VcjZCZ<;7wF>Nx=P}Iu{2HC>Jp0WWl?kZ! z&4xa4TuJiq?0BqKP)*=B=W>>JIwc69RMXVS5zrDLh(*m&vT^mU%1joG2F|8$Y`>Hs z-ac=vbteaTw{_y~a+DkD+TdI%=hg!V-GeJLjURszQ1e-k*Uk?&a}_R)mHSYeqw8YF zQVYg&{KQtSI zDNDgNyf7ba20f4KV$?>^2iie5MLJ^%WBkgUrdO08+cGlB4ie` z_@QI`kyhLJJxf14=sDv6mwBLEdY_%s3atd$H9w!s7s-;>w1*T-?b)47b51lCJMQ} zmitA2SLM>qLK~ZY%T0%$Zyc!({V zG2U^EcAZOSR$=x?Iz;Paz@O&Gd_Yk1c@&lCitkKBp6-yyTpMGdPKE&y<(uSFll$pi zzPK%qA%Ag-0g+N%PzQ8$<)@Eq&$msAbX%h0wd`I&U$LvZy#Fz%#BXj;Ey&mH@FLtY zSMRhT=-*Cbu{c>lkNoUK=`oM-R=v^Ul9jf{fRKzOTC0J$-F10_e2G!OZSq5iYcsxsCKOmgj-^?Oj}r| zJ%@hmHCPwG0D1SxT@Eq!WFpQE4ki9C8aK}y6N z$N^4%o3_(X+`Y&z-VfejT;bXJaQN&nk6TMt*nOal%a+{+Dp}GpUMPxwK0_G1)bF2W zJy7lQ?eHLcO@#4Yfz#~pkExrXKZYF zwB%Wz3vL}~R?}$&OtZfretG`5JMY8ST?c*h{+vR@3HFKBG)sPZ z7V966DcgW{v-MC-)ig-J#gB{V>Q)`a!<4gQoqQ2~wbhZ- zVCEv4JPFI}n*N8dcJKLn{6mMfxEbq$63d?ITeD?Jrn}$CKD(h0w`?LQ?9>AO1^%)x zLBa6F{?=T4HjSM3jD9qFYm2Dab+0j5oy)vBq_u1oXcVeimT91mhd#%Nx-PYOQ}uKl zPI8W}FZ!sfMe3pBAUoLQiz$ zT3L2R!&j-g{i?6#SOdputUp-CGc>h$De;#HamSH~tA?OiE}cq1PJu~de3mzoP5siU z>mcm_2bP|YAHkHdNB;^$N{MG*UtqC-E&36w1E1oreesS2_ZeZdTV`Z^4-nspxy{-x z3g_v-F+34!@tS$}?SSXd&etQCO?0fhlh*zaQdvQuJ>PEZF6cg@9F#i*sEDj$FZjl5 z)<&Azm^s*O_kpl%^fP5Na-ulgP*G&|jqOCS+JZxJb#0`OK7~d^FRLw|MfHK3HTUaS zZsy&8jFey2NV&xm{Or(xcDi01ix+ZnB(3D5N1|HV(OMSeSAP)}48>E6l$h|kt?*Ne zuFPpJ53NL84`Nm+Q&CO+5+a#QvlErTbQ;dG{QtVH>@KEjmcG08CTTgw%*9r?DV zkT({1I03Q`9Ux^N5Vz^Ae>!ol>aP}83KsFy5UuRHPjn14+6VP}K!1@krJY2 z_umFC$N}72C*CK=u`c-Ogy(TiPN(YdZ-wT8CR9HJBvMal7P|;I_xW(z4Zlmc2_~!= z*`8UFSsz=`Mr;3VC@9*Zt6*ZRvd=qV)h-tZvb!3mLgx|`(lxCKa@#O}KUjKmYNXuiA3k!=id_C`v zDe!ksCyiDb*Mym;m56pcAt@ht~ne*fRYqaOFZ z?|Yo{+OOy9b|^g=38=P&)F{L*qt4B>t)y>59V#_E#BRn_)*nFu2hx5ZrjK*4s){2%L+ zBxjtCUhDdq+At}57i->E+*ujm)}6Yyw+JuVo{n8}{8bU!vGnU$vssw7%MfjQrlJ1~ zLfl9r*F1d6wC&KztNWeuOxsLBgm+zEc?6i#qDVlrOGdkS>X zN9e2EEjoAr1#8+O_$@M9WQD(kvpZ`A@R>A!?d7hKimwhS^j!TV<+k)g$~NRoH%kyu z)DQ7wS+}-q-jPtOesF-OQq>N14Q%po$ z=bv7zQ5B_u847y-_$)b`{#gsy*@?aqw>LtFa*)pBj6rgLFw6Q~D9A38qg;kNK`e0H zs&R5WIXyR3Gp}&<+l3f|?~YfD8|*ukNwN3cyr4?zjBtW@c6H>lYjoml0y+@F$2xMYmJ|F3x~Y2D*mGI%@>z?UX+Wf{#p~)%8>Bq-?1{_?4DU1W1+|c!QMVj5LM{bV^(; zjfZNK7r|T$i}{t443?CWXawaL`4sgQfFF31J76L4?x2{J0LD{nb>@q8FR;6qUpkxGXYr7^*wWs>+n5U5sWT_!PdRibut3P7;UHC z934$3^%zl)GgL2j#i=ZY6k%+;T@VPBeozA3b*XYbxP(kQQug*ZFZ zO=bs!0N`^XO&a-a?E_-PV36(vj#1e(nag(}V~uqECK zIJx-Kzp)!+K$9z_gD?Fpdh!KWRm*b0lrJb^sYI7hCO(F=rqI#vu~OkGOzmO5heev1 z+-DF)GoLB#JK`cN3%`}DL_jG^@mY>-%Bt!B+WSH<9az9fxfmXjE^ik?DZc`@VM*4= zNpiG{igur6?=E)9N(OnQ3&_TewXJdD`xr-69+VEfiLhuwb#O`)y|OJ(&mJAIt{0v@ zKJAUBB|`xB`FV&+Wd0LyytnmcGlClkQyMGe9OAu;<7 zpE5ARq}AI_CMNJg%pwG=EJ138B;jnK(H@H@=vP;Ph3^Iy>WHW+c>ZH@ zE?9d|F*ueka|$G90A#KFD*X`g18o#{e*c;7e4AL#=4FAN8D=+ts#`40bWZ_*$Y!XE zZ3h2^N=$)2GTQm)9RLU=cUyI4`p87DW@Np3*VSQ>*IS$^SNyAZbo|jAfGLe&H7el> z{4H6uoGKlM1Xg2`d|E&XX-Orv8eFnE>+jfOQ&kx90+&C~F!QU}AR4hUHe&*iS(|b! zj10Z>)Bp33#`opVl-!vM69V~}Ac!n#djp^{_M*84Ve=*wGEFN27>3I8(qSLXuNex+ zp_@SvFha{)t6mS$)=0hP9uTwV>3k_mFzuD+%BbncU1j0p44#UAqM`A zo&vk6*dWnN@VL&sR7?+nV9WP}b7|#Q%Lqx}xR=LY^<;U#H<;hk>l+vIZW12;L3r$5tP?&|Rzb)`h!B2;dc&;2myNPzGbs zT50kc-u$_SqW4q<#IcryZUDnj>o|1K-ZFo4QT?H+j!OrvnRGHEmda&CmuUc$ z+t>_yp9^ah0g&4iDK!L;s=)Z8;a>aZI-etM$1arWldy|R!0W%idI^B8=&l17A|FxG zb4hbn4>&GP;wC{FYD)(@9E5p3&S+Pc!EacjdO7)`c3~X=PF#!deT2+YjV94T4}e>8 zoJd_)ZjU2Xd&b*SCuX}2G9!FRxX9&8*h6me-FC@GrV(23blsVDr!IbSl! zH&7DWa_!q*XDdKr11l0x{s*EhcMPP0qL=!Hrk&06f{1D6nCfRVN4q)Zy^{z6#SO0P zZYyR>N;>zL0fUkH2&<83w`hmSj!y8_T7wHQ?n#vUr+W(gNf6ugD)5_Kw5nPsrtM}2 z<+KX;HFM1~2-AcZhl$)!r@mj)?m6#T^Q^>#LB>2qz-0wWa4P2Ajq!ziY*VpUU`f#( z36|hhAy*NBx)Q2rsEb_YjD$&q2Do3t)h8bK-p1C@hG(JKehcggkw)VZ1B){V*wo z@W4+^)Z=KlqsE(GNHH1iW4>NS$E9VU>;B6yzr>draW>-3Pv+*kU74f3ZZX!Hwt=Dp zp}L5S7CEsmbE01Zz6b~d)J6v50r00-IU54(nyTAf<7k&$PX8R2iBy{(YYw_n`w*Nc z9l8sV)-NZpXqCbsTIbaMRkf+4OADzq6ZtikXkwr>7GUW2k8I*A$PYAnO}n!Dt%4xA zkyz&-wKH zTu&wN(sWF%0 zAb~d-x{$q_boo8B|9$M+`Jd!Dd3TWi@ky+R?-1*^h5dO9wLP-!AGfNBJ66C?4b0-q z-UMOL?sjAQyx&vaZKijq@aIj~m`HY`DoO{?52-|}*Y_7I_OnpC@1i?t>`6gf%3D~# z#@Rblrb#BTrABV#_g#X8AaykVCm}fsI*LYb=EI(o?_7ptq2v+RV$=2{|D4Cpl+QLD zJm4jZ@-LU)A=4)7&z1chr~C)mq=utLN#$bKIVIeS#}9gDi1V zO3LUv3hWYy1ROe7zv^&zsYg+0ZfCB=dN5Bv)9%09Ki%{Qixz!$y^bwcqN5k)>qf-Z zfB9{x;kGE3AJyZ3b`I#nLv5;CJNAR585ELUE`V-@W$1N|es$#KZu6?Zsd!?P@On;^ zuv0vyf2VfOq7I#x&TDbY-FQ|rwqzh%shesLFw5^8o{5+Bjh>O_O3e;u0$0NG8FC36+d@q0Ad^E1@bX4i zqt+~aF1dFn|Ck{l=CduT_mo~-X(yWhZEtC!;C>4q%0d7l@u4FnoNIen za0GPzV50H2)!Z-38_Yk@bb0$n61C*(NJ=*cMG;!5_1^p;DP)lHV@+b(X=Ne(_0LZX zDSORru^I{XIn4SH&F(aGYW%l+z<*KlK(@z>{7Mbf=yKYgSklnFIm(K+E(L_x{{evX z!WMu6$Vi4)B+Z&-DP!Mwv#g&xRPoZycZ|i;@q0T>e|6 z;noyk2Yye8LLH9e5RYcI+rVCdsPw?(sgSFbGv?u*5*j=DO!@><^=b!^!Vw^@vR{)w zhwU2PZ6oqZlG0FU^d)lqTyX-3*(iluO zN>O_4;NLwP1r)~t%0UyE3Hm?!mdwIgcp#w8ZlyP@P z%HhD6J45RBZ{Ll?uk%1eQ`Sypo7K2eSEI=;Z4z6a2Xftv?m27fwmI=(g(v?Onczo2 zjxKc3KDfSlfI{3$aQi%R8WxswUi2aC8%!OP^U68`N0mXHhc8+yoFp~+Y>^+i3bPgk z>eHdSvM5>ft6=FgC%`nKxh3>NCM z)d1p^;KllE$X{XY3v(zZk8KP34Vb;IPgKlZTe!$unGMRGsr0%#l4a?E_}ub zoYYSphFe<$*nc*HY+%zWvIIkfwI`o-Q`jP;w>#%LB*~NL3%w9ts-sa&+o|oAx9L1! zeGvH%XrmMQ!F^=U9|G`|Uhf}Z!|jpT%1hp&_l9>E61*RB-R=Bm<);FBYqsXPJy@3e z6fkZwq5DSF*S2J7`#01K#iJA3-?pS}JEYw@A4zcx45*xI|Ca+#$g+0n%H|dSKVji* zX_DceE9Bt-5)It)ae*zmZ_RxFUop?-@m=B3flGkWH*}fyZcY3fYuW98Pj?&O-#xF* zDY2X&srHlPug7;?cH4lwa+`PCdbtyVZXY5=uE?`*LBr)8`;6lpe~usi@Bq)rZDrkh z^nVB`Z-cFxP{(j@&k~*<{~e3{7C_R3|2G`%D0#)h4qKwJ!nK>aB)fFnj6^O1y>bPh^C&FVzbKq8yvCuFs z`%z!b3SOk65ZBpas+2xP@2guI!fDLd<>074)=}yY0Q1xCb&a4Qvv+YkH}9L|)H3KW z2sp`~;eqeOE{?TfPPSS-%2>-b{}E7;)thBTm8_EE`i6tHxK!9-)O6px@Yk-q2?Nm6 zSg(*^6rj3r?zFT$i*4ofs{dI9=QLxN)swBNFSyNXsTp>{*E=4BUu^r3c|D01b z?d4d$BZo?gfws`pSY>mX%sx)V_~(9C;<|FiJNkO@83+R7BN->F=&>+#mfI_%c(*v? zAdeK;sX~O!QjYx?Z+pAhI+<0&c=}6>)smj;t${hPiVnCbtD%L8Hj1H?N!sxluhOs0q}>3&*qi07c_#S(w0ej=370I=yAt_R~Bev)E2A zwgevj9`>5;6Y@Ltw#IEaFOu1ydkYUZnKN0<8psEI%Wu)#18qEflIQE0$1=3;LZeNr z+GVD5Mwh0_i2L%%2CK!{d6dNC>m99rcsuW-5)x9hHt)5xO7vo;o6$ChfZzr5#?`n(4wR{BivqSG9W8s(m$bPpVbS zTH1QxR8jsiyL_iun%>B19W3l=n;J;~o;VLE&!p=n{ICp|`dD5S0eQ$rmqRZ?2mQ+A zUiKhY%D=tcmEjnoU<(Tf%5@wq2NkqHZQ}W!36z9y2ZG?N|I3_q-lH{mK!&_$8kLu* zP>^)!*DCF!RMZ1#Q0*P^uD%C&)gg)N^z|iU)AcgQs=~d~dMok9L86W*A2&CYbnGMns2vi%Z{We4cbTFMo$wY^Z?ILhPD> zJh-Kk76Y`&%ze!x(WW+2DN#XaQo%VowL4~f^yG-kZbjU_5yu@S5dvwP*`Z#r>2{)F*Joqcmtao@$iW)<~U) zuC5SZk*R9$-lHdU_~`4uO*u0JRJeVcS4Gy|<+!MvlwFaOrHUzW=r|V;YZ;ZodD$s& z|4Yl3!l)2#)xI{ofW`~AAUcax?TL25FW+YxW|_ZeP^yS;us;H{B5QH|5X zX}sy2d!VL=(3uYPec7`%bMcp6J0zNoq^!Nbs9>(~c63G!S`8h!HDK4Dpt(Pi2I&)=wKP4n%A2})4zb?F0_fEN%|2(c5R>(Bf zWq*)f^5n9Q!$fOVHOdtosroN+a+JC3u;bfl;EimxF5DvJ+Gmr<26p3TNXSw7PsSUH0d!ydx%xhz@^|LTn`#dA zW?fZ!^2!VL*&f@W%oxQ^Uc)nT^{?@b3sq5LsJvt9OyT&$KI?CSj;CXFfE9|@DhyqJ zt8)s$&TypeRJ!c4E$!!pfq*zISFt3uH1kT2cOGKOY%%S!#rzzSDIZUDMthd(ur^+z z$B3mew{dIo>l>O*5x$|FY9*g{i^XH4iC@Emuuqa>L8@7jh!FX@i!#0rFuMDpj2 z3VCv^v1-u>I-;!!i&KjjzadK}&|Q+-$q>~2tmC3~?%CpzAYsrms9t9cHSG7{ddrFHWujg zH|MtFS9Tfx3U)YlgQPxZc-$He66}8A!n>kZ>R(%1XB~E*?etZLm}3dn?++Jz=pUiF zfS#CLGwNM&SR7J~St*JyYwN_;@5gb@&2dvs`7)1iPBaU&pmRr2KN?GyI@;YV3SfQ1 z19I3r&odBn+R4@Os#nFVCZ4omBFkA+&5q4^$(WSP^aPLaQsc!5oLILvZsZ9*WVw%_ zsu9hl)E;MomHlRb`Wz(c(wJ-B`#$9!v-{O=xmJz)SKIT?F!GygS!LRVvP^2+jOpxhFtcZiYzpXc?AhHZdl_l7PBfpMVP|tekRmN#|YNbD5VuQkLb$g1~3S)G02WAMF48Iex+0y5y>JoqG*-deJtW-$lmKT-Qy!x#d zC@<)v!+!*yqzKfTJNPT;^ALK*%_Om_M}ee2Y#QXQ5@2CbA5qV{M8qaV#@#8hC<*D5SnZ{}t=IH#`iP^E0zELPXH>VmXuZJ)c_Ysqwq)%xe@7L(oS zMM4ATpI?SvF&?k(4(Az@VOVd7NNX6)NH>DrTsT}55-koRk7H<;}6iQ zg>3FxC!j4Wc8(6kqO6Z|l%>k+(}O%J7GhmWM1BQa?wJp7u?JDtb(pX9Y1qUEiGrEV_NRC%yaFx(*yE~uQuqo5hXQquj|K|v}xzMCvvJX9K(9l_RWk>TxXnXNx{WObj6JJ z+KuBLe?*zIwJcSlue2}3+L*0!;9m_VxFj7q*Bfd(6EvYL%lZXB6w&9gT=-3~YW3<= zce++VSChli;9StE#I&+_@5zCsd4d9FF2P4EUw=2y&vu)} zf_aygZW=url$XkocA>e=8@-2U%GB9n`_7|^QPs-9!~s`jcv2v@X6aWNcuMAIw(G)O zOr>9lrzA5B$GvWrn4D!v?6OujxJ8~aF2(K&1@1v*r0thsZRm=mx(@BdWFgM16aEdV zQHL1XjRkd~p6kRshUD>^``jn;UwXfH(3)#Tq@1N{Qy*IXDg?UzJTHFd)3Ol!`N_#5&!wtm+D9frK#~bIqMT+k8vRV` zoUm4T?MIKc`<{K4b!ZI_4Tr1KYP4777*+k8bS-Ug_!r4DvClYcDb$ZvKmtX<*=!XKOgCGSuD(7`%7sB~37+}kf01LS*TZU(nQXq5H z=f69n0VJ}!;`3V*|AlOjj&C`x+X{e(ujW5rHs2l@^5+rMzr6nT8oWPT;ATck$|nob znPdM{Zoj);h(Au={n*`b3i1O99M%ne_Uiwh({DQAa1z21pIo7KLdF@Z0(J(}btxaTg$Z9)wH zDg$MWNr5BKxHwq@eCDE)US*ufo;gCx9BFr6Wm)Jo}h&kON?X6tQJ zl2ES9UUvRH05&0V*WbnmsYJKm=SJdnkB!btzyR0*9%TwYT^5?3omori5Y|6LYqL7E z-y2LyJl}7phy=ix&on5oj0>DC=fy%pg+%WVNAirkbYrw6uYl0ME6NXP_sfq^!1s+l zg4?{k7}A?(K=zqG}K9oYT}RFtxe-)kMHL;@~;_=oJ(F1VD%goJQ)-K#1Cc={-G z^vD+5NHkGUW}$gVTdGvDSSL&i4f`EdRd7SpsutC%VHV<-9h(czU{Eo!|HIcQf`1MJ3p44U-X^e1p z^1z)rg73Vb4Ku1vH7J91r;N2lq7T_{jeIlB%Uf6gMK<&6m(4WNq8*UBt+>ihhGjtg z%2a1o$KD%Nzvuaf8dJc5TOrfB8NcB~6F$n(-L=#6*5V<%dQ#ZFVYXs-Q@@yPc>u0DnLQ{1Jnye0id<%zmFkL(bM zd^Qx#1NZNKg4v&9@!K&cj>;^n=HY881<50dVq%a;|1CmpQ~Vo8FoA5;AnNqMzj@e0 zDSt&1DZk?94pzM0eRI)db$e#OKZ-$I;}81WNP8x~k`>?mfP_ra){6J?~s~T zUh2Z1=w5})??}N0<-NSPsbM}^{4^X7ezdJ<9f&ZX*IV5ZO!$4+sJcSq>+vfzcik$L zqPOr2A5Qqh);R$DBss?8m>24#`S_fJ|53`KmM9C7W54gsGJ5;ayKB)%cf z(6IsjhRj5tYfD`>PrSafIE@T>g9c@?$y~@e`7`oa54MpNIPyT#HpUhl1+QL((?Zi; zUsUHUsyVe)LH&nTPj5d>iB~k^!okGomS}c~nwNj64NS)C38&4VSSA_OH8Zu2D=3d$im^Fw0E`)!kY6+jx%-;! zLEK$-YN5onEdNdA+PECm4}B=Y5HBM91Xg-QW7Al(7?Yds9>{TEX!6Un?w$uC1m%YN z@6ZB#f?Gmw(7}ApaQODzZ34RmID!S*gO^DJIs2OI@utY4^hg@!ws$@TTF)B|l{h^V z@?31^E|MH@vm;NLwCw!-WX z4$046ZoB_bA8|nK$qF`H8JGf0O~3j&G3>APRKVo1xs$u@&xJqJ zlMCwH_AZ;V8dUHCVkln*Iqg%x)^Sd$>`=?8ZLx!YrgRQM0!B!$-&-o@EmJzCSGq&E z%}=CFz(>uwS@-RjsNW<2;kJ*+mtdb82#(3pN6g!P8I?~_ELA#V7o%Riv{C#3b@S&N zmU%;Xz<=Infr$xDJ8vhBVu3!Q+`e*CxTq!Osm1)#uj6G(xbz4kE zYSW@fwfb!Z-T3rB1kFfN!FMJ!?7(h+0B?Y_?vCL8eCpQNHqO}Z2VW%{Mb!nn{PoO# zd)-Yb`&TuMng=Mu9!K$T+4B8O8}54J#I67Shp}%>6V5{-r`@v4AP31-L%TY&0{`8O} zviz5){;|^#wHk>PZYJT!A^S-U8h^2rCIQ|nw2*QyAuU%f-6K`I`>;yfUFCbZVnqTb zrrN?zSswT?GdG6`%S&(bq;uKN);lxsnVUzI5G31s@skhSvdsn@QC(z9v70Qr;Jr&^tbp5$Z|HGEOsmBK#_Pf&snz_2~k)75iQQ1vu^&C z(3L81xY42TM`47v=RRiVkHQH~jiQ$5Yy5nst@ip)nby~}o&2NR+M$kh_p6G?J_2hw z#m$%ZzK~j;;a+H3wC&Cdhs*uJ4+xH8N-VA9Mcth#czy zv4PesiOmW{sxr(yad(&oy-=Rj$WgG1ubqLZIxR{)>=+17mzvya=7A1am zP!{7gDK(CE3}h6w{>0al`mSOnmMpK@Zgn+Bb**a9ZLmK!_1=hOhHSl}I@m>HAP|ES zUdh2Ch*uWctn+SJnj6R1L^F={a%VC*j~9@vJi2bZ%`7mmBR7mq??g2d{w=L zb!|_7hLLFPB3~+pN0{#+U@hrOE#fiSYG!q`Mw{u{yRh^^UnO)KQ>s1_ci`vq0ZvYK z7?Jy@h$FdjCCpsc@DBx4P8`1GtY;~A=w^wdMR!pFv(x;6Un5^$m_whqU?mHkj*byW zsPe0HL@0?X?P;5jqWESc|SgEt<`IsSgiqyrsThETF zdu5PxiTw;P#eQ0k;y3yVHxz_g(@WuZOz`v)D#YH&>{CRJRd+cQuI=1+E*?JAk#prP zEgK-wg0=Wap!Vlwwea{Nfvl{?YuNF&R4V}I=i!FyG6B$P;<>u)o19km)2{KPQI2W5 zEkQDeUAMHjEls=iLiy9#q!IE{$?mu#XA9)tVMzwN|cIt36fM7*wbE zppwiEgBfoWSzMyJ98z^kR(_O%`t_*>oN4@xWmx>gJC;7XhEv07hL+tQ<=?&Mvuyn; z@Dpu1DE_PE;vWG9f&g-M2XP+@z@Imh1&K6i> z_5*`OWVH2(WK3K-H+{lYj1#UiC*5&A7V)@^oU@17fZIfd6K<8phX~fi1VaL(QK)JPfR(w~yj4-|QxZ^|f!(!&2IEk~#+>_A+T=r$F zQcGN^*!O6}v`rDg)2RdJxjNh+wo*NyRr0yxW}`M{v~(XXS5+$DQ;etjVBut!VPhDl zIKIn`d7=onmKNx32%gKtz&ET+=#RzsXidBIb2VDO6z}Yy8a(nn zbgic?0t+1A0wN%dGK944z2EQJ4+4n3M2ryOl z4i4y19p~wa1dDM2-GWS%Ifv3mJ(7uc7)bGBe(gdxa=kKu*{l&g|D5=%3RfZcJj}zY zdohR;n`;r_c4;&Kaa|$a{zS_N#siNvOb>FY?<45F94ooHI;|;#JvOc=HvHWz_$4Cp z16~F61$bY*H0%xkK<4sySPvof*u>Y?{J9;_rnB@qF?>s}w*3;<65gLZrgNRCu!=_M zzkp@D zd)+Kr_bZZty^Ic}82XE3wz8){ph+AZ_r&`V)b?5N;UdVcku5A>Pi&HMsu9>JqUq3& zSB;{%c^8TeHS;VT2rnYI~fnkz`VEKIZ;Hb%P^%RiWDr4>C7w2T&f4`|^iR)Wi;nz^ zGQxNCaTIgm#~)68j5x&Y_r)>uz5FWy_v4vwj_LA^wi|MSlgJgD}6*`4o!g$=+v z4<^_4PFl;do;ikkQxn3swkX@>v{tf+^6V6x1Fqvb-6t|y^_-(1Z~gQ!6}0DT8G zgj4p_)((A^L8`iv)>S&)Bv0j1{2JlokFXbMPg1W1%TpVo3JdkD3*1+~`66uUFw2y~ zopqg8dNP>Yrlvqu7IfMSL##vBbLv#mG)(M98f}z+E*Cs5==tcWY|;AZg^nY;MQ3IO z)M=gAh~?T}0{o!U*sAx(o_GgMMXzXY-1$;r(eCq}1R`c;yk2B+JlsN?@uGH8c9ipK zqDqk?qhb@jBkxvnzWmFyF=o%T2LZ(sO{ErHLD1Qj@BQLZZ$&vZu3DYQ3zuaSDiYea zD0WSeF_kN=@i`}VNu_0pO};kbTbtwRVA4y7bT0hXsC*kcI+yB+-ZRyc^`w&&7!azjs(%1rMs#t{@t`#3Fb@4 zLj%z8^Th-6O&#lz5M%qsOiHZj>HS{qJ=zzDlzUe!OS&Q=Dr0Gv_1nbE%UFyx({((Y z)MA|8Hln@+S`#w(S47*dDRIvdV{JWxig06QR+(na=!6As*jH02d|X#kP75BH7PHvx zj7?2Kn<#4ZXCY2~@DOWD)ocu0?9&g`arVh7ZY>&~wd{_M(mhv&;TXeKX(Z~zEN93z zjjv$qqoxk?Sw%1J69@Ydw5BRH?q%ff;5zAO(xp~>*@UTx@6jk@05R{Ok6*m!opSA1 zGpoaBoa^Ff)DXpb2}-{(lt`HPM_;Z%DbF^pX1cUVB&CtAoQC5zJpb=7ALT3ObMG+z_n zb{WFc%#xI50f;H% zKx?1mb<2aPJsrbRE0_TT8@Nobu)SiUNNM}YryExj(wye8JWHz;<*E}g66sRP-k~5q zaOmVDou#b+x7cKlzjS#ftX)a3*xR1=gU8?zsftxC<))k!leWx|u^z6d!Y;6Jfec;? z)6hGqmCg;-;tW%W!6c(X;x!r&SIFquLI{<8T6kEGcf`p|4l87`{j72MYBCo^sD7ym;&_wQwR19|UP` z6dkz!N^)K>W0Cf0iVZuPD*2+2?h~*<;{nxl#e}pd&qe51dr^T|Izb*EN*!%Gur zotY=x3T3B+($W{Fgx*4u9EexxdgV;*2I6I0GpflRF{1l>{8Jx01rDd7at<(JA{{*0A9bS9XT%=Q>(k{V z;xmWe3x1QwfCUXqywz3>CF6aqe73@Ux26bpFm;?i|5!l;N`PNBdYEoAB9A6sQ8wBE z1*p%JZLK9b`_xOtVr?iiW-8Ea%`8Z4;b||SOnXswg(FX+Tm|{;g@njp8M#Wjr3YB( zJ;ZNXXEt5zhC{dXof4>|q3$#dYPY0qtG0ukNe_w2TPtZxQb`<#M4ahvz5CokBhOB9 zZn)7VJ&8c1n$s?oAjnSh*=9L^i-|`mhD3R+6vTU#sgWC*VN!G2%v6#!UYv)Dvdd>; z`Uv?5>bE7F4P5K=>}6}(isbEkUOB3-ax11UOp zF*$BJPU||x>Y++BKYIO_CRby%hD!q4j6k-pi_kE0=ajKh9eHY(!#ii*6A}!1t4!027ZsLP@{duP%#HjMlffN<8c(;FVci#a2}R-4tGO0k5#HRrvR`j` zT1a!c;eKeuvG@3xbf!! z+;cmJ`2yD_@;zFju6CrPI8;&8$V0q!MvNi_BDeELI<*dTYKg zfP7NKm+d$v#x^s7YfJStk(>p)|Ggb{Lkl!?;|eQuPAtD1L!@da2Qu;v9!I;T>EIuA zc5$etnXmk)yO)05inXOG?UgT+O*T8V%L@SBIOIBRvHQe0`*tm-5>_D_pef9^DPbcKQ6@)Ouodh-OySftaBKKj1 zE*H!7b}FcS&_ri78m+^)Z0qVj4C&@nO)?i-&#W$K>?IB%Zt{Jf*LvUfjn%W-4)5`0 zs{Mz+lScG+!u4OT(j=D1PW+u99o6+Zat4&ADc}h`=Zrt^PQ~?}kkib#ZNCv}7J_LzsdP zZa4hofOj#`wX=ldn%YR^Jwa$bd%t3`^sV?>?$VmHf?2U#PwXBomVpVY=h<}V8qn6Y!Jcgnq!)WFt6B?fm2b60*L4@<}V zN~L_RD4OtrR%W2r3{e2-$}$@vQeho@@!febl!Xq$E*+!3$>Lae@l zOnUoj1+OZ}{qZy#+w3xZOl~69-4Ir)4YDpX*T%Ho-lTe%BS_0HNQ==l5z|n0pl6W} z`abEWXvvCNLFUlw`qyu`G{-LvecS^(O8i;d_&P@@XQJx^{=BP&kvn2^PP;FusaXA9 z361l~x#5Xi+aW*eqD-P?!^J%8dzVTlKiJB`R60HVOv>_j)t*9K8tQd$lec|ND;Mwg z7bb`K2c+m8{}oBfM7iLdG3lZc*?03G$+R;`6Ek3Y&-}&`Ak+`6f;?Mt`oR7Qy~+Hr zH!4j@vtV_^gRBylQPDOhEMDv)4^*wT*r;Bk{k_XuSrc8&EK4K%2e4?jSJtz;nL#~ zi4wWMK~M7~)N5J=@j+KjeSV3S;InGE3Y!}Q=iFQ7Zho0(R`_Zbi|H%r4dN+{x?Eo= zSSohBUX^+4I-r&?6Gx!9koCyP$_io?R%OHg_U?O4G+6{j?1${+I`s3HCLOjb7|Tl5~Cu?`h|2F<=RiUo$+a1_IS+OHZE#HY93ae zZvy9$S9CCf=7`?g-HN&iU@9S>gCa^p@J3t4A3wvNkQMwxBd_-cV*h?0elA_C=uE2Z zC~sf9#LC^8Il8*6`UnA+bK&c2IS&gc&nubu)0rUkYUq`^GW31Tl0Zx~-G;TFZ0a-| zsjF8jQG>pX(4qCxOg3sSQ-}JnJ5P1eM`xbMice0W>=IcjBj*PZ=j6`^q2b;!J;-Ye z3#lx*&flma{p|`lRrGWXl2lR)Idwt%G5c{d;!2Js7W-Z63xj;7S&G&s(`aNWnQUk9HNGpL<&;Hv-YQ4Rti{3kXQC8< zu6|THUCz=cI6B<|o62aTBD&eVWeRLhkSD-u>MTMv^WuppIJw{Vk!;h>n(V?nT|^VP zuUh>{K4P!AuEV9DK%-q`$(vw2#D_H_4H;Hk5S}cCVDGaIJ?rN3eR7P=d-z%RV5I^O zZA^$&a>D%FH$;wfI_$Nwc$ARCf&gxz@{goe8&}p^7VZ7KC6;0jznW}0DF5EtI07|q? z(GT9j?$O{ADy-N2jAb{8u@dSlR;O$Uf`d509ClYl-9Uk5DTvb3S~7L<(SVL!)_v+U zm6pJ?iG4YZ((A=RqG@HSA#F+O-K&j10>|(f-XCe3k_Nut5g&$);>B2nvgHV}%{4?A zEHI6mlE`)wnN!Fd8zeQ|xQ>XX9BzZPzQ9%`wdBgUm2}AU@u`rNIIcF%Ew4oPWvWYt zzx4K2OEdkT$08cp&1v`61hKL)MzBXt zK1UclWI3EQFgeoUnMb7R=1VSCN&EB#M(-;QotgV*_Jv8QlT7x}!f8;x;9b9W@Wnzk zsdR-rqIc#`H7FyM_?DnXt_80UVYGH^DKD8mCYmL^mRNuYr;u5rGcu2qHzCxEF}7pk<1a=C4#`S)D1{hB z9AC4~C}L(hVr6Hjj0s72vtqY;ZdEVs+yLi&V#HN_JnIt@>aTGbajIYWTbr(!o)Txw z8~>U65ewt(P9AK*eOA)qfw0nfPxw20wu+zVe6YCVv^u?-?>w{msK-={VsQGJaah{D zdE-zt79}o$iBoBI2#0hnm1lgfH&M0%LR$P81D!i~pVD*SY zpqWcnrf#7v@o51klkbZVT*gi|M8wd&K1F;Sd3db66PB%_d3Rhf9pp9sW+!1jN)-=N zKQd1sY(irBlSa_%a>C2f6FGQM70zC1WzY>CW*^^dISb?5C=Q#&_ z$p^hhMCTt*#U-TIHEs+V%bdU!#hI=cC#ft2I<_Oa`KPonU~{GBK-}Q^ak$}klNyZf z+q7i#d$i~E1VXYnaj(tPItcW2Ge0W7B71~=^}8|Ao2@Kzt8x!|10_&5O{HI{Zy+*X zkD&h8^!_NkOjlXZl`W%&Qzd0EiCr%jl=<}cE-jTm4B?1tbGSfLR!MbISrLY6O@4{~ z`5wXdGuKs8l@#oW#$r7sb1tGk&{jTHB5;P6^ z_3ar1r!XnebnWqaF*tqrnb=F9gnjqA*1-v0zl;|HQ1%3>m$MIxu= zv`DbaVq|Am{cD=Dg4IPa>G|^~izeT5PK~~+3WsEvwSP2OP`b3hWSH-{83}(`Z<{O28e?%W82f z#EjNAbX0tAo6W}I89g#ZC*Iet;_nb$f9<)Yc~y>pq2N%dTVG&{S!0?e6`HWRg%?)I z)Yl7@*kTrS7CmWbM10i;7@c7uM)=om>({PQQV%$Rcf?AiU z!u@DlqTN6-gATtoOGs5aJylvGArQH%zYczel81jYCsDYIvR>nKynBRK{dbabTbBIR z_Ir5FCU~K3->FDG*U7l%>e-d2NNN9asyo+did5Gl!Sjqo`Q~E^aWcsJ-@obJ$<@di zAKo`N{ttlK3dqhugH6PQOnj>3#A3{G#lq!`vjit$$$a(v(F>Yu7~VXH!jfJl!GEJ%?iNK>SvNbitfL#mZ35Jl-dpaN37N)f5j zJ4%%*HT3**0trFiz3+Yhy=%Eba?Z@|d(WOdd%R*s9thJg;B;WNEpPA0n6CM{4Th*w zdiUfl#>B{*M5=so__qATC~Xl0vzZ*;E8Wg31)ug$G*>L)Wa@;97x=(ZUp;ty)Z+^J zD@Yv$>FUfti>4U`{*E_39EsTqMgwzqUJfsFyZfx>J0)AK(R6~N(+|A%*A z%|ddm!qZEW_NU!suYJVLbVhjKhD~X5Tx8m8G*utq7iL^$bV8boVm*C)j9M;#^lImj z?q}w&^ce5L^{Br)-rM`B)7tPju&ffm#JOSjX=j}}+W^AXmCEP*Hg@j6-uFzD!0zZf zSGB6oS5}0LVTI*IDT|jwV8RxpJm#pfrX0>&< zPAqy2jd-}vCI51B`=Xh4xyj0{=Z!nQHe8~sFk$lja`F7|)7@o1?<<}L=fk>*dcpMs|c zDhnL!+ZSTN)eilhK544O#r9TWKSRXGD@xWqFI5qerWW)DVklZrX4~@fISJTc0Fn;D zkeKM^XwmYq^7+?%tLxw(|JZ_wN)Ffdzp}=B{Tmf;J=JDsmtJ6Ix{`!?SzEjy?rD`U z+Y~TV6Kg^f=)cQx8khSmO~tC`ZJeS0<+}J|X;*XY_?7rM_<2h%4vbvQI2+BN)($f7 z=~vSbtiNKg7Sg88zShMngyEd(=-2uo7PzY0K6y&Y5HcckeU` zYjw518#iuCyFAKQ+PVO9^DfZ~dw7Y9$M|JqGZPmpey%lz?EmUiwM zh=^@Kd5m_xqva@b*7aQL!(I*6lU`%PTp_1EI%}>X<7^Q%PdV_cWOV1n0Mj7bE zlmvWE=7M%mS6%~$R%&kUs!73oaxHuG%i65%KVu!*LzEw|I)*RrtmFImc);z8Fi4`f z=(PxW01q4_KMCzH9{`n3LasXHUNgJcr1MJLo}WERInUwtSzS9p#lWQkpB~r}0xxO; z+kM-wmij;Ml#;r+f_pmAVWpL#3yQyPf|II3CDPNKvHRXsXBFb)433v2H!abZPnEyu zFG`q;*ylEp-rw=o(mYOtyOWp;(9w4figsGc(^a`zclC3$Oq*?v>emLI+~bT(L(1@&`37>aG_7I%+i^FmGs%-i|!L$G8erVE6nPy zDZQ`tebS8$sU55yV_C)qJ~Ic@2=o?>YU-Y>sT)Bd(GaCm({+-Upin=_ty8Vqvt^K z^W#V5EHuy-m-bJl|4=@E^7)Q2pGW*(lXmMQQApBo>eNlQnZFn+ODn1F!7s>legda# zK|fuE+smMHYR~rF(%;fP|D^dQnJ=%WHS<1B_4W~($hF0=vqBk{5@s2r9U?no1MoRb z-A*l1hrpwy=hL_fP{h!$YD6wXI{L-uQZxpJkyPk(C9y(5~cD& zyn8N%LdK0xtrpx&!%)|1J=yJCmSkSAhtj#SW4zy9%zic{9%D#3v2?OAPgcUHiMvpt zK03pr5cJd#Do%+4hnDRV94&h4)54S4d`k5OopPyQGHI zBzG9#ly}ftnnMLQp$8Z+WWK+DTKFQuS9UIMz}f#A)>5N=VSxH1`I ziEl^q|2jUQBz`(r)C>3E6wAkDF*EN`Z=`yP*-aTxw(vJ>vYR)a;~cB}ZNKbz4wqrQ z{AkwWRvNM2X$BR(c?c`58K0|_$Y)=wO47oHF7m4{UmB4em|IO~sd#N{$?Ko&T)C%fV#|B?5>Vtwu=fzT;2zZ1y zzE5(wzaiw)5aW$_u%-3gt!MwW+dt3hv_Iks&fYI!6{(%aCUeU%^cLgn+!u4pzHb-e zn06Obr58>sIM1^TMWsJ@0>?PLf|r#AABao6Nb^=x?YVZ0{;yR}ozN~tn3r@q@=W2x zh3Rc83?=(UKQyPcn;m=q~LKA04*uBBM6EFDC{&-g6PnS-*do1r6X zKuRW|x?OSY!k+Y^754@&5r_GmF2TNGxS!AWRlEmH9nzI2OF=1UEyJ%#nh(`X8uBx5 z2P=0S5UEJ}m8>;9w`TDE*HIS%_c&ZtM)B$o-^;oC!D(@QTX+0u3?$!x z9xwgY;(NJ+v7qkny^lmMD7negy4RHMy@FXj9aJp$U683U#nbx?|d#bT*Sua-tosVao)o($7>J=-qTEpZw3)*B-V zinzR;aHsD}cJCjbXLR)#*OI(jY$R0B&-d=tJMBX{1?iWCB-fTd;aTT#ajG0*&aY`R zZ+55NGZ^qvHS+vu`hCjk`Ml5DRg;X#A2>%x4$#OxoBC6XV@FvlwQHm%i(L!r_yX zBvj;T>u!|7CZ{wkHUdJ{DOEdMHr}lRlvg`{%9ZTMbZD5MG%#uV=_UC+I!EfhY85y3 zTHpO&=I^_|;`0W%8(JkETof+)2CYUkk2ZU_eSgJa@O8*_64s>i%^{TLVi>Op*in22 zN-xq6?E%|jgq%AHd5T7ahqzjmfGSqU{l$#dzaZ~G49>x(-Cdl;s)lno>SN6WnZo0m z?lXZM%owllyvu#HJu`Ajl%_Qxhscn+FxPb0QVzv40oh)2I*B(yn;FX^ zidxMyfvO6)yVVzrPU`Xh#b0vnJb#51WgWDxt(C>!h<~2obnDtt$}r2)TH)fQ&IzC4 znD-xxIeeyH%He)AKy}8Fhbiw#f@%pzIZX_*u^w!p)tiX<&S*|73ocwMqJ5^J>ul+q zuinrVm4~Vt8&Tx=%1a@gUzGk8_{~hvK;k%MtlVm6-&<}Det)HRu`R1$OVBh#VfEaC zcl}6KcDi0}r1fQf(~txBc&L0;$fApJ;)mkLVVa^QOQqd%HEC;Up4Sp~D|jpP;NEi_ z&d6Gt_Uad@ ze=5^XaApf@QN*oQ%s$6@j5Re-o*I>t_xac83)A39e68RHu>JAKCeXNO@}W7q1N!OOLO`F^$s$k+@XBk_ z%Zvx3*>WlA%tMbk`K41_Mk@lZ<%8FiSjoSZS_9~%viWx%X{ZU~92(b5Hb4_#9Eic9oC zMOG81%j` z=2%RweN{1OSr~RBxe1f|<_{_`o2`-Zi{~qtLvM`-7#A8!k}0O*=EIyJbl|v`9(m z!_q5W4!4-H_*yt#EXlAd$KzznFlZ{#-q2l$;m|!B^HjqdtV6q8vIjHr_ZJLehIXa3 zrkMvzShozT#lN1+w~bfL1&NwGkBdVVtPy-!Ti4~pPD7V9IeqY^;%Do_k8f(%G>wS; zx-$7+K%Nwr>~=3KTq~=1Z%~B$C=)MDv(sPe{D5@2dwqE>ypNyD$bQJ$)R6Lim-mpM z&@YXXy7hB?;~9p9mANmyUp1Jh%7J^7i?2hvU|ITe_&7sjiUUI`vzI_~QQ4cN3pDR% zMtNGD!LH!=TN&Hql$?BZ(_qbPchZ0_;GO#$cz0u{@9UMf*9(^%KFq{)9AlgR+N7B3 zI0TYmajNn+CcQ+y94e1WdOXXPW|qSEK*Er6{^tv@qPG~)fSEcBdW9K^^_i}GwyQA= zW_dH^09w#E&q-*fRis7I>}v5=`S>azOu%`F@6pwv#q%(%w1V_cL-&!k@|$2GejK#- zSRK(d1ci~EtU9OXbMqn}S;aQ-z~ky6&~f%^yH`c5HyBAU4PClfOdI6O)y zU-MmA1DP-TzF#_LwND$VM*XO4bevnpI^&Oj>`|v#8d&Vg=Uy5;9OwFq_|G_NFOR(;(O=oLr81heV(&%2r_r~GH z2Aqn2?x3$93U-@uGJl0rpB3$r9MKq3;%F%H5gsvY@V@nQ5I2%Y@7&_`$)IQCwAW8h z$~bGI`SuVM8k-ioYSE?e_PUTAj%;(@jVqJ$OLe#a-+OVRC&m<;s6ei?a&463Zw2oZVD{v07Y`T$~v8;uQl)*jRaVeHoSLGMYKH;3$2ycfQGmd=YDvicTPe7*ZZs3)aqTwtMqpFcH}c>8tQ;Tk_=nD}7B) z8U^{m-adJ5S}5FVxB0L}_fV`dyVs9{F19=wCV7@z*)?Fj)XwIDZ^`53xuW1-=YlP& z<^CX6b6sxt!jNk0R8T?a(wb+b$8M-BhkFwDVN%_zWqIz9(cEfM?P0uO-FuGN8jVE=OV`Z5r-&C+c`65N@?%s%# zDRTT2>gZ67qP4%L_q^BYoM~WXXiexUwe#KYlB-%= zq|K#OoUa3R6wSe1Cck!1Mbg43@AFk?oac`o`tgi4CH2Zw*i~NdpWlv1H3y|)P-~zH zaBUnDeF+(Zi)QgUp8I8#d#;*pCoIh~(uH=lzrf4OYX0K$JdaK8P4dPk0RE`qR zN=U511>4P(cT-J)xlZmi$NqtNRzPW1&;aatM?-en(7PlGvjJ>c)k%c!f9SA(jvCFd z8>RBly6W(6i|UsFyW@zt0J?K_uz1ki_udf^yKk=VXl5LQ<)iyX$0p78HH%nmwmpDO zH;IVRk@E=jX9w$vH!0Qn^nMJ4%h0x-uKDLaoWw%=*BEdHkk_?70&1c1XaruhdCHY| zn(E(=LUKBRjaHQ|>)NUf6glS*;aj_t6Hj1}RSs`NRD?5zyuu($TiFArAcOr84ZLbg z9}EK4{{)F8)TpW&El6@E8`ynhFosTe5^-Jsw59C=;j7o-5DlC^M%;>|*m?p9BEf$+ zI0?>wf~K%!%~Kko<|z^xGT%K(aaP%!Sli2zS;seiMUBe z0TV|I9LzRT?L@k7Vo7=$>QB7oW({N|)Q2ZKEaoBCBY$|+|Ip|ef}NZomkmInx@PgV za6;1)q!pFO#f?~f^H|`2VI@Ez$HaIOT{=zJAlZ3$qEImz-~Z421!t0Ab&vP=Z($s| zmr7*s{{#u=5z5N~6w*gBM4$fN_JXq%5l$@O-6Z1gC!LXekfE;BiOow0rND0OR15@T ztIU$~e)9yf2oNG_f)K%lOAuQS`JLdKqDGWJ1l=!S3+9gyucid2sE?KeZa%m1iJWVj zKdukLc>!>dht8RN<}LR~keInSDd{VMKxCPNL(w)&7sy9|)OgGOB8i57$R^SsqTvro zWU_Ls+dmkr-?{%AA2`9%@C_2m`uOsfkPg}t>Agj0e@CBSayd@{8c^-b-k9dkX7Uj9 ze*g|iCsCe+C79D;^5x2F|7nu8>B_a^&+pWKU7l}~oz-;!5CqTOX&wm^R z6yL1LmF)bT3;!MabrL|z>_}w@IO+$lB5Q@RLB)S!{>FW&;He4$fPmTVjZQaI{~x{J z{h-r?%KK!}tskTj_&B>ky zDO&kYo(rm1o;rU*;Xd%ultRcm1iUE)Fy;bs);}XI)*8BRZ@`Afe3`Y0Hy5WoI~sAR z_7-KQTs2uo3c8D^V;k^QK#dS>Zl54FLHcsIoZV;Y?9g}G zAQKC>ePYWUxL&1%ezga~f$&#C)>_c`H;YBZbj|KeFwgtJ@>k(jt9z2k*c(Ez29g1r zGk=lEz@Dq9dID^RpCjKqF&+Q5ebvTn$a)Oax~A$pH#;xky?t|=%XorCrPkg(z5yE@ zGey&NZ`Y>nCF&FiuS8m)X(Ijof0K!a+$FAb=Z>SV%`LY!s_3*c7L42GUeLMl_PdxN z2_iHPOs?T)n@X*#dvkzv6>!)Lk0`3igovPbbkN-pIp?M)#kP^&Bszz4BIs?&x!Jor zj4WCtWGj-N3Fy$p#ckq@M(n9uzltisycn^6|7k)ap{*TYW>bO9bHAJps2~zV%?x3ccM|0 z$nx-mXMd9(;F(3xpQCFcoID`C+~a}@-1G^UD~Q>^MDx-7z8%gX zv^yYs{!egSk-ZMnN=!S*S-`Q`OHclYnz=-CCq1Ul%- zogUFWHlb8?DaPy#EjFJ}`A$sir{(y{oD5NO0e#ftp z>mw21N>olt%JB96s7OlJ_?^S|O!bIDfb2$)FbB5;Q4AZDydqu}bNC5`35gf}s>WAV z<$)jR`f-3lZXL)+$Kc8g;3Bu-h|9I1A7hSS$xrvg5cYd|PXKT;M}a||%x58Q4W#w~ zK1+~EwN&`?3!%BRBa>HCO)w55N`W=gaNFhDa9y)Af807m=%hQS3xJhvuscLX5J(c# zY3n%P4>@mZcNuEGxsi8x ze}ao-?1;~x4>6p`Rlyw^6YON%JXeLLp#2rd(i`x#5t2uPy_n5>Hn1w7Ga1FO{wZ~E zgV-K*lqfleDBx%LZ`-7$Yo|EAc{Tp5o9>(&jADH*sv^QIVk|2W$4D6l5JL?RnO2ex z+6Na}8#b=nbxx3>qa=|5+zZI6i`B@Qy_i6Fo|msA2Z+EMgln^M(%0%6LGMNz!xF;RB->TyCXw1g&gR5C`!wEB~42-1T_I!JR3yvb1`e(hEzKV?6D)*q>6(O zL%@wUy%A!MGgKZ21qBn?Kx7q?lL>yFogzAbt|-FIEb^J z==)mLLaiNRZ{n&APgIV@z|404CGN56idEVrDU%zZd+(d~cvZ&p%J4#`%Zinr;!`+w zmS>{#!E<|jJ_OQ1#Ck(f`y%h|D{xgHLK9`Vm6dsrL&Rw}p5e?wFq3*{Zuo@9G_$Fl zIp>z+#1Jni4j_I|@3grY&)K`}YPc3}RIc_XKC{#95pv=cHn+~gN^LAR87Y|ToxP)!L#>K1DSjyF+7OjZGd+?hG@CU7T#_cp*u7k zZ=J*sB^Fg>iK}>*{`#Di55-jz_+x?@is&{UyChcQFbx*68twv=vtzQZghBkN2|hdD0LWLZKY<#Mx4YquHK2RB*!_ibEvs;c{56jt#) z3zmHf`J$E^rl9PU<>jq|4+mX=?ZhU2Di);i(^%a3v}1OBGRT1LN>jCI4z zZaU;id-F~zoHlAI*B5c>x)9MZ($+fW^B|JfSbFBMZ(E9fv(3UsvmLo2DVp4Imnffb zv{#P3-6mF90jVZ6)NR>UpXxp#qEx#9cO))S0CY%0#0UKJi?D_hgpQ4vaK!LFl34-9 z!v7@3EXlvLj^6{M)za$zBYV|6l58Y8W5Vi z+5B2hFRi+x$}qxozUPaXsigYKr%@op=W$?kO)!mC9t9B1I z^Hm*nt}F`rz|Pj$oO+EBEBrxJL8NqSO}ILKC8j=7yHq~&Y?-_i&?!zB!fJXffp zh^1wJFwzjCWH4v#ntP#bdh2OXKGyeHhIfn2tUeZ4iSE_7>NZ0~5^FsDT z2Ru_(W-%wK;2@RW*x8goB26?FSB9)s%C>U3AOC*?!ZV z={#%&Z(83JX9O7(xq2zONoX(DmTcS@j+~;Z`{NF{0zTjm()}5Iyui|&%tjK(dRE|9 zZE;7yd!;x9NTyuiGy>k&?zd?@tqNwdbpBdyHn|qQ*m-(hq~N8|VD{L2a#-z&d`}HU zdFgkaCXVOFR-2+s!crVBejc)ZsGmNPI%6NzZ1d&jr4fR{aRG(6IJ8qrnNI3Mb&m-2tjOxA$wE8obUaQB64(--F3+izzT2E3ecFp>pqDP)*&h`&EANNZeRv zv)QF&NR_zS!zF^%Cpd;cTRtE|wLqf>BZPESZ**>=w(;rF4)kGKRL!TIQvV@7Q|6qy zzuXsEyvJ585OfZ|tYKWe4=e2bHGKKGS5X4y)9_z6^oUP%bO~!pQ;J^yrhqe9e%C<(E5T;$E10e#3>kA+P=ebL6lLrG7=nqh0 z-$kb8490?T__s@a!5VJxmfmF>uLe7RY7qm3J=d>F0qkEs2~7ezm1Dtos?yt9Y|hDG zh5o8)Z;_BmectxzPSt+R^C|Csa$p}SydH4CuJ$mQDI{cgXK)Vhm5x|V$Y=wmY2McC zty4in+2g3U&V%va(wljoDY`h(HA2f+nzKM&PhESXzRsXM7g6<_TGM|OaL;q^H-Z`? zuhG_#_vkGZ6me*XoyP%n_F$fc!lBpH0$s+=eGkmOO2&^{cVM&Hk_@VDwf6v*SY6Zo zHPwug?fk`03e{ARD*Ru(3#_nh1C!x};te*d%~ejhr)C+uvnm+h&~ma%IUF5>gfEisKD;4aA5gv_!uxIK z+ikECSFby)U_Xro^i&CXcGz@Jw>sJLvB}hqJrgw>Dl&DRD=;e$7BA@2z?P0yCqMgo z!sF%((Ho7B&6}b;;fuV2GOrP#++2PUq|gFh1sple6#x)?`3yq-EK z9O=e@To={rw`(~uXv8L z?^8RIe2($W!*2(Xd#KL$j{8h>W#;8c=H=y?y37Yujnz~|hz;Ru#;V3V@G%!r;1YHO z6&)v%@Ig-x33t5c(o-kV{h0J6;RCXOcI8%k_4A{2U@uEh;1QRs(ZZykLq@>+Uq-7O zQ&QBoJ_uib^X3qD&_ma58hVdHp6l1gy>4AK^ZXp2>$Iat_J?W8P-M+dRmCrpcSVjO zQ6*2PT?h4#DR}G!b0d2Y&kn7F0A^F8gi+UN4WAXI;}i*pk8qQI01wi?cW6F66{ch> zI9W|am-qsO+7Eh!3H)d*md6fCjGpntgU-d{d+f?O4h6eveGbreGh6=R6CA$QFZQ*Y z9-68cF|8{WE47@9jV7VEbO-~sMIbt;9RzbTjwrt*kOYlpR69T<5Yh!5E4zT3ND%-a zVF{s5B&BKQv9VXG6BYq~S>UtAk>Le^<7GXaok| z#*HD70F1(S2$1Cv8}Cl|9WIRa7DR@HM7$MvB^xq4({pb6o%3_ypy2+p$>D z2iU)YFRjaR&K(pp^@cz!bxztnz-; z#fv|YVS^|bYD)1WDTJ)XaU}%{N^(ji^KlBnwe|t<2D%wZA_k@k;KB%i2lrj<{o7Kq z{M}@MP1d|Rs7BeK2hxBu_Q*^`cF~wq1%efX5nJe#h$=Y*prd<9w~6SwAfKgb?KDE4 zo?JM)Vp4`*DkxYbJ<+bo8GCR>H~Z2jrsFX9C+=Pl$ZpUNd`JvNA%;h0-<;d7hx8)< z0gz%he7VQlu*%&^h2sL>w`cJEU}um35c74kr*oBg#XLA zbYyv+L?M)=d(F*T%UxF9U%DBA)+)O+c179RP2ynm;sbsAg}~^4dP7PPdOwv`u`7 z51{>N`mxvL#dg`c2CHn)f+#_nMi{w6&nUXsR|PH*pC^Dme5u48zK!QswTH08o>>a_ zWWo#p4>d+K>!MUFW6GY86I3~`QHq<=2nI#IfvA`)vqOkkfgG9r@d<^Yb_SL-5bMUKq@j;o)ZS=!&sO#k808O$26lWS! zwRZD6Z;6*!yRWgSNdzd9Y* zz~)>#@07Id)@PLI_Eh{Z+y1oAPe#~JLDv2vFdsD{IiC+gy3P&%`!JAf1D+qctaX6F0iZX&!N9F5h4YkR6)3v znS!kO=SpR}Bs~QoGq5o4754n~a1=+eBzw4A;bA2Oxs~cB__|hNC@IC=zQY#-pP#Q; zta@H+7%}#u_WGi7Xsy{|U}&w?VpVAEE!vFgtsaU~L>3-=0TT^$@|}ilz;mJq0U6-9V9-69H0bt zs3?H)9KiJ~Ef2w1lZm&c5%MnCpU?=%Im$EOX)r?jSukwZA8Z)Qi-BO1pjwf z!S|RY_@To{Of^Jo-3PQ`B;1e*C@CUb8(;os@GWYojv(Ke7YC564+PFQKPTvfw}r6l zQ;|^*eF3sEj<|Wb6Oel%CoC{Pek9wo@k(M5ifZ#Q5St)|org_D_i$#4z&f_fL@;3g z@;>@F2xhtzqXpN!pGYz4$bW+skYa;+Ik8~k`B4Y@EiQyaH|WDZ(AnlHFda8L=HTm& zf=c({`j3pC$M$Cs@W-hLQ>2Ci#iL*M&mwW_M5$V@WKkb(4F4Ohsfq z0iql%#M=q4tW6SI2*c|CO?5U910gfu?DlAZGh6Vqa6zL3isRx;digYL zXUp)bU#E>$W_cSRqa5bK>h_N~4?;+fjM zDhNVM5~X-B0iv8Iq+zwK3f>Z@yRT7_MF0(1Km&$tiD8l?Ok|-7Q{N!nDue4tQaU{* zPK@_uY*TB{27)3C@ZgguBrT1jqoa3Aq7TmEBb_+7=8{Mn^h?Iu;=rcp1Dg^ROYt{J zVnM~c9hlzu3nIqd>J~T{Muktf3%^EKgsclRFQwi)buPs~fuIZ@91pG8Cb0=rNA8Ae zzd_+MO!>k|Tp%Eu4?lE(4xKlL7=9dmo_gEmqzmM~*BudgHCi4zH_2|0Qb;#kfO@iJ z+&XPY+L8-msheepIIJU+c>?Y*SS3`dOPpblhiTWm2K>5UtSsxWKR`=t$A zS;M8cpm2nNN{lcgaDDp$tlaL&&i9W!_#wKdjpLir)m2&g-?fS@jg8U-cqcV!#Llu+kf(QKWZz>^>=8|68 z6L7Q;Fk}XFhU5%VI|~z~XFi8+!^R3UfdsaA>WKI(q1*t_tFq3lujbGH}docJalk4^7s%(eVT8%JDK-x$({0Y8eofD;$SbQZRN0^?oyS3oh4%T#{Ph=UtHq=bkIF7*fo|1rzC zSM6y@SPzFpdf|Lf^necC%Pf~XQ*hS1rDBp*kO{S&MB$x8aL+EK4SB2LghL>D|w1Z9;klU@3N~nq9VIC+QwCRoOIMDQ5ik}nJv^i$uH^6^{MHUn(BXwt%Mz;&i^1v?!u4?h!G!M?qZXE zmmqJ=YfSK)LY$sk2FQTC?fCM1fc|H)aRE0t;bI)I>LV;NX8LXtTy>i8{iliMyY3j= zB)>?bvDhR>`I7{JH}{Q@v?Q$B4S`wfh=o&7(OK+(fe3==eE@YMLR3TY9EQp&9&?$@ zCf0A$&CQ42+jI|l=K-0sM6ZALo9;RUX1LsuOAJxTB*YO&-h?BRor4IH%*)BQj+OBv z#0WJ_AGopQHCH0h9oLz|D5>czPNMBhWbm()R}0S4-p70)Lw9EyDh_Cqu{@Bv8M`Ya zc)_|BW(Prco02_h?VRkKW-wfiPmzVv{dQK<=BgQ^gKq8=F`Er%7QKFBQRQ)upq>~_ z+HYB?(?@zw$N}#(alTZVoC9yQ?Dcji4I1TGEJ7}hz>FYi`_J73jfoyU=29wc6*bwB?>;woxqvo;CKigYn`B`*2);qIK!HxC^$XdY7%Wmi;Ii< zAPFEY5urMuLBL?IXQ_W{CBY7($1qE2i# zG9K(}Flm0OdPYe}DUd_K?$_>Ns*M38VF3`3Y-nnO9+qjDGu~kq(V^D7B$A-N@4HP9 z@L?z;Qs8Gwq!qfEi4F!m1{(Tsg~&2MAx0pJ9JgXi{6V?*cSyE0Cj(V+^#Z4oH@k$D z=HkSoo`ZVHQ~Svi3n0I9w6_A`4#h9Dfl%g?Brg_cVK=!&Sb;~Zc~~B=aCuiWSAGz) zXf}aBB=R9?0{2Vtl?5H(SQIXn>38w-v>ho%$!+Bz$YST51`7^c*22~wN-(sby|abv z)aSl>U`O{JRq+pQ$8TT7%y5+KA<+Q_zr+K~>>}I2s8B$tg40Ek07XnJ+?hPM5 z@%OvjAGAr*CXf-WO;@K#qPrr{si6JckPSvUA#?v4P1Dz(KPk6lXJQ zHcSAJR#Mg#SPa#g7{(CUB{j>xTSfb>ceYLq6tWP>R8m5d7=*;qDl;pHDhBO0h>Yl= zpDsA1ORj-nIC)wgkR_i4*4^V>78HPN&Jxluc3&7vY`G_;};>Vl-#*fisR!$g=Y;N}5bI0rw%5 z5c;0$4nIVu;Q+sD48wlq@v148qR-b!?QvYA9=m4q=(G;GP+U3)Iqj$1D#4<0<lHv?flQ&bSl?W**oOx0J^X~7eIN*R#CeOiffF;5QN-L(h~HfxoUKmiXPf zmHU`X7WUECDT4>au}GyVPfvH*g*q=$^O_gTQrB-N$A}+MbP3wkQYF}Od~>ksBX#;| zkbfO-^G;%}7kwo=Iwa;Jzx<$o=ogu>g>Zy2_g;{}VLGxkn}Ttp%t<|qkpA(dP4#o( z?iI-x*B?_*>TQVq_L1k-Fc=G2+Cv%Wg3lf}!Rsp3Sx9YgAkc4}AXE z%HXWy1Ofw#yI@;N(%N-aMyg`sUZ0XZF<#_4n`Qafhh0V~@TwIcoS2!-jKn)iz1I&n zNp@e)7-*fS6#muMVbOsI`PlIpmf|?^*A9l=gb=m_MV&~tJAkGHNg82`>tG`!O%OA; zIS!S0E>h{dueVJZmmPi^K0sGho}P`3>-ygd4@KR+T^6-!OpL!(SVqrTCl24g0r1YO zlJI(y>q%cOmcO^_1FkAg_Un+CmwboIv$u{lU#}7!Q%MO`B2lsHQb0&#Xlb)<)zi2! zg&Q!SwdsfbR(f9KIs8CBmyAkX5J2a0EEA! zj>eH&UiBgMUhYyqdag>Why14@tfzd#5Z0?P=GPX<+OCGwf+ou3LDL8D8Ox9i1UjCn z4haovp^mQ6e8>`_un*UX>j4g!YpPMh!K5*InML`q~A)5RILkPDMNB!P|(MBuuch0?g0a4(7p+`nftT<-A|+F1T=LwlgpKVI8E!ycY%c?k!UlcvzptkwHb$7b@`#KlFDLUR(<>BGRzc+ZDlU!-GAF=334N*CYn{K;>35=mD zZ0vu-rIZA^1)Ku$$8q3x7`c>!16kA3fpls|;i)t)A!Rp+fxbuUcxK!O2>EBf$GPTx z>bd6q^`fBRC9{J3)99n+moEy+34eDRYqiTAj{`)AlXV!vy2#%dg3xKvR#KAEuW{fb z<_JLKaDrs8O8!PD3fRQmB+P^{MTnD@SeR4r2+ex+Cj!UXu0tz}3X|RCUO2q)L>@lf zwZHyB-@~KqPzWCyt`x{jFJ<5LKCAEg-*+F1TK>2U6!F;=D|_?H<=-?y|Ju8akRnzq zxs?Bum+gnTc5X*iHi1rEymyJ)0@} zfCSOmtcy8%UFMe{mprL`VN*mo>-6Dzr@?*!wIjE&b)TBSY%fWmFHzD&|TK>e2_IcI{^B5=iAc?Lzv8d#_5{O5#zKjvS+R)DXS20~7JrUvc z>X*gs+0~yMmzFk)o44{eru)e0dlGSnYCHYTL(FGH{EX@9Yqkf~Rz-(Yu}K66`?Y^? zpaBbR3u)M2Klp@48awfx3z%>*}@osD$izlGgBVID7e@hQT;<=I6H_n0}*%$Wr zrpQK~Mapb3dmwcBhs^vkw5_LLHBZ{CgV=%ozW4Tx-z?`J+W;^)Er=Wn>0W5JzfRkn zdtFsX+Z&r;5OY}@d=~&K%-L5#&p_~&N0~#G+aMtQ-!k0hAo}-;zr4QJARdL9CpYp? zr2o(KLY4dgi+n?U(E(EUvL(x~4)H(Hi+WZAtc(@Dk8P$-A$rl>hJrM5ApQfr5c`DG z?jeTnDOqd;m?RYd^**BHFaIYDmJS0>sVdXZTWG_^w@5mm*gtGtKzS{5E1;u+uOPo+ke?pm^A_f!;g;<7GUddf%xUb zega&Zu9-9&+4oIMSAKw9Dq+!=V2ge8Q4jzb(|@Ff_HQYJvL1+#gO*K(y~1;_liko?~X##sktW>@2}T!gon ztzhNk2?c1Zf4~=Y&wAq ze-ex{(-oc;PEqJe&$qE(Mr1El&MVaM|3>kpBS58%Y@82?=);4F%SX)v{MV)D~1I<+Khthz3ulx2o z<^NZw0TlTQ09!ck<$gdgeOT^)lV^Y&xnbR|48TUIC$F!>t0bZZncoYS<+cf9Na@{wpzfbmX&cywbw{1lQUb(5)2Z$F zpTH&hd65&))a6 zl>41*i~DH0(eG8ao z&Aqq&NOP06LEMFF4~any9a$oYj@cCom~4}Q?1d_qbd#G03qEviv;NWfwO>V9(-%@c z$A!r4*D-K7yYll%PdS@Qw_$r;O?$0ihlAsA_A5p+RhQ$_KNAYN9fjV`uKZ*!x?->S zOF6u{W$jRUURk?oOU%;Yr?J?zflvb>vziwyKE?AR3!h4vN^idF(VKUh$R8~)SI9R~ z*0s8zYuInIkhnjpIeRiJCR@3G$U7>{h;hf5$2nz#TZ^!OfkK%{!zUR>FTD^qb{fp( zt&M$G^fP*$_~py;S8U3HbF(^KqSg8uE$6at1Y{P7#7Oz`N5jk9|Q0!4^E7{ zKm8*WTYNwPKcL$8tU;bbiQVINr}J{L$?S0b)C5~kLtyn})+L|Sj@Z5&+ZTI$ie`VX zzq^{}3jZpAwYl-czG&X5R{28Lt&VZ71UVP{ZJV_fLHAClmG@IwGb)q(9cyl1FWLP) z6znhNb6auchwsdfuSUzKSaA_teQP@=0+hqO#+_|>2CBBJ^mdrXurIT{$9ZZ*;(K3+ z^>r^#1li@Twf$t1+1(0rXzY*;Qw-iOVeAxqKr;PB>>^ii3}4|)x=iI<@0dezPs3om z?z^%P>(CR5fff_^r}K>i@uAKt5!th+#%x9|^%nHtwWT;F3vn^s{#R5nZzvUmS+&yX zQ_{?y&4f;z3nH@yM`8CMp91PjBbV`dvaR(gq%{lJu*g{ty~LABfL@8l%YF@NW zVU1R9pta?XuV$U-t7_<*0!gvw+WJSDjch+rR*Lue@8ED3S@RkdoGQ74lQfxWe|6~y zY)Px5+&R~>%c*%(V(>4?))S$6Ru`&XNO2YU%)3}+hz;>C*L~Vurt0H;OZVN>{itU; z*pH0oX81FTWQ(TKGCq&BVNK?mngzH%@19WKkulGzC7ZDWpEp|bQN}NldRDzRSjLtg zmvGcfuD)E3!CDIT*KeE9>%sYHutIhB!?4{a4^!l*uPC9A4z!I*zdZZvl{{`*aK{_| zKgzB=bn4^`5b>iAA#lDZdFw7haqR=XjNQ_ zpP9zps#;-yQq*PE{yvcH5#VIM+LfJGqU|^K?iyJY8yfuf3-BO7al>FVtBz#H!{4 z1ntIGodu)2v)<&CmFxY?ZT;|ue%(}RH4V;okIYq7b*S(qDTPB)zHT(gBqZ4nPRenx z^~evTmB}G_D14%t4t-cgXC1L>FxM1{KG_uBDFyCo0OGf;ex`hR9-tX-`$( zQF<A@N+di|siIQx|Q5V8jjNzYhFde(TpnMN}%y;@w>7FL*@ zqPNoZY4*Dezuw0r0<6@;Z3Hc%uP;GzGKqHqziIU5z3#e%?c8Tq{>Er%t(AKRxj)4t z(A-`miE5?v|M`8mLau8rCxjBapl*_SyP;ZZ1P5DtG@xBIU?NM~s6jB-`&4qz4{?z0R-jcxtPXA3k0bcxayn zj>S11t-Wki@MjlKnJiGy6T$Urs2;sU-LpIeiokVxcqt7`wQ_r8{0Yh@YRG}JeJ(Fm&t7$JG zu=-~#iclVCz&gVssaoTo+&kOXha0|WUA2rob4(IehLsAebRr;_YnA#`-=@O|4?6|B zFA;ZLdV-}1xrJ)@{L0do+)WKdSMp8NBFa;xJAHLb8QST2b`*IFYYSAxPez;J5te>v z2N}?4uuYF-q*P(t5l7%iC_29h^;9aR)V$XTpI9zvvo643LC@-Qgj#&*cgK)nU z+|=&N4=*=sUndjMcP(d#{z`$au}yURU@tZTo01Mk5gGm+IaKTR4$>}B|3O{qAag%& zxaLr}5<8{bo#~S^RG`s?JAx&iwq9Fpq6Qb1%MNNhcNq_ek*7-%1k^LS@H2aSqpT4*qob9gfeCBgK=%)vOGaGmNDtEg2xRy$@*M-{s_>xI;PrjkS8zPF+ zavJ9ucV{1ZODTs@bUX7*e1!3qhEtDJ7O};pdz6$p8M#63B5+qvMO|0+bmPyg*pcZA z8B507c*D0?cZ^+KyPeA1ij-EAp_iXE9je=2D}j6eCYOCnZ-a}!Q9aBNkdbQb*U`A7 zCcqZWk9I>)lX_QKn#*1a+n^$=yh~2}gYHzb;8F?saeGKS$@qP3sd5SZ`!bZeYGCim zi;c+|`xsNzMh6{b&pFa7;bNi6NA?=bZFovC_vMCCDw>w5HQF4v0OP4G?&+yU=JTq9N(DbqV$ za>UVR;~!^bmmVGDOihW=Bz*I^INt|OI#dnjIYz|^OXm?UMMvw6YR1`bV#0~G{uOVl zjBRYP{OZYZcycE5H496#_=Q65~aO(Hv zur?587*efg$VMix-E`d;2O$HaHMF)?+H$;nAW#MyyunoSp+oAKKw!bp;R)u&ELm!; zrkO3gpvFQaSBvuL#(;#Eqzt2Ajhfp=(7qF$EN(H*E~>?3CHZ`^Ed> zOD4E9RDXMy@Lb|_q!?nGa^z)D({4qm%dwPQsWbEbds`!7x&3084u@?T&(}SnOV0Ov ze}VT#0v~jmKYrIpM!eX|{)4gE6I$$@E9e^LyGs#OVvQOq;W|^d)u(H|@2B>0k9P<5 zRqUvxHh2UDR$Q|`-R_6|U#@cODGPK;|Gm7?Cw5}Jii0c*o73T1TfW_>S*8+Wji`Z!kgsXAJP?}7+c z6%4s0c!yj5G0ut=V^Qkl=g}bqLpya{Meb`_9apkBH&y$b+4QBj2RO%9r&$9VoRBg< zYjIzw58Ze@(2Wu9l|uDTMg19j2N`w_FW93M_h!}z=NBl&`5}fF)m2y&FC^Q|)SaZ`eUE*dZ^`nG?LA4nGQNBEj4#hdB5?@4~8leyDvQW24XXvr|zO zbFqM_TUAb`x`nEnCEyJNmvgdls%DXf@6gW^s7Ov0CSLlMy=aj6zA7mv!uWZ;8zP0? zUC(Nd<}s29okUH*Al1BweGQTvM5*i3i|;UX*~ zj~{$%d=tFhNJy{FL#B7KjAs;Au0%UnZ|sUeq!2V5q}%)(sQ$v8JFsCC{>;;3Ez`9^ z;}&CuhE>BV=zN^12NwOlv@4LUkc1Lduau#wINVbu@aiC0J#JfxQ4*XPM5H4{wHDs5 z8?`F@gNg7QyAK-jZy0KU7lIgFc3}^WW27bEo6CWCyLglGbiH-OAlcG2@(k-p9Fa=0 zbV8|xYfMe5PiL4C%P`r``*-iyg*>&^!HWZa4!edxb!VAYMUjSmh=)nW3VW6YB!o$; zDZ<#DoBIv)I2SaOyhJ`kszHFio>C!#>>@*=I1K_v8>twLxq5%cE@CYVZ^|V=SC|&NOfwUX#uF1?7%CAAi=vs(sKYfEzkOM#zRzj*&_xseJ9F*El$=t(I>*5JNdwmF(7t%d~Tnx;81Kcee;MqbW$)Kbq%H4-_b^v?xl2|wmDYA|vrE0@^ zzo(LUyhPIP<^Ds$4pfN^#=Ur?)Ml;_dbiw`Epy@M;FoLG?@Nfy`q=I;ZK?n3-2VY3 zx4W-a`QuliFUPFVLO;9qF4&;@mhNP3%_%vR3r-gra^#K)hF-1QW^hYL6A8~msdzuH zG`>;FrJ2VKCdXI!B*ELBKJTw13#1isJC#?kKU@)uweK-@7fi76mW2)nPlumKSSjxx zOVm^`REtJ95s}Jt3-phPD{O#I92%w;09!}%t$Wxjx#PgfAgY#Kh>H+;&i<{HtZ*>b zRA+o;$u2W1&)Aw(X9x#hD?~)Da2M0QDk?8PulMD|rWl?Ldtf<~tGvn?GLzr7fvB08 zO6ifCYT4x z7Ev-t`A$T|S_-;Vv&<3RCtx3yjdwyheAojkcEJ6}n;vu0(PDKYuy5r$5{%UeB-{xV z$NHTz#_2`~44%)7szKI}ecNG5c6Bj^p_|;FdBRcLBD_^&gz*}}VLCr3*{ieG!CLkX zxd!8K;X6mPMM~{uxRij}Zru;eFolAg)&o{krbyOy&OuwjKz zo5hjv32(&Q$zn1&i8617b`C*dIIlf*hetXJh$z{|so>7Z@Z=5lA<2ZIhJGV$a)c)R z)-uaxw4S<*(C>|%jQFMeuntUmGK*6qz1}#bG-!i~9)YRqaGJHuk9XB@cLl$W&>xQ% za)ORP@mwQizO--}HPwQ_Y=ZaJ=hzbI2Z%2TiXtPMG~Azf>4ck@8fKrTJ|P4b&vex>;XW!nkW5zq)Ux-P~D#xKi@-!(ZE(1s6>CVwiH*n_c36ueF%W54-ap!Sc*G_{?kXys75e8L9(sQ=q9?tmzZ=GZ}IsJCp ztqnlp@LKW-8M$cv1ATwIv6!KWCU(nYAtyrQVh&GClnH_LM0i5cc6vik%x|`h>%c+& zu6cu63hE_1QpN@&A~f39aa4c)a1im3EMRM>w_6~xqx9jOYA1HxDGX@=;)H9kp(Br{ zi*8Dy##uUc1noK_;1`qa)C^=d$Ho4XZ>*amC*l4~_?w~MPe&xEZn8|)^FyptIkXXP zua32-uxQ-XAp3rwILoLjBsTB|G=)YClUtj8jLRuKWk*t5&^C#N6(GQ4UuuIJj=+Z) zpKN4@osr!*6tU8)N7F?|&5paDJUm>D@j06eZ!Zc^5D{}$y)d`9@JOmiskV+=fXxlp zqS;L5>-d(C2?g>46XT`qbR%S+MZYVE`K?nj1p zoMg9)nTrHZ@{9%q=}(6f+r-b8ts@XNi$;uLL~s04i^``$4O?KqD4bNLNsy6#^}p&M zPi*wh5M7rOf4hl9>T`PQAwYOwb$Y(f{|UW6X$4MW<26LzDO>h$PI^4Zp@)e)K@j=! zYYead4x^pPa;%`_*d5*080aiKxfR?Hj!aDX*BJXvn% z6PL=Ta!zl23;YKEuz~rZ$#r5s(S<40jp-fvPSw6@!Us>SJbHera~V*GPGxAMd)nfN zey!r~)kZe@YLX~1l)lldY|GR`Irw||69vx1BO?h9PKrjNmKrz`1*?Wnm!ysD8W zE;*NN6lk=u56MZu7=Btb!F33f6~(LdIFfvJM6vyzR`mltbjq@PjBXTi$?|eSk0)jP z6duQ#=C_<|wf9_#*F^A>$?8^dm}PU3inFUxkWkW%2>1k%Ux^a6r044GJ^I) zWK|m>rR9=+e5PY&3Ns2F%5`Eh1&#Mj!^fi?IaYUD+ zIM#kaI+afw$!|Tw;g<4kTJ?yK1!Y_n*yGZ>J`nN#(iE43%Uomq_(QUyeB9MI8B6xr zH=$@1!lXq!2Yca07%SEtk;{zAs|KPgJ{cXgTRa8eE4j-Q6 z6V9^1;&n&qdO5tnR;&kc{J*5iO?D*o^#plYlf)RMeU9}B z?BzEOMJ6h?<9Oj?mmMw0h9_0_vq7rqNNJD9*GBB%z^|- z=~ZEBw$d8PlfY$D3fCRGq0UdcbdlJjCkZ)Ca0dyN<3;nl?&nu3H^5Q8Eg(X z7&Ltdb2}bC78^<3bXTmS3$%w+@%+2w3p=>y$O-7{>^Dl7H5wb4V;!b(z9CxFY>(7L zE&t#rc^EG;=$wpF(m5e!8d&@kv;T@0d~S7-<&YCP>v` z`VcW6(gSB)NqR-5ii63?U9XV>cN;M+mXFXex5Rr$54(xj(wo!F`Tb6}TDoCKhk1!9 zJ5#8UsOo0LHetj`Pn0&Em?*tf-*qxj<*}b0=Y_j;c)+WnR&pF|$_6W)UT74-P7P%{ zDD}vy#qTnh-s4f~SOMFVI?B=PE9hFRq~Sc_j~8XvNLvp^sIs2e_HCj$^@xW^WTX{t zLmfLCxJ$&0iLq5}b<|0TC}?8{scwO$6n|NF(KLlpbtyu}YQi88b*)eN2fmOexyGa8 z!#IOaIoC@_G8EU+>)YUz$ljmb5xYkB%0-IGAv52epGa}du_Q~Eo`mkJI@zLvJM!33 zW8=m=aXG(T4YeyNzxF3jGX0EcgNRe_tD)2Lnt5N!yFGG>xt|~@1S%t;F*0}+00^4aJnF4VD8ecCP!Klr4yo2O@s2Xmf!Lvzti>blMuKs@dl7nFYaE2{BdYFV>^faHN zl(Jq_;&RpC?Ve>+V31jDie6Qw+7P&b-8JE0JrrUG1#W%8A$W_Ci-d$_| zf=hAnJJe50*msG*N_8Bl@%agA)}?bMoX{5hKRSJVFWhPf92v_Yw&f8N)UA9Gef&iy1p@tYA?K~$o5;zOs4&T2HAPm3gjYw-V6@d?rDVc7c!C@z`COg-LB=b-x3w_i!J3=~M^es8 zQL&I#;J+%#Cya%`BtdC)DY(5=H=TxxbJH-w1T{2=i;i&qOS2q8W^Xtbv4!M|kv);D?s2Y4-Q&W(zE<%M`KIgEc_6y(Kf$74 zqnL`+x`^>=!JfFm|B=qfe1eh6-U(2mJ_qgpX9?9sexC((`y*DJoL8w4JhbLodw#0z zQDRVs88I}bjIP=1O;bLCXtUd$>%&fZGW)~ z?_RM(S!3p*lBD#l&4LjqE_YaVdqq%|dCXy=)fBz2HIq;sv&$&{l&TVllOOl;kmVo+ z)^>LwH`xBIS@>$}AK1!))6E71V8=wZ7431g?>cQL?MP6}x3ND+0d-eaQRVsB%QoZe zlDTb4mDxoC`L}c?w&$MM0jAA%1C)(RSb&wMrHGKABaIwd~lg47#)Flf@j&E z>uc|#vbrkvDF^QzATahBq&HU9Et49SJm>3a;6FaDZj>iP`HPgGx-s-Gsd_JlGjsT^ ztmnuKQX94z-aVGjEhsJ`RoxirPS>SDH7YC{P0fnMRKg!t};8+fL{NYH}UR(uJ>Wi%M-{6uh-Uo z*9-zB;U!w~k8S`BcPa^2$9gI{vvo-@%BR=`0nNPzgLgz~V;1Q{TMp1Wj zfq9=@PVs2o=^0LvZzttgZ^^}AKV#H>^XgYf{xchrKt?LaM>a9=3Hr=A$xf-e<%vfFp45Q$xldN6%L_ zNmiYjyCOP2Sj=^*0F(ff4M}71!2hUjYc%MN9$~g1=}veYu-Zh?e(^X;T#sZEwN*nny)_o-Q`ixB6naW@C4A6%>XPqDkKI#wUpOSwVg3zU&4! zCHNGf|NZyjx1s8#VWE*3i%su zQ&@ROyDSrlEI%KjTzZZD+Ud6eGbIGv5;4$_LOHFd&7b_8vzj@Wo7c40I6eRyygIR^d5=N;W_1j#k=(8O%Ndgq{CuJuea{>PM7~ojTeBJ3p|^ z48Ue7oa}#`Lp%lJF_vvvxh5m~T|kz3>(DADBSXQb;ju}eI?l7o{C;Yv;I%hSLWAx; z!RXFe)t`SE#&9navjH!33%m3a?ok|9xdDpjRJ zm87KOfX?V!1}=>Ua~qjySL7#qiz4RVZgVL+FNZhgi-lh*r>4;EFr6vhY_||A+(2U& zR5zJr`SkR~3^{$sR%48Fu{qnBS;8LICn!aRRGgkJ6{bqtk%T`Vl2h-0vAz{OeIPv6kcSAiBpoQZ6#SFf zmy|JRQCPkBH(;>6_!BhYNu73I_NC3|q{QT`jhDUUPeVQCsh|Bp)mHNvuT$ar#R5>= z`Jojkht9DG3A?jN2Clrj3lX(qETFF@5nQo=SC*k|*Tk(VytZQXIU_yW`ooK)S=dGl&}> zT>US-9Es2|TW1ct(njx8H%cFe6(B4Rcn#Kom?BC@eH^r_wv>4|8w6C$O!cX~In|H- zrCgjz%WG`kEE{};tT&z+MIwKyS;V!d{Yecbv4IWXbqE{~y;YI14&S7u$hy{-N=~l5 z@jh$g>H(0X3ii4I72Z0 zozNtglp0ult5?*V=a%Nk#9_3rWWvwE_!PYuHuY(Nd-*`NRxF!oDg5OE$(FSu~*Dyb1HQi zl_^$0?QJNaTEGs?7Fafe?0+x!v47=z*zO6MJ6RJZ%fUSjeFS6P#a>b*PzSJ_*!%$TW&AYCWU|iU^}lTBtU$oD=4u zr1#sq@e1kN+G-$zDi?RqXfI)KOdDnvDdXagF9M}WiDawzE*c)s&`qWVCeoK}Q0r|) zkMVFR?AzMu8wnLdZCH7|KkK&l+>#nCH&b=Tk0v&59~ie|{BaEg(8Bqr+A4Y`LOOc6 zCG-h@oSO25(%kSdp7t_&=}e7G%SJUO2O(tMP~bmtD-7W;Iv#G8LR?vrqf3s!DVFiy z<`oml{K5{HVe~fem<8TxNSt6Ks?o)MS2wW(Qz~5jYLgxN@zTZt<6`2fQt#F={=OIY zfA%D|nIG;wLr*NI&XK+=nOlZ46&3^s32OuGI{Sce&or5O|9i><8W!LCN3)<>6^k1G zxd&;i>QR)@r$%QaK6t2?|A=8L+fEVeP9H03EExJ?an9;hea6bmAFe{}DL?yG&+psP z*IIcy1)%NmXVRSvWK$egPu^nluNfBCJ&Z|a@hXFXq6^+DWMW=`fTO)T|QHh8( zyunMbxO;6b7C`ep32wHm^1ab;EiHrJaKb-Ol?PDxCu4ZZgmid?UOBBC@w48{JBz?< zUm5X-ia7h`6$X90mqkV$#&0zTTMVie@uXH`x_Q^tS+|K*0k#i9Qhgi!AM9I%mAtmk z30=wL>A@^mbxWGHk5(nL1oNb&(32{GtmsG?x446#G~o1QSw)jX^<6B^J7J{EMW-pM zN4cWc{>}qtb}GtoMHTSscO#q2Vw&?>b{QZW)Rjy2unDVzq_4df&XBRF)G`CvdPk9C zl2<3_*La}2nB^g&nLjc{_!00PiXJMSyi0+Iycrrj$CgmKBgNr%scYcwjI>CH$d|3YulKAA z7I~)>D(k&CU8sgv$pNWwg~E3&8hV^xJLC++bqB9I>B@D)qn9UcLNUAShK$g84Io_T z$I*^i`~7~xOx_dYC;};&9&pO^ctf*cgckkb%!~m`o^%(X%gR*#jfG(MX?Z*x?M~Mf zFziw&Z$Vh$!FqBD`;|m_hHH+s!(03C6G^q`GQ0;-eY8ouzYQDUX44+Kw+sX#Vw+(P zsCKfoLsP&(vS<`NRe`F6bFwO5;DZK2Tlz&vQCH2w8snP!<~Bw*pI2aB4X22T?Ut2u z;*#o+a483#_Y=9ZaX$$X$iDBzP+WYTQ~0)^u}I7wQd30GZ*L}(xa~$mWaxGowWRec#RB}W|rSi4K8M~-%*AIm|j{_X94w$=kx`+7<;P1HQ>l& z;>$6Fl}U7|Xm)V<|8QA;VOjAFfkpzQ@9dR_a|@`~U>IHcOVgMEhkgg)`bVitV0|82 z>`+r#m?N@1CqUQ7WqxuT&vIOdCiPK0_y(=w03UHIL^xSC^C1E!0ar}#F;nW$q5Ps?NeppWIJTdsi*m3-gP_|u7d;md@98sXZLRU0Vq-b(5a(C z%i^_N%pt|IN#=NZfdh$#5%knFKLRQJvAQfx@iaziLRLPOQNWvK*a@F&r_cJQ%a+~R ze9b2aRA3S`k`Wj(5&ypYv}~W!L<~{6#8lRq;vz^)rEN;bi0E?U^#j#m5&R!F(??_o zlwHIMbJq&DU5V^>T!xWlGtrVu;Uv}8X+*)1NP2mlZs#SESge&2kZ8I+m*_Y@v+>?o zE%N0a&eJ&5h4;YoF6I{m^Iz)6)drrA%QWR&N=6BI7>B9X1(eqyr-2JSn##UsULMp{ zLpAFJCAgH+4! zx69Pe$$#CNyFVRZTROeTOiz(yuKGpg!|v$QUUfGfcc9`erRI?*?S{^kFyc5A)B_kY%I*M>?iik>_?j?GrP+-d8;cRWsxvvurP&D&Mr{Q*?{r5pi4Gj#z7&guveUHH1?7)xZq zIde=A!mxL6d8ARENPi;f&L4LCI?B+Fm_2xY{!ofE`WP3A6BqgHm{gTwFQX(|)&nEi zVzsZzD#ft8zMPTcy&ejE@obLFb!}MTu4rK%E;&!h`$mrnQBy`pCx!4%x2=xNj2P5_ z(^X_>jyIti2RbN{F5yd3hDq?B$xhQA<~AGCgUAer8>0$c>ViHRN?bzl!9Q|E-UibX z%q7Km+bL4K^sP`xQ-aiu^ezyhZc|3?Ucxj+sI(e0hre@tL5EwiI<7x8RJcvq^=FrXp6IPLBSIc6guluZ77tnMHH^Ke^Yj!NN+sl{&S{`O`v=eH zibFvxaB}l=nHjx;mg6!q7E%;=#XX<}to!Jfla3!Hr+>8cs9G*JdlX8&5Y9Tl*yg zFF3SJ6iEnoE7u}H-F+nGoRm@nLl{MRb920}cn{4MZknk#@N_bHEg_@JQdS(z=#6J5 z*|;au`4x}-qzMoCe8OstD83hAk2G2V!5c49T?fJ|x}w2~E!aM|J9)q7t4dDYEZ*m5 ze8^8e(CcIruLzZGgvBbGX>pOk-wJFfgrhB81VXr`8BH)VcKWy#`BHBE5wN z#Rt7WapdCqhuKO9vbQHFjtG4nuKSF%D%`0);neD-P#I;^kMVa*Zb?pMs!uVhD`|>c z-w2q--79gNIuhQ3rNOF{>2Hz|yG;{KYVF{ZdZw>b;+l;4zwZSZE8%@lUpS@~j@C}> zQn|2C{5M_1Fm9@##WV~Q1>W4~sIl5UuE8GjM;oKp@$@NoqJWY;77%SnHjoUwYM;lr z0s`nKX1bd_n?CT~fYR3o#9E?d8z>=I+fk)`f;&{2th{SvhA3sJohN*57(G^IY=)oC zGwS~{@zewx_>N>nhf-FlOMk|ISeUV2qd@t?#EaLgFiD5!MUnCzpma`soN9L$R0QJR zJw|0djmUTPFO;d+=+7Cet&Zh-S=&7}PIl|Yr?b&PslK)#D8hWMK@Vye*V!@SkmoP! zKg4pimZhc(NO)%K&G7yJp%Ti=QQH|!@OfGCPhd(s)%nKso}5xp~-XRSmkg{F~);Um{;R2KJ4m=S? z?E@uH#$KN~^v7q^uvsz3oXsGV)k$UA4Wj)YTHj(g_2=A_9$Y3{@ zD0a1-IS2o#ahx-7d!kFJVvM-sSFJrQTf_4E==pE05k1t)HjOUFU`13n&5@PWYVL|F zlF&Z}fb#5EY5>fMv5`T>BKEy?#=R=IS&p;sDih5-D$L}^vqQ_{9MMOkyJsjyqO;+V zT`Gm;vP19$z3*xndkC%R#@ib-!*gs!qtuOdlzOxd5$7p*)oY5`r-NfucvS6^lZ5G} zk3>}yc}Behpa4q8jIBMpa2wxL2J_4d}VTOOMb z;^Aj1!~&?*+IYq_IF8tr$&w{@@k7aoU3M*syq#FJD^~JvDWbPqP|Ks-YPorMM)e{& z3>{r_DpbPkl$26e{29SA37uFXu^KA!^Xelyg}TyCfyh4xUK@CUji4t+`VKKOc!jBP z*mACigRk)24)IXJL9u+FMk?o?0isl!3e^yjOXG84J%{f5mpW6@U^Q%~c~lWoc{t;9F{dse-?(s&{{R871- zUym^Z&q=l@Yo~Y{3Sfy?%R(cA+XBwLF>7{OQeQ^5%Er!Fgg z%3hzZfuK4z6nsC6%@I5w6yM5Zi@2>jmlEc%rd{$#abVu){r=j)R>@T?Ai-_UHs|R? zH!E*Yj4n?F!B)$n49oBn$-Kduq>$ZZ8RO_@2`hd@PZwt78RY@@*?o^8s$$3bJ%&A? zd{e?uw~EBl|Y4yP)oqNM1J4$s1*TlVfx7HmQ+J^4}}&C zTjQW}J6eXuauU7lmBVh@;BR`TNTA`@9z8V_!(^q0zwD+!HM<~OUzr37^xj>5ZBlp7 z%Vz-Uj)ma`KTolW#?H12m>wuaY{P!S;r{(51Ho?Qw1OT`EKjcfz9%{|u1UL(cg9kc?dkwdl1hf#CNkGjKa4H@bmc}M*| zF#epz!D%Rg&HnxXfp@x4Yuu4NX)d*nt!`=8Yp${@z>_`h!U?LXVL3***|A45ZG=mI zgIdVF?59Y0zgwpV>A;x2M|ic(u_L@Zg2m)GtZLii!;p#4J&k;Lz^(K3$~`1f7+mj) z@hiJlWCsRaoJ^^EwYp8>T*UZ1pZa;}_1RYc7bn3e4k>5PFJL*h&(BMS>hD;p$RS7* zmUlzJEn9y$D%po0-+$wQo&*on>0Nu%-W8YNT}d`J+XKM-)@_~a1L*pC0#3=JR=+NH zyT(jy?9cDme_kW}OuKCy-uSSeQCb)Co1>A!GnN(e5zgU%OKTx>Ydu6T!Q&fa^M zu}$pZr{1{F%a}!sST75V>DNnW&*pC;{d&e+CB-=jb;eVb{;obPot$zmy(aRNO0Q(5 zmO-N)5I)rrL@h0I^zv!T_r!SNE?vhyf#1{bIpjP=*`2j2q&Vsy^F4bM-zz5vY$?BJh~Pv)Z2e^`Lr=r6x(NdkU2 z{o+5NDJ=(+A(jk(@ccBFttn@5|KE1V&*OgZ)lb+lFP=f6a5Lnx&(Hyvr58ocfw;`& zrT*ctRiSx0j>AjcphKEtWc}EsmGklGpuhhW$mINT2w`Wd-@v`{&tLxZEB`+d611fA z!_dnWB{Hio`!AaMkDU33383_|W-Vx%%5pH6=k{N@;2*~ToiBzy>@TLS`)RjeghJ)9 zFMFRQ!e2N0@%+;afi_e#G`Kt;cBO62FMoy2{wrr6lHV%{YA-k4gCPAEeDC$v_X!J6 z_AlHPd;wr3>L`r;+=*Mf?Y~lc{Rv2TX3`+cy~}coa=(!^W*-Zd1tr`)OH$HSd|aXa z-!wS?6SbfjIA9P*Dz0huC(8m5_ni1I-vXl4CULnGU;?Sx#$WzrjxA@8<~hK#n&atD zMEfhM(H};DL9W&o4S2r!oU{Ez^M73I9QU73fEdJknK~HbHNJJr!byXlFWubJvj_Qw z-2pBKV35zFD#1*}PvaCn@8PeD{fN;8SQremSe=&iL~H-&vWhg##oN9Sx6c&jE^7}&jS$chqI0bg{dM6OKwxQ)^CB>BQdAx7wEl=)a$qZ^Ij`%Moa zN^j>iLnkMIO*uWp==XU}Hqju2X>wEae!591fZ3iY>0RY{u(qCns$Zt{p zhOd2LEwDmIpq_e+EAH)q$Q5_t{|NQPftGN8b)tFu$FHUpEPcLkX2%!W&XZ0b z*)@0wU{&>$BOW+_pZr8*D-->|Z<4$EEda5%bfoOq#|ccI4}!Dw`BxBre`UBdOX!r1 zOwZB>he%TMG^wABBG zX?Oc0fja+n^vAaUBI7^Grlufh%~;dtx4+Cg_;Q~X7>1wdFwdk&y8?u!nj7izEIj-3 z)a&d1gGvXJE&yw?q~6ZS4}JONmltdv5d5DO5WEg(#-44PAECdn=JIbuKn9rBzej%8 zW3$S6cD(VtxUw1E2Y&pN+@%6|>d%p0>KP&*?4udUss${=Ybo+Me z_LI118icsB{P+D4Kv4hE^dGhI0cgud^{xPve6Y*^27s(@1kLWtoOnAs`32f#@X)IH z7R@Z(798%E^Lk|ljgPxq@pxVhCFsIAv8ejrDbQ32w!AFE`|RfdSD%jZUriWbctJNx zsQdQd;s(XEuZB+l#khosGVeEoVDGxyag!jAK&^1IsI9AEs?QQnu`Ub#X_uh+T#iY z(Vb`r=IhRrDiH7d1CIKvZUKWC!LhwO(eepE??2%n2e(5yx)hO4{<8l+tX@og(*pDf zkd7voo&4_0%izVmGmFFLo!cxq{zChv-4N{_r6=a5EHFO*jZho_Ol6ybDF%CMp&wTy) zp^tav9B_+lZ^G7mnG^}O`@b{#J@cOXhxe_HK?v|#1owY`bpEx3$O#ndlHqo$${yLh z-HXFbzu{KQ1Jb{23FPmdF5iu_kgA82-rxQY3uuBy(OOq5E0}{I{5V^1;kEj5GN1oG zOTV;j;AQ!@k*_`pMu;WPUtQ9=uq9)G5Q26)OFx$t({hVS3%0d_iB=0(IZbcz!l?t` zm9Lc^82P?rIBrZeOiFi=!M{t~uT-=HpjUQxU?-qg@VzxxXTxCgcJL1(|KnKblZ(L1 zYljbSg*E}G@wrYzyJQp65uwQ=NK(rD71|f z)Bg800q5Hz&?Z5yT-j1i$}j5?_U2A5FzGIw3dF>lY6f&cK$|h;pu(AA-h>m7EGlD(CDmx|9;ae zz}38W@Vj5fbLQE_b2s!W>$Qms-6p))5eVF~^*`R@j8L%TI-f`Sv)AbT($;T{UO|gF z2gV!P7D%m~^P0hc*4DZ1{5jtK$7_5ay2hQkujbJ<4Yimx?>}evyO1wtZ!PdPxl!Ns zbgpvNnY-Da*tqF$2C;vwBV!?9d&hlE<@*&GUqZqkf8gJgbJ}sR=&aVHi+~|t=>L#0 z&*Pt6$^ZNQ*^@w2FV#BtNh`dFTJdhdJXx@}e|$f96ey=0_rAOHhQ9Rwu=Cpvd$;sG zaK`?*-!1St&o?hV{z;yEmW6*|wzJSc_;UeXd;3qyeMRf9xNuf5EqFipF0gfTEN=Y( zJm%n4Cs+Qb_fMJtk=Hh6e(GbYQ24{UucpQQGp!aajs?otc4T5L6g>YZ`1_W|{F?^` zXaNa9*Ja?t<4uH%^Phk5YKiN=`$Q+Vf>$ei9=Cm_=cljF)0_WrEzX((Iy1Rv4=;&3 z`$G8N-Vd&Wc*B+S!z^#CvwI=+AKpLd3)Xy&c42Bx?r^uI{WwRqPq*ryPC8f>vh8Iz z@0l;(zi~pm^NQ)1?`*S|ANee2KbeNp+s|+Qm+z-VL87B0`?tSN6#f5AVrV~4pjp{< z74p!GLWS__dH;b{`XJ{9?8{%}R(^7oEsC#afAjm#p{xvR#ARMGWmxh2w@IMqwjd4F zl|xv%FaW*k#|1{r-#G+Nc7yFc(dohzk9|$)f0E2|YDPb;AEI;b%U3e`U_|fnIS!fo z=7P)q@yO^5ZO>Gf%f%N&iwSJa=bCcMYey(+#4889Ejg%e-@#oUb zfwuMYo_}6+efZx$e-`B2e9S4IvY%gG|2q}5(A)un1L%dm>TTPf?OfFL?_XLVyxbrI z&8^fb4f^7<|CTHS!`=a7WLLkLqtvlQ;{S4cpyP#(E?5;Z&>nAAa{Xe;jql##{^h@B zDe$+3;hsN%a1KA|^Mytq#q19YEFZ`U{960EL2R+7)bh`YmG3^yul%fp{*57{otdEX#a)I`kNr{?)3?Yk4OstDNophgT7ltJMwvaL=$rHwr}$Q+#uassP|>2 zFhr+uw$Gc3RU#uD!0AHF^;-1UQtjaIJLS3(H-zx=6-b$>+@R|eLs9t(Rws+5$bDw{ts*X#NxrsB|oN- z%Dmrv#qzT%@~f{vXMk9AbN0#emf(vHSeW`OX)R9a&mUpwICkleY34Y@IJDMhao7Limn)@xj*NZc z@lQV&9J1)S=u7gJzIgE$E}E4n!4QWnAc1}w__Y_(;6U_N3+Io>3QoPg?Qb5PJ=@RH zNkQ(}`|kouwAL-u!AsVy`SYv4EMG|2XHURMK2gI4nk@Q@WoW0r_2ZqJ;FG5BbTq&7oD7(o9e7@uK#6}_QwzYJ?pIAGI{jHcif-; z(3^K{POfhHT2wFG;q2lO!Ni;YYr>fDZ!Dx+{hs&J|FZIR>-JuU&Ctz_NONlJ|0=uo zxTwnXKWCWH8E_Rvgj@tylOa%XH*-ZbvH>EWy>Z(r}dD3aiKrf`ZEB_q=D$eP%dk{^K%d-sgRu@AG|b?>j?7 z+|fFeXOVCiQrsH`t2?nZUl0zH{>fl+we;^Kx&4UBne){t8l0Qy=qHN+^VIIfil!_@e+4{c6}|z8Sud zG{_^}CB7q~z)RjA)o1Jbydr;_UXxPN01A(UMc*IS?ndhq|5a(C`+PLYov1fwf?n3U zYwJF4{Ln{Y8c{YP?#n%f6c^Sk<9D2OdJN-yNjJF%fr=D)NJnd}^X2ofMO*~fYZLvK z>owK{fWnyk8e|P!j86D%Pu!PM`=-&1uLLMuUD!hx^HWNVJGgru$hct;hce9F+(Sao zs-zahL_ot|ei%sca%AQg^jcxr<;=I;{`7d}jW3hT^|eqY!X-6;PDqaNE2LYi6X17>Zzbx?78q`@|( zp&11dVTaaaQpe-ZfV?}-h9ceSM`6v(Kafa{<)jk`!*1jOV;l~t};#)6AWct4!J7#HwSabke8V)vj+B^Y@ZnbeR zfCrD2yic@0Lk-}mcX6ccqg~F7FpQQ02eJyn^TDzKfgMWv3H+F{Qet!s2aoMNY_f1Y z)|`c9NHB4RLhja*;oiH4;vCu}D%A@NupIl5VIS-@Hz6`c{~~sfXQ6?84pzYPk?-8P z{~Fq>ZwxWR1to`%hrMpyW1)TLf|qqUtuo4$9Qqt6*{lQ<`&e^0btpbwSt-u`Ky{@) zqjfc_Td3o$w6gSR*nFmnbF3zvc{QwB@pX=2D%LEVc9B@LzG9g|_X2o2XZ;WH*melF zQNg!6KxNuALhXXeJhNT`KboUWqY}jnp4J43Dl-x&p(%azXgW(%%M_LLHyqMvaU4m) zhEFjzesJ-5o~ZgztX|Y5iSe-N_VjHXDH?|=8$eBpB5>b4`AS zVyy&7cf4C|bKe4QD{3XvKoh)Huywo;+&3+-Q$|05S1H3Ky6-ATj;nSZXy&e@&&K9U zaNohoKtEkna!V6mP9yPwykOwkRcD?7xNN?jvxS%;ZxoK$MRLDT;PjgBo6nB^pX!kC=MegsmELtw4C@we)MK?3~yPsQBaS8%8o%#N* zM@c@XNdN=UWAbXzt>Z~R>S-5ewN*6o&lK3JRH!D^s7a3i)PjkGjeZuu z_};__Tb;iu#Qc^-G=UI%p;?fTa0h3eD0T0q?|aboj6*by9Pta(5*tEOcvMC-$*YA! zav_>v)ll~r0TtggT;*d?hN~5R{I;iEPDe}!EMC)YaL02M;hZo=n$|H1GmA_IEH>`E z^c`|XeF#?X0JkZQ34oEn0UMuv&3h-G=LaUNd>nkynz7 zfKdx^_Oa?s3mrpqCYi$o!aLJ4frIx9em$GpiONv+2nX5@`Q|L-$pIN{+jvXC#3PTz zHTf?)hkw@#+-}>IO#$B4_rzW+;Kj0XaJ$CSMKB`5Ey^6>1rCRD(o>2}5VVGEd`Q)4 z<~_!J+#+f~9TxzhMqatbxo*)j0=kX7ojWGBpzs(l&d7H|xrs1wQeG!Yst_Kr&Z3iD zQP(u0uNAC~yP>V>9zyB8THP%?iQ$-8Xs<2+<3wKgZ7=DZgi9kfEsQ!I8`g#jlUeeu zkhj?-T$B%77y)a>H!=srL9fz=Y^@WgKx}S~-Y%@n26-A3BIY>@)0Kdx)=7$^9^LH4 z2V3Seu!>ZE!N9^n<%I}8Fp6?z&}P^SR(|FqE6q;YW>j_wnr7 zlYXcpdEjA9<|E;e4G|1^jvjLVS*90Y*a(_dx1`R|{}p@Sin2Vl^8ps&*%=5H_|J+? z+K*|cb6%gBCWGjYy|tugI!nwPjP2dkTOkXHsGFzdPD^62dE#;#$_TYv%O;Pi0(w!( z{MzS;5D|o#pc|B1P*Hv~xLA1Nav<6V{3Re*?7DFt7APw)z9hm6unXq>#se(28$2#h zF0)hlFEN*)lOH!In}@A`svw%ix2||XF>{NT`XjRrtGUPWChyU@?U|Ycey(xMLmS0& zUk4fDL0EHNY)#`9Z^<5GLkaXBhZNUWV-}50uf+HPo!$^DB0R%ldkBKUxfreO`g^+j zSCZRVNvu0ty_M`fB2gx2{akU*G*Mey`EpmM)M5Xzh|lm^1?G##J8xprW7 zg!s*O5k$qyd)G|nC}jCagM{X(HpL7?RQqA7@C=UMShKf?=x3lC=ilUS`XabkQlFJk zkzzB%fB!o({g8i*!6t~T!^K}LoRaZxUu>dA|1Qkka2zl{xY{p{9jQ+#G+vTIpZcC? zx0ZIxIW>>5^y{%^_PuP3Asj&HeW5^j?dTVoo-raJ~ z@%sn&)lKeN@e?eu0EWiq>8|!XV7jmXq$T3lJS|`6p_N!CQi?nS5yHP~wTT>hE%!2{ z(i^5I*RF(NVg!B@V3c1oZZMtnZVfemAkDTgz;tU#SzR}S10!kUHvJTQ%%Fx%-ZO^^ zLPFUlBNXXWw4%TvNC13a1}*)Vz2;Dg(&S9_uii&raHpn(q&sz67&zjmL#1rAx8|qfB<96*-CXM+gQ4Pb$RJLL7 zwf2#c)}j3aB-hJ9TJ_}G;p(lE%y!3*2RIN12P@)W&7z96WD@5)j{rL4!QIZ1?6$vz z!nUZb&TluxNQP>o7yn^_CCRr&c>taQKE9%AMl)M_>C8hg3uj9tZWv24UWuPlPKO|# z+L9&ECNW6v&#g7k6N1V_KNPeyqpkLtIBx?tkR!32^AWl9Zs>k(ICOU{x}Uyvy!mOt z;)2|UhpgogP>b5Hn5Yhr3v)I6BhZqjI-K(%D2Btvaw!S3zAxIX<&gz$NOGanI?4P< zO!60@D2VuJ(YDM58p(+#W%Of^Ue&+5>_WVeP|4{Gp8b-k;ZJxm#=&Z2MLQRL&q%>#iQysifET3%1oS;8+BwC9NB5K!~lzRhtl zDFbIi0rhnJx;Ny_?pd>Vwi$qn$X(oqfLhemW-=jXD;Q<9yQykdNYh0Z{y%`x!J24{ zGCkg_ti&mor30JeltaA`G!zo{HRonO9-#=Akgo)KWxXzoNZH>cjGgmU-6FFzd2fNe_dLCQ|&n@I&~V`3oseOq<9T=>Np4r44>7B)U|V0 zhHB^>eZ!k`*`9dW5#vEAD;FoF%YLtTnV-X24;d|Db?1~L0RMj_W%it^awRe%==})Y ziijtFmjssILqCnw7BTxGb}(K3*N z6RXC6dM>;gj9`EtQHD!AItVL|)#zoPSG@Eb?WtFl;Zi*n)Kd~x!eJzQg(4@Pt1ZWS z4)i&`OcwFp{w5*PGF9EGft8Cx=XHIP|Dx6j<`axTZ9fbY5CKr10D&gFde9e8xJqN5 z@Rd9yXOLiP%2jki+@P=U{T$T$((V@(6P_wvU%4I~ThI zXry%QrI}12q4GQ)XkH-(9?!9!UdR7pEby*lqlqnAA60b^7jeul0Y4q7iy}hI+2ZSP z`Suea%Y?L2E!gsUsCkDA4=;xHMC#2?r%_NZSM*5j>LtGbNzwlEpR&iO%vDCtO%ms* z*H=ZmwLEBB`e%VUYK2(&?Xpq~f1PmrMkp_NlvFn2q7yfZC+WcWnI! z7sg@4X;7_4S~YX5M)EXlKU_i_#P}cj!7)O4^*;V4_( z#n6dJy?5pT9H)7nfO}m$YPJVBN1Eh?;3F5e6p}tt;@-l7!3KIEcQF2PcoLxJVQ&c? zLJp5F7Jl}m6E^A5z#;5_js0Bw=u&il6p$E~mTj^u9+CWxtm;2wRtf^9sMyJ<>^v1; zSSjHs2`@1|3`|+o_In6ylGq^sSUO@qg`Qn%Ulc}NJR{uYqa{9!rvd0{{CYS=CjO-{ zSPJ1)hD_%s+8-WGm0aXe{G0qLpzcAxywgka6>U1k<-yUd{x__{NUKY@qRsMw75dDN zk8F-&s+skQor>Nc++;FE{G8d(EtI6HKj9&Oh@=HQywCZ6)@d%Is*oX?unq@U%#Jkdj>zDGzmY^*{O!D{{(ppr{=M3Y5jDpSrSd0 zwt&DjUiY&(3Wj+cTwM`mC@YK@ABW9uPut_lHpxt|3s7%~=-DQN%3j(fGaA!Nq3*1% zyOmEGRlgW(mK;Ytk3&l+H~y@Jk@og*gTxah1_X#PFGO4SN=KUP{K%aWy z;D&zpUf~V*uiRTi+TPYV=6;z>*5B__RCEA-7=&oWO;%ew(GvW7$J_81*_@b!*+--G G8~-0_X&zhv literal 0 HcmV?d00001 diff --git a/telemetry-receiver/design-export/screenshots/i0xK1E.png b/telemetry-receiver/design-export/screenshots/i0xK1E.png new file mode 100644 index 0000000000000000000000000000000000000000..14954dd89193f5d7cdd36a7339869e5b8741e4ff GIT binary patch literal 1285242 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�Rw85A4LfU<32HcH5G-mUb( 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�W)%nhP3H#7_y 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

    7x)gIttQ&E5*-Z{NEeX~@a-2q* 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 L=_dw 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

    aPP#m+mA<_TT1G!!<*MHz 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 vQ}@c|chbqK?dJMmkpr6!C}FP zK6~=g0e)rty4G!>(fZ%>y&_)S&T@-TktPH>ACEghRCc#te$CHZFkb(u|Ku7PDV@@b zuNZW)NKdM0gq+rqWJRW`^@GtP+Qw&l*LO}_Ok$$O0)Jp6C{+vnXXUJ^L^3a!*}}p&l{eQ33yP_ zFyVwfgAx0O2n0osXtKW)WBC9Qp8n46(?fcy>M=>=V$iPlzX25kmv5`1e z7!Vi(xBnmReWn77e$Q7T?T_HTa^=6zg8gsrHXt^{TjFA8D7f%TAO8m#D5Bk!8va!1XTZiWx^of(fAE7A{|DVBTgdQe|d}YUDE^izK6i88(3Pj45I#CSJ!&S zT#tQrPL~h#gu6ppe=8C1z0tJ{xYFnU@DFy)AzJs-^Nqjsfb*q$@Q0r}cM^5~!x6wb zBm{U|E!sD@Rw7r<;e0KW2k_Z{_JULgle)V1C1(pJW?tju|KD^33d18XI3lHR{_`^y z3PL~p)uR?ufQj9KwH?w^ArHIz=ZEl@@XMpcl7)%Dl2xD5pY3^uAmsib>Vlv^cd+Pw zIsF75*S&w%g+2G2y=TuB=tjZPx)CidBy`SG6kd3v|E*^6*H8)_?8xq1-7}T|Dd)9J z_A3iC-WTvlQ;Oue0lu4(^sxD}$;;ac>);rHjPsykX%$V&r%7HpfZNYJT>m*)cqA)u zw88Y)*AUb_4*pA`$0bVuNuDrC?#@TqesXdAJSg4B|99<5fyfUXsv?`0qI0<^0fA=% ze{>FuMgrcc@OC;?(^J^PXn5iM|2Icakcxl^kk&f9B>M9paEFhg2jt(qhQq<*ioc;m z*uhB@xwta*@Y`t>`@EQ{=2ki;w|vBml5<9bmEf#=P2q=5K6Evmaaj=()w*C zh;gwuqzJfDp^F3l`^ZByBnh+|g-GpbiTAIp3!~;=hT8#QdObuhUJcgtJVGhN{D)*1 zAs2Qh3Frjv?dKTh%sb;C9D)#Kz2!fL;VA&D;;j#g@3^l);B1Be$G$G@&RaM%4*1K( zw4C7y&d&QUx51}(j93ov;a|+ingsv*AkTW7#OIfU2?PR`+}J=9**@EgkFW>i%CVh4 z@?0+*frARhV{H8+O=pkrBp3LH<%vi@twTxqGoF){AQ>=TZt~CGE=@%eIglrte0Ija z{I|fUn5I|YCOcanbw*&D9(Uw;gH{$GEBAO@%qP{*LVbP7AziIo4@DGI5UzNa6Y zZ=9;g=>L&*Qb7-{KP(qWg1I|3F^n^7Bl8`B@QMarF!~InpeO)pKReB4a{Rd$uqE^@ z-2A_r^#fEi)Zc`!M(t+$pUgeGoaP328f8-Fp9Axh!A)HKFBRVf0I5uPK_>tI2f^66 zK?lU7;C16meg+1$WbsC^#XTfi#j@m=44Oi8in&bk^h1G0@?wIb591B z%=3|zwm6g!nGa%e>pBkZ<<$**AvvRv1VQJD4aZV}ndVCDbr=bVZC>ZAcN^mw zLnL#@Trkf%NnbM0Ir+9^o_8|0WL|KByiES)glgFwa`N1`P{FeY8B^t7dk^4dd-06Vlf98^uCtZS`J z+PO*UzC$w-Zd~7Z^q!=14_#VXnnTce$-HJ;RkMVB>fBM;;qH|;gnT&*Pz2o8JoinX zw?uT91$i%Rg+tmNg`x;o#GOu3n!-%;Gl~aTD22Cw*ml1X1R}?D&`SwKy*JMD&T&M6 zHxA~<{hD|+GRlQiCO-q57W@#>JiM>01@)0ss@ zc?zHH2ekNhk-&a4r{OI{_4hAVDa<(t@9z$+(GDcv^4ZHJJd1CD9%7Fn9{d@2f-@S`oTKAG@; zzNmGpVlh2trjutabfnZ6FLPvf+&(6wfn!o=(8C{*J+DRooV5d4|oRjb46OfANqy-%H}EQ}>N8 zeW%p+V|E2uYyH3>oq&=oja!A^oPjmx6;r&!;-`2_s)$|Xs!pc3I-8BjcAK-$2n=9 z{P#jlIyjwQ+_+io7&&IyL?oMG7v~a}tdOU&vCLf8npZwX_lbZ#*lM;_)W)WS&7fNV z8IyoPQ}R$O-gR!+g=q9WPY=a~jcZP+e|INZysmY1qXMrHTOcv@8bQA~1>%7^C12+v zt-cL^o3U+cI3u-vfJ=R-X>Vp!s3eVk>tLpaTow0j_43YPnqrr)MD*cGtQp@-bdFhI z-)Kq1dvt;}Wqq57>bTh)g{(OZHe=^s9>x-JJ0#x|!oK;4+(mguEmLbkNh?>C%SnhK zDk>Qy=#BXSgGAOre@f&tnE>ONU_DhPrKD8G;6Y?0u(0GLoEsKMzF361 z+1{Q*6z8iqu}(`_!NI}zL-->p>?dq9)Yxa}9DlY@>-_lgZmt{gI!5SqVu$)%)^pHd zc&w^(nG1mP6u?0_I#5$93R~b%MyN~g2cYa_qRk=;%R+08?SMq>NzC+nV>4WO(&DME zeU{li%-Oiz$OJ07E{Al6jg&4mlc3GFF1agI>U(cJf)9UMar7c6E!C=V=@t=@_DN$l z#`W+}o3FWeUw&{QT^IwTsQTYHO+s}Y$$ZMCO9y_5U8o1`iKCP(mc1UgD(04qQ#GIm z#qOtWTm?;zEJpn_`!gZZGZC6@LFE%p;!M>?EI2kjVw(1=w#o4L>iU0x!N&bSENpW9 zFw@8gbsAqd1WK9*nWqD{@bK)5k^Mt*@{JjzOIuO%YmV3Mv1~&yb$=x9ZidJROVrqN(WVakH>O;X(J1w)W4jenrICWQ$FG9d}o5UdLTf{B#iw z$?zhKgvfiN^0^&VJmXBbvlaCufyifmC6+Sq+ERZOdA0p|xM5#8VG(R|QWA?vBGdh?*EYI|?A>2P$q*P;yils_*=tI638}eAK0PNd9qf;lO;$Tf0Z~s-0f1> zbzXxCkCd2_V+Oc!s#Yz(-!UsH3&*Jpr)N-DEb9WT4f#&ueQCUn}qcVawTK|4+IDlQNw zI#k=o&yU5BJ2+VR_XBa>;K(q7J9nZ=^W%_;AMpaErS{_H4po{Jlh+w6c-->-6Ta<6 zp|}V&wpPphEHhDp*0+~K443#UuOFDtcMholr63D^c_{~JnLhdI&)pDY3sAD z9WvV7egf}M@3ilmRV`BOFE%Bls<5wCnzQn3UD=Mt3293jMF!y_Hx z-gTJ85~T?tJ;YoI!OW0oubph^q!{kSJ1!N#AmOLz>3PTklv}n|ZHIWJBf13Z*vw~* zZMi(bCWxI;rKa2On~i8fTUrwrUz&0su2n;6!!zgXT(wfQl6mp0Oj(x1Ni0a$OaOHx zC2JP|ioDehk^^LXxe;Wdo%Lc?V!=bjI_KyU5Wj|SfXON=8!TDOFSh`BH>{=b8sVMe zYoh4oh87Z^9V+D-hoZ^PVV!Y2ZF7<_kaUg-2f?4y)4F4OmK$GunRRl0W@W_F-MDds zYIWjpEi8&v-v@)bOuvhG|KxC8vR;Ul$99Qgb+mj)p6V)8M-lL3t+osKh8`0c4dt+m zrJy|A&F7+|6w+{CzM~9T(=-I`%dcwph2ui)Y0GN)7^C#@`nAfr?0e6=@eY5_ug}Do z*ReE}>mBZ_hut8lA$Rg4p5F;IMxG@7M8Ni_Ay{(Xq?p$3#d@1W_gu_+ZSX2jSrnVz zdD7^2WHw0};0PNl*M4SdYWjkarBv)WJcCCvAq|{y@h@~L2HfD+{+_5zHu?7ZcO~Gx zlKb;i6~haZn7oiNgHtI^PY_#(m>)juA=IA!_GwM|77k8GSo-OU(9)pFWY4%4DbHJ0 z$;~57RrdpuBye$oQVA5^kkLHjLJV4ewz4YIl5LjZ?0g@8km+c7w5_{7fdH4&%!ifn z@}U*kG83*I?dL+eE(yBxokYqFFJlmxAOoi-j9meaV(BgiNejO;*QFd(HHZ$27r7=Y zUdSzW=ZBbluh7stJ_u>k$aMl)jh~{8f+{a{Xo0Zx42U7pw?v(8yxcp-x&qB;aDgPA zDWbv>_Fs}JZE^V#?m*et)AlDBi&j@w3WeWuty+U(M88)VFH z$-SB!7Jx%pu$RjxaLCJQ3D))1T{{}q8=q7@c0!-c$KDlh!_A{)VUevpHGD4-&+_71 z9ftz{p_LDV+Lm{JmbxMnZ(YFHqZO$DZ$1mHI>?yIW=Dj4j$$Os0bitB1p0&1yn`R1 zqEva$x1+6=JIH5SgcBlqQsM)jC}KPm42hD^d+O2H6_aT4^cnyv!A=Z9HUsf8Z$;P808c)*he<0mW#8dGU_n!#)1)iF-Q{4SjIaIbG2MG|q_h|G1wP($=O zSQ_4_yRCpT`8l zy#0CB*@T=90{6-9r`qQ9#XX7Pv05WcrhP>=vc}6^?J_KO>qm_v@Nhz!Z)XhkQDGTPTwxiCiCN1Ub($a{Y4x9QI;%ALM`z_x053B%&tJX!o5kHl-!PI6#?ck z&EXaQV<9~2u@Z4nYz&5!RUVm}lDZ`v#sGy8mf|UOE6cJDEXlX=*7>O%Fo8SaHMR%j6CSVj}hZ z$Uo|3EG*pZ(Z_^*W-vhFwp*b&+*u9r^g?cR-5u9oa&02A7a1)x?QnXc=ZnkCQq5sD z_MJgpzuIm!_@VZmQ05UmbCQH|h(gwDT}VG!ZSHzOBoZcseffkv3#f0% zhYuokuNBhn@e(TjVZI=+MR4agzE zCMHXp#*z4#BKpzlXwMST$$)h&^TL09rcZ2mOUXl`Q+n-SC8>+Fs`EA>f~csd)j(j5 zPQ!b2mgAU3WvG;f^EUg(fPk)^54emf&CC$DAa{jR@;h`dn}gP)Wzr?^A&UpckBJag zd}q<1;Si?3dHoEH*d{xcSJ1fJc zgSH=7A-8@)3bD-Vy5^`ULOHaPGt$$Wi?rjbRrYz|qAnrN2!f-5D{zqpiH$!jKJa_Z zyi)WDFRb^%RH@B4) zJSh9g#zsl*;V`EqCkuJ6iiq(q#dkcqv_vus2!rJlTlmisgiw!>2n$7!>`W$uRx1vO zaEb0q;IIqyX4sRccSHk^r`wwE$#^B{U6UH6+zGmrghe@9>fs2o*Z6Kjfi$R!HA zUtpuj`61Al!FPHKh}KfYLpQ77)B5PJkx8BBy(pvk}JvZ!M*#)B$7d;L`1Qp1OTGS<+bW| zCvOZQoxyhH^dpYGx}Z|y!B$}sSBg9I3ZbT>Wi8d~P~+Bzmjcm!n=>+;qKuFz~H8uZADsO96T@QLCD6AuyvgZ1-b7`c5(6X^rccZU;9ms>p zFOM9_Uf~26()@;7G0)~rzS(PX&EF?~KS>**?($BJLnqT<>bY}6`_Zg$2;LGa0t4}y zNAK?&uoTYwMUm}Z+tvm%ia%+`Yq;G>U;Gm|nSONYW4lt({(|Qc_;`bNdrPj^u#ak! zC|vPdO>iEuZ~$?b2GqG_)STzEfd;Y+-BDQlUX;RSJ~$StUS*RN>;8Fvu9}JJvu-+6 z2^oWs#&{@?J!@oIsBSfRn#ve#sCjE?KzwI)RDUDtP8r-q0m6DByYDg=K+1`fzN&n` z4pbieeT5jYo4x7>O=D*FBjQ6J<93Gh_rJ_iP6>~-6NBbv*|-??{AlF2LzbF2)v9SC z-{s86=+D#;pKCwt*q^*}>co)J@ZObw73ZTJvK6;IuV6Hr8P&+>?5FZmX$-=#b;|@9 zafVpX&qUnBjWdh!gfg)qgo>Ivid(gdLeERN{zi#epNi2yK9Gmq zv2lJbF6Anl)z__RJ?lP%+e1@L)6%?5=md`*d=9T(uT+h9SrV;WoQp{nY{KZRmNr)| zHInx~&PC!gFE<-cZQAEcoeVpk2^MD#`X)&rp3xbn)9;m{6ENCDlXt9iQB?4dyfzli zuDxy*Rb`x{N*9AdiggnK4e$6>Ep%hWSK1*j-%W8gr0a3;i-0jk?ItK)g4^#Rm(6j- zjnBgCZLG}vOjYX%zIYDfr``#5?DKm+bEKi+JvWIoRy=#`+u92FnY(JY-twNb8w>-- zs`ro!6lgfH)lS3xr2`8KEx5w%BmiVkgDCx}IQa;Xva<{MlRP$y7u_08RgzL^r~Y9x zd@Y<&l}avMB8X$srSB$odV{kr^AFeM^}5q=$IZE@S6_iSf#OkIzeq4YeXjM>-*ICl z-F$YEqBaPN1uyRX`;z*qZDXC2H-zdRpt@prl!Bo2h|&o{&??Xyu#YX*L*RzkMX$>&&?efGaMYk6Z*pS@7T(=Ixz-X zx(knSX7Tkcbe)$zCz@j3fzkCw2o!4C!g}%U{`m1D7)J5}^ymEsI@luwrf$fPSEHq- zQu$)wrFT&s_`TlU>E%DeGC|1hyv^r%+}bry)(Bqeh+GHt`0t$RZd|_tQsYGCPxJ13 zc$gv?h>(Ipnq?(-(L+l;dP??2hNwS^M@bv_^JekFexCmA^MnwBibw0&uc03VmMq^_ zGGjYPfi?~@W>DA2VW$-*isf6 zin?0FQ5noQIO&q6t5Sj(T zAH;T^+$Mz;`5cqP!h9YYH{B&}=iK8+xqabQZkGxe8GUK;3N4+df@yy;_(NbJYNX)Mg7v}Ntl1Yi6gGVhg(dFjUiff?1`bmR zkF@#^gh2S7O4T1Ukq$z{o8h~)&S<_`DkL?y_LRT=7IqM}mMB=j*Y-Lkv1lmzz00V}EQ>7d$TRp*Zp(O#W7BZKFOzsFbum#Y;&fh?7tTrjuI{lzHkBaId|l~F!JIxKE_UjXrB$E3Ava+%i zbaY}WWd?EHP+AowP%=y@#GnLH5S+Xx7irp&OM(Vtm*)|HE^cEh2H>dBVd>P%qe9Ar z8-Qh!pFRQFt@Q2Q8Vad%BE;(D3V;Dr%{X_4i0*vblBc2uC6u|QxyFV0j=UI~ zMKbfxLk+vM%?d=ws=g@zM{@6ZyigB5-DbRphsS*I2C7oJ)SD%U*CXJaK`OYvaYv|2 zHP6TvrqEPa-HC33A-LGsWPl{>jv?-a%3HTueauutkZHf}Q&+t#xiPnZwinHABwDk1 z)Tx8>y(iJH_PaRqB#V25BEXk|KCyK;i17e!m=@gciiH zZQSlkN|A=XPRbvhZswQ{+Bqq<>MErs+HYQUsMXG>et{v!@PpVFJ(!;}k!Sr5()06duhZAK#yzAfms=VfuiQy;*Bul%k@2Bw^xn z$#PdC+DuAT$Sm~ZG$kXWq+9fMit?#>gOi-fXrkj_iTR{Ph}(|xxR94fRo522=0~@j z=UoM>8r5c>XstnNy4}|S@}ij)eM<@6pIpkzP}7}^+0RiS-fhh?>ge~g;VRRdm)T0n zPP;WU%k3>KE$OB>)O8VIJBxU7lF?=BIg6TlX&m;*PuOJAZseTqt4paC@9Wow zxg!#HmSI9UeJ8$Be(sJvw<@Yx?zm}Q^G{3o@X3zu?O}?OceR%ecX+gQcVab#5Q!vN z*X4G-)VrsjW~t}+i)vIDc={3TMh`1SI5Bj{2oGruXo}+*7Y`k(u;xv*Wy{mIL(>dF z*+ixpfiS=Mnv~8?nJp(vg1XOwMdxZq$=-;&~0N*2=D} z3VKDxh_2eBXTar1$;!#;PM)~VrR{Cu_eoe1nTdISVY%0->}^LxnI!RM!4YureeQ{V z7@=Kl=3~2+NRx?Tf?CnR(Yjk;U@}NQqLCwB$XGklv^U zIq33D48{ZFBtmW*8IXUPNpM$en+c%0OR^d#S7{ZNyJ>vyk;xIWv2)vChw|!ZIM>Zs zz4!=6X#Y+FZHPqubLj5MFyrL$uTMwZ&f&PM@VMypQRwrzdL1gAmCdo05Fsxt=iRlS ze(fy150#=JlM&EPxG?1ADo#Xe6&b{rD%8tPh9l`6_aIBD@zHa}y|2EpX{GD3MQ-G= z(m1Ya;hNjHnb$cuVPz@btZI&ZEs3&Uffw9tAYDnZOu@`EG;c9h~fQ+ zsTJZ&k1Xdf_2j+aON|{*FdDlcZfv?^`e-Ldf;&8jgwYd)Zsh8bEd;NPCXTqQeoeuL z%<&&ODtvR?zIUHnBFy=u&iLdZ^YM7!@%W&f@$ht0pKXwKZ#>>X@q`n0LW%%9P8qis znIKu=S^yQ#e9)P>N9v5=Ff@s>X|j=+$*%q91iG45U3_Mkmy3yP1n_1S?Yfr_USK z(FGzgr-mTu(aT%_h@L)yo_3_~jkzjm(Tg8{5@_{kkRPCj?NvC)jYicSF@UxwmgT|r zrM$$3_XD8nB9-NAnngyH?Qy5oO1oL|B8YScd@P#0Q&?P=T~VE*Q{gX+fC_l7gDZa=zwwR7J zo5w#qTyv8lt~tf7{4o+U+v|HM)`%L`p4ISWW9Knfn~IlqZGH~>mQqcd?XlxvKr+;y z?XKnc07t9f?qfQRaSPuCEK7pOhj-{^qHIsRuJi5c6-()(AL^M_GihtTPCH&Cnr*E` z)Sbz*Z_!Rk2p)YO5c=fUTZCS}P^|5}xA*dWW0m+}G-2n%g;V6*o9JRj-IC=I42R-) zmj&`meEpe8;P^bnfP&>&16@TA6dSE1IAA^<_oA=Lo1}I;jN{O0%^-=ITP~OW$>LlR z`L-Q%a_QHr5jpbm#f6>}J&ri#$=1^F=sCw$l((FO_#{Iek@}(Sj22TCI^msa3mOW+ z`G>4rgiJiuD~V7djeCbaMasb2w)Di`R_C@2%ek&e4MU&%C%za-x-7n0c4oW8ol}h# zT+4oD=@B0>-lYr58V2~8*PT8u!TS_H_@j9O*_)GXcv%PidWxXgteqsgrZbuH^}fxz zBloVhc}=(b%Yy~%E$rDtf%$P=Y)=xM*Ifjx4w*i!k3ivp^hf_bQ2*1aDb$x8>K+*ZSLHhQs$EuvXi zj=F7=`7t>Rz@&2{z6Le75ZjKiQH!T6Zxr-E1?X%0a%8ab+}0C#yz>U z>iENSzRFgbT^UrY*u~?Np$G*1#+fn183)_-$<&86H;eT3CCPa+z208n z0`Ot6D2b1FB4NwlWw+s`b$D6c=tpGd_UB}sQs#XVgr=Vp+?(|^CBo_y3vLey1nVi} z$;#t7#^)}pWXbCGlpQ$39nXnFs5)SEH|0rpQND0GNz) zhIfqfhxBV>Ps${1FVla2Jn~uVx91dWh`?n?VvDj^frp=815Zz7*~K!S{-EHLr))hn zhl>imc43#nrWbFA3zZXR#L;nhBGs}lmzarLEd-Lef7lg0pf_A5$@6>A_=g`8K9r}- zbdqkcT&Z2ktrO%#B}Jth0=d4vsvYRrJksdRe5Ebd=~`yE`97Col`^RGg$TWFoF^?` z=$*Y@+ab|9_@4(*f}xs{l9F6W>D9hhbs+4Qh+5N6Fb1d$I_D&5n{BV+8bWjjpYr$s zBM{9=jb>Yl2Y-qsDvH(kI|~ta2m7zk__b=OsA^|5CBYy=y&)$3rTa}Yrb;Z!Cq3&B zB~!b}N=HZtRBmk3#(A-rvMMmVL-pf;v(U26b`?w1-(24ptf{+~{s5+(SR0^?1%zWcrr488J|zuxdC!(U%UT#Wt>ic*zE^#fIOFwAbZKA}4}u77Z= z?%n2WiE$N%(BS+RU&-Lw&>?}3!xo(-5uQ7DE%RHu@4XlII-qtgewqJLXlr`uU>vg} zfz`f@X@hssd&D+FZYiFQfV11yxK{%oz+H|QKIg6Axek?RTjTIR8HFl4{x%aM3*k7M zl=*#VM^hg=O%n4oJ7YO5A8WVvwU@aYpy!M&XLZ!}_A1}2M=bhzDkYEL6Wb*NpfX#k zw9%89Psr70B6EL?RoQS0GF4X;gtpyWFnEHVsphS(%m%)N4!jy|M`it^ z!WS}Y!X$7$B?P8<;KYAB;k6EL%~lfA0K39eOm%$ne!w>wsHRmH(QX?oNs{R-%%i!1 ziG^NaQ24X0;BnVTlP#1B@bZSYtAu8I-zp6uO}iaB|=%#{4u zvp`>h)$kxL>~klnf4n)&Kjt-<;Ste^vBKP6c!64aj$^!n4zi5VU?wFd-!B6Nt!K_N z3!iJ_e}@@VCnqP*__XDN()wP)n9DSyRaYElvwHa?y@JJO0y>G^mabI(s>wzuGrO(9 zNNSW>>k3z0lwp8S1(^X!=SwqhN`k^cr^6 zS{8DF{^_y!xe9`+1y{McxNzr3P_1QF? zdAbRDn7*ldqL(FGnGI``$xX`JiZri1j$RptjG8hBQHtZWRpWg7SUWZ-!I!WT*u4!} ze`ZJ5>w>!Kj-GLBvM<{6u@$B;xA74PjBbKp7=pk#Qk?{v?vnXjWM$=^Ia}3mSk^ck zVl@56q2?ueBph9)4FXQCUJmnNiV%L6$&$w)eFHLY%%&;{Oe1}>AmF=q4?TE+g=ufrngWXm82@7OHsU5i9`Zw|7_TB3x28X#*(dmn+p9?sepz*dQ=mG;E z5oPlj-NQgS-E!UkPF_m5eVp6D{`KDqnnPCcgQe81s?(Ygk}({5y34Ma&;Vd?D5odg z#qHL{g2LvjSoTvsCV%FX?1Kw*6MT+H&;4}>w8XW7QdhH$zChO~H1V(_Zns*gVIj-d z$S9kN_1|RtdE?9Z$^6m;)t^%ZAr)EYdwy;vp)UNZeQI4Pg3k?=T^-jnl)UW@K#T26 zNEl5mDJvsTxd}UDdKhFIJ{>61o+-+B?n^9(_<&kmPqWYb z-2y*BVo_&STf{eBY8bYFTFeb{OuA8~#F?HP#Q164h-x9m15G5i^O_9w9gTa*igLdQ z`%|=1C%7_5KR&IV zXEVGbzY#LX{y=X)aXBSqEk>R+;tmm=$&s@;7vn^8b^)^bmfJ|JYfO9mW{%-H2x;5x zD42-l@%(pYE|ggsSFFVDO_IMrAdP6x%``b|-y48tYhpO_1BO zqa5Of)07Zbs!8t6JDfuVWD+{Jl#+3PS88$f=SLi`Mo(?HZVU| zsdUUGfs(l);hLeGVDbnoSlIow&~Co9z+v|^`3KvrKVS=%0Ha}o@4OsJ;{wl|Atk%) z`h5dNX|MJMo<##7E)}bK2WFfOP%Yf9a0uw5rwmr&r@!DNw)1<`WiH?m0CcY*Xkyl| z%f4Vw(fqya;?u=o=rvHLl*QuP`8zxaZup5a^>1J&00#!(ZY26Xkzb({F#fNR{yRTN zY6D8*Z`VpQW-nI3azZG%lK#2i1ga>h2O`6}{-+q1ocOyvcm{!i%LP2AU~`^ zpcpHa9|@ovK|NNmx*%x* zLg=4vgUgLw%t03Vf+@plHPMkPFG3J_fnss_u7FFj17MBO#esKo5&Hi-H42Y($r9j- zk$^Grw78Rb(Jg@TUD>1TUrzzZ@j$;ehQRR1giP|!yvCnxfpqWR_yZNpBc>(3SqXsg zO=b%r_EHP}TzKzD40`*+U73WvyykK; z)blkg|LFHU7WL0z*2{a?Ug7T9@^1jN^sO86x4Lpb=O=viTv7ID!3eB0jn6q3us$I4 z|1%SK_9z$w5#_*%X=&gYz57Q;3SbW2e$`D60t5Q$9{;DJe`eBQgQ2Lv z35)-Tv3ho8+o)9a6aU#PJgf;~iuuKqVj#hP%Vw8jw`WA@;DJ_!aWBS;$ALNayi30Q zUEvTd)BwzKhtkx!N@*0m7OLF)={o~DT0=A9on*iHy9!RYpYl0w51d+?JthM!(Fr&4 zt-?Y z{il&)DizN7FI{%9@pK)<&Hed=Fwqbyy_gB7<&Im1LZI|H8?O4kZEI1pEtU(U!|?>Y zCuqQINtDg{ge14^5)GeI?EF}*T0V4#0OwcaWA}VNlGC!SCEHg?gOxUmy;h(ruVp^L zoo>?oG;hpto`@>ZdNC~mw5P_B6Yz%GNTF(uy#>QuZgvjQ*fjlw8k5a zmPr;V&b3e{1P(*o!?4NCLJqcv!jSbuU$M@Ftl=hURTw*o_C|!05${@+eB9~!N8yMYom=>OieAeizRx| zVj=ebDhI+#52G_Cz0CxxlUDuubdQ6sXJqMtid=?Ni#2o57#*KcKcXH@(O7HcTvJn1 z+t-il;^k)g)l_&6P}^k%s%Fq*8HPa8HUz&`d&uOO}FdSkSK*)VEf zT*ly1Osqkbw^gwYL2?@h6CB3VqNVx7Khfw z7JJijY}Ur)p9i=-vs?N8WAkoC!UU)+8_huc^d_v@9;oldQc0i4RN3+fgE>`ZJT;4? zn}nQ7PTNb2U>qPAbOyJ@nAcK%{P>YSz;d;8Xs^9Xdd|9wkNn!PhJ;&Z8~>p!szjGV)&6F*nLoi&7_@mKpiGAg>yb z7sn6pR{{;tZ3#{b4h;>>I|65`+ZvkHo6>ZxSnKl_6UViCg74L4<3mkVz1Oof>)guN zc0U;xK&8MGhvjgYX^eCD@I;+^UCq(PU46LBy5XHipzk8M#B6*-)h@oz`zHQ<{dh;c z_+7|6M#*3Q@n7)Z40{bk;PNOi1csBfaZx4I-pIEQl8nOW6~pt@s}FKp)$Pa0jR$jo zD?ewIla-xWt6mS9nb8^F;5-8JjPkMt_%*1^Pf0pi!|aW`ee73;P+F;>~Fau+zB=l~axq-Hmqrr~?C(N?h0$+Pa%L5+BoiKuk- zCx1m1<@P6Fsgf-_HeW=5CQdY5hAr+pTSD&f^r4jvWu~LL1KD*#i1$>>&BFMccUpfm zcuTH*d56})QUF;R$T=JXnJ1{mrnR*}e`eB0I??r-ZmGc?}`#Qijc3go87xH$FXbRtf-N04)fo|*sHQNEKf<7S78u!^(C*3{N zoECL^A^OaV6US;WZH{$wayI;4Sj2mJgtnjEH>{tqYFh`|pPD~=U5Cz@k5#+?nOf)^ zCJDb9A%^#m%dQ{L-xio4jFj%96~YEamka8sEG;dE{q;=^?wLVt-x6|%_QVL6=kf09 zDn*{IT24loUYef72S}XAS3L}f@}z(r(>b6Kun%)uw)gj@4{tW6g}) zGjm|3fT1mdxl63uLt^m#XzTB3>M_~x|GshqNYTtSxO1&Y{0e)u${r<39BQmpD=lzh zZT$Cmt>+{X_M`W~FiuM}yRpr{G@HxbgZ$AX(;q3lsrc=ykz|;6HS9`R9=D6h^ z;4r3%W4o8{O+uUpvVgGB7l1kzZ0j`Lk0rkaxHlQ|<9AIRpXtOM5EZ3_4k(xgjj5s zZYx(xnFvPxSqyuT9QS^BThY^LH`UU{JTh%9jm7<5Wt*dB z*?0$73s#%H`P=vI(St(^WYHBnWXOoxoa>12WvY6nkgt{%;}{?ByoR3zjOWntbN?FF z*_M5MLAd@2On8wdIW{fJ6_}^GLIex0ePaFoQ|l_M`wZN-*viD$r!s1`YMb zTti^Urp0PL&K?YoaR8{~LU*{kZr`!veB7PXurV9a2k_Z?pmBcXqsgYqx#*nPcGj*f zrwM@To}3&kGXq`vYdw(S;O<=2Do-p}1VMp!`t{?~Ubmx!L<#GHrFVNYd!GwpBgusA z@?gt0s7~vBEYKda>65XprO#iW=jM$lD4y6T(Ql)SP-DQ;bO{1@b6oXd!XlVyx=vg% zX&j~Lw$DB}sZLvCyk6>bW&Mktz#5)WU|J$z346y3(;`AVH3P#hX88nu*O`n2x7+AW zd!u8(3$%nOVg!Q8i2Z6`+6=(}*Zo;Ms*2vs7vv!d-O9Ub<2ozfhh_&9PrC|!e9hgQ zppn|W%mo~!ksIWYP?8G9Ny@@f2p#UuI$ZA(qEG!*Rf1Q z6(|FpAHv?n0Q0{Z4nMfEl!}rkC77XG#cIy0wpM$;Ue)dPyctmy@+R)nAg@|A?Imjn zXHcf=%Wx+Lv!EOe9*kh@0}LKbo8pB`q%=8htd>uTfzgk4J2QwdvEwr^3%^>b^vzyz zWAOQq*EP|3${{+)zn!&6rEpS8$ULZ>?Xt;3rE4)9=1kJOzbi@?Ewh@|fkm`g`L3K_Q(QM@J2c)o)#Yn7>AKri@96~` z2WzT+mj;XTj!D3w@#{vPJ32qV?oyUdJcK%_(*OYeaqXw2)9=Oz)T8k*IOrDfsQ7*G zUY`$e)c-Rd@dXZ+xA4HDRLZvL;NQA0E`_`}<$6%k^BmpZk4}bDwkWbHC2(c$9p%u2e4ESUE}0%>3D` zlj-F=P5oQ7>_m};;H8!NaPFHu9Ug^_oibI=ixIWM!7IW~&-Je7%WghNIYK)U$4T74)R==mL3a_p& z3EDP^F1eiRNm1jb6uJAXdX4jrcHro!ae%Y1(-e=Wk%-|i=krq^X7NK_4s7$q>~(*) zc@`y35#B#G`&&R0AHNv(UrULrQ!T0 z{V}cQnrx4!r+3F`ghJrCQ-_w59OxIjcntztPmwCzd!QFMHWb=DVnT>c^3~WJQX0Cv zohkHhtOWF(S2?n=zjZJrI}%^gb-Oo&oIu&Ngp9tj+A&n$9EUy)u?J`Rrsi{+v z)Yp%1OVjEePn#|YE$j1hC?`0|sGcksk`(Ru&N!XAub3pGVnp9k{Oa9E zIC-Q|Rr~t;ZJhgJ{L2!3MnQ;>iR#UWL9!b2w=vj@pTK%DoJrPae~@8jLydVv*P;t=#ePAhBTshoM6f=%S2X zCUKkfomLViv+ZY8JW*HkJb%QcO~a~0QEX-OwPxK=Zn;U)GI0j54UH^3>#R*mNHFMj z>^1&gV3QXgSW3g-zF~gcd`Fl-tWcXc!Mj>J1N_i<*lhqG96%c!!SDubd0k zBpiM%5zb}cHuV*x=H+ssL7s8*2czdKH{SiJXFB@-qq+jHHh6I_H8Q7%tb@Pv-)a;b zp)%>tOKsu{IBrwKrd|BaDBN4$^2htHBU9(pd6vRoY8WP~rn-^ah?iAfwe7gb`pY_a zVmX(1Cuk`_Kwz!@msX>rL*lm|4e%%A9#aW^Fxs!*A{CnKJGH4{D5CLr2#?Uz-SRzgi&DTE<+eI`$fPAc^TmWs zp>73EXXYKBYLO%V%*nw^sMk9ZRKZ9}ZhkDWw2Jjh=Id!Je>`2-ICKvLzow2mzexu# zUpp`;$Q|eU8|4dAB}+8R>r1_Z(N3T0{5eYLUSAStL$(@?%jgB?{s$upN})QQ(F_41 zTtXc&tS(vAG_I0p3=%3CYkXG&Zhu0@>QGAHbBa0RFtzqulfB_0_L*KUF<3o8lOl0! zHZ!}jzc39+MFwA@wmOC>JI6<^BTXybXi9hEOuEu)#Xk&FsqXAwU~BUAD-kYO#kQ2A6A`E*2kpSmaXf5z{0@4)c* zN(&w|=Rm;b*eAV%3&&~Q=bwMKYjT%9p$`GMjzOTMU~hA=JHIU<_-@#y|I!?y%HYJk z_Tpf%t+e**`}c7X*L&x(Rg_gaq8zl2TIAOf}GeBIwue<`$l@x^>OncN1+H)u; z!S>r;b_o<5%m}^^{?tzOCiZn$`$MpF(XhKG&%!m&;>R21SM(1L95pH*EQk^77=w@- z#Jgl7B$v?+ICO&N*26=EGLS+&`1aQG#0Ne;uA&~69gX8p z(cTop>2leB#1E|vbChA)-$;@wfQ^slG5_}Mr~S&%d!*{X!@6_5)Z) zMvVx|6rD0LGg_+=cE9->$s6shtD+{cL!O(i3XS4rz@26LkW$Qi?T?dG_cB;&{nbV4 z;adoU&rn@xU4ZxoJshI~n_tsDrx9%oWSep-O%Ca~x_bEoybr6p1fruXq?)0^l zC0aV8mp>YC{oXr@URzlN5JQhkq{#B%H7zxHQ*Us~YzVE({GW@>+kQjzsXVVHb zqiBW``k9V$ii$5dk`%M~)b_|)pDc>!AH9NLA}#40dy8j25N7fIjGQ)=OSzAj{DCU}RK+dS!0tOwF-q9&HZY4szc(E(7I^n&t0;8TBiVMFhNGko&ct8Lv#;Pb zgF!0I4U+%$JF|u$-XzIgvbllVS?1~aC@01cvgH1vEJgQv+fBm4soJ9EmEWM34`l}i zs}q5|qHsuO&|x;k$Orx-eEi*^ZhgXi4F;!Ji&yTSKn$4dtvK_RbUjOk$25Jf0JlE707|D4|sT?Gzp6hJ-8; zUi+bK@YbFu$YQWA{c|sbuM2O*cC+zLHfb4cq0Gn+yXZw z5(K%=u;d9U?EW_Ya6v>C`*pV`i*R3fJ7D}WE8-x=9qB9B{nz%V?O`m#gMlPGj(Y>E zUV&tN-~al8#AgWlF)y1*5KXX4tZw-Qd$i*Yzbf4za>etVA*llM_5a1$t9;%|7feRV zgNeUG^vH5n&`D5ZBoV{b>%YY$i~AIdcW*bhCKD~!|FHFL$pxt<&fhZ*d6-!8nOE)L zJorBtWU+Vd0*hcPXO6!}(83G?3upPT?iM@e9?4omQdlXj#gfNq?>@Nw2_qy(PrQIK zlYun-pu?7A0Q1!w44>pyM-k~mf_(?E$u0j$v&HTv{35aEod=Pd6+M4jgoF8i(8q$A z+L9=`8jxb#<^Az1d%8vzfMxX01X@EJbKqUY`+v0c)|ZezZ7EA-Z!n*7q%W^+??gxz z{qm0h!fIp$pz^W&-PMoZKZhjK_0w3c`qZeQQ0zg>Gju-wX) zQ8WR*$4s;4;upbod2chGPP#yr8jXchujr=2gKK69od zrwy$p*WTWti8&Fmpp>$b4UwG%E zXdK7el4yRe(< zHpvI?aPikuV(dN6jTf#Y_uJaMlz*btE5G`gx{>eg>-_cE2yNgBqHObg^!@IS23woy z`Z)pjX?yLL06mQy@1GZ17<0&c8=5CO?l@NE{-pN-#r$Un&n2A9OdG~Gxn@gO&_MJw zK&ucGjJoR|ajS0}bBtk5?ojaOwQT!no}62DP2Px3ekqrcsQ!n`+~hFKEgngM`c(0{ z_Q(R|Fy|=0(*~7YK%RKXYlq_@_`s)1`M-4{J~5&;ZKLI+UvP0up5!$*H_fqJR}bg5 z%0m*C=#%K>0r@SZqhdyK^jf(AxfY9hTInyBv2Uf>vRc`TI^m)tH`UggSh9b_smUMB zY3@VGT1Srgdk|$9&m#F%koKmJ;Ff#bT^U%oAT`oDoEtxOd8*YUsXYkNT}@qdsYG3* zAk&2rP{&LVhdWAi+~ipzWQa}`4LKL7rV42LnZSq$)2@}(@10p2WezSUnk9m@&sddsfJe*Fq3!+}c1T5V zZ^m!&aN*6R6c?aik)2l$QxG@m(zxvEUJux{m#$ZGn$=agG4!@@`XLBgcM&EJ;j~5 zH}BzH<+=QOxS+$}!-47AC2pjU4DIr_s_hJz8EHs_C#~Y$6D5&4b@t1B4%RB#^yg3A! zezlOTHu$1LI~Z77-l?^`GdMXS_$$o8EU~(chJVG|6R?s);S@2!ZvpSt>$aL(y!MMQ zOTSYm@y%j9C#!Q9PE{X%p0eN1x&-N`M#=RLsSg+?h54WE5NZgFf^YxxraS)#~mS)Kxv_^p`SKro92@vE_jn(alM4i z-mOs;PavWDmucRZol)!=X2H*gUfcg-PBIt*Fy+M*ckw@??!e+ZuU;GHyh$G(lr`-H)NP?^E%Pcq@i)tEz#K80C01& zznOwk2UCVR8uN@fA{I`z%X)L4fBvGsS`H}Or1!BIMK>!#2xP*6WW7i3E6dkGs25~g48d1?$XsR+$aUfVFgzTlbI{`1S0f_6iAb{Hf-9^oi@=~k#Rw8wnjeh%FE?0L z91H4?niS8_8E$y_Q}d|F3pH(i`x=&H3NPaE1e2J==;b;k z*r$te&7r>zkWky#EtC`*PKqO>CJpoB6KdLo`R2{FgAL)r8b=^~%3&#-_}F4oS+b(7 z|L{4uRpTBP$@bioo)>cN+U(`s)F)a>5WS~amt)@CWo}AmIG%UT@P|8}QIC0Z3=J#S zKJ}^Pscy*4;g?nIu9wLRKhv$MXD;xu|Mz(djhB`!!2Wj{(k@z4TqBX>*w63OUMG$n z*5`}LuJj@Col3vh8LhH(-RPhv#sxzw=fC_xloe==Qg=TFr=fSpW(UHI5boVY=hA~i zb&+fFgZkNR;lv3E^2s+*X|55f>m@DpFKuf-Q*;Q~w`X&RFas?OV|Tt4_i~IOFjJg| zj9^*Ax75& z`GKvZAw{SivNAOer;iDd-E26KtFZA-;ZkMU9SvwpLKLupVd2>|6xm+wiFSX{$BMIPH7c0nQynAPqaEx&ntyp-x=hun^5MdJ z(vHvxjeJAe6ZK@);TCmNj%;9T09F(H;&lmU-YR~Yv66R655;(g;iORs7GeTS+A=b~ zyLOxf@4_tj=nGDyj>2ycW${oKI%mJ`DYK6phgGY+;RlS^{oUr70Ues9{xYr82* zA`AS-oCfRRW7Y=hSA1Anr$a|wWEJ6zu68jFPU)Z0P1*j~l^SDNjHFR_)=oFB^`eGe zoC_k_nF_Diqp=_MIGKQ&!;(koXswIM2iS3tu9N$!-tehwvC15E0m23L`go462ETxC z4{@n%t)*5At82+27Wxup6^yRqd8xPE{iTnBuf`N_!UjgMzyeDLgktY_5C=s_A~np$C+#)ysR!~EzJuCAg_EO*q# z7GK;v6x@0xl?ez$gAD3IA9?(gS!yo7$!~;8Sb9KVmZ{0aiq+40Hgx>L!M7-nupXi7 zme^;Lqw*8Jo=gG;!X7^|1EK1@cWGNL3;N^%Zul2C^N^h|=%+agK3=0(cF}kD>UChV z2p{fS;n?tufrR=FwYMtG?`K@)6lFOLa;v@6esi^2xjrslU@x2)D2+2%I7xeyu_P!p z=UDt()ztUK93dmxF6y7kmJ*SStMHkMqS^X6rAK(0_DR5i@!DVVCE^!VD<~@R%Ijpe zwLQ)=3pdW!d&|?%5!^fX@zba9N|{S9i?4Kz8@BjN*M;5Gd8Skr#-gLJdOgOe%RO>g zD-dWsp1r&AE_~gsfyIdURj#nz<#Rd){z6TrI{;cS|#Qd_|FL$x5vtB)dJ8 zVq<0U7;A&W+g^3Fdz>|m#jI26J$k8HJVHo~(NpB=cb%B=rJMG>IXOJb-_$<2>1rS4 zNQoC|Z{XOiY_~#AQAd&NkRS!q8fHicnQm)rk6c(;{*xK+yhRe$2tQ z!^L<#g5N@~c4$cin94X;FG`TTM?hj2vF)yxDF@oc=XSI@#PghA)o$ zp46qM`cakF!UyDpZRg(zzF5rTV%;A`EoNUcVX=Rv9`B!Q9WSW<#J4>ox*!I}@ecb` zp7NR*dCYF~xt#TY{Mers#y6ak;~ayaCCQa8UKsnLq8bfRkUJ2CmXVeT?>QUcJa{>d zJxlQfZnM>!wv?-N@#BP>o385y%dQJ@*^^@OvJIoWS>XFN>-xEtT2A+tDJ@R@c%2+4 zs#Py{sxbviMl$@qW`OC7W|Xp=p%u9&$8vK$mSi|r>66?e?auQ>=ijFW86=DYxn9SE zYLm(LkIVg6mo!9<_2hF@@-i}hy5?x8-rw6wY@<)JI{0D1!_TQFpUG~vlsrgqB9iy| zt)75#8Wlox-sSQ?gd9qaagI4~%{d69iiTex0kirQa#_-7+)764T!g>Uqn$}=dC%jI0bV%+DeHQ~>q1lhuQqr&lMWW@R8iWNCZW~1ylHaFBO zWlhH51UUX-Jl>+Mo?6&x^n-$q;%1APXpRRApL@u0vdbhy$Xo;LO2hm7&d+n^O)R(f z8}n3zh8i53hNBhnXCU*8akGQm!_|yzk4xTR#jZvCDDeCjpLu-kb zh|)gwyTfWpOX9* z(ce0MK2;;P`9a59MZ?up?bF(XE;UH1RBCr#Sk(8%*7pW7qOcK`5`@Q;%~UgLLvL!Q zK#om<58uVY@MEE!0HCQ4AzlXV7rpk9hIiK+|Mb*t>{~54_M6pxsFzitkUhHbyu1!K z(ZR36sija>;l)17kyPbZft?OF4Oi>&vav{G4?=DsJ`VAvPuaD;KzAeY=BUG-2ojX# zBKSg%OInkRFfTo&ZJMYU&>MYSe49Let?-9y*pE%^5;>1QV;b30P3B`+WeS<#C)U1A ziZX=6!xt>7i&z7rWwF?~6 zNSJn0SvW)11Dz%$*&=k~&3c6?SPxvoy)8M^BAPu!L-SpLe?*E!AI~L4o7q`3-64h? z(kOWkg{^YVN1ij_KBo!^y_vNs8li{rTe(yt#<>vkCLS}Bz>V&imuf2!)b@BOfD~ke z}bz{BY3PiWzob*wyeGM!>OGQpmZo1ki>EzsfRoKWIy`%?* z*`}#6&;3FGVM8AAsSywDWTwDl5?uSY=;DrJ`i8R@CGTX??hTn|?0fA#8zn`piBTs?#&jo(r z4k#u4IJneZ- zi;X$_;)C$}l2K!%rb72aJ#^O-Pg*@+Sva9jt#yx_y4xubdmS$_XTRshsbzPY&FT-% zSx&v$%{>(S!cBHvZx`x09aLG~1sl`-^s8GPPppp?zqB~nYt)|FxwhY~;ho2wB>AL? z3jx6YlK2$Z2Ewp9T81buoXNfy&56QC45~o#VI(>%Ob~-wsP}=dL*I~s?*gJ zkLY@1j+5EXo5B}S%RnArXhoC(_CdB?)Z$2Vc0s{i@UpB-UUb%t6w%t@9Z7vPl@g=Y z_~Q?nDDD|EDLJ`i`%@#azj?N>86*tQ^DHSJI~aEmdmt)iIq)=_$j=06+3U%MPl9?$ zD4n~1AYmrAE0bN0HL4AeYH5e3#2239zpBYXB0eLI1b`?-e{s$YXx}4QNey9s>0w-Z zD|>c`^-<}3`y?3p$+;-?q>6oM?Qv?YOXBs`HF46(=2sN~$#~j9UpIWFJg-CKDL}9m2o;A8kZ{Z^Cceyu z&A{V@&x?44vtRZF)Xqd&1|698luFU2+)P`( zos>?`_wfIC@Eat?9X+c5*#?V*z;0yIQYDh#OfMuYTX4>Uf+%YAiIcRoXri@!35_w;+-gwUPBH0hG;VG4Dy@CPyN=298zQM*F((%qJIgawctz+_D zqZEsUbK!_Cvjm}CC-1q*Fy_M{%juF0GMr7oX-{Y`L)|{UE<0UQuj6rKyvqLTyRQn< zcHRt^AXFT51w3Oz*9CFUx&o&jvUOEI z*|Tw-rS7gnsW$2Ui(Jk9H9T)(Cp%hAnhsIhT0k^K?pNk@#oDF#3-9==%T9G2l_80{ zn0y1c>uxHdK;TNBlZZvoRdY=<2laEUny!R0ev9w5Z|;*p7`z}+R*`@@&H^|Lq#6{w zX|q9J`+3|;bRPb4d#XrbWyXEktt)A^_u=FI@Ahv5CeI~^TIMhX;0bO_FN8|Do++G; z?41m6be;J@@Keg?ee0c%)uADX)`LP)3LJ?*dGM%*yR0!Lp|dkFMgX1hG07RQvVj(q^+Oa2i)r#XM= zDT}Fa&Qf_chZw^Nh33$8Bq*aKHYdJ30^MnC&xAM^~*7y%alN0Mc=IJy(;GXqdnF)Mu*92l@WLVA<i$7 zCZw01U-;ubWo}h8B&fBIuhmE)h$+V7IuGji>mHp_t>Qh-=^yEBKq!XE=lzyo;-^rlC zcydqExTRRU$bFePGtg<0m%OXyDr)l#k{tI$HTcu$94K= zr_{?E^WhBVO{LEvyEc|Awq;LKWbfdLQlT+8m_D0a8dW6#^i@Fa+P4OeNIaCdeq9Dt z<)ZrevcX?)#6{BBW8kYHDGFTaJ`Alqohes| zA0eu_N2@3oJU?#_G^?RC_5A`kS#j4fnGLXnz=>%8=)5~$vk}?OG6u(DCGDQ|YXU$9 z_<6_o%h=mL)*uGTWoREw?uUQaYgC0&)HKy7h}49y0dsA;6&K;c4Ld`M3nTc>-qQc^ zp6yz};%(n&_%4|RV;LBbMAfO-UTp$GLjETD6>}A;kwGfh{pYb4cV7+*`UMhO2Kpmt z1tW}A?u=I5rV8u4g2F??9&igJ?Cn$DzFJVY%@?)@2=R;`d+WlS3~I!Zla#M;NVm4O z(u;^lLd;-R*&9=1Od{48*FLNT7P1*l@*RwP6Zpx{;gnu9KgB-p{TnxgQI11 z4gyq$qGq3VvK63cv7TQ45iORV!q)BCmk&ohytus^0CE$&14D3w>U_VwU(*IF$|{n> z5t)P}9uLEik&HK^AI^1i!XPzbcDI#=MX^~)#$ z8%dzfqi+#hJ}XC#(KgC-*pr1v;E)m{I!_rdao`R*x566t&0Zi%9&+RPvn4Sh$(MJr zaKm4PI)2t}Dj{e~Gsscc9g@k`#K+eDNuwe}Ee0b$%2{T5F@PnhUj4(2D z7|0}k>?anqwoa!!s#R76aQX2LZL)1hf)|Pu|C<~XCh#XFNd#tYBcj7TXqCNV*3sH) zmO*(!_^|HpAd!VzepDhkO~LHPj-6{xxLq%_6aJtR$60aDN9s-_i`^N`e%QICs!31d z@a*K^Nzi?ROX$J=gEX)Sp^#jd=={Z;ggCkIt@>Y+`;Fn}_gs247BtlY>r{rn?U@pTY6lM!0JBmq~tz!Xf5k)hGYT3c@1` zx|m6yK(`lFacn%2b>-0E;}tI^7W6SCh_=lI*swJU{JAn?g3v<+twx6^9Q*pT1#JfI zOUcN{y17vj5Z=So^1;GU!|Cro3`JkOr36A(>SLRT4-tk`Rc`M{!TpzauK2yB=-4j* zqKy4&|HvcQak^A1FeHSrU$0+9NbCYshS`@>dL7-5*o^%GG&rTW^BSxP3$(fdAL_Hc z#kfba@8OqdKM>zzPe84c5-8um6#+c!@A$wZ9v|>gLZV&sreL@t|A}CZ9 zvx*D=5Drc%P~mUIcyV!*=xQmIk&1{&!PUzC^G!G_3b9Ri#Mgd2E>trh|AT{6C)`~| z_~fODNCi%CzPZonW6gzp_XzJE(fO8iR^o1$G(OZ(!Z+O zgK+hOTrrEtb6m0w>tJ2UlGb@Y@h!LN5OqjI#A(=+adC38Zki@X&3*0I7b*+T)hD%| zUIK6P{$ng6X)LcJ$E*dY;;>&p5#A9ihw#U}zrNiKN<7xuYfF7l!LxgTzei1z%cF#Q zSpDJOxwTCeVm{)MJ!Cv2fg`9ADS+Z6=niU@0l7%XjYZfNhdTqo-2wOvR z19B3mYg_&RaGq0Ik;o0Uy>e4=C-`X%C9IA#Q}C?dF#R4q)mh{jI;wm|*wOO2`|45{ z=Z~Pk06*f3psx(YVqFJ567*v*dt{mtp4S3sp_1*Buf6K)4PQyVj$37HkdIrpAH1bF@r8hc058EW0ki-h}1i6}XYsTwJGh>f%ss-D>0Xip0q-OKA6b32p{kC1BZf= zQs7@k14I?~IdsoWo6T{@BivD$+t+AY2VM@5ORr)5CQqiXHF9mXlSkjgy0iS<$VX zfrem`zCTA_e&l^eOvvs!B7J+sB;mgYT5*;h1mywlXFc?YNc+P6uXk4f5etJr`pI03 zqYqOS8;>inOE86&G!$SG{f~N;Ig-a({9jGM-z9z{XkHJyMogB(D**NG>DJaj;5=kY zl!5C`Xo7D0uU~^K61$_`<_V%mKsSMN5v9Jn4BMZ!@Y?_I1fh34mRH~5*uUnSR1O3{ za?G?<6<2frZmFRiX~F0VuhWPi>*rAIs)+x^7DRUo@y0ggGMWA(ySw;SSQ;A8V|VpW zLD5!ZF?5f`_WaKoJdO{&!|7*HK7f(hEydM{lY`XV!N|Z#1VY>|ogn+)GyT?681O(W zGi%T&(sEV_K};VpgWO>;ngCT%b>(JI-u51V#vo;& zdiz+oBP->Qy+EGMQxS4ur^mbh+rY`eoGx$>#<*Bbf?r#sMN#iJ{!gq1P~>z{8kZqc zgG1yWN(IRqD91gzNclJ-cNd@EK{_YRRQ?<@TmQb>TNz$Us?GCmPnZpIU927d88;5w z_kFu^xI5$>8w+ZO6Hz;c*1I&&Z?OJ51l)X-ICe;%<*D4AsNl|0dE%bkB~*KM0QQ7) zc^ndpK}paNC{z5?B>bdeMKrwQrG+c0p-F0q5uE@ literal 0 HcmV?d00001 diff --git a/telemetry-receiver/design-export/variables.json b/telemetry-receiver/design-export/variables.json new file mode 100644 index 000000000..ba45d53b0 --- /dev/null +++ b/telemetry-receiver/design-export/variables.json @@ -0,0 +1,168 @@ +{ + "accent/accent": { + "dark": "#FF4FA3", + "light": "#DB2777" + }, + "accent/foreground": { + "dark": "#FFFFFF", + "light": "#FFFFFF" + }, + "accent/soft": { + "dark": "#331525", + "light": "#FFFFFF" + }, + "accent/soft-foreground": { + "dark": "#FF8AC4", + "light": "#BE185D" + }, + "background/background": { + "dark": "#121114", + "light": "#FFFFFF" + }, + "border": { + "dark": "#2C2932", + "light": "#EFC3D6" + }, + "chart/baseline": { + "dark": "#2C2932", + "light": "#EFC3D6" + }, + "chart/grid": { + "dark": "#232128", + "light": "#F8E6EE" + }, + "chart/series-1": { + "dark": "#EC4899", + "light": "#DB2777" + }, + "chart/series-2": { + "dark": "#3987e5", + "light": "#2a78d6" + }, + "chart/track": { + "dark": "#EC48992E", + "light": "#DB27771F" + }, + "danger/danger": { + "dark": "#E0304F", + "light": "#DC2828" + }, + "danger/foreground": { + "dark": "#FCFCFC", + "light": "#FCFCFC" + }, + "danger/soft": { + "dark": "#2E1317", + "light": "#FEE2E2" + }, + "danger/soft-foreground": { + "dark": "#F87171", + "light": "#EF4444" + }, + "default/default": { + "dark": "#232128", + "light": "#F6DCE7" + }, + "default/foreground": { + "dark": "#EDE9F0", + "light": "#2A0F1E" + }, + "field/background": { + "dark": "#17151A", + "light": "#FFFFFF" + }, + "field/foreground": { + "dark": "#FCFCFC", + "light": "#2A0F1E" + }, + "field/placeholder": { + "dark": "#7B7584", + "light": "#8A6C7B" + }, + "foreground/foreground": { + "dark": "#F5F3F7", + "light": "#2A0F1E" + }, + "foreground/link": { + "dark": "#7DB4FF", + "light": "#2563EB" + }, + "foreground/muted": { + "dark": "#9E98A6", + "light": "#6E5262" + }, + "foreground/secondary": { + "dark": "#9E98A6", + "light": "#6E5262" + }, + "foreground/segment": { + "dark": "#F5F3F7", + "light": "#2A0F1E" + }, + "muted": { + "dark": "#9E98A6", + "light": "#6E5262" + }, + "overlay": { + "dark": "#1C1A20", + "light": "#FFF7FB" + }, + "segment": { + "dark": "#1D1B22", + "light": "#FFFFFF" + }, + "separator/separator": { + "dark": "#232227", + "light": "#EFC3D6" + }, + "success/foreground": { + "dark": "#18181B", + "light": "#18181B" + }, + "success/soft": { + "dark": "#0B2211", + "light": "#E0FAE4" + }, + "success/soft-foreground": { + "dark": "#42BD66", + "light": "#006924" + }, + "success/success": { + "dark": "#21C45D", + "light": "#21C45D" + }, + "surface/secondary": { + "dark": "#17151A", + "light": "#F8DDE9" + }, + "surface/surface": { + "dark": "#1C1A20", + "light": "#FFF7FB" + }, + "surface/tertiary": { + "dark": "#141317", + "light": "#F8DDE9" + }, + "typography/font-mono": { + "default": "JetBrains Mono" + }, + "typography/font-sans": { + "default": "Geist" + }, + "warning/foreground": { + "dark": "#18181B", + "light": "#18181B" + }, + "warning/soft": { + "dark": "#331F05", + "light": "#FEF3C7" + }, + "warning/soft-foreground": { + "dark": "#F6AD4C", + "light": "#92400E" + }, + "warning/warning": { + "dark": "#F59F0A", + "light": "#F59F0A" + } +} diff --git a/telemetry-receiver/telemetry-dashboard.pen b/telemetry-receiver/telemetry-dashboard.pen new file mode 100644 index 000000000..68ec79346 --- /dev/null +++ b/telemetry-receiver/telemetry-dashboard.pen @@ -0,0 +1,19838 @@ +{ + "version": "2.20", + "children": [ + { + "type": "frame", + "id": "kGRVB", + "x": -250.0409164428729, + "y": -39.121093750000455, + "name": "HeroUI: Design System Components", + "theme": { + "semantic": "light" + }, + "width": 3116, + "height": 3588, + "fill": "$background/background", + "layout": "none", + "children": [ + { + "type": "text", + "id": "U7P9v3", + "x": 160, + "y": 230, + "name": "lbl1", + "fill": "$muted", + "content": "Accordion", + "fontFamily": "$typography/font-sans", + "fontSize": 11, + "fontWeight": "500" + }, + { + "type": "text", + "id": "XMjnF", + "x": 160, + "y": 510, + "name": "lbl2", + "fill": "$muted", + "content": "Alerts", + "fontFamily": "$typography/font-sans", + "fontSize": 11, + "fontWeight": "500" + }, + { + "type": "text", + "id": "gW4RF", + "x": 160, + "y": 1611, + "name": "lbl3", + "fill": "$muted", + "content": "Avatars", + "fontFamily": "$typography/font-sans", + "fontSize": 11, + "fontWeight": "500" + }, + { + "type": "text", + "id": "VxMDo", + "x": 173, + "y": 2071, + "name": "lbl5", + "fill": "$muted", + "content": "Tabs", + "fontFamily": "$typography/font-sans", + "fontSize": 11, + "fontWeight": "500" + }, + { + "type": "text", + "id": "NABLJ", + "x": 166, + "y": 2317, + "name": "lbl6", + "fill": "$muted", + "content": "Link", + "fontFamily": "$typography/font-sans", + "fontSize": 11, + "fontWeight": "500" + }, + { + "type": "text", + "id": "RUrGz", + "x": 170, + "y": 2479, + "name": "lbl7", + "fill": "$muted", + "content": "Buttons", + "fontFamily": "$typography/font-sans", + "fontSize": 11, + "fontWeight": "500" + }, + { + "type": "text", + "id": "i2bZL", + "x": 160, + "y": 3282, + "name": "lbl9", + "fill": "$muted", + "content": "Spinner", + "fontFamily": "$typography/font-sans", + "fontSize": 11, + "fontWeight": "500" + }, + { + "type": "text", + "id": "bUDCx", + "x": 220, + "y": 3282, + "name": "lbl10", + "fill": "$muted", + "content": "Tooltip", + "fontFamily": "$typography/font-sans", + "fontSize": 11, + "fontWeight": "500" + }, + { + "type": "frame", + "id": "TgcH2", + "x": 160, + "y": 250, + "name": "Accordion/Open", + "reusable": true, + "width": 480, + "layout": "vertical", + "children": [ + { + "type": "frame", + "id": "KwoX0", + "name": "Trigger", + "width": "fill_container", + "gap": "$spacing/3", + "padding": 16, + "justifyContent": "space_between", + "alignItems": "center", + "children": [ + { + "type": "frame", + "id": "vCZrt", + "name": "Frame 5", + "width": "fill_container", + "gap": "$spacing/3", + "children": [ + { + "type": "icon", + "id": "r1nAQl", + "name": "icon1", + "width": 16, + "height": 16, + "icon": "shopping-bag", + "library": "lucide", + "fill": "$muted" + }, + { + "type": "text", + "id": "Ovx9n", + "name": "Title", + "fill": "$foreground/foreground", + "content": "How do I place an order?", + "fontFamily": "$typography/font-sans", + "fontSize": 14, + "fontWeight": "500" + } + ] + }, + { + "type": "icon", + "id": "tSdNO", + "name": "Indicator", + "width": 16, + "height": 16, + "icon": "chevron-up", + "library": "lucide", + "fill": "$muted" + } + ] + }, + { + "type": "frame", + "id": "OFKsD", + "name": "Body", + "width": "fill_container", + "gap": "$spacing/3", + "padding": [ + 0, + 16, + 16, + 16 + ], + "children": [ + { + "type": "icon", + "id": "JL8cb", + "name": "icon1", + "width": 16, + "height": 16, + "icon": "shopping-bag", + "library": "lucide", + "fill": { + "type": "color", + "color": "$muted", + "enabled": false + } + }, + { + "type": "text", + "id": "QFzcp", + "name": "Content", + "fill": "$muted", + "textGrowth": "fixed-width", + "width": "fill_container", + "content": "Browse our products, add items to your cart, and proceed to checkout. You'll need to provide shipping and payment information to complete your purchase.", + "fontFamily": "$typography/font-sans", + "fontSize": 14, + "fontWeight": "normal" + } + ] + }, + { + "type": "line", + "id": "U0bOlY", + "name": "accSep", + "fill": "$separator/separator", + "width": "fill_container", + "height": 1 + } + ] + }, + { + "type": "frame", + "id": "krDMR", + "x": 160, + "y": 1631, + "name": "Avatar/Small", + "reusable": true, + "width": 32, + "height": 32, + "fill": "$default/default", + "cornerRadius": 9999, + "justifyContent": "center", + "alignItems": "center", + "children": [ + { + "type": "text", + "id": "WBJYt", + "name": "Initials", + "fill": "$foreground/foreground", + "content": "AS", + "fontFamily": "$typography/font-sans", + "fontSize": 12, + "fontWeight": "500" + } + ] + }, + { + "type": "frame", + "id": "f6heXB", + "x": 208, + "y": 1627, + "name": "Avatar/Text", + "reusable": true, + "width": 40, + "height": 40, + "fill": "$default/default", + "cornerRadius": 9999, + "justifyContent": "center", + "alignItems": "center", + "children": [ + { + "type": "text", + "id": "dDrQ2", + "name": "Initials", + "fill": "$foreground/foreground", + "content": "AS", + "fontFamily": "$typography/font-sans", + "fontSize": 14, + "fontWeight": "500" + } + ] + }, + { + "type": "frame", + "id": "VDZcQ", + "x": 264, + "y": 1623, + "name": "Avatar/Large", + "reusable": true, + "width": 48, + "height": 48, + "fill": "$default/default", + "cornerRadius": 9999, + "justifyContent": "center", + "alignItems": "center", + "children": [ + { + "type": "text", + "id": "J97YG1", + "name": "Initials", + "fill": "$foreground/foreground", + "content": "AS", + "fontFamily": "$typography/font-sans", + "fontSize": 16, + "fontWeight": "500" + } + ] + }, + { + "type": "frame", + "id": "skyDG", + "x": 350, + "y": 1627, + "name": "Avatar/Image", + "reusable": true, + "width": 40, + "height": 40, + "fill": { + "type": "image", + "enabled": true, + "mode": "cover" + }, + "cornerRadius": 9999 + }, + { + "type": "frame", + "id": "WOmU9", + "x": 166, + "y": 2337, + "name": "Link", + "reusable": true, + "gap": 4, + "alignItems": "center", + "children": [ + { + "type": "text", + "id": "mShJP", + "name": "Label", + "fill": "$foreground/link", + "content": "Link text", + "fontFamily": "$typography/font-sans", + "fontSize": 14, + "fontWeight": "500" + }, + { + "type": "icon", + "id": "aapPy", + "name": "linkIcon", + "opacity": 0.6, + "width": 12, + "height": 12, + "icon": "external-link", + "library": "lucide", + "fill": "$foreground/link" + } + ] + }, + { + "type": "frame", + "id": "SMzFV", + "x": 160, + "y": 3302, + "name": "Spinner", + "reusable": true, + "width": 24, + "height": 24, + "justifyContent": "center", + "alignItems": "center", + "children": [ + { + "type": "ellipse", + "id": "s6lml", + "name": "spinnerCircle", + "innerRadius": 0.75, + "sweepAngle": 270, + "width": "fill_container", + "height": "fill_container", + "stroke": "$accent/accent", + "strokeWidth": 2.5, + "strokeAlignment": "inner" + } + ] + }, + { + "type": "frame", + "id": "Lmo9O", + "x": 220, + "y": 3302, + "name": "Tooltip", + "reusable": true, + "fill": "$overlay", + "cornerRadius": "$radius/xl", + "effect": { + "type": "shadow", + "shadowType": "outer", + "color": "#0000000F", + "offset": { + "x": 0, + "y": 2 + }, + "blur": 8 + }, + "padding": [ + 4, + 8 + ], + "alignItems": "center", + "children": [ + { + "type": "text", + "id": "Y2gTnB", + "name": "Content", + "fill": "$foreground/foreground", + "content": "Tooltip text", + "fontFamily": "$typography/font-sans", + "fontSize": 12, + "fontWeight": "normal" + } + ] + }, + { + "type": "frame", + "id": "Y05FxQ", + "x": 165, + "y": 2972, + "name": "Menu Item/Active", + "reusable": true, + "width": 240, + "height": 36, + "fill": "$default/default", + "cornerRadius": "$radius/2xl", + "gap": 12, + "padding": [ + 6, + 8 + ], + "alignItems": "center", + "children": [ + { + "type": "icon", + "id": "bUS1f", + "name": "menuActIcon", + "width": 16, + "height": 16, + "icon": "user", + "library": "lucide", + "fill": "$foreground/foreground" + }, + { + "type": "text", + "id": "SKKUq", + "name": "Label", + "fill": "$foreground/foreground", + "content": "Profile", + "fontFamily": "$typography/font-sans", + "fontSize": 14, + "fontWeight": "normal" + } + ] + }, + { + "type": "frame", + "id": "nO9fb", + "x": 165, + "y": 3022, + "name": "Menu Item/Default", + "reusable": true, + "width": 240, + "height": 36, + "cornerRadius": "$radius/2xl", + "gap": 12, + "padding": [ + 6, + 8 + ], + "alignItems": "center", + "children": [ + { + "type": "icon", + "id": "jqu3l", + "name": "menuIcon", + "width": 16, + "height": 16, + "icon": "settings", + "library": "lucide", + "fill": "$foreground/foreground" + }, + { + "type": "text", + "id": "iwdfq", + "name": "Label", + "fill": "$foreground/foreground", + "content": "Settings", + "fontFamily": "$typography/font-sans", + "fontSize": 14, + "fontWeight": "normal" + } + ] + }, + { + "type": "frame", + "id": "G28hI", + "x": 160, + "y": 380, + "name": "Accordion/Closed", + "reusable": true, + "width": 480, + "layout": "vertical", + "children": [ + { + "type": "frame", + "id": "r52xY", + "name": "Trigger", + "width": "fill_container", + "gap": "$spacing/3", + "padding": 16, + "justifyContent": "space_between", + "alignItems": "center", + "children": [ + { + "type": "frame", + "id": "xcQqf", + "name": "Frame 4", + "width": "fill_container", + "gap": "$spacing/3", + "children": [ + { + "type": "icon", + "id": "k3BqUh", + "name": "icon2", + "width": 16, + "height": 16, + "icon": "shopping-bag", + "library": "lucide", + "fill": "$muted" + }, + { + "type": "text", + "id": "N3yiU", + "name": "Title", + "fill": "$foreground/foreground", + "content": "How do I place an order?", + "fontFamily": "$typography/font-sans", + "fontSize": 14, + "fontWeight": "500" + } + ] + }, + { + "type": "icon", + "id": "J3c0zV", + "name": "Indicator", + "width": 16, + "height": 16, + "icon": "chevron-down", + "library": "lucide", + "fill": "$muted" + } + ] + }, + { + "type": "line", + "id": "X6yVA", + "name": "accSep", + "fill": "$separator/separator", + "width": "fill_container", + "height": 1 + } + ] + }, + { + "type": "frame", + "id": "OjVp7", + "x": 160, + "y": 530, + "name": "Alert/Default", + "reusable": true, + "width": 540, + "fill": "$surface/surface", + "cornerRadius": "$radius/3xl", + "effect": { + "type": "shadow", + "shadowType": "outer", + "color": "#0000000A", + "offset": { + "x": 0, + "y": 2 + }, + "blur": 4 + }, + "gap": 16, + "padding": [ + 12, + 16 + ], + "children": [ + { + "type": "frame", + "id": "vHqkN", + "name": "Icon", + "padding": 4, + "justifyContent": "center", + "alignItems": "center", + "children": [ + { + "type": "icon", + "id": "e7BW3a", + "width": 16, + "height": 16, + "icon": "info", + "library": "lucide", + "fill": "$foreground/foreground" + } + ] + }, + { + "type": "frame", + "id": "bzqwP", + "name": "Content", + "width": "fill_container", + "layout": "vertical", + "children": [ + { + "type": "text", + "id": "oXf3G", + "name": "Title", + "fill": "$foreground/foreground", + "content": "New features available", + "lineHeight": 1.7, + "fontFamily": "$typography/font-sans", + "fontSize": 14, + "fontWeight": "500" + }, + { + "type": "text", + "id": "WGFDW", + "name": "Description", + "fill": "$muted", + "textGrowth": "fixed-width", + "width": "fill_container", + "content": "Check out our latest updates including dark mode support and improved accessibility features.", + "fontFamily": "$typography/font-sans", + "fontSize": 14, + "fontWeight": "normal" + } + ] + } + ] + }, + { + "type": "frame", + "id": "IdLLu", + "x": 160, + "y": 650, + "name": "Alert/Accent", + "reusable": true, + "width": 540, + "fill": "$surface/surface", + "cornerRadius": "$radius/3xl", + "effect": { + "type": "shadow", + "shadowType": "outer", + "color": "#0000000A", + "offset": { + "x": 0, + "y": 2 + }, + "blur": 4 + }, + "gap": 16, + "padding": [ + 12, + 16 + ], + "children": [ + { + "type": "frame", + "id": "TZgc6", + "name": "Icon", + "padding": 4, + "justifyContent": "center", + "alignItems": "center", + "children": [ + { + "type": "icon", + "id": "FaHmS", + "width": 16, + "height": 16, + "icon": "info", + "library": "lucide", + "fill": "$accent/accent" + } + ] + }, + { + "type": "frame", + "id": "OC6ti", + "name": "Content", + "width": "fill_container", + "layout": "vertical", + "children": [ + { + "type": "text", + "id": "PhFj4", + "name": "Title", + "fill": "$accent/accent", + "content": "Update available", + "lineHeight": 1.7, + "fontFamily": "$typography/font-sans", + "fontSize": 14, + "fontWeight": "500" + }, + { + "type": "text", + "id": "j5eH0", + "name": "Description", + "fill": "$muted", + "textGrowth": "fixed-width", + "width": "fill_container", + "content": "A new version of the application is available. Please refresh to get the latest features and bug fixes.", + "fontFamily": "$typography/font-sans", + "fontSize": 14, + "fontWeight": "normal" + } + ] + }, + { + "type": "frame", + "id": "yIfzn", + "name": "Button/Primary/SM", + "height": 32, + "fill": "$accent/accent", + "cornerRadius": "$radius/3xl", + "gap": 5, + "padding": [ + 8, + "$spacing/3" + ], + "justifyContent": "center", + "alignItems": "center", + "children": [ + { + "type": "icon", + "id": "sKPVB", + "x": 12, + "y": 9, + "name": "i1", + "enabled": false, + "width": 14, + "height": 14, + "icon": "plus", + "library": "lucide", + "fill": "$accent/foreground" + }, + { + "type": "text", + "id": "Mc7em", + "name": "Label", + "fill": "$accent/foreground", + "content": "Refresh", + "fontFamily": "$typography/font-sans", + "fontSize": 13, + "fontWeight": "500" + } + ] + } + ] + }, + { + "type": "frame", + "id": "LFPu5", + "x": 160, + "y": 780, + "name": "Alert/Success", + "reusable": true, + "width": 540, + "fill": "$surface/surface", + "cornerRadius": "$radius/3xl", + "effect": { + "type": "shadow", + "shadowType": "outer", + "color": "#0000000A", + "offset": { + "x": 0, + "y": 2 + }, + "blur": 4 + }, + "gap": 16, + "padding": [ + 12, + 16 + ], + "children": [ + { + "type": "frame", + "id": "V6kpc", + "name": "Icon", + "padding": 4, + "justifyContent": "center", + "alignItems": "center", + "children": [ + { + "type": "icon", + "id": "fxMER", + "width": 16, + "height": 16, + "icon": "circle-check", + "library": "lucide", + "fill": "$success/success" + } + ] + }, + { + "type": "frame", + "id": "j0AG1", + "name": "Content", + "width": "fill_container", + "layout": "vertical", + "children": [ + { + "type": "text", + "id": "mhlaQ", + "name": "Title", + "fill": "$success/success", + "content": "Payment successful", + "lineHeight": 1.7, + "fontFamily": "$typography/font-sans", + "fontSize": 14, + "fontWeight": "500" + }, + { + "type": "text", + "id": "h191W", + "name": "Description", + "fill": "$muted", + "textGrowth": "fixed-width", + "width": "fill_container", + "content": "Your payment of $49.99 has been processed. A confirmation email has been sent to your inbox.", + "fontFamily": "$typography/font-sans", + "fontSize": 14, + "fontWeight": "normal" + } + ] + }, + { + "type": "frame", + "id": "BnUlR", + "name": "Button/Outline/SM", + "height": 32, + "cornerRadius": "$radius/3xl", + "stroke": "$border", + "strokeWidth": 1, + "strokeAlignment": "inner", + "gap": 5, + "padding": [ + 8, + "$spacing/3" + ], + "justifyContent": "center", + "alignItems": "center", + "children": [ + { + "type": "icon", + "id": "TDGe3", + "x": 12, + "y": 9, + "name": "i4", + "enabled": false, + "width": 14, + "height": 14, + "icon": "plus", + "library": "lucide", + "fill": "$foreground/foreground" + }, + { + "type": "text", + "id": "slSgV", + "name": "Label", + "fill": "$foreground/foreground", + "content": "View receipt", + "fontFamily": "$typography/font-sans", + "fontSize": 13, + "fontWeight": "500" + } + ] + } + ] + }, + { + "type": "frame", + "id": "S6XBme", + "x": 160, + "y": 910, + "name": "Alert/Warning", + "reusable": true, + "width": 540, + "fill": "$surface/surface", + "cornerRadius": "$radius/3xl", + "effect": { + "type": "shadow", + "shadowType": "outer", + "color": "#0000000A", + "offset": { + "x": 0, + "y": 2 + }, + "blur": 4 + }, + "gap": 16, + "padding": [ + 12, + 16 + ], + "children": [ + { + "type": "frame", + "id": "G7nu3", + "name": "Icon", + "padding": 4, + "justifyContent": "center", + "alignItems": "center", + "children": [ + { + "type": "icon", + "id": "r6vihP", + "width": 16, + "height": 16, + "icon": "triangle-alert", + "library": "lucide", + "fill": "$warning/warning" + } + ] + }, + { + "type": "frame", + "id": "dmXI3", + "name": "Content", + "width": "fill_container", + "layout": "vertical", + "children": [ + { + "type": "text", + "id": "dbYgN", + "name": "Title", + "fill": "$warning/warning", + "content": "Storage almost full", + "lineHeight": 1.7, + "fontFamily": "$typography/font-sans", + "fontSize": 14, + "fontWeight": "500" + }, + { + "type": "text", + "id": "QrqhL", + "name": "Description", + "fill": "$muted", + "textGrowth": "fixed-width", + "width": "fill_container", + "content": "You're using 90% of your storage quota. Consider upgrading your plan or removing unused files to avoid service interruption.", + "fontFamily": "$typography/font-sans", + "fontSize": 14, + "fontWeight": "normal" + } + ] + }, + { + "type": "frame", + "id": "b1ToU", + "name": "Button/Outline/SM", + "height": 32, + "cornerRadius": "$radius/3xl", + "stroke": "$border", + "strokeWidth": 1, + "strokeAlignment": "inner", + "gap": 5, + "padding": [ + 8, + "$spacing/3" + ], + "justifyContent": "center", + "alignItems": "center", + "children": [ + { + "type": "icon", + "id": "i1E6h", + "x": 12, + "y": 9, + "name": "i4", + "enabled": false, + "width": 14, + "height": 14, + "icon": "plus", + "library": "lucide", + "fill": "$foreground/foreground" + }, + { + "type": "text", + "id": "xBddT", + "name": "Label", + "fill": "$foreground/foreground", + "content": "Manage storage", + "fontFamily": "$typography/font-sans", + "fontSize": 13, + "fontWeight": "500" + } + ] + } + ] + }, + { + "type": "frame", + "id": "YxI4e", + "x": 160, + "y": 1060, + "name": "Alert/Danger", + "reusable": true, + "width": 540, + "fill": "$surface/surface", + "cornerRadius": "$radius/3xl", + "effect": { + "type": "shadow", + "shadowType": "outer", + "color": "#0000000A", + "offset": { + "x": 0, + "y": 2 + }, + "blur": 4 + }, + "gap": 16, + "padding": [ + 12, + 16 + ], + "children": [ + { + "type": "frame", + "id": "ozeck", + "name": "Icon", + "padding": 4, + "justifyContent": "center", + "alignItems": "center", + "children": [ + { + "type": "icon", + "id": "eItLA", + "width": 16, + "height": 16, + "icon": "circle-alert", + "library": "lucide", + "fill": "$danger/danger" + } + ] + }, + { + "type": "frame", + "id": "G8N4mO", + "name": "Content", + "width": "fill_container", + "layout": "vertical", + "gap": 4, + "children": [ + { + "type": "text", + "id": "K5BCAi", + "name": "Title", + "fill": "$danger/danger", + "content": "Unable to connect to server", + "lineHeight": 1.7, + "fontFamily": "$typography/font-sans", + "fontSize": 14, + "fontWeight": "500" + }, + { + "type": "text", + "id": "jLj0v", + "name": "Description", + "fill": "$muted", + "textGrowth": "fixed-width", + "width": "fill_container", + "content": "We're experiencing connection issues. Please try the following:\n• Check your internet connection\n• Refresh the page\n• Clear your browser cache", + "lineHeight": 1.6, + "fontFamily": "$typography/font-sans", + "fontSize": 14, + "fontWeight": "normal" + } + ] + }, + { + "type": "frame", + "id": "BLuJ9", + "name": "Button/Danger/SM", + "height": 32, + "fill": "$danger/danger", + "cornerRadius": "$radius/3xl", + "gap": 5, + "padding": [ + 8, + "$spacing/3" + ], + "justifyContent": "center", + "alignItems": "center", + "children": [ + { + "type": "icon", + "id": "O8NSXe", + "x": 12, + "y": 9, + "name": "i1", + "enabled": false, + "width": 14, + "height": 14, + "icon": "plus", + "library": "lucide", + "fill": "$danger/foreground" + }, + { + "type": "text", + "id": "bM0WW", + "name": "Label", + "fill": "$danger/foreground", + "content": "Retry", + "fontFamily": "$typography/font-sans", + "fontSize": 13, + "fontWeight": "500" + } + ] + } + ] + }, + { + "type": "frame", + "id": "d7raV", + "x": 160, + "y": 1240, + "name": "Alert/Success Dismissible", + "reusable": true, + "width": 540, + "fill": "$surface/surface", + "cornerRadius": "$radius/3xl", + "effect": { + "type": "shadow", + "shadowType": "outer", + "color": "#0000000A", + "offset": { + "x": 0, + "y": 2 + }, + "blur": 4 + }, + "gap": 16, + "padding": [ + 12, + 16 + ], + "alignItems": "center", + "children": [ + { + "type": "frame", + "id": "tNmdg", + "name": "Icon", + "padding": 4, + "justifyContent": "center", + "alignItems": "center", + "children": [ + { + "type": "icon", + "id": "nMexd", + "width": 16, + "height": 16, + "icon": "circle-check", + "library": "lucide", + "fill": "$success/success" + } + ] + }, + { + "type": "frame", + "id": "s0OmFp", + "name": "Content", + "width": "fill_container", + "layout": "vertical", + "children": [ + { + "type": "text", + "id": "m2NwJ", + "name": "Title", + "fill": "$success/success", + "content": "Profile updated successfully", + "fontFamily": "$typography/font-sans", + "fontSize": 14, + "fontWeight": "500" + } + ] + }, + { + "type": "frame", + "id": "vMP6P", + "name": "Close", + "width": 24, + "height": 24, + "cornerRadius": "$radius/md", + "justifyContent": "center", + "alignItems": "center", + "children": [ + { + "type": "icon", + "id": "XtgqZ", + "width": 14, + "height": 14, + "icon": "x", + "library": "lucide", + "fill": "$muted" + } + ] + } + ] + }, + { + "type": "frame", + "id": "j1FWr5", + "x": 160, + "y": 1310, + "name": "Alert/Accent Loading", + "reusable": true, + "width": 540, + "fill": "$surface/surface", + "cornerRadius": "$radius/3xl", + "effect": { + "type": "shadow", + "shadowType": "outer", + "color": "#0000000A", + "offset": { + "x": 0, + "y": 2 + }, + "blur": 4 + }, + "gap": 16, + "padding": [ + 12, + 16 + ], + "children": [ + { + "type": "frame", + "id": "NEfoH", + "name": "Icon", + "padding": 4, + "justifyContent": "center", + "alignItems": "center", + "children": [ + { + "type": "frame", + "id": "Q22Ro", + "name": "Spinner", + "width": 16, + "height": 16, + "justifyContent": "center", + "alignItems": "center", + "children": [ + { + "type": "ellipse", + "id": "DF6ao", + "name": "spinnerCircle", + "innerRadius": 0.75, + "sweepAngle": 270, + "width": "fill_container", + "height": "fill_container", + "stroke": "$accent/accent", + "strokeWidth": 2.5, + "strokeAlignment": "inner" + } + ] + } + ] + }, + { + "type": "frame", + "id": "D9A8C", + "name": "Content", + "width": "fill_container", + "layout": "vertical", + "children": [ + { + "type": "text", + "id": "x8U9q", + "name": "Title", + "fill": "$accent/accent", + "content": "Processing your request", + "lineHeight": 1.7, + "fontFamily": "$typography/font-sans", + "fontSize": 14, + "fontWeight": "500" + }, + { + "type": "text", + "id": "F5Hp1", + "name": "Description", + "fill": "$muted", + "textGrowth": "fixed-width", + "width": "fill_container", + "content": "Please wait while we sync your data. This may take a few moments.", + "fontFamily": "$typography/font-sans", + "fontSize": 14, + "fontWeight": "normal" + } + ] + } + ] + }, + { + "type": "frame", + "id": "oECDo", + "x": 160, + "y": 1410, + "name": "Alert/Warning Simple", + "reusable": true, + "width": 540, + "fill": "$surface/surface", + "cornerRadius": "$radius/3xl", + "effect": { + "type": "shadow", + "shadowType": "outer", + "color": "#0000000A", + "offset": { + "x": 0, + "y": 2 + }, + "blur": 4 + }, + "gap": 16, + "padding": [ + 12, + 16 + ], + "children": [ + { + "type": "frame", + "id": "JtrpU", + "name": "Icon", + "padding": 4, + "justifyContent": "center", + "alignItems": "center", + "children": [ + { + "type": "icon", + "id": "C5ps4w", + "width": 16, + "height": 16, + "icon": "triangle-alert", + "library": "lucide", + "fill": "$warning/warning" + } + ] + }, + { + "type": "frame", + "id": "QBo46", + "name": "Content", + "width": "fill_container", + "layout": "vertical", + "children": [ + { + "type": "text", + "id": "h9LciS", + "name": "Title", + "fill": "$warning/warning", + "content": "Scheduled maintenance", + "lineHeight": 1.7, + "fontFamily": "$typography/font-sans", + "fontSize": 14, + "fontWeight": "500" + }, + { + "type": "text", + "id": "L3gUE", + "name": "Description", + "fill": "$muted", + "textGrowth": "fixed-width", + "width": "fill_container", + "content": "Our services will be unavailable on Sunday, March 15th from 2:00 AM to 6:00 AM UTC for scheduled maintenance.", + "fontFamily": "$typography/font-sans", + "fontSize": 14, + "fontWeight": "normal" + } + ] + } + ] + }, + { + "type": "frame", + "id": "XA1WX", + "x": 170, + "y": 2499, + "name": "Button/Primary/SM", + "reusable": true, + "height": 32, + "fill": "$accent/accent", + "cornerRadius": "$radius/3xl", + "gap": 5, + "padding": [ + 8, + "$spacing/3" + ], + "justifyContent": "center", + "alignItems": "center", + "children": [ + { + "type": "icon", + "id": "OILti", + "name": "i1", + "width": 14, + "height": 14, + "icon": "plus", + "library": "lucide", + "fill": "$accent/foreground" + }, + { + "type": "text", + "id": "MymPz", + "name": "Label", + "fill": "$accent/foreground", + "content": "Button", + "fontFamily": "$typography/font-sans", + "fontSize": 13, + "fontWeight": "500" + } + ] + }, + { + "type": "frame", + "id": "hvQ4m", + "x": 280, + "y": 2499, + "name": "Button/Primary/MD", + "reusable": true, + "height": 36, + "fill": "$accent/accent", + "cornerRadius": "$radius/3xl", + "gap": "$spacing/2", + "padding": [ + 8, + "$spacing/4" + ], + "justifyContent": "center", + "alignItems": "center", + "children": [ + { + "type": "icon", + "id": "UYKSN", + "name": "i2", + "width": 16, + "height": 16, + "icon": "plus", + "library": "lucide", + "fill": "$accent/foreground" + }, + { + "type": "text", + "id": "y9bBK0", + "name": "Label", + "fill": "$accent/foreground", + "content": "Button", + "fontFamily": "$typography/font-sans", + "fontSize": 14, + "fontWeight": "500" + } + ] + }, + { + "type": "frame", + "id": "RL95G", + "x": 400, + "y": 2499, + "name": "Button/Primary/LG", + "reusable": true, + "height": 40, + "fill": "$accent/accent", + "cornerRadius": "$radius/3xl", + "gap": "$spacing/2", + "padding": [ + 8, + "$spacing/5" + ], + "justifyContent": "center", + "alignItems": "center", + "children": [ + { + "type": "icon", + "id": "LcUKQ", + "name": "i3", + "width": 18, + "height": 18, + "icon": "plus", + "library": "lucide", + "fill": "$accent/foreground" + }, + { + "type": "text", + "id": "M8s38", + "name": "Label", + "fill": "$accent/foreground", + "content": "Button", + "fontFamily": "$typography/font-sans", + "fontSize": 16, + "fontWeight": "500" + } + ] + }, + { + "type": "frame", + "id": "pnetq", + "x": 540, + "y": 2499, + "name": "Button/Primary/Icon/SM", + "reusable": true, + "width": 32, + "height": 32, + "fill": "$accent/accent", + "cornerRadius": "$radius/3xl", + "justifyContent": "center", + "alignItems": "center", + "children": [ + { + "type": "icon", + "id": "vsnEO", + "width": 16, + "height": 16, + "icon": "plus", + "library": "lucide", + "fill": "$accent/foreground" + } + ] + }, + { + "type": "frame", + "id": "eYZ4x", + "x": 590, + "y": 2499, + "name": "Button/Primary/Icon/MD", + "reusable": true, + "width": 36, + "height": 36, + "fill": "$accent/accent", + "cornerRadius": "$radius/3xl", + "justifyContent": "center", + "alignItems": "center", + "children": [ + { + "type": "icon", + "id": "l02YX", + "width": 16, + "height": 16, + "icon": "plus", + "library": "lucide", + "fill": "$accent/foreground" + } + ] + }, + { + "type": "frame", + "id": "gt6cG", + "x": 644, + "y": 2499, + "name": "Button/Primary/Icon/LG", + "reusable": true, + "width": 40, + "height": 40, + "fill": "$accent/accent", + "cornerRadius": "$radius/3xl", + "justifyContent": "center", + "alignItems": "center", + "children": [ + { + "type": "icon", + "id": "cV8Dn", + "width": 20, + "height": 20, + "icon": "plus", + "library": "lucide", + "fill": "$accent/foreground" + } + ] + }, + { + "type": "frame", + "id": "Bn8pk", + "x": 170, + "y": 2549, + "name": "Button/Secondary/SM", + "reusable": true, + "height": 32, + "fill": "$default/default", + "cornerRadius": "$radius/3xl", + "gap": 5, + "padding": [ + 8, + "$spacing/3" + ], + "justifyContent": "center", + "alignItems": "center", + "children": [ + { + "type": "icon", + "id": "ZbCsD", + "width": 14, + "height": 14, + "icon": "plus", + "library": "lucide", + "fill": "$accent/accent" + }, + { + "type": "text", + "id": "y91YdS", + "name": "Label", + "fill": "$accent/accent", + "content": "Button", + "fontFamily": "$typography/font-sans", + "fontSize": 13, + "fontWeight": "500" + } + ] + }, + { + "type": "frame", + "id": "fPavj", + "x": 280, + "y": 2549, + "name": "Button/Secondary/MD", + "reusable": true, + "height": 36, + "fill": "$default/default", + "cornerRadius": "$radius/3xl", + "gap": "$spacing/2", + "padding": [ + 8, + "$spacing/4" + ], + "justifyContent": "center", + "alignItems": "center", + "children": [ + { + "type": "icon", + "id": "tQtkd", + "width": 16, + "height": 16, + "icon": "plus", + "library": "lucide", + "fill": "$accent/accent" + }, + { + "type": "text", + "id": "UBm8s", + "name": "Label", + "fill": "$accent/accent", + "content": "Button", + "fontFamily": "$typography/font-sans", + "fontSize": 14, + "fontWeight": "500" + } + ] + }, + { + "type": "frame", + "id": "unLeT", + "x": 400, + "y": 2549, + "name": "Button/Secondary/LG", + "reusable": true, + "height": 40, + "fill": "$default/default", + "cornerRadius": "$radius/3xl", + "gap": "$spacing/2", + "padding": [ + 8, + "$spacing/5" + ], + "justifyContent": "center", + "alignItems": "center", + "children": [ + { + "type": "icon", + "id": "Mw4oD", + "width": 18, + "height": 18, + "icon": "plus", + "library": "lucide", + "fill": "$accent/accent" + }, + { + "type": "text", + "id": "VdorP", + "name": "Label", + "fill": "$accent/accent", + "content": "Button", + "fontFamily": "$typography/font-sans", + "fontSize": 16, + "fontWeight": "500" + } + ] + }, + { + "type": "frame", + "id": "A8gzDH", + "x": 540, + "y": 2549, + "name": "Button/Secondary/Icon/SM", + "reusable": true, + "width": 32, + "height": 32, + "fill": "$default/default", + "cornerRadius": "$radius/3xl", + "justifyContent": "center", + "alignItems": "center", + "children": [ + { + "type": "icon", + "id": "ZQvpK", + "width": 16, + "height": 16, + "icon": "plus", + "library": "lucide", + "fill": "$accent/accent" + } + ] + }, + { + "type": "frame", + "id": "hPqUL", + "x": 590, + "y": 2549, + "name": "Button/Secondary/Icon/MD", + "reusable": true, + "width": 36, + "height": 36, + "fill": "$default/default", + "cornerRadius": "$radius/3xl", + "justifyContent": "center", + "alignItems": "center", + "children": [ + { + "type": "icon", + "id": "L3o73U", + "width": 16, + "height": 16, + "icon": "plus", + "library": "lucide", + "fill": "$accent/accent" + } + ] + }, + { + "type": "frame", + "id": "wqGHs", + "x": 644, + "y": 2549, + "name": "Button/Secondary/Icon/LG", + "reusable": true, + "width": 40, + "height": 40, + "fill": "$default/default", + "cornerRadius": "$radius/3xl", + "justifyContent": "center", + "alignItems": "center", + "children": [ + { + "type": "icon", + "id": "k6FhJ", + "width": 20, + "height": 20, + "icon": "plus", + "library": "lucide", + "fill": "$accent/accent" + } + ] + }, + { + "type": "frame", + "id": "bCpKh", + "x": 170, + "y": 2649, + "name": "Button/Outline/SM", + "reusable": true, + "height": 32, + "cornerRadius": "$radius/3xl", + "stroke": "$border", + "strokeWidth": 1, + "strokeAlignment": "inner", + "gap": 5, + "padding": [ + 8, + "$spacing/3" + ], + "justifyContent": "center", + "alignItems": "center", + "children": [ + { + "type": "icon", + "id": "Watg8", + "name": "i4", + "width": 14, + "height": 14, + "icon": "plus", + "library": "lucide", + "fill": "$foreground/foreground" + }, + { + "type": "text", + "id": "U8ICg", + "name": "Label", + "fill": "$foreground/foreground", + "content": "Button", + "fontFamily": "$typography/font-sans", + "fontSize": 13, + "fontWeight": "500" + } + ] + }, + { + "type": "frame", + "id": "jofN0", + "x": 280, + "y": 2649, + "name": "Button/Outline/MD", + "reusable": true, + "height": 36, + "cornerRadius": "$radius/3xl", + "stroke": "$border", + "strokeWidth": 1, + "strokeAlignment": "inner", + "gap": "$spacing/2", + "padding": [ + 8, + "$spacing/4" + ], + "justifyContent": "center", + "alignItems": "center", + "children": [ + { + "type": "icon", + "id": "OrMV5", + "name": "i5", + "width": 16, + "height": 16, + "icon": "plus", + "library": "lucide", + "fill": "$foreground/foreground" + }, + { + "type": "text", + "id": "zdnHO", + "name": "Label", + "fill": "$foreground/foreground", + "content": "Button", + "fontFamily": "$typography/font-sans", + "fontSize": 14, + "fontWeight": "500" + } + ] + }, + { + "type": "frame", + "id": "KghgF", + "x": 400, + "y": 2649, + "name": "Button/Outline/LG", + "reusable": true, + "height": 40, + "cornerRadius": "$radius/3xl", + "stroke": "$border", + "strokeWidth": 1, + "strokeAlignment": "inner", + "gap": "$spacing/2", + "padding": [ + 8, + "$spacing/5" + ], + "justifyContent": "center", + "alignItems": "center", + "children": [ + { + "type": "icon", + "id": "nBLWu", + "name": "i6", + "width": 18, + "height": 18, + "icon": "plus", + "library": "lucide", + "fill": "$foreground/foreground" + }, + { + "type": "text", + "id": "c1Djy", + "name": "Label", + "fill": "$foreground/foreground", + "content": "Button", + "fontFamily": "$typography/font-sans", + "fontSize": 16, + "fontWeight": "500" + } + ] + }, + { + "type": "frame", + "id": "u765nY", + "x": 540, + "y": 2649, + "name": "Button/Outline/Icon/SM", + "reusable": true, + "width": 32, + "height": 32, + "cornerRadius": "$radius/3xl", + "stroke": "$border", + "strokeWidth": 1, + "strokeAlignment": "inner", + "justifyContent": "center", + "alignItems": "center", + "children": [ + { + "type": "icon", + "id": "z1RfsI", + "width": 16, + "height": 16, + "icon": "plus", + "library": "lucide", + "fill": "$foreground/foreground" + } + ] + }, + { + "type": "frame", + "id": "qVgpQ", + "x": 590, + "y": 2649, + "name": "Button/Outline/Icon/MD", + "reusable": true, + "width": 36, + "height": 36, + "cornerRadius": "$radius/3xl", + "stroke": "$border", + "strokeWidth": 1, + "strokeAlignment": "inner", + "justifyContent": "center", + "alignItems": "center", + "children": [ + { + "type": "icon", + "id": "UYD8B", + "width": 16, + "height": 16, + "icon": "plus", + "library": "lucide", + "fill": "$foreground/foreground" + } + ] + }, + { + "type": "frame", + "id": "NM5TH", + "x": 644, + "y": 2649, + "name": "Button/Outline/Icon/LG", + "reusable": true, + "width": 40, + "height": 40, + "cornerRadius": "$radius/3xl", + "stroke": "$border", + "strokeWidth": 1, + "strokeAlignment": "inner", + "justifyContent": "center", + "alignItems": "center", + "children": [ + { + "type": "icon", + "id": "Ekegw", + "width": 20, + "height": 20, + "icon": "plus", + "library": "lucide", + "fill": "$foreground/foreground" + } + ] + }, + { + "type": "frame", + "id": "VeGSR", + "x": 170, + "y": 2699, + "name": "Button/Ghost/SM", + "reusable": true, + "height": 32, + "cornerRadius": "$radius/3xl", + "gap": 5, + "padding": [ + 8, + "$spacing/3" + ], + "justifyContent": "center", + "alignItems": "center", + "children": [ + { + "type": "icon", + "id": "O8y9A", + "name": "i7", + "width": 14, + "height": 14, + "icon": "plus", + "library": "lucide", + "fill": "$foreground/foreground" + }, + { + "type": "text", + "id": "gZoB3", + "name": "Label", + "fill": "$foreground/foreground", + "content": "Button", + "fontFamily": "$typography/font-sans", + "fontSize": 13, + "fontWeight": "500" + } + ] + }, + { + "type": "frame", + "id": "P0ImB", + "x": 280, + "y": 2699, + "name": "Button/Ghost/MD", + "reusable": true, + "height": 36, + "cornerRadius": "$radius/3xl", + "gap": "$spacing/2", + "padding": [ + 8, + "$spacing/4" + ], + "justifyContent": "center", + "alignItems": "center", + "children": [ + { + "type": "icon", + "id": "UhyWu", + "name": "i8", + "width": 16, + "height": 16, + "icon": "plus", + "library": "lucide", + "fill": "$foreground/foreground" + }, + { + "type": "text", + "id": "SuaS7", + "name": "Label", + "fill": "$foreground/foreground", + "content": "Button", + "fontFamily": "$typography/font-sans", + "fontSize": 14, + "fontWeight": "500" + } + ] + }, + { + "type": "frame", + "id": "KYsvL", + "x": 400, + "y": 2699, + "name": "Button/Ghost/LG", + "reusable": true, + "height": 40, + "cornerRadius": "$radius/3xl", + "gap": "$spacing/2", + "padding": [ + 8, + "$spacing/5" + ], + "justifyContent": "center", + "alignItems": "center", + "children": [ + { + "type": "icon", + "id": "rnA1U", + "name": "i9", + "width": 18, + "height": 18, + "icon": "plus", + "library": "lucide", + "fill": "$foreground/foreground" + }, + { + "type": "text", + "id": "rcDYU", + "name": "Label", + "fill": "$foreground/foreground", + "content": "Button", + "fontFamily": "$typography/font-sans", + "fontSize": 16, + "fontWeight": "500" + } + ] + }, + { + "type": "frame", + "id": "ECF78", + "x": 540, + "y": 2699, + "name": "Button/Ghost/Icon/SM", + "reusable": true, + "width": 32, + "height": 32, + "cornerRadius": "$radius/3xl", + "justifyContent": "center", + "alignItems": "center", + "children": [ + { + "type": "icon", + "id": "zju9R", + "width": 16, + "height": 16, + "icon": "plus", + "library": "lucide", + "fill": "$foreground/foreground" + } + ] + }, + { + "type": "frame", + "id": "ckBzU", + "x": 590, + "y": 2699, + "name": "Button/Ghost/Icon/MD", + "reusable": true, + "width": 36, + "height": 36, + "cornerRadius": "$radius/3xl", + "justifyContent": "center", + "alignItems": "center", + "children": [ + { + "type": "icon", + "id": "aKPXG", + "width": 16, + "height": 16, + "icon": "plus", + "library": "lucide", + "fill": "$foreground/foreground" + } + ] + }, + { + "type": "frame", + "id": "W927L", + "x": 644, + "y": 2699, + "name": "Button/Ghost/Icon/LG", + "reusable": true, + "width": 40, + "height": 40, + "cornerRadius": "$radius/3xl", + "justifyContent": "center", + "alignItems": "center", + "children": [ + { + "type": "icon", + "id": "hsY8B", + "width": 20, + "height": 20, + "icon": "plus", + "library": "lucide", + "fill": "$foreground/foreground" + } + ] + }, + { + "type": "frame", + "id": "HeoK3", + "x": 170, + "y": 2749, + "name": "Button/Danger/SM", + "reusable": true, + "height": 32, + "fill": "$danger/danger", + "cornerRadius": "$radius/3xl", + "gap": 5, + "padding": [ + 8, + "$spacing/3" + ], + "justifyContent": "center", + "alignItems": "center", + "children": [ + { + "type": "icon", + "id": "UeE9n", + "name": "i1", + "width": 14, + "height": 14, + "icon": "plus", + "library": "lucide", + "fill": "$danger/foreground" + }, + { + "type": "text", + "id": "c3TpHc", + "name": "Label", + "fill": "$danger/foreground", + "content": "Button", + "fontFamily": "$typography/font-sans", + "fontSize": 13, + "fontWeight": "500" + } + ] + }, + { + "type": "frame", + "id": "S76A99", + "x": 280, + "y": 2749, + "name": "Button/Danger/MD", + "reusable": true, + "height": 36, + "fill": "$danger/danger", + "cornerRadius": "$radius/3xl", + "gap": "$spacing/2", + "padding": [ + 8, + "$spacing/4" + ], + "justifyContent": "center", + "alignItems": "center", + "children": [ + { + "type": "icon", + "id": "FanuJ", + "name": "i2", + "width": 16, + "height": 16, + "icon": "plus", + "library": "lucide", + "fill": "$danger/foreground" + }, + { + "type": "text", + "id": "Ytf4p", + "name": "Label", + "fill": "$danger/foreground", + "content": "Button", + "fontFamily": "$typography/font-sans", + "fontSize": 14, + "fontWeight": "500" + } + ] + }, + { + "type": "frame", + "id": "wjOcx", + "x": 400, + "y": 2749, + "name": "Button/Danger/LG", + "reusable": true, + "height": 40, + "fill": "$danger/danger", + "cornerRadius": "$radius/3xl", + "gap": "$spacing/2", + "padding": [ + 8, + "$spacing/5" + ], + "justifyContent": "center", + "alignItems": "center", + "children": [ + { + "type": "icon", + "id": "ZKPlr", + "name": "i3", + "width": 18, + "height": 18, + "icon": "plus", + "library": "lucide", + "fill": "$danger/foreground" + }, + { + "type": "text", + "id": "S1bCr", + "name": "Label", + "fill": "$danger/foreground", + "content": "Button", + "fontFamily": "$typography/font-sans", + "fontSize": 16, + "fontWeight": "500" + } + ] + }, + { + "type": "frame", + "id": "RzFgG", + "x": 540, + "y": 2749, + "name": "Button/Danger/Icon/SM", + "reusable": true, + "width": 32, + "height": 32, + "fill": "$danger/danger", + "cornerRadius": "$radius/3xl", + "justifyContent": "center", + "alignItems": "center", + "children": [ + { + "type": "icon", + "id": "FQHk3", + "width": 16, + "height": 16, + "icon": "plus", + "library": "lucide", + "fill": "$danger/foreground" + } + ] + }, + { + "type": "frame", + "id": "q7WJY", + "x": 590, + "y": 2749, + "name": "Button/Danger/Icon/MD", + "reusable": true, + "width": 36, + "height": 36, + "fill": "$danger/danger", + "cornerRadius": "$radius/3xl", + "justifyContent": "center", + "alignItems": "center", + "children": [ + { + "type": "icon", + "id": "or7Ay", + "width": 16, + "height": 16, + "icon": "plus", + "library": "lucide", + "fill": "$danger/foreground" + } + ] + }, + { + "type": "frame", + "id": "a9sph", + "x": 644, + "y": 2749, + "name": "Button/Danger/Icon/LG", + "reusable": true, + "width": 40, + "height": 40, + "fill": "$danger/danger", + "cornerRadius": "$radius/3xl", + "justifyContent": "center", + "alignItems": "center", + "children": [ + { + "type": "icon", + "id": "zd0xt", + "width": 20, + "height": 20, + "icon": "plus", + "library": "lucide", + "fill": "$danger/foreground" + } + ] + }, + { + "type": "frame", + "id": "cuiyH", + "x": 170, + "y": 2799, + "name": "Button/Danger Soft/SM", + "reusable": true, + "height": 32, + "fill": "$danger/soft", + "cornerRadius": "$radius/3xl", + "gap": 5, + "padding": [ + 8, + "$spacing/3" + ], + "justifyContent": "center", + "alignItems": "center", + "children": [ + { + "type": "icon", + "id": "IxwO9", + "name": "i4", + "width": 14, + "height": 14, + "icon": "plus", + "library": "lucide", + "fill": "$danger/soft-foreground" + }, + { + "type": "text", + "id": "aZH2D", + "name": "Label", + "fill": "$danger/soft-foreground", + "content": "Button", + "fontFamily": "$typography/font-sans", + "fontSize": 13, + "fontWeight": "500" + } + ] + }, + { + "type": "frame", + "id": "BZjcC", + "x": 280, + "y": 2799, + "name": "Button/Danger Soft/MD", + "reusable": true, + "height": 36, + "fill": "$danger/soft", + "cornerRadius": "$radius/3xl", + "gap": "$spacing/2", + "padding": [ + 8, + "$spacing/4" + ], + "justifyContent": "center", + "alignItems": "center", + "children": [ + { + "type": "icon", + "id": "pfm2o", + "name": "i5", + "width": 16, + "height": 16, + "icon": "plus", + "library": "lucide", + "fill": "$danger/soft-foreground" + }, + { + "type": "text", + "id": "lVJMh", + "name": "Label", + "fill": "$danger/soft-foreground", + "content": "Button", + "fontFamily": "$typography/font-sans", + "fontSize": 14, + "fontWeight": "500" + } + ] + }, + { + "type": "frame", + "id": "AFLga", + "x": 400, + "y": 2799, + "name": "Button/Danger Soft/LG", + "reusable": true, + "height": 40, + "fill": "$danger/soft", + "cornerRadius": "$radius/3xl", + "gap": "$spacing/2", + "padding": [ + 8, + "$spacing/5" + ], + "justifyContent": "center", + "alignItems": "center", + "children": [ + { + "type": "icon", + "id": "Lqbon", + "name": "i6", + "width": 18, + "height": 18, + "icon": "plus", + "library": "lucide", + "fill": "$danger/soft-foreground" + }, + { + "type": "text", + "id": "OCmMy", + "name": "Label", + "fill": "$danger/soft-foreground", + "content": "Button", + "fontFamily": "$typography/font-sans", + "fontSize": 16, + "fontWeight": "500" + } + ] + }, + { + "type": "frame", + "id": "CbEaH", + "x": 540, + "y": 2799, + "name": "Button/Danger Soft/Icon/SM", + "reusable": true, + "width": 32, + "height": 32, + "fill": "$danger/soft", + "cornerRadius": "$radius/3xl", + "justifyContent": "center", + "alignItems": "center", + "children": [ + { + "type": "icon", + "id": "dv4Np", + "width": 16, + "height": 16, + "icon": "plus", + "library": "lucide", + "fill": "$danger/soft-foreground" + } + ] + }, + { + "type": "frame", + "id": "ipx2E", + "x": 590, + "y": 2799, + "name": "Button/Danger Soft/Icon/MD", + "reusable": true, + "width": 36, + "height": 36, + "fill": "$danger/soft", + "cornerRadius": "$radius/3xl", + "justifyContent": "center", + "alignItems": "center", + "children": [ + { + "type": "icon", + "id": "KJ8vu", + "width": 16, + "height": 16, + "icon": "plus", + "library": "lucide", + "fill": "$danger/soft-foreground" + } + ] + }, + { + "type": "frame", + "id": "KGqWs", + "x": 644, + "y": 2799, + "name": "Button/Danger Soft/Icon/LG", + "reusable": true, + "width": 40, + "height": 40, + "fill": "$danger/soft", + "cornerRadius": "$radius/3xl", + "justifyContent": "center", + "alignItems": "center", + "children": [ + { + "type": "icon", + "id": "EXN8c", + "width": 20, + "height": 20, + "icon": "plus", + "library": "lucide", + "fill": "$danger/soft-foreground" + } + ] + }, + { + "type": "text", + "id": "WKfS4", + "x": 540, + "y": 2479, + "fill": "$muted", + "content": "Icon Only", + "fontFamily": "$typography/font-sans", + "fontSize": 11, + "fontWeight": "500" + }, + { + "type": "text", + "id": "gkFXG", + "x": 740, + "y": 2479, + "fill": "$muted", + "content": "CloseButton", + "fontFamily": "$typography/font-sans", + "fontSize": 11, + "fontWeight": "500" + }, + { + "type": "frame", + "id": "UJNDs", + "x": 170, + "y": 2599, + "name": "Button/Tertiary/SM", + "reusable": true, + "height": 32, + "fill": "$default/default", + "cornerRadius": "$radius/3xl", + "gap": 5, + "padding": [ + 8, + "$spacing/3" + ], + "justifyContent": "center", + "alignItems": "center", + "children": [ + { + "type": "icon", + "id": "Lpo3F", + "name": "i7", + "width": 14, + "height": 14, + "icon": "plus", + "library": "lucide", + "fill": "$foreground/foreground" + }, + { + "type": "text", + "id": "P8tvhz", + "name": "Label", + "fill": "$foreground/foreground", + "content": "Button", + "fontFamily": "$typography/font-sans", + "fontSize": 13, + "fontWeight": "500" + } + ] + }, + { + "type": "frame", + "id": "YkUUc", + "x": 280, + "y": 2599, + "name": "Button/Tertiary/MD", + "reusable": true, + "height": 36, + "fill": "$default/default", + "cornerRadius": "$radius/3xl", + "gap": "$spacing/2", + "padding": [ + 8, + "$spacing/4" + ], + "justifyContent": "center", + "alignItems": "center", + "children": [ + { + "type": "icon", + "id": "cvv7Z", + "name": "i8", + "width": 16, + "height": 16, + "icon": "plus", + "library": "lucide", + "fill": "$foreground/foreground" + }, + { + "type": "text", + "id": "I3MlN", + "name": "Label", + "fill": "$foreground/foreground", + "content": "Button", + "fontFamily": "$typography/font-sans", + "fontSize": 14, + "fontWeight": "500" + } + ] + }, + { + "type": "frame", + "id": "scT61", + "x": 400, + "y": 2599, + "name": "Button/Tertiary/LG", + "reusable": true, + "height": 40, + "fill": "$default/default", + "cornerRadius": "$radius/3xl", + "gap": "$spacing/2", + "padding": [ + 8, + "$spacing/5" + ], + "justifyContent": "center", + "alignItems": "center", + "children": [ + { + "type": "icon", + "id": "zeNux", + "name": "i9", + "width": 18, + "height": 18, + "icon": "plus", + "library": "lucide", + "fill": "$foreground/foreground" + }, + { + "type": "text", + "id": "FSlBA", + "name": "Label", + "fill": "$foreground/foreground", + "content": "Button", + "fontFamily": "$typography/font-sans", + "fontSize": 16, + "fontWeight": "500" + } + ] + }, + { + "type": "frame", + "id": "yysYd", + "x": 540, + "y": 2599, + "name": "Button/Tertiary/Icon/SM", + "reusable": true, + "width": 32, + "height": 32, + "fill": "$default/default", + "cornerRadius": "$radius/3xl", + "justifyContent": "center", + "alignItems": "center", + "children": [ + { + "type": "icon", + "id": "B6Xjn", + "width": 16, + "height": 16, + "icon": "plus", + "library": "lucide", + "fill": "$foreground/foreground" + } + ] + }, + { + "type": "frame", + "id": "Xbz53", + "x": 590, + "y": 2599, + "name": "Button/Tertiary/Icon/MD", + "reusable": true, + "width": 36, + "height": 36, + "fill": "$default/default", + "cornerRadius": "$radius/3xl", + "justifyContent": "center", + "alignItems": "center", + "children": [ + { + "type": "icon", + "id": "eYqcr", + "width": 16, + "height": 16, + "icon": "plus", + "library": "lucide", + "fill": "$foreground/foreground" + } + ] + }, + { + "type": "frame", + "id": "s7vap", + "x": 644, + "y": 2599, + "name": "Button/Tertiary/Icon/LG", + "reusable": true, + "width": 40, + "height": 40, + "fill": "$default/default", + "cornerRadius": "$radius/3xl", + "justifyContent": "center", + "alignItems": "center", + "children": [ + { + "type": "icon", + "id": "OLGgx", + "width": 20, + "height": 20, + "icon": "plus", + "library": "lucide", + "fill": "$foreground/foreground" + } + ] + }, + { + "type": "frame", + "id": "kR8PC", + "x": 166, + "y": 1807, + "name": "Chip/Primary/Default/SM", + "reusable": true, + "fill": "$default/default", + "cornerRadius": "$radius/2xl", + "gap": 2, + "padding": [ + 2, + 4 + ], + "alignItems": "center", + "children": [ + { + "type": "text", + "id": "z70AU", + "name": "Label", + "fill": "$foreground/foreground", + "content": "Chip", + "fontFamily": "$typography/font-sans", + "fontSize": 11, + "fontWeight": "500" + } + ] + }, + { + "type": "frame", + "id": "pByni", + "x": 204, + "y": 1807, + "name": "Chip/Primary/Default/MD", + "reusable": true, + "fill": "$default/default", + "cornerRadius": "$radius/2xl", + "gap": 2, + "padding": [ + 2, + 8 + ], + "alignItems": "center", + "children": [ + { + "type": "text", + "id": "lSsxQ", + "name": "Label", + "fill": "$foreground/foreground", + "content": "Chip", + "fontFamily": "$typography/font-sans", + "fontSize": 12, + "fontWeight": "500" + } + ] + }, + { + "type": "frame", + "id": "EwMuq", + "x": 252, + "y": 1807, + "name": "Chip/Primary/Default/LG", + "reusable": true, + "fill": "$default/default", + "cornerRadius": "$radius/2xl", + "gap": 2, + "padding": [ + 4, + 12 + ], + "alignItems": "center", + "children": [ + { + "type": "text", + "id": "pgaXe", + "name": "Label", + "fill": "$foreground/foreground", + "content": "Chip", + "fontFamily": "$typography/font-sans", + "fontSize": 14, + "fontWeight": "500" + } + ] + }, + { + "type": "frame", + "id": "k2g7h", + "x": 322, + "y": 1807, + "name": "Chip/Primary/Accent/SM", + "reusable": true, + "fill": "$accent/accent", + "cornerRadius": "$radius/2xl", + "gap": 2, + "padding": [ + 2, + 4 + ], + "alignItems": "center", + "children": [ + { + "type": "text", + "id": "jpmQP", + "name": "Label", + "fill": "$accent/foreground", + "content": "Chip", + "fontFamily": "$typography/font-sans", + "fontSize": 11, + "fontWeight": "500" + } + ] + }, + { + "type": "frame", + "id": "S0qKU", + "x": 360, + "y": 1807, + "name": "Chip/Primary/Accent/MD", + "reusable": true, + "fill": "$accent/accent", + "cornerRadius": "$radius/2xl", + "gap": 2, + "padding": [ + 2, + 8 + ], + "alignItems": "center", + "children": [ + { + "type": "text", + "id": "qIRLS", + "name": "Label", + "fill": "$accent/foreground", + "content": "Chip", + "fontFamily": "$typography/font-sans", + "fontSize": 12, + "fontWeight": "500" + } + ] + }, + { + "type": "frame", + "id": "ghm8u", + "x": 408, + "y": 1807, + "name": "Chip/Primary/Accent/LG", + "reusable": true, + "fill": "$accent/accent", + "cornerRadius": "$radius/2xl", + "gap": 2, + "padding": [ + 4, + 12 + ], + "alignItems": "center", + "children": [ + { + "type": "text", + "id": "g73tie", + "name": "Label", + "fill": "$accent/foreground", + "content": "Chip", + "fontFamily": "$typography/font-sans", + "fontSize": 14, + "fontWeight": "500" + } + ] + }, + { + "type": "frame", + "id": "Oljfe", + "x": 478, + "y": 1807, + "name": "Chip/Primary/Success/SM", + "reusable": true, + "fill": "$success/success", + "cornerRadius": "$radius/2xl", + "gap": 2, + "padding": [ + 2, + 4 + ], + "alignItems": "center", + "children": [ + { + "type": "text", + "id": "MCPqS", + "name": "Label", + "fill": "$success/foreground", + "content": "Chip", + "fontFamily": "$typography/font-sans", + "fontSize": 11, + "fontWeight": "500" + } + ] + }, + { + "type": "frame", + "id": "uJByV", + "x": 516, + "y": 1807, + "name": "Chip/Primary/Success/MD", + "reusable": true, + "fill": "$success/success", + "cornerRadius": "$radius/2xl", + "gap": 2, + "padding": [ + 2, + 8 + ], + "alignItems": "center", + "children": [ + { + "type": "text", + "id": "Vfhh4", + "name": "Label", + "fill": "$success/foreground", + "content": "Chip", + "fontFamily": "$typography/font-sans", + "fontSize": 12, + "fontWeight": "500" + } + ] + }, + { + "type": "frame", + "id": "Hu0Qb", + "x": 564, + "y": 1807, + "name": "Chip/Primary/Success/LG", + "reusable": true, + "fill": "$success/success", + "cornerRadius": "$radius/2xl", + "gap": 2, + "padding": [ + 4, + 12 + ], + "alignItems": "center", + "children": [ + { + "type": "text", + "id": "agtoR", + "name": "Label", + "fill": "$success/foreground", + "content": "Chip", + "fontFamily": "$typography/font-sans", + "fontSize": 14, + "fontWeight": "500" + } + ] + }, + { + "type": "frame", + "id": "sI9GT", + "x": 634, + "y": 1807, + "name": "Chip/Primary/Warning/SM", + "reusable": true, + "fill": "$warning/warning", + "cornerRadius": "$radius/2xl", + "gap": 2, + "padding": [ + 2, + 4 + ], + "alignItems": "center", + "children": [ + { + "type": "text", + "id": "dBSAU", + "name": "Label", + "fill": "$warning/foreground", + "content": "Chip", + "fontFamily": "$typography/font-sans", + "fontSize": 11, + "fontWeight": "500" + } + ] + }, + { + "type": "frame", + "id": "DMbMi", + "x": 672, + "y": 1807, + "name": "Chip/Primary/Warning/MD", + "reusable": true, + "fill": "$warning/warning", + "cornerRadius": "$radius/2xl", + "gap": 2, + "padding": [ + 2, + 8 + ], + "alignItems": "center", + "children": [ + { + "type": "text", + "id": "RzEob", + "name": "Label", + "fill": "$warning/foreground", + "content": "Chip", + "fontFamily": "$typography/font-sans", + "fontSize": 12, + "fontWeight": "500" + } + ] + }, + { + "type": "frame", + "id": "RMGNr", + "x": 720, + "y": 1807, + "name": "Chip/Primary/Warning/LG", + "reusable": true, + "fill": "$warning/warning", + "cornerRadius": "$radius/2xl", + "gap": 2, + "padding": [ + 4, + 12 + ], + "alignItems": "center", + "children": [ + { + "type": "text", + "id": "CSw9S", + "name": "Label", + "fill": "$warning/foreground", + "content": "Chip", + "fontFamily": "$typography/font-sans", + "fontSize": 14, + "fontWeight": "500" + } + ] + }, + { + "type": "frame", + "id": "ArCOh", + "x": 790, + "y": 1807, + "name": "Chip/Primary/Danger/SM", + "reusable": true, + "fill": "$danger/danger", + "cornerRadius": "$radius/2xl", + "gap": 2, + "padding": [ + 2, + 4 + ], + "alignItems": "center", + "children": [ + { + "type": "text", + "id": "g97OKi", + "name": "Label", + "fill": "$danger/foreground", + "content": "Chip", + "fontFamily": "$typography/font-sans", + "fontSize": 11, + "fontWeight": "500" + } + ] + }, + { + "type": "frame", + "id": "vg2CV", + "x": 828, + "y": 1807, + "name": "Chip/Primary/Danger/MD", + "reusable": true, + "fill": "$danger/danger", + "cornerRadius": "$radius/2xl", + "gap": 2, + "padding": [ + 2, + 8 + ], + "alignItems": "center", + "children": [ + { + "type": "text", + "id": "AmaW1", + "name": "Label", + "fill": "$danger/foreground", + "content": "Chip", + "fontFamily": "$typography/font-sans", + "fontSize": 12, + "fontWeight": "500" + } + ] + }, + { + "type": "frame", + "id": "VLVLo", + "x": 876, + "y": 1807, + "name": "Chip/Primary/Danger/LG", + "reusable": true, + "fill": "$danger/danger", + "cornerRadius": "$radius/2xl", + "gap": 2, + "padding": [ + 4, + 12 + ], + "alignItems": "center", + "children": [ + { + "type": "text", + "id": "m9H3Fb", + "name": "Label", + "fill": "$danger/foreground", + "content": "Chip", + "fontFamily": "$typography/font-sans", + "fontSize": 14, + "fontWeight": "500" + } + ] + }, + { + "type": "frame", + "id": "PgAgb", + "x": 166, + "y": 1842, + "name": "Chip/Secondary/Default/SM", + "reusable": true, + "fill": "$default/default", + "cornerRadius": "$radius/2xl", + "gap": 2, + "padding": [ + 2, + 4 + ], + "alignItems": "center", + "children": [ + { + "type": "text", + "id": "DJoht", + "name": "Label", + "fill": "$foreground/foreground", + "content": "Chip", + "fontFamily": "$typography/font-sans", + "fontSize": 11, + "fontWeight": "500" + } + ] + }, + { + "type": "frame", + "id": "AxcSH", + "x": 204, + "y": 1842, + "name": "Chip/Secondary/Default/MD", + "reusable": true, + "fill": "$default/default", + "cornerRadius": "$radius/2xl", + "gap": 2, + "padding": [ + 2, + 8 + ], + "alignItems": "center", + "children": [ + { + "type": "text", + "id": "asJAG", + "name": "Label", + "fill": "$foreground/foreground", + "content": "Chip", + "fontFamily": "$typography/font-sans", + "fontSize": 12, + "fontWeight": "500" + } + ] + }, + { + "type": "frame", + "id": "M4uhYD", + "x": 252, + "y": 1842, + "name": "Chip/Secondary/Default/LG", + "reusable": true, + "fill": "$default/default", + "cornerRadius": "$radius/2xl", + "gap": 2, + "padding": [ + 4, + 12 + ], + "alignItems": "center", + "children": [ + { + "type": "text", + "id": "j6bvE", + "name": "Label", + "fill": "$foreground/foreground", + "content": "Chip", + "fontFamily": "$typography/font-sans", + "fontSize": 14, + "fontWeight": "500" + } + ] + }, + { + "type": "frame", + "id": "HGebS", + "x": 322, + "y": 1842, + "name": "Chip/Secondary/Accent/SM", + "reusable": true, + "fill": "$default/default", + "cornerRadius": "$radius/2xl", + "gap": 2, + "padding": [ + 2, + 4 + ], + "alignItems": "center", + "children": [ + { + "type": "text", + "id": "GZGml", + "name": "Label", + "fill": "$accent/accent", + "content": "Chip", + "fontFamily": "$typography/font-sans", + "fontSize": 11, + "fontWeight": "500" + } + ] + }, + { + "type": "frame", + "id": "cZsr2", + "x": 360, + "y": 1842, + "name": "Chip/Secondary/Accent/MD", + "reusable": true, + "fill": "$default/default", + "cornerRadius": "$radius/2xl", + "gap": 2, + "padding": [ + 2, + 8 + ], + "alignItems": "center", + "children": [ + { + "type": "text", + "id": "G0WFCq", + "name": "Label", + "fill": "$accent/accent", + "content": "Chip", + "fontFamily": "$typography/font-sans", + "fontSize": 12, + "fontWeight": "500" + } + ] + }, + { + "type": "frame", + "id": "hSMlI", + "x": 408, + "y": 1842, + "name": "Chip/Secondary/Accent/LG", + "reusable": true, + "fill": "$default/default", + "cornerRadius": "$radius/2xl", + "gap": 2, + "padding": [ + 4, + 12 + ], + "alignItems": "center", + "children": [ + { + "type": "text", + "id": "L0varl", + "name": "Label", + "fill": "$accent/accent", + "content": "Chip", + "fontFamily": "$typography/font-sans", + "fontSize": 14, + "fontWeight": "500" + } + ] + }, + { + "type": "frame", + "id": "shlrt", + "x": 478, + "y": 1842, + "name": "Chip/Secondary/Success/SM", + "reusable": true, + "fill": "$default/default", + "cornerRadius": "$radius/2xl", + "gap": 2, + "padding": [ + 2, + 4 + ], + "alignItems": "center", + "children": [ + { + "type": "text", + "id": "a1QOr", + "name": "Label", + "fill": "$success/success", + "content": "Chip", + "fontFamily": "$typography/font-sans", + "fontSize": 11, + "fontWeight": "500" + } + ] + }, + { + "type": "frame", + "id": "C7vNBu", + "x": 516, + "y": 1842, + "name": "Chip/Secondary/Success/MD", + "reusable": true, + "fill": "$default/default", + "cornerRadius": "$radius/2xl", + "gap": 2, + "padding": [ + 2, + 8 + ], + "alignItems": "center", + "children": [ + { + "type": "text", + "id": "ql8N6", + "name": "Label", + "fill": "$success/success", + "content": "Chip", + "fontFamily": "$typography/font-sans", + "fontSize": 12, + "fontWeight": "500" + } + ] + }, + { + "type": "frame", + "id": "i69B9X", + "x": 564, + "y": 1842, + "name": "Chip/Secondary/Success/LG", + "reusable": true, + "fill": "$default/default", + "cornerRadius": "$radius/2xl", + "gap": 2, + "padding": [ + 4, + 12 + ], + "alignItems": "center", + "children": [ + { + "type": "text", + "id": "ntvNu", + "name": "Label", + "fill": "$success/success", + "content": "Chip", + "fontFamily": "$typography/font-sans", + "fontSize": 14, + "fontWeight": "500" + } + ] + }, + { + "type": "frame", + "id": "PKMHu", + "x": 634, + "y": 1842, + "name": "Chip/Secondary/Warning/SM", + "reusable": true, + "fill": "$default/default", + "cornerRadius": "$radius/2xl", + "gap": 2, + "padding": [ + 2, + 4 + ], + "alignItems": "center", + "children": [ + { + "type": "text", + "id": "C9Ilf", + "name": "Label", + "fill": "$warning/warning", + "content": "Chip", + "fontFamily": "$typography/font-sans", + "fontSize": 11, + "fontWeight": "500" + } + ] + }, + { + "type": "frame", + "id": "tRIPk", + "x": 672, + "y": 1842, + "name": "Chip/Secondary/Warning/MD", + "reusable": true, + "fill": "$default/default", + "cornerRadius": "$radius/2xl", + "gap": 2, + "padding": [ + 2, + 8 + ], + "alignItems": "center", + "children": [ + { + "type": "text", + "id": "yZoX0", + "name": "Label", + "fill": "$warning/warning", + "content": "Chip", + "fontFamily": "$typography/font-sans", + "fontSize": 12, + "fontWeight": "500" + } + ] + }, + { + "type": "frame", + "id": "RrgsK", + "x": 720, + "y": 1842, + "name": "Chip/Secondary/Warning/LG", + "reusable": true, + "fill": "$default/default", + "cornerRadius": "$radius/2xl", + "gap": 2, + "padding": [ + 4, + 12 + ], + "alignItems": "center", + "children": [ + { + "type": "text", + "id": "t9jhT9", + "name": "Label", + "fill": "$warning/warning", + "content": "Chip", + "fontFamily": "$typography/font-sans", + "fontSize": 14, + "fontWeight": "500" + } + ] + }, + { + "type": "frame", + "id": "wOs08", + "x": 790, + "y": 1842, + "name": "Chip/Secondary/Danger/SM", + "reusable": true, + "fill": "$default/default", + "cornerRadius": "$radius/2xl", + "gap": 2, + "padding": [ + 2, + 4 + ], + "alignItems": "center", + "children": [ + { + "type": "text", + "id": "O6weG7", + "name": "Label", + "fill": "$danger/danger", + "content": "Chip", + "fontFamily": "$typography/font-sans", + "fontSize": 11, + "fontWeight": "500" + } + ] + }, + { + "type": "frame", + "id": "o1sHJY", + "x": 828, + "y": 1842, + "name": "Chip/Secondary/Danger/MD", + "reusable": true, + "fill": "$default/default", + "cornerRadius": "$radius/2xl", + "gap": 2, + "padding": [ + 2, + 8 + ], + "alignItems": "center", + "children": [ + { + "type": "text", + "id": "b2sFB0", + "name": "Label", + "fill": "$danger/danger", + "content": "Chip", + "fontFamily": "$typography/font-sans", + "fontSize": 12, + "fontWeight": "500" + } + ] + }, + { + "type": "frame", + "id": "SHx4V", + "x": 876, + "y": 1842, + "name": "Chip/Secondary/Danger/LG", + "reusable": true, + "fill": "$default/default", + "cornerRadius": "$radius/2xl", + "gap": 2, + "padding": [ + 4, + 12 + ], + "alignItems": "center", + "children": [ + { + "type": "text", + "id": "VOaB8", + "name": "Label", + "fill": "$danger/danger", + "content": "Chip", + "fontFamily": "$typography/font-sans", + "fontSize": 14, + "fontWeight": "500" + } + ] + }, + { + "type": "frame", + "id": "rMgeC", + "x": 166, + "y": 1877, + "name": "Chip/Soft/Default/SM", + "reusable": true, + "fill": "$default/default", + "cornerRadius": "$radius/2xl", + "gap": 2, + "padding": [ + 2, + 4 + ], + "alignItems": "center", + "children": [ + { + "type": "text", + "id": "Xctwp", + "name": "Label", + "fill": "$foreground/foreground", + "content": "Chip", + "fontFamily": "$typography/font-sans", + "fontSize": 11, + "fontWeight": "500" + } + ] + }, + { + "type": "frame", + "id": "wFH1T", + "x": 204, + "y": 1877, + "name": "Chip/Soft/Default/MD", + "reusable": true, + "fill": "$default/default", + "cornerRadius": "$radius/2xl", + "gap": 2, + "padding": [ + 2, + 8 + ], + "alignItems": "center", + "children": [ + { + "type": "text", + "id": "s7beWH", + "name": "Label", + "fill": "$foreground/foreground", + "content": "Chip", + "fontFamily": "$typography/font-sans", + "fontSize": 12, + "fontWeight": "500" + } + ] + }, + { + "type": "frame", + "id": "EClkt", + "x": 252, + "y": 1877, + "name": "Chip/Soft/Default/LG", + "reusable": true, + "fill": "$default/default", + "cornerRadius": "$radius/2xl", + "gap": 2, + "padding": [ + 4, + 12 + ], + "alignItems": "center", + "children": [ + { + "type": "text", + "id": "uCkaP", + "name": "Label", + "fill": "$foreground/foreground", + "content": "Chip", + "fontFamily": "$typography/font-sans", + "fontSize": 14, + "fontWeight": "500" + } + ] + }, + { + "type": "frame", + "id": "Q401P", + "x": 322, + "y": 1877, + "name": "Chip/Soft/Accent/SM", + "reusable": true, + "fill": "$accent/soft", + "cornerRadius": "$radius/2xl", + "gap": 2, + "padding": [ + 2, + 4 + ], + "alignItems": "center", + "children": [ + { + "type": "text", + "id": "wH6ey", + "name": "Label", + "fill": "$accent/soft-foreground", + "content": "Chip", + "fontFamily": "$typography/font-sans", + "fontSize": 11, + "fontWeight": "500" + } + ] + }, + { + "type": "frame", + "id": "Hwshl", + "x": 360, + "y": 1877, + "name": "Chip/Soft/Accent/MD", + "reusable": true, + "fill": "$accent/soft", + "cornerRadius": "$radius/2xl", + "gap": 2, + "padding": [ + 2, + 8 + ], + "alignItems": "center", + "children": [ + { + "type": "text", + "id": "ItOdh", + "name": "Label", + "fill": "$accent/soft-foreground", + "content": "Chip", + "fontFamily": "$typography/font-sans", + "fontSize": 12, + "fontWeight": "500" + } + ] + }, + { + "type": "frame", + "id": "olXZC", + "x": 408, + "y": 1877, + "name": "Chip/Soft/Accent/LG", + "reusable": true, + "fill": "$accent/soft", + "cornerRadius": "$radius/2xl", + "gap": 2, + "padding": [ + 4, + 12 + ], + "alignItems": "center", + "children": [ + { + "type": "text", + "id": "HIACL", + "name": "Label", + "fill": "$accent/soft-foreground", + "content": "Chip", + "fontFamily": "$typography/font-sans", + "fontSize": 14, + "fontWeight": "500" + } + ] + }, + { + "type": "frame", + "id": "b5JXJV", + "x": 478, + "y": 1877, + "name": "Chip/Soft/Success/SM", + "reusable": true, + "fill": "$success/soft", + "cornerRadius": "$radius/2xl", + "gap": 2, + "padding": [ + 2, + 4 + ], + "alignItems": "center", + "children": [ + { + "type": "text", + "id": "yIxeA", + "name": "Label", + "fill": "$success/soft-foreground", + "content": "Chip", + "fontFamily": "$typography/font-sans", + "fontSize": 11, + "fontWeight": "500" + } + ] + }, + { + "type": "frame", + "id": "pGdvt", + "x": 516, + "y": 1877, + "name": "Chip/Soft/Success/MD", + "reusable": true, + "fill": "$success/soft", + "cornerRadius": "$radius/2xl", + "gap": 2, + "padding": [ + 2, + 8 + ], + "alignItems": "center", + "children": [ + { + "type": "text", + "id": "m5qZM", + "name": "Label", + "fill": "$success/soft-foreground", + "content": "Chip", + "fontFamily": "$typography/font-sans", + "fontSize": 12, + "fontWeight": "500" + } + ] + }, + { + "type": "frame", + "id": "AEqkE", + "x": 564, + "y": 1877, + "name": "Chip/Soft/Success/LG", + "reusable": true, + "fill": "$success/soft", + "cornerRadius": "$radius/2xl", + "gap": 2, + "padding": [ + 4, + 12 + ], + "alignItems": "center", + "children": [ + { + "type": "text", + "id": "d1kTnl", + "name": "Label", + "fill": "$success/soft-foreground", + "content": "Chip", + "fontFamily": "$typography/font-sans", + "fontSize": 14, + "fontWeight": "500" + } + ] + }, + { + "type": "frame", + "id": "xgXVi", + "x": 634, + "y": 1877, + "name": "Chip/Soft/Warning/SM", + "reusable": true, + "fill": "$warning/soft", + "cornerRadius": "$radius/2xl", + "gap": 2, + "padding": [ + 2, + 4 + ], + "alignItems": "center", + "children": [ + { + "type": "text", + "id": "lWXgK", + "name": "Label", + "fill": "$warning/soft-foreground", + "content": "Chip", + "fontFamily": "$typography/font-sans", + "fontSize": 11, + "fontWeight": "500" + } + ] + }, + { + "type": "frame", + "id": "fneKc", + "x": 672, + "y": 1877, + "name": "Chip/Soft/Warning/MD", + "reusable": true, + "fill": "$warning/soft", + "cornerRadius": "$radius/2xl", + "gap": 2, + "padding": [ + 2, + 8 + ], + "alignItems": "center", + "children": [ + { + "type": "text", + "id": "rmGlM", + "name": "Label", + "fill": "$warning/soft-foreground", + "content": "Chip", + "fontFamily": "$typography/font-sans", + "fontSize": 12, + "fontWeight": "500" + } + ] + }, + { + "type": "frame", + "id": "psce1", + "x": 720, + "y": 1877, + "name": "Chip/Soft/Warning/LG", + "reusable": true, + "fill": "$warning/soft", + "cornerRadius": "$radius/2xl", + "gap": 2, + "padding": [ + 4, + 12 + ], + "alignItems": "center", + "children": [ + { + "type": "text", + "id": "uJo8h", + "name": "Label", + "fill": "$warning/soft-foreground", + "content": "Chip", + "fontFamily": "$typography/font-sans", + "fontSize": 14, + "fontWeight": "500" + } + ] + }, + { + "type": "frame", + "id": "wDQvP", + "x": 790, + "y": 1877, + "name": "Chip/Soft/Danger/SM", + "reusable": true, + "fill": "$danger/soft", + "cornerRadius": "$radius/2xl", + "gap": 2, + "padding": [ + 2, + 4 + ], + "alignItems": "center", + "children": [ + { + "type": "text", + "id": "U6dx86", + "name": "Label", + "fill": "$danger/soft-foreground", + "content": "Chip", + "fontFamily": "$typography/font-sans", + "fontSize": 11, + "fontWeight": "500" + } + ] + }, + { + "type": "frame", + "id": "QwyBa", + "x": 828, + "y": 1877, + "name": "Chip/Soft/Danger/MD", + "reusable": true, + "fill": "$danger/soft", + "cornerRadius": "$radius/2xl", + "gap": 2, + "padding": [ + 2, + 8 + ], + "alignItems": "center", + "children": [ + { + "type": "text", + "id": "u8GpBZ", + "name": "Label", + "fill": "$danger/soft-foreground", + "content": "Chip", + "fontFamily": "$typography/font-sans", + "fontSize": 12, + "fontWeight": "500" + } + ] + }, + { + "type": "frame", + "id": "DX9KE", + "x": 876, + "y": 1877, + "name": "Chip/Soft/Danger/LG", + "reusable": true, + "fill": "$danger/soft", + "cornerRadius": "$radius/2xl", + "gap": 2, + "padding": [ + 4, + 12 + ], + "alignItems": "center", + "children": [ + { + "type": "text", + "id": "SSEtZ", + "name": "Label", + "fill": "$danger/soft-foreground", + "content": "Chip", + "fontFamily": "$typography/font-sans", + "fontSize": 14, + "fontWeight": "500" + } + ] + }, + { + "type": "frame", + "id": "f4uddM", + "x": 166, + "y": 1912, + "name": "Chip/Tertiary/Default/SM", + "reusable": true, + "cornerRadius": "$radius/2xl", + "gap": 2, + "padding": [ + 2, + 4 + ], + "alignItems": "center", + "children": [ + { + "type": "text", + "id": "BJjYb", + "name": "Label", + "fill": "$foreground/foreground", + "content": "Chip", + "fontFamily": "$typography/font-sans", + "fontSize": 11, + "fontWeight": "500" + } + ] + }, + { + "type": "frame", + "id": "j1G2xk", + "x": 204, + "y": 1912, + "name": "Chip/Tertiary/Default/MD", + "reusable": true, + "cornerRadius": "$radius/2xl", + "gap": 2, + "padding": [ + 2, + 8 + ], + "alignItems": "center", + "children": [ + { + "type": "text", + "id": "b11P8", + "name": "Label", + "fill": "$foreground/foreground", + "content": "Chip", + "fontFamily": "$typography/font-sans", + "fontSize": 12, + "fontWeight": "500" + } + ] + }, + { + "type": "frame", + "id": "GxG8a", + "x": 252, + "y": 1912, + "name": "Chip/Tertiary/Default/LG", + "reusable": true, + "cornerRadius": "$radius/2xl", + "gap": 2, + "padding": [ + 4, + 12 + ], + "alignItems": "center", + "children": [ + { + "type": "text", + "id": "Weksh", + "name": "Label", + "fill": "$foreground/foreground", + "content": "Chip", + "fontFamily": "$typography/font-sans", + "fontSize": 14, + "fontWeight": "500" + } + ] + }, + { + "type": "frame", + "id": "FUTe5", + "x": 322, + "y": 1912, + "name": "Chip/Tertiary/Accent/SM", + "reusable": true, + "cornerRadius": "$radius/2xl", + "gap": 2, + "padding": [ + 2, + 4 + ], + "alignItems": "center", + "children": [ + { + "type": "text", + "id": "ri3mS", + "name": "Label", + "fill": "$accent/accent", + "content": "Chip", + "fontFamily": "$typography/font-sans", + "fontSize": 11, + "fontWeight": "500" + } + ] + }, + { + "type": "frame", + "id": "dxKZm", + "x": 360, + "y": 1912, + "name": "Chip/Tertiary/Accent/MD", + "reusable": true, + "cornerRadius": "$radius/2xl", + "gap": 2, + "padding": [ + 2, + 8 + ], + "alignItems": "center", + "children": [ + { + "type": "text", + "id": "J2xVeI", + "name": "Label", + "fill": "$accent/accent", + "content": "Chip", + "fontFamily": "$typography/font-sans", + "fontSize": 12, + "fontWeight": "500" + } + ] + }, + { + "type": "frame", + "id": "tW6Qn", + "x": 408, + "y": 1912, + "name": "Chip/Tertiary/Accent/LG", + "reusable": true, + "cornerRadius": "$radius/2xl", + "gap": 2, + "padding": [ + 4, + 12 + ], + "alignItems": "center", + "children": [ + { + "type": "text", + "id": "gWzEP", + "name": "Label", + "fill": "$accent/accent", + "content": "Chip", + "fontFamily": "$typography/font-sans", + "fontSize": 14, + "fontWeight": "500" + } + ] + }, + { + "type": "frame", + "id": "p2TeeK", + "x": 478, + "y": 1912, + "name": "Chip/Tertiary/Success/SM", + "reusable": true, + "cornerRadius": "$radius/2xl", + "gap": 2, + "padding": [ + 2, + 4 + ], + "alignItems": "center", + "children": [ + { + "type": "text", + "id": "st1OJ", + "name": "Label", + "fill": "$success/success", + "content": "Chip", + "fontFamily": "$typography/font-sans", + "fontSize": 11, + "fontWeight": "500" + } + ] + }, + { + "type": "frame", + "id": "EgSuf", + "x": 516, + "y": 1912, + "name": "Chip/Tertiary/Success/MD", + "reusable": true, + "cornerRadius": "$radius/2xl", + "gap": 2, + "padding": [ + 2, + 8 + ], + "alignItems": "center", + "children": [ + { + "type": "text", + "id": "o32jS5", + "name": "Label", + "fill": "$success/success", + "content": "Chip", + "fontFamily": "$typography/font-sans", + "fontSize": 12, + "fontWeight": "500" + } + ] + }, + { + "type": "frame", + "id": "F7JNh3", + "x": 564, + "y": 1912, + "name": "Chip/Tertiary/Success/LG", + "reusable": true, + "cornerRadius": "$radius/2xl", + "gap": 2, + "padding": [ + 4, + 12 + ], + "alignItems": "center", + "children": [ + { + "type": "text", + "id": "ylIXK", + "name": "Label", + "fill": "$success/success", + "content": "Chip", + "fontFamily": "$typography/font-sans", + "fontSize": 14, + "fontWeight": "500" + } + ] + }, + { + "type": "frame", + "id": "Xc9Oy", + "x": 634, + "y": 1912, + "name": "Chip/Tertiary/Warning/SM", + "reusable": true, + "cornerRadius": "$radius/2xl", + "gap": 2, + "padding": [ + 2, + 4 + ], + "alignItems": "center", + "children": [ + { + "type": "text", + "id": "l3jL01", + "name": "Label", + "fill": "$warning/warning", + "content": "Chip", + "fontFamily": "$typography/font-sans", + "fontSize": 11, + "fontWeight": "500" + } + ] + }, + { + "type": "frame", + "id": "gMENT", + "x": 672, + "y": 1912, + "name": "Chip/Tertiary/Warning/MD", + "reusable": true, + "cornerRadius": "$radius/2xl", + "gap": 2, + "padding": [ + 2, + 8 + ], + "alignItems": "center", + "children": [ + { + "type": "text", + "id": "I1LaU", + "name": "Label", + "fill": "$warning/warning", + "content": "Chip", + "fontFamily": "$typography/font-sans", + "fontSize": 12, + "fontWeight": "500" + } + ] + }, + { + "type": "frame", + "id": "q1V25S", + "x": 720, + "y": 1912, + "name": "Chip/Tertiary/Warning/LG", + "reusable": true, + "cornerRadius": "$radius/2xl", + "gap": 2, + "padding": [ + 4, + 12 + ], + "alignItems": "center", + "children": [ + { + "type": "text", + "id": "XZiqn", + "name": "Label", + "fill": "$warning/warning", + "content": "Chip", + "fontFamily": "$typography/font-sans", + "fontSize": 14, + "fontWeight": "500" + } + ] + }, + { + "type": "frame", + "id": "UwUzW", + "x": 790, + "y": 1912, + "name": "Chip/Tertiary/Danger/SM", + "reusable": true, + "cornerRadius": "$radius/2xl", + "gap": 2, + "padding": [ + 2, + 4 + ], + "alignItems": "center", + "children": [ + { + "type": "text", + "id": "tK0Mb", + "name": "Label", + "fill": "$danger/danger", + "content": "Chip", + "fontFamily": "$typography/font-sans", + "fontSize": 11, + "fontWeight": "500" + } + ] + }, + { + "type": "frame", + "id": "uXMcI", + "x": 828, + "y": 1912, + "name": "Chip/Tertiary/Danger/MD", + "reusable": true, + "cornerRadius": "$radius/2xl", + "gap": 2, + "padding": [ + 2, + 8 + ], + "alignItems": "center", + "children": [ + { + "type": "text", + "id": "UXBSl", + "name": "Label", + "fill": "$danger/danger", + "content": "Chip", + "fontFamily": "$typography/font-sans", + "fontSize": 12, + "fontWeight": "500" + } + ] + }, + { + "type": "frame", + "id": "P7trl6", + "x": 876, + "y": 1912, + "name": "Chip/Tertiary/Danger/LG", + "reusable": true, + "cornerRadius": "$radius/2xl", + "gap": 2, + "padding": [ + 4, + 12 + ], + "alignItems": "center", + "children": [ + { + "type": "text", + "id": "Ncvhn", + "name": "Label", + "fill": "$danger/danger", + "content": "Chip", + "fontFamily": "$typography/font-sans", + "fontSize": 14, + "fontWeight": "500" + } + ] + }, + { + "type": "text", + "id": "uFdbm", + "x": 163, + "y": 1787, + "name": "lbl3", + "fill": "$muted", + "content": "Chips", + "fontFamily": "$typography/font-sans", + "fontSize": 11, + "fontWeight": "500" + }, + { + "type": "frame", + "id": "iEQse", + "x": 160, + "y": 2100, + "name": "Tab/Active", + "reusable": true, + "height": 32, + "fill": "$segment", + "cornerRadius": "$radius/3xl", + "effect": { + "type": "shadow", + "shadowType": "outer", + "color": "#0000000A", + "offset": { + "x": 0, + "y": 1 + }, + "blur": 3 + }, + "padding": [ + 0, + 16 + ], + "justifyContent": "center", + "alignItems": "center", + "children": [ + { + "type": "text", + "id": "BtgBT", + "name": "Label", + "fill": "$foreground/segment", + "content": "Account", + "fontFamily": "$typography/font-sans", + "fontSize": 14, + "fontWeight": "500" + } + ] + }, + { + "type": "frame", + "id": "nO0GM", + "x": 270, + "y": 2100, + "name": "Tab/Inactive", + "reusable": true, + "height": 32, + "cornerRadius": "$radius/3xl", + "padding": [ + 0, + 16 + ], + "justifyContent": "center", + "alignItems": "center", + "children": [ + { + "type": "text", + "id": "x5KZZd", + "name": "Label", + "fill": "$muted", + "content": "Settings", + "fontFamily": "$typography/font-sans", + "fontSize": 14, + "fontWeight": "500" + } + ] + }, + { + "type": "frame", + "id": "sklNL", + "x": 380, + "y": 2100, + "name": "Tabs", + "reusable": true, + "slot": [], + "width": "fit_content(300)", + "height": 40, + "fill": "$default/default", + "cornerRadius": 20, + "padding": 4 + }, + { + "type": "frame", + "id": "ic6kX", + "x": 442, + "y": 3049, + "name": "Menu Divider", + "reusable": true, + "width": 240, + "layout": "vertical", + "padding": [ + 4, + 0 + ], + "justifyContent": "center", + "alignItems": "center", + "children": [ + { + "type": "rectangle", + "id": "Treu9", + "fill": "$separator/separator", + "width": "fill_container", + "height": 1 + } + ] + }, + { + "type": "frame", + "id": "xrGB7", + "x": 444, + "y": 3002, + "name": "Menu Item/Danger", + "reusable": true, + "width": 240, + "height": 36, + "cornerRadius": "$radius/2xl", + "gap": 12, + "padding": [ + 6, + 8 + ], + "alignItems": "center", + "children": [ + { + "type": "icon", + "id": "w5yaR", + "width": 16, + "height": 16, + "icon": "trash-2", + "library": "lucide", + "fill": "$danger/danger" + }, + { + "type": "text", + "id": "TIfVD", + "name": "Label", + "fill": "$danger/danger", + "content": "Delete", + "fontFamily": "$typography/font-sans", + "fontSize": 14, + "fontWeight": "normal" + } + ] + }, + { + "type": "frame", + "id": "QavWX", + "x": 442, + "y": 2967, + "name": "Menu Title", + "reusable": true, + "width": 240, + "padding": [ + 6, + 8 + ], + "alignItems": "center", + "children": [ + { + "type": "text", + "id": "gKhyn", + "name": "Label", + "fill": "$muted", + "content": "Section", + "fontFamily": "$typography/font-sans", + "fontSize": 12, + "fontWeight": "500" + } + ] + }, + { + "type": "frame", + "id": "l73kJ", + "x": 160, + "y": 3104, + "name": "Dropdown", + "reusable": true, + "slot": [], + "width": "fit_content(240)", + "height": "fit_content(80)", + "fill": "$overlay", + "cornerRadius": "$radius/3xl", + "effect": { + "type": "shadow", + "shadowType": "outer", + "color": "#00000014", + "offset": { + "x": 0, + "y": 4 + }, + "blur": 12 + }, + "layout": "vertical", + "gap": 4, + "padding": 4 + }, + { + "type": "text", + "id": "r4U3Jx", + "x": 165, + "y": 2952, + "fill": "$muted", + "content": "Dropdown Items", + "fontFamily": "$typography/font-sans", + "fontSize": 11, + "fontWeight": "500" + }, + { + "type": "text", + "id": "wzfGC", + "x": 160, + "y": 3084, + "fill": "$muted", + "content": "Dropdown", + "fontFamily": "$typography/font-sans", + "fontSize": 11, + "fontWeight": "500" + }, + { + "type": "frame", + "id": "mDMuy", + "x": 160, + "y": 2157, + "name": "Tabs", + "height": 40, + "fill": "$default/default", + "cornerRadius": 20, + "padding": 4, + "children": [ + { + "type": "frame", + "id": "AV2jW", + "name": "Tab/Active", + "height": 32, + "fill": "$segment", + "cornerRadius": "$radius/3xl", + "effect": { + "type": "shadow", + "shadowType": "outer", + "color": "#0000000A", + "offset": { + "x": 0, + "y": 1 + }, + "blur": 3 + }, + "padding": [ + 0, + 16 + ], + "justifyContent": "center", + "alignItems": "center", + "children": [ + { + "type": "text", + "id": "kg2Y8", + "name": "Label", + "fill": "$foreground/segment", + "content": "Account", + "fontFamily": "$typography/font-sans", + "fontSize": 14, + "fontWeight": "500" + } + ] + }, + { + "type": "frame", + "id": "fjozE", + "name": "Tab/Inactive", + "height": 32, + "cornerRadius": "$radius/3xl", + "padding": [ + 0, + 16 + ], + "justifyContent": "center", + "alignItems": "center", + "children": [ + { + "type": "text", + "id": "QsKZV", + "name": "Label", + "fill": "$muted", + "content": "Settings", + "fontFamily": "$typography/font-sans", + "fontSize": 14, + "fontWeight": "500" + } + ] + }, + { + "type": "frame", + "id": "ieod9", + "name": "Tab/Inactive", + "height": 32, + "cornerRadius": "$radius/3xl", + "padding": [ + 0, + 16 + ], + "justifyContent": "center", + "alignItems": "center", + "children": [ + { + "type": "text", + "id": "T1i1U", + "name": "Label", + "fill": "$muted", + "content": "Notifications", + "fontFamily": "$typography/font-sans", + "fontSize": 14, + "fontWeight": "500" + } + ] + }, + { + "type": "frame", + "id": "tYByf", + "name": "Tab/Inactive", + "height": 32, + "cornerRadius": "$radius/3xl", + "padding": [ + 0, + 16 + ], + "justifyContent": "center", + "alignItems": "center", + "children": [ + { + "type": "text", + "id": "Clpb2", + "name": "Label", + "fill": "$muted", + "content": "Security", + "fontFamily": "$typography/font-sans", + "fontSize": 14, + "fontWeight": "500" + } + ] + } + ] + }, + { + "type": "text", + "id": "N7Y7P9", + "x": 2372, + "y": 2052, + "fill": "$muted", + "content": "Alert Dialog", + "fontFamily": "$typography/font-sans", + "fontSize": 11, + "fontWeight": "500" + }, + { + "type": "frame", + "id": "GWd4y", + "x": 2372, + "y": 2072, + "name": "AlertDialog/Danger", + "reusable": true, + "width": 400, + "fill": "$overlay", + "cornerRadius": "$radius/3xl", + "effect": { + "type": "shadow", + "shadowType": "outer", + "color": "#00000018", + "offset": { + "x": 0, + "y": 8 + }, + "blur": 24 + }, + "layout": "vertical", + "padding": "$spacing/6", + "children": [ + { + "type": "frame", + "id": "F8Fyx", + "name": "Header", + "width": "fill_container", + "layout": "vertical", + "gap": 12, + "children": [ + { + "type": "frame", + "id": "a4jqT", + "name": "Icon", + "width": 40, + "height": 40, + "fill": "$danger/soft", + "cornerRadius": 9999, + "justifyContent": "center", + "alignItems": "center", + "children": [ + { + "type": "icon", + "id": "u8MfM6", + "width": 20, + "height": 20, + "icon": "triangle-alert", + "library": "lucide", + "fill": "$danger/soft-foreground" + } + ] + }, + { + "type": "text", + "id": "HZuJV", + "name": "Heading", + "fill": "$foreground/foreground", + "content": "Delete project permanently?", + "fontFamily": "$typography/font-sans", + "fontSize": 16, + "fontWeight": "500" + } + ] + }, + { + "type": "frame", + "id": "fLN98", + "name": "Body", + "width": "fill_container", + "layout": "vertical", + "padding": [ + 8, + 0, + 0, + 0 + ], + "children": [ + { + "type": "text", + "id": "Z2Ag56", + "name": "Content", + "fill": "$muted", + "textGrowth": "fixed-width", + "width": "fill_container", + "content": "This will permanently delete My Awesome Project and all of its data. This action cannot be undone.", + "lineHeight": 1.43, + "fontFamily": "$typography/font-sans", + "fontSize": 14, + "fontWeight": "normal" + } + ] + }, + { + "type": "frame", + "id": "cKmob", + "name": "Footer", + "width": "fill_container", + "gap": 8, + "padding": [ + 20, + 0, + 0, + 0 + ], + "justifyContent": "end", + "children": [ + { + "type": "frame", + "id": "fXhpG", + "name": "cancelBtn", + "height": 32, + "fill": "$default/default", + "cornerRadius": "$radius/3xl", + "gap": 5, + "padding": [ + 8, + "$spacing/3" + ], + "justifyContent": "center", + "alignItems": "center", + "children": [ + { + "type": "icon", + "id": "cHOkr", + "x": 12, + "y": 9, + "name": "i7", + "enabled": false, + "width": 14, + "height": 14, + "icon": "plus", + "library": "lucide", + "fill": "$foreground/foreground" + }, + { + "type": "text", + "id": "kTzBK", + "name": "Label", + "fill": "$foreground/foreground", + "content": "Cancel", + "fontFamily": "$typography/font-sans", + "fontSize": 13, + "fontWeight": "500" + } + ] + }, + { + "type": "frame", + "id": "dOicj", + "name": "dangerBtn", + "height": 32, + "fill": "$danger/danger", + "cornerRadius": "$radius/3xl", + "gap": 5, + "padding": [ + 8, + "$spacing/3" + ], + "justifyContent": "center", + "alignItems": "center", + "children": [ + { + "type": "icon", + "id": "xLSvC", + "x": 12, + "y": 9, + "name": "i1", + "enabled": false, + "width": 14, + "height": 14, + "icon": "plus", + "library": "lucide", + "fill": "$danger/foreground" + }, + { + "type": "text", + "id": "rAJiq", + "name": "Label", + "fill": "$danger/foreground", + "content": "Delete Project", + "fontFamily": "$typography/font-sans", + "fontSize": 13, + "fontWeight": "500" + } + ] + } + ] + }, + { + "type": "frame", + "id": "Gl1Qx", + "layoutPosition": "absolute", + "x": 362, + "y": 14, + "name": "CloseButton", + "width": 24, + "height": 24, + "fill": "$default/default", + "cornerRadius": "$radius/xl", + "justifyContent": "center", + "alignItems": "center", + "children": [ + { + "type": "icon", + "id": "mV77C", + "width": 16, + "height": 16, + "icon": "x", + "library": "lucide", + "fill": "$muted" + } + ] + } + ] + }, + { + "type": "frame", + "id": "F7BQBR", + "x": 2372, + "y": 2322, + "name": "AlertDialog/Accent", + "reusable": true, + "width": 400, + "fill": "$overlay", + "cornerRadius": "$radius/3xl", + "effect": { + "type": "shadow", + "shadowType": "outer", + "color": "#00000018", + "offset": { + "x": 0, + "y": 8 + }, + "blur": 24 + }, + "layout": "vertical", + "padding": "$spacing/6", + "children": [ + { + "type": "frame", + "id": "qM5ON", + "name": "Header", + "width": "fill_container", + "layout": "vertical", + "gap": 12, + "children": [ + { + "type": "frame", + "id": "liwxH", + "name": "Icon", + "width": 40, + "height": 40, + "fill": "$accent/soft", + "cornerRadius": 9999, + "justifyContent": "center", + "alignItems": "center", + "children": [ + { + "type": "icon", + "id": "U8bR4J", + "width": 20, + "height": 20, + "icon": "info", + "library": "lucide", + "fill": "$accent/soft-foreground" + } + ] + }, + { + "type": "text", + "id": "buKH4", + "name": "Heading", + "fill": "$foreground/foreground", + "content": "Sign out of your account?", + "fontFamily": "$typography/font-sans", + "fontSize": 16, + "fontWeight": "500" + } + ] + }, + { + "type": "frame", + "id": "e2p4jr", + "name": "Body", + "width": "fill_container", + "layout": "vertical", + "padding": [ + 8, + 0, + 0, + 0 + ], + "children": [ + { + "type": "text", + "id": "hNBfP", + "name": "Content", + "fill": "$muted", + "textGrowth": "fixed-width", + "width": "fill_container", + "content": "You'll need to sign in again to access your account. Any unsaved changes will be lost.", + "lineHeight": 1.43, + "fontFamily": "$typography/font-sans", + "fontSize": 14, + "fontWeight": "normal" + } + ] + }, + { + "type": "frame", + "id": "V4HVe", + "name": "Footer", + "width": "fill_container", + "gap": 8, + "padding": [ + 20, + 0, + 0, + 0 + ], + "justifyContent": "end", + "children": [ + { + "type": "frame", + "id": "I45MrS", + "name": "Button/Tertiary/SM", + "height": 32, + "fill": "$default/default", + "cornerRadius": "$radius/3xl", + "gap": 5, + "padding": [ + 8, + "$spacing/3" + ], + "justifyContent": "center", + "alignItems": "center", + "children": [ + { + "type": "icon", + "id": "CfMBS", + "x": 12, + "y": 9, + "name": "i7", + "enabled": false, + "width": 14, + "height": 14, + "icon": "plus", + "library": "lucide", + "fill": "$foreground/foreground" + }, + { + "type": "text", + "id": "Vq168", + "name": "Label", + "fill": "$foreground/foreground", + "content": "Stay Signed In", + "fontFamily": "$typography/font-sans", + "fontSize": 13, + "fontWeight": "500" + } + ] + }, + { + "type": "frame", + "id": "lxvsH", + "name": "Button/Primary/SM", + "height": 32, + "fill": "$accent/accent", + "cornerRadius": "$radius/3xl", + "gap": 5, + "padding": [ + 8, + "$spacing/3" + ], + "justifyContent": "center", + "alignItems": "center", + "children": [ + { + "type": "icon", + "id": "kMC8i", + "x": 12, + "y": 9, + "name": "i1", + "enabled": false, + "width": 14, + "height": 14, + "icon": "plus", + "library": "lucide", + "fill": "$accent/foreground" + }, + { + "type": "text", + "id": "LwF1R", + "name": "Label", + "fill": "$accent/foreground", + "content": "Sign Out", + "fontFamily": "$typography/font-sans", + "fontSize": 13, + "fontWeight": "500" + } + ] + } + ] + }, + { + "type": "frame", + "id": "jTFoQ", + "layoutPosition": "absolute", + "x": 362, + "y": 14, + "name": "CloseButton", + "width": 24, + "height": 24, + "fill": "$default/default", + "cornerRadius": "$radius/xl", + "justifyContent": "center", + "alignItems": "center", + "children": [ + { + "type": "icon", + "id": "s4Y7Q", + "width": 16, + "height": 16, + "icon": "x", + "library": "lucide", + "fill": "$muted" + } + ] + } + ] + }, + { + "type": "frame", + "id": "sf7q1", + "x": 741, + "y": 2507, + "name": "CloseButton", + "reusable": true, + "width": 24, + "height": 24, + "fill": "$default/default", + "cornerRadius": "$radius/xl", + "justifyContent": "center", + "alignItems": "center", + "children": [ + { + "type": "icon", + "id": "W7DThp", + "width": 16, + "height": 16, + "icon": "x", + "library": "lucide", + "fill": "$muted" + } + ] + }, + { + "type": "text", + "id": "iJ2l3", + "x": 2367, + "y": 2691, + "fill": "$muted", + "content": "Modal", + "fontFamily": "$typography/font-sans", + "fontSize": 11, + "fontWeight": "500" + }, + { + "type": "frame", + "id": "G35SO", + "x": 2367, + "y": 2725, + "name": "Modal Header", + "reusable": true, + "width": 160, + "layout": "vertical", + "gap": 12, + "children": [ + { + "type": "frame", + "id": "khPQy", + "name": "Icon", + "width": 40, + "height": 40, + "fill": "$default/default", + "cornerRadius": 9999, + "justifyContent": "center", + "alignItems": "center", + "children": [ + { + "type": "icon", + "id": "J8Y72U", + "width": 20, + "height": 20, + "icon": "rocket", + "library": "lucide", + "fill": "$foreground/foreground" + } + ] + }, + { + "type": "text", + "id": "TWihB", + "name": "Heading", + "fill": "$foreground/foreground", + "content": "Modal Heading", + "fontFamily": "$typography/font-sans", + "fontSize": 16, + "fontWeight": "500" + } + ] + }, + { + "type": "frame", + "id": "g2k72", + "x": 2367, + "y": 2823, + "name": "Modal Body", + "reusable": true, + "width": 320, + "layout": "vertical", + "children": [ + { + "type": "text", + "id": "X5zCW2", + "name": "Content", + "fill": "$muted", + "textGrowth": "fixed-width", + "width": "fill_container", + "content": "This is the modal body content. You can place any content here.", + "lineHeight": 1.43, + "fontFamily": "$typography/font-sans", + "fontSize": 14, + "fontWeight": "normal" + } + ] + }, + { + "type": "frame", + "id": "YOvHj", + "x": 2367, + "y": 2888, + "name": "Modal Footer", + "reusable": true, + "width": 160, + "gap": 8, + "justifyContent": "end", + "children": [ + { + "type": "frame", + "id": "N0zno", + "name": "Button/Tertiary/SM", + "height": 32, + "fill": "$default/default", + "cornerRadius": "$radius/3xl", + "gap": 5, + "padding": [ + 8, + "$spacing/3" + ], + "justifyContent": "center", + "alignItems": "center", + "children": [ + { + "type": "icon", + "id": "uRAkP", + "x": 12, + "y": 9, + "name": "i7", + "enabled": false, + "width": 14, + "height": 14, + "icon": "plus", + "library": "lucide", + "fill": "$foreground/foreground" + }, + { + "type": "text", + "id": "HdgQG", + "name": "Label", + "fill": "$foreground/foreground", + "content": "Cancel", + "fontFamily": "$typography/font-sans", + "fontSize": 13, + "fontWeight": "500" + } + ] + }, + { + "type": "frame", + "id": "fQh1k", + "name": "Button/Primary/SM", + "height": 32, + "fill": "$accent/accent", + "cornerRadius": "$radius/3xl", + "gap": 5, + "padding": [ + 8, + "$spacing/3" + ], + "justifyContent": "center", + "alignItems": "center", + "children": [ + { + "type": "icon", + "id": "jGn90", + "x": 12, + "y": 9, + "name": "i1", + "enabled": false, + "width": 14, + "height": 14, + "icon": "plus", + "library": "lucide", + "fill": "$accent/foreground" + }, + { + "type": "text", + "id": "dTyAN", + "name": "Label", + "fill": "$accent/foreground", + "content": "Confirm", + "fontFamily": "$typography/font-sans", + "fontSize": 13, + "fontWeight": "500" + } + ] + } + ] + }, + { + "type": "frame", + "id": "aMIQ2", + "x": 2367, + "y": 2982, + "name": "Modal", + "reusable": true, + "slot": [], + "width": "fit_content(400)", + "height": "fit_content(200)", + "fill": "$overlay", + "cornerRadius": "$radius/3xl", + "effect": { + "type": "shadow", + "shadowType": "outer", + "color": "#00000018", + "offset": { + "x": 0, + "y": 8 + }, + "blur": 24 + }, + "layout": "vertical", + "padding": 24 + }, + { + "type": "text", + "id": "H3gdE", + "x": 2367, + "y": 3212, + "fill": "$muted", + "content": "Example modal", + "fontFamily": "$typography/font-sans", + "fontSize": 11, + "fontWeight": "500" + }, + { + "type": "frame", + "id": "tbptT", + "x": 2367, + "y": 3232, + "name": "Modal Example", + "width": 400, + "fill": "$overlay", + "cornerRadius": "$radius/3xl", + "effect": { + "type": "shadow", + "shadowType": "outer", + "color": "#00000018", + "offset": { + "x": 0, + "y": 8 + }, + "blur": 24 + }, + "layout": "vertical", + "padding": 24, + "children": [ + { + "type": "frame", + "id": "lbKEu", + "name": "exHeader", + "width": "fill_container", + "layout": "vertical", + "gap": 12, + "children": [ + { + "type": "frame", + "id": "p90uAD", + "name": "Icon", + "width": 40, + "height": 40, + "fill": "$accent/soft", + "cornerRadius": 9999, + "justifyContent": "center", + "alignItems": "center", + "children": [ + { + "type": "icon", + "id": "x8igE", + "width": 20, + "height": 20, + "icon": "folder-plus", + "library": "lucide", + "fill": "$accent/soft-foreground" + } + ] + }, + { + "type": "text", + "id": "V7XdH", + "name": "Heading", + "fill": "$foreground/foreground", + "content": "Create new project", + "fontFamily": "$typography/font-sans", + "fontSize": 16, + "fontWeight": "500" + } + ] + }, + { + "type": "frame", + "id": "q7Ijv4", + "name": "exBody", + "width": "fill_container", + "layout": "vertical", + "padding": [ + 8, + 0, + 0, + 0 + ], + "children": [ + { + "type": "text", + "id": "P75isW", + "name": "Content", + "fill": "$muted", + "textGrowth": "fixed-width", + "width": "fill_container", + "content": "Enter a name for your new project. You can change this later in your project settings.", + "lineHeight": 1.43, + "fontFamily": "$typography/font-sans", + "fontSize": 14, + "fontWeight": "normal" + } + ] + }, + { + "type": "frame", + "id": "YS8y0", + "name": "exFooter", + "width": "fill_container", + "gap": 8, + "padding": [ + 20, + 0, + 0, + 0 + ], + "justifyContent": "end", + "children": [ + { + "type": "frame", + "id": "emRNX", + "name": "Button/Tertiary/SM", + "height": 32, + "fill": "$default/default", + "cornerRadius": "$radius/3xl", + "gap": 5, + "padding": [ + 8, + "$spacing/3" + ], + "justifyContent": "center", + "alignItems": "center", + "children": [ + { + "type": "icon", + "id": "DZ0GC", + "x": 12, + "y": 9, + "name": "i7", + "enabled": false, + "width": 14, + "height": 14, + "icon": "plus", + "library": "lucide", + "fill": "$foreground/foreground" + }, + { + "type": "text", + "id": "PLzgc", + "name": "Label", + "fill": "$foreground/foreground", + "content": "Cancel", + "fontFamily": "$typography/font-sans", + "fontSize": 13, + "fontWeight": "500" + } + ] + }, + { + "type": "frame", + "id": "jUVoW", + "name": "Button/Primary/SM", + "height": 32, + "fill": "$accent/accent", + "cornerRadius": "$radius/3xl", + "gap": 5, + "padding": [ + 8, + "$spacing/3" + ], + "justifyContent": "center", + "alignItems": "center", + "children": [ + { + "type": "icon", + "id": "L7fPQo", + "x": 12, + "y": 9, + "name": "i1", + "enabled": false, + "width": 14, + "height": 14, + "icon": "plus", + "library": "lucide", + "fill": "$accent/foreground" + }, + { + "type": "text", + "id": "nDTdE", + "name": "Label", + "fill": "$accent/foreground", + "content": "Confirm", + "fontFamily": "$typography/font-sans", + "fontSize": 13, + "fontWeight": "500" + } + ] + } + ] + }, + { + "type": "frame", + "id": "L7ftGw", + "layoutPosition": "absolute", + "x": 348, + "y": 24, + "name": "exClose", + "width": 24, + "height": 24, + "fill": "$default/default", + "cornerRadius": "$radius/xl", + "justifyContent": "center", + "alignItems": "center", + "children": [ + { + "type": "icon", + "id": "vvRq1", + "width": 16, + "height": 16, + "icon": "x", + "library": "lucide", + "fill": "$muted" + } + ] + } + ] + }, + { + "type": "text", + "id": "prKcu", + "x": 1286, + "y": 397, + "fill": "$foreground/foreground", + "content": "Table", + "fontFamily": "$typography/font-sans", + "fontSize": 20, + "fontWeight": "600" + }, + { + "type": "text", + "id": "blvc6", + "x": 1286, + "y": 437, + "fill": "$muted", + "content": "Table Column", + "fontFamily": "$typography/font-sans", + "fontSize": 11, + "fontWeight": "500" + }, + { + "type": "frame", + "id": "RCNNc", + "x": 1286, + "y": 457, + "name": "Table Column", + "reusable": true, + "fill": "$surface/secondary", + "padding": [ + 10, + 16 + ], + "alignItems": "center", + "children": [ + { + "type": "text", + "id": "U3RmG", + "name": "Label", + "fill": "$muted", + "content": "Column", + "fontFamily": "$typography/font-sans", + "fontSize": 12, + "fontWeight": "500" + } + ] + }, + { + "type": "text", + "id": "EQPsw", + "x": 1466, + "y": 437, + "fill": "$muted", + "content": "Table Cell", + "fontFamily": "$typography/font-sans", + "fontSize": 11, + "fontWeight": "500" + }, + { + "type": "frame", + "id": "ek6t4", + "x": 1466, + "y": 457, + "name": "Table Cell", + "reusable": true, + "fill": "$surface/surface", + "stroke": "$separator/separator", + "strokeWidth": { + "bottom": 1 + }, + "strokeAlignment": "inner", + "strokeLinejoin": "round", + "padding": [ + 12, + 16 + ], + "alignItems": "center", + "children": [ + { + "type": "text", + "id": "l97WfG", + "name": "Value", + "fill": "$foreground/foreground", + "content": "Cell value", + "fontFamily": "$typography/font-sans", + "fontSize": 14, + "fontWeight": "normal" + } + ] + }, + { + "type": "text", + "id": "IWws2", + "x": 1646, + "y": 437, + "fill": "$muted", + "content": "Table Row", + "fontFamily": "$typography/font-sans", + "fontSize": 11, + "fontWeight": "500" + }, + { + "type": "frame", + "id": "g15EzV", + "x": 1646, + "y": 457, + "name": "Table Row", + "reusable": true, + "width": 600, + "height": "fit_content(42)" + }, + { + "type": "text", + "id": "Hgest", + "x": 1286, + "y": 517, + "fill": "$muted", + "content": "Table Header", + "fontFamily": "$typography/font-sans", + "fontSize": 11, + "fontWeight": "500" + }, + { + "type": "frame", + "id": "Jq5VG", + "x": 1286, + "y": 537, + "name": "Table Header", + "reusable": true, + "width": 600, + "height": "fit_content(36)", + "fill": "$surface/secondary", + "stroke": "$separator/separator", + "strokeWidth": { + "bottom": 1 + }, + "strokeAlignment": "inner", + "strokeLinejoin": "round" + }, + { + "type": "text", + "id": "rPtQP", + "x": 1286, + "y": 597, + "fill": "$muted", + "content": "Table Body", + "fontFamily": "$typography/font-sans", + "fontSize": 11, + "fontWeight": "500" + }, + { + "type": "frame", + "id": "NGXHT", + "x": 1286, + "y": 617, + "name": "Table Body", + "reusable": true, + "clip": true, + "width": 600, + "height": "fit_content(120)", + "cornerRadius": "$radius/2xl", + "layout": "vertical" + }, + { + "type": "text", + "id": "x7bu2", + "x": 1286, + "y": 769, + "fill": "$muted", + "content": "Table Footer", + "fontFamily": "$typography/font-sans", + "fontSize": 11, + "fontWeight": "500" + }, + { + "type": "frame", + "id": "AnMqF", + "x": 1286, + "y": 789, + "name": "Table Footer", + "reusable": true, + "width": "fill_container(600)", + "padding": [ + 10, + 16 + ], + "justifyContent": "space_between", + "alignItems": "center", + "children": [ + { + "type": "text", + "id": "SpskA", + "name": "Summary", + "fill": "$muted", + "content": "1-5 of 24", + "fontFamily": "$typography/font-sans", + "fontSize": 13, + "fontWeight": "normal" + } + ] + }, + { + "type": "text", + "id": "q5iIzM", + "x": 1286, + "y": 849, + "fill": "$muted", + "content": "Pagination", + "fontFamily": "$typography/font-sans", + "fontSize": 11, + "fontWeight": "500" + }, + { + "type": "frame", + "id": "Sd2Ze", + "x": 1286, + "y": 869, + "name": "Pagination/Active", + "reusable": true, + "width": 36, + "height": 36, + "fill": "$default/default", + "cornerRadius": "$radius/3xl", + "justifyContent": "center", + "alignItems": "center", + "children": [ + { + "type": "text", + "id": "WnJnO", + "name": "Label", + "fill": "$default/foreground", + "content": "1", + "fontFamily": "$typography/font-sans", + "fontSize": 14, + "fontWeight": "500" + } + ] + }, + { + "type": "frame", + "id": "lMXsB", + "x": 1336, + "y": 869, + "name": "Pagination/Default", + "reusable": true, + "width": 36, + "height": 36, + "cornerRadius": "$radius/3xl", + "justifyContent": "center", + "alignItems": "center", + "children": [ + { + "type": "text", + "id": "NBoIZ", + "name": "Label", + "fill": "$foreground/foreground", + "content": "2", + "fontFamily": "$typography/font-sans", + "fontSize": 14, + "fontWeight": "500" + } + ] + }, + { + "type": "frame", + "id": "Odlac", + "x": 1386, + "y": 869, + "name": "Pagination/Ellipsis", + "reusable": true, + "width": 36, + "height": 36, + "justifyContent": "center", + "alignItems": "center", + "children": [ + { + "type": "text", + "id": "h48BL0", + "fill": "$muted", + "content": "...", + "fontFamily": "$typography/font-sans", + "fontSize": 14, + "fontWeight": "normal" + } + ] + }, + { + "type": "frame", + "id": "KM6Mi", + "x": 1436, + "y": 869, + "name": "Pagination/Next", + "reusable": true, + "height": 36, + "cornerRadius": "$radius/3xl", + "gap": 6, + "padding": [ + 0, + 10 + ], + "justifyContent": "center", + "alignItems": "center", + "children": [ + { + "type": "text", + "id": "lHfxn", + "name": "Label", + "fill": "$foreground/foreground", + "content": "Next", + "fontFamily": "$typography/font-sans", + "fontSize": 14, + "fontWeight": "500" + }, + { + "type": "icon", + "id": "P3V94", + "width": 16, + "height": 16, + "icon": "chevron-right", + "library": "lucide", + "fill": "$foreground/foreground" + } + ] + }, + { + "type": "frame", + "id": "GDQCg", + "x": 1523, + "y": 869, + "name": "Pagination/Prev", + "reusable": true, + "height": 36, + "cornerRadius": "$radius/3xl", + "gap": 6, + "padding": [ + 0, + 10 + ], + "justifyContent": "center", + "alignItems": "center", + "children": [ + { + "type": "text", + "id": "e58SRb", + "name": "Label", + "fill": "$foreground/foreground", + "content": "Previous", + "fontFamily": "$typography/font-sans", + "fontSize": 14, + "fontWeight": "500" + }, + { + "type": "icon", + "id": "dMBh3", + "width": 16, + "height": 16, + "icon": "chevron-left", + "library": "lucide", + "fill": "$foreground/foreground" + } + ] + }, + { + "type": "text", + "id": "Fx5bB", + "x": 1286, + "y": 929, + "fill": "$muted", + "content": "Table Container (slot)", + "fontFamily": "$typography/font-sans", + "fontSize": 11, + "fontWeight": "500" + }, + { + "type": "frame", + "id": "u1zjY", + "x": 1286, + "y": 949, + "name": "Table", + "reusable": true, + "slot": [], + "clip": true, + "width": "fit_content(700)", + "height": "fit_content(300)", + "fill": "$surface/secondary", + "cornerRadius": 20, + "layout": "vertical", + "padding": [ + 0, + 4, + 4, + 4 + ] + }, + { + "type": "text", + "id": "nb1K4", + "x": 1286, + "y": 1288, + "fill": "$muted", + "content": "Example", + "fontFamily": "$typography/font-sans", + "fontSize": 11, + "fontWeight": "500" + }, + { + "type": "frame", + "id": "BGfU0", + "x": 1286, + "y": 1314, + "name": "tableEx", + "clip": true, + "width": 700, + "fill": "$surface/secondary", + "cornerRadius": 20, + "layout": "vertical", + "padding": [ + 0, + 4, + 4, + 4 + ], + "children": [ + { + "type": "frame", + "id": "iXm5j", + "name": "header", + "width": "fill_container", + "fill": "$surface/secondary", + "stroke": "$separator/separator", + "strokeWidth": { + "bottom": 1 + }, + "strokeAlignment": "inner", + "strokeLinejoin": "round", + "children": [ + { + "type": "frame", + "id": "BDNXc", + "name": "hc1", + "width": "fill_container", + "fill": "$surface/secondary", + "padding": [ + 10, + 16 + ], + "alignItems": "center", + "children": [ + { + "type": "text", + "id": "eKlh6", + "name": "Label", + "fill": "$muted", + "content": "Name", + "fontFamily": "$typography/font-sans", + "fontSize": 12, + "fontWeight": "500" + } + ] + }, + { + "type": "frame", + "id": "hCzTy", + "name": "hc2", + "width": "fill_container", + "fill": "$surface/secondary", + "padding": [ + 10, + 16 + ], + "alignItems": "center", + "children": [ + { + "type": "text", + "id": "BZuG2", + "name": "Label", + "fill": "$muted", + "content": "Status", + "fontFamily": "$typography/font-sans", + "fontSize": 12, + "fontWeight": "500" + } + ] + }, + { + "type": "frame", + "id": "stQjM", + "name": "hc3", + "width": "fill_container", + "fill": "$surface/secondary", + "padding": [ + 10, + 16 + ], + "alignItems": "center", + "children": [ + { + "type": "text", + "id": "t3obN", + "name": "Label", + "fill": "$muted", + "content": "Role", + "fontFamily": "$typography/font-sans", + "fontSize": 12, + "fontWeight": "500" + } + ] + }, + { + "type": "frame", + "id": "XDNrx", + "name": "hc4", + "width": "fill_container", + "fill": "$surface/secondary", + "padding": [ + 10, + 16 + ], + "alignItems": "center", + "children": [ + { + "type": "text", + "id": "cc6ED", + "name": "Label", + "fill": "$muted", + "content": "Email", + "fontFamily": "$typography/font-sans", + "fontSize": 12, + "fontWeight": "500" + } + ] + } + ] + }, + { + "type": "frame", + "id": "BZ50C", + "name": "body", + "clip": true, + "width": "fill_container", + "cornerRadius": "$radius/2xl", + "layout": "vertical", + "children": [ + { + "type": "frame", + "id": "h02fQ", + "name": "r1", + "width": "fill_container", + "children": [ + { + "type": "frame", + "id": "b5GZas", + "name": "Table Cell", + "width": "fill_container", + "fill": "$surface/surface", + "stroke": "$separator/separator", + "strokeWidth": { + "bottom": 1 + }, + "strokeAlignment": "inner", + "strokeLinejoin": "round", + "padding": [ + 12, + 16 + ], + "alignItems": "center", + "children": [ + { + "type": "text", + "id": "gcke0", + "name": "Value", + "fill": "$foreground/foreground", + "content": "John Doe", + "fontFamily": "$typography/font-sans", + "fontSize": 14, + "fontWeight": "normal" + } + ] + }, + { + "type": "frame", + "id": "DD9CP", + "name": "c2", + "width": "fill_container", + "fill": "$surface/surface", + "stroke": "$separator/separator", + "strokeWidth": { + "bottom": 1 + }, + "strokeAlignment": "inner", + "strokeLinejoin": "round", + "padding": [ + 12, + 16 + ], + "alignItems": "center", + "children": [ + { + "type": "frame", + "id": "pFSfb", + "name": "Chip/Primary/Accent/SM", + "fill": "$accent/accent", + "cornerRadius": "$radius/2xl", + "gap": 2, + "padding": [ + 2, + 4 + ], + "alignItems": "center", + "children": [ + { + "type": "text", + "id": "yz8ve", + "name": "Label", + "fill": "$accent/foreground", + "content": "Active", + "fontFamily": "$typography/font-sans", + "fontSize": 11, + "fontWeight": "500" + } + ] + } + ] + }, + { + "type": "frame", + "id": "XMy8L", + "name": "Table Cell", + "width": "fill_container", + "fill": "$surface/surface", + "stroke": "$separator/separator", + "strokeWidth": { + "bottom": 1 + }, + "strokeAlignment": "inner", + "strokeLinejoin": "round", + "padding": [ + 12, + 16 + ], + "alignItems": "center", + "children": [ + { + "type": "text", + "id": "A1u3x", + "name": "Value", + "fill": "$foreground/foreground", + "content": "Developer", + "fontFamily": "$typography/font-sans", + "fontSize": 14, + "fontWeight": "normal" + } + ] + }, + { + "type": "frame", + "id": "j3XBUr", + "name": "Table Cell", + "width": "fill_container", + "fill": "$surface/surface", + "stroke": "$separator/separator", + "strokeWidth": { + "bottom": 1 + }, + "strokeAlignment": "inner", + "strokeLinejoin": "round", + "padding": [ + 12, + 16 + ], + "alignItems": "center", + "children": [ + { + "type": "text", + "id": "Shcqe", + "name": "Value", + "fill": "$muted", + "content": "john@example.com", + "fontFamily": "$typography/font-sans", + "fontSize": 14, + "fontWeight": "normal" + } + ] + } + ] + }, + { + "type": "frame", + "id": "C7hzqw", + "name": "r2", + "width": "fill_container", + "children": [ + { + "type": "frame", + "id": "lpNxO", + "name": "Table Cell", + "width": "fill_container", + "fill": "$surface/surface", + "stroke": "$separator/separator", + "strokeWidth": { + "bottom": 1 + }, + "strokeAlignment": "inner", + "strokeLinejoin": "round", + "padding": [ + 12, + 16 + ], + "alignItems": "center", + "children": [ + { + "type": "text", + "id": "DPr69", + "name": "Value", + "fill": "$foreground/foreground", + "content": "Jane Smith", + "fontFamily": "$typography/font-sans", + "fontSize": 14, + "fontWeight": "normal" + } + ] + }, + { + "type": "frame", + "id": "KTHyV", + "name": "c6", + "width": "fill_container", + "fill": "$surface/surface", + "stroke": "$separator/separator", + "strokeWidth": { + "bottom": 1 + }, + "strokeAlignment": "inner", + "strokeLinejoin": "round", + "padding": [ + 12, + 16 + ], + "alignItems": "center", + "children": [ + { + "type": "frame", + "id": "aleeK", + "name": "Chip/Primary/Warning/SM", + "fill": "$warning/warning", + "cornerRadius": "$radius/2xl", + "gap": 2, + "padding": [ + 2, + 4 + ], + "alignItems": "center", + "children": [ + { + "type": "text", + "id": "fTMYt", + "name": "Label", + "fill": "$warning/foreground", + "content": "Inactive", + "fontFamily": "$typography/font-sans", + "fontSize": 11, + "fontWeight": "500" + } + ] + } + ] + }, + { + "type": "frame", + "id": "K1Dc5c", + "name": "Table Cell", + "width": "fill_container", + "fill": "$surface/surface", + "stroke": "$separator/separator", + "strokeWidth": { + "bottom": 1 + }, + "strokeAlignment": "inner", + "strokeLinejoin": "round", + "padding": [ + 12, + 16 + ], + "alignItems": "center", + "children": [ + { + "type": "text", + "id": "L8ZttA", + "name": "Value", + "fill": "$foreground/foreground", + "content": "Designer", + "fontFamily": "$typography/font-sans", + "fontSize": 14, + "fontWeight": "normal" + } + ] + }, + { + "type": "frame", + "id": "XOgq8", + "name": "Table Cell", + "width": "fill_container", + "fill": "$surface/surface", + "stroke": "$separator/separator", + "strokeWidth": { + "bottom": 1 + }, + "strokeAlignment": "inner", + "strokeLinejoin": "round", + "padding": [ + 12, + 16 + ], + "alignItems": "center", + "children": [ + { + "type": "text", + "id": "RCaZI", + "name": "Value", + "fill": "$muted", + "content": "jane@example.com", + "fontFamily": "$typography/font-sans", + "fontSize": 14, + "fontWeight": "normal" + } + ] + } + ] + }, + { + "type": "frame", + "id": "Hz6de", + "name": "r3", + "width": "fill_container", + "children": [ + { + "type": "frame", + "id": "DvAZN", + "name": "Table Cell", + "width": "fill_container", + "fill": "$surface/surface", + "stroke": "$separator/separator", + "strokeWidth": { + "bottom": 1 + }, + "strokeAlignment": "inner", + "strokeLinejoin": "round", + "padding": [ + 12, + 16 + ], + "alignItems": "center", + "children": [ + { + "type": "text", + "id": "BVRhs", + "name": "Value", + "fill": "$foreground/foreground", + "content": "Bob Wilson", + "fontFamily": "$typography/font-sans", + "fontSize": 14, + "fontWeight": "normal" + } + ] + }, + { + "type": "frame", + "id": "BMTPD", + "name": "c10", + "width": "fill_container", + "fill": "$surface/surface", + "stroke": "$separator/separator", + "strokeWidth": { + "bottom": 1 + }, + "strokeAlignment": "inner", + "strokeLinejoin": "round", + "padding": [ + 12, + 16 + ], + "alignItems": "center", + "children": [ + { + "type": "frame", + "id": "NTlhO", + "name": "Chip/Primary/Accent/SM", + "fill": "$accent/accent", + "cornerRadius": "$radius/2xl", + "gap": 2, + "padding": [ + 2, + 4 + ], + "alignItems": "center", + "children": [ + { + "type": "text", + "id": "ZcuFt", + "name": "Label", + "fill": "$accent/foreground", + "content": "Active", + "fontFamily": "$typography/font-sans", + "fontSize": 11, + "fontWeight": "500" + } + ] + } + ] + }, + { + "type": "frame", + "id": "w51VF", + "name": "Table Cell", + "width": "fill_container", + "fill": "$surface/surface", + "stroke": "$separator/separator", + "strokeWidth": { + "bottom": 1 + }, + "strokeAlignment": "inner", + "strokeLinejoin": "round", + "padding": [ + 12, + 16 + ], + "alignItems": "center", + "children": [ + { + "type": "text", + "id": "rYZdk", + "name": "Value", + "fill": "$foreground/foreground", + "content": "Manager", + "fontFamily": "$typography/font-sans", + "fontSize": 14, + "fontWeight": "normal" + } + ] + }, + { + "type": "frame", + "id": "U1A7Au", + "name": "Table Cell", + "width": "fill_container", + "fill": "$surface/surface", + "stroke": "$separator/separator", + "strokeWidth": { + "bottom": 1 + }, + "strokeAlignment": "inner", + "strokeLinejoin": "round", + "padding": [ + 12, + 16 + ], + "alignItems": "center", + "children": [ + { + "type": "text", + "id": "czu6P", + "name": "Value", + "fill": "$muted", + "content": "bob@example.com", + "fontFamily": "$typography/font-sans", + "fontSize": 14, + "fontWeight": "normal" + } + ] + } + ] + }, + { + "type": "frame", + "id": "R21ek", + "name": "r3", + "width": "fill_container", + "children": [ + { + "type": "frame", + "id": "gAWsw", + "name": "Table Cell", + "width": "fill_container", + "fill": "$surface/surface", + "stroke": "$separator/separator", + "strokeWidth": { + "bottom": 1 + }, + "strokeAlignment": "inner", + "strokeLinejoin": "round", + "padding": [ + 12, + 16 + ], + "alignItems": "center", + "children": [ + { + "type": "text", + "id": "vA5IX", + "name": "Value", + "fill": "$foreground/foreground", + "content": "Bob Wilson", + "fontFamily": "$typography/font-sans", + "fontSize": 14, + "fontWeight": "normal" + } + ] + }, + { + "type": "frame", + "id": "g8tOHz", + "name": "c10", + "width": "fill_container", + "fill": "$surface/surface", + "stroke": "$separator/separator", + "strokeWidth": { + "bottom": 1 + }, + "strokeAlignment": "inner", + "strokeLinejoin": "round", + "padding": [ + 12, + 16 + ], + "alignItems": "center", + "children": [ + { + "type": "frame", + "id": "zqowL", + "name": "Chip/Primary/Accent/SM", + "fill": "$accent/accent", + "cornerRadius": "$radius/2xl", + "gap": 2, + "padding": [ + 2, + 4 + ], + "alignItems": "center", + "children": [ + { + "type": "text", + "id": "TP2eN", + "name": "Label", + "fill": "$accent/foreground", + "content": "Active", + "fontFamily": "$typography/font-sans", + "fontSize": 11, + "fontWeight": "500" + } + ] + } + ] + }, + { + "type": "frame", + "id": "tn5la", + "name": "Table Cell", + "width": "fill_container", + "fill": "$surface/surface", + "stroke": "$separator/separator", + "strokeWidth": { + "bottom": 1 + }, + "strokeAlignment": "inner", + "strokeLinejoin": "round", + "padding": [ + 12, + 16 + ], + "alignItems": "center", + "children": [ + { + "type": "text", + "id": "pTxlf", + "name": "Value", + "fill": "$foreground/foreground", + "content": "Manager", + "fontFamily": "$typography/font-sans", + "fontSize": 14, + "fontWeight": "normal" + } + ] + }, + { + "type": "frame", + "id": "fUUWu", + "name": "Table Cell", + "width": "fill_container", + "fill": "$surface/surface", + "stroke": "$separator/separator", + "strokeWidth": { + "bottom": 1 + }, + "strokeAlignment": "inner", + "strokeLinejoin": "round", + "padding": [ + 12, + 16 + ], + "alignItems": "center", + "children": [ + { + "type": "text", + "id": "U2MA6", + "name": "Value", + "fill": "$muted", + "content": "bob@example.com", + "fontFamily": "$typography/font-sans", + "fontSize": 14, + "fontWeight": "normal" + } + ] + } + ] + }, + { + "type": "frame", + "id": "bSZKf", + "name": "r3", + "width": "fill_container", + "children": [ + { + "type": "frame", + "id": "S9ZYLi", + "name": "Table Cell", + "width": "fill_container", + "fill": "$surface/surface", + "stroke": "$separator/separator", + "strokeWidth": { + "bottom": 1 + }, + "strokeAlignment": "inner", + "strokeLinejoin": "round", + "padding": [ + 12, + 16 + ], + "alignItems": "center", + "children": [ + { + "type": "text", + "id": "h3DJX", + "name": "Value", + "fill": "$foreground/foreground", + "content": "Bob Wilson", + "fontFamily": "$typography/font-sans", + "fontSize": 14, + "fontWeight": "normal" + } + ] + }, + { + "type": "frame", + "id": "UjzdQ", + "name": "c10", + "width": "fill_container", + "fill": "$surface/surface", + "stroke": "$separator/separator", + "strokeWidth": { + "bottom": 1 + }, + "strokeAlignment": "inner", + "strokeLinejoin": "round", + "padding": [ + 12, + 16 + ], + "alignItems": "center", + "children": [ + { + "type": "frame", + "id": "Z3LGbN", + "name": "Chip/Primary/Accent/SM", + "fill": "$accent/accent", + "cornerRadius": "$radius/2xl", + "gap": 2, + "padding": [ + 2, + 4 + ], + "alignItems": "center", + "children": [ + { + "type": "text", + "id": "hIDZD", + "name": "Label", + "fill": "$accent/foreground", + "content": "Active", + "fontFamily": "$typography/font-sans", + "fontSize": 11, + "fontWeight": "500" + } + ] + } + ] + }, + { + "type": "frame", + "id": "sDf6Z", + "name": "Table Cell", + "width": "fill_container", + "fill": "$surface/surface", + "stroke": "$separator/separator", + "strokeWidth": { + "bottom": 1 + }, + "strokeAlignment": "inner", + "strokeLinejoin": "round", + "padding": [ + 12, + 16 + ], + "alignItems": "center", + "children": [ + { + "type": "text", + "id": "CynsY", + "name": "Value", + "fill": "$foreground/foreground", + "content": "Manager", + "fontFamily": "$typography/font-sans", + "fontSize": 14, + "fontWeight": "normal" + } + ] + }, + { + "type": "frame", + "id": "FEe9M", + "name": "Table Cell", + "width": "fill_container", + "fill": "$surface/surface", + "stroke": "$separator/separator", + "strokeWidth": { + "bottom": 1 + }, + "strokeAlignment": "inner", + "strokeLinejoin": "round", + "padding": [ + 12, + 16 + ], + "alignItems": "center", + "children": [ + { + "type": "text", + "id": "EBekY", + "name": "Value", + "fill": "$muted", + "content": "bob@example.com", + "fontFamily": "$typography/font-sans", + "fontSize": 14, + "fontWeight": "normal" + } + ] + } + ] + }, + { + "type": "frame", + "id": "cNByW", + "name": "r3", + "width": "fill_container", + "children": [ + { + "type": "frame", + "id": "bOMy6", + "name": "Table Cell", + "width": "fill_container", + "fill": "$surface/surface", + "stroke": "$separator/separator", + "strokeWidth": { + "bottom": 1 + }, + "strokeAlignment": "inner", + "strokeLinejoin": "round", + "padding": [ + 12, + 16 + ], + "alignItems": "center", + "children": [ + { + "type": "text", + "id": "H8XjNt", + "name": "Value", + "fill": "$foreground/foreground", + "content": "Bob Wilson", + "fontFamily": "$typography/font-sans", + "fontSize": 14, + "fontWeight": "normal" + } + ] + }, + { + "type": "frame", + "id": "ivxno", + "name": "c10", + "width": "fill_container", + "fill": "$surface/surface", + "stroke": "$separator/separator", + "strokeWidth": { + "bottom": 1 + }, + "strokeAlignment": "inner", + "strokeLinejoin": "round", + "padding": [ + 12, + 16 + ], + "alignItems": "center", + "children": [ + { + "type": "frame", + "id": "zTt1q", + "name": "Chip/Primary/Accent/SM", + "fill": "$accent/accent", + "cornerRadius": "$radius/2xl", + "gap": 2, + "padding": [ + 2, + 4 + ], + "alignItems": "center", + "children": [ + { + "type": "text", + "id": "b50tb", + "name": "Label", + "fill": "$accent/foreground", + "content": "Active", + "fontFamily": "$typography/font-sans", + "fontSize": 11, + "fontWeight": "500" + } + ] + } + ] + }, + { + "type": "frame", + "id": "OKOoS", + "name": "Table Cell", + "width": "fill_container", + "fill": "$surface/surface", + "stroke": "$separator/separator", + "strokeWidth": { + "bottom": 1 + }, + "strokeAlignment": "inner", + "strokeLinejoin": "round", + "padding": [ + 12, + 16 + ], + "alignItems": "center", + "children": [ + { + "type": "text", + "id": "riX81", + "name": "Value", + "fill": "$foreground/foreground", + "content": "Manager", + "fontFamily": "$typography/font-sans", + "fontSize": 14, + "fontWeight": "normal" + } + ] + }, + { + "type": "frame", + "id": "bwKez", + "name": "Table Cell", + "width": "fill_container", + "fill": "$surface/surface", + "stroke": "$separator/separator", + "strokeWidth": { + "bottom": 1 + }, + "strokeAlignment": "inner", + "strokeLinejoin": "round", + "padding": [ + 12, + 16 + ], + "alignItems": "center", + "children": [ + { + "type": "text", + "id": "G5q6I8", + "name": "Value", + "fill": "$muted", + "content": "bob@example.com", + "fontFamily": "$typography/font-sans", + "fontSize": 14, + "fontWeight": "normal" + } + ] + } + ] + }, + { + "type": "frame", + "id": "HxrLn", + "name": "r3", + "width": "fill_container", + "children": [ + { + "type": "frame", + "id": "M38CIs", + "name": "Table Cell", + "width": "fill_container", + "fill": "$surface/surface", + "stroke": "$separator/separator", + "strokeWidth": { + "bottom": 1 + }, + "strokeAlignment": "inner", + "strokeLinejoin": "round", + "padding": [ + 12, + 16 + ], + "alignItems": "center", + "children": [ + { + "type": "text", + "id": "C991jA", + "name": "Value", + "fill": "$foreground/foreground", + "content": "Bob Wilson", + "fontFamily": "$typography/font-sans", + "fontSize": 14, + "fontWeight": "normal" + } + ] + }, + { + "type": "frame", + "id": "a0NpyM", + "name": "c10", + "width": "fill_container", + "fill": "$surface/surface", + "stroke": "$separator/separator", + "strokeWidth": { + "bottom": 1 + }, + "strokeAlignment": "inner", + "strokeLinejoin": "round", + "padding": [ + 12, + 16 + ], + "alignItems": "center", + "children": [ + { + "type": "frame", + "id": "Db8Zg", + "name": "Chip/Primary/Accent/SM", + "fill": "$accent/accent", + "cornerRadius": "$radius/2xl", + "gap": 2, + "padding": [ + 2, + 4 + ], + "alignItems": "center", + "children": [ + { + "type": "text", + "id": "w880cY", + "name": "Label", + "fill": "$accent/foreground", + "content": "Active", + "fontFamily": "$typography/font-sans", + "fontSize": 11, + "fontWeight": "500" + } + ] + } + ] + }, + { + "type": "frame", + "id": "UQNms", + "name": "Table Cell", + "width": "fill_container", + "fill": "$surface/surface", + "stroke": "$separator/separator", + "strokeWidth": { + "bottom": 1 + }, + "strokeAlignment": "inner", + "strokeLinejoin": "round", + "padding": [ + 12, + 16 + ], + "alignItems": "center", + "children": [ + { + "type": "text", + "id": "ysdfX", + "name": "Value", + "fill": "$foreground/foreground", + "content": "Manager", + "fontFamily": "$typography/font-sans", + "fontSize": 14, + "fontWeight": "normal" + } + ] + }, + { + "type": "frame", + "id": "tJhWn", + "name": "Table Cell", + "width": "fill_container", + "fill": "$surface/surface", + "stroke": "$separator/separator", + "strokeWidth": { + "bottom": 1 + }, + "strokeAlignment": "inner", + "strokeLinejoin": "round", + "padding": [ + 12, + 16 + ], + "alignItems": "center", + "children": [ + { + "type": "text", + "id": "ccblP", + "name": "Value", + "fill": "$muted", + "content": "bob@example.com", + "fontFamily": "$typography/font-sans", + "fontSize": 14, + "fontWeight": "normal" + } + ] + } + ] + } + ] + }, + { + "type": "frame", + "id": "yDSpI", + "name": "Footer", + "width": "fill_container", + "padding": [ + 10, + 16 + ], + "justifyContent": "space_between", + "alignItems": "center", + "children": [ + { + "type": "text", + "id": "s6M2lg", + "fill": "$muted", + "content": "1-3 of 24 rows", + "fontFamily": "$typography/font-sans", + "fontSize": 13, + "fontWeight": "normal" + }, + { + "type": "frame", + "id": "nAhEr", + "name": "Pagination", + "gap": 4, + "alignItems": "center", + "children": [ + { + "type": "frame", + "id": "YApPW", + "name": "Pagination/Prev", + "opacity": "$disabled-opacity", + "height": 36, + "cornerRadius": "$radius/3xl", + "gap": 6, + "padding": [ + 0, + 10 + ], + "justifyContent": "center", + "alignItems": "center", + "children": [ + { + "type": "text", + "id": "Lf6bb", + "name": "Label", + "fill": "$foreground/foreground", + "content": "Previous", + "fontFamily": "$typography/font-sans", + "fontSize": 14, + "fontWeight": "500" + }, + { + "type": "icon", + "id": "M757x", + "width": 16, + "height": 16, + "icon": "chevron-left", + "library": "lucide", + "fill": "$foreground/foreground" + } + ] + }, + { + "type": "frame", + "id": "cilvy", + "name": "Pagination/Active", + "width": 36, + "height": 36, + "fill": "$default/default", + "cornerRadius": "$radius/3xl", + "justifyContent": "center", + "alignItems": "center", + "children": [ + { + "type": "text", + "id": "Aeu1t", + "name": "Label", + "fill": "$default/foreground", + "content": "1", + "fontFamily": "$typography/font-sans", + "fontSize": 14, + "fontWeight": "500" + } + ] + }, + { + "type": "frame", + "id": "H6K1A7", + "name": "p2", + "width": 36, + "height": 36, + "cornerRadius": "$radius/3xl", + "justifyContent": "center", + "alignItems": "center", + "children": [ + { + "type": "text", + "id": "l90xVu", + "name": "Label", + "fill": "$foreground/foreground", + "content": "2", + "fontFamily": "$typography/font-sans", + "fontSize": 14, + "fontWeight": "500" + } + ] + }, + { + "type": "frame", + "id": "gEjhr", + "name": "p3", + "width": 36, + "height": 36, + "cornerRadius": "$radius/3xl", + "justifyContent": "center", + "alignItems": "center", + "children": [ + { + "type": "text", + "id": "vRoVX", + "name": "Label", + "fill": "$foreground/foreground", + "content": "3", + "fontFamily": "$typography/font-sans", + "fontSize": 14, + "fontWeight": "500" + } + ] + }, + { + "type": "frame", + "id": "oFPgY", + "name": "Pagination/Ellipsis", + "width": 36, + "height": 36, + "justifyContent": "center", + "alignItems": "center", + "children": [ + { + "type": "text", + "id": "d2aGOz", + "fill": "$muted", + "content": "...", + "fontFamily": "$typography/font-sans", + "fontSize": 14, + "fontWeight": "normal" + } + ] + }, + { + "type": "frame", + "id": "c4cth", + "name": "p5", + "width": 36, + "height": 36, + "cornerRadius": "$radius/3xl", + "justifyContent": "center", + "alignItems": "center", + "children": [ + { + "type": "text", + "id": "tp4Ej", + "name": "Label", + "fill": "$foreground/foreground", + "content": "5", + "fontFamily": "$typography/font-sans", + "fontSize": 14, + "fontWeight": "500" + } + ] + }, + { + "type": "frame", + "id": "epfzU", + "name": "Pagination/Next", + "height": 36, + "cornerRadius": "$radius/3xl", + "gap": 6, + "padding": [ + 0, + 10 + ], + "justifyContent": "center", + "alignItems": "center", + "children": [ + { + "type": "text", + "id": "dsMEo", + "name": "Label", + "fill": "$foreground/foreground", + "content": "Next", + "fontFamily": "$typography/font-sans", + "fontSize": 14, + "fontWeight": "500" + }, + { + "type": "icon", + "id": "y65Wb", + "width": 16, + "height": 16, + "icon": "chevron-right", + "library": "lucide", + "fill": "$foreground/foreground" + } + ] + } + ] + } + ] + } + ] + }, + { + "type": "text", + "id": "LZC77", + "x": 1286, + "y": 1870, + "fill": "$foreground/foreground", + "content": "Card", + "fontFamily": "$typography/font-sans", + "fontSize": 20, + "fontWeight": "600" + }, + { + "type": "text", + "id": "a2hGCc", + "x": 1286, + "y": 1910, + "fill": "$muted", + "content": "Card Header", + "fontFamily": "$typography/font-sans", + "fontSize": 11, + "fontWeight": "500" + }, + { + "type": "frame", + "id": "cuaDy", + "x": 1286, + "y": 1930, + "name": "Card Header", + "reusable": true, + "width": "fill_container(320)", + "layout": "vertical", + "children": [ + { + "type": "text", + "id": "C7lTvr", + "name": "Title", + "fill": "$foreground/foreground", + "content": "Card Title", + "lineHeight": 1.7, + "fontFamily": "$typography/font-sans", + "fontSize": 14, + "fontWeight": "500" + }, + { + "type": "text", + "id": "pOvZX", + "name": "Description", + "fill": "$muted", + "content": "Card description text goes here.", + "lineHeight": 1.43, + "fontFamily": "$typography/font-sans", + "fontSize": 14, + "fontWeight": "normal" + } + ] + }, + { + "type": "text", + "id": "ImTcH", + "x": 1286, + "y": 2000, + "fill": "$muted", + "content": "Card Content", + "fontFamily": "$typography/font-sans", + "fontSize": 11, + "fontWeight": "500" + }, + { + "type": "frame", + "id": "gljUG", + "x": 1286, + "y": 2020, + "name": "Card Content", + "reusable": true, + "width": "fill_container(320)", + "layout": "vertical", + "gap": 4, + "children": [ + { + "type": "text", + "id": "xWqNh", + "name": "Content", + "fill": "$muted", + "content": "Card body content area.", + "lineHeight": 1.43, + "fontFamily": "$typography/font-sans", + "fontSize": 14, + "fontWeight": "normal" + } + ] + }, + { + "type": "text", + "id": "DwSPf", + "x": 1286, + "y": 2082, + "fill": "$muted", + "content": "Card Footer", + "fontFamily": "$typography/font-sans", + "fontSize": 11, + "fontWeight": "500" + }, + { + "type": "frame", + "id": "JaZjF", + "x": 1286, + "y": 2102, + "name": "Card Footer", + "reusable": true, + "width": "fill_container(320)", + "gap": 8, + "alignItems": "center", + "children": [ + { + "type": "frame", + "id": "unTWp", + "name": "Button/Tertiary/SM", + "height": 32, + "fill": "$default/default", + "cornerRadius": "$radius/3xl", + "gap": 5, + "padding": [ + 8, + "$spacing/3" + ], + "justifyContent": "center", + "alignItems": "center", + "children": [ + { + "type": "icon", + "id": "Sj9FR", + "x": 12, + "y": 9, + "name": "i7", + "enabled": false, + "width": 14, + "height": 14, + "icon": "plus", + "library": "lucide", + "fill": "$foreground/foreground" + }, + { + "type": "text", + "id": "T8l9Pw", + "name": "Label", + "fill": "$foreground/foreground", + "content": "Cancel", + "fontFamily": "$typography/font-sans", + "fontSize": 13, + "fontWeight": "500" + } + ] + }, + { + "type": "frame", + "id": "IfPP7", + "name": "Button/Primary/SM", + "height": 32, + "fill": "$accent/accent", + "cornerRadius": "$radius/3xl", + "gap": 5, + "padding": [ + 8, + "$spacing/3" + ], + "justifyContent": "center", + "alignItems": "center", + "children": [ + { + "type": "icon", + "id": "KeRNe", + "x": 12, + "y": 9, + "name": "i1", + "enabled": false, + "width": 14, + "height": 14, + "icon": "plus", + "library": "lucide", + "fill": "$accent/foreground" + }, + { + "type": "text", + "id": "c15gg8", + "name": "Label", + "fill": "$accent/foreground", + "content": "Submit", + "fontFamily": "$typography/font-sans", + "fontSize": 13, + "fontWeight": "500" + } + ] + } + ] + }, + { + "type": "text", + "id": "io62V", + "x": 1286, + "y": 2181, + "fill": "$muted", + "content": "Surface", + "fontFamily": "$typography/font-sans", + "fontSize": 11, + "fontWeight": "500" + }, + { + "type": "frame", + "id": "f07b1", + "x": 1286, + "y": 2201, + "name": "Card/Default", + "reusable": true, + "slot": [], + "width": "fit_content(320)", + "height": "fit_content(120)", + "fill": "$surface/surface", + "cornerRadius": "$radius/3xl", + "effect": { + "type": "shadow", + "shadowType": "outer", + "color": "#0000000A", + "offset": { + "x": 0, + "y": 2 + }, + "blur": 4 + }, + "layout": "vertical", + "gap": 12, + "padding": 16 + }, + { + "type": "frame", + "id": "KPiOO", + "x": 1636, + "y": 2201, + "name": "Card/Secondary", + "reusable": true, + "slot": [], + "width": "fit_content(320)", + "height": "fit_content(120)", + "fill": "$surface/secondary", + "cornerRadius": "$radius/3xl", + "effect": { + "type": "shadow", + "shadowType": "outer", + "color": "#0000000A", + "offset": { + "x": 0, + "y": 2 + }, + "blur": 4 + }, + "layout": "vertical", + "gap": 12, + "padding": 16 + }, + { + "type": "frame", + "id": "C1BdJ", + "x": 1286, + "y": 2377, + "name": "Card/Tertiary", + "reusable": true, + "slot": [], + "width": "fit_content(320)", + "height": "fit_content(120)", + "fill": "$surface/tertiary", + "cornerRadius": "$radius/3xl", + "effect": { + "type": "shadow", + "shadowType": "outer", + "color": "#0000000A", + "offset": { + "x": 0, + "y": 2 + }, + "blur": 4 + }, + "layout": "vertical", + "gap": 12, + "padding": 16 + }, + { + "type": "frame", + "id": "i74kt", + "x": 1636, + "y": 2377, + "name": "Card/Transparent", + "reusable": true, + "slot": [], + "width": "fit_content(320)", + "height": "fit_content(120)", + "cornerRadius": "$radius/3xl", + "layout": "vertical", + "gap": 12, + "padding": 16 + }, + { + "type": "text", + "id": "O86Xp", + "x": 1286, + "y": 2331, + "fill": "$muted", + "content": "default", + "fontFamily": "$typography/font-sans", + "fontSize": 10, + "fontWeight": "500" + }, + { + "type": "text", + "id": "M7ZPv", + "x": 1636, + "y": 2331, + "fill": "$muted", + "content": "secondary", + "fontFamily": "$typography/font-sans", + "fontSize": 10, + "fontWeight": "500" + }, + { + "type": "text", + "id": "o0x42", + "x": 1286, + "y": 2507, + "fill": "$muted", + "content": "tertiary", + "fontFamily": "$typography/font-sans", + "fontSize": 10, + "fontWeight": "500" + }, + { + "type": "text", + "id": "VKkcL", + "x": 1636, + "y": 2507, + "fill": "$muted", + "content": "transparent", + "fontFamily": "$typography/font-sans", + "fontSize": 10, + "fontWeight": "500" + }, + { + "type": "text", + "id": "yVWXV", + "x": 1286, + "y": 2672, + "fill": "$muted", + "content": "Examples", + "fontFamily": "$typography/font-sans", + "fontSize": 11, + "fontWeight": "500" + }, + { + "type": "frame", + "id": "VUUuj", + "x": 1286, + "y": 2692, + "name": "ex1", + "width": 320, + "fill": "$surface/surface", + "cornerRadius": "$radius/3xl", + "effect": { + "type": "shadow", + "shadowType": "outer", + "color": "#0000000A", + "offset": { + "x": 0, + "y": 2 + }, + "blur": 4 + }, + "layout": "vertical", + "gap": 12, + "padding": 16, + "children": [ + { + "type": "frame", + "id": "Y3qrx8", + "name": "ex1h", + "width": "fill_container", + "layout": "vertical", + "children": [ + { + "type": "text", + "id": "m2tQQb", + "name": "Title", + "fill": "$foreground/foreground", + "content": "Notifications", + "lineHeight": 1.7, + "fontFamily": "$typography/font-sans", + "fontSize": 14, + "fontWeight": "500" + }, + { + "type": "text", + "id": "HELAN", + "name": "Description", + "fill": "$muted", + "content": "Manage your notification preferences.", + "lineHeight": 1.43, + "fontFamily": "$typography/font-sans", + "fontSize": 14, + "fontWeight": "normal" + } + ] + }, + { + "type": "frame", + "id": "V7WF4", + "name": "ex1c", + "width": "fill_container", + "layout": "vertical", + "gap": 4, + "children": [ + { + "type": "text", + "id": "O9Ifr", + "fill": "$muted", + "textGrowth": "fixed-width", + "width": "fill_container", + "content": "Choose which notifications you'd like to receive and how you'd like to be notified.", + "lineHeight": 1.43, + "fontFamily": "$typography/font-sans", + "fontSize": 14, + "fontWeight": "normal" + } + ] + }, + { + "type": "frame", + "id": "Vb5ba", + "name": "ex1f", + "width": "fill_container", + "gap": 8, + "alignItems": "center", + "children": [ + { + "type": "frame", + "id": "DmKGe", + "name": "Button/Tertiary/SM", + "height": 32, + "fill": "$default/default", + "cornerRadius": "$radius/3xl", + "gap": 5, + "padding": [ + 8, + "$spacing/3" + ], + "justifyContent": "center", + "alignItems": "center", + "children": [ + { + "type": "icon", + "id": "n4DO1", + "x": 12, + "y": 9, + "name": "i7", + "enabled": false, + "width": 14, + "height": 14, + "icon": "plus", + "library": "lucide", + "fill": "$foreground/foreground" + }, + { + "type": "text", + "id": "e0T8gJ", + "name": "Label", + "fill": "$foreground/foreground", + "content": "Cancel", + "fontFamily": "$typography/font-sans", + "fontSize": 13, + "fontWeight": "500" + } + ] + }, + { + "type": "frame", + "id": "sl895", + "name": "Button/Primary/SM", + "height": 32, + "fill": "$accent/accent", + "cornerRadius": "$radius/3xl", + "gap": 5, + "padding": [ + 8, + "$spacing/3" + ], + "justifyContent": "center", + "alignItems": "center", + "children": [ + { + "type": "icon", + "id": "F6EkT", + "x": 12, + "y": 9, + "name": "i1", + "enabled": false, + "width": 14, + "height": 14, + "icon": "plus", + "library": "lucide", + "fill": "$accent/foreground" + }, + { + "type": "text", + "id": "V9jeCP", + "name": "Label", + "fill": "$accent/foreground", + "content": "Submit", + "fontFamily": "$typography/font-sans", + "fontSize": 13, + "fontWeight": "500" + } + ] + } + ] + } + ] + }, + { + "type": "frame", + "id": "OaBdm", + "x": 1636, + "y": 2692, + "name": "ex2", + "width": 320, + "fill": "$surface/secondary", + "cornerRadius": "$radius/3xl", + "effect": { + "type": "shadow", + "shadowType": "outer", + "color": "#0000000A", + "offset": { + "x": 0, + "y": 2 + }, + "blur": 4 + }, + "layout": "vertical", + "gap": 12, + "padding": 16, + "children": [ + { + "type": "frame", + "id": "QZUm4", + "name": "ex2h", + "width": "fill_container", + "layout": "vertical", + "children": [ + { + "type": "text", + "id": "FlUoc", + "name": "Title", + "fill": "$foreground/foreground", + "content": "Team Members", + "lineHeight": 1.7, + "fontFamily": "$typography/font-sans", + "fontSize": 14, + "fontWeight": "500" + }, + { + "type": "text", + "id": "AZoB2", + "name": "Description", + "fill": "$muted", + "content": "Invite and manage your team.", + "lineHeight": 1.43, + "fontFamily": "$typography/font-sans", + "fontSize": 14, + "fontWeight": "normal" + } + ] + }, + { + "type": "frame", + "id": "QL7Vy", + "name": "ex2f", + "width": "fill_container", + "gap": 8, + "alignItems": "center", + "children": [ + { + "type": "frame", + "id": "THHAj", + "name": "Button/Tertiary/SM", + "height": 32, + "fill": "$default/default", + "cornerRadius": "$radius/3xl", + "gap": 5, + "padding": [ + 8, + "$spacing/3" + ], + "justifyContent": "center", + "alignItems": "center", + "children": [ + { + "type": "icon", + "id": "CMeYf", + "x": 12, + "y": 9, + "name": "i7", + "enabled": false, + "width": 14, + "height": 14, + "icon": "plus", + "library": "lucide", + "fill": "$foreground/foreground" + }, + { + "type": "text", + "id": "ofWGs", + "name": "Label", + "fill": "$foreground/foreground", + "content": "Cancel", + "fontFamily": "$typography/font-sans", + "fontSize": 13, + "fontWeight": "500" + } + ] + }, + { + "type": "frame", + "id": "l6DG81", + "name": "Button/Primary/SM", + "height": 32, + "fill": "$accent/accent", + "cornerRadius": "$radius/3xl", + "gap": 5, + "padding": [ + 8, + "$spacing/3" + ], + "justifyContent": "center", + "alignItems": "center", + "children": [ + { + "type": "icon", + "id": "FwKLE", + "x": 12, + "y": 9, + "name": "i1", + "enabled": false, + "width": 14, + "height": 14, + "icon": "plus", + "library": "lucide", + "fill": "$accent/foreground" + }, + { + "type": "text", + "id": "eHnKc", + "name": "Label", + "fill": "$accent/foreground", + "content": "Submit", + "fontFamily": "$typography/font-sans", + "fontSize": 13, + "fontWeight": "500" + } + ] + } + ] + } + ] + }, + { + "type": "text", + "id": "G00gn", + "x": 2367, + "y": 281, + "fill": "$muted", + "content": "TextField", + "fontFamily": "$typography/font-sans", + "fontSize": 10, + "fontWeight": "500" + }, + { + "type": "frame", + "id": "sOPOt", + "x": 2689, + "y": 301, + "name": "Input/Secondary", + "reusable": true, + "width": 280, + "layout": "vertical", + "gap": 4, + "children": [ + { + "type": "text", + "id": "QxU0e", + "name": "Label", + "fill": "$foreground/foreground", + "content": "Email", + "fontFamily": "$typography/font-sans", + "fontSize": 14, + "fontWeight": "500" + }, + { + "type": "frame", + "id": "VmxQP", + "name": "Input", + "width": "fill_container", + "height": 40, + "fill": "$default/default", + "cornerRadius": "$radius/xl", + "padding": [ + 8, + 12 + ], + "alignItems": "center", + "children": [ + { + "type": "text", + "id": "lnTss", + "name": "Placeholder", + "fill": "$field/placeholder", + "content": "you@example.com", + "fontFamily": "$typography/font-sans", + "fontSize": 14, + "fontWeight": "normal" + } + ] + }, + { + "type": "frame", + "id": "s3qeW", + "name": "Description Wrap", + "padding": [ + 0, + 4 + ], + "children": [ + { + "type": "text", + "id": "ID9dV", + "name": "Description", + "fill": "$muted", + "content": "We'll never share your email.", + "fontFamily": "$typography/font-sans", + "fontSize": 12, + "fontWeight": "normal" + } + ] + } + ] + }, + { + "type": "text", + "id": "oSeYc", + "x": 2367, + "y": 471, + "fill": "$muted", + "content": "Textarea", + "fontFamily": "$typography/font-sans", + "fontSize": 11, + "fontWeight": "500" + }, + { + "type": "frame", + "id": "nHX34", + "x": 2367, + "y": 491, + "name": "Textarea/Primary", + "reusable": true, + "width": 280, + "layout": "vertical", + "gap": 4, + "children": [ + { + "type": "text", + "id": "W0EGTF", + "name": "Label", + "fill": "$foreground/foreground", + "content": "Message", + "fontFamily": "$typography/font-sans", + "fontSize": 14, + "fontWeight": "500" + }, + { + "type": "frame", + "id": "NlpkG", + "name": "Textarea", + "width": "fill_container", + "height": 80, + "fill": "$field/background", + "cornerRadius": "$radius/xl", + "effect": { + "type": "shadow", + "shadowType": "outer", + "color": "#0000000F", + "offset": { + "x": 0, + "y": 1 + }, + "blur": 2 + }, + "layout": "vertical", + "padding": [ + 8, + 12 + ], + "children": [ + { + "type": "text", + "id": "xREXa", + "name": "Placeholder", + "fill": "$field/placeholder", + "textGrowth": "fixed-width", + "width": "fill_container", + "content": "Type your message...", + "fontFamily": "$typography/font-sans", + "fontSize": 14, + "fontWeight": "normal" + } + ] + }, + { + "type": "frame", + "id": "T6jUJ", + "name": "taDescW", + "padding": [ + 0, + 4 + ], + "children": [ + { + "type": "text", + "id": "w1ITdR", + "fill": "$muted", + "content": "Max 500 characters.", + "fontFamily": "$typography/font-sans", + "fontSize": 12, + "fontWeight": "normal" + } + ] + } + ] + }, + { + "type": "frame", + "id": "B6xJL", + "x": 2689, + "y": 491, + "name": "Textarea/Secondary", + "reusable": true, + "width": 280, + "layout": "vertical", + "gap": 4, + "children": [ + { + "type": "text", + "id": "FnAB6", + "name": "Label", + "fill": "$foreground/foreground", + "content": "Message", + "fontFamily": "$typography/font-sans", + "fontSize": 14, + "fontWeight": "500" + }, + { + "type": "frame", + "id": "E80uz", + "name": "Textarea", + "width": "fill_container", + "height": 80, + "fill": "$default/default", + "cornerRadius": "$radius/xl", + "layout": "vertical", + "padding": [ + 8, + 12 + ], + "children": [ + { + "type": "text", + "id": "CSZ65", + "name": "Placeholder", + "fill": "$field/placeholder", + "textGrowth": "fixed-width", + "width": "fill_container", + "content": "Type your message...", + "fontFamily": "$typography/font-sans", + "fontSize": 14, + "fontWeight": "normal" + } + ] + }, + { + "type": "frame", + "id": "V2jnNR", + "name": "taDescWS", + "padding": [ + 0, + 4 + ], + "children": [ + { + "type": "text", + "id": "AZYvJ", + "fill": "$muted", + "content": "Max 500 characters.", + "fontFamily": "$typography/font-sans", + "fontSize": 12, + "fontWeight": "normal" + } + ] + } + ] + }, + { + "type": "text", + "id": "N7ktcR", + "x": 2367, + "y": 681, + "fill": "$muted", + "content": "NumberField", + "fontFamily": "$typography/font-sans", + "fontSize": 11, + "fontWeight": "500" + }, + { + "type": "frame", + "id": "k5bah", + "x": 2367, + "y": 701, + "name": "NumberField/Primary", + "reusable": true, + "width": 280, + "layout": "vertical", + "gap": 4, + "children": [ + { + "type": "text", + "id": "HqNJC", + "name": "Label", + "fill": "$foreground/foreground", + "content": "Quantity", + "fontFamily": "$typography/font-sans", + "fontSize": 14, + "fontWeight": "500" + }, + { + "type": "frame", + "id": "olYiJ", + "name": "Group", + "clip": true, + "width": "fill_container", + "height": 36, + "fill": "$field/background", + "cornerRadius": "$radius/xl", + "effect": { + "type": "shadow", + "shadowType": "outer", + "color": "#0000000F", + "offset": { + "x": 0, + "y": 1 + }, + "blur": 2 + }, + "alignItems": "center", + "children": [ + { + "type": "frame", + "id": "QpBEM", + "name": "Decrement", + "width": 40, + "height": "fill_container", + "stroke": "#00000008", + "strokeWidth": { + "right": 1 + }, + "strokeAlignment": "inner", + "strokeLinejoin": "round", + "justifyContent": "center", + "alignItems": "center", + "children": [ + { + "type": "icon", + "id": "gWdzT", + "width": 16, + "height": 16, + "icon": "minus", + "library": "lucide", + "fill": "$field/foreground" + } + ] + }, + { + "type": "frame", + "id": "YNqUC", + "name": "Input", + "width": "fill_container", + "height": "fill_container", + "padding": [ + 0, + 12 + ], + "alignItems": "center", + "children": [ + { + "type": "text", + "id": "wuE52", + "fill": "$field/foreground", + "content": "1", + "fontFamily": "$typography/font-sans", + "fontSize": 14, + "fontWeight": "normal" + } + ] + }, + { + "type": "frame", + "id": "Fry1U", + "name": "Increment", + "width": 40, + "height": "fill_container", + "stroke": "#00000008", + "strokeWidth": { + "left": 1 + }, + "strokeAlignment": "inner", + "strokeLinejoin": "round", + "justifyContent": "center", + "alignItems": "center", + "children": [ + { + "type": "icon", + "id": "qAo56", + "width": 16, + "height": 16, + "icon": "plus", + "library": "lucide", + "fill": "$field/foreground" + } + ] + } + ] + } + ] + }, + { + "type": "frame", + "id": "athBI", + "x": 2689, + "y": 701, + "name": "NumberField/Secondary", + "reusable": true, + "width": 280, + "layout": "vertical", + "gap": 4, + "children": [ + { + "type": "text", + "id": "ebRs0", + "name": "Label", + "fill": "$foreground/foreground", + "content": "Quantity", + "fontFamily": "$typography/font-sans", + "fontSize": 14, + "fontWeight": "500" + }, + { + "type": "frame", + "id": "S2oLc", + "name": "Group", + "clip": true, + "width": "fill_container", + "height": 36, + "fill": "$default/default", + "cornerRadius": "$radius/xl", + "alignItems": "center", + "children": [ + { + "type": "frame", + "id": "wrJRv", + "name": "Decrement", + "width": 40, + "height": "fill_container", + "stroke": "#00000008", + "strokeWidth": { + "right": 1 + }, + "strokeAlignment": "inner", + "strokeLinejoin": "round", + "justifyContent": "center", + "alignItems": "center", + "children": [ + { + "type": "icon", + "id": "J8BNTN", + "width": 16, + "height": 16, + "icon": "minus", + "library": "lucide", + "fill": "$field/foreground" + } + ] + }, + { + "type": "frame", + "id": "dvLDX", + "name": "Input", + "width": "fill_container", + "height": "fill_container", + "padding": [ + 0, + 12 + ], + "alignItems": "center", + "children": [ + { + "type": "text", + "id": "KxEJQ", + "fill": "$field/foreground", + "content": "1", + "fontFamily": "$typography/font-sans", + "fontSize": 14, + "fontWeight": "normal" + } + ] + }, + { + "type": "frame", + "id": "lWiZw", + "name": "Increment", + "width": 40, + "height": "fill_container", + "stroke": "#00000008", + "strokeWidth": { + "left": 1 + }, + "strokeAlignment": "inner", + "strokeLinejoin": "round", + "justifyContent": "center", + "alignItems": "center", + "children": [ + { + "type": "icon", + "id": "flyjH", + "width": 16, + "height": 16, + "icon": "plus", + "library": "lucide", + "fill": "$field/foreground" + } + ] + } + ] + } + ] + }, + { + "type": "text", + "id": "YaxBV", + "x": 2367, + "y": 841, + "fill": "$muted", + "content": "SearchField", + "fontFamily": "$typography/font-sans", + "fontSize": 11, + "fontWeight": "500" + }, + { + "type": "frame", + "id": "UyyZd", + "x": 2367, + "y": 861, + "name": "SearchField/Primary", + "reusable": true, + "width": 280, + "layout": "vertical", + "gap": 4, + "children": [ + { + "type": "text", + "id": "zLfw5", + "name": "Label", + "fill": "$foreground/foreground", + "content": "Search", + "fontFamily": "$typography/font-sans", + "fontSize": 14, + "fontWeight": "500" + }, + { + "type": "frame", + "id": "O0dxx", + "name": "Group", + "width": "fill_container", + "height": 36, + "fill": "$field/background", + "cornerRadius": "$radius/xl", + "effect": { + "type": "shadow", + "shadowType": "outer", + "color": "#0000000F", + "offset": { + "x": 0, + "y": 1 + }, + "blur": 2 + }, + "padding": [ + 0, + "$spacing/3" + ], + "alignItems": "center", + "children": [ + { + "type": "frame", + "id": "YhC10", + "name": "Frame 2", + "width": "fill_container", + "gap": 6, + "children": [ + { + "type": "icon", + "id": "dqNN9", + "width": 16, + "height": 16, + "icon": "search", + "library": "lucide", + "fill": "$field/placeholder" + }, + { + "type": "text", + "id": "KlAvj", + "name": "Placeholder", + "fill": "$field/placeholder", + "content": "Search...", + "fontFamily": "$typography/font-sans", + "fontSize": 14, + "fontWeight": "normal" + } + ] + }, + { + "type": "frame", + "id": "lbfy4", + "name": "sfClear", + "width": 20, + "height": 20, + "fill": "$default/default", + "cornerRadius": "$radius/xl", + "justifyContent": "center", + "alignItems": "center", + "children": [ + { + "type": "icon", + "id": "SD55f", + "width": 16, + "height": 16, + "icon": "x", + "library": "lucide", + "fill": "$muted" + } + ] + } + ] + } + ] + }, + { + "type": "frame", + "id": "YEEfK", + "x": 2689, + "y": 861, + "name": "SearchField/Secondary", + "reusable": true, + "width": 280, + "layout": "vertical", + "gap": 4, + "children": [ + { + "type": "text", + "id": "h3S4q", + "name": "Label", + "fill": "$foreground/foreground", + "content": "Search", + "fontFamily": "$typography/font-sans", + "fontSize": 14, + "fontWeight": "500" + }, + { + "type": "frame", + "id": "ZWp0D", + "name": "Group", + "width": "fill_container", + "height": 36, + "fill": "$default/default", + "cornerRadius": "$radius/xl", + "padding": [ + 0, + "$spacing/3" + ], + "alignItems": "center", + "children": [ + { + "type": "frame", + "id": "AHJCi", + "name": "Frame 1", + "width": "fill_container", + "gap": 6, + "children": [ + { + "type": "icon", + "id": "iRL5F", + "width": 16, + "height": 16, + "icon": "search", + "library": "lucide", + "fill": "$field/placeholder" + }, + { + "type": "text", + "id": "N4BHZ", + "name": "Placeholder", + "fill": "$field/placeholder", + "content": "Search...", + "fontFamily": "$typography/font-sans", + "fontSize": 14, + "fontWeight": "normal" + } + ] + }, + { + "type": "frame", + "id": "i3D33", + "name": "sfClearS", + "width": 20, + "height": 20, + "fill": "$default/default", + "cornerRadius": "$radius/xl", + "justifyContent": "center", + "alignItems": "center", + "children": [ + { + "type": "icon", + "id": "CYEKj", + "width": 16, + "height": 16, + "icon": "x", + "library": "lucide", + "fill": "$muted" + } + ] + } + ] + } + ] + }, + { + "type": "text", + "id": "K8bgn", + "x": 2367, + "y": 1001, + "fill": "$muted", + "content": "Select", + "fontFamily": "$typography/font-sans", + "fontSize": 11, + "fontWeight": "500" + }, + { + "type": "frame", + "id": "fZUcK", + "x": 2367, + "y": 1021, + "name": "Select/Primary", + "reusable": true, + "width": 280, + "layout": "vertical", + "gap": 4, + "children": [ + { + "type": "text", + "id": "G1Dp59", + "name": "Label", + "fill": "$foreground/foreground", + "content": "Country", + "fontFamily": "$typography/font-sans", + "fontSize": 14, + "fontWeight": "500" + }, + { + "type": "frame", + "id": "qTJGS", + "name": "Trigger", + "width": "fill_container", + "height": 36, + "fill": "$field/background", + "cornerRadius": "$radius/xl", + "effect": { + "type": "shadow", + "shadowType": "outer", + "color": "#0000000F", + "offset": { + "x": 0, + "y": 1 + }, + "blur": 2 + }, + "padding": [ + 8, + 12 + ], + "alignItems": "center", + "children": [ + { + "type": "text", + "id": "m1h2Yp", + "name": "Value", + "fill": "$field/placeholder", + "content": "Select option...", + "fontFamily": "$typography/font-sans", + "fontSize": 14, + "fontWeight": "normal" + }, + { + "type": "icon", + "id": "zv2H4", + "layoutPosition": "absolute", + "x": 252, + "y": 10, + "name": "selChev", + "width": 16, + "height": 16, + "icon": "chevron-down", + "library": "lucide", + "fill": "$field/placeholder" + } + ] + }, + { + "type": "frame", + "id": "tep5q", + "name": "selDescW", + "padding": [ + 0, + 4 + ], + "children": [ + { + "type": "text", + "id": "o1NWs", + "fill": "$muted", + "content": "Choose your country.", + "fontFamily": "$typography/font-sans", + "fontSize": 12, + "fontWeight": "normal" + } + ] + } + ] + }, + { + "type": "frame", + "id": "G4Lu2i", + "x": 2689, + "y": 1021, + "name": "Select/Secondary", + "reusable": true, + "width": 280, + "layout": "vertical", + "gap": 4, + "children": [ + { + "type": "text", + "id": "TV8uv", + "name": "Label", + "fill": "$foreground/foreground", + "content": "Country", + "fontFamily": "$typography/font-sans", + "fontSize": 14, + "fontWeight": "500" + }, + { + "type": "frame", + "id": "I8Ilp", + "name": "Trigger", + "width": "fill_container", + "height": 36, + "fill": "$default/default", + "cornerRadius": "$radius/xl", + "padding": [ + 8, + 12 + ], + "alignItems": "center", + "children": [ + { + "type": "text", + "id": "dzb7j", + "name": "Value", + "fill": "$field/placeholder", + "content": "Select option...", + "fontFamily": "$typography/font-sans", + "fontSize": 14, + "fontWeight": "normal" + }, + { + "type": "icon", + "id": "J3nIW", + "layoutPosition": "absolute", + "x": 252, + "y": 10, + "name": "selChevS", + "width": 16, + "height": 16, + "icon": "chevron-down", + "library": "lucide", + "fill": "$field/placeholder" + } + ] + }, + { + "type": "frame", + "id": "fbx9a", + "name": "selDescWS", + "padding": [ + 0, + 4 + ], + "children": [ + { + "type": "text", + "id": "U1Ohev", + "fill": "$muted", + "content": "Choose your country.", + "fontFamily": "$typography/font-sans", + "fontSize": 12, + "fontWeight": "normal" + } + ] + } + ] + }, + { + "type": "text", + "id": "FDysg", + "x": 2367, + "y": 1171, + "fill": "$muted", + "content": "InputOTP", + "fontFamily": "$typography/font-sans", + "fontSize": 11, + "fontWeight": "500" + }, + { + "type": "frame", + "id": "t97Kg", + "x": 2367, + "y": 1191, + "name": "InputOTP/Primary", + "reusable": true, + "width": 280, + "layout": "vertical", + "gap": 4, + "children": [ + { + "type": "text", + "id": "uWMap", + "name": "Label", + "fill": "$foreground/foreground", + "content": "Verification Code", + "fontFamily": "$typography/font-sans", + "fontSize": 14, + "fontWeight": "500" + }, + { + "type": "frame", + "id": "AdACq", + "name": "Group", + "gap": 8, + "alignItems": "center", + "children": [ + { + "type": "frame", + "id": "y80DXS", + "name": "Slot", + "width": 38, + "height": 40, + "fill": "$field/background", + "cornerRadius": "$radius/xl", + "effect": { + "type": "shadow", + "shadowType": "outer", + "color": "#0000000F", + "offset": { + "x": 0, + "y": 1 + }, + "blur": 2 + }, + "justifyContent": "center", + "alignItems": "center", + "children": [ + { + "type": "text", + "id": "uC1Yc", + "fill": "$field/foreground", + "content": "4", + "fontFamily": "$typography/font-sans", + "fontSize": 18, + "fontWeight": "600" + } + ] + }, + { + "type": "frame", + "id": "pGSHo", + "name": "Slot", + "width": 38, + "height": 40, + "fill": "$field/background", + "cornerRadius": "$radius/xl", + "effect": { + "type": "shadow", + "shadowType": "outer", + "color": "#0000000F", + "offset": { + "x": 0, + "y": 1 + }, + "blur": 2 + }, + "justifyContent": "center", + "alignItems": "center", + "children": [ + { + "type": "text", + "id": "J91yb", + "fill": "$field/foreground", + "content": "2", + "fontFamily": "$typography/font-sans", + "fontSize": 18, + "fontWeight": "600" + } + ] + }, + { + "type": "frame", + "id": "m9914F", + "name": "Slot Empty", + "width": 38, + "height": 40, + "fill": "$field/background", + "cornerRadius": "$radius/xl", + "effect": { + "type": "shadow", + "shadowType": "outer", + "color": "#0000000F", + "offset": { + "x": 0, + "y": 1 + }, + "blur": 2 + }, + "justifyContent": "center", + "alignItems": "center" + }, + { + "type": "frame", + "id": "ngMPT", + "name": "Separator", + "width": 6, + "height": 2, + "fill": "$separator/separator", + "cornerRadius": 2 + }, + { + "type": "frame", + "id": "RxOmO", + "name": "Slot Empty", + "width": 38, + "height": 40, + "fill": "$field/background", + "cornerRadius": "$radius/xl", + "effect": { + "type": "shadow", + "shadowType": "outer", + "color": "#0000000F", + "offset": { + "x": 0, + "y": 1 + }, + "blur": 2 + }, + "justifyContent": "center", + "alignItems": "center" + }, + { + "type": "frame", + "id": "rq5HA", + "name": "Slot Empty", + "width": 38, + "height": 40, + "fill": "$field/background", + "cornerRadius": "$radius/xl", + "effect": { + "type": "shadow", + "shadowType": "outer", + "color": "#0000000F", + "offset": { + "x": 0, + "y": 1 + }, + "blur": 2 + }, + "justifyContent": "center", + "alignItems": "center" + } + ] + } + ] + }, + { + "type": "frame", + "id": "b2KfkQ", + "x": 2689, + "y": 1191, + "name": "InputOTP/Secondary", + "reusable": true, + "width": 280, + "layout": "vertical", + "gap": 4, + "children": [ + { + "type": "text", + "id": "bIUkU", + "name": "Label", + "fill": "$foreground/foreground", + "content": "Verification Code", + "fontFamily": "$typography/font-sans", + "fontSize": 14, + "fontWeight": "500" + }, + { + "type": "frame", + "id": "r4rw4", + "name": "Group", + "gap": 8, + "alignItems": "center", + "children": [ + { + "type": "frame", + "id": "o3YUZ", + "name": "Slot", + "width": 38, + "height": 40, + "fill": "$default/default", + "cornerRadius": "$radius/xl", + "justifyContent": "center", + "alignItems": "center" + }, + { + "type": "frame", + "id": "LvQ9Q", + "name": "Slot", + "width": 38, + "height": 40, + "fill": "$default/default", + "cornerRadius": "$radius/xl", + "justifyContent": "center", + "alignItems": "center" + }, + { + "type": "frame", + "id": "d4F73", + "name": "Slot", + "width": 38, + "height": 40, + "fill": "$default/default", + "cornerRadius": "$radius/xl", + "justifyContent": "center", + "alignItems": "center" + }, + { + "type": "frame", + "id": "BcCW4", + "name": "Separator", + "width": 6, + "height": 2, + "fill": "$separator/separator", + "cornerRadius": 2 + }, + { + "type": "frame", + "id": "ZAGyr", + "name": "Slot", + "width": 38, + "height": 40, + "fill": "$default/default", + "cornerRadius": "$radius/xl", + "justifyContent": "center", + "alignItems": "center" + }, + { + "type": "frame", + "id": "BMaxJ", + "name": "Slot", + "width": 38, + "height": 40, + "fill": "$default/default", + "cornerRadius": "$radius/xl", + "justifyContent": "center", + "alignItems": "center" + } + ] + } + ] + }, + { + "type": "text", + "id": "YujKT", + "x": 2367, + "y": 1341, + "fill": "$muted", + "content": "Slider", + "fontFamily": "$typography/font-sans", + "fontSize": 11, + "fontWeight": "500" + }, + { + "type": "frame", + "id": "Kzh0d", + "x": 2367, + "y": 1361, + "name": "Slider", + "reusable": true, + "width": 280, + "layout": "vertical", + "gap": 4, + "children": [ + { + "type": "frame", + "id": "H9LiKi", + "name": "Header", + "width": "fill_container", + "justifyContent": "space_between", + "alignItems": "center", + "children": [ + { + "type": "text", + "id": "Rt4fZ", + "name": "Label", + "fill": "$foreground/foreground", + "content": "Volume", + "fontFamily": "$typography/font-sans", + "fontSize": 14, + "fontWeight": "500" + }, + { + "type": "text", + "id": "bsPxy", + "name": "Output", + "fill": "$foreground/foreground", + "content": "65%", + "fontFamily": "$typography/font-sans", + "fontSize": 14, + "fontWeight": "500" + } + ] + }, + { + "type": "frame", + "id": "pNd8H", + "name": "Track", + "rotation": -0.07866774988585055, + "width": "fill_container", + "height": 20, + "fill": "$default/default", + "cornerRadius": 9999, + "layout": "none", + "children": [ + { + "type": "frame", + "id": "ldAa6", + "x": 0, + "y": 0, + "name": "Fill", + "width": 170, + "height": 20, + "fill": "$accent/accent", + "cornerRadius": 9999 + }, + { + "type": "frame", + "id": "I4LyM", + "x": 143, + "y": 0, + "name": "Thumb", + "width": 26, + "height": 20, + "cornerRadius": 9999, + "layout": "none", + "children": [ + { + "type": "frame", + "id": "cNYjk", + "x": 1, + "y": 2, + "name": "Thumb Inner", + "width": 24, + "height": 16, + "fill": "$accent/foreground", + "cornerRadius": 9999, + "effect": { + "type": "shadow", + "shadowType": "outer", + "color": "#0000000F", + "offset": { + "x": 0, + "y": 2 + }, + "blur": 4 + } + } + ] + } + ] + } + ] + }, + { + "type": "text", + "id": "YtrvV", + "x": 2367, + "y": 1501, + "fill": "$muted", + "content": "Radio", + "fontFamily": "$typography/font-sans", + "fontSize": 11, + "fontWeight": "500" + }, + { + "type": "frame", + "id": "DGiaR", + "x": 2367, + "y": 1521, + "name": "Radio/Selected", + "reusable": true, + "gap": 12, + "alignItems": "center", + "children": [ + { + "type": "frame", + "id": "G1WlAg", + "name": "Control", + "width": 16, + "height": 16, + "fill": "$accent/accent", + "cornerRadius": 9999, + "justifyContent": "center", + "alignItems": "center", + "children": [ + { + "type": "ellipse", + "id": "VkGwh", + "name": "Dot", + "fill": "$accent/foreground", + "width": 6, + "height": 6 + } + ] + }, + { + "type": "text", + "id": "q4zhl", + "name": "Label", + "fill": "$foreground/foreground", + "content": "Option A", + "fontFamily": "$typography/font-sans", + "fontSize": 14, + "fontWeight": "normal" + } + ] + }, + { + "type": "frame", + "id": "GEjii", + "x": 2489, + "y": 1521, + "name": "Radio/Unselected", + "reusable": true, + "gap": 12, + "alignItems": "center", + "children": [ + { + "type": "frame", + "id": "u68zT9", + "name": "Control", + "width": 16, + "height": 16, + "fill": "$field/background", + "cornerRadius": 9999, + "stroke": "$border", + "strokeWidth": 1, + "strokeAlignment": "inner", + "justifyContent": "center", + "alignItems": "center" + }, + { + "type": "text", + "id": "g23Yp", + "name": "Label", + "fill": "$foreground/foreground", + "content": "Option B", + "fontFamily": "$typography/font-sans", + "fontSize": 14, + "fontWeight": "normal" + } + ] + }, + { + "type": "text", + "id": "e8U8Fp", + "x": 2367, + "y": 1621, + "fill": "$muted", + "content": "Switch", + "fontFamily": "$typography/font-sans", + "fontSize": 11, + "fontWeight": "500" + }, + { + "type": "frame", + "id": "jjbaV", + "x": 2367, + "y": 1641, + "name": "Switch/Off", + "reusable": true, + "gap": 12, + "alignItems": "center", + "children": [ + { + "type": "frame", + "id": "M7SaD", + "name": "Track", + "width": 40, + "height": 20, + "fill": "$default/default", + "cornerRadius": 9999, + "layout": "none", + "children": [ + { + "type": "frame", + "id": "migx7", + "x": 2, + "y": 2, + "name": "Thumb", + "width": 18, + "height": 16, + "fill": "#FFFFFF", + "cornerRadius": 9999, + "effect": { + "type": "shadow", + "shadowType": "outer", + "color": "#0000001A", + "offset": { + "x": 0, + "y": 1 + }, + "blur": 3 + } + } + ] + }, + { + "type": "text", + "id": "ekALt", + "name": "Label", + "fill": "$foreground/foreground", + "content": "Notifications", + "fontFamily": "$typography/font-sans", + "fontSize": 14, + "fontWeight": "normal" + } + ] + }, + { + "type": "frame", + "id": "o4D9Z9", + "x": 2589, + "y": 1641, + "name": "Switch/On", + "reusable": true, + "gap": 12, + "alignItems": "center", + "children": [ + { + "type": "frame", + "id": "xlakM", + "name": "Track", + "width": 40, + "height": 20, + "fill": "$accent/accent", + "cornerRadius": 9999, + "layout": "none", + "children": [ + { + "type": "frame", + "id": "A2ySG", + "x": 20, + "y": 2, + "name": "Thumb", + "width": 18, + "height": 16, + "fill": "$accent/foreground", + "cornerRadius": 9999, + "effect": { + "type": "shadow", + "shadowType": "outer", + "color": "#0000001A", + "offset": { + "x": 0, + "y": 1 + }, + "blur": 3 + } + } + ] + }, + { + "type": "text", + "id": "mIFLm", + "name": "Label", + "fill": "$foreground/foreground", + "content": "Notifications", + "fontFamily": "$typography/font-sans", + "fontSize": 14, + "fontWeight": "normal" + } + ] + }, + { + "type": "text", + "id": "QJ4F2", + "x": 2367, + "y": 1716, + "fill": "$muted", + "content": "sm", + "fontFamily": "$typography/font-sans", + "fontSize": 10, + "fontWeight": "500" + }, + { + "type": "frame", + "id": "C53ktI", + "x": 2389, + "y": 1714, + "name": "Switch/SM", + "reusable": true, + "width": 32, + "height": 16, + "fill": "$accent/accent", + "cornerRadius": 9999, + "layout": "none", + "children": [ + { + "type": "frame", + "id": "FwB3b", + "x": 16, + "y": 2, + "name": "Thumb", + "width": 14, + "height": 12, + "fill": "$accent/foreground", + "cornerRadius": 9999, + "effect": { + "type": "shadow", + "shadowType": "outer", + "color": "#0000001A", + "offset": { + "x": 0, + "y": 1 + }, + "blur": 2 + } + } + ] + }, + { + "type": "text", + "id": "Fn8BZ", + "x": 2439, + "y": 1716, + "fill": "$muted", + "content": "md", + "fontFamily": "$typography/font-sans", + "fontSize": 10, + "fontWeight": "500" + }, + { + "type": "frame", + "id": "FnKwM", + "x": 2461, + "y": 1712, + "name": "Switch/MD", + "reusable": true, + "width": 40, + "height": 20, + "fill": "$accent/accent", + "cornerRadius": 9999, + "layout": "none", + "children": [ + { + "type": "frame", + "id": "gHOB6", + "x": 20, + "y": 2, + "name": "Thumb", + "width": 18, + "height": 16, + "fill": "$accent/foreground", + "cornerRadius": 9999, + "effect": { + "type": "shadow", + "shadowType": "outer", + "color": "#0000001A", + "offset": { + "x": 0, + "y": 1 + }, + "blur": 3 + } + } + ] + }, + { + "type": "text", + "id": "iC76a", + "x": 2519, + "y": 1716, + "fill": "$muted", + "content": "lg", + "fontFamily": "$typography/font-sans", + "fontSize": 10, + "fontWeight": "500" + }, + { + "type": "frame", + "id": "A2DlZq", + "x": 2541, + "y": 1710, + "name": "Switch/LG", + "reusable": true, + "width": 48, + "height": 24, + "fill": "$accent/accent", + "cornerRadius": 9999, + "layout": "none", + "children": [ + { + "type": "frame", + "id": "OqISq", + "x": 24, + "y": 2, + "name": "Thumb", + "width": 22, + "height": 20, + "fill": "$accent/foreground", + "cornerRadius": 9999, + "effect": { + "type": "shadow", + "shadowType": "outer", + "color": "#0000001A", + "offset": { + "x": 0, + "y": 1 + }, + "blur": 3 + } + } + ] + }, + { + "type": "frame", + "id": "Tu3H4", + "x": 2367, + "y": 301, + "name": "Input/Primary", + "reusable": true, + "width": 280, + "layout": "vertical", + "gap": 4, + "children": [ + { + "type": "text", + "id": "I4m7NO", + "name": "Label", + "fill": "$foreground/foreground", + "content": "Email", + "fontFamily": "$typography/font-sans", + "fontSize": 14, + "fontWeight": "500" + }, + { + "type": "frame", + "id": "q93sBX", + "name": "Input", + "width": "fill_container", + "height": 40, + "fill": "$field/background", + "cornerRadius": "$radius/xl", + "effect": { + "type": "shadow", + "shadowType": "outer", + "color": "#0000000F", + "offset": { + "x": 0, + "y": 1 + }, + "blur": 2 + }, + "padding": [ + 8, + 12 + ], + "alignItems": "center", + "children": [ + { + "type": "text", + "id": "DJsYb", + "name": "Placeholder", + "fill": "$field/placeholder", + "content": "you@example.com", + "fontFamily": "$typography/font-sans", + "fontSize": 14, + "fontWeight": "normal" + } + ] + }, + { + "type": "frame", + "id": "Oiuc9", + "name": "Description Wrap", + "padding": [ + 0, + 4 + ], + "children": [ + { + "type": "text", + "id": "PvRXY", + "name": "Description", + "fill": "$muted", + "content": "We'll never share your email.", + "fontFamily": "$typography/font-sans", + "fontSize": 12, + "fontWeight": "normal" + } + ] + } + ] + }, + { + "type": "text", + "id": "VC9Q9", + "x": 2367, + "y": 1836, + "name": "lbl12", + "fill": "$muted", + "content": "Checkbox", + "fontFamily": "$typography/font-sans", + "fontSize": 11, + "fontWeight": "500" + }, + { + "type": "frame", + "id": "F6BITY", + "x": 2367, + "y": 1863, + "name": "Checkbox/Checked", + "reusable": true, + "gap": 8, + "alignItems": "center", + "children": [ + { + "type": "frame", + "id": "e1d66", + "name": "Control", + "width": 16, + "height": 16, + "fill": "$accent/accent", + "cornerRadius": "$radius/md", + "justifyContent": "center", + "alignItems": "center", + "children": [ + { + "type": "icon", + "id": "fmr9I", + "name": "cbCheck", + "width": 10, + "height": 10, + "icon": "check", + "library": "lucide", + "fill": "$accent/foreground" + } + ] + }, + { + "type": "text", + "id": "ihcL7", + "name": "Label", + "fill": "$foreground/foreground", + "content": "Remember me", + "fontFamily": "$typography/font-sans", + "fontSize": 14, + "fontWeight": "500" + } + ] + }, + { + "type": "frame", + "id": "hAyb5", + "x": 2367, + "y": 1903, + "name": "Checkbox/Unchecked", + "reusable": true, + "gap": 8, + "alignItems": "center", + "children": [ + { + "type": "frame", + "id": "iga1F", + "name": "Control", + "width": 16, + "height": 16, + "fill": "$field/background", + "cornerRadius": "$radius/md", + "stroke": "$border", + "strokeWidth": 1, + "strokeAlignment": "inner", + "justifyContent": "center", + "alignItems": "center" + }, + { + "type": "text", + "id": "x3lD1", + "name": "Label", + "fill": "$foreground/foreground", + "content": "Remember me", + "fontFamily": "$typography/font-sans", + "fontSize": 14, + "fontWeight": "500" + } + ] + }, + { + "type": "text", + "id": "Jx5as", + "x": 2367, + "y": 229, + "fill": "$foreground/foreground", + "content": "Form Controls", + "fontFamily": "$typography/font-sans", + "fontSize": 20, + "fontWeight": "600" + }, + { + "type": "frame", + "id": "GHhR1", + "x": 2367, + "y": 1944, + "name": "Checkbox/Indeterminate", + "reusable": true, + "gap": 8, + "alignItems": "center", + "children": [ + { + "type": "frame", + "id": "VANo8", + "name": "Control", + "width": 16, + "height": 16, + "fill": "$accent/accent", + "cornerRadius": "$radius/md", + "justifyContent": "center", + "alignItems": "center", + "children": [ + { + "type": "icon", + "id": "F3WUBs", + "width": 10, + "height": 10, + "icon": "minus", + "library": "lucide", + "fill": "$accent/foreground" + } + ] + }, + { + "type": "text", + "id": "c3HGA", + "name": "Label", + "fill": "$foreground/foreground", + "content": "Select all", + "fontFamily": "$typography/font-sans", + "fontSize": 14, + "fontWeight": "500" + } + ] + }, + { + "type": "text", + "id": "aWCoR", + "x": 161, + "y": 87, + "fill": "$foreground/foreground", + "content": "HeroUI Design System", + "fontFamily": "$typography/font-sans", + "fontSize": 20, + "fontWeight": "600" + }, + { + "type": "text", + "id": "FFL2N", + "x": 160, + "y": 117, + "fill": "$muted", + "content": "Learn more www.heroui.com", + "fontFamily": "$typography/font-sans", + "fontSize": 12, + "fontWeight": "normal" + }, + { + "type": "frame", + "id": "xiBez", + "x": 1531, + "y": 64, + "name": "Frame", + "width": 209, + "height": 64, + "layout": "none", + "children": [ + { + "type": "path", + "id": "NW6P9", + "x": 0, + "y": -4.547473508864641e-13, + "opacity": 0.3, + "geometry": "M0 20.94789l0 25.098c0 1.187 0.61 2.289 1.613 2.916l17.115 10.7c2.28 1.427 5.234-0.219 5.234-2.915l0-21.09699c0-1.214 0.639-2.337 1.68-2.95601l10.439-6.205 0 54.07c0 2.687 2.936 4.334 5.217 2.927l17.665-10.9c1.01383-0.62729 1.63058-1.7348 1.63-2.927l0-51.923c0-2.674-2.91-4.323-5.192-2.942l-19.321 11.696 0-23.049c0-2.667-2.897-4.317-5.179-2.95l-29.231 17.507c-1.03616 0.62176-1.67011 1.7416-1.67 2.95m125.354 25.15801c0-7.117-2.91201-10.402-8.738-10.402-6.671 0-11.36901 4.471-11.36901 14.50799l0 22.995-12.02699 0 0-63.874 12.027 0 0 23.36c2.913-4.745 7.705-7.118 14.282-7.118 11.18099 0 17.758 6.844 17.758 18.341l0 29.29-11.933 0 0-27.09999z m41.7 28.561c-14.94 0-24.429-9.673-24.429-24.546 0-14.69 9.396-24.546 24.429-24.546 16.25501 0 25.08701 11.498 22.644 27.649l-35.047 0c0.65801 7.664 5.168 12.044 12.403 12.04401 5.91901 0 9.49001-3.011 10.429-6.022l11.933 0c-1.879 8.942-10.147 15.42-22.362 15.42m-12.121-29.382l23.114 0c-0.094-6.296-4.228-10.585-11.275-10.585-6.29499 0-10.711 3.65-11.839 10.585m41.324-6.569c0-7.574 4.228-11.68 12.30901-11.68l15.409 0 0 9.855-15.691 0 0 36.317-12.02699 0-0.00002-34.492z m54.032 35.952c-15.222 0-24.89999-9.764-24.89999-24.546 0-14.782 9.67799-24.546 24.89999-24.546 15.03299 0 24.711 9.764 24.711 24.546 0 14.782-9.67801 24.546-24.711 24.546m0-9.946c7.51599 0 12.496-5.749 12.496-14.6 0-8.851-4.98001-14.69-12.496-14.69-7.61099 0-12.591 5.839-12.591 14.69 0 8.851 4.97999 14.6 12.591 14.6", + "fill": "$foreground/muted", + "width": 209, + "height": 64 + } + ] + }, + { + "type": "frame", + "id": "C2MoyK", + "x": 448, + "y": 3071, + "name": "Dropdown", + "fill": "$overlay", + "cornerRadius": "$radius/3xl", + "effect": { + "type": "shadow", + "shadowType": "outer", + "color": "#00000014", + "offset": { + "x": 0, + "y": 4 + }, + "blur": 12 + }, + "layout": "vertical", + "gap": 4, + "padding": 4, + "children": [ + { + "type": "frame", + "id": "b90JA0", + "name": "Menu Title", + "width": 240, + "padding": [ + 6, + 8 + ], + "alignItems": "center", + "children": [ + { + "type": "text", + "id": "Ck2xr", + "name": "Label", + "fill": "$muted", + "content": "Actions", + "fontFamily": "$typography/font-sans", + "fontSize": 12, + "fontWeight": "500" + } + ] + }, + { + "type": "frame", + "id": "uZ2Z3", + "name": "Menu Item/Default", + "width": 240, + "height": 36, + "cornerRadius": "$radius/2xl", + "gap": 12, + "padding": [ + 6, + 8 + ], + "alignItems": "center", + "children": [ + { + "type": "icon", + "id": "jTADt", + "name": "menuIcon", + "width": 16, + "height": 16, + "icon": "copy", + "library": "lucide", + "fill": "$foreground/foreground" + }, + { + "type": "text", + "id": "Qdhbx", + "name": "Label", + "fill": "$foreground/foreground", + "content": "Duplicate", + "fontFamily": "$typography/font-sans", + "fontSize": 14, + "fontWeight": "normal" + } + ] + }, + { + "type": "frame", + "id": "xCDNZ", + "name": "Menu Item/Default", + "width": 240, + "height": 36, + "cornerRadius": "$radius/2xl", + "gap": 12, + "padding": [ + 6, + 8 + ], + "alignItems": "center", + "children": [ + { + "type": "icon", + "id": "xkT2i", + "name": "menuIcon", + "width": 16, + "height": 16, + "icon": "download", + "library": "lucide", + "fill": "$foreground/foreground" + }, + { + "type": "text", + "id": "M6Cg3V", + "name": "Label", + "fill": "$foreground/foreground", + "content": "Download", + "fontFamily": "$typography/font-sans", + "fontSize": 14, + "fontWeight": "normal" + } + ] + }, + { + "type": "frame", + "id": "e8SlQ", + "name": "Menu Item/Default", + "width": 240, + "height": 36, + "cornerRadius": "$radius/2xl", + "gap": 12, + "padding": [ + 6, + 8 + ], + "alignItems": "center", + "children": [ + { + "type": "icon", + "id": "e1A7w", + "name": "menuIcon", + "width": 16, + "height": 16, + "icon": "share-2", + "library": "lucide", + "fill": "$foreground/foreground" + }, + { + "type": "text", + "id": "BL3gB", + "name": "Label", + "fill": "$foreground/foreground", + "content": "Share", + "fontFamily": "$typography/font-sans", + "fontSize": 14, + "fontWeight": "normal" + } + ] + }, + { + "type": "frame", + "id": "uE9P9", + "name": "Menu Divider", + "width": 240, + "layout": "vertical", + "padding": [ + 4, + 0 + ], + "justifyContent": "center", + "alignItems": "center", + "children": [ + { + "type": "rectangle", + "id": "UwG3F", + "fill": "$separator/separator", + "width": "fill_container", + "height": 1 + } + ] + }, + { + "type": "frame", + "id": "L2phGW", + "name": "Menu Item/Danger", + "width": 240, + "height": 36, + "cornerRadius": "$radius/2xl", + "gap": 12, + "padding": [ + 6, + 8 + ], + "alignItems": "center", + "children": [ + { + "type": "icon", + "id": "Z3SUCQ", + "width": 16, + "height": 16, + "icon": "trash-2", + "library": "lucide", + "fill": "$danger/danger" + }, + { + "type": "text", + "id": "Ynlxj", + "name": "Label", + "fill": "$danger/danger", + "content": "Delete", + "fontFamily": "$typography/font-sans", + "fontSize": 14, + "fontWeight": "normal" + } + ] + } + ] + } + ] + }, + { + "type": "prompt", + "id": "X9kNez", + "x": 3567.959083557127, + "y": -437.12109375000045, + "model": "cursor-composer", + "width": 400, + "height": 219, + "content": "Design a dashboard with a sidebar on the left into \"dashboard-utility\" frame for a utility company showing current usage and a history in a table." + }, + { + "type": "frame", + "id": "fximY", + "x": 3567.959083557127, + "y": -39.121093750000455, + "name": "dashboard-utility", + "theme": { + "semantic": "light" + }, + "clip": true, + "width": 1440, + "height": 900, + "children": [ + { + "type": "frame", + "id": "r7dNzQ", + "name": "Sidebar", + "width": 240, + "height": "fill_container", + "fill": "$surface/surface", + "stroke": "$separator/separator", + "strokeWidth": { + "right": 1 + }, + "strokeAlignment": "inner", + "strokeLinejoin": "round", + "layout": "vertical", + "padding": [ + 24, + 16 + ], + "children": [ + { + "type": "frame", + "id": "c1czR9", + "name": "Logo", + "width": "fill_container", + "height": 36, + "gap": 10, + "padding": [ + 0, + 8 + ], + "alignItems": "center", + "children": [ + { + "type": "icon", + "id": "dKSWS", + "name": "logoIcon", + "width": 20, + "height": 20, + "icon": "zap", + "library": "lucide", + "fill": "$accent/accent" + }, + { + "type": "text", + "id": "JEgkR", + "name": "logoText", + "fill": "$foreground/foreground", + "content": "PowerGrid", + "fontFamily": "$typography/font-sans", + "fontSize": 18, + "fontWeight": "600" + } + ] + }, + { + "type": "frame", + "id": "Eica6", + "name": "spacer1", + "width": "fill_container", + "height": 24 + }, + { + "type": "frame", + "id": "GmeXc", + "name": "navTitle", + "width": "fill_container", + "padding": [ + 6, + 8 + ], + "alignItems": "center", + "children": [ + { + "type": "text", + "id": "hbhMn", + "name": "Label", + "fill": "$muted", + "content": "MAIN", + "fontFamily": "$typography/font-sans", + "fontSize": 12, + "fontWeight": "500" + } + ] + }, + { + "type": "frame", + "id": "G8KZEQ", + "name": "navDash", + "width": "fill_container", + "height": 36, + "fill": "$default/default", + "cornerRadius": "$radius/2xl", + "gap": 12, + "padding": [ + 6, + 8 + ], + "alignItems": "center", + "children": [ + { + "type": "icon", + "id": "XJgt6", + "name": "menuActIcon", + "width": 16, + "height": 16, + "icon": "layout-dashboard", + "library": "lucide", + "fill": "$foreground/foreground" + }, + { + "type": "text", + "id": "jmRSD", + "name": "Label", + "fill": "$foreground/foreground", + "content": "Dashboard", + "fontFamily": "$typography/font-sans", + "fontSize": 14, + "fontWeight": "normal" + } + ] + }, + { + "type": "frame", + "id": "lrs5h", + "name": "navUsage", + "width": "fill_container", + "height": 36, + "cornerRadius": "$radius/2xl", + "gap": 12, + "padding": [ + 6, + 8 + ], + "alignItems": "center", + "children": [ + { + "type": "icon", + "id": "hV67P", + "name": "menuIcon", + "width": 16, + "height": 16, + "icon": "activity", + "library": "lucide", + "fill": "$foreground/foreground" + }, + { + "type": "text", + "id": "VAXR8", + "name": "Label", + "fill": "$foreground/foreground", + "content": "Usage", + "fontFamily": "$typography/font-sans", + "fontSize": 14, + "fontWeight": "normal" + } + ] + }, + { + "type": "frame", + "id": "GLNdE", + "name": "navBilling", + "width": "fill_container", + "height": 36, + "cornerRadius": "$radius/2xl", + "gap": 12, + "padding": [ + 6, + 8 + ], + "alignItems": "center", + "children": [ + { + "type": "icon", + "id": "Qr8pc", + "name": "menuIcon", + "width": 16, + "height": 16, + "icon": "credit-card", + "library": "lucide", + "fill": "$foreground/foreground" + }, + { + "type": "text", + "id": "A5Dz1", + "name": "Label", + "fill": "$foreground/foreground", + "content": "Billing", + "fontFamily": "$typography/font-sans", + "fontSize": 14, + "fontWeight": "normal" + } + ] + }, + { + "type": "frame", + "id": "Ade1u", + "name": "navReports", + "width": "fill_container", + "height": 36, + "cornerRadius": "$radius/2xl", + "gap": 12, + "padding": [ + 6, + 8 + ], + "alignItems": "center", + "children": [ + { + "type": "icon", + "id": "cPCM5", + "name": "menuIcon", + "width": 16, + "height": 16, + "icon": "file-text", + "library": "lucide", + "fill": "$foreground/foreground" + }, + { + "type": "text", + "id": "TqCRw", + "name": "Label", + "fill": "$foreground/foreground", + "content": "Reports", + "fontFamily": "$typography/font-sans", + "fontSize": 14, + "fontWeight": "normal" + } + ] + }, + { + "type": "frame", + "id": "m1N9En", + "name": "divider1", + "width": "fill_container", + "layout": "vertical", + "padding": [ + 4, + 0 + ], + "justifyContent": "center", + "alignItems": "center", + "children": [ + { + "type": "rectangle", + "id": "O1RQg", + "fill": "$separator/separator", + "width": "fill_container", + "height": 1 + } + ] + }, + { + "type": "frame", + "id": "H3XOc", + "name": "navTitle2", + "width": "fill_container", + "padding": [ + 6, + 8 + ], + "alignItems": "center", + "children": [ + { + "type": "text", + "id": "L31NI", + "name": "Label", + "fill": "$muted", + "content": "SETTINGS", + "fontFamily": "$typography/font-sans", + "fontSize": 12, + "fontWeight": "500" + } + ] + }, + { + "type": "frame", + "id": "gxoDX", + "name": "navSettings", + "width": "fill_container", + "height": 36, + "cornerRadius": "$radius/2xl", + "gap": 12, + "padding": [ + 6, + 8 + ], + "alignItems": "center", + "children": [ + { + "type": "icon", + "id": "Gls8v", + "name": "menuIcon", + "width": 16, + "height": 16, + "icon": "settings", + "library": "lucide", + "fill": "$foreground/foreground" + }, + { + "type": "text", + "id": "N2y0Le", + "name": "Label", + "fill": "$foreground/foreground", + "content": "Settings", + "fontFamily": "$typography/font-sans", + "fontSize": 14, + "fontWeight": "normal" + } + ] + }, + { + "type": "frame", + "id": "j7c0dO", + "name": "navSupport", + "width": "fill_container", + "height": 36, + "cornerRadius": "$radius/2xl", + "gap": 12, + "padding": [ + 6, + 8 + ], + "alignItems": "center", + "children": [ + { + "type": "icon", + "id": "Qj510", + "name": "menuIcon", + "width": 16, + "height": 16, + "icon": "life-buoy", + "library": "lucide", + "fill": "$foreground/foreground" + }, + { + "type": "text", + "id": "UMSWq", + "name": "Label", + "fill": "$foreground/foreground", + "content": "Support", + "fontFamily": "$typography/font-sans", + "fontSize": 14, + "fontWeight": "normal" + } + ] + } + ] + }, + { + "type": "frame", + "id": "UmtFa", + "name": "Main Content", + "width": "fill_container", + "height": "fill_container", + "fill": "$background/background", + "layout": "vertical", + "gap": 32, + "padding": [ + 32, + 40 + ], + "children": [ + { + "type": "frame", + "id": "u3e5bl", + "name": "Header", + "width": "fill_container", + "justifyContent": "space_between", + "alignItems": "center", + "children": [ + { + "type": "frame", + "id": "Eh7vq", + "name": "headerLeft", + "layout": "vertical", + "gap": 4, + "children": [ + { + "type": "text", + "id": "wjLt3", + "name": "headerTitle", + "fill": "$foreground/foreground", + "content": "Dashboard", + "fontFamily": "$typography/font-sans", + "fontSize": 28, + "fontWeight": "600" + }, + { + "type": "text", + "id": "lfqBo", + "name": "headerSub", + "fill": "$foreground/secondary", + "content": "Monitor your energy consumption and billing", + "fontFamily": "$typography/font-sans", + "fontSize": 14, + "fontWeight": "normal" + } + ] + } + ] + }, + { + "type": "frame", + "id": "QNp69", + "name": "Metrics", + "width": "fill_container", + "gap": 20, + "children": [ + { + "type": "frame", + "id": "Qdem9", + "name": "card1", + "width": "fill_container", + "fill": "$surface/surface", + "cornerRadius": "$radius/3xl", + "effect": { + "type": "shadow", + "shadowType": "outer", + "color": "#0000000A", + "offset": { + "x": 0, + "y": 2 + }, + "blur": 4 + }, + "layout": "vertical", + "gap": 12, + "padding": 16, + "children": [ + { + "type": "frame", + "id": "fEy3t", + "name": "c1hdr", + "width": "fill_container", + "layout": "vertical", + "gap": 8, + "children": [ + { + "type": "frame", + "id": "TRiYF", + "name": "c1top", + "width": "fill_container", + "justifyContent": "space_between", + "alignItems": "center", + "children": [ + { + "type": "text", + "id": "gvOIB", + "name": "c1label", + "fill": "$foreground/secondary", + "content": "Current Usage", + "fontFamily": "$typography/font-sans", + "fontSize": 13, + "fontWeight": "normal" + }, + { + "type": "icon", + "id": "XiABP", + "name": "c1icon", + "width": 18, + "height": 18, + "icon": "zap", + "library": "lucide", + "fill": "$accent/accent" + } + ] + }, + { + "type": "text", + "id": "z7Ci7l", + "name": "c1val", + "fill": "$foreground/foreground", + "content": "2,847 kWh", + "fontFamily": "$typography/font-sans", + "fontSize": 28, + "fontWeight": "600" + }, + { + "type": "text", + "id": "mFCq8", + "name": "c1chip", + "fill": "$success/success", + "content": "+12.5% from last month", + "fontFamily": "$typography/font-sans", + "fontSize": 12, + "fontWeight": "normal" + } + ] + } + ] + }, + { + "type": "frame", + "id": "AN1pl", + "name": "card2", + "width": "fill_container", + "fill": "$surface/surface", + "cornerRadius": "$radius/3xl", + "effect": { + "type": "shadow", + "shadowType": "outer", + "color": "#0000000A", + "offset": { + "x": 0, + "y": 2 + }, + "blur": 4 + }, + "layout": "vertical", + "gap": 12, + "padding": 16, + "children": [ + { + "type": "frame", + "id": "Juh1h", + "name": "c2hdr", + "width": "fill_container", + "layout": "vertical", + "gap": 8, + "children": [ + { + "type": "frame", + "id": "s0T36", + "name": "c2top", + "width": "fill_container", + "justifyContent": "space_between", + "alignItems": "center", + "children": [ + { + "type": "text", + "id": "F20xI", + "name": "c2label", + "fill": "$foreground/secondary", + "content": "Monthly Bill", + "fontFamily": "$typography/font-sans", + "fontSize": 13, + "fontWeight": "normal" + }, + { + "type": "icon", + "id": "Vb5Ft", + "name": "c2icon", + "width": 18, + "height": 18, + "icon": "dollar-sign", + "library": "lucide", + "fill": "$success/success" + } + ] + }, + { + "type": "text", + "id": "Yp6ht", + "name": "c2val", + "fill": "$foreground/foreground", + "content": "$342.18", + "fontFamily": "$typography/font-sans", + "fontSize": 28, + "fontWeight": "600" + }, + { + "type": "text", + "id": "W0TdR1", + "name": "c2chip", + "fill": "$success/success", + "content": "-3.2% from last month", + "fontFamily": "$typography/font-sans", + "fontSize": 12, + "fontWeight": "normal" + } + ] + } + ] + }, + { + "type": "frame", + "id": "Okqqc", + "name": "card3", + "width": "fill_container", + "fill": "$surface/surface", + "cornerRadius": "$radius/3xl", + "effect": { + "type": "shadow", + "shadowType": "outer", + "color": "#0000000A", + "offset": { + "x": 0, + "y": 2 + }, + "blur": 4 + }, + "layout": "vertical", + "gap": 12, + "padding": 16, + "children": [ + { + "type": "frame", + "id": "TOAlG", + "name": "c3hdr", + "width": "fill_container", + "layout": "vertical", + "gap": 8, + "children": [ + { + "type": "frame", + "id": "CuWD3", + "name": "c3top", + "width": "fill_container", + "justifyContent": "space_between", + "alignItems": "center", + "children": [ + { + "type": "text", + "id": "Igrhf", + "name": "c3label", + "fill": "$foreground/secondary", + "content": "Avg Daily Usage", + "fontFamily": "$typography/font-sans", + "fontSize": 13, + "fontWeight": "normal" + }, + { + "type": "icon", + "id": "JBZN4", + "name": "c3icon", + "width": 18, + "height": 18, + "icon": "trending-up", + "library": "lucide", + "fill": "$warning/warning" + } + ] + }, + { + "type": "text", + "id": "y20ZC", + "name": "c3val", + "fill": "$foreground/foreground", + "content": "94.9 kWh", + "fontFamily": "$typography/font-sans", + "fontSize": 28, + "fontWeight": "600" + }, + { + "type": "text", + "id": "Ixc9p", + "name": "c3chip", + "fill": "$warning/warning", + "content": "+5.1% from last month", + "fontFamily": "$typography/font-sans", + "fontSize": 12, + "fontWeight": "normal" + } + ] + } + ] + }, + { + "type": "frame", + "id": "QNt7U", + "name": "card4", + "width": "fill_container", + "fill": "$surface/surface", + "cornerRadius": "$radius/3xl", + "effect": { + "type": "shadow", + "shadowType": "outer", + "color": "#0000000A", + "offset": { + "x": 0, + "y": 2 + }, + "blur": 4 + }, + "layout": "vertical", + "gap": 12, + "padding": 16, + "children": [ + { + "type": "frame", + "id": "XDTj2", + "name": "c4hdr", + "width": "fill_container", + "layout": "vertical", + "gap": 8, + "children": [ + { + "type": "frame", + "id": "B7w7GE", + "name": "c4top", + "width": "fill_container", + "justifyContent": "space_between", + "alignItems": "center", + "children": [ + { + "type": "text", + "id": "aw5TA", + "name": "c4label", + "fill": "$foreground/secondary", + "content": "Peak Demand", + "fontFamily": "$typography/font-sans", + "fontSize": 13, + "fontWeight": "normal" + }, + { + "type": "icon", + "id": "A2pBoj", + "name": "c4icon", + "width": 18, + "height": 18, + "icon": "gauge", + "library": "lucide", + "fill": "$danger/danger" + } + ] + }, + { + "type": "text", + "id": "mRK2I", + "name": "c4val", + "fill": "$foreground/foreground", + "content": "8.4 kW", + "fontFamily": "$typography/font-sans", + "fontSize": 28, + "fontWeight": "600" + }, + { + "type": "text", + "id": "UVuWj", + "name": "c4chip", + "fill": "$danger/danger", + "content": "+2.8% from last month", + "fontFamily": "$typography/font-sans", + "fontSize": 12, + "fontWeight": "normal" + } + ] + } + ] + } + ] + }, + { + "type": "frame", + "id": "hHRhX", + "name": "Frame 3", + "width": "fill_container", + "layout": "vertical", + "gap": "$spacing/3", + "children": [ + { + "type": "frame", + "id": "FEP4f", + "name": "tHeader", + "width": "fill_container", + "justifyContent": "space_between", + "alignItems": "center", + "children": [ + { + "type": "text", + "id": "KqsSp", + "name": "tTitle", + "fill": "$foreground/foreground", + "content": "Usage History", + "fontFamily": "$typography/font-sans", + "fontSize": 18, + "fontWeight": "600" + }, + { + "type": "frame", + "id": "ZzzPD", + "name": "tAction", + "height": 32, + "fill": "$default/default", + "cornerRadius": "$radius/3xl", + "gap": 5, + "padding": [ + 8, + "$spacing/3" + ], + "justifyContent": "center", + "alignItems": "center", + "children": [ + { + "type": "icon", + "id": "haa7Q", + "width": 14, + "height": 14, + "icon": "download", + "library": "lucide", + "fill": "$accent/accent" + }, + { + "type": "text", + "id": "RgdHa", + "name": "Label", + "fill": "$accent/accent", + "content": "Export", + "fontFamily": "$typography/font-sans", + "fontSize": 13, + "fontWeight": "500" + } + ] + } + ] + }, + { + "type": "frame", + "id": "GSdYn", + "name": "tableCard", + "clip": true, + "width": "fill_container", + "fill": "$surface/secondary", + "cornerRadius": 20, + "effect": { + "type": "shadow", + "shadowType": "outer", + "enabled": false, + "color": "#000000" + }, + "layout": "vertical", + "padding": [ + 0, + 4, + 4, + 4 + ], + "children": [ + { + "type": "frame", + "id": "aq4pj", + "name": "table", + "clip": true, + "width": "fill_container", + "fill": "#00000000", + "layout": "vertical", + "children": [ + { + "type": "frame", + "id": "KjzKb", + "name": "headerRow", + "width": "fill_container", + "fill": "$surface/secondary", + "stroke": "$separator/separator", + "strokeWidth": { + "bottom": 1 + }, + "strokeAlignment": "inner", + "strokeLinejoin": "round", + "children": [ + { + "type": "frame", + "id": "jgYmV", + "name": "hCol1", + "width": 140, + "fill": "$surface/secondary", + "padding": [ + 10, + 16 + ], + "alignItems": "center", + "children": [ + { + "type": "text", + "id": "Rr4f2", + "name": "Label", + "fill": "$muted", + "content": "Date", + "fontFamily": "$typography/font-sans", + "fontSize": 12, + "fontWeight": "500" + } + ] + }, + { + "type": "frame", + "id": "FEjpg", + "name": "hCol2", + "width": "fill_container", + "fill": "$surface/secondary", + "padding": [ + 10, + 16 + ], + "alignItems": "center", + "children": [ + { + "type": "text", + "id": "axEzx", + "name": "Label", + "fill": "$muted", + "content": "Description", + "fontFamily": "$typography/font-sans", + "fontSize": 12, + "fontWeight": "500" + } + ] + }, + { + "type": "frame", + "id": "X4smcF", + "name": "hCol3", + "width": 120, + "fill": "$surface/secondary", + "padding": [ + 10, + 16 + ], + "alignItems": "center", + "children": [ + { + "type": "text", + "id": "lVPCL", + "name": "Label", + "fill": "$muted", + "content": "Usage (kWh)", + "fontFamily": "$typography/font-sans", + "fontSize": 12, + "fontWeight": "500" + } + ] + }, + { + "type": "frame", + "id": "zeYLm", + "name": "hCol4", + "width": 120, + "fill": "$surface/secondary", + "padding": [ + 10, + 16 + ], + "alignItems": "center", + "children": [ + { + "type": "text", + "id": "e1YvdW", + "name": "Label", + "fill": "$muted", + "content": "Cost", + "fontFamily": "$typography/font-sans", + "fontSize": 12, + "fontWeight": "500" + } + ] + }, + { + "type": "frame", + "id": "cNL1W", + "name": "hCol5", + "width": 120, + "fill": "$surface/secondary", + "padding": [ + 10, + 16 + ], + "alignItems": "center", + "children": [ + { + "type": "text", + "id": "ruvLO", + "name": "Label", + "fill": "$muted", + "content": "Status", + "fontFamily": "$typography/font-sans", + "fontSize": 12, + "fontWeight": "500" + } + ] + } + ] + }, + { + "type": "frame", + "id": "Cw0tt", + "name": "tbody", + "clip": true, + "width": "fill_container", + "cornerRadius": "$radius/2xl", + "layout": "vertical", + "children": [ + { + "type": "frame", + "id": "m1JDgP", + "name": "row1", + "width": "fill_container", + "children": [ + { + "type": "frame", + "id": "TjsJh", + "name": "r1c1", + "width": 140, + "fill": "$surface/surface", + "stroke": "$separator/separator", + "strokeWidth": { + "bottom": 1 + }, + "strokeAlignment": "inner", + "strokeLinejoin": "round", + "padding": [ + 12, + 16 + ], + "alignItems": "center", + "children": [ + { + "type": "text", + "id": "VtdKT", + "name": "Value", + "fill": "$foreground/foreground", + "content": "Mar 23, 2026", + "fontFamily": "$typography/font-sans", + "fontSize": 14, + "fontWeight": "normal" + } + ] + }, + { + "type": "frame", + "id": "hK1ZI", + "name": "r1c2", + "width": "fill_container", + "fill": "$surface/surface", + "stroke": "$separator/separator", + "strokeWidth": { + "bottom": 1 + }, + "strokeAlignment": "inner", + "strokeLinejoin": "round", + "padding": [ + 12, + 16 + ], + "alignItems": "center", + "children": [ + { + "type": "text", + "id": "ew6yF", + "name": "Value", + "fill": "$foreground/foreground", + "content": "Residential electricity", + "fontFamily": "$typography/font-sans", + "fontSize": 14, + "fontWeight": "normal" + } + ] + }, + { + "type": "frame", + "id": "v7xfmu", + "name": "r1c3", + "width": 120, + "fill": "$surface/surface", + "stroke": "$separator/separator", + "strokeWidth": { + "bottom": 1 + }, + "strokeAlignment": "inner", + "strokeLinejoin": "round", + "padding": [ + 12, + 16 + ], + "alignItems": "center", + "children": [ + { + "type": "text", + "id": "GKy58", + "name": "Value", + "fill": "$foreground/foreground", + "content": "98.2", + "fontFamily": "$typography/font-sans", + "fontSize": 14, + "fontWeight": "normal" + } + ] + }, + { + "type": "frame", + "id": "I76OJ", + "name": "r1c4", + "width": 120, + "fill": "$surface/surface", + "stroke": "$separator/separator", + "strokeWidth": { + "bottom": 1 + }, + "strokeAlignment": "inner", + "strokeLinejoin": "round", + "padding": [ + 12, + 16 + ], + "alignItems": "center", + "children": [ + { + "type": "text", + "id": "bYaUI", + "name": "Value", + "fill": "$foreground/foreground", + "content": "$11.78", + "fontFamily": "$typography/font-sans", + "fontSize": 14, + "fontWeight": "normal" + } + ] + }, + { + "type": "frame", + "id": "GneV3", + "name": "r1c5", + "width": 120, + "fill": "$surface/surface", + "stroke": "$separator/separator", + "strokeWidth": { + "bottom": 1 + }, + "strokeAlignment": "inner", + "strokeLinejoin": "round", + "padding": [ + 12, + 16 + ], + "alignItems": "center", + "children": [ + { + "type": "frame", + "id": "R12IO", + "name": "chip1", + "fill": "$success/success", + "cornerRadius": "$radius/2xl", + "gap": 2, + "padding": [ + 2, + 4 + ], + "alignItems": "center", + "children": [ + { + "type": "text", + "id": "Ivtle", + "name": "Label", + "fill": "$success/foreground", + "content": "Paid", + "fontFamily": "$typography/font-sans", + "fontSize": 11, + "fontWeight": "500" + } + ] + } + ] + } + ] + }, + { + "type": "frame", + "id": "NTJAT", + "name": "row2", + "width": "fill_container", + "children": [ + { + "type": "frame", + "id": "bilv7", + "name": "r2c1", + "width": 140, + "fill": "$surface/surface", + "stroke": "$separator/separator", + "strokeWidth": { + "bottom": 1 + }, + "strokeAlignment": "inner", + "strokeLinejoin": "round", + "padding": [ + 12, + 16 + ], + "alignItems": "center", + "children": [ + { + "type": "text", + "id": "yJLlU", + "name": "Value", + "fill": "$foreground/foreground", + "content": "Mar 22, 2026", + "fontFamily": "$typography/font-sans", + "fontSize": 14, + "fontWeight": "normal" + } + ] + }, + { + "type": "frame", + "id": "uJpIH", + "name": "r2c2", + "width": "fill_container", + "fill": "$surface/surface", + "stroke": "$separator/separator", + "strokeWidth": { + "bottom": 1 + }, + "strokeAlignment": "inner", + "strokeLinejoin": "round", + "padding": [ + 12, + 16 + ], + "alignItems": "center", + "children": [ + { + "type": "text", + "id": "ggibG", + "name": "Value", + "fill": "$foreground/foreground", + "content": "Residential electricity", + "fontFamily": "$typography/font-sans", + "fontSize": 14, + "fontWeight": "normal" + } + ] + }, + { + "type": "frame", + "id": "w4Arp", + "name": "r2c3", + "width": 120, + "fill": "$surface/surface", + "stroke": "$separator/separator", + "strokeWidth": { + "bottom": 1 + }, + "strokeAlignment": "inner", + "strokeLinejoin": "round", + "padding": [ + 12, + 16 + ], + "alignItems": "center", + "children": [ + { + "type": "text", + "id": "S8VdqV", + "name": "Value", + "fill": "$foreground/foreground", + "content": "102.5", + "fontFamily": "$typography/font-sans", + "fontSize": 14, + "fontWeight": "normal" + } + ] + }, + { + "type": "frame", + "id": "LuoGN", + "name": "r2c4", + "width": 120, + "fill": "$surface/surface", + "stroke": "$separator/separator", + "strokeWidth": { + "bottom": 1 + }, + "strokeAlignment": "inner", + "strokeLinejoin": "round", + "padding": [ + 12, + 16 + ], + "alignItems": "center", + "children": [ + { + "type": "text", + "id": "M1DV5V", + "name": "Value", + "fill": "$foreground/foreground", + "content": "$12.30", + "fontFamily": "$typography/font-sans", + "fontSize": 14, + "fontWeight": "normal" + } + ] + }, + { + "type": "frame", + "id": "wIr1v", + "name": "r2c5", + "width": 120, + "fill": "$surface/surface", + "stroke": "$separator/separator", + "strokeWidth": { + "bottom": 1 + }, + "strokeAlignment": "inner", + "strokeLinejoin": "round", + "padding": [ + 12, + 16 + ], + "alignItems": "center", + "children": [ + { + "type": "frame", + "id": "sWMHO", + "name": "chip2", + "fill": "$success/success", + "cornerRadius": "$radius/2xl", + "gap": 2, + "padding": [ + 2, + 4 + ], + "alignItems": "center", + "children": [ + { + "type": "text", + "id": "Z2sJO", + "name": "Label", + "fill": "$success/foreground", + "content": "Paid", + "fontFamily": "$typography/font-sans", + "fontSize": 11, + "fontWeight": "500" + } + ] + } + ] + } + ] + }, + { + "type": "frame", + "id": "L0E7Y", + "name": "row3", + "width": "fill_container", + "children": [ + { + "type": "frame", + "id": "Bwhc7", + "name": "r3c1", + "width": 140, + "fill": "$surface/surface", + "stroke": "$separator/separator", + "strokeWidth": { + "bottom": 1 + }, + "strokeAlignment": "inner", + "strokeLinejoin": "round", + "padding": [ + 12, + 16 + ], + "alignItems": "center", + "children": [ + { + "type": "text", + "id": "oI8qn", + "name": "Value", + "fill": "$foreground/foreground", + "content": "Mar 21, 2026", + "fontFamily": "$typography/font-sans", + "fontSize": 14, + "fontWeight": "normal" + } + ] + }, + { + "type": "frame", + "id": "i08iu", + "name": "r3c2", + "width": "fill_container", + "fill": "$surface/surface", + "stroke": "$separator/separator", + "strokeWidth": { + "bottom": 1 + }, + "strokeAlignment": "inner", + "strokeLinejoin": "round", + "padding": [ + 12, + 16 + ], + "alignItems": "center", + "children": [ + { + "type": "text", + "id": "XJ8aI", + "name": "Value", + "fill": "$foreground/foreground", + "content": "Residential electricity", + "fontFamily": "$typography/font-sans", + "fontSize": 14, + "fontWeight": "normal" + } + ] + }, + { + "type": "frame", + "id": "E7bfrs", + "name": "r3c3", + "width": 120, + "fill": "$surface/surface", + "stroke": "$separator/separator", + "strokeWidth": { + "bottom": 1 + }, + "strokeAlignment": "inner", + "strokeLinejoin": "round", + "padding": [ + 12, + 16 + ], + "alignItems": "center", + "children": [ + { + "type": "text", + "id": "n55ji", + "name": "Value", + "fill": "$foreground/foreground", + "content": "87.6", + "fontFamily": "$typography/font-sans", + "fontSize": 14, + "fontWeight": "normal" + } + ] + }, + { + "type": "frame", + "id": "j1mOM", + "name": "r3c4", + "width": 120, + "fill": "$surface/surface", + "stroke": "$separator/separator", + "strokeWidth": { + "bottom": 1 + }, + "strokeAlignment": "inner", + "strokeLinejoin": "round", + "padding": [ + 12, + 16 + ], + "alignItems": "center", + "children": [ + { + "type": "text", + "id": "e5WWDI", + "name": "Value", + "fill": "$foreground/foreground", + "content": "$10.51", + "fontFamily": "$typography/font-sans", + "fontSize": 14, + "fontWeight": "normal" + } + ] + }, + { + "type": "frame", + "id": "XtGOa", + "name": "r3c5", + "width": 120, + "fill": "$surface/surface", + "stroke": "$separator/separator", + "strokeWidth": { + "bottom": 1 + }, + "strokeAlignment": "inner", + "strokeLinejoin": "round", + "padding": [ + 12, + 16 + ], + "alignItems": "center", + "children": [ + { + "type": "frame", + "id": "V4CO60", + "name": "chip3", + "fill": "$success/success", + "cornerRadius": "$radius/2xl", + "gap": 2, + "padding": [ + 2, + 4 + ], + "alignItems": "center", + "children": [ + { + "type": "text", + "id": "ezEM0", + "name": "Label", + "fill": "$success/foreground", + "content": "Paid", + "fontFamily": "$typography/font-sans", + "fontSize": 11, + "fontWeight": "500" + } + ] + } + ] + } + ] + }, + { + "type": "frame", + "id": "f0zki5", + "name": "row4", + "width": "fill_container", + "stroke": "$separator/separator", + "strokeWidth": { + "bottom": 1 + }, + "strokeAlignment": "inner", + "children": [ + { + "type": "frame", + "id": "BOWWn", + "name": "r4c1", + "width": 140, + "fill": "$surface/surface", + "stroke": "$separator/separator", + "strokeWidth": { + "bottom": 1 + }, + "strokeAlignment": "inner", + "strokeLinejoin": "round", + "padding": [ + 12, + 16 + ], + "alignItems": "center", + "children": [ + { + "type": "text", + "id": "ezOGo", + "name": "Value", + "fill": "$foreground/foreground", + "content": "Mar 20, 2026", + "fontFamily": "$typography/font-sans", + "fontSize": 14, + "fontWeight": "normal" + } + ] + }, + { + "type": "frame", + "id": "K8FEi", + "name": "r4c2", + "width": "fill_container", + "fill": "$surface/surface", + "stroke": "$separator/separator", + "strokeWidth": { + "bottom": 1 + }, + "strokeAlignment": "inner", + "strokeLinejoin": "round", + "padding": [ + 12, + 16 + ], + "alignItems": "center", + "children": [ + { + "type": "text", + "id": "PgE85", + "name": "Value", + "fill": "$foreground/foreground", + "content": "Peak hour surcharge", + "fontFamily": "$typography/font-sans", + "fontSize": 14, + "fontWeight": "normal" + } + ] + }, + { + "type": "frame", + "id": "RLWkC", + "name": "r4c3", + "width": 120, + "fill": "$surface/surface", + "stroke": "$separator/separator", + "strokeWidth": { + "bottom": 1 + }, + "strokeAlignment": "inner", + "strokeLinejoin": "round", + "padding": [ + 12, + 16 + ], + "alignItems": "center", + "children": [ + { + "type": "text", + "id": "tQjZA", + "name": "Value", + "fill": "$foreground/foreground", + "content": "112.3", + "fontFamily": "$typography/font-sans", + "fontSize": 14, + "fontWeight": "normal" + } + ] + }, + { + "type": "frame", + "id": "ulEuZ", + "name": "r4c4", + "width": 120, + "fill": "$surface/surface", + "stroke": "$separator/separator", + "strokeWidth": { + "bottom": 1 + }, + "strokeAlignment": "inner", + "strokeLinejoin": "round", + "padding": [ + 12, + 16 + ], + "alignItems": "center", + "children": [ + { + "type": "text", + "id": "idJjm", + "name": "Value", + "fill": "$foreground/foreground", + "content": "$15.72", + "fontFamily": "$typography/font-sans", + "fontSize": 14, + "fontWeight": "normal" + } + ] + }, + { + "type": "frame", + "id": "hwaCv", + "name": "r4c5", + "width": 120, + "fill": "$surface/surface", + "stroke": "$separator/separator", + "strokeWidth": { + "bottom": 1 + }, + "strokeAlignment": "inner", + "strokeLinejoin": "round", + "padding": [ + 12, + 16 + ], + "alignItems": "center", + "children": [ + { + "type": "frame", + "id": "ubqmv", + "name": "chip4", + "fill": "$warning/warning", + "cornerRadius": "$radius/2xl", + "gap": 2, + "padding": [ + 2, + 4 + ], + "alignItems": "center", + "children": [ + { + "type": "text", + "id": "I5pMyx", + "name": "Label", + "fill": "$warning/foreground", + "content": "Pending", + "fontFamily": "$typography/font-sans", + "fontSize": 11, + "fontWeight": "500" + } + ] + } + ] + } + ] + }, + { + "type": "frame", + "id": "ySuHB", + "name": "row5", + "width": "fill_container", + "children": [ + { + "type": "frame", + "id": "TIVdL", + "name": "r5c1", + "width": 140, + "fill": "$surface/surface", + "stroke": "$separator/separator", + "strokeWidth": { + "bottom": 1 + }, + "strokeAlignment": "inner", + "strokeLinejoin": "round", + "padding": [ + 12, + 16 + ], + "alignItems": "center", + "children": [ + { + "type": "text", + "id": "wVqno", + "name": "Value", + "fill": "$foreground/foreground", + "content": "Mar 19, 2026", + "fontFamily": "$typography/font-sans", + "fontSize": 14, + "fontWeight": "normal" + } + ] + }, + { + "type": "frame", + "id": "MdI5o", + "name": "r5c2", + "width": "fill_container", + "fill": "$surface/surface", + "stroke": "$separator/separator", + "strokeWidth": { + "bottom": 1 + }, + "strokeAlignment": "inner", + "strokeLinejoin": "round", + "padding": [ + 12, + 16 + ], + "alignItems": "center", + "children": [ + { + "type": "text", + "id": "R49IK", + "name": "Value", + "fill": "$foreground/foreground", + "content": "Residential electricity", + "fontFamily": "$typography/font-sans", + "fontSize": 14, + "fontWeight": "normal" + } + ] + }, + { + "type": "frame", + "id": "iffSR", + "name": "r5c3", + "width": 120, + "fill": "$surface/surface", + "stroke": "$separator/separator", + "strokeWidth": { + "bottom": 1 + }, + "strokeAlignment": "inner", + "strokeLinejoin": "round", + "padding": [ + 12, + 16 + ], + "alignItems": "center", + "children": [ + { + "type": "text", + "id": "nFOKO", + "name": "Value", + "fill": "$foreground/foreground", + "content": "91.4", + "fontFamily": "$typography/font-sans", + "fontSize": 14, + "fontWeight": "normal" + } + ] + }, + { + "type": "frame", + "id": "EtoGh", + "name": "r5c4", + "width": 120, + "fill": "$surface/surface", + "stroke": "$separator/separator", + "strokeWidth": { + "bottom": 1 + }, + "strokeAlignment": "inner", + "strokeLinejoin": "round", + "padding": [ + 12, + 16 + ], + "alignItems": "center", + "children": [ + { + "type": "text", + "id": "Q8KbdY", + "name": "Value", + "fill": "$foreground/foreground", + "content": "$10.97", + "fontFamily": "$typography/font-sans", + "fontSize": 14, + "fontWeight": "normal" + } + ] + }, + { + "type": "frame", + "id": "viqaq", + "name": "r5c5", + "width": 120, + "fill": "$surface/surface", + "stroke": "$separator/separator", + "strokeWidth": { + "bottom": 1 + }, + "strokeAlignment": "inner", + "strokeLinejoin": "round", + "padding": [ + 12, + 16 + ], + "alignItems": "center", + "children": [ + { + "type": "frame", + "id": "Q9cwsI", + "name": "chip5", + "fill": "$success/success", + "cornerRadius": "$radius/2xl", + "gap": 2, + "padding": [ + 2, + 4 + ], + "alignItems": "center", + "children": [ + { + "type": "text", + "id": "l9L8Q", + "name": "Label", + "fill": "$success/foreground", + "content": "Paid", + "fontFamily": "$typography/font-sans", + "fontSize": 11, + "fontWeight": "500" + } + ] + } + ] + } + ] + } + ] + }, + { + "type": "frame", + "id": "T5Ma5", + "name": "footer", + "width": "fill_container", + "padding": [ + 10, + 16 + ], + "justifyContent": "space_between", + "alignItems": "center", + "children": [ + { + "type": "text", + "id": "kcR6A", + "name": "Summary", + "fill": "$muted", + "content": "1-5 of 31", + "fontFamily": "$typography/font-sans", + "fontSize": 13, + "fontWeight": "normal" + } + ] + } + ] + } + ] + } + ] + } + ] + } + ] + }, + { + "type": "frame", + "id": "HBYBE", + "x": 3567.959083557127, + "y": 1020.8789062499995, + "name": "Receiver / Login", + "theme": { + "semantic": "dark" + }, + "clip": true, + "width": 1440, + "height": 900, + "fill": "$background/background", + "layout": "vertical", + "justifyContent": "center", + "alignItems": "center", + "children": [ + { + "id": "f7gFY", + "type": "ref", + "ref": "f07b1", + "name": "Login card", + "width": 400, + "padding": 32, + "gap": 24, + "stroke": "$border", + "strokeWidth": 1, + "strokeAlignment": "inner", + "children": [ + { + "type": "frame", + "id": "RFl9o", + "name": "Heading", + "width": "fill_container", + "layout": "vertical", + "gap": 10, + "children": [ + { + "type": "frame", + "id": "yItF3", + "name": "Brand", + "gap": 10, + "alignItems": "center", + "children": [ + { + "type": "rectangle", + "id": "Nn2ic", + "name": "Logo", + "fill": { + "type": "image", + "enabled": true, + "url": "../website/design-assets/gameplane-icon.png", + "mode": "contain" + }, + "width": 24, + "height": 24 + }, + { + "type": "text", + "id": "v4e5d", + "name": "Wordmark", + "fill": "$foreground/foreground", + "content": "gameplane", + "fontFamily": "$typography/font-mono", + "fontSize": 15, + "fontWeight": "600" + } + ] + }, + { + "type": "text", + "id": "dsE3s", + "name": "Eyebrow", + "fill": "$accent/accent", + "content": "PRIVATE DASHBOARD", + "fontFamily": "$typography/font-mono", + "fontSize": 11, + "fontWeight": "normal", + "letterSpacing": 1.5 + }, + { + "type": "text", + "id": "CC9oc", + "name": "Title", + "fill": "$foreground/foreground", + "content": "Gameplane telemetry", + "fontFamily": "$typography/font-mono", + "fontSize": 24, + "fontWeight": "600" + }, + { + "type": "text", + "id": "c0nVDt", + "name": "Subtitle", + "fill": "$foreground/secondary", + "textGrowth": "fixed-width", + "width": "fill_container", + "content": "Private dashboard. Sign in with the dashboard token.", + "fontFamily": "$typography/font-sans", + "fontSize": 14, + "fontWeight": "normal" + } + ] + }, + { + "type": "frame", + "id": "MTBth", + "name": "Form", + "width": "fill_container", + "layout": "vertical", + "gap": 16, + "children": [ + { + "id": "w3zMra", + "type": "ref", + "ref": "Tu3H4", + "name": "Token field", + "width": "fill_container", + "descendants": { + "I4m7NO": { + "content": "Dashboard token" + }, + "DJsYb": { + "content": "••••••••••••••••••••••••" + }, + "PvRXY": { + "content": "The DASHBOARD_TOKEN value from the receiver's Secret." + } + } + }, + { + "id": "V9VTdg", + "type": "ref", + "ref": "hvQ4m", + "name": "Sign in", + "width": "fill_container", + "justifyContent": "center", + "descendants": { + "UYKSN": { + "enabled": false + }, + "y9bBK0": { + "content": "Sign in" + } + } + } + ] + } + ] + }, + { + "type": "frame", + "id": "eKQ9o", + "name": "Footer gap", + "width": 10, + "height": 24 + }, + { + "type": "text", + "id": "UKIoU", + "name": "Footnote", + "fill": "$foreground/muted", + "content": "Sessions last 12 hours. Rotating the token signs everyone out.", + "fontFamily": "$typography/font-sans", + "fontSize": 12, + "fontWeight": "normal" + } + ] + }, + { + "type": "frame", + "id": "a7wUpP", + "x": 5127.959083557127, + "y": 1020.8789062499995, + "name": "Receiver / Login — refused", + "theme": { + "semantic": "dark" + }, + "clip": true, + "width": 1440, + "height": 900, + "fill": "$background/background", + "layout": "vertical", + "justifyContent": "center", + "alignItems": "center", + "children": [ + { + "id": "v4MbR", + "type": "ref", + "ref": "f07b1", + "name": "Login card", + "width": 400, + "padding": 32, + "gap": 24, + "stroke": "$border", + "strokeWidth": 1, + "strokeAlignment": "inner", + "children": [ + { + "type": "frame", + "id": "ojnmT", + "name": "Heading", + "width": "fill_container", + "layout": "vertical", + "gap": 10, + "children": [ + { + "type": "frame", + "id": "d3ASU", + "name": "Brand", + "gap": 10, + "alignItems": "center", + "children": [ + { + "type": "rectangle", + "id": "tOXnc", + "name": "Logo", + "fill": { + "type": "image", + "enabled": true, + "url": "../website/design-assets/gameplane-icon.png", + "mode": "contain" + }, + "width": 24, + "height": 24 + }, + { + "type": "text", + "id": "Rj0dV", + "name": "Wordmark", + "fill": "$foreground/foreground", + "content": "gameplane", + "fontFamily": "$typography/font-mono", + "fontSize": 15, + "fontWeight": "600" + } + ] + }, + { + "type": "text", + "id": "E5yaH", + "name": "Eyebrow", + "fill": "$accent/accent", + "content": "PRIVATE DASHBOARD", + "fontFamily": "$typography/font-mono", + "fontSize": 11, + "fontWeight": "normal", + "letterSpacing": 1.5 + }, + { + "type": "text", + "id": "bVf7f", + "name": "Title", + "fill": "$foreground/foreground", + "content": "Gameplane telemetry", + "fontFamily": "$typography/font-mono", + "fontSize": 24, + "fontWeight": "600" + }, + { + "type": "text", + "id": "GZktc", + "name": "Subtitle", + "fill": "$foreground/secondary", + "textGrowth": "fixed-width", + "width": "fill_container", + "content": "Private dashboard. Sign in with the dashboard token.", + "fontFamily": "$typography/font-sans", + "fontSize": 14, + "fontWeight": "normal" + } + ] + }, + { + "id": "D2oxw0", + "type": "ref", + "ref": "YxI4e", + "name": "Refusal alert", + "width": "fill_container", + "descendants": { + "K5BCAi": { + "content": "Invalid credentials" + }, + "jLj0v": { + "enabled": false + }, + "BLuJ9": { + "enabled": false + } + } + }, + { + "type": "frame", + "id": "XgGt2", + "name": "Form", + "width": "fill_container", + "layout": "vertical", + "gap": 16, + "children": [ + { + "id": "lZ2GC", + "type": "ref", + "ref": "Tu3H4", + "name": "Token field", + "width": "fill_container", + "descendants": { + "I4m7NO": { + "content": "Dashboard token" + }, + "DJsYb": { + "content": "••••••••••••••••••••••••" + }, + "PvRXY": { + "content": "The DASHBOARD_TOKEN value from the receiver's Secret." + } + } + }, + { + "id": "W9k1fv", + "type": "ref", + "ref": "hvQ4m", + "name": "Sign in", + "width": "fill_container", + "justifyContent": "center", + "descendants": { + "UYKSN": { + "enabled": false + }, + "y9bBK0": { + "content": "Sign in" + } + } + } + ] + } + ] + }, + { + "type": "frame", + "id": "E1qJ3", + "name": "Footer gap", + "width": 10, + "height": 24 + }, + { + "type": "text", + "id": "vbkKX", + "name": "Footnote", + "fill": "$foreground/muted", + "content": "Sessions last 12 hours. Rotating the token signs everyone out.", + "fontFamily": "$typography/font-sans", + "fontSize": 12, + "fontWeight": "normal" + } + ] + }, + { + "type": "frame", + "id": "y49Ie", + "x": 3567.959083557127, + "y": 2040.8789062499995, + "name": "Telemetry components", + "theme": { + "semantic": "dark" + }, + "fill": "$background/background", + "gap": 48, + "padding": 32, + "children": [ + { + "type": "frame", + "id": "sDDfo", + "name": "Telemetry/Stat tile", + "reusable": true, + "width": 280, + "fill": "$surface/surface", + "cornerRadius": "$radius/3xl", + "stroke": "$border", + "strokeWidth": 1, + "strokeAlignment": "inner", + "effect": { + "type": "shadow", + "shadowType": "outer", + "color": "#0000000A", + "offset": { + "x": 0, + "y": 2 + }, + "blur": 4 + }, + "layout": "vertical", + "gap": 6, + "padding": 16, + "children": [ + { + "type": "text", + "id": "yia1E", + "name": "Label", + "fill": "$foreground/secondary", + "content": "Reports, latest day", + "fontFamily": "$typography/font-sans", + "fontSize": 13, + "fontWeight": "normal" + }, + { + "type": "text", + "id": "tZRdh", + "name": "Value", + "fill": "$foreground/foreground", + "content": "1,284", + "fontFamily": "$typography/font-sans", + "fontSize": 28, + "fontWeight": "600" + }, + { + "type": "text", + "id": "oPQEN", + "name": "Note", + "fill": "$foreground/muted", + "content": "2026-10-06 (UTC)", + "fontFamily": "$typography/font-sans", + "fontSize": 12, + "fontWeight": "normal" + } + ] + }, + { + "type": "frame", + "id": "wPbIp", + "name": "Telemetry/Share row", + "reusable": true, + "width": 420, + "gap": 12, + "alignItems": "center", + "children": [ + { + "type": "text", + "id": "j1J75", + "name": "Label", + "fill": "$foreground/foreground", + "textGrowth": "fixed-width", + "width": 128, + "content": "k3s", + "fontFamily": "$typography/font-sans", + "fontSize": 13, + "fontWeight": "normal" + }, + { + "type": "frame", + "id": "L6Z5jA", + "name": "Track", + "width": "fill_container", + "height": 12, + "children": [ + { + "type": "rectangle", + "cornerRadius": [ + 0, + 4, + 4, + 0 + ], + "id": "dMFUm", + "name": "Bar", + "fill": "$chart/series-1", + "width": 140, + "height": 12 + } + ] + }, + { + "type": "text", + "id": "uTqdm", + "name": "Value", + "fill": "$foreground/secondary", + "textGrowth": "fixed-width", + "width": 48, + "content": "48%", + "textAlign": "right", + "fontFamily": "$typography/font-sans", + "fontSize": 13, + "fontWeight": "normal" + } + ] + } + ] + }, + { + "type": "frame", + "id": "i0xK1E", + "x": 6727.959083557127, + "y": 1020.8789062499995, + "name": "Receiver / Overview", + "theme": { + "semantic": "dark" + }, + "clip": true, + "width": 1440, + "fill": "$background/background", + "layout": "vertical", + "children": [ + { + "type": "frame", + "id": "PrCYy", + "name": "Top bar", + "width": "fill_container", + "height": 64, + "stroke": "$border", + "strokeWidth": { + "bottom": 1 + }, + "strokeAlignment": "inner", + "padding": [ + 0, + 40 + ], + "justifyContent": "space_between", + "alignItems": "center", + "children": [ + { + "type": "frame", + "id": "EsFiy", + "name": "Brand", + "gap": 10, + "alignItems": "center", + "children": [ + { + "type": "rectangle", + "id": "RDJgN", + "name": "Logo", + "fill": { + "type": "image", + "enabled": true, + "url": "../website/design-assets/gameplane-icon.png", + "mode": "contain" + }, + "width": 24, + "height": 24 + }, + { + "type": "text", + "id": "ma9hV", + "name": "Wordmark", + "fill": "$foreground/foreground", + "content": "gameplane", + "fontFamily": "$typography/font-mono", + "fontSize": 15, + "fontWeight": "600" + }, + { + "type": "text", + "id": "bBhW1", + "name": "Slash", + "fill": "$foreground/muted", + "content": "/", + "fontFamily": "$typography/font-sans", + "fontSize": 15, + "fontWeight": "normal" + }, + { + "type": "text", + "id": "BZqrR", + "name": "Product", + "fill": "$foreground/foreground", + "content": "Telemetry", + "fontFamily": "$typography/font-sans", + "fontSize": 15, + "fontWeight": "normal" + }, + { + "id": "Y4ENwh", + "type": "ref", + "ref": "Q401P", + "name": "Approx chip", + "descendants": { + "wH6ey": { + "content": "Approximate · self-reported" + } + } + } + ] + }, + { + "type": "frame", + "id": "lIxVZ", + "name": "Session", + "gap": 16, + "alignItems": "center", + "children": [ + { + "type": "text", + "id": "W416z", + "name": "As of", + "fill": "$foreground/muted", + "content": "Data through 2026-10-06 (UTC)", + "fontFamily": "$typography/font-sans", + "fontSize": 13, + "fontWeight": "normal" + }, + { + "id": "vkzqR", + "type": "ref", + "ref": "bCpKh", + "name": "Sign out", + "descendants": { + "Watg8": { + "icon": "log-out" + }, + "U8ICg": { + "content": "Sign out" + } + } + } + ] + } + ] + }, + { + "type": "frame", + "id": "ZDH5z", + "name": "Content", + "width": "fill_container", + "layout": "vertical", + "gap": 32, + "padding": [ + 32, + 40, + 48, + 40 + ], + "children": [ + { + "type": "frame", + "id": "EEm5G", + "name": "Title row", + "width": "fill_container", + "justifyContent": "space_between", + "alignItems": "end", + "children": [ + { + "type": "frame", + "id": "cHCb4", + "name": "Title block", + "width": 760, + "layout": "vertical", + "gap": 8, + "children": [ + { + "type": "text", + "id": "BLOll", + "name": "Eyebrow", + "fill": "$accent/accent", + "content": "PROVIDER OVERVIEW", + "fontFamily": "$typography/font-mono", + "fontSize": 12, + "fontWeight": "normal", + "letterSpacing": 1.5 + }, + { + "type": "text", + "id": "gTaru", + "name": "Title", + "fill": "$foreground/foreground", + "content": "Usage across reporting installs", + "fontFamily": "$typography/font-mono", + "fontSize": 32, + "fontWeight": "600" + }, + { + "type": "text", + "id": "v8Ohz", + "name": "Subtitle", + "fill": "$foreground/muted", + "textGrowth": "fixed-width", + "width": "fill_container", + "content": "Daily aggregates from self-reported, anonymous reports. Every figure is approximate: installs choose to report, and nothing is verified beyond the report signature.", + "lineHeight": 1.5, + "fontFamily": "$typography/font-sans", + "fontSize": 15, + "fontWeight": "normal" + } + ] + }, + { + "id": "Gwgkx", + "type": "ref", + "ref": "sklNL", + "name": "Range", + "children": [ + { + "id": "spB9q", + "type": "ref", + "ref": "nO0GM", + "name": "7 days", + "descendants": { + "x5KZZd": { + "content": "7 days" + } + } + }, + { + "id": "CEvvH", + "type": "ref", + "ref": "iEQse", + "name": "30 days", + "descendants": { + "BtgBT": { + "content": "30 days" + } + } + }, + { + "id": "rcNte", + "type": "ref", + "ref": "nO0GM", + "name": "90 days", + "descendants": { + "x5KZZd": { + "content": "90 days" + } + } + }, + { + "id": "kZitx", + "type": "ref", + "ref": "nO0GM", + "name": "365 days", + "descendants": { + "x5KZZd": { + "content": "365 days" + } + } + } + ] + } + ] + }, + { + "type": "frame", + "id": "WyzQu", + "name": "Basic heading", + "width": "fill_container", + "layout": "vertical", + "gap": 4, + "children": [ + { + "type": "text", + "id": "NaBPb", + "name": "Heading", + "fill": "$foreground/foreground", + "content": "Basic reports", + "fontFamily": "$typography/font-mono", + "fontSize": 20, + "fontWeight": "600" + }, + { + "type": "text", + "id": "YTarC", + "name": "Sub", + "fill": "$foreground/muted", + "content": "Version, server count and template count from every report, basic or extended.", + "fontFamily": "$typography/font-sans", + "fontSize": 14, + "fontWeight": "normal" + } + ] + }, + { + "type": "frame", + "id": "iOskc", + "name": "Basic KPIs", + "width": "fill_container", + "gap": 16, + "children": [ + { + "id": "WySx8", + "type": "ref", + "ref": "sDDfo", + "name": "Reports, latest day", + "width": "fill_container", + "descendants": { + "yia1E": { + "content": "Reports, latest day" + }, + "tZRdh": { + "content": "1,284" + }, + "oPQEN": { + "content": "2026-10-06 (UTC)" + } + } + }, + { + "id": "kzCOI", + "type": "ref", + "ref": "sDDfo", + "name": "Reports, last 30 days", + "width": "fill_container", + "descendants": { + "yia1E": { + "content": "Reports, last 30 days" + }, + "tZRdh": { + "content": "37,912" + }, + "oPQEN": { + "content": "Sep 7 – Oct 6" + } + } + }, + { + "id": "hubU0", + "type": "ref", + "ref": "sDDfo", + "name": "Reports since collection began", + "width": "fill_container", + "descendants": { + "yia1E": { + "content": "Reports since collection began" + }, + "tZRdh": { + "content": "412,055" + }, + "oPQEN": { + "content": "Since 2026-03-02" + } + } + }, + { + "id": "LI86z", + "type": "ref", + "ref": "sDDfo", + "name": "Median servers per install", + "width": "fill_container", + "descendants": { + "yia1E": { + "content": "Median servers per install" + }, + "tZRdh": { + "content": "3" + }, + "oPQEN": { + "content": "Latest day; mean 4.6" + } + } + } + ] + }, + { + "type": "frame", + "id": "rTyW6", + "name": "Reports per day", + "width": "fill_container", + "fill": "$surface/surface", + "cornerRadius": "$radius/3xl", + "stroke": "$border", + "strokeWidth": 1, + "strokeAlignment": "inner", + "layout": "vertical", + "gap": 16, + "padding": 20, + "children": [ + { + "type": "frame", + "id": "EHBKg", + "name": "Header", + "width": "fill_container", + "justifyContent": "space_between", + "children": [ + { + "type": "frame", + "id": "poOcW", + "name": "Titles", + "layout": "vertical", + "gap": 4, + "children": [ + { + "type": "text", + "id": "wurGm", + "name": "Title", + "fill": "$foreground/foreground", + "content": "Reports per day", + "fontFamily": "$typography/font-sans", + "fontSize": 15, + "fontWeight": "600" + }, + { + "type": "text", + "id": "rZQiH", + "name": "Sub", + "fill": "$foreground/muted", + "content": "Accepted reports per UTC day, last 30 days", + "fontFamily": "$typography/font-sans", + "fontSize": 13, + "fontWeight": "normal" + } + ] + }, + { + "type": "text", + "id": "LWxly", + "name": "Table link", + "fill": "$accent/accent", + "content": "View as table", + "fontFamily": "$typography/font-sans", + "fontSize": 13, + "fontWeight": "normal" + } + ] + }, + { + "type": "frame", + "id": "FZz94", + "name": "Plot row", + "width": "fill_container", + "gap": 8, + "children": [ + { + "type": "frame", + "id": "r2jIv", + "name": "Y axis", + "width": 44, + "height": 208, + "layout": "vertical", + "justifyContent": "space_between", + "alignItems": "end", + "children": [ + { + "type": "text", + "id": "lDbNf", + "name": "Tick 1,500", + "fill": "$foreground/muted", + "content": "1,500", + "fontFamily": "$typography/font-sans", + "fontSize": 11, + "fontWeight": "normal" + }, + { + "type": "text", + "id": "gfX9J", + "name": "Tick 1,000", + "fill": "$foreground/muted", + "content": "1,000", + "fontFamily": "$typography/font-sans", + "fontSize": 11, + "fontWeight": "normal" + }, + { + "type": "text", + "id": "RpyKE", + "name": "Tick 500", + "fill": "$foreground/muted", + "content": "500", + "fontFamily": "$typography/font-sans", + "fontSize": 11, + "fontWeight": "normal" + }, + { + "type": "text", + "id": "uhswv", + "name": "Tick 0", + "fill": "$foreground/muted", + "content": "0", + "fontFamily": "$typography/font-sans", + "fontSize": 11, + "fontWeight": "normal" + } + ] + }, + { + "type": "frame", + "id": "itl6U", + "name": "Plot", + "width": 1260, + "height": 208, + "layout": "none", + "children": [ + { + "type": "rectangle", + "id": "ehS8J", + "x": 0, + "y": 4, + "name": "Grid 0", + "fill": "$chart/grid", + "width": 1260, + "height": 1 + }, + { + "type": "rectangle", + "id": "RM4fJ", + "x": 0, + "y": 70.66666666666667, + "name": "Grid 1", + "fill": "$chart/grid", + "width": 1260, + "height": 1 + }, + { + "type": "rectangle", + "id": "scHGZ", + "x": 0, + "y": 137.33333333333334, + "name": "Grid 2", + "fill": "$chart/grid", + "width": 1260, + "height": 1 + }, + { + "type": "rectangle", + "id": "DogbT", + "x": 0, + "y": 204, + "name": "Baseline", + "fill": "$chart/baseline", + "width": 1260, + "height": 1 + }, + { + "type": "frame", + "id": "z70gC", + "x": 0, + "y": -20, + "name": "Columns", + "width": 1260, + "height": 224, + "alignItems": "end", + "children": [ + { + "type": "frame", + "id": "z5eSP5", + "name": "Day 1", + "width": 42, + "layout": "vertical", + "gap": 4, + "alignItems": "center", + "children": [ + { + "type": "rectangle", + "cornerRadius": [ + 4, + 4, + 0, + 0 + ], + "id": "NpPE9", + "name": "Column", + "fill": "$chart/series-1", + "width": 20, + "height": 149 + } + ] + }, + { + "type": "frame", + "id": "InasO", + "name": "Day 2", + "width": 42, + "layout": "vertical", + "gap": 4, + "alignItems": "center", + "children": [ + { + "type": "rectangle", + "cornerRadius": [ + 4, + 4, + 0, + 0 + ], + "id": "blVmn", + "name": "Column", + "fill": "$chart/series-1", + "width": 20, + "height": 152 + } + ] + }, + { + "type": "frame", + "id": "S0c3P5", + "name": "Day 3", + "width": 42, + "layout": "vertical", + "gap": 4, + "alignItems": "center", + "children": [ + { + "type": "rectangle", + "cornerRadius": [ + 4, + 4, + 0, + 0 + ], + "id": "xVz1h", + "name": "Column", + "fill": "$chart/series-1", + "width": 20, + "height": 153 + } + ] + }, + { + "type": "frame", + "id": "gIes7", + "name": "Day 4", + "width": 42, + "layout": "vertical", + "gap": 4, + "alignItems": "center", + "children": [ + { + "type": "rectangle", + "cornerRadius": [ + 4, + 4, + 0, + 0 + ], + "id": "h00jy", + "name": "Column", + "fill": "$chart/series-1", + "width": 20, + "height": 155 + } + ] + }, + { + "type": "frame", + "id": "cZqOZ", + "name": "Day 5", + "width": 42, + "layout": "vertical", + "gap": 4, + "alignItems": "center", + "children": [ + { + "type": "rectangle", + "cornerRadius": [ + 4, + 4, + 0, + 0 + ], + "id": "S4olM", + "name": "Column", + "fill": "$chart/series-1", + "width": 20, + "height": 156 + } + ] + }, + { + "type": "frame", + "id": "zpa9L", + "name": "Day 6", + "width": 42, + "layout": "vertical", + "gap": 4, + "alignItems": "center", + "children": [ + { + "type": "rectangle", + "cornerRadius": [ + 4, + 4, + 0, + 0 + ], + "id": "akFYW", + "name": "Column", + "fill": "$chart/series-1", + "width": 20, + "height": 147 + } + ] + }, + { + "type": "frame", + "id": "UQMno", + "name": "Day 7", + "width": 42, + "layout": "vertical", + "gap": 4, + "alignItems": "center", + "children": [ + { + "type": "rectangle", + "cornerRadius": [ + 4, + 4, + 0, + 0 + ], + "id": "K4f0E8", + "name": "Column", + "fill": "$chart/series-1", + "width": 20, + "height": 145 + } + ] + }, + { + "type": "frame", + "id": "ZtVqm", + "name": "Day 8", + "width": 42, + "layout": "vertical", + "gap": 4, + "alignItems": "center", + "children": [ + { + "type": "rectangle", + "cornerRadius": [ + 4, + 4, + 0, + 0 + ], + "id": "c41OTM", + "name": "Column", + "fill": "$chart/series-1", + "width": 20, + "height": 155 + } + ] + }, + { + "type": "frame", + "id": "CzyFK", + "name": "Day 9", + "width": 42, + "layout": "vertical", + "gap": 4, + "alignItems": "center", + "children": [ + { + "type": "rectangle", + "cornerRadius": [ + 4, + 4, + 0, + 0 + ], + "id": "wuxFw", + "name": "Column", + "fill": "$chart/series-1", + "width": 20, + "height": 157 + } + ] + }, + { + "type": "frame", + "id": "JkRh7", + "name": "Day 10", + "width": 42, + "layout": "vertical", + "gap": 4, + "alignItems": "center", + "children": [ + { + "type": "rectangle", + "cornerRadius": [ + 4, + 4, + 0, + 0 + ], + "id": "O0XwqM", + "name": "Column", + "fill": "$chart/series-1", + "width": 20, + "height": 159 + } + ] + }, + { + "type": "frame", + "id": "GPoP1", + "name": "Day 11", + "width": 42, + "layout": "vertical", + "gap": 4, + "alignItems": "center", + "children": [ + { + "type": "rectangle", + "cornerRadius": [ + 4, + 4, + 0, + 0 + ], + "id": "jJg0u", + "name": "Column", + "fill": "$chart/series-1", + "width": 20, + "height": 160 + } + ] + }, + { + "type": "frame", + "id": "IKV9c", + "name": "Day 12", + "width": 42, + "layout": "vertical", + "gap": 4, + "alignItems": "center", + "children": [ + { + "type": "rectangle", + "cornerRadius": [ + 4, + 4, + 0, + 0 + ], + "id": "AVr3K", + "name": "Column", + "fill": "$chart/series-1", + "width": 20, + "height": 161 + } + ] + }, + { + "type": "frame", + "id": "YaNBo", + "name": "Day 13", + "width": 42, + "layout": "vertical", + "gap": 4, + "alignItems": "center", + "children": [ + { + "type": "rectangle", + "cornerRadius": [ + 4, + 4, + 0, + 0 + ], + "id": "xrTlP", + "name": "Column", + "fill": "$chart/series-1", + "width": 20, + "height": 151 + } + ] + }, + { + "type": "frame", + "id": "KxeCR", + "name": "Day 14", + "width": 42, + "layout": "vertical", + "gap": 4, + "alignItems": "center", + "children": [ + { + "type": "rectangle", + "cornerRadius": [ + 4, + 4, + 0, + 0 + ], + "id": "wNeIt", + "name": "Column", + "fill": "$chart/series-1", + "width": 20, + "height": 149 + } + ] + }, + { + "type": "frame", + "id": "jUFhJ", + "name": "Day 15", + "width": 42, + "layout": "vertical", + "gap": 4, + "alignItems": "center", + "children": [ + { + "type": "rectangle", + "cornerRadius": [ + 4, + 4, + 0, + 0 + ], + "id": "S2bIOp", + "name": "Column", + "fill": "$chart/series-1", + "width": 20, + "height": 160 + } + ] + }, + { + "type": "frame", + "id": "wniFH", + "name": "Day 16", + "width": 42, + "layout": "vertical", + "gap": 4, + "alignItems": "center", + "children": [ + { + "type": "rectangle", + "cornerRadius": [ + 4, + 4, + 0, + 0 + ], + "id": "G4H63L", + "name": "Column", + "fill": "$chart/series-1", + "width": 20, + "height": 162 + } + ] + }, + { + "type": "frame", + "id": "xUpKT", + "name": "Day 17", + "width": 42, + "layout": "vertical", + "gap": 4, + "alignItems": "center", + "children": [ + { + "type": "rectangle", + "cornerRadius": [ + 4, + 4, + 0, + 0 + ], + "id": "ylFmR", + "name": "Column", + "fill": "$chart/series-1", + "width": 20, + "height": 163 + } + ] + }, + { + "type": "frame", + "id": "LVN8u", + "name": "Day 18", + "width": 42, + "layout": "vertical", + "gap": 4, + "alignItems": "center", + "children": [ + { + "type": "rectangle", + "cornerRadius": [ + 4, + 4, + 0, + 0 + ], + "id": "JNSrg", + "name": "Column", + "fill": "$chart/series-1", + "width": 20, + "height": 164 + } + ] + }, + { + "type": "frame", + "id": "p7bhT", + "name": "Day 19", + "width": 42, + "layout": "vertical", + "gap": 4, + "alignItems": "center", + "children": [ + { + "type": "rectangle", + "cornerRadius": [ + 4, + 4, + 0, + 0 + ], + "id": "YvPGq", + "name": "Column", + "fill": "$chart/series-1", + "width": 20, + "height": 166 + } + ] + }, + { + "type": "frame", + "id": "tzVMN", + "name": "Day 20", + "width": 42, + "layout": "vertical", + "gap": 4, + "alignItems": "center", + "children": [ + { + "type": "rectangle", + "cornerRadius": [ + 4, + 4, + 0, + 0 + ], + "id": "Cwn6p", + "name": "Column", + "fill": "$chart/series-1", + "width": 20, + "height": 155 + } + ] + }, + { + "type": "frame", + "id": "jt3C1", + "name": "Day 21", + "width": 42, + "layout": "vertical", + "gap": 4, + "alignItems": "center", + "children": [ + { + "type": "rectangle", + "cornerRadius": [ + 4, + 4, + 0, + 0 + ], + "id": "B3ZW9n", + "name": "Column", + "fill": "$chart/series-1", + "width": 20, + "height": 152 + } + ] + }, + { + "type": "frame", + "id": "qsYxX", + "name": "Day 22", + "width": 42, + "layout": "vertical", + "gap": 4, + "alignItems": "center", + "children": [ + { + "type": "rectangle", + "cornerRadius": [ + 4, + 4, + 0, + 0 + ], + "id": "VOVr1", + "name": "Column", + "fill": "$chart/series-1", + "width": 20, + "height": 163 + } + ] + }, + { + "type": "frame", + "id": "myPLG", + "name": "Day 23", + "width": 42, + "layout": "vertical", + "gap": 4, + "alignItems": "center", + "children": [ + { + "type": "rectangle", + "cornerRadius": [ + 4, + 4, + 0, + 0 + ], + "id": "t1rje", + "name": "Column", + "fill": "$chart/series-1", + "width": 20, + "height": 165 + } + ] + }, + { + "type": "frame", + "id": "NV5dX", + "name": "Day 24", + "width": 42, + "layout": "vertical", + "gap": 4, + "alignItems": "center", + "children": [ + { + "type": "rectangle", + "cornerRadius": [ + 4, + 4, + 0, + 0 + ], + "id": "zGHCv", + "name": "Column", + "fill": "$chart/series-1", + "width": 20, + "height": 167 + } + ] + }, + { + "type": "frame", + "id": "UbiJU", + "name": "Day 25", + "width": 42, + "layout": "vertical", + "gap": 4, + "alignItems": "center", + "children": [ + { + "type": "rectangle", + "cornerRadius": [ + 4, + 4, + 0, + 0 + ], + "id": "T2GSn7", + "name": "Column", + "fill": "$chart/series-1", + "width": 20, + "height": 168 + } + ] + }, + { + "type": "frame", + "id": "thEOO", + "name": "Day 26", + "width": 42, + "layout": "vertical", + "gap": 4, + "alignItems": "center", + "children": [ + { + "type": "rectangle", + "cornerRadius": [ + 4, + 4, + 0, + 0 + ], + "id": "LbbCa", + "name": "Column", + "fill": "$chart/series-1", + "width": 20, + "height": 169 + } + ] + }, + { + "type": "frame", + "id": "N08Apm", + "name": "Day 27", + "width": 42, + "layout": "vertical", + "gap": 4, + "alignItems": "center", + "children": [ + { + "type": "rectangle", + "cornerRadius": [ + 4, + 4, + 0, + 0 + ], + "id": "jyLUn", + "name": "Column", + "fill": "$chart/series-1", + "width": 20, + "height": 158 + } + ] + }, + { + "type": "frame", + "id": "gNm4A", + "name": "Day 28", + "width": 42, + "layout": "vertical", + "gap": 4, + "alignItems": "center", + "children": [ + { + "type": "rectangle", + "cornerRadius": [ + 4, + 4, + 0, + 0 + ], + "id": "fSZus", + "name": "Column", + "fill": "$chart/series-1", + "width": 20, + "height": 157 + } + ] + }, + { + "type": "frame", + "id": "cvTAF", + "name": "Day 29", + "width": 42, + "layout": "vertical", + "gap": 4, + "alignItems": "center", + "children": [ + { + "type": "rectangle", + "cornerRadius": [ + 4, + 4, + 0, + 0 + ], + "id": "M8UwO0", + "name": "Column", + "fill": "$chart/series-1", + "width": 20, + "height": 168 + } + ] + }, + { + "type": "frame", + "id": "snyg0", + "name": "Day 30", + "width": 42, + "layout": "vertical", + "gap": 4, + "alignItems": "center", + "children": [ + { + "type": "text", + "id": "rbAnN", + "name": "Value label", + "fill": "$foreground/foreground", + "content": "1,284", + "fontFamily": "$typography/font-sans", + "fontSize": 11, + "fontWeight": "600" + }, + { + "type": "rectangle", + "cornerRadius": [ + 4, + 4, + 0, + 0 + ], + "id": "g1YRBL", + "name": "Column", + "fill": "$chart/series-1", + "width": 20, + "height": 171 + } + ] + } + ] + } + ] + } + ] + }, + { + "type": "frame", + "id": "Bt3QV", + "name": "X axis", + "width": "fill_container", + "padding": [ + 0, + 0, + 0, + 52 + ], + "children": [ + { + "type": "frame", + "id": "M4cUj", + "name": "X 1", + "width": 42, + "height": 14, + "justifyContent": "center", + "children": [ + { + "type": "text", + "id": "S4zhC", + "name": "Label", + "fill": "$foreground/muted", + "content": "Sep 7", + "fontFamily": "$typography/font-sans", + "fontSize": 11, + "fontWeight": "normal" + } + ] + }, + { + "type": "frame", + "id": "irNR9", + "name": "X 2", + "width": 42, + "height": 14, + "justifyContent": "center" + }, + { + "type": "frame", + "id": "XTio8", + "name": "X 3", + "width": 42, + "height": 14, + "justifyContent": "center" + }, + { + "type": "frame", + "id": "k38ubo", + "name": "X 4", + "width": 42, + "height": 14, + "justifyContent": "center" + }, + { + "type": "frame", + "id": "meJSb", + "name": "X 5", + "width": 42, + "height": 14, + "justifyContent": "center" + }, + { + "type": "frame", + "id": "fvMy1", + "name": "X 6", + "width": 42, + "height": 14, + "justifyContent": "center" + }, + { + "type": "frame", + "id": "Gi10h", + "name": "X 7", + "width": 42, + "height": 14, + "justifyContent": "center" + }, + { + "type": "frame", + "id": "sxkq4", + "name": "X 8", + "width": 42, + "height": 14, + "justifyContent": "center", + "children": [ + { + "type": "text", + "id": "W8qe74", + "name": "Label", + "fill": "$foreground/muted", + "content": "Sep 14", + "fontFamily": "$typography/font-sans", + "fontSize": 11, + "fontWeight": "normal" + } + ] + }, + { + "type": "frame", + "id": "c8FG2", + "name": "X 9", + "width": 42, + "height": 14, + "justifyContent": "center" + }, + { + "type": "frame", + "id": "xlbNh", + "name": "X 10", + "width": 42, + "height": 14, + "justifyContent": "center" + }, + { + "type": "frame", + "id": "MTXE9", + "name": "X 11", + "width": 42, + "height": 14, + "justifyContent": "center" + }, + { + "type": "frame", + "id": "vQUPg", + "name": "X 12", + "width": 42, + "height": 14, + "justifyContent": "center" + }, + { + "type": "frame", + "id": "A0jjv", + "name": "X 13", + "width": 42, + "height": 14, + "justifyContent": "center" + }, + { + "type": "frame", + "id": "KuEti", + "name": "X 14", + "width": 42, + "height": 14, + "justifyContent": "center" + }, + { + "type": "frame", + "id": "WG8Df", + "name": "X 15", + "width": 42, + "height": 14, + "justifyContent": "center", + "children": [ + { + "type": "text", + "id": "MUVNi", + "name": "Label", + "fill": "$foreground/muted", + "content": "Sep 21", + "fontFamily": "$typography/font-sans", + "fontSize": 11, + "fontWeight": "normal" + } + ] + }, + { + "type": "frame", + "id": "fXfoH", + "name": "X 16", + "width": 42, + "height": 14, + "justifyContent": "center" + }, + { + "type": "frame", + "id": "vMXSq", + "name": "X 17", + "width": 42, + "height": 14, + "justifyContent": "center" + }, + { + "type": "frame", + "id": "qf1sj", + "name": "X 18", + "width": 42, + "height": 14, + "justifyContent": "center" + }, + { + "type": "frame", + "id": "YzSdz", + "name": "X 19", + "width": 42, + "height": 14, + "justifyContent": "center" + }, + { + "type": "frame", + "id": "ENZVx", + "name": "X 20", + "width": 42, + "height": 14, + "justifyContent": "center" + }, + { + "type": "frame", + "id": "x0qIV", + "name": "X 21", + "width": 42, + "height": 14, + "justifyContent": "center" + }, + { + "type": "frame", + "id": "Og5PT", + "name": "X 22", + "width": 42, + "height": 14, + "justifyContent": "center", + "children": [ + { + "type": "text", + "id": "n2HIzG", + "name": "Label", + "fill": "$foreground/muted", + "content": "Sep 28", + "fontFamily": "$typography/font-sans", + "fontSize": 11, + "fontWeight": "normal" + } + ] + }, + { + "type": "frame", + "id": "d67ks", + "name": "X 23", + "width": 42, + "height": 14, + "justifyContent": "center" + }, + { + "type": "frame", + "id": "SE93c", + "name": "X 24", + "width": 42, + "height": 14, + "justifyContent": "center" + }, + { + "type": "frame", + "id": "iusfp", + "name": "X 25", + "width": 42, + "height": 14, + "justifyContent": "center" + }, + { + "type": "frame", + "id": "etd4K", + "name": "X 26", + "width": 42, + "height": 14, + "justifyContent": "center" + }, + { + "type": "frame", + "id": "lGgoB", + "name": "X 27", + "width": 42, + "height": 14, + "justifyContent": "center" + }, + { + "type": "frame", + "id": "jH0Zu", + "name": "X 28", + "width": 42, + "height": 14, + "justifyContent": "center" + }, + { + "type": "frame", + "id": "A29IAZ", + "name": "X 29", + "width": 42, + "height": 14, + "justifyContent": "center", + "children": [ + { + "type": "text", + "id": "kTkYU", + "name": "Label", + "fill": "$foreground/muted", + "content": "Oct 5", + "fontFamily": "$typography/font-sans", + "fontSize": 11, + "fontWeight": "normal" + } + ] + }, + { + "type": "frame", + "id": "IPQap", + "name": "X 30", + "width": 42, + "height": 14, + "justifyContent": "center" + } + ] + } + ] + }, + { + "type": "frame", + "id": "p8RL2", + "name": "Basic breakdowns", + "width": "fill_container", + "gap": 16, + "children": [ + { + "type": "frame", + "id": "Waady", + "name": "Versions", + "width": "fill_container", + "fill": "$surface/surface", + "cornerRadius": "$radius/3xl", + "stroke": "$border", + "strokeWidth": 1, + "strokeAlignment": "inner", + "layout": "vertical", + "gap": 16, + "padding": 20, + "children": [ + { + "type": "frame", + "id": "BTPQR", + "name": "Titles", + "layout": "vertical", + "gap": 4, + "children": [ + { + "type": "text", + "id": "HlgPb", + "name": "Title", + "fill": "$foreground/foreground", + "content": "Versions", + "fontFamily": "$typography/font-sans", + "fontSize": 15, + "fontWeight": "600" + }, + { + "type": "text", + "id": "uO6sB", + "name": "Sub", + "fill": "$foreground/muted", + "textGrowth": "fixed-width", + "width": 600, + "content": "Reports on the latest day by reported version. Top 10, then Other and Invalid.", + "fontFamily": "$typography/font-sans", + "fontSize": 13, + "fontWeight": "normal" + } + ] + }, + { + "type": "frame", + "id": "jjkwN", + "name": "Bars", + "width": "fill_container", + "layout": "vertical", + "gap": 10, + "children": [ + { + "id": "UYCro", + "type": "ref", + "ref": "wPbIp", + "name": "Version 0.3.0", + "width": "fill_container", + "descendants": { + "j1J75": { + "content": "0.3.0", + "fill": "$foreground/foreground" + }, + "dMFUm": { + "width": 432 + }, + "uTqdm": { + "content": "812" + } + } + }, + { + "id": "GIRd2", + "type": "ref", + "ref": "wPbIp", + "name": "Version 0.3.0-rc.1", + "width": "fill_container", + "descendants": { + "j1J75": { + "content": "0.3.0-rc.1", + "fill": "$foreground/foreground" + }, + "dMFUm": { + "width": 107 + }, + "uTqdm": { + "content": "201" + } + } + }, + { + "id": "tKNOd", + "type": "ref", + "ref": "wPbIp", + "name": "Version 0.2.0-beta.8", + "width": "fill_container", + "descendants": { + "j1J75": { + "content": "0.2.0-beta.8", + "fill": "$foreground/foreground" + }, + "dMFUm": { + "width": 76 + }, + "uTqdm": { + "content": "143" + } + } + }, + { + "id": "o7v436", + "type": "ref", + "ref": "wPbIp", + "name": "Version 0.2.0-beta.7", + "width": "fill_container", + "descendants": { + "j1J75": { + "content": "0.2.0-beta.7", + "fill": "$foreground/foreground" + }, + "dMFUm": { + "width": 32 + }, + "uTqdm": { + "content": "61" + } + } + }, + { + "id": "vmMgu", + "type": "ref", + "ref": "wPbIp", + "name": "Version 0.2.0-beta.6", + "width": "fill_container", + "descendants": { + "j1J75": { + "content": "0.2.0-beta.6", + "fill": "$foreground/foreground" + }, + "dMFUm": { + "width": 14 + }, + "uTqdm": { + "content": "27" + } + } + }, + { + "id": "J6DG4", + "type": "ref", + "ref": "wPbIp", + "name": "Version 0.2.0-beta.5", + "width": "fill_container", + "descendants": { + "j1J75": { + "content": "0.2.0-beta.5", + "fill": "$foreground/foreground" + }, + "dMFUm": { + "width": 5 + }, + "uTqdm": { + "content": "9" + } + } + }, + { + "id": "n1k1ys", + "type": "ref", + "ref": "wPbIp", + "name": "Version dev", + "width": "fill_container", + "descendants": { + "j1J75": { + "content": "dev", + "fill": "$foreground/foreground" + }, + "dMFUm": { + "width": 2 + }, + "uTqdm": { + "content": "4" + } + } + }, + { + "id": "aFTHI", + "type": "ref", + "ref": "wPbIp", + "name": "Version Other", + "width": "fill_container", + "descendants": { + "j1J75": { + "content": "Other", + "fill": "$foreground/muted" + }, + "dMFUm": { + "width": 13 + }, + "uTqdm": { + "content": "24" + } + } + }, + { + "id": "EmQ33", + "type": "ref", + "ref": "wPbIp", + "name": "Version Invalid", + "width": "fill_container", + "descendants": { + "j1J75": { + "content": "Invalid", + "fill": "$foreground/muted" + }, + "dMFUm": { + "width": 2 + }, + "uTqdm": { + "content": "3" + } + } + } + ] + } + ] + }, + { + "type": "frame", + "id": "U44h65", + "name": "Fleet size", + "width": "fill_container", + "fill": "$surface/surface", + "cornerRadius": "$radius/3xl", + "stroke": "$border", + "strokeWidth": 1, + "strokeAlignment": "inner", + "layout": "vertical", + "gap": 16, + "padding": 20, + "children": [ + { + "type": "frame", + "id": "DIXJG", + "name": "Titles", + "layout": "vertical", + "gap": 4, + "children": [ + { + "type": "text", + "id": "adjqS", + "name": "Title", + "fill": "$foreground/foreground", + "content": "Servers per install", + "fontFamily": "$typography/font-sans", + "fontSize": 15, + "fontWeight": "600" + }, + { + "type": "text", + "id": "YGPWl", + "name": "Sub", + "fill": "$foreground/muted", + "textGrowth": "fixed-width", + "width": 600, + "content": "Installs on the latest day by game-server count. Median 3, mean 4.6.", + "fontFamily": "$typography/font-sans", + "fontSize": 13, + "fontWeight": "normal" + } + ] + }, + { + "type": "frame", + "id": "YDYbk", + "name": "Plot row", + "width": "fill_container", + "gap": 8, + "children": [ + { + "type": "frame", + "id": "mpEfM", + "name": "Y axis", + "width": 44, + "height": 188, + "layout": "vertical", + "justifyContent": "space_between", + "alignItems": "end", + "children": [ + { + "type": "text", + "id": "nT2NS", + "name": "Tick 400", + "fill": "$foreground/muted", + "content": "400", + "fontFamily": "$typography/font-sans", + "fontSize": 11, + "fontWeight": "normal" + }, + { + "type": "text", + "id": "iL2Mm", + "name": "Tick 200", + "fill": "$foreground/muted", + "content": "200", + "fontFamily": "$typography/font-sans", + "fontSize": 11, + "fontWeight": "normal" + }, + { + "type": "text", + "id": "ovHB0", + "name": "Tick 0", + "fill": "$foreground/muted", + "content": "0", + "fontFamily": "$typography/font-sans", + "fontSize": 11, + "fontWeight": "normal" + } + ] + }, + { + "type": "frame", + "id": "CG2nD", + "name": "Plot", + "width": 580, + "height": 188, + "layout": "none", + "children": [ + { + "type": "rectangle", + "id": "aXWl4", + "x": 0, + "y": 94, + "name": "Grid mid", + "fill": "$chart/grid", + "width": 580, + "height": 1 + }, + { + "type": "rectangle", + "id": "cYdRA", + "x": 0, + "y": 4, + "name": "Grid top", + "fill": "$chart/grid", + "width": 580, + "height": 1 + }, + { + "type": "rectangle", + "id": "rszg8", + "x": 0, + "y": 184, + "name": "Baseline", + "fill": "$chart/baseline", + "width": 580, + "height": 1 + }, + { + "type": "frame", + "id": "s9D8Th", + "x": 0, + "y": -16, + "name": "Columns", + "width": 580, + "height": 200, + "alignItems": "end", + "children": [ + { + "type": "frame", + "id": "reyUt", + "name": "Band 0", + "width": 58, + "layout": "vertical", + "gap": 4, + "alignItems": "center", + "children": [ + { + "type": "rectangle", + "cornerRadius": [ + 4, + 4, + 0, + 0 + ], + "id": "p84xhn", + "name": "Column", + "fill": "$chart/series-1", + "width": 24, + "height": 18 + } + ] + }, + { + "type": "frame", + "id": "RpQdP", + "name": "Band 1", + "width": 58, + "layout": "vertical", + "gap": 4, + "alignItems": "center", + "children": [ + { + "type": "text", + "id": "C6TPdA", + "name": "Value label", + "fill": "$foreground/foreground", + "content": "388", + "fontFamily": "$typography/font-sans", + "fontSize": 11, + "fontWeight": "600" + }, + { + "type": "rectangle", + "cornerRadius": [ + 4, + 4, + 0, + 0 + ], + "id": "AaTqq", + "name": "Column", + "fill": "$chart/series-1", + "width": 24, + "height": 175 + } + ] + }, + { + "type": "frame", + "id": "ho3un", + "name": "Band 2", + "width": 58, + "layout": "vertical", + "gap": 4, + "alignItems": "center", + "children": [ + { + "type": "rectangle", + "cornerRadius": [ + 4, + 4, + 0, + 0 + ], + "id": "wAb0H", + "name": "Column", + "fill": "$chart/series-1", + "width": 24, + "height": 111 + } + ] + }, + { + "type": "frame", + "id": "s0YGas", + "name": "Band 3–5", + "width": 58, + "layout": "vertical", + "gap": 4, + "alignItems": "center", + "children": [ + { + "type": "rectangle", + "cornerRadius": [ + 4, + 4, + 0, + 0 + ], + "id": "lNkS6", + "name": "Column", + "fill": "$chart/series-1", + "width": 24, + "height": 153 + } + ] + }, + { + "type": "frame", + "id": "dpBDC", + "name": "Band 6–10", + "width": 58, + "layout": "vertical", + "gap": 4, + "alignItems": "center", + "children": [ + { + "type": "rectangle", + "cornerRadius": [ + 4, + 4, + 0, + 0 + ], + "id": "hiiSo", + "name": "Column", + "fill": "$chart/series-1", + "width": 24, + "height": 68 + } + ] + }, + { + "type": "frame", + "id": "Pp20f", + "name": "Band 11–25", + "width": 58, + "layout": "vertical", + "gap": 4, + "alignItems": "center", + "children": [ + { + "type": "rectangle", + "cornerRadius": [ + 4, + 4, + 0, + 0 + ], + "id": "c0IdCw", + "name": "Column", + "fill": "$chart/series-1", + "width": 24, + "height": 35 + } + ] + }, + { + "type": "frame", + "id": "bUATG", + "name": "Band 26–50", + "width": 58, + "layout": "vertical", + "gap": 4, + "alignItems": "center", + "children": [ + { + "type": "rectangle", + "cornerRadius": [ + 4, + 4, + 0, + 0 + ], + "id": "AWB3G", + "name": "Column", + "fill": "$chart/series-1", + "width": 24, + "height": 11 + } + ] + }, + { + "type": "frame", + "id": "Ln3uf", + "name": "Band 51–100", + "width": 58, + "layout": "vertical", + "gap": 4, + "alignItems": "center", + "children": [ + { + "type": "rectangle", + "cornerRadius": [ + 4, + 4, + 0, + 0 + ], + "id": "l9OsCk", + "name": "Column", + "fill": "$chart/series-1", + "width": 24, + "height": 4 + } + ] + }, + { + "type": "frame", + "id": "VwdWm", + "name": "Band 101–250", + "width": 58, + "layout": "vertical", + "gap": 4, + "alignItems": "center", + "children": [ + { + "type": "rectangle", + "cornerRadius": [ + 4, + 4, + 0, + 0 + ], + "id": "yUnHi", + "name": "Column", + "fill": "$chart/series-1", + "width": 24, + "height": 2 + } + ] + }, + { + "type": "frame", + "id": "d07UWo", + "name": "Band 250+", + "width": 58, + "layout": "vertical", + "gap": 4, + "alignItems": "center", + "children": [ + { + "type": "rectangle", + "cornerRadius": [ + 4, + 4, + 0, + 0 + ], + "id": "vcnPm", + "name": "Column", + "fill": "$chart/series-1", + "width": 24, + "height": 2 + } + ] + } + ] + } + ] + } + ] + }, + { + "type": "frame", + "id": "J39J9", + "name": "X axis", + "width": "fill_container", + "padding": [ + 0, + 0, + 0, + 52 + ], + "children": [ + { + "type": "frame", + "id": "J3Ib1", + "name": "X 0", + "width": 58, + "height": 14, + "justifyContent": "center", + "children": [ + { + "type": "text", + "id": "TqaxM", + "name": "Label", + "fill": "$foreground/muted", + "content": "0", + "fontFamily": "$typography/font-sans", + "fontSize": 11, + "fontWeight": "normal" + } + ] + }, + { + "type": "frame", + "id": "uRPEI", + "name": "X 1", + "width": 58, + "height": 14, + "justifyContent": "center", + "children": [ + { + "type": "text", + "id": "zDLJt", + "name": "Label", + "fill": "$foreground/muted", + "content": "1", + "fontFamily": "$typography/font-sans", + "fontSize": 11, + "fontWeight": "normal" + } + ] + }, + { + "type": "frame", + "id": "h7vLr", + "name": "X 2", + "width": 58, + "height": 14, + "justifyContent": "center", + "children": [ + { + "type": "text", + "id": "yLtgH", + "name": "Label", + "fill": "$foreground/muted", + "content": "2", + "fontFamily": "$typography/font-sans", + "fontSize": 11, + "fontWeight": "normal" + } + ] + }, + { + "type": "frame", + "id": "TtGcG", + "name": "X 3–5", + "width": 58, + "height": 14, + "justifyContent": "center", + "children": [ + { + "type": "text", + "id": "vHWYV", + "name": "Label", + "fill": "$foreground/muted", + "content": "3–5", + "fontFamily": "$typography/font-sans", + "fontSize": 11, + "fontWeight": "normal" + } + ] + }, + { + "type": "frame", + "id": "nG5OI", + "name": "X 6–10", + "width": 58, + "height": 14, + "justifyContent": "center", + "children": [ + { + "type": "text", + "id": "ecex2", + "name": "Label", + "fill": "$foreground/muted", + "content": "6–10", + "fontFamily": "$typography/font-sans", + "fontSize": 11, + "fontWeight": "normal" + } + ] + }, + { + "type": "frame", + "id": "ENTZH", + "name": "X 11–25", + "width": 58, + "height": 14, + "justifyContent": "center", + "children": [ + { + "type": "text", + "id": "nOODW", + "name": "Label", + "fill": "$foreground/muted", + "content": "11–25", + "fontFamily": "$typography/font-sans", + "fontSize": 11, + "fontWeight": "normal" + } + ] + }, + { + "type": "frame", + "id": "Th42X", + "name": "X 26–50", + "width": 58, + "height": 14, + "justifyContent": "center", + "children": [ + { + "type": "text", + "id": "YQgnf", + "name": "Label", + "fill": "$foreground/muted", + "content": "26–50", + "fontFamily": "$typography/font-sans", + "fontSize": 11, + "fontWeight": "normal" + } + ] + }, + { + "type": "frame", + "id": "w9yqCf", + "name": "X 51–100", + "width": 58, + "height": 14, + "justifyContent": "center", + "children": [ + { + "type": "text", + "id": "Deys8", + "name": "Label", + "fill": "$foreground/muted", + "content": "51–100", + "fontFamily": "$typography/font-sans", + "fontSize": 11, + "fontWeight": "normal" + } + ] + }, + { + "type": "frame", + "id": "qm5a7", + "name": "X 101–250", + "width": 58, + "height": 14, + "justifyContent": "center", + "children": [ + { + "type": "text", + "id": "vDHQs", + "name": "Label", + "fill": "$foreground/muted", + "content": "101–250", + "fontFamily": "$typography/font-sans", + "fontSize": 11, + "fontWeight": "normal" + } + ] + }, + { + "type": "frame", + "id": "NLU1i", + "name": "X 250+", + "width": 58, + "height": 14, + "justifyContent": "center", + "children": [ + { + "type": "text", + "id": "MY7si", + "name": "Label", + "fill": "$foreground/muted", + "content": "250+", + "fontFamily": "$typography/font-sans", + "fontSize": 11, + "fontWeight": "normal" + } + ] + } + ] + }, + { + "type": "text", + "id": "KeDpH", + "name": "Axis title", + "fill": "$foreground/muted", + "content": "Game servers per install", + "fontFamily": "$typography/font-sans", + "fontSize": 11, + "fontWeight": "normal" + } + ] + } + ] + }, + { + "type": "rectangle", + "id": "N3PIj", + "name": "Section divider", + "fill": "$separator/separator", + "width": "fill_container", + "height": 1 + }, + { + "type": "frame", + "id": "oW2pt", + "name": "Extended heading", + "width": "fill_container", + "justifyContent": "space_between", + "alignItems": "end", + "children": [ + { + "type": "frame", + "id": "D8zEc", + "name": "Titles", + "width": 900, + "layout": "vertical", + "gap": 4, + "children": [ + { + "type": "text", + "id": "RtFVZ", + "name": "Heading", + "fill": "$foreground/foreground", + "content": "Extended reports", + "fontFamily": "$typography/font-mono", + "fontSize": 20, + "fontWeight": "600" + }, + { + "type": "text", + "id": "kUcKw", + "name": "Sub", + "fill": "$foreground/muted", + "textGrowth": "fixed-width", + "width": "fill_container", + "content": "Installs that also share the extended tier. Each install counts once per day; shares are weighted by install-days in the range.", + "fontFamily": "$typography/font-sans", + "fontSize": 14, + "fontWeight": "normal" + } + ] + }, + { + "type": "frame", + "id": "YLA8E", + "name": "Coverage", + "layout": "vertical", + "gap": 6, + "alignItems": "end", + "children": [ + { + "type": "text", + "id": "q0byl", + "name": "Coverage label", + "fill": "$foreground/secondary", + "content": "Coverage: 71% of reports in range include extended data", + "fontFamily": "$typography/font-sans", + "fontSize": 13, + "fontWeight": "normal" + }, + { + "type": "frame", + "id": "gXFmK", + "name": "Coverage meter", + "width": 320, + "height": 8, + "fill": "$chart/track", + "cornerRadius": 4, + "children": [ + { + "type": "rectangle", + "cornerRadius": 4, + "id": "lO0v9", + "name": "Fill", + "fill": "$chart/series-1", + "width": 227, + "height": 8 + } + ] + } + ] + } + ] + }, + { + "type": "frame", + "id": "GwrDY", + "name": "Install KPIs", + "width": "fill_container", + "gap": 16, + "children": [ + { + "id": "aRoss", + "type": "ref", + "ref": "sDDfo", + "name": "Active installs, latest day", + "width": "fill_container", + "descendants": { + "yia1E": { + "content": "Active installs, latest day" + }, + "tZRdh": { + "content": "912" + }, + "oPQEN": { + "content": "2026-10-06 (UTC)" + } + } + }, + { + "id": "R2Bns", + "type": "ref", + "ref": "sDDfo", + "name": "Active, last 7 days", + "width": "fill_container", + "descendants": { + "yia1E": { + "content": "Active, last 7 days" + }, + "tZRdh": { + "content": "1,031" + }, + "oPQEN": { + "content": "Unique installs" + } + } + }, + { + "id": "UMt1g", + "type": "ref", + "ref": "sDDfo", + "name": "Active, last 30 days", + "width": "fill_container", + "descendants": { + "yia1E": { + "content": "Active, last 30 days" + }, + "tZRdh": { + "content": "1,106" + }, + "oPQEN": { + "content": "Unique installs" + } + } + }, + { + "id": "Ga6OP", + "type": "ref", + "ref": "sDDfo", + "name": "New installs, last 30 days", + "width": "fill_container", + "descendants": { + "yia1E": { + "content": "New installs, last 30 days" + }, + "tZRdh": { + "content": "214" + }, + "oPQEN": { + "content": "First report in range" + } + } + }, + { + "id": "okh9E", + "type": "ref", + "ref": "sDDfo", + "name": "Lapsed, last 30 days", + "width": "fill_container", + "descendants": { + "yia1E": { + "content": "Lapsed, last 30 days" + }, + "tZRdh": { + "content": "87" + }, + "oPQEN": { + "content": "No report for 30 days" + } + } + } + ] + }, + { + "type": "frame", + "id": "IkA62", + "name": "New and lapsed", + "width": "fill_container", + "gap": 16, + "children": [ + { + "type": "frame", + "id": "kohdp", + "name": "New installs per day", + "width": "fill_container", + "fill": "$surface/surface", + "cornerRadius": "$radius/3xl", + "stroke": "$border", + "strokeWidth": 1, + "strokeAlignment": "inner", + "layout": "vertical", + "gap": 16, + "padding": 20, + "children": [ + { + "type": "frame", + "id": "WQjKA", + "name": "Titles", + "layout": "vertical", + "gap": 4, + "children": [ + { + "type": "text", + "id": "L78e6", + "name": "Title", + "fill": "$foreground/foreground", + "content": "New installs per day", + "fontFamily": "$typography/font-sans", + "fontSize": 15, + "fontWeight": "600" + }, + { + "type": "text", + "id": "nWMZz", + "name": "Sub", + "fill": "$foreground/muted", + "content": "First accepted report from an install ID", + "fontFamily": "$typography/font-sans", + "fontSize": 13, + "fontWeight": "normal" + } + ] + }, + { + "type": "frame", + "id": "o4RFwP", + "name": "Plot row", + "width": "fill_container", + "gap": 8, + "children": [ + { + "type": "frame", + "id": "ym7NT", + "name": "Y axis", + "width": 28, + "height": 148, + "layout": "vertical", + "justifyContent": "space_between", + "alignItems": "end", + "children": [ + { + "type": "text", + "id": "jejpp", + "name": "Tick 15", + "fill": "$foreground/muted", + "content": "15", + "fontFamily": "$typography/font-sans", + "fontSize": 11, + "fontWeight": "normal" + }, + { + "type": "text", + "id": "P5aiv", + "name": "Tick 10", + "fill": "$foreground/muted", + "content": "10", + "fontFamily": "$typography/font-sans", + "fontSize": 11, + "fontWeight": "normal" + }, + { + "type": "text", + "id": "AwNN9", + "name": "Tick 5", + "fill": "$foreground/muted", + "content": "5", + "fontFamily": "$typography/font-sans", + "fontSize": 11, + "fontWeight": "normal" + }, + { + "type": "text", + "id": "Z6mKj", + "name": "Tick 0", + "fill": "$foreground/muted", + "content": "0", + "fontFamily": "$typography/font-sans", + "fontSize": 11, + "fontWeight": "normal" + } + ] + }, + { + "type": "frame", + "id": "fQjoT", + "name": "Plot", + "width": 570, + "height": 148, + "layout": "none", + "children": [ + { + "type": "rectangle", + "id": "IytaL", + "x": 0, + "y": 4, + "name": "Grid 0", + "fill": "$chart/grid", + "width": 570, + "height": 1 + }, + { + "type": "rectangle", + "id": "GWhSK", + "x": 0, + "y": 50.666666666666664, + "name": "Grid 1", + "fill": "$chart/grid", + "width": 570, + "height": 1 + }, + { + "type": "rectangle", + "id": "dWBkG", + "x": 0, + "y": 97.33333333333333, + "name": "Grid 2", + "fill": "$chart/grid", + "width": 570, + "height": 1 + }, + { + "type": "rectangle", + "id": "IE11Z", + "x": 0, + "y": 144, + "name": "Baseline", + "fill": "$chart/baseline", + "width": 570, + "height": 1 + }, + { + "type": "frame", + "id": "oRmhw", + "x": 0, + "y": -16, + "name": "Columns", + "width": 570, + "height": 160, + "alignItems": "end", + "children": [ + { + "type": "frame", + "id": "c2JI0d", + "name": "Day 1", + "width": 19, + "layout": "vertical", + "gap": 4, + "alignItems": "center", + "children": [ + { + "type": "rectangle", + "cornerRadius": [ + 3, + 3, + 0, + 0 + ], + "id": "sRswa", + "name": "Column", + "fill": "$chart/series-1", + "width": 12, + "height": 56 + } + ] + }, + { + "type": "frame", + "id": "VSj5w", + "name": "Day 2", + "width": 19, + "layout": "vertical", + "gap": 4, + "alignItems": "center", + "children": [ + { + "type": "rectangle", + "cornerRadius": [ + 3, + 3, + 0, + 0 + ], + "id": "b4FuhU", + "name": "Column", + "fill": "$chart/series-1", + "width": 12, + "height": 65 + } + ] + }, + { + "type": "frame", + "id": "Y7c3f", + "name": "Day 3", + "width": 19, + "layout": "vertical", + "gap": 4, + "alignItems": "center", + "children": [ + { + "type": "rectangle", + "cornerRadius": [ + 3, + 3, + 0, + 0 + ], + "id": "S07Rr7", + "name": "Column", + "fill": "$chart/series-1", + "width": 12, + "height": 84 + } + ] + }, + { + "type": "frame", + "id": "La65r", + "name": "Day 4", + "width": 19, + "layout": "vertical", + "gap": 4, + "alignItems": "center", + "children": [ + { + "type": "rectangle", + "cornerRadius": [ + 3, + 3, + 0, + 0 + ], + "id": "C7kPJ", + "name": "Column", + "fill": "$chart/series-1", + "width": 12, + "height": 47 + } + ] + }, + { + "type": "frame", + "id": "Jl9Z3", + "name": "Day 5", + "width": 19, + "layout": "vertical", + "gap": 4, + "alignItems": "center", + "children": [ + { + "type": "rectangle", + "cornerRadius": [ + 3, + 3, + 0, + 0 + ], + "id": "YZeiI", + "name": "Column", + "fill": "$chart/series-1", + "width": 12, + "height": 75 + } + ] + }, + { + "type": "frame", + "id": "H8qZvr", + "name": "Day 6", + "width": 19, + "layout": "vertical", + "gap": 4, + "alignItems": "center", + "children": [ + { + "type": "rectangle", + "cornerRadius": [ + 3, + 3, + 0, + 0 + ], + "id": "pGKYf", + "name": "Column", + "fill": "$chart/series-1", + "width": 12, + "height": 37 + } + ] + }, + { + "type": "frame", + "id": "cmwpi", + "name": "Day 7", + "width": 19, + "layout": "vertical", + "gap": 4, + "alignItems": "center", + "children": [ + { + "type": "rectangle", + "cornerRadius": [ + 3, + 3, + 0, + 0 + ], + "id": "P39eWq", + "name": "Column", + "fill": "$chart/series-1", + "width": 12, + "height": 28 + } + ] + }, + { + "type": "frame", + "id": "dy6uF", + "name": "Day 8", + "width": 19, + "layout": "vertical", + "gap": 4, + "alignItems": "center", + "children": [ + { + "type": "rectangle", + "cornerRadius": [ + 3, + 3, + 0, + 0 + ], + "id": "B7uoL", + "name": "Column", + "fill": "$chart/series-1", + "width": 12, + "height": 84 + } + ] + }, + { + "type": "frame", + "id": "sfUUn", + "name": "Day 9", + "width": 19, + "layout": "vertical", + "gap": 4, + "alignItems": "center", + "children": [ + { + "type": "rectangle", + "cornerRadius": [ + 3, + 3, + 0, + 0 + ], + "id": "qZzeP", + "name": "Column", + "fill": "$chart/series-1", + "width": 12, + "height": 103 + } + ] + }, + { + "type": "frame", + "id": "uWAKs", + "name": "Day 10", + "width": 19, + "layout": "vertical", + "gap": 4, + "alignItems": "center", + "children": [ + { + "type": "rectangle", + "cornerRadius": [ + 3, + 3, + 0, + 0 + ], + "id": "D6zKZ", + "name": "Column", + "fill": "$chart/series-1", + "width": 12, + "height": 65 + } + ] + }, + { + "type": "frame", + "id": "ua4GB", + "name": "Day 11", + "width": 19, + "layout": "vertical", + "gap": 4, + "alignItems": "center", + "children": [ + { + "type": "rectangle", + "cornerRadius": [ + 3, + 3, + 0, + 0 + ], + "id": "pfWt0", + "name": "Column", + "fill": "$chart/series-1", + "width": 12, + "height": 75 + } + ] + }, + { + "type": "frame", + "id": "ca97S", + "name": "Day 12", + "width": 19, + "layout": "vertical", + "gap": 4, + "alignItems": "center", + "children": [ + { + "type": "rectangle", + "cornerRadius": [ + 3, + 3, + 0, + 0 + ], + "id": "KVbRG", + "name": "Column", + "fill": "$chart/series-1", + "width": 12, + "height": 93 + } + ] + }, + { + "type": "frame", + "id": "O0tsH", + "name": "Day 13", + "width": 19, + "layout": "vertical", + "gap": 4, + "alignItems": "center", + "children": [ + { + "type": "rectangle", + "cornerRadius": [ + 3, + 3, + 0, + 0 + ], + "id": "jBr0N", + "name": "Column", + "fill": "$chart/series-1", + "width": 12, + "height": 37 + } + ] + }, + { + "type": "frame", + "id": "xVAVP", + "name": "Day 14", + "width": 19, + "layout": "vertical", + "gap": 4, + "alignItems": "center", + "children": [ + { + "type": "rectangle", + "cornerRadius": [ + 3, + 3, + 0, + 0 + ], + "id": "EE7O7", + "name": "Column", + "fill": "$chart/series-1", + "width": 12, + "height": 47 + } + ] + }, + { + "type": "frame", + "id": "PHymd", + "name": "Day 15", + "width": 19, + "layout": "vertical", + "gap": 4, + "alignItems": "center", + "children": [ + { + "type": "rectangle", + "cornerRadius": [ + 3, + 3, + 0, + 0 + ], + "id": "s7onNl", + "name": "Column", + "fill": "$chart/series-1", + "width": 12, + "height": 75 + } + ] + }, + { + "type": "frame", + "id": "aKFiw", + "name": "Day 16", + "width": 19, + "layout": "vertical", + "gap": 4, + "alignItems": "center", + "children": [ + { + "type": "rectangle", + "cornerRadius": [ + 3, + 3, + 0, + 0 + ], + "id": "ol8P1", + "name": "Column", + "fill": "$chart/series-1", + "width": 12, + "height": 84 + } + ] + }, + { + "type": "frame", + "id": "mCkG3", + "name": "Day 17", + "width": 19, + "layout": "vertical", + "gap": 4, + "alignItems": "center", + "children": [ + { + "type": "rectangle", + "cornerRadius": [ + 3, + 3, + 0, + 0 + ], + "id": "XZl62", + "name": "Column", + "fill": "$chart/series-1", + "width": 12, + "height": 112 + } + ] + }, + { + "type": "frame", + "id": "iwRFf", + "name": "Day 18", + "width": 19, + "layout": "vertical", + "gap": 4, + "alignItems": "center", + "children": [ + { + "type": "rectangle", + "cornerRadius": [ + 3, + 3, + 0, + 0 + ], + "id": "EiBO2", + "name": "Column", + "fill": "$chart/series-1", + "width": 12, + "height": 65 + } + ] + }, + { + "type": "frame", + "id": "CrRQ2", + "name": "Day 19", + "width": 19, + "layout": "vertical", + "gap": 4, + "alignItems": "center", + "children": [ + { + "type": "rectangle", + "cornerRadius": [ + 3, + 3, + 0, + 0 + ], + "id": "Pwfez", + "name": "Column", + "fill": "$chart/series-1", + "width": 12, + "height": 93 + } + ] + }, + { + "type": "frame", + "id": "V9ooQE", + "name": "Day 20", + "width": 19, + "layout": "vertical", + "gap": 4, + "alignItems": "center", + "children": [ + { + "type": "rectangle", + "cornerRadius": [ + 3, + 3, + 0, + 0 + ], + "id": "PQHxL", + "name": "Column", + "fill": "$chart/series-1", + "width": 12, + "height": 47 + } + ] + }, + { + "type": "frame", + "id": "l3DFyW", + "name": "Day 21", + "width": 19, + "layout": "vertical", + "gap": 4, + "alignItems": "center", + "children": [ + { + "type": "rectangle", + "cornerRadius": [ + 3, + 3, + 0, + 0 + ], + "id": "IrXZH", + "name": "Column", + "fill": "$chart/series-1", + "width": 12, + "height": 37 + } + ] + }, + { + "type": "frame", + "id": "bPs9q", + "name": "Day 22", + "width": 19, + "layout": "vertical", + "gap": 4, + "alignItems": "center", + "children": [ + { + "type": "rectangle", + "cornerRadius": [ + 3, + 3, + 0, + 0 + ], + "id": "dnjBt", + "name": "Column", + "fill": "$chart/series-1", + "width": 12, + "height": 84 + } + ] + }, + { + "type": "frame", + "id": "HuVhZ", + "name": "Day 23", + "width": 19, + "layout": "vertical", + "gap": 4, + "alignItems": "center", + "children": [ + { + "type": "rectangle", + "cornerRadius": [ + 3, + 3, + 0, + 0 + ], + "id": "K7nP3", + "name": "Column", + "fill": "$chart/series-1", + "width": 12, + "height": 75 + } + ] + }, + { + "type": "frame", + "id": "LmVIV", + "name": "Day 24", + "width": 19, + "layout": "vertical", + "gap": 4, + "alignItems": "center", + "children": [ + { + "type": "rectangle", + "cornerRadius": [ + 3, + 3, + 0, + 0 + ], + "id": "rIi37", + "name": "Column", + "fill": "$chart/series-1", + "width": 12, + "height": 103 + } + ] + }, + { + "type": "frame", + "id": "v8atQO", + "name": "Day 25", + "width": 19, + "layout": "vertical", + "gap": 4, + "alignItems": "center", + "children": [ + { + "type": "rectangle", + "cornerRadius": [ + 3, + 3, + 0, + 0 + ], + "id": "WlniK", + "name": "Column", + "fill": "$chart/series-1", + "width": 12, + "height": 121 + } + ] + }, + { + "type": "frame", + "id": "LkHnd", + "name": "Day 26", + "width": 19, + "layout": "vertical", + "gap": 4, + "alignItems": "center", + "children": [ + { + "type": "rectangle", + "cornerRadius": [ + 3, + 3, + 0, + 0 + ], + "id": "rdBQ3", + "name": "Column", + "fill": "$chart/series-1", + "width": 12, + "height": 93 + } + ] + }, + { + "type": "frame", + "id": "k5FhJ", + "name": "Day 27", + "width": 19, + "layout": "vertical", + "gap": 4, + "alignItems": "center", + "children": [ + { + "type": "rectangle", + "cornerRadius": [ + 3, + 3, + 0, + 0 + ], + "id": "O2DWD", + "name": "Column", + "fill": "$chart/series-1", + "width": 12, + "height": 56 + } + ] + }, + { + "type": "frame", + "id": "n932tK", + "name": "Day 28", + "width": 19, + "layout": "vertical", + "gap": 4, + "alignItems": "center", + "children": [ + { + "type": "rectangle", + "cornerRadius": [ + 3, + 3, + 0, + 0 + ], + "id": "QvO87", + "name": "Column", + "fill": "$chart/series-1", + "width": 12, + "height": 47 + } + ] + }, + { + "type": "frame", + "id": "bGgTJ", + "name": "Day 29", + "width": 19, + "layout": "vertical", + "gap": 4, + "alignItems": "center", + "children": [ + { + "type": "rectangle", + "cornerRadius": [ + 3, + 3, + 0, + 0 + ], + "id": "G7Wn2T", + "name": "Column", + "fill": "$chart/series-1", + "width": 12, + "height": 84 + } + ] + }, + { + "type": "frame", + "id": "WhjYb", + "name": "Day 30", + "width": 19, + "layout": "vertical", + "gap": 4, + "alignItems": "center", + "children": [ + { + "type": "text", + "id": "GvXpz", + "name": "Value label", + "fill": "$foreground/foreground", + "content": "7", + "fontFamily": "$typography/font-sans", + "fontSize": 11, + "fontWeight": "600" + }, + { + "type": "rectangle", + "cornerRadius": [ + 3, + 3, + 0, + 0 + ], + "id": "T6Y94", + "name": "Column", + "fill": "$chart/series-1", + "width": 12, + "height": 65 + } + ] + } + ] + } + ] + } + ] + }, + { + "type": "frame", + "id": "gOkG8", + "name": "X axis", + "width": 606, + "padding": [ + 0, + 0, + 0, + 36 + ], + "justifyContent": "space_between", + "children": [ + { + "type": "text", + "id": "ervGE", + "name": "X Sep 7", + "fill": "$foreground/muted", + "content": "Sep 7", + "fontFamily": "$typography/font-sans", + "fontSize": 11, + "fontWeight": "normal" + }, + { + "type": "text", + "id": "a2GW8", + "name": "X Sep 21", + "fill": "$foreground/muted", + "content": "Sep 21", + "fontFamily": "$typography/font-sans", + "fontSize": 11, + "fontWeight": "normal" + }, + { + "type": "text", + "id": "C6cZG", + "name": "X Oct 6", + "fill": "$foreground/muted", + "content": "Oct 6", + "fontFamily": "$typography/font-sans", + "fontSize": 11, + "fontWeight": "normal" + } + ] + } + ] + }, + { + "type": "frame", + "id": "D8ofHq", + "name": "Lapsed installs per day", + "width": "fill_container", + "fill": "$surface/surface", + "cornerRadius": "$radius/3xl", + "stroke": "$border", + "strokeWidth": 1, + "strokeAlignment": "inner", + "layout": "vertical", + "gap": 16, + "padding": 20, + "children": [ + { + "type": "frame", + "id": "Qjo3F", + "name": "Titles", + "layout": "vertical", + "gap": 4, + "children": [ + { + "type": "text", + "id": "lPda7", + "name": "Title", + "fill": "$foreground/foreground", + "content": "Lapsed installs per day", + "fontFamily": "$typography/font-sans", + "fontSize": 15, + "fontWeight": "600" + }, + { + "type": "text", + "id": "NMwMD", + "name": "Sub", + "fill": "$foreground/muted", + "content": "Installs whose last report was 30 days earlier", + "fontFamily": "$typography/font-sans", + "fontSize": 13, + "fontWeight": "normal" + } + ] + }, + { + "type": "frame", + "id": "Z0E8bU", + "name": "Plot row", + "width": "fill_container", + "gap": 8, + "children": [ + { + "type": "frame", + "id": "vULf9", + "name": "Y axis", + "width": 28, + "height": 148, + "layout": "vertical", + "justifyContent": "space_between", + "alignItems": "end", + "children": [ + { + "type": "text", + "id": "bK7yi", + "name": "Tick 15", + "fill": "$foreground/muted", + "content": "15", + "fontFamily": "$typography/font-sans", + "fontSize": 11, + "fontWeight": "normal" + }, + { + "type": "text", + "id": "xKq7c", + "name": "Tick 10", + "fill": "$foreground/muted", + "content": "10", + "fontFamily": "$typography/font-sans", + "fontSize": 11, + "fontWeight": "normal" + }, + { + "type": "text", + "id": "FrUJZ", + "name": "Tick 5", + "fill": "$foreground/muted", + "content": "5", + "fontFamily": "$typography/font-sans", + "fontSize": 11, + "fontWeight": "normal" + }, + { + "type": "text", + "id": "D7B7t", + "name": "Tick 0", + "fill": "$foreground/muted", + "content": "0", + "fontFamily": "$typography/font-sans", + "fontSize": 11, + "fontWeight": "normal" + } + ] + }, + { + "type": "frame", + "id": "Yn1gC", + "name": "Plot", + "width": 570, + "height": 148, + "layout": "none", + "children": [ + { + "type": "rectangle", + "id": "VlMsG", + "x": 0, + "y": 4, + "name": "Grid 0", + "fill": "$chart/grid", + "width": 570, + "height": 1 + }, + { + "type": "rectangle", + "id": "g82r0i", + "x": 0, + "y": 50.666666666666664, + "name": "Grid 1", + "fill": "$chart/grid", + "width": 570, + "height": 1 + }, + { + "type": "rectangle", + "id": "Zmurq", + "x": 0, + "y": 97.33333333333333, + "name": "Grid 2", + "fill": "$chart/grid", + "width": 570, + "height": 1 + }, + { + "type": "rectangle", + "id": "itHgw", + "x": 0, + "y": 144, + "name": "Baseline", + "fill": "$chart/baseline", + "width": 570, + "height": 1 + }, + { + "type": "frame", + "id": "M8hyoM", + "x": 0, + "y": -16, + "name": "Columns", + "width": 570, + "height": 160, + "alignItems": "end", + "children": [ + { + "type": "frame", + "id": "JHU6d", + "name": "Day 1", + "width": 19, + "layout": "vertical", + "gap": 4, + "alignItems": "center", + "children": [ + { + "type": "rectangle", + "cornerRadius": [ + 3, + 3, + 0, + 0 + ], + "id": "MxfRd", + "name": "Column", + "fill": "$chart/series-2", + "width": 12, + "height": 19 + } + ] + }, + { + "type": "frame", + "id": "yjWt7", + "name": "Day 2", + "width": 19, + "layout": "vertical", + "gap": 4, + "alignItems": "center", + "children": [ + { + "type": "rectangle", + "cornerRadius": [ + 3, + 3, + 0, + 0 + ], + "id": "q6JXl", + "name": "Column", + "fill": "$chart/series-2", + "width": 12, + "height": 28 + } + ] + }, + { + "type": "frame", + "id": "jGTXx", + "name": "Day 3", + "width": 19, + "layout": "vertical", + "gap": 4, + "alignItems": "center", + "children": [ + { + "type": "rectangle", + "cornerRadius": [ + 3, + 3, + 0, + 0 + ], + "id": "xBSEy", + "name": "Column", + "fill": "$chart/series-2", + "width": 12, + "height": 19 + } + ] + }, + { + "type": "frame", + "id": "TnTV3", + "name": "Day 4", + "width": 19, + "layout": "vertical", + "gap": 4, + "alignItems": "center", + "children": [ + { + "type": "rectangle", + "cornerRadius": [ + 3, + 3, + 0, + 0 + ], + "id": "MF5xk", + "name": "Column", + "fill": "$chart/series-2", + "width": 12, + "height": 37 + } + ] + }, + { + "type": "frame", + "id": "sTOVc", + "name": "Day 5", + "width": 19, + "layout": "vertical", + "gap": 4, + "alignItems": "center", + "children": [ + { + "type": "rectangle", + "cornerRadius": [ + 3, + 3, + 0, + 0 + ], + "id": "c3FTSh", + "name": "Column", + "fill": "$chart/series-2", + "width": 12, + "height": 28 + } + ] + }, + { + "type": "frame", + "id": "z74CGq", + "name": "Day 6", + "width": 19, + "layout": "vertical", + "gap": 4, + "alignItems": "center", + "children": [ + { + "type": "rectangle", + "cornerRadius": [ + 3, + 3, + 0, + 0 + ], + "id": "g08k9", + "name": "Column", + "fill": "$chart/series-2", + "width": 12, + "height": 9 + } + ] + }, + { + "type": "frame", + "id": "qxQ6s", + "name": "Day 7", + "width": 19, + "layout": "vertical", + "gap": 4, + "alignItems": "center", + "children": [ + { + "type": "rectangle", + "cornerRadius": [ + 3, + 3, + 0, + 0 + ], + "id": "TDQv0", + "name": "Column", + "fill": "$chart/series-2", + "width": 12, + "height": 19 + } + ] + }, + { + "type": "frame", + "id": "xfu5D", + "name": "Day 8", + "width": 19, + "layout": "vertical", + "gap": 4, + "alignItems": "center", + "children": [ + { + "type": "rectangle", + "cornerRadius": [ + 3, + 3, + 0, + 0 + ], + "id": "xjBRo", + "name": "Column", + "fill": "$chart/series-2", + "width": 12, + "height": 28 + } + ] + }, + { + "type": "frame", + "id": "dZosB", + "name": "Day 9", + "width": 19, + "layout": "vertical", + "gap": 4, + "alignItems": "center", + "children": [ + { + "type": "rectangle", + "cornerRadius": [ + 3, + 3, + 0, + 0 + ], + "id": "AMBLC", + "name": "Column", + "fill": "$chart/series-2", + "width": 12, + "height": 37 + } + ] + }, + { + "type": "frame", + "id": "IqsEy", + "name": "Day 10", + "width": 19, + "layout": "vertical", + "gap": 4, + "alignItems": "center", + "children": [ + { + "type": "rectangle", + "cornerRadius": [ + 3, + 3, + 0, + 0 + ], + "id": "m4n1Vt", + "name": "Column", + "fill": "$chart/series-2", + "width": 12, + "height": 19 + } + ] + }, + { + "type": "frame", + "id": "oc8bt", + "name": "Day 11", + "width": 19, + "layout": "vertical", + "gap": 4, + "alignItems": "center", + "children": [ + { + "type": "rectangle", + "cornerRadius": [ + 3, + 3, + 0, + 0 + ], + "id": "UL6ow", + "name": "Column", + "fill": "$chart/series-2", + "width": 12, + "height": 28 + } + ] + }, + { + "type": "frame", + "id": "x1MdoE", + "name": "Day 12", + "width": 19, + "layout": "vertical", + "gap": 4, + "alignItems": "center", + "children": [ + { + "type": "rectangle", + "cornerRadius": [ + 3, + 3, + 0, + 0 + ], + "id": "Hn2hY", + "name": "Column", + "fill": "$chart/series-2", + "width": 12, + "height": 47 + } + ] + }, + { + "type": "frame", + "id": "JIgLl", + "name": "Day 13", + "width": 19, + "layout": "vertical", + "gap": 4, + "alignItems": "center", + "children": [ + { + "type": "rectangle", + "cornerRadius": [ + 3, + 3, + 0, + 0 + ], + "id": "Hxuyb", + "name": "Column", + "fill": "$chart/series-2", + "width": 12, + "height": 19 + } + ] + }, + { + "type": "frame", + "id": "as6Wj", + "name": "Day 14", + "width": 19, + "layout": "vertical", + "gap": 4, + "alignItems": "center", + "children": [ + { + "type": "rectangle", + "cornerRadius": [ + 3, + 3, + 0, + 0 + ], + "id": "bhlml", + "name": "Column", + "fill": "$chart/series-2", + "width": 12, + "height": 9 + } + ] + }, + { + "type": "frame", + "id": "OqXAN", + "name": "Day 15", + "width": 19, + "layout": "vertical", + "gap": 4, + "alignItems": "center", + "children": [ + { + "type": "rectangle", + "cornerRadius": [ + 3, + 3, + 0, + 0 + ], + "id": "RoHcb", + "name": "Column", + "fill": "$chart/series-2", + "width": 12, + "height": 28 + } + ] + }, + { + "type": "frame", + "id": "zTQ4X", + "name": "Day 16", + "width": 19, + "layout": "vertical", + "gap": 4, + "alignItems": "center", + "children": [ + { + "type": "rectangle", + "cornerRadius": [ + 3, + 3, + 0, + 0 + ], + "id": "CJy4y", + "name": "Column", + "fill": "$chart/series-2", + "width": 12, + "height": 37 + } + ] + }, + { + "type": "frame", + "id": "nna2a", + "name": "Day 17", + "width": 19, + "layout": "vertical", + "gap": 4, + "alignItems": "center", + "children": [ + { + "type": "rectangle", + "cornerRadius": [ + 3, + 3, + 0, + 0 + ], + "id": "ShsE0", + "name": "Column", + "fill": "$chart/series-2", + "width": 12, + "height": 19 + } + ] + }, + { + "type": "frame", + "id": "b3tQ8", + "name": "Day 18", + "width": 19, + "layout": "vertical", + "gap": 4, + "alignItems": "center", + "children": [ + { + "type": "rectangle", + "cornerRadius": [ + 3, + 3, + 0, + 0 + ], + "id": "dh3X7", + "name": "Column", + "fill": "$chart/series-2", + "width": 12, + "height": 28 + } + ] + }, + { + "type": "frame", + "id": "MVv3S", + "name": "Day 19", + "width": 19, + "layout": "vertical", + "gap": 4, + "alignItems": "center", + "children": [ + { + "type": "rectangle", + "cornerRadius": [ + 3, + 3, + 0, + 0 + ], + "id": "adyxe", + "name": "Column", + "fill": "$chart/series-2", + "width": 12, + "height": 28 + } + ] + }, + { + "type": "frame", + "id": "ojOzc", + "name": "Day 20", + "width": 19, + "layout": "vertical", + "gap": 4, + "alignItems": "center", + "children": [ + { + "type": "rectangle", + "cornerRadius": [ + 3, + 3, + 0, + 0 + ], + "id": "GICVn", + "name": "Column", + "fill": "$chart/series-2", + "width": 12, + "height": 19 + } + ] + }, + { + "type": "frame", + "id": "nxDoE", + "name": "Day 21", + "width": 19, + "layout": "vertical", + "gap": 4, + "alignItems": "center", + "children": [ + { + "type": "rectangle", + "cornerRadius": [ + 3, + 3, + 0, + 0 + ], + "id": "xsDPO", + "name": "Column", + "fill": "$chart/series-2", + "width": 12, + "height": 9 + } + ] + }, + { + "type": "frame", + "id": "haiYL", + "name": "Day 22", + "width": 19, + "layout": "vertical", + "gap": 4, + "alignItems": "center", + "children": [ + { + "type": "rectangle", + "cornerRadius": [ + 3, + 3, + 0, + 0 + ], + "id": "EVORr", + "name": "Column", + "fill": "$chart/series-2", + "width": 12, + "height": 37 + } + ] + }, + { + "type": "frame", + "id": "Ru1Uq", + "name": "Day 23", + "width": 19, + "layout": "vertical", + "gap": 4, + "alignItems": "center", + "children": [ + { + "type": "rectangle", + "cornerRadius": [ + 3, + 3, + 0, + 0 + ], + "id": "u6x5kM", + "name": "Column", + "fill": "$chart/series-2", + "width": 12, + "height": 28 + } + ] + }, + { + "type": "frame", + "id": "wNch4", + "name": "Day 24", + "width": 19, + "layout": "vertical", + "gap": 4, + "alignItems": "center", + "children": [ + { + "type": "rectangle", + "cornerRadius": [ + 3, + 3, + 0, + 0 + ], + "id": "NuY5y", + "name": "Column", + "fill": "$chart/series-2", + "width": 12, + "height": 19 + } + ] + }, + { + "type": "frame", + "id": "l5umTv", + "name": "Day 25", + "width": 19, + "layout": "vertical", + "gap": 4, + "alignItems": "center", + "children": [ + { + "type": "rectangle", + "cornerRadius": [ + 3, + 3, + 0, + 0 + ], + "id": "obrv5", + "name": "Column", + "fill": "$chart/series-2", + "width": 12, + "height": 47 + } + ] + }, + { + "type": "frame", + "id": "A2JCkx", + "name": "Day 26", + "width": 19, + "layout": "vertical", + "gap": 4, + "alignItems": "center", + "children": [ + { + "type": "rectangle", + "cornerRadius": [ + 3, + 3, + 0, + 0 + ], + "id": "zTJkH", + "name": "Column", + "fill": "$chart/series-2", + "width": 12, + "height": 28 + } + ] + }, + { + "type": "frame", + "id": "kyayT", + "name": "Day 27", + "width": 19, + "layout": "vertical", + "gap": 4, + "alignItems": "center", + "children": [ + { + "type": "rectangle", + "cornerRadius": [ + 3, + 3, + 0, + 0 + ], + "id": "E2ECy", + "name": "Column", + "fill": "$chart/series-2", + "width": 12, + "height": 19 + } + ] + }, + { + "type": "frame", + "id": "lPoNF", + "name": "Day 28", + "width": 19, + "layout": "vertical", + "gap": 4, + "alignItems": "center", + "children": [ + { + "type": "rectangle", + "cornerRadius": [ + 3, + 3, + 0, + 0 + ], + "id": "J3McA", + "name": "Column", + "fill": "$chart/series-2", + "width": 12, + "height": 9 + } + ] + }, + { + "type": "frame", + "id": "iA9mD", + "name": "Day 29", + "width": 19, + "layout": "vertical", + "gap": 4, + "alignItems": "center", + "children": [ + { + "type": "rectangle", + "cornerRadius": [ + 3, + 3, + 0, + 0 + ], + "id": "DDODx", + "name": "Column", + "fill": "$chart/series-2", + "width": 12, + "height": 28 + } + ] + }, + { + "type": "frame", + "id": "G3EVz", + "name": "Day 30", + "width": 19, + "layout": "vertical", + "gap": 4, + "alignItems": "center", + "children": [ + { + "type": "text", + "id": "j9Kxr", + "name": "Value label", + "fill": "$foreground/foreground", + "content": "4", + "fontFamily": "$typography/font-sans", + "fontSize": 11, + "fontWeight": "600" + }, + { + "type": "rectangle", + "cornerRadius": [ + 3, + 3, + 0, + 0 + ], + "id": "MMi9n", + "name": "Column", + "fill": "$chart/series-2", + "width": 12, + "height": 37 + } + ] + } + ] + } + ] + } + ] + }, + { + "type": "frame", + "id": "Qi78V", + "name": "X axis", + "width": 606, + "padding": [ + 0, + 0, + 0, + 36 + ], + "justifyContent": "space_between", + "children": [ + { + "type": "text", + "id": "ZQpkW", + "name": "X Sep 7", + "fill": "$foreground/muted", + "content": "Sep 7", + "fontFamily": "$typography/font-sans", + "fontSize": 11, + "fontWeight": "normal" + }, + { + "type": "text", + "id": "F2fZj", + "name": "X Sep 21", + "fill": "$foreground/muted", + "content": "Sep 21", + "fontFamily": "$typography/font-sans", + "fontSize": 11, + "fontWeight": "normal" + }, + { + "type": "text", + "id": "TyxT1", + "name": "X Oct 6", + "fill": "$foreground/muted", + "content": "Oct 6", + "fontFamily": "$typography/font-sans", + "fontSize": 11, + "fontWeight": "normal" + } + ] + } + ] + } + ] + }, + { + "type": "frame", + "id": "vyryH", + "name": "Environment row 1", + "width": "fill_container", + "gap": 16, + "children": [ + { + "type": "frame", + "id": "c6yNe1", + "name": "Kubernetes version", + "width": "fill_container", + "fill": "$surface/surface", + "cornerRadius": "$radius/3xl", + "stroke": "$border", + "strokeWidth": 1, + "strokeAlignment": "inner", + "layout": "vertical", + "gap": 14, + "padding": 20, + "children": [ + { + "type": "frame", + "id": "ts7Ae", + "name": "Titles", + "width": "fill_container", + "layout": "vertical", + "gap": 4, + "children": [ + { + "type": "text", + "id": "x6UDGY", + "name": "Title", + "fill": "$foreground/foreground", + "content": "Kubernetes version", + "fontFamily": "$typography/font-sans", + "fontSize": 15, + "fontWeight": "600" + }, + { + "type": "text", + "id": "isshR", + "name": "Sub", + "fill": "$foreground/muted", + "textGrowth": "fixed-width", + "width": "fill_container", + "content": "Share of install-days by reported minor version.", + "fontFamily": "$typography/font-sans", + "fontSize": 13, + "fontWeight": "normal" + } + ] + }, + { + "type": "frame", + "id": "xRdeX", + "name": "Bars", + "width": "fill_container", + "layout": "vertical", + "gap": 10, + "children": [ + { + "id": "wjOTK", + "type": "ref", + "ref": "wPbIp", + "name": "1.31", + "width": "fill_container", + "descendants": { + "j1J75": { + "content": "1.31", + "fill": "$foreground/foreground" + }, + "dMFUm": { + "width": 164, + "cornerRadius": [ + 0, + 4, + 4, + 0 + ] + }, + "uTqdm": { + "content": "38%" + } + } + }, + { + "id": "mCGa5", + "type": "ref", + "ref": "wPbIp", + "name": "1.30", + "width": "fill_container", + "descendants": { + "j1J75": { + "content": "1.30", + "fill": "$foreground/foreground" + }, + "dMFUm": { + "width": 117, + "cornerRadius": [ + 0, + 4, + 4, + 0 + ] + }, + "uTqdm": { + "content": "27%" + } + } + }, + { + "id": "uFp1s", + "type": "ref", + "ref": "wPbIp", + "name": "1.32", + "width": "fill_container", + "descendants": { + "j1J75": { + "content": "1.32", + "fill": "$foreground/foreground" + }, + "dMFUm": { + "width": 78, + "cornerRadius": [ + 0, + 4, + 4, + 0 + ] + }, + "uTqdm": { + "content": "18%" + } + } + }, + { + "id": "apyWg", + "type": "ref", + "ref": "wPbIp", + "name": "1.29", + "width": "fill_container", + "descendants": { + "j1J75": { + "content": "1.29", + "fill": "$foreground/foreground" + }, + "dMFUm": { + "width": 39, + "cornerRadius": [ + 0, + 4, + 4, + 0 + ] + }, + "uTqdm": { + "content": "9%" + } + } + }, + { + "id": "GkAhZ", + "type": "ref", + "ref": "wPbIp", + "name": "Other", + "width": "fill_container", + "descendants": { + "j1J75": { + "content": "Other", + "fill": "$foreground/muted" + }, + "dMFUm": { + "width": 35, + "cornerRadius": [ + 0, + 4, + 4, + 0 + ] + }, + "uTqdm": { + "content": "8%" + } + } + } + ] + } + ] + }, + { + "type": "frame", + "id": "nABaC", + "name": "Distribution", + "width": "fill_container", + "fill": "$surface/surface", + "cornerRadius": "$radius/3xl", + "stroke": "$border", + "strokeWidth": 1, + "strokeAlignment": "inner", + "layout": "vertical", + "gap": 14, + "padding": 20, + "children": [ + { + "type": "frame", + "id": "gvGga", + "name": "Titles", + "width": "fill_container", + "layout": "vertical", + "gap": 4, + "children": [ + { + "type": "text", + "id": "WU9QN", + "name": "Title", + "fill": "$foreground/foreground", + "content": "Distribution", + "fontFamily": "$typography/font-sans", + "fontSize": 15, + "fontWeight": "600" + }, + { + "type": "text", + "id": "P3DHlg", + "name": "Sub", + "fill": "$foreground/muted", + "textGrowth": "fixed-width", + "width": "fill_container", + "content": "Share of install-days by detected distribution.", + "fontFamily": "$typography/font-sans", + "fontSize": 13, + "fontWeight": "normal" + } + ] + }, + { + "type": "frame", + "id": "UShQw", + "name": "Bars", + "width": "fill_container", + "layout": "vertical", + "gap": 10, + "children": [ + { + "id": "ysbp4", + "type": "ref", + "ref": "wPbIp", + "name": "k3s", + "width": "fill_container", + "descendants": { + "j1J75": { + "content": "k3s", + "fill": "$foreground/foreground" + }, + "dMFUm": { + "width": 199, + "cornerRadius": [ + 0, + 4, + 4, + 0 + ] + }, + "uTqdm": { + "content": "46%" + } + } + }, + { + "id": "ERFfG", + "type": "ref", + "ref": "wPbIp", + "name": "rke2", + "width": "fill_container", + "descendants": { + "j1J75": { + "content": "rke2", + "fill": "$foreground/foreground" + }, + "dMFUm": { + "width": 52, + "cornerRadius": [ + 0, + 4, + 4, + 0 + ] + }, + "uTqdm": { + "content": "12%" + } + } + }, + { + "id": "dm7Jd", + "type": "ref", + "ref": "wPbIp", + "name": "microk8s", + "width": "fill_container", + "descendants": { + "j1J75": { + "content": "microk8s", + "fill": "$foreground/foreground" + }, + "dMFUm": { + "width": 39, + "cornerRadius": [ + 0, + 4, + 4, + 0 + ] + }, + "uTqdm": { + "content": "9%" + } + } + }, + { + "id": "Cnm2F", + "type": "ref", + "ref": "wPbIp", + "name": "eks", + "width": "fill_container", + "descendants": { + "j1J75": { + "content": "eks", + "fill": "$foreground/foreground" + }, + "dMFUm": { + "width": 30, + "cornerRadius": [ + 0, + 4, + 4, + 0 + ] + }, + "uTqdm": { + "content": "7%" + } + } + }, + { + "id": "Ys8ZE", + "type": "ref", + "ref": "wPbIp", + "name": "talos", + "width": "fill_container", + "descendants": { + "j1J75": { + "content": "talos", + "fill": "$foreground/foreground" + }, + "dMFUm": { + "width": 26, + "cornerRadius": [ + 0, + 4, + 4, + 0 + ] + }, + "uTqdm": { + "content": "6%" + } + } + }, + { + "id": "hnLEu", + "type": "ref", + "ref": "wPbIp", + "name": "gke", + "width": "fill_container", + "descendants": { + "j1J75": { + "content": "gke", + "fill": "$foreground/foreground" + }, + "dMFUm": { + "width": 22, + "cornerRadius": [ + 0, + 4, + 4, + 0 + ] + }, + "uTqdm": { + "content": "5%" + } + } + }, + { + "id": "E1JJDc", + "type": "ref", + "ref": "wPbIp", + "name": "kind", + "width": "fill_container", + "descendants": { + "j1J75": { + "content": "kind", + "fill": "$foreground/foreground" + }, + "dMFUm": { + "width": 13, + "cornerRadius": [ + 0, + 4, + 4, + 0 + ] + }, + "uTqdm": { + "content": "3%" + } + } + }, + { + "id": "cyGTq", + "type": "ref", + "ref": "wPbIp", + "name": "Other", + "width": "fill_container", + "descendants": { + "j1J75": { + "content": "Other", + "fill": "$foreground/muted" + }, + "dMFUm": { + "width": 52, + "cornerRadius": [ + 0, + 4, + 4, + 0 + ] + }, + "uTqdm": { + "content": "12%" + } + } + } + ] + } + ] + } + ] + }, + { + "type": "frame", + "id": "HRCgy", + "name": "Environment row 2", + "width": "fill_container", + "gap": 16, + "children": [ + { + "type": "frame", + "id": "y7r64", + "name": "Architecture", + "width": "fill_container", + "fill": "$surface/surface", + "cornerRadius": "$radius/3xl", + "stroke": "$border", + "strokeWidth": 1, + "strokeAlignment": "inner", + "layout": "vertical", + "gap": 14, + "padding": 20, + "children": [ + { + "type": "frame", + "id": "MMhPC", + "name": "Titles", + "width": "fill_container", + "layout": "vertical", + "gap": 4, + "children": [ + { + "type": "text", + "id": "k8ASe", + "name": "Title", + "fill": "$foreground/foreground", + "content": "Architecture", + "fontFamily": "$typography/font-sans", + "fontSize": 15, + "fontWeight": "600" + }, + { + "type": "text", + "id": "qkzeO", + "name": "Sub", + "fill": "$foreground/muted", + "textGrowth": "fixed-width", + "width": "fill_container", + "content": "Share of install-days reporting each node architecture. Mixed clusters report several, so shares add up to more than 100%.", + "fontFamily": "$typography/font-sans", + "fontSize": 13, + "fontWeight": "normal" + } + ] + }, + { + "type": "frame", + "id": "EK8eL", + "name": "Bars", + "width": "fill_container", + "layout": "vertical", + "gap": 10, + "children": [ + { + "id": "f43md", + "type": "ref", + "ref": "wPbIp", + "name": "amd64", + "width": "fill_container", + "descendants": { + "j1J75": { + "content": "amd64", + "fill": "$foreground/foreground" + }, + "dMFUm": { + "width": 350, + "cornerRadius": [ + 0, + 4, + 4, + 0 + ] + }, + "uTqdm": { + "content": "81%" + } + } + }, + { + "id": "SyiIg", + "type": "ref", + "ref": "wPbIp", + "name": "arm64", + "width": "fill_container", + "descendants": { + "j1J75": { + "content": "arm64", + "fill": "$foreground/foreground" + }, + "dMFUm": { + "width": 112, + "cornerRadius": [ + 0, + 4, + 4, + 0 + ] + }, + "uTqdm": { + "content": "26%" + } + } + }, + { + "id": "p9B19", + "type": "ref", + "ref": "wPbIp", + "name": "arm", + "width": "fill_container", + "descendants": { + "j1J75": { + "content": "arm", + "fill": "$foreground/foreground" + }, + "dMFUm": { + "width": 9, + "cornerRadius": [ + 0, + 4, + 4, + 0 + ] + }, + "uTqdm": { + "content": "2%" + } + } + }, + { + "id": "SvWZd", + "type": "ref", + "ref": "wPbIp", + "name": "Other", + "width": "fill_container", + "descendants": { + "j1J75": { + "content": "Other", + "fill": "$foreground/muted" + }, + "dMFUm": { + "width": 4, + "cornerRadius": [ + 0, + 4, + 4, + 0 + ] + }, + "uTqdm": { + "content": "1%" + } + } + } + ] + } + ] + }, + { + "type": "frame", + "id": "b8fCX", + "name": "Cluster nodes", + "width": "fill_container", + "fill": "$surface/surface", + "cornerRadius": "$radius/3xl", + "stroke": "$border", + "strokeWidth": 1, + "strokeAlignment": "inner", + "layout": "vertical", + "gap": 14, + "padding": 20, + "children": [ + { + "type": "frame", + "id": "m4Yk7", + "name": "Titles", + "width": "fill_container", + "layout": "vertical", + "gap": 4, + "children": [ + { + "type": "text", + "id": "gsYLI", + "name": "Title", + "fill": "$foreground/foreground", + "content": "Cluster nodes", + "fontFamily": "$typography/font-sans", + "fontSize": 15, + "fontWeight": "600" + }, + { + "type": "text", + "id": "mEv68", + "name": "Sub", + "fill": "$foreground/muted", + "textGrowth": "fixed-width", + "width": "fill_container", + "content": "Share of install-days by node-count band.", + "fontFamily": "$typography/font-sans", + "fontSize": 13, + "fontWeight": "normal" + } + ] + }, + { + "type": "frame", + "id": "T2PQjM", + "name": "Bars", + "width": "fill_container", + "layout": "vertical", + "gap": 10, + "children": [ + { + "id": "NSTAz", + "type": "ref", + "ref": "wPbIp", + "name": "1", + "width": "fill_container", + "descendants": { + "j1J75": { + "content": "1", + "fill": "$foreground/foreground" + }, + "dMFUm": { + "width": 251, + "cornerRadius": [ + 0, + 4, + 4, + 0 + ] + }, + "uTqdm": { + "content": "58%" + } + } + }, + { + "id": "Oxw93", + "type": "ref", + "ref": "wPbIp", + "name": "2–3", + "width": "fill_container", + "descendants": { + "j1J75": { + "content": "2–3", + "fill": "$foreground/foreground" + }, + "dMFUm": { + "width": 95, + "cornerRadius": [ + 0, + 4, + 4, + 0 + ] + }, + "uTqdm": { + "content": "22%" + } + } + }, + { + "id": "wAcAs", + "type": "ref", + "ref": "wPbIp", + "name": "4–10", + "width": "fill_container", + "descendants": { + "j1J75": { + "content": "4–10", + "fill": "$foreground/foreground" + }, + "dMFUm": { + "width": 60, + "cornerRadius": [ + 0, + 4, + 4, + 0 + ] + }, + "uTqdm": { + "content": "14%" + } + } + }, + { + "id": "JRkXA", + "type": "ref", + "ref": "wPbIp", + "name": "11–50", + "width": "fill_container", + "descendants": { + "j1J75": { + "content": "11–50", + "fill": "$foreground/foreground" + }, + "dMFUm": { + "width": 22, + "cornerRadius": [ + 0, + 4, + 4, + 0 + ] + }, + "uTqdm": { + "content": "5%" + } + } + }, + { + "id": "J2Wm5", + "type": "ref", + "ref": "wPbIp", + "name": "51+", + "width": "fill_container", + "descendants": { + "j1J75": { + "content": "51+", + "fill": "$foreground/foreground" + }, + "dMFUm": { + "width": 4, + "cornerRadius": [ + 0, + 4, + 4, + 0 + ] + }, + "uTqdm": { + "content": "1%" + } + } + } + ] + } + ] + } + ] + }, + { + "type": "frame", + "id": "X93xNq", + "name": "Usage row", + "width": "fill_container", + "gap": 16, + "children": [ + { + "type": "frame", + "id": "D0Xo8", + "name": "Games", + "width": "fill_container", + "fill": "$surface/surface", + "cornerRadius": "$radius/3xl", + "stroke": "$border", + "strokeWidth": 1, + "strokeAlignment": "inner", + "layout": "vertical", + "gap": 14, + "padding": 20, + "children": [ + { + "type": "frame", + "id": "rOjQF", + "name": "Titles", + "width": "fill_container", + "layout": "vertical", + "gap": 4, + "children": [ + { + "type": "text", + "id": "FP9Oc", + "name": "Title", + "fill": "$foreground/foreground", + "content": "Games", + "fontFamily": "$typography/font-sans", + "fontSize": 15, + "fontWeight": "600" + }, + { + "type": "text", + "id": "HcHrn", + "name": "Sub", + "fill": "$foreground/muted", + "textGrowth": "fixed-width", + "width": "fill_container", + "content": "Share of install-days running at least one server of each official module. Uploaded and third-party modules count as Custom.", + "fontFamily": "$typography/font-sans", + "fontSize": 13, + "fontWeight": "normal" + } + ] + }, + { + "type": "frame", + "id": "t1UGtz", + "name": "Bars", + "width": "fill_container", + "layout": "vertical", + "gap": 10, + "children": [ + { + "id": "gfdQc", + "type": "ref", + "ref": "wPbIp", + "name": "minecraft-java", + "width": "fill_container", + "descendants": { + "j1J75": { + "content": "minecraft-java", + "fill": "$foreground/foreground" + }, + "dMFUm": { + "width": 264, + "cornerRadius": [ + 0, + 4, + 4, + 0 + ] + }, + "uTqdm": { + "content": "61%" + } + } + }, + { + "id": "n7fklX", + "type": "ref", + "ref": "wPbIp", + "name": "terraria", + "width": "fill_container", + "descendants": { + "j1J75": { + "content": "terraria", + "fill": "$foreground/foreground" + }, + "dMFUm": { + "width": 78, + "cornerRadius": [ + 0, + 4, + 4, + 0 + ] + }, + "uTqdm": { + "content": "18%" + } + } + }, + { + "id": "exoBx", + "type": "ref", + "ref": "wPbIp", + "name": "valheim", + "width": "fill_container", + "descendants": { + "j1J75": { + "content": "valheim", + "fill": "$foreground/foreground" + }, + "dMFUm": { + "width": 65, + "cornerRadius": [ + 0, + 4, + 4, + 0 + ] + }, + "uTqdm": { + "content": "15%" + } + } + }, + { + "id": "U3TWG5", + "type": "ref", + "ref": "wPbIp", + "name": "palworld", + "width": "fill_container", + "descendants": { + "j1J75": { + "content": "palworld", + "fill": "$foreground/foreground" + }, + "dMFUm": { + "width": 48, + "cornerRadius": [ + 0, + 4, + 4, + 0 + ] + }, + "uTqdm": { + "content": "11%" + } + } + }, + { + "id": "DKLuV", + "type": "ref", + "ref": "wPbIp", + "name": "factorio", + "width": "fill_container", + "descendants": { + "j1J75": { + "content": "factorio", + "fill": "$foreground/foreground" + }, + "dMFUm": { + "width": 39, + "cornerRadius": [ + 0, + 4, + 4, + 0 + ] + }, + "uTqdm": { + "content": "9%" + } + } + }, + { + "id": "t8Lxu", + "type": "ref", + "ref": "wPbIp", + "name": "rust", + "width": "fill_container", + "descendants": { + "j1J75": { + "content": "rust", + "fill": "$foreground/foreground" + }, + "dMFUm": { + "width": 30, + "cornerRadius": [ + 0, + 4, + 4, + 0 + ] + }, + "uTqdm": { + "content": "7%" + } + } + }, + { + "id": "Ybgs3", + "type": "ref", + "ref": "wPbIp", + "name": "satisfactory", + "width": "fill_container", + "descendants": { + "j1J75": { + "content": "satisfactory", + "fill": "$foreground/foreground" + }, + "dMFUm": { + "width": 26, + "cornerRadius": [ + 0, + 4, + 4, + 0 + ] + }, + "uTqdm": { + "content": "6%" + } + } + }, + { + "id": "V36hc1", + "type": "ref", + "ref": "wPbIp", + "name": "Custom", + "width": "fill_container", + "descendants": { + "j1J75": { + "content": "Custom", + "fill": "$foreground/muted" + }, + "dMFUm": { + "width": 95, + "cornerRadius": [ + 0, + 4, + 4, + 0 + ] + }, + "uTqdm": { + "content": "22%" + } + } + } + ] + } + ] + }, + { + "type": "frame", + "id": "twyVG", + "name": "Feature adoption", + "width": "fill_container", + "fill": "$surface/surface", + "cornerRadius": "$radius/3xl", + "stroke": "$border", + "strokeWidth": 1, + "strokeAlignment": "inner", + "layout": "vertical", + "gap": 14, + "padding": 20, + "children": [ + { + "type": "frame", + "id": "VLjMc", + "name": "Titles", + "width": "fill_container", + "layout": "vertical", + "gap": 4, + "children": [ + { + "type": "text", + "id": "LleaT", + "name": "Title", + "fill": "$foreground/foreground", + "content": "Feature adoption", + "fontFamily": "$typography/font-sans", + "fontSize": 15, + "fontWeight": "600" + }, + { + "type": "text", + "id": "FiOPQ", + "name": "Sub", + "fill": "$foreground/muted", + "textGrowth": "fixed-width", + "width": "fill_container", + "content": "Share of install-days with each feature in use.", + "fontFamily": "$typography/font-sans", + "fontSize": 13, + "fontWeight": "normal" + } + ] + }, + { + "type": "frame", + "id": "bUAgs", + "name": "Bars", + "width": "fill_container", + "layout": "vertical", + "gap": 10, + "children": [ + { + "id": "Y1CuHR", + "type": "ref", + "ref": "wPbIp", + "name": "Backups", + "width": "fill_container", + "descendants": { + "j1J75": { + "content": "Backups", + "fill": "$foreground/foreground" + }, + "L6Z5jA": { + "fill": "$chart/track", + "cornerRadius": 4 + }, + "dMFUm": { + "width": 225, + "cornerRadius": 4 + }, + "uTqdm": { + "content": "52%" + } + } + }, + { + "id": "G1KQk", + "type": "ref", + "ref": "wPbIp", + "name": "Wake on connect", + "width": "fill_container", + "descendants": { + "j1J75": { + "content": "Wake on connect", + "fill": "$foreground/foreground" + }, + "L6Z5jA": { + "fill": "$chart/track", + "cornerRadius": 4 + }, + "dMFUm": { + "width": 147, + "cornerRadius": 4 + }, + "uTqdm": { + "content": "34%" + } + } + }, + { + "id": "dRRIa", + "type": "ref", + "ref": "wPbIp", + "name": "Tunnels", + "width": "fill_container", + "descendants": { + "j1J75": { + "content": "Tunnels", + "fill": "$foreground/foreground" + }, + "L6Z5jA": { + "fill": "$chart/track", + "cornerRadius": 4 + }, + "dMFUm": { + "width": 91, + "cornerRadius": 4 + }, + "uTqdm": { + "content": "21%" + } + } + }, + { + "id": "JkAiq", + "type": "ref", + "ref": "wPbIp", + "name": "SSO", + "width": "fill_container", + "descendants": { + "j1J75": { + "content": "SSO", + "fill": "$foreground/foreground" + }, + "L6Z5jA": { + "fill": "$chart/track", + "cornerRadius": 4 + }, + "dMFUm": { + "width": 82, + "cornerRadius": 4 + }, + "uTqdm": { + "content": "19%" + } + } + }, + { + "id": "kbwG7", + "type": "ref", + "ref": "wPbIp", + "name": "PostgreSQL", + "width": "fill_container", + "descendants": { + "j1J75": { + "content": "PostgreSQL", + "fill": "$foreground/foreground" + }, + "L6Z5jA": { + "fill": "$chart/track", + "cornerRadius": 4 + }, + "dMFUm": { + "width": 48, + "cornerRadius": 4 + }, + "uTqdm": { + "content": "11%" + } + } + }, + { + "id": "u5vRJn", + "type": "ref", + "ref": "wPbIp", + "name": "Audit forwarding", + "width": "fill_container", + "descendants": { + "j1J75": { + "content": "Audit forwarding", + "fill": "$foreground/foreground" + }, + "L6Z5jA": { + "fill": "$chart/track", + "cornerRadius": 4 + }, + "dMFUm": { + "width": 35, + "cornerRadius": 4 + }, + "uTqdm": { + "content": "8%" + } + } + }, + { + "id": "oO1hy", + "type": "ref", + "ref": "wPbIp", + "name": "Multi-cluster", + "width": "fill_container", + "descendants": { + "j1J75": { + "content": "Multi-cluster", + "fill": "$foreground/foreground" + }, + "L6Z5jA": { + "fill": "$chart/track", + "cornerRadius": 4 + }, + "dMFUm": { + "width": 26, + "cornerRadius": 4 + }, + "uTqdm": { + "content": "6%" + } + } + }, + { + "id": "z6RegB", + "type": "ref", + "ref": "wPbIp", + "name": "Packet capture", + "width": "fill_container", + "descendants": { + "j1J75": { + "content": "Packet capture", + "fill": "$foreground/foreground" + }, + "L6Z5jA": { + "fill": "$chart/track", + "cornerRadius": 4 + }, + "dMFUm": { + "width": 17, + "cornerRadius": 4 + }, + "uTqdm": { + "content": "4%" + } + } + } + ] + } + ] + } + ] + }, + { + "type": "frame", + "id": "DJxkA", + "name": "Footnote", + "width": "fill_container", + "stroke": "$separator/separator", + "strokeWidth": { + "top": 1 + }, + "strokeAlignment": "inner", + "layout": "vertical", + "gap": 6, + "padding": [ + 16, + 0, + 0, + 0 + ], + "children": [ + { + "type": "text", + "id": "BPXtv", + "name": "Note", + "fill": "$foreground/muted", + "textGrowth": "fixed-width", + "width": "fill_container", + "content": "All figures are approximate and self-reported. Reports are anonymous; extended reports are signed by a key the install derives locally, which stops impersonation but not invented installs.", + "lineHeight": 1.5, + "fontFamily": "$typography/font-sans", + "fontSize": 12, + "fontWeight": "normal" + }, + { + "type": "text", + "id": "N1Jwcs", + "name": "Note", + "fill": "$foreground/muted", + "textGrowth": "fixed-width", + "width": "fill_container", + "content": "Install IDs are stored only as keyed hashes. Activity records expire 90 days after an install's last report, and daily aggregates are kept for 24 months. No IP address or raw report is stored.", + "lineHeight": 1.5, + "fontFamily": "$typography/font-sans", + "fontSize": 12, + "fontWeight": "normal" + } + ] + } + ] + } + ] + }, + { + "type": "frame", + "id": "Z079vK", + "x": 8327.959083557127, + "y": 1020.8789062499995, + "name": "Receiver / Overview — empty", + "theme": { + "semantic": "dark" + }, + "clip": true, + "width": 1440, + "height": 900, + "fill": "$background/background", + "layout": "vertical", + "children": [ + { + "type": "frame", + "id": "eJ6OT", + "name": "Top bar", + "width": "fill_container", + "height": 64, + "stroke": "$border", + "strokeWidth": { + "bottom": 1 + }, + "strokeAlignment": "inner", + "padding": [ + 0, + 40 + ], + "justifyContent": "space_between", + "alignItems": "center", + "children": [ + { + "type": "frame", + "id": "fLKfk", + "name": "Brand", + "gap": 10, + "alignItems": "center", + "children": [ + { + "type": "rectangle", + "id": "Oy7L3", + "name": "Logo", + "fill": { + "type": "image", + "enabled": true, + "url": "../website/design-assets/gameplane-icon.png", + "mode": "contain" + }, + "width": 24, + "height": 24 + }, + { + "type": "text", + "id": "k0J6XW", + "name": "Wordmark", + "fill": "$foreground/foreground", + "content": "gameplane", + "fontFamily": "$typography/font-mono", + "fontSize": 15, + "fontWeight": "600" + }, + { + "type": "text", + "id": "W2GPI", + "name": "Slash", + "fill": "$foreground/muted", + "content": "/", + "fontFamily": "$typography/font-sans", + "fontSize": 15, + "fontWeight": "normal" + }, + { + "type": "text", + "id": "FgVOn", + "name": "Product", + "fill": "$foreground/foreground", + "content": "Telemetry", + "fontFamily": "$typography/font-sans", + "fontSize": 15, + "fontWeight": "normal" + }, + { + "id": "th45R", + "type": "ref", + "ref": "Q401P", + "name": "Approx chip", + "descendants": { + "wH6ey": { + "content": "Approximate · self-reported" + } + } + } + ] + }, + { + "type": "frame", + "id": "YA8Cg", + "name": "Session", + "gap": 16, + "alignItems": "center", + "children": [ + { + "type": "text", + "id": "L19QW", + "name": "As of", + "fill": "$foreground/muted", + "content": "No data yet", + "fontFamily": "$typography/font-sans", + "fontSize": 13, + "fontWeight": "normal" + }, + { + "id": "R6ROEM", + "type": "ref", + "ref": "bCpKh", + "name": "Sign out", + "descendants": { + "Watg8": { + "icon": "log-out" + }, + "U8ICg": { + "content": "Sign out" + } + } + } + ] + } + ] + }, + { + "type": "frame", + "id": "W1xXA", + "name": "Content", + "width": "fill_container", + "layout": "vertical", + "gap": 32, + "padding": [ + 32, + 40, + 48, + 40 + ], + "children": [ + { + "type": "frame", + "id": "Y9ifbZ", + "name": "Title row", + "width": "fill_container", + "justifyContent": "space_between", + "alignItems": "end", + "children": [ + { + "type": "frame", + "id": "N3wvSC", + "name": "Title block", + "width": 760, + "layout": "vertical", + "gap": 8, + "children": [ + { + "type": "text", + "id": "m2ly0", + "name": "Eyebrow", + "fill": "$accent/accent", + "content": "PROVIDER OVERVIEW", + "fontFamily": "$typography/font-mono", + "fontSize": 12, + "fontWeight": "normal", + "letterSpacing": 1.5 + }, + { + "type": "text", + "id": "uw4PM", + "name": "Title", + "fill": "$foreground/foreground", + "content": "Usage across reporting installs", + "fontFamily": "$typography/font-mono", + "fontSize": 32, + "fontWeight": "600" + }, + { + "type": "text", + "id": "ZiECk", + "name": "Subtitle", + "fill": "$foreground/muted", + "textGrowth": "fixed-width", + "width": "fill_container", + "content": "Daily aggregates from self-reported, anonymous reports. Every figure is approximate: installs choose to report, and nothing is verified beyond the report signature.", + "lineHeight": 1.5, + "fontFamily": "$typography/font-sans", + "fontSize": 15, + "fontWeight": "normal" + } + ] + }, + { + "id": "Iz2y7", + "type": "ref", + "ref": "sklNL", + "name": "Range", + "children": [ + { + "id": "hnl8m", + "type": "ref", + "ref": "nO0GM", + "name": "7 days", + "descendants": { + "x5KZZd": { + "content": "7 days" + } + } + }, + { + "id": "LUA0n", + "type": "ref", + "ref": "iEQse", + "name": "30 days", + "descendants": { + "BtgBT": { + "content": "30 days" + } + } + }, + { + "id": "g25lA", + "type": "ref", + "ref": "nO0GM", + "name": "90 days", + "descendants": { + "x5KZZd": { + "content": "90 days" + } + } + }, + { + "id": "Y3uyQw", + "type": "ref", + "ref": "nO0GM", + "name": "365 days", + "descendants": { + "x5KZZd": { + "content": "365 days" + } + } + } + ] + } + ] + }, + { + "type": "frame", + "id": "A1PwG", + "name": "Empty state", + "width": "fill_container", + "height": 420, + "fill": "$surface/surface", + "cornerRadius": "$radius/3xl", + "stroke": "$border", + "strokeWidth": 1, + "strokeAlignment": "inner", + "layout": "vertical", + "gap": 12, + "padding": 40, + "justifyContent": "center", + "alignItems": "center", + "children": [ + { + "type": "frame", + "id": "q5cEEN", + "name": "Icon wrap", + "width": 48, + "height": 48, + "fill": "$accent/soft", + "cornerRadius": 12, + "justifyContent": "center", + "alignItems": "center", + "children": [ + { + "type": "icon", + "id": "iSRaQ", + "name": "Icon", + "width": 22, + "height": 22, + "icon": "inbox", + "library": "lucide", + "fill": "$accent/accent" + } + ] + }, + { + "type": "text", + "id": "T5Kr4b", + "name": "Title", + "fill": "$foreground/foreground", + "content": "No reports yet", + "fontFamily": "$typography/font-mono", + "fontSize": 20, + "fontWeight": "600" + }, + { + "type": "text", + "id": "JJM29", + "name": "Body", + "fill": "$foreground/muted", + "textGrowth": "fixed-width", + "width": 520, + "content": "Figures appear once this receiver has accepted reports for a full UTC day. Installs send to POST /ingest on the public port; nothing is shown until there is data, so no chart is drawn from zeros.", + "lineHeight": 1.5, + "textAlign": "center", + "fontFamily": "$typography/font-sans", + "fontSize": 14, + "fontWeight": "normal" + } + ] + } + ] + } + ] + }, + { + "type": "frame", + "id": "jy9Rn", + "x": 8327.959083557127, + "y": 2040.8789062499995, + "name": "Receiver / Extended — none in range", + "theme": { + "semantic": "dark" + }, + "width": 1440, + "fill": "$background/background", + "layout": "vertical", + "gap": 16, + "padding": [ + 32, + 40 + ], + "children": [ + { + "type": "text", + "id": "Xb6cp", + "name": "Heading", + "fill": "$foreground/foreground", + "content": "Extended reports", + "fontFamily": "$typography/font-mono", + "fontSize": 20, + "fontWeight": "600" + }, + { + "type": "frame", + "id": "TRz9s", + "name": "Message", + "width": "fill_container", + "fill": "$surface/surface", + "cornerRadius": "$radius/3xl", + "stroke": "$border", + "strokeWidth": 1, + "strokeAlignment": "inner", + "gap": 12, + "padding": 20, + "alignItems": "center", + "children": [ + { + "type": "icon", + "id": "tN7f3", + "name": "Icon", + "width": 18, + "height": 18, + "icon": "info", + "library": "lucide", + "fill": "$foreground/muted" + }, + { + "type": "text", + "id": "NZUcy", + "name": "Text", + "fill": "$foreground/secondary", + "content": "No reports in this range included extended data. Basic figures above still cover every report.", + "fontFamily": "$typography/font-sans", + "fontSize": 14, + "fontWeight": "normal" + } + ] + } + ] + } + ], + "themes": { + "semantic": [ + "light", + "dark" + ], + "primitives": [ + "default" + ], + "typography": [ + "default" + ] + }, + "variables": { + "background/background": { + "type": "color", + "value": [ + { + "value": "#FFFFFF", + "theme": { + "semantic": "light" + } + }, + { + "value": "#121114", + "theme": { + "semantic": "dark" + } + } + ] + }, + "muted": { + "type": "color", + "value": [ + { + "value": "#6E5262", + "theme": { + "semantic": "light" + } + }, + { + "value": "#9E98A6", + "theme": { + "semantic": "dark" + } + } + ] + }, + "spacing/3": { + "type": "number", + "value": [ + { + "value": 12, + "theme": { + "primitives": "default" + } + } + ] + }, + "foreground/foreground": { + "type": "color", + "value": [ + { + "value": "#2A0F1E", + "theme": { + "semantic": "light" + } + }, + { + "value": "#F5F3F7", + "theme": { + "semantic": "dark" + } + } + ] + }, + "typography/font-sans": { + "type": "string", + "value": [ + { + "value": "Geist", + "theme": { + "typography": "default" + } + } + ] + }, + "separator/separator": { + "type": "color", + "value": [ + { + "value": "#EFC3D6", + "theme": { + "semantic": "light" + } + }, + { + "value": "#232227", + "theme": { + "semantic": "dark" + } + } + ] + }, + "default/default": { + "type": "color", + "value": [ + { + "value": "#F6DCE7", + "theme": { + "semantic": "light" + } + }, + { + "value": "#232128", + "theme": { + "semantic": "dark" + } + } + ] + }, + "foreground/link": { + "type": "color", + "value": [ + { + "value": "#2563EB", + "theme": { + "semantic": "light" + } + }, + { + "value": "#7DB4FF", + "theme": { + "semantic": "dark" + } + } + ] + }, + "accent/accent": { + "type": "color", + "value": [ + { + "value": "#DB2777", + "theme": { + "semantic": "light" + } + }, + { + "value": "#FF4FA3", + "theme": { + "semantic": "dark" + } + } + ] + }, + "overlay": { + "type": "color", + "value": [ + { + "value": "#FFF7FB", + "theme": { + "semantic": "light" + } + }, + { + "value": "#1C1A20", + "theme": { + "semantic": "dark" + } + } + ] + }, + "radius/xl": { + "type": "number", + "value": [ + { + "value": 12, + "theme": { + "primitives": "default" + } + } + ] + }, + "radius/2xl": { + "type": "number", + "value": [ + { + "value": 16, + "theme": { + "primitives": "default" + } + } + ] + }, + "surface/surface": { + "type": "color", + "value": [ + { + "value": "#FFF7FB", + "theme": { + "semantic": "light" + } + }, + { + "value": "#1C1A20", + "theme": { + "semantic": "dark" + } + } + ] + }, + "radius/3xl": { + "type": "number", + "value": [ + { + "value": 24, + "theme": { + "primitives": "default" + } + } + ] + }, + "accent/foreground": { + "type": "color", + "value": [ + { + "value": "#FFFFFF", + "theme": { + "semantic": "light" + } + }, + { + "value": "#FFFFFF", + "theme": { + "semantic": "dark" + } + } + ] + }, + "success/success": { + "type": "color", + "value": [ + { + "value": "#21C45D", + "theme": { + "semantic": "light" + } + }, + { + "value": "#21C45D", + "theme": { + "semantic": "dark" + } + } + ] + }, + "border": { + "type": "color", + "value": [ + { + "value": "#EFC3D6", + "theme": { + "semantic": "light" + } + }, + { + "value": "#2C2932", + "theme": { + "semantic": "dark" + } + } + ] + }, + "warning/warning": { + "type": "color", + "value": [ + { + "value": "#F59F0A", + "theme": { + "semantic": "light" + } + }, + { + "value": "#F59F0A", + "theme": { + "semantic": "dark" + } + } + ] + }, + "danger/danger": { + "type": "color", + "value": [ + { + "value": "#DC2828", + "theme": { + "semantic": "light" + } + }, + { + "value": "#E0304F", + "theme": { + "semantic": "dark" + } + } + ] + }, + "danger/foreground": { + "type": "color", + "value": [ + { + "value": "#FCFCFC", + "theme": { + "semantic": "light" + } + }, + { + "value": "#FCFCFC", + "theme": { + "semantic": "dark" + } + } + ] + }, + "radius/md": { + "type": "number", + "value": [ + { + "value": 6, + "theme": { + "primitives": "default" + } + } + ] + }, + "spacing/2": { + "type": "number", + "value": [ + { + "value": 8, + "theme": { + "primitives": "default" + } + } + ] + }, + "spacing/4": { + "type": "number", + "value": [ + { + "value": 16, + "theme": { + "primitives": "default" + } + } + ] + }, + "spacing/5": { + "type": "number", + "value": [ + { + "value": 20, + "theme": { + "primitives": "default" + } + } + ] + }, + "danger/soft": { + "type": "color", + "value": [ + { + "value": "#FEE2E2", + "theme": { + "semantic": "light" + } + }, + { + "value": "#2E1317", + "theme": { + "semantic": "dark" + } + } + ] + }, + "danger/soft-foreground": { + "type": "color", + "value": [ + { + "value": "#EF4444", + "theme": { + "semantic": "light" + } + }, + { + "value": "#F87171", + "theme": { + "semantic": "dark" + } + } + ] + }, + "success/foreground": { + "type": "color", + "value": [ + { + "value": "#18181B", + "theme": { + "semantic": "light" + } + }, + { + "value": "#18181B", + "theme": { + "semantic": "dark" + } + } + ] + }, + "warning/foreground": { + "type": "color", + "value": [ + { + "value": "#18181B", + "theme": { + "semantic": "light" + } + }, + { + "value": "#18181B", + "theme": { + "semantic": "dark" + } + } + ] + }, + "accent/soft": { + "type": "color", + "value": [ + { + "value": "#FFFFFF", + "theme": { + "semantic": "light" + } + }, + { + "value": "#331525", + "theme": { + "semantic": "dark" + } + } + ] + }, + "accent/soft-foreground": { + "type": "color", + "value": [ + { + "value": "#BE185D", + "theme": { + "semantic": "light" + } + }, + { + "value": "#FF8AC4", + "theme": { + "semantic": "dark" + } + } + ] + }, + "success/soft": { + "type": "color", + "value": [ + { + "value": "#E0FAE4", + "theme": { + "semantic": "light" + } + }, + { + "value": "#0B2211", + "theme": { + "semantic": "dark" + } + } + ] + }, + "success/soft-foreground": { + "type": "color", + "value": [ + { + "value": "#006924", + "theme": { + "semantic": "light" + } + }, + { + "value": "#42BD66", + "theme": { + "semantic": "dark" + } + } + ] + }, + "warning/soft": { + "type": "color", + "value": [ + { + "value": "#FEF3C7", + "theme": { + "semantic": "light" + } + }, + { + "value": "#331F05", + "theme": { + "semantic": "dark" + } + } + ] + }, + "warning/soft-foreground": { + "type": "color", + "value": [ + { + "value": "#92400E", + "theme": { + "semantic": "light" + } + }, + { + "value": "#F6AD4C", + "theme": { + "semantic": "dark" + } + } + ] + }, + "segment": { + "type": "color", + "value": [ + { + "value": "#FFFFFF", + "theme": { + "semantic": "light" + } + }, + { + "value": "#1D1B22", + "theme": { + "semantic": "dark" + } + } + ] + }, + "foreground/segment": { + "type": "color", + "value": [ + { + "value": "#2A0F1E", + "theme": { + "semantic": "light" + } + }, + { + "value": "#F5F3F7", + "theme": { + "semantic": "dark" + } + } + ] + }, + "spacing/6": { + "type": "number", + "value": [ + { + "value": 24, + "theme": { + "primitives": "default" + } + } + ] + }, + "surface/secondary": { + "type": "color", + "value": [ + { + "value": "#F8DDE9", + "theme": { + "semantic": "light" + } + }, + { + "value": "#17151A", + "theme": { + "semantic": "dark" + } + } + ] + }, + "default/foreground": { + "type": "color", + "value": [ + { + "value": "#2A0F1E", + "theme": { + "semantic": "light" + } + }, + { + "value": "#EDE9F0", + "theme": { + "semantic": "dark" + } + } + ] + }, + "disabled-opacity": { + "type": "number", + "value": [ + { + "value": 50, + "theme": { + "semantic": "light" + } + }, + { + "value": 50, + "theme": { + "semantic": "dark" + } + } + ] + }, + "surface/tertiary": { + "type": "color", + "value": [ + { + "value": "#F8DDE9", + "theme": { + "semantic": "light" + } + }, + { + "value": "#141317", + "theme": { + "semantic": "dark" + } + } + ] + }, + "field/placeholder": { + "type": "color", + "value": [ + { + "value": "#8A6C7B", + "theme": { + "semantic": "light" + } + }, + { + "value": "#7B7584", + "theme": { + "semantic": "dark" + } + } + ] + }, + "field/background": { + "type": "color", + "value": [ + { + "value": "#FFFFFF", + "theme": { + "semantic": "light" + } + }, + { + "value": "#17151A", + "theme": { + "semantic": "dark" + } + } + ] + }, + "field/foreground": { + "type": "color", + "value": [ + { + "value": "#2A0F1E", + "theme": { + "semantic": "light" + } + }, + { + "value": "#FCFCFC", + "theme": { + "semantic": "dark" + } + } + ] + }, + "foreground/muted": { + "type": "color", + "value": [ + { + "value": "#6E5262", + "theme": { + "semantic": "light" + } + }, + { + "value": "#9E98A6", + "theme": { + "semantic": "dark" + } + } + ] + }, + "foreground/secondary": { + "type": "color", + "value": [ + { + "value": "#6E5262", + "theme": { + "semantic": "light" + } + }, + { + "value": "#9E98A6", + "theme": { + "semantic": "dark" + } + } + ] + }, + "chart/series-1": { + "type": "color", + "value": [ + { + "value": "#DB2777", + "theme": { + "semantic": "light" + } + }, + { + "value": "#EC4899", + "theme": { + "semantic": "dark" + } + } + ] + }, + "chart/series-2": { + "type": "color", + "value": [ + { + "value": "#2a78d6", + "theme": { + "semantic": "light" + } + }, + { + "value": "#3987e5", + "theme": { + "semantic": "dark" + } + } + ] + }, + "chart/grid": { + "type": "color", + "value": [ + { + "value": "#F8E6EE", + "theme": { + "semantic": "light" + } + }, + { + "value": "#232128", + "theme": { + "semantic": "dark" + } + } + ] + }, + "chart/baseline": { + "type": "color", + "value": [ + { + "value": "#EFC3D6", + "theme": { + "semantic": "light" + } + }, + { + "value": "#2C2932", + "theme": { + "semantic": "dark" + } + } + ] + }, + "chart/track": { + "type": "color", + "value": [ + { + "value": "#DB27771F", + "theme": { + "semantic": "light" + } + }, + { + "value": "#EC48992E", + "theme": { + "semantic": "dark" + } + } + ] + }, + "typography/font-mono": { + "type": "string", + "value": [ + { + "value": "JetBrains Mono", + "theme": { + "typography": "default" + } + } + ] + } + }, + "fileToken": "8925e41a-752d-4b7f-ad17-679049aa15a1" +} \ No newline at end of file From 29c9a60a3519f723c56098caecd20834f1bac09e Mon Sep 17 00:00:00 2001 From: valgulnecron <39313199+ValgulNecron@users.noreply.github.com> Date: Wed, 7 Oct 2026 01:31:58 +0200 Subject: [PATCH 13/47] docs(specs): 022 record US1 scout corrections, limiter rules, E2E approach and sign-offs Co-Authored-By: Claude Opus 5.5 Claude-Session: https://claude.ai/code/session_01S7krnvWjW1a6bW5doxiVHB Signed-off-by: valgulnecron <39313199+ValgulNecron@users.noreply.github.com> --- .../contracts/api-telemetry-http.md | 2 +- .../research.md | 7 +++-- specs/022-default-telemetry-dashboard/spec.md | 2 +- .../022-default-telemetry-dashboard/tasks.md | 28 ++++++++++--------- 4 files changed, 21 insertions(+), 18 deletions(-) diff --git a/specs/022-default-telemetry-dashboard/contracts/api-telemetry-http.md b/specs/022-default-telemetry-dashboard/contracts/api-telemetry-http.md index 65d53ba26..7a9415394 100644 --- a/specs/022-default-telemetry-dashboard/contracts/api-telemetry-http.md +++ b/specs/022-default-telemetry-dashboard/contracts/api-telemetry-http.md @@ -73,7 +73,7 @@ Body: `{"action": "seen" | "keep" | "extended-off" | "all-off"}`. | Action | Effect | |---|---| -| `seen` | Sets `notice_shown_at` if it isn't set yet, and opens the schedule (`next_due_at = now + U(0, 15m)`). Records no ack. Idempotent. | +| `seen` | Sets `notice_shown_at` if it isn't set yet, and opens the schedule (`next_due_at = now + U(0, min(15m, interval/4))`, research R12). Records no ack. Idempotent. | | `keep` | Ack (`action=keep`). Consent unchanged. | | `extended-off` | Ack. `extended=false`, `consent_source=admin`, install ID deleted. | | `all-off` | Ack. `sendMetrics=false`, `extended=false`, `consent_source=admin`, install ID deleted, schedule closed. | diff --git a/specs/022-default-telemetry-dashboard/research.md b/specs/022-default-telemetry-dashboard/research.md index 2d5139f42..b49ff4625 100644 --- a/specs/022-default-telemetry-dashboard/research.md +++ b/specs/022-default-telemetry-dashboard/research.md @@ -117,12 +117,13 @@ Fallback for older receivers (FR-016, SC-013): ## R6. Per-source limits and source addresses (FR-014, FR-021, FR-032) -**Decision**: All limits are in memory only and keyed by source IP, which is never written to disk. +**Decision**: All limits are in memory only and keyed by source, which is never written to disk. A source is the IPv4 address (IPv4-mapped IPv6 included) or the IPv6 /64, so one host can't rotate through its prefix. - **Ingest.** At most `INGEST_SOURCE_DAILY_LIMIT` *accepted* reports per source per UTC day, default **20**. Over the limit the receiver returns `429`. - **Public summary.** A token bucket of 60 requests per minute per source, burst 10. - **Dashboard login.** 5 attempts per minute per source. - **Source IP.** This is the TCP peer address. `X-Forwarded-For` is trusted only when the peer falls inside `TRUSTED_PROXY_CIDRS` (default empty). -- **Cleanup.** Limiter state is purged at UTC midnight and whenever an entry has been idle for 10 minutes. +- **Cleanup.** Daily counters reset at UTC midnight. Token buckets are purged after 10 idle minutes (daily counters are not, or an idle source would regain its budget). +- **Capacity.** Each limiter tracks at most 100,000 sources. Beyond that, new sources share one overflow budget with the same limit as a single source, so a flood of addresses never bypasses the limits (security review of 4c742e7d). **Rationale**: - A default of 20 tolerates CGNAT and shared egress (several homelabs behind one address) while capping how much one source can distort a day. @@ -137,7 +138,7 @@ Fallback for older receivers (FR-016, SC-013): **Decision**: - **Rendering.** The receiver renders the dashboard itself with `html/template`. CSS and templates are embedded with `go:embed`, and charts are **inline SVG** generated server-side. There is **no JavaScript**. - **Range selection.** The range is chosen with plain links (`?range=7|30|90|365`, default 30). -- **Listener.** The dashboard has its own listener, `DASHBOARD_LISTEN_ADDR` (default `:8081`), separate from the public listener (`:8080`: ingest, healthz, public summary). Prometheus `/metrics` also moves to the dashboard listener, behind the token (spec Q8), so no aggregate other than the public summary is readable from the public port. +- **Listener.** The dashboard has its own listener, `DASHBOARD_LISTEN_ADDR` (default `:8081`), separate from the public listener (`:8080`: ingest, healthz, public summary). Templates use no inline `style` attributes or `

    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