Skip to content

Commit 3bde392

Browse files
committed
Fix knowledge index case collision
1 parent 69740df commit 3bde392

3 files changed

Lines changed: 18 additions & 4 deletions

File tree

.gitignore

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
.venv/
22
.coding-scaffold/
3+
.claude/settings.local.json
4+
.claude/worktrees/
35
__pycache__/
46
*.py[cod]
57
.pytest_cache/

src/coding_scaffold/adapters.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -346,8 +346,8 @@ def _codex_agents_md(routing: dict[str, object]) -> str:
346346
347347
## Knowledge
348348
349-
Start with `.coding-scaffold/knowledge/index.md` or `.coding-scaffold/knowledge/INDEX.md` when it
350-
exists. Curated wiki pages are preferred over raw notes.
349+
Start with `.coding-scaffold/knowledge/INDEX.md` when it exists. Curated wiki pages are preferred
350+
over raw notes.
351351
"""
352352

353353

tests/test_golden_outputs.py

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,13 +12,17 @@ def test_adapter_output_paths_match_golden(tmp_path) -> None:
1212
for tool in ("opencode", "claude-code", "codex"):
1313
write_tool_adapter(tmp_path, tool)
1414

15-
assert _file_list(tmp_path) == _golden_lines("adapter_paths.txt")
15+
paths = _file_list(tmp_path)
16+
assert _casefold_collisions(paths) == {}
17+
assert paths == _golden_lines("adapter_paths.txt")
1618

1719

1820
def test_knowledge_output_paths_match_golden(tmp_path) -> None:
1921
write_knowledge_base(tmp_path)
2022

21-
assert _file_list(tmp_path) == _golden_lines("knowledge_paths.txt")
23+
paths = _file_list(tmp_path)
24+
assert _casefold_collisions(paths) == {}
25+
assert paths == _golden_lines("knowledge_paths.txt")
2226

2327

2428
def test_setup_output_paths_match_golden(tmp_path, capsys) -> None:
@@ -30,6 +34,7 @@ def test_setup_output_paths_match_golden(tmp_path, capsys) -> None:
3034
for path in _file_list(tmp_path)
3135
if path.startswith(".coding-scaffold/") or path.startswith(".opencode/") or path == "opencode.json"
3236
]
37+
assert _casefold_collisions(generated) == {}
3338
assert generated == _golden_lines("scaffold_paths.txt")
3439

3540

@@ -39,3 +44,10 @@ def _file_list(root: Path) -> list[str]:
3944

4045
def _golden_lines(name: str) -> list[str]:
4146
return (GOLDEN / name).read_text(encoding="utf-8").splitlines()
47+
48+
49+
def _casefold_collisions(paths: list[str]) -> dict[str, list[str]]:
50+
grouped: dict[str, list[str]] = {}
51+
for path in paths:
52+
grouped.setdefault(path.casefold(), []).append(path)
53+
return {key: values for key, values in grouped.items() if len(values) > 1}

0 commit comments

Comments
 (0)