Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
47 commits
Select commit Hold shift + click to select a range
f950487
refactor(dev): bring 04-audit to the skill-authoring contract
blafourcade Jun 24, 2026
bd0775b
refactor(dev): bring 06-test to the skill-authoring contract
blafourcade Jun 24, 2026
3adab9c
refactor(dev): bring 07-refactor to the skill-authoring contract
blafourcade Jun 24, 2026
116584d
refactor(dev): bring 08-debug to the skill-authoring contract
blafourcade Jun 24, 2026
2731129
refactor(dev): bring 09-for-sure to the skill-authoring contract
blafourcade Jun 24, 2026
28dc07c
docs(dev): regenerate catalog after skill refactors
blafourcade Jun 24, 2026
f80d00f
refactor(pm): bring ticket-info, user-stories-create, prd to the cont…
blafourcade Jun 24, 2026
b26708c
refactor(vcs): bring repo-init, release-tag, issue-create to the cont…
blafourcade Jun 24, 2026
50d4a43
refactor(orchestrator): hygiene-norm 00-async-dev
blafourcade Jun 24, 2026
8c013b7
refactor(orchestrator): convert remaining mapping arrows to → in asyn…
blafourcade Jun 24, 2026
8bf78e7
refactor(context,ui,refine): norm bootstrap, hello, condense
blafourcade Jun 24, 2026
35586ca
refactor: clear residual contract nits across skills
blafourcade Jun 24, 2026
67d40a1
refactor: use plain paths in SKILL.md, no @ (per skill-template)
blafourcade Jun 25, 2026
38f199f
refactor: rewrite skill descriptions to the skill-generate norm
blafourcade Jun 25, 2026
3da84f8
fix(pm): make the PRD template solution-agnostic
blafourcade Jun 26, 2026
ff85ea0
fix(context): add missing ## Output to cook 02-upsert action
blafourcade Jun 26, 2026
ce5bcc7
docs(context): add a description size rule to the skill contract (R5)
blafourcade Jun 26, 2026
007f991
refactor: trim 22 skill descriptions to the 2-line size rule
blafourcade Jun 29, 2026
15f3794
fix(context,refine): close 3 defects found by the headless suite
blafourcade Jun 29, 2026
171bd06
refactor(vcs,dev): split commit/pull-request into step actions, fix a…
blafourcade Jun 29, 2026
6b86512
refactor(vcs): keep the VCS convention in one transversal rule, no ba…
blafourcade Jun 29, 2026
eac5383
fix(dev): audit full run writes every pillar file plus report.md
blafourcade Jun 29, 2026
b597081
refactor: quick conciseness wins across skills
blafourcade Jun 29, 2026
28a6c4e
refactor(vcs,dev): de-duplicate what the transversal rule already owns
blafourcade Jun 29, 2026
1aa085e
refactor(dev): restore assert Boundary step (loop stop belongs in the…
blafourcade Jun 29, 2026
862b92c
refactor: apply four cross-skill principles (args, heavy steps, guard…
blafourcade Jun 29, 2026
046a4cd
refactor: lighten the remaining heavy steps (one job per step)
blafourcade Jun 29, 2026
eb36e0c
refactor(dev): separate guards from sequence in 06-test
blafourcade Jun 29, 2026
d3d613e
refactor(dev): make execute stop-conditions a Guard step with sub-bul…
blafourcade Jun 29, 2026
8009c48
fix(dev): review must not assume 'main' as the diff base
blafourcade Jun 29, 2026
cfafec2
fix(dev,vcs): two blockers the deep audit caught
blafourcade Jun 29, 2026
01b4e83
fix: clear semantic defects from the deep audit (batch 1)
blafourcade Jun 29, 2026
4ac0381
fix: semantic defects from the deep audit (batch 2)
blafourcade Jun 29, 2026
fc01195
refactor(pm): replace user-stories-create with the six-action user-st…
blafourcade Jun 29, 2026
7f2855e
docs: memory-deduplication diagnosis and dedup plan
blafourcade Jun 29, 2026
131bf37
fix(context): repair the garbled scaffold-docs action label
blafourcade Jun 29, 2026
92b05ad
fix(skills): resolve semantic contradictions from deep audit
blafourcade Jun 29, 2026
67b7db8
refactor(skills): drop host tokens, make two descriptions verb-led an…
blafourcade Jun 29, 2026
dd4562c
refactor(skills): drop passive restatements the transversal already owns
blafourcade Jun 29, 2026
f8ffb30
refactor(spec): keep the behavioral half of the build-step guard
blafourcade Jun 29, 2026
97d6325
refactor(onboard): cut meta-commentary from orient step 7
blafourcade Jun 29, 2026
a0e6d9d
fix(skills): repair structural anatomy bugs from deep audit
blafourcade Jun 29, 2026
32c56e5
fix(rule-generate): correct sibling @-path in references
blafourcade Jun 29, 2026
91a9808
fix(skills): repair four defects surfaced by the headless behavioral …
blafourcade Jun 29, 2026
c19a14d
fix(skills): wire onboard hand-off, drop unused issue type field
blafourcade Jun 29, 2026
da2b51a
fix(docs): repair broken markdown links failing CI Validate
blafourcade Jun 29, 2026
8502e71
Merge origin/next into refactor/remaining-skills-norm
blafourcade Jun 29, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .claude-plugin/marketplace.json
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,7 @@
{
"name": "aidd-pm",
"source": "./plugins/aidd-pm",
"description": "Product management: ticket-info, user-stories-create, prd, spec",
"description": "Product management: ticket-info, user-stories, prd, spec",
"strict": true,
"recommended": true
},
Expand Down
4 changes: 2 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@
<p><b>🇫🇷 The first French open-source framework for AI-driven development.</b></p>

<p>
<!--counts:start--><kbd>7 plugins</kbd> · <kbd>41 skills</kbd> · <kbd>2 agents</kbd><!--counts:end--> · <kbd>MIT</kbd>
<!--counts:start--><kbd>7 plugins</kbd> · <kbd>40 skills</kbd> · <kbd>2 agents</kbd><!--counts:end--> · <kbd>MIT</kbd>
</p>

[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](LICENSE)
Expand Down Expand Up @@ -189,7 +189,7 @@ Commits, pull / merge requests, release tags, issue creation.

### 📋 [aidd-pm](plugins/aidd-pm/README.md)

`5 skills` · stable
`4 skills` · stable

Ticket info, user stories, PRD, spec drafting.

Expand Down
2 changes: 1 addition & 1 deletion UPGRADE.md
Original file line number Diff line number Diff line change
Expand Up @@ -95,7 +95,7 @@ Invocation in v4 is `plugin:NN-action`. Where a column says "sub-flow", the old
|---|---|
| `/brainstorm` | `aidd-refine:01-brainstorm` |
| `/challenge` | `aidd-refine:02-challenge` |
| `/create_user_stories` | `aidd-pm:02-user-stories-create` |
| `/create_user_stories` | `aidd-pm:02-user-stories` |
| `/ticket_info` | `aidd-pm:01-ticket-info` |

### plan
Expand Down
6 changes: 3 additions & 3 deletions aidd_docs/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,7 @@ Skills are grouped into plugins by domain. Install only the plugins you need.
| ----------------- | ---------------------------------------------------------------------------------- | ----------------------------------------------------------- |
| aidd-context | Bootstrap, project init, generation of context artifacts (skills, agents, rules, commands, hooks, plugins, marketplaces), mermaid diagrams, learn, discovery | `02-project-memory`, `03-context-generate`, `09-mermaid` |
| aidd-refine | Meta-cognition: brainstorm, challenge prior work, condensed communication mode | `01-brainstorm`, `02-challenge`, `03-condense` |
| aidd-pm | Product management: ticket info, user stories, PRD, spec | `01-ticket-info`, `02-user-stories-create`, `03-prd`, `04-spec` |
| aidd-pm | Product management: ticket info, user stories, PRD, spec | `01-ticket-info`, `02-user-stories`, `03-prd`, `04-spec` |
| aidd-dev | Code transformation: Dev SDLC orchestrator, plan, implement, assert, audit, review, test, refactor, debug, for-sure | `00-sdlc`, `01-plan`, `02-implement`, `05-review`, `06-test` |
| aidd-vcs | VCS workflows: commit, pull/merge request, release tag, issue creation | `01-commit`, `02-pull-request`, `04-issue-create` |
| aidd-orchestrator | Async orchestration of the SDLC on labeled issues (optional, extra) | `00-async-dev` (router with setup / run / review sub-flows) |
Expand Down Expand Up @@ -102,7 +102,7 @@ AIDD is delivered as a plugin marketplace. Pick what you need; do not install ev
| aidd-refine | 01-brainstorm, 02-challenge, 03-condense, 04-shadow-areas, 05-fact-check |
| aidd-dev | 00-sdlc, 01-plan, 02-implement, 03-assert, 04-audit, 05-review, 06-test, 07-refactor, 08-debug, 09-for-sure |
| aidd-vcs | 01-commit, 02-pull-request, 03-release-tag, 04-issue-create |
| aidd-pm | 01-ticket-info, 02-user-stories-create, 03-prd, 04-spec |
| aidd-pm | 01-ticket-info, 02-user-stories, 03-prd, 04-spec |

Each plugin is independently installable; install incrementally. Smaller surface, fewer triggers competing.

Expand All @@ -112,7 +112,7 @@ A typical change cycles through skills from several plugins. The order below is

1. **Bootstrap** (only for a brand-new project): `aidd-context:01-bootstrap` imagines the stack and architecture, comparing candidate stacks and writing an `INSTALL.md`. Skip this step on an existing project.
2. **Project init** (once per project, re-runnable to refresh): `aidd-context:02-project-memory` scaffolds `aidd_docs/`, the memory bank, and the AI context files for the tools you use. Re-running later refreshes the scaffold without overwriting your customizations.
3. **Frame the request**: `aidd-refine:01-brainstorm` to clarify, `aidd-pm:01-ticket-info` to pull tracker data, `aidd-pm:02-user-stories-create` and `aidd-pm:03-prd` or `aidd-pm:04-spec` to formalize scope.
3. **Frame the request**: `aidd-refine:01-brainstorm` to clarify, `aidd-pm:01-ticket-info` to pull tracker data, `aidd-pm:02-user-stories` and `aidd-pm:03-prd` or `aidd-pm:04-spec` to formalize scope.
4. **Plan**: `aidd-dev:01-plan` produces the technical plan, component behavior model, or design-image extraction.
5. **Implement and assert**: `aidd-dev:02-implement` writes code against the plan; `aidd-dev:03-assert` verifies the result.
6. **Review**: `aidd-dev:05-review` for code and functional review; `aidd-refine:02-challenge` to stress-test the result.
Expand Down
145 changes: 145 additions & 0 deletions aidd_docs/tasks/2026_06/2026_06_29-memory-duplication-diagnosis.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,145 @@
# Diagnostic — duplications mémoire (skill 02-project-memory)

> Statut : diagnostic read-only. Aucun fichier de skill modifié. Ce doc = base de validation avant fix.

## Contexte

Retour Alex : la génération de mémoire produit des duplications, et Codex 5.5
n'arrive pas à l'initialiser. Deux symptômes investigués séparément.

## Symptôme A — Codex ne peut pas init (le `@`)

**Vérifié, puis rétracté en partie.**

- Le `@` n'est PAS le standard Agent Skills. Standard = chemin relatif depuis
la racine du skill (`reference/guide.md`, lien md `[x](x)`). Le `@` = import
CLAUDE.md. Source : docs Anthropic + agentskills.io.
- **`aidd framework build --target codex` CONVERTIT** `@../x` → un lien `x` vers `../x`
(lien md, `@` retiré). → Codex reçoit des chemins résolvables. OK.
- **`aidd plugin install <source brute>` + `aidd ai install`** copie le `@`
**verbatim** → non résolvable sur Codex.
- Donc : bug réel **seulement** si un user installe la source brute sur Codex.
Inconnu : quel chemin un vrai user Codex emprunte (marketplace/build vs brut).
- Note : mes premiers `diff`/`grep` passés par rtk ont renvoyé de faux
"identique"/"0 match". rtk non fiable pour diff/grep ici.

**Ouvert** : tracer le chemin de distribution Codex réel.

## Symptôme B — duplications (cause trouvée)

Duplication = **structurelle**, indépendante de Codex et du `@`. Trois facteurs
cumulés :

1. **Sections de templates qui se chevauchent** : le même fait (framework,
zones du code, commandes de test…) est demandé par 2+ templates.
2. **Fill parallèle aveugle** (action `03-generate-memory`, étape 6 : "For each
selected template, in parallel") : chaque template rempli indépendamment,
sans voir les autres → le chevauchement devient duplication littérale,
garantie. C'est le multiplicateur.
3. **Aucune règle "un fait, un propriétaire"** : les Transversal rules couvrent
code→mémoire, jamais mémoire↔mémoire. Review 04 = "consistency", sans
dominance et sautable.

## Méthode — comment trouver le niveau fin

Le grain n'est ni le fichier ni la section : c'est le **fait demandé** (chaque
`<placeholder>`).

1. Inventaire des faits : extraire chaque `<...>` de chaque template.
2. Clé canonique : étiqueter par le fait réel (framework, entry point,
commande de test…), pas par le mot de la section.
3. Site de duplication = un fait canonique demandé par ≥2 templates.
4. Pondérer par proba de co-déclenchement (core fire toujours → core↔core
garanti).
5. Assigner un propriétaire unique (dominance).

## Tension de design à respecter

Le design existant a une philosophie assumée : chaque fichier mémoire = un
concern **auto-suffisant**, lisible seul. Un pointer mémoire↔mémoire est un
principe neuf qui se bat contre ça. On ne l'applique que quand le gain dépasse
la perte de lisibilité standalone. Re-nommer un framework (un mot) dans 2-3
fichiers coûte moins qu'un pointer : on garde la mini-dup.

## Audit single-responsibility

| Concern | Responsabilité | Verdict |
| --- | --- | --- |
| `integration` | internal + external | **double** → reframe (voir plan #3) |
| `architecture` vs `codebase-map` | shape vs layout, mais Structure≡Areas | overlap → drop Structure |
| `deployment` vs `infra` | ship/run vs provisioning, "environments" dans les 2 | overlap → scope |
| `deployment` | pipeline+env+release+monitoring | large mais cohérent (ship/run) |
| `mobile`/`desktop` | incluent build&release ≡ `deployment` | overlap mineur, abandonné |
| autres (vcs, data, testing, auth, cli…) | single net | OK |

Note écosystème (hors scope) : `integration.md` est gaté par la capability
`api`. Mais consommer des services externes n'exige pas d'exposer une API. Gate
douteux → à revoir dans `capability-signals`, séparément.

## Table de dominance — réduite haute-valeur

### À appliquer (gain net)

| # | Fait | Action | Type |
| --- | --- | --- | --- |
| 2 | Zones top-level + responsabilité | `codebase-map.Areas` possède → drop `architecture.## Structure` | drop |
| 3 | Intégrations | reframe `integration` en intégrations externes (voir plan) | reframe |
| 4 | Libs de domaine | `architecture.Stack` = macro only, ne re-liste pas une lib déjà possédée par une capability | scope (inversé) |
| 8 | "Où routes définies" | `api.Style` = serveur/RPC ; `navigation.Routing` = client | scope |
| 12 | CI/CD vs provisioning | `deployment.Pipeline` = CI/CD ; `infra.Tooling` = provisioning | scope |

### Abandonnés (pointer < dup, casse l'auto-suffisance)

`#1` framework (un mot), `#5` commandes (gate vs itération, buts distincts),
`#9` authz, `#10` auth socket, `#11` environnements, `#13` release/packaging,
`#14` SDK externe.

## Le vrai multiplicateur : le fill parallèle aveugle

Même templates parfaits, le fill parallèle (`03.6`) re-écrit un même fait dans
chaque template dont le placeholder matche. **C'est ici que se gagne le gros de
la dédup.**

## Plan d'exécution

### Templates

1. `core/architecture.md` — **drop `## Structure`** (modules + entry point).
Possédé par `codebase-map`.
2. `core/architecture.md` — **Stack, bullet 2** → "libs transversales only ;
une lib couverte par une capability (ORM, runner, form lib) vit là-bas".
3. `api/integration.md` — **reframer en intégrations externes** (responsabilité
unique). Le fichier mélange Internal (flux entre modules → appartient à
`architecture.How it fits together`) + External (services tiers). Fix :
- intro : "internal communication and external services" → "how this system
integrates with external/third-party services" ;
- drop `## Internal` ;
- garder `## External services` + diagramme (carte des intégrations externes).
Ne pas juste couper Internal (sinon fichier mal nommé à une section) — c'est
un reframe de responsabilité.
4. `api/api.md` — **Style, bullet 1** → préfixer "Server/RPC surface" + "server
routes".
5. `ui/navigation.md` — **Routing, bullet 1** → préfixer "Client routing" +
"client routes".

### Actions / règles

6. `actions/03-generate-memory.md` — **étape 6** : retirer "in parallel" ;
"For each selected template (en tenant compte des faits déjà capturés par les
templates précédents, pour ne pas redire un fait)".
7. `SKILL.md` transversal + `actions/04-review-memory.md` étape 2 :
- SKILL.md : "Each fact lives in exactly one memory file ; another file
references it, never restates it." (uniquement pour les faits de la table
réduite)
- 04 : check "no fact duplicated across files ; si dupliqué, garder dans le
fichier propriétaire, drop la copie."

### Validation post-édit

- `aidd framework build --target codex` passe sans erreur.
- Relire les templates touchés : chacun reste lisible seul.

### Hors scope (suivi séparé)

- Symptôme A (distribution Codex `@` brut vs build) : tracer le chemin réel.
- Gate de `integration` sous capability `api` : à revoir dans capability-signals.
Original file line number Diff line number Diff line change
@@ -0,0 +1,51 @@
# Preuve empirique — duplication mémoire (avant décision)

Fixture minimal (`scratchpad/fixture`) : API Node/Express + Knex/sqlite + Jest.
Déclenche core + api + database. Fill rejoué à la main de deux façons :

- **run actuel** : fill aveugle (chaque template rempli indépendamment, comme
l'action `03.6` le dit aujourd'hui).
- **run fixé** : templates haut niveau inchangés + logique de propriétaire
(architecture sans Structure & sans libs de domaine ; codebase-map possède
zones+entry ; integration reframé externe ; "un fait = un fichier").

## Résultat (comptage déterministe, substring)

| Métrique | run actuel | run fixé |
| --- | --- | --- |
| Faits dupliqués (≥2 fichiers) | 7 | 6 |
| Sites de restatement | 23 | 15 (−35 %) |
| Entry point | 3 fichiers (quasi-verbatim) | 1 |
| Routes `src/routes` | 4 fichiers | 2 (accepté) |

## Lecture

- **Bug confirmé** : fill aveugle → 7 faits dupliqués, jusqu'à 4 fichiers
chacun. Pires : entry point + routes quasi-verbatim ; `architecture.Stack`
aimant (Express, Knex, Jest re-listés).
- **Fix efficace sur le haut-sévérité** : entry point 3→1, paires
quasi-verbatim architecture↔codebase-map supprimées, Internal+diagramme
d'integration supprimés. Résiduel = mini-dups consciemment acceptés
(framework, npm test, users).
- **Templates restés haut niveau** : dédup faite par action/règle, zéro
métadonnée dans les templates. Conforme à la consigne.

## Trouvailles

1. **Le comptage substring sur-compte** (ex: "Jest" comme label de zone ≠ vraie
dup). → un script de dédup naïf ne suffit pas ; le check doit être
**sémantique** (review agent), pas un grep.
2. **`integration` sur projet sans service externe → quasi vide** ("None").
Confirme un gate douteux : integration ne devrait pas se déclencher sans
service externe. → fix séparé dans `capability-signals`.
3. La dédup résiduelle dépend du comportement du fill agent suivant
l'action+règle. Pas garantissable statiquement → la règle doit être
**explicite et forte**, et la review 04 doit lister des points de dédup
concrets (fact → propriétaire).

## Conséquence sur le plan

- Check 04 = review sémantique forte (pas un script), avec checklist
fact→propriétaire ; option : déléguer à un checker subagent indépendant
(contexte frais), formulé plugin-agnostique.
- Ajouter au suivi séparé : gate `integration` dans `capability-signals`.
61 changes: 61 additions & 0 deletions aidd_docs/tasks/2026_06/2026_06_29_memory-dedup/phase-1.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,61 @@
---
status: pending
---

# Instruction: Templates à responsabilité unique

Part of [`plan.md`](./plan.md).

## Architecture projection

<!-- 🔁 = modifié. Chemins sous plugins/aidd-context/skills/02-project-memory/ -->

```txt
assets/templates/memory/
├── core/
│ └── architecture.md 🔁 drop ## Structure ; Stack = libs transversales only
├── api/
│ ├── api.md 🔁 Style = surface serveur/RPC
│ └── integration.md 🔁 reframe en intégrations externes (drop ## Internal)
└── ui/
└── navigation.md 🔁 Routing = client
```

## Tasks to do

### `1)` architecture.md — drop Structure + Stack macro-only

> `codebase-map` possède zones + entry point ; `architecture` ne les redit plus.

1. Supprimer la section `## Structure` (les 2 bullets : modules/layers + entry point).
2. Stack, bullet 2 : remplacer `<Key libraries that shape the codebase, and what each is for>` par une formulation "libs transversales uniquement ; une lib couverte par une capability (ORM, test runner, form lib) vit dans son concern, pas ici".

### `2)` integration.md — reframe en intégrations externes

> Responsabilité unique : comment ce système s'intègre à des services tiers. Le flux interne appartient à `architecture.How it fits together`.

1. Intro : remplacer "How this system talks to others: internal communication and external services." par "How this system integrates with external/third-party services."
2. Supprimer la section `## Internal`.
3. Conserver `## External services` + le diagramme mermaid (carte des intégrations externes).

### `3)` api.md — Style = serveur/RPC

> Lever l'ambiguïté "où sont définies les routes" avec navigation.

1. Style, bullet 1 : préfixer la responsabilité serveur — "Server/RPC surface: REST, GraphQL, or RPC, the framework, where server routes are defined".

### `4)` navigation.md — Routing = client

> Pendant client de api.md.

1. Routing, bullet 1 : préfixer "Client routing: the router and where client routes are defined".

## Test acceptance criteria

| Task | Acceptance criteria |
| ---- | ----------------------------------------------------------------------------------------------------- |
| 1 | `architecture.md` n'a plus de `## Structure` ; Stack bullet 2 ne demande plus les libs de domaine. |
| 2 | `integration.md` n'a plus de `## Internal` ; intro parle d'intégrations externes ; External + diag présents. |
| 3 | `api.md` Style mentionne "server" / serveur. |
| 4 | `navigation.md` Routing mentionne "client". |
| 1-4 | `aidd framework build --target codex` passe sans erreur ; chaque template reste lisible seul. |
Loading