tightening
This commit is contained in:
@@ -37,7 +37,6 @@ def make_skill_frontmatter_payload(
|
||||
description: str = "demo skill",
|
||||
tags: tuple[str, ...] = ("testing",),
|
||||
capabilities: tuple[str, ...] | None = None,
|
||||
depends_on: tuple[str, ...] = (),
|
||||
references: dict[str, dict[str, Any]] | None = None,
|
||||
) -> str:
|
||||
"""Builds frontmatter payload YAML for skill conversion tests."""
|
||||
@@ -47,7 +46,6 @@ def make_skill_frontmatter_payload(
|
||||
"version": version,
|
||||
"tags": list(tags),
|
||||
"capabilities": list(capabilities or (f"resource://skills/{canonical_name}/document",)),
|
||||
"depends_on": list(depends_on),
|
||||
}
|
||||
if references is not None:
|
||||
x_personal_mcp["references"] = references
|
||||
|
||||
@@ -60,7 +60,6 @@ class TestPromptValidationGates:
|
||||
prompt_id="initial",
|
||||
arguments={
|
||||
"invalid-name": {
|
||||
"type": "string",
|
||||
"required": True,
|
||||
}
|
||||
},
|
||||
@@ -100,7 +99,6 @@ class TestPromptValidationGates:
|
||||
prompt_id="initial",
|
||||
arguments={
|
||||
"topic": {
|
||||
"type": "string",
|
||||
"required": True,
|
||||
"description": "topic to discuss",
|
||||
}
|
||||
@@ -111,7 +109,6 @@ class TestPromptValidationGates:
|
||||
record = _build_prompt_record(bundle=bundle)
|
||||
|
||||
assert record.arguments["topic"].required is True
|
||||
assert record.arguments["topic"].type == "string"
|
||||
assert record.arguments["topic"].description == "topic to discuss"
|
||||
|
||||
class TestGate4GraphValidation:
|
||||
@@ -183,7 +180,6 @@ class TestPromptValidationGates:
|
||||
prompt_id="initial",
|
||||
arguments={
|
||||
"topic": {
|
||||
"type": "string",
|
||||
"required": True,
|
||||
}
|
||||
},
|
||||
|
||||
@@ -21,7 +21,6 @@ def _make_skill_record() -> SkillRecord:
|
||||
version="1.2.3",
|
||||
tags=("testing", "catalog"),
|
||||
capabilities=("resource://skills/demo-skill/document", "resource://catalog/skills_index"),
|
||||
depends_on=("base-skill",),
|
||||
document_uri="resource://skills/demo-skill/document",
|
||||
document_relpath="skills/demo-skill/SKILL.md",
|
||||
document_content="# demo",
|
||||
@@ -56,7 +55,7 @@ def _make_prompt_record() -> PromptRecord:
|
||||
capabilities=("resource://prompts/demo-prompt/document",),
|
||||
arguments={
|
||||
"topic": PromptArgumentEntry(
|
||||
type="string",
|
||||
title="Topic",
|
||||
required=True,
|
||||
description="topic to discuss",
|
||||
)
|
||||
@@ -78,7 +77,6 @@ def test_skill_pattern_payload_from_record_shape() -> None:
|
||||
"version": "1.2.3",
|
||||
"description": "demo skill",
|
||||
"tags": ["testing", "catalog"],
|
||||
"depends_on": ["base-skill"],
|
||||
"capabilities": ["resource://skills/demo-skill/document", "resource://catalog/skills_index"],
|
||||
"resources": ["resource://skills/demo-skill/document", "resource://catalog/skills_index"],
|
||||
}
|
||||
|
||||
@@ -8,9 +8,7 @@ from pydantic import ValidationError
|
||||
from personal_mcp.registry.ingest.document import MarkdownDocument
|
||||
from personal_mcp.registry.ingest.skill import SkillFilesBundle
|
||||
from personal_mcp.registry.load import _build_skill_record
|
||||
from personal_mcp.registry.load import load_docs_registry
|
||||
from personal_mcp.registry.models.registry import SkillSummaryRecord
|
||||
from tests.registry.models.test_document_validation import as_markdown
|
||||
from tests.registry.models.test_document_validation import assert_model_is_frozen
|
||||
from tests.registry.models.test_document_validation import make_markdown_document
|
||||
from tests.registry.models.test_document_validation import make_skill_frontmatter_payload
|
||||
@@ -117,36 +115,6 @@ class TestSkillValidationGates:
|
||||
with pytest.raises(KeyError, match="reference document not found"):
|
||||
_build_skill_record(bundle=bundle, docs_by_relpath=_docs_index(bundle))
|
||||
|
||||
class TestGate4GraphValidation:
|
||||
"""Gate 4: validate dependency graph coherence across skills."""
|
||||
|
||||
def test_unknown_dependency_fails_registry_load(self, tmp_path) -> None:
|
||||
"""Ensures unresolved depends_on targets abort registry publication."""
|
||||
skill_dir = tmp_path / "skills" / "alpha"
|
||||
skill_dir.mkdir(parents=True)
|
||||
frontmatter = make_skill_frontmatter_payload(skill_id="alpha", depends_on=("beta",))
|
||||
(skill_dir / "SKILL.md").write_text(as_markdown(frontmatter), encoding="utf-8")
|
||||
|
||||
with pytest.raises(ValueError, match="depends_on unknown skill"):
|
||||
load_docs_registry(package_anchor="personal_mcp", docs_root=str(tmp_path))
|
||||
|
||||
def test_resolved_dependency_succeeds_registry_load(self, tmp_path) -> None:
|
||||
"""Ensures valid dependency graph survives graph validation."""
|
||||
alpha_dir = tmp_path / "skills" / "alpha"
|
||||
beta_dir = tmp_path / "skills" / "beta"
|
||||
alpha_dir.mkdir(parents=True)
|
||||
beta_dir.mkdir(parents=True)
|
||||
|
||||
alpha_frontmatter = make_skill_frontmatter_payload(skill_id="alpha", depends_on=("beta",))
|
||||
beta_frontmatter = make_skill_frontmatter_payload(skill_id="beta")
|
||||
|
||||
(alpha_dir / "SKILL.md").write_text(as_markdown(alpha_frontmatter), encoding="utf-8")
|
||||
(beta_dir / "SKILL.md").write_text(as_markdown(beta_frontmatter), encoding="utf-8")
|
||||
|
||||
registry = load_docs_registry(package_anchor="personal_mcp", docs_root=str(tmp_path))
|
||||
|
||||
assert registry.skills_by_id["alpha"].depends_on == ("beta",)
|
||||
|
||||
class TestGate5ContractValidation:
|
||||
"""Gate 5: validate model_dump contract shape for API surfaces."""
|
||||
|
||||
|
||||
Reference in New Issue
Block a user