[BUG] Schema enforces \.git$ on extraKnownMarketplaces git URLs — breaks Azure DevOps SSH URLs
Preflight Checklist
- [x] I have searched existing issues and this hasn't been reported yet
- [x] This is a single bug report
- [x] I am using the latest version of Claude Code
What's Wrong?
The claude-code-settings.json schema (published at https://json.schemastore.org/claude-code-settings.json) enforces a \.git$ pattern on the url field for extraKnownMarketplaces git sources:
{
"source": { "const": "git" },
"url": {
"type": "string",
"pattern": "\\.git$"
}
}
This pattern rejects all Azure DevOps SSH URLs, which never use a .git suffix. ADO SSH URLs follow this format:
git@ssh.dev.azure.com:v3/{org}/{project}/{repo}
Appending .git to work around the schema validation causes ADO to interpret it as a literal part of the repository name and return TF401019 (repository not found).
This creates a catch-22 for enterprise users on Azure DevOps:
- Without
.git→ schema validation fails (CI/IDE rejects the config) - With
.git→ ADO returns TF401019 (repo not found at runtime)
Why This Matters for Enterprise
Azure DevOps is widely used in enterprise environments. Organizations deploying managed-settings.json via MDM to govern plugin marketplaces cannot use extraKnownMarketplaces with ADO-hosted repositories without either disabling schema validation or vendoring a patched local schema — both of which undermine the value of the published schema.
Relation to Prior Issues
- #16870 —
extraKnownMarketplacesinmanaged-settings.jsonis ignored (related marketplace issues) - #13097 / #13096 —
extraKnownMarketplacestrust dialog and headless mode limitations
Environment
- Claude Code CLI: v2.1.78
- OS: macOS 26.4 (Darwin 25.4.0)
- Git host: Azure DevOps (SSH transport)
- Schema source:
https://json.schemastore.org/claude-code-settings.json
Reproduction Steps
- Create a
settings.jsonwith a$schemareference and an ADO SSH marketplace:
``json``
{
"$schema": "https://json.schemastore.org/claude-code-settings.json",
"extraKnownMarketplaces": {
"my-marketplace": {
"source": {
"source": "git",
"url": "git@ssh.dev.azure.com:v3/myorg/myproject/myrepo"
}
}
}
}
- Validate with
check-jsonschema:
``bash``
check-jsonschema --schemafile https://json.schemastore.org/claude-code-settings.json settings.json
- Result: Validation fails:
````
'git@ssh.dev.azure.com:v3/myorg/myproject/myrepo' does not match '\\.git$'
- Append
.gitto the URL and trygit clone:
``bash``
git clone git@ssh.dev.azure.com:v3/myorg/myproject/myrepo.git
- Result: ADO returns
TF401019: The Git repository with name or identifier 'myrepo.git' does not exist
Expected Behavior
The schema should accept git URLs both with and without the .git suffix. The pattern should be (\\.git)?$ (making the suffix optional).
Actual Behavior
The schema requires .git suffix via the \\.git$ pattern, which is incompatible with Azure DevOps SSH URLs.
Suggested Fix
Change the url pattern in the extraKnownMarketplaces git source from:
"pattern": "\\.git$"
to:
"pattern": "(\\.git)?$"
This makes the .git suffix optional, allowing both github.com/org/repo.git and ssh.dev.azure.com:v3/org/project/repo formats.
Workaround
We vendor a local copy of the schema with the relaxed pattern and point CI validation at the local file instead of the SchemaStore URL.
This issue has 3 comments on GitHub. Read the full discussion on GitHub ↗