lang/generic: the linter-driven-development plugin for any language - #49
Merged
Merged
Conversation
Add the generic binding and its rendered plugin directory. The profile holds phrases the model reads as instructions (any-language, detected-language source, lint-suppression, .<ext>); the binding adds files only where detection differs from knowledge: the pre-flight and command-discovery steps, the wire-repo-brain language scope, a gate adapter that picks its Go or Python block from the marker file, and the fixture rows for the gate matrix. Every include slot the Go binding fills now has a language-neutral default under core/includes: the twelve canonical examples as pseudocode, the twelve falsifying-question sets with detection phrased over the detected language's source files, the skill, agent and command blocks, and a routing table keyed by finding family. Two Go passthrough files are promoted into core so the generic plugin can ship them: the documentation reference (Go-only blocks become includes) and the gate's fixture matrix (cases in core, fixture rows in the binding; the Go binding keeps its previous matrix as an override so the Go plugin stays byte-identical). test-gate runs both matrices; the generic one runs once per detected language plus the detection cases. Root README, marketplace manifest, CLAUDE.md, core/README.md and the generator and residue docs describe the second binding. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_018Gc92pr3YAZt1g5EvJgKqt
Core rules cite ../examples/*.md and the review skill pastes two of them into the skeptic's and the critic's payloads, so a plugin without the directory leaves those paths dangling at run time. The generic binding now carries the six case studies as passthrough copies; each opens with a note that the Go is the demonstration language and the move holds in any language. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_018Gc92pr3YAZt1g5EvJgKqt
The evals repository's Go suite now writes the measured plugin's command prefix into the copied cases, so one suite measures the Go plugin and the generic one. The prompt example and the run description say so. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_018Gc92pr3YAZt1g5EvJgKqt
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
What this adds
Step 4 of the Python-edition stream: the generic binding
lang/generic/and its rendered pluginlinter-driven-development/(version 0.1.0, prefixldd), in one commit sotask checkstays green for every binding.any-language,detected-language source,lint-suppression,the repository's test command,.<ext>,<test-file suffix>,<comment-marker>.nil: "null",task: concurrent task,doc_form/doc_comment: doc comment,unexported: unexported./wire-repo-brainlanguage scope, a gate adapter that dispatches on the marker (go.mod→ Go block,pyproject.toml/setup.cfg/setup.py→ Python block, neither → structure checks only with an "edges are unverified" first line), and the fixture rows for the matrix./wire-repo-brainkeeps no prefix.examples/, as passthrough copies of the Go plugin's six studies, each opening with a note that the Go is for demonstration only and the move holds in any language (Dan's call, second commit). Core cites them by path and the review skill pastes two into agent payloads, so a plugin without them would dangle at run time.skills/documentation/reference.md(the documentation skill cites it thirteen times; Go-only blocks became includes with neutral defaults) andscripts/check-repo-brain_test.sh(cases in core, fixture rows in the binding). The Go binding keeps its previous matrix verbatim aslang/go/overrides/scripts/check-repo-brain_test.sh— the one override in the repo — so the Go plugin stays byte-identical; the override goes when a Go release adopts the promoted matrix.test-gateruns both matrices),core/README.md,docs/generator.md,docs/language-residue.md.Checks
task generate && task generate BINDING=generic && task check && task lint-core && task test-gen && task test-gate && task docs:check— all green;git diff --stat go-linter-driven-developmentempty. Gate matrix: Go 45/45; generic 93/93 (44 cases × Go row and Python row, plus the usage-error case and four detection cases). Soft residue 52 → 99 lines, mostlyinterfaceasides and the Go example fences in the promoted documentation reference.Decisions that deviate from the handoff — please read
src_extis.<ext>, not "the language's source suffix". Every use site glues it to a file name (user/service{{.SrcExt}}:14), where the phrase renders asuser/servicethe language's source suffix:14. Same reasoning fortest_glob(*<test-file suffix>) andcomment_prefix(<comment-marker> See docs/x.md). The residue doc's scalar table is updated.(Port, error)is a hard residue token, so a Go snippet cannot live undercore/includes/; the residue doc records this.Open questions
langrenders as "any-language" — "Using ldd workflow for this any-language code work" reads a little odd; the roadmap's "the repository's language" reads worse in the same slots. Easy to change in the profile.Not in this PR
The floor run (steps 5–6), the ldd-evals prompt-prefix variable, and any Python material.
🤖 Generated with Claude Code
https://claude.ai/code/session_018Gc92pr3YAZt1g5EvJgKqt