Synthèse automatique
Cette skill exécute un audit d'architecture par grep sur une base Swift/Core Data afin de détecter le contournement de factory, les affectations brutes, les fetch non cloisonnés par householdKey et les sauvegardes de contexte dans les vues.
Points forts
- Fournit des commandes grep prêtes à l'emploi avec le résultat attendu pour chaque vérification
- Encode des décisions d'architecture explicites (ADR 013 et 014) et liste les fichiers exemptés (tests, previews, seeders, factory)
- Distingue les faux positifs légitimes, notamment les blocs #Preview et les extensions PreviewProvider dans les fichiers de production
- Déclare explicitement un non-goal pour la couche Views, ce qui évite de signaler des violations inexistantes
Limites
- Les motifs grep et les chemins sont codés en dur pour un projet précis (entités WeeklyList, Recipe, etc. et arborescence forager/), donc la skill doit être adaptée pour être réutilisée ailleurs
- L'analyse est purement textuelle : elle ne comprend pas la sémantique du code et peut rater des créations indirectes ou produire des faux positifs selon les exclusions glob
- La vérification du prédicat householdKey repose sur une inspection manuelle du fichier autour de la requête, non automatisée
À lancer avant une PR ou un jalon qui touche la couche service/modèle, ou dès qu'un nouveau point de création d'objets Core Data est envisagé.
Inutile sur un projet qui n'utilise ni Core Data ni le pattern factory/householdKey décrit dans ces ADR, ou pour auditer la couche Views, explicitement hors périmètre.
Analyse de sécurité
SûrThe skill only performs read-only grep searches over Swift source files to detect architectural violations. It does not execute arbitrary code, delete files, exfiltrate data, access secrets, or disable safety mechanisms.
Aucun point d'attention détecté
Comment cette analyse est faiteExemples
Run the architecture audit before I open the PR for the meal-planning milestone that adds new Core Data creation sites.I'm about to create Recipe objects directly inside a view model — check the codebase for factory bypass violations of ADR 014.Audit my new fetch requests in the Services and Repositories layers to confirm every HouseholdScoped fetch has a householdKey predicate.name: architecture-audit description: Check codebase for architectural violations (factory bypass, raw assign, scope compliance, service layer). TRIGGER when the user discusses creating Core Data objects in production code, adding new entity creation sites, or before PR creation on milestones that touch the service/model layer. user_invocable: true
Architecture Audit
Run this audit before any milestone that creates Core Data objects, during code review, and as a quality gate.
Checks
1. Factory Bypass Detection (ADR 014)
Search for direct creation of HouseholdScoped entities outside exempt files:
# Search for direct Entity(context:) for HouseholdScoped types
grep -rn 'WeeklyList(context:\|Recipe(context:\|PlannedMeal(context:\|MealPlan(context:\|Category(context:\|IngredientTemplate(context:' \
--include='*.swift' \
--exclude-dir=foragerTests \
--exclude-dir=foragerUITests \
--exclude='*Preview*' \
--exclude='DefaultSeeder.swift' \
--exclude='SampleDataSeeder.swift' \
--exclude='ManagedObjectFactory.swift' \
--exclude='HouseholdService.swift'
Expected: Zero matches in non-exempt production files. Exempt files: Tests, previews, seeders, HouseholdService (migration), ManagedObjectFactory itself. Note: Repository files may have fallback paths with direct creation — these are acceptable IF they also have factory-first branches.
2. Raw Assign Detection
Search for viewContext.assign( or context.assign( outside ManagedObjectFactory.swift:
grep -rn 'viewContext\.assign(\|context\.assign(' --include='*.swift' --exclude='ManagedObjectFactory.swift'
Expected: Zero matches.
3. ADR 013 Scope Compliance (services + repositories only)
Search for HouseholdScoped fetch requests missing householdKey predicate in the
service + repository layers:
# Look for fetch requests on HouseholdScoped entities in Services/ and Repositories/ ONLY
grep -rn 'NSFetchRequest<WeeklyList>\|NSFetchRequest<Recipe>\|NSFetchRequest<MealPlan>\|NSFetchRequest<PlannedMeal>\|NSFetchRequest<Category>\|NSFetchRequest<IngredientTemplate>\|NSFetchRequest<GroceryListItem>\|NSFetchRequest<Ingredient>\|NSFetchRequest<Store>' \
Services/ forager/Repositories/ \
--include='*.swift'
Then verify each fetch includes a householdKey predicate (grep the same file within ~10 lines after the declaration for the string householdKey).
Non-goal — view-layer @FetchRequest: this check intentionally does NOT scan
forager/Views/. The view-layer in-memory-filter pattern is emergent (first
appeared f263730 on 2026-01-18; spread by copy-paste across 24 views; not
formalized by any ADR) and is deferred to a future change named
decide-view-layer-scope-architecture which will evaluate alternatives, pilot
one, migrate all ~43 sites, and only then write a definitive ADR. Do NOT extend
this check to forager/Views/ before that future change lands — the bare
@FetchRequest on a HouseholdScoped entity is NOT a violation of ADR 013 today.
See the auto-memory entry project_scope_safety_three_layers.md for context.
4. Service Layer Compliance
Search for context.save() in production view files (views should use services).
Previews are exempt — #Preview { } blocks and PreviewProvider extensions are a
legitimate standalone environment that may call context.save() to stage preview
data.
# Production view saves: exclude dedicated preview files via glob
grep -rn 'context\.save()\|viewContext\.save()' forager/Views/ \
--include='*.swift' \
--exclude='*Preview*'
Manual follow-up: matches inside #Preview { ... } macro blocks or
PreviewProvider extension bodies (in files NOT named *Preview*) are
also legitimate. Discount them when reporting violations. For each reported
match, open the file and confirm it is outside any #Preview { } block and
outside any PreviewProvider extension before flagging it.
Expected: Zero production matches (all production saves through service layer).
How to Run
Use the Grep tool to execute each check. Report violations with file:line references.
When to Run
- Before starting any milestone that creates Core Data objects
- During code review / PR creation
- After completing service or view layer changes
- As a quality gate before marking milestone complete
Du fichier au premier essai
Le téléchargement contient exactement le contenu affiché sur cette fiche. Cette copie peut différer de la dernière version du dépôt source.
Consulter la source et ses fichiers annexesCe téléchargement contient uniquement SKILL.md. Les scripts, références, modèles et dépendances éventuels ne sont pas inclus. Récupérez les fichiers nécessaires depuis la source en conservant leur arborescence avant de poursuivre.
1. Télécharger le fichier
Télécharger SKILL.mdDepuis la racine d’un projet de test, enregistrez le fichier sous .skill-downloads/architecture-audit-mrwak9j9/SKILL.md, ou utilisez la commande suivante. Ce dossier sert à examiner la skill avant son installation.
Commande pour macOS/Linux ou WSL : un shell POSIX et curl sont nécessaires. Sous Windows sans WSL, utilisez le bouton de téléchargement et créez le dossier manuellement.
mkdir -p '.skill-downloads/architecture-audit-mrwak9j9' && curl --fail --show-error --location 'https://skills-guides.com/api/skills/architecture-audit-mrwak9j9/download' --output '.skill-downloads/architecture-audit-mrwak9j9/SKILL.md.part' && mv '.skill-downloads/architecture-audit-mrwak9j9/SKILL.md.part' '.skill-downloads/architecture-audit-mrwak9j9/SKILL.md'2. Vérifier les prérequis
Lisez SKILL.md avant de l’utiliser. Si le fichier cite des scripts ou services externes, examinez-les et préparez les accès nécessaires dans votre environnement de test.
Aucune section de prérequis reconnue dans ce fichier. Cela ne signifie pas qu’il est autonome : les bibliothèques, outils et accès peuvent être cités ailleurs dans le contenu ou dans le dépôt source.
Les plateformes de la fiche sont des indications du catalogue. Les chemins ci-dessous suivent la documentation des outils ; ils ne prouvent pas que cette skill y a été exécutée. Aucune version minimale de ces outils n’est attestée pour cette fiche.
3. Charger la skill
Après vérification, copiez le dossier complet dans le projet avec l’une des commandes ci-dessous, puis ouvrez une nouvelle session de l’outil. La commande s’arrête si un dossier du même nom existe déjà : comparez les fichiers avant de le remplacer.
Claude Code
test -f '.skill-downloads/architecture-audit-mrwak9j9/SKILL.md' && test -s '.skill-downloads/architecture-audit-mrwak9j9/SKILL.md' && mkdir -p '.claude/skills' && test ! -e '.claude/skills/architecture-audit' && cp -R '.skill-downloads/architecture-audit-mrwak9j9' '.claude/skills/architecture-audit'Cursor
test -f '.skill-downloads/architecture-audit-mrwak9j9/SKILL.md' && test -s '.skill-downloads/architecture-audit-mrwak9j9/SKILL.md' && mkdir -p '.cursor/skills' && test ! -e '.cursor/skills/architecture-audit' && cp -R '.skill-downloads/architecture-audit-mrwak9j9' '.cursor/skills/architecture-audit'Codex
test -f '.skill-downloads/architecture-audit-mrwak9j9/SKILL.md' && test -s '.skill-downloads/architecture-audit-mrwak9j9/SKILL.md' && mkdir -p '.agents/skills' && test ! -e '.agents/skills/architecture-audit' && cp -R '.skill-downloads/architecture-audit-mrwak9j9' '.agents/skills/architecture-audit'OpenSkills
OpenSkills doit déjà être installé. La procédure locale install/read est contrôlée avec OpenSkills 1.5.0, qui exige Node.js ≥ 20.6.0. Aucun slug du catalogue n’est résolu automatiquement.
Installation officielle d’OpenSkillsopenskills install './.skill-downloads/architecture-audit-mrwak9j9'openskills read 'architecture-audit-mrwak9j9'La lecture doit afficher le contenu du fichier installé et son dossier de base. Elle ne lance ni la skill ni ses dépendances.
Pour un agent qui lit AGENTS.md, synchronisez ensuite l’index. Cette commande modifie AGENTS.md : relisez le diff avant de l’utiliser.
openskills syncMode manuel ou autre outil : joignez SKILL.md à une conversation, ou ouvrez-le dans un agent capable de lire les fichiers. Ajoutez les ressources annexes nécessaires. Il n’existe pas de dossier universel reconnu par tous les outils.
4. Faire un premier essai
Utilisez une entrée courte et fictive : un endpoint d’API, un petit document ou un brief d’interface. Dans une nouvelle conversation, joignez le fichier ou donnez son chemin à l’agent, puis adaptez cette demande :
Lis .skill-downloads/architecture-audit-mrwak9j9/SKILL.md et applique ses instructions à cet exemple : [décrire une entrée de test]. Indique les fichiers, dépendances ou accès qui manquent. Produis le résultat demandé par la skill sans inventer de données ni exécuter de script non examiné.Résultat attendu : une sortie correspondant aux instructions de la skill, ou une liste précise des prérequis manquants. Une simple confirmation de lecture ne valide pas le premier usage. Si une ressource externe est indisponible, ce parcours reste à tester.
Bonnes pratiques React Hook Form
Developpement
Maîtrisez React Hook Form : évitez les anti-patterns, gérez les abonnements, et traitez correctement reset, dirty state et entrées contrôlées.
Migration Emotion vers Mantine
Developpement
Migrer les styled-components Emotion vers des composants Mantine avec style props et modules CSS. Pour convertir .styled.tsx ou supprimer les imports @emotion.
Détecteur de dérive de périmètre
Developpement
Analyse les diffs git par rapport à une intention pour détecter la dérive de périmètre, fichiers non liés et PR trop larges, puis suggère de garder, diviser ou justifier.