Skip to content

feat(vendor-neutrality-score): let one tool declare several vendors - #1575

Merged
potiuk merged 1 commit into
apache:mainfrom
potiuk:tools/vendor-multi
Oct 10, 2026
Merged

potiuk merged 1 commit into
apache:mainfrom
potiuk:tools/vendor-multi

Conversation

@potiuk

@potiuk potiuk commented Oct 10, 2026

Copy link
Copy Markdown
Member

Summary

  • The vendor-neutrality scorer read one **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.
  • agnostic mixed with named vendors is rejected, and so are empty entries (GitHub +). ToolMeta.vendor keeps the declared string and a new vendors property splits it, so existing callers and the JSON vendor field are unchanged; JSON implementation entries also gain a vendors list.
  • tools/typed-decision/README.md declares TypeSafe + 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-decision turns green, and the overall score moves from 13/15 to 14/15 (regenerated block in docs/vendor-neutrality.md).

Type of change

  • Skill change (.claude/skills/<name>/) — eval fixtures updated below
  • Tool / bridge contract (tools/<system>/*.md)
  • Python package (tools/*/ with pyproject.toml)
  • Groovy reference impl
  • Cross-cutting (RFC, AGENTS.md, sandbox, privacy-LLM)
  • Documentation (docs/, README.md, CONTRIBUTING.md)
  • Project template (projects/_template/)
  • CI / dev loop (prek, workflows, validators)
  • Other:

Test plan

  • prek run --all-files passes
  • For Python packages touched: uv run pytest / ruff check / mypy passes (42 tests in tools/vendor-neutrality-score)
  • For Groovy bridges touched: command-line invocation tested end-to-end
  • For skill changes: eval suite passes for the affected skill
  • For skill behaviour changes: a new or updated eval fixture is included in this PR
  • Other: new tests cover a multi-vendor tool turning a vendor-backed contract 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

  • HITL — any new mutation is gated on explicit user confirmation
  • Sandbox — no new unrestricted host access; network reach declared in the adapter
  • Vendor neutrality — the scorer now credits a tool that ships several independent backends
  • Conversational + correctable — agentic-override path documented if behaviour is adopter-tunable
  • Write-access discipline — no autonomous outbound messages; drafts only, sent on confirmation
  • Privacy LLM — private content does not reach a non-approved LLM; redactor invoked where needed

Linked issues

Closes #1574
Refs #1551

Notes for reviewers (optional)

On the open question in #1574, I named the second vendor self-hosted OpenAI-compatible rather than local-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

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
@github-actions github-actions Bot added family:tools tools/* family:docs Docs, MISSION.md, READMEs substrate:analytics Tool substrate: read-only metrics / dashboards / renderers substrate:framework-dev Tool substrate: build / validate / eval the framework itself contract:typed-decision labels Oct 10, 2026
@potiuk
potiuk merged commit 497a617 into apache:main Oct 10, 2026
10 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

contract:typed-decision family:docs Docs, MISSION.md, READMEs family:tools tools/* substrate:analytics Tool substrate: read-only metrics / dashboards / renderers substrate:framework-dev Tool substrate: build / validate / eval the framework itself

Projects

None yet

Development

Successfully merging this pull request may close these issues.

vendor-neutrality-score: let one tool declare several vendors

1 participant