SpecTrace.Abstractions
0.4.0-preview.1
See the version list below for details.
dotnet add package SpecTrace.Abstractions --version 0.4.0-preview.1
NuGet\Install-Package SpecTrace.Abstractions -Version 0.4.0-preview.1
<PackageReference Include="SpecTrace.Abstractions" Version="0.4.0-preview.1" />
<PackageVersion Include="SpecTrace.Abstractions" Version="0.4.0-preview.1" />
<PackageReference Include="SpecTrace.Abstractions" />
paket add SpecTrace.Abstractions --version 0.4.0-preview.1
#r "nuget: SpecTrace.Abstractions, 0.4.0-preview.1"
#:package SpecTrace.Abstractions@0.4.0-preview.1
#addin nuget:?package=SpecTrace.Abstractions&version=0.4.0-preview.1&prerelease
#tool nuget:?package=SpecTrace.Abstractions&version=0.4.0-preview.1&prerelease
SpecTrace
Trazabilidad Spec-Driven Development para .NET. Tus specs en Markdown se convierten en un catálogo tipado de requisitos, y el compilador de C# avisa de lo que está sin implementar o sin test.
specs/orders.spec.md(28,1): warning ST0003: El requisito 'ORD-003' (Aplicar cupón de descuento)
está approved pero ningún tipo o miembro tiene [Implements("ORD-003")]
Cómo funciona
Escribes (o generas con Spec Kit / OpenSpec) specs
*.spec.mdcon requisitos identificados:## ORD-001: Crear pedido Status: approved When the customer submits a cart with at least one line, the system shall create an order in state Pending. - AC-1: Given a cart with 2 lines, when it is submitted, then an order with 2 lines is created. - AC-2: Given an empty cart, when it is submitted, then the request is rejected.El generador crea
Requirements.ORD_001yAcceptanceCriteria.ORD_001.AC_1.Marcas código y tests:
[Implements(Requirements.ORD_001)] public Order Create(IReadOnlyList<OrderLine> cart) { ... } [Fact] [Verifies(Requirements.ORD_001, AcceptanceCriteria.ORD_001.AC_2)] public void Create_with_empty_cart_is_rejected() { ... }dotnet buildcomprueba la trazabilidad;dotnet spectrace reportgenera la matriz completa.
Paquetes
| Paquete | Qué contiene |
|---|---|
SpecTrace |
Analizador + generador Roslyn, code fixes para el IDE y props/targets de MSBuild. Instala SpecTrace.Abstractions. |
SpecTrace.Abstractions |
Atributos [Implements], [Verifies]. |
SpecTrace.Tool |
CLI dotnet spectrace: report, context, scaffold-tests, import, mcp, init. |
Empezar
dotnet new tool-manifest # herramienta local del repo: se invoca como "dotnet spectrace"
dotnet tool install SpecTrace.Tool --prerelease
dotnet spectrace init # spectrace.json, specs/example.spec.md, la skill y .mcp.json
dotnet add src/MiApp package SpecTrace
dotnet add tests/MiApp.Tests package SpecTrace
dotnet build
Si prefieres instalarla global (dotnet tool install -g SpecTrace.Tool --prerelease), el comando es spectrace
en vez de dotnet spectrace, también en .mcp.json.
Configuración por MSBuild (opcional): SpecTraceSpecsDir, SpecTraceNamespace, SpecTraceRole (Implementation | Tests).
Severidades con un .globalconfig (is_global = true), no .editorconfig, porque los avisos de cobertura se reportan sobre los .md.
Diagnósticos
| ID | Severidad | Qué significa |
|---|---|---|
| ST0001 | Error | ID de requisito inexistente (code fix: ID parecido) |
| ST0002 | Error | Criterio de aceptación inexistente (code fix: criterio válido) |
| ST0003 | Warning | Requisito aprobado sin implementar |
| ST0004 | Warning | Requisito implementado sin ningún test |
| ST0005 | Info | Criterio de aceptación sin test |
| ST0006 | Warning | Requisito deprecated referenciado (code fix: quitar la referencia) |
| ST0007 | Error | ID duplicado en las specs |
| ST0008 | Warning | Formato de la spec (sin criterios, sin enunciado, estado desconocido) |
| ST0009 | Warning | ID no constante en el atributo |
| ST0010 | Warning | El enunciado cambió después de revisarse: revisa la implementación |
| ST0011 | Warning | Un criterio cambió después de revisarse: revisa sus tests |
Los tests con Skip o [Ignore] no cuentan como cobertura. Cada regla tiene su página en docs/rules.
Cambios en la spec (spectrace.lock)
Una spec que cambia después de implementarse es el caso que más se escapa: el código y los tests siguen en verde, pero
ya no cumplen lo que dice el texto. SpecTrace guarda en spectrace.lock una huella del enunciado y de cada criterio
en el momento en que se revisaron, y avisa cuando cambian:
dotnet spectrace lock # registra la versión actual de todos los requisitos activos
dotnet spectrace lock --requirement ORD-001 # tras revisar un requisito concreto
dotnet spectrace lock --check # en CI: falla si hay cambios sin revisar
| Cambia | Aviso | Dónde | Qué revisar |
|---|---|---|---|
| El enunciado | ST0010 | Proyecto de implementación, en la línea del requisito | Los miembros con [Implements] |
| Un criterio | ST0011 | Proyecto de test, en la línea del criterio | Los tests con [Verifies] de ese criterio |
| Título, estado o espacios | — | — | Nada: no cambian el comportamiento |
| Se añade un criterio | ST0005 si no tiene test | — | Escribir su test |
Haz commit de spectrace.lock junto con la revisión. El fichero tiene una línea por requisito, así que los diffs son
legibles y los conflictos solo afectan al requisito tocado. Registrar una revisión es una decisión humana: la skill y
el servidor MCP piden a los agentes que no ejecuten lock por su cuenta.
En el IDE
Además de los code fixes de la tabla, sobre cualquier [Implements] o [Verifies] (Ctrl+. en Visual Studio y VS Code, Alt+Enter en Rider):
- Usar constantes del catálogo de SpecTrace:
"ORD-001"→Requirements.ORD_001,"AC-1"→AcceptanceCriteria.ORD_001.AC_1. - Generar tests de ORD-001 en MiApp.Tests: crea
Specs/ORD_001_...Tests.csen el proyecto de tests con un test (conSkip) por cada criterio que aún no tiene test.
En las pull requests (GitHub Actions)
permissions:
contents: read
pull-requests: write
jobs:
spectrace:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: amondejar/spec-trace@v0.4
with:
root: . # carpeta con spectrace.json
fail-on-gaps: false # true para bloquear la PR si hay huecos
fail-on-drift: true # bloquear si la spec cambió y nadie revisó el código ni los tests
La Action anota los huecos en los ficheros de la PR, añade el informe al resumen del job y mantiene un comentario
con la matriz completa que se actualiza en cada push. Expone las salidas gaps (requisitos con huecos) y drift (requisitos cuya spec cambió sin revisar).
Para otros sistemas de CI: dotnet spectrace report --fail-on-gaps (Markdown) o --format json.
Para agentes de IA
Skill
dotnet spectrace init instala .claude/skills/spectrace/SKILL.md (formato Agent Skills; con --skills-dir
se coloca donde lo lea tu agente). La skill le dice al agente que parta de la spec, cargue el requisito antes de
implementar y no dé el trabajo por terminado mientras queden diagnósticos ST.
Servidor MCP
dotnet spectrace mcp arranca un servidor Model Context Protocol por stdio, sin dependencias externas:
| Herramienta | Tipo | Qué hace |
|---|---|---|
list_requirements |
lectura | Requisitos con su estado de trazabilidad; only_gaps para ver lo que falta y only_changed para ver specs cambiadas sin revisar |
get_requirement |
lectura | Enunciado, criterios con estado, implementación actual, proyecto y using donde va el código, ficheros relacionados y marcas a usar |
get_code |
lectura | Código relacionado con un requisito, dónde se declara un tipo o un fichero concreto (solo .cs, .csproj y .md de las carpetas de código y specs) |
get_traceability_report |
lectura | Informe completo en Markdown o JSON |
scaffold_tests |
escritura | Esqueletos de tests para los criterios sin test (no sobrescribe) |
propose_requirement |
escritura | Añade un requisito proposed a una spec; una persona lo aprueba después |
Las rutas que recibe quedan confinadas al repositorio y a la carpeta de specs; get_code no lee bin, obj, .git ni ficheros de configuración o secretos. Implementa el handshake initialize
(revisiones 2024-11-05 a 2025-11-25); los clientes que prefieren la revisión 2026-07-28 vuelven a él automáticamente.
dotnet spectrace init crea .mcp.json (Claude Code y otros clientes que leen ese fichero). Para VS Code,
.vscode/mcp.json:
{
"servers": {
"spectrace": { "type": "stdio", "command": "dotnet", "args": ["spectrace", "mcp"] }
}
}
Demo con Microsoft Agent Framework
samples/AgentDemo es un agente de Agent Framework que se conecta a este servidor MCP,
consulta un requisito y propone el código y los tests que faltan. Funciona con cualquier endpoint compatible con
la API de OpenAI (OpenAI, Ollama, LM Studio…).
Importar desde Spec Kit y OpenSpec
dotnet spectrace import speckit specs/ # cada specs/NNN-feature/spec.md → spectrace.spec.md al lado
dotnet spectrace import openspec openspec/ # cada openspec/specs/<cap>/spec.md → specs/<cap>.spec.md
| Origen | Se convierte en |
|---|---|
| Spec Kit: User Story N con sus Acceptance Scenarios | PA1-US-N con un criterio AC-n por escenario (approved) |
Spec Kit: **FR-001** |
PA1-FR-001 en estado proposed (Spec Kit no les da criterios propios) |
Spec Kit: [NEEDS CLARIFICATION] |
El requisito queda proposed con una nota |
OpenSpec: ### Requirement: y sus #### Scenario: |
AUTH-001 con un criterio por escenario |
OpenSpec: openspec/changes/ |
No se importa: son propuestas sin archivar |
El prefijo sale de la carpeta de la feature (001-photo-albums → PA1) o de la capacidad (auth → AUTH), y se
puede fijar con --prefix. Reimportar es seguro: se conservan los IDs (en OpenSpec, por título), los estados que
hayas cambiado y los criterios que añadas a mano a requisitos sin criterios. --dry-run muestra qué haría.
Ejemplos en samples/Import.
Estructura
src/SpecTrace.Abstractions atributos (netstandard2.0)
src/SpecTrace.Analyzers parser de specs, generador, analizador, build/*.props|targets (netstandard2.0)
src/SpecTrace.CodeFixes code fixes y refactorizaciones para el IDE (netstandard2.0)
src/SpecTrace.Package empaqueta analizador + code fixes como el paquete "SpecTrace"
src/SpecTrace.Tool CLI dotnet spectrace y servidor MCP (net8.0, RollForward Major)
tests/SpecTrace.Tests tests del parser, generador, analizador, code fixes, MCP e importadores
docs/rules una página por diagnóstico
action.yml GitHub Action para PRs
samples/Orders ejemplo completo con huecos intencionados (ORD-003 sin implementar, ORD-002 AC-2 sin test)
y un cambio sin revisar (ORD-001 AC-2 cambió después del spectrace.lock)
samples/Import specs de ejemplo de Spec Kit y OpenSpec para probar la importación
samples/AgentDemo agente de Microsoft Agent Framework que usa el servidor MCP
Desarrollo
dotnet test tests/SpecTrace.Tests
dotnet build samples/Orders/tests/Orders.Tests # muestra ST0003, ST0005 y ST0011
dotnet run --project src/SpecTrace.Tool -- report --root samples/Orders
dotnet pack src/SpecTrace.Abstractions -c Release -o artifacts
dotnet pack src/SpecTrace.Package -c Release -o artifacts # paquete "SpecTrace"
dotnet pack src/SpecTrace.Tool -c Release -o artifacts
| Product | Versions Compatible and additional computed target framework versions. |
|---|---|
| .NET | net5.0 was computed. net5.0-windows was computed. net6.0 was computed. net6.0-android was computed. net6.0-ios was computed. net6.0-maccatalyst was computed. net6.0-macos was computed. net6.0-tvos was computed. net6.0-windows was computed. net7.0 was computed. net7.0-android was computed. net7.0-ios was computed. net7.0-maccatalyst was computed. net7.0-macos was computed. net7.0-tvos was computed. net7.0-windows was computed. net8.0 was computed. net8.0-android was computed. net8.0-browser was computed. net8.0-ios was computed. net8.0-maccatalyst was computed. net8.0-macos was computed. net8.0-tvos was computed. net8.0-windows was computed. net9.0 was computed. net9.0-android was computed. net9.0-browser was computed. net9.0-ios was computed. net9.0-maccatalyst was computed. net9.0-macos was computed. net9.0-tvos was computed. net9.0-windows was computed. net10.0 was computed. net10.0-android was computed. net10.0-browser was computed. net10.0-ios was computed. net10.0-maccatalyst was computed. net10.0-macos was computed. net10.0-tvos was computed. net10.0-windows was computed. |
| .NET Core | netcoreapp2.0 was computed. netcoreapp2.1 was computed. netcoreapp2.2 was computed. netcoreapp3.0 was computed. netcoreapp3.1 was computed. |
| .NET Standard | netstandard2.0 is compatible. netstandard2.1 was computed. |
| .NET Framework | net461 was computed. net462 was computed. net463 was computed. net47 was computed. net471 was computed. net472 was computed. net48 was computed. net481 was computed. |
| MonoAndroid | monoandroid was computed. |
| MonoMac | monomac was computed. |
| MonoTouch | monotouch was computed. |
| Tizen | tizen40 was computed. tizen60 was computed. |
| Xamarin.iOS | xamarinios was computed. |
| Xamarin.Mac | xamarinmac was computed. |
| Xamarin.TVOS | xamarintvos was computed. |
| Xamarin.WatchOS | xamarinwatchos was computed. |
-
.NETStandard 2.0
- No dependencies.
NuGet packages (1)
Showing the top 1 NuGet packages that depend on SpecTrace.Abstractions:
| Package | Downloads |
|---|---|
|
SpecTrace
Spec-Driven Development traceability for .NET. Generates a typed requirements catalog from Markdown specs and reports, at build time, requirements that are not implemented, not tested or changed after review. Includes IDE code fixes. Works with Spec Kit, OpenSpec and AI coding agents. |
GitHub repositories
This package is not used by any popular GitHub repositories.
| Version | Downloads | Last Updated |
|---|---|---|
| 0.10.2-preview.1 | 81 | 11/1/2026 |
| 0.10.1-preview.1 | 91 | 10/30/2026 |
| 0.10.0-preview.1 | 77 | 10/30/2026 |
| 0.9.0-preview.1 | 79 | 10/30/2026 |
| 0.8.1-preview.1 | 68 | 10/30/2026 |
| 0.8.0-preview.1 | 67 | 10/29/2026 |
| 0.7.1-preview.1 | 72 | 10/29/2026 |
| 0.7.0-preview.1 | 63 | 10/29/2026 |
| 0.6.0-preview.1 | 61 | 10/29/2026 |
| 0.5.1-preview.1 | 67 | 10/29/2026 |
| 0.5.0-preview.1 | 69 | 10/28/2026 |
| 0.4.1-preview.1 | 76 | 10/26/2026 |
| 0.4.0-preview.1 | 66 | 10/26/2026 |