Use when adding, changing or graduating a task in bench/suite/ (the nightly multi-language mini-suite), when adding a supported language or toolchain, or when a bench round stop can be reproduced by a small task.
中文简介正在准备中。当前显示原文说明。
Use when adding a language to BAKED (a new entry of SUPPORTED_LANGUAGES) or filling the `none` rows of a supported one (gate detector, test runner, formatter, reviewer, the per-language issues
中文简介正在准备中。当前显示原文说明。
实测评分 未实测
查看安装方法安装前可以查看交给 AI 代理的指令内容。
A language in BAKED is not one switch. It is a row in about twenty per-language tables plus a dozen detectors and parsers that still keep their own lists. Every earlier language fix that was written against the one run that exposed it left the same defect in the other languages (see Lessons). This skill is the checklist that keeps a language pull request from stepping on the same rakes again.
One pull request per language (or per toolchain of a language), on a feature/<language>-language-support branch from fresh main, closing its issue. Remove the issue's deferred label when you take it.
file:line references may be stale: the tables moved to LanguageRecords in #1717 and #1733, and #1488, #1749 and #1753 filled several rows since. Re-check every claimed gap on current main.grep -rn "^\s*<language>: none(" src. Each none(reason) is either a real "this language has no such thing" (keep it) or a "not done yet" (the reason names an issue or says "yet"/"not read"/"not recognized"): those are the gaps.LanguageRecords. They do not fail the compiler or the parity test when a language is missing, so check each by hand.tests/language-parity.test.ts (bun run test tests/language-parity.test.ts); a golden that still says null for a row you fill must change in the same branch.tests/language-parity.test.ts ask for them)| Record | File | What a row holds |
|---|---|---|
TEST_CONVENTIONS, TEST_MARKERS, MANIFEST_NAMES | src/core/intelligence/language-traits.ts | test file names; what a test file holds when the name is a plain word (#1848); manifests by file name |
GATE_TOOLCHAINS + TOOLCHAIN_GATES | src/core/workflows/gates.ts | which detectors the language gets, in order |
FILE_FORMATTERS | src/core/workflows/format-written.ts | the formatter gate's file-scoped check and write forms, range form and probe |
TEST_RUNNERS (+ TEST_COUNTERS, FAILED_TESTS) | src/core/verification/output-counts.ts | test count with ran, failed test names, a stable failure signature |
TEST_GATES | src/core/workflows/test-gates.ts | build gates a test file declares (features, tags) and the flag that turns them on |
DEPENDENCY_MANIFESTS | src/core/workflows/quality/manifests.ts | dependency reader with fields (executable fields, #1793) |
ENTRY_POINTS | src/core/verification/entry-points.ts | how a command the project installs is launched |
PLACEHOLDERS | src/core/workflows/quality/builtin-rules.ts | unimplemented-body idioms, and not the language's legitimate look-alikes |
MASK_SYNTAX | src/core/workflows/quality/code-mask.ts | comments and strings, including raw strings and long brackets |
CALL_SYNTAX | src/core/intelligence/call-context.ts | call and import spellings |
NUMERIC_LIMITS | src/core/verification/edge-inputs.ts | the integer and float edges worth a probe |
MUTATION_TOOLS, PROPERTY_LIBRARIES, PACKAGE_CONTENTS | src/core/workflows/quality/ | mutation tool, property libraries, package build |
INLINE_HARNESS + TEMPLATES (keyed by test framework) | src/core/workflows/acceptance-rows-inline.ts, acceptance-rows.ts | acceptance rows of a new test framework, both modes (#1763) |
Every row you fill gets its golden in tests/fixtures/languages/<language>.json.
EXT_TO_LANGUAGE, BARE_FILENAME_TO_LANGUAGE (src/core/intelligence/types.ts), the tree-sitter queries (backends/tree-sitter.ts), imports in repo-map.ts. A grammar that tree-sitter-wasms lacks goes in vendor/tree-sitter/ with a README row (source, version, how it was built) and its license file; resolveWasm, the bundles and postinstall.mjs already copy that folder (#1499). Vendor the .wasm, never an npm grammar package that runs node-gyp on install.CHECKED_GRAMMARS in src/core/intelligence/syntax-check.ts. Add a grammar only after it parses real projects without false errors: run it over the files of a few real packages that the language's own compiler accepts (luac -p, ruby -c), measured on a real corpus (published packages of the language), not on the fixture. A grammar that lags the language stays out, with a comment and the count (Kotlin; Ruby 5 of 2,618 files; Lua 374 of 1,133; tree-sitter-powershell 27 of 98 real scripts, #1498).SERVER_CANDIDATES and SERVER_PROJECT_STATE in backends/lsp/server-registry.ts, the installer (PROJECT_INDICATORS) and the LSP language set in backends/lsp/index.ts. A server shipped as a folder that a runtime starts (PowerShell Editor Services) goes in SERVER_BUNDLES under its Mason package name, with the runtime's arguments built from the install folder; the installer keeps a package without binaries whole in lsp-servers/NAME (#2125). A server that writes project files into the checkout (jdtls .project, #1508) gets its files in SERVER_PROJECT_STATE.detectToolchain in src/core/tools/project.ts, read by tools/auto-format.ts; build it from the gate detector (composerGates, luaGates) so the agent runs what the checks run, and give the formatter a stdin probe in formatProbeCommand, or an edited file is never formatted. Read the tool's config from every place the tool reads it (ruff in pyproject.toml, #1537; prettier in package.json, rustfmt's edition, #1681).ProjectLanguage, detectLanguages, LANGUAGE_FILE in src/core/workflows/language.ts, and the language-reviewer profile text (src/core/agents/profiles/builtin.ts) for the language's platform pitfalls.STATIC_COMMAND, WHOLE_UNIT_COMMAND, fixerCommand and the style-claim lists in src/core/workflows/check-policy.ts (a tool named in FORMAT_CLAIM or LINT_CLAIM also needs FORMAT_COMMAND or LINT_COMMAND, or a passing gate never shows the claim; PHP missed it, #1495); isTestCheck in quality/mutation.ts (a check-mode flag such as Pint's --test is not a test run); the program behind an interpreter or runner in toolchainCommand (src/core/workflows/toolchain.ts); CHECK_COMMAND in src/core/verification/criteria-cases.ts (#1427); noTestsCollected and MISSING_PATH_LINES in src/core/verification/convergence.ts (#1208, #1913); timedOutFailure in check-runner.ts (#1424); REPLAY_TARGETS in quality/baseline-replay.ts (#2020); diagnosticCount in output-counts.ts (#1791, #1326).src/core/workflows/affected-tests.ts: its own isTestFile and isCompiledTestFile (which files a task's written-tests check runs; Ruby's runner branches landed without them, so no written spec ran until #1495), the value-taking flags flagsOnly keeps, the runner's file or filter form in affectedTestCheck, and the per-test timeout in test-timeout.ts (#1655).SKIPS, or a framework's own skips in src/core/intelligence/test-frameworks.ts), CAPABILITY guards and SUPPRESSIONS in src/core/workflows/test-integrity.ts, with their lists in the diff-check paragraph of docs/workflows/runtime.md, the assertion forms of the language's frameworks (#1651), and the lint-suppression rule in quality/builtin-rules.ts with its row in docs/workflows/code-quality.md.workspace-facts.ts, sizing manifests (sizing.ts), TOOL_CACHES (src/core/verification/snapshot.ts) and FIRST_RUN_OUTPUTS (tests/helpers/baseline-created-files-scenario.ts) for files a first build writes (Cargo.lock, #1815).requestedManifestEdits in auto-approval.ts (#1552, #1428) and the toolchain-selecting files (wrapper distribution, SDK pin, #1963).symbolPath in src/core/workflows/finding-chain.ts splits a reviewer's Container.member spelling, and CONTAINER_MEMBER in tests/workflow-scenario-finding-chain.test.ts holds a row per language (#2137). The tests are not typechecked, so only the test run reports a missing row; R added $ (Reader$read, #1500).reproExecutables in src/core/verification/repro.ts adds the language's runtime for its build tool (#1529); a documented example that needs a build is built first (#1035).Each line is a past bug. A new detector, parser or table row answers it before review does.
gradlew.bat, mvnw.cmd, LuaRocks and Composer vendor\bin\*.bat run through cmd /d /c, which launchedCommand unwraps (#1749). Give every command a Windows form and a gate-matrix cell for it.. or the whole crate (#587, #840, #1228, #1269, #1593).probe (#1907). Edit-time format reads the project's own config and never reformats a whole file that was not clean (#1582), within the 30 s limit (#1429).TEST_GATES and requireTests (#1832).PermTest, FeatureSpec) names domain code too, so it needs a TEST_MARKERS match outside a test folder (#1683, #1848).NotImplementedError, Java's read-only remove()).input_changed.detectGates offers a Makefile, justfile or CI step only when no toolchain detector found anything, so a detector that fires on a config file of a side tool (a .shellcheckrc in a C project) would hide make test. Shell gates are added on top for that reason (#1497); a new detector for a side tool does the same.prove and pg_prove) prints a summary with totals and CPU times; strip them in GROWING_COUNTS, or the same red check never matches again (#1499).ERROR nodes; match the declaration inside the ERROR node too, or its symbols vanish from the call graph (#1499).ParseError next to Error,Warning); give its gate-matrix cell a file with a syntax error (#1498).tests/workflow-baseline-replay.test.ts holds a FAILURES and a BUILD_ERRORS row for every runner in BUILD_FAILURES; a new runner adds both (#1498).GITHUB_ACTIONS, TF_BUILD) can change its output: Pester prefixes failed tests with ::error:: (#1498), and lintr's print writes ::warning file=... annotations (#1500). Turn that mode off, or write the lines in the gate's command, and run the real gate-matrix cell with GITHUB_ACTIONS=true before pushing (#1498).build/ folder) makes every later check source_changed unless the project ignores it; sourceManifest skips a folder holding CMakeCache.txt (#1490). A tool that needs a configure or build step first gets that step as its own gate, in order, since a check runs without a shell.# as a comment; #if, #ifdef and #elif stay code, so a C or C++ skip under #ifdef _WIN32 reads as guarded (#1490); Swift's #if os(...) guards and #expect/#require assertions are code too (#1492)..gitignore hides. bin/, build/ and the like are ignored at the root, so a bench task's seed/bin/ or solution/bin/ is never committed: run git status --ignored bench/ before the pull request and git add -f them (#1497).xit, ScalaTest's ignore, package:test's skip: go in the framework's skips column of test-frameworks.ts, not in the shared SKIPS, so they never match another language's code (#1493, #1494, #1496).rspec --format) leaves the check a test run in isStaticCheck (#1493).dart test's loading x_test.dart [E]) needs it subtracted from the test count and read as a build failure, not a failed test (#1494).expect) can misread another language's argument order; add a scoped row whose calls come first (#1494).dart format prints No file or directory found and exits 0: it needs a MISSING_PATH_LINES entry, or a task that formats a file it has not written passes (#1494).build/test-results/**/*.xml) and append them to the check output (#1489).sbt scalafmtOnly) needs a fixer that passes the file inside the same build command, not as a separate argument (#1496).maven-central.storage-download.googleapis.com/maven2) and Docker images (sbtscala/scala-sbt, swift) give real JVM and Swift tools where the default downloads are blocked (#1496, #1492).isStaticCheck reads the words of a gate's arguments (check, lint, format), so a test command that passes code with such a word (testthat's reporter = 'check') is taken for a linter and the written-tests check skips it; name the thing another way (CheckReporter$new()) and give the gate a check-routing test (#1500).tests/fixtures/languages/<language>.json with goldens for every row you fill (bun run test tests/language-parity.test.ts prints a missing golden ready to paste).describe("gate matrix: <toolchain> (#issue)") block in tests/gate-matrix.test.ts, like the #1749 and #1753 blocks: detection from each manifest (and its absence), the Windows wrapper form, routing (isWholeUnitCheck, fixerCommand on the task's file, coveringChecks), noTestsCollected, the test count and a stable failureSignature, and the "path does not exist" line.describe.skipIf(!toolchains)("gate matrix: toolchains") with test.skipIf(!available([[tool, "--version"]])), so CI and the laptop run it where the tool is installed.bench/suite/tasks/<language>-<toolchain>-<what>/ (see the bench-suite skill) so the nightly suite and the bench loop run the language.docs/workflows/runtime.md ("Gates, budgets and estimates"), and the test-integrity, baseline and reviewer sections that list languages.src/core/features/registry.ts) only when the pull request adds a slash command, /v1 route or desktop screen. Gate detection reaches the TUI gate editor, baked workflow gates and the desktop Gates window through the same detectGates; check that a new gate id renders there and say so in the pull request.Sources of the rakes above, worth a re-read before a language pull request:
还没有评价。欢迎分享你的使用感受。
无需登录即可发表。欢迎分享使用感受、提问,或说明在哪些环境下无法运行。
还没有评论。来写第一条吧。
Use when adding, changing or graduating a task in bench/suite/ (the nightly multi-language mini-suite), when adding a supported language or toolchain, or when a bench round stop can be reproduced by a small task.
中文简介正在准备中。当前显示原文说明。
Use every time you open or update a GitHub issue for a BAKED bug or finding. Finds the root cause, sweeps the code for every other place with the same or a neighbouring defect, including every supported language when the bug is bound to one, and files issues that cover all of them.
中文简介正在准备中。当前显示原文说明。
Use when a change adds or changes a host decision (a stop, park, decline, refusal, retry, deadline or cap growth), when the bench loop exports a round's traces, or when replay-corpus.test fails. Keeps the bench-trace replay corpus complete and current.
中文简介正在准备中。当前显示原文说明。