Node.js port of Multi-user SocialCalc
This report summarizes scanner evidence for audreyt/ethercalc, a TypeScript project with 3,060 GitHub stars. SynthScan examined 152,801 lines of code across 530 source files, recording 228 pattern matches distributed across 9 syntactic categories. The legacy adjusted pattern signal is 3.2 (Low pattern signal); it is not an authorship estimate.
Use the findings to ask whether maintainers can explain intent, verify dependencies, simplify unnecessary scaffolding, and focus review effort. Risk Payload v1 adds ownership, supply-chain, over-engineering, and review-effort vectors when available. These are prompts for human verification, not probabilities, security findings, or measured maintenance costs.
Use each vector to guide manual verification of the underlying findings.
Payload schema: 1.0.0 · Engine: 2.0.0 · Scoring: heuristic-density-v1 · Scan date: 2026-10-31.
Can maintainers explain intent, assumptions, and trade-offs? 121 finding(s).
Are imports declared and package/API names verified? 4 finding(s).
Are wrappers, guards, and repeated structures necessary? 151 finding(s).
Which changes need focused human review? 228 finding(s).
This chart tracks the legacy adjusted pattern score across scan runs. Changes can reflect source changes, scan coverage, or detector/scoring versions; they do not measure AI adoption or prove that a team refactored code. Compare runs only when their scoring versions are compatible. The dashed line tracks the raw pattern-hit count.
Groups findings by configured severity weight. Severity is not a confidence estimate, security rating, or proof that a package is missing. Verify imports against the project's manifests and inspect each finding in its local design context.
This horizontal bar chart shows where configured pattern scores accumulate across directories. Treat the bars as locations to inspect, not as evidence of authorship or code quality. Use the file-level findings to decide whether a directory needs a focused ownership, dependency, complexity, or review check.
The scanner identified 228 distinct pattern matches across 9 syntactic categories. Each entry below represents a discrete location in the source code where the engine recorded a detector match to inspect in context. Expand any category row to inspect the individual file paths, line numbers, code snippets, and the lexical context (CODE, COMMENT, or STRING) in which each match was detected.
Reading the findings table: The Severity column indicates the configured finding weight (CRITICAL / HIGH / MEDIUM / LOW). The Context column identifies whether the match occurred inside executable code, an inline comment, or a string literal — legacy comment-context matches receive a ×1.5 score weight. The ⚡ bolt icon marks clustered matches: three or more patterns within a 10-line window, each receiving an additional ×1.5 density multiplier under the legacy scoring model.
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | docker-compose.yml | 68 | # ────────────────────────── migration profile ────────────────────────── | COMMENT |
| MEDIUM | docs/migration/INVENTORY.md | 964 | 68: # ────────────────────────── migration profile ────────────────────────── | CODE |
| MEDIUM | docs/migration/PROD_UPGRADE_PLAN.md | 1369 | # ─── POST-RAMP PROBES (live cutover; ETHERCALC_AUTH = "1") ──────────── | COMMENT |
| MEDIUM | docs/migration/PROD_UPGRADE_PLAN.md | 1491 | # ─── ADDITIONAL AUTH / EDGE PROBES (same auth-on steady state) ─────── | COMMENT |
| MEDIUM | scripts/repro-open-issues.ts | 37 | // ─── Headless SocialCalc formula/export repros ───────────────────────── | COMMENT |
| MEDIUM | scripts/repro-open-issues.ts | 175 | // ─── HTTP repros (optional) ─────────────────────────────────────────── | COMMENT |
| MEDIUM | scripts/repro-open-issues.ts | 335 | // ─── main ───────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | scripts/triage-open-issues.ts | 83 | // ─── Formula / export embedded repros ─────────────────────────────────── | COMMENT |
| MEDIUM | scripts/triage-open-issues.ts | 429 | // ─── main ─────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | packages/shared/src/messages.ts | 12 | // ─── Client → Server ─────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | packages/shared/src/messages.ts | 126 | // ─── Server → Client ─────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | packages/shared/src/messages.ts | 241 | // ─── Codec ──────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | packages/shared/src/oracle-scenarios.ts | 55 | // ─── WebSocket scenarios ────────────────────────────────────────────────── | COMMENT |
| MEDIUM | packages/migrate/src/sources/filesystem-source.ts | 126 | // ───────────── single-blob (dump.json) ───────────── | COMMENT |
| MEDIUM | packages/migrate/src/sources/filesystem-source.ts | 235 | // ───────────── directory (dump/) ───────────── | COMMENT |
| MEDIUM | packages/worker/test/auth-do.node.test.ts | 15 | // ─── Fake storage (same shape as room.node.test.ts) ────────────────────── | COMMENT |
| MEDIUM | packages/worker/test/auth-do.node.test.ts | 116 | // ─── Mock @simplewebauthn/server ───────────────────────────────────────── | COMMENT |
| MEDIUM | packages/worker/test/auth-do.node.test.ts | 137 | // ─── Helpers ──────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | packages/worker/test/auth-do.node.test.ts | 251 | // ─── Tests ────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | packages/worker/test/lib-ws-handlers.node.test.ts | 32 | // ─── Fake context builders ───────────────────────────────────────────────── | COMMENT |
| MEDIUM | packages/worker/test/lib-ws-handlers.node.test.ts | 163 | // ─── Handler-by-handler coverage ─────────────────────────────────────────── | COMMENT |
| MEDIUM | packages/worker/test/lib-ws-handlers.node.test.ts | 643 | // ─── dispatchWsMessage routing ───────────────────────────────────────────── | COMMENT |
| MEDIUM | packages/worker/test/lib-ws-handlers.node.test.ts | 755 | // ─── Integration-style tests exercising the full dispatcher surface ──────── | COMMENT |
| MEDIUM | packages/worker/test/lib-ws-handlers.node.test.ts | 830 | // ─── Context wiring edge cases ───────────────────────────────────────────── | COMMENT |
| MEDIUM | packages/worker/test/room.node.test.ts | 1719 | // ─── Phase 8 export handlers ───────────────────────────────────────── | COMMENT |
| MEDIUM | packages/worker/test/room.test.ts | 152 | // ─── Design "fold": double-apply regression + storage bounds ────────── | COMMENT |
| MEDIUM | packages/worker/test/routes-rooms.test.ts | 291 | // ─── Phase 6: POST /_/:room (commands) ─────────────────────────────── | COMMENT |
| MEDIUM | packages/worker/src/room.ts | 400 | // ─── Phase 8: export routes ──────────────────────────────────────── | COMMENT |
| MEDIUM | packages/worker/src/room.ts | 422 | // ─── Phase 8.1: sheet-data for multi-sheet export ──────────────── | COMMENT |
| MEDIUM | packages/worker/src/room.ts | 429 | // ─── Phase 6: cross-DO rename primitives ───────────────────────── | COMMENT |
| MEDIUM | packages/worker/src/room.ts | 443 | // ─── Phase 11b: full-fidelity migration seed ───────────────────── | COMMENT |
| MEDIUM | packages/worker/src/room.ts | 453 | // ─── Phase 11b: client-side chunked snapshot upload ────────────── | COMMENT |
| MEDIUM⚡ | packages/worker/src/room.ts | 465 | // ─── Phase A: atomic private-room initialization ───────────────── | COMMENT |
| MEDIUM⚡ | packages/worker/src/room.ts | 469 | // ─── Phase 7: native WebSocket upgrade ─────────────────────────── | COMMENT |
| MEDIUM⚡ | packages/worker/src/room.ts | 479 | // ─── Phase 9: cron fire-trigger hook ─────────────────────────────── | COMMENT |
| MEDIUM | packages/worker/src/room.ts | 493 | // ─── Handlers ────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | packages/worker/src/room.ts | 1595 | // ─── Export handlers (Phase 8) ──────────────────────────────────────── | COMMENT |
| MEDIUM | packages/worker/src/room.ts | 1638 | // ─── Rename primitives (Phase 6) ───────────────────────────────────── | COMMENT |
| MEDIUM | packages/worker/src/room.ts | 2081 | // ─── Cron fire-trigger (Phase 9) ─────────────────────────────────────── | COMMENT |
| MEDIUM | packages/worker/src/room.ts | 2131 | // ─── WebSocket acceptance ────────────────────────────────────────────── | COMMENT |
| MEDIUM | packages/worker/src/room.ts | 2425 | // ─── WsContext assembly ──────────────────────────────────────────────── | COMMENT |
| MEDIUM | packages/worker/src/room.ts | 2553 | // ─── WS broadcast primitives ─────────────────────────────────────────── | COMMENT |
| MEDIUM | packages/worker/src/room.ts | 2814 | // ─── Internals ───────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | packages/worker/src/room.ts | 3001 | // ─── Hooks used by future phases (chat/ecell) ────────────────────────── | COMMENT |
| MEDIUM | packages/worker/src/auth-do.ts | 427 | // ─── Registration ────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | packages/worker/src/auth-do.ts | 501 | // ─── Authentication (usernameless) ────────────────────────────────────── | COMMENT |
| MEDIUM | packages/worker/src/auth-do.ts | 599 | // ─── Session verification ────────────────────────────────────────────── | COMMENT |
| MEDIUM | packages/worker/src/lib/xlsx-build.ts | 42 | // ─── Cells-based high-fidelity exporter ─────────────────────────────────── | COMMENT |
| MEDIUM | packages/worker/src/lib/xlsx-build.ts | 359 | // ─── Multi-sheet helpers (Phase 8.1) ────────────────────────────────────── | COMMENT |
| MEDIUM | packages/worker/src/lib/ws-handlers.ts | 116 | // ─── Handlers ─────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | packages/worker/src/lib/ws-handlers.ts | 288 | // ─── Top-level dispatcher ─────────────────────────────────────────────────── | COMMENT |
| MEDIUM | packages/worker/src/routes/rooms.ts | 148 | // ─── Cross-room index endpoints (Phase 5.1 — backed by D1) ───────── | COMMENT |
| MEDIUM | packages/worker/src/routes/rooms.ts | 185 | // ─── Template copy ───────────────────────────────────────────────── | COMMENT |
| MEDIUM | packages/worker/src/routes/rooms.ts | 244 | // ─── Private template copy (P7) ──────────────────────────────────── | COMMENT |
| MEDIUM | packages/worker/src/routes/rooms.ts | 294 | // ─── _exists ──────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | packages/worker/src/routes/rooms.ts | 320 | // ─── POST /_ (create) ────────────────────────────────────────────── | COMMENT |
| MEDIUM | packages/worker/src/routes/rooms.ts | 385 | // ─── PUT /_/:room (overwrite snapshot) ───────────────────────────── | COMMENT |
| MEDIUM | packages/worker/src/routes/rooms.ts | 435 | // ─── GET /_/:room/access (browser display capability) ────────────── | COMMENT |
| MEDIUM | packages/worker/src/routes/rooms.ts | 466 | // ─── GET /_/:room (raw save) ─────────────────────────────────────── | COMMENT |
| MEDIUM | packages/worker/src/routes/rooms.ts | 489 | // ─── GET /_/:room/cells (full cell map JSON) ─────────────────────── | COMMENT |
| 43 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | run_grain.sh | 1 | #!/bin/bash | COMMENT |
| LOW | run_grain.sh | 21 | # `ethercalc migrate` subprocess while workerd is briefly started with | COMMENT |
| LOW | docker-compose.yml | 1 | # EtherCalc self-host compose file (§13 Q5). | COMMENT |
| LOW | bin/migrate-legacy.sh | 1 | #!/usr/bin/env bash | COMMENT |
| LOW | bin/migrate-legacy.sh | 21 | # `./backups/ethercalc-YYYYMMDDTHHMMSSZ.tar.gz`. | COMMENT |
| LOW | bin/workerd-entrypoint.sh | 1 | #!/usr/bin/env bash | COMMENT |
| LOW | bin/workerd-entrypoint.sh | 41 | # that is the version pinned in bun.lock, which is what config.capnp's | COMMENT |
| LOW | tests/oracle/docker-compose.yml | 1 | # Oracle stack — EtherCalc (current main) + Redis, isolated from the | COMMENT |
| LOW | docs/migration/PROD_UPGRADE_PLAN.md | 521 | # Note: Requires HOME/XDG_CONFIG_HOME overrides when home directory preferences are read-only. | COMMENT |
| LOW | docs/migration/PROD_UPGRADE_PLAN.md | 1381 | # **PARTIALLY AUTOMATED** — `routes-auth.node.test.ts:201-229` asserts the enabled anonymous response under worker `test | COMMENT |
| LOW | docs/migration/PROD_UPGRADE_PLAN.md | 1401 | # `<script type="module">`; reject only non-JS types. | COMMENT |
| LOW | docs/migration/PROD_UPGRADE_PLAN.md | 1421 | curl -fsS -i https://ethercalc.net/testprodcutover | COMMENT |
| LOW | docs/migration/PROD_UPGRADE_PLAN.md | 1441 | # a NO-GO. | COMMENT |
| LOW | docs/migration/PROD_UPGRADE_PLAN.md | 1461 | # Probe 8: Legacy socket.io Compatibility Probe | COMMENT |
| LOW | docs/migration/PROD_UPGRADE_PLAN.md | 1481 | COMMENT | |
| LOW | docs/migration/PROD_UPGRADE_PLAN.md | 1501 | # Cloudflare custom-domain/redirect layer]: production must return HTTP 301 | COMMENT |
| LOW | docs/migration/PROD_UPGRADE_PLAN.md | 1521 | # Probe 13b: Non-landing responses are noindex | COMMENT |
| LOW | docs/migration/PROD_UPGRADE_PLAN.md | 1541 | # `/:room` catch-all and rendered a "room" named `robots.txt`) | COMMENT |
| LOW | static/socialcalc.css | 1 | /* | COMMENT |
| LOW | static/jszip.js | 2561 | // If the central dir data are false, we are doomed. | COMMENT |
| LOW | static/jszip.js | 4381 | * time through here. WIN_INIT is set to MAX_MATCH since the longest match | COMMENT |
| LOW | static/jszip.js | 4401 | // * to end of window, whichever is less. | COMMENT |
| LOW | static/jszip.js | 5941 | // } while (--len); | COMMENT |
| LOW | static/jszip.js | 9081 | // (ush)lc <= (ush)(MAX_MATCH-MIN_MATCH) && | COMMENT |
| LOW | scripts/ratchet-verify.sh | 1 | #!/usr/bin/env bash | COMMENT |
| LOW | scripts/vite-workflow.ts | 1 | // Shared plugin helper wired into the root `vite.config.mts` so that direct | COMMENT |
| LOW | scripts/build-workerd-bundle.sh | 1 | #!/usr/bin/env bash | COMMENT |
| LOW | packages/socialcalc-headless/src/socialcalc.bundled.ts | 21 | // | COMMENT |
| LOW | packages/socialcalc-headless/src/socialcalc.bundled.ts | 41 | // Factory-local bag. Formerly created in socialcalcconstants as | COMMENT |
| LOW | packages/socialcalc-headless/src/socialcalc.bundled.ts | 61 | // use this file except in compliance with the License. You may obtain a copy of | COMMENT |
| LOW | packages/socialcalc-headless/src/socialcalc.bundled.ts | 861 | // The contents of this file are subject to the Artistic License 2.0; you may not | COMMENT |
| LOW | packages/socialcalc-headless/src/socialcalc.bundled.ts | 11161 | // | COMMENT |
| LOW | packages/socialcalc-headless/src/socialcalc.bundled.ts | 11181 | // Portions (c) Copyright 2007 Socialtext, Inc. | COMMENT |
| LOW | packages/socialcalc-headless/src/socialcalc.bundled.ts | 12081 | // | COMMENT |
| LOW | packages/socialcalc-headless/src/socialcalc.bundled.ts | 17841 | // SocialCalc Formula Reference Rewrite Helpers | COMMENT |
| LOW | packages/socialcalc-headless/src/socialcalc.bundled.ts | 18161 | } else if (ttype === token_string) { | COMMENT |
| LOW | packages/socialcalc-headless/src/socialcalc.bundled.ts | 18181 | // the License at http://socialcalc.org/licenses/al-20/. | COMMENT |
| LOW | packages/client-multi/vite.config.ts | 1 | import { defineConfig } from 'vite-plus'; | COMMENT |
| LOW | packages/worker/vitest.node.config.ts | 21 | // Phase 7.1 restored `src/room.ts` to the Node coverage gate. The | COMMENT |
| LOW | packages/worker/wrangler.toml | 1 | name = "ethercalc" | COMMENT |
| LOW | packages/worker/wrangler.toml | 101 | COMMENT | |
| LOW | packages/worker/wrangler.toml | 121 | # it before `wrangler deploy --dry-run`. | COMMENT |
| LOW | packages/worker/wrangler.toml | 141 | # The structured `EMAIL.send({from: {email},to,subject,text})` call is | COMMENT |
| LOW | packages/worker/wrangler.toml | 161 | # | COMMENT |
| LOW | packages/worker/wrangler.toml | 181 | # { configPath }`) so this rule doesn't leak into the vitest runner and | COMMENT |
| LOW | packages/worker/vitest.config.ts | 21 | plugins: [ | COMMENT |
| LOW | packages/worker/src/room.ts | 441 | return this.#postClone(request); | COMMENT |
| LOW | packages/worker/src/room.ts | 1641 | // renamed the Redis keys `snapshot-<from>` -> `snapshot-<from>.bak` | COMMENT |
| LOW | packages/worker/src/room.ts | 1761 | // log would otherwise read back as just the base (log silently | COMMENT |
| LOW | packages/worker/src/types-shim.d.ts | 1 | /* eslint-disable */ | COMMENT |
| LOW | packages/worker/src/index.ts | 281 | ); | COMMENT |
| LOW | packages/worker/src/lib/xlsx-build.ts | 41 | COMMENT | |
| LOW | packages/worker/src/lib/xlsx-build.ts | 361 | // Multi-sheet rooms (prefix `=`) in legacy EtherCalc are a TOC sheet whose | COMMENT |
| LOW | packages/worker/src/routes/migrate.ts | 101 | COMMENT | |
| LOW | packages/worker/src/routes/rooms.ts | 761 | }); | COMMENT |
| LOW | packages/e2e/tests/passkey-room-access.spec.ts | 781 | test('keeps exactly one active control after a cold mount, across every trigger shape', async ({ | COMMENT |
| LOW | packages/client/src/boot.ts | 181 | // fall back to `host.open` because in production `host === window` | COMMENT |
| LOW | .github/workflows/nightly.yml | 1 | name: Nightly | COMMENT |
| LOW | .github/workflows/ci.yml | 241 | # (~13m48s) on M-series; this job mutates only packages with `src/` | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | …superpowers/plans/2026-07-10-multi-toc-csv-post-fix.md | 166 | export function workbookToLoadClipboardCommand( | CODE |
| LOW | …superpowers/plans/2026-07-10-multi-toc-csv-post-fix.md | 185 | export function xlsxToLoadClipboardCommands(bytes: Uint8Array): string[] { | CODE |
| LOW | spikes/leanstral-xlsx-coords/attempt-2-request.md | 146 | export function workbookToLoadClipboardCommand(bytes: Uint8Array): string | null { | CODE |
| LOW | spikes/leanstral-xlsx-coords/attempt-2-request.md | 208 | export function enforceSocialCalcColumnLimit( | CODE |
| LOW | packages/socialcalc-headless/scripts/build.js | 70 | export function transformSocialCalcSource(src) { | CODE |
| LOW | packages/worker/test/routes-rooms-post.node.test.ts | 711 | function makeFakeZipCentralDirectory( | CODE |
| LOW | packages/worker/test/xlsx-import.node.test.ts | 842 | function makeFakeZipCentralDirectory( | CODE |
| LOW | packages/worker/test/routes-rooms-xlsx-put.test.ts | 19 | function makeFakeZipCentralDirectory( | CODE |
| LOW | packages/worker/test/routes-rooms.node.test.ts | 103 | function makePrivateRoomDoNamespace(snapshot = 'PRIVATE-SECRET'): { | CODE |
| LOW | packages/worker/test/multi-sheet-import.node.test.ts | 31 | function makeFakeZipCentralDirectory( | CODE |
| LOW | packages/worker/src/auth-do.ts | 124 | function challengeCapacityResponse(): Response { | CODE |
| LOW | packages/worker/src/lib/xlsx-build.ts | 257 | export function sheetViewToBinaryWorkbook( | CODE |
| LOW | packages/worker/src/lib/xlsx-build.ts | 274 | export function buildMultiSheetWorkbookFromSheets( | CODE |
| LOW | packages/worker/src/lib/xlsx-import.ts | 135 | export function enforceImportArchiveLimit(bytes: Uint8Array): void { | CODE |
| LOW | packages/worker/src/lib/xlsx-import.ts | 248 | export function enforceActualImportArchiveLimit(bytes: Uint8Array): void { | CODE |
| LOW | packages/worker/src/lib/xlsx-import.ts | 383 | export function enforceSocialCalcColumnLimit( | CODE |
| LOW | packages/worker/src/lib/xlsx-import.ts | 702 | export function workbookToLoadClipboardCommand(bytes: Uint8Array): string | null { | CODE |
| LOW | packages/worker/src/lib/xlsx-import.ts | 744 | export function xlsxToLoadClipboardCommands(bytes: Uint8Array): string[] { | CODE |
| LOW | packages/worker/src/lib/storage-batch.ts | 52 | export async function replaceStorageEntriesBatched( | CODE |
| LOW | packages/worker/src/lib/command-limits.ts | 208 | export function isCommandBatchWithinLimits( | CODE |
| LOW | packages/worker/src/lib/command-limits.ts | 438 | export function isSnapshotWithinSheetLimits(snapshot: string): boolean { | CODE |
| LOW | packages/worker/src/lib/room-create-limit.ts | 42 | export function parseRoomCreateLimitConfig( | CODE |
| LOW | packages/worker/src/lib/multi-sheet-import.ts | 296 | export function buildMultiSheetAppendImport( | CODE |
| LOW | packages/worker/src/routes/multi-import.ts | 55 | function parentedChildSkewResponse(): Response { | CODE |
| LOW | packages/worker/src/routes/exports.ts | 61 | function singleSheetFormatOnWorkbook(key: string): Response { | CODE |
| LOW | packages/worker/src/routes/rooms.ts | 64 | function workbookFormatFromContentType(contentType: string): 'xlsx' | 'ods-or-fods' { | CODE |
| LOW | packages/worker/src/handlers/room-entry.ts | 169 | export function buildTemplateFormRedirect( | CODE |
| LOW | packages/e2e/tests/landing-import.spec.ts | 40 | function installNamedImportDialogHandler( | CODE |
| LOW | packages/e2e/tests/passkey-room-access.spec.ts | 72 | async function assertColdLoadUpgradeRaceIsSafe(page: Page, gotoPath: string): Promise<void> { | CODE |
| LOW | packages/oracle-harness/src/matchers.ts | 187 | function isReplayGeneratedRoomlink(entry: unknown): boolean { | CODE |
| LOW | packages/oracle-harness/src/record.ts | 55 | export function defaultMatcherForResponse( | CODE |
| LOW | packages/oracle-harness/src/replay.ts | 64 | function hasRecordedWsExpectations(scenario: WsScenario): boolean { | CODE |
| LOW | packages/oracle-harness/src/replay.ts | 151 | export function sortRecordedByScenarioOrder( | CODE |
| LOW | packages/oracle-harness/src/zip-canonical.ts | 216 | export function canonicalizeContentTypesXml( | CODE |
| LOW | packages/oracle-harness/src/zip-canonical.ts | 245 | export function canonicalizeWorkbookRelsXml( | CODE |
| LOW | packages/oracle-harness/src/zip-canonical.ts | 272 | export function canonicalizeXlsxWorksheetXml( | CODE |
| LOW | packages/oracle-harness/src/zip-canonical.ts | 319 | export function canonicalizeXlsxWorkbookXml(raw: string): string { | CODE |
| LOW | packages/oracle-harness/src/zip-canonical.ts | 335 | export function canonicalizeOdsManifestRdf( | CODE |
| LOW | packages/oracle-harness/src/zip-canonical.ts | 377 | export function canonicalizeOdsContentXml(raw: string): string { | CODE |
| LOW | packages/oracle-harness/src/zip-canonical.ts | 400 | export function canonicalizeOdsManifestXml( | CODE |
| LOW | packages/oracle-harness/src/zip-canonical.ts | 438 | function removeMatchingDescendants( | CODE |
| LOW | packages/oracle-harness/src/ws-normalize.ts | 76 | function normalizeAskLogExpectStep(step: WsExpectStep): WsExpectStep { | CODE |
| LOW | packages/client/src/boot.ts | 308 | export function installSocialCalcLogoLink(host: BootHost): void { | CODE |
| LOW | packages/client/src/boot.ts | 335 | export function installLegacyExportBindings(host: BootHost): void { | CODE |
| LOW | lemma/context.md | 100 | export function workbookToLoadClipboardCommand(bytes: Uint8Array): string | null { | CODE |
| LOW | lemma/context.md | 173 | export function enforceSocialCalcColumnLimit( | CODE |
| LOW | lemma/request.md | 168 | export function workbookToLoadClipboardCommand(bytes: Uint8Array): string | null { | CODE |
| LOW | lemma/request.md | 241 | export function enforceSocialCalcColumnLimit( | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| CRITICAL | static/jquery-ui.min.js | 6 | (function(t){"function"==typeof define&&define.amd?define(["jquery"],t):t(jQuery)})(function(t){function e(e,s){var n,a, | CODE |
| CRITICAL | static/ethercalc.js | 17 | Xt.optgroup=Xt.option,Xt.tbody=Xt.tfoot=Xt.colgroup=Xt.caption=Xt.thead,Xt.th=Xt.td,rt.extend({clone:function(e,t,o){var | CODE |
| CRITICAL | static/ethercalc.js | 19 | return{width:r?e.position.scrollbarWidth():0,height:n?e.position.scrollbarWidth():0}},getWithinInfo:function(t){var o=e( | CODE |
| CRITICAL | static/jquery.js | 4 | },a,b,arguments.length>1)},show:function(){return Wb(this,!0)},hide:function(){return Wb(this)},toggle:function(a){retur | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | tests/oracle/docker-compose.yml | 5 | # before the TypeScript rewrite scaffolding (Phases 1-2) landed on | COMMENT |
| MEDIUM | docs/historic/REWRITE_ULTRAPLAN.md | 447 | | 2026-07-10 | passkey-A | **Passkey Phase A post-review hardening + PR #841 open, CI green.** Real-browser staging pass | CODE |
| MEDIUM | …perpowers/specs/2026-07-10-pitr-room-restore-design.md | 102 | ### Worker orchestration | COMMENT |
| MEDIUM | docs/migration/INVENTORY.md | 1161 | 5:# before the TypeScript rewrite scaffolding (Phases 1-2) landed on | CODE |
| MEDIUM | docs/migration/INVENTORY.md | 1896 | 447:| 2026-07-10 | passkey-A | **Passkey Phase A post-review hardening + PR #841 open, CI green.** Real-browser staging | CODE |
| MEDIUM | docs/migration/PROD_UPGRADE_PLAN.md | 2284 | | **Cross-sheet formula hydration** | `RoomDO.#getSpreadsheet` → `#hydrateCrossSheetRefs` (`room.ts:2179`, `room.ts:2204 | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | docs/migration/DELTA_AUDIT.md | 68 | ## Step 1: Baseline Determination & Evidence | COMMENT |
| LOW | docs/migration/DELTA_AUDIT.md | 113 | ## Step 2: Detailed Delta Enumeration | COMMENT |
| LOW | docs/migration/DELTA_AUDIT.md | 451 | ## Step 3: Irreversibility & Mitigation Strategies | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | static/multi.js | 17 | function o(e,t){if(!i.canUseDOM||t&&!("addEventListener"in document))return!1;var n="on"+e,o=n in document;if(!o){var a= | CODE |
| MEDIUM | static/multi.js | 17 | function o(e,t){if(!i.canUseDOM||t&&!("addEventListener"in document))return!1;var n="on"+e,o=n in document;if(!o){var a= | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | bin/migrate-legacy.sh | 25 | # Usage: | COMMENT |
| LOW | scripts/ratchet-verify.sh | 20 | # Usage: | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | static/jszip.js | 1238 | * The implementation is in jszip-load.js, don't forget to include it. | COMMENT |