[Bug]: Local config override file name differs between the docs (`<id>-config.local.yml`) and ConfigManager (`local-config.yml`)

Aberta Para iniciantes
#5,083 0 comentários 0 reações 0 responsáveis Ver no GitHub

Mantenedores costumam responder em até 1 dia

@gavenren já está trabalhando nisso.

Desde 28/10/2026.

  • #5159 de @gavenren — aberto

Avaliação

Dificuldade
2/5
Tempo estimado
1-3 horas
Facilidade para iniciantes
72/100
Tipo de issue
Bug
Clareza
Claramente especificada
Status de atividade
Ativa
Stack de tecnologia
python
Domínio
cli

Direção de pesquisa

Leia ConfigManager._get_local_config em src/specify_cli/extensions/__init__.py e, em seguida, compare o nome de arquivo esperado com os guias de usuário, API e desenvolvimento, além do padrão de exclusão em src/specify_cli/shared_infra.py. Use o script de reprodução da issue para confirmar qual nome de arquivo se aplica; o trabalho estará concluído quando as substituições de configuração, as condições dos hooks, o comportamento de exclusão do Git e o tratamento relacionado à remoção ou recuperação corresponderem ao nome escolhido.

Escrita pelo modelo de indexação a partir do texto da issue.

Descrição

triage-must-have
Bug Description

The user-facing extension docs tell users to put local overrides in .specify/extensions/<id>/<id>-config.local.yml. ConfigManager._get_local_config reads .specify/extensions/<id>/local-config.yml instead (src/specify_cli/extensions/__init__.py:5350). A user who follows the guide gets no override, both in get_config() and in hook conditions such as config.x is set. The shared .specify/.gitignore only covers extensions/*/local-config.yml (src/specify_cli/shared_infra.py:33), so the documented file is also not ignored by git, although the guide says it is.

Either side could be the one to change. The code, design/extension.md:146 and shared_infra.py:33 use local-config.yml. These say <id>-config.local.yml:

  • extensions/EXTENSION-USER-GUIDE.md:351,361,377,910
  • extensions/EXTENSION-API-REFERENCE.md:565,887
  • extensions/EXTENSION-DEVELOPMENT-GUIDE.md:388

The remove, backup and rescue code also preserves *-config.local.yml (for example __init__.py:3523-3549).

Steps to Reproduce

Save this as repro.py and run uv run python -I repro.py from the repository root.

import os, tempfile
from pathlib import Path
from specify_cli.extensions import ConfigManager

proj = Path(tempfile.mkdtemp())
d = proj / ".specify/extensions/jira"
d.mkdir(parents=True)
(d / "jira-config.yml").write_text('project:\n  key: "MSATS"\n')
(d / "jira-config.local.yml").write_text('project:\n  key: "MYTEST"\n')
os.environ.pop("SPECKIT_JIRA_PROJECT_KEY", None)
print("with jira-config.local.yml: project.key =", ConfigManager(proj, "jira").get_value("project.key"))
(d / "jira-config.local.yml").rename(d / "local-config.yml")
print("with local-config.yml:      project.key =", ConfigManager(proj, "jira").get_value("project.key"))
Expected Behavior

Per extensions/EXTENSION-USER-GUIDE.md:359-383, jira-config.local.yml overrides jira-config.yml, so project.key is MYTEST. If local-config.yml is the intended name, the user guide, API reference and development guide should say so.

Actual Behavior
with jira-config.local.yml: project.key = MSATS
with local-config.yml:      project.key = MYTEST
Specify CLI Version

1.2.4.dev0 (main at 27d14e2)

AI Agent

Not applicable

Operating System

Linux 6.18 (Ubuntu container)

Python Version

Python 3.12.3

Additional Context

The docstring of ConfigManager itself (__init__.py:5267) names local-config.yml, so the code is at least consistent with itself and with the design document.

Also reproduced on macOS (Darwin 25.6, arm64) with Python 3.14.4 and uv run python -I repro.py against 27d14e2; the output matches the above.

AI Disclosure

Found and reproduced with Claude Code (model: Claude Opus 4.8), run autonomously under human supervision. The human reporter re-ran every reproduction above before filing.

Linguagem predominante
Python
Estrelas
144k
Forks
12.9k
Merge médio
1d 6h
PRs com merge (30d)
194

Preparar o ambiente

Abrir no Codespaces

Inicia o contêiner de desenvolvimento do projeto no navegador, com a sua própria conta do GitHub.

Primeiros passos

  1. Leia a issue inteira e depois o guia de contribuição do projeto.
  2. Comente na issue dizendo que vai assumir — evita que duas pessoas façam o mesmo trabalho.
  3. Faça um fork do repositório e trabalhe em uma branch.
  4. Abra um pull request que referencie o número da issue.

Mais de github/spec-kit

Todas as issues de github/spec-kit

Issues semelhantes

Mais issues de Python

Receba novas issues na sua caixa de entrada

Um resumo curto de issues do GitHub para quem está começando.