Repository navigation
feat(vendor-neutrality-score): let one tool declare several vendors - #1575
Merged
Merged
Conversation
A tool README's **Vendor:** line now accepts several independent backends joined by "+", and each one counts as a backend vendor for the contract. "agnostic" cannot be mixed with named vendors, and empty entries are rejected. tools/typed-decision declares both of its backends, TypeSafe and the in-tree self-hosted OpenAI-compatible provider, so contract:typed-decision turns green and the overall score moves from 13/15 to 14/15. Closes apache#1574 Generated-by: Claude Opus 5
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.
Summary
**Vendor:**value per tool README, so a tool that ships more than one backend could only ever count as one vendor.**Vendor:**now accepts several independent backends joined by+(the separator**Capability:**already uses), and each one counts as a backend vendor for the contract.agnosticmixed with named vendors is rejected, and so are empty entries (GitHub +).ToolMeta.vendorkeeps the declared string and a newvendorsproperty splits it, so existing callers and the JSONvendorfield are unchanged; JSON implementation entries also gain avendorslist.tools/typed-decision/README.mddeclaresTypeSafe + self-hosted OpenAI-compatible, which reflects the in-tree local provider from feat(tools): add in-tree local OpenAI-compatible typed-decision provider #1551.contract:typed-decisionturns green, and the overall score moves from 13/15 to 14/15 (regenerated block indocs/vendor-neutrality.md).Type of change
.claude/skills/<name>/) — eval fixtures updated belowtools/<system>/*.md)tools/*/withpyproject.toml)docs/,README.md,CONTRIBUTING.md)projects/_template/)prek, workflows, validators)Test plan
prek run --all-filespassesuv run pytest/ruff check/mypypasses (42 tests intools/vendor-neutrality-score)vendor-backedcontract green, the vendor union across tools, README parsing of a vendor list, and the rejected forms (agnostic + GitHub,GitHub +,GitHub + + Atlassian).RFC-AI-0004 compliance
Linked issues
Closes #1574
Refs #1551
Notes for reviewers (optional)
On the open question in #1574, I named the second vendor
self-hosted OpenAI-compatiblerather thanlocal-openai-compatible. It reads like the other human-readable vendor names (Forgejo / Gitea) and does not single out one runtime.Generative AI tooling was used to prepare this PR (Claude Code, Opus 5).
🤖 Generated with Claude Code