Open-source, local-first apps.
This report summarizes scanner evidence for EpicenterHQ/epicenter, a TypeScript project with 4,834 GitHub stars. SynthScan examined 741,598 lines of code across 4235 source files, recording 708 pattern matches distributed across 12 syntactic categories. The legacy adjusted pattern signal is 1.9 (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? 476 finding(s).
Are imports declared and package/API names verified? 37 finding(s).
Are wrappers, guards, and repeated structures necessary? 299 finding(s).
Which changes need focused human review? 708 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 708 distinct pattern matches across 12 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 | …s/20260109T140700-opencode-integration-architecture.md | 283 | // ═══════════════════════════════════════════════════════════ | COMMENT |
| MEDIUM | …s/20260109T140700-opencode-integration-architecture.md | 285 | // ═══════════════════════════════════════════════════════════ | COMMENT |
| MEDIUM | …s/20260109T140700-opencode-integration-architecture.md | 354 | // ═══════════════════════════════════════════════════════════ | COMMENT |
| MEDIUM | …s/20260109T140700-opencode-integration-architecture.md | 356 | // ═══════════════════════════════════════════════════════════ | COMMENT |
| MEDIUM | …cs/20260131T020000-dynamic-workspace-simplification.md | 75 | // ═══════════════════════════════════════════════════════════════════════════ | COMMENT |
| MEDIUM | …cs/20260131T020000-dynamic-workspace-simplification.md | 77 | // ═══════════════════════════════════════════════════════════════════════════ | COMMENT |
| MEDIUM | …cs/20260131T020000-dynamic-workspace-simplification.md | 91 | // ═══════════════════════════════════════════════════════════════════════════ | COMMENT |
| MEDIUM | …cs/20260131T020000-dynamic-workspace-simplification.md | 93 | // ═══════════════════════════════════════════════════════════════════════════ | COMMENT |
| MEDIUM | …cs/20260131T020000-dynamic-workspace-simplification.md | 107 | // ═══════════════════════════════════════════════════════════════════════════ | COMMENT |
| MEDIUM | …cs/20260131T020000-dynamic-workspace-simplification.md | 109 | // ═══════════════════════════════════════════════════════════════════════════ | COMMENT |
| MEDIUM | …cs/20260131T020000-dynamic-workspace-simplification.md | 123 | // ═══════════════════════════════════════════════════════════════════════════ | COMMENT |
| MEDIUM | …cs/20260131T020000-dynamic-workspace-simplification.md | 125 | // ═══════════════════════════════════════════════════════════════════════════ | COMMENT |
| MEDIUM | …523T000000-greenfield-workspace-encryption-boundary.md | 423 | // ─── BEFORE (browser, fuji) ───────────────────────────────────────────── | COMMENT |
| MEDIUM | …523T000000-greenfield-workspace-encryption-boundary.md | 433 | // ─── AFTER (browser, fuji) ────────────────────────────────────────────── | COMMENT |
| MEDIUM | …523T000000-greenfield-workspace-encryption-boundary.md | 444 | // ─── BEFORE (daemon, fuji) ────────────────────────────────────────────── | COMMENT |
| MEDIUM | …523T000000-greenfield-workspace-encryption-boundary.md | 460 | // ─── AFTER (daemon, fuji) ─────────────────────────────────────────────── | COMMENT |
| MEDIUM⚡ | specs/20260123T102500-single-workspace-architecture.md | 630 | // ───────────────────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM⚡ | specs/20260123T102500-single-workspace-architecture.md | 632 | // ───────────────────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM⚡ | specs/20260123T102500-single-workspace-architecture.md | 637 | // ───────────────────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM⚡ | specs/20260123T102500-single-workspace-architecture.md | 639 | // ───────────────────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | specs/20260123T102500-single-workspace-architecture.md | 650 | // ───────────────────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | specs/20260123T102500-single-workspace-architecture.md | 652 | // ───────────────────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM⚡ | specs/20260123T102500-single-workspace-architecture.md | 669 | // ───────────────────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM⚡ | specs/20260123T102500-single-workspace-architecture.md | 671 | // ───────────────────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM⚡ | specs/20260123T102500-single-workspace-architecture.md | 679 | // ───────────────────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM⚡ | specs/20260123T102500-single-workspace-architecture.md | 681 | // ───────────────────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | specs/y-meta-stores.md | 149 | // ═══════════════════════════════════════════════════════════════════ | COMMENT |
| MEDIUM | specs/y-meta-stores.md | 151 | // ═══════════════════════════════════════════════════════════════════ | COMMENT |
| MEDIUM⚡ | specs/y-meta-stores.md | 165 | // ═══════════════════════════════════════════════════════════════════ | COMMENT |
| MEDIUM⚡ | specs/y-meta-stores.md | 167 | // ═══════════════════════════════════════════════════════════════════ | COMMENT |
| MEDIUM⚡ | specs/y-meta-stores.md | 177 | // ═══════════════════════════════════════════════════════════════════ | COMMENT |
| MEDIUM⚡ | specs/y-meta-stores.md | 179 | // ═══════════════════════════════════════════════════════════════════ | COMMENT |
| MEDIUM⚡ | specs/y-meta-stores.md | 190 | // ═══════════════════════════════════════════════════════════════════ | COMMENT |
| MEDIUM⚡ | specs/y-meta-stores.md | 192 | // ═══════════════════════════════════════════════════════════════════ | COMMENT |
| MEDIUM⚡ | specs/y-meta-stores.md | 197 | // ═══════════════════════════════════════════════════════════════════ | COMMENT |
| MEDIUM⚡ | specs/y-meta-stores.md | 199 | // ═══════════════════════════════════════════════════════════════════ | COMMENT |
| MEDIUM | specs/y-meta-stores.md | 357 | // ═══════════════════════════════════════════════════════════════════ | COMMENT |
| MEDIUM | specs/y-meta-stores.md | 359 | // ═══════════════════════════════════════════════════════════════════ | COMMENT |
| MEDIUM⚡ | specs/y-meta-stores.md | 380 | // ═══════════════════════════════════════════════════════════════════ | COMMENT |
| MEDIUM⚡ | specs/y-meta-stores.md | 382 | // ═══════════════════════════════════════════════════════════════════ | COMMENT |
| MEDIUM⚡ | specs/y-meta-stores.md | 391 | // ═══════════════════════════════════════════════════════════════════ | COMMENT |
| MEDIUM⚡ | specs/y-meta-stores.md | 393 | // ═══════════════════════════════════════════════════════════════════ | COMMENT |
| MEDIUM⚡ | specs/y-meta-stores.md | 402 | // ═══════════════════════════════════════════════════════════════════ | COMMENT |
| MEDIUM⚡ | specs/y-meta-stores.md | 404 | // ═══════════════════════════════════════════════════════════════════ | COMMENT |
| MEDIUM⚡ | specs/20260202T162500-reddit-workspace-migration.md | 410 | // ═══════════════════════════════════════════════════════════════════════════ | COMMENT |
| MEDIUM⚡ | specs/20260202T162500-reddit-workspace-migration.md | 412 | // ═══════════════════════════════════════════════════════════════════════════ | COMMENT |
| MEDIUM⚡ | specs/20260202T162500-reddit-workspace-migration.md | 421 | // ───────────────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM⚡ | specs/20260202T162500-reddit-workspace-migration.md | 423 | // ───────────────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM⚡ | specs/20260202T162500-reddit-workspace-migration.md | 1182 | // ═══════════════════════════════════════════════════════════════════════════ | COMMENT |
| MEDIUM⚡ | specs/20260202T162500-reddit-workspace-migration.md | 1184 | // ═══════════════════════════════════════════════════════════════════════════ | COMMENT |
| MEDIUM⚡ | specs/20260202T162500-reddit-workspace-migration.md | 1188 | // ═══════════════════════════════════════════════════════════════════════════ | COMMENT |
| MEDIUM⚡ | specs/20260202T162500-reddit-workspace-migration.md | 1190 | // ═══════════════════════════════════════════════════════════════════════════ | COMMENT |
| MEDIUM⚡ | specs/20260202T162500-reddit-workspace-migration.md | 1195 | // ═══════════════════════════════════════════════════════════════════════════ | COMMENT |
| MEDIUM⚡ | specs/20260202T162500-reddit-workspace-migration.md | 1197 | // ═══════════════════════════════════════════════════════════════════════════ | COMMENT |
| MEDIUM⚡ | specs/20260202T162500-reddit-workspace-migration.md | 1201 | // ───────────────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM⚡ | specs/20260202T162500-reddit-workspace-migration.md | 1205 | // ───────────────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | specs/20260202T162500-reddit-workspace-migration.md | 395 | // ═══════════════════════════════════════════════════════════════════════════ | COMMENT |
| MEDIUM | specs/20260202T162500-reddit-workspace-migration.md | 397 | // ═══════════════════════════════════════════════════════════════════════════ | COMMENT |
| MEDIUM | specs/20260202T162500-reddit-workspace-migration.md | 467 | // ───────────────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | specs/20260202T162500-reddit-workspace-migration.md | 469 | // ───────────────────────────────────────────────────────────────────────── | COMMENT |
| 135 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | …/20251104T000000 simplify-markdown-index-signatures.md | 57 | ### Step 1: Create explicit types | COMMENT |
| LOW | …/20251104T000000 simplify-markdown-index-signatures.md | 69 | ### Step 2: Update function signatures | COMMENT |
| LOW | specs/20251027T140000 db-phase-2-file-system.md | 175 | ### Step 1: Create File System DB Implementation | COMMENT |
| LOW | specs/20251027T140000 db-phase-2-file-system.md | 294 | ### Step 2: Modify Recorder Services | COMMENT |
| LOW | specs/20251027T140000 db-phase-2-file-system.md | 376 | ### Step 3: Update DB Interface | COMMENT |
| LOW | specs/20251027T140000 db-phase-2-file-system.md | 407 | ### Step 4: File Operations | COMMENT |
| LOW | specs/20251027T140000 db-phase-2-file-system.md | 434 | ### Step 5: Migration Strategy | COMMENT |
| LOW | specs/20260319T140004-autumn-phase4-storage-billing.md | 123 | ### Step 1: Add storage feature to `autumn.config.ts` | COMMENT |
| LOW | specs/20260319T140004-autumn-phase4-storage-billing.md | 129 | ### Step 2: Create storage aggregation function | COMMENT |
| LOW | specs/20260319T140004-autumn-phase4-storage-billing.md | 175 | ### Step 3: Wire storage sync into existing flows | COMMENT |
| LOW | specs/20260319T140004-autumn-phase4-storage-billing.md | 192 | ### Step 4: Gate workspace/document creation | COMMENT |
| LOW | specs/20260319T140004-autumn-phase4-storage-billing.md | 212 | ### Step 5: Push config and test | COMMENT |
| LOW | specs/20251027T120000 db-service-platform-split.md | 69 | ### Step 1: Create Type Definitions | COMMENT |
| LOW | specs/20251027T120000 db-service-platform-split.md | 158 | ### Step 2: Rename and Refactor Dexie Implementation | COMMENT |
| LOW | specs/20251027T120000 db-service-platform-split.md | 186 | ### Step 3: Create Desktop Implementation | COMMENT |
| LOW | specs/20251027T120000 db-service-platform-split.md | 207 | ### Step 4: Update Main Index | COMMENT |
| LOW | specs/20251027T120000 db-service-platform-split.md | 240 | ### Step 5: Update All Imports | COMMENT |
| LOW | specs/20251027T120000 db-service-platform-split.md | 251 | ### Step 6: Testing | COMMENT |
| LOW⚡ | …ecs/20260223T102800-network-topology-execution-plan.md | 10 | ### Step 1: Hub & Local Server Composition Split | COMMENT |
| LOW⚡ | …ecs/20260223T102800-network-topology-execution-plan.md | 18 | ### Step 2: Better Auth Plugin | COMMENT |
| LOW⚡ | …ecs/20260223T102800-network-topology-execution-plan.md | 26 | ### Step 3: Key Management on Hub | COMMENT |
| LOW⚡ | …ecs/20260223T102800-network-topology-execution-plan.md | 36 | ### Step 4: OLLAMA_HOST Configuration | COMMENT |
| LOW⚡ | …ecs/20260223T102800-network-topology-execution-plan.md | 40 | ### Step 5: Local Server Auth Boundary | COMMENT |
| LOW⚡ | …ecs/20260223T102800-network-topology-execution-plan.md | 47 | ### Step 6: Client Hub URL Configuration | COMMENT |
| LOW⚡ | …ecs/20260223T102800-network-topology-execution-plan.md | 53 | ### Step 7: AI Proxy for OpenCode | COMMENT |
| LOW⚡ | …ecs/20260223T102800-network-topology-execution-plan.md | 59 | ### Step 8: Server Discovery via Yjs Awareness | COMMENT |
| LOW⚡ | …ecs/20260223T102800-network-topology-execution-plan.md | 66 | ### Step 9: OpenCode Integration | COMMENT |
| LOW | …ecs/20260124T163000-developer-experience-schema-api.md | 824 | // Step 1: Define migration | COMMENT |
| LOW | …ecs/20260124T163000-developer-experience-schema-api.md | 840 | // Step 2: Run migration (creates new epoch) | COMMENT |
| LOW | specs/20260319T140001-autumn-phase1-ai-chat-gating.md | 38 | ### Step 1: Add dependencies | COMMENT |
| LOW | specs/20260319T140001-autumn-phase1-ai-chat-gating.md | 48 | ### Step 2: Create `apps/api/autumn.config.ts` | COMMENT |
| LOW | specs/20260319T140001-autumn-phase1-ai-chat-gating.md | 157 | ### Step 3: Add `AUTUMN_SECRET_KEY` to wrangler | COMMENT |
| LOW | specs/20260319T140001-autumn-phase1-ai-chat-gating.md | 170 | ### Step 4: Create `apps/api/src/autumn.ts` | COMMENT |
| LOW | specs/20260319T140001-autumn-phase1-ai-chat-gating.md | 193 | ### Step 5: Create `apps/api/src/model-classes.ts` | COMMENT |
| LOW | specs/20260319T140001-autumn-phase1-ai-chat-gating.md | 233 | ### Step 6: Create `apps/api/src/ensure-autumn-customer.ts` | COMMENT |
| LOW | specs/20260319T140001-autumn-phase1-ai-chat-gating.md | 275 | ### Step 7: Modify `apps/api/src/ai-chat.ts` | COMMENT |
| LOW | specs/20260319T140001-autumn-phase1-ai-chat-gating.md | 443 | ### Step 8: Wire middleware in `apps/api/src/app.ts` | COMMENT |
| LOW | specs/20260319T140001-autumn-phase1-ai-chat-gating.md | 484 | ### Step 9: Push config and smoke test | COMMENT |
| LOW | specs/20260425T180002-orchestration-tracker.md | 70 | ### Step 5: execute the combined PR-D + PR-E branch | COMMENT |
| LOW | …ecs/20260107T114209-cell-level-crdt-merging.handoff.md | 83 | ### Step 1: Update Storage Structure | COMMENT |
| LOW | …ecs/20260107T114209-cell-level-crdt-merging.handoff.md | 91 | ### Step 2: Update CRUD Methods | COMMENT |
| LOW⚡ | …ecs/20260107T114209-cell-level-crdt-merging.handoff.md | 145 | ### Step 3: Update Observer | COMMENT |
| LOW⚡ | …ecs/20260107T114209-cell-level-crdt-merging.handoff.md | 153 | ### Step 4: Run Tests | COMMENT |
| LOW⚡ | …ecs/20260107T114209-cell-level-crdt-merging.handoff.md | 162 | ### Step 5: Verify Providers | COMMENT |
| LOW | specs/20251128T100000-zod-v4-migration.md | 129 | ### Step 1: Find All Zod Usage | COMMENT |
| LOW⚡ | specs/20251128T100000-zod-v4-migration.md | 143 | ### Step 2: Update Error Messages | COMMENT |
| LOW⚡ | specs/20251128T100000-zod-v4-migration.md | 150 | ### Step 3: Update String Validators | COMMENT |
| LOW⚡ | specs/20251128T100000-zod-v4-migration.md | 157 | ### Step 4: Update Object Methods | COMMENT |
| LOW⚡ | specs/20251128T100000-zod-v4-migration.md | 165 | ### Step 5: Update Error Handling | COMMENT |
| LOW⚡ | specs/20251128T100000-zod-v4-migration.md | 172 | ### Step 6: Update Function Schemas | COMMENT |
| LOW⚡ | specs/20251128T100000-zod-v4-migration.md | 176 | ### Step 7: Test Thoroughly | COMMENT |
| LOW⚡ | specs/20260107T194104-action-system-redesign.md | 63 | // Step 1: Define workspace | COMMENT |
| LOW⚡ | specs/20260107T194104-action-system-redesign.md | 71 | // Step 2: Create client with capabilities | COMMENT |
| LOW⚡ | specs/20260107T194104-action-system-redesign.md | 74 | // Step 3: Define actions (wrapping client methods) | COMMENT |
| LOW | specs/20260107T194104-action-system-redesign.md | 102 | // Step 4: Pass to server and/or CLI | COMMENT |
| LOW⚡ | specs/20251128T110000-bits-ui-migration.md | 129 | ### Step 1: Update Catalog Version | COMMENT |
| LOW⚡ | specs/20251128T110000-bits-ui-migration.md | 136 | ### Step 2: Find All Slider Components | COMMENT |
| LOW⚡ | specs/20251128T110000-bits-ui-migration.md | 144 | ### Step 3: Fix Type Errors | COMMENT |
| LOW | specs/20251128T110000-bits-ui-migration.md | 183 | ### Step 4: Run Type Check | COMMENT |
| LOW | specs/20251128T110000-bits-ui-migration.md | 191 | ### Step 5: Visual Testing | COMMENT |
| 75 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | bunfig.toml | 1 | [install] | COMMENT |
| LOW | …ecs/20260524T021140-asset-visibility-and-client-sdk.md | 121 | COMMENT | |
| LOW | …ecs/20260524T021140-asset-visibility-and-client-sdk.md | 141 | // application/json: | COMMENT |
| LOW | .agents/skills/diagnose/scripts/hitl-loop.template.sh | 1 | #!/usr/bin/env bash | COMMENT |
| LOW | docs/articles/typescript-inference-pattern.ts | 1 | // ============================================================================ | COMMENT |
| LOW | docs/articles/typescript-inference-pattern.ts | 81 | // transformed is 'number' ✅ | COMMENT |
| LOW | docs/articles/typescript-inference-pattern.ts | 121 | }, | COMMENT |
| LOW | docs/articles/typescript-inference-pattern.ts | 201 | COMMENT | |
| LOW | scripts/generate-spec-history.ts | 1 | // Regenerates docs/spec-history.md from git history. | COMMENT |
| LOW | scripts/check-boot-purity.ts | 1 | // Boot-purity check. Deterministic, fixable-in-loop, CI-optional. | COMMENT |
| LOW | scripts/check-doc-hygiene.ts | 1 | // Doc-hygiene check. Deterministic, fixable-in-loop, CI-optional. | COMMENT |
| LOW | scripts/check-doc-hygiene.ts | 21 | // state and age is not a defect, so this does not fire on an old record. It | COMMENT |
| LOW | scripts/check-doc-hygiene.ts | 121 | // other gate because they live in Markdown frontmatter. | COMMENT |
| LOW | packages/svelte/src/persisted-state.svelte.ts | 141 | function readFromStorage() { | COMMENT |
| LOW | packages/app/src/data/sync/hub.ts | 381 | // `>=` rather than `===`, because entries keep arriving: a replica asked | COMMENT |
| LOW | packages/app/src/data/sync/client.ts | 281 | const gap = SyncClientError.Gap({ expected: cursor + 1, received: seq }); | COMMENT |
| LOW | packages/app/src/data/sync/client.ts | 441 | // and a socket delivers in order, so it is, by construction. This | COMMENT |
| LOW | packages/app/src/data/store/idb-updates.ts | 181 | { bytes: copyBytes(op.bytes), authoritySeq: null }, | COMMENT |
| LOW | packages/app/src/data/store/store.ts | 601 | // a row one of its values changed | COMMENT |
| LOW | packages/app/src/data/store/store.ts | 681 | transaction: Y.Transaction, | COMMENT |
| LOW | packages/app/src/data/store/store.ts | 801 | opts?: { advanceTo?: number }, | COMMENT |
| LOW | packages/app/src/data/store/store.ts | 1121 | // One key, checked against one declared field. This used to read | COMMENT |
| LOW | packages/vite-config/src/index.ts | 41 | // Bun can split `vite` into peer-variant installs (`vite@7.3.5+<hashA>` | COMMENT |
| LOW | packages/folder/addon/exchange.c | 21 | #include <errno.h> | COMMENT |
| LOW | packages/server/src/auth/create-auth.ts | 161 | secret, | COMMENT |
| LOW | packages/server/src/auth/create-auth.ts | 181 | // Auth at all (this builder is cloud-only, reached only through | COMMENT |
| LOW | packages/server/src/auth/create-auth.ts | 221 | // Partitioned cookies are keyed by the top-level site at creation | COMMENT |
| LOW | packages/server/src/auth/base-config.ts | 21 | // gate: `!isTrustedProvider && !userInfo.emailVerified`, plus a | COMMENT |
| LOW | …ckages/tauri-plugin-epicenter-folder/core/src/owner.rs | 1 | //! The one owner of a native folder. | COMMENT |
| LOW | …ckages/tauri-plugin-epicenter-folder/core/src/owner.rs | 21 | //! waits for hashing, and no batch of this owner is ever seen half applied. A | COMMENT |
| LOW | …ckages/tauri-plugin-epicenter-folder/core/src/owner.rs | 41 | //! for the Git lock to be released, and starts over, so it reads the folder | COMMENT |
| LOW | …ckages/tauri-plugin-epicenter-folder/core/src/owner.rs | 101 | pub require_existing_repository: bool, | COMMENT |
| LOW | …ckages/tauri-plugin-epicenter-folder/core/src/owner.rs | 241 | COMMENT | |
| LOW | …ges/tauri-plugin-epicenter-folder/core/src/registry.rs | 1 | //! Which window may use which folder. | COMMENT |
| LOW | …-plugin-epicenter-folder/core/src/publication_tests.rs | 1 | //! File publication through one owner. | COMMENT |
| LOW | …ges/tauri-plugin-epicenter-folder/core/src/download.rs | 1 | //! A first download: a dataset's remote history fetched into staging and | COMMENT |
| LOW | …ges/tauri-plugin-epicenter-folder/core/src/download.rs | 21 | //! named, and the staging folder, with `origin` set, is kept. This is not the | COMMENT |
| LOW | …/tauri-plugin-epicenter-folder/core/src/merge_tests.rs | 1 | //! Merging incoming history in the native owner. | COMMENT |
| LOW | …es/tauri-plugin-epicenter-folder/core/src/transport.rs | 1 | //! A transport a shell injects for one folder's transfers. | COMMENT |
| LOW | …es/tauri-plugin-epicenter-folder/core/src/transport.rs | 21 | //! retirement reports anything is never presented as done, whatever Git's | COMMENT |
| LOW | …auri-plugin-epicenter-folder/core/src/history_tests.rs | 1 | //! Native Git history for one folder. | COMMENT |
| LOW | …ckages/tauri-plugin-epicenter-folder/core/src/merge.rs | 1 | //! A two-parent merge of the folder's head and a fetched commit, prepared as | COMMENT |
| LOW | packages/tauri-plugin-epicenter-folder/core/src/git.rs | 1 | //! Native Git storage: a real repository in `<root>/.git`. | COMMENT |
| LOW | packages/tauri-plugin-epicenter-folder/core/src/git.rs | 361 | /// - no fsmonitor runs; | COMMENT |
| LOW | …kages/tauri-plugin-epicenter-folder/core/src/runner.rs | 1 | //! One active pass and at most one pending pass, on a dedicated thread. | COMMENT |
| LOW | …kages/tauri-plugin-epicenter-folder/core/src/runner.rs | 41 | } | COMMENT |
| LOW | …ckages/tauri-plugin-epicenter-folder/core/src/files.rs | 1 | //! Ordinary files in a native folder. | COMMENT |
| LOW | …ckages/tauri-plugin-epicenter-folder/core/src/files.rs | 21 | //! The exchange is the only operation on the path. What it displaced lands | COMMENT |
| LOW | …ges/tauri-plugin-epicenter-folder/core/src/incoming.rs | 1 | //! The record an incoming update keeps while it changes the folder | COMMENT |
| LOW | …ages/tauri-plugin-epicenter-folder/core/src/history.rs | 201 | pending: PendingIncoming, | COMMENT |
| LOW | …ages/tauri-plugin-epicenter-folder/core/src/history.rs | 241 | pub struct MergePolicy { | COMMENT |
| LOW | …ages/tauri-plugin-epicenter-folder/core/src/history.rs | 281 | #[derive(Debug, Clone, PartialEq, Eq, Serialize, Type)] | COMMENT |
| LOW | packages/tauri-plugin-epicenter-folder/core/src/lock.rs | 1 | //! One owner per folder directory, across processes. | COMMENT |
| LOW | …uri-plugin-epicenter-folder/core/src/incoming_tests.rs | 1 | //! An incoming update that stops partway, and its explicit recovery | COMMENT |
| LOW | …uri-plugin-epicenter-folder/core/src/incoming_tests.rs | 21 | //! index entry, a moved branch, a held index or ref lock, and an unreadable | COMMENT |
| LOW | …uri-plugin-epicenter-folder/core/src/owner/recovery.rs | 1 | //! Finishing an incoming update from its record (ADR-0474). | COMMENT |
| LOW | …uri-plugin-epicenter-folder/core/src/owner/recovery.rs | 21 | //! path is checked for its after state; then the index through Git's lock | COMMENT |
| LOW | …uri-plugin-epicenter-folder/core/src/files/exchange.rs | 1 | //! Atomic exchange of two existing directory entries, so a replacement lands | COMMENT |
| LOW | packages/tauri-plugin-epicenter-folder/src/lib.rs | 1 | //! One native owner per Epicenter folder, shared by every window of a shell. | COMMENT |
| LOW | packages/tauri-plugin-epicenter-folder/src/commands.rs | 41 | pub snapshot: GitSnapshot, | COMMENT |
| 160 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | specs/20260104T220141-inline-service-factories.md | 106 | export function createOpenaiTranscriptionService() { | CODE |
| LOW | specs/20260104T220141-inline-service-factories.md | 187 | export function createAutostartServiceDesktop() { | CODE |
| LOW | specs/20251227T000000-api-namespace-restructure.md | 141 | function createWorkspaceSyncPlugin(workspaceId: string, getDoc: () => Y.Doc | undefined) { | CODE |
| LOW | specs/20251213T231125-multi-device-tab-sync.md | 137 | export async function generateDefaultDeviceName(): Promise<string> { | CODE |
| LOW | …040000-machine-auth-adopt-better-auth-device-client.md | 109 | export function createMachineAuthTransport({ fetch = globalThis.fetch } = {}) { | CODE |
| LOW | …01T120000-simple-definition-first-workspace.handoff.md | 103 | export async function createWorkspaceDefinition(input: ...): Promise<WorkspaceDefinition> | CODE |
| LOW | …01T120000-simple-definition-first-workspace.handoff.md | 106 | export async function updateWorkspaceDefinition(id: string, updates: ...): Promise<WorkspaceDefinition | null> | CODE |
| LOW | …execution-prompt-device-actions-and-remote-dispatch.md | 52 | export function getOrCreateDeviceId(storage: SimpleStorage): string { | CODE |
| LOW | specs/20260319T140001-autumn-phase1-ai-chat-gating.md | 258 | export function createEnsureAutumnCustomer(autumn: Autumn) { | CODE |
| LOW | specs/20260525T220511-workspace-primitive-bundle.md | 204 | export function createHoneycrispWorkspace(opts: { keyring: () => Keyring }) { | CODE |
| LOW | specs/20260525T220511-workspace-primitive-bundle.md | 220 | export function createWhisperingWorkspace() { | CODE |
| LOW | specs/20251012T000000 recording-method-clarity.md | 164 | export function hasNavigatorLocalTranscriptionIssue({ | CODE |
| LOW | …260502T022408-browser-document-contract-clean-break.md | 159 | export function createEntryContentDocuments({ | CODE |
| LOW | …260502T022408-browser-document-contract-clean-break.md | 636 | export function createFileContentDocuments({ | CODE |
| LOW | …40200-dynamic-workspace-architecture-simplification.md | 95 | export function validateWorkspaceDefinition( | CODE |
| LOW | …260131T110000-auto-injected-version-discriminant-v2.md | 499 | function createVersionedUnionSchema( | CODE |
| LOW | …60315T070000-query-layer-switch-to-workspace-tables.md | 180 | function createWorkspaceRecordings() { | CODE |
| LOW | …-browser-document-family-identity-and-sync-topology.md | 59 | async function clearFileContentLocalData() { | CODE |
| LOW | specs/20260501T013208-auth-snapshot-api.md | 341 | function persistedStateSessionStorage( | CODE |
| LOW | specs/20260203T110000-static-workspace-registry.md | 124 | export async function loadStaticWorkspacesRegistry(): Promise<StaticWorkspacesRegistry> { | CODE |
| LOW | specs/20260203T110000-static-workspace-registry.md | 1060 | function createAddStaticWorkspaceDialogState() { | CODE |
| LOW | specs/20250118T192845-error-handling-pattern.md | 31 | export function createManualRecorderService() { | CODE |
| LOW | specs/20260506T010807-signed-in-owns-the-workspace.md | 129 | function createEntriesStateForFuji() { | CODE |
| LOW | specs/20260511T115110-remote-storage-control-plane.md | 333 | async function recordMeasurementIfActive( | CODE |
| LOW | specs/20260511T115110-remote-storage-control-plane.md | 350 | async function reactivateRoomForRecreate( | CODE |
| LOW | specs/20260522T220000-api-runtime-portability.md | 352 | export function createDurableObjectUpdateLog(sql: SqlStorage) { | CODE |
| LOW | …251214T180000-moonshine-addition-whispercpp-disable.md | 175 | export function createMoonshineTranscriptionService() { | CODE |
| LOW | .agents/skills/control-flow/SKILL.md | 31 | export async function checkFfmpegRecordingMethodCompatibility() { | CODE |
| LOW | docs/patterns/factory-function-pattern.md | 103 | export function createAssistantPasswordUtils({ | CODE |
| LOW | docs/patterns/factory-function-pattern.md | 138 | export function createAssistantPasswordUtils({ | CODE |
| LOW | docs/articles/tokens-dont-belong-in-urls.md | 30 | function withBearerFromSubprotocol(original: Headers): Headers { | CODE |
| LOW | …-tauri-is-both-the-namespace-and-the-platform-check.md | 183 | export function syncIconWithRecorderState() { | CODE |
| LOW | …-tauri-is-both-the-namespace-and-the-platform-check.md | 209 | export function syncIconWithRecorderState(tauri: Tauri) { | CODE |
| LOW | …ctory-return-types-should-point-back-to-the-factory.md | 101 | export function createPlaintextMachineCredentialSecretStorage(): MachineCredentialSecretStorage { | CODE |
| LOW | …ctory-return-types-should-point-back-to-the-factory.md | 105 | export function createKeychainMachineCredentialSecretStorage(): MachineCredentialSecretStorage { | CODE |
| LOW | docs/articles/date-with-timezone-implementation.md | 112 | function normalizeToDateTimeWithTimezone( | CODE |
| LOW | …s/articles/svelte-function-bindings-readonly-stores.md | 92 | function rebuildOutputOptionsFromSelections() { | CODE |
| LOW | docs/articles/two-schema-libraries-on-purpose.md | 79 | export function standardSchemaToJsonSchema( | CODE |
| LOW | …163000-blob-store-factory-zoom-in-on-what-is-shared.md | 71 | function createFileSystemBlobStore(basePath: string): BlobStore { | CODE |
| LOW | docs/articles/sync-client-initialization.md | 432 | export function createIndexedDBPersistence({ ydoc, id }) { | CODE |
| LOW | …les/parameter-destructuring-over-body-destructuring.md | 91 | export function createDeepgramTranscriptionService({ | CODE |
| LOW | …rchitecture/dependency-injection-async-sync-pattern.md | 17 | function hasLocalTranscriptionCompatibilityIssue(): boolean { | CODE |
| LOW | …rchitecture/dependency-injection-async-sync-pattern.md | 85 | export function hasLocalTranscriptionCompatibilityIssue({ | CODE |
| LOW | …-layout/2026-07-21-bun-native-full-schema-v3.source.ts | 677 | function configureReopenedDatabase(database: Database): void { | CODE |
| LOW | packages/ui/upstream/shadcn-svelte/vega/chart.json | 25 | "content": "import { getContext, setContext, type Component, type Snippet } from \"svelte\";\nimport type { Tooltip } | CODE |
| LOW | …s/ui/upstream/shadcn-svelte-extras/file-drop-zone.json | 38 | "content": "import type { ReadableBoxedValues } from 'svelte-toolbelt';\nimport type { FileRejectedReason } from './t | CODE |
| LOW | packages/ui/src/chart/chart-utils.ts | 21 | export function getPayloadConfigFromPayload( | CODE |
| LOW | packages/ui/src/emoji-picker/emoji-picker.svelte.ts | 237 | export function useEmojiPickerSkinToneSelector(props: EmojiPickerSkinProps) { | CODE |
| LOW | packages/svelte/src/persisted-state.svelte.ts | 172 | function setAndPersist(nextValue: StandardSchemaV1.InferOutput<TSchema>) { | CODE |
| LOW | packages/app/evidence/data/retention.test.ts | 72 | function everythingSentToANewDevice(held: SyncAuthority): string { | CODE |
| LOW | packages/app/evidence/data/validation.test.ts | 70 | function acceptsByThrowawayDocument(bytes: Uint8Array): boolean { | CODE |
| LOW | packages/app/scripts/runtime-transcriber-fixture.ts | 5 | export async function createRuntimeTranscriberFixture({ | CODE |
| LOW | packages/app/src/ai-connections.epicenter-host.ts | 56 | export function createDesktopAiConnections({ | CODE |
| LOW | packages/app/src/clipboard.browser.test.ts | 12 | function installNavigatorClipboard(text: { value: string }) { | CODE |
| LOW | packages/app/src/ai-connections.ts | 55 | export function validateAiConnectionRecords( | CODE |
| LOW | packages/app/src/inference.ts | 8 | export function validateInferenceDestination(value: string) { | CODE |
| LOW | packages/app/src/connection-catalog.ts | 164 | export async function openLocalConnectionCatalog() { | CODE |
| LOW | packages/app/src/connection-catalog.ts | 169 | export async function openAccountConnectionCatalog({ | CODE |
| LOW | packages/app/src/data/store/persistence.ts | 180 | export function createPersistenceController({ | CODE |
| LOW | packages/auth/src/browser-redirect-auth.ts | 20 | export function createBrowserRedirectAuth({ | CODE |
| 44 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| CRITICAL | specs/20260720T002337-epicenter-data-clean-break.md | 167 | await data.whispering.tables.recordings.blob.put(recording.id, audioSource); | CODE |
| CRITICAL | specs/20260720T002337-epicenter-data-clean-break.md | 168 | const audio = await data.whispering.tables.recordings.blob.open(recording.id); | CODE |
| CRITICAL | …t-capabilities-and-evolve-outside-records-databases.md | 92 | using target = workspace.tables.notes.docs.body.open(noteId); | CODE |
| CRITICAL | …one-flat-application-declaration-opens-the-live-app.md | 57 | app.account.personal.tables.notes.create({ title: 'Meeting', body: '' }); | CODE |
| CRITICAL | …adr/0005-child-docs-are-bound-through-the-workspace.md | 20 | and reached through a bound accessor, `ws.tables.X.docs.field.open(rowId)`. The | CODE |
| CRITICAL | packages/app/src/data/sync/connection.test.ts | 790 | expect(driver.store.tables.notes.rows.map((row) => row.title)).toEqual([ | CODE |
| CRITICAL | packages/app/src/data/store/sync.test.ts | 58 | return replica.db.tables.notes.rows.map((row) => row.title).sort(); | CODE |
| CRITICAL | …ring/src/routes/components/TransformationDetail.svelte | 81 | ].sort((a, b) => b.entry.row.fields.createdAt.localeCompare(a.entry.row.fields.createdAt)), | CODE |
| CRITICAL | …ring/src/routes/components/TransformationOutput.svelte | 60 | <span class="min-w-0 flex-1 truncate text-muted-foreground" title={output.entry.row.fields.input}>{output.entry.row.f | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | apps/todos/scripts/native.ts | 59 | print({ error: openedError.message }); | CODE |
| HIGH | apps/todos/scripts/native.ts | 102 | print({ | CODE |
| HIGH | apps/todos/scripts/native.ts | 112 | print(await summary()); | CODE |
| HIGH | apps/todos/scripts/native.ts | 123 | print({ created }); | CODE |
| HIGH | apps/todos/scripts/native.ts | 126 | print({ | CODE |
| HIGH⚡ | apps/todos/scripts/native.ts | 140 | print({ error: readError?.message ?? `No todo named ${stem}` }); | CODE |
| HIGH⚡ | apps/todos/scripts/native.ts | 150 | print({ error: updatedError.message }); | CODE |
| HIGH⚡ | apps/todos/scripts/native.ts | 153 | print({ | CODE |
| HIGH⚡ | apps/todos/scripts/native.ts | 160 | print(await folder.git.commitAndPush()); | CODE |
| HIGH⚡ | apps/todos/scripts/native.ts | 163 | print(await folder.git.fetch()); | CODE |
| HIGH | apps/todos/scripts/native.ts | 174 | print({ fetched, pulled }); | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | …cs/20260526T220000-tauri-specta-on-artifact-id-base.md | 282 | ### Wave 7 (Remove): Cleanup and guardrails | COMMENT |
| MEDIUM | specs/20260425T180002-orchestration-tracker.md | 1 | # Document-primitive rollout: orchestration tracker | COMMENT |
| MEDIUM | …0710T115550-epicenter-v8-desktop-release-transition.md | 122 | ### Phase 5: Retire transition scaffolding | COMMENT |
| MEDIUM | specs/20260514T220000-self-host-first-class.md | 702 | ### Wave 1: Adapter scaffolding (no behavior change) | COMMENT |
| MEDIUM | .agents/skills/pull-request/references/examples.md | 5 | ## A small fix needs little scaffolding | COMMENT |
| MEDIUM | …gents/skills/collapse-pass/references/smell-catalog.md | 23 | ### Single-method dependency injection | COMMENT |
| MEDIUM | …h-a-dictionary-polish-and-a-portable-recipe-library.md | 79 | #### The Polish scaffold wraps the user instruction | COMMENT |
| MEDIUM | docs/articles/how-createsubscriber-works.md | 122 | No `$state` anywhere. The value (`this.#query.matches`) is read directly from the browser API on every access. `createSu | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | specs/20251113T000000-workspace-exports-pattern.md | 69 | client.workspaces.users.validateEmail("test@test.com") // Utility | CODE |
| LOW | specs/20260304T120000-hub-sidecar-architecture.md | 1236 | -d '{"email": "admin@example.com", "password": "...", "name": "Admin"}' | CODE |
| LOW | specs/20260224T141400-conversation-handle-refactor.md | 254 | - Options: (a) `active` returns `ConversationHandle | undefined` (caller must null-check), (b) Create a "placeholder" | CODE |
| LOW | …es/bearer-tokens-are-cookies-without-the-cookie-jar.md | 29 | email: "user@example.com", | CODE |
| LOW | docs/articles/proxies-vs-object-define-property.md | 21 | console.log(user.fullName); // "Jane Doe" | CODE |
| LOW | docs/articles/yjs-storage-efficiency/benchmark.ts | 104 | 'Lorem ipsum dolor sit amet consectetur adipiscing elit sed do eiusmod tempor incididunt ut labore et dolore magna ali | CODE |
| LOW | docs/articles/yjs-storage-efficiency/benchmark.ts | 104 | 'Lorem ipsum dolor sit amet consectetur adipiscing elit sed do eiusmod tempor incididunt ut labore et dolore magna ali | CODE |
| LOW | packages/app/evidence/data/bench/fold-gate.ts | 14 | content.insert(0, 'lorem ipsum dolor sit amet '.repeat(words / 5)); | CODE |
| LOW | packages/app/evidence/data/bench/fold-gate.ts | 14 | content.insert(0, 'lorem ipsum dolor sit amet '.repeat(words / 5)); | CODE |
| LOW | packages/app/evidence/data/browser/port-cost/main.ts | 54 | 'lorem ipsum dolor sit amet consectetur '.repeat(words / 6), | CODE |
| LOW | packages/app/evidence/data/browser/port-cost/main.ts | 54 | 'lorem ipsum dolor sit amet consectetur '.repeat(words / 6), | CODE |
| LOW | apps/local-mail/ui/src/lib/format.ts | 45 | /** Strip the address, keep the display name: "Jane Doe <j@x.com>" -> "Jane Doe". */ | COMMENT |
| LOW | apps/local-books/src/commands/demo.ts | 130 | const acme = { value: '1', name: 'Acme Corp' }; | CODE |
| LOW | apps/local-books/src/commands/demo.ts | 153 | customer('1', 'Acme Corp', 12000), | CODE |
| LOW | apps/api/worker/billing/policies.test.ts | 126 | email: 'user@example.com', | CODE |
| LOW | apps/api/worker/billing/policies.test.ts | 138 | principalEmail: 'user@example.com', | CODE |
| LOW | apps/api/worker/billing/policies.test.ts | 175 | email: 'user@example.com', | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM⚡ | apps/epicenter/bench/backend-latency/Cargo.toml | 29 | # The harness reports `transcribe_cpp_compiled` next to `transcribe_cpp_runtime` | COMMENT |
| MEDIUM⚡ | apps/epicenter/bench/backend-latency/Cargo.toml | 35 | # up by accident is the failure mode this whole harness exists to prevent. | COMMENT |
| MEDIUM⚡ | apps/epicenter/bench/backend-latency/Cargo.toml | 42 | # the harness records opt-level so a debug run is visible in the output. | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | apps/honeycrisp/src-tauri/examples/quit/main.rs | 405 | // Step 2: the first quit is declined. | COMMENT |
| LOW | apps/honeycrisp/src-tauri/examples/quit/main.rs | 441 | // Step 3: a batch the owner is writing, then the second quit. | COMMENT |
| LOW | apps/whispering/src-tauri/examples/quit/main.rs | 617 | // Step 2: the first quit is declined. | COMMENT |
| LOW | apps/whispering/src-tauri/examples/quit/main.rs | 648 | // Step 3: a batch the owner is writing, then the second quit. | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | specs/20260311T224500-changelog-release-strategy.md | 239 | - [OpenCode v1.2.24 release](https://github.com/anomalyco/opencode/releases/tag/v1.2.24): Example of AI-generated releas | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | .agents/skills/diagnose/scripts/hitl-loop.template.sh | 6 | # Usage: | COMMENT |