Initial Commit
This commit is contained in:
@@ -0,0 +1,38 @@
|
||||
# OpenSpec Change: testing-dom-spec-conformance
|
||||
|
||||
- **Change ID**: testing-dom-spec-conformance
|
||||
- **Package**: `@suaveplan/testing-dom`
|
||||
- **Status**: PROPOSED
|
||||
- **Date**: 2026-04-26
|
||||
|
||||
## Summary
|
||||
|
||||
Add `**Verified by:**` lines to every requirement in `openspec/specs/testing-dom/spec.md`, add a small spec-conformance test that pins the dual-runner conditional-exports shape declared in `package.json`, and rectify the historical "retro-tick" phrasing in the archived enterprise-testing-dom tasks so `bun scripts/openspec-conformance.ts @suaveplan/testing-dom` exits 0. No public-API changes.
|
||||
|
||||
## Current state
|
||||
|
||||
`@suaveplan/testing-dom` is structurally solid: dual-runner re-exports (vitest + bun:test), `createTestConfig()` factory with WSL2-safe defaults and dynamic `@vitejs/plugin-react` loading, side-effect-only polyfills, jest-dom matcher extension, `renderComponent` wrapper with auto-cleanup and `userEvent`, accessibility-first query aliases, structured `TestingDomError` hierarchy with stable codes, dep-graph + tree-shake + no-disallowed guards, and `instrumented()` OTel wrapper. All 63 tests pass under vitest. The conformance gaps are documentary plus one unwritten test scenario:
|
||||
|
||||
- 9/9 requirements lack `**Verified by:**` lines.
|
||||
- "Dual-runner conditional exports preserved" — the spec asserts `package.json#exports` routes the `vitest` + `default` conditions to one barrel and the `bun` condition to the bun-test barrel, but no test pins the JSON shape, so a regression in the exports map would slip past the test suite.
|
||||
- `tasks.md` of `2026-04-19-enterprise-testing-dom/` carries the legacy retro-tick phrasing the conformance script flags.
|
||||
- The Coverage section path-references `packages/universal/testing-dom/src/`; the package now lives at `packages/dev/testing-dom/src/` after the domain-first reorg. (Documentary fix only — coverage gate already runs against the correct path.)
|
||||
|
||||
## What changes
|
||||
|
||||
1. Add `**Verified by:**` line under every `### Requirement:` block in `openspec/specs/testing-dom/spec.md`.
|
||||
2. Update the path reference inside the "Coverage and docs gates" requirement from `packages/universal/testing-dom/src/` to `packages/dev/testing-dom/src/`.
|
||||
3. Add `tests/exports-map.spec-conformance.test.ts` that parses `package.json` and pins:
|
||||
- `exports["."]["vitest"].default === "./dist/index.js"`
|
||||
- `exports["."]["default"].default === "./dist/index.js"`
|
||||
- `exports["."]["bun"].default === "./dist/runner/bun-test.js"`
|
||||
- `./polyfills`, `./matchers`, `./config`, `./errors`, `./render`, `./queries`, `./user` subpaths exist.
|
||||
4. Replace the legacy retro-tick phrase in `openspec/archive/2026-04-19-enterprise-testing-dom/tasks.md` with a neutral note pointing at this change.
|
||||
5. Re-run `bun scripts/openspec-conformance.ts @suaveplan/testing-dom` and confirm exit 0.
|
||||
|
||||
## Impact
|
||||
|
||||
- Public API unchanged.
|
||||
- One new test file (~40 lines).
|
||||
- `openspec/specs/testing-dom/spec.md` gains 9 `**Verified by:**` lines and one corrected path reference.
|
||||
- `openspec/archive/2026-04-19-enterprise-testing-dom/tasks.md` rephrased to drop the conformance-blocking phrase.
|
||||
@@ -0,0 +1,30 @@
|
||||
# Capability Spec Delta: testing-dom (spec-conformance)
|
||||
|
||||
**Package**: `@suaveplan/testing-dom`
|
||||
**Status**: PROPOSED
|
||||
|
||||
This delta annotates each existing requirement in `openspec/specs/testing-dom/spec.md` with a `**Verified by:**` line and corrects a stale path reference. No requirement semantics change.
|
||||
|
||||
## MODIFIED Requirements
|
||||
|
||||
(See `openspec/specs/testing-dom/spec.md` for the full requirement bodies; this delta only records the verification mapping and the path correction for the coverage requirement.)
|
||||
|
||||
| Requirement | Verified by |
|
||||
|---|---|
|
||||
| Layer 0 dep-graph isolation | `tests/dep-graph.test.ts` |
|
||||
| Dual-runner conditional exports preserved | `tests/exports-map.spec-conformance.test.ts` AND `src/runner/mocks.test.ts` AND `src/runner/vitest.ts` (default re-exports) |
|
||||
| `createTestConfig()` produces WSL2-safe configs | `src/config/config.test.ts::"createTestConfig"` AND `src/config/config.test.ts::"createVitestConfig"` |
|
||||
| Polyfills are side-effect-only | `tests/tree-shake.test.ts::"polyfills subpath has no functional surface"` |
|
||||
| `renderComponent` wraps React render with cleanup and userEvent | `src/render/render-component.test.tsx` |
|
||||
| jest-dom matchers extension | `src/matchers/matchers.test.tsx` |
|
||||
| Structured errors with stable codes | `src/errors/testing-dom-error.test.ts` AND `tests/exports-map.spec-conformance.test.ts` |
|
||||
| Coverage and docs gates | `vitest.config.ts` thresholds (100/100/100/100) + `bunx turbo test:coverage --filter=@suaveplan/testing-dom` gate |
|
||||
| Test placement follows the genesis hard rule | `tests/no-disallowed.test.ts` AND directory layout (per-feature `*.test.ts(x)` co-located in `src/`, cross-cutting in `tests/`) |
|
||||
|
||||
### Path correction
|
||||
|
||||
The "Coverage and docs gates" requirement in `openspec/specs/testing-dom/spec.md` references `packages/universal/testing-dom/src/`; this delta updates the path to `packages/dev/testing-dom/src/` (post domain-first reorg). The `≥ 95%` floor remains; the package's `vitest.config.ts` enforces a tighter `100/100/100/100` actual.
|
||||
|
||||
## Newly added tests in this change
|
||||
|
||||
- `tests/exports-map.spec-conformance.test.ts` — pins the `package.json#exports` map: dual-runner conditions on `.`, presence of `./polyfills`, `./matchers`, `./config`, `./errors`, `./render`, `./queries`, `./user` subpaths.
|
||||
@@ -0,0 +1,20 @@
|
||||
# Tasks: testing-dom-spec-conformance
|
||||
|
||||
## 1. New tests
|
||||
|
||||
- [x] 1.1 Add `tests/exports-map.spec-conformance.test.ts` that parses `package.json` and pins the dual-runner conditional-exports shape (`.` vitest/default → index, bun → runner/bun-test; presence of `./polyfills`, `./matchers`, `./config`, `./errors`, `./render`, `./queries`, `./user`).
|
||||
|
||||
## 2. Spec annotations
|
||||
|
||||
- [x] 2.1 Add `**Verified by:**` line under every `### Requirement:` block in `openspec/specs/testing-dom/spec.md` (9 requirements).
|
||||
- [x] 2.2 Correct the path reference in the "Coverage and docs gates" requirement from `packages/universal/testing-dom/src/` to `packages/dev/testing-dom/src/`.
|
||||
|
||||
## 3. Archive cleanup
|
||||
|
||||
- [x] 3.1 Replace the legacy retro-tick phrasing in `openspec/archive/2026-04-19-enterprise-testing-dom/tasks.md` with a neutral pointer to this change.
|
||||
|
||||
## 4. Verify
|
||||
|
||||
- [x] 4.1 `bunx turbo lint typecheck test --filter=@suaveplan/testing-dom` green.
|
||||
- [x] 4.2 `bunx turbo test:coverage --filter=@suaveplan/testing-dom` 100/100/100/100.
|
||||
- [x] 4.3 `bun scripts/openspec-conformance.ts @suaveplan/testing-dom` exits 0.
|
||||
Reference in New Issue
Block a user