From a4458f383e6b3995df1b0c531581850394229682 Mon Sep 17 00:00:00 2001 From: Sluijsens Date: Sun, 26 Jul 2026 20:08:58 +0200 Subject: [PATCH] Documents solution folder structure for AI agents Adds AGENTS.md as the canonical description of the Application/Tests/Clients solution layout, mirrored into CLAUDE.md, .junie/guidelines.md, and .github/copilot-instructions.md so Claude, Junie, and Copilot all pick it up. Also un-ignores .junie/ so guidelines.md is tracked. Co-Authored-By: Claude Sonnet 5 Claude-Session: https://claude.ai/code/session_01Wi5qHAuq8UbzN4NLUFeKkJ --- .github/copilot-instructions.md | 13 +++++ .gitignore | 1 - .junie/guidelines.md | 13 +++++ .junie/plans/generate-user-stories.md | 76 +++++++++++++++++++++++++++ AGENTS.md | 13 +++++ CLAUDE.md | 13 +++++ SlpModularCms.sln | 4 +- 7 files changed, 131 insertions(+), 2 deletions(-) create mode 100644 .github/copilot-instructions.md create mode 100644 .junie/guidelines.md create mode 100644 .junie/plans/generate-user-stories.md create mode 100644 AGENTS.md create mode 100644 CLAUDE.md diff --git a/.github/copilot-instructions.md b/.github/copilot-instructions.md new file mode 100644 index 0000000..b096825 --- /dev/null +++ b/.github/copilot-instructions.md @@ -0,0 +1,13 @@ +# SlpModularCms — Solution Structure + +> Canonical copy: `AGENTS.md` (also mirrored in `CLAUDE.md` and `.junie/guidelines.md`). Update all four together. + +This solution is organized into three top-level Solution Folders. Any agent working in this repo should respect this layout when adding, moving, or referencing projects. + +- **Application** — Development versions of the applications: the Master and Slave APIs, plus a nested **Modules** solution folder containing the individual CMS modules (e.g. `SlpModularCms.Modules.Master`, `SlpModularCms.Modules.Identity`, `SlpModularCms.Modules.Availability`). +- **Tests** — Test projects mirroring the structure of **Application**, with the same nested **Modules** grouping — except the Slave API, which has no test project. +- **Clients** — The actual buildable/shippable API projects (e.g. `SlpModularCms.Api`). + +When adding a new project: +- A new module goes under `Application/Modules`, with its test project under `Tests/Modules`. +- A new deployable API/client goes under `Clients`. diff --git a/.gitignore b/.gitignore index d0068a1..d83e540 100644 --- a/.gitignore +++ b/.gitignore @@ -46,4 +46,3 @@ secrets.json # Tooling .tools/ -.junie/ diff --git a/.junie/guidelines.md b/.junie/guidelines.md new file mode 100644 index 0000000..86f104c --- /dev/null +++ b/.junie/guidelines.md @@ -0,0 +1,13 @@ +# SlpModularCms — Solution Structure + +> Canonical copy: `AGENTS.md` (also mirrored in `CLAUDE.md` and `.github/copilot-instructions.md`). Update all four together. + +This solution is organized into three top-level Solution Folders. Any agent working in this repo should respect this layout when adding, moving, or referencing projects. + +- **Application** — Development versions of the applications: the Master and Slave APIs, plus a nested **Modules** solution folder containing the individual CMS modules (e.g. `SlpModularCms.Modules.Master`, `SlpModularCms.Modules.Identity`, `SlpModularCms.Modules.Availability`). +- **Tests** — Test projects mirroring the structure of **Application**, with the same nested **Modules** grouping — except the Slave API, which has no test project. +- **Clients** — The actual buildable/shippable API projects (e.g. `SlpModularCms.Api`). + +When adding a new project: +- A new module goes under `Application/Modules`, with its test project under `Tests/Modules`. +- A new deployable API/client goes under `Clients`. diff --git a/.junie/plans/generate-user-stories.md b/.junie/plans/generate-user-stories.md new file mode 100644 index 0000000..690eb23 --- /dev/null +++ b/.junie/plans/generate-user-stories.md @@ -0,0 +1,76 @@ +--- +sessionId: session-260607-224229-1f53 +--- + +# Overzicht + +### Doel + +Genereer de user stories en persona's voor SlpModularCms.Api op basis van het goedgekeurde story generation plan. + +### Goedgekeurde beslissingen + + Vraag | Beslissing | +---|---| + Story organisatie | Feature-gebaseerd (Authenticatie, Gebruikersbeheer, Autorisatie, Setup, Modules, Beschikbaarheidscontrole) | + Granulariteit | Standaard — "Als [rol] wil ik [actie] zodat [doel]" + basisacceptatiecriteria | + Gebruiker standaard rechten | Alleen lezen + eigen profiel bewerken (behalve e-mail/rol) | + Eigenaarschap overdracht | Meerdere eigenaars mogelijk (huidige behoudt rol) | + Initieel wachtwoord | Uitnodigingslink per e-mail — gebruiker stelt zelf wachtwoord in | + Refresh token | Rotation (eenmalig bruikbaar) | + Eerste Eigenaar | Combinatie: seed script (dev) + setup-endpoint (productie) | + Module rechten | Modules kunnen eigen rechten definiëren per Gebruiker | + +### Te genereren artifacts + +- `aidlc-docs/inception/user-stories/personas.md` — 3 persona's +- `aidlc-docs/inception/user-stories/stories.md` — INVEST-compliant stories met feature-mapping, persona-mapping en acceptatiecriteria + +# Stappen + +### Uitvoeringsplan + +**Stap 1**: Persona's definiëren (Eigenaar, Beheerder, Gebruiker) + +**Stap 2**: User stories genereren per feature-domein: +- Authenticatie (login, token refresh, logout, uitnodigingsflow) +- Gebruikersbeheer (aanmaken via uitnodiging, bewerken, verwijderen, profielbeheer) +- Autorisatie (rolbeheer, hiërarchische bevoegdheden, eigenaarschap overdracht) +- Setup (eerste Eigenaar — seed + setup-endpoint) +- Modules (laden, uitschakelen, module-specifieke rechten) +- Beschikbaarheidscontrole (placeholder/stub) + +**Stap 3**: Acceptatiecriteria toevoegen (INVEST-compliant) + +**Stap 4**: Feature-story mapping (elke story getagd met feature-domein) + +**Stap 5**: Persona-story mapping (elke story gelinkt aan persona('s)) + +**Stap 6**: Artifacts opslaan + +# Delivery Steps + +### ✓ Step 1: Stap 1-3: Persona's definiëren en stories genereren met acceptatiecriteria +personas.md en stories.md zijn aangemaakt met alle INVEST-compliant user stories en acceptatiecriteria. + +- Maak `aidlc-docs/inception/user-stories/personas.md` aan met 3 persona's: Eigenaar, Beheerder, Gebruiker +- Maak `aidlc-docs/inception/user-stories/stories.md` aan met stories per feature-domein: + - **Authenticatie**: login, token refresh (rotation), logout, uitnodigingsflow wachtwoord instellen + - **Gebruikersbeheer**: gebruiker aanmaken via uitnodiging, bewerken, verwijderen, profielbeheer + - **Autorisatie**: rol wijzigen, eigenaarschap overdragen, hiërarchische bevoegdheidsgrenzen + - **Setup**: eerste Eigenaar via seed script (dev) en setup-endpoint (productie) + - **Modules**: module laden bij startup, module uitschakelen, module-specifieke rechten per Gebruiker + - **Beschikbaarheidscontrole**: stub/placeholder interactie +- Elke story volgt het formaat: "Als [rol] wil ik [actie] zodat [doel]" +- Elke story heeft basisacceptatiecriteria (Given/When/Then of bullet-stijl) +- Checkboxes in story-generation-plan.md markeren als [x] na voltooiing + +### ✓ Step 2: Stap 4-6: Feature-story mapping, persona-story mapping en state bijwerken +Alle stories zijn getagd met feature-domein en persona('s), en de workflow state is bijgewerkt. + +- Voeg feature-tag toe aan elke story (bijv. `[Feature: Authenticatie]`) +- Voeg persona-koppeling toe aan elke story (bijv. `[Personas: Eigenaar, Beheerder]`) +- Markeer resterende checkboxes in `story-generation-plan.md` als [x] +- Werk `aidlc-docs/aidlc-state.md` bij: User Stories → IN PROGRESS → VOLTOOID +- Log voltooiing in `aidlc-docs/audit.md` +- Presenteer completion message met review links \ No newline at end of file diff --git a/AGENTS.md b/AGENTS.md new file mode 100644 index 0000000..ddc988a --- /dev/null +++ b/AGENTS.md @@ -0,0 +1,13 @@ +# SlpModularCms — Solution Structure + +This is the canonical description of the solution layout. It is mirrored into `CLAUDE.md`, `.junie/guidelines.md`, and `.github/copilot-instructions.md` so every AI coding agent (Claude, Junie, GitHub Copilot, etc.) picks it up. If you update this file, update those too. + +This solution is organized into three top-level Solution Folders. Any agent working in this repo should respect this layout when adding, moving, or referencing projects. + +- **Application** — Development versions of the applications: the Master and Slave APIs, plus a nested **Modules** solution folder containing the individual CMS modules (e.g. `SlpModularCms.Modules.Master`, `SlpModularCms.Modules.Identity`, `SlpModularCms.Modules.Availability`). +- **Tests** — Test projects mirroring the structure of **Application**, with the same nested **Modules** grouping — except the Slave API, which has no test project. +- **Clients** — The actual buildable/shippable API projects (e.g. `SlpModularCms.Api`). + +When adding a new project: +- A new module goes under `Application/Modules`, with its test project under `Tests/Modules`. +- A new deployable API/client goes under `Clients`. diff --git a/CLAUDE.md b/CLAUDE.md new file mode 100644 index 0000000..1de6fa2 --- /dev/null +++ b/CLAUDE.md @@ -0,0 +1,13 @@ +# SlpModularCms — Solution Structure + +> Canonical copy: `AGENTS.md` (also mirrored in `.junie/guidelines.md` and `.github/copilot-instructions.md`). Update all four together. + +This solution is organized into three top-level Solution Folders. Any agent working in this repo should respect this layout when adding, moving, or referencing projects. + +- **Application** — Development versions of the applications: the Master and Slave APIs, plus a nested **Modules** solution folder containing the individual CMS modules (e.g. `SlpModularCms.Modules.Master`, `SlpModularCms.Modules.Identity`, `SlpModularCms.Modules.Availability`). +- **Tests** — Test projects mirroring the structure of **Application**, with the same nested **Modules** grouping — except the Slave API, which has no test project. +- **Clients** — The actual buildable/shippable API projects (e.g. `SlpModularCms.Api`). + +When adding a new project: +- A new module goes under `Application/Modules`, with its test project under `Tests/Modules`. +- A new deployable API/client goes under `Clients`. diff --git a/SlpModularCms.sln b/SlpModularCms.sln index e9ac640..6096f68 100644 --- a/SlpModularCms.sln +++ b/SlpModularCms.sln @@ -28,6 +28,8 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Modules", "Modules", "{30D8 EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Modules", "Modules", "{77DF6642-7863-4D67-BAEE-217EC2D99894}" EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Clients", "Clients", "{D72703E6-B021-4360-B1EE-0E99999B5899}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU @@ -165,7 +167,6 @@ Global GlobalSection(NestedProjects) = preSolution {8A35AF71-50C0-4D5F-83CF-A0FA115B6619} = {827E0CD3-B72D-47B6-A68D-7590B98EB39B} {A5FD67AC-1458-4D90-90F6-B361DB938048} = {827E0CD3-B72D-47B6-A68D-7590B98EB39B} - {BCBB1ABB-6C22-4F81-BB06-D4FE81B4BED3} = {827E0CD3-B72D-47B6-A68D-7590B98EB39B} {71C6F408-CCFD-4607-A5E2-BE83C8F74217} = {2F43D186-C7D5-4AB1-B821-4D595CA2ECB3} {30D8F44D-4B6E-4980-8D1F-29D1A64F438C} = {827E0CD3-B72D-47B6-A68D-7590B98EB39B} {BABECABB-E664-4BC5-9B5F-F645D19F1B12} = {30D8F44D-4B6E-4980-8D1F-29D1A64F438C} @@ -175,5 +176,6 @@ Global {3D0192D6-6893-4295-A508-077D60D15D6E} = {77DF6642-7863-4D67-BAEE-217EC2D99894} {50951BA1-EC62-49BE-86F5-1CCB76342552} = {77DF6642-7863-4D67-BAEE-217EC2D99894} {D9F06019-5B34-4D94-8E74-82F378196BDE} = {77DF6642-7863-4D67-BAEE-217EC2D99894} + {BCBB1ABB-6C22-4F81-BB06-D4FE81B4BED3} = {827E0CD3-B72D-47B6-A68D-7590B98EB39B} EndGlobalSection EndGlobal