Repository navigation
Conversation
…and refusal code One Analytics Engine data point per rise_present call: rise.current.admitted with its beats and scenes, rise.current.refused with the refusal's code from the door's closed set. Only what telemetry/events.json names is written, and every answer is byte-identical with the binding absent, present or throwing. EVENTS is bound in wrangler.production.jsonc alone. PRIVACY.md says so in the ChatGPT and Claude list and in section 11. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01VHrJ4hmTtR1RFNpc215EK7
✅ Deploy Preview for rise-v2-symbolic-experience ready!
To edit notification comments on pull requests, go to your Netlify project configuration. |
Codex Review SummaryThis comment shows the latest Codex review activity on this pull request.
ℹ️ About Codex in GitHubYour team has set up Codex to review pull requests in this repo. Reviews are triggered when you
Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings. |
sdcarlson
marked this pull request as draft
October 31, 2026 02:22
This was referenced Oct 31, 2026
Draft
Bring this branch up to date with main's dead-code sweeps (#765, #766, #767) so it can merge. Two files conflicted: - worker/mcp-server.mjs: main deleted Gate 0 and the witness log, made dispatch take the card as its third argument (dispatch(message, origin, card = null)) and deleted handleLive. All of that is kept as main has it. This branch's count callback becomes dispatch's fourth argument (count = () => {}): dispatch passes it to call() for rise_present, and handleMcp still derives the host with hostOf and writes through countEvent. No response changes. - vitest.fast.config.js: main lowered FAST_TEST_FILES from 169 to 157 after deleting test files, and this branch adds worker/telemetry.test.js. The merged list collects 158 files (vitest list --filesOnly, and the fast run's JSON report), so FAST_TEST_FILES is 158. PRIVACY.md, public/PRIVACY.md, public/privacy.html, worker/production-config.test.js and wrangler.production.jsonc merged without conflict; npm run verify:legal confirms the generated copies still match PRIVACY.md. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01VHrJ4hmTtR1RFNpc215EK7
sdcarlson
pushed a commit
that referenced
this pull request
Nov 4, 2026
Bring this branch up to date with main's dead-code sweeps (#765, #766, #767). It merges the updated telemetry/composer-counts (8f45346), which already merges main at bce75dc, so this one merge brings in both. Two files conflicted: - vitest.fast.config.js: #762's merge set FAST_TEST_FILES to 158, and this branch had raised it from 170 to 174 for its four test files. The merged list collects 162 files (vitest list --filesOnly, and the fast run's JSON report), so FAST_TEST_FILES is 162. - docs/specs/ARCHITECTURE.md: only the generated diagram conflicted. Took main's and regenerated it with npm run docs:diagram, which adds this branch's src/core/telemetry.js to core's module count and its imports to the audio, components and live edges into core. One break git could not see: main (#767) deleted worker/live-realtime.mjs, whose readText worker/count.mjs imports, and moved readText unchanged into worker/mcp-server.mjs as a private function. worker/mcp-server.mjs now exports it and worker/count.mjs imports it from there. It is the same function count.mjs used before, so the 512-byte and UTF-8 limits on a beacon are unchanged. PRIVACY.md, public/PRIVACY.md, public/privacy.html, src/audio/engine.js, src/audio/engine.lifecycle.test.js, src/components/Home.js, src/components/read/Chamber.js, src/core/error-boundary.js, src/live/host/LiveHost.js, src/live/host/LiveHost.test.js, worker/index.mjs, worker/production-config.test.js and wrangler.production.jsonc merged without conflict; npm run verify:legal confirms the generated legal copies still match PRIVACY.md. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01VHrJ4hmTtR1RFNpc215EK7
This branch has not been deployed
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Update 2026-11-04:
mainmerged in (8f45346). Main's #767 removed Gate 0, the witness log andhandleLivefromworker/mcp-server.mjsand changeddispatchtodispatch(message, origin, card = null). The merge keeps main's version and threads this PR's counter through as a fourth parameter,count = () => {}:tools/callreturnscall(id, params, count)andhandleMcpderiveshostandcountas before. Against main, the diff is this PR's original change apart from those three lines.FAST_TEST_FILESis now 158 (main's 157 plusworker/telemetry.test.js).Checks on
8f45346: fast suite 158 files, 3790 tests (3786 passed, 4 skipped, 0 failed);vite build; first load 62.5 of 64.0 KB brotli; e2e gate 72 passed, 3 skipped; both wrangler dry runs, production listingEVENTS;CIgreen on GitHub. Main's #767 moved PRIVACY.md's "Last updated" to 2 November 2026; it still needs the date these sentences publish. The 169 to 170 note and the test counts below describe the PR as first opened.What changed
telemetry/events.json(new): the telemetry.v1 allowlist. Two events, both owned by Composer:rise.current.admitted(blobhost; doublesbeats,scenes) andrise.current.refused(blobshost,code). Every blob is a closed list. The refusal codes are the door's closed set: the 35 codes the validator it calls can throw (src/core/rise-current.js,beats.js,current-validation.js,src/scenes/manifests.js), five the door refuses with itself (MCP_ARGUMENTS,MCP_TOO_LARGE,SCENE_COLLECTION,SCENE_CODE_ADMISSION,SCENE_SVG_ADMISSION), andother.worker/telemetry.mjs(new): reads the allowlist and builds the data point,indexes: [event],blobs: [event, release, ...values in allowlist order],doubles: [1, ...counts in allowlist order], or nothing for any event, field, value or number the allowlist does not name.countEventwrites it withenv.EVENTS?.writeDataPoint(...)inside try/catch, never awaited.worker/mcp-server.mjs: besidelogQuality, the door writes one point perrise_presentcall. Admitted carriesbeatsandscenesfrompictureCadence, the same numbers as therise.qualitylog line; refused carries the refusal's code.hostOfnames the host. The size refusal's Error carriescode: 'MCP_TOO_LARGE'andsceneRefusalsreturns its code besiderepair. No response changes.wrangler.production.jsonc:"analytics_engine_datasets": [{ "binding": "EVENTS", "dataset": "syberlabs_events" }]. No otherwrangler.*.jsoncgets it.worker/production-config.test.js: pins the binding in production and its absence from every other configuration.PRIVACY.md: one sentence in "RISE inside ChatGPT or Claude" and one in section 11.public/PRIVACY.mdandpublic/privacy.htmlregenerated withnpm run build:legal.vitest.fast.config.js:worker/telemetry.test.jsjoins the fast list;FAST_TEST_FILESgoes from 169 to 170.Why
This is the approved SyberLabs telemetry design (telemetry.v1): counts of what happened, as closed enums and numbers, never text or identifiers. These two show which host apps use the connector and which refusals their models meet.
How
hostandreleaseare derivedhost:claudewhen the client address (CF-Connecting-IP) is in Anthropic's published connector egress, 160.79.104.0/21. That is the existinginAnthropicEgresscheck the rate limiter already uses. Otherwisechatgptwhen the User-Agent beginsopenai-mcp/, and otherwiseother. Neither the address nor the string is written.release:'unknown'. The Worker cannot know the deployed commit: CI writes it intodist/release.txtafter wrangler has bundled the Worker. Naming it would take a deploy-time--varor--tagor a version-metadata binding, which is a workflow change outside this packet.Tests
CIcheck runs (npx vitest run --config vitest.fast.config.js): 170 files collected, equal toFAST_TEST_FILES. 3927 tests: 3923 passed, 4 skipped, 0 failed. Baseline on main19aabc7: 169 files, 3903 tests (3899 passed, 4 skipped).worker/telemetry.test.js(23 tests):other;writeDataPoint, for Claude and ChatGPT requests alike.openai-mcp/anywhere in the string, dropping one code from the allowlist.node scripts/ci-hygiene.mjs,npm run roadmap:check,npm run test:roadmap,npm run security:compat;npm run docs:diagram, withdocs/specs/ARCHITECTURE.mdunchanged;npm run verify:legal,npx vite build;npm run measure:first-load: 63.4 of 64.0 KB brotli, unchanged, since this PR changes no client code;wrangler deploy --dry-runbundles. Production listsenv.EVENTS (syberlabs_events) Analytics Engine Dataset.wrangler dev --localof the production configuration answered one admitted and one refused call with the local dataset bound and no runtime error.npm run security:auditand the browser gate. CI runs both.Needs a human key
wrangler.production.jsoncfloors at keys, because it is the production deploy. Merging deploys rise.syberlabs.io with the dataset bound. Please confirm that Workers Analytics Engine is enabled for the Cloudflare account first; this PR cannot check that.Deliberately not done, and limitations
openai-mcp/, its calls are counted asother: an undercount, never a wrong host. Calls from Claude clients outside Anthropic's egress, such as a local connector, are also counted asother.rise.qualitylog line is unchanged.worker/mcp-server.mjs, includingsceneRefusals,dispatchandhandleMcp, so whichever merges second needs a rebase. Draft Separate private-provider deployment from public releases #751 appends toworker/production-config.test.js; this PR's test sits inside the firstdescribeto stay clear of that hunk.Next
The browser-counts packet (
telemetry/browser-counts, a draft) builds on this branch'sworker/telemetry.mjs.Generated by Claude Code