siesa-agents 2.1.89 → 2.1.91
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/claude/skills/sa-init-devops/SKILL.md +35 -36
- package/claude/skills/sa-wds-visual-proposals/SKILL.md +6 -0
- package/package.json +1 -1
- package/siesa-agents/bmm/workflows/3-solutioning/wds-visual-proposals/data/component-mapping.csv +47 -0
- package/siesa-agents/bmm/workflows/3-solutioning/wds-visual-proposals/steps/step-01-init.md +148 -0
- package/siesa-agents/bmm/workflows/3-solutioning/wds-visual-proposals/steps/step-01b-continue.md +79 -0
- package/siesa-agents/bmm/workflows/3-solutioning/wds-visual-proposals/steps/step-02-bridge.md +114 -0
- package/siesa-agents/bmm/workflows/3-solutioning/wds-visual-proposals/steps/step-02b-kit-warmup.md +96 -0
- package/siesa-agents/bmm/workflows/3-solutioning/wds-visual-proposals/steps/step-03-scenarios.md +102 -0
- package/siesa-agents/bmm/workflows/3-solutioning/wds-visual-proposals/steps/step-04-specs.md +97 -0
- package/siesa-agents/bmm/workflows/3-solutioning/wds-visual-proposals/steps/step-05-prototype.md +102 -0
- package/siesa-agents/bmm/workflows/3-solutioning/wds-visual-proposals/steps/step-06-handoff.md +96 -0
- package/siesa-agents/bmm/workflows/3-solutioning/wds-visual-proposals/templates/product-brief-bridge.md +68 -0
- package/siesa-agents/bmm/workflows/3-solutioning/wds-visual-proposals/templates/proposal-index.md +46 -0
- package/siesa-agents/bmm/workflows/3-solutioning/wds-visual-proposals/templates/trigger-map-bridge.md +54 -0
- package/siesa-agents/bmm/workflows/3-solutioning/wds-visual-proposals/workflow.md +82 -0
- package/siesa-agents/bmm/workflows/3-solutioning/wds-visual-proposals/workflow_ext.md +195 -0
- package/siesa-agents/sa/sa-init-devops/scripts/sa-init-devops.js +46 -50
- package/siesa-agents/wds/config.yaml +20 -0
- package/siesa-agents/wds/data/agent-contracts.md +72 -0
- package/siesa-agents/wds/data/agent-guides/freya/agentic-development.md +223 -0
- package/siesa-agents/wds/data/agent-guides/freya/content-creation.md +270 -0
- package/siesa-agents/wds/data/agent-guides/freya/design-system.md +333 -0
- package/siesa-agents/wds/data/agent-guides/freya/meta-content-guide.md +495 -0
- package/siesa-agents/wds/data/agent-guides/freya/specification-quality.md +262 -0
- package/siesa-agents/wds/data/agent-guides/freya/strategic-design.md +116 -0
- package/siesa-agents/wds/data/agent-guides/saga/content-structure-principles.md +190 -0
- package/siesa-agents/wds/data/agent-guides/saga/conversational-followups.md +372 -0
- package/siesa-agents/wds/data/agent-guides/saga/discovery-conversation.md +265 -0
- package/siesa-agents/wds/data/agent-guides/saga/dream-up-approach.md +1034 -0
- package/siesa-agents/wds/data/agent-guides/saga/inspiration-analysis.md +215 -0
- package/siesa-agents/wds/data/agent-guides/saga/resources/project-brief.template.md +187 -0
- package/siesa-agents/wds/data/agent-guides/saga/seo-strategy-guide.md +391 -0
- package/siesa-agents/wds/data/agent-guides/saga/strategic-documentation.md +454 -0
- package/siesa-agents/wds/data/agent-guides/saga/trigger-mapping.md +653 -0
- package/siesa-agents/wds/data/agent-guides/saga/working-with-existing-materials.md +172 -0
- package/siesa-agents/wds/data/design-system/component-boundaries.md +318 -0
- package/siesa-agents/wds/data/design-system/figma-component-structure.md +697 -0
- package/siesa-agents/wds/data/design-system/naming-conventions.md +200 -0
- package/siesa-agents/wds/data/design-system/state-management.md +93 -0
- package/siesa-agents/wds/data/design-system/token-architecture.md +474 -0
- package/siesa-agents/wds/data/design-system/validation-patterns.md +74 -0
- package/siesa-agents/wds/data/presentations/freya-how-i-help.md +63 -0
- package/siesa-agents/wds/data/presentations/freya-intro.md +269 -0
- package/siesa-agents/wds/data/presentations/freya-presentation.md +77 -0
- package/siesa-agents/wds/data/presentations/freya-workflows-guide.md +51 -0
- package/siesa-agents/wds/data/presentations/mimir-agents-overview.md +66 -0
- package/siesa-agents/wds/data/presentations/mimir-tone-setting.md +48 -0
- package/siesa-agents/wds/data/presentations/saga-how-i-help.md +62 -0
- package/siesa-agents/wds/data/presentations/saga-intro.md +285 -0
- package/siesa-agents/wds/data/presentations/saga-presentation.md +74 -0
- package/siesa-agents/wds/data/presentations/saga-workflows-guide.md +48 -0
- package/siesa-agents/wds/data/shared-activation.md +49 -0
- package/siesa-agents/wds/data/wds-glossary.md +98 -0
- package/siesa-agents/wds/module-help.csv +19 -0
- package/siesa-agents/wds/scripts/README.md +155 -0
- package/siesa-agents/wds/scripts/wds-add-object.js +207 -0
- package/siesa-agents/wds/scripts/wds-add-spacing.js +158 -0
- package/siesa-agents/wds/scripts/wds-init-page.js +234 -0
- package/siesa-agents/wds/scripts/wds-init-scenario.js +125 -0
- package/siesa-agents/wds/scripts/wds-nav.js +206 -0
- package/siesa-agents/wds/scripts/wds-validate.js +306 -0
- package/siesa-agents/wds/skills/freya.activation.md +204 -0
- package/siesa-agents/wds/skills/handoff.md +91 -0
- package/siesa-agents/wds/skills/saga.activation.md +169 -0
- package/siesa-agents/wds/skills/shared/git.md +55 -0
- package/siesa-agents/wds/skills/start.md +99 -0
- package/siesa-agents/wds/skills/wrap.md +198 -0
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
---
|
|
2
|
+
type: wds-trigger-map
|
|
3
|
+
status: bridged-from-planning
|
|
4
|
+
source: siesa-planning-bridge
|
|
5
|
+
generated_date: ""
|
|
6
|
+
source_files: []
|
|
7
|
+
stepsCompleted: []
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
# Trigger Map — {{project_name}}
|
|
11
|
+
|
|
12
|
+
> Prerequisito de Fase 2 (WDS) generado desde el PRD + épicas. Mapea la psicología del usuario a los objetivos de negocio. Es lo que Freya usa para crear escenarios.
|
|
13
|
+
|
|
14
|
+
## Personas
|
|
15
|
+
|
|
16
|
+
> Una persona por archivo: `B-Trigger-Map/NN-persona-<nombre>-<arquetipo>.md`. Nombres aliterados (ej. "Carla la Cajera"). Aquí va el resumen.
|
|
17
|
+
|
|
18
|
+
| Persona | Arquetipo | Awareness stage | Archivo |
|
|
19
|
+
|---|---|---|---|
|
|
20
|
+
| {{persona_1_name}} | {{persona_1_archetype}} | {{persona_1_awareness}} | {{persona_1_file}} |
|
|
21
|
+
|
|
22
|
+
## Driving Forces (por persona)
|
|
23
|
+
|
|
24
|
+
### {{persona_1_name}}
|
|
25
|
+
|
|
26
|
+
**Fuerzas positivas** (deseos, aspiraciones):
|
|
27
|
+
- {{positive_1}}
|
|
28
|
+
|
|
29
|
+
**Fuerzas negativas** (miedos, frustraciones):
|
|
30
|
+
- {{negative_1}}
|
|
31
|
+
|
|
32
|
+
[Source: {{prd_pains_gains_source}}]
|
|
33
|
+
|
|
34
|
+
## Business Goals ↔ Triggers
|
|
35
|
+
|
|
36
|
+
| Objetivo de negocio | Trigger del usuario | Persona |
|
|
37
|
+
|---|---|---|
|
|
38
|
+
| {{biz_goal_1}} | {{trigger_1}} | {{persona_ref_1}} |
|
|
39
|
+
|
|
40
|
+
[Source: {{prd_goals_source}}]
|
|
41
|
+
|
|
42
|
+
## Feature Impact
|
|
43
|
+
|
|
44
|
+
> Detalle completo en `B-Trigger-Map/feature-impact.md` (épica/feature × persona × driving force).
|
|
45
|
+
|
|
46
|
+
| Épica / Feature | Persona | Driving force | Impacto |
|
|
47
|
+
|---|---|---|---|
|
|
48
|
+
| {{feature_1}} | {{persona_ref}} | {{force}} | {{impact}} |
|
|
49
|
+
|
|
50
|
+
[Source: {{epics_source}}]
|
|
51
|
+
|
|
52
|
+
---
|
|
53
|
+
|
|
54
|
+
_Provenance: derivado de los archivos en `source_files`. Marcar `⚠️ [Asunción — confirmar]` donde el planning no lo especifica._
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: wds-visual-proposals
|
|
3
|
+
description: Toma los artefactos de planning ya existentes (PRD, épicas/historias, UX spec, arquitectura) y los usa como base para que el módulo WDS (Freya) genere propuestas visuales — escenarios UX, page-specs y prototipos renderizados con siesa-ui-kit — ayudando a los diseñadores.
|
|
4
|
+
web_bundle: true
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# WDS Visual Proposals — Del Planning a las Propuestas Visuales
|
|
8
|
+
|
|
9
|
+
**Goal:** Tomar los artefactos de planning ya hechos del proyecto (PRD, épicas/historias, `ux-design-specification.md`, arquitectura) como **base**, traducirlos a la fundación estratégica que el módulo **WDS** necesita, y dirigir a **Freya** para producir **propuestas visuales**: escenarios UX + page-specs (formato WDS) **y** prototipos renderizados con los componentes reales de **siesa-ui-kit**. El resultado ayuda al equipo de diseño a iterar sobre algo tangible en vez de partir de cero.
|
|
10
|
+
|
|
11
|
+
**Your Role:** In addition to your name, communication_style, and persona, you are also a **UX Bridge Engineer + Design Facilitator** collaborating with the **Design Team and Product Owners**. This is a partnership, not a client-vendor relationship. You bring expertise in translating product requirements into WDS-compatible design foundations and in driving the WDS/Freya design loop with siesa-ui-kit fidelity, while the user brings product knowledge and design judgment. Work together as equals.
|
|
12
|
+
|
|
13
|
+
---
|
|
14
|
+
|
|
15
|
+
## RELACIÓN CON EL MÓDULO WDS
|
|
16
|
+
|
|
17
|
+
Este workflow es un **adaptador + director**. NO reimplementa el diseño: reutiliza el módulo WDS instalado en `{project-root}/_siesa-agents/wds/`.
|
|
18
|
+
|
|
19
|
+
- **Puente (Phases 0–2 de WDS):** sintetiza los prerequisitos que Freya exige —`A-Product-Brief/product-brief.md`, `B-Trigger-Map/trigger-map.md`, outline de escenarios y `_progress/wds-project-outline.yaml`— a partir de los artefactos de planning de SIESA. Sin este puente, Freya no puede empezar.
|
|
20
|
+
- **Kit Warm-up (step-02b, anti-alucinación):** antes de diseñar, instala/usa el paquete **real** de siesa-ui-kit, lo compila/renderiza y produce `kit-grounding.md` (nombres/props reales). Es la fuente de verdad que consumen las specs y los prototipos.
|
|
21
|
+
- **Diseño (Phases 3–4 de WDS):** usa los scripts scaffold de WDS (`_siesa-agents/wds/scripts/*.js`) para crear escenarios y page-specs, y el design loop de Freya (`_siesa-agents/wds/data/agent-guides/freya/`) para renderizar y verificar prototipos.
|
|
22
|
+
- **siesa-ui-kit primero:** todo objeto UI se mapea contra `kit-grounding.md` (verdad del paquete) y el catálogo `https://siesa-ui-kit.pages.dev/llms.txt`. Si discrepan, **gana el grounding**. Texto de UI siempre en **español**.
|
|
23
|
+
|
|
24
|
+
---
|
|
25
|
+
|
|
26
|
+
## WORKFLOW ARCHITECTURE
|
|
27
|
+
|
|
28
|
+
This uses **step-file architecture** for disciplined execution:
|
|
29
|
+
|
|
30
|
+
### Core Principles
|
|
31
|
+
|
|
32
|
+
- **Micro-file Design**: Each step is a self contained instruction file that is part of an overall workflow that must be followed exactly
|
|
33
|
+
- **Just-In-Time Loading**: Only the current step file is in memory - never load future step files until told to do so
|
|
34
|
+
- **Sequential Enforcement**: Sequence within the step files must be completed in order, no skipping or optimization allowed
|
|
35
|
+
- **State Tracking**: Document progress in the WDS project outline (`_progress/wds-project-outline.yaml`) and design log; use `stepsCompleted` array in any output document frontmatter
|
|
36
|
+
- **Append-Only Building**: Build documents by appending content as directed; never overwrite existing WDS artifacts blindly
|
|
37
|
+
|
|
38
|
+
### Step Processing Rules
|
|
39
|
+
|
|
40
|
+
1. **READ COMPLETELY**: Always read the entire step file before taking any action
|
|
41
|
+
2. **FOLLOW SEQUENCE**: Execute all numbered sections in order, never deviate
|
|
42
|
+
3. **WAIT FOR INPUT**: If a menu is presented, halt and wait for user selection
|
|
43
|
+
4. **CHECK CONTINUATION**: If the step has a menu with Continue as an option, only proceed to next step when user selects 'C' (Continue)
|
|
44
|
+
5. **SAVE STATE**: Update the project outline / design log before loading next step
|
|
45
|
+
6. **LOAD NEXT**: When directed, load, read entire file, then execute the next step file
|
|
46
|
+
|
|
47
|
+
### Critical Rules (NO EXCEPTIONS)
|
|
48
|
+
|
|
49
|
+
- 🛑 **NEVER** load multiple step files simultaneously
|
|
50
|
+
- 📖 **ALWAYS** read entire step file before execution
|
|
51
|
+
- 🚫 **NEVER** skip steps or optimize the sequence
|
|
52
|
+
- 💾 **ALWAYS** update state when writing the final output for a specific step
|
|
53
|
+
- 🎯 **ALWAYS** follow the exact instructions in the step file
|
|
54
|
+
- ⏸️ **ALWAYS** halt at menus and wait for user input
|
|
55
|
+
- 📋 **NEVER** create mental todo lists from future steps
|
|
56
|
+
- 🧩 **NEVER** write raw WDS markdown by hand — use the scaffold scripts (`wds-init-scenario.js`, `wds-init-page.js`, `wds-add-object.js`, `wds-add-spacing.js`, `wds-nav.js`) and validate with `wds-validate.js`
|
|
57
|
+
- 🇪🇸 **ALWAYS** write user-facing UI text in **Spanish**; **ALWAYS** check siesa-ui-kit FIRST before proposing any custom component
|
|
58
|
+
- ✅ YOU MUST ALWAYS SPEAK OUTPUT In your Agent communication style with the config `{communication_language}`
|
|
59
|
+
|
|
60
|
+
---
|
|
61
|
+
|
|
62
|
+
## INITIALIZATION SEQUENCE
|
|
63
|
+
|
|
64
|
+
### 1. Configuration Loading
|
|
65
|
+
|
|
66
|
+
Load and read full config from `{project-root}/_bmad/bmm/config.yaml` and resolve:
|
|
67
|
+
|
|
68
|
+
- `project_name`, `output_folder`, `user_name`, `communication_language`, `document_output_language`
|
|
69
|
+
- `planning_artifacts`, `implementation_artifacts`, `project_knowledge`
|
|
70
|
+
|
|
71
|
+
Then load `{project-root}/_siesa-agents/wds/config.yaml` and resolve:
|
|
72
|
+
|
|
73
|
+
- `design_artifacts` (base path where WDS artifacts live — scripts write `C-UX-Scenarios/` under it)
|
|
74
|
+
- `output_folder` (WDS `_bmad-output` base), `communication_language`, `document_output_language`
|
|
75
|
+
|
|
76
|
+
If the two configs disagree on a value, **WDS `config.yaml` wins** for any WDS artifact path; otherwise use `_bmad/bmm/config.yaml`.
|
|
77
|
+
|
|
78
|
+
- ✅ YOU MUST ALWAYS SPEAK OUTPUT In your Agent communication style with the config `{communication_language}`
|
|
79
|
+
|
|
80
|
+
### 2. First Step EXECUTION
|
|
81
|
+
|
|
82
|
+
Load, read the full file and then execute `{project-root}/_siesa-agents/bmm/workflows/3-solutioning/wds-visual-proposals/steps/step-01-init.md` to begin the workflow.
|
|
@@ -0,0 +1,195 @@
|
|
|
1
|
+
# MANDATORY RULES: WDS-VISUAL-PROPOSALS WORKFLOW
|
|
2
|
+
|
|
3
|
+
These Siesa-specific rules are injected into memory BEFORE the base workflow runs and remain active throughout. They are non-negotiable.
|
|
4
|
+
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
## 1. MANDATORY RULE — PHASE BRANCH CREATION AT WORKFLOW START
|
|
8
|
+
|
|
9
|
+
**TRIGGER:** Immediately when the user initiates this workflow (e.g., `/wds-visual-proposals`).
|
|
10
|
+
|
|
11
|
+
**CRITICAL INSTRUCTION:** Before executing any workflow step, you MUST invoke the `generate-commits-by-phase` skill to create the **Phase 2 (planning)** branch. Visual proposals are a planning-phase activity.
|
|
12
|
+
|
|
13
|
+
### EXECUTION STEPS (PERFORM THESE ACTIONS NOW, BEFORE ANYTHING ELSE)
|
|
14
|
+
|
|
15
|
+
**STEP 1: INVOKE THE SKILL — CREATE PHASE 2 BRANCH**
|
|
16
|
+
|
|
17
|
+
```bash
|
|
18
|
+
node _siesa-agents/scripts/phases/phase2.js
|
|
19
|
+
```
|
|
20
|
+
|
|
21
|
+
- If the `planning` branch already exists, the script will report it — continue normally.
|
|
22
|
+
- If it is created successfully, confirm to the user and proceed.
|
|
23
|
+
|
|
24
|
+
**STEP 2: CONFIRM AND CONTINUE**
|
|
25
|
+
|
|
26
|
+
Output to the user:
|
|
27
|
+
> `✅ Rama Phase 2 (planning) lista. Procediendo con la generación de propuestas visuales WDS...`
|
|
28
|
+
|
|
29
|
+
**DO NOT proceed to the workflow steps until this rule is fully executed.**
|
|
30
|
+
|
|
31
|
+
---
|
|
32
|
+
|
|
33
|
+
## 2. CONTEXT AND STANDARDS SETUP
|
|
34
|
+
|
|
35
|
+
Establish the following context paths for use throughout all steps:
|
|
36
|
+
|
|
37
|
+
- `company_standards_path` = `{project-root}/_siesa-agents/bmm/workflows/3-solutioning/create-architecture/data/company-standards`
|
|
38
|
+
- `wds_module_path` = `{project-root}/_siesa-agents/wds`
|
|
39
|
+
- `wds_scripts_path` = `{wds_module_path}/scripts`
|
|
40
|
+
- `siesa_uikit_catalog_url` = `https://siesa-ui-kit.pages.dev/llms.txt`
|
|
41
|
+
- `base_ux_spec` = `{project-root}/_siesa-agents/resources/ux-ui/ux-design-specification.md`
|
|
42
|
+
- `frontend_base_repo` = `https://github.com/SiesaTeams/BaseFrontend`
|
|
43
|
+
- `frontend_dir` = `{design_artifacts}/_kit-playground` (el harness del frontend ES un clon de `frontend_base_repo`)
|
|
44
|
+
|
|
45
|
+
### Company Standards Integration
|
|
46
|
+
|
|
47
|
+
🔴 **CRITICAL**: Load these before producing any spec or prototype:
|
|
48
|
+
- `{company_standards_path}/frontend-standards.md` — **siesa-ui-kit** rules + component strategy
|
|
49
|
+
- `{company_standards_path}/technical-preferences-ux.md` — UX/UI preferences and patterns
|
|
50
|
+
|
|
51
|
+
| Priority | Rule | Why Critical |
|
|
52
|
+
|----------|------|--------------|
|
|
53
|
+
| 🔴 P0 | **siesa-ui-kit obligatorio** | Check siesa-ui-kit (via `{siesa_uikit_catalog_url}`) before proposing ANY component |
|
|
54
|
+
| 🔴 P0 | **UI text in Spanish** | All user-facing text MUST be in Spanish |
|
|
55
|
+
| 🔴 P0 | **Vite over Next.js** | Any rendered prototype harness uses Vite + React + Tailwind v4, never Next.js |
|
|
56
|
+
| 🔴 P0 | **Fidelidad al diseño de referencia** | Si el usuario entregó un diseño a seguir (mockup HTML, imagen, Figma), **renderízalo** y replícalo; su look manda sobre los defaults del kit y se **verifica lado a lado** (ver §3C) |
|
|
57
|
+
| 🟡 P1 | Design tokens | Use the tokens defined in `{base_ux_spec}` and the project `ux-design-specification.md` |
|
|
58
|
+
|
|
59
|
+
---
|
|
60
|
+
|
|
61
|
+
## 3. SIESA-UI-KIT MANDATORY CHECK (applies to step-04 and step-05)
|
|
62
|
+
|
|
63
|
+
**BEFORE mapping any object to a component or rendering any prototype, you MUST:**
|
|
64
|
+
|
|
65
|
+
1. Fetch the live catalog from `{siesa_uikit_catalog_url}` (authoritative source of available components).
|
|
66
|
+
2. Resolve the **actual installed package name** by reading the target frontend app's `package.json` — do NOT assume `@siesa/ui-kit`. `llms.txt` does not declare the npm name.
|
|
67
|
+
3. Follow the Component Decision Protocol:
|
|
68
|
+
|
|
69
|
+
```
|
|
70
|
+
Component needed → ¿Está en siesa-ui-kit (per llms.txt / kit-grounding.md)?
|
|
71
|
+
├── YES → USA el componente siesa-ui-kit tal cual
|
|
72
|
+
└── NO → busca en shadcn (registro MCP de shadcn)
|
|
73
|
+
├── existe → usa el componente shadcn
|
|
74
|
+
└── no existe → el agente lo CREA (compone primitivos + tokens de marca)
|
|
75
|
+
(AUTOMÁTICO — no preguntar al usuario; registrar la decisión kit/shadcn/custom en el design log.)
|
|
76
|
+
```
|
|
77
|
+
|
|
78
|
+
4. Prefer siesa-ui-kit **view-level** components when they fit the page (e.g. `LoginView`, `SignUpView`, `RecoverPasswordView`, `Dashboard`, `LayoutBase`, `ProductsView`, `MasterCrud`) — they raise fidelity and reduce effort.
|
|
79
|
+
|
|
80
|
+
### UI Text Language Rule
|
|
81
|
+
|
|
82
|
+
🔴 **MANDATORY**: All user-facing text MUST be in Spanish.
|
|
83
|
+
- ✅ "Guardar", "Cancelar", "Enviar", "Nombre de usuario", "Datos guardados correctamente"
|
|
84
|
+
- ❌ "Save", "Cancel", mixed "Save cambios"
|
|
85
|
+
|
|
86
|
+
> **Note on the bilingual scaffold:** the WDS scripts (`wds-add-object.js`) expose `--se` (Swedish) and `--en` (English) fields. For Siesa, put the **Spanish** UI string in `--se` (primary product language) and the English reference in `--en`. Spanish is the language the prototype renders.
|
|
87
|
+
|
|
88
|
+
---
|
|
89
|
+
|
|
90
|
+
## 3A. MANDATORY RULE — CLONA Y TRABAJA BAJO BaseFrontend
|
|
91
|
+
|
|
92
|
+
**TRIGGER:** En step-02b (Kit Warm-up), al montar el harness del frontend, y durante todo step-05.
|
|
93
|
+
|
|
94
|
+
🔴 **CRITICAL:** El frontend NO se scaffoldea a mano. Se **clona el repositorio base oficial** `{frontend_base_repo}` en `{frontend_dir}` y se trabaja **dentro de él**. Ese repo ya trae Vite 6 + React 19 + TS + Tailwind v4 + `siesa-ui-kit@^1.0.109` con TODOS los peers instalados, TanStack Router (file-based), Clean Architecture por módulos, capa mock en memoria y un shell (`LayoutBase`) ya cableado. No reinventar nada de eso.
|
|
95
|
+
|
|
96
|
+
```bash
|
|
97
|
+
git clone --depth 1 {frontend_base_repo} {frontend_dir}
|
|
98
|
+
rm -rf {frontend_dir}/.git # el clon vive DENTRO del repo SIESA; no anidar .git
|
|
99
|
+
cd {frontend_dir} && npm install
|
|
100
|
+
```
|
|
101
|
+
|
|
102
|
+
- **`.git` fuera:** tras clonar, borra `{frontend_dir}/.git` para que los fuentes queden versionados por el repo SIESA padre (no como submódulo). `node_modules/` ya está en el `.gitignore` del propio base.
|
|
103
|
+
- **Ejecución:** el prototipo se ve con `npm run dev` (modo standalone, **puerto 3010**, todos los permisos activos, datos en memoria mock). NUNCA Next.js.
|
|
104
|
+
- **Convenciones del base (respétalas, no las reescribas):**
|
|
105
|
+
- **Shell = `_app.tsx`** → usa `LayoutBase` de siesa-ui-kit con `navigationItems` de `src/config/navigation.tsx` + `<Outlet/>`. Este ES el shell persistente; no hay que construir Navbar/rail a mano.
|
|
106
|
+
- **Un módulo por dominio** en `src/modules/<dominio>/` con las 4 capas `domain / application / infrastructure / presentation` (copia el patrón de los módulos de ejemplo `agentes` y `colaboradores`, que luego se reemplazan).
|
|
107
|
+
- **Listado + CRUD** → componente `MasterCrud` dirigido por un array `fields` (accessorKey/header/type/config) + un `service` que implementa `CrudService<T>` + schema Zod. No coloques objetos a mano cuando `MasterCrud` cubre la pantalla.
|
|
108
|
+
- **Estado compartido = capa mock** (`src/lib/mock/*.mock.ts`): BD en memoria por entidad. Los flujos conectados entre módulos (eliminar padre → hijos huérfanos, asociar/reasignar reflejado en ambos, enlaces cruzados) se implementan sobre estos stores.
|
|
109
|
+
- **Rutas** = TanStack Router file-based: una ruta por módulo en `src/routes/_app/<modulo>.tsx` + su ítem en `config/navigation.tsx`. `routeTree.gen.ts` se autogenera (no editar).
|
|
110
|
+
|
|
111
|
+
---
|
|
112
|
+
|
|
113
|
+
## 3B. MANDATORY RULE — KIT WARM-UP GROUNDING BEFORE DESIGN
|
|
114
|
+
|
|
115
|
+
**TRIGGER:** After the strategic bridge (step-02) and BEFORE generating scenarios/specs (step-03+).
|
|
116
|
+
|
|
117
|
+
🔴 **CRITICAL:** El agente NO debe diseñar contra el catálogo `llms.txt` solo. Debe ejecutar **step-02b (Kit Warm-up)**: clonar BaseFrontend (§3A), instalarlo, verificar con `npm run build`/render que el paquete **real** de siesa-ui-kit compila, y producir `{frontend_dir}/kit-grounding.md` con nombres y props **reales**.
|
|
118
|
+
|
|
119
|
+
- **Source of truth:** cuando `kit-grounding.md` y el catálogo discrepan, **gana el grounding** (usa el export real: p. ej. `ContentLayout` no `LayoutContent`; no inventes `Dashboard`/`StatCard` → compón con `Card`). BaseFrontend ya usa `LayoutBase` y `MasterCrud` con contratos reales — documéntalos en el grounding.
|
|
120
|
+
- **No silent skip:** si no se puede clonar/instalar (sin red/registro), `kit-grounding.md` se escribe igual desde el catálogo pero marcado `⚠️ NO VERIFICADO EN RUNTIME`.
|
|
121
|
+
- **Spec Sync (feedback obligatorio):** todo hallazgo del warm-up que invalide un supuesto del `ux-design-specification.md` (nombre/contrato inexistente) debe reflejarse en una sección "Kit Grounding — Spec Sync" del spec en el mismo ciclo.
|
|
122
|
+
|
|
123
|
+
🔴 **ENTREGABLE = LA APP CLONADA (BaseFrontend) INTEGRADA, NO pantallas sueltas.** Step-05 trabaja **dentro de `{frontend_dir}`**: reemplaza los módulos de ejemplo por **un módulo por dominio** del alcance, siguiendo las convenciones del base (shell `LayoutBase`, `MasterCrud` data-driven, stores mock compartidos, rutas + nav). Resultado: una app navegable de punta a punta con `npm run dev`, **estado compartido** entre módulos y **flujos conectados** (eliminar padre → hijos huérfanos; asociar/reasignar refleja en ambos; enlaces cruzados navegables). Las épicas de relación se integran DENTRO de los módulos que relacionan; la épica de shell YA es el shell del base. **Prohibido** entregar un prototipo aislado por épica, y **prohibido** HTML+CSS que se auto-rotule como si usara el kit (`<div class="rail" title="NavigationRail">`, `/* siesa-ui-kit Button */`) — esa es la alucinación que este flujo elimina. Todo con componentes reales, `npm run build` exit 0. **Entregable estático = la app compilada en UN HTML autocontenido (`propuesta-app.html`, vía vite-plugin-singlefile + hash routing), NO una galería de screenshots** (los screenshots son solo verificación interna del agente). Gotchas obligatorios (el base ya resuelve varios): `ContentLayout` = master-detail (no header); `GenericEntityModal`/`ContactManager` requieren `QueryClientProvider` (el base ya lo provee en `config/query-client.ts`); `LookupField` requiere `fetcher` mock.
|
|
124
|
+
|
|
125
|
+
---
|
|
126
|
+
|
|
127
|
+
## 3C. MANDATORY RULE — REFERENCE DESIGN FIDELITY (cuando el usuario entrega un diseño a seguir)
|
|
128
|
+
|
|
129
|
+
**TRIGGER:** El usuario aportó, en cualquier punto del flujo, un **diseño de referencia** que la propuesta debe replicar: un mockup HTML (incluidos los HTML autocontenidos/"bundled" que se auto-desempaquetan), una imagen (PNG/JPG), un PDF de pantallas, o un enlace de Figma. step-01 lo detecta e ingesta; step-05 lo replica; **esta regla aplica durante todo el flujo.**
|
|
130
|
+
|
|
131
|
+
🔴 **Regla de oro: NO se diseña contra una descripción textual del diseño — se diseña contra el diseño RENDERIZADO.** El fallo que esta regla previene es construir "de memoria"/desde texto y declarar fidelidad sin haber visto nunca el diseño real.
|
|
132
|
+
|
|
133
|
+
### A. Renderizar el diseño de referencia a imágenes (obligatorio antes de diseñar)
|
|
134
|
+
|
|
135
|
+
Convierte el diseño a screenshots que sean la **verdad visual** (guárdalos en `{design_artifacts}/_design-ref/`):
|
|
136
|
+
|
|
137
|
+
- **Imagen/PDF** → úsala directamente (o exporta cada página del PDF a PNG).
|
|
138
|
+
- **HTML autocontenido/bundled** (abre por sí solo, p. ej. un export con assets en base64) → renderízalo en **Chrome headless**:
|
|
139
|
+
`chrome --headless=new --disable-gpu --hide-scrollbars --window-size=1600,1050 --virtual-time-budget=8000 --screenshot=<out.png> "file:///<ruta-del-html>"`.
|
|
140
|
+
Dale tiempo (`--virtual-time-budget`) si el HTML se desempaqueta/renderiza vía JS.
|
|
141
|
+
- **HTML interactivo / multi-pantalla** (la pantalla objetivo se alcanza haciendo clic, p. ej. "Crear/Editar") → **NO basta la pantalla inicial**: conduce el Chrome instalado con `puppeteer-core` (`npm i puppeteer-core`, `executablePath` = Chrome local), navega/haz clic hacia cada estado (lista, crear, editar, diálogos) y captura **un screenshot por pantalla**.
|
|
142
|
+
- **Figma/URL** → exporta los frames a PNG (o pide al usuario los PNG exportados). Si no hay acceso, avísalo y trabaja con lo que haya.
|
|
143
|
+
|
|
144
|
+
Registra las referencias en `_progress/wds-project-outline.yaml` (`reference_design: [rutas]`) y en el design log.
|
|
145
|
+
|
|
146
|
+
### B. Extraer sus tokens (gotcha que deja todo sin estilo)
|
|
147
|
+
|
|
148
|
+
Si el diseño define tokens como custom properties CSS (`:root { --surface-card: …; --space-4: …; --radius-xl: …; --text-sm: … }`), **cópialos al harness** (`{kit_playground}/src/styles/tokens.css`, importado desde `src/index.css`) **antes** de escribir componentes custom. Los componentes que referencian `var(--…)` sin esas definiciones renderizan **colapsados/sin estilo** (flex/gap 0, sin fondos ni bordes) — `siesa-ui-kit/styles.css` define SUS tokens, no los del diseño de referencia.
|
|
149
|
+
|
|
150
|
+
### C. Precedencia de fidelidad (el diseño manda sobre los defaults del kit)
|
|
151
|
+
|
|
152
|
+
siesa-ui-kit primero **sigue vigente para primitivos** (`Input`, `Textarea`, `Select`, `Switch`, `Badge`, `Button`, `LookupField`, `Table`). Pero los **componentes de vista** (`MasterCrud`, `LayoutBase`, etc.) imponen un look que **puede no parecerse en nada** al diseño de referencia (p. ej. el diseño usa barra superior sin rail y una tabla limpia con pills de color, no el toolbar por defecto de `MasterCrud`). Cuando el default del kit diverge del diseño: **compón la presentación a medida para igualar el diseño**, importando primitivos del kit donde encajen. La fidelidad al diseño entregado por el usuario tiene prioridad sobre "usar el componente de vista del kit". Registra kit/custom en el design log.
|
|
153
|
+
|
|
154
|
+
### D. Verificación lado a lado (antes de declarar "listo")
|
|
155
|
+
|
|
156
|
+
Para CADA página del alcance: renderiza tu build y ponlo **al lado del screenshot de referencia**; solo pasa si coinciden **layout, colores, espaciado, tipografía y componentes**. 🚫 **PROHIBIDO declarar fidelidad** contra tu propio modelo mental, contra una descripción textual, o contra la pantalla inicial cuando la referencia tiene más pantallas. Si no coincide, corrige e itera antes de presentar.
|
|
157
|
+
|
|
158
|
+
---
|
|
159
|
+
|
|
160
|
+
## 4. PATH RECONCILIATION (WDS docs are internally inconsistent)
|
|
161
|
+
|
|
162
|
+
WDS docs disagree on output paths. Resolve at runtime in this order:
|
|
163
|
+
|
|
164
|
+
1. Read `{wds_module_path}/config.yaml`. Use its `design_artifacts` value as the **base output path** for all WDS scaffold scripts (`--output <design_artifacts>`). Scripts create `C-UX-Scenarios/` under it.
|
|
165
|
+
2. Place the bridge artifacts as Freya's activation expects them, relative to that base:
|
|
166
|
+
- `{design_artifacts}/A-Product-Brief/product-brief.md`
|
|
167
|
+
- `{design_artifacts}/B-Trigger-Map/trigger-map.md` (+ personas)
|
|
168
|
+
- `{design_artifacts}/C-UX-Scenarios/` (scenarios + page specs)
|
|
169
|
+
- `{design_artifacts}/_progress/wds-project-outline.yaml` and `_progress/00-design-log.md`
|
|
170
|
+
3. NEVER hardcode `_bmad-output` vs `design-artifacts`. Always derive from `config.yaml`.
|
|
171
|
+
|
|
172
|
+
---
|
|
173
|
+
|
|
174
|
+
## 5. MANDATORY RULE — PHASE COMMIT AT WORKFLOW END
|
|
175
|
+
|
|
176
|
+
**TRIGGER:** Immediately after the visual proposals (specs + prototype + index) are generated and saved (end of step-06).
|
|
177
|
+
|
|
178
|
+
**STEP 1: INSPECT CHANGES**
|
|
179
|
+
1. `git status --short`
|
|
180
|
+
2. `git diff --stat`
|
|
181
|
+
|
|
182
|
+
**STEP 2: GENERATE COMMIT MESSAGE**
|
|
183
|
+
Format: `[Phase 2 - Planning] <brief description>` — e.g. `[Phase 2 - Planning] add WDS visual proposals for <project name>`. Write it in `{communication_language}`.
|
|
184
|
+
|
|
185
|
+
**STEP 3: INVOKE THE SKILL — COMMIT PHASE 2 CHANGES**
|
|
186
|
+
|
|
187
|
+
```bash
|
|
188
|
+
node _siesa-agents/scripts/phases/phase2.js --commit "<generated commit message>"
|
|
189
|
+
```
|
|
190
|
+
|
|
191
|
+
**STEP 4: CONFIRM COMPLETION**
|
|
192
|
+
Output to the user:
|
|
193
|
+
> `✅ Propuestas visuales WDS committeadas en la rama Phase 2 (planning).`
|
|
194
|
+
|
|
195
|
+
**This is the LAST action of the workflow. Do not execute any further steps after this commit.**
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
// sa-init-devops.js — Bootstrap the DevOps workspace and
|
|
2
|
+
// sa-init-devops.js — Bootstrap the DevOps workspace and commands in Siesa-Agents.
|
|
3
3
|
//
|
|
4
4
|
// In one invocation the script:
|
|
5
|
-
// 1. Clones (or pulls)
|
|
6
|
-
// 2. Detects conflicts: for each upstream `.claude/
|
|
5
|
+
// 1. Clones (or pulls) business-shared-deploy into `_siesa-agents/devops/`.
|
|
6
|
+
// 2. Detects conflicts: for each upstream `.claude/commands/*.md` and
|
|
7
7
|
// `.github/workflows/*.yml`, compares to the local copy in Siesa-Agents. If any local
|
|
8
8
|
// file differs from upstream and no policy flag was passed, aborts with `status:
|
|
9
9
|
// "conflicts"` and lists the conflicting items so the caller can ask the user how to
|
|
@@ -19,7 +19,7 @@
|
|
|
19
19
|
// entirely new in upstream.
|
|
20
20
|
// --keep-local=<csv> Keep these specific files (comma-separated names) local;
|
|
21
21
|
// overwrite the rest. Example:
|
|
22
|
-
// --keep-local=
|
|
22
|
+
// --keep-local=flow-aplicar.md,infra-pipeline-qa.yml
|
|
23
23
|
//
|
|
24
24
|
// Idempotency: between runs the clone's `.claude/` and `.github/` directories are gone from
|
|
25
25
|
// the working tree but still tracked in upstream HEAD. The script restores those paths
|
|
@@ -46,9 +46,7 @@ const fs = require('fs')
|
|
|
46
46
|
const path = require('path')
|
|
47
47
|
const { spawnSync } = require('child_process')
|
|
48
48
|
|
|
49
|
-
|
|
50
|
-
// once the repo is transferred to the SiesaTeams organization.
|
|
51
|
-
const REMOTE_URL = 'https://github.com/ssancheze912/architecture-sa-devops.git'
|
|
49
|
+
const REMOTE_URL = 'https://github.com/SiesaTeams/business-shared-deploy.git'
|
|
52
50
|
const REMOTE_NAME = 'origin'
|
|
53
51
|
const DEFAULT_BRANCH = 'main'
|
|
54
52
|
|
|
@@ -171,56 +169,54 @@ function decideAction(name, upstreamPath, localPaths, policy) {
|
|
|
171
169
|
return 'conflict'
|
|
172
170
|
}
|
|
173
171
|
|
|
174
|
-
// MOVE `<sourceDir>/.claude/
|
|
175
|
-
//
|
|
176
|
-
//
|
|
177
|
-
function
|
|
178
|
-
const
|
|
179
|
-
status.
|
|
180
|
-
status.
|
|
181
|
-
status.
|
|
182
|
-
status.
|
|
183
|
-
status.
|
|
184
|
-
|
|
185
|
-
if (!fs.existsSync(
|
|
186
|
-
status.
|
|
172
|
+
// MOVE `<sourceDir>/.claude/commands/*.md` into Siesa-Agents `.claude/commands/` (and
|
|
173
|
+
// `claude/commands/`) according to the policy. Records conflicts in status.command_conflicts;
|
|
174
|
+
// the caller checks that before any mutation happens.
|
|
175
|
+
function planAndApplyCommands(sourceDir, projectRoot, status, policy, dryRun) {
|
|
176
|
+
const srcCommandsDir = path.join(sourceDir, '.claude', 'commands')
|
|
177
|
+
status.commands_created = []
|
|
178
|
+
status.commands_overwritten = []
|
|
179
|
+
status.commands_kept_local = []
|
|
180
|
+
status.commands_unchanged = []
|
|
181
|
+
status.command_conflicts = []
|
|
182
|
+
|
|
183
|
+
if (!fs.existsSync(srcCommandsDir)) {
|
|
184
|
+
status.commands_source_missing = true
|
|
187
185
|
return
|
|
188
186
|
}
|
|
189
187
|
|
|
190
|
-
const dstA = path.join(projectRoot, '.claude', '
|
|
191
|
-
const dstB = path.join(projectRoot, 'claude', '
|
|
188
|
+
const dstA = path.join(projectRoot, '.claude', 'commands')
|
|
189
|
+
const dstB = path.join(projectRoot, 'claude', 'commands')
|
|
192
190
|
|
|
193
|
-
for (const entry of fs.readdirSync(
|
|
194
|
-
if (!entry.
|
|
195
|
-
if (!entry.name.
|
|
196
|
-
if (entry.name === 'sa-init-devops') continue // never overwrite the bootstrap itself
|
|
197
|
-
const srcSkill = path.join(srcSkillsDir, entry.name, 'SKILL.md')
|
|
198
|
-
if (!fs.existsSync(srcSkill)) continue
|
|
191
|
+
for (const entry of fs.readdirSync(srcCommandsDir, { withFileTypes: true })) {
|
|
192
|
+
if (!entry.isFile()) continue
|
|
193
|
+
if (!entry.name.endsWith('.md')) continue
|
|
199
194
|
|
|
200
|
-
const
|
|
201
|
-
const
|
|
195
|
+
const srcCommand = path.join(srcCommandsDir, entry.name)
|
|
196
|
+
const dstCommandA = path.join(dstA, entry.name)
|
|
197
|
+
const dstCommandB = path.join(dstB, entry.name)
|
|
202
198
|
|
|
203
|
-
const action = decideAction(entry.name,
|
|
199
|
+
const action = decideAction(entry.name, srcCommand, [dstCommandA, dstCommandB], policy)
|
|
204
200
|
|
|
205
201
|
if (action === 'conflict') {
|
|
206
|
-
status.
|
|
202
|
+
status.command_conflicts.push(entry.name)
|
|
207
203
|
continue
|
|
208
204
|
}
|
|
209
205
|
if (action === 'identical') {
|
|
210
|
-
status.
|
|
206
|
+
status.commands_unchanged.push(entry.name)
|
|
211
207
|
continue
|
|
212
208
|
}
|
|
213
209
|
if (dryRun) continue
|
|
214
210
|
|
|
215
211
|
if (action === 'create' || action === 'overwrite') {
|
|
216
|
-
fs.mkdirSync(
|
|
217
|
-
fs.mkdirSync(
|
|
218
|
-
fs.copyFileSync(
|
|
219
|
-
fs.copyFileSync(
|
|
220
|
-
if (action === 'create') status.
|
|
221
|
-
else status.
|
|
212
|
+
fs.mkdirSync(dstA, { recursive: true })
|
|
213
|
+
fs.mkdirSync(dstB, { recursive: true })
|
|
214
|
+
fs.copyFileSync(srcCommand, dstCommandA)
|
|
215
|
+
fs.copyFileSync(srcCommand, dstCommandB)
|
|
216
|
+
if (action === 'create') status.commands_created.push(entry.name)
|
|
217
|
+
else status.commands_overwritten.push(entry.name)
|
|
222
218
|
} else if (action === 'keep-local') {
|
|
223
|
-
status.
|
|
219
|
+
status.commands_kept_local.push(entry.name)
|
|
224
220
|
}
|
|
225
221
|
}
|
|
226
222
|
}
|
|
@@ -356,11 +352,11 @@ function runCheck(projectRoot) {
|
|
|
356
352
|
// Dry-run conflict detection so callers can preview before running default mode.
|
|
357
353
|
restoreClonePaths(sourceDir)
|
|
358
354
|
const policy = { takeUpstream: false, keepLocalAll: false, keepLocalList: null }
|
|
359
|
-
|
|
355
|
+
planAndApplyCommands(sourceDir, projectRoot, state, policy, true)
|
|
360
356
|
planAndApplyWorkflows(sourceDir, projectRoot, state, policy, true)
|
|
361
357
|
|
|
362
358
|
state.status = 'already-cloned'
|
|
363
|
-
const conflictCount = state.
|
|
359
|
+
const conflictCount = state.command_conflicts.length + state.workflow_conflicts.length
|
|
364
360
|
state.message = `${sourceDir} is a clean clone of ${REMOTE_URL}. ${conflictCount} conflict(s) would be raised by a default run.`
|
|
365
361
|
emit(state)
|
|
366
362
|
return 0
|
|
@@ -475,30 +471,30 @@ function runClone(projectRoot, mirrorOnly, args) {
|
|
|
475
471
|
|
|
476
472
|
function finalizeMoveAndMirror(sourceDir, projectRoot, mirrorDir, status, policy, terminalStatus) {
|
|
477
473
|
// Phase A: dry-run to compute the action plan and conflicts.
|
|
478
|
-
|
|
474
|
+
planAndApplyCommands(sourceDir, projectRoot, status, policy, true)
|
|
479
475
|
planAndApplyWorkflows(sourceDir, projectRoot, status, policy, true)
|
|
480
476
|
|
|
481
|
-
const totalConflicts = status.
|
|
477
|
+
const totalConflicts = status.command_conflicts.length + status.workflow_conflicts.length
|
|
482
478
|
if (totalConflicts > 0) {
|
|
483
479
|
// Abort without mutating. The caller (Claude/SKILL.md) asks the user and re-runs with
|
|
484
480
|
// a policy flag.
|
|
485
481
|
status.status = 'conflicts'
|
|
486
|
-
status.message = `Detected ${status.
|
|
482
|
+
status.message = `Detected ${status.command_conflicts.length} command conflict(s) and ${status.workflow_conflicts.length} workflow conflict(s). Re-run with one of: --take-upstream (overwrite all), --keep-local (keep all local versions), or --keep-local=<csv> (keep specific ones).`
|
|
487
483
|
emit(status)
|
|
488
484
|
return 4
|
|
489
485
|
}
|
|
490
486
|
|
|
491
487
|
// Phase B: real apply (no conflicts left to resolve).
|
|
492
|
-
|
|
488
|
+
planAndApplyCommands(sourceDir, projectRoot, status, policy, false)
|
|
493
489
|
planAndApplyWorkflows(sourceDir, projectRoot, status, policy, false)
|
|
494
490
|
cleanCloneDirs(sourceDir)
|
|
495
491
|
refreshMirror(sourceDir, mirrorDir, status)
|
|
496
492
|
|
|
497
493
|
status.status = terminalStatus
|
|
498
|
-
const created = status.
|
|
499
|
-
const over = status.
|
|
500
|
-
const kept = status.
|
|
501
|
-
const unch = status.
|
|
494
|
+
const created = status.commands_created.length + status.workflows_created.length
|
|
495
|
+
const over = status.commands_overwritten.length + status.workflows_overwritten.length
|
|
496
|
+
const kept = status.commands_kept_local.length + status.workflows_kept_local.length
|
|
497
|
+
const unch = status.commands_unchanged.length + status.workflows_unchanged.length
|
|
502
498
|
status.message = `${terminalStatus === 'cloned' ? 'Cloned' : (terminalStatus === 'updated' ? 'Pulled' : 'No upstream change')}. Created ${created}, overwrote ${over}, kept local ${kept}, unchanged ${unch}. Mirror refreshed.`
|
|
503
499
|
emit(status)
|
|
504
500
|
return 0
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
# WDS Module Configuration
|
|
2
|
+
# Generated by BMAD installer
|
|
3
|
+
# Version: 6.9.0
|
|
4
|
+
# Date: 2026-06-25T17:13:35.737Z
|
|
5
|
+
|
|
6
|
+
project_knowledge: "{project-root}/docs"
|
|
7
|
+
project_type: digital_product
|
|
8
|
+
design_artifacts: "{project-root}/design-artifacts"
|
|
9
|
+
design_system_mode: none
|
|
10
|
+
methodology_version: wds-v6
|
|
11
|
+
product_languages:
|
|
12
|
+
- en
|
|
13
|
+
design_experience: intermediate
|
|
14
|
+
|
|
15
|
+
# Core Configuration Values
|
|
16
|
+
user_name: Ssancheze
|
|
17
|
+
project_name: Dev
|
|
18
|
+
communication_language: Spanish
|
|
19
|
+
document_output_language: English
|
|
20
|
+
output_folder: "{project-root}/_bmad-output"
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
# WDS Agent Contracts
|
|
2
|
+
|
|
3
|
+
Defines what each agent owns, what they explicitly do not own, and how they hand off to each other.
|
|
4
|
+
All agents load this file at activation. These rules are non-negotiable.
|
|
5
|
+
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
## Domain Boundaries
|
|
9
|
+
|
|
10
|
+
| Agent | Owns | Does NOT own |
|
|
11
|
+
|-------|------|--------------|
|
|
12
|
+
| **Saga** | Phases 0–2: Alignment, Product Brief, Trigger Mapping | Any design work. Any code. Scenarios (Phase 3+). |
|
|
13
|
+
| **Freya** | Phases 3–4: UX Scenarios, UX Design. Phases 6–7: Asset Generation, Design System. | Discovery (Phases 1–2). Any code. PRDs. |
|
|
14
|
+
| **Mimir** | Phase 5: Tech Audit, PRD, Build. Phase 8: Product Evolution. | Discovery. Design. Writing specs without a Work Order. |
|
|
15
|
+
|
|
16
|
+
**If a user asks an agent to do work outside its domain:** name the right agent and offer to hand off. Never attempt the work yourself.
|
|
17
|
+
|
|
18
|
+
---
|
|
19
|
+
|
|
20
|
+
## Prerequisites
|
|
21
|
+
|
|
22
|
+
Each agent requires the following before starting core work:
|
|
23
|
+
|
|
24
|
+
| Agent | Required | Blocks |
|
|
25
|
+
|-------|----------|--------|
|
|
26
|
+
| Saga | Nothing | — |
|
|
27
|
+
| Freya | `A-Product-Brief/product-brief.md` + `B-Trigger-Map/00-trigger-map.md` | Cannot design without strategic foundation |
|
|
28
|
+
| Mimir | At least one Work Order from Freya | Cannot build without a WO. Cannot PRD without a WO. |
|
|
29
|
+
| Mimir (existing codebase) | `E-Development/000-tech-audit.md` | Cannot PRD without knowing the codebase |
|
|
30
|
+
|
|
31
|
+
---
|
|
32
|
+
|
|
33
|
+
## Handoff Rules
|
|
34
|
+
|
|
35
|
+
**Saga → Freya**
|
|
36
|
+
Trigger: Product Brief and Trigger Map are complete and aligned.
|
|
37
|
+
Action: Saga runs `/wrap freya`. Freya picks up with `/freya progress/freya.md`.
|
|
38
|
+
Never: Saga does not write scenarios or design anything before handing off.
|
|
39
|
+
|
|
40
|
+
**Freya → Mimir**
|
|
41
|
+
Trigger: Work Order written, page spec complete, ready for implementation.
|
|
42
|
+
Action: Freya runs `/wrap mimir` or `/handoff mimir`. Mimir picks up the Work Order.
|
|
43
|
+
Never: Freya does not write code. Freya does not write PRDs.
|
|
44
|
+
|
|
45
|
+
**Mimir → Freya**
|
|
46
|
+
Trigger: Implementation complete, browser-verified. Or: blocked on design decision.
|
|
47
|
+
Action: Mimir runs `/handoff freya` with the specific question or completion note.
|
|
48
|
+
Never: Mimir does not modify specs or Work Orders. He implements what they say.
|
|
49
|
+
|
|
50
|
+
---
|
|
51
|
+
|
|
52
|
+
## Quality Rules (all agents)
|
|
53
|
+
|
|
54
|
+
- **One task at a time.** Complete and verify before moving on.
|
|
55
|
+
- **No plausible-looking wrong output.** If you cannot follow the template exactly, stop and say so. Wrong-but-plausible output breaks every downstream phase.
|
|
56
|
+
- **Read the template before writing.** Every artifact has a template. Load it, follow it.
|
|
57
|
+
- **Decisions are documented.** Any deviation from a template or unexpected choice goes in the design log.
|
|
58
|
+
|
|
59
|
+
---
|
|
60
|
+
|
|
61
|
+
## Out-of-Scope (explicit)
|
|
62
|
+
|
|
63
|
+
Things no WDS agent does, ever:
|
|
64
|
+
|
|
65
|
+
- Produce output in a custom format when a WDS template exists
|
|
66
|
+
- Write to `progress/` without going through the memory tool
|
|
67
|
+
- Commit without a meaningful message (conventional commits required)
|
|
68
|
+
- Force push, skip hooks, or bypass git safety
|
|
69
|
+
- Start a new phase without the prerequisite documents
|
|
70
|
+
- Write code without a PRD (Mimir only)
|
|
71
|
+
- Mark a requirement done without browser verification (Mimir only)
|
|
72
|
+
- Design without a Trigger Map (Freya only)
|