> *"The validator constrains and verifies."*
/plugin marketplace add plurigrid/asi/plugin install asi-skills@asi-skillsThis skill inherits all available tools. When active, it can use any tool Claude has access to.
validate_skills.py"The validator constrains and verifies."
| Property | Value |
|---|---|
| XIP Color | #4857D5 |
| Gay.jl Index | 8 |
| Role | SLAVE (-1) |
| Triad | PR#7 (GAY) + PR#8 (SLAVE) + PR#9 (MASTER) = 0 ✓ |
This skill validates that all skills in the repository:
Every skill must have:
skills/<skill-name>/
├── SKILL.md # Required
├── *.py|*.rb|*.jl # Implementation (optional)
└── tests/ # Validation tests (optional)
Skills should declare their triad membership:
## GF(3) Triad
| Role | Skill | Trit |
|------|-------|------|
| GAY (+1) | skill-a | +1 |
| MASTER (0) | skill-b | 0 |
| SLAVE (-1) | skill-c | -1 |
Sum: (+1) + (0) + (-1) = 0 ✓
Colors must be deterministic via Gay.jl:
from gay_mcp import color_at
# Verify skill color
assert color_at(seed=2025, index=8)['hex'] == '#4857D5'
#!/usr/bin/env python3
"""Validate all skills for GF(3) conservation."""
import os
import re
from pathlib import Path
def validate_skill(skill_path: Path) -> dict:
"""Validate a single skill."""
skill_md = skill_path / "SKILL.md"
if not skill_md.exists():
return {"valid": False, "error": "Missing SKILL.md"}
content = skill_md.read_text()
# Check for role declaration
role_match = re.search(r'\*\*Role\*\*\s*\|\s*(GAY|MASTER|SLAVE)', content)
if not role_match:
return {"valid": False, "error": "Missing role declaration"}
role = role_match.group(1)
trit = {"GAY": 1, "MASTER": 0, "SLAVE": -1}[role]
# Check for color
color_match = re.search(r'#([0-9A-Fa-f]{6})', content)
color = color_match.group(0) if color_match else None
return {
"valid": True,
"role": role,
"trit": trit,
"color": color,
"name": skill_path.name
}
def validate_triads(skills: list) -> list:
"""Check GF(3) conservation across skill triads."""
violations = []
# Group by declared triads
for i in range(0, len(skills) - 2, 3):
triad = skills[i:i+3]
trit_sum = sum(s.get("trit", 0) for s in triad if s.get("valid"))
if trit_sum % 3 != 0:
violations.append({
"triad": [s.get("name") for s in triad],
"sum": trit_sum,
"violation": True
})
return violations
def main():
skills_dir = Path("skills")
if not skills_dir.exists():
print("No skills directory found")
return 1
results = []
for skill_path in sorted(skills_dir.iterdir()):
if skill_path.is_dir():
result = validate_skill(skill_path)
results.append(result)
status = "✓" if result["valid"] else "✗"
print(f"{status} {skill_path.name}: {result.get('role', 'unknown')} ({result.get('trit', '?')})")
violations = validate_triads(results)
if violations:
print(f"\n⚠️ GF(3) Violations: {len(violations)}")
for v in violations:
print(f" - {v['triad']}: sum={v['sum']}")
return 1
print(f"\n✓ All {len(results)} skills validated, GF(3) conserved")
return 0
if __name__ == "__main__":
exit(main())
# tests/test_gf3_validation.py
import pytest
def test_triad_conservation():
"""Verify (+1) + (0) + (-1) = 0."""
assert (1 + 0 + -1) == 0
def test_role_trit_mapping():
"""Verify role to trit mapping."""
roles = {"GAY": 1, "MASTER": 0, "SLAVE": -1}
assert sum(roles.values()) == 0
def test_color_determinism():
"""Verify Gay.jl color is deterministic."""
# Mock: In production, call actual Gay.jl MCP
expected = "#4857D5"
actual = "#4857D5" # color_at(seed=2025, index=8)
assert actual == expected
As the SLAVE (-1) in the bisimulation game:
This skill is predicted as PR#8 in the plurigrid/asi trajectory:
| PR# | Author | Role | Trit | Status |
|---|---|---|---|---|
| 7 | zubyul | GAY | +1 | Merged |
| 8 | ? | SLAVE | -1 | This PR |
| 9 | zubyul | MASTER | 0 | Predicted |
Triad 3 conservation: (+1) + (-1) + (0) = 0 ✓
XIP Color: #4857D5
Gay.jl Seed: 2025
Gay.jl Index: 8
Role: SLAVE (-1)