[BUG] Schema enforces \.git$ on extraKnownMarketplaces git URLs — breaks Azure DevOps SSH URLs

Resolved 💬 3 comments Opened Mar 26, 2026 by mrleeio Closed May 27, 2026

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

  • #16870extraKnownMarketplaces in managed-settings.json is ignored (related marketplace issues)
  • #13097 / #13096extraKnownMarketplaces trust 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

  1. Create a settings.json with a $schema reference 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"
}
}
}
}
``

  1. Validate with check-jsonschema:

``bash
check-jsonschema --schemafile https://json.schemastore.org/claude-code-settings.json settings.json
``

  1. Result: Validation fails:

``
'git@ssh.dev.azure.com:v3/myorg/myproject/myrepo' does not match '\\.git$'
``

  1. Append .git to the URL and try git clone:

``bash
git clone git@ssh.dev.azure.com:v3/myorg/myproject/myrepo.git
``

  1. 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.

View original on GitHub ↗

This issue has 3 comments on GitHub. Read the full discussion on GitHub ↗