Skip to content

Commit 5fcd53c

Browse files
committed
chore(spec): declare the new pin's escaping reads, and add the changeset
The pin reads `skills/*/references/_index.md` — outside its own package — so it belongs in `vitest.repo-tests.json` and runs under the `repo` project, whose hash moves with what it actually reads. Left undeclared it would run under `@objectstack/spec#test`, invisible to both the affected-subset filter and the turbo cache: green on every PR while red on main, which is the one failure this pin exists to refuse. `packages/spec` ships `src/**/*.zod.ts`, and `npm pack --dry-run` confirms the edited source is in the tarball (206 such entries ship; scripts/, skills/ and content/ ship none), so the change publishes and takes a patch changeset. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_016N6xmWt5hYm94ffVEwGH8x
1 parent 2b11b75 commit 5fcd53c

2 files changed

Lines changed: 24 additions & 0 deletions

File tree

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
---
2+
"@objectstack/spec": patch
3+
---
4+
5+
`ai/solution-blueprint.zod.ts` publishes its own sentence again, instead of a list of the symbols it happens to export.
6+
7+
The file always carried a real module header — ADR-0033 §4 plan-first authoring, and how the `apply_blueprint` tool expands each entry into a proper metadata body. But only a blank line separated that header from `const SNAKE_CASE`, and TSDoc's own attachment rule says a block belongs to the declaration it immediately precedes. The header-zone selector reads that rule back, so the header counted as the regex constant's documentation and was disqualified as the module's. Both generators then fell through to their export-list fallback, and the row published into the `objectstack-ai` skill index read:
8+
9+
```
10+
- `…/ai/solution-blueprint.zod.ts` — Exports: BlueprintConditionSchema, BlueprintSummaryOperationsSchema, …
11+
```
12+
13+
A true statement about the file that says nothing about its subject — on the one row whose job is to send an agent to this source for exact field shapes.
14+
15+
`SNAKE_CASE` now carries the one-line doc it always deserved. A comment is not a declaration, so the preamble ends there and the header becomes the module's own block. The published row and the public reference page both open on it:
16+
17+
```
18+
- `…/ai/solution-blueprint.zod.ts` — Solution Blueprint Schema (ADR-0033 §4 — plan-first authoring)
19+
```
20+
21+
The selector is untouched. Under its own rule it was deciding correctly, and a census of every source under `packages/spec/src` found this file to be the only one of its kind: 19 shipped `*.zod.ts` sources have a header-zone block sitting against a declaration, and in the other 18 that block genuinely documents the symbol it sits against (`Transport Protocol Enum` against `TransportProtocol`, `Shared history for this file` against `AGENT_HISTORY`). Only here did a module header sit against a constant it says nothing about.
22+
23+
Neither generator can see this class — each compares its artifact against itself, and each reproduced the selector faithfully, so a generator-only check passes on the defect. A pin now asserts the content of the published row directly.

packages/spec/vitest.repo-tests.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
"scripts/references-banner.test.ts",
1818
"scripts/root-index.test.ts",
1919
"scripts/schema-tree-freshness.test.ts",
20+
"scripts/solution-blueprint-header-row.test.ts",
2021
"scripts/strictness-ledger-doc.test.ts",
2122
"scripts/strictness-ledger.test.ts",
2223
"src/api/error-catalog-docs.test.ts",

0 commit comments

Comments
 (0)