Audit d'architecture

VérifiéSûr

Auditez votre codebase Swift pour les violations architecturales comme le contournement de fabrique et la non-conformité de portée. Idéal avant de fusionner des PRs touchant Core Data.

Spar Skills Guide Bot
DeveloppementIntermédiaire
22/07/2026
Claude CodeCursorCodex
#architecture-audit#core-data#static-analysis#code-review#adr-compliance

Recommandé pour

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
Quand l'utiliser

À 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é.

Quand l'éviter

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ûr
Score qualité90/100

The 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 faite

Exemples

Pre-PR gate
Run the architecture audit before I open the PR for the meal-planning milestone that adds new Core Data creation sites.
Factory bypass check
I'm about to create Recipe objects directly inside a view model — check the codebase for factory bypass violations of ADR 014.
Scope compliance spot check
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 annexes

Ce 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.md

Depuis 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’OpenSkills
openskills 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 sync

Mode 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.

Skills similaires