Sanity Studio – Rapidly configure content workspaces powered by structured content
This report summarizes scanner evidence for sanity-io/sanity, a TypeScript project with 6,382 GitHub stars. SynthScan examined 806,296 lines of code across 6501 source files, recording 1265 pattern matches distributed across 13 syntactic categories. The legacy adjusted pattern signal is 1.8 (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? 1147 finding(s).
Are imports declared and package/API names verified? 111 finding(s).
Are wrappers, guards, and repeated structures necessary? 978 finding(s).
Which changes need focused human review? 1265 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 1265 distinct pattern matches across 13 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 |
|---|---|---|---|---|
| LOW | …ges/@repo/bundle-manager/src/commands/uploadBundles.ts | 272 | function getMonorepoPackageVersions(): Record<string, string> { | CODE |
| LOW | …epo/release-notes/src/utils/pullRequestReleaseNotes.ts | 33 | export async function extractReleaseNotesFromPrBody( | CODE |
| LOW | …epo/release-notes/src/utils/pullRequestReleaseNotes.ts | 61 | function sectionContainsHorizontalRule(blocks: PortableTextMarkdownBlock[]): boolean { | CODE |
| LOW | …epo/release-notes/src/utils/pullRequestReleaseNotes.ts | 99 | export function shouldExcludeReleaseNotes(blocks: PortableTextMarkdownBlock[]): boolean { | CODE |
| LOW | packages/@repo/release-notes/src/utils/ids.ts | 8 | export function getSanityDocumentIdsForBaseVersion(baseVersion: string) { | CODE |
| LOW | …e-notes/src/utils/generateHumanReadableReleaseNotes.ts | 11 | export async function generateHumanReadableReleaseNotes({ | CODE |
| LOW | …o/release-notes/src/utils/parseRenovateReleaseNotes.ts | 30 | export function parseRenovateReleaseNotes(prBody: string): NormalizedMarkdownBlock[] { | CODE |
| LOW | …ease-notes/src/commands/createOrUpdateChangelogDocs.ts | 36 | export async function createOrUpdateChangelogDocs(args: { | CODE |
| LOW | packages/@repo/debug-proxy/src/requestScenarios.ts | 29 | export function intermittentServiceErrors( | CODE |
| LOW | …@sanity/types/src/globalDocumentReference/asserters.ts | 5 | export function isGlobalDocumentReference( | CODE |
| LOW | packages/@sanity/types/src/markers/asserters.ts | 11 | export function isValidationWarningMarker( | CODE |
| LOW | packages/@sanity/types/src/mutations/asserters.ts | 19 | export function isCreateIfNotExistsMutation( | CODE |
| LOW | packages/@sanity/types/src/mutations/asserters.ts | 26 | export function isCreateOrReplaceMutation( | CODE |
| LOW⚡ | packages/@sanity/types/src/schema/asserters.ts | 65 | export function isArrayOfBlocksSchemaType( | CODE |
| LOW⚡ | packages/@sanity/types/src/schema/asserters.ts | 72 | export function isArrayOfObjectsSchemaType( | CODE |
| LOW⚡ | packages/@sanity/types/src/schema/asserters.ts | 79 | export function isArrayOfPrimitivesSchemaType(type: unknown): type is ArraySchemaType { | CODE |
| LOW⚡ | packages/@sanity/types/src/schema/asserters.ts | 84 | export function isArrayOfStringsSchemaType(type: unknown): type is ArraySchemaType<string> { | CODE |
| LOW | packages/@sanity/types/src/schema/asserters.ts | 143 | export function isDeprecationConfiguration(type: unknown): type is DeprecationConfiguration { | CODE |
| LOW | packages/@sanity/types/src/schema/asserters.ts | 149 | export function isCrossDatasetReferenceSchemaType( | CODE |
| LOW | packages/@sanity/types/src/schema/asserters.ts | 200 | export function isBlockChildrenObjectField(field: unknown): field is BlockChildrenObjectField { | CODE |
| LOW | packages/@sanity/util/src/paths.ts | 278 | function normalizeIndexTupleSegment(segment: string): IndexTuple { | CODE |
| LOW | …/concurrency-limiter/createClientConcurrencyLimiter.ts | 51 | export function createClientConcurrencyLimiter( | CODE |
| LOW | …/createClientConcurrencyLimiter.abortSignalAny.test.ts | 49 | function describeSignalCombination() { | CODE |
| LOW | …ages/@sanity/vision/src/util/apiVersionCapabilities.ts | 60 | export function getUnsatisfiedApiVersionCapability( | CODE |
| LOW | packages/@sanity/vision/src/util/getBlobUrl.ts | 19 | function getMemoizedBlobUrlResolver(mimeType: string, stringEncoder: (input: any) => string) { | CODE |
| LOW | …ges/@sanity/vision/src/components/VisionGui.styled.tsx | 56 | export function InputBackgroundContainerLeft(props: ComponentProps<typeof Box>) { | CODE |
| LOW | …s/@sanity/vision/src/components/PerspectivePopover.tsx | 11 | function PerspectivePopoverContent(props: ComponentProps<typeof Box>) { | CODE |
| LOW | packages/@sanity/vision/src/vista/util/groqFunctions.ts | 608 | export function explainDeclarationSyntaxError( | CODE |
| LOW | …es/@sanity/vision/src/vista/util/groqFunctionEditor.ts | 344 | export function createGroqFunctionExtensions(labels: GroqEditorLabels): Extension[] { | CODE |
| LOW | packages/@sanity/vision/src/vista/util/groqWasm.ts | 75 | export function createByteOffsetConverter(text: string): (byteOffset: number) => number { | CODE |
| LOW | …y/vision/src/vista/hooks/useFollowNavbarPerspective.ts | 12 | export function useFollowNavbarPerspective( | CODE |
| LOW | …y/schema/src/manifest/createSchemaFromManifestTypes.ts | 45 | export function createSchemaFromManifestTypes( | CODE |
| LOW | …kages/@sanity/schema/src/manifest/workspaceSchemaId.ts | 95 | export function createStoredWorkspaceSchemaPayload(args: { | CODE |
| LOW | …nity/schema/src/manifest/extractManifestSchemaTypes.ts | 105 | export async function extractCreateWorkspaceManifest( | CODE |
| LOW | …nity/schema/src/manifest/extractManifestSchemaTypes.ts | 134 | export function extractManifestSchemaTypes(schema: Schema): ManifestSchemaType[] { | CODE |
| LOW | …nity/schema/src/manifest/extractManifestSchemaTypes.ts | 150 | function transformCommonTypeFields( | CODE |
| LOW | …nity/schema/src/manifest/extractManifestSchemaTypes.ts | 352 | function transformCrossDatasetReference( | CODE |
| LOW | …nity/schema/src/manifest/extractManifestSchemaTypes.ts | 369 | function transformGlobalDocumentReference( | CODE |
| LOW | …ges/@sanity/schema/src/manifest/manifestTypeHelpers.ts | 56 | export function isGlobalDocumentReference( | CODE |
| LOW | …ges/@sanity/schema/src/manifest/manifestTypeHelpers.ts | 129 | function getSchemaTypeInternalOwnProps(type: SchemaType): InternalOwnProps | undefined { | CODE |
| LOW | …ages/@sanity/schema/src/legacy/searchConfig/resolve.ts | 116 | function getCachedStringFieldPaths(type: any, maxDepth: number) { | CODE |
| LOW | …ages/@sanity/schema/src/legacy/searchConfig/resolve.ts | 148 | function getPortableTextFieldPaths(type: any, maxDepth: any) { | CODE |
| LOW | …ages/@sanity/schema/src/legacy/searchConfig/resolve.ts | 155 | export function resolveSearchConfigForBaseFieldPaths(type: any, maxDepth?: number) { | CODE |
| LOW | …y/schema/src/sanity/validateMediaLibraryAssetAspect.ts | 32 | export function validateMediaLibraryAssetAspect( | CODE |
| LOW | packages/@sanity/schema/src/sanity/groupProblems.ts | 18 | function createTypeWithMembersProblemsAccessor( | CODE |
| LOW | packages/@sanity/schema/src/sanity/extractSchema.ts | 394 | function createReferenceTypeNodeDefintion( | CODE |
| LOW⚡ | packages/@sanity/schema/src/sanity/extractSchema.ts | 545 | function isCrossDatasetReferenceType(typeDef: SanitySchemaType) { | CODE |
| LOW⚡ | packages/@sanity/schema/src/sanity/extractSchema.ts | 548 | function isGlobalDocumentReferenceType(typeDef: SanitySchemaType) { | CODE |
| LOW⚡ | packages/@sanity/schema/src/sanity/extractSchema.ts | 557 | function createStringTypeNodeDefintion( | CODE |
| LOW | packages/@sanity/schema/src/sanity/extractSchema.ts | 575 | function createNumberTypeNodeDefintion( | CODE |
| LOW | …anity/schema/src/sanity/validation/types/deprecated.ts | 4 | export function validateDeprecatedProperties(type: any): SchemaValidationResult[] { | CODE |
| LOW | …sanity/validation/utils/validateNonObjectFieldsProp.ts | 6 | export function validateNonObjectFieldsProp( | CODE |
| LOW | …ema/src/sanity/validation/utils/validateNoCallbacks.ts | 24 | function validateConditionalProperties(typeDef: any): SchemaValidationResult[] { | CODE |
| LOW | …ema/src/sanity/validation/utils/validateNoCallbacks.ts | 185 | function validateOtherFunctionOptions(options: any): SchemaValidationResult[] { | CODE |
| LOW | …ema/src/sanity/validation/utils/validateNoCallbacks.ts | 198 | function validateFieldsetsAndGroups(typeDef: any): SchemaValidationResult[] { | CODE |
| LOW | packages/@sanity/schema/src/descriptors/uploadSchema.ts | 349 | export async function prepareEncodedSchemaUpload( | CODE |
| LOW | packages/@sanity/schema/src/descriptors/convert.ts | 591 | function extractValueFromListOption(option: unknown, typeDef: Record<string, unknown>): unknown { | CODE |
| LOW | packages/@sanity/schema/src/descriptors/sync.ts | 23 | export function processSchemaSynchronization( | CODE |
| LOW | …s/@sanity/validation/src/resolveConditionalProperty.ts | 11 | export function resolveConditionalProperty( | CODE |
| LOW | packages/@sanity/validation/src/validateDocument.ts | 82 | function extractFieldRulesFromRule(rule: Rule): NonNullable<Rule['_fieldRules']>[] { | CODE |
| 911 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | .agents/skills/playwright-cli/SKILL.md | 38 | playwright-cli fill e5 "user@example.com" | CODE |
| LOW | .agents/skills/playwright-cli/SKILL.md | 233 | playwright-cli fill e1 "user@example.com" | CODE |
| LOW | …ts/skills/playwright-cli/references/test-generation.md | 21 | playwright-cli fill e1 "user@example.com" | CODE |
| LOW | …ts/skills/playwright-cli/references/test-generation.md | 23 | # await page.getByRole('textbox', { name: 'Email' }).fill('user@example.com'); | COMMENT |
| LOW | …ts/skills/playwright-cli/references/test-generation.md | 44 | await page.getByRole('textbox', {name: 'Email'}).fill('user@example.com') | CODE |
| LOW | …gents/skills/playwright-cli/references/running-code.md | 214 | await page.fill('input[name=email]', 'user@example.com'); | CODE |
| LOW⚡ | …ents/skills/playwright-cli/references/storage-state.md | 238 | playwright-cli fill e1 "user@example.com" | CODE |
| LOW | …skills/playwright-cli/references/session-management.md | 17 | playwright-cli -s=auth fill e1 "user@example.com" | CODE |
| LOW | …s/playwright-best-practices/advanced/authentication.md | 198 | email: 'admin@example.com', | CODE |
| LOW | …ls/playwright-best-practices/advanced/multi-context.md | 53 | await popup.getByLabel('Email').fill('user@example.com') | CODE |
| LOW | …nts/skills/playwright-best-practices/core/test-data.md | 253 | {email: 'user@example.com', password: 'pass123', expected: 'Dashboard'}, | CODE |
| LOW | …nts/skills/playwright-best-practices/core/test-data.md | 254 | {email: 'admin@example.com', password: 'admin123', expected: 'Admin Panel'}, | CODE |
| LOW | …nts/skills/playwright-best-practices/core/test-data.md | 432 | const user = await seedUser({name: 'John Doe'}) | CODE |
| LOW | …nts/skills/playwright-best-practices/core/test-data.md | 435 | await expect(page.getByText('John Doe')).toBeVisible() | CODE |
| LOW | …ls/playwright-best-practices/core/page-object-model.md | 71 | await loginPage.login('user@example.com', 'password123') | CODE |
| LOW | …ls/playwright-best-practices/core/page-object-model.md | 211 | const dashboardPage = await loginPage.login('user@example.com', 'pass') | CODE |
| LOW | …ls/playwright-best-practices/core/page-object-model.md | 244 | await loginPage.login('user@example.com', 'password') | CODE |
| LOW | …ls/playwright-best-practices/core/page-object-model.md | 310 | await loginPage.login('user@example.com', 'password') | CODE |
| LOW | …kills/playwright-best-practices/core/fixtures-hooks.md | 103 | defaultUser: {email: 'admin@example.com', password: 'admin123'}, | CODE |
| LOW | …kills/playwright-best-practices/core/fixtures-hooks.md | 280 | await login(page, 'admin@example.com', 'adminpass') | CODE |
| LOW | …kills/playwright-best-practices/core/fixtures-hooks.md | 285 | await login(page, 'user@example.com', 'userpass') | CODE |
| LOW | …s/skills/playwright-best-practices/core/annotations.md | 202 | await page.getByLabel('Name').fill('John Doe') | CODE |
| LOW | …s/playwright-best-practices/core/assertions-waiting.md | 47 | await expect(page.getByLabel('Email')).toHaveValue('user@example.com') | CODE |
| LOW | …ht-best-practices/testing-patterns/forms-validation.md | 156 | await page.getByLabel('Phone').fill('555-1234') | CODE |
| LOW | …ht-best-practices/testing-patterns/forms-validation.md | 197 | await page.getByLabel('Phone').fill('555-1234') | CODE |
| LOW | …ht-best-practices/testing-patterns/forms-validation.md | 482 | | `await page.fill('#email', 'test@test.com')` | CSS selector is fragile | | CODE |
| LOW | …ght-best-practices/testing-patterns/file-operations.md | 71 | expect(content).toContain('John Doe') | CODE |
| LOW | …ht-best-practices/testing-patterns/security-testing.md | 176 | await page.getByLabel('Email').fill('user@example.com') | CODE |
| LOW | …ht-best-practices/testing-patterns/security-testing.md | 203 | await page1.getByLabel('Email').fill('user@example.com') | CODE |
| LOW | …ht-best-practices/testing-patterns/security-testing.md | 213 | await page2.getByLabel('Email').fill('user@example.com') | CODE |
| LOW | …ht-best-practices/testing-patterns/security-testing.md | 232 | await page.getByLabel('Email').fill('user@example.com') | CODE |
| LOW | examples/functions/sentiment-analysis/document.json | 5 | "name": "John Doe", | CODE |
| LOW⚡ | scripts/generate-documents/utils/lorem.ts | 4 | `Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna | CODE |
| LOW⚡ | scripts/generate-documents/utils/lorem.ts | 4 | `Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna | CODE |
| LOW⚡ | scripts/generate-documents/utils/lorem.ts | 8 | * Generate a Uint8Array of lorem ipsum text of the given byte size | COMMENT |
| LOW | scripts/generate-documents/utils/lorem.ts | 21 | * Generate a lorem ipsum string of the given byte size | COMMENT |
| LOW | packages/@repo/release-notes/src/utils/uploadImages.ts | 29 | let asset = {_id: 'placeholder'} | CODE |
| LOW | packages/sanity/test/form/renderVideoInput.tsx | 25 | fields: [{name: 'placeholder', type: 'string', hidden: true}], | CODE |
| LOW | packages/sanity/test/descriptors/schema.test.tsx | 501 | describe('placeholder', () => { | CODE |
| LOW | …/comment-input/__tests__/CommentInput.browser.test.tsx | 32 | email: 'test@test.com', | CODE |
| LOW | …nput/__tests__/InlineComposerMentions.browser.test.tsx | 32 | email: 'test@test.com', | CODE |
| LOW | …c/core/studio/copyPaste/__test__/transferValue.test.ts | 284 | client: createMockClient([{_type: 'editor', _id: 'yyy', name: 'John Doe'}]), | CODE |
| LOW | …c/core/studio/copyPaste/__test__/transferValue.test.ts | 326 | {_type: 'editor', _id: 'versions.rSomeRelease.yyy', name: 'John Doe'}, | CODE |
| LOW | …c/core/studio/copyPaste/__test__/transferValue.test.ts | 363 | client: createMockClient([{_type: 'editor', _id: 'drafts.yyy', name: 'John Doe'}]), | CODE |
| LOW | …c/core/studio/copyPaste/__test__/transferValue.test.ts | 435 | client: createMockClient([{_type: 'editor', _id: 'yyy', name: 'John Doe'}]), | CODE |
| LOW | …c/core/studio/copyPaste/__test__/transferValue.test.ts | 502 | client: createMockClient([{_type: 'editor', _id: 'yyy', name: 'John Doe'}]), | CODE |
| LOW | …c/core/studio/copyPaste/__test__/transferValue.test.ts | 541 | client: createMockClient([{_type: 'editor', _id: 'yyy', name: 'John Doe'}]), | CODE |
| LOW | …c/core/studio/copyPaste/__test__/transferValue.test.ts | 583 | client: createMockClient([{_type: 'editor', _id: 'yyy', name: 'John Doe'}]), | CODE |
| LOW | …c/core/studio/copyPaste/__test__/transferValue.test.ts | 672 | client: createMockClient([{_type: 'editor', _id: 'yyy', name: 'John Doe'}]), | CODE |
| LOW | …anity/src/core/studio/copyPaste/__test__/mockClient.ts | 61 | // { _id: 'doc2', _type: 'author', name: 'John Doe' } | COMMENT |
| LOW | …c/core/studio/copyPaste/__test__/useCopyPaste.test.tsx | 52 | {_id: 'doc1', _type: 'author', name: 'John Doe'}, | CODE |
| LOW | …c/core/studio/copyPaste/__test__/useCopyPaste.test.tsx | 53 | {_id: 'editor1', _type: 'editor', name: 'John Doe'}, | CODE |
| LOW | …c/core/studio/copyPaste/__test__/useCopyPaste.test.tsx | 1193 | value: 'John Doe', | CODE |
| LOW | …udio/workspaces/__tests__/useVisibleWorkspaces.test.ts | 71 | email: 'admin@example.com', | CODE |
| LOW | …udio/workspaces/__tests__/useVisibleWorkspaces.test.ts | 192 | email: 'admin@example.com', | CODE |
| LOW | …spaceMatcher/__tests__/ActiveWorkspaceMatcher.test.tsx | 63 | email: 'test@test.com', | CODE |
| LOW | …ctiveWorkspaceMatcher/__tests__/matchWorkspace.test.ts | 18 | email: 'test@test.com', | CODE |
| LOW | …o/components/navbar/new-document/NewDocumentButton.tsx | 149 | 'placeholder': placeholder, | CODE |
| LOW | …/new-document/__tests__/NewDocumentListOption.test.tsx | 33 | currentUser: {id: 'user1', name: 'Test User', email: 'test@test.com', role: '', roles: []}, | CODE |
| LOW | …mponents/dialog/__tests__/ReleaseForm.browser.test.tsx | 62 | await expect.element(title).toHaveAttribute('placeholder', 'Untitled release') | CODE |
| 45 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | …nity-ui-migration-progress/scripts/measure-progress.sh | 1 | #!/usr/bin/env bash | COMMENT |
| LOW | packages/@repo/pandacss/src/panda.css.d.ts | 1 | // The `types` condition of the `./panda.css` export: a side-effect import of the stylesheet | COMMENT |
| LOW | packages/@repo/package.bundle/src/package.bundle.ts | 41 | styles: 'panda' | 'css-modules' | COMMENT |
| LOW | packages/@repo/debug-proxy/src/cli.ts | 221 | // | COMMENT |
| LOW | packages/@sanity/vision/src/styles.css.d.ts | 1 | // Type declarations for `styles.css`, so its side-effect import type-checks like the `bundle.css` | COMMENT |
| LOW | packages/@sanity/vision/src/hooks/useSavedQueries.ts | 121 | const [pendingSaves, setPendingSaves] = useState(0) | COMMENT |
| LOW | packages/@sanity/schema/example/test.js | 21 | assert.equal(person.fields[ADDRESS].name, 'address') | COMMENT |
| LOW | packages/@sanity/schema/example/test.js | 41 | // console.log(relation) | COMMENT |
| LOW | …es/@sanity/schema/src/sanity/validation/types/array.ts | 41 | return quote(value) | COMMENT |
| LOW | packages/@sanity/mutator/test/Matcher.test.ts | 21 | COMMENT | |
| LOW | packages/sanity/panda.config.ts | 1 | import {defineConfig, type Config} from '@pandacss/dev' | COMMENT |
| LOW | packages/sanity/tsdown.config.ts | 21 | 'dashboard.js', | COMMENT |
| LOW | packages/sanity/tsdown.config.ts | 41 | // the way the layers did and leaves every selector as specific as it was. | COMMENT |
| LOW | packages/sanity/test/vitest.setup.ts | 1 | // Support for @testing-library/jest-dom via vitest | COMMENT |
| LOW | packages/sanity/test/setup/idleCallback.ts | 1 | // Headless Chromium opens an idle period only after it has produced a frame. | COMMENT |
| LOW | packages/sanity/test/setup/browser.ts | 1 | // Browser test setup - runs in a real browser, so no need for | COMMENT |
| LOW | packages/sanity/test/setup/browser.ts | 21 | import {afterEach, beforeEach} from 'vitest' | COMMENT |
| LOW | packages/sanity/test/setup/browser.ts | 41 | // | COMMENT |
| LOW | packages/sanity/test/setup/browser.ts | 61 | // | COMMENT |
| LOW | packages/sanity/test/browser/testHelpers.ts | 901 | // Menus and listboxes (e.g. the comment mentions popover) are positioned | COMMENT |
| LOW | packages/sanity/test/browser/testHelpers.ts | 961 | // can open. Synthetic `mouseover` does not clear CSS `:hover`; only a | COMMENT |
| LOW | packages/sanity/test/descriptors/utils.ts | 101 | // Coerce titles which were added during extractManifestSchemaTypes. This can happen when the | COMMENT |
| LOW | …kages/sanity/src/core/studio/StudioLayoutComponent.tsx | 121 | tools, | COMMENT |
| LOW | …anity/src/core/studio/copyPaste/__test__/mockClient.ts | 61 | // { _id: 'doc2', _type: 'author', name: 'John Doe' } | COMMENT |
| LOW | packages/sanity/src/core/studio/workspaces/corsCheck.ts | 81 | .then((result) => { | COMMENT |
| LOW | …nity/src/core/studio/workspaces/WorkspacesProvider.tsx | 161 | // 2. invalid-session 401 → forced logout: only 401s the API explicitly | COMMENT |
| LOW | …nity/src/core/studio/workspaces/WorkspacesProvider.tsx | 321 | // `null` initial value (rather than undefined) so react-rx provides a | COMMENT |
| LOW | …/sanity/src/core/studio/screens/ConfigErrorsScreen.tsx | 1 | export function ConfigErrorsScreen() { | COMMENT |
| LOW | …/sanity/src/core/studio/screens/ConfigErrorsScreen.tsx | 21 | // <Card shadow={1}> | COMMENT |
| LOW | …dio/components/navbar/free-trial/FreeTrialProvider.tsx | 41 | // Allows us to override the current state of the trial to | COMMENT |
| LOW | packages/sanity/src/core/form/useDocumentForm.ts | 401 | const isLocked = editState.transactionSyncLock?.enabled | COMMENT |
| LOW | …c/core/form/studio/assetSourceMediaLibrary/uploader.ts | 1 | // The picker-mode uploader is generic (the mounted source component does the | COMMENT |
| LOW | …/form/studio/assetSourceMediaLibrary/shared/Dialog.tsx | 1 | // The dialog chrome moved to the generic federated asset-source module (it is | COMMENT |
| LOW | …Library/federated/FederatedMediaLibraryAssetSource.tsx | 61 | // files so the fallback resumes the whole batch; the Media Library | COMMENT |
| LOW | …anity/src/core/form/types/definitionExtensions.test.ts | 21 | // See: https://github.com/sanity-io/sanity/issues/6542 | COMMENT |
| LOW | …src/core/form/inputs/ReferenceInput/ReferenceInput.tsx | 101 | // The strengthen-on-publish process is not necessary for documents inside a release, and in | COMMENT |
| LOW | …ext/_legacyDefaultParts/__tests__/BlockExtras.test.tsx | 81 | // <PortableTextInput | COMMENT |
| LOW | …ext/_legacyDefaultParts/__tests__/BlockExtras.test.tsx | 101 | // const block = await result.findByText('Lorem ipsum dolor sit amet', {exact: false}) | COMMENT |
| LOW | …ts/PortableText/__tests__/Annotations.browser.test.tsx | 541 | // back into the DOM when the two differ, so an arrow key landing | COMMENT |
| LOW | …e/form/inputs/PortableText/hooks/useTrackFocusPath.tsx | 61 | selectionRef.current = selection | COMMENT |
| LOW | …e/form/inputs/PortableText/hooks/useTrackFocusPath.tsx | 141 | ) | COMMENT |
| LOW | …src/core/form/inputs/PortableText/hooks/useHotKeys.tsx | 41 | // ptEditor: PortableTextEditor | COMMENT |
| LOW | …src/core/form/inputs/PortableText/hooks/useHotKeys.tsx | 61 | // onFocus([...focus.path, FOCUS_TERMINATOR]) | COMMENT |
| LOW | …anity/src/core/form/inputs/NumberInput/NumberInput.tsx | 21 | COMMENT | |
| LOW | packages/sanity/src/core/config/prepareConfig.tsx | 281 | const brokeredSourcesEnabled = federatedSourcesConfig?.enabled === true | COMMENT |
| LOW | …ages/sanity/src/core/divergence/divergenceNavigator.ts | 181 | if (!advancedVersionControlEnabled) { | COMMENT |
| LOW | packages/sanity/src/core/field/types.ts | 181 | * Schema | COMMENT |
| LOW | packages/sanity/src/core/field/types.ts | 201 | // export interface ArraySchemaType<V = unknown> extends BaseArraySchemaType { | COMMENT |
| LOW | …ty/src/core/components/popoverDialog/PopoverDialog.tsx | 61 | // Set focus to the reference element when closing | COMMENT |
| LOW | packages/sanity/src/core/hooks/useValidationStatus.ts | 21 | ) | COMMENT |
| LOW | packages/sanity/src/core/hooks/useDocumentSyncState.ts | 121 | COMMENT | |
| LOW | …es/sanity/src/core/store/grants/templatePermissions.ts | 61 | return defer(() => { | COMMENT |
| LOW | …ty/src/core/store/auth/legacy/createLegacyAuthStore.ts | 921 | // Behavior parity: logout has always hit /auth/logout with the client | COMMENT |
| LOW | …re/auth/legacy/__tests__/createLegacyAuthStore.test.ts | 561 | // and shouldn't broadcast unauthenticated values that would poison | COMMENT |
| LOW | …re/auth/legacy/__tests__/createLegacyAuthStore.test.ts | 621 | // broadcast `authenticated: false` via the shared cookieAuthState | COMMENT |
| LOW | …re/auth/legacy/__tests__/createLegacyAuthStore.test.ts | 761 | }) | COMMENT |
| LOW | …re/auth/legacy/__tests__/createLegacyAuthStore.test.ts | 841 | it('transitions to unauthenticated when /auth/logout itself 401s on a middleware-bearing client', async () => { | COMMENT |
| LOW | …/src/core/store/document/document-pair/checkoutPair.ts | 321 | map((result): CommitAttemptResult => ({type: 'success', result})), | COMMENT |
| LOW | …core/store/document/document-pair/checkoutPair.test.ts | 201 | // channel (`request.failure` → retry, or `request.cancel` → terminal reset), | COMMENT |
| LOW | …ore/store/document/document-pair/operations/helpers.ts | 101 | unpublish: wrap('unpublish', serverUnpublish, args), | COMMENT |
| 47 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW⚡ | …ents/skills/playwright-cli/references/storage-state.md | 235 | # Step 1: Login and save state | COMMENT |
| LOW⚡ | …ents/skills/playwright-cli/references/storage-state.md | 245 | # Step 2: Later, restore state and skip login | COMMENT |
| LOW⚡ | …laywright-best-practices/core/projects-dependencies.md | 172 | // Step 1: Database setup | COMMENT |
| LOW⚡ | …laywright-best-practices/core/projects-dependencies.md | 178 | // Step 2: Auth setup (needs DB) | COMMENT |
| LOW⚡ | …laywright-best-practices/core/projects-dependencies.md | 185 | // Step 3: Seed data (needs auth) | COMMENT |
| LOW⚡ | …ywright-best-practices/testing-patterns/api-testing.md | 467 | // Step 1: Create a product | COMMENT |
| LOW⚡ | …ywright-best-practices/testing-patterns/api-testing.md | 474 | // Step 2: Create a cart | COMMENT |
| LOW⚡ | …ywright-best-practices/testing-patterns/api-testing.md | 482 | // Step 3: Checkout | COMMENT |
| LOW | …ywright-best-practices/testing-patterns/api-testing.md | 498 | // Step 4: Verify order in list | COMMENT |
| LOW | …ywright-best-practices/testing-patterns/api-testing.md | 503 | // Step 5: Verify stock decreased | COMMENT |
| LOW | …skills/migrate-styled-components-to-panda-css/SKILL.md | 34 | ## Step 1: Inventory | COMMENT |
| LOW | …skills/migrate-styled-components-to-panda-css/SKILL.md | 54 | ## Step 2: Migrate the code | COMMENT |
| LOW | …skills/migrate-styled-components-to-panda-css/SKILL.md | 275 | ## Step 3: Verify | COMMENT |
| LOW | …kills/rxjs-like-a-pro/references/massive-observable.md | 55 | // Step 1: small Observable constructor — bridges EventSource and nothing else | COMMENT |
| LOW | …kills/rxjs-like-a-pro/references/massive-observable.md | 65 | // Step 2: compose everything with operators | COMMENT |
| LOW | .agents/skills/find-skills/SKILL.md | 36 | ### Step 1: Understand What They Need | COMMENT |
| LOW | .agents/skills/find-skills/SKILL.md | 44 | ### Step 2: Search for Skills | COMMENT |
| LOW | .agents/skills/find-skills/SKILL.md | 67 | ### Step 3: Present Options to the User | COMMENT |
| LOW | .agents/skills/find-skills/SKILL.md | 87 | ### Step 4: Offer to Install | COMMENT |
| LOW | .agents/skills/code-review-and-quality/SKILL.md | 120 | ### Step 1: Understand the Context | COMMENT |
| LOW | .agents/skills/code-review-and-quality/SKILL.md | 130 | ### Step 2: Review the Tests First | COMMENT |
| LOW | .agents/skills/code-review-and-quality/SKILL.md | 142 | ### Step 3: Review the Implementation | COMMENT |
| LOW | .agents/skills/code-review-and-quality/SKILL.md | 155 | ### Step 4: Categorize Findings | COMMENT |
| LOW | .agents/skills/code-review-and-quality/SKILL.md | 169 | ### Step 5: Verify the Verification | COMMENT |
| LOW | .agents/skills/code-simplification/SKILL.md | 110 | ### Step 1: Understand Before Touching (Chesterton's Fence) | COMMENT |
| LOW | .agents/skills/code-simplification/SKILL.md | 126 | ### Step 2: Identify Simplification Opportunities | COMMENT |
| LOW | .agents/skills/code-simplification/SKILL.md | 160 | ### Step 3: Apply Changes Incrementally | COMMENT |
| LOW | .agents/skills/code-simplification/SKILL.md | 176 | ### Step 4: Verify the Result | COMMENT |
| LOW | .agents/skills/performance-optimization/SKILL.md | 40 | ### Step 1: Measure | COMMENT |
| LOW | .agents/skills/performance-optimization/SKILL.md | 101 | ### Step 2: Identify the Bottleneck | COMMENT |
| LOW | .agents/skills/performance-optimization/SKILL.md | 123 | ### Step 3: Fix Common Anti-Patterns | COMMENT |
| LOW⚡ | examples/functions/klaviyo-campaign-send/README.md | 403 | ### Step 1: Content Creation | COMMENT |
| LOW⚡ | examples/functions/klaviyo-campaign-send/README.md | 407 | ### Step 2: Campaign Creation | COMMENT |
| LOW⚡ | examples/functions/klaviyo-campaign-send/README.md | 411 | ### Step 3: Campaign Review | COMMENT |
| LOW⚡ | examples/functions/klaviyo-campaign-send/README.md | 415 | ### Step 4: Campaign Send | COMMENT |
| LOW | …y/src/core/preview/components/SanityDefaultPreview.tsx | 121 | // NOTE: This function exists because the previews provides options | COMMENT |
| LOW⚡ | …core/store/document/document-pair/checkoutPair.test.ts | 2047 | // Step 1: Mutate the draft — this sets firstMutationReceivedAt | COMMENT |
| LOW⚡ | …core/store/document/document-pair/checkoutPair.test.ts | 2050 | // Step 2: Advance time significantly (simulating a long gap before reconnection) | COMMENT |
| LOW⚡ | …core/store/document/document-pair/checkoutPair.test.ts | 2053 | // Step 3: Inject a snapshot event — simulates reconnection resetting the document | COMMENT |
| LOW⚡ | …core/store/document/document-pair/checkoutPair.test.ts | 2061 | // Step 4: Fresh commit subject for the new mutation | COMMENT |
| LOW⚡ | …core/store/document/document-pair/checkoutPair.test.ts | 2065 | // Step 5: Mutate again AFTER the snapshot and commit | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | …sanity/src/core/studio/__tests__/AuthBoundary.test.tsx | 491 | // We filter mock calls to the event under test so the assertions are robust | COMMENT |
| MEDIUM | …src/core/scheduled-publishing/utils/getErrorMessage.ts | 5 | // this is used in place of `instanceof` so the matching can be more robust and | COMMENT |
| MEDIUM | packages/sanity/src/core/hooks/useTimeZone.tsx | 410 | // this is used in place of `instanceof` so the matching can be more robust and | COMMENT |
| MEDIUM | …omponents/confirmDeleteDialog/useReferringDocuments.ts | 24 | // this is used in place of `instanceof` so the matching can be more robust and | COMMENT |
| MEDIUM | .github/workflows/release-latest.yml | 214 | # lockfile and packs it for HEAD's harness. It is for trees that no longer | COMMENT |
| LOW | .github/workflows/test.yml | 7 | # just add labeling to allow for full test suite running | COMMENT |
| MEDIUM | .github/workflows/bench.yml | 15 | # report neutral, anything else is a harness bug (flake resistance rule 6) | COMMENT |
| MEDIUM | .github/workflows/bench.yml | 70 | # worktree of HEAD's harness against the packed result | COMMENT |
| MEDIUM | .github/workflows/bench.yml | 115 | # product diffs as harness drift | COMMENT |
| MEDIUM | .github/workflows/bench.yml | 148 | # from a branch carrying a newer harness): the tag's commit is | COMMENT |
| MEDIUM | .github/workflows/bench.yml | 187 | # historical commit's packages (with HEAD's harness) instead of | COMMENT |
| MEDIUM | .github/workflows/bench.yml | 278 | # reference outright (keyed on merge-base sha + harness sources). | COMMENT |
| MEDIUM | .github/workflows/bench.yml | 298 | # The reference build is the same harness + scenarios (checked out | COMMENT |
| MEDIUM | .github/workflows/bench.yml | 754 | # improvement - a decided verdict here is harness drift and fails this job | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| CRITICAL | …ity/src/core/comments/utils/buildCommentThreadItems.ts | 79 | parentComment.target.path.selection.value.some((v) => v.text), | CODE |
| CRITICAL | …/src/core/comments-v2/utils/buildCommentThreadItems.ts | 100 | parentComment.target.path.selection.value.some((v) => hasMarkedFragment(v.text)), | CODE |
| CRITICAL | e2e/scripts/flakeReport/classify.test.ts | 114 | report.network.requestHistory.sessionSummary.buckets.push({ | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | dev/auth-test-studio/sanity.config.ts | 4 | // ── Environment toggle ────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | dev/auth-test-studio/sanity.config.ts | 8 | // ── Shared config ─────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | dev/auth-test-studio/sanity.config.ts | 22 | // ── Project configs per environment ───────────────────────────────────────── | COMMENT |
| MEDIUM | dev/auth-test-studio/sanity.config.ts | 36 | // ── SSO provider ──────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | dev/auth-test-studio/sanity.config.ts | 51 | // ── Workspace definitions ─────────────────────────────────────────────────── | COMMENT |
| MEDIUM | e2e/tests/auth/dualAuth.spec.ts | 26 | // ── Cookie-first path (default dual behavior) ────────────────────────────── | COMMENT |
| MEDIUM | e2e/tests/auth/dualAuth.spec.ts | 111 | // ── Token-fallback path ───────────────────────────────────────────────────── | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | examples/functions/klaviyo-campaign-send/README.md | 372 | - Solution: Add `KLAVIYO_API_KEY=your-api-key` to your `.env` file | CODE |
| HIGH | examples/functions/social-media-crosspost/README.md | 224 | DEVTO_API_KEY=your-api-key | CODE |
| HIGH | examples/functions/klaviyo-campaign-create/README.md | 379 | - Solution: Add `KLAVIYO_API_KEY=your-api-key` to your `.env` file | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | …anity/src/core/form/inputs/ObjectInput/ObjectInput.tsx | 94 | // Since the focus event will bubble up to the wrapper, we need to check if the object input is the actual target | COMMENT |
| LOW⚡ | …core/store/document/document-pair/checkoutPair.test.ts | 2047 | // Step 1: Mutate the draft — this sets firstMutationReceivedAt | COMMENT |
| LOW⚡ | …core/store/document/document-pair/checkoutPair.test.ts | 2050 | // Step 2: Advance time significantly (simulating a long gap before reconnection) | COMMENT |
| LOW⚡ | …core/store/document/document-pair/checkoutPair.test.ts | 2053 | // Step 3: Inject a snapshot event — simulates reconnection resetting the document | COMMENT |
| LOW⚡ | …core/store/document/document-pair/checkoutPair.test.ts | 2061 | // Step 4: Fresh commit subject for the new mutation | COMMENT |
| LOW⚡ | …core/store/document/document-pair/checkoutPair.test.ts | 2065 | // Step 5: Mutate again AFTER the snapshot and commit | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | …ty/src/core/studio/workspaceLoader/WorkspaceLoader.tsx | 153 | // TODO: implement this | COMMENT |
| LOW | …ty/src/core/studio/workspaceLoader/WorkspaceLoader.tsx | 156 | //TODO: implement config error screen - a story has been created for this | COMMENT |
| LOW | …/sanity/src/core/store/events/getDocumentAtRevision.ts | 89 | // TODO: Handle error | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | packages/@sanity/types/src/schema/define.ts | 336 | * ## Example usage | COMMENT |
| LOW | …anity/src/core/studio/copyPaste/__test__/mockClient.ts | 58 | // Example usage: | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | .github/workflows/typedoc.yml | 66 | # Check if the file was generated successfully | COMMENT |
| LOW | .github/actions/check-path-only/action.yml | 57 | # Check if all changed files are in the specified path | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | …skills/playwright-best-practices/core/configuration.md | 18 | npx playwright init # scaffold config + first test | CODE |