EmDash is a full-stack TypeScript CMS based on Astro; the spiritual successor to WordPress
This report summarizes scanner evidence for emdash-cms/emdash, a TypeScript project with 14,074 GitHub stars. SynthScan examined 1,293,013 lines of code across 4436 source files, recording 2016 pattern matches distributed across 10 syntactic categories. The legacy adjusted pattern signal is 2.4 (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? 1337 finding(s).
Are imports declared and package/API names verified? 233 finding(s).
Are wrappers, guards, and repeated structures necessary? 1510 finding(s).
Which changes need focused human review? 2016 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 2016 distinct pattern matches across 10 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 | infra/perf-monitor/worker-configuration.d.ts | 10185 | // ── Error types ────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | infra/perf-monitor/worker-configuration.d.ts | 10206 | // ── Binding ────────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | infra/discord-bot/src/index.ts | 41 | // ─── Discord Interaction Handler ───────────────────────────────── | COMMENT |
| MEDIUM | infra/discord-bot/src/index.ts | 153 | // ─── GitHub OAuth Callback ─────────────────────────────────────── | COMMENT |
| MEDIUM | infra/discord-bot/src/index.ts | 235 | // ─── GitHub Webhook Handler ────────────────────────────────────── | COMMENT |
| MEDIUM | infra/discord-bot/src/index.ts | 345 | // ─── Message Templates ─────────────────────────────────────────── | COMMENT |
| MEDIUM | infra/discord-bot/src/index.ts | 379 | // ─── Helpers ───────────────────────────────────────────────────── | COMMENT |
| MEDIUM | infra/flue-review/worker-configuration.d.ts | 10587 | // ── Error types ────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | infra/flue-review/worker-configuration.d.ts | 10608 | // ── Binding ────────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | packages/blocks/playground/src/templates.ts | 9 | // ── Sample data generators ─────────────────────────────────────────────────── | COMMENT |
| MEDIUM | packages/blocks/playground/src/Playground.tsx | 10 | // ── Types ──────────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | packages/blocks/playground/src/Playground.tsx | 31 | // ── Hash sharing ───────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | packages/blocks/playground/src/Playground.tsx | 55 | // ── Drag handle ────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | packages/blocks/playground/src/Playground.tsx | 75 | // ── Component ──────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | packages/blocks/tests/form-conditions.test.tsx | 8 | // ── Mocks ──────────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | packages/blocks/tests/form-conditions.test.tsx | 198 | // ── Helpers ────────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | packages/blocks/tests/form-conditions.test.tsx | 208 | // ── Tests ──────────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | packages/blocks/tests/renderer.test.tsx | 8 | // ── Mocks ──────────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | packages/blocks/tests/renderer.test.tsx | 295 | // ── Helpers ────────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | packages/blocks/tests/renderer.test.tsx | 311 | // ── Tests ──────────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | packages/blocks/tests/validation.test.ts | 20 | // ── Valid blocks ───────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | packages/blocks/tests/validation.test.ts | 260 | // ── Invalid blocks ─────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | packages/blocks/tests/validation.test.ts | 822 | // ── Edge cases ─────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | packages/blocks/src/types.ts | 1 | // ── Composition Objects ────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | packages/blocks/src/types.ts | 11 | // ── Elements ───────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | packages/blocks/src/types.ts | 194 | // ── Form Fields (elements + optional condition) ────────────────────────────── | COMMENT |
| MEDIUM | packages/blocks/src/types.ts | 215 | // ── Block Sub-types ────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | packages/blocks/src/types.ts | 273 | // ── Blocks ─────────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | packages/blocks/src/types.ts | 415 | // ── Interactions ───────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | packages/blocks/src/types.ts | 520 | // ── Response ───────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | packages/blocks/src/builders.ts | 46 | // ── Block Builders ─────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | packages/blocks/src/builders.ts | 175 | // ── Element Builders ───────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | packages/blocks/src/builders.ts | 532 | // ── Exports ────────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | packages/blocks/src/blocks/chart.tsx | 27 | // ── Security: HTML-escape untrusted strings before they reach ECharts ──────── | COMMENT |
| MEDIUM | packages/blocks/src/blocks/chart.tsx | 46 | // ── Security: Sanitize custom ECharts options ──────────────────────────────── | COMMENT |
| MEDIUM | packages/atproto-test-utils/tests/round-trip.test.ts | 421 | // ── helpers ──────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | packages/atproto-test-utils/src/mock-pds.ts | 124 | // ─── handlers ──────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | packages/atproto-test-utils/src/mock-pds.ts | 277 | // ─── helpers ───────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | …es/core/tests/unit/plugins/adapt-sandbox-entry.test.ts | 648 | // ── Deprecation alias layer ──────────────────────────────── | COMMENT |
| MEDIUM | …ges/core/tests/unit/plugins/marketplace-client.test.ts | 26 | // ── Helpers ───────────���──────────────────────────────────────────── | COMMENT |
| MEDIUM | packages/core/tests/unit/plugins/define-plugin.test.ts | 329 | // ── Deprecation alias layer ──────────────────────────────── | COMMENT |
| MEDIUM | …es/core/tests/unit/api/registry-artifact-proxy.test.ts | 178 | // ── auth ─────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | …es/core/tests/unit/api/registry-artifact-proxy.test.ts | 190 | // ── param validation ─────────────────────────────────────────────── | COMMENT |
| MEDIUM | …es/core/tests/unit/api/registry-artifact-proxy.test.ts | 269 | // ── config ───────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | …es/core/tests/unit/api/registry-artifact-proxy.test.ts | 282 | // ── resolution → declared source is proxied ──────────────────────── | COMMENT |
| MEDIUM | …es/core/tests/unit/api/registry-artifact-proxy.test.ts | 476 | // ── 404s ─────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | …es/core/tests/unit/api/registry-artifact-proxy.test.ts | 538 | // ── content-type allowlist ───────────────────────────────────────── | COMMENT |
| MEDIUM | …es/core/tests/unit/api/registry-artifact-proxy.test.ts | 585 | // ── SSRF on the RESOLVED url ──────────────────────────────────────── | COMMENT |
| MEDIUM | …es/core/tests/unit/api/registry-artifact-proxy.test.ts | 637 | // ── upstream + size ───────────────────────────────────────────────── | COMMENT |
| MEDIUM | …kages/core/tests/unit/api/marketplace-handlers.test.ts | 47 | // ── Mock factories ──────────────────────────────────────────────── | COMMENT |
| MEDIUM | …kages/core/tests/unit/api/marketplace-handlers.test.ts | 348 | // ── Install ──────────────────────────────────────────────────── | COMMENT |
| MEDIUM | …kages/core/tests/unit/api/marketplace-handlers.test.ts | 640 | // ── Update ───────────────────────────────────────────────────── | COMMENT |
| MEDIUM | …kages/core/tests/unit/api/marketplace-handlers.test.ts | 1227 | // ── Uninstall ────────────────────────────────────────────────── | COMMENT |
| MEDIUM | …kages/core/tests/unit/api/marketplace-handlers.test.ts | 1387 | // ── Update check ─────────────────────────────────────────────── | COMMENT |
| MEDIUM | …kages/core/tests/unit/api/marketplace-handlers.test.ts | 1469 | // ── Search proxy ─────────────────────────────────────────────── | COMMENT |
| MEDIUM | …kages/core/tests/unit/api/marketplace-handlers.test.ts | 1489 | // ── GetPlugin proxy ──────────────────────────────────────────── | COMMENT |
| MEDIUM | packages/core/tests/unit/api/backup-handlers.test.ts | 30 | // ── Storage fake ──────────────────────────────────────────────── | COMMENT |
| MEDIUM | packages/core/tests/unit/api/backup-handlers.test.ts | 92 | // ── Tests ─────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | packages/core/tests/unit/api/registry-handlers.test.ts | 38 | // ── Mock storage ───────────────────────────────────────────────── | COMMENT |
| MEDIUM | packages/core/tests/unit/api/registry-handlers.test.ts | 93 | // ── Suite ──────────────────────────────────────────────────────── | COMMENT |
| 386 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | infra/discord-bot/src/contributor-invitation.ts | 54 | function contributorInvitationComment(discordInviteUrl: string): string { | CODE |
| LOW | infra/discord-bot/src/discord.ts | 239 | export function interactionResponseWithButton( | CODE |
| LOW | infra/discord-bot/src/index.ts | 338 | export function shouldAnnounceUnlinkedMerge(inviteResult: InviteResult, prNumber: number): boolean { | CODE |
| LOW | infra/flue-review/.flue/sandboxes/cloudflare-shell.ts | 77 | function createWorkspaceSessionEnv( | CODE |
| LOW | infra/flue-review/.flue/lib/diff-budget.ts | 70 | function isCompiledReleaseActionSection(section: Section): boolean { | CODE |
| LOW | infra/flue-review/.flue/lib/diff-budget.ts | 76 | function isGeneratedWorkerTypesSection(section: Section): boolean { | CODE |
| LOW | infra/flue-review/.flue/lib/github.ts | 794 | export async function classifyPullRequestHeadMove( | CODE |
| LOW | infra/flue-review/.flue/lib/github.ts | 1024 | async function fetchNewestReviewComments( | CODE |
| LOW | infra/flue-review/.flue/lib/code-tool-output-budget.ts | 5 | export function assertCodeToolOutputWithinBudget( | CODE |
| LOW | infra/flue-review/.flue/lib/review-failure.ts | 20 | export function formatReviewFailureSummary(stage: ReviewStage, error: unknown): string { | CODE |
| LOW | infra/flue-review/.flue/lib/ai-payload-budget.ts | 74 | function compactionRequiredResponse(modelId: string): Response { | CODE |
| LOW | infra/flue-review/eval/run.ts | 217 | function assertNoGitHubCredentials(): void { | CODE |
| LOW | packages/blocks/src/validation.ts | 106 | function validateInitialValueInOptions( | CODE |
| LOW | packages/blocks/src/validation.ts | 1765 | export function validateContentEditorActionResponse( | CODE |
| LOW | packages/blocks/src/validation.ts | 1793 | export function validateEditorDraftPatchEffect(effect: unknown): { | CODE |
| LOW | packages/blocks/src/validation.ts | 1861 | function validateEditorTerminalEffects( | CODE |
| LOW | packages/blocks/src/validation.ts | 1888 | export function validateContentEditorPanelInteraction(interaction: unknown): { | CODE |
| LOW | packages/blocks/src/elements/number-input.tsx | 7 | export function NumberInputElementComponent({ | CODE |
| LOW | packages/blocks/src/elements/text-input.tsx | 7 | export function TextInputElementComponent({ | CODE |
| LOW | packages/blocks/src/elements/secret-input.tsx | 7 | export function SecretInputElementComponent({ | CODE |
| LOW | packages/blocks/src/elements/date-input.tsx | 6 | export function DateInputElementComponent({ | CODE |
| LOW | packages/atproto-test-utils/src/fake-publisher.ts | 148 | export function createFakePublisherFixture( | CODE |
| LOW | …ges/registry-verification/tests/provenance-contract.ts | 575 | function reusableCertificateIdentity(overrides: Record<number, string> = {}) { | CODE |
| LOW | packages/registry-verification/src/repository.ts | 4 | export function canonicalizeRepositoryUrl(value: string): string | null { | CODE |
| LOW | packages/registry-verification/src/records-entry.ts | 20 | export function verifyPackageReleaseRecords( | CODE |
| LOW | packages/registry-verification/src/records-default.ts | 9 | export function verifyPackageReleaseRecords( | CODE |
| LOW | packages/registry-verification/src/records.ts | 122 | export async function inspectPackageReleaseRecords( | CODE |
| LOW | packages/registry-verification/src/records.ts | 241 | async function verifyPackageReleaseRecordsInternal( | CODE |
| LOW | packages/registry-verification/src/records.ts | 339 | export function verifyPackageReleaseRecordsWithVerifier( | CODE |
| LOW | packages/registry-verification/src/records.ts | 345 | export function verifyPackageReleaseRecordsWithDefaultVerifier( | CODE |
| LOW | packages/registry-verification/src/records.ts | 371 | function isComparablePluginVersion(value: string): boolean { | CODE |
| LOW | packages/registry-verification/src/artifact.ts | 182 | export function recordScopedImageCacheUrl( | CODE |
| LOW | packages/registry-verification/src/artifact.ts | 195 | export async function resolvePublisherPdsEndpoint( | CODE |
| LOW | packages/registry-verification/src/artifact.ts | 361 | function recordScopedCacheEndpoint(value: unknown): string | null { | CODE |
| LOW | packages/registry-verification/src/checksum.ts | 92 | export async function computeArtifactDigestCandidates( | CODE |
| LOW | packages/core/tests/unit/object-cache-content.test.ts | 56 | function backendWithOldContentValue(value: unknown): ObjectCacheBackend { | CODE |
| LOW | packages/core/tests/unit/comments/turnstile.test.ts | 9 | async function bundledGetTurnstileSecretKey(): Promise<() => string> { | CODE |
| LOW | packages/core/tests/unit/auth/oauth-start-route.test.ts | 17 | function makeThrowingRuntimeLocals() { | CODE |
| LOW | …ages/core/tests/unit/auth/oauth-callback-route.test.ts | 15 | function makeThrowingRuntimeLocals() { | CODE |
| LOW | …nit/plugins/publication-policy-effective-draft.test.ts | 103 | async function publishedWithPendingDraft() { | CODE |
| LOW | …ckages/core/tests/unit/plugins/exclusive-hooks.test.ts | 974 | function createSelectCountingPlugin(): { plugin: KyselyPlugin; counter: { count: number } } { | CODE |
| LOW | packages/core/tests/unit/plugins/redirect-types.test.ts | 5 | async function updateRedirectFromDocumentedContext( | CODE |
| LOW | …/tests/unit/converters/custom-block-round-trip.test.ts | 13 | function portableTextToIdentityDocument(blocks: PortableTextBlock[]) { | CODE |
| LOW | …t/components/inline-portable-text-media-picker.test.ts | 307 | function makeToolbarControlsVisible(toolbar: HTMLElement) { | CODE |
| LOW | …sts/unit/components/inline-portable-text-menus.test.ts | 149 | function makeToolbarControlsVisible(toolbar: HTMLElement) { | CODE |
| LOW | packages/core/tests/unit/menus/menus.test.ts | 420 | async function insertMenuWithCollectionItem(item: { | CODE |
| LOW | packages/core/tests/unit/astro/routes.test.ts | 76 | function collectRoutePatternsWithEntrypoints(srcDir?: URL): Array<{ | CODE |
| LOW | …e/tests/unit/astro/middleware-security-headers.test.ts | 137 | function anonymousPublicPageContext() { | CODE |
| LOW | …ests/unit/astro/middleware-redirect-wait-until.test.ts | 76 | async function requestAndExpectInvocationHeldOpen(pathname: string, write: { open: () => void }) { | CODE |
| LOW | …re/tests/unit/astro/middleware-cache-validator.test.ts | 116 | function anonymousPublicPageContext(cache: TestCache) { | CODE |
| LOW | …ges/core/tests/unit/astro/middleware-prerender.test.ts | 272 | function createAnonymousPublicPageContext(locals: Record<string, unknown> = {}) { | CODE |
| LOW | …ges/core/tests/unit/astro/middleware-prerender.test.ts | 971 | function anonymousCategoryPageContext() { | CODE |
| LOW | packages/core/tests/unit/import/wxr-taxonomies.test.ts | 41 | function createAssignmentReadCountingPlugin(): { | CODE |
| LOW | packages/core/tests/unit/import/wxr-taxonomies.test.ts | 69 | async function createPostsCollectionWithEntry( | CODE |
| LOW | …core/tests/unit/import/wordpress-plugin-source.test.ts | 58 | function expectUserAgentOnAllCalls() { | CODE |
| LOW | packages/core/tests/unit/client/client.test.ts | 70 | function mediaUsageRepairCollection( | CODE |
| LOW | packages/core/tests/workerd/migrations-d1.test.ts | 396 | async function seedCollectionAfterRegistry(): Promise<string[]> { | CODE |
| LOW | packages/core/tests/workerd/revision-restore-d1.test.ts | 240 | function withCumulativeBatchChanges(database: D1Database): D1Database { | CODE |
| LOW | …/core/tests/workerd/webhook-notifier-plugin-d1.test.ts | 32 | function loadWebhookNotifierPlugin(): ResolvedPlugin { | CODE |
| LOW | …/core/tests/integration/smoke/isolated-install.test.ts | 91 | function discoverWorkspacePackages(): Map<string, WorkspacePackage> { | CODE |
| 1004 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | packages/blocks/src/validation.ts | 602 | message: "Field 'placeholder' must be a string", | CODE |
| LOW | packages/blocks/src/validation.ts | 707 | message: "Field 'placeholder' must be a string", | CODE |
| LOW | packages/blocks/src/validation.ts | 828 | message: "Field 'placeholder' must be a string", | CODE |
| LOW | packages/blocks/src/validation.ts | 876 | message: "Field 'placeholder' must be a string", | CODE |
| LOW | packages/blocks/src/validation.ts | 995 | message: "Field 'placeholder' must be a string", | CODE |
| LOW | …s/core/tests/unit/database/repositories/byline.test.ts | 36 | displayName: "Jane Doe", | CODE |
| LOW | …s/core/tests/unit/database/repositories/byline.test.ts | 41 | expect(created.displayName).toBe("Jane Doe"); | CODE |
| LOW | …s/core/tests/unit/database/repositories/byline.test.ts | 437 | displayName: "Jane Doe", | CODE |
| LOW | …s/core/tests/unit/database/repositories/byline.test.ts | 447 | displayName: "Jane Doe", | CODE |
| LOW | …s/core/tests/unit/database/repositories/byline.test.ts | 476 | displayName: "Jane Doe", | CODE |
| LOW | …s/core/tests/unit/database/repositories/byline.test.ts | 493 | displayName: "Jane Doe", | CODE |
| LOW | …s/core/tests/unit/database/repositories/byline.test.ts | 507 | expect(enHit?.displayName).toBe("Jane Doe"); | CODE |
| LOW | …s/core/tests/unit/database/repositories/byline.test.ts | 545 | displayName: "Jane Doe", | CODE |
| LOW | …s/core/tests/unit/database/repositories/byline.test.ts | 573 | displayName: "Jane Doe", | CODE |
| LOW | …s/core/tests/unit/database/repositories/byline.test.ts | 604 | displayName: "Jane Doe", | CODE |
| LOW | …s/core/tests/unit/database/repositories/byline.test.ts | 629 | displayName: "Jane Doe", | CODE |
| LOW | …s/core/tests/unit/database/repositories/byline.test.ts | 650 | expect(enCredits[0]?.byline.displayName).toBe("Jane Doe"); | CODE |
| LOW | …s/core/tests/unit/database/repositories/byline.test.ts | 658 | displayName: "Jane Doe", | CODE |
| LOW | …s/core/tests/unit/database/repositories/byline.test.ts | 688 | displayName: "Jane Doe", | CODE |
| LOW | …s/core/tests/unit/database/repositories/byline.test.ts | 714 | displayName: "Jane Doe", | CODE |
| LOW | …s/core/tests/unit/database/repositories/byline.test.ts | 741 | expect(enResult.get(enPost.id)?.[0]?.byline.displayName).toBe("Jane Doe"); | CODE |
| LOW | …s/core/tests/unit/database/repositories/byline.test.ts | 742 | expect(enResult.get(frPost.id)?.[0]?.byline.displayName).toBe("Jane Doe"); | CODE |
| LOW | …s/core/tests/unit/database/repositories/byline.test.ts | 754 | displayName: "Jane Doe", | CODE |
| LOW | …s/core/tests/unit/database/repositories/byline.test.ts | 817 | displayName: "Jane Doe", | CODE |
| LOW | …s/core/tests/unit/database/repositories/byline.test.ts | 884 | displayName: "Jane Doe", | CODE |
| LOW | …s/core/tests/unit/database/repositories/byline.test.ts | 915 | displayName: "Jane Doe", | CODE |
| LOW | …s/core/tests/unit/database/repositories/byline.test.ts | 947 | displayName: "Jane Doe", | CODE |
| LOW | …s/core/tests/unit/database/repositories/byline.test.ts | 978 | displayName: "Jane Doe", | CODE |
| LOW | …s/core/tests/unit/database/repositories/byline.test.ts | 1025 | displayName: "Jane Doe", | CODE |
| LOW | …s/core/tests/unit/database/repositories/byline.test.ts | 2110 | await bylineRepo.update(byline.id, { displayName: "Jane Doe" }); | CODE |
| LOW | …s/core/tests/unit/database/repositories/byline.test.ts | 2113 | expect(reloaded?.displayName).toBe("Jane Doe"); | CODE |
| LOW | …/tests/unit/auth/invite-register-options-route.test.ts | 41 | email: "admin@example.com", | CODE |
| LOW | packages/core/tests/unit/auth/oauth-invite.test.ts | 32 | email: "admin@example.com", | CODE |
| LOW | …es/core/tests/unit/auth/sign-in-handover-route.test.ts | 20 | email: "admin@example.com", | CODE |
| LOW | packages/core/tests/unit/auth/invite.test.ts | 35 | email: "admin@example.com", | CODE |
| LOW | …core/tests/unit/auth/invite-route-localization.test.ts | 29 | email: "admin@example.com", | CODE |
| LOW | packages/core/tests/unit/plugins/email-pipeline.test.ts | 82 | to: "user@example.com", | CODE |
| LOW | packages/core/tests/unit/plugins/email-pipeline.test.ts | 555 | emailPipeline.send(createTestMessage({ to: "admin@example.com" }), "system"), | CODE |
| LOW | packages/core/tests/unit/plugins/email-pipeline.test.ts | 563 | expect.stringContaining("admin@example.com"), | CODE |
| LOW | packages/core/tests/unit/plugins/email-pipeline.test.ts | 1227 | to: "admin@example.com", | CODE |
| LOW | packages/core/tests/unit/plugins/email-pipeline.test.ts | 1240 | to: "admin@example.com", | CODE |
| LOW | packages/core/tests/unit/plugins/email-pipeline.test.ts | 1272 | await emailPipeline.send(createTestMessage({ to: "admin@example.com" }), "system"); | CODE |
| LOW | packages/core/tests/unit/plugins/email-pipeline.test.ts | 1378 | await emailPipeline.send(createTestMessage({ to: "user@example.com" }), "some-plugin"); | CODE |
| LOW | packages/core/tests/unit/plugins/email-pipeline.test.ts | 1381 | expect(infoSpy).toHaveBeenCalledWith(expect.stringContaining("user@example.com")); | CODE |
| LOW | packages/core/tests/unit/cli/wxr-parser.test.ts | 211 | expect(result.authors[0]?.email).toBe("admin@example.com"); | CODE |
| LOW | …ckages/core/tests/unit/api/domain-notify-route.test.ts | 21 | email: "admin@example.com", | CODE |
| LOW | packages/core/tests/unit/api/content-handlers.test.ts | 76 | data: { name: "John Doe", title: "Trustee" }, | CODE |
| LOW | packages/core/tests/unit/api/content-handlers.test.ts | 563 | displayName: "Jane Doe", | CODE |
| LOW | packages/core/tests/unit/api/content-handlers.test.ts | 596 | displayName: "Jane Doe", | CODE |
| LOW | packages/core/tests/unit/api/content-handlers.test.ts | 664 | displayName: "Jane Doe", | CODE |
| LOW | packages/core/tests/unit/api/content-handlers.test.ts | 813 | displayName: "Jane Doe", | CODE |
| LOW | …unit/api/media-usage-collection-deletion-route.test.ts | 44 | user: { id: "user-1", email: "admin@example.com", name: "Admin", role }, | CODE |
| LOW | packages/core/tests/unit/api/handlers/bylines.test.ts | 31 | displayName: "Jane Doe", | CODE |
| LOW | packages/core/tests/unit/api/handlers/bylines.test.ts | 72 | displayName: "Jane Doe", | CODE |
| LOW | packages/core/tests/unit/api/handlers/bylines.test.ts | 100 | displayName: "Jane Doe", | CODE |
| LOW | packages/core/tests/unit/api/handlers/bylines.test.ts | 165 | displayName: "Jane Doe", | CODE |
| LOW | packages/core/tests/unit/api/handlers/bylines.test.ts | 195 | displayName: "Jane Doe", | CODE |
| LOW | packages/core/tests/unit/api/handlers/bylines.test.ts | 224 | displayName: "Jane Doe", | CODE |
| LOW | packages/core/tests/unit/bylines/bylines-query.test.ts | 46 | displayName: "Jane Doe", | CODE |
| LOW | packages/core/tests/unit/bylines/bylines-query.test.ts | 53 | expect(result?.displayName).toBe("Jane Doe"); | CODE |
| 170 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | infra/perf-monitor/worker-configuration.d.ts | 11961 | // PubSubMessage represents an incoming PubSub message. | COMMENT |
| LOW | infra/perf-monitor/worker-configuration.d.ts | 12081 | // Note `unknown & T` is equivalent to `T`. | COMMENT |
| LOW | infra/perf-monitor/worker-configuration.d.ts | 12101 | type MaybeCallableProvider<T> = T extends (...args: any[]) => any ? MethodOrProperty<T> : unknown; | COMMENT |
| LOW | infra/perf-monitor/worker-configuration.d.ts | 12121 | // declaration will be merged with this one. | COMMENT |
| LOW | infra/perf-monitor/worker-configuration.d.ts | 13201 | } | COMMENT |
| LOW | infra/discord-bot/worker-configuration.d.ts | 13041 | readonly mid: number; | COMMENT |
| LOW | infra/discord-bot/worker-configuration.d.ts | 13181 | // Utility type for adding `Provider`/`Disposable`s to `object` types only. | COMMENT |
| LOW | infra/discord-bot/worker-configuration.d.ts | 13221 | // | COMMENT |
| LOW | infra/discord-bot/worker-configuration.d.ts | 13241 | // durableNamespaces: "MyDurableObject" | "AnotherDurableObject"; | COMMENT |
| LOW | infra/discord-bot/worker-configuration.d.ts | 14401 | | Attributes; | COMMENT |
| LOW | infra/flue-review/worker-configuration.d.ts | 10341 | // WebSocket | COMMENT |
| LOW | infra/flue-review/worker-configuration.d.ts | 13201 | // auth was used. | COMMENT |
| LOW | infra/flue-review/worker-configuration.d.ts | 13261 | // Types that can be used through `Stub`s | COMMENT |
| LOW | infra/flue-review/worker-configuration.d.ts | 13301 | [K in keyof T]: Unstubify<T[K]>; | COMMENT |
| LOW | infra/flue-review/worker-configuration.d.ts | 13321 | // Unwrapping `Stub`s allows calling with `Stubable` arguments. | COMMENT |
| LOW | infra/flue-review/worker-configuration.d.ts | 13341 | // You can use `wrangler types` to generate the `Env` type automatically. | COMMENT |
| LOW | infra/flue-review/.flue/workflows/review.ts | 1 | // Review workflow (Cloudflare target) -- cf-shell (Cloudflare Shell) variant. | COMMENT |
| LOW | infra/flue-review/.flue/lib/capacity.ts | 1 | // Graceful handling for model capacity errors (Workers AI capacity, provider | COMMENT |
| LOW | docs/worker-configuration.d.ts | 12261 | // Message ID | COMMENT |
| LOW | docs/worker-configuration.d.ts | 12401 | }; | COMMENT |
| LOW | docs/worker-configuration.d.ts | 12441 | // Type of `env`. | COMMENT |
| LOW | docs/worker-configuration.d.ts | 12461 | // // thus should behave as Durable Object namsepace bindings. | COMMENT |
| LOW | scripts/sync-blog-demos.sh | 1 | #!/bin/bash | COMMENT |
| LOW | packages/core/vitest.config.ts | 1 | import { defineConfig } from "vitest/config"; | COMMENT |
| LOW | packages/core/tests/unit/settings/settings.test.ts | 801 | // Cross-mutation cache invalidation | COMMENT |
| LOW | …s/core/tests/unit/database/repositories/byline.test.ts | 1321 | expect(post2Credits[0]?.byline.customFields?.job_title).toBe("Editor"); | COMMENT |
| LOW | packages/core/tests/unit/config/secrets.test.ts | 121 | // 32-byte keys encode to 43 base64url chars. The 43rd char encodes | COMMENT |
| LOW | packages/core/tests/unit/redirects/loops.test.ts | 161 | COMMENT | |
| LOW | packages/core/tests/unit/bylines/bylines-query.test.ts | 361 | // the per-bucket findByUserIds calls each fired their own | COMMENT |
| LOW | packages/core/tests/unit/import/ssrf.test.ts | 261 | // The URL parser normalizes this to hex, so this exercises the same path | COMMENT |
| LOW | packages/core/tests/unit/import/ssrf.test.ts | 601 | it("allows look-alike domains that are not on the blocklist", () => { | COMMENT |
| LOW | …sts/integration/api/bylines-customfields-write.test.ts | 101 | beforeEach(async () => { | COMMENT |
| LOW | …tegration/wordpress-import/wxr-i18n-taxonomies.test.ts | 861 | }); | COMMENT |
| LOW | …tegration/wordpress-import/wxr-i18n-taxonomies.test.ts | 961 | // row gets one -- expected. | COMMENT |
| LOW | packages/core/tests/utils/mcp-runtime.ts | 81 | (serverTransport as unknown as Record<string, unknown>)._otherTransport = clientTransport; | COMMENT |
| LOW | packages/core/tests/utils/test-db.ts | 241 | // --------------------------------------------------------------------------- | COMMENT |
| LOW | packages/core/src/loader.ts | 1441 | AND cb.byline_id IN (${sql.join(bylineGroups.map((g) => sql`${g}`))}) | COMMENT |
| LOW | packages/core/src/loader.ts | 1781 | : undefined; | COMMENT |
| LOW | packages/core/src/loader.ts | 1861 | (bylineFilter && bylineFilter.groups.length === 0) || | COMMENT |
| LOW | packages/core/src/loader.ts | 2101 | // Query the per-collection table | COMMENT |
| LOW | packages/core/src/emdash-runtime.ts | 2401 | } catch (error) { | COMMENT |
| LOW | packages/core/src/emdash-runtime.ts | 2661 | // proactively delete it: the row is a few hundred bytes of dead | COMMENT |
| LOW | packages/core/src/emdash-runtime.ts | 2721 | const dataUrl = `data:text/javascript;base64,${Buffer.from(entry.code).toString("base64")}`; | COMMENT |
| LOW | packages/core/src/query.ts | 561 | * ``` | COMMENT |
| LOW | packages/core/src/query.ts | 801 | ordered[k] = stableOrder(v); | COMMENT |
| LOW | packages/core/src/database/repositories/content.ts | 2001 | // Deliberately not locale-scoped: the author fallback is suppressed by | COMMENT |
| LOW | packages/core/src/seed/apply.ts | 361 | // 4. Taxonomy definitions + Terms | COMMENT |
| LOW | packages/core/src/plugins/marketplace.ts | 401 | // of the authoring CLI; the two values must stay in sync. | COMMENT |
| LOW | packages/core/src/plugins/types.ts | 2281 | // the shared wire shape (`@emdash-cms/plugin-types` `PluginManifest`). The | COMMENT |
| LOW | packages/core/src/plugins/adapt-sandbox-entry.ts | 201 | } | COMMENT |
| LOW | packages/core/src/mcp/server.ts | 881 | const server = new McpServer( | COMMENT |
| LOW | packages/core/src/search/fts-manager.ts | 261 | WHEN NEW.deleted_at IS NULL | COMMENT |
| LOW | packages/core/src/api/handlers/registry.ts | 621 | slug, | COMMENT |
| LOW | packages/core/src/api/handlers/registry.ts | 901 | // Rewrite the manifest's id to the derived opaque pluginId before | COMMENT |
| LOW | packages/core/src/api/handlers/registry.ts | 921 | success: false, | COMMENT |
| LOW | packages/core/src/api/handlers/registry.ts | 1041 | // the profile carries the marketing copy. | COMMENT |
| LOW | packages/core/src/astro/middleware.ts | 781 | const hasPreviewToken = url.searchParams.has("_preview"); | COMMENT |
| LOW | packages/core/src/astro/middleware.ts | 841 | // On a fresh deployment the database may be completely empty. | COMMENT |
| LOW | packages/core/src/astro/middleware.ts | 981 | // - request-scoped (remote) backend only -- this branch implies it; | COMMENT |
| LOW | packages/core/src/astro/middleware.ts | 1121 | COMMENT | |
| 102 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | …ckages/core/tests/integration/auth/device-flow.test.ts | 123 | // Step 1: Request device code | COMMENT |
| LOW⚡ | …ckages/core/tests/integration/auth/device-flow.test.ts | 134 | // Step 2: Poll before authorization → pending | COMMENT |
| LOW⚡ | …ckages/core/tests/integration/auth/device-flow.test.ts | 142 | // Step 3: User authorizes (admin role = 50) | COMMENT |
| LOW⚡ | …ckages/core/tests/integration/auth/device-flow.test.ts | 150 | // Step 4: Exchange for tokens | COMMENT |
| LOW⚡ | …ckages/core/tests/integration/auth/device-flow.test.ts | 164 | // Step 5: Device code should be consumed | COMMENT |
| LOW⚡ | …ckages/core/tests/integration/auth/device-flow.test.ts | 172 | // Step 6: Tokens should be stored | COMMENT |
| LOW⚡ | …core/tests/integration/auth/authorization-code.test.ts | 166 | // Step 1: Generate PKCE pair | COMMENT |
| LOW⚡ | …core/tests/integration/auth/authorization-code.test.ts | 170 | // Step 2: Get authorization code | COMMENT |
| LOW | …core/tests/integration/auth/authorization-code.test.ts | 186 | // Step 3: Exchange code for tokens | COMMENT |
| LOW | …core/tests/integration/auth/authorization-code.test.ts | 203 | // Step 4: Verify tokens are stored | COMMENT |
| LOW | …core/tests/integration/auth/authorization-code.test.ts | 215 | // Step 5: Authorization code is consumed (single-use) | COMMENT |
| LOW⚡ | …/core/tests/integration/client/oauth-discovery.test.ts | 43 | // Step 1: get the authorization server URL from protected resource metadata | COMMENT |
| LOW⚡ | …/core/tests/integration/client/oauth-discovery.test.ts | 49 | // Step 2: the SDK constructs /.well-known/oauth-authorization-server/_emdash | COMMENT |
| LOW | packages/core/src/cli/commands/login.ts | 208 | // Step 1: Fetch auth discovery. | COMMENT |
| LOW | packages/core/src/cli/commands/login.ts | 263 | // Step 2: Request device code | COMMENT |
| LOW | packages/core/src/cli/commands/login.ts | 285 | // Step 3: Display instructions | COMMENT |
| LOW | packages/core/src/cli/commands/login.ts | 307 | // Step 4: Poll for token | COMMENT |
| LOW | packages/core/src/cli/commands/login.ts | 319 | // Step 5: Fetch user info | COMMENT |
| LOW | packages/core/src/cli/commands/login.ts | 346 | // Step 6: Save credentials (persist custom headers so subsequent commands inherit them) | COMMENT |
| LOW⚡ | packages/core/src/api/handlers/registry.ts | 614 | // Step 1: look up the package by DID + slug. The browser already | COMMENT |
| LOW⚡ | packages/core/src/api/handlers/registry.ts | 624 | // Step 2: select the target release. | COMMENT |
| LOW⚡ | packages/core/src/api/handlers/registry.ts | 1034 | // Step 7: store in R2 under the registry prefix. | COMMENT |
| LOW⚡ | packages/core/src/api/handlers/registry.ts | 1037 | // Step 8: write plugin state. | COMMENT |
| LOW | packages/core/src/api/handlers/registry.ts | 837 | // Step 6: fetch bytes through an aggregator cache, the publisher PDS, | COMMENT |
| LOW⚡ | packages/marketplace/src/workflows/audit.ts | 75 | // Step 1: Run code audit | COMMENT |
| LOW | packages/marketplace/src/workflows/audit.ts | 96 | // Step 2: Run image audit (skip if no images) | COMMENT |
| LOW | packages/marketplace/src/workflows/audit.ts | 112 | // Step 3: Store results in D1 and link to version | COMMENT |
| LOW | packages/marketplace/src/workflows/audit.ts | 146 | // Step 4: Resolve version status and update D1 | COMMENT |
| LOW | packages/admin/src/components/auth/PasskeyLogin.tsx | 162 | // Step 1: Get authentication options from server | COMMENT |
| LOW | packages/admin/src/components/auth/PasskeyLogin.tsx | 176 | // Step 2: Get assertion from browser | COMMENT |
| LOW | packages/admin/src/components/auth/PasskeyLogin.tsx | 207 | // Step 3: Send credential to server for verification | COMMENT |
| LOW | …ages/admin/src/components/auth/PasskeyRegistration.tsx | 325 | // Step 1: Get registration options from server | COMMENT |
| LOW | …ages/admin/src/components/auth/PasskeyRegistration.tsx | 339 | // Step 2: Create credential with browser | COMMENT |
| LOW | …ages/admin/src/components/auth/PasskeyRegistration.tsx | 371 | // Step 3: Send credential to server for verification | COMMENT |
| LOW⚡ | e2e/tests/invite-flow.spec.ts | 197 | // Step 1: Create invite via server-side API | COMMENT |
| LOW⚡ | e2e/tests/invite-flow.spec.ts | 202 | // Step 2: Set up virtual authenticator | COMMENT |
| LOW⚡ | e2e/tests/invite-flow.spec.ts | 206 | // Step 3: Navigate to invite accept page | COMMENT |
| LOW⚡ | e2e/tests/invite-flow.spec.ts | 210 | // Step 4: Verify the registration form renders | COMMENT |
| LOW⚡ | e2e/tests/invite-flow.spec.ts | 216 | // Step 5: Fill in name and create a passkey | COMMENT |
| LOW⚡ | e2e/tests/invite-flow.spec.ts | 228 | // Step 6: Confirm the completed passkey flow and continue | COMMENT |
| LOW⚡ | e2e/tests/invite-flow.spec.ts | 232 | // Step 7: Wait for the dashboard redirect | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | …ckages/core/tests/integration/auth/device-flow.test.ts | 123 | // Step 1: Request device code | COMMENT |
| LOW⚡ | …ckages/core/tests/integration/auth/device-flow.test.ts | 134 | // Step 2: Poll before authorization → pending | COMMENT |
| LOW⚡ | …ckages/core/tests/integration/auth/device-flow.test.ts | 142 | // Step 3: User authorizes (admin role = 50) | COMMENT |
| LOW⚡ | …ckages/core/tests/integration/auth/device-flow.test.ts | 150 | // Step 4: Exchange for tokens | COMMENT |
| LOW⚡ | …ckages/core/tests/integration/auth/device-flow.test.ts | 164 | // Step 5: Device code should be consumed | COMMENT |
| LOW⚡ | …ckages/core/tests/integration/auth/device-flow.test.ts | 172 | // Step 6: Tokens should be stored | COMMENT |
| LOW⚡ | …core/tests/integration/auth/authorization-code.test.ts | 166 | // Step 1: Generate PKCE pair | COMMENT |
| LOW⚡ | …core/tests/integration/auth/authorization-code.test.ts | 170 | // Step 2: Get authorization code | COMMENT |
| LOW | …core/tests/integration/auth/authorization-code.test.ts | 186 | // Step 3: Exchange code for tokens | COMMENT |
| LOW | …core/tests/integration/auth/authorization-code.test.ts | 203 | // Step 4: Verify tokens are stored | COMMENT |
| LOW | …core/tests/integration/auth/authorization-code.test.ts | 215 | // Step 5: Authorization code is consumed (single-use) | COMMENT |
| LOW⚡ | …/core/tests/integration/client/oauth-discovery.test.ts | 43 | // Step 1: get the authorization server URL from protected resource metadata | COMMENT |
| LOW⚡ | …/core/tests/integration/client/oauth-discovery.test.ts | 49 | // Step 2: the SDK constructs /.well-known/oauth-authorization-server/_emdash | COMMENT |
| LOW | packages/core/src/cli/commands/login.ts | 208 | // Step 1: Fetch auth discovery. | COMMENT |
| LOW | packages/core/src/cli/commands/login.ts | 263 | // Step 2: Request device code | COMMENT |
| LOW | packages/core/src/cli/commands/login.ts | 285 | // Step 3: Display instructions | COMMENT |
| LOW | packages/core/src/cli/commands/login.ts | 307 | // Step 4: Poll for token | COMMENT |
| LOW | packages/core/src/cli/commands/login.ts | 319 | // Step 5: Fetch user info | COMMENT |
| LOW | packages/core/src/cli/commands/login.ts | 346 | // Step 6: Save credentials (persist custom headers so subsequent commands inherit them) | COMMENT |
| LOW⚡ | packages/core/src/api/handlers/registry.ts | 614 | // Step 1: look up the package by DID + slug. The browser already | COMMENT |
| LOW⚡ | packages/core/src/api/handlers/registry.ts | 624 | // Step 2: select the target release. | COMMENT |
| LOW⚡ | packages/core/src/api/handlers/registry.ts | 1034 | // Step 7: store in R2 under the registry prefix. | COMMENT |
| LOW⚡ | packages/core/src/api/handlers/registry.ts | 1037 | // Step 8: write plugin state. | COMMENT |
| LOW | packages/core/src/api/handlers/registry.ts | 837 | // Step 6: fetch bytes through an aggregator cache, the publisher PDS, | COMMENT |
| LOW⚡ | packages/marketplace/src/workflows/audit.ts | 75 | // Step 1: Run code audit | COMMENT |
| LOW | packages/marketplace/src/workflows/audit.ts | 96 | // Step 2: Run image audit (skip if no images) | COMMENT |
| LOW | packages/marketplace/src/workflows/audit.ts | 112 | // Step 3: Store results in D1 and link to version | COMMENT |
| LOW | packages/marketplace/src/workflows/audit.ts | 146 | // Step 4: Resolve version status and update D1 | COMMENT |
| LOW | packages/admin/src/components/auth/PasskeyLogin.tsx | 162 | // Step 1: Get authentication options from server | COMMENT |
| LOW | packages/admin/src/components/auth/PasskeyLogin.tsx | 176 | // Step 2: Get assertion from browser | COMMENT |
| LOW | packages/admin/src/components/auth/PasskeyLogin.tsx | 207 | // Step 3: Send credential to server for verification | COMMENT |
| LOW | …ages/admin/src/components/auth/PasskeyRegistration.tsx | 325 | // Step 1: Get registration options from server | COMMENT |
| LOW | …ages/admin/src/components/auth/PasskeyRegistration.tsx | 339 | // Step 2: Create credential with browser | COMMENT |
| LOW | …ages/admin/src/components/auth/PasskeyRegistration.tsx | 371 | // Step 3: Send credential to server for verification | COMMENT |
| LOW⚡ | e2e/tests/invite-flow.spec.ts | 197 | // Step 1: Create invite via server-side API | COMMENT |
| LOW⚡ | e2e/tests/invite-flow.spec.ts | 202 | // Step 2: Set up virtual authenticator | COMMENT |
| LOW⚡ | e2e/tests/invite-flow.spec.ts | 206 | // Step 3: Navigate to invite accept page | COMMENT |
| LOW⚡ | e2e/tests/invite-flow.spec.ts | 210 | // Step 4: Verify the registration form renders | COMMENT |
| LOW⚡ | e2e/tests/invite-flow.spec.ts | 216 | // Step 5: Fill in name and create a passkey | COMMENT |
| LOW⚡ | e2e/tests/invite-flow.spec.ts | 228 | // Step 6: Confirm the completed passkey flow and continue | COMMENT |
| LOW⚡ | e2e/tests/invite-flow.spec.ts | 232 | // Step 7: Wait for the dashboard redirect | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | infra/perf-monitor/README.md | 122 | pnpm db:migrations:create # scaffold a new migration file | CODE |
| MEDIUM | packages/core/changelog/0.39.1-to-0.42.0.md | 63 | - [#3501](https://github.com/emdash-cms/emdash/pull/3501) [`4d6a87b`](https://github.com/emdash-cms/emdash/commit/4d6a87 | CODE |
| MEDIUM | packages/core/changelog/0.39.1-to-0.42.0.md | 63 | - [#3501](https://github.com/emdash-cms/emdash/pull/3501) [`4d6a87b`](https://github.com/emdash-cms/emdash/commit/4d6a87 | CODE |
| MEDIUM | packages/core/changelog/0.36.0-to-0.39.0.md | 148 | - [#3162](https://github.com/emdash-cms/emdash/pull/3162) [`a4af578`](https://github.com/emdash-cms/emdash/commit/a4af57 | CODE |
| MEDIUM | packages/core/changelog/0.36.0-to-0.39.0.md | 423 | - [#2351](https://github.com/emdash-cms/emdash/pull/2351) [`f0af9a1`](https://github.com/emdash-cms/emdash/commit/f0af9a | CODE |
| MEDIUM | packages/core/changelog/0.36.0-to-0.39.0.md | 423 | - [#2351](https://github.com/emdash-cms/emdash/pull/2351) [`f0af9a1`](https://github.com/emdash-cms/emdash/commit/f0af9a | CODE |
| MEDIUM | packages/core/src/transfer/domain.ts | 168 | // Terms, menu items, and widgets are only scaffold on a site without content; | COMMENT |
| MEDIUM | packages/cloudflare/CHANGELOG.md | 458 | - [#3162](https://github.com/emdash-cms/emdash/pull/3162) [`a4af578`](https://github.com/emdash-cms/emdash/commit/a4af57 | CODE |
| MEDIUM | packages/cloudflare/CHANGELOG.md | 514 | - [#2351](https://github.com/emdash-cms/emdash/pull/2351) [`f0af9a1`](https://github.com/emdash-cms/emdash/commit/f0af9a | CODE |
| MEDIUM | packages/cloudflare/CHANGELOG.md | 514 | - [#2351](https://github.com/emdash-cms/emdash/pull/2351) [`f0af9a1`](https://github.com/emdash-cms/emdash/commit/f0af9a | CODE |
| MEDIUM | packages/create-emdash/CHANGELOG.md | 77 | - [#2351](https://github.com/emdash-cms/emdash/pull/2351) [`f0af9a1`](https://github.com/emdash-cms/emdash/commit/f0af9a | CODE |
| MEDIUM | packages/create-emdash/CHANGELOG.md | 77 | - [#2351](https://github.com/emdash-cms/emdash/pull/2351) [`f0af9a1`](https://github.com/emdash-cms/emdash/commit/f0af9a | CODE |
| MEDIUM⚡ | packages/create-emdash/CHANGELOG.md | 178 | - [#900](https://github.com/emdash-cms/emdash/pull/900) [`b3d1f40`](https://github.com/emdash-cms/emdash/commit/b3d1f40b | CODE |
| MEDIUM⚡ | packages/create-emdash/CHANGELOG.md | 178 | - [#900](https://github.com/emdash-cms/emdash/pull/900) [`b3d1f40`](https://github.com/emdash-cms/emdash/commit/b3d1f40b | CODE |
| MEDIUM⚡ | packages/create-emdash/CHANGELOG.md | 184 | - [#859](https://github.com/emdash-cms/emdash/pull/859) [`3015280`](https://github.com/emdash-cms/emdash/commit/30152807 | CODE |
| MEDIUM | packages/create-emdash/CHANGELOG.md | 228 | - [#785](https://github.com/emdash-cms/emdash/pull/785) [`e0dd616`](https://github.com/emdash-cms/emdash/commit/e0dd6168 | CODE |
| MEDIUM | packages/create-emdash/CHANGELOG.md | 228 | - [#785](https://github.com/emdash-cms/emdash/pull/785) [`e0dd616`](https://github.com/emdash-cms/emdash/commit/e0dd6168 | CODE |
| MEDIUM | packages/create-emdash/tests/utils.test.ts | 236 | // scaffold-time-no-emdash-dep constraint) so both need their own tests. | COMMENT |
| MEDIUM | packages/create-emdash/src/flags.ts | 127 | // Positional name: first non-flag arg. We accept "." for "scaffold into | COMMENT |
| MEDIUM | packages/plugin-cli/CHANGELOG.md | 219 | - [#3162](https://github.com/emdash-cms/emdash/pull/3162) [`a4af578`](https://github.com/emdash-cms/emdash/commit/a4af57 | CODE |
| MEDIUM | packages/plugin-cli/tests/init-scaffold.test.ts | 119 | // `version` is intentionally omitted from the scaffold manifest; | COMMENT |
| MEDIUM | packages/plugin-cli/tests/init-scaffold.test.ts | 210 | // The scaffold wrote the real package.json over the stub. | COMMENT |
| MEDIUM | packages/plugin-cli/tests/init-scaffold.test.ts | 232 | // scaffold.ts). The exact order is part of the API surface | COMMENT |
| MEDIUM | packages/plugin-cli/tests/init-templates.test.ts | 76 | // `version` deliberately omitted from the manifest scaffold — | COMMENT |
| MEDIUM | packages/plugin-cli/tests/init-templates.test.ts | 267 | // definePlugin must not appear in the scaffold — it's | COMMENT |
| MEDIUM | packages/plugin-cli/src/init/templates.ts | 107 | // plugins (no package.json) would set it here, but the scaffold | COMMENT |
| MEDIUM | packages/plugin-test/CHANGELOG.md | 349 | - [#3162](https://github.com/emdash-cms/emdash/pull/3162) [`a4af578`](https://github.com/emdash-cms/emdash/commit/a4af57 | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| CRITICAL | packages/admin/tests/editor/table-controls.test.tsx | 294 | expect(editor.state.doc.content.content.map((node) => node.type.name)).toEqual([ | CODE |
| CRITICAL | packages/admin/tests/editor/toolbar.test.tsx | 632 | const table = editor.state.doc.content.content.find( | CODE |
| CRITICAL | packages/admin/tests/editor/toolbar.test.tsx | 652 | TableMap.get(editor.state.doc.content.content.find((node) => node.type.name === "table")!), | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | .github/workflows/query-counts-apply.yml | 91 | // matches the workflow_run's head SHA. This is more robust | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | apps/release-service/src/index.ts | 98 | export async function handleRequest( | CODE |