homericintelligence/scylla/config-filename-validation
- community
- ext:[{"type":"hook","description":"Pre/post lifecycle hooks"}]
Checking that the SKILL.md file is still in the repository.
Install
npx vskill@latest install homericintelligence/scylla/config-filename-validationSemi-extensibleMentions customization, but needs skill-specific knowledge. Read the extensible skills standard
SKILL.md
Skill: Config Filename/ID Validation Pattern
Overview
| Field | Value | |
|---|---|---|
| Date | 2026-02-19 | |
| Issue | #733 (follow-up to #692) | |
| PR | #795 | |
| Objective | Add validation that tier config filenames match their tier field | |
| Outcome | Success — 2213 tests pass, 73.38% coverage | |
| Category | testing |
When to Use
Apply this pattern when:
- A config dataclass has an ID/key field that should match its filename
- You want to catch silent mismatches between filename and config content
- You're adding a new config type that follows the same load/validate pattern
- A follow-up issue asks to mirror an existing validation pattern to a new config type
Trigger conditions:
- "filename should match the X field"
- "prevent filename/ID mismatch"
- "consistent validation across all config types"
- "mirror the model config pattern"
Verified Workflow
1. Add validation function to scylla/config/validation.py
For simple exact-match validation (no normalization needed):
For IDs requiring normalization (e.g., : → - for model IDs), see validate_filename_model_id_consistency — adds a get_expected_filename() helper and checks both exact and normalized match.
2. Call validation in the loader after constructing the dataclass
In scylla/config/loader.py, update the relevant load_X() method:
Key decisions:
- Warning, not error — load succeeds even with mismatch (matches existing model config behavior)
- After dataclass construction — validate the actual field value, not raw YAML data
- Use `config.tier` not `data["tier"]` — field may have been normalized by validators
3. Write 4 test cases in TestFilenameTierConsistency
Failed Attempts
Fixture test via loader with _-prefixed tier name
Attempted: loader.load_tier("_test-fixture") — mirroring how model fixture test uses load_model("_test-fixture")
Why it failed: load_tier() normalizes the tier name:
So it would look for t_test-fixture.yaml (not found) rather than _test-fixture.yaml.
Fix: Test the validation function directly instead of going through the loader. Import validate_filename_tier_consistency and call it with a manually constructed path.
Pre-commit hook formatting failure
Ruff reformatted tests/unit/test_config_loader.py on first commit attempt. The pre-commit hook modifies files in place but the commit still fails. Re-stage and commit again — the second commit succeeds.
Results & Parameters
Files modified
| File | Change | |
|---|---|---|
scylla/config/validation.py | Added validate_filename_tier_consistency() (+31 lines) | |
scylla/config/loader.py | Import + 7 lines in load_tier() | |
tests/unit/test_config_loader.py | Added TestFilenameTierConsistency class (+84 lines) |
Test results
Pattern applicability
This exact pattern (validation function + loader call + 4 tests) can be applied to any new config type with a filename-matching field. The only variation needed:
- If the ID has special characters (like
:), add a normalization helper - If the loader normalizes the ID before building the path, test the validation function
directly for the _-prefix fixture case
Security
- Security scanPassed, 90 of 100Pattern checks on the skill's files.
- Model reviewPassed
Quality evaluation
- Task evaluationNot runNo evaluation yet. Run one in Skill Studio.
Source
- SKILL.md in the repositoryChecking.claude-plugin/skills/config-filename-validation/SKILL.md
Popularity
- Repository stars
- 11
- Repository forks
- 2
- 7-day trend score
- 0
Stars and forks are for the whole GitHub repository, not this skill alone. Not refreshed yet.
Extension points
hookPre/post lifecycle hooks
Works with
Any agent vskill installs to: 56 targets in all. These 39 have a page on this site.
- Claude Code
- Cursor
- GitHub Copilot
- Windsurf
- Codex
- Gemini CLI
- Cline
- Amp
- Roo Code
- Goose
- Continue
- Kilo Code
- Junie
- Trae
- OpenHands
- Qwen Code
- AI Agent
- Tabnine Chat
- Sourcegraph Cody
- Amazon Q
- Firebase Genkit
- Sweep
- Devin
- Phind
- Mentat
- Claude Desktop
- Aider
- GPT Pilot
- Plandex
- bolt.new
- v0
- Replit Agent
- Anse
- TypingMind
- BetterChatGPT
- LibreChat
- Warp AI
- Pieces
- Fig AI
Embed badge
[](https://verified-skill.com/skills/homericintelligence/scylla/config-filename-validation)