Files
breadcrumb-the-shire/tests/Architecture/CodexSkillsContractTest.php
2026-03-09 18:30:52 +01:00

104 lines
4.6 KiB
PHP

<?php
namespace MintyPHP\Tests\Architecture;
use PHPUnit\Framework\TestCase;
class CodexSkillsContractTest extends TestCase
{
use ProjectFileAssertionSupport;
public function testCoreGuardrailsSkillAndReferencesExist(): void
{
$skill = $this->readProjectFile('tools/codex-skills/core-guardrails/SKILL.md');
$this->assertStringContainsString('name: core-guardrails', $skill);
$this->readProjectFile('tools/codex-skills/core-guardrails/references/boundaries-core.md');
$this->readProjectFile('tools/codex-skills/core-guardrails/references/boundaries-ui.md');
$this->readProjectFile('tools/codex-skills/core-guardrails/references/quality-gates.md');
$this->readProjectFile('tools/codex-skills/core-guardrails/references/source-map.md');
}
public function testStarterkitPlannerSkillAndReferencesExist(): void
{
$skill = $this->readProjectFile('tools/codex-skills/starterkit-planner/SKILL.md');
$this->assertStringContainsString('name: starterkit-planner', $skill);
$this->readProjectFile('tools/codex-skills/starterkit-planner/references/plan-template.md');
$this->readProjectFile('tools/codex-skills/starterkit-planner/references/tradeoff-matrix.md');
}
public function testStarterkitGridStandardsSkillAndReferencesExist(): void
{
$skill = $this->readProjectFile('tools/codex-skills/starterkit-grid-standards/SKILL.md');
$this->assertStringContainsString('name: starterkit-grid-standards', $skill);
$this->readProjectFile('tools/codex-skills/starterkit-grid-standards/references/list-checklist.md');
$this->readProjectFile('tools/codex-skills/starterkit-grid-standards/references/row-interaction-standard.md');
$this->readProjectFile('tools/codex-skills/starterkit-grid-standards/references/page-size-standard.md');
}
public function testStarterkitPhpStyleCiSkillExists(): void
{
$skill = $this->readProjectFile('tools/codex-skills/starterkit-php-style-ci/SKILL.md');
$this->assertStringContainsString('name: starterkit-php-style-ci', $skill);
}
public function testCodexPromptsDocumentationReferencesBothSkills(): void
{
$prompts = $this->readProjectFile('docs/reference-codex-prompts.md');
$this->assertStringContainsString('core-guardrails', $prompts);
$this->assertStringContainsString('starterkit-planner', $prompts);
}
public function testDocsIndexReferencesCodexPrompts(): void
{
$index = $this->readProjectFile('docs/index.md');
$this->assertStringContainsString('/docs/reference-codex-prompts.md', $index);
}
public function testCodexSkillsSyncScriptSupportsCheckAndApply(): void
{
$script = $this->readProjectFile('bin/codex-skills-sync.sh');
$this->assertStringContainsString('--check', $script);
$this->assertStringContainsString('--apply', $script);
$this->assertStringContainsString('mode="check"', $script);
$this->assertStringContainsString('"core-guardrails"', $script);
$this->assertStringContainsString('"starterkit-planner"', $script);
$this->assertStringContainsString('"starterkit-grid-standards"', $script);
$this->assertStringContainsString('"starterkit-php-style-ci"', $script);
}
public function testDocumentationLinksResolveInReadmeDocsAndSourceMap(): void
{
$files = [
'README.md',
'tools/codex-skills/core-guardrails/references/source-map.md',
];
$docFiles = glob($this->projectRootPath() . '/docs/*.md');
$this->assertNotFalse($docFiles, 'Failed to enumerate docs/*.md files.');
foreach ($docFiles as $fullPath) {
$files[] = 'docs/' . basename($fullPath);
}
foreach ($files as $file) {
$content = $this->readProjectFile($file);
preg_match_all('/(?<![A-Za-z0-9_])\\/?docs\\/[a-z0-9_\\/-]+\\.md\\b/', $content, $matches);
foreach (array_unique($matches[0]) as $link) {
$normalized = ltrim($link, '/');
$absolute = $this->projectRootPath() . '/' . $normalized;
$this->assertFileExists($absolute, sprintf('Broken docs link "%s" in %s', $link, $file));
}
}
}
public function testDocsSkillsAuditPolicyExists(): void
{
$policy = $this->readProjectFile('agent-system/checks/docs-skills-audit-policy.md');
$this->assertStringContainsString('P0', $policy);
$this->assertStringContainsString('P1', $policy);
$this->assertStringContainsString('DOCS-SKILLS-AUDIT-00x', $policy);
}
}