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 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Wi5qHAuq8UbzN4NLUFeKkJ
This commit is contained in:
2026-07-26 20:08:58 +02:00
co-authored by Claude Sonnet 5
parent 754bd97a42
commit a4458f383e
7 changed files with 131 additions and 2 deletions
+13
View File
@@ -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`.
-1
View File
@@ -46,4 +46,3 @@ secrets.json
# Tooling # Tooling
.tools/ .tools/
.junie/
+13
View File
@@ -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`.
+76
View File
@@ -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
+13
View File
@@ -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`.
+13
View File
@@ -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`.
+3 -1
View File
@@ -28,6 +28,8 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Modules", "Modules", "{30D8
EndProject EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Modules", "Modules", "{77DF6642-7863-4D67-BAEE-217EC2D99894}" Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Modules", "Modules", "{77DF6642-7863-4D67-BAEE-217EC2D99894}"
EndProject EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Clients", "Clients", "{D72703E6-B021-4360-B1EE-0E99999B5899}"
EndProject
Global Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU Debug|Any CPU = Debug|Any CPU
@@ -165,7 +167,6 @@ Global
GlobalSection(NestedProjects) = preSolution GlobalSection(NestedProjects) = preSolution
{8A35AF71-50C0-4D5F-83CF-A0FA115B6619} = {827E0CD3-B72D-47B6-A68D-7590B98EB39B} {8A35AF71-50C0-4D5F-83CF-A0FA115B6619} = {827E0CD3-B72D-47B6-A68D-7590B98EB39B}
{A5FD67AC-1458-4D90-90F6-B361DB938048} = {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} {71C6F408-CCFD-4607-A5E2-BE83C8F74217} = {2F43D186-C7D5-4AB1-B821-4D595CA2ECB3}
{30D8F44D-4B6E-4980-8D1F-29D1A64F438C} = {827E0CD3-B72D-47B6-A68D-7590B98EB39B} {30D8F44D-4B6E-4980-8D1F-29D1A64F438C} = {827E0CD3-B72D-47B6-A68D-7590B98EB39B}
{BABECABB-E664-4BC5-9B5F-F645D19F1B12} = {30D8F44D-4B6E-4980-8D1F-29D1A64F438C} {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} {3D0192D6-6893-4295-A508-077D60D15D6E} = {77DF6642-7863-4D67-BAEE-217EC2D99894}
{50951BA1-EC62-49BE-86F5-1CCB76342552} = {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} {D9F06019-5B34-4D94-8E74-82F378196BDE} = {77DF6642-7863-4D67-BAEE-217EC2D99894}
{BCBB1ABB-6C22-4F81-BB06-D4FE81B4BED3} = {827E0CD3-B72D-47B6-A68D-7590B98EB39B}
EndGlobalSection EndGlobalSection
EndGlobal EndGlobal