Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
420 commits
Select commit Hold shift + click to select a range
8d53764
fix(runner/api,ci): W2 minor-triage fixes — cron isolation, watchdog …
demtario Sep 24, 2026
83df579
Merge minors W2: independent rollup cron step, watchdog tick line, CI…
demtario Sep 24, 2026
077b44a
fix(runner/o11y): W1 minor-triage fix pass — 8 findings
demtario Sep 24, 2026
ea032fb
fix(runner/o11y): W1 advisor fix-up round — strengthen tests, fix sta…
demtario Sep 24, 2026
9f2d4bc
Merge minors W1: heartbeat RPC-only, dedupe hash timestamps, shutdown…
demtario Sep 24, 2026
5f3374b
fix(runner/o11y): focused review fix-up — heartbeat RPC binding, secr…
demtario Sep 24, 2026
b213240
fix(runner/o11y): advisor fix-up round — safe D1-state test, real A-I…
demtario Sep 24, 2026
dca5974
Merge focused-review fixes X1: heartbeat RPC binding, secret redactio…
demtario Sep 24, 2026
1e376b4
fix(runner/o11y): Z-A-C1 — make every ingest scrub/normalise/fingerpr…
demtario Sep 24, 2026
ca93612
fix(runner/o11y): Z-B-C1 — a lineno: 0 stack frame must never throw o…
demtario Sep 24, 2026
a92ac17
fix(runner/o11y): H1 — skipDedupe on facade event()/metric() (Faro dr…
demtario Sep 24, 2026
05c8131
fix(runner/o11y): H2 — derive COMPOSE_PROJECT_NAME per worktree (dev-…
demtario Sep 24, 2026
f3453be
ci: CI-1 — bump actions off the deprecated node20 runtime
demtario Sep 24, 2026
a5c8499
fix(runner/o11y): advisor sweep — STACK_LINE_RE catastrophic backtrac…
demtario Sep 24, 2026
51cc313
Merge final-review fixes Y2: linear ingest scrub regexes, drain poiso…
demtario Sep 24, 2026
89fc8f7
fix(runner/o11y): advisor fix-up — correct the volume-rename doc clai…
demtario Sep 24, 2026
a3bec11
Merge final-review fixes Y1: Faro skipDedupe for example events, per-…
demtario Sep 24, 2026
0949721
ci: disable setup-node v5 auto pnpm cache in the presence job
demtario Sep 24, 2026
b321fc0
fix(runner/o11y): proxy /grafana/* through the box DO's fetch(), not RPC
demtario Sep 24, 2026
3a07866
fix(runner/o11y): buffer the /grafana/* request body before the box s…
demtario Sep 24, 2026
e533e4d
Merge Z1: proxy /grafana/* through the box DO fetch(), not RPC
demtario Sep 24, 2026
4079be4
chore(runner/o11y): drop the duplicated waking-page logo asset
demtario Sep 25, 2026
26f22e8
fix(runner/o11y): keep the first copy of an in-batch repeat
demtario Sep 25, 2026
6bb265b
feat(runner/admin): link /admin to Grafana dashboards
demtario Sep 25, 2026
0291df1
fix(runner/e2e): stop the o11y-local/telemetry-metrics beforeAll time…
demtario Sep 25, 2026
b773a18
docs(runner/o11y): fix stale cron URLs, and note local-only gaps (V-t…
demtario Sep 25, 2026
e248a42
fix(runner/o11y): release container probe bodies so the idle stop can…
demtario Sep 25, 2026
21ca1a7
fix(runner/o11y): record wake-to-ready time on the o11y.wake point
demtario Sep 25, 2026
49b8efc
Merge VA: release container probe bodies (idle stop), in-batch dedupe…
demtario Sep 25, 2026
a8b0c4d
docs(runner/ci): correct e2e-o11y-local.yml's header after the contai…
demtario Sep 25, 2026
674b3e9
docs(runner/o11y): fix review findings in the local-dev/cron docs
demtario Sep 25, 2026
9908111
docs(runner/o11y): document F8's wake-to-ready duration_ms (contract …
demtario Sep 25, 2026
0e32e25
docs(runner/o11y): document F10b/F11/F12/F15 wording gaps (W-triage)
demtario Sep 25, 2026
5953719
Merge VB: /admin Grafana link, CI beforeAll flake, local-dev/cron/con…
demtario Sep 25, 2026
19153c2
fix(runner/admin): make the /admin -> Grafana link work under pnpm de…
demtario Sep 25, 2026
a18a356
fix(runner/admin): real revert-check for the Grafana link, honest lea…
demtario Sep 25, 2026
5e0ad5b
Merge AG: /admin Grafana link works under pnpm dev:full (VITE_GRAFANA…
demtario Sep 25, 2026
646cb77
fix(runner/o11y): give the ReDoS timing tests a shared, load-tolerant…
demtario Sep 25, 2026
b6d2f10
Merge RB: load-tolerant shared budget for the ReDoS timing tests
demtario Sep 25, 2026
47e0c84
fix(runner/o11y): carry ht_major on preview.runtime_error (F10a)
demtario Sep 25, 2026
98cf96f
fix(runner/o11y): emit container.boot_ms ready/error and carry
demtario Sep 25, 2026
814ec52
Merge MG: ht_major on preview.runtime_error, container.boot_ms ready/…
demtario Sep 25, 2026
da65cba
fix(runner/o11y): bound every GrafanaBox wait on the container (F13)
demtario Sep 25, 2026
655e3d6
fix(runner/o11y): reset a GrafanaBox whose probes stay stuck (F13 rel…
demtario Sep 25, 2026
3e8adc8
Merge F13: bound every GrafanaBox wait on the container, reset a wedg…
demtario Sep 25, 2026
d131dfe
fix(runner/e2e): keep containers on for the o11y-local API worker
demtario Sep 25, 2026
fa76eff
fix(runner/api): pool.gauge counts awake sessions, not every 24h mete…
demtario Sep 25, 2026
9aed5f2
test(runner/api): make pool.gauge boundary test revert-sensitive
demtario Sep 25, 2026
9a21a39
Merge R3C: pool.gauge counts awake sessions only
demtario Sep 25, 2026
2167e83
fix(runner/o11y): redact IP addresses at ingest; measurements go AE-o…
demtario Sep 25, 2026
b0dfda9
docs(runner/o11y): fix contract wording for F18, F8, F10 (R3B)
demtario Sep 25, 2026
37ff450
fix(runner/authoring): strip Faro's message-echo pseudo-frame before …
demtario Sep 25, 2026
f28f1e1
fix(runner/authoring): local leg for preview-error monitoring under d…
demtario Sep 25, 2026
2e97f7a
test(runner/authoring): revert-sensitive e2e coverage for F17a and F10
demtario Sep 25, 2026
5eb74cd
Merge R3A: keep errors quoting a foreign URL (F17a), local preview-er…
demtario Sep 25, 2026
ea69b19
fix(runner/o11y): advisor-review fixes for R3B — storeRecord ordering…
demtario Sep 25, 2026
902c529
Merge R3B: IP redaction at ingest and in the browser scrub, measureme…
demtario Sep 25, 2026
56fd9e2
fix(runner/api): emit snapshot.build on the inline build path too (F25)
demtario Sep 25, 2026
0b105b3
fix(runner/api): serve.share counts the share-page view, not every /a…
demtario Sep 25, 2026
92b0ec2
fix(runner/o11y): bucket.resolve_ms panels stop filtering on columns …
demtario Sep 25, 2026
9dd3490
fix(runner/scripts): fill empty O11Y_EXPORT_SECRET/SENTRY_HOOK_SECRET…
demtario Sep 25, 2026
ebcfe79
Merge R4: snapshot.build on inline builds, serve.share per share view…
demtario Sep 25, 2026
cac2bcd
fix(runner/api): theme.ai emits outcome=error on a network-level Lite…
demtario Sep 25, 2026
cdfb81e
fix(runner/api): malformed JSON on session routes returns 400, not 500
demtario Sep 25, 2026
6b88c51
fix(runner/api): snapshot.build records the built artifact's bytes
demtario Sep 25, 2026
832f361
fix(runner/authoring): /share and /edit show a clear message for a mi…
demtario Sep 25, 2026
199a260
docs(runner): runbook — new session-probe wording, rollback caveat, l…
demtario Sep 25, 2026
da1c6e4
fix(runner/o11y): cap /grafana/* request bodies at 10 MB
demtario Sep 25, 2026
725c5de
fix(runner/o11y): skip readiness probes while GrafanaBox is stopping
demtario Sep 25, 2026
395f115
fix(runner/o11y): add metric name, AE-only attrs and session id to th…
demtario Sep 25, 2026
8b8f4ec
fix(runner/o11y): lite-beacon web vitals are AE-only, matching F18
demtario Sep 25, 2026
32cac41
fix(runner/o11y): persist alert-eval-error's failing rule id(s) indep…
demtario Sep 25, 2026
e82c7f1
fix(runner/o11y): retitle two Grafana panels to say they count reports
demtario Sep 25, 2026
ca99b1c
fix(runner/api): snapshot.build bytes excludes copied private files o…
demtario Sep 25, 2026
e6f7e01
fix(runner/tests,docs): review fixes — heading, ClickHouse leak, shar…
demtario Sep 25, 2026
1a7943d
Merge feat/o11y/qw-o11y: quick-win follow-ups
demtario Sep 25, 2026
8c0a070
Merge feat/o11y/qw-api-docs: quick-win follow-ups
demtario Sep 25, 2026
9e43d5a
fix(runner/o11y): o11y.ingest accepted self-metric counts every accep…
demtario Sep 25, 2026
5dcfcb1
test(runner/o11y): cover the AE-only duplicate path and pin lite.ts b…
demtario Sep 25, 2026
291d27a
Merge R6A: o11y.ingest accepted counts every accepted record (F28), l…
demtario Sep 25, 2026
2780fd7
fix(runner/authoring): collapse demo-runtime keystroke ladders, one F…
demtario Sep 25, 2026
3211243
docs(runner/o11y): contract notes for the F26 collapse, demo-runtime …
demtario Sep 25, 2026
cc24f39
test(runner/authoring): pin that a preview remount alone re-arms firs…
demtario Sep 25, 2026
92cb296
docs(runner/authoring): correct the collapse's dual-channel claim, no…
demtario Sep 25, 2026
7d11d35
Merge R6B: collapse demo-runtime keystroke ladders, demo-runtime Loki…
demtario Sep 25, 2026
2a72df1
fix(runner/o11y): keep demo-runtime errors out of the Runner overview…
demtario Sep 25, 2026
1663b43
fix(runner/o11y): drain symbolication never resolved a frame inside w…
demtario Sep 25, 2026
8db9338
Merge F30: symbolicate with @jridgewell/trace-mapping (source-map-js …
demtario Sep 25, 2026
4e7cb5e
fix(runner/o11y): announce a new fingerprint exactly once across the …
demtario Sep 28, 2026
97b61b0
test(runner/o11y): pin that lite beacons differing only in digits nev…
demtario Sep 28, 2026
0050f4a
fix(runner/api): malformed JSON on POST/PATCH /api/demos returns 400,…
demtario Sep 28, 2026
e5fa0f0
test(runner/api): pin pool.gauge's cap constant against wrangler.json…
demtario Sep 28, 2026
fa5a3c3
fix(runner/authoring): count Tier-1 syntax errors as sandpack.compile…
demtario Sep 28, 2026
bfeb016
fix(runner/o11y): send Retry-After on a rate-limited /telemetry/* 429
demtario Sep 28, 2026
e72629b
docs(runner): retire the post-deploy PATCH /api/demos/:id smoke probe…
demtario Sep 28, 2026
afd58cd
fix(runner/o11y): restart minio/clickhouse unless-stopped so a Docker…
demtario Sep 28, 2026
13235cc
fix(runner/o11y): pause drains on the tick the spend cap fires, and i…
demtario Sep 28, 2026
2e99909
test(runner/authoring): pin the replacesRun rule against in-flight ru…
demtario Sep 28, 2026
3458d18
docs(runner/o11y): sandpack.compile_error now counts parcel transpile…
demtario Sep 28, 2026
82901c7
Merge R9A: new-fingerprint announced once (F35), budget pause gates w…
demtario Sep 28, 2026
899b1ce
fix(runner/dev): surface a buried install/build failure instead of a …
demtario Sep 28, 2026
dfec57c
Merge R9B: /api/demos malformed JSON 400 (F33), pool cap drift test (…
demtario Sep 28, 2026
3a34e62
test(runner/e2e): gate the typed compile-error spec on E2E_LIVE, home…
demtario Sep 28, 2026
a2e5c36
Merge R9C: Tier-1 syntax errors count as sandpack.compile_error (F10 …
demtario Sep 28, 2026
4ca1ad0
fix(runner/o11y): per-beacon id so byte-identical lite beacons are no…
demtario Sep 28, 2026
631a1e4
test(runner/o11y): cover the F32 per-beacon id (dedupe, validator, re…
demtario Sep 28, 2026
90f43d9
test(runner/o11y): make the F32 id-less dedupe-hash pin route-level, …
demtario Sep 28, 2026
d36e0b2
Merge F32: per-beacon id in the lite reporter so byte-identical beaco…
demtario Sep 28, 2026
340db19
refactor(runner/o11y): export scrub text-pattern helpers from the run…
demtario Sep 28, 2026
0abd308
refactor(runner/o11y): drop the unused stripUrlQueriesInText re-export
demtario Sep 28, 2026
5fabc57
refactor(runner/api): delete unused reportUncaught, fix stale otlp wi…
demtario Sep 28, 2026
2c039cc
refactor(runner/runtime): drop unread SandpackRuntime#claim field
demtario Sep 28, 2026
b0f9753
Merge P1-C: one copy of the text-scrub helpers, exported from the run…
demtario Sep 28, 2026
a9a622a
refactor(runner/runtime): drop unused derived attribute type aliases
demtario Sep 28, 2026
a097225
refactor(runner/pipeline): drop unused secret export helpers from o11…
demtario Sep 28, 2026
a682643
refactor(runner/scripts): inline planNames, drop export from file-loc…
demtario Sep 28, 2026
3dae327
test(runner): inline planNames call sites, drop redundant guard, fix …
demtario Sep 28, 2026
311c241
refactor(runner): drop export from symbols used only in their own file
demtario Sep 28, 2026
db120f7
refactor(runner/o11y): import shared PUBLIC_ORIGIN in box.ts
demtario Sep 28, 2026
b4162d0
refactor(runner/o11y): drop unused router.ts exports (D1, D2)
demtario Sep 28, 2026
6f663df
refactor(runner/o11y): remove the unreachable 501 admin-route stub (D3)
demtario Sep 28, 2026
2890154
refactor(runner/o11y): drop O11yHeartbeat's unused fetch() shim (D4, S1)
demtario Sep 28, 2026
3c0953c
refactor(runner/o11y): drop two TS6133 unused imports (D8, D9)
demtario Sep 28, 2026
40e1e50
test(runner/o11y): merge redundant heartbeat/route tests (T1-T3)
demtario Sep 28, 2026
4b20bd5
Merge P1-D: small dead-code removals, drop the orphan o11y-seed.mjs s…
demtario Sep 28, 2026
052354a
Merge P1-A: drop dead o11y routing exports, the unreachable 501 stub,…
demtario Sep 28, 2026
3db9f70
refactor(runner/o11y): drop the un-padded row: migration, move pendin…
demtario Sep 28, 2026
c3f9ccd
refactor(runner/o11y): drop unused hashStorageKey, fix stale hash key…
demtario Sep 28, 2026
80f9c32
test(runner/o11y): close the padding-invariant coverage gap left by d…
demtario Sep 28, 2026
3216f5e
Merge P1-B: drop the un-padded row-key migration (never deployed), mo…
demtario Sep 28, 2026
9f9dafd
docs(runner): trim review-history comments in .github/workflows
demtario Sep 28, 2026
b419ee4
docs(runner): trim review-history comments in scripts/dev-lib.mjs, de…
demtario Sep 28, 2026
294113d
docs(runner): trim review-history comments in containers/o11y, scripts
demtario Sep 28, 2026
b85f901
docs(runner): trim review-history comments in workers/o11y box/drain/…
demtario Sep 28, 2026
8a12945
docs(runner): trim review-history comments in compose.yml, grafana.ini
demtario Sep 28, 2026
3ecf2bf
docs(runner/authoring): trim review-history comments in sentry.ts, ev…
demtario Sep 28, 2026
307162f
docs(runner/authoring): trim review-history comments in telemetry/far…
demtario Sep 28, 2026
b669f89
docs(runner/o11y): trim review-history comments in gates/normalise/lite
demtario Sep 28, 2026
fc9685b
docs(runner/authoring): trim review-history comments in demoEventRepo…
demtario Sep 28, 2026
1692593
docs(runner): trim review-history comments in pipeline/o11y-*.test.mjs
demtario Sep 28, 2026
f07b38f
docs(runner/authoring): trim review-history comments in App.tsx
demtario Sep 28, 2026
39dfb9a
docs(runner/authoring): trim review-history comments in main.tsx, .en…
demtario Sep 28, 2026
0676b36
docs(runner/authoring): trim review-history comments in vite.config.ts
demtario Sep 28, 2026
a8c4d01
docs(runner/o11y): apply rule-7 length caps to gates/normalise comments
demtario Sep 28, 2026
fa02fbf
docs(runner): trim review-history comments in o11y docs (C9)
demtario Sep 28, 2026
815895b
docs(runner): trim review-history comments in other pipeline tests, f…
demtario Sep 28, 2026
1fd16b4
docs(runner/authoring): fix round — enforce rule 7 caps, §3.2 worst f…
demtario Sep 28, 2026
403c798
docs(runner): trim review-history comments in run-and-deploy.md (C9)
demtario Sep 28, 2026
c5a0741
docs(runner): fix round — enforce rule 7 caps in shutdown.sh, compose…
demtario Sep 28, 2026
35c1030
Merge P2-2: trim review-history comments in o11y gates/normalise/lite…
demtario Sep 28, 2026
9359478
docs(runner): fix a split-sentence grammar bug and compress the worst…
demtario Sep 28, 2026
c9b4fa0
Merge P2-5: trim review-history comments in pipeline tests, fixtures …
demtario Sep 28, 2026
e35f09e
docs(runner): trim review-history comments in packages/runtime
demtario Sep 28, 2026
5fd62fe
docs(runner): trim review-history comments in workers/api
demtario Sep 28, 2026
9fb1e9b
Merge P2-3: trim review-history comments in packages/runtime and work…
demtario Sep 28, 2026
32544f7
docs(runner): fix round — enforce rule 7 caps in dev-lib.mjs, dev.mjs
demtario Sep 28, 2026
58771c2
docs(runner): fix round — enforce rule 7 caps in stop-roundtrip.mjs
demtario Sep 28, 2026
b57342a
docs(runner): trim workers/o11y box/drain/grafana comments to the len…
demtario Sep 28, 2026
030e7bc
docs(runner): trim review-history comments in workers/o11y inbox/env/…
demtario Sep 28, 2026
14e4980
docs(runner): fix round — enforce rule 7 caps in remaining scripts/co…
demtario Sep 28, 2026
f19148f
Merge P2-1: trim review-history comments in the o11y worker core (box…
demtario Sep 28, 2026
a350cca
docs(runner/authoring): fix round — enforce rule 7 caps in demoEventR…
demtario Sep 28, 2026
8f1a5ad
docs(runner/authoring): fix round — enforce rule 7 caps in main.tsx, …
demtario Sep 28, 2026
28deaef
docs(runner/authoring): fix round — enforce rule 7 caps in remaining …
demtario Sep 28, 2026
6efd520
docs(runner/authoring): fix round — further density trim in eventGate.ts
demtario Sep 28, 2026
b975d31
fix round — further density trim in sentry.ts
demtario Sep 28, 2026
e9056a7
fix round — further density trim: sentryScope, bootGuard, eventGate, …
demtario Sep 28, 2026
81cad34
fix round — further density trim in sentry.ts (round 2)
demtario Sep 28, 2026
7d9d721
fix round — further density trim in demoEventReport.ts
demtario Sep 28, 2026
9095b2c
fix round — further density trim in App.tsx
demtario Sep 28, 2026
c164cd1
Merge P2-4: trim review-history comments in apps/authoring, container…
demtario Sep 28, 2026
e34d736
docs(runner): add code-comment rules to AGENTS.md
demtario Sep 28, 2026
d4955d0
Merge: code-comment rules in runner/AGENTS.md
demtario Sep 28, 2026
55de8bc
test(runner): drop review ids from test titles
demtario Sep 28, 2026
a450495
test(runner): drop the last review ids from test titles and the e2e-l…
demtario Sep 28, 2026
6fc6fee
Merge P3: drop review ids from test titles and the e2e-live compile-e…
demtario Sep 28, 2026
31bc6c1
fix(runner/authoring): count a typed runtime error whose last keystro…
demtario Sep 28, 2026
74cb617
docs(runner/o11y): an edit that re-runs nothing keeps the running san…
demtario Sep 28, 2026
9b8c252
refactor(runner/authoring): drop a redundant runReplaced reset from t…
demtario Sep 28, 2026
01cfda2
fix(runner/runtime): re-arm the in-preview reporter's error budget fo…
demtario Sep 28, 2026
d7916e0
test(runner/e2e): a runtime error typed key by key counts once, with …
demtario Sep 28, 2026
9bc24d7
fix(runner/authoring): a relayed console warning is not a preview.run…
demtario Sep 28, 2026
6f2bc25
docs(runner/o11y): keep the §5 registry cell parseable; note console …
demtario Sep 28, 2026
1fad3a9
fix(runner/authoring): a report counted before a rerun stays counted …
demtario Sep 28, 2026
dc19432
fix(runner/authoring): a bundler compile error of the running sandbox…
demtario Sep 28, 2026
93359cd
refactor(runner/authoring): type a collapsed demo event's record name…
demtario Sep 28, 2026
8acfee8
test(runner/authoring): drop the review-id prefix from seven collapse…
demtario Sep 28, 2026
360db4a
Merge F40/F41: typed Tier-1 errors are counted again (per-run reporte…
demtario Sep 28, 2026
b200604
fix(runner): ship API worker with no o11y-logs export destination
demtario Sep 28, 2026
18223d3
feat(runner/api): write example.saved when an editor Save's rebuild s…
demtario Sep 28, 2026
5f9ab4d
feat(runner/authoring): hand example.saved to the API instead of emit…
demtario Sep 28, 2026
7a5b162
docs(runner/o11y): example.saved is emitted by the API worker
demtario Sep 28, 2026
e329c6d
Merge F20: example.saved is written by the API worker when a Save suc…
demtario Sep 28, 2026
f9494fd
fix(runner/api): a Save's rebuild and example.saved survive a client …
demtario Sep 28, 2026
6a6c481
fix(runner/authoring): count a Save in the browser when the API sends…
demtario Sep 28, 2026
3e4967c
Merge F20 fix round: the save survives a client disconnect (waitUntil…
demtario Sep 28, 2026
aed0120
fix(runner/o11y): dashboards ship with auto-refresh off, so a forgott…
demtario Sep 28, 2026
0c4bedb
fix(runner/o11y): the Grafana login/session gate's 429 carries Retry-…
demtario Sep 28, 2026
2967978
docs(runner/o11y): runbook notes refresh-off idle-stop behavior and t…
demtario Sep 28, 2026
d3c7b2c
docs(runner/o11y): trim comment length and drop invented rationale
demtario Sep 28, 2026
c592633
fix(runner/api): a build that rejects the demo's own code answers 422…
demtario Sep 28, 2026
887bf62
fix(runner/authoring): a failed Save shows its error in a dialog
demtario Sep 28, 2026
3b99d8e
Merge R15A: dashboards ship with auto-refresh off (a forgotten tab le…
demtario Sep 28, 2026
f191eb5
fix(runner/runtime): a typed console.error line counts once
demtario Sep 28, 2026
cea83ef
fix(runner/api): isUserBuildError is a plain predicate
demtario Sep 28, 2026
f4069c4
fix(runner/runtime): only a pushed compile's start is a rerun
demtario Sep 28, 2026
533fb89
docs(runner/o11y): keep the async-report caveat of the edit-burst col…
demtario Sep 28, 2026
babf42b
fix(runner/api): a hung o11y heartbeat RPC counts as unreachable afte…
demtario Sep 28, 2026
4ef7a99
fix(runner/api): a ?payload= link that cannot boot records payload.bo…
demtario Sep 28, 2026
68f928f
fix(runner/authoring): a failed Fork or Share shows its error in the …
demtario Sep 28, 2026
33b6d64
fix(runner/api): clear the heartbeat timer only when it was set
demtario Sep 28, 2026
091ab00
feat(runner/o11y): snapshot-build-failed-rate alert
demtario Sep 28, 2026
4163f5a
fix(runner/api): tighten the 422 build_failed rule and keep the diagn…
demtario Sep 28, 2026
89386cf
fix(runner/authoring): a build_failed save reads "The build failed", …
demtario Sep 28, 2026
71a2c9d
Merge R15B: a save that fails on the author's code answers 422 build_…
demtario Sep 28, 2026
fadb31e
test(runner/e2e): the edit-burst wiring spec no longer races the live…
demtario Sep 28, 2026
c468785
fix(runner/o11y): a stream-limit 429 rejects the key, an unreadable i…
demtario Sep 28, 2026
7d6e633
fix(runner/o11y): cap symbolication's R2 map reads per inbox object
demtario Sep 28, 2026
32e918d
fix(runner/o11y): bound the code-frame and device regexes on client f…
demtario Sep 28, 2026
4047977
fix(runner/o11y): map hot.framework and hot.outcome into known sets a…
demtario Sep 28, 2026
f408938
fix(runner/o11y): defer, not reject, a later key of a tenant whose st…
demtario Sep 28, 2026
56973bb
fix(runner/o11y): a stored browser record always carries hot.outcome=…
demtario Sep 28, 2026
8f9d921
fix(runner/o11y): raise Loki's per-tenant stream limit to 20000
demtario Sep 28, 2026
eb2f7a3
test(runner/o11y): derive the tuple-space bound from Loki's real inde…
demtario Sep 28, 2026
b3b2fa1
docs(runner/telemetry): drop the deviceOf tombstone and trim over-cap…
demtario Sep 28, 2026
4d4129e
Merge R15B fix round 2: the edit-burst wiring spec no longer races th…
demtario Sep 28, 2026
c7ba0ef
Merge Z2X: bounded code-frame and UA regexes on client free text, clo…
demtario Sep 28, 2026
2d69c20
fix(runner/o11y): a stream-limit 429 only defers, and excludes its te…
demtario Sep 28, 2026
8ef3ec1
fix(runner/o11y): cap new map keys per body and always report the cap…
demtario Sep 28, 2026
09e0c4d
Merge Z2Y: a Loki stream-limit 429 defers its key and excludes its te…
demtario Sep 28, 2026
8681544
fix(runner/authoring): send sandpack.compile_ms once per edit burst
demtario Sep 28, 2026
1770de0
fix(runner/authoring): flush Faro every 5 s and retry a 429 after its…
demtario Sep 28, 2026
3e3fbba
docs(runner/o11y): derive the ingest rate limit from the per-tab rate
demtario Sep 28, 2026
e0c195d
fix(runner/authoring): a compile error keeps the compile_ms burst open
demtario Sep 28, 2026
782ba45
docs(runner/o11y): the measured per-tab rate with the compile-error r…
demtario Sep 28, 2026
5dab01e
docs(runner/o11y): a tab left during a 429 wait loses that batch
demtario Sep 28, 2026
c761819
test(runner/e2e): time the 429 not-yet-retried check from the 429'd a…
demtario Sep 28, 2026
4efb162
fix(runner/authoring): sandpack.compile_ms is the settled compile of …
demtario Sep 28, 2026
84872bb
Merge feat/o11y/integration-5 into feat/o11y/z2-w
demtario Sep 28, 2026
27a2124
fix(runner/authoring): a picker pick no longer reads as the page's fi…
demtario Sep 29, 2026
1da3db1
test(runner/e2e): a picker pick fires example.open even after a silen…
demtario Sep 29, 2026
880075d
fix(runner/authoring): shorten the firstLoadSettledRef field doc
demtario Sep 29, 2026
dc255af
test(runner/e2e): flush Faro before every example.open/engaged count
demtario Sep 29, 2026
ee74b9e
fix(runner/api): emit chat.answer outcome=error on a raw fetch throw
demtario Sep 29, 2026
978391f
fix(runner/authoring): title the save-error dialog for the action tha…
demtario Sep 29, 2026
7c8e7c1
docs(runner/o11y): list snapshot-build-failed-rate in the ADR alert t…
demtario Sep 29, 2026
b3c0d7e
fix(runner): point stale source-map-js mentions at trace-mapping
demtario Sep 29, 2026
908882f
docs(runner/api): the example.saved gate isn't editor-only
demtario Sep 29, 2026
d432d35
test(runner/api): describe the chat.answer guard in the present tense
demtario Sep 29, 2026
d228fd1
docs(runner/o11y): list litellm-error-rate in the ADR alert table
demtario Sep 29, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
149 changes: 130 additions & 19 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -43,15 +43,18 @@ jobs:
if: github.event_name == 'pull_request'
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/checkout@v5
with:
# The gate diffs the PR range against its base — it needs history,
# not just the merge commit.
fetch-depth: 0

- uses: actions/setup-node@v4
- uses: actions/setup-node@v5
with:
node-version: 22
# setup-node v5 auto-enables pnpm caching from the root package.json
# `packageManager` field; this job never installs pnpm.
package-manager-cache: false

- name: Test-presence gate (source change ⇒ test change)
run: node runner/scripts/check-test-presence.mjs "${{ github.base_ref }}"
Expand All @@ -62,13 +65,13 @@ jobs:
run:
working-directory: runner
steps:
- uses: actions/checkout@v4
- uses: actions/checkout@v5

- uses: pnpm/action-setup@v4
- uses: pnpm/action-setup@v5
with:
package_json_file: runner/package.json

- uses: actions/setup-node@v4
- uses: actions/setup-node@v5
with:
node-version: 22
cache: pnpm
Expand All @@ -86,15 +89,15 @@ jobs:
run:
working-directory: runner
steps:
- uses: actions/checkout@v4
- uses: actions/checkout@v5

# Read the pnpm version from runner/package.json's packageManager field
# (avoids a conflict with the repo-root package.json).
- uses: pnpm/action-setup@v4
- uses: pnpm/action-setup@v5
with:
package_json_file: runner/package.json

- uses: actions/setup-node@v4
- uses: actions/setup-node@v5
with:
node-version: 22
cache: pnpm
Expand All @@ -110,7 +113,7 @@ jobs:
run: pnpm typecheck

- name: Upload the runtime build
uses: actions/upload-artifact@v4
uses: actions/upload-artifact@v6
with:
name: runtime-dist
path: runner/packages/runtime/dist/
Expand All @@ -124,13 +127,13 @@ jobs:
run:
working-directory: runner
steps:
- uses: actions/checkout@v4
- uses: actions/checkout@v5

- uses: pnpm/action-setup@v4
- uses: pnpm/action-setup@v5
with:
package_json_file: runner/package.json

- uses: actions/setup-node@v4
- uses: actions/setup-node@v5
with:
node-version: 22
cache: pnpm
Expand All @@ -139,7 +142,7 @@ jobs:
- run: pnpm install --frozen-lockfile

- name: Download the runtime build
uses: actions/download-artifact@v4
uses: actions/download-artifact@v7
with:
name: runtime-dist
path: runner/packages/runtime/dist/
Expand All @@ -155,7 +158,7 @@ jobs:
run: node scripts/check-compiler-chunk.mjs

- name: Upload the authoring build
uses: actions/upload-artifact@v4
uses: actions/upload-artifact@v6
with:
name: authoring-dist
path: runner/apps/authoring/dist/
Expand All @@ -176,13 +179,13 @@ jobs:
run:
working-directory: runner
steps:
- uses: actions/checkout@v4
- uses: actions/checkout@v5

- uses: pnpm/action-setup@v4
- uses: pnpm/action-setup@v5
with:
package_json_file: runner/package.json

- uses: actions/setup-node@v4
- uses: actions/setup-node@v5
with:
node-version: 22
cache: pnpm
Expand All @@ -191,7 +194,7 @@ jobs:
- run: pnpm install --frozen-lockfile

- name: Download the authoring build (the e2e target)
uses: actions/download-artifact@v4
uses: actions/download-artifact@v7
with:
name: authoring-dist
path: runner/apps/authoring/dist/
Expand All @@ -201,7 +204,7 @@ jobs:

- name: Upload Playwright report on failure
if: failure()
uses: actions/upload-artifact@v4
uses: actions/upload-artifact@v6
with:
name: playwright-report
# playwright-report/ holds the html report, test-results/ the traces.
Expand All @@ -210,3 +213,111 @@ jobs:
runner/test-results/
retention-days: 7
if-no-files-found: warn

# The CI home for the local telemetry path (contract §10). Its own build,
# separate from the `authoring`/`e2e` jobs above — VITE_TELEMETRY_LOCAL=1
# must never reach the real authoring-dist artifact those jobs share (the
# post-build leak check in master.yml exists to catch that), so this job
# builds its own dist and never uploads it. Both specs are self-contained
# (own preview server, `page.route` interception of `/telemetry/collect`,
# no o11y or API worker), unlike e2e/telemetry-metrics.spec.ts and
# e2e/o11y-local.spec.ts, which need a live worker/compose stack and run
# instead in `.github/workflows/e2e-o11y-local.yml`, off the per-PR gate.
e2e-telemetry:
needs: build
runs-on: ubuntu-latest
container:
image: mcr.microsoft.com/playwright:v1.61.1-noble
defaults:
run:
working-directory: runner
steps:
- uses: actions/checkout@v5

# The leak checks now run in PR CI as well as post-merge in master.yml,
# so a regression here (dead-code elimination of the local telemetry
# seam, or the dev-login bypass sentinel check itself) is caught before
# merge instead of surfacing as a blocked deploy. actionlint runs here
# too, so a workflow-YAML mistake in either fix is itself caught in PR
# CI, not just by reading the diff.
- name: actionlint (workflow YAML)
uses: reviewdog/action-actionlint@v1
with:
fail_level: error

- uses: pnpm/action-setup@v5
with:
package_json_file: runner/package.json

- uses: actions/setup-node@v5
with:
node-version: 22
cache: pnpm
cache-dependency-path: runner/pnpm-lock.yaml

- run: pnpm install --frozen-lockfile

- name: Download the runtime build
uses: actions/download-artifact@v7
with:
name: runtime-dist
path: runner/packages/runtime/dist/

# Production-mode build (no VITE_TELEMETRY_LOCAL) — the same shape
# master.yml's `build` job ships, built here too so both leak checks
# run in PR CI, not only after merge.
- name: Build authoring in production mode
run: pnpm --filter @handsontable/demo-authoring build

# Same check as master.yml's "Leak check — dev-login bypass must not
# reach the production bundle" step (AGENTS.md's own sanity check),
# now also gating the PR instead of only a post-merge deploy.
- name: Leak check — dev-login bypass must not reach the production bundle
run: |
if grep -rl "localhost:8787\|VITE_DEV_USER\|dev@handsontable.com" apps/authoring/dist; then
echo "::error::dev-login bypass leaked into the production bundle — rebuild with .env.local absent (AGENTS.md)"
exit 1
fi
echo "ok: no dev-bypass sentinel found"

# Same check as master.yml's "Leak check — local telemetry path must
# not reach the production bundle" step (contract §10).
- name: Leak check — local telemetry path must not reach the production bundle
run: pnpm check:telemetry-leak

- name: Build authoring with the local telemetry path (contract §10)
run: pnpm --filter @handsontable/demo-authoring build
env:
VITE_TELEMETRY_LOCAL: '1'

# Negative control: nothing in CI otherwise proves `check:telemetry-leak`
# can actually FAIL — only that it passes against builds where the
# sentinels are already absent. Assert it fails against a build made
# WITH the local telemetry path enabled; if the checker itself
# regresses (a
# dead-code-elimination change, a sentinel string edit) and stops
# detecting the leak, this step turns red instead of the check quietly
# passing everything forever.
- name: Leak check negative control — check:telemetry-leak must FAIL against a VITE_TELEMETRY_LOCAL=1 build
run: |
if pnpm check:telemetry-leak; then
echo "::error::check:telemetry-leak passed against a VITE_TELEMETRY_LOCAL=1 build — the leak check itself is broken"
exit 1
fi
echo "ok: check:telemetry-leak correctly failed against the flag build"

- name: E2E — Faro in the authoring app + example-analytics (T06, T12)
env:
E2E_TELEMETRY: '1'
run: pnpm e2e e2e/telemetry-faro.spec.ts e2e/example-analytics.spec.ts

- name: Upload Playwright report on failure
if: failure()
uses: actions/upload-artifact@v6
with:
name: playwright-report-telemetry
path: |
runner/playwright-report/
runner/test-results/
retention-days: 7
if-no-files-found: warn
27 changes: 27 additions & 0 deletions .github/workflows/e2e-live.yml
Original file line number Diff line number Diff line change
Expand Up @@ -220,6 +220,33 @@ jobs:
E2E_BASE_URL: ${{ env.BASE_URL }}
run: pnpm e2e e2e/ai-live.spec.ts

# A syntax error typed into a Tier-1 parcel example must reach
# /telemetry/collect as one `sandpack.compile_error` and no
# `preview.runtime_error`; a typed throwing line as one
# `preview.runtime_error`. Needs a VITE_TELEMETRY_LOCAL=1 build (the
# spec's own E2E_TELEMETRY gate, `page.route`-mocked collect) AND the
# hosted bundler (E2E_LIVE: the edit path needs a mounted Sandpack
# client), so it lives here rather than in ci.yml's deterministic
# e2e-telemetry job. Local mode only, and last: it rebuilds dist with
# the flag, then puts the plain build back. E2E_BASE_URL is a dummy
# that only disables the shared webServer (the spec serves its own
# dist); the guard proves the gated test ran instead of skipping to a
# green exit.
- name: E2E — typed syntax and runtime errors count once each (local telemetry build)
if: ${{ !inputs.smoke && env.BASE_URL == '' }}
env:
E2E_LIVE: '1'
E2E_TELEMETRY: '1'
E2E_BASE_URL: 'http://127.0.0.1:1'
PLAYWRIGHT_JSON_OUTPUT_NAME: telemetry-compile-error-report.json
run: |
VITE_TELEMETRY_LOCAL=1 pnpm --filter @handsontable/demo-authoring build
status=0
pnpm e2e e2e/telemetry-faro.spec.ts -g "typed key by key reaches /telemetry/collect" --workers=1 --reporter=list,json || status=$?
pnpm --filter @handsontable/demo-authoring build
[ "$status" -eq 0 ] || exit $status
node scripts/ci/assert-e2e-ran.mjs telemetry-compile-error-report.json

- name: Upload Playwright report on failure
if: failure()
uses: actions/upload-artifact@v4
Expand Down
Loading
Loading