You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
ci(framework): mechanically enforce cross-plugin orthogonality on PRs #250
Mechanically enforce the architecture rules a PR can silently break. Today they are self-attested at best, and #406 is the proof: aidd-orchestrator hardcodes aidd-dev, violating cross-plugin orthogonality, and nothing caught it.
One does not replace the other. Without this check, #406 recurs.
What to enforce
Cross-plugin orthogonality. No plugin references another by name. docs/ARCHITECTURE.md states the rule; nothing verifies it. A grep for aidd-<plugin>: outside its own plugin is a first approximation, but skill descriptions and routing regexes need a real check.
Docs match behavior. A change to a skill's actions that leaves its description and SKILL.md router table stale.
Note on the original scope
This issue was written when .github/PULL_REQUEST_TEMPLATE.md carried a checklist with "Docs updated" and "No cross-plugin references introduced". That checklist is gone: the template now certifies one thing only, that a human read every line. The rules survive in docs/ARCHITECTURE.md, unenforced — which is exactly the gap this issue fills.
Acceptance criteria
A PR introducing a hardcoded aidd-<plugin>: address outside its own plugin fails a check.
The check names the file and line, not just the rule.
Un unique vérificateur d’orthogonalité est exécuté à deux niveaux :
Pré-commit local : Lefthook l’exécute sur les fichiers modifiés et bloque le commit avec le fichier, la ligne et le plugin propriétaire.
CI :validate.yml exécute les mêmes hooks sur toute l’arborescence. Elle reste l’autorité finale et bloque toute contribution ayant contourné le hook local.
Le garde-fou est un hook Git, pas un hook IA : il doit être déterministe, valable pour tous les outils et ne jamais dépendre d’un événement ou d’une configuration d’hôte IA.
Les deux niveaux vérifient les adresses inter-plugins et la cohérence entre actions, description et routeur d’un skill.
changed the title [-]Automate the two mechanical 'I certify' PR checks via a Claude Code hook or CI[/-][+]AI PR auditor: analyze each PR against the certify criteria (semantic, not regex)[/+]on Jun 6, 2026
changed the title [-]AI PR auditor: analyze each PR against the certify criteria (semantic, not regex)[/-][+]AI check that PRs actually respect the certify checklist[/+]on Jun 6, 2026
changed the title [-]AI check that PRs actually respect the certify checklist[/-][+]feat: AI check that PRs respect the certify checklist[/+]on Jun 6, 2026
changed the title [-]feat: AI check that PRs respect the certify checklist[/-][+]ci(framework): mechanically enforce cross-plugin orthogonality on PRs[/+]on Jul 10, 2026
#406 is completed, so it must no longer block this issue and cannot remain its regression fixture.
The enforcement mechanism also needs to follow the project decision: do not impose a Git pre-commit hook or CI gate. Use a host-native AI lifecycle hook generated by the owning hook capability.
Keep the checks narrow: identify a hardcoded cross-plugin address or a router/description mismatch, name the file and line, and prevent the AI write until it is corrected. Use synthetic fixtures, not the historical code from #406.
This remains a Medium Task in Todo once the obsolete blocker is removed.
Activity
[-]Automate the two mechanical 'I certify' PR checks via a Claude Code hook or CI[/-][+]AI PR auditor: analyze each PR against the certify criteria (semantic, not regex)[/+][-]AI PR auditor: analyze each PR against the certify criteria (semantic, not regex)[/-][+]AI check that PRs actually respect the certify checklist[/+][-]AI check that PRs actually respect the certify checklist[/-][+]feat: AI check that PRs respect the certify checklist[/+][-]feat: AI check that PRs respect the certify checklist[/-][+]ci(framework): mechanically enforce cross-plugin orthogonality on PRs[/+]blafourcade commentedon Sep 14, 2026
#406 is completed, so it must no longer block this issue and cannot remain its regression fixture.
The enforcement mechanism also needs to follow the project decision: do not impose a Git pre-commit hook or CI gate. Use a host-native AI lifecycle hook generated by the owning hook capability.
Keep the checks narrow: identify a hardcoded cross-plugin address or a router/description mismatch, name the file and line, and prevent the AI write until it is corrected. Use synthetic fixtures, not the historical code from #406.
This remains a Medium Task in Todo once the obsolete blocker is removed.
test(framework): rule two decided by one property over every router s…
refactor(framework): the guard reads without its commentary
docs(framework): the decisions table holds what the code stopped saying
feat(framework): the same two rules refuse an edit at commit time, fo…
feat(framework): refuse an AI edit that breaks a named architecture r…
fix(framework): three reviewers found what the author did not
chore(framework): the architecture rules are enforced where every too…