Releases: Snakeblack/ospec-workflow
Releases · Snakeblack/ospec-workflow
Release list
v2.21.0
Añadido
- Lint de contratos unificado (cierre del Bloque 1 del roadmap): nuevo
scripts/lib/contract-lint.js(registro puro de checkers, sin cortocircuito) con tres checkers —i1-manifest(nuevo: cruza el manifiestoruntime_capabilities:del frontmatter de los 14 SKILL.md de fase SDD contra lastools:reales del agente vinculado, emitiendo un offender explícito si el agente vinculado a un phase skill no existe en disco),j1-commands-agents(extracción descripts/commands-agents-contract.test.jspreservando sus guards rel-1/rel-2) ei3-budget-constant(extracción/generalización de la coherencia hooks.json↔constantes de lock JS+Go). Sin vía de invocación nueva: el arnés queda recogido por el glob existente descripts/check.js(pre-commit + CI ya cableados). - Manifiesto
runtime_capabilities:retrofitteado en los 14 SKILL.md de fase SDD (obligatorio para ese tier; utility/stack/_sharedquedan opcionales). - Categoría de evidencia
static-linten la taxonomía desdd-verify, distinta deruntime-test. - Nuevo dominio baseline
openspec/specs/contract-lint/spec.md.
Full Changelog: v2.20.3...v2.21.0
v2.20.3
Fixed
- Coerción boolean-like residual en
matchConditions(I2): nueva función pura exportadadetectResidualBooleanStrings(conditions)enroute-dispatcher.jspara detectar valores"true"/"false"string que no pasaron por la coerción del parser (p.ej. tablas de routing construidas programáticamente en vez de parseadas desde YAML), evitando que condicionesbugfix/refactor/hotfixcaigan silenciosamente al routestandard. Test de regresión end-to-end contra la tabla real deopenspec/config.yaml. - Desalineación entre el presupuesto de timeout del hook
SessionStarty elstaleMsdel lock (I3):staleMs/staleLockAgebajado de 10s a 5s en ambos runtimes (ospec-state.jsyinternal/store/store.go, con constantes nombradas), yhooks/hooks.jsonahora declaratimeout: 5explícito paraSessionStart(antes era el único hook sin timeout declarado). Nuevo test de coherencia hooks.json↔constantes de lock en JS y Go.
Changed
- Sincronizados
openspec/specs/routing/spec.md,openspec/specs/hooks/spec.mdyopenspec/specs/hooks-runtime/spec.mdcon el comportamiento anterior.
Cambio guiado por SDD (ruta lite) con TDD estricto. Verificación: PASS WITH WARNINGS (19/19 tareas, 1038/1038 tests JS + todos los paquetes Go verdes). Change archivado en openspec/changes/archive/2026-07-07-route-coercion-lock-budget/.
v2.20.2
Added
- Soporte de diagramas Mermaid (harness/sdd-document): Añadidas las dependencias
astro-mermaidymermaidal scaffold de Starlight de la Opción D, permitiendo renderizar diagramas Mermaid de forma nativa en la documentación generada. Cambio verificado con compilación local exitosa.
Fixed
- Error de parseo got 'PS' (openwiki/overview.md): Corregido error de sintaxis en el diagrama de arquitectura envolviendo las etiquetas con caracteres especiales (paréntesis, comas, barras) en comillas dobles.
v2.20.1 — Enlaces wiki-internos como slugs de Starlight
Fixed
- Enlaces wiki-internos rotos en el sitio Starlight (Opción D):
sync-openwiki.mjscopiaba los enlaces.mdtal cual, pero Starlight sirve las páginas como slugs sin extensión, así que cada enlace interno (architecture/overview.md) devolvía 404. AhorarewriteLinkslos reescribe a URLs de slug locales (/architecture/overview/), resolviendo los relativos contra el directorio de la página contenedora, preservando fragmentos#anclay dejando intactos los enlaces externos y los assets no-.md. Además, un enlace bare anclado a la raíz del wiki (hooks-runtime/lifecycle.mdescrito dentro desecurity/guardrails.md) ya no se anida bajo el directorio de la página: el set de páginas fuente reales desambigua — si el candidato relativo a la página no existe pero el anclado a raíz sí, gana la raíz; si ambos existen, se mantiene la semántica markdown estándar. Tests: +7 casos runtime ensync-openwiki.test.js.
Changed
- Instancia local
web-doc/: sincronizada con el script corregido y con un logo SVG de pulpo (src/assets/octopus-logo.svg) enganchado comologode Starlight a la izquierda del título del sitio. El wikiopenwiki/se regeneró en español (modo init, Opción D).
v2.20.0
Added
- Identidad del sitio y navegación ordenada en el template Opción D (REQ-sdd-document-019, REQ-016 ampliado):
astro.config.mjsderiva el título del sitio delnamedelpackage.jsondel repo padre (Title-Case por segmento, con fallback al nombre del directorio) en vez del placeholder "Project Documentation";sync-openwiki.mjsrecorta el H1 inicial del cuerpo transformado (Starlight ya renderiza eltitledel frontmatter como H1, que se veía duplicado en cada página) y emitesrc/sidebar.generated.json— quickstart siempre primero como enlace superior y un grupo por subdirectorio del wiki, ordenados por primera mención en los enlaces del propio quickstart (alfabético para los no mencionados) — queastro.config.mjsconsume con fallback al sidebar autogenerado si falta. Tests: +3 casos runtime ensync-openwiki.test.jsy +3 anclas enstarlight-web-doc-contract.test.js.
Fixed
- Falsos positivos del chequeo de atribución AI con palabras en español: el patrón de
commit-msg-hook.jsypre-tool-use.jsmatcheaba nombres de vendor como subcadena, con lo que «coherente», «coherencia», «bombardeo» o «llaman» bloqueaban commits legítimos. Los nombres de vendor quedan anclados a límites de palabra (\b), con tests de regresión en ambos sentidos y el patrón documentado enrules/no-model-attribution.instructions.mdactualizado.
v2.19.1
Fixed
- Template Opción D (
web-doc/): el scaffold generado crasheaba en runtime (changefix-web-doc-scaffold-paths, ruta lite con Strict TDD):content.config.tsvivía en la raíz del template pero Astro 5 solo lee la config de colecciones desdesrc/content.config.ts, con lo que la coleccióndocscargaba sin el schema de Starlight y toda petición reventaba conCannot read properties of undefined (reading 'hidden')enutils/navigation.ts(incluida la ruta 404). Además el import@astrojs/starlight/loader(singular) no existe en el paquete publicado — solo exporta./loaders. Se mueve el archivo asrc/, se corrige el import y se añaderedirects: { "/": "/quickstart" }enastro.config.mjspara que la raíz del sitio no dé 404. Sincronizadosoption-d-starlight.md§3, el baseline REQ-sdd-document-014 (delta MODIFIED archivado) y el test de contratoscripts/starlight-web-doc-contract.test.js(11 anclas), con ciclo RED→GREEN verificado en runtime.
v2.19.0 — Opción D: OpenWiki + Starlight web en sdd-document
Added
- Opción D "OpenWiki + Starlight web" en
sdd-document(changestarlight-web-doc, ciclo SDD completo con gate 4R remediado): nueva opción de scope en el gate batcheado de idioma+scope que generaweb-doc/en la raíz del repo objetivo como proyecto Starlight cascarón — scaffold estático copiado verbatim desdeskills/sdd-document/assets/web-doc-template/(package.json, astro.config.mjs, content.config.ts, tsconfig.json, CSS custom), nunca ejecutanpm create astroni instala dependencias (REQ-sdd-document-014).openwiki/permanece como única fuente de verdad: el scriptweb-doc/scripts/sync-openwiki.mjs(Node ESM zero-dependency, cableado enpredev/prebuild) transforma el wiki asrc/content/docs/con inyección de frontmattertitle(REQ-016), reescritura de enlaces fuente a la URL del remoteoriginsobre la rama por defecto (REQ-017) y paridad estricta 1:1 con poda de huérfanos (REQ-018). Sync incremental por mtime/hash con cache local git-ignored (REQ-015). Sandbox de escritura dual modelado como SET{openwiki/, web-doc/}con inventario post-run J5 del orquestador extendido a multi-directorio (REQ-sdd-document-002/006/011, REQ-agents-006). Degradaciones seguras endurecidas por el gate 4R: guard anti-poda-destructiva cuandoopenwiki/falta o está vacío, passthrough de frontmatter YAML anidado sin pérdida, try/catch por página/cache/poda con warnings (nunca tumba el build del usuario final) y fallbacks logueados. Procedimiento del ejecutor enskills/sdd-document/references/option-d-starlight.md; 3 ADRs promovidos adocs/adr/. Tests:scripts/sync-openwiki.test.js(18 casos runtime sobre proyecto materializado en temp dir) yscripts/starlight-web-doc-contract.test.js(9 anclas estáticas de contrato). - Skill
stack-starlight: base de conocimiento del framework Starlight (Astro) — setup, configuración, sidebar, frontmatter, componentes, theming e i18n — con 4 documentos de referencia; fuente técnica de la plantilla de la Opción D.
v2.18.0
- Harden de archivado (REQ-agents-008): Finalización del archivado (borrado de origen) exclusiva del orquestador con validación previa de inventario recursivo.
- Baseline fingerprints (REQ-agents-009): Cálculo y registro automático pos-spec de baseline hashes en
state.yamlde forma standing por el orquestador. - Actualización de documentación (OpenWiki): Incorporación de la documentación técnica de OpenWiki (quickstart, runtime, seguridad, etc.).
v2.17.0
[2.17.0] - 2026-07-05
Added
- Cableado del orquestador para
sdd-document(J1+J4+J5): el orquestador ahora enruta/sdd-documentde punta a punta. Wiring mínimo inline (allowlist deagents:, bullet en el índice de comandos y fila en la Circumstantial Handler Pointer Table — bajo el guard de 500 líneas) con el protocolo completo enskills/_shared/route-document.md: gate único batcheado de idioma+alcance (J4) con persistencia en approval ledger (gate: document-init) y.last-update.json(incluyedoc_language/scope_choice), pre-pregunta keep/change en modo update con regla de precedencia entre candidatos, resolución autoritativa del output dir por el orquestador (A→openwiki/, B→docs/wiki/, C→custom con rechazo de paths fuera del repo antes de delegar), y verificación de sandbox post-run propiedad del orquestador (J5) scoped porgit status, con gate de halt abort/acknowledge y política de fallo inconcluso cuandogit statusfalla. Nuevo test de contratoscripts/commands-agents-contract.test.jsque parsea la tabla §3.2 Command Roster del spec deagents(flechas→y->), falla ante filas del roster faltantes o comandos sin fila, y asserta explícitamente la presencia desdd-document.prompt.md. Gate 4R con remediación completa (1 CRITICAL + 6 WARNING + 2 SUGGESTION) y re-verificación PASS. Ciclo SDD completo: deltas deagents(3 ADDED) ysdd-document(3 MODIFIED) sincronizadas al baseline y change archivado enopenspec/changes/archive/2026-07-05-wire-sdd-document/.
v2.16.0 — Agente documentador sdd-document
Added
- Agente documentador
sdd-document: nuevo executor (agents/sdd-document.agent.md+skills/sdd-document/SKILL.md+ comando/sdd-document) que compila arquitectura, specs y estado del repo en un wiki Markdown local. Gate interactivo de alcance al lanzar: Opción A — wiki técnico completo estilo OpenWiki (quickstart.md+openwiki/con subdirectorios temáticos y source maps), Opción B — estado SDD y specs bajodocs/wiki/, Opción C — ruta custom validada. Reglas de sandbox de escritura (paths relativos al output dir, sin escapes; excepciones declaradas para/AGENTS.mdy/CLAUDE.mdcomo archivos de instrucción raíz), registro enmodels.yaml(tier default) y suite de contratoscripts/sdd-document.test.js. Ciclo SDD completo (dogfooding): baseline nuevoopenspec/specs/sdd-document/spec.md(13 REQs), delta deagentssincronizada y change archivado enopenspec/changes/archive/2026-07-05-add-documenter-agent/. Nota: el cableado del orquestador (roster/route) llega en el change siguiente (J1).
Full Changelog: v2.15.0...v2.16.0