Skip to content
Back to skills

Domain Context Generator

ASecurity

Generates a CONTEXT.md file for a PrestaShop domain inside the `.ai/Domain/` folder. Trigger when the user asks to "generate a context", "fill in a CONTEXT.md", "write the context for [Domain]", "document the [X] domain", or when working inside `.ai/Domain/` directories. Also triggers on "create context for", "add AI context", "populate CONTEXT.md".

  • 6 stars
  • 0 votes
  • 0 copies
  • 1 view
  • Added May 29, 2026
developmentgophptestingfrontend

Security analysis

A100/100

Scanned May 29, 2026

npx -y skills add jeffsenso/prestashop-skills --skill domain-context-generator --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Domain Context Generator?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for Domain Context Generator
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/jeffsenso-domain-context-generator/badge)](https://www.skillsdirectory.com/skills/jeffsenso-domain-context-generator)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
---
name: domain-context-generator
description: >
  Generates a CONTEXT.md file for a PrestaShop domain inside the `.ai/Domain/` folder.
  Trigger when the user asks to "generate a context", "fill in a CONTEXT.md",
  "write the context for [Domain]", "document the [X] domain",
  or when working inside `.ai/Domain/` directories.
  Also triggers on "create context for", "add AI context", "populate CONTEXT.md".
subagent: recommended
---

# PrestaShop Domain CONTEXT.md Generator

## Purpose

Generate a **minimal**, accurate `CONTEXT.md` for a PrestaShop business domain
(`src/Core/Domain/{Name}/`). The goal is the smallest file that gives an AI agent
enough orientation to work in the domain — not an inventory of every class.

## Output format

```markdown
# {Domain} Domain

> **Status:** Draft — this context file is a starting point and should be refined by domain experts.

## Purpose

{1–2 sentences: what this domain does and what it does NOT do}

## Layers

| Layer | Path |
|-------|------|
| Core CQRS | `src/Core/Domain/{Name}/` — Commands, Queries, QueryResults, ValueObjects, Exceptions |
| Adapter | `src/Adapter/{Name}/` — handler implementations, repositories |
| Legacy ObjectModel | `classes/{Name}.php` ({N} lines) — do not add logic here |
| Back-office UI | controller path, grid factory name, TS frontend path |

## Non-obvious patterns

- {Things that aren't discoverable by reading the directory structure}
- {Surprising abstractions, delegation chains, cross-domain flows, legacy gotchas}

## Canonical examples

- `path/to/Command.php` + `path/to/Handler.php`
- `path/to/Query.php` + `path/to/ResultDTO.php`

## Skills

- [`skill-name`](../../skills/skill-name/SKILL.md) — one-line description

## Related

- [Component/Domain](path) — one-line reason
```

**`## Skills` is optional** — only include it if a skill in `.ai/skills/` targets this domain. Omit the section entirely if no relevant skill exists.

**Do NOT include:** class name inventories (command names, exception names, value object names, handler names). These are greppable on demand and waste context tokens.

**Do NOT include:** `## Coding standards`, `## Do`, `## Don't`, `## Testing expectations` — project-wide, live in `.ai/CONTEXT.md`.

---

## Step-by-step process

### 0. Confirm the target is a Domain, not a Component

Check that `src/Core/Domain/{Name}/` exists and contains a CQRS structure (`Command/`, `Query/`, or handler interfaces). If you don't find a dedicated CQRS layer or a Controller for this domain, it is probably a Component — use the `component-context-generator` skill instead.

### 1. Explore the codebase

Use the Explore agent to map:
- `src/Core/Domain/{Name}/` — subdirectory names (Command/, Query/, ValueObject/, Exception/, sub-domains)
- `src/Adapter/{Name}/` — subdirectory names (CommandHandler/, QueryHandler/, Repository/, any unusual patterns)
- `classes/{Name}.php` — does it exist? approximate line count
- `src/PrestaShopBundle/Controller/Admin/**/{Name}Controller.php` — exists?
- Any sub-domains under `src/Core/Domain/{Name}/` with their own CQRS structure
- Other domains that reference this domain (grep for `{Name}Id` or `{Name}Command`)

**Do NOT** enumerate every file — just note what layers/patterns exist and what's non-obvious.

### 2. Write the Layers table

One row per layer that actually exists. Path only — no class names.

### 3. Write Non-obvious patterns

Ask: *what would surprise a developer reading this domain for the first time?*
- Separate calculation/engine layer (like Cart's `src/Core/Cart/`)
- Delegation chains (like Product's filler pattern)
- Sub-domains with their own full CQRS structure
- Legacy class size and usage warning
- Cross-domain flows (which other domain consumes this one)

Skip anything obvious from the directory structure.

### 4. Write Canonical examples

2 file path pairs maximum:
- One Command + its Handler
- One Query + its result DTO

### 5. Check for relevant skills

List the contents of `.ai/skills/` and check if any skill targets this domain (e.g. a `create-{entity}` or `add-{domain}-form` skill). If one exists, include a `## Skills` section before `## Related` linking to it.

### 6. Write Related (use sparingly)

Every cross-reference is a potential cascade: an AI agent reads domain A, follows a link to domain B, follows B's link to component C... and loads everything. This defeats the purpose of the split.

**Include a link when:**
- The cross-domain flow is non-obvious and would surprise a developer (e.g. Cart → Order conversion happens in the Order domain, not Cart)
- A DevDocs URL exists for this domain

**Do NOT include a link when:**
- The relationship is obvious from imports (e.g. "this domain uses CQRS" — they all do)
- You're linking to a component just because the domain consumes it (Controller, Forms, Grid are consumed by every migrated domain)
- The link would create a bidirectional reference (A → B and B → A)

When in doubt, omit the link. An agent can always find related contexts via the index in `.ai/CONTEXT.md`.

---

## Reference: Cart domain (canonical lean example)

```markdown
# Cart Domain

> **Status:** Draft — this context file is a starting point and should be refined by domain experts.

## Purpose

Manages the shopping cart lifecycle: creation, product additions/removals, quantity updates,
cart rule application, address/carrier/currency settings, and price computation.
Does not handle order creation — that is the Order domain's responsibility.

## Layers

| Layer | Path |
|-------|------|
| Core CQRS | `src/Core/Domain/Cart/` — Commands, Queries, QueryResults, ValueObjects, Exceptions |
| Adapter | `src/Adapter/Cart/` — handler implementations, `CartRepository`, `CartProductsComparator` |
| Calculation engine | `src/Core/Cart/` — pure price/tax/discount computation, independent of persistence |
| Legacy ObjectModel | `classes/Cart.php` (5 000+ lines), `classes/CartRule.php` — do not add logic here |
| Presenter | `src/Adapter/Presenter/Cart/` — lazy-loading Smarty presentation layer |
| Back-office UI | `CartController.php`, `CartGridDefinitionFactory`, `CartSummaryType`, `cart-editor.ts` |

## Non-obvious patterns

- The **calculation engine** (`src/Core/Cart/`) is separate from the CQRS domain layer —
  `Calculator` orchestrates totals purely in memory; adapter handlers call it before persisting
- Cart→Order conversion happens via `AddOrderFromBackOfficeCommand` in the **Order domain**,
  which takes a `CartId`; the Cart domain has no knowledge of this
- `AbstractCartHandler` in Adapter provides shared cart-loading and validation used by all handlers

## Canonical examples

- `src/Core/Domain/Cart/Command/AddProductToCartCommand.php` + `src/Adapter/Cart/CommandHandler/AddProductToCartHandler.php`
- `src/Core/Cart/Calculator.php` — calculation engine entry point

## Related

- [Order Domain](../Order/CONTEXT.md) — Cart→Order conversion happens in the Order domain via `AddOrderFromBackOfficeCommand`
- [DevDocs](https://devdocs.prestashop-project.org/9/development/architecture/domain/references/cart/#cart-domain/)
```

---

## Output

Write to `.ai/Domain/{Name}/CONTEXT.md`. Create the directory if needed.
Confirm the file path to the user when done.

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…

Newsletter

Get the weekly list of safe new skills, and the ones we pulled.