@dev-kosaly/kagents 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +34 -0
- package/README.md +35 -0
- package/agents/architect.md +166 -0
- package/agents/database_expert.md +167 -0
- package/bin/kagents.js +348 -0
- package/checklists/catalyst-change.md +10 -0
- package/checklists/review.md +26 -0
- package/commands/arch-audit.md +10 -0
- package/commands/arch-design.md +10 -0
- package/commands/arch-feature.md +10 -0
- package/commands/base-audit.md +10 -0
- package/commands/base-design.md +10 -0
- package/commands/base-evolve.md +10 -0
- package/governance/actions.yaml +36 -0
- package/package.json +34 -0
- package/skills/README.md +31 -0
- package/skills/architecture-impact/SKILL.md +68 -0
- package/skills/audit-repository/SKILL.md +53 -0
- package/skills/catalyst-export/SKILL.md +63 -0
- package/skills/db-analysis/SKILL.md +52 -0
- package/skills/db-docs/SKILL.md +177 -0
- package/skills/feature-analysis/SKILL.md +52 -0
- package/skills/schema-exploration/SKILL.md +60 -0
- package/skills/write-change-brief/SKILL.md +63 -0
- package/templates/adr/template.md +17 -0
- package/templates/change-brief/template.md +22 -0
- package/workflows/README.md +10 -0
- package/workflows/bug-local.md +9 -0
- package/workflows/existing-project.md +11 -0
- package/workflows/impact-levels.yaml +47 -0
- package/workflows/new-feature.md +13 -0
- package/workflows/new-project.md +11 -0
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: catalyst-export
|
|
3
|
+
description: Demander, lire et exploiter l'export JSON d'un projet Zoho Catalyst (tables Data Store, colonnes, clés étrangères, permissions, règles de sécurité) sans le charger en entier.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Export Catalyst
|
|
7
|
+
|
|
8
|
+
## 1. Pourquoi
|
|
9
|
+
Les tables Data Store sont définies dans la console Catalyst, pas dans le repository. Le code ne dit rien des types exacts, de l'obligation, de l'unicité, des clés étrangères ni des permissions. **L'export JSON du projet est la source de vérité du schéma.** Il se trouve dans `.kagents/docs/knowledge/catalyst-export/`.
|
|
10
|
+
|
|
11
|
+
## 2. Vérifier sa présence et sa fraîcheur
|
|
12
|
+
- **Présent** : il fait foi. Note son nom et sa date dans `INDEX.md` et dans l'en-tête de `schema-map.md`.
|
|
13
|
+
- **Absent**, ou **plus ancien** que des changements visibles dans le code (nouvelle table ou colonne utilisée) : demande-le (section 3). En attendant, reconstruis ce que tu peux depuis le code et classe le reste en **Inconnu**.
|
|
14
|
+
|
|
15
|
+
## 3. Demander l'export
|
|
16
|
+
Avant un audit ou une évolution, en quelques lignes. Par exemple :
|
|
17
|
+
|
|
18
|
+
> Avant de fouiller, un petit service : le schéma Catalyst vit dans la console, pas dans le code. Sans lui, je devine les types et les relations, et deviner n'est pas auditer.
|
|
19
|
+
> Exporte le projet depuis la console Catalyst (fichier JSON), puis dépose-le dans `.kagents/docs/knowledge/catalyst-export/`. Deux minutes, et mon audit gagne en précision.
|
|
20
|
+
> Tu préfères que je commence sans ? Possible, mais tout ce qui touche au schéma sera marqué Inconnu.
|
|
21
|
+
|
|
22
|
+
## 4. Lire l'export sans le charger en entier
|
|
23
|
+
L'export pèse souvent plusieurs centaines de Ko et contient des milliers d'entrées. Ne l'ouvre jamais en entier. Extrais seulement ce dont tu as besoin avec `jq` (ou un court script Python si `jq` est absent), puis résume dans la carte. Une fois la carte construite, c'est elle que tu relis, pas l'export.
|
|
24
|
+
|
|
25
|
+
### Structure utile
|
|
26
|
+
Sous `components` :
|
|
27
|
+
- `Datastore` : la base. Chaque entrée a un `type` :
|
|
28
|
+
- `table` : `properties.table_name` ;
|
|
29
|
+
- `column` : `table_name`, `column_name`, `data_type` (`varchar`, `text`, `int`, `bigint`, `double`, `boolean`, `date`, `datetime`, `foreign key`…), `is_mandatory`, `is_unique`, `max_length`, `default_value`, `search_index_enabled` ; pour une clé étrangère : `parent_table`, `parent_column`, `constraint_type` (ex. `ON-DELETE-SET-NULL`) ;
|
|
30
|
+
- `tableScope` et `tablePermission` : portée et droits (`SELECT`, `INSERT`, `UPDATE`, `DELETE`) par rôle et par table.
|
|
31
|
+
- `SecurityRules` : règles d'accès aux endpoints (méthodes, `authentication`).
|
|
32
|
+
- `Authentication` : rôles et configuration d'authentification.
|
|
33
|
+
- Le reste (`Functions`, `Cron`, `SchedulingCron`, `Filestore`, `Cache`, `AppSail`…) : seulement si une question précise l'exige.
|
|
34
|
+
|
|
35
|
+
### Extractions types
|
|
36
|
+
|
|
37
|
+
```bash
|
|
38
|
+
F=.kagents/docs/knowledge/catalyst-export/*.json
|
|
39
|
+
# Liste des tables
|
|
40
|
+
jq -r '.components.Datastore[] | select(.type=="table") | .properties.table_name' $F
|
|
41
|
+
# Colonnes d'une table
|
|
42
|
+
jq -r '.components.Datastore[] | select(.type=="column" and .properties.table_name=="TABLE")
|
|
43
|
+
| .properties | [.column_name,.data_type,.is_mandatory,.is_unique,.max_length] | @tsv' $F
|
|
44
|
+
# Toutes les clés étrangères
|
|
45
|
+
jq -r '.components.Datastore[] | select(.type=="column" and .properties.data_type=="foreign key")
|
|
46
|
+
| .properties | "\(.table_name).\(.column_name) -> \(.parent_table).\(.parent_column) [\(.constraint_type)]"' $F
|
|
47
|
+
# Permissions d'une table
|
|
48
|
+
jq -r '.components.Datastore[] | select(.type=="tablePermission" and .properties.table_name=="TABLE")
|
|
49
|
+
| .properties | "\(.role_name): \(.table_permissions|join(","))"' $F
|
|
50
|
+
```
|
|
51
|
+
|
|
52
|
+
## 5. Croiser avec le code
|
|
53
|
+
- Table ou colonne utilisée dans le code mais absente de l'export, ou l'inverse : écart à signaler.
|
|
54
|
+
- Colonne qui ressemble à un identifiant (`*_id`) mais n'est pas déclarée en `foreign key` : intégrité non garantie.
|
|
55
|
+
|
|
56
|
+
## 6. Points d'attention systématiques
|
|
57
|
+
- Rôles ayant `DELETE` sur des tables sensibles.
|
|
58
|
+
- Règles de sécurité avec `authentication` optionnelle.
|
|
59
|
+
- Absence d'unicité sur des valeurs métier uniques.
|
|
60
|
+
- Clés étrangères en `ON-DELETE-SET-NULL` sur des liens qui ne devraient jamais être vides.
|
|
61
|
+
|
|
62
|
+
## 7. Limites de la plateforme
|
|
63
|
+
Tiens compte des limites propres à Catalyst (capacités de ZCQL, contraintes disponibles, quotas). Ne les suppose pas : si une limite conditionne ta proposition, indique-la comme point à vérifier dans la documentation officielle Catalyst.
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: db-analysis
|
|
3
|
+
description: Grille d'analyse d'une base de données (intégrité, sécurité, performance, maintenabilité, évolutivité) et niveaux de sévérité pour classer les problèmes observés.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Analyse de la base
|
|
7
|
+
|
|
8
|
+
Ne signale que ce que tu as observé, avec sa preuve (fichier et ligne, ou entrée de l'export).
|
|
9
|
+
|
|
10
|
+
## Intégrité
|
|
11
|
+
- Clés étrangères absentes alors qu'une relation existe dans le code.
|
|
12
|
+
- Unicité manquante sur des valeurs métier uniques (email, référence, slug).
|
|
13
|
+
- Nullabilité ou valeurs par défaut incohérentes.
|
|
14
|
+
- Suppression en cascade dangereuse, ou orphelins possibles.
|
|
15
|
+
- Règles métier garanties seulement par le code alors qu'elles devraient l'être en base.
|
|
16
|
+
- Opérations multi-étapes sans transaction (ou sans mécanisme compensatoire quand la plateforme n'en offre pas).
|
|
17
|
+
- Types inadaptés (montants en flottant, dates en chaîne, énumérations en texte libre).
|
|
18
|
+
|
|
19
|
+
## Sécurité
|
|
20
|
+
- Données personnelles ou sensibles non protégées, mots de passe non hachés.
|
|
21
|
+
- Requêtes construites par concaténation (SQL, ZCQL) : risque d'injection.
|
|
22
|
+
- Isolation multi-tenant absente ou fragile.
|
|
23
|
+
- Secrets en clair dans le code ou les migrations.
|
|
24
|
+
- Colonnes sensibles exposées sans nécessité.
|
|
25
|
+
- Règles d'accès absentes ou trop larges (RLS, permissions de table, règles de sécurité Catalyst).
|
|
26
|
+
|
|
27
|
+
## Performance
|
|
28
|
+
- Colonnes filtrées, triées ou jointes sans index.
|
|
29
|
+
- Requêtes N+1, chargements excessifs.
|
|
30
|
+
- Pagination absente sur des listes potentiellement longues.
|
|
31
|
+
- Index redondants.
|
|
32
|
+
- En NoSQL : motifs de lecture qui ne correspondent pas aux clés (parcours complets).
|
|
33
|
+
- Croissance forte sans stratégie (archivage, partitionnement) au regard de la volumétrie annoncée.
|
|
34
|
+
|
|
35
|
+
## Maintenabilité
|
|
36
|
+
- Nommage incohérent.
|
|
37
|
+
- Migrations modifiées après coup, schéma ORM désynchronisé, ou code Catalyst qui utilise des colonnes absentes de l'export.
|
|
38
|
+
- Logique d'accès aux données dupliquée.
|
|
39
|
+
- Colonnes ou tables mortes.
|
|
40
|
+
- Colonnes fourre-tout (JSON, texte libre) là où une structure serait préférable, ou l'inverse.
|
|
41
|
+
|
|
42
|
+
## Évolutivité
|
|
43
|
+
- Modèle qui bloque une évolution annoncée dans `knowledge/context.md`.
|
|
44
|
+
- Type de base inadapté aux accès réels.
|
|
45
|
+
- Couplage fort qui rendra les migrations coûteuses.
|
|
46
|
+
- Absence de suppression logique ou d'historisation quand le métier en aura besoin.
|
|
47
|
+
|
|
48
|
+
## Sévérité
|
|
49
|
+
- **Critique** : risque de perte, corruption ou fuite de données.
|
|
50
|
+
- **Élevée** : bug probable ou dégradation sérieuse à court terme.
|
|
51
|
+
- **Moyenne** : dette qui coûtera cher si elle n'est pas traitée.
|
|
52
|
+
- **Faible** : amélioration de confort ou de clarté.
|
|
@@ -0,0 +1,177 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: db-docs
|
|
3
|
+
description: Modèles et règles d'écriture des fichiers de documentation base de données dans .kagents/docs/base-docs/db/ (INDEX, carte du schéma, fiches entités, modèle cible, audits, propositions).
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Documentation base de données
|
|
7
|
+
|
|
8
|
+
Tous les fichiers vivent dans `.kagents/docs/base-docs/db/`.
|
|
9
|
+
|
|
10
|
+
## Règles d'écriture
|
|
11
|
+
- `INDEX.md` reste court (une page). C'est un sommaire, pas un rapport.
|
|
12
|
+
- Une fiche entité : faits, références, usages. Pas de prose.
|
|
13
|
+
- Une proposition = un sujet. Si elle grossit, découpe-la.
|
|
14
|
+
- Un audit est figé après écriture. Le suivant est un nouveau fichier.
|
|
15
|
+
- La carte ne contient que ce qui est observé, jamais une proposition.
|
|
16
|
+
- Au-delà de ~8 entités, la carte garde la vue d'ensemble et le diagramme, et le détail passe dans `entities/`.
|
|
17
|
+
|
|
18
|
+
## INDEX.md
|
|
19
|
+
|
|
20
|
+
~~~~markdown
|
|
21
|
+
# Base — Index
|
|
22
|
+
|
|
23
|
+
> Dernière session : <date> — Mode : <A|B|C> — Carte à jour au : <date / dernière source lue>
|
|
24
|
+
|
|
25
|
+
## Stack
|
|
26
|
+
- Base de données : …
|
|
27
|
+
- Couche d'accès : …
|
|
28
|
+
- Source de vérité du schéma : …
|
|
29
|
+
- Export Catalyst (si applicable) : <nom du fichier> — <date de l'export>
|
|
30
|
+
|
|
31
|
+
## Fichiers
|
|
32
|
+
- Carte : [schema-map.md](schema-map.md)
|
|
33
|
+
- Dernier audit : [audits/<fichier>](audits/<fichier>)
|
|
34
|
+
- Modèle cible (mode A) : [design/model-v1.md](design/model-v1.md)
|
|
35
|
+
|
|
36
|
+
## Propositions ouvertes
|
|
37
|
+
| ID | Sujet | Sévérité | Statut |
|
|
38
|
+
|---|---|---|---|
|
|
39
|
+
| PROP-001 | … | Élevée | proposée |
|
|
40
|
+
|
|
41
|
+
## Inconnus en attente
|
|
42
|
+
- … (ce qu'il faut demander, ou l'export Catalyst à fournir)
|
|
43
|
+
~~~~
|
|
44
|
+
|
|
45
|
+
## schema-map.md
|
|
46
|
+
|
|
47
|
+
~~~~markdown
|
|
48
|
+
# Carte du schéma
|
|
49
|
+
|
|
50
|
+
> Mise à jour : <date> — Dernière source lue : <migration / schéma / export Catalyst + date>
|
|
51
|
+
|
|
52
|
+
## Diagramme
|
|
53
|
+
```mermaid
|
|
54
|
+
erDiagram
|
|
55
|
+
USER ||--o{ ORDER : passe
|
|
56
|
+
ORDER ||--|{ ORDER_ITEM : contient
|
|
57
|
+
```
|
|
58
|
+
|
|
59
|
+
## Entités
|
|
60
|
+
| Entité | Rôle métier | Fiche |
|
|
61
|
+
|---|---|---|
|
|
62
|
+
| User | … | [entities/user.md](entities/user.md) |
|
|
63
|
+
|
|
64
|
+
## Inconnus
|
|
65
|
+
- …
|
|
66
|
+
|
|
67
|
+
## Historique
|
|
68
|
+
- <date> : <ce qui a changé et pourquoi>
|
|
69
|
+
~~~~
|
|
70
|
+
|
|
71
|
+
## entities/<entite>.md
|
|
72
|
+
|
|
73
|
+
~~~~markdown
|
|
74
|
+
# <Entité>
|
|
75
|
+
|
|
76
|
+
- Rôle métier : …
|
|
77
|
+
- Sources : <modèle>, <migration ou export>
|
|
78
|
+
- Clé : …
|
|
79
|
+
- Attributs clés : <nom : type, contraintes> (Établi / Déduit / Inconnu)
|
|
80
|
+
- Index : …
|
|
81
|
+
- Relations : …
|
|
82
|
+
- Usages : création <fichier:ligne> · lecture <…> · modification <…> · suppression <…>
|
|
83
|
+
~~~~
|
|
84
|
+
|
|
85
|
+
## design/model-v1.md (mode A)
|
|
86
|
+
|
|
87
|
+
~~~~markdown
|
|
88
|
+
# Modèle cible — v1
|
|
89
|
+
|
|
90
|
+
## Besoins couverts
|
|
91
|
+
- …
|
|
92
|
+
|
|
93
|
+
## Type de base retenu
|
|
94
|
+
<choix> — <pourquoi, en une ou deux phrases>
|
|
95
|
+
|
|
96
|
+
## Diagramme
|
|
97
|
+
```mermaid
|
|
98
|
+
erDiagram
|
|
99
|
+
```
|
|
100
|
+
|
|
101
|
+
## Entités
|
|
102
|
+
<même format que les fiches entités>
|
|
103
|
+
|
|
104
|
+
## Décisions
|
|
105
|
+
- …
|
|
106
|
+
|
|
107
|
+
## Hypothèses
|
|
108
|
+
- …
|
|
109
|
+
|
|
110
|
+
## Questions ouvertes
|
|
111
|
+
- …
|
|
112
|
+
~~~~
|
|
113
|
+
|
|
114
|
+
## audits/AAAA-MM-JJ-<sujet>.md
|
|
115
|
+
|
|
116
|
+
~~~~markdown
|
|
117
|
+
# Audit — <sujet> — <date>
|
|
118
|
+
|
|
119
|
+
## Résumé
|
|
120
|
+
<3 à 5 lignes>
|
|
121
|
+
|
|
122
|
+
## Écarts contexte / repository
|
|
123
|
+
| Contexte dit | Repository montre | Référence |
|
|
124
|
+
|---|---|---|
|
|
125
|
+
|
|
126
|
+
## Problèmes
|
|
127
|
+
### [Critique] <titre court>
|
|
128
|
+
- Catégorie : …
|
|
129
|
+
- Preuve : <fichier:ligne ou entrée de l'export>
|
|
130
|
+
- Statut : Établi | Déduit
|
|
131
|
+
- Impact : …
|
|
132
|
+
- Proposition : [PROP-NNN](../proposals/PROP-NNN-<slug>.md) ou « aucune »
|
|
133
|
+
|
|
134
|
+
## Actions prioritaires
|
|
135
|
+
1. …
|
|
136
|
+
|
|
137
|
+
## Hypothèses retenues
|
|
138
|
+
- …
|
|
139
|
+
|
|
140
|
+
## Questions ouvertes
|
|
141
|
+
- …
|
|
142
|
+
~~~~
|
|
143
|
+
|
|
144
|
+
## proposals/PROP-NNN-<slug>.md
|
|
145
|
+
|
|
146
|
+
~~~~markdown
|
|
147
|
+
# PROP-NNN — <titre>
|
|
148
|
+
|
|
149
|
+
- Statut : proposée | acceptée | rejetée | appliquée
|
|
150
|
+
- Origine : audit <lien> | fonctionnalité « … »
|
|
151
|
+
- Créée le : <date> — Mise à jour : <date>
|
|
152
|
+
- Sévérité / priorité : …
|
|
153
|
+
|
|
154
|
+
## Problème ou besoin
|
|
155
|
+
…
|
|
156
|
+
|
|
157
|
+
## Impact
|
|
158
|
+
- Entités et colonnes : …
|
|
159
|
+
- Données existantes : …
|
|
160
|
+
- Code concerné : <fichier:ligne>
|
|
161
|
+
- Risques : …
|
|
162
|
+
- Contraintes de plateforme à vérifier : …
|
|
163
|
+
|
|
164
|
+
## Approche recommandée
|
|
165
|
+
…
|
|
166
|
+
|
|
167
|
+
## Alternative (si compromis réel)
|
|
168
|
+
…
|
|
169
|
+
|
|
170
|
+
## Migration
|
|
171
|
+
1. …
|
|
172
|
+
- Migration des données : …
|
|
173
|
+
- Retour arrière : …
|
|
174
|
+
|
|
175
|
+
## Décision
|
|
176
|
+
<rempli quand l'utilisateur tranche>
|
|
177
|
+
~~~~
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: feature-analysis
|
|
3
|
+
description: >-
|
|
4
|
+
Analyse une nouvelle fonctionnalite ou modification fonctionnelle avant
|
|
5
|
+
implementation. Utiliser pour situation C (feature) ou clarification de
|
|
6
|
+
demande sur projet existant. Produit une Architect Analysis ou alimente
|
|
7
|
+
write-change-brief.
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
# Feature analysis
|
|
11
|
+
|
|
12
|
+
## Quand utiliser
|
|
13
|
+
|
|
14
|
+
- Nouvelle fonctionnalite ou evolution d'une existante (situation **C**).
|
|
15
|
+
- Demande ambigue necessitant cadrage avant dev.
|
|
16
|
+
- **Ne pas** utiliser seul pour L0 correctif trivial (workflow `bug-local.md`) : renvoyer Developer sauf doute sur le niveau.
|
|
17
|
+
|
|
18
|
+
## Prerequis
|
|
19
|
+
|
|
20
|
+
- Demande utilisateur ou ticket identifiable.
|
|
21
|
+
- Repo projet accessible avec artefacts de base (`STATE.md` ideal).
|
|
22
|
+
|
|
23
|
+
## Fichiers a lire (minimal, puis elargir si besoin)
|
|
24
|
+
|
|
25
|
+
1. Projet : `AGENTS.md`, `STATE.md`, `business-rules.md`, `glossary.md`
|
|
26
|
+
2. ADR / Change Brief ouverts lies au sujet
|
|
27
|
+
3. `schema.yaml` si la demande touche donnees ou entites metier
|
|
28
|
+
4. Code : uniquement modules, routes, ecrans ou APIs **nommes** dans la demande ou deduits apres premiere passe
|
|
29
|
+
|
|
30
|
+
References harness : `agents/architect.md`, `workflows/impact-levels.yaml`.
|
|
31
|
+
|
|
32
|
+
## Etapes
|
|
33
|
+
|
|
34
|
+
1. **Goal** : objectif, utilisateurs, resultat attendu cote utilisateur.
|
|
35
|
+
2. **Perimetre** : in scope / out of scope explicites.
|
|
36
|
+
3. **Regles metier** : extraire de `business-rules.md` et glossary ; signaler lacunes (questions ou hypotheses).
|
|
37
|
+
4. **Entites et dependances** : noms metier ; pas de schema detaille — noter « Database Architect si L2+ ».
|
|
38
|
+
5. **Existant** : composants, flux, API deja en place a reutiliser ; zones protegees (`STATE.md`).
|
|
39
|
+
6. **Simplicite** : solution minimale ; justifier toute nouvelle couche/table/service.
|
|
40
|
+
7. Invoquer **`architecture-impact`** pour Impact + niveau L0–L3.
|
|
41
|
+
8. Remplir le format **Architect Analysis** (`agents/architect.md`).
|
|
42
|
+
9. Si L2+ ou changement significatif L1 : enchainer **`write-change-brief`**.
|
|
43
|
+
|
|
44
|
+
## Resultat attendu
|
|
45
|
+
|
|
46
|
+
- **Architect Analysis** complete (sections vides ou N/A si non pertinent).
|
|
47
|
+
- Liste de **questions metier** seulement si bloquantes.
|
|
48
|
+
- **Next Step** clair (ex. validation Change Brief, Database Architect, Developer).
|
|
49
|
+
|
|
50
|
+
## Standards / rules
|
|
51
|
+
|
|
52
|
+
Charger `standards/` uniquement si le sujet l'exige (securite, catalyst). Index : `standards/README.md`.
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: schema-exploration
|
|
3
|
+
description: Explorer un repository de façon ciblée pour identifier la base de données, sa source de vérité, reconstruire le modèle de données et son usage réel, et savoir quand l'exploration est suffisante.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Exploration du schéma
|
|
7
|
+
|
|
8
|
+
## 1. Principe
|
|
9
|
+
Exploration ciblée et progressive, jamais le repository entier. Boucle :
|
|
10
|
+
|
|
11
|
+
**Explorer → Observer → Décider → Rechercher précisément → Analyser → Diagnostiquer**
|
|
12
|
+
|
|
13
|
+
À chaque tour : « Que me manque-t-il pour cocher le critère d'arrêt (section 6) ? » Cherche uniquement cela.
|
|
14
|
+
|
|
15
|
+
## 2. Outils
|
|
16
|
+
- Si `graft` est disponible, utilise-le d'abord pour localiser modèles, schémas et requêtes.
|
|
17
|
+
- Sinon, recherche par motif de fichiers, puis `grep` pour les usages.
|
|
18
|
+
|
|
19
|
+
## 3. Identifier la stack et la source de vérité
|
|
20
|
+
Commence par les fichiers de dépendances et de configuration (`package.json`, `composer.json`, `requirements.txt`, `pyproject.toml`, `go.mod`, `catalyst.json`…).
|
|
21
|
+
|
|
22
|
+
| Stack | Où regarder en priorité |
|
|
23
|
+
|---|---|
|
|
24
|
+
| Laravel / Eloquent | `database/migrations/`, `app/Models/`, `config/database.php` |
|
|
25
|
+
| Prisma | `prisma/schema.prisma`, `prisma/migrations/` |
|
|
26
|
+
| Drizzle | `schema.ts` ou `schema/`, `drizzle.config.*`, dossier `drizzle/` |
|
|
27
|
+
| TypeORM | `*.entity.ts`, `migrations/` |
|
|
28
|
+
| Sequelize | `models/`, `migrations/` |
|
|
29
|
+
| Django | `*/models.py`, `*/migrations/` |
|
|
30
|
+
| Rails | `db/schema.rb` ou `db/structure.sql`, `app/models/` |
|
|
31
|
+
| Mongoose / MongoDB | `models/`, `*.schema.ts`, validateurs JSON Schema |
|
|
32
|
+
| Supabase | `supabase/migrations/`, politiques RLS |
|
|
33
|
+
| **Zoho Catalyst Data Store** | **Source de vérité : l'export** (skill `catalyst-export`). Dans le code : `catalyst.json`, `functions/*/`, appels `datastore()`, `.table(...)`, `zcql()`, `executeZCQLQuery(...)` |
|
|
34
|
+
| **Zoho Catalyst NoSQL** | Dans le code : appels `nosql()`, `.table(...)` ; clés de partition et de tri, attributs écrits, motifs de lecture |
|
|
35
|
+
| SQL brut | fichiers `.sql`, dossiers `db/` ou `sql/` |
|
|
36
|
+
|
|
37
|
+
Si plusieurs sources de schéma coexistent (migrations et schéma ORM, export Catalyst et code), identifie celle qui fait foi et signale toute incohérence.
|
|
38
|
+
|
|
39
|
+
## 4. Reconstruire le modèle
|
|
40
|
+
Pour chaque entité : nom, attributs et types, clé primaire (ou clés de partition et de tri en NoSQL), contraintes (unicité, obligation, défauts), relations (cardinalité, clé étrangère, comportement à la suppression), index.
|
|
41
|
+
|
|
42
|
+
## 5. Comprendre l'usage réel
|
|
43
|
+
Pour les entités critiques, trouve où les données sont **créées, lues, modifiées, supprimées** : contrôleurs, services, repositories, fonctions Catalyst, jobs, requêtes brutes. Repère :
|
|
44
|
+
- les filtres et tris fréquents (candidats aux index) ;
|
|
45
|
+
- les requêtes dans des boucles (N+1) ;
|
|
46
|
+
- les transactions, ou leur absence ;
|
|
47
|
+
- les suppressions logiques ;
|
|
48
|
+
- les règles métier appliquées dans le code plutôt qu'en base.
|
|
49
|
+
|
|
50
|
+
## 6. Critère d'arrêt
|
|
51
|
+
Tu passes au diagnostic quand **tous** ces points sont cochés :
|
|
52
|
+
|
|
53
|
+
- [ ] Base de données et couche d'accès identifiées.
|
|
54
|
+
- [ ] Source de vérité du schéma localisée (Catalyst : export présent dans `.kagents/docs/knowledge/catalyst-export/`, ou demandé et son absence notée).
|
|
55
|
+
- [ ] Toutes les entités listées avec leurs relations.
|
|
56
|
+
- [ ] Pour chaque entité critique (désignée par `knowledge/context.md`, sinon : utilisateurs, paiements, données personnelles, cœur métier), chemins de création, lecture, modification et suppression trouvés.
|
|
57
|
+
- [ ] Index et contraintes recensés.
|
|
58
|
+
- [ ] Chaque point non vérifiable classé **Inconnu**.
|
|
59
|
+
|
|
60
|
+
**Budget** : si après une vingtaine de fichiers lus un point reste bloqué, arrête, classe-le en Inconnu et pose la question. En mode Évolution, limite l'exploration aux entités touchées et à leurs voisines directes.
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: write-change-brief
|
|
3
|
+
description: >-
|
|
4
|
+
Redige un Change Brief dans le repository projet a partir d'une Architect
|
|
5
|
+
Analysis. Utiliser pour L2+ ou changement L1 significatif. Template harness
|
|
6
|
+
templates/change-brief/template.md.
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
# Write Change Brief
|
|
10
|
+
|
|
11
|
+
## Quand utiliser
|
|
12
|
+
|
|
13
|
+
- **L2 ou L3** (obligatoire processus : `workflows/impact-levels.yaml`).
|
|
14
|
+
- **L1** si le changement touche contrat API, regles metier nouvelles, ou equipe exige trace ecrite.
|
|
15
|
+
- Apres **`architecture-impact`** (Architect Analysis a jour).
|
|
16
|
+
|
|
17
|
+
Ne pas confondre avec l'ADR : Change Brief = cadre du changement ; ADR = decision structurante (L3 typiquement), template `templates/adr/template.md`, statut **propose**.
|
|
18
|
+
|
|
19
|
+
## Prerequis
|
|
20
|
+
|
|
21
|
+
- Architect Analysis complete ou sections Goal, Impact, Impact Level, Proposal, Decisions, Acceptance Criteria remplies.
|
|
22
|
+
- Emplacement projet choisi (convention equipe : ex. `docs/changes/YYYY-MM-DD-titre.md` ou `change-briefs/` — **dans le repo projet**, jamais dans le harness).
|
|
23
|
+
|
|
24
|
+
## Fichiers a lire
|
|
25
|
+
|
|
26
|
+
- Harness : `templates/change-brief/template.md`, `governance/actions.yaml`
|
|
27
|
+
- Projet : ADR existantes pour liens croises
|
|
28
|
+
|
|
29
|
+
## Etapes
|
|
30
|
+
|
|
31
|
+
1. Copier la structure du **template** et adapter le titre.
|
|
32
|
+
2. Renseigner metadonnees : niveau L0–L3, auteur (agent + validateur humain prevu), date.
|
|
33
|
+
3. Mapper le contenu depuis l'Architect Analysis :
|
|
34
|
+
|
|
35
|
+
| Change Brief (template) | Source Analysis |
|
|
36
|
+
|-------------------------|-----------------|
|
|
37
|
+
| Besoin | Goal + Context |
|
|
38
|
+
| Perimetre | Goal (in/out) + Found |
|
|
39
|
+
| Impacts | Impact (tous axes) |
|
|
40
|
+
| Plan | Next Step + Proposal (phases courtes) |
|
|
41
|
+
| Validation | Decisions To validate ; cocher humain si L2/L3 |
|
|
42
|
+
|
|
43
|
+
4. Ajouter dans le corps du document (sections libres si utile, rester concis) :
|
|
44
|
+
|
|
45
|
+
- Regles metier concernees
|
|
46
|
+
- Hors perimetre explicite
|
|
47
|
+
- Donnees / entites (niveau Architect, pas schema detaille)
|
|
48
|
+
- Dependances et regression
|
|
49
|
+
- Criteres d'acceptation (liste Analysis)
|
|
50
|
+
- Artefacts a consulter (liste Analysis)
|
|
51
|
+
- Risques / exceptions
|
|
52
|
+
|
|
53
|
+
5. Toute decision nouvelle : libelle **proposition — a valider**, jamais « decide » sans ADR acceptee ou accord humain documente.
|
|
54
|
+
6. L3 : mentionner brouillon ADR associe ou lien a creer.
|
|
55
|
+
|
|
56
|
+
## Resultat attendu
|
|
57
|
+
|
|
58
|
+
- Fichier Change Brief **dans le repo projet**, pret pour revue humaine (L2 propose, L3 requis).
|
|
59
|
+
- **Next Step** dans l'Analysis mise a jour : ex. « Validation Change Brief », « Database Architect sur schema », « Developer apres validation ».
|
|
60
|
+
|
|
61
|
+
## Gouvernance
|
|
62
|
+
|
|
63
|
+
Actions sensibles : `governance/actions.yaml` — l'agent **propose** le fichier ; merge / validation selon processus equipe.
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
# Change Brief — Titre
|
|
2
|
+
|
|
3
|
+
- Niveau d'impact : L0 | L1 | L2 | L3
|
|
4
|
+
- Auteur :
|
|
5
|
+
- Date :
|
|
6
|
+
|
|
7
|
+
## Besoin
|
|
8
|
+
|
|
9
|
+
## Perimetre
|
|
10
|
+
|
|
11
|
+
## Impacts
|
|
12
|
+
|
|
13
|
+
- Architecture :
|
|
14
|
+
- Donnees :
|
|
15
|
+
- Securite :
|
|
16
|
+
- Performance / Catalyst :
|
|
17
|
+
|
|
18
|
+
## Plan
|
|
19
|
+
|
|
20
|
+
## Validation
|
|
21
|
+
|
|
22
|
+
- [ ] Humain (si L2/L3)
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
# Workflows
|
|
2
|
+
|
|
3
|
+
Chaque fichier decrit un type de travail. Croiser avec `impact-levels.yaml` pour ne pas sur-activer le pipeline.
|
|
4
|
+
|
|
5
|
+
| Fichier | Usage |
|
|
6
|
+
|---------|--------|
|
|
7
|
+
| `new-project.md` | Creation projet |
|
|
8
|
+
| `existing-project.md` | Onboarding / audit existant |
|
|
9
|
+
| `new-feature.md` | Fonctionnalite |
|
|
10
|
+
| `bug-local.md` | Correctif local faible impact |
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
# Workflow — Bug local (L0)
|
|
2
|
+
|
|
3
|
+
1. Confirmer L0 : pas d'impact archi, schema, permissions, securite
|
|
4
|
+
2. Developpement cible
|
|
5
|
+
3. Tests pertinents
|
|
6
|
+
4. Review legere ou pair humain
|
|
7
|
+
5. CI
|
|
8
|
+
|
|
9
|
+
Si le correctif touche au schema ou au contrat API, remonter en L1 minimum.
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
# Workflow — Projet existant
|
|
2
|
+
|
|
3
|
+
1. Audit repository
|
|
4
|
+
2. Cartographie
|
|
5
|
+
3. Architecture existante
|
|
6
|
+
4. BDD existante
|
|
7
|
+
5. Etat (`STATE.md`)
|
|
8
|
+
6. Dette (`debt.yaml` si present)
|
|
9
|
+
7. Zones protegees documentees
|
|
10
|
+
|
|
11
|
+
Ensuite enchaîner selon `impact-levels.yaml` pour chaque changement.
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
# Niveaux d'impact — etapes obligatoires (+) ou optionnelles (-)
|
|
2
|
+
|
|
3
|
+
levels:
|
|
4
|
+
L0:
|
|
5
|
+
label: Bug local / typo / pas d'impact archi ou BDD
|
|
6
|
+
workflow: bug-local.md
|
|
7
|
+
required:
|
|
8
|
+
- developer
|
|
9
|
+
optional:
|
|
10
|
+
- reviewer
|
|
11
|
+
human_validation: false
|
|
12
|
+
|
|
13
|
+
L1:
|
|
14
|
+
label: Feature localisee
|
|
15
|
+
workflow: new-feature.md
|
|
16
|
+
required:
|
|
17
|
+
- developer
|
|
18
|
+
- reviewer
|
|
19
|
+
optional:
|
|
20
|
+
- architect
|
|
21
|
+
human_validation: false
|
|
22
|
+
|
|
23
|
+
L2:
|
|
24
|
+
label: BDD, API ou transversal
|
|
25
|
+
workflow: new-feature.md
|
|
26
|
+
required:
|
|
27
|
+
- architect
|
|
28
|
+
- database-architect
|
|
29
|
+
- change-brief
|
|
30
|
+
- developer
|
|
31
|
+
- reviewer
|
|
32
|
+
- checklist_catalyst
|
|
33
|
+
optional: []
|
|
34
|
+
human_validation: propose
|
|
35
|
+
|
|
36
|
+
L3:
|
|
37
|
+
label: Architecture, migration destructive, permissions, securite
|
|
38
|
+
workflow: new-feature.md
|
|
39
|
+
required:
|
|
40
|
+
- architect
|
|
41
|
+
- database-architect
|
|
42
|
+
- adr
|
|
43
|
+
- change-brief
|
|
44
|
+
- developer
|
|
45
|
+
- reviewer
|
|
46
|
+
optional: []
|
|
47
|
+
human_validation: true
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
# Workflow — Nouvelle fonctionnalite
|
|
2
|
+
|
|
3
|
+
1. Demande et niveau d'impact (L0–L3)
|
|
4
|
+
2. Analyse (Architect si L1+)
|
|
5
|
+
3. Impact architecture / BDD (L2+)
|
|
6
|
+
4. Securite, performance, cout Catalyst — via checklists + standards (L2+)
|
|
7
|
+
5. Plan et Change Brief (L2+)
|
|
8
|
+
6. Validation humaine (L2 propose, L3 obligatoire)
|
|
9
|
+
7. Developpement
|
|
10
|
+
8. Tests
|
|
11
|
+
9. Review
|
|
12
|
+
10. CI
|
|
13
|
+
11. Validation finale si L3
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
# Workflow — Nouveau projet
|
|
2
|
+
|
|
3
|
+
1. Analyse besoin et perimetre
|
|
4
|
+
2. Architecture (Architect) — ADR si L3
|
|
5
|
+
3. Modele de donnees (Database Architect)
|
|
6
|
+
4. Validation humaine
|
|
7
|
+
5. Initialiser artefacts projet (`templates/project/`)
|
|
8
|
+
6. Developpement
|
|
9
|
+
7. Tests
|
|
10
|
+
8. Review
|
|
11
|
+
9. CI
|