Files
Open_Ultra_SAST/tests/test_opencode_skills.py
T
Marius CiepluchandClaude Opus 5.5 bd74ba63b2 chore(config): retire unread keys [dynamic], [evidence], [variants], [models] patcher
Nothing in src reads config.dynamic, config.evidence or config.variants, and
[models] patcher was only echoed into harness.json. They now go through the
existing RETIRED_KEYS mechanism and fail with RetiredConfigError naming why
("retired 2026-10-02 because nothing ever read it: ..."); RETIRED_KEYS now
carries the full reason per key so the HarnessX entries keep their wording.

- DynamicConfig, EvidenceConfig, VariantsConfig and their loaders removed;
  ModelConfig.patcher removed. resolved_config.json loses those sections.
- harness.json keeps its shape: model_roles.patcher is always null.
- RELEASE_NOTES "Unreleased" lists the keys and the output shape change.
- Delete .opencode/skills/openultrasast-kiro-impl: it pointed agents at the
  retired openrouter-sast-harness tasks.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
Claude-Session: https://claude.ai/code/session_01EmM1j46qgKMh3zqD1QMwEo
2026-10-02 07:51:38 +02:00

22 lines
772 B
Python

from pathlib import Path
def test_project_opencode_skills_have_required_frontmatter() -> None:
skills_root = Path(".opencode/skills")
# Scope to the project's own skills; third-party tooling (e.g. kiro-*) lives
# alongside them and uses a different frontmatter convention.
skill_files = sorted(skills_root.glob("openultrasast-*/SKILL.md"))
assert {path.parent.name for path in skill_files} == {
"openultrasast-fix-audit",
"openultrasast-scan",
"openultrasast-triage",
}
for skill_file in skill_files:
text = skill_file.read_text()
header = text.split("---", 2)[1]
assert f"name: {skill_file.parent.name}" in header
assert "description: " in header
assert "Use when" in header