Skip to content

Commit 7c0fa6e

Browse files
authored
Merge pull request #4 from gtrabanco/feat/orchestration-contract
feat(skills): machine envelope + workflow-status — programmatic orchestration
2 parents 748d9bc + 8eefc1c commit 7c0fa6e

31 files changed

Lines changed: 2017 additions & 75 deletions

File tree

Lines changed: 82 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,82 @@
1+
name: Publish schema package
2+
3+
# Publishes @gtrabanco/agentic-workflow-schema to npm whenever a push to main
4+
# touches the package AND its package.json version is newer than the one on
5+
# the registry (same-version pushes are a safe no-op). Also runnable by hand
6+
# (workflow_dispatch) — e.g. right after a merge, or to retry a failed run.
7+
#
8+
# Bun installs deps and runs the test gate (bun.lock is the source of truth —
9+
# there is no package-lock.json); npm still does the actual `publish` step,
10+
# since Trusted Publishing + --provenance are npm-CLI-specific tooling Bun
11+
# doesn't replicate.
12+
#
13+
# Auth: npm Trusted Publishing (OIDC) — no NPM_TOKEN secret at all. npm
14+
# exchanges this job's GitHub OIDC token (the id-token: write permission
15+
# below) for a short-lived publish token at publish time, scoped to exactly
16+
# this repo + workflow file.
17+
#
18+
# One-time setup (manual, by the repo owner — CI cannot do this for you):
19+
# 1. First publish is manual (npm requires it for a brand-new package) —
20+
# already done for 1.0.0.
21+
# 2. npmjs.com → the package's page → Settings → Trusted Publisher →
22+
# GitHub Actions → Organization or user: gtrabanco → Repository:
23+
# agentic-workflow → Workflow filename: publish-schema.yml → (leave
24+
# Environment name blank unless this job later runs under one) → Add.
25+
# That's it — no secret to create or rotate. Requires npm CLI >= 11.5.1,
26+
# which the "Install npm" step below ensures regardless of what Node 22
27+
# bundles.
28+
29+
on:
30+
push:
31+
branches: [main]
32+
paths:
33+
- "packages/agentic-workflow-schema/**"
34+
- ".github/workflows/publish-schema.yml"
35+
workflow_dispatch: {}
36+
37+
permissions:
38+
contents: read
39+
id-token: write # required for npm Trusted Publishing + --provenance
40+
41+
jobs:
42+
publish:
43+
runs-on: ubuntu-latest
44+
defaults:
45+
run:
46+
working-directory: packages/agentic-workflow-schema
47+
steps:
48+
- uses: actions/checkout@v4
49+
50+
- uses: oven-sh/setup-bun@v2
51+
with:
52+
bun-version: latest
53+
54+
- uses: actions/setup-node@v5
55+
with:
56+
node-version: 24
57+
registry-url: "https://registry.npmjs.org"
58+
59+
- name: Ensure npm supports Trusted Publishing (>= 11.5.1)
60+
run: npm install -g npm@latest
61+
62+
- name: Install (bun, frozen lockfile)
63+
run: bun install --frozen-lockfile
64+
65+
- name: Build + test (the gate — never publish red)
66+
run: bun run test
67+
68+
- name: Skip when the version is already published
69+
id: version
70+
run: |
71+
LOCAL=$(node -p "require('./package.json').version")
72+
PUBLISHED=$(npm view "$(node -p "require('./package.json').name")" version 2>/dev/null || echo "none")
73+
echo "local=$LOCAL published=$PUBLISHED"
74+
if [ "$LOCAL" = "$PUBLISHED" ]; then
75+
echo "publish=false" >> "$GITHUB_OUTPUT"
76+
else
77+
echo "publish=true" >> "$GITHUB_OUTPUT"
78+
fi
79+
80+
- name: Publish to npm (Trusted Publishing — no token)
81+
if: steps.version.outputs.publish == 'true'
82+
run: npm publish --access public --provenance

CHANGELOG.es.md

Lines changed: 65 additions & 0 deletions
Large diffs are not rendered by default.

CHANGELOG.md

Lines changed: 61 additions & 0 deletions
Large diffs are not rendered by default.

CLAUDE.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -200,6 +200,10 @@ This repo has no application build. "Green" means:
200200
- The `skills` CLI discovers every skill: `npx skills add . --list` lists them all.
201201
- Markdown is well-formed; cross-references between docs resolve.
202202
- No stack/real-project references leaked into the skills or shared docs.
203+
- If `packages/agentic-workflow-schema/` was touched: `npm test` passes there,
204+
and any change to the envelope schema in
205+
`skills/orchestration-envelope/SKILL.md` is mirrored in the package (types +
206+
`envelope.schema.json` + version bump) — same PR, always.
203207

204208
---
205209

README.es.md

Lines changed: 24 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,7 @@ agente** que lea skills — Claude Code, Cursor, Codex, OpenCode, Cline y
5454
## Qué incluye
5555

5656
```
57-
skills/ las 25 skills (12 de cara al usuario + 13 internas) — la fuente instalable
57+
skills/ las 27 skills (13 de cara al usuario + 14 internas) — la fuente instalable
5858
.claude/skills symlink → ../skills, para que este repo las use en Claude Code
5959
template/ el scaffold de documentación exportable (el sustrato que leen las skills)
6060
docs/workflow/ el tutorial completo (flujo de feature, de issue, referencia, replicación)
@@ -71,9 +71,9 @@ plantillas de GitHub). Genera la forma de trabajo de un proyecto nuevo con
7171

7272
## Las skills
7373

74-
**12 skills de cara al usuario** (una entrada de menú cada una) + **13 internas**
74+
**13 skills de cara al usuario** (una entrada de menú cada una) + **14 internas**
7575
que se componen por ti: los tres pasos de planificación del router `plan-feature`,
76-
el motor de `review-change`, y el **pack de revisión interno propio de 9 skills**
76+
el motor de `review-change`, el contrato `orchestration-envelope`, y el **pack de revisión interno propio de 9 skills**
7777
(`review-code`, `review-security`, `review-verify`, `review-debt`,
7878
`review-design`, `review-a11y`, `review-brand`, `review-perf`, `review-seo`) —
7979
así que **nunca se requiere una skill de revisión externa**, en ningún agente y
@@ -108,7 +108,7 @@ con ningún modelo. Un único camino disciplinado:
108108
| Skill | Alcance | Qué hace |
109109
| --------------- | --------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
110110
| `review-change` | el **cambio** | Ejecuta solo las revisiones que **aplican a tu plataforma** (código, seguridad, verify, diseño, a11y, marca, rendimiento, SEO) y clasifica → una tabla de decisión + una checklist explícita de verificación manual; un árbol sucio o commits sin push en la rama del PR son hallazgos `workflow` fix-now |
111-
| `audit-pr` | el **PR** | Gate de fusión: criterios de aceptación cumplidos, todas las fases hechas, docs/tests/CI en verde, `Closes #N`, ejes de revisión limpios → **listo para fusionar o una lista de bloqueantes**, siempre con la URL completa del PR. Auto-merge opt-in: con una política documentada fusiona PRs MERGE-READY tras un checklist de limpieza fail-closed (algo pendiente → push, esperar CI, re-auditar) |
111+
| `audit-pr` | el **PR** | Gate de fusión: criterios de aceptación cumplidos, todas las fases hechas, docs/tests/CI en verde, `Closes #N`, ejes de revisión limpios → **listo para fusionar o una lista de bloqueantes**, siempre con la URL completa del PR; con MERGE-READY publica un comentario datado y ligado al SHA en el propio PR. Auto-merge opt-in: con una política documentada fusiona PRs MERGE-READY tras un checklist de limpieza fail-closed (algo pendiente → push, esperar CI, re-auditar) |
112112
| `product-audit` | el **producto** | Chequeo de salud periódico de espectro completo; mina las docs de features → propone issues + altas/bajas en el roadmap (**nunca arregla automáticamente**) |
113113
| `audit-docs` | las **docs** | Audita docs ↔ roadmap ↔ código ↔ índice de fixes en busca de desviaciones |
114114

@@ -130,6 +130,7 @@ con ningún modelo. Un único camino disciplinado:
130130
| Skill | Qué hace |
131131
| ------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
132132
| `log-session` | Añade una entrada estructurada a `docs/LOGS.md` — qué hizo la sesión, archivos tocados, decisiones + _por qué_, y el siguiente paso — para que tú (o cualquiera) retome en frío. Ejecútala antes de `/clear` o de cerrar. El `template/` además trae **hooks gratuitos y opt-in** que añaden una entrada mecánica automáticamente en cada `/clear`/salida y pueden reinyectar la última entrada al arrancar. |
133+
| `workflow-status` | **Sensor de solo lectura para orquestación programática.** Calcula el estado completo del proyecto — cada feature/fix con su cierre de dependencias transitivo (cumplido/incumplido), qué es arrancable ahora mismo y en qué orden de construcción, PRs abiertas + estado de auditoría, fixes pendientes y hallazgos a la espera de triaje — y lo emite como un envelope máquina JSON fijo. La pieza que un driver externo llama entre pasos (ver [Orquestación programática](#orquestación-programática)). Nunca edita nada. |
133134

134135
### Mantenimiento del repo
135136

@@ -141,7 +142,7 @@ con ningún modelo. Un único camino disciplinado:
141142

142143
| Skill | Qué hace |
143144
| -------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
144-
| `ship-roadmap` | **Construye la app entera desde el roadmap.** Una entrevista inicial (producto, features, stack, arquitectura — recomendada _proporcionalmente_, nunca por defecto a un patrón con nombre —, calidad, ops, autonomía, presupuesto), funda el proyecto si hace falta, crea o adopta el roadmap completo, y un bucle con `/loop` lo entrega feature a feature a través de las skills de arriba — **sin más preguntas**. Tras la última feature sigue: un **barrido de issues** inventaría las issues abiertas más el residuo documentado del run (known-issues, trade-offs, hallazgos pospuestos), lo triagea todo y entrega las fix-now por las mismas etapas. Por defecto: abre PRs y tú fusionas; `--fullauto` fusiona los PRs MERGE-READY bajo suelos de seguridad innegociables. Termina con un informe final: issues a abrir, propuestas de features descubiertas, checks manuales, cadencia de product-audit. |
145+
| `ship-roadmap` | **Construye la app entera desde el roadmap.** Una entrevista inicial (producto, features, stack, arquitectura — recomendada _proporcionalmente_, nunca por defecto a un patrón con nombre —, calidad, ops, autonomía, presupuesto), funda el proyecto si hace falta, crea o adopta el roadmap completo, y un bucle disparado por un driver (`/loop` en Claude Code, un orquestador externo o re-invocación manual — cada iteración dice por qué termina) lo entrega feature a feature a través de las skills de arriba — **sin más preguntas**. Tras la última feature sigue: un **barrido de issues** inventaría las issues abiertas más el residuo documentado del run (known-issues, trade-offs, hallazgos pospuestos), lo triagea todo y entrega las fix-now por las mismas etapas. Por defecto: abre PRs y tú fusionas; `--fullauto` fusiona los PRs MERGE-READY bajo suelos de seguridad innegociables. Termina con un informe final: issues a abrir, propuestas de features descubiertas, checks manuales, cadencia de product-audit. |
145146

146147
Cómo el autopilot ejecuta el flujo — una entrevista al entrar, PRs revisadas al
147148
salir, y tú solo apareces para fusionar (ámbar):
@@ -214,6 +215,7 @@ una conveniencia de la rama `#claude`.
214215
| `audit-docs` | Sonnet | medio | comprobaciones cruzadas mayormente mecánicas (Opus para auditorías profundas) |
215216
| `triage-issue` | Opus | alto | verificar disparadores contra el código; decisión con criterio |
216217
| `log-session` | Sonnet | medio | resumen estructurado, no criterio — deliberadamente el tier barato, nunca Opus (los hooks de `.claude/` hacen la captura mecánica gratis) |
218+
| `workflow-status`| Sonnet | medio | lectura mecánica de estado + cálculo de cierres de dependencias — un sensor, nunca juicio |
217219
| `ship-roadmap` | Opus | alto | el conductor del autopilot: compone en su turno las skills de planificación/revisión/auditoría (mismo tier) y delega la implementación a subagentes Sonnet — el juicio se mantiene fuerte, los tokens masivos salen baratos |
218220

219221
> Las 13 skills internas no se seleccionan directamente. Como se componen **dentro
@@ -323,6 +325,23 @@ tengas**. Espera que los modelos más débiles sigan el workflow correctamente
323325
las skills están escritas como checklists y formatos de salida fijos — pero con
324326
un juicio menos profundo: la disciplina se mantiene, el techo se mueve.
325327

328+
## Orquestación programática
329+
330+
Toda skill de cara al usuario termina con un **envelope máquina** — un bloque
331+
JSON fijo y cercado (state, unit, phase, PR, findings, blockers, orden de
332+
construcción de dependencias, siguiente comando recomendado + pista de tier de
333+
modelo). Un driver externo — un bucle de shell, CI, tu propio programa — lo
334+
parsea e invoca la siguiente skill con el modelo que tú elijas en cada paso.
335+
Es la sustitución neutral de proveedor del `/loop` y los subagentes de Claude
336+
Code: el mismo bucle que `ship-roadmap` ejecuta dentro del agente, alojado
337+
fuera de cualquier agente. `workflow-status` es el sensor de solo lectura que
338+
reporta el árbol de dependencias completo y qué es arrancable. Protocolo,
339+
máquina de estados y esqueleto de driver:
340+
**[`docs/workflow/ORCHESTRATION.md`](docs/workflow/ORCHESTRATION.md)**. Para
341+
drivers JS/TS, **[`@gtrabanco/agentic-workflow-schema`](packages/agentic-workflow-schema/)**
342+
(npm) trae los tipos, el JSON Schema y `parseEnvelope()` implementando el
343+
contrato de parseo — publicado automáticamente por CI en cada cambio del esquema.
344+
326345
## Cómo usarlas
327346

328347
Tutorial completo en **[`docs/workflow/`](docs/workflow/README.md)**. En resumen:

0 commit comments

Comments
 (0)