{"$schema":"https://json-schema.org/draft/2020-12/schema","$id":"https://generativespotting.com/gspot.schema.json","title":"gspot.toml","description":"The settings of gspot for one repository.","type":"object","properties":{"level":{"$ref":"#/$defs/__schema0"},"allowed_words":{"$ref":"#/$defs/__schema2"},"tool_timeout_seconds":{"$ref":"#/$defs/__schema6"},"test_files":{"$ref":"#/$defs/__schema8"},"configurations":{"$ref":"#/$defs/__schema11"},"removed_configurations":{"$ref":"#/$defs/__schema13"},"scope":{"$ref":"#/$defs/__schema15","description":"Settings for one folder: its configurations and the tables that differ from the root."},"format":{"$ref":"#/$defs/__schema234","description":"Indentation, line width, quotes, and line endings for every formatter, with overrides for some paths."},"limits":{"$ref":"#/$defs/__schema43","description":"Size and complexity limits for files and functions, with values per language."},"naming":{"$ref":"#/$defs/__schema247","description":"Banned words, case, and length for the names of files, folders, and identifiers, with values per language."},"cloudflare":{"$ref":"#/$defs/__schema111","description":"The file that holds the generated Cloudflare binding types, and its interface name."},"coverage":{"$ref":"#/$defs/__schema256","description":"The lowest test coverage that the test checks accept."},"dependencies":{"$ref":"#/$defs/__schema123","description":"How many days a new release waits before an install picks it up, and the registries that lockfiles may use."},"docs":{"$ref":"#/$defs/__schema259","description":"Headings that documentation may not use, and URLs that the link check accepts."},"drizzle":{"$ref":"#/$defs/__schema131","description":"The names of Drizzle clients in your code."},"javascript":{"$ref":"#/$defs/__schema132","description":"The script files, which may print to the console and exit."},"trpc":{"$ref":"#/$defs/__schema134","description":"The files that declare tRPC procedures, and the server files that other files import only as types."},"zustand":{"$ref":"#/$defs/__schema137","description":"The files that may create a Zustand store."},"licenses":{"$ref":"#/$defs/__schema261","description":"The licenses that dependencies may have, and single packages accepted with a reason."},"openapi":{"$ref":"#/$defs/__schema140","description":"The committed OpenAPI document, and the command that generates it."},"postgres":{"$ref":"#/$defs/__schema143","description":"The migrations folder, the schemas that clients read, and the migrations that may not change."},"secrets":{"$ref":"#/$defs/__schema144","description":"The env example files, and the functions in your code that read environment variables."},"site":{"$ref":"#/$defs/__schema263","description":"How the site builds, where the built files go, and the size limits of its files."},"spelling":{"$ref":"#/$defs/__schema151","description":"The language of the spelling check, such as en-us or en-gb."},"supabase":{"$ref":"#/$defs/__schema153","description":"The folders of Supabase edge functions, the schemas, and the generated types file."},"translations":{"$ref":"#/$defs/__schema154","description":"The base locale and the folder of message files."},"swift":{"$ref":"#/$defs/__schema155","description":"The Xcode project, scheme, and destination that the Swift build uses."},"repository":{"$ref":"#/$defs/__schema156","description":"The largest file that Git may track, in kilobytes."},"prose":{"$ref":"#/$defs/__schema158","description":"The longest sentence, list item, and paragraph that the prose check accepts."},"duplication":{"$ref":"#/$defs/__schema162","description":"The smallest copy, in lines and tokens, that the duplication check reports."},"xcode":{"$ref":"#/$defs/__schema167","description":"The entitlements that an Xcode project may request."},"tools":{"$ref":"#/$defs/__schema265","description":"Options for single tools, such as lint rule options. gspot writes them into the tool files."},"import_rule":{"$ref":"#/$defs/__schema269","description":"Groups of files in import order: code may import the files of its own rule and of every rule listed above it."},"ignore":{"$ref":"#/$defs/__schema273","description":"Checks and lint rules turned off for some paths or everywhere, each with a reason."},"command_check":{"$ref":"#/$defs/__schema276","description":"Your own commands, run as checks with a stage, a file list, and an output format."},"structure":{"$ref":"#/$defs/__schema294","description":"Whether files may re-export the exports of other files, and which files may read environment variables."},"hooks":{"$ref":"#/$defs/__schema297","description":"Whether gspot install turns on the Git hooks."},"ci":{"$ref":"#/$defs/__schema299","description":"Whether gspot writes a CI workflow, for which provider, and on which systems it runs."},"rules":{"$ref":"#/$defs/__schema309","description":"Whether gspot writes rules for coding agents, and which rule files it leaves out."}},"additionalProperties":false,"examples":[{"level":"recommended"},{"configurations":["typescript","nextjs","markdown"]},{"test_files":["tests/**/*.test.ts"]},{"scope":[{"path":"services/api","configurations":["python","fastapi"]}]},{"configurations":["typescript","python"],"limits":{"function_lines":60,"python":{"file_lines":300}}},{"configurations":["naming"],"naming":{"override":[{"paths":["migrations/**"],"cases":["timestamp-snake"],"reason":"Migration filenames begin with their version."}]}},{"structure":{"environment_readers":["src/environment.ts"]}},{"structure":{"reexports":{"value":"index-only","reason":"The library uses index files to publish its public API."}}},{"configurations":["javascript"],"tools":{"eslint":{"rules":{"no-console":[{"allow":["warn"]}]}}}},{"format":{"indent_width":4,"print_width":100}},{"dependencies":{"min_release_age_days":7}},{"allowed_words":{"value":["Acme"],"reason":"The project uses this product name."}},{"licenses":{"allowed":["MIT","Apache-2.0"]}},{"ignore":[{"check":"javascript/eslint","rule":"no-console","paths":["scripts/**"],"reason":"Scripts print their results."}]},{"command_check":[{"name":"project/notes","command":["node","scripts/check-notes.mjs","{files}"],"paths":["notes/**"],"stage":"commit","summary":"Check project notes"}]},{"hooks":{"enabled":true}},{"ci":{"enabled":true,"provider":"github","operating_systems":["linux"]}},{"rules":{"enabled":true}},{"tool_timeout_seconds":300},{"import_rule":[{"name":"core","paths":["src/core/**"],"can_also_import":[]}]},{"tools":{"prettier":{"extra":{"value":{"proseWrap":"always"},"reason":"Documentation uses reviewed paragraph wrapping."}}}}],"$defs":{"__schema0":{"default":"recommended","description":"Correctness, security, accessibility, type safety, routine formatting, and the project's own declared checks apply at both levels. Level `all` adds checks and rules for word choice, architecture, naming, doc comments, declaration order, API style, and complexity. No level turns on experimental or preview lint rules.","$ref":"#/$defs/__schema1"},"__schema1":{"type":"string","enum":["recommended","all"]},"__schema2":{"description":"Words accepted beyond the shipped spelling list; adding needs a reason.","$ref":"#/$defs/__schema3","default":[]},"__schema3":{"anyOf":[{"$ref":"#/$defs/__schema4"},{"type":"object","properties":{"value":{"description":"Words accepted beyond the shipped spelling list; adding needs a reason.","$ref":"#/$defs/__schema4"},"reason":{"type":"string","description":"Why these entries belong; required when you add an entry."}},"required":["value","reason"],"additionalProperties":false}]},"__schema4":{"type":"array","items":{"$ref":"#/$defs/__schema5"}},"__schema5":{"type":"string","pattern":"^[\\p{L}\\p{N}][\\p{L}\\p{M}\\p{N}_]*(?:[-'’][\\p{L}\\p{M}\\p{N}_]+)*$"},"__schema6":{"default":600,"description":"The time limit in seconds for every tool command, including installation and version reads. Root only.","$ref":"#/$defs/__schema7"},"__schema7":{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991},"__schema8":{"default":["**/test/**","**/tests/**","**/__tests__/**","**/*.test.*","**/*.spec.*","**/test_*.py","**/*_test.py","**/conftest.py","**/Tests/**","**/*Tests.swift"],"description":"Test files. Linters apply their test rules to these files.","$ref":"#/$defs/__schema9"},"__schema9":{"type":"array","items":{"$ref":"#/$defs/__schema10"}},"__schema10":{"type":"string","minLength":1,"pattern":"^(?!!?\\/)(?![\\s\\S]*(?:^!?|\\/)\\.\\.(?:\\/|$))[^\\\\:\\p{Cc}]+$"},"__schema11":{"default":[],"description":"The configurations this repository uses besides the always-selected ones. `gspot init` writes the detected ones here; `gspot add` and `gspot remove` change the list.","$ref":"#/$defs/__schema12"},"__schema12":{"type":"array","items":{"type":"string"}},"__schema13":{"default":[],"description":"Configurations you removed, which detection does not add back; only `gspot add` and `gspot remove` write this list.","$ref":"#/$defs/__schema14"},"__schema14":{"type":"array","items":{"type":"string"}},"__schema15":{"type":"array","items":{"type":"object","properties":{"path":{"description":"The folder of the scope; no two records may name the same folder.","$ref":"#/$defs/__schema10"},"configurations":{"default":[],"description":"Configurations for this folder, on top of the root ones; `gspot add --scope` writes this list.","$ref":"#/$defs/__schema16"},"removed_configurations":{"default":[],"description":"Configurations removed in this folder; only `gspot add` and `gspot remove` write this list.","$ref":"#/$defs/__schema17"},"test_files":{"description":"More test files for this folder, added to the root list.","$ref":"#/$defs/__schema18"},"format":{"type":"object","properties":{"indent_style":{"$ref":"#/$defs/__schema19"},"indent_width":{"$ref":"#/$defs/__schema22"},"print_width":{"$ref":"#/$defs/__schema25"},"line_ending":{"$ref":"#/$defs/__schema28"},"final_newline":{"$ref":"#/$defs/__schema31"},"quotes":{"$ref":"#/$defs/__schema34"},"trailing_commas":{"$ref":"#/$defs/__schema37"},"semicolons":{"$ref":"#/$defs/__schema40"}},"additionalProperties":false},"limits":{"$ref":"#/$defs/__schema43"},"naming":{"type":"object","properties":{"max_characters":{"$ref":"#/$defs/__schema88"},"max_words":{"$ref":"#/$defs/__schema91"},"cases":{"$ref":"#/$defs/__schema94"},"banned_words":{"$ref":"#/$defs/__schema98"},"typescript":{"$ref":"#/$defs/__schema100"},"javascript":{"$ref":"#/$defs/__schema103"},"python":{"$ref":"#/$defs/__schema104"},"swift":{"$ref":"#/$defs/__schema105"},"bash":{"$ref":"#/$defs/__schema106"},"sql":{"$ref":"#/$defs/__schema107"},"css":{"$ref":"#/$defs/__schema108"},"html":{"$ref":"#/$defs/__schema110"}},"additionalProperties":false},"cloudflare":{"$ref":"#/$defs/__schema111"},"coverage":{"type":"object","properties":{"lines":{"$ref":"#/$defs/__schema114"},"branches":{"$ref":"#/$defs/__schema117"},"functions":{"$ref":"#/$defs/__schema119"},"statements":{"$ref":"#/$defs/__schema121"}},"additionalProperties":false},"dependencies":{"$ref":"#/$defs/__schema123"},"docs":{"type":"object","properties":{"allowed_urls":{"$ref":"#/$defs/__schema127"}},"additionalProperties":false},"drizzle":{"$ref":"#/$defs/__schema131"},"javascript":{"$ref":"#/$defs/__schema132"},"trpc":{"$ref":"#/$defs/__schema134"},"zustand":{"$ref":"#/$defs/__schema137"},"licenses":{"type":"object","properties":{"allowed":{"$ref":"#/$defs/__schema139"}},"additionalProperties":false},"openapi":{"$ref":"#/$defs/__schema140"},"postgres":{"$ref":"#/$defs/__schema143"},"secrets":{"$ref":"#/$defs/__schema144"},"site":{"type":"object","properties":{"build_command":{"$ref":"#/$defs/__schema145"},"build_folder":{"$ref":"#/$defs/__schema146"},"allowed_unlisted_pages":{"$ref":"#/$defs/__schema147"}},"additionalProperties":false},"spelling":{"$ref":"#/$defs/__schema151"},"supabase":{"$ref":"#/$defs/__schema153"},"translations":{"$ref":"#/$defs/__schema154"},"swift":{"$ref":"#/$defs/__schema155"},"repository":{"$ref":"#/$defs/__schema156"},"prose":{"$ref":"#/$defs/__schema158"},"duplication":{"$ref":"#/$defs/__schema162"},"xcode":{"$ref":"#/$defs/__schema167"},"tools":{"type":"object","properties":{"hadolint":{"$ref":"#/$defs/__schema169"},"nginx":{"$ref":"#/$defs/__schema171"},"ruff":{"$ref":"#/$defs/__schema172"},"semgrep":{"$ref":"#/$defs/__schema174"},"sqlfluff":{"$ref":"#/$defs/__schema177"},"swiftlint":{"$ref":"#/$defs/__schema179"},"trivy":{"$ref":"#/$defs/__schema181"},"eslint":{"type":"object","properties":{"extra":{"$ref":"#/$defs/__schema183"},"import_extension":{"$ref":"#/$defs/__schema187"},"restricted_imports":{"$ref":"#/$defs/__schema189"},"rules":{"$ref":"#/$defs/__schema191"}},"additionalProperties":false},"commitlint":{"$ref":"#/$defs/__schema197"},"yamllint":{"$ref":"#/$defs/__schema200"},"markdownlint":{"$ref":"#/$defs/__schema208"},"stylelint":{"$ref":"#/$defs/__schema211"},"squawk":{"$ref":"#/$defs/__schema217"},"prettier":{"$ref":"#/$defs/__schema219"},"editorconfig-checker":{"$ref":"#/$defs/__schema221"},"typos":{"$ref":"#/$defs/__schema222"},"shellcheck":{"$ref":"#/$defs/__schema223"},"knip":{"$ref":"#/$defs/__schema224"},"purgecss":{"$ref":"#/$defs/__schema229"},"taplo":{"$ref":"#/$defs/__schema231"}},"additionalProperties":false},"structure":{"type":"object","properties":{"environment_readers":{"$ref":"#/$defs/__schema232"}},"additionalProperties":false}},"required":["path"],"additionalProperties":false}},"__schema16":{"type":"array","items":{"type":"string"}},"__schema17":{"type":"array","items":{"type":"string"}},"__schema18":{"type":"array","items":{"$ref":"#/$defs/__schema10"}},"__schema19":{"default":"space","description":"The character of one indent level: space or tab.","$ref":"#/$defs/__schema20"},"__schema20":{"$ref":"#/$defs/__schema21"},"__schema21":{"type":"string","enum":["space","tab"]},"__schema22":{"default":4,"description":"Spaces per indent level.","$ref":"#/$defs/__schema23"},"__schema23":{"$ref":"#/$defs/__schema24"},"__schema24":{"type":"integer","minimum":1,"maximum":8},"__schema25":{"default":120,"description":"The line width formatters wrap at.","$ref":"#/$defs/__schema26"},"__schema26":{"$ref":"#/$defs/__schema27"},"__schema27":{"type":"integer","minimum":40,"maximum":400},"__schema28":{"default":"lf","description":"The line ending every file uses: lf or crlf.","$ref":"#/$defs/__schema29"},"__schema29":{"$ref":"#/$defs/__schema30"},"__schema30":{"type":"string","enum":["lf","crlf"]},"__schema31":{"default":true,"description":"Whether every file ends with a newline.","$ref":"#/$defs/__schema32"},"__schema32":{"$ref":"#/$defs/__schema33"},"__schema33":{"type":"boolean"},"__schema34":{"default":"single","description":"Single or double, for the languages where a formatter chooses.","$ref":"#/$defs/__schema35"},"__schema35":{"$ref":"#/$defs/__schema36"},"__schema36":{"type":"string","enum":["single","double"]},"__schema37":{"default":"all","description":"Where trailing commas go: all, es5, or none.","$ref":"#/$defs/__schema38"},"__schema38":{"$ref":"#/$defs/__schema39"},"__schema39":{"type":"string","enum":["all","es5","none"]},"__schema40":{"default":true,"description":"Whether JavaScript and TypeScript statements end with semicolons.","$ref":"#/$defs/__schema41"},"__schema41":{"$ref":"#/$defs/__schema42"},"__schema42":{"type":"boolean"},"__schema43":{"$ref":"#/$defs/limits"},"limits":{"type":"object","properties":{"file_lines":{"$ref":"#/$defs/__schema44"},"function_lines":{"$ref":"#/$defs/__schema47"},"function_parameters":{"$ref":"#/$defs/__schema49"},"function_statements":{"$ref":"#/$defs/__schema51"},"block_nesting":{"$ref":"#/$defs/__schema53"},"callback_nesting":{"$ref":"#/$defs/__schema55"},"cognitive_complexity":{"$ref":"#/$defs/__schema57"},"cyclomatic_complexity":{"$ref":"#/$defs/__schema59"},"function_branches":{"$ref":"#/$defs/__schema61"},"function_returns":{"$ref":"#/$defs/__schema63"},"function_assignments":{"$ref":"#/$defs/__schema65"},"closure_lines":{"$ref":"#/$defs/__schema67"},"type_lines":{"$ref":"#/$defs/__schema69"},"index_exports":{"$ref":"#/$defs/__schema71"},"trivial_function_statements":{"$ref":"#/$defs/__schema73"},"shared_prefix_files":{"description":"The number of siblings sharing a name prefix that makes a finding.","$ref":"#/$defs/__schema76","default":2},"typescript":{"type":"object","properties":{"file_lines":{"$ref":"#/$defs/__schema77"},"function_lines":{"$ref":"#/$defs/__schema78"},"function_parameters":{"$ref":"#/$defs/__schema79"},"function_statements":{"$ref":"#/$defs/__schema80"},"block_nesting":{"$ref":"#/$defs/__schema81"},"callback_nesting":{"$ref":"#/$defs/__schema82"},"cognitive_complexity":{"$ref":"#/$defs/__schema83"},"cyclomatic_complexity":{"$ref":"#/$defs/__schema84"},"index_exports":{"$ref":"#/$defs/__schema85"},"trivial_function_statements":{"$ref":"#/$defs/__schema86"}},"additionalProperties":false},"javascript":{"type":"object","properties":{"file_lines":{"$ref":"#/$defs/__schema77"},"function_lines":{"$ref":"#/$defs/__schema78"},"function_parameters":{"$ref":"#/$defs/__schema79"},"function_statements":{"$ref":"#/$defs/__schema80"},"block_nesting":{"$ref":"#/$defs/__schema81"},"callback_nesting":{"$ref":"#/$defs/__schema82"},"cognitive_complexity":{"$ref":"#/$defs/__schema83"},"cyclomatic_complexity":{"$ref":"#/$defs/__schema84"},"index_exports":{"$ref":"#/$defs/__schema85"},"trivial_function_statements":{"$ref":"#/$defs/__schema86"}},"additionalProperties":false},"python":{"type":"object","properties":{"file_lines":{"$ref":"#/$defs/__schema77"},"function_parameters":{"$ref":"#/$defs/__schema79"},"function_statements":{"$ref":"#/$defs/__schema80"},"cyclomatic_complexity":{"$ref":"#/$defs/__schema84"},"function_branches":{"$ref":"#/$defs/__schema87"},"function_returns":{"$ref":"#/$defs/__schema63"},"trivial_function_statements":{"$ref":"#/$defs/__schema86"}},"additionalProperties":false},"bash":{"type":"object","properties":{"file_lines":{"$ref":"#/$defs/__schema77"},"function_lines":{"$ref":"#/$defs/__schema78"},"block_nesting":{"$ref":"#/$defs/__schema81"},"function_branches":{"$ref":"#/$defs/__schema87"},"function_assignments":{"$ref":"#/$defs/__schema65"},"trivial_function_statements":{"$ref":"#/$defs/__schema86"}},"additionalProperties":false},"swift":{"type":"object","properties":{"file_lines":{"$ref":"#/$defs/__schema77"},"function_lines":{"$ref":"#/$defs/__schema78"},"function_parameters":{"$ref":"#/$defs/__schema79"},"cyclomatic_complexity":{"$ref":"#/$defs/__schema84"},"closure_lines":{"$ref":"#/$defs/__schema67"},"type_lines":{"$ref":"#/$defs/__schema69"},"trivial_function_statements":{"$ref":"#/$defs/__schema86"}},"additionalProperties":false},"sql":{"type":"object","properties":{"file_lines":{"$ref":"#/$defs/__schema77"}},"additionalProperties":false}},"additionalProperties":false},"__schema44":{"description":"The most lines one file may have, not counting blank lines and comment-only lines.","languages":["typescript","javascript","python","swift","sql","bash"],"$ref":"#/$defs/__schema45","default":300},"__schema45":{"anyOf":[{"$ref":"#/$defs/__schema46"},{"type":"object","properties":{"value":{"description":"The most lines one file may have, not counting blank lines and comment-only lines.","$ref":"#/$defs/__schema46"},"reason":{"type":"string","description":"Why this code needs more than the default; required when you raise the value."}},"required":["value","reason"],"additionalProperties":false}]},"__schema46":{"type":"integer","minimum":0,"maximum":9007199254740991},"__schema47":{"description":"The most lines one function may have.","languages":["typescript","javascript","swift","bash"],"$ref":"#/$defs/__schema48","default":60},"__schema48":{"anyOf":[{"$ref":"#/$defs/__schema46"},{"type":"object","properties":{"value":{"description":"The most lines one function may have.","$ref":"#/$defs/__schema46"},"reason":{"type":"string","description":"Why this code needs more than the default; required when you raise the value."}},"required":["value","reason"],"additionalProperties":false}]},"__schema49":{"description":"The most parameters one function may take.","languages":["typescript","javascript","python","swift"],"$ref":"#/$defs/__schema50","default":7},"__schema50":{"anyOf":[{"$ref":"#/$defs/__schema46"},{"type":"object","properties":{"value":{"description":"The most parameters one function may take.","$ref":"#/$defs/__schema46"},"reason":{"type":"string","description":"Why this code needs more than the default; required when you raise the value."}},"required":["value","reason"],"additionalProperties":false}]},"__schema51":{"description":"The most statements one function may have.","languages":["typescript","javascript","python"],"$ref":"#/$defs/__schema52","default":30},"__schema52":{"anyOf":[{"$ref":"#/$defs/__schema46"},{"type":"object","properties":{"value":{"description":"The most statements one function may have.","$ref":"#/$defs/__schema46"},"reason":{"type":"string","description":"Why this code needs more than the default; required when you raise the value."}},"required":["value","reason"],"additionalProperties":false}]},"__schema53":{"description":"How deep blocks may nest inside one function.","languages":["typescript","javascript","bash"],"$ref":"#/$defs/__schema54","default":3},"__schema54":{"anyOf":[{"$ref":"#/$defs/__schema46"},{"type":"object","properties":{"value":{"description":"How deep blocks may nest inside one function.","$ref":"#/$defs/__schema46"},"reason":{"type":"string","description":"Why this code needs more than the default; required when you raise the value."}},"required":["value","reason"],"additionalProperties":false}]},"__schema55":{"description":"How deep callbacks may nest.","languages":["typescript","javascript"],"$ref":"#/$defs/__schema56","default":3},"__schema56":{"anyOf":[{"$ref":"#/$defs/__schema46"},{"type":"object","properties":{"value":{"description":"How deep callbacks may nest.","$ref":"#/$defs/__schema46"},"reason":{"type":"string","description":"Why this code needs more than the default; required when you raise the value."}},"required":["value","reason"],"additionalProperties":false}]},"__schema57":{"description":"The highest sonarjs cognitive score one function may have; the score grows as the function gets harder to follow.","languages":["typescript","javascript"],"$ref":"#/$defs/__schema58","default":8},"__schema58":{"anyOf":[{"$ref":"#/$defs/__schema46"},{"type":"object","properties":{"value":{"description":"The highest sonarjs cognitive score one function may have; the score grows as the function gets harder to follow.","$ref":"#/$defs/__schema46"},"reason":{"type":"string","description":"Why this code needs more than the default; required when you raise the value."}},"required":["value","reason"],"additionalProperties":false}]},"__schema59":{"description":"The most paths that may run through one function.","languages":["typescript","javascript","python","swift"],"$ref":"#/$defs/__schema60","default":8},"__schema60":{"anyOf":[{"$ref":"#/$defs/__schema46"},{"type":"object","properties":{"value":{"description":"The most paths that may run through one function.","$ref":"#/$defs/__schema46"},"reason":{"type":"string","description":"Why this code needs more than the default; required when you raise the value."}},"required":["value","reason"],"additionalProperties":false}]},"__schema61":{"description":"The most branches one function may have.","languages":["python","bash"],"$ref":"#/$defs/__schema62","default":8},"__schema62":{"anyOf":[{"$ref":"#/$defs/__schema46"},{"type":"object","properties":{"value":{"description":"The most branches one function may have.","$ref":"#/$defs/__schema46"},"reason":{"type":"string","description":"Why this code needs more than the default; required when you raise the value."}},"required":["value","reason"],"additionalProperties":false}]},"__schema63":{"description":"The most return statements one function may have.","languages":["python"],"$ref":"#/$defs/__schema64","default":4},"__schema64":{"anyOf":[{"$ref":"#/$defs/__schema46"},{"type":"object","properties":{"value":{"description":"The most return statements one function may have.","$ref":"#/$defs/__schema46"},"reason":{"type":"string","description":"Why this code needs more than the default; required when you raise the value."}},"required":["value","reason"],"additionalProperties":false}]},"__schema65":{"description":"The most variable assignments one shell function may make.","languages":["bash"],"$ref":"#/$defs/__schema66","default":8},"__schema66":{"anyOf":[{"$ref":"#/$defs/__schema46"},{"type":"object","properties":{"value":{"description":"The most variable assignments one shell function may make.","$ref":"#/$defs/__schema46"},"reason":{"type":"string","description":"Why this code needs more than the default; required when you raise the value."}},"required":["value","reason"],"additionalProperties":false}]},"__schema67":{"description":"The most lines one Swift closure may have.","languages":["swift"],"$ref":"#/$defs/__schema68","default":60},"__schema68":{"anyOf":[{"$ref":"#/$defs/__schema46"},{"type":"object","properties":{"value":{"description":"The most lines one Swift closure may have.","$ref":"#/$defs/__schema46"},"reason":{"type":"string","description":"Why this code needs more than the default; required when you raise the value."}},"required":["value","reason"],"additionalProperties":false}]},"__schema69":{"description":"The most lines one Swift type body may have.","languages":["swift"],"$ref":"#/$defs/__schema70","default":300},"__schema70":{"anyOf":[{"$ref":"#/$defs/__schema46"},{"type":"object","properties":{"value":{"description":"The most lines one Swift type body may have.","$ref":"#/$defs/__schema46"},"reason":{"type":"string","description":"Why this code needs more than the default; required when you raise the value."}},"required":["value","reason"],"additionalProperties":false}]},"__schema71":{"description":"The most re-exports one index file may hold.","languages":["typescript","javascript"],"$ref":"#/$defs/__schema72","default":20},"__schema72":{"anyOf":[{"$ref":"#/$defs/__schema46"},{"type":"object","properties":{"value":{"description":"The most re-exports one index file may hold.","$ref":"#/$defs/__schema46"},"reason":{"type":"string","description":"Why this code needs more than the default; required when you raise the value."}},"required":["value","reason"],"additionalProperties":false}]},"__schema73":{"description":"Report functions with this many statements or fewer; any whole number from 1 up works, a higher number reports more functions, and limits.`<language>` sets it for one language.","languages":["typescript","javascript","python","swift","bash"],"$ref":"#/$defs/__schema74","default":2},"__schema74":{"anyOf":[{"$ref":"#/$defs/__schema75"},{"type":"object","properties":{"value":{"description":"Report functions with this many statements or fewer; any whole number from 1 up works, a higher number reports more functions, and limits.`<language>` sets it for one language.","$ref":"#/$defs/__schema75"},"reason":{"type":"string","description":"Why this code needs less than the default; required when you lower the value."}},"required":["value","reason"],"additionalProperties":false}]},"__schema75":{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991},"__schema76":{"anyOf":[{"$ref":"#/$defs/__schema46"},{"type":"object","properties":{"value":{"description":"The number of siblings sharing a name prefix that makes a finding.","$ref":"#/$defs/__schema46"},"reason":{"type":"string","description":"Why this code needs more than the default; required when you raise the value."}},"required":["value","reason"],"additionalProperties":false}]},"__schema77":{"$ref":"#/$defs/__schema44"},"__schema78":{"$ref":"#/$defs/__schema47"},"__schema79":{"$ref":"#/$defs/__schema49"},"__schema80":{"$ref":"#/$defs/__schema51"},"__schema81":{"$ref":"#/$defs/__schema53"},"__schema82":{"$ref":"#/$defs/__schema55"},"__schema83":{"$ref":"#/$defs/__schema57"},"__schema84":{"$ref":"#/$defs/__schema59"},"__schema85":{"$ref":"#/$defs/__schema71"},"__schema86":{"$ref":"#/$defs/__schema73"},"__schema87":{"$ref":"#/$defs/__schema61"},"__schema88":{"description":"The most characters one identifier may have.","languages":["typescript","javascript","python","bash","swift","sql"],"categories":["files","folders","types","functions","parameters","variables","properties"],"$ref":"#/$defs/__schema89","default":35},"__schema89":{"anyOf":[{"$ref":"#/$defs/__schema90"},{"type":"object","properties":{"value":{"description":"The most characters one identifier may have.","$ref":"#/$defs/__schema90"},"reason":{"type":"string","description":"Why this code needs more than the default; required when you raise the value."}},"required":["value","reason"],"additionalProperties":false}]},"__schema90":{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991},"__schema91":{"description":"The most words one identifier may have.","languages":["typescript","javascript","python","bash","swift","sql"],"categories":["files","folders","types","functions","parameters","variables","properties"],"$ref":"#/$defs/__schema92","default":4},"__schema92":{"anyOf":[{"$ref":"#/$defs/__schema93"},{"type":"object","properties":{"value":{"description":"The most words one identifier may have.","$ref":"#/$defs/__schema93"},"reason":{"type":"string","description":"Why this code needs more than the default; required when you raise the value."}},"required":["value","reason"],"additionalProperties":false}]},"__schema93":{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991},"__schema94":{"description":"The case patterns that one identifier category accepts: camel, pascal, kebab, snake, upper-snake, pascal-extension (String+Format.swift), or timestamp-snake (20260103120000_create_users.sql). Ruff checks the case of Python classes, functions, and parameters, and SwiftLint checks Swift types, variables, parameters, and enum cases; this setting covers the rest.","languages":["typescript","javascript","python","swift","bash","sql"],"categories":["files","folders","types","functions","parameters","variables","properties"],"$ref":"#/$defs/__schema95","default":[]},"__schema95":{"anyOf":[{"$ref":"#/$defs/__schema96"},{"type":"object","properties":{"value":{"description":"The case patterns that one identifier category accepts: camel, pascal, kebab, snake, upper-snake, pascal-extension (String+Format.swift), or timestamp-snake (20260103120000_create_users.sql). Ruff checks the case of Python classes, functions, and parameters, and SwiftLint checks Swift types, variables, parameters, and enum cases; this setting covers the rest.","$ref":"#/$defs/__schema96"},"reason":{"type":"string","description":"Why these entries belong; required when you add an entry."}},"required":["value","reason"],"additionalProperties":false}]},"__schema96":{"type":"array","items":{"$ref":"#/$defs/__schema97"}},"__schema97":{"type":"string","enum":["camel","pascal","pascal-extension","kebab","snake","upper-snake","timestamp-snake"]},"__schema98":{"default":[],"description":"Words this repository bans in identifiers, beyond the shipped groups.","$ref":"#/$defs/__schema99"},"__schema99":{"type":"array","items":{"type":"string"}},"__schema100":{"$ref":"#/$defs/namingLanguage"},"namingLanguage":{"type":"object","properties":{"max_characters":{"$ref":"#/$defs/__schema88"},"max_words":{"$ref":"#/$defs/__schema91"},"cases":{"$ref":"#/$defs/__schema94"},"files":{"$ref":"#/$defs/__schema101"},"folders":{"$ref":"#/$defs/__schema102"},"types":{"$ref":"#/$defs/namingCategory"},"functions":{"$ref":"#/$defs/namingCategory"},"parameters":{"$ref":"#/$defs/namingCategory"},"variables":{"$ref":"#/$defs/namingCategory"},"properties":{"$ref":"#/$defs/namingCategory"}},"additionalProperties":false},"__schema101":{"$ref":"#/$defs/namingCategory"},"namingCategory":{"type":"object","properties":{"max_characters":{"$ref":"#/$defs/__schema88"},"max_words":{"$ref":"#/$defs/__schema91"},"cases":{"$ref":"#/$defs/__schema94"}},"additionalProperties":false},"__schema102":{"$ref":"#/$defs/namingCategory"},"__schema103":{"$ref":"#/$defs/namingLanguage"},"__schema104":{"$ref":"#/$defs/namingLanguage"},"__schema105":{"$ref":"#/$defs/namingLanguage"},"__schema106":{"type":"object","properties":{"max_characters":{"$ref":"#/$defs/__schema88"},"max_words":{"$ref":"#/$defs/__schema91"},"cases":{"$ref":"#/$defs/__schema94"},"files":{"$ref":"#/$defs/__schema101"},"folders":{"$ref":"#/$defs/__schema102"},"functions":{"$ref":"#/$defs/namingCategory"},"variables":{"$ref":"#/$defs/namingCategory"}},"additionalProperties":false},"__schema107":{"type":"object","properties":{"max_characters":{"$ref":"#/$defs/__schema88"},"max_words":{"$ref":"#/$defs/__schema91"},"cases":{"$ref":"#/$defs/__schema94"},"files":{"$ref":"#/$defs/__schema101"},"folders":{"$ref":"#/$defs/__schema102"},"functions":{"$ref":"#/$defs/namingCategory"},"parameters":{"$ref":"#/$defs/namingCategory"}},"additionalProperties":false},"__schema108":{"$ref":"#/$defs/__schema109"},"__schema109":{"type":"object","properties":{"max_characters":{"$ref":"#/$defs/__schema88"},"max_words":{"$ref":"#/$defs/__schema91"},"cases":{"$ref":"#/$defs/__schema94"},"files":{"$ref":"#/$defs/__schema101"},"folders":{"$ref":"#/$defs/__schema102"}},"additionalProperties":false},"__schema110":{"$ref":"#/$defs/__schema109"},"__schema111":{"type":"object","properties":{"types_file":{"default":"worker-configuration.d.ts","description":"Tracked Worker environment types file, relative to the repository root.","$ref":"#/$defs/__schema112"},"types_interface":{"default":"Env","description":"Environment interface name passed to wrangler types; OpenNext uses CloudflareEnv.","$ref":"#/$defs/__schema113"}},"additionalProperties":false},"__schema112":{"$ref":"#/$defs/__schema10"},"__schema113":{"type":"string","minLength":1},"__schema114":{"description":"The minimum percentage of source lines covered by tests.","$ref":"#/$defs/__schema115","default":0},"__schema115":{"anyOf":[{"$ref":"#/$defs/__schema116"},{"type":"object","properties":{"value":{"description":"The minimum percentage of source lines covered by tests.","$ref":"#/$defs/__schema116"},"reason":{"type":"string","description":"Why this code needs less than the default; required when you lower the value."}},"required":["value","reason"],"additionalProperties":false}]},"__schema116":{"type":"number","minimum":0,"maximum":100},"__schema117":{"description":"The minimum percentage of source branches covered by tests.","$ref":"#/$defs/__schema118","default":0},"__schema118":{"anyOf":[{"$ref":"#/$defs/__schema116"},{"type":"object","properties":{"value":{"description":"The minimum percentage of source branches covered by tests.","$ref":"#/$defs/__schema116"},"reason":{"type":"string","description":"Why this code needs less than the default; required when you lower the value."}},"required":["value","reason"],"additionalProperties":false}]},"__schema119":{"description":"The minimum percentage of source functions covered by tests.","$ref":"#/$defs/__schema120","default":0},"__schema120":{"anyOf":[{"$ref":"#/$defs/__schema116"},{"type":"object","properties":{"value":{"description":"The minimum percentage of source functions covered by tests.","$ref":"#/$defs/__schema116"},"reason":{"type":"string","description":"Why this code needs less than the default; required when you lower the value."}},"required":["value","reason"],"additionalProperties":false}]},"__schema121":{"description":"The minimum percentage of source statements covered by tests.","$ref":"#/$defs/__schema122","default":0},"__schema122":{"anyOf":[{"$ref":"#/$defs/__schema116"},{"type":"object","properties":{"value":{"description":"The minimum percentage of source statements covered by tests.","$ref":"#/$defs/__schema116"},"reason":{"type":"string","description":"Why this code needs less than the default; required when you lower the value."}},"required":["value","reason"],"additionalProperties":false}]},"__schema123":{"type":"object","properties":{"min_release_age_days":{"description":"How many days a new release waits before gspot installs it as one of its tools in .gspot.","$ref":"#/$defs/__schema124","default":7},"allowed_registries":{"description":"The hosts a lockfile may resolve packages from.","$ref":"#/$defs/__schema125","default":["registry.npmjs.org","registry.yarnpkg.com"]},"bun_scanner":{"description":"The npm package that Bun runs as its install security scanner. Without it, Bun runs no scanner.","$ref":"#/$defs/__schema113"}},"additionalProperties":false},"__schema124":{"anyOf":[{"$ref":"#/$defs/__schema46"},{"type":"object","properties":{"value":{"description":"How many days a new release waits before gspot installs it as one of its tools in .gspot.","$ref":"#/$defs/__schema46"},"reason":{"type":"string","description":"Why this code needs less than the default; required when you lower the value."}},"required":["value","reason"],"additionalProperties":false}]},"__schema125":{"anyOf":[{"$ref":"#/$defs/__schema126"},{"type":"object","properties":{"value":{"description":"The hosts a lockfile may resolve packages from.","$ref":"#/$defs/__schema126"},"reason":{"type":"string","description":"Why these entries belong; required when you add an entry."}},"required":["value","reason"],"additionalProperties":false}]},"__schema126":{"type":"array","items":{"$ref":"#/$defs/__schema113"}},"__schema127":{"description":"Allowed URL patterns; additions need a reason for the whole list.","$ref":"#/$defs/__schema128","default":[]},"__schema128":{"anyOf":[{"$ref":"#/$defs/__schema129"},{"type":"object","properties":{"value":{"description":"Allowed URL patterns; additions need a reason for the whole list.","$ref":"#/$defs/__schema129"},"reason":{"type":"string","description":"Why these entries belong; required when you add an entry."}},"required":["value","reason"],"additionalProperties":false}]},"__schema129":{"type":"array","items":{"$ref":"#/$defs/__schema130"}},"__schema130":{"type":"string"},"__schema131":{"type":"object","properties":{"client_names":{"default":["db"],"description":"The Drizzle client identifiers checked for update and delete operations without a where clause.","$ref":"#/$defs/__schema126"}},"additionalProperties":false},"__schema132":{"type":"object","properties":{"script_files":{"default":["scripts/**","**/*.config.{js,mjs,cjs,ts}"],"description":"Script files, which may print to the console and call process.exit.","$ref":"#/$defs/__schema133"}},"additionalProperties":false},"__schema133":{"type":"array","items":{"$ref":"#/$defs/__schema10"}},"__schema134":{"type":"object","properties":{"router_files":{"default":["**/routers/**","**/*router*.ts","**/trpc/**"],"description":"The files that declare tRPC procedures.","$ref":"#/$defs/__schema135"},"server_files":{"default":[],"description":"The server files that other files of a tRPC scope may import only as types; empty turns the rule off.","$ref":"#/$defs/__schema136"}},"additionalProperties":false},"__schema135":{"type":"array","items":{"$ref":"#/$defs/__schema10"}},"__schema136":{"type":"array","items":{"$ref":"#/$defs/__schema10"}},"__schema137":{"type":"object","properties":{"store_files":{"default":["**/store.*","**/stores/*","**/store/*","**/*.store.*"],"description":"The files that may create a store.","$ref":"#/$defs/__schema138"}},"additionalProperties":false},"__schema138":{"type":"array","items":{"$ref":"#/$defs/__schema10"}},"__schema139":{"default":[],"description":"The SPDX license IDs a dependency may report.","$ref":"#/$defs/__schema126"},"__schema140":{"type":"object","properties":{"document":{"description":"The committed OpenAPI document, relative to the repository root, which init fills in when it finds one; without it, the OpenAPI checks do not run.","$ref":"#/$defs/__schema10"},"generate_command":{"description":"The command that writes the OpenAPI document from the code, run in the project scope folder.","$ref":"#/$defs/__schema141"}},"additionalProperties":false},"__schema141":{"minItems":1,"type":"array","items":{"$ref":"#/$defs/__schema142"},"prefixItems":[{"type":"string","minLength":1}]},"__schema142":{"type":"string"},"__schema143":{"type":"object","properties":{"client_schemas":{"default":[],"description":"The schemas clients reach, where every table needs row level security.","$ref":"#/$defs/__schema126"},"frozen_through":{"default":"none","description":"The last migration version that has run everywhere (none, all, or a version); Squawk skips those migrations, and they may not change.","$ref":"#/$defs/__schema113"},"migrations_folder":{"description":"The migrations folder, relative to the repository root; without it, the checks use the migration files of this configuration.","$ref":"#/$defs/__schema10"}},"additionalProperties":false},"__schema144":{"type":"object","properties":{"env_examples":{"default":[".env.example",".env.template",".env.sample",".dev.vars.example"],"description":"The env example filenames to search for environment keys; a key may appear in any one of them.","$ref":"#/$defs/__schema126"},"environment_functions":{"default":[],"description":"Functions of this project that read environment variables, such as read_env. The env-examples check reads the keys they take.","$ref":"#/$defs/__schema126"}},"additionalProperties":false},"__schema145":{"default":["npm","run","build"],"description":"The command that builds the site. Without it, gspot runs the build script of the package manager.","$ref":"#/$defs/__schema141"},"__schema146":{"default":"dist","description":"The folder the build writes.","$ref":"#/$defs/__schema112"},"__schema147":{"description":"Built pages the sitemap leaves out on purpose.","$ref":"#/$defs/__schema148","default":["404.html"]},"__schema148":{"anyOf":[{"$ref":"#/$defs/__schema149"},{"type":"object","properties":{"value":{"description":"Built pages the sitemap leaves out on purpose.","$ref":"#/$defs/__schema149"},"reason":{"type":"string","description":"Why these entries belong; required when you add an entry."}},"required":["value","reason"],"additionalProperties":false}]},"__schema149":{"type":"array","items":{"$ref":"#/$defs/__schema150"}},"__schema150":{"$ref":"#/$defs/__schema10"},"__schema151":{"type":"object","properties":{"locale":{"default":"en-us","description":"The English locale typos checks against: en, en-us, en-gb, en-ca, or en-au.","$ref":"#/$defs/__schema152"}},"additionalProperties":false},"__schema152":{"type":"string","enum":["en","en-us","en-gb","en-au","en-ca"]},"__schema153":{"type":"object","properties":{"functions_folder":{"default":"supabase/functions","description":"The folder, relative to the repository root, with one folder for each edge function; the default starts from the project scope.","$ref":"#/$defs/__schema10"},"schemas":{"default":["public"],"description":"The database schemas to include in generated types.","$ref":"#/$defs/__schema126"},"types_file":{"description":"The committed database types file, relative to the repository root; without it, no type comparison runs.","$ref":"#/$defs/__schema112"}},"additionalProperties":false},"__schema154":{"type":"object","properties":{"base_locale":{"default":"en","description":"The locale whose message keys every other locale must contain.","$ref":"#/$defs/__schema113"},"messages_folder":{"description":"The folder of the `<locale>.json` message files, relative to the repository root.","$ref":"#/$defs/__schema10"}},"additionalProperties":false},"__schema155":{"type":"object","properties":{"xcode_project":{"description":"The Xcode project or workspace, relative to the repository root, which init fills in when it finds one; without it, the checks use the Swift package.","$ref":"#/$defs/__schema10"},"xcode_scheme":{"description":"The shared scheme the build, the analyzer, and Periphery use.","$ref":"#/$defs/__schema113"},"xcode_destination":{"default":"generic/platform=iOS Simulator","description":"The xcodebuild destination.","$ref":"#/$defs/__schema113"}},"additionalProperties":false},"__schema156":{"type":"object","properties":{"max_file_kilobytes":{"description":"The largest file, in kilobytes, that Git may track without Git LFS or a linguist-generated or linguist-vendored mark in .gitattributes.","$ref":"#/$defs/__schema157","default":1024}},"additionalProperties":false},"__schema157":{"anyOf":[{"$ref":"#/$defs/__schema46"},{"type":"object","properties":{"value":{"description":"The largest file, in kilobytes, that Git may track without Git LFS or a linguist-generated or linguist-vendored mark in .gitattributes.","$ref":"#/$defs/__schema46"},"reason":{"type":"string","description":"Why this code needs more than the default; required when you raise the value."}},"required":["value","reason"],"additionalProperties":false}]},"__schema158":{"type":"object","properties":{"max_sentence_words":{"description":"The most words one sentence of documentation may have.","$ref":"#/$defs/__schema159","default":30},"max_list_item_words":{"description":"The most words one list item may have.","$ref":"#/$defs/__schema160","default":45},"max_paragraph_sentences":{"description":"The most sentences one paragraph may have.","$ref":"#/$defs/__schema161","default":6}},"additionalProperties":false},"__schema159":{"anyOf":[{"$ref":"#/$defs/__schema46"},{"type":"object","properties":{"value":{"description":"The most words one sentence of documentation may have.","$ref":"#/$defs/__schema46"},"reason":{"type":"string","description":"Why this code needs more than the default; required when you raise the value."}},"required":["value","reason"],"additionalProperties":false}]},"__schema160":{"anyOf":[{"$ref":"#/$defs/__schema46"},{"type":"object","properties":{"value":{"description":"The most words one list item may have.","$ref":"#/$defs/__schema46"},"reason":{"type":"string","description":"Why this code needs more than the default; required when you raise the value."}},"required":["value","reason"],"additionalProperties":false}]},"__schema161":{"anyOf":[{"$ref":"#/$defs/__schema46"},{"type":"object","properties":{"value":{"description":"The most sentences one paragraph may have.","$ref":"#/$defs/__schema46"},"reason":{"type":"string","description":"Why this code needs more than the default; required when you raise the value."}},"required":["value","reason"],"additionalProperties":false}]},"__schema162":{"type":"object","properties":{"min_lines":{"description":"The fewest lines a copied block has before it counts.","$ref":"#/$defs/__schema163","default":8},"min_tokens":{"description":"The fewest tokens a copied block has before it counts.","$ref":"#/$defs/__schema165","default":40}},"additionalProperties":false},"__schema163":{"anyOf":[{"$ref":"#/$defs/__schema164"},{"type":"object","properties":{"value":{"description":"The fewest lines a copied block has before it counts.","$ref":"#/$defs/__schema164"},"reason":{"type":"string","description":"Why this code needs more than the default; required when you raise the value."}},"required":["value","reason"],"additionalProperties":false}]},"__schema164":{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991},"__schema165":{"anyOf":[{"$ref":"#/$defs/__schema166"},{"type":"object","properties":{"value":{"description":"The fewest tokens a copied block has before it counts.","$ref":"#/$defs/__schema166"},"reason":{"type":"string","description":"Why this code needs more than the default; required when you raise the value."}},"required":["value","reason"],"additionalProperties":false}]},"__schema166":{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991},"__schema167":{"type":"object","properties":{"allowed_entitlements":{"default":[],"description":"The entitlements the app may hold; empty turns the check off.","$ref":"#/$defs/__schema168"}},"additionalProperties":false},"__schema168":{"type":"array","items":{"type":"string"}},"__schema169":{"type":"object","properties":{"trusted_registries":{"default":[],"description":"The registries a base image may come from; empty allows any.","$ref":"#/$defs/__schema170"}},"additionalProperties":false},"__schema170":{"type":"array","items":{"type":"string"}},"__schema171":{"type":"object","properties":{"image":{"default":"nginx:1.29.3-alpine","description":"The image nginx -t runs in; name the one the deployment uses.","$ref":"#/$defs/__schema113"}},"additionalProperties":false},"__schema172":{"type":"object","properties":{"docstring_convention":{"description":"The docstring style that Ruff and pydoclint check: google, numpy, or pep257.","$ref":"#/$defs/__schema173"}},"additionalProperties":false},"__schema173":{"type":"string","enum":["google","numpy","pep257"]},"__schema174":{"type":"object","properties":{"registry_packs":{"default":["p/owasp-top-ten"],"description":"The registry packs the manual registry check runs.","$ref":"#/$defs/__schema175"},"rule_files":{"default":[],"description":"Rule files or folders of the repository that Semgrep runs beside the shipped packs.","$ref":"#/$defs/__schema176"}},"additionalProperties":false},"__schema175":{"type":"array","items":{"type":"string"}},"__schema176":{"type":"array","items":{"$ref":"#/$defs/__schema10"}},"__schema177":{"type":"object","properties":{"dialect":{"default":"ansi","description":"The SQL dialect that SQLFluff parses, such as postgres. The postgres configuration sets it.","$ref":"#/$defs/__schema178"}},"additionalProperties":false},"__schema178":{"type":"string","pattern":"^[a-z][a-z0-9_]*$"},"__schema179":{"type":"object","properties":{"always_keep_imports":{"default":[],"description":"Imports the analyzer keeps although it sees no use of them.","$ref":"#/$defs/__schema180"}},"additionalProperties":false},"__schema180":{"type":"array","items":{"type":"string"}},"__schema181":{"type":"object","properties":{"severity":{"default":["HIGH","CRITICAL"],"description":"The severities Trivy reports.","$ref":"#/$defs/__schema182"}},"additionalProperties":false},"__schema182":{"type":"array","items":{"type":"string"}},"__schema183":{"description":"Extra options passed to the tool as written.","$ref":"#/$defs/__schema184"},"__schema184":{"type":"object","properties":{"value":{"type":"object","propertyNames":{"$ref":"#/$defs/__schema185"},"additionalProperties":{"$ref":"#/$defs/__schema186"},"description":"Extra options passed to the tool as written."},"reason":{"type":"string","description":"Why these entries belong; required when you add an entry."}},"required":["value","reason"],"additionalProperties":false},"__schema185":{"type":"string"},"__schema186":{},"__schema187":{"default":"js","description":"The import suffix in this scope: js for compiled ESM, ts for Deno and Bun, or extensionless for code that a bundler builds.","$ref":"#/$defs/__schema188"},"__schema188":{"type":"string","enum":["js","ts","extensionless"]},"__schema189":{"default":[],"description":"Imports that this repository refuses, each with a name and a message.","$ref":"#/$defs/__schema190"},"__schema190":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string","description":"The import to refuse."},"message":{"type":"string","description":"What to import instead."}},"required":["name","message"],"additionalProperties":false}},"__schema191":{"default":{},"description":"Option arrays by ESLint rule ID, without a severity, which apply only where the level turns the rule on; accept findings with gspot ignore --rule.","$ref":"#/$defs/__schema192"},"__schema192":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{"anyOf":[{"maxItems":0,"type":"array","items":{"$ref":"#/$defs/__schema193"}},{"type":"array","prefixItems":[{"anyOf":[{"type":"string","pattern":"^(?!(?:off|warn|error)$)[\\s\\S]*$"},{"type":"number"},{"type":"boolean"},{"type":"null"},{"type":"array","items":{"$ref":"#/$defs/__schema194"}},{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{"$ref":"#/$defs/__schema195"}}]}],"items":{"$ref":"#/$defs/__schema196"},"minItems":1}]}},"__schema193":{"not":{}},"__schema194":{"anyOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"null"},{"type":"array","items":{"$ref":"#/$defs/__schema194"}},{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{"$ref":"#/$defs/__schema194"}}]},"__schema195":{"anyOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"null"},{"type":"array","items":{"$ref":"#/$defs/__schema195"}},{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{"$ref":"#/$defs/__schema195"}}]},"__schema196":{"anyOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"null"},{"type":"array","items":{"$ref":"#/$defs/__schema196"}},{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{"$ref":"#/$defs/__schema196"}}]},"__schema197":{"type":"object","properties":{"types":{"default":["feat","fix","refactor","perf","docs","test","build","ci","chore","style","revert"],"description":"The commit types the type-enum rule allows.","$ref":"#/$defs/__schema126"},"scopes":{"default":[],"description":"Commit scopes that the scope-enum rule accepts, and a message may leave out its scope. When empty, gspot uses the last segment of each project scope path, or no list without project scopes.","$ref":"#/$defs/__schema126"},"rules":{"default":{},"description":"Options for active commitlint rules, by rule name: an always/never condition and an optional value, without a severity; the level decides which rules run. Ignore a finding with gspot ignore commits/commitlint --rule `<rule>` --reason `<why>`.","$ref":"#/$defs/__schema198"}},"additionalProperties":false},"__schema198":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{"type":"array","prefixItems":[{"type":"string","enum":["always","never"]},{"$ref":"#/$defs/__schema199"}],"items":false,"minItems":1,"maxItems":2}},"__schema199":{"anyOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"null"},{"type":"array","items":{"$ref":"#/$defs/__schema199"}},{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{"$ref":"#/$defs/__schema199"}}]},"__schema200":{"type":"object","properties":{"rules":{"default":{},"description":"Option tables for active YAML rules; the level decides which rules run, and [format] sets the width. Ignore a finding with gspot ignore files/yamllint --rule `<rule>` --reason `<why>`.","$ref":"#/$defs/__schema201"}},"additionalProperties":false},"__schema201":{"type":"object","properties":{"indentation":{"$ref":"#/$defs/__schema202"}},"additionalProperties":{"$ref":"#/$defs/__schema207"}},"__schema202":{"type":"object","properties":{"level":{"$ref":"#/$defs/__schema203"},"ignore":{"$ref":"#/$defs/__schema204"},"ignore-from-file":{"$ref":"#/$defs/__schema205"},"spaces":{"type":"string","const":"consistent"}},"additionalProperties":{"$ref":"#/$defs/__schema206"}},"__schema203":{"type":"string","const":"error"},"__schema204":{"not":{}},"__schema205":{"not":{}},"__schema206":{"anyOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"null"},{"type":"array","items":{"$ref":"#/$defs/__schema206"}},{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{"$ref":"#/$defs/__schema206"}}]},"__schema207":{"type":"object","properties":{"level":{"$ref":"#/$defs/__schema203"},"ignore":{"$ref":"#/$defs/__schema204"},"ignore-from-file":{"$ref":"#/$defs/__schema205"}},"additionalProperties":{"$ref":"#/$defs/__schema206"}},"__schema208":{"type":"object","properties":{"rules":{"default":{},"description":"Option tables by Markdown rule ID, such as MD024; the level decides which rules run. Ignore a finding with gspot ignore markdown/markdownlint --rule `<rule>` --reason `<why>`.","$ref":"#/$defs/__schema209"}},"additionalProperties":false},"__schema209":{"type":"object","propertyNames":{"type":"string","pattern":"^MD\\d{3}$"},"additionalProperties":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{"$ref":"#/$defs/__schema210"}}},"__schema210":{"anyOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"null"},{"type":"array","items":{"$ref":"#/$defs/__schema210"}},{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{"$ref":"#/$defs/__schema210"}}]},"__schema211":{"type":"object","properties":{"rules":{"default":{},"description":"Options for the Stylelint rules that run at the level, which stay errors. Accept a finding with gspot ignore css/stylelint --rule `<rule>` --reason `<why>`.","$ref":"#/$defs/__schema212"}},"additionalProperties":false},"__schema212":{"type":"object","propertyNames":{"$ref":"#/$defs/__schema113"},"additionalProperties":{"anyOf":[{"$ref":"#/$defs/__schema213"},{"type":"array","prefixItems":[{"anyOf":[{"$ref":"#/$defs/__schema213"},{"type":"array","items":{"$ref":"#/$defs/__schema216"}}]},{"$ref":"#/$defs/__schema214"}],"items":false,"minItems":1,"maxItems":2}]}},"__schema213":{"anyOf":[{"type":"boolean","const":true},{"$ref":"#/$defs/__schema113"},{"type":"number"},{"$ref":"#/$defs/__schema214"}]},"__schema214":{"type":"object","properties":{"severity":{"type":"string","const":"error"}},"additionalProperties":{"$ref":"#/$defs/__schema215"}},"__schema215":{"anyOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"null"},{"type":"array","items":{"$ref":"#/$defs/__schema215"}},{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{"$ref":"#/$defs/__schema215"}}]},"__schema216":{"anyOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"null"},{"type":"array","items":{"$ref":"#/$defs/__schema216"}},{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{"$ref":"#/$defs/__schema216"}}]},"__schema217":{"type":"object","properties":{"assume_in_transaction":{"default":false,"description":"Whether the migration runner wraps every migration in a transaction; the supabase configuration turns it on.","$ref":"#/$defs/__schema218"}},"additionalProperties":false},"__schema218":{"type":"boolean"},"__schema219":{"$ref":"#/$defs/__schema220"},"__schema220":{"type":"object","properties":{"extra":{"$ref":"#/$defs/__schema183"}},"additionalProperties":false},"__schema221":{"type":"object","properties":{"extra":{"description":"Extra options passed to the tool as written. These options go into .editorconfig.","$ref":"#/$defs/__schema183"}},"additionalProperties":false},"__schema222":{"$ref":"#/$defs/__schema220"},"__schema223":{"$ref":"#/$defs/__schema220"},"__schema224":{"type":"object","properties":{"extra":{"$ref":"#/$defs/__schema183"},"entry":{"default":[],"description":"Entry points knip starts from beyond the ones the framework configuration declares.","$ref":"#/$defs/__schema225"},"ignore_dependencies":{"description":"Exact package names that knip does not report as unused; new names need a reason, and a scope list applies to that project only.","$ref":"#/$defs/__schema226","default":[]}},"additionalProperties":false},"__schema225":{"type":"array","items":{"$ref":"#/$defs/__schema10"}},"__schema226":{"anyOf":[{"$ref":"#/$defs/__schema227"},{"type":"object","properties":{"value":{"description":"Exact package names that knip does not report as unused; new names need a reason, and a scope list applies to that project only.","$ref":"#/$defs/__schema227"},"reason":{"type":"string","description":"Why these entries belong; required when you add an entry."}},"required":["value","reason"],"additionalProperties":false}]},"__schema227":{"type":"array","items":{"$ref":"#/$defs/__schema228"}},"__schema228":{"type":"string","minLength":1,"pattern":"^[^*+\\\\(|{^$\\s]+$"},"__schema229":{"type":"object","properties":{"safelist":{"description":"Class names a script adds at run time: the names and the reason.","$ref":"#/$defs/__schema230","default":[]}},"additionalProperties":false},"__schema230":{"anyOf":[{"$ref":"#/$defs/__schema126"},{"type":"object","properties":{"value":{"description":"Class names a script adds at run time: the names and the reason.","$ref":"#/$defs/__schema126"},"reason":{"type":"string","description":"Why these entries belong; required when you add an entry."}},"required":["value","reason"],"additionalProperties":false}]},"__schema231":{"$ref":"#/$defs/__schema220"},"__schema232":{"default":[],"description":"The files that may read environment variables; other files get the values passed in.","$ref":"#/$defs/__schema233"},"__schema233":{"type":"array","items":{"$ref":"#/$defs/__schema10"}},"__schema234":{"type":"object","properties":{"indent_style":{"$ref":"#/$defs/__schema19"},"indent_width":{"$ref":"#/$defs/__schema22"},"print_width":{"$ref":"#/$defs/__schema25"},"line_ending":{"$ref":"#/$defs/__schema28"},"final_newline":{"$ref":"#/$defs/__schema31"},"quotes":{"$ref":"#/$defs/__schema34"},"trailing_commas":{"$ref":"#/$defs/__schema37"},"semicolons":{"$ref":"#/$defs/__schema40"},"override":{"default":[],"description":"Formatting options for repository-relative paths, in order.","$ref":"#/$defs/__schema235"}},"additionalProperties":false},"__schema235":{"type":"array","items":{"type":"object","properties":{"paths":{"$ref":"#/$defs/__schema236"},"indent_style":{"$ref":"#/$defs/__schema239"},"indent_width":{"$ref":"#/$defs/__schema240"},"print_width":{"$ref":"#/$defs/__schema241"},"line_ending":{"$ref":"#/$defs/__schema242"},"final_newline":{"$ref":"#/$defs/__schema243"},"quotes":{"$ref":"#/$defs/__schema244"},"trailing_commas":{"$ref":"#/$defs/__schema245"},"semicolons":{"$ref":"#/$defs/__schema246"}},"required":["paths"],"additionalProperties":false,"minProperties":2}},"__schema236":{"type":"array","items":{"$ref":"#/$defs/__schema10"},"description":"The files these formatting values apply to.","$ref":"#/$defs/__schema237"},"__schema237":{"minItems":1,"$ref":"#/$defs/__schema238"},"__schema238":{"type":"array","items":{"$ref":"#/$defs/__schema10"}},"__schema239":{"description":"The character of one indent level: space or tab.","$ref":"#/$defs/__schema20"},"__schema240":{"description":"Spaces per indent level.","$ref":"#/$defs/__schema23"},"__schema241":{"description":"The line width formatters wrap at.","$ref":"#/$defs/__schema26"},"__schema242":{"description":"The line ending every file uses: lf or crlf.","$ref":"#/$defs/__schema29"},"__schema243":{"description":"Whether every file ends with a newline.","$ref":"#/$defs/__schema32"},"__schema244":{"description":"Single or double, for the languages where a formatter chooses.","$ref":"#/$defs/__schema35"},"__schema245":{"description":"Where trailing commas go: all, es5, or none.","$ref":"#/$defs/__schema38"},"__schema246":{"description":"Whether JavaScript and TypeScript statements end with semicolons.","$ref":"#/$defs/__schema41"},"__schema247":{"type":"object","properties":{"max_characters":{"$ref":"#/$defs/__schema88"},"max_words":{"$ref":"#/$defs/__schema91"},"cases":{"$ref":"#/$defs/__schema94"},"banned_words":{"$ref":"#/$defs/__schema98"},"override":{"default":[],"description":"Naming rules for repository-relative paths, in order; each record has its reason.","$ref":"#/$defs/__schema248"},"typescript":{"$ref":"#/$defs/__schema100"},"javascript":{"$ref":"#/$defs/__schema103"},"python":{"$ref":"#/$defs/__schema104"},"swift":{"$ref":"#/$defs/__schema105"},"bash":{"$ref":"#/$defs/__schema106"},"sql":{"$ref":"#/$defs/__schema107"},"css":{"$ref":"#/$defs/__schema108"},"html":{"$ref":"#/$defs/__schema110"}},"additionalProperties":false},"__schema248":{"type":"array","items":{"type":"object","properties":{"paths":{"default":["**"],"description":"Where the override applies.","$ref":"#/$defs/__schema237"},"languages":{"description":"The languages it applies to.","$ref":"#/$defs/__schema249"},"categories":{"description":"The kinds of name it applies to. Unknown kinds are refused.","$ref":"#/$defs/__schema250"},"ignored_prefix":{"description":"A prefix not counted as a word, such as ^test_.","$ref":"#/$defs/__schema251"},"allow_digits":{"default":false,"description":"Accept digits in names.","$ref":"#/$defs/__schema252"},"allow_repeated_words":{"default":false,"description":"Accept a word twice in one name.","$ref":"#/$defs/__schema253"},"allowed_names":{"description":"Names accepted despite the naming rules.","$ref":"#/$defs/__schema254"},"cases":{"description":"The cases accepted here.","$ref":"#/$defs/__schema255"},"reason":{"type":"string","description":"Why these names may break the rules."}},"required":["reason"],"additionalProperties":false}},"__schema249":{"type":"array","items":{"type":"string","enum":["typescript","javascript","python","bash","swift","sql","css","html"]}},"__schema250":{"type":"array","items":{"type":"string","enum":["schemas","tables","columns","indexes","triggers","policies","functions","parameters","classes","exceptions","methods","variables","constants","attributes","type_aliases","types","properties","enum_cases","files","folders","modules","packages","path_parameters"]}},"__schema251":{"type":"string"},"__schema252":{"type":"boolean"},"__schema253":{"type":"boolean"},"__schema254":{"type":"array","items":{"type":"string"}},"__schema255":{"type":"array","items":{"type":"string","enum":["camel","pascal","pascal-extension","kebab","snake","upper-snake","timestamp-snake"]}},"__schema256":{"type":"object","properties":{"lines":{"$ref":"#/$defs/__schema114"},"branches":{"$ref":"#/$defs/__schema117"},"functions":{"$ref":"#/$defs/__schema119"},"statements":{"$ref":"#/$defs/__schema121"},"swift_target":{"default":[],"description":"Line coverage floors for named Swift targets.","$ref":"#/$defs/__schema257"}},"additionalProperties":false},"__schema257":{"type":"array","items":{"type":"object","properties":{"name":{"description":"A Swift target named in the coverage report.","$ref":"#/$defs/__schema113"},"lines":{"description":"The least share of lines that the target must cover, in place of `coverage.lines`.","$ref":"#/$defs/__schema116"},"reason":{"description":"Why this target may cover less.","$ref":"#/$defs/__schema258"}},"required":["name","lines"],"additionalProperties":false}},"__schema258":{"type":"string"},"__schema259":{"type":"object","properties":{"banned_headings":{"default":[],"description":"Headings this repository bans beyond the shipped list.","$ref":"#/$defs/__schema260"},"allowed_urls":{"$ref":"#/$defs/__schema127"}},"additionalProperties":false},"__schema260":{"type":"array","items":{"type":"string"}},"__schema261":{"type":"object","properties":{"allowed":{"$ref":"#/$defs/__schema139"},"allowed_package":{"default":[],"description":"Packages accepted under a license outside the list: name, exact version, and reason.","$ref":"#/$defs/__schema262"}},"additionalProperties":false},"__schema262":{"type":"array","items":{"type":"object","properties":{"name":{"description":"The package name, such as `lightningcss` or `@fontsource-variable/geist`.","$ref":"#/$defs/__schema113"},"version":{"type":"string","pattern":"^\\d[^\\s@<>=~^*|,]*$","description":"The exact installed version; gspot reports a record that matches no installed package."},"reason":{"type":"string","description":"Why you accept its license; name the license here."}},"required":["name","version","reason"],"additionalProperties":false}},"__schema263":{"type":"object","properties":{"build_command":{"$ref":"#/$defs/__schema145"},"build_folder":{"$ref":"#/$defs/__schema146"},"allowed_unlisted_pages":{"$ref":"#/$defs/__schema147"},"size_limit":{"default":[],"description":"Size limits: the built paths, and the most kilobytes they may weigh compressed.","$ref":"#/$defs/__schema264"}},"additionalProperties":false},"__schema264":{"type":"array","items":{"type":"object","properties":{"paths":{"minItems":1,"type":"array","items":{"$ref":"#/$defs/__schema112"},"description":"Built files, such as `docs/dist/_astro/*.js`; the size check runs only when a record exists."},"kilobytes":{"description":"The most they may weigh together, compressed.","$ref":"#/$defs/__schema46"}},"required":["paths","kilobytes"],"additionalProperties":false}},"__schema265":{"type":"object","properties":{"hadolint":{"$ref":"#/$defs/__schema169"},"nginx":{"$ref":"#/$defs/__schema171"},"ruff":{"$ref":"#/$defs/__schema172"},"semgrep":{"$ref":"#/$defs/__schema174"},"sqlfluff":{"$ref":"#/$defs/__schema177"},"swiftlint":{"$ref":"#/$defs/__schema179"},"trivy":{"$ref":"#/$defs/__schema181"},"eslint":{"type":"object","properties":{"extra":{"$ref":"#/$defs/__schema183"},"import_extension":{"$ref":"#/$defs/__schema187"},"restricted_imports":{"$ref":"#/$defs/__schema189"},"rules":{"$ref":"#/$defs/__schema191"},"override":{"default":[],"description":"Lint rule options for repository-relative paths, in order, with ignores applied last.","$ref":"#/$defs/__schema266"}},"additionalProperties":false},"commitlint":{"$ref":"#/$defs/__schema197"},"yamllint":{"$ref":"#/$defs/__schema200"},"markdownlint":{"$ref":"#/$defs/__schema208"},"stylelint":{"$ref":"#/$defs/__schema211"},"squawk":{"$ref":"#/$defs/__schema217"},"prettier":{"$ref":"#/$defs/__schema219"},"editorconfig-checker":{"$ref":"#/$defs/__schema221"},"typos":{"$ref":"#/$defs/__schema222"},"shellcheck":{"$ref":"#/$defs/__schema223"},"knip":{"$ref":"#/$defs/__schema224"},"purgecss":{"$ref":"#/$defs/__schema229"},"v8r":{"type":"object","properties":{"schema":{"default":[],"description":"File patterns mapped to schema URLs, for files that the SchemaStore catalog does not know.","$ref":"#/$defs/__schema268"}},"additionalProperties":false},"taplo":{"$ref":"#/$defs/__schema231"}},"additionalProperties":false},"__schema266":{"type":"array","items":{"type":"object","properties":{"paths":{"type":"array","items":{"$ref":"#/$defs/__schema10"},"description":"The files that these lint rule options apply to.","$ref":"#/$defs/__schema237"},"rules":{"description":"Lint rule options for these files.","$ref":"#/$defs/__schema192"},"runtime":{"description":"The runtime of these files, such as `serviceworker` (the name the `globals` package uses).","$ref":"#/$defs/__schema267"}},"required":["paths"],"additionalProperties":false}},"__schema267":{"type":"string","enum":["amd","applescript","astro","atomtest","audioWorklet","browser","builtin","bunBuiltin","chai","commonjs","couch","denoBuiltin","devtools","embertest","es2015","es2016","es2017","es2018","es2019","es2020","es2021","es2022","es2023","es2024","es2025","es2026","es2027","es3","es5","greasemonkey","jasmine","jest","jquery","meteor","mocha","mongo","nashorn","node","nodeBuiltin","paintWorklet","phantomjs","prototypejs","protractor","qunit","react-native","rhino","rspack","serviceworker","shared-node-browser","sharedWorker","shelljs","svelte","vitest","vue","webextensions","webpack","worker","wsh","yui"]},"__schema268":{"type":"array","items":{"type":"object","properties":{"paths":{"type":"array","items":{"$ref":"#/$defs/__schema10"},"description":"Files SchemaStore does not know.","$ref":"#/$defs/__schema237"},"url":{"type":"string","format":"uri","description":"The JSON Schema for them."}},"required":["paths","url"],"additionalProperties":false}},"__schema269":{"default":[],"description":"Code may import its own files and the files of every import rule listed above it, never below. can_also_import names import rules listed below it.","$ref":"#/$defs/__schema270"},"__schema270":{"type":"array","items":{"$ref":"#/$defs/__schema271"}},"__schema271":{"type":"object","properties":{"name":{"type":"string","minLength":1,"description":"The name that other import rules use in can_also_import."},"paths":{"type":"array","items":{"$ref":"#/$defs/__schema10"},"description":"The files of the import rule.","$ref":"#/$defs/__schema237"},"can_also_import":{"default":[],"description":"The import rules listed below this one that its files may import.","$ref":"#/$defs/__schema272"}},"required":["name","paths"],"additionalProperties":false},"__schema272":{"type":"array","items":{"type":"string"}},"__schema273":{"type":"array","items":{"type":"object","properties":{"check":{"type":"string","description":"The check whose findings you accept: a shipped check or a command check."},"rule":{"description":"One lint rule of that check.","$ref":"#/$defs/__schema274"},"paths":{"description":"Where the ignore applies.","$ref":"#/$defs/__schema238"},"reason":{"type":"string","description":"Why you accept the findings."},"until":{"description":"Stop applying this ignore on this date, in YYYY-MM-DD format (UTC).","$ref":"#/$defs/__schema275"}},"required":["check","reason"],"additionalProperties":false}},"__schema274":{"type":"string"},"__schema275":{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},"__schema276":{"type":"array","items":{"type":"object","properties":{"command":{"description":"The executable and arguments to run on selected files.","$ref":"#/$defs/__schema141"},"stage":{"type":"string","enum":["commit","push","manual"],"description":"The earliest stage that runs this check."},"summary":{"description":"A short description shown in check listings.","$ref":"#/$defs/__schema277"},"help":{"description":"Instructions for resolving findings.","$ref":"#/$defs/__schema278"},"fix":{"description":"The executable and arguments that correct findings.","$ref":"#/$defs/__schema141"},"exit_codes":{"description":"Nonzero statuses that mean findings from command and fix. Other nonzero statuses mean execution failure.","$ref":"#/$defs/__schema279"},"output":{"description":"The parser and location patterns used to read findings.","$ref":"#/$defs/__schema280"},"name":{"type":"string","minLength":1,"description":"The check ID that `--only` and `[[ignore]] check` use, which may not match a shipped check."},"paths":{"type":"array","items":{"$ref":"#/$defs/__schema10"},"description":"Repository-relative glob patterns selecting inputs.","$ref":"#/$defs/__schema237"}},"required":["command","stage","name","paths"],"additionalProperties":false}},"__schema277":{"type":"string"},"__schema278":{"type":"string"},"__schema279":{"type":"array","items":{"type":"integer","minimum":1,"maximum":255}},"__schema280":{"type":"object","properties":{"format":{"anyOf":[{"$ref":"#/$defs/__schema281"},{"$ref":"#/$defs/__schema282"},{"$ref":"#/$defs/__schema283"},{"$ref":"#/$defs/__schema284"},{"$ref":"#/$defs/__schema285"},{"$ref":"#/$defs/__schema286"},{"$ref":"#/$defs/__schema287"},{"$ref":"#/$defs/__schema288"},{"$ref":"#/$defs/__schema289"},{"$ref":"#/$defs/__schema290"},{"$ref":"#/$defs/__schema291"}],"description":"How gspot reads the output: json, regex, grouped, lines, none, or the format of a named tool."},"items":{"type":"string","description":"For json: the path to the list of findings."},"children":{"type":"string","description":"For json: the field of each item that holds its findings."},"line_base":{"anyOf":[{"$ref":"#/$defs/__schema292"},{"$ref":"#/$defs/__schema293"}],"description":"Whether the tool counts lines from 0 or 1."},"file_type":{"default":"path","type":"string","enum":["path","link","history"],"description":"What the file field holds: a path in the repository, a link target, or a path in a past commit."},"fields":{"type":"object","properties":{"file":{"type":"string","description":"For json: the field that holds the file."},"line":{"type":"string","description":"For json: the field that holds the line."},"column":{"type":"string","description":"For json: the field that holds the column."},"rule":{"type":"string","description":"For json: the field that holds the lint rule."},"message":{"type":"string","description":"For json: the field that holds the message."},"fixable":{"type":"string","description":"For json: the field that is set when the tool can fix the finding."}},"additionalProperties":false},"pattern":{"type":"string","description":"For regex: the pattern for one finding, with named groups file, line, column, rule, and message."},"file_pattern":{"type":"string","description":"For regex: the pattern for a line that names the file of the findings below it."},"fixable":{"type":"string","description":"For regex: the pattern that marks a fixable finding."},"message":{"type":"string","description":"For regex: the pattern for the message."}},"required":["format"],"additionalProperties":false},"__schema281":{"type":"string","const":"regex","description":"Read findings from lines matched by pattern and its named file, line, column, rule, and message groups."},"__schema282":{"type":"string","const":"grouped","description":"Read a file heading matched by file_pattern, followed by findings matched by pattern."},"__schema283":{"type":"string","const":"sarif","description":"Read SARIF results, rule metadata, source locations, and fixes."},"__schema284":{"type":"string","const":"knip","description":"Read Knip JSON issue categories and source positions."},"__schema285":{"type":"string","const":"semgrep","description":"Read Semgrep JSON results, locations, rule IDs, messages, and fixes provided by Semgrep."},"__schema286":{"type":"string","const":"trufflehog","description":"Read TruffleHog JSON findings while withholding raw secret output."},"__schema287":{"type":"string","const":"typos","description":"Read typos JSON and convert byte offsets to character columns."},"__schema288":{"type":"string","const":"markdownlint","description":"Read markdownlint result objects and their rule and source locations."},"__schema289":{"type":"string","const":"json","description":"Read JSON findings using items, children, and fields to select report entries."},"__schema290":{"type":"string","const":"lines","description":"Report each nonempty output line as a finding without a source location."},"__schema291":{"type":"string","const":"none","description":"Use the exit status without parsing output into findings."},"__schema292":{"type":"number","const":0},"__schema293":{"type":"number","const":1},"__schema294":{"type":"object","properties":{"reexports":{"description":"Where re-exports may go: none, or an index file that re-exports other files.","$ref":"#/$defs/__schema295","default":"none"},"environment_readers":{"$ref":"#/$defs/__schema232"}},"additionalProperties":false},"__schema295":{"anyOf":[{"$ref":"#/$defs/__schema296"},{"type":"object","properties":{"value":{"description":"Where re-exports may go: none, or an index file that re-exports other files.","$ref":"#/$defs/__schema296"},"reason":{"type":"string","description":"Why these entries belong; required when you add an entry."}},"required":["value","reason"],"additionalProperties":false}]},"__schema296":{"type":"string","enum":["none","index-only"]},"__schema297":{"type":"object","properties":{"enabled":{"default":false,"description":"Install and run the configured Git hooks.","$ref":"#/$defs/__schema298"}},"additionalProperties":false},"__schema298":{"type":"boolean"},"__schema299":{"allOf":[{"if":{"properties":{"provider":{"const":"gitlab"}},"required":["provider"]},"then":{"not":{"required":["operating_systems"]}}}],"$ref":"#/$defs/__schema300"},"__schema300":{"type":"object","properties":{"enabled":{"$ref":"#/$defs/__schema301"},"provider":{"$ref":"#/$defs/__schema303"},"setup_command":{"$ref":"#/$defs/__schema305"},"operating_systems":{"$ref":"#/$defs/__schema306"}},"additionalProperties":false},"__schema301":{"default":false,"description":"Whether gspot writes a CI workflow; set it at the root only.","$ref":"#/$defs/__schema302"},"__schema302":{"type":"boolean"},"__schema303":{"default":"github","description":"Which CI service gets the workflow; set it at the root only.","$ref":"#/$defs/__schema304"},"__schema304":{"type":"string","enum":["github","gitlab"]},"__schema305":{"description":"A command that CI runs before `gspot install`, such as `npm ci`; set it at the root only.","$ref":"#/$defs/__schema141"},"__schema306":{"description":"The operating systems of the CI jobs. GitHub only; refused with provider = \"gitlab\".","default":["linux"],"$ref":"#/$defs/__schema307"},"__schema307":{"minItems":1,"type":"array","items":{"$ref":"#/$defs/__schema308"}},"__schema308":{"type":"string","enum":["macos","linux","windows"]},"__schema309":{"default":{},"type":"object","properties":{"enabled":{"default":true,"description":"Write the rules and the AGENTS.md block.","$ref":"#/$defs/__schema310"},"exclude":{"default":[],"description":"Rule files or folders under .gspot/configurations/ to leave out, such as .gspot/configurations/general/engineering/rules/PLANNING.md.","$ref":"#/$defs/__schema311"}},"additionalProperties":false},"__schema310":{"type":"boolean"},"__schema311":{"type":"array","items":{"type":"string"}}}}
