Feature Claude - #4

Merged
StanBarrows merged 5 commits into
mainfrom
feature-claude
Mar 3, 2026
Merged

Feature Claude#4
StanBarrows merged 5 commits into
mainfrom
feature-claude

Conversation

@StanBarrows

Copy link
Copy Markdown
Contributor

No description provided.

CopilotAI review requested due to automatic review settings March 3, 2026 08:40

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

This PR pivots the package away from Composer-plugin-based syncing and toward a Laravel Boost–centric workflow, adding Claude/Laravel AI–backed validation of resources/boost/skills/**/SKILL.md via Pest + GitHub Actions, while also modernizing skill content structure and documentation.

Changes:

  • Add an AI-driven skills validation harness (Pest + Testbench + Laravel AI) and a GitHub Actions workflow to run it.
  • Update many skills to include compatible_agents frontmatter and improve/standardize skill content formatting.
  • Remove legacy Composer plugin/scripts/refactor command artifacts and the old GitHub Models–based skill integration workflow.

Reviewed changes

Copilot reviewed 99 out of 100 changed files in this pull request and generated 5 comments.

Show a summary per file
FileDescription
tests/TestCase.phpAdds a Testbench base test case registering Laravel AI/Prism providers for the test suite.
tests/Pest.phpConfigures Pest to use the package TestCase for feature tests.
tests/Feature/SkillValidationTest.phpAdds a feature test that drives skill validation by asserting jobs are dispatched per SKILL.md.
tests/Support/Agents/SkillQualityAgent.phpIntroduces a structured-output Laravel AI agent defining the skill-validation schema.
tests/Support/Console/ValidateSkillsCommand.phpAdds a command that discovers SKILL.md files and dispatches validation jobs (sync/async).
tests/Support/Jobs/ValidateSkillJob.phpImplements the queued job that calls the AI provider and logs structured results.
prompts/skill-validation.mdAdds a standalone prompt specification for skill validation criteria/JSON shape.
phpunit.xml.distAdds PHPUnit config and default env values for Anthropic model/key behavior.
.github/workflows/skills-validation.ymlAdds CI workflow to run composer validation + Pest skills group.
composer.jsonSwitches package type to library, adds Boost dependency and test/dev tooling deps.
RULES.mdExpands guidance around skill indexing, overrides, and compatible_agents.
README.mdRewrites docs toward Boost + multi-agent usage + Claude CI + skill validation workflow.
.gitignoreIgnores local phpunit.xml, Cursor folder, and generated validation logs.
AGENTS.mdAdds definitions and recommended usage patterns for multi-agent roles.
docs/skills/template-skill.mdAdds a reusable template for authoring skills in a workflow-oriented structure.
docs/concepts/mermaid/skill-template-flow.mmdAdds mermaid diagram for skill authoring/usage flow.
docs/concepts/mermaid/phpstan-analysis-flow.mmdAdds mermaid diagram for a PHPStan workflow flow.
resources/boost/skills/documentation/SKILL.mdAdds a new Documentation skill with a workflow/checklist format.
resources/boost/skills/actions/SKILL.mdReformats/expands Actions skill into a workflow/checklist structure.
resources/boost/skills/controllers/SKILL.mdReformats/expands Controllers skill into a workflow/checklist structure.
resources/boost/skills/general/SKILL.mdAdds compatible_agents and adds further-reading link.
resources/boost/skills/models/SKILL.mdAdds compatible_agents and reformats into a workflow/checklist structure.
resources/boost/skills/php/SKILL.mdAdds compatible_agents frontmatter.
resources/boost/skills/phpstan/SKILL.mdReformats/expands PHPStan skill and adds further-reading link.
resources/boost/skills/services/SKILL.mdReformats/expands Services skill into a workflow/checklist structure.
resources/boost/skills/albatros/SKILL.mdAdds compatible_agents frontmatter.
resources/boost/skills/blade/SKILL.mdAdds compatible_agents frontmatter.
resources/boost/skills/commands/SKILL.mdAdds compatible_agents frontmatter.
resources/boost/skills/design/SKILL.mdAdds compatible_agents frontmatter.
resources/boost/skills/docuware/SKILL.mdAdds compatible_agents frontmatter.
resources/boost/skills/dto/SKILL.mdAdds compatible_agents frontmatter.
resources/boost/skills/dusk/SKILL.mdAdds compatible_agents frontmatter.
resources/boost/skills/enums/SKILL.mdAdds compatible_agents frontmatter.
resources/boost/skills/events/SKILL.mdAdds compatible_agents frontmatter.
resources/boost/skills/exceptions/SKILL.mdAdds compatible_agents frontmatter.
resources/boost/skills/formrequests/SKILL.mdAdds compatible_agents frontmatter.
resources/boost/skills/general/SKILL.mdAdds further reading link section.
resources/boost/skills/helperfunctions/SKILL.mdAdds compatible_agents frontmatter.
resources/boost/skills/helpers/SKILL.mdAdds compatible_agents frontmatter.
resources/boost/skills/interfaces/SKILL.mdAdds compatible_agents frontmatter.
resources/boost/skills/jobs/SKILL.mdAdds compatible_agents frontmatter.
resources/boost/skills/livewire/SKILL.mdAdds compatible_agents frontmatter.
resources/boost/skills/middleware/SKILL.mdAdds compatible_agents frontmatter.
resources/boost/skills/migrations/SKILL.mdAdds compatible_agents frontmatter.
resources/boost/skills/observers/SKILL.mdAdds compatible_agents frontmatter.
resources/boost/skills/pesttesting/SKILL.mdAdds compatible_agents frontmatter.
resources/boost/skills/phpunit/SKILL.mdAdds compatible_agents frontmatter.
resources/boost/skills/policies/SKILL.mdAdds compatible_agents frontmatter.
resources/boost/skills/requests/SKILL.mdAdds compatible_agents frontmatter.
resources/boost/skills/resources/SKILL.mdAdds compatible_agents frontmatter.
resources/boost/skills/routing/SKILL.mdAdds compatible_agents frontmatter.
resources/boost/skills/saloon/SKILL.mdAdds compatible_agents frontmatter.
resources/boost/skills/tailwind/SKILL.mdAdds compatible_agents frontmatter.
resources/boost/skills/traits/SKILL.mdAdds compatible_agents frontmatter.
resources/boost/skills/translations/SKILL.mdAdds compatible_agents frontmatter.
src/Support/RefactorCommandSynchronizer.phpRemoves legacy Cursor refactor-command sync helper.
src/Console/SyncRefactorCommand.phpRemoves legacy artisan command for syncing Cursor refactor command.
src/Composer/RefactorCommandPlugin.phpRemoves Composer plugin implementation used to sync refactor.md.
src/CodingGuidelinesServiceProvider.phpRemoves service provider that previously registered console sync command.
scripts/validate-skills.phpRemoves legacy non-AI PHP script validation for skills frontmatter.
scripts/sync-guidelines.phpRemoves legacy git-clone/pull guideline sync script.
refactor.mdRemoves legacy Cursor /refactor prompt file.
.github/workflows/skill-integration.ymlRemoves disabled GitHub Models based skill integration workflow.
.github/workflows/ci.ymlRemoves old CI workflow that ran scripts/validate-skills.php.
.github/scripts/validate-skill-response.shRemoves bash validator for GitHub Models prompt responses.
.github/prompts/*.prompt.ymlRemoves multiple GitHub Models prompt definition files for skills.
Comments suppressed due to low confidence (1)

composer.json:21

  • autoload.psr-4 maps CodebarAg\\CodingGuidelines\\ to src/, but src/ does not exist in the repository after this PR. Either add the src/ directory (even if empty) or remove/adjust this PSR-4 mapping to avoid confusing autoload configuration and potential tooling warnings.

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

Comment on lines +108 to +112
file_put_contents(
$logFile,
json_encode($logEntry, JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES).PHP_EOL,
FILE_APPEND
);

CopilotAIMar 3, 2026

Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Jobs are dispatched per SKILL.md and may run concurrently; writing to a single shared log file with FILE_APPEND but without LOCK_EX can interleave writes and corrupt JSON lines. Consider using file_put_contents(..., FILE_APPEND | LOCK_EX) or Laravel's logger (separate channel) to ensure atomic writes.

Copilot uses AI. Check for mistakes.
Comment on lines +42 to +44
if (! is_dir($logDir)) {
mkdir($logDir, 0777, true);
}

CopilotAIMar 3, 2026

Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

mkdir($logDir, 0777, true) is not checked for failure, which can lead to warnings/notices and later log writes failing silently. Use a safer permission (e.g. 0755) and handle the failure case (or mirror Laravel's File::ensureDirectoryExists).

Copilot uses AI. Check for mistakes.
Comment on lines +49 to +50
file_put_contents($logFile, '');

CopilotAIMar 3, 2026

Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This command unconditionally truncates storage/logs/skills-validation.log (file_put_contents($logFile, '')). If the command is re-run locally while debugging, this discards prior validation history. Consider only truncating when an explicit --fresh/--reset-log flag is passed, or writing to a timestamped log file per run.

Copilot uses AI. Check for mistakes.
Comment on lines +30 to +33
env:
ANTHROPIC_API_KEY: ${{ secrets.ANTHROPIC_API_KEY }}
ANTHROPIC_MODEL: ${{ secrets.ANTHROPIC_MODEL }}
run: vendor/bin/pest --group=skills

CopilotAIMar 3, 2026

Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

ANTHROPIC_MODEL is set from ${{ secrets.ANTHROPIC_MODEL }}. If the secret is not configured, GitHub Actions will still set the env var to an empty string, which can override the default model selection in code/tests and cause AI calls to fail. Prefer omitting this env var when unset, or provide a default in the workflow expression (or in code treat empty string as “unset”).

Copilot uses AI. Check for mistakes.
$model = env('ANTHROPIC_MODEL', 'claude-3-5-sonnet@20240620');
$expectedJobs = iterator_to_array($finder);

Bus::assertDispatched(ValidateSkillJob::class, count($expectedJobs));

CopilotAIMar 3, 2026

Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Bus::assertDispatched() does not accept a dispatch count as the second argument (it expects an optional callback). Passing count($expectedJobs) here will be treated as a callback and can cause a type error / failed assertion. Use Bus::assertDispatchedTimes(ValidateSkillJob::class, count($expectedJobs)) (or keep assertDispatched() with a callback and separately assert the count).

Copilot uses AI. Check for mistakes.
@StanBarrows
StanBarrows merged commit 969aad0 into mainMar 3, 2026
2 checks passed
@StanBarrows
StanBarrows deleted the feature-claude branch March 3, 2026 10:14
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@StanBarrows
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

Feature Claude - #4

Merged
StanBarrows merged 5 commits into
mainfrom
feature-claude
Mar 3, 2026
Merged

Feature Claude#4
StanBarrows merged 5 commits into
mainfrom
feature-claude

Conversation

@StanBarrows

Copy link
Copy Markdown
Contributor

No description provided.

CopilotAI review requested due to automatic review settings March 3, 2026 08:40

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

This PR pivots the package away from Composer-plugin-based syncing and toward a Laravel Boost–centric workflow, adding Claude/Laravel AI–backed validation of resources/boost/skills/**/SKILL.md via Pest + GitHub Actions, while also modernizing skill content structure and documentation.

Changes:

  • Add an AI-driven skills validation harness (Pest + Testbench + Laravel AI) and a GitHub Actions workflow to run it.
  • Update many skills to include compatible_agents frontmatter and improve/standardize skill content formatting.
  • Remove legacy Composer plugin/scripts/refactor command artifacts and the old GitHub Models–based skill integration workflow.

Reviewed changes

Copilot reviewed 99 out of 100 changed files in this pull request and generated 5 comments.

Show a summary per file
FileDescription
tests/TestCase.phpAdds a Testbench base test case registering Laravel AI/Prism providers for the test suite.
tests/Pest.phpConfigures Pest to use the package TestCase for feature tests.
tests/Feature/SkillValidationTest.phpAdds a feature test that drives skill validation by asserting jobs are dispatched per SKILL.md.
tests/Support/Agents/SkillQualityAgent.phpIntroduces a structured-output Laravel AI agent defining the skill-validation schema.
tests/Support/Console/ValidateSkillsCommand.phpAdds a command that discovers SKILL.md files and dispatches validation jobs (sync/async).
tests/Support/Jobs/ValidateSkillJob.phpImplements the queued job that calls the AI provider and logs structured results.
prompts/skill-validation.mdAdds a standalone prompt specification for skill validation criteria/JSON shape.
phpunit.xml.distAdds PHPUnit config and default env values for Anthropic model/key behavior.
.github/workflows/skills-validation.ymlAdds CI workflow to run composer validation + Pest skills group.
composer.jsonSwitches package type to library, adds Boost dependency and test/dev tooling deps.
RULES.mdExpands guidance around skill indexing, overrides, and compatible_agents.
README.mdRewrites docs toward Boost + multi-agent usage + Claude CI + skill validation workflow.
.gitignoreIgnores local phpunit.xml, Cursor folder, and generated validation logs.
AGENTS.mdAdds definitions and recommended usage patterns for multi-agent roles.
docs/skills/template-skill.mdAdds a reusable template for authoring skills in a workflow-oriented structure.
docs/concepts/mermaid/skill-template-flow.mmdAdds mermaid diagram for skill authoring/usage flow.
docs/concepts/mermaid/phpstan-analysis-flow.mmdAdds mermaid diagram for a PHPStan workflow flow.
resources/boost/skills/documentation/SKILL.mdAdds a new Documentation skill with a workflow/checklist format.
resources/boost/skills/actions/SKILL.mdReformats/expands Actions skill into a workflow/checklist structure.
resources/boost/skills/controllers/SKILL.mdReformats/expands Controllers skill into a workflow/checklist structure.
resources/boost/skills/general/SKILL.mdAdds compatible_agents and adds further-reading link.
resources/boost/skills/models/SKILL.mdAdds compatible_agents and reformats into a workflow/checklist structure.
resources/boost/skills/php/SKILL.mdAdds compatible_agents frontmatter.
resources/boost/skills/phpstan/SKILL.mdReformats/expands PHPStan skill and adds further-reading link.
resources/boost/skills/services/SKILL.mdReformats/expands Services skill into a workflow/checklist structure.
resources/boost/skills/albatros/SKILL.mdAdds compatible_agents frontmatter.
resources/boost/skills/blade/SKILL.mdAdds compatible_agents frontmatter.
resources/boost/skills/commands/SKILL.mdAdds compatible_agents frontmatter.
resources/boost/skills/design/SKILL.mdAdds compatible_agents frontmatter.
resources/boost/skills/docuware/SKILL.mdAdds compatible_agents frontmatter.
resources/boost/skills/dto/SKILL.mdAdds compatible_agents frontmatter.
resources/boost/skills/dusk/SKILL.mdAdds compatible_agents frontmatter.
resources/boost/skills/enums/SKILL.mdAdds compatible_agents frontmatter.
resources/boost/skills/events/SKILL.mdAdds compatible_agents frontmatter.
resources/boost/skills/exceptions/SKILL.mdAdds compatible_agents frontmatter.
resources/boost/skills/formrequests/SKILL.mdAdds compatible_agents frontmatter.
resources/boost/skills/general/SKILL.mdAdds further reading link section.
resources/boost/skills/helperfunctions/SKILL.mdAdds compatible_agents frontmatter.
resources/boost/skills/helpers/SKILL.mdAdds compatible_agents frontmatter.
resources/boost/skills/interfaces/SKILL.mdAdds compatible_agents frontmatter.
resources/boost/skills/jobs/SKILL.mdAdds compatible_agents frontmatter.
resources/boost/skills/livewire/SKILL.mdAdds compatible_agents frontmatter.
resources/boost/skills/middleware/SKILL.mdAdds compatible_agents frontmatter.
resources/boost/skills/migrations/SKILL.mdAdds compatible_agents frontmatter.
resources/boost/skills/observers/SKILL.mdAdds compatible_agents frontmatter.
resources/boost/skills/pesttesting/SKILL.mdAdds compatible_agents frontmatter.
resources/boost/skills/phpunit/SKILL.mdAdds compatible_agents frontmatter.
resources/boost/skills/policies/SKILL.mdAdds compatible_agents frontmatter.
resources/boost/skills/requests/SKILL.mdAdds compatible_agents frontmatter.
resources/boost/skills/resources/SKILL.mdAdds compatible_agents frontmatter.
resources/boost/skills/routing/SKILL.mdAdds compatible_agents frontmatter.
resources/boost/skills/saloon/SKILL.mdAdds compatible_agents frontmatter.
resources/boost/skills/tailwind/SKILL.mdAdds compatible_agents frontmatter.
resources/boost/skills/traits/SKILL.mdAdds compatible_agents frontmatter.
resources/boost/skills/translations/SKILL.mdAdds compatible_agents frontmatter.
src/Support/RefactorCommandSynchronizer.phpRemoves legacy Cursor refactor-command sync helper.
src/Console/SyncRefactorCommand.phpRemoves legacy artisan command for syncing Cursor refactor command.
src/Composer/RefactorCommandPlugin.phpRemoves Composer plugin implementation used to sync refactor.md.
src/CodingGuidelinesServiceProvider.phpRemoves service provider that previously registered console sync command.
scripts/validate-skills.phpRemoves legacy non-AI PHP script validation for skills frontmatter.
scripts/sync-guidelines.phpRemoves legacy git-clone/pull guideline sync script.
refactor.mdRemoves legacy Cursor /refactor prompt file.
.github/workflows/skill-integration.ymlRemoves disabled GitHub Models based skill integration workflow.
.github/workflows/ci.ymlRemoves old CI workflow that ran scripts/validate-skills.php.
.github/scripts/validate-skill-response.shRemoves bash validator for GitHub Models prompt responses.
.github/prompts/*.prompt.ymlRemoves multiple GitHub Models prompt definition files for skills.
Comments suppressed due to low confidence (1)

composer.json:21

  • autoload.psr-4 maps CodebarAg\\CodingGuidelines\\ to src/, but src/ does not exist in the repository after this PR. Either add the src/ directory (even if empty) or remove/adjust this PSR-4 mapping to avoid confusing autoload configuration and potential tooling warnings.

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

Comment on lines +108 to +112
file_put_contents(
$logFile,
json_encode($logEntry, JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES).PHP_EOL,
FILE_APPEND
);

CopilotAIMar 3, 2026

Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Jobs are dispatched per SKILL.md and may run concurrently; writing to a single shared log file with FILE_APPEND but without LOCK_EX can interleave writes and corrupt JSON lines. Consider using file_put_contents(..., FILE_APPEND | LOCK_EX) or Laravel's logger (separate channel) to ensure atomic writes.

Copilot uses AI. Check for mistakes.
Comment on lines +42 to +44
if (! is_dir($logDir)) {
mkdir($logDir, 0777, true);
}

CopilotAIMar 3, 2026

Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

mkdir($logDir, 0777, true) is not checked for failure, which can lead to warnings/notices and later log writes failing silently. Use a safer permission (e.g. 0755) and handle the failure case (or mirror Laravel's File::ensureDirectoryExists).

Copilot uses AI. Check for mistakes.
Comment on lines +49 to +50
file_put_contents($logFile, '');

CopilotAIMar 3, 2026

Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This command unconditionally truncates storage/logs/skills-validation.log (file_put_contents($logFile, '')). If the command is re-run locally while debugging, this discards prior validation history. Consider only truncating when an explicit --fresh/--reset-log flag is passed, or writing to a timestamped log file per run.

Copilot uses AI. Check for mistakes.
Comment on lines +30 to +33
env:
ANTHROPIC_API_KEY: ${{ secrets.ANTHROPIC_API_KEY }}
ANTHROPIC_MODEL: ${{ secrets.ANTHROPIC_MODEL }}
run: vendor/bin/pest --group=skills

CopilotAIMar 3, 2026

Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

ANTHROPIC_MODEL is set from ${{ secrets.ANTHROPIC_MODEL }}. If the secret is not configured, GitHub Actions will still set the env var to an empty string, which can override the default model selection in code/tests and cause AI calls to fail. Prefer omitting this env var when unset, or provide a default in the workflow expression (or in code treat empty string as “unset”).

Copilot uses AI. Check for mistakes.
$model = env('ANTHROPIC_MODEL', 'claude-3-5-sonnet@20240620');
$expectedJobs = iterator_to_array($finder);

Bus::assertDispatched(ValidateSkillJob::class, count($expectedJobs));

CopilotAIMar 3, 2026

Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Bus::assertDispatched() does not accept a dispatch count as the second argument (it expects an optional callback). Passing count($expectedJobs) here will be treated as a callback and can cause a type error / failed assertion. Use Bus::assertDispatchedTimes(ValidateSkillJob::class, count($expectedJobs)) (or keep assertDispatched() with a callback and separately assert the count).

Copilot uses AI. Check for mistakes.
@StanBarrows
StanBarrows merged commit 969aad0 into mainMar 3, 2026
2 checks passed
@StanBarrows
StanBarrows deleted the feature-claude branch March 3, 2026 10:14
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@StanBarrows
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Feature Claude - #4

Merged
StanBarrows merged 5 commits into
mainfrom
feature-claude
Mar 3, 2026
Merged

Feature Claude#4
StanBarrows merged 5 commits into
mainfrom
feature-claude

Conversation

@StanBarrows

Copy link
Copy Markdown
Contributor

No description provided.

CopilotAI review requested due to automatic review settings March 3, 2026 08:40

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

This PR pivots the package away from Composer-plugin-based syncing and toward a Laravel Boost–centric workflow, adding Claude/Laravel AI–backed validation of resources/boost/skills/**/SKILL.md via Pest + GitHub Actions, while also modernizing skill content structure and documentation.

Changes:

  • Add an AI-driven skills validation harness (Pest + Testbench + Laravel AI) and a GitHub Actions workflow to run it.
  • Update many skills to include compatible_agents frontmatter and improve/standardize skill content formatting.
  • Remove legacy Composer plugin/scripts/refactor command artifacts and the old GitHub Models–based skill integration workflow.

Reviewed changes

Copilot reviewed 99 out of 100 changed files in this pull request and generated 5 comments.

Show a summary per file
FileDescription
tests/TestCase.phpAdds a Testbench base test case registering Laravel AI/Prism providers for the test suite.
tests/Pest.phpConfigures Pest to use the package TestCase for feature tests.
tests/Feature/SkillValidationTest.phpAdds a feature test that drives skill validation by asserting jobs are dispatched per SKILL.md.
tests/Support/Agents/SkillQualityAgent.phpIntroduces a structured-output Laravel AI agent defining the skill-validation schema.
tests/Support/Console/ValidateSkillsCommand.phpAdds a command that discovers SKILL.md files and dispatches validation jobs (sync/async).
tests/Support/Jobs/ValidateSkillJob.phpImplements the queued job that calls the AI provider and logs structured results.
prompts/skill-validation.mdAdds a standalone prompt specification for skill validation criteria/JSON shape.
phpunit.xml.distAdds PHPUnit config and default env values for Anthropic model/key behavior.
.github/workflows/skills-validation.ymlAdds CI workflow to run composer validation + Pest skills group.
composer.jsonSwitches package type to library, adds Boost dependency and test/dev tooling deps.
RULES.mdExpands guidance around skill indexing, overrides, and compatible_agents.
README.mdRewrites docs toward Boost + multi-agent usage + Claude CI + skill validation workflow.
.gitignoreIgnores local phpunit.xml, Cursor folder, and generated validation logs.
AGENTS.mdAdds definitions and recommended usage patterns for multi-agent roles.
docs/skills/template-skill.mdAdds a reusable template for authoring skills in a workflow-oriented structure.
docs/concepts/mermaid/skill-template-flow.mmdAdds mermaid diagram for skill authoring/usage flow.
docs/concepts/mermaid/phpstan-analysis-flow.mmdAdds mermaid diagram for a PHPStan workflow flow.
resources/boost/skills/documentation/SKILL.mdAdds a new Documentation skill with a workflow/checklist format.
resources/boost/skills/actions/SKILL.mdReformats/expands Actions skill into a workflow/checklist structure.
resources/boost/skills/controllers/SKILL.mdReformats/expands Controllers skill into a workflow/checklist structure.
resources/boost/skills/general/SKILL.mdAdds compatible_agents and adds further-reading link.
resources/boost/skills/models/SKILL.mdAdds compatible_agents and reformats into a workflow/checklist structure.
resources/boost/skills/php/SKILL.mdAdds compatible_agents frontmatter.
resources/boost/skills/phpstan/SKILL.mdReformats/expands PHPStan skill and adds further-reading link.
resources/boost/skills/services/SKILL.mdReformats/expands Services skill into a workflow/checklist structure.
resources/boost/skills/albatros/SKILL.mdAdds compatible_agents frontmatter.
resources/boost/skills/blade/SKILL.mdAdds compatible_agents frontmatter.
resources/boost/skills/commands/SKILL.mdAdds compatible_agents frontmatter.
resources/boost/skills/design/SKILL.mdAdds compatible_agents frontmatter.
resources/boost/skills/docuware/SKILL.mdAdds compatible_agents frontmatter.
resources/boost/skills/dto/SKILL.mdAdds compatible_agents frontmatter.
resources/boost/skills/dusk/SKILL.mdAdds compatible_agents frontmatter.
resources/boost/skills/enums/SKILL.mdAdds compatible_agents frontmatter.
resources/boost/skills/events/SKILL.mdAdds compatible_agents frontmatter.
resources/boost/skills/exceptions/SKILL.mdAdds compatible_agents frontmatter.
resources/boost/skills/formrequests/SKILL.mdAdds compatible_agents frontmatter.
resources/boost/skills/general/SKILL.mdAdds further reading link section.
resources/boost/skills/helperfunctions/SKILL.mdAdds compatible_agents frontmatter.
resources/boost/skills/helpers/SKILL.mdAdds compatible_agents frontmatter.
resources/boost/skills/interfaces/SKILL.mdAdds compatible_agents frontmatter.
resources/boost/skills/jobs/SKILL.mdAdds compatible_agents frontmatter.
resources/boost/skills/livewire/SKILL.mdAdds compatible_agents frontmatter.
resources/boost/skills/middleware/SKILL.mdAdds compatible_agents frontmatter.
resources/boost/skills/migrations/SKILL.mdAdds compatible_agents frontmatter.
resources/boost/skills/observers/SKILL.mdAdds compatible_agents frontmatter.
resources/boost/skills/pesttesting/SKILL.mdAdds compatible_agents frontmatter.
resources/boost/skills/phpunit/SKILL.mdAdds compatible_agents frontmatter.
resources/boost/skills/policies/SKILL.mdAdds compatible_agents frontmatter.
resources/boost/skills/requests/SKILL.mdAdds compatible_agents frontmatter.
resources/boost/skills/resources/SKILL.mdAdds compatible_agents frontmatter.
resources/boost/skills/routing/SKILL.mdAdds compatible_agents frontmatter.
resources/boost/skills/saloon/SKILL.mdAdds compatible_agents frontmatter.
resources/boost/skills/tailwind/SKILL.mdAdds compatible_agents frontmatter.
resources/boost/skills/traits/SKILL.mdAdds compatible_agents frontmatter.
resources/boost/skills/translations/SKILL.mdAdds compatible_agents frontmatter.
src/Support/RefactorCommandSynchronizer.phpRemoves legacy Cursor refactor-command sync helper.
src/Console/SyncRefactorCommand.phpRemoves legacy artisan command for syncing Cursor refactor command.
src/Composer/RefactorCommandPlugin.phpRemoves Composer plugin implementation used to sync refactor.md.
src/CodingGuidelinesServiceProvider.phpRemoves service provider that previously registered console sync command.
scripts/validate-skills.phpRemoves legacy non-AI PHP script validation for skills frontmatter.
scripts/sync-guidelines.phpRemoves legacy git-clone/pull guideline sync script.
refactor.mdRemoves legacy Cursor /refactor prompt file.
.github/workflows/skill-integration.ymlRemoves disabled GitHub Models based skill integration workflow.
.github/workflows/ci.ymlRemoves old CI workflow that ran scripts/validate-skills.php.
.github/scripts/validate-skill-response.shRemoves bash validator for GitHub Models prompt responses.
.github/prompts/*.prompt.ymlRemoves multiple GitHub Models prompt definition files for skills.
Comments suppressed due to low confidence (1)

composer.json:21

  • autoload.psr-4 maps CodebarAg\\CodingGuidelines\\ to src/, but src/ does not exist in the repository after this PR. Either add the src/ directory (even if empty) or remove/adjust this PSR-4 mapping to avoid confusing autoload configuration and potential tooling warnings.

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

Comment on lines +108 to +112
file_put_contents(
$logFile,
json_encode($logEntry, JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES).PHP_EOL,
FILE_APPEND
);

CopilotAIMar 3, 2026

Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Jobs are dispatched per SKILL.md and may run concurrently; writing to a single shared log file with FILE_APPEND but without LOCK_EX can interleave writes and corrupt JSON lines. Consider using file_put_contents(..., FILE_APPEND | LOCK_EX) or Laravel's logger (separate channel) to ensure atomic writes.

Copilot uses AI. Check for mistakes.
Comment on lines +42 to +44
if (! is_dir($logDir)) {
mkdir($logDir, 0777, true);
}

CopilotAIMar 3, 2026

Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

mkdir($logDir, 0777, true) is not checked for failure, which can lead to warnings/notices and later log writes failing silently. Use a safer permission (e.g. 0755) and handle the failure case (or mirror Laravel's File::ensureDirectoryExists).

Copilot uses AI. Check for mistakes.
Comment on lines +49 to +50
file_put_contents($logFile, '');

CopilotAIMar 3, 2026

Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This command unconditionally truncates storage/logs/skills-validation.log (file_put_contents($logFile, '')). If the command is re-run locally while debugging, this discards prior validation history. Consider only truncating when an explicit --fresh/--reset-log flag is passed, or writing to a timestamped log file per run.

Copilot uses AI. Check for mistakes.
Comment on lines +30 to +33
env:
ANTHROPIC_API_KEY: ${{ secrets.ANTHROPIC_API_KEY }}
ANTHROPIC_MODEL: ${{ secrets.ANTHROPIC_MODEL }}
run: vendor/bin/pest --group=skills

CopilotAIMar 3, 2026

Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

ANTHROPIC_MODEL is set from ${{ secrets.ANTHROPIC_MODEL }}. If the secret is not configured, GitHub Actions will still set the env var to an empty string, which can override the default model selection in code/tests and cause AI calls to fail. Prefer omitting this env var when unset, or provide a default in the workflow expression (or in code treat empty string as “unset”).

Copilot uses AI. Check for mistakes.
$model = env('ANTHROPIC_MODEL', 'claude-3-5-sonnet@20240620');
$expectedJobs = iterator_to_array($finder);

Bus::assertDispatched(ValidateSkillJob::class, count($expectedJobs));

CopilotAIMar 3, 2026

Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Bus::assertDispatched() does not accept a dispatch count as the second argument (it expects an optional callback). Passing count($expectedJobs) here will be treated as a callback and can cause a type error / failed assertion. Use Bus::assertDispatchedTimes(ValidateSkillJob::class, count($expectedJobs)) (or keep assertDispatched() with a callback and separately assert the count).

Copilot uses AI. Check for mistakes.
@StanBarrows
StanBarrows merged commit 969aad0 into mainMar 3, 2026
2 checks passed
@StanBarrows
StanBarrows deleted the feature-claude branch March 3, 2026 10:14
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@StanBarrows
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Feature Claude - #4

Merged
StanBarrows merged 5 commits into
mainfrom
feature-claude
Mar 3, 2026
Merged

Feature Claude#4
StanBarrows merged 5 commits into
mainfrom
feature-claude

Conversation

@StanBarrows

Copy link
Copy Markdown
Contributor

No description provided.

CopilotAI review requested due to automatic review settings March 3, 2026 08:40

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

This PR pivots the package away from Composer-plugin-based syncing and toward a Laravel Boost–centric workflow, adding Claude/Laravel AI–backed validation of resources/boost/skills/**/SKILL.md via Pest + GitHub Actions, while also modernizing skill content structure and documentation.

Changes:

  • Add an AI-driven skills validation harness (Pest + Testbench + Laravel AI) and a GitHub Actions workflow to run it.
  • Update many skills to include compatible_agents frontmatter and improve/standardize skill content formatting.
  • Remove legacy Composer plugin/scripts/refactor command artifacts and the old GitHub Models–based skill integration workflow.

Reviewed changes

Copilot reviewed 99 out of 100 changed files in this pull request and generated 5 comments.

Show a summary per file
FileDescription
tests/TestCase.phpAdds a Testbench base test case registering Laravel AI/Prism providers for the test suite.
tests/Pest.phpConfigures Pest to use the package TestCase for feature tests.
tests/Feature/SkillValidationTest.phpAdds a feature test that drives skill validation by asserting jobs are dispatched per SKILL.md.
tests/Support/Agents/SkillQualityAgent.phpIntroduces a structured-output Laravel AI agent defining the skill-validation schema.
tests/Support/Console/ValidateSkillsCommand.phpAdds a command that discovers SKILL.md files and dispatches validation jobs (sync/async).
tests/Support/Jobs/ValidateSkillJob.phpImplements the queued job that calls the AI provider and logs structured results.
prompts/skill-validation.mdAdds a standalone prompt specification for skill validation criteria/JSON shape.
phpunit.xml.distAdds PHPUnit config and default env values for Anthropic model/key behavior.
.github/workflows/skills-validation.ymlAdds CI workflow to run composer validation + Pest skills group.
composer.jsonSwitches package type to library, adds Boost dependency and test/dev tooling deps.
RULES.mdExpands guidance around skill indexing, overrides, and compatible_agents.
README.mdRewrites docs toward Boost + multi-agent usage + Claude CI + skill validation workflow.
.gitignoreIgnores local phpunit.xml, Cursor folder, and generated validation logs.
AGENTS.mdAdds definitions and recommended usage patterns for multi-agent roles.
docs/skills/template-skill.mdAdds a reusable template for authoring skills in a workflow-oriented structure.
docs/concepts/mermaid/skill-template-flow.mmdAdds mermaid diagram for skill authoring/usage flow.
docs/concepts/mermaid/phpstan-analysis-flow.mmdAdds mermaid diagram for a PHPStan workflow flow.
resources/boost/skills/documentation/SKILL.mdAdds a new Documentation skill with a workflow/checklist format.
resources/boost/skills/actions/SKILL.mdReformats/expands Actions skill into a workflow/checklist structure.
resources/boost/skills/controllers/SKILL.mdReformats/expands Controllers skill into a workflow/checklist structure.
resources/boost/skills/general/SKILL.mdAdds compatible_agents and adds further-reading link.
resources/boost/skills/models/SKILL.mdAdds compatible_agents and reformats into a workflow/checklist structure.
resources/boost/skills/php/SKILL.mdAdds compatible_agents frontmatter.
resources/boost/skills/phpstan/SKILL.mdReformats/expands PHPStan skill and adds further-reading link.
resources/boost/skills/services/SKILL.mdReformats/expands Services skill into a workflow/checklist structure.
resources/boost/skills/albatros/SKILL.mdAdds compatible_agents frontmatter.
resources/boost/skills/blade/SKILL.mdAdds compatible_agents frontmatter.
resources/boost/skills/commands/SKILL.mdAdds compatible_agents frontmatter.
resources/boost/skills/design/SKILL.mdAdds compatible_agents frontmatter.
resources/boost/skills/docuware/SKILL.mdAdds compatible_agents frontmatter.
resources/boost/skills/dto/SKILL.mdAdds compatible_agents frontmatter.
resources/boost/skills/dusk/SKILL.mdAdds compatible_agents frontmatter.
resources/boost/skills/enums/SKILL.mdAdds compatible_agents frontmatter.
resources/boost/skills/events/SKILL.mdAdds compatible_agents frontmatter.
resources/boost/skills/exceptions/SKILL.mdAdds compatible_agents frontmatter.
resources/boost/skills/formrequests/SKILL.mdAdds compatible_agents frontmatter.
resources/boost/skills/general/SKILL.mdAdds further reading link section.
resources/boost/skills/helperfunctions/SKILL.mdAdds compatible_agents frontmatter.
resources/boost/skills/helpers/SKILL.mdAdds compatible_agents frontmatter.
resources/boost/skills/interfaces/SKILL.mdAdds compatible_agents frontmatter.
resources/boost/skills/jobs/SKILL.mdAdds compatible_agents frontmatter.
resources/boost/skills/livewire/SKILL.mdAdds compatible_agents frontmatter.
resources/boost/skills/middleware/SKILL.mdAdds compatible_agents frontmatter.
resources/boost/skills/migrations/SKILL.mdAdds compatible_agents frontmatter.
resources/boost/skills/observers/SKILL.mdAdds compatible_agents frontmatter.
resources/boost/skills/pesttesting/SKILL.mdAdds compatible_agents frontmatter.
resources/boost/skills/phpunit/SKILL.mdAdds compatible_agents frontmatter.
resources/boost/skills/policies/SKILL.mdAdds compatible_agents frontmatter.
resources/boost/skills/requests/SKILL.mdAdds compatible_agents frontmatter.
resources/boost/skills/resources/SKILL.mdAdds compatible_agents frontmatter.
resources/boost/skills/routing/SKILL.mdAdds compatible_agents frontmatter.
resources/boost/skills/saloon/SKILL.mdAdds compatible_agents frontmatter.
resources/boost/skills/tailwind/SKILL.mdAdds compatible_agents frontmatter.
resources/boost/skills/traits/SKILL.mdAdds compatible_agents frontmatter.
resources/boost/skills/translations/SKILL.mdAdds compatible_agents frontmatter.
src/Support/RefactorCommandSynchronizer.phpRemoves legacy Cursor refactor-command sync helper.
src/Console/SyncRefactorCommand.phpRemoves legacy artisan command for syncing Cursor refactor command.
src/Composer/RefactorCommandPlugin.phpRemoves Composer plugin implementation used to sync refactor.md.
src/CodingGuidelinesServiceProvider.phpRemoves service provider that previously registered console sync command.
scripts/validate-skills.phpRemoves legacy non-AI PHP script validation for skills frontmatter.
scripts/sync-guidelines.phpRemoves legacy git-clone/pull guideline sync script.
refactor.mdRemoves legacy Cursor /refactor prompt file.
.github/workflows/skill-integration.ymlRemoves disabled GitHub Models based skill integration workflow.
.github/workflows/ci.ymlRemoves old CI workflow that ran scripts/validate-skills.php.
.github/scripts/validate-skill-response.shRemoves bash validator for GitHub Models prompt responses.
.github/prompts/*.prompt.ymlRemoves multiple GitHub Models prompt definition files for skills.
Comments suppressed due to low confidence (1)

composer.json:21

  • autoload.psr-4 maps CodebarAg\\CodingGuidelines\\ to src/, but src/ does not exist in the repository after this PR. Either add the src/ directory (even if empty) or remove/adjust this PSR-4 mapping to avoid confusing autoload configuration and potential tooling warnings.

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

Comment on lines +108 to +112
file_put_contents(
$logFile,
json_encode($logEntry, JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES).PHP_EOL,
FILE_APPEND
);

CopilotAIMar 3, 2026

Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Jobs are dispatched per SKILL.md and may run concurrently; writing to a single shared log file with FILE_APPEND but without LOCK_EX can interleave writes and corrupt JSON lines. Consider using file_put_contents(..., FILE_APPEND | LOCK_EX) or Laravel's logger (separate channel) to ensure atomic writes.

Copilot uses AI. Check for mistakes.
Comment on lines +42 to +44
if (! is_dir($logDir)) {
mkdir($logDir, 0777, true);
}

CopilotAIMar 3, 2026

Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

mkdir($logDir, 0777, true) is not checked for failure, which can lead to warnings/notices and later log writes failing silently. Use a safer permission (e.g. 0755) and handle the failure case (or mirror Laravel's File::ensureDirectoryExists).

Copilot uses AI. Check for mistakes.
Comment on lines +49 to +50
file_put_contents($logFile, '');

CopilotAIMar 3, 2026

Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This command unconditionally truncates storage/logs/skills-validation.log (file_put_contents($logFile, '')). If the command is re-run locally while debugging, this discards prior validation history. Consider only truncating when an explicit --fresh/--reset-log flag is passed, or writing to a timestamped log file per run.

Copilot uses AI. Check for mistakes.
Comment on lines +30 to +33
env:
ANTHROPIC_API_KEY: ${{ secrets.ANTHROPIC_API_KEY }}
ANTHROPIC_MODEL: ${{ secrets.ANTHROPIC_MODEL }}
run: vendor/bin/pest --group=skills

CopilotAIMar 3, 2026

Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

ANTHROPIC_MODEL is set from ${{ secrets.ANTHROPIC_MODEL }}. If the secret is not configured, GitHub Actions will still set the env var to an empty string, which can override the default model selection in code/tests and cause AI calls to fail. Prefer omitting this env var when unset, or provide a default in the workflow expression (or in code treat empty string as “unset”).

Copilot uses AI. Check for mistakes.
$model = env('ANTHROPIC_MODEL', 'claude-3-5-sonnet@20240620');
$expectedJobs = iterator_to_array($finder);

Bus::assertDispatched(ValidateSkillJob::class, count($expectedJobs));

CopilotAIMar 3, 2026

Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Bus::assertDispatched() does not accept a dispatch count as the second argument (it expects an optional callback). Passing count($expectedJobs) here will be treated as a callback and can cause a type error / failed assertion. Use Bus::assertDispatchedTimes(ValidateSkillJob::class, count($expectedJobs)) (or keep assertDispatched() with a callback and separately assert the count).

Copilot uses AI. Check for mistakes.
@StanBarrows
StanBarrows merged commit 969aad0 into mainMar 3, 2026
2 checks passed
@StanBarrows
StanBarrows deleted the feature-claude branch March 3, 2026 10:14
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@StanBarrows
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

Feature Claude - #4

Merged
StanBarrows merged 5 commits into
mainfrom
feature-claude
Mar 3, 2026
Merged

Feature Claude#4
StanBarrows merged 5 commits into
mainfrom
feature-claude

Conversation

@StanBarrows

Copy link
Copy Markdown
Contributor

No description provided.

CopilotAI review requested due to automatic review settings March 3, 2026 08:40

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

This PR pivots the package away from Composer-plugin-based syncing and toward a Laravel Boost–centric workflow, adding Claude/Laravel AI–backed validation of resources/boost/skills/**/SKILL.md via Pest + GitHub Actions, while also modernizing skill content structure and documentation.

Changes:

  • Add an AI-driven skills validation harness (Pest + Testbench + Laravel AI) and a GitHub Actions workflow to run it.
  • Update many skills to include compatible_agents frontmatter and improve/standardize skill content formatting.
  • Remove legacy Composer plugin/scripts/refactor command artifacts and the old GitHub Models–based skill integration workflow.

Reviewed changes

Copilot reviewed 99 out of 100 changed files in this pull request and generated 5 comments.

Show a summary per file
FileDescription
tests/TestCase.phpAdds a Testbench base test case registering Laravel AI/Prism providers for the test suite.
tests/Pest.phpConfigures Pest to use the package TestCase for feature tests.
tests/Feature/SkillValidationTest.phpAdds a feature test that drives skill validation by asserting jobs are dispatched per SKILL.md.
tests/Support/Agents/SkillQualityAgent.phpIntroduces a structured-output Laravel AI agent defining the skill-validation schema.
tests/Support/Console/ValidateSkillsCommand.phpAdds a command that discovers SKILL.md files and dispatches validation jobs (sync/async).
tests/Support/Jobs/ValidateSkillJob.phpImplements the queued job that calls the AI provider and logs structured results.
prompts/skill-validation.mdAdds a standalone prompt specification for skill validation criteria/JSON shape.
phpunit.xml.distAdds PHPUnit config and default env values for Anthropic model/key behavior.
.github/workflows/skills-validation.ymlAdds CI workflow to run composer validation + Pest skills group.
composer.jsonSwitches package type to library, adds Boost dependency and test/dev tooling deps.
RULES.mdExpands guidance around skill indexing, overrides, and compatible_agents.
README.mdRewrites docs toward Boost + multi-agent usage + Claude CI + skill validation workflow.
.gitignoreIgnores local phpunit.xml, Cursor folder, and generated validation logs.
AGENTS.mdAdds definitions and recommended usage patterns for multi-agent roles.
docs/skills/template-skill.mdAdds a reusable template for authoring skills in a workflow-oriented structure.
docs/concepts/mermaid/skill-template-flow.mmdAdds mermaid diagram for skill authoring/usage flow.
docs/concepts/mermaid/phpstan-analysis-flow.mmdAdds mermaid diagram for a PHPStan workflow flow.
resources/boost/skills/documentation/SKILL.mdAdds a new Documentation skill with a workflow/checklist format.
resources/boost/skills/actions/SKILL.mdReformats/expands Actions skill into a workflow/checklist structure.
resources/boost/skills/controllers/SKILL.mdReformats/expands Controllers skill into a workflow/checklist structure.
resources/boost/skills/general/SKILL.mdAdds compatible_agents and adds further-reading link.
resources/boost/skills/models/SKILL.mdAdds compatible_agents and reformats into a workflow/checklist structure.
resources/boost/skills/php/SKILL.mdAdds compatible_agents frontmatter.
resources/boost/skills/phpstan/SKILL.mdReformats/expands PHPStan skill and adds further-reading link.
resources/boost/skills/services/SKILL.mdReformats/expands Services skill into a workflow/checklist structure.
resources/boost/skills/albatros/SKILL.mdAdds compatible_agents frontmatter.
resources/boost/skills/blade/SKILL.mdAdds compatible_agents frontmatter.
resources/boost/skills/commands/SKILL.mdAdds compatible_agents frontmatter.
resources/boost/skills/design/SKILL.mdAdds compatible_agents frontmatter.
resources/boost/skills/docuware/SKILL.mdAdds compatible_agents frontmatter.
resources/boost/skills/dto/SKILL.mdAdds compatible_agents frontmatter.
resources/boost/skills/dusk/SKILL.mdAdds compatible_agents frontmatter.
resources/boost/skills/enums/SKILL.mdAdds compatible_agents frontmatter.
resources/boost/skills/events/SKILL.mdAdds compatible_agents frontmatter.
resources/boost/skills/exceptions/SKILL.mdAdds compatible_agents frontmatter.
resources/boost/skills/formrequests/SKILL.mdAdds compatible_agents frontmatter.
resources/boost/skills/general/SKILL.mdAdds further reading link section.
resources/boost/skills/helperfunctions/SKILL.mdAdds compatible_agents frontmatter.
resources/boost/skills/helpers/SKILL.mdAdds compatible_agents frontmatter.
resources/boost/skills/interfaces/SKILL.mdAdds compatible_agents frontmatter.
resources/boost/skills/jobs/SKILL.mdAdds compatible_agents frontmatter.
resources/boost/skills/livewire/SKILL.mdAdds compatible_agents frontmatter.
resources/boost/skills/middleware/SKILL.mdAdds compatible_agents frontmatter.
resources/boost/skills/migrations/SKILL.mdAdds compatible_agents frontmatter.
resources/boost/skills/observers/SKILL.mdAdds compatible_agents frontmatter.
resources/boost/skills/pesttesting/SKILL.mdAdds compatible_agents frontmatter.
resources/boost/skills/phpunit/SKILL.mdAdds compatible_agents frontmatter.
resources/boost/skills/policies/SKILL.mdAdds compatible_agents frontmatter.
resources/boost/skills/requests/SKILL.mdAdds compatible_agents frontmatter.
resources/boost/skills/resources/SKILL.mdAdds compatible_agents frontmatter.
resources/boost/skills/routing/SKILL.mdAdds compatible_agents frontmatter.
resources/boost/skills/saloon/SKILL.mdAdds compatible_agents frontmatter.
resources/boost/skills/tailwind/SKILL.mdAdds compatible_agents frontmatter.
resources/boost/skills/traits/SKILL.mdAdds compatible_agents frontmatter.
resources/boost/skills/translations/SKILL.mdAdds compatible_agents frontmatter.
src/Support/RefactorCommandSynchronizer.phpRemoves legacy Cursor refactor-command sync helper.
src/Console/SyncRefactorCommand.phpRemoves legacy artisan command for syncing Cursor refactor command.
src/Composer/RefactorCommandPlugin.phpRemoves Composer plugin implementation used to sync refactor.md.
src/CodingGuidelinesServiceProvider.phpRemoves service provider that previously registered console sync command.
scripts/validate-skills.phpRemoves legacy non-AI PHP script validation for skills frontmatter.
scripts/sync-guidelines.phpRemoves legacy git-clone/pull guideline sync script.
refactor.mdRemoves legacy Cursor /refactor prompt file.
.github/workflows/skill-integration.ymlRemoves disabled GitHub Models based skill integration workflow.
.github/workflows/ci.ymlRemoves old CI workflow that ran scripts/validate-skills.php.
.github/scripts/validate-skill-response.shRemoves bash validator for GitHub Models prompt responses.
.github/prompts/*.prompt.ymlRemoves multiple GitHub Models prompt definition files for skills.
Comments suppressed due to low confidence (1)

composer.json:21

  • autoload.psr-4 maps CodebarAg\\CodingGuidelines\\ to src/, but src/ does not exist in the repository after this PR. Either add the src/ directory (even if empty) or remove/adjust this PSR-4 mapping to avoid confusing autoload configuration and potential tooling warnings.

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

Comment on lines +108 to +112
file_put_contents(
$logFile,
json_encode($logEntry, JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES).PHP_EOL,
FILE_APPEND
);

CopilotAIMar 3, 2026

Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Jobs are dispatched per SKILL.md and may run concurrently; writing to a single shared log file with FILE_APPEND but without LOCK_EX can interleave writes and corrupt JSON lines. Consider using file_put_contents(..., FILE_APPEND | LOCK_EX) or Laravel's logger (separate channel) to ensure atomic writes.

Copilot uses AI. Check for mistakes.
Comment on lines +42 to +44
if (! is_dir($logDir)) {
mkdir($logDir, 0777, true);
}

CopilotAIMar 3, 2026

Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

mkdir($logDir, 0777, true) is not checked for failure, which can lead to warnings/notices and later log writes failing silently. Use a safer permission (e.g. 0755) and handle the failure case (or mirror Laravel's File::ensureDirectoryExists).

Copilot uses AI. Check for mistakes.
Comment on lines +49 to +50
file_put_contents($logFile, '');

CopilotAIMar 3, 2026

Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This command unconditionally truncates storage/logs/skills-validation.log (file_put_contents($logFile, '')). If the command is re-run locally while debugging, this discards prior validation history. Consider only truncating when an explicit --fresh/--reset-log flag is passed, or writing to a timestamped log file per run.

Copilot uses AI. Check for mistakes.
Comment on lines +30 to +33
env:
ANTHROPIC_API_KEY: ${{ secrets.ANTHROPIC_API_KEY }}
ANTHROPIC_MODEL: ${{ secrets.ANTHROPIC_MODEL }}
run: vendor/bin/pest --group=skills

CopilotAIMar 3, 2026

Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

ANTHROPIC_MODEL is set from ${{ secrets.ANTHROPIC_MODEL }}. If the secret is not configured, GitHub Actions will still set the env var to an empty string, which can override the default model selection in code/tests and cause AI calls to fail. Prefer omitting this env var when unset, or provide a default in the workflow expression (or in code treat empty string as “unset”).

Copilot uses AI. Check for mistakes.
$model = env('ANTHROPIC_MODEL', 'claude-3-5-sonnet@20240620');
$expectedJobs = iterator_to_array($finder);

Bus::assertDispatched(ValidateSkillJob::class, count($expectedJobs));

CopilotAIMar 3, 2026

Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Bus::assertDispatched() does not accept a dispatch count as the second argument (it expects an optional callback). Passing count($expectedJobs) here will be treated as a callback and can cause a type error / failed assertion. Use Bus::assertDispatchedTimes(ValidateSkillJob::class, count($expectedJobs)) (or keep assertDispatched() with a callback and separately assert the count).

Copilot uses AI. Check for mistakes.
@StanBarrows
StanBarrows merged commit 969aad0 into mainMar 3, 2026
2 checks passed
@StanBarrows
StanBarrows deleted the feature-claude branch March 3, 2026 10:14
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@StanBarrows
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Feature Claude - #4

Merged
StanBarrows merged 5 commits into
mainfrom
feature-claude
Mar 3, 2026
Merged

Feature Claude#4
StanBarrows merged 5 commits into
mainfrom
feature-claude

Conversation

@StanBarrows

Copy link
Copy Markdown
Contributor

No description provided.

CopilotAI review requested due to automatic review settings March 3, 2026 08:40

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

This PR pivots the package away from Composer-plugin-based syncing and toward a Laravel Boost–centric workflow, adding Claude/Laravel AI–backed validation of resources/boost/skills/**/SKILL.md via Pest + GitHub Actions, while also modernizing skill content structure and documentation.

Changes:

  • Add an AI-driven skills validation harness (Pest + Testbench + Laravel AI) and a GitHub Actions workflow to run it.
  • Update many skills to include compatible_agents frontmatter and improve/standardize skill content formatting.
  • Remove legacy Composer plugin/scripts/refactor command artifacts and the old GitHub Models–based skill integration workflow.

Reviewed changes

Copilot reviewed 99 out of 100 changed files in this pull request and generated 5 comments.

Show a summary per file
FileDescription
tests/TestCase.phpAdds a Testbench base test case registering Laravel AI/Prism providers for the test suite.
tests/Pest.phpConfigures Pest to use the package TestCase for feature tests.
tests/Feature/SkillValidationTest.phpAdds a feature test that drives skill validation by asserting jobs are dispatched per SKILL.md.
tests/Support/Agents/SkillQualityAgent.phpIntroduces a structured-output Laravel AI agent defining the skill-validation schema.
tests/Support/Console/ValidateSkillsCommand.phpAdds a command that discovers SKILL.md files and dispatches validation jobs (sync/async).
tests/Support/Jobs/ValidateSkillJob.phpImplements the queued job that calls the AI provider and logs structured results.
prompts/skill-validation.mdAdds a standalone prompt specification for skill validation criteria/JSON shape.
phpunit.xml.distAdds PHPUnit config and default env values for Anthropic model/key behavior.
.github/workflows/skills-validation.ymlAdds CI workflow to run composer validation + Pest skills group.
composer.jsonSwitches package type to library, adds Boost dependency and test/dev tooling deps.
RULES.mdExpands guidance around skill indexing, overrides, and compatible_agents.
README.mdRewrites docs toward Boost + multi-agent usage + Claude CI + skill validation workflow.
.gitignoreIgnores local phpunit.xml, Cursor folder, and generated validation logs.
AGENTS.mdAdds definitions and recommended usage patterns for multi-agent roles.
docs/skills/template-skill.mdAdds a reusable template for authoring skills in a workflow-oriented structure.
docs/concepts/mermaid/skill-template-flow.mmdAdds mermaid diagram for skill authoring/usage flow.
docs/concepts/mermaid/phpstan-analysis-flow.mmdAdds mermaid diagram for a PHPStan workflow flow.
resources/boost/skills/documentation/SKILL.mdAdds a new Documentation skill with a workflow/checklist format.
resources/boost/skills/actions/SKILL.mdReformats/expands Actions skill into a workflow/checklist structure.
resources/boost/skills/controllers/SKILL.mdReformats/expands Controllers skill into a workflow/checklist structure.
resources/boost/skills/general/SKILL.mdAdds compatible_agents and adds further-reading link.
resources/boost/skills/models/SKILL.mdAdds compatible_agents and reformats into a workflow/checklist structure.
resources/boost/skills/php/SKILL.mdAdds compatible_agents frontmatter.
resources/boost/skills/phpstan/SKILL.mdReformats/expands PHPStan skill and adds further-reading link.
resources/boost/skills/services/SKILL.mdReformats/expands Services skill into a workflow/checklist structure.
resources/boost/skills/albatros/SKILL.mdAdds compatible_agents frontmatter.
resources/boost/skills/blade/SKILL.mdAdds compatible_agents frontmatter.
resources/boost/skills/commands/SKILL.mdAdds compatible_agents frontmatter.
resources/boost/skills/design/SKILL.mdAdds compatible_agents frontmatter.
resources/boost/skills/docuware/SKILL.mdAdds compatible_agents frontmatter.
resources/boost/skills/dto/SKILL.mdAdds compatible_agents frontmatter.
resources/boost/skills/dusk/SKILL.mdAdds compatible_agents frontmatter.
resources/boost/skills/enums/SKILL.mdAdds compatible_agents frontmatter.
resources/boost/skills/events/SKILL.mdAdds compatible_agents frontmatter.
resources/boost/skills/exceptions/SKILL.mdAdds compatible_agents frontmatter.
resources/boost/skills/formrequests/SKILL.mdAdds compatible_agents frontmatter.
resources/boost/skills/general/SKILL.mdAdds further reading link section.
resources/boost/skills/helperfunctions/SKILL.mdAdds compatible_agents frontmatter.
resources/boost/skills/helpers/SKILL.mdAdds compatible_agents frontmatter.
resources/boost/skills/interfaces/SKILL.mdAdds compatible_agents frontmatter.
resources/boost/skills/jobs/SKILL.mdAdds compatible_agents frontmatter.
resources/boost/skills/livewire/SKILL.mdAdds compatible_agents frontmatter.
resources/boost/skills/middleware/SKILL.mdAdds compatible_agents frontmatter.
resources/boost/skills/migrations/SKILL.mdAdds compatible_agents frontmatter.
resources/boost/skills/observers/SKILL.mdAdds compatible_agents frontmatter.
resources/boost/skills/pesttesting/SKILL.mdAdds compatible_agents frontmatter.
resources/boost/skills/phpunit/SKILL.mdAdds compatible_agents frontmatter.
resources/boost/skills/policies/SKILL.mdAdds compatible_agents frontmatter.
resources/boost/skills/requests/SKILL.mdAdds compatible_agents frontmatter.
resources/boost/skills/resources/SKILL.mdAdds compatible_agents frontmatter.
resources/boost/skills/routing/SKILL.mdAdds compatible_agents frontmatter.
resources/boost/skills/saloon/SKILL.mdAdds compatible_agents frontmatter.
resources/boost/skills/tailwind/SKILL.mdAdds compatible_agents frontmatter.
resources/boost/skills/traits/SKILL.mdAdds compatible_agents frontmatter.
resources/boost/skills/translations/SKILL.mdAdds compatible_agents frontmatter.
src/Support/RefactorCommandSynchronizer.phpRemoves legacy Cursor refactor-command sync helper.
src/Console/SyncRefactorCommand.phpRemoves legacy artisan command for syncing Cursor refactor command.
src/Composer/RefactorCommandPlugin.phpRemoves Composer plugin implementation used to sync refactor.md.
src/CodingGuidelinesServiceProvider.phpRemoves service provider that previously registered console sync command.
scripts/validate-skills.phpRemoves legacy non-AI PHP script validation for skills frontmatter.
scripts/sync-guidelines.phpRemoves legacy git-clone/pull guideline sync script.
refactor.mdRemoves legacy Cursor /refactor prompt file.
.github/workflows/skill-integration.ymlRemoves disabled GitHub Models based skill integration workflow.
.github/workflows/ci.ymlRemoves old CI workflow that ran scripts/validate-skills.php.
.github/scripts/validate-skill-response.shRemoves bash validator for GitHub Models prompt responses.
.github/prompts/*.prompt.ymlRemoves multiple GitHub Models prompt definition files for skills.
Comments suppressed due to low confidence (1)

composer.json:21

  • autoload.psr-4 maps CodebarAg\\CodingGuidelines\\ to src/, but src/ does not exist in the repository after this PR. Either add the src/ directory (even if empty) or remove/adjust this PSR-4 mapping to avoid confusing autoload configuration and potential tooling warnings.

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

Comment on lines +108 to +112
file_put_contents(
$logFile,
json_encode($logEntry, JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES).PHP_EOL,
FILE_APPEND
);

CopilotAIMar 3, 2026

Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Jobs are dispatched per SKILL.md and may run concurrently; writing to a single shared log file with FILE_APPEND but without LOCK_EX can interleave writes and corrupt JSON lines. Consider using file_put_contents(..., FILE_APPEND | LOCK_EX) or Laravel's logger (separate channel) to ensure atomic writes.

Copilot uses AI. Check for mistakes.
Comment on lines +42 to +44
if (! is_dir($logDir)) {
mkdir($logDir, 0777, true);
}

CopilotAIMar 3, 2026

Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

mkdir($logDir, 0777, true) is not checked for failure, which can lead to warnings/notices and later log writes failing silently. Use a safer permission (e.g. 0755) and handle the failure case (or mirror Laravel's File::ensureDirectoryExists).

Copilot uses AI. Check for mistakes.
Comment on lines +49 to +50
file_put_contents($logFile, '');

CopilotAIMar 3, 2026

Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This command unconditionally truncates storage/logs/skills-validation.log (file_put_contents($logFile, '')). If the command is re-run locally while debugging, this discards prior validation history. Consider only truncating when an explicit --fresh/--reset-log flag is passed, or writing to a timestamped log file per run.

Copilot uses AI. Check for mistakes.
Comment on lines +30 to +33
env:
ANTHROPIC_API_KEY: ${{ secrets.ANTHROPIC_API_KEY }}
ANTHROPIC_MODEL: ${{ secrets.ANTHROPIC_MODEL }}
run: vendor/bin/pest --group=skills

CopilotAIMar 3, 2026

Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

ANTHROPIC_MODEL is set from ${{ secrets.ANTHROPIC_MODEL }}. If the secret is not configured, GitHub Actions will still set the env var to an empty string, which can override the default model selection in code/tests and cause AI calls to fail. Prefer omitting this env var when unset, or provide a default in the workflow expression (or in code treat empty string as “unset”).

Copilot uses AI. Check for mistakes.
$model = env('ANTHROPIC_MODEL', 'claude-3-5-sonnet@20240620');
$expectedJobs = iterator_to_array($finder);

Bus::assertDispatched(ValidateSkillJob::class, count($expectedJobs));

CopilotAIMar 3, 2026

Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Bus::assertDispatched() does not accept a dispatch count as the second argument (it expects an optional callback). Passing count($expectedJobs) here will be treated as a callback and can cause a type error / failed assertion. Use Bus::assertDispatchedTimes(ValidateSkillJob::class, count($expectedJobs)) (or keep assertDispatched() with a callback and separately assert the count).

Copilot uses AI. Check for mistakes.
@StanBarrows
StanBarrows merged commit 969aad0 into mainMar 3, 2026
2 checks passed
@StanBarrows
StanBarrows deleted the feature-claude branch March 3, 2026 10:14
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@StanBarrows
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Feature Claude - #4

Merged
StanBarrows merged 5 commits into
mainfrom
feature-claude
Mar 3, 2026
Merged

Feature Claude#4
StanBarrows merged 5 commits into
mainfrom
feature-claude

Conversation

@StanBarrows

Copy link
Copy Markdown
Contributor

No description provided.

CopilotAI review requested due to automatic review settings March 3, 2026 08:40

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

This PR pivots the package away from Composer-plugin-based syncing and toward a Laravel Boost–centric workflow, adding Claude/Laravel AI–backed validation of resources/boost/skills/**/SKILL.md via Pest + GitHub Actions, while also modernizing skill content structure and documentation.

Changes:

  • Add an AI-driven skills validation harness (Pest + Testbench + Laravel AI) and a GitHub Actions workflow to run it.
  • Update many skills to include compatible_agents frontmatter and improve/standardize skill content formatting.
  • Remove legacy Composer plugin/scripts/refactor command artifacts and the old GitHub Models–based skill integration workflow.

Reviewed changes

Copilot reviewed 99 out of 100 changed files in this pull request and generated 5 comments.

Show a summary per file
FileDescription
tests/TestCase.phpAdds a Testbench base test case registering Laravel AI/Prism providers for the test suite.
tests/Pest.phpConfigures Pest to use the package TestCase for feature tests.
tests/Feature/SkillValidationTest.phpAdds a feature test that drives skill validation by asserting jobs are dispatched per SKILL.md.
tests/Support/Agents/SkillQualityAgent.phpIntroduces a structured-output Laravel AI agent defining the skill-validation schema.
tests/Support/Console/ValidateSkillsCommand.phpAdds a command that discovers SKILL.md files and dispatches validation jobs (sync/async).
tests/Support/Jobs/ValidateSkillJob.phpImplements the queued job that calls the AI provider and logs structured results.
prompts/skill-validation.mdAdds a standalone prompt specification for skill validation criteria/JSON shape.
phpunit.xml.distAdds PHPUnit config and default env values for Anthropic model/key behavior.
.github/workflows/skills-validation.ymlAdds CI workflow to run composer validation + Pest skills group.
composer.jsonSwitches package type to library, adds Boost dependency and test/dev tooling deps.
RULES.mdExpands guidance around skill indexing, overrides, and compatible_agents.
README.mdRewrites docs toward Boost + multi-agent usage + Claude CI + skill validation workflow.
.gitignoreIgnores local phpunit.xml, Cursor folder, and generated validation logs.
AGENTS.mdAdds definitions and recommended usage patterns for multi-agent roles.
docs/skills/template-skill.mdAdds a reusable template for authoring skills in a workflow-oriented structure.
docs/concepts/mermaid/skill-template-flow.mmdAdds mermaid diagram for skill authoring/usage flow.
docs/concepts/mermaid/phpstan-analysis-flow.mmdAdds mermaid diagram for a PHPStan workflow flow.
resources/boost/skills/documentation/SKILL.mdAdds a new Documentation skill with a workflow/checklist format.
resources/boost/skills/actions/SKILL.mdReformats/expands Actions skill into a workflow/checklist structure.
resources/boost/skills/controllers/SKILL.mdReformats/expands Controllers skill into a workflow/checklist structure.
resources/boost/skills/general/SKILL.mdAdds compatible_agents and adds further-reading link.
resources/boost/skills/models/SKILL.mdAdds compatible_agents and reformats into a workflow/checklist structure.
resources/boost/skills/php/SKILL.mdAdds compatible_agents frontmatter.
resources/boost/skills/phpstan/SKILL.mdReformats/expands PHPStan skill and adds further-reading link.
resources/boost/skills/services/SKILL.mdReformats/expands Services skill into a workflow/checklist structure.
resources/boost/skills/albatros/SKILL.mdAdds compatible_agents frontmatter.
resources/boost/skills/blade/SKILL.mdAdds compatible_agents frontmatter.
resources/boost/skills/commands/SKILL.mdAdds compatible_agents frontmatter.
resources/boost/skills/design/SKILL.mdAdds compatible_agents frontmatter.
resources/boost/skills/docuware/SKILL.mdAdds compatible_agents frontmatter.
resources/boost/skills/dto/SKILL.mdAdds compatible_agents frontmatter.
resources/boost/skills/dusk/SKILL.mdAdds compatible_agents frontmatter.
resources/boost/skills/enums/SKILL.mdAdds compatible_agents frontmatter.
resources/boost/skills/events/SKILL.mdAdds compatible_agents frontmatter.
resources/boost/skills/exceptions/SKILL.mdAdds compatible_agents frontmatter.
resources/boost/skills/formrequests/SKILL.mdAdds compatible_agents frontmatter.
resources/boost/skills/general/SKILL.mdAdds further reading link section.
resources/boost/skills/helperfunctions/SKILL.mdAdds compatible_agents frontmatter.
resources/boost/skills/helpers/SKILL.mdAdds compatible_agents frontmatter.
resources/boost/skills/interfaces/SKILL.mdAdds compatible_agents frontmatter.
resources/boost/skills/jobs/SKILL.mdAdds compatible_agents frontmatter.
resources/boost/skills/livewire/SKILL.mdAdds compatible_agents frontmatter.
resources/boost/skills/middleware/SKILL.mdAdds compatible_agents frontmatter.
resources/boost/skills/migrations/SKILL.mdAdds compatible_agents frontmatter.
resources/boost/skills/observers/SKILL.mdAdds compatible_agents frontmatter.
resources/boost/skills/pesttesting/SKILL.mdAdds compatible_agents frontmatter.
resources/boost/skills/phpunit/SKILL.mdAdds compatible_agents frontmatter.
resources/boost/skills/policies/SKILL.mdAdds compatible_agents frontmatter.
resources/boost/skills/requests/SKILL.mdAdds compatible_agents frontmatter.
resources/boost/skills/resources/SKILL.mdAdds compatible_agents frontmatter.
resources/boost/skills/routing/SKILL.mdAdds compatible_agents frontmatter.
resources/boost/skills/saloon/SKILL.mdAdds compatible_agents frontmatter.
resources/boost/skills/tailwind/SKILL.mdAdds compatible_agents frontmatter.
resources/boost/skills/traits/SKILL.mdAdds compatible_agents frontmatter.
resources/boost/skills/translations/SKILL.mdAdds compatible_agents frontmatter.
src/Support/RefactorCommandSynchronizer.phpRemoves legacy Cursor refactor-command sync helper.
src/Console/SyncRefactorCommand.phpRemoves legacy artisan command for syncing Cursor refactor command.
src/Composer/RefactorCommandPlugin.phpRemoves Composer plugin implementation used to sync refactor.md.
src/CodingGuidelinesServiceProvider.phpRemoves service provider that previously registered console sync command.
scripts/validate-skills.phpRemoves legacy non-AI PHP script validation for skills frontmatter.
scripts/sync-guidelines.phpRemoves legacy git-clone/pull guideline sync script.
refactor.mdRemoves legacy Cursor /refactor prompt file.
.github/workflows/skill-integration.ymlRemoves disabled GitHub Models based skill integration workflow.
.github/workflows/ci.ymlRemoves old CI workflow that ran scripts/validate-skills.php.
.github/scripts/validate-skill-response.shRemoves bash validator for GitHub Models prompt responses.
.github/prompts/*.prompt.ymlRemoves multiple GitHub Models prompt definition files for skills.
Comments suppressed due to low confidence (1)

composer.json:21

  • autoload.psr-4 maps CodebarAg\\CodingGuidelines\\ to src/, but src/ does not exist in the repository after this PR. Either add the src/ directory (even if empty) or remove/adjust this PSR-4 mapping to avoid confusing autoload configuration and potential tooling warnings.

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

Comment on lines +108 to +112
file_put_contents(
$logFile,
json_encode($logEntry, JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES).PHP_EOL,
FILE_APPEND
);

CopilotAIMar 3, 2026

Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Jobs are dispatched per SKILL.md and may run concurrently; writing to a single shared log file with FILE_APPEND but without LOCK_EX can interleave writes and corrupt JSON lines. Consider using file_put_contents(..., FILE_APPEND | LOCK_EX) or Laravel's logger (separate channel) to ensure atomic writes.

Copilot uses AI. Check for mistakes.
Comment on lines +42 to +44
if (! is_dir($logDir)) {
mkdir($logDir, 0777, true);
}

CopilotAIMar 3, 2026

Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

mkdir($logDir, 0777, true) is not checked for failure, which can lead to warnings/notices and later log writes failing silently. Use a safer permission (e.g. 0755) and handle the failure case (or mirror Laravel's File::ensureDirectoryExists).

Copilot uses AI. Check for mistakes.
Comment on lines +49 to +50
file_put_contents($logFile, '');

CopilotAIMar 3, 2026

Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This command unconditionally truncates storage/logs/skills-validation.log (file_put_contents($logFile, '')). If the command is re-run locally while debugging, this discards prior validation history. Consider only truncating when an explicit --fresh/--reset-log flag is passed, or writing to a timestamped log file per run.

Copilot uses AI. Check for mistakes.
Comment on lines +30 to +33
env:
ANTHROPIC_API_KEY: ${{ secrets.ANTHROPIC_API_KEY }}
ANTHROPIC_MODEL: ${{ secrets.ANTHROPIC_MODEL }}
run: vendor/bin/pest --group=skills

CopilotAIMar 3, 2026

Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

ANTHROPIC_MODEL is set from ${{ secrets.ANTHROPIC_MODEL }}. If the secret is not configured, GitHub Actions will still set the env var to an empty string, which can override the default model selection in code/tests and cause AI calls to fail. Prefer omitting this env var when unset, or provide a default in the workflow expression (or in code treat empty string as “unset”).

Copilot uses AI. Check for mistakes.
$model = env('ANTHROPIC_MODEL', 'claude-3-5-sonnet@20240620');
$expectedJobs = iterator_to_array($finder);

Bus::assertDispatched(ValidateSkillJob::class, count($expectedJobs));

CopilotAIMar 3, 2026

Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Bus::assertDispatched() does not accept a dispatch count as the second argument (it expects an optional callback). Passing count($expectedJobs) here will be treated as a callback and can cause a type error / failed assertion. Use Bus::assertDispatchedTimes(ValidateSkillJob::class, count($expectedJobs)) (or keep assertDispatched() with a callback and separately assert the count).

Copilot uses AI. Check for mistakes.
@StanBarrows
StanBarrows merged commit 969aad0 into mainMar 3, 2026
2 checks passed
@StanBarrows
StanBarrows deleted the feature-claude branch March 3, 2026 10:14
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@StanBarrows
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

Feature Claude - #4

Merged
StanBarrows merged 5 commits into
mainfrom
feature-claude
Mar 3, 2026
Merged

Feature Claude#4
StanBarrows merged 5 commits into
mainfrom
feature-claude

Conversation

@StanBarrows

Copy link
Copy Markdown
Contributor

No description provided.

CopilotAI review requested due to automatic review settings March 3, 2026 08:40

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

This PR pivots the package away from Composer-plugin-based syncing and toward a Laravel Boost–centric workflow, adding Claude/Laravel AI–backed validation of resources/boost/skills/**/SKILL.md via Pest + GitHub Actions, while also modernizing skill content structure and documentation.

Changes:

  • Add an AI-driven skills validation harness (Pest + Testbench + Laravel AI) and a GitHub Actions workflow to run it.
  • Update many skills to include compatible_agents frontmatter and improve/standardize skill content formatting.
  • Remove legacy Composer plugin/scripts/refactor command artifacts and the old GitHub Models–based skill integration workflow.

Reviewed changes

Copilot reviewed 99 out of 100 changed files in this pull request and generated 5 comments.

Show a summary per file
FileDescription
tests/TestCase.phpAdds a Testbench base test case registering Laravel AI/Prism providers for the test suite.
tests/Pest.phpConfigures Pest to use the package TestCase for feature tests.
tests/Feature/SkillValidationTest.phpAdds a feature test that drives skill validation by asserting jobs are dispatched per SKILL.md.
tests/Support/Agents/SkillQualityAgent.phpIntroduces a structured-output Laravel AI agent defining the skill-validation schema.
tests/Support/Console/ValidateSkillsCommand.phpAdds a command that discovers SKILL.md files and dispatches validation jobs (sync/async).
tests/Support/Jobs/ValidateSkillJob.phpImplements the queued job that calls the AI provider and logs structured results.
prompts/skill-validation.mdAdds a standalone prompt specification for skill validation criteria/JSON shape.
phpunit.xml.distAdds PHPUnit config and default env values for Anthropic model/key behavior.
.github/workflows/skills-validation.ymlAdds CI workflow to run composer validation + Pest skills group.
composer.jsonSwitches package type to library, adds Boost dependency and test/dev tooling deps.
RULES.mdExpands guidance around skill indexing, overrides, and compatible_agents.
README.mdRewrites docs toward Boost + multi-agent usage + Claude CI + skill validation workflow.
.gitignoreIgnores local phpunit.xml, Cursor folder, and generated validation logs.
AGENTS.mdAdds definitions and recommended usage patterns for multi-agent roles.
docs/skills/template-skill.mdAdds a reusable template for authoring skills in a workflow-oriented structure.
docs/concepts/mermaid/skill-template-flow.mmdAdds mermaid diagram for skill authoring/usage flow.
docs/concepts/mermaid/phpstan-analysis-flow.mmdAdds mermaid diagram for a PHPStan workflow flow.
resources/boost/skills/documentation/SKILL.mdAdds a new Documentation skill with a workflow/checklist format.
resources/boost/skills/actions/SKILL.mdReformats/expands Actions skill into a workflow/checklist structure.
resources/boost/skills/controllers/SKILL.mdReformats/expands Controllers skill into a workflow/checklist structure.
resources/boost/skills/general/SKILL.mdAdds compatible_agents and adds further-reading link.
resources/boost/skills/models/SKILL.mdAdds compatible_agents and reformats into a workflow/checklist structure.
resources/boost/skills/php/SKILL.mdAdds compatible_agents frontmatter.
resources/boost/skills/phpstan/SKILL.mdReformats/expands PHPStan skill and adds further-reading link.
resources/boost/skills/services/SKILL.mdReformats/expands Services skill into a workflow/checklist structure.
resources/boost/skills/albatros/SKILL.mdAdds compatible_agents frontmatter.
resources/boost/skills/blade/SKILL.mdAdds compatible_agents frontmatter.
resources/boost/skills/commands/SKILL.mdAdds compatible_agents frontmatter.
resources/boost/skills/design/SKILL.mdAdds compatible_agents frontmatter.
resources/boost/skills/docuware/SKILL.mdAdds compatible_agents frontmatter.
resources/boost/skills/dto/SKILL.mdAdds compatible_agents frontmatter.
resources/boost/skills/dusk/SKILL.mdAdds compatible_agents frontmatter.
resources/boost/skills/enums/SKILL.mdAdds compatible_agents frontmatter.
resources/boost/skills/events/SKILL.mdAdds compatible_agents frontmatter.
resources/boost/skills/exceptions/SKILL.mdAdds compatible_agents frontmatter.
resources/boost/skills/formrequests/SKILL.mdAdds compatible_agents frontmatter.
resources/boost/skills/general/SKILL.mdAdds further reading link section.
resources/boost/skills/helperfunctions/SKILL.mdAdds compatible_agents frontmatter.
resources/boost/skills/helpers/SKILL.mdAdds compatible_agents frontmatter.
resources/boost/skills/interfaces/SKILL.mdAdds compatible_agents frontmatter.
resources/boost/skills/jobs/SKILL.mdAdds compatible_agents frontmatter.
resources/boost/skills/livewire/SKILL.mdAdds compatible_agents frontmatter.
resources/boost/skills/middleware/SKILL.mdAdds compatible_agents frontmatter.
resources/boost/skills/migrations/SKILL.mdAdds compatible_agents frontmatter.
resources/boost/skills/observers/SKILL.mdAdds compatible_agents frontmatter.
resources/boost/skills/pesttesting/SKILL.mdAdds compatible_agents frontmatter.
resources/boost/skills/phpunit/SKILL.mdAdds compatible_agents frontmatter.
resources/boost/skills/policies/SKILL.mdAdds compatible_agents frontmatter.
resources/boost/skills/requests/SKILL.mdAdds compatible_agents frontmatter.
resources/boost/skills/resources/SKILL.mdAdds compatible_agents frontmatter.
resources/boost/skills/routing/SKILL.mdAdds compatible_agents frontmatter.
resources/boost/skills/saloon/SKILL.mdAdds compatible_agents frontmatter.
resources/boost/skills/tailwind/SKILL.mdAdds compatible_agents frontmatter.
resources/boost/skills/traits/SKILL.mdAdds compatible_agents frontmatter.
resources/boost/skills/translations/SKILL.mdAdds compatible_agents frontmatter.
src/Support/RefactorCommandSynchronizer.phpRemoves legacy Cursor refactor-command sync helper.
src/Console/SyncRefactorCommand.phpRemoves legacy artisan command for syncing Cursor refactor command.
src/Composer/RefactorCommandPlugin.phpRemoves Composer plugin implementation used to sync refactor.md.
src/CodingGuidelinesServiceProvider.phpRemoves service provider that previously registered console sync command.
scripts/validate-skills.phpRemoves legacy non-AI PHP script validation for skills frontmatter.
scripts/sync-guidelines.phpRemoves legacy git-clone/pull guideline sync script.
refactor.mdRemoves legacy Cursor /refactor prompt file.
.github/workflows/skill-integration.ymlRemoves disabled GitHub Models based skill integration workflow.
.github/workflows/ci.ymlRemoves old CI workflow that ran scripts/validate-skills.php.
.github/scripts/validate-skill-response.shRemoves bash validator for GitHub Models prompt responses.
.github/prompts/*.prompt.ymlRemoves multiple GitHub Models prompt definition files for skills.
Comments suppressed due to low confidence (1)

composer.json:21

  • autoload.psr-4 maps CodebarAg\\CodingGuidelines\\ to src/, but src/ does not exist in the repository after this PR. Either add the src/ directory (even if empty) or remove/adjust this PSR-4 mapping to avoid confusing autoload configuration and potential tooling warnings.

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

Comment on lines +108 to +112
file_put_contents(
$logFile,
json_encode($logEntry, JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES).PHP_EOL,
FILE_APPEND
);

CopilotAIMar 3, 2026

Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Jobs are dispatched per SKILL.md and may run concurrently; writing to a single shared log file with FILE_APPEND but without LOCK_EX can interleave writes and corrupt JSON lines. Consider using file_put_contents(..., FILE_APPEND | LOCK_EX) or Laravel's logger (separate channel) to ensure atomic writes.

Copilot uses AI. Check for mistakes.
Comment on lines +42 to +44
if (! is_dir($logDir)) {
mkdir($logDir, 0777, true);
}

CopilotAIMar 3, 2026

Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

mkdir($logDir, 0777, true) is not checked for failure, which can lead to warnings/notices and later log writes failing silently. Use a safer permission (e.g. 0755) and handle the failure case (or mirror Laravel's File::ensureDirectoryExists).

Copilot uses AI. Check for mistakes.
Comment on lines +49 to +50
file_put_contents($logFile, '');

CopilotAIMar 3, 2026

Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This command unconditionally truncates storage/logs/skills-validation.log (file_put_contents($logFile, '')). If the command is re-run locally while debugging, this discards prior validation history. Consider only truncating when an explicit --fresh/--reset-log flag is passed, or writing to a timestamped log file per run.

Copilot uses AI. Check for mistakes.
Comment on lines +30 to +33
env:
ANTHROPIC_API_KEY: ${{ secrets.ANTHROPIC_API_KEY }}
ANTHROPIC_MODEL: ${{ secrets.ANTHROPIC_MODEL }}
run: vendor/bin/pest --group=skills

CopilotAIMar 3, 2026

Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

ANTHROPIC_MODEL is set from ${{ secrets.ANTHROPIC_MODEL }}. If the secret is not configured, GitHub Actions will still set the env var to an empty string, which can override the default model selection in code/tests and cause AI calls to fail. Prefer omitting this env var when unset, or provide a default in the workflow expression (or in code treat empty string as “unset”).

Copilot uses AI. Check for mistakes.
$model = env('ANTHROPIC_MODEL', 'claude-3-5-sonnet@20240620');
$expectedJobs = iterator_to_array($finder);

Bus::assertDispatched(ValidateSkillJob::class, count($expectedJobs));

CopilotAIMar 3, 2026

Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Bus::assertDispatched() does not accept a dispatch count as the second argument (it expects an optional callback). Passing count($expectedJobs) here will be treated as a callback and can cause a type error / failed assertion. Use Bus::assertDispatchedTimes(ValidateSkillJob::class, count($expectedJobs)) (or keep assertDispatched() with a callback and separately assert the count).

Copilot uses AI. Check for mistakes.
@StanBarrows
StanBarrows merged commit 969aad0 into mainMar 3, 2026
2 checks passed
@StanBarrows
StanBarrows deleted the feature-claude branch March 3, 2026 10:14
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@StanBarrows