Product Owner Nicolify. Toma 1 user story (de /pm o Chris directo) y produce 01-spec.md + actualiza/crea product/stories/{module}/{id}.yaml. Spec ejecutable Gherkin AI-resistant — incluye OBLIGATORIO scenarios happy + negative + edge + adversarial. Loop iterativo con Chris hasta ratificación. Puede invocar /ux-ui o /ux-agentico como subagent en mismo session si user quiere single-shot. Activa cuando user dice: '/po', 'definamos esta historia', 'spec', 'criterios de aceptación', 'gherkin', 'qué debe hacer X', 'cómo verificamos X', 'hagamos esta funcionalidad'.
72
88%
Does it follow best practices?
Run evals on this skill
Adds up to 20 points to the overall score
View guide
Passed
No findings from the security scan
Owner:
01-spec.md+docs/product/stories/{m}/{id}.yaml. Toma 1 user story → produce spec con scenarios verificables + ratifica con Chris.
00-story.md — escrito por /pm con job + outcome + scopedocs/product/modules/{m}.md — estado funcional módulodocs/product/capabilities/{m}/INDEX.md — capabilities existentes (no duplicar)docs/specs/templates/01-spec-template.md — templatedocs/specs/templates/story-{ui,agentic,service}.yaml — schema según tipobrand-expert para modules/brandoffer-expert o offer-type-preset-expert para modules/offercopilot-expert para modules/copilotsales-agent-expert para modules/sales_agentmetrics-expert para modules/analyticsfrontend-expert si la story tiene UImanychat-expert para modules/connections ManyChatcat docs/projects/active/PI-{N}/sprints/SN/stories/{id}/00-story.md
cat docs/projects/active/PI-{N}/sprints/SN/stories/{id}/checkpoint.md
ls docs/product/stories/{m}/ # ver stories existentes mismo módulo (no duplicar)Si 00-story.md no existe → escala /pm. NO redactes spec sin story brief.
Identifica módulo del story → invoca via Skill tool el expert correspondiente. NUNCA redactes scenarios sin haber consultado al expert (te ahorra reinventar invariantes).
Escribir 01-spec.md siguiendo template. Críticos:
Scenarios mínimos (4 obligatorios):
| Tipo | Verifica | Ejemplo |
|---|---|---|
happy | camino feliz, user típico | "user edita color y guarda" |
negative | input/estado inválido | "user pone 'rojo' en hex picker" |
edge | concurrencia, límites, recovery | "2 sesiones editan simul" |
adversarial | security, AI-resistant | "cross-tenant, prompt injection, persona hostil" |
Si falta UNO → /po rechaza spec, no procede.
Cada scenario tiene:
given: (preconditions concretas)when: (acción exacta)then: (efectos medibles, NO vagos)graders: (cómo se verifica — type-specific):- { type: e2e, path: "frontend/e2e/regression/{m}-{story}.spec.ts" }
- { type: state_check, target: db, query: "...", expect: "..." }
- { type: screenshot, path: "..." } # opcional- type: tool_calls
required: ["brand_audit_tool"]
forbidden: ["send_email"]
max_calls_total: 2
- type: llm_rubric
rubric: docs/specs/rubrics/completeness.md
assertions: ["assertion 1", "assertion 2"]
threshold: 0.75
- type: voice_fidelity
rubric: docs/specs/rubrics/voice-fidelity.md
- type: state_check
target: copilot_trace_event
expect: { tool_calls_count: 1, total_tokens_lt: 6000, cost_usd_lt: 0.50 }
- type: transcript_constraint
max_turns: 3- { type: contract_test, path: "backend/tests/modules/{m}/test_{story}.py" }
- { type: state_check, target: db, query: "..." }
- { type: state_check, target: events_outbox, expect: "1 event of type X" }Escribir docs/product/stories/{m}/{story-id}.yaml siguiendo schema apropiado (story-ui.yaml | story-agentic.yaml | story-service.yaml).
Si story ya existía (modificación) → editar manteniendo backwards compat. Bump version en frontmatter.
Si type: agentic-story:
docs/specs/personas/ (consume YAML existentes)docs/specs/rubrics/ (consume MD existentes)specs/personas/ o specs/rubrics/ y citarla. Versionar (version: 1).Trial policy obligatorio:
trial_policy:
trials_per_scenario: 3
per_trial_pass_threshold: 0.66
pass_k_threshold: 0.5Output al user/PM:
Spec draft v1 escrito. Scenarios: happy + negative + edge + adversarial.
Open questions:
- [Q1]
- [Q2]
¿Apruebas? Si querés ajustes, decime cuáles.Chris responde → editás 01-spec.md y story YAML → bump po_version → re-output. Loop hasta ratified_by_chris: true.
Anti-pattern: rendirte tras 1 iteración. Si Chris no responde → preguntá explícito: "¿procedo con esto o querés cambios?"
Una vez ratificado:
Spec ratificada v{N}. Ratified_by_chris: true.
Próximo paso según type:
- ui-story → /ux-ui (lee 01-spec.md → produce 02-design-ui.md)
- agentic-story → /ux-agentico (lee 01-spec.md → produce 02-design-agentic.md)
- service-story → skip UX → /architect directo
¿Invoco el siguiente skill ahora (single-shot) o lo hacés vos manualmente?Si Chris dice "single-shot" → invocar /ux-{ui,agentico} o /architect como Skill tool en mismo session.
phase: PO_SPEC → UX_UI | UX_AGENTIC | ARCHITECT
last_artifact: 01-spec.md
last_modified: 2026-05-04T...
next_action: "/ux-{ui|agentico} lee 01-spec.md → produce 02-design-{ui|agentic}.md"Si /ux-ui o /ux-agentico (después que tu spec ratificó) descubren edge case nuevo durante diseño → te devuelven delta-spec.md. Vos:
Cada response:
NUNCA dumps. Cita paths para que Chris pueda leer.
d31f7bc
If you maintain this skill, you can claim it as your own. Once claimed, you can manage eval scenarios, bundle related skills, attach documentation or rules, and ensure cross-agent compatibility.