@am_shork/attest 0.3.0 → 0.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +284 -2
- package/README.md +37 -2
- package/dist/cli/report.d.ts.map +1 -1
- package/dist/cli/report.js +64 -5
- package/dist/cli/report.js.map +1 -1
- package/dist/core/loader.d.ts.map +1 -1
- package/dist/core/loader.js +18 -1
- package/dist/core/loader.js.map +1 -1
- package/dist/core/locate.d.ts +18 -1
- package/dist/core/locate.d.ts.map +1 -1
- package/dist/core/locate.js +68 -4
- package/dist/core/locate.js.map +1 -1
- package/dist/core/pipeline.d.ts +12 -3
- package/dist/core/pipeline.d.ts.map +1 -1
- package/dist/core/pipeline.js +22 -1
- package/dist/core/pipeline.js.map +1 -1
- package/dist/core/red-record.d.ts +6 -0
- package/dist/core/red-record.d.ts.map +1 -1
- package/dist/core/red-record.js +31 -2
- package/dist/core/red-record.js.map +1 -1
- package/dist/core/runner.d.ts +1 -1
- package/dist/core/runner.d.ts.map +1 -1
- package/dist/core/runner.js +20 -5
- package/dist/core/runner.js.map +1 -1
- package/dist/core/static-registry.d.ts.map +1 -1
- package/dist/core/static-registry.js +5 -0
- package/dist/core/static-registry.js.map +1 -1
- package/package.json +5 -5
package/CHANGELOG.md
CHANGED
|
@@ -13,7 +13,210 @@ input, removes/renames a public API or `--json` field, or changes a default
|
|
|
13
13
|
runtime behavior an existing invocation relies on — diagnostic message text is
|
|
14
14
|
not API.
|
|
15
15
|
|
|
16
|
-
## [
|
|
16
|
+
## [0.4.0] - 2026-07-28
|
|
17
|
+
|
|
18
|
+
Reading a registry no longer opens a port or lets the repository under test write
|
|
19
|
+
to the reader's terminal, the id prefix finally has something that notices two
|
|
20
|
+
files claiming it, and the peer range now says what CI actually proves rather
|
|
21
|
+
than what the tool was hoped to work on.
|
|
22
|
+
|
|
23
|
+
### Added
|
|
24
|
+
|
|
25
|
+
- **Two registry files claiming one id prefix is now an ERROR.** The id grammar
|
|
26
|
+
is one flat space, `^[A-Z]+-\d+$`, and the prefix inside it was habit rather
|
|
27
|
+
than scope: nothing allocated it, reserved it, or noticed that two files had
|
|
28
|
+
picked the same one (design §11). Every cross-file check there was keys on the
|
|
29
|
+
whole id, so `AUTH-3` in `auth.reqs.ts` and `AUTH-9` in `session.reqs.ts` was
|
|
30
|
+
a clean `check` — two owners of one space, and the first anyone would hear of
|
|
31
|
+
it is the `duplicate-requirement` on the day the counters happen to meet, by
|
|
32
|
+
which point both files have a history. `loadRegistry` (`locate.ts`) already
|
|
33
|
+
held the `(file, id)` pair in the fold where `duplicate-requirement` is
|
|
34
|
+
raised, so the whole mechanism is a prefix→file map in that same loop, and
|
|
35
|
+
because it is that fold, every command that reads intent gets the diagnostic:
|
|
36
|
+
`check`, `cover`, `render`, `status`, `verify`, `archive`.
|
|
37
|
+
**What the issue carries.** `file` is the file that arrived *second* in sorted
|
|
38
|
+
order, matching `duplicate-requirement`, which also files against the file
|
|
39
|
+
being folded — and the file that claimed the prefix first is named in the
|
|
40
|
+
message, because a collision is a fact about a pair, an `Issue` carries one
|
|
41
|
+
path, and an error naming only one end leaves its reader grepping the
|
|
42
|
+
repository to find the other. There is **no `reqId`**: the ids involved are
|
|
43
|
+
individually valid and it is the space above them that has two owners, so
|
|
44
|
+
there is no single requirement the issue is about. It is raised **once per
|
|
45
|
+
colliding prefix per file**, not once per requirement — a registry with forty
|
|
46
|
+
ids under a taken prefix reports one sentence, not forty. Where a duplicate id
|
|
47
|
+
is also present both fire, which is not a restatement: sharing `A-1` implies
|
|
48
|
+
sharing `A-`, and the converse — the case this exists for — does not hold.
|
|
49
|
+
Now a requirement (ATX-39).
|
|
50
|
+
**Not a behaviour change for anything that passes today**, and that was
|
|
51
|
+
checked rather than assumed: all six `*.reqs.ts` in this repo sit in six
|
|
52
|
+
separate project roots holding one registry file each, so no root has two
|
|
53
|
+
files to collide. It is still a new ERROR on input that used to pass, so an
|
|
54
|
+
adopter whose registries share a prefix goes red on upgrade with nothing else
|
|
55
|
+
changing — deliberately, since that is the state the rule exists to report,
|
|
56
|
+
and the fix is a prefix rather than a migration. `SCHEMA_VERSION` stays 1: a
|
|
57
|
+
new `code` value is additive, and neither the envelope nor the `Issue`
|
|
58
|
+
interface moved.
|
|
59
|
+
The other half of the rule this was cut from — that a prefix must match its
|
|
60
|
+
file's name — was **rejected**; see "Considered and rejected".
|
|
61
|
+
|
|
62
|
+
### Security
|
|
63
|
+
|
|
64
|
+
- **Reading a registry opened a network port.** The loader borrows Vite to
|
|
65
|
+
transform and evaluate a `*.reqs.ts`, and `middlewareMode` suppresses Vite's
|
|
66
|
+
HTTP server but not its HMR WebSocket server — so `verify`, `archive`, and any
|
|
67
|
+
read command under `--eval` bound port 24678 on *every* interface for the
|
|
68
|
+
length of the run, on developer machines and CI runners alike, for a channel
|
|
69
|
+
nothing here subscribes to. `server.ws` is now `false`, which is the option
|
|
70
|
+
that actually closes it: `hmr: false` does not, because the socket is created
|
|
71
|
+
before the HMR option is consulted. The visible symptom was two concurrent
|
|
72
|
+
runs colliding and printing `WebSocket server error: Port is already in use`
|
|
73
|
+
into the middle of a report, through a log level that was supposed to have
|
|
74
|
+
silenced the loader. Now a requirement (ATX-36), asserted as a count of
|
|
75
|
+
listening handles rather than a port number, because the port is Vite's to
|
|
76
|
+
change and the property Attest needs is that reading intent is not a network
|
|
77
|
+
operation.
|
|
78
|
+
- **The human report let the repository under test write to the reader's
|
|
79
|
+
terminal.** Scenario names and file paths are quoted verbatim into
|
|
80
|
+
`orphan-test`, `declared-not-run` and `never-red`, and the parser hands back
|
|
81
|
+
the *cooked* string — so an escape written in a spec file arrived at the
|
|
82
|
+
terminal as a real control byte. On a fork merge request the author of that
|
|
83
|
+
string is not the person reading the report, and the payload erases lines,
|
|
84
|
+
repaints a red verdict green, or retitles the window. Every control character
|
|
85
|
+
except the newline is now replaced with a space, in the message, the file
|
|
86
|
+
path, the code, and the ids and change name a `status` report prints. The
|
|
87
|
+
newline survives, because `registry-invalid` legitimately carries a list of
|
|
88
|
+
field errors — but the continuation is indented, so injected text cannot
|
|
89
|
+
occupy the column a genuine header does. `--json` was never affected
|
|
90
|
+
(serialising escapes the same characters), which is exactly why this had to be
|
|
91
|
+
fixed on the side people read. Now a requirement (ATX-37).
|
|
92
|
+
- **Dependency advisories, and a gate so the next ones are not found by hand.**
|
|
93
|
+
The dev toolchain moved to Vite 8 and Vitest 4, clearing a high-severity
|
|
94
|
+
`server.fs.deny` bypass on Windows alternate paths, an NTLMv2 hash disclosure
|
|
95
|
+
via UNC path handling, two moderate path-traversal/dev-server advisories, and
|
|
96
|
+
a critical Vitest UI advisory that this tool never reached but shipped in its
|
|
97
|
+
lockfile regardless. `brace-expansion` is pinned past its DoS advisory through
|
|
98
|
+
a `pnpm.overrides` entry, since it arrives only through ESLint. A new `audit`
|
|
99
|
+
CI job runs `pnpm audit --audit-level=high`, not `allow_failure`: it is the
|
|
100
|
+
one job here that can go red on a commit that changed nothing, which is the
|
|
101
|
+
point — a dependency becomes vulnerable on the day it is disclosed, not on the
|
|
102
|
+
day someone next edits `package.json`. This also closes a real coverage gap:
|
|
103
|
+
`peerDependencies` has claimed Vite 8 and Vitest 4 since 0.3.0 while CI only
|
|
104
|
+
ever ran Vite 5 and Vitest 2.
|
|
105
|
+
|
|
106
|
+
### Fixed
|
|
107
|
+
|
|
108
|
+
- **`--eval` crashed on a registry the reading path diagnoses properly.** The
|
|
109
|
+
evaluating reader called a module's default export a registry because it was
|
|
110
|
+
an object — an assertion standing in for a check, on the one path where the
|
|
111
|
+
value has not already been through `defineRequirements`. A file that
|
|
112
|
+
default-exports a plain literal instead of calling it therefore arrived at the
|
|
113
|
+
validator unchecked, where reading `.statement` off a number threw: `--eval`
|
|
114
|
+
answered with an `internal-error` carrying a raw TypeError, for a file the
|
|
115
|
+
static reader reports with a code, a line and a fix hint — and that fix hint
|
|
116
|
+
is "pass `--eval`", so the documented way out of one diagnostic led into a
|
|
117
|
+
crash. The evaluating path now hands what it loaded to the same
|
|
118
|
+
`RegistrySchema`, so both readers refuse the same file. Behaviour change for
|
|
119
|
+
anyone branching on the code: this input used to produce `internal-error` and
|
|
120
|
+
now produces `registry-invalid`; both are ERRORs, so no exit code moves. It is
|
|
121
|
+
also a stricter read than before — a registry that `--eval` accepted only
|
|
122
|
+
because nothing looked at it is now rejected, and unknown fields are stripped
|
|
123
|
+
by the schema exactly as `defineRequirements` already strips them. Now a
|
|
124
|
+
requirement (ATX-38), kept apart from ATX-17: that one promises the escape
|
|
125
|
+
hatch exists and is honest about its cost, and a reader can satisfy it
|
|
126
|
+
completely while validating nothing it evaluates — which is the state this
|
|
127
|
+
was in.
|
|
128
|
+
- **A corrupt first-run record leaked a value that is not an outcome into the
|
|
129
|
+
report.** Reading `changes/<name>/first-run.json` asserted its contents rather
|
|
130
|
+
than checking them: the guard tested that `firstRun` was an object and was
|
|
131
|
+
*declared* to return the record type, so a hand-edited or half-written file
|
|
132
|
+
put an arbitrary string where `pass`/`fail` is the whole domain. It travelled
|
|
133
|
+
— out through `status`'s `progress[].scenarios[].firstRun`, whose declared
|
|
134
|
+
type is `Outcome | null`, into the `--json` contract, and into a human row
|
|
135
|
+
whose hint matched neither "passed first" nor "never run" and so printed
|
|
136
|
+
blank. The archive gate was never at risk, because `hasRecordedRed` compares
|
|
137
|
+
against `fail` and anything unrecognised blocks exactly like a missing record;
|
|
138
|
+
this closes the report, not the gate. A record that does not validate is now
|
|
139
|
+
discarded whole, which is the existing "no more permissive than a missing
|
|
140
|
+
file" rule one step further: the cost is a stage-1 run to re-observe, and
|
|
141
|
+
keeping the entries that happened to parse would present a partial history as
|
|
142
|
+
if it were the whole one. Behaviour change confined to corrupt files: that
|
|
143
|
+
`--json` field now reads `null` where it used to echo whatever was on disk.
|
|
144
|
+
- **The test verdict could fail open.** `runAndCollect` read the failure count
|
|
145
|
+
through `getCountOfFailedTests?.() ?? 0`, but the method is required on
|
|
146
|
+
Vitest's state — so the guard was dead at the type level, and had it ever
|
|
147
|
+
become live it defaulted the wrong way, reading a missing API as zero failures
|
|
148
|
+
and turning a red suite green. Latent rather than observed: no released
|
|
149
|
+
version reported a wrong verdict because of it. This is the one boolean in the
|
|
150
|
+
engine that may never fail open.
|
|
151
|
+
- **`archive` answered `internal-error` for a file `status` diagnoses
|
|
152
|
+
properly.** A `requirements.delta.ts` that loads but default-exports nothing
|
|
153
|
+
reached `applyDelta` as `undefined`, where reading `.renamed` off it threw a
|
|
154
|
+
TypeError — so the gate crashed out through the `--json` envelope's crash path
|
|
155
|
+
instead of reporting `change-not-found`, and the fix hint went with it.
|
|
156
|
+
`archive` now makes the same check `status` already made. Behaviour change for
|
|
157
|
+
anyone branching on the code: this input used to produce `internal-error` and
|
|
158
|
+
now produces `change-not-found`. Both are ERRORs, so no exit code moves.
|
|
159
|
+
- **A sibling change directory containing a backslash silently widened the
|
|
160
|
+
archive gate.** `escapeGlob` escaped every glob metacharacter except
|
|
161
|
+
glob's *own* escape character, so a name like `a\b` — legal on POSIX — did not
|
|
162
|
+
merely go unescaped: the backslash escaped the character after it, and
|
|
163
|
+
`**/changes/a\b/**` matched `ab` and never the directory. That proposal's
|
|
164
|
+
specs then joined the run of the one check that decides whether a change is
|
|
165
|
+
done. Covered by ATX-13, which already stated the property.
|
|
166
|
+
- **A self scenario that compiled a TypeScript program had no explicit
|
|
167
|
+
timeout**, so it fit inside Vitest's 5-second isolated-run default until the
|
|
168
|
+
toolchain moved and then failed as `tests-red` with no assertion behind it —
|
|
169
|
+
the failure mode the repo's other long scenarios already carry a timeout to
|
|
170
|
+
avoid.
|
|
171
|
+
|
|
172
|
+
### Changed
|
|
173
|
+
|
|
174
|
+
- **BREAKING: the peer range is now `vite ^8` and `vitest ^4`, down from six
|
|
175
|
+
majors.** `^5 || ^6 || ^7 || ^8` and `^2 || ^3 || ^4` was a claim about six
|
|
176
|
+
combinations that no job ever ran end to end. What it looked like from inside
|
|
177
|
+
the repo — the security entry above says as much — was that the *top* was
|
|
178
|
+
untested; the fixture told a different story. `fixtures/consumer` pinned
|
|
179
|
+
`vitest ^2.0.0` / `vite ^5.4.0`, and the consumer job is the **only** thing in
|
|
180
|
+
this pipeline that resolves peers at all, so the two ends were each proven by
|
|
181
|
+
one job apiece and `vite ^6`/`^7` and `vitest ^3` were proven by nothing.
|
|
182
|
+
Advertising a version nobody runs is the same defect the `audit` job was added
|
|
183
|
+
to close, one layer out: the failure surfaces in an adopter's repository, not
|
|
184
|
+
here.
|
|
185
|
+
**Two of them had already stopped being merely untested.** `verify` reads
|
|
186
|
+
`startVitest` as `Promise<Vitest>` — the dead null guard removed above was
|
|
187
|
+
there for the older signature — and ATX-36 asserts a listening-handle count
|
|
188
|
+
against whichever Vite is installed, so on any other major the socket
|
|
189
|
+
guarantee is a claim rather than a measurement. Neither is a defect that would
|
|
190
|
+
announce itself; both fail in the direction of looking fine.
|
|
191
|
+
`fixtures/consumer` moves to `vitest ^4` / `vite ^8` with the range, because
|
|
192
|
+
npm refuses an unmet peer and the fixture exists to install the way a user
|
|
193
|
+
does. That does cost something real and it is worth naming: the consumer job
|
|
194
|
+
no longer exercises a second Vite/Vitest pair, so this trades a spot-check of
|
|
195
|
+
one old combination for a claim that matches the tested one. A matrix is what
|
|
196
|
+
buys the breadth back, and nothing here pretends this is that.
|
|
197
|
+
**Who this breaks:** anyone on Vite 5–7 or Vitest 2–3 fails to install on
|
|
198
|
+
upgrade, with no deprecation window. Under this file's Versioning rule that is
|
|
199
|
+
a minor, which is what 0.4.0 is. The engine may well still work on some of
|
|
200
|
+
them — that is precisely the claim there is no evidence for, and `0.3.x`
|
|
201
|
+
remains the version whose manifest makes it.
|
|
202
|
+
|
|
203
|
+
- **Type-aware linting, and `exactOptionalPropertyTypes`.** The three defects
|
|
204
|
+
above are one shape — an assertion standing in for a check — and the untyped
|
|
205
|
+
ESLint preset cannot see any of them, because deciding whether an `as` or a
|
|
206
|
+
`?.` is doing work needs the checker. `recommendedTypeChecked` now runs over
|
|
207
|
+
`src`, `tests` and `self`, with `no-unnecessary-condition` promoted out of the
|
|
208
|
+
strict preset; the rest of that preset is deliberately not adopted, since its
|
|
209
|
+
bulk is `no-non-null-assertion`, and here `!` is the counterpart of
|
|
210
|
+
`noUncheckedIndexedAccess` — banning it would trade a compiler-enforced
|
|
211
|
+
guarantee for a lint-enforced style. `fixtures/**` stays on the untyped preset
|
|
212
|
+
because several fixtures are invalid on purpose. Turning the rules on removed
|
|
213
|
+
a double cast that hid Vitest's task-tree shape from the compiler, a redundant
|
|
214
|
+
assertion in the delta reader that made an unvalidated value look checked, and
|
|
215
|
+
a dead `startVitest` null guard left over from an older Vitest signature.
|
|
216
|
+
`exactOptionalPropertyTypes` is now on as well: the codebase already followed
|
|
217
|
+
it by hand — the `...(x === undefined ? {} : { key: x })` idiom appears in
|
|
218
|
+
every Issue builder — so this makes an existing discipline the compiler's job
|
|
219
|
+
rather than review's. No `--json` shape changed, so `SCHEMA_VERSION` stays 1.
|
|
17
220
|
|
|
18
221
|
## [0.3.0] - 2026-07-27
|
|
19
222
|
|
|
@@ -1126,6 +1329,31 @@ it sat between 0.2.0 and 0.1.7 for two releases, where standing still meant
|
|
|
1126
1329
|
sinking one version deeper each time a release was cut above it, and a rejection
|
|
1127
1330
|
filed under a version reads as belonging to it.
|
|
1128
1331
|
|
|
1332
|
+
- **A requirement's id prefix must match its registry file's name.** The other
|
|
1333
|
+
half of the rule that shipped as `duplicate-prefix` (see `[Unreleased]`), and
|
|
1334
|
+
the half that does not pay for itself. What killed it is that the corpus
|
|
1335
|
+
already conforms: every fixture registry matches (`auth.reqs.ts` → `AUTH-`,
|
|
1336
|
+
`core.reqs.ts` → `CORE-`), so the rule would detect nothing anywhere it was
|
|
1337
|
+
measured except one file — `self/requirements/attest.reqs.ts`, which holds
|
|
1338
|
+
`ATX-*`. Its first act would therefore be to rename this repo's own registry
|
|
1339
|
+
and every `self/*.spec.ts` that imports it, and its first act in an adopter's
|
|
1340
|
+
repository would be the same thing to theirs. That is rejecting input valid
|
|
1341
|
+
today, a minor bump under this file's Versioning rule, in exchange for making
|
|
1342
|
+
the prefix *guessable from the path* — which matters only to a reader already
|
|
1343
|
+
looking at the file, and who could have read the ids in it. The collision rule
|
|
1344
|
+
delivers what the gap is actually about, which is two owners of one space, and
|
|
1345
|
+
it delivers it without a rename because it fires on a relationship between
|
|
1346
|
+
files rather than on a spelling. Reconsider only with evidence that a reader or
|
|
1347
|
+
a tool needs the prefix before opening the file — a naming *convention* stays
|
|
1348
|
+
the right shape for this, and the convention is what `init` and the docs
|
|
1349
|
+
already teach.
|
|
1350
|
+
What is not a reason to revisit it: the objection that stalled the collision
|
|
1351
|
+
rule while both were queued together — that it guards a convention nothing had
|
|
1352
|
+
yet violated — was answered by shipping it, since a rule that costs no
|
|
1353
|
+
migration and no concept is worth having before the first collision rather
|
|
1354
|
+
than after it. That argument does not transfer here, because this rule's cost
|
|
1355
|
+
is a migration by construction.
|
|
1356
|
+
|
|
1129
1357
|
- **Two gaps in the intent layer: nothing resists a bloated requirement, and
|
|
1130
1358
|
nothing resists a duplicated one.** The gaps themselves are described in design
|
|
1131
1359
|
§11, which is where a permanent property of the design belongs. What is kept
|
|
@@ -1272,7 +1500,61 @@ filed under a version reads as belonging to it.
|
|
|
1272
1500
|
answer for a Codex user, and this reopens only if Codex grows a project-scoped
|
|
1273
1501
|
path of its own.
|
|
1274
1502
|
|
|
1275
|
-
|
|
1503
|
+
- **A committed snapshot of the params, to give `check` detection power over a
|
|
1504
|
+
value that moves.** Design §11 records the measurement this answers: editing a
|
|
1505
|
+
param (`'main'` → `'trunk'`, one entry dropped from a nine-element list) leaves
|
|
1506
|
+
`attest check` at `✓ No issues`, because the single source makes a value
|
|
1507
|
+
impossible to *diverge*, which is not the claim that it is flagged when it
|
|
1508
|
+
*moves*. The candidate was the shape `render --check` already proves — a
|
|
1509
|
+
`params.lock` beside the registry, or `check --params-check` — and the
|
|
1510
|
+
mechanism would have worked.
|
|
1511
|
+
*What rejected it: the precedent is the objection.* §9 states when a freshness
|
|
1512
|
+
gate earns its place, and a rendering earns it because it is a function of the
|
|
1513
|
+
*user's registry*, so staleness means the user moved intent without
|
|
1514
|
+
regenerating — a real signal with the fix in their hands. A params snapshot is
|
|
1515
|
+
a function of the registry too, but the population it fires on is different:
|
|
1516
|
+
**every legitimate param edit turns it red, and the fix is a commit containing
|
|
1517
|
+
no decision.** That is precisely the chore §9 declined to ship for `init`, and
|
|
1518
|
+
it is worse here because of frequency — intent is rendered rarely, while params
|
|
1519
|
+
move whenever a value moves, which is the entire reason they are params. The
|
|
1520
|
+
gate would spend its whole life red about correct edits, and a gate that is
|
|
1521
|
+
usually wrong about staleness is the failure mode §9 names as worse than no
|
|
1522
|
+
gate.
|
|
1523
|
+
*What the gap keeps instead.* §6's mechanism 3 already exists to make this
|
|
1524
|
+
exact absence visible: `possible-drift` fires when a requirement owns params
|
|
1525
|
+
that no covering scenario reads, which is the only condition under which a
|
|
1526
|
+
moved param goes unnoticed. The mechanism that guards a param is a scenario
|
|
1527
|
+
reading it, not a file recording it. This reopens only on an adoption report
|
|
1528
|
+
where a param moved, no scenario caught it, and `possible-drift` was **not**
|
|
1529
|
+
already printing — because if it was printing, what failed was reading the
|
|
1530
|
+
report, and a second gate does not fix that.
|
|
1531
|
+
|
|
1532
|
+
- **Grouping `render`'s output by prefix, so a reviewer sees contradicting
|
|
1533
|
+
requirements together.** The *detection* half of this is already rejected above
|
|
1534
|
+
(every automatic candidate either saw almost nothing or was a similarity
|
|
1535
|
+
matcher, which is what §0 exists to remove), leaving human review at propose
|
|
1536
|
+
(§7) as the answer — and the idea was to help that review by putting
|
|
1537
|
+
requirements about one subject side by side in the one document a human reads
|
|
1538
|
+
end to end.
|
|
1539
|
+
*What rejected it: the ordering already ships, and the adjacency it buys is not
|
|
1540
|
+
where the gap is.* `compareIds` (`render.ts`) has ordered the document by
|
|
1541
|
+
prefix first and number second since `render` shipped, so same-prefix
|
|
1542
|
+
requirements are **already** adjacent; the candidate was never an ordering
|
|
1543
|
+
change, only a heading over an ordering that already holds. And §11's own
|
|
1544
|
+
example of the gap is `AUTH-3` expiring a session against `SESS-7` saying
|
|
1545
|
+
sessions never expire — a contradiction **across** prefixes, which prefix
|
|
1546
|
+
grouping pushes further apart rather than closer. What remains is a reader aid
|
|
1547
|
+
for same-prefix contradictions, which are the pairs already adjacent and
|
|
1548
|
+
therefore the ones review is least likely to miss, bought at the price of
|
|
1549
|
+
changing the bytes of every committed rendering and turning `render --check`
|
|
1550
|
+
red across every adopting repo on upgrade — for a change the user did not make.
|
|
1551
|
+
*The gap itself stays open* and stays where it belongs, in design §11: nothing
|
|
1552
|
+
resists a duplicated or contradictory requirement, and human review at propose
|
|
1553
|
+
is still the whole answer. What is rejected is grouping as a way to assist it,
|
|
1554
|
+
and this reopens only on a contradiction that grouping would have caught.
|
|
1555
|
+
|
|
1556
|
+
[Unreleased]: https://gitlab.com/Pseudorca/attest/-/compare/v0.4.0...main
|
|
1557
|
+
[0.4.0]: https://gitlab.com/Pseudorca/attest/-/tags/v0.4.0
|
|
1276
1558
|
[0.3.0]: https://gitlab.com/Pseudorca/attest/-/tags/v0.3.0
|
|
1277
1559
|
[0.2.2]: https://gitlab.com/Pseudorca/attest/-/tags/v0.2.2
|
|
1278
1560
|
[0.2.1]: https://gitlab.com/Pseudorca/attest/-/tags/v0.2.1
|
package/README.md
CHANGED
|
@@ -26,7 +26,13 @@ See the authoritative design — [English](https://gitlab.com/Pseudorca/attest/-
|
|
|
26
26
|
## Prerequisites
|
|
27
27
|
|
|
28
28
|
- Node ≥ 20.19
|
|
29
|
-
- pnpm, plus `vitest`
|
|
29
|
+
- pnpm, plus `vitest` ≥ 4 and `vite` ≥ 8 (peer dependencies)
|
|
30
|
+
|
|
31
|
+
The peer range is exactly the one CI runs, which is the point of it. Older majors
|
|
32
|
+
are not merely untested: `verify` relies on a `startVitest` signature that Vitest
|
|
33
|
+
narrowed by 4, and ATX-36 — reading a registry opens no listening socket — is
|
|
34
|
+
asserted against the Vite that is installed, so on any other major it is a claim
|
|
35
|
+
rather than a measurement. If you are on Vitest 2 or 3, stay on `0.3.x`.
|
|
30
36
|
|
|
31
37
|
## Getting started
|
|
32
38
|
|
|
@@ -196,6 +202,10 @@ behaviour instead, `--eval` restores it on every one of those commands:
|
|
|
196
202
|
attest check --eval # reads the registry by executing every *.reqs.ts
|
|
197
203
|
```
|
|
198
204
|
|
|
205
|
+
`--eval` changes *how* the registry is obtained, never what counts as one: whatever
|
|
206
|
+
the module exports goes through the same schema, so a malformed registry is a
|
|
207
|
+
`registry-invalid` ERROR under both readers rather than a crash under one of them.
|
|
208
|
+
|
|
199
209
|
**The same rule covers a change's `requirements.delta.ts`**, because `status`
|
|
200
210
|
reads that file the same way — a delta built from an imported constant is the
|
|
201
211
|
same `registry-not-static` ERROR, with the same `--eval` way out. The reason is
|
|
@@ -210,6 +220,31 @@ is accepted — but it keeps every newline and every space of indentation inside
|
|
|
210
220
|
and `render` puts the statement into the Markdown exactly as written, so the
|
|
211
221
|
wrapping that looked tidy in the editor lands in the generated document.
|
|
212
222
|
|
|
223
|
+
### Each registry file owns its id prefix
|
|
224
|
+
|
|
225
|
+
You can split intent across as many `*.reqs.ts` as you like — every one under the
|
|
226
|
+
project root is read and merged. What you cannot do is have two of them declare
|
|
227
|
+
the same prefix:
|
|
228
|
+
|
|
229
|
+
```ts
|
|
230
|
+
// requirements/auth.reqs.ts
|
|
231
|
+
export default defineRequirements({ 'AUTH-3': { /* … */ } });
|
|
232
|
+
|
|
233
|
+
// requirements/session.reqs.ts
|
|
234
|
+
export default defineRequirements({ 'AUTH-9': { /* … */ } }); // ✗ duplicate-prefix
|
|
235
|
+
```
|
|
236
|
+
|
|
237
|
+
An id is `PREFIX-n` and nothing above the requirement gives that prefix a
|
|
238
|
+
meaning, so two files declaring one are two owners of a single space. The ids
|
|
239
|
+
above are distinct and every other check passes; what you find out later is that
|
|
240
|
+
`AUTH-9` was taken the day someone's counter reached it, in a file they were not
|
|
241
|
+
looking at. The ERROR names both files, and the fix is a prefix of your own —
|
|
242
|
+
`SESS-1` — not a move or a rename.
|
|
243
|
+
|
|
244
|
+
`duplicate-requirement` is the narrower one still there for the same id in two
|
|
245
|
+
files. Nothing requires the prefix to match the file's name; `attest.reqs.ts`
|
|
246
|
+
holding `ATX-*` is fine, here and in your repo.
|
|
247
|
+
|
|
213
248
|
### A readable spec for humans (`attest render`)
|
|
214
249
|
|
|
215
250
|
The intent layer lives in TypeScript, which means a reviewer, a QA engineer, or
|
|
@@ -317,7 +352,7 @@ attest check --json
|
|
|
317
352
|
{
|
|
318
353
|
"tool": "attest",
|
|
319
354
|
"schemaVersion": 1,
|
|
320
|
-
"version": "0.
|
|
355
|
+
"version": "0.4.0",
|
|
321
356
|
"command": "check",
|
|
322
357
|
"ok": false,
|
|
323
358
|
"summary": { "error": 1, "warning": 0, "info": 0 },
|
package/dist/cli/report.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"report.d.ts","sourceRoot":"","sources":["../../src/cli/report.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,WAAW,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAEnF,OAAO,KAAK,EAAE,KAAK,EAAS,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"report.d.ts","sourceRoot":"","sources":["../../src/cli/report.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,WAAW,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAEnF,OAAO,KAAK,EAAE,KAAK,EAAS,MAAM,kBAAkB,CAAC;AAkErD,wBAAgB,YAAY,CAAC,MAAM,EAAE,KAAK,EAAE,GAAG,MAAM,CAcpD;AAED;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,aAAa,CAAC,MAAM,EAAE,KAAK,EAAE,GAAG,MAAM,CAkBrD;AAUD,wBAAgB,SAAS,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE,KAAK,CAAC,EAAE,YAAY,GAAG,MAAM,CASvE;AAID;;;;;;GAMG;AACH,wBAAgB,WAAW,CAAC,KAAK,EAAE,YAAY,GAAG,MAAM,CAIvD;AA4BD;;;;;;;;GAQG;AACH,wBAAgB,YAAY,CAAC,MAAM,EAAE,YAAY,GAAG,MAAM,CAwBzD;AAED,wBAAgB,cAAc,CAAC,IAAI,EAAE,WAAW,EAAE,GAAG,MAAM,CAe1D"}
|
package/dist/cli/report.js
CHANGED
|
@@ -8,15 +8,66 @@ const LEVEL_TAG = {
|
|
|
8
8
|
INFO: (s) => chalk.blueBright(s),
|
|
9
9
|
};
|
|
10
10
|
const ORDER = ['ERROR', 'WARNING', 'INFO'];
|
|
11
|
+
/** The one control character a report keeps: see `block`. */
|
|
12
|
+
const NEWLINE = 0x0a;
|
|
13
|
+
/** How far a message is indented under its header line. */
|
|
14
|
+
const INDENT = ' ';
|
|
15
|
+
/**
|
|
16
|
+
* Text from the project, on its way to a terminal.
|
|
17
|
+
*
|
|
18
|
+
* Most of what a report prints is Attest's own prose, but the parts a reader
|
|
19
|
+
* actually navigates by are not: a scenario name and a file path are quoted
|
|
20
|
+
* verbatim out of the repository under test (`orphan-test`, `declared-not-run`,
|
|
21
|
+
* `never-red`), and the parser hands back the *cooked* string, so an ESC
|
|
22
|
+
* written as an escape in a spec file is a real control byte by the time it
|
|
23
|
+
* arrives here.
|
|
24
|
+
*
|
|
25
|
+
* That makes the human report a place where the repository being checked can
|
|
26
|
+
* write to the terminal of whoever is checking it. On a fork MR the author is
|
|
27
|
+
* not the reviewer, and the payload is a scenario name: erase the lines above,
|
|
28
|
+
* repaint a red verdict green, rewrite the window title. The `--json` path was
|
|
29
|
+
* never exposed — `JSON.stringify` escapes every C0 character — which is
|
|
30
|
+
* precisely why this had to be fixed on the side people read.
|
|
31
|
+
*
|
|
32
|
+
* A newline survives, because one diagnostic is legitimately multi-line:
|
|
33
|
+
* `registry-invalid` carries Zod's list of field errors, and flattening it
|
|
34
|
+
* would cost a real reader a real thing to save a hypothetical one. It is
|
|
35
|
+
* re-indented instead, so injected text lands inside the message block rather
|
|
36
|
+
* than at column 0 where a forged `ERROR ...` header would be indistinguishable
|
|
37
|
+
* from a real one.
|
|
38
|
+
*/
|
|
39
|
+
function block(text) {
|
|
40
|
+
return control(text).replaceAll('\n', `\n${INDENT}`);
|
|
41
|
+
}
|
|
42
|
+
/** The same, for text that sits inline in a header and must stay one line. */
|
|
43
|
+
function inline(text) {
|
|
44
|
+
return control(text).replaceAll('\n', ' ');
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* Every C0 control except the newline, plus DEL and the C1 range, as a space.
|
|
48
|
+
*
|
|
49
|
+
* A space rather than deletion: removing the byte would silently splice
|
|
50
|
+
* `atte` + `st` into a word that was never in the file, and a diagnostic that
|
|
51
|
+
* quietly rewrites what it quotes is its own kind of wrong.
|
|
52
|
+
*/
|
|
53
|
+
function control(text) {
|
|
54
|
+
return [...text]
|
|
55
|
+
.map((ch) => {
|
|
56
|
+
const c = ch.codePointAt(0);
|
|
57
|
+
const isControl = (c < 0x20 && c !== NEWLINE) || (c >= 0x7f && c <= 0x9f);
|
|
58
|
+
return isControl ? ' ' : ch;
|
|
59
|
+
})
|
|
60
|
+
.join('');
|
|
61
|
+
}
|
|
11
62
|
export function formatIssues(issues) {
|
|
12
63
|
if (issues.length === 0)
|
|
13
64
|
return chalk.green('✓ No issues.');
|
|
14
65
|
const lines = [];
|
|
15
66
|
for (const level of ORDER) {
|
|
16
67
|
for (const i of issues.filter((x) => x.level === level)) {
|
|
17
|
-
const where = i.file ? `${i.file}${i.line ? `:${i.line}` : ''}` : '';
|
|
68
|
+
const where = i.file ? `${inline(i.file)}${i.line ? `:${i.line}` : ''}` : '';
|
|
18
69
|
const loc = where ? chalk.dim(` (${where})`) : '';
|
|
19
|
-
lines.push(`${LEVEL_TAG[level](level.padEnd(7))} ${chalk.cyan(i.code)}${loc}\n
|
|
70
|
+
lines.push(`${LEVEL_TAG[level](level.padEnd(7))} ${chalk.cyan(inline(i.code))}${loc}\n${INDENT}${block(i.message)}`);
|
|
20
71
|
}
|
|
21
72
|
}
|
|
22
73
|
const repeats = formatRepeats(issues);
|
|
@@ -133,12 +184,16 @@ export function formatStatus(result) {
|
|
|
133
184
|
else {
|
|
134
185
|
for (const row of result.rows) {
|
|
135
186
|
const { mark, hint } = STATE_MARK[row.state];
|
|
136
|
-
|
|
187
|
+
// Sanitised for the reason `formatIssues` sanitises: a status row's id is
|
|
188
|
+
// whatever `delta({ added: { … } })` wrote, and the static delta reader
|
|
189
|
+
// deliberately does not schema-validate it (see static-registry.ts), so
|
|
190
|
+
// unlike a registry id it has never been through `^[A-Z]+-\d+$`.
|
|
191
|
+
lines.push(` ${mark} ${chalk.bold(inline(row.reqId))} ${hint(row)}`);
|
|
137
192
|
}
|
|
138
193
|
}
|
|
139
194
|
const { proven } = result.counts;
|
|
140
195
|
lines.push(chalk.dim(`— ${plural(result.rows.length, 'added requirement')}, ${proven} ready to archive`));
|
|
141
|
-
lines.push(chalk.dim(`Not a verdict: run \`attest archive ${result.change}\` to run the suite.`));
|
|
196
|
+
lines.push(chalk.dim(`Not a verdict: run \`attest archive ${inline(result.change)}\` to run the suite.`));
|
|
142
197
|
return lines.join('\n');
|
|
143
198
|
}
|
|
144
199
|
export function formatCoverage(rows) {
|
|
@@ -150,7 +205,11 @@ export function formatCoverage(rows) {
|
|
|
150
205
|
const detail = r.covered
|
|
151
206
|
? chalk.dim(`${r.scenarioCount} scenario${r.scenarioCount === 1 ? '' : 's'}`)
|
|
152
207
|
: chalk.red('no scenario');
|
|
153
|
-
|
|
208
|
+
// Sanitised, even though a registry id has been through the schema's
|
|
209
|
+
// `^[A-Z]+-\d+$`: that is true of the *static* reader only. Under
|
|
210
|
+
// `--eval` the registry is whatever the module exported, and `evalReader`
|
|
211
|
+
// checks that it is an object and nothing further.
|
|
212
|
+
return ` ${mark} ${chalk.bold(inline(r.reqId))} ${detail}`;
|
|
154
213
|
})
|
|
155
214
|
.join('\n');
|
|
156
215
|
}
|
package/dist/cli/report.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"report.js","sourceRoot":"","sources":["../../src/cli/report.ts"],"names":[],"mappings":"AAAA,8EAA8E;AAC9E,yEAAyE;AAEzE,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAK9C,MAAM,SAAS,GAAyC;IACtD,KAAK,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC;IAC/B,OAAO,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC;IACpC,IAAI,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC;CACjC,CAAC;AAEF,MAAM,KAAK,GAAY,CAAC,OAAO,EAAE,SAAS,EAAE,MAAM,CAAC,CAAC;AAEpD,MAAM,UAAU,YAAY,CAAC,MAAe;IAC1C,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,KAAK,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC;IAC5D,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,KAAK,MAAM,KAAK,IAAI,KAAK,EAAE,CAAC;QAC1B,KAAK,MAAM,CAAC,IAAI,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,KAAK,KAAK,CAAC,EAAE,CAAC;YACxD,MAAM,KAAK,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;
|
|
1
|
+
{"version":3,"file":"report.js","sourceRoot":"","sources":["../../src/cli/report.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"loader.d.ts","sourceRoot":"","sources":["../../src/core/loader.ts"],"names":[],"mappings":"AAqBA,MAAM,WAAW,MAAM;IACrB,IAAI,CAAC,CAAC,GAAG,OAAO,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;IAC/C,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IACvB;;;;;;OAMG;IACH,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;CAC7B;AAED,wBAAsB,YAAY,IAAI,OAAO,CAAC,MAAM,CAAC,
|
|
1
|
+
{"version":3,"file":"loader.d.ts","sourceRoot":"","sources":["../../src/core/loader.ts"],"names":[],"mappings":"AAqBA,MAAM,WAAW,MAAM;IACrB,IAAI,CAAC,CAAC,GAAG,OAAO,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;IAC/C,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IACvB;;;;;;OAMG;IACH,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;CAC7B;AAED,wBAAsB,YAAY,IAAI,OAAO,CAAC,MAAM,CAAC,CAqDpD"}
|
package/dist/core/loader.js
CHANGED
|
@@ -23,7 +23,24 @@ export async function createLoader() {
|
|
|
23
23
|
configFile: false,
|
|
24
24
|
logLevel: 'error',
|
|
25
25
|
appType: 'custom',
|
|
26
|
-
|
|
26
|
+
// `ws: false` is load-bearing, and `middlewareMode` is not enough on its
|
|
27
|
+
// own: it suppresses the HTTP server but Vite still starts the HMR
|
|
28
|
+
// WebSocket server, which binds `::` — every interface, not loopback — on
|
|
29
|
+
// port 24678. Every `attest` command that reads a registry by evaluating it
|
|
30
|
+
// therefore opened a network port for the length of the run, on a
|
|
31
|
+
// developer's machine and on every CI runner, for a channel that does
|
|
32
|
+
// nothing here: nothing subscribes to HMR, because nothing is watching.
|
|
33
|
+
//
|
|
34
|
+
// The visible symptom was the collision. Two attest processes at once —
|
|
35
|
+
// ordinary in a CI matrix, and what this repo's own concurrent specs do —
|
|
36
|
+
// and the second printed `WebSocket server error: Port is already in use`
|
|
37
|
+
// into the middle of a report, through a `logLevel: 'error'` that was
|
|
38
|
+
// supposed to have silenced the loader entirely.
|
|
39
|
+
//
|
|
40
|
+
// `hmr: false` does *not* close it (measured, Vite 5.4): the ws server is
|
|
41
|
+
// created before the hmr option is consulted. `ws: false` is the one that
|
|
42
|
+
// leaves no listening handle at all.
|
|
43
|
+
server: { middlewareMode: true, ws: false },
|
|
27
44
|
resolve: { alias: { vitest: stub } },
|
|
28
45
|
ssr: { noExternal: ['vitest'] },
|
|
29
46
|
optimizeDeps: { noDiscovery: true },
|
package/dist/core/loader.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"loader.js","sourceRoot":"","sources":["../../src/core/loader.ts"],"names":[],"mappings":"AAAA,8EAA8E;AAC9E,2EAA2E;AAC3E,6EAA6E;AAC7E,EAAE;AACF,sEAAsE;AACtE,yEAAyE;AACzE,6EAA6E;AAC7E,oEAAoE;AAEpE,OAAO,EAAE,YAAY,EAAsB,MAAM,MAAM,CAAC;AACxD,OAAO,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AACrD,OAAO,EAAE,EAAE,EAAE,MAAM,kBAAkB,CAAC;AACtC,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AACjC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAEjC,MAAM,WAAW,GACf,+EAA+E;IAC/E,wFAAwF;IACxF,kFAAkF;IAClF,oBAAoB,CAAC;AAevB,MAAM,CAAC,KAAK,UAAU,YAAY;IAChC,MAAM,GAAG,GAAG,WAAW,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,gBAAgB,CAAC,CAAC,CAAC;IAC1D,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,EAAE,iBAAiB,CAAC,CAAC;IAC1C,aAAa,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC;IAEjC,MAAM,MAAM,GAAkB,MAAM,YAAY,CAAC;QAC/C,UAAU,EAAE,KAAK;QACjB,QAAQ,EAAE,OAAO;QACjB,OAAO,EAAE,QAAQ;QACjB,MAAM,EAAE,EAAE,cAAc,EAAE,IAAI,EAAE;
|
|
1
|
+
{"version":3,"file":"loader.js","sourceRoot":"","sources":["../../src/core/loader.ts"],"names":[],"mappings":"AAAA,8EAA8E;AAC9E,2EAA2E;AAC3E,6EAA6E;AAC7E,EAAE;AACF,sEAAsE;AACtE,yEAAyE;AACzE,6EAA6E;AAC7E,oEAAoE;AAEpE,OAAO,EAAE,YAAY,EAAsB,MAAM,MAAM,CAAC;AACxD,OAAO,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AACrD,OAAO,EAAE,EAAE,EAAE,MAAM,kBAAkB,CAAC;AACtC,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AACjC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAEjC,MAAM,WAAW,GACf,+EAA+E;IAC/E,wFAAwF;IACxF,kFAAkF;IAClF,oBAAoB,CAAC;AAevB,MAAM,CAAC,KAAK,UAAU,YAAY;IAChC,MAAM,GAAG,GAAG,WAAW,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,gBAAgB,CAAC,CAAC,CAAC;IAC1D,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,EAAE,iBAAiB,CAAC,CAAC;IAC1C,aAAa,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC;IAEjC,MAAM,MAAM,GAAkB,MAAM,YAAY,CAAC;QAC/C,UAAU,EAAE,KAAK;QACjB,QAAQ,EAAE,OAAO;QACjB,OAAO,EAAE,QAAQ;QACjB,yEAAyE;QACzE,mEAAmE;QACnE,0EAA0E;QAC1E,4EAA4E;QAC5E,kEAAkE;QAClE,sEAAsE;QACtE,wEAAwE;QACxE,EAAE;QACF,wEAAwE;QACxE,0EAA0E;QAC1E,0EAA0E;QAC1E,sEAAsE;QACtE,iDAAiD;QACjD,EAAE;QACF,0EAA0E;QAC1E,0EAA0E;QAC1E,qCAAqC;QACrC,MAAM,EAAE,EAAE,cAAc,EAAE,IAAI,EAAE,EAAE,EAAE,KAAK,EAAE;QAC3C,OAAO,EAAE,EAAE,KAAK,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,EAAE;QACpC,GAAG,EAAE,EAAE,UAAU,EAAE,CAAC,QAAQ,CAAC,EAAE;QAC/B,YAAY,EAAE,EAAE,WAAW,EAAE,IAAI,EAAE;KACpC,CAAC,CAAC;IAEH,IAAI,MAAM,GAAG,KAAK,CAAC;IACnB,OAAO;QACL,UAAU,EAAE,GAAG;QACf,KAAK,CAAC,IAAI,CAAI,OAAe;YAC3B,OAAO,CAAC,MAAM,MAAM,CAAC,aAAa,CAAC,OAAO,CAAC,CAAM,CAAC;QACpD,CAAC;QACD,uEAAuE;QACvE,wEAAwE;QACxE,0EAA0E;QAC1E,yEAAyE;QACzE,qDAAqD;QACrD,KAAK,CAAC,KAAK;YACT,IAAI,MAAM;gBAAE,OAAO;YACnB,MAAM,GAAG,IAAI,CAAC;YACd,IAAI,CAAC;gBACH,MAAM,MAAM,CAAC,KAAK,EAAE,CAAC;YACvB,CAAC;oBAAS,CAAC;gBACT,MAAM,EAAE,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;YAClD,CAAC;QACH,CAAC;KACF,CAAC;AACJ,CAAC"}
|
package/dist/core/locate.d.ts
CHANGED
|
@@ -43,6 +43,22 @@ export interface RegistryReader {
|
|
|
43
43
|
* This is what `verify` and `archive` use: they run the whole suite anyway, so
|
|
44
44
|
* declining to evaluate one more module buys them nothing. Everywhere else it
|
|
45
45
|
* is the opt-in behaviour behind `--eval`.
|
|
46
|
+
*
|
|
47
|
+
* The exported value is **validated**, not asserted. A module's default export
|
|
48
|
+
* is an `unknown` from the loader's point of view, and calling it a `Registry`
|
|
49
|
+
* because it is an object was a type assertion standing in for a check: a file
|
|
50
|
+
* that exports a plain literal instead of calling `defineRequirements` reached
|
|
51
|
+
* the validator, where `req.statement.matchAll` threw — so `--eval` answered
|
|
52
|
+
* `internal-error` with a raw TypeError for a file the static reader diagnoses
|
|
53
|
+
* with a code and a fix hint, and the static reader's own hint ("pass --eval")
|
|
54
|
+
* pointed straight at that crash. Two readers of one file must not disagree
|
|
55
|
+
* about what is wrong with it (the call `archive` already makes for the delta).
|
|
56
|
+
*
|
|
57
|
+
* Re-parsing costs nothing on the normal path: `defineRequirements` returns
|
|
58
|
+
* what this same schema already produced, so a registry authored the ordinary
|
|
59
|
+
* way parses to itself. What `--eval` buys remains untouched — it is about a
|
|
60
|
+
* registry being *computed* rather than written out, never about it being
|
|
61
|
+
* shaped differently.
|
|
46
62
|
*/
|
|
47
63
|
export declare function evalReader(loader: Loader): RegistryReader;
|
|
48
64
|
/**
|
|
@@ -55,7 +71,8 @@ export declare function staticReader(): RegistryReader;
|
|
|
55
71
|
/**
|
|
56
72
|
* Read and merge every `*.reqs.ts` registry under root, with the given reader.
|
|
57
73
|
* A registry the reader rejects becomes its own ERROR; a duplicate id across
|
|
58
|
-
* files becomes a duplicate-requirement ERROR
|
|
74
|
+
* files becomes a duplicate-requirement ERROR, and two files claiming one id
|
|
75
|
+
* prefix a duplicate-prefix ERROR.
|
|
59
76
|
*
|
|
60
77
|
* Pass `files` to reuse a {@link scanProject} result instead of re-walking.
|
|
61
78
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"locate.d.ts","sourceRoot":"","sources":["../../src/core/locate.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"locate.d.ts","sourceRoot":"","sources":["../../src/core/locate.ts"],"names":[],"mappings":"AAWA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAC1C,OAAO,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAc9D,eAAO,MAAM,UAAU,GAAI,MAAM,MAAM,KAAG,OAAoC,CAAC;AAC/E,eAAO,MAAM,UAAU,GAAI,MAAM,MAAM,KAAG,OAAoC,CAAC;AAE/E;;;;;;;GAOG;AACH,wBAAsB,SAAS,CAC7B,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,GAC/B,OAAO,CAAC,MAAM,EAAE,CAAC,CAiBnB;AAED,oEAAoE;AACpE,MAAM,WAAW,WAAW;IAC1B,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,SAAS,EAAE,MAAM,EAAE,CAAC;CACrB;AAED;;;;;GAKG;AACH,wBAAsB,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC,CASpE;AAED,yEAAyE;AACzE,MAAM,MAAM,WAAW,GACnB;IAAE,QAAQ,EAAE,QAAQ,CAAA;CAAE,GACtB;IAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,MAAM,CAAC,CAAA;CAAE,CAAC;AAEnC;;;;GAIG;AACH,MAAM,WAAW,cAAc;IAC7B,IAAI,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC;CAC7C;AAED;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,wBAAgB,UAAU,CAAC,MAAM,EAAE,MAAM,GAAG,cAAc,CAyCzD;AAOD;;;;;GAKG;AACH,wBAAgB,YAAY,IAAI,cAAc,CAgB7C;AAED;;;;;;;GAOG;AACH,wBAAsB,YAAY,CAChC,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,cAAc,EACtB,KAAK,CAAC,EAAE,MAAM,EAAE,GACf,OAAO,CAAC;IAAE,QAAQ,EAAE,QAAQ,CAAC;IAAC,MAAM,EAAE,KAAK,EAAE,CAAA;CAAE,CAAC,CA+DlD;AAED;;;;;;;;GAQG;AACH,wBAAsB,UAAU,CAC9B,KAAK,EAAE,MAAM,EAAE,EACf,WAAW,EAAE,MAAM,GAClB,OAAO,CAAC,UAAU,CAAC,CASrB;AAED,mGAAmG;AACnG,wBAAsB,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC,CAEzE;AAED,8EAA8E;AAC9E,wBAAsB,gBAAgB,CACpC,IAAI,EAAE,MAAM,EACZ,UAAU,EAAE,MAAM,GACjB,OAAO,CAAC,UAAU,CAAC,CAGrB;AAED,+DAA+D;AAC/D,wBAAsB,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAOrE"}
|
package/dist/core/locate.js
CHANGED
|
@@ -5,6 +5,8 @@ import { basename, join } from 'node:path';
|
|
|
5
5
|
import { relativePath } from './paths.js';
|
|
6
6
|
import { parseSpecFile } from './parser.js';
|
|
7
7
|
import { readRegistrySource } from './static-registry.js';
|
|
8
|
+
import { RegistryValidationError } from './registry.js';
|
|
9
|
+
import { RegistrySchema } from './schema.js';
|
|
8
10
|
import { byCodeUnit } from './order.js';
|
|
9
11
|
// Proposed changes and archived changes are excluded from normal scanning:
|
|
10
12
|
// a change's requirements/specs only count once its gate passes and it is
|
|
@@ -71,6 +73,22 @@ export async function scanProject(root) {
|
|
|
71
73
|
* This is what `verify` and `archive` use: they run the whole suite anyway, so
|
|
72
74
|
* declining to evaluate one more module buys them nothing. Everywhere else it
|
|
73
75
|
* is the opt-in behaviour behind `--eval`.
|
|
76
|
+
*
|
|
77
|
+
* The exported value is **validated**, not asserted. A module's default export
|
|
78
|
+
* is an `unknown` from the loader's point of view, and calling it a `Registry`
|
|
79
|
+
* because it is an object was a type assertion standing in for a check: a file
|
|
80
|
+
* that exports a plain literal instead of calling `defineRequirements` reached
|
|
81
|
+
* the validator, where `req.statement.matchAll` threw — so `--eval` answered
|
|
82
|
+
* `internal-error` with a raw TypeError for a file the static reader diagnoses
|
|
83
|
+
* with a code and a fix hint, and the static reader's own hint ("pass --eval")
|
|
84
|
+
* pointed straight at that crash. Two readers of one file must not disagree
|
|
85
|
+
* about what is wrong with it (the call `archive` already makes for the delta).
|
|
86
|
+
*
|
|
87
|
+
* Re-parsing costs nothing on the normal path: `defineRequirements` returns
|
|
88
|
+
* what this same schema already produced, so a registry authored the ordinary
|
|
89
|
+
* way parses to itself. What `--eval` buys remains untouched — it is about a
|
|
90
|
+
* registry being *computed* rather than written out, never about it being
|
|
91
|
+
* shaped differently.
|
|
74
92
|
*/
|
|
75
93
|
export function evalReader(loader) {
|
|
76
94
|
return {
|
|
@@ -88,8 +106,8 @@ export function evalReader(loader) {
|
|
|
88
106
|
},
|
|
89
107
|
};
|
|
90
108
|
}
|
|
91
|
-
const
|
|
92
|
-
if (!
|
|
109
|
+
const exported = isRecord(mod) ? mod['default'] : undefined;
|
|
110
|
+
if (!exported || typeof exported !== 'object') {
|
|
93
111
|
return {
|
|
94
112
|
issue: {
|
|
95
113
|
level: 'ERROR',
|
|
@@ -98,10 +116,27 @@ export function evalReader(loader) {
|
|
|
98
116
|
},
|
|
99
117
|
};
|
|
100
118
|
}
|
|
101
|
-
|
|
119
|
+
const parsed = RegistrySchema.safeParse(exported);
|
|
120
|
+
if (!parsed.success) {
|
|
121
|
+
// The same code, the same prefix and the same rendering of the field
|
|
122
|
+
// errors as `readRegistrySource` — going through RegistryValidationError
|
|
123
|
+
// keeps the message identical rather than merely similar.
|
|
124
|
+
return {
|
|
125
|
+
issue: {
|
|
126
|
+
level: 'ERROR',
|
|
127
|
+
code: 'registry-invalid',
|
|
128
|
+
message: `Failed to load registry: ${new RegistryValidationError(parsed.error.issues).message}`,
|
|
129
|
+
},
|
|
130
|
+
};
|
|
131
|
+
}
|
|
132
|
+
return { registry: parsed.data };
|
|
102
133
|
},
|
|
103
134
|
};
|
|
104
135
|
}
|
|
136
|
+
/** A loaded module namespace, before anything is claimed about its exports. */
|
|
137
|
+
function isRecord(value) {
|
|
138
|
+
return typeof value === 'object' && value !== null;
|
|
139
|
+
}
|
|
105
140
|
/**
|
|
106
141
|
* Read registries from the AST, without running a line of the project.
|
|
107
142
|
*
|
|
@@ -129,7 +164,8 @@ export function staticReader() {
|
|
|
129
164
|
/**
|
|
130
165
|
* Read and merge every `*.reqs.ts` registry under root, with the given reader.
|
|
131
166
|
* A registry the reader rejects becomes its own ERROR; a duplicate id across
|
|
132
|
-
* files becomes a duplicate-requirement ERROR
|
|
167
|
+
* files becomes a duplicate-requirement ERROR, and two files claiming one id
|
|
168
|
+
* prefix a duplicate-prefix ERROR.
|
|
133
169
|
*
|
|
134
170
|
* Pass `files` to reuse a {@link scanProject} result instead of re-walking.
|
|
135
171
|
*/
|
|
@@ -140,6 +176,13 @@ export async function loadRegistry(root, reader, files) {
|
|
|
140
176
|
const loaded = await Promise.all(paths.map(async (file) => ({ file, outcome: await reader.read(file) })));
|
|
141
177
|
const registry = {};
|
|
142
178
|
const issues = [];
|
|
179
|
+
// Which file first claimed each id prefix. The prefix is the only unit above
|
|
180
|
+
// the requirement (design §11) and nothing allocates it, so two files
|
|
181
|
+
// claiming one is the collision no command would otherwise report — the ids
|
|
182
|
+
// themselves can stay distinct forever while the space they share has two
|
|
183
|
+
// owners. First seen in sorted file order, so which file is called the owner
|
|
184
|
+
// does not depend on I/O timing.
|
|
185
|
+
const prefixOwner = new Map();
|
|
143
186
|
for (const entry of loaded) {
|
|
144
187
|
const display = relativePath(root, entry.file);
|
|
145
188
|
const { outcome } = entry;
|
|
@@ -147,7 +190,28 @@ export async function loadRegistry(root, reader, files) {
|
|
|
147
190
|
issues.push({ ...outcome.issue, file: display });
|
|
148
191
|
continue;
|
|
149
192
|
}
|
|
193
|
+
// One issue per colliding prefix rather than per requirement: the fact is
|
|
194
|
+
// about the pair of files, and a registry holding forty ids under a taken
|
|
195
|
+
// prefix would otherwise report the same sentence forty times.
|
|
196
|
+
const reported = new Set();
|
|
150
197
|
for (const [id, req] of Object.entries(outcome.registry)) {
|
|
198
|
+
const dash = id.indexOf('-');
|
|
199
|
+
const prefix = dash === -1 ? id : id.slice(0, dash);
|
|
200
|
+
const owner = prefixOwner.get(prefix);
|
|
201
|
+
if (owner === undefined) {
|
|
202
|
+
prefixOwner.set(prefix, display);
|
|
203
|
+
}
|
|
204
|
+
else if (owner !== display && !reported.has(prefix)) {
|
|
205
|
+
reported.add(prefix);
|
|
206
|
+
// No `reqId`: this is about two files, not about any one of the
|
|
207
|
+
// requirements that happen to reveal it.
|
|
208
|
+
issues.push({
|
|
209
|
+
level: 'ERROR',
|
|
210
|
+
code: 'duplicate-prefix',
|
|
211
|
+
file: display,
|
|
212
|
+
message: `Id prefix "${prefix}-" is already declared by "${owner}". Give each registry file a prefix of its own.`,
|
|
213
|
+
});
|
|
214
|
+
}
|
|
151
215
|
if (Object.hasOwn(registry, id)) {
|
|
152
216
|
issues.push({
|
|
153
217
|
level: 'ERROR',
|
package/dist/core/locate.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"locate.js","sourceRoot":"","sources":["../../src/core/locate.ts"],"names":[],"mappings":"AAAA,8EAA8E;AAC9E,0EAA0E;AAE1E,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AACrD,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAC3C,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAC1C,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAC1D,OAAO,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAIxC,2EAA2E;AAC3E,0EAA0E;AAC1E,4EAA4E;AAC5E,MAAM,SAAS,GAAG,IAAI,GAAG,CAAC;IACxB,cAAc;IACd,MAAM;IACN,MAAM;IACN,UAAU;IACV,SAAS;IACT,SAAS;CACV,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,UAAU,GAAG,CAAC,IAAY,EAAW,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC;AAC/E,MAAM,CAAC,MAAM,UAAU,GAAG,CAAC,IAAY,EAAW,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC;AAE/E;;;;;;;GAOG;AACH,MAAM,CAAC,KAAK,UAAU,SAAS,CAC7B,IAAY,EACZ,KAAgC;IAEhC,MAAM,GAAG,GAAa,EAAE,CAAC;IACzB,MAAM,IAAI,GAAG,KAAK,EAAE,GAAW,EAAiB,EAAE;QAChD,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,GAAG,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC;QAC5D,MAAM,OAAO,GAAa,EAAE,CAAC;QAC7B,KAAK,MAAM,CAAC,IAAI,OAAO,EAAE,CAAC;YACxB,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC;YAC/B,IAAI,CAAC,CAAC,WAAW,EAAE,EAAE,CAAC;gBACpB,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC;oBAAE,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACjD,CAAC;iBAAM,IAAI,CAAC,CAAC,MAAM,EAAE,IAAI,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC;gBACvC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACjB,CAAC;QACH,CAAC;QACD,MAAM,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC;IACvC,CAAC,CAAC;IACF,MAAM,IAAI,CAAC,IAAI,CAAC,CAAC;IACjB,OAAO,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;AAC9B,CAAC;AAQD;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,WAAW,CAAC,IAAY;IAC5C,MAAM,KAAK,GAAG,MAAM,SAAS,CAAC,IAAI,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC;IAC3E,MAAM,SAAS,GAAa,EAAE,CAAC;IAC/B,MAAM,SAAS,GAAa,EAAE,CAAC;IAC/B,KAAK,MAAM,CAAC,IAAI,KAAK,EAAE,CAAC;QACtB,IAAI,UAAU,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;YAAE,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;;YAC1C,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACzB,CAAC;IACD,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,CAAC;AAClC,CAAC;AAgBD
|
|
1
|
+
{"version":3,"file":"locate.js","sourceRoot":"","sources":["../../src/core/locate.ts"],"names":[],"mappings":"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"}
|
package/dist/core/pipeline.d.ts
CHANGED
|
@@ -11,8 +11,17 @@ import type { Issue } from './types.js';
|
|
|
11
11
|
* way back for a project whose registry is not a literal.
|
|
12
12
|
*/
|
|
13
13
|
export interface ReadOptions {
|
|
14
|
-
/**
|
|
15
|
-
|
|
14
|
+
/**
|
|
15
|
+
* Read the registry by executing each `*.reqs.ts` (CLI: `--eval`).
|
|
16
|
+
*
|
|
17
|
+
* Explicitly `| undefined` under `exactOptionalPropertyTypes`: this is an
|
|
18
|
+
* options bag, and a caller forwarding a flag it did not receive is saying
|
|
19
|
+
* "unspecified", which is what the absent property already means. The
|
|
20
|
+
* exactness that matters is on the *data* shapes — an `Issue` or a
|
|
21
|
+
* `JsonReport` must never carry a key whose value is `undefined` — and those
|
|
22
|
+
* stay exact.
|
|
23
|
+
*/
|
|
24
|
+
evaluate?: boolean | undefined;
|
|
16
25
|
}
|
|
17
26
|
/** Static structural check (design §9: `attest check`). */
|
|
18
27
|
export declare function runCheck(root: string, options?: ReadOptions): Promise<Issue[]>;
|
|
@@ -36,7 +45,7 @@ export interface VerifyResult {
|
|
|
36
45
|
/** Options common to the commands that start a child Vitest run. */
|
|
37
46
|
export interface RunOptions {
|
|
38
47
|
/** Absolute path to a Vitest config to load (see {@link runAndCollect}). */
|
|
39
|
-
vitestConfig?: string;
|
|
48
|
+
vitestConfig?: string | undefined;
|
|
40
49
|
}
|
|
41
50
|
/** Executable verification (design §9: `attest verify`). */
|
|
42
51
|
export declare function runVerify(root: string, options?: RunOptions): Promise<VerifyResult>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pipeline.d.ts","sourceRoot":"","sources":["../../src/core/pipeline.ts"],"names":[],"mappings":"AAmBA,OAAO,KAAK,EAAE,eAAe,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAG9D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAehD,OAAO,KAAK,EAAc,KAAK,EAAqB,MAAM,YAAY,CAAC;AAEvE;;;;;;;;GAQG;AACH,MAAM,WAAW,WAAW;IAC1B
|
|
1
|
+
{"version":3,"file":"pipeline.d.ts","sourceRoot":"","sources":["../../src/core/pipeline.ts"],"names":[],"mappings":"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"}
|
package/dist/core/pipeline.js
CHANGED
|
@@ -241,7 +241,19 @@ export function changeExcludeGlobs(others) {
|
|
|
241
241
|
return others.map((n) => `**/changes/${escapeGlob(n)}/**`);
|
|
242
242
|
}
|
|
243
243
|
function escapeGlob(name) {
|
|
244
|
-
|
|
244
|
+
// The backslash comes first, and it is the one that matters most: it is
|
|
245
|
+
// glob's own escape character, so a name containing one is not merely
|
|
246
|
+
// unescaped, it silently rewrites the pattern around it. On POSIX a
|
|
247
|
+
// backslash is a legal filename character, so `changes/a\b` produced the
|
|
248
|
+
// exclude glob `**/changes/a\b/**`, which globbing reads as an escaped `b` —
|
|
249
|
+
// matching `ab`, never the directory itself. That sibling's specs then
|
|
250
|
+
// joined the gate run, quietly widening the scope of the one check that
|
|
251
|
+
// decides whether a change is done.
|
|
252
|
+
//
|
|
253
|
+
// Escaped rather than rejected, because these names are not the change name
|
|
254
|
+
// the guard above screens: they come from `readdir`, and a directory that
|
|
255
|
+
// exists is not ours to refuse.
|
|
256
|
+
return name.replace(/[\\*?[\]{}()!+@|^$]/g, '\\$&');
|
|
245
257
|
}
|
|
246
258
|
/** The delta a change is declared in (design §7). */
|
|
247
259
|
const CHANGE_DELTA_FILE = 'requirements.delta.ts';
|
|
@@ -364,6 +376,15 @@ export async function runArchive(root, changeName, options = {}) {
|
|
|
364
376
|
let delta;
|
|
365
377
|
try {
|
|
366
378
|
const mod = await loader.load(deltaPath);
|
|
379
|
+
// The same check `readDelta` makes, for the same file. Without it a delta
|
|
380
|
+
// file that loads but exports nothing reached `applyDelta` as `undefined`,
|
|
381
|
+
// where `d.renamed ?? []` threw a TypeError — so `archive` answered
|
|
382
|
+
// `internal-error` for a file `status` already diagnoses as
|
|
383
|
+
// `change-not-found`, and the fix hint went with it. Two commands reading
|
|
384
|
+
// one file must not disagree about what is wrong with it.
|
|
385
|
+
if (!mod.default || typeof mod.default !== 'object') {
|
|
386
|
+
throw new Error(`${CHANGE_DELTA_FILE} must default-export the result of delta(...).`);
|
|
387
|
+
}
|
|
367
388
|
delta = mod.default;
|
|
368
389
|
}
|
|
369
390
|
catch (err) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pipeline.js","sourceRoot":"","sources":["../../src/core/pipeline.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"pipeline.js","sourceRoot":"","sources":["../../src/core/pipeline.ts"],"names":[],"mappings":"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"}
|
|
@@ -17,6 +17,12 @@ export type RedRecord = Record<string, Record<string, Outcome>>;
|
|
|
17
17
|
* record, never an error: the first stage-1 run legitimately finds nothing, and
|
|
18
18
|
* a corrupt file must not be more permissive than a missing one — with an empty
|
|
19
19
|
* record every obligation is "never observed", which the gate blocks on.
|
|
20
|
+
*
|
|
21
|
+
* A file whose `firstRun` does not validate is discarded whole rather than
|
|
22
|
+
* per-entry, which is the same "as strict as a missing file" rule one step
|
|
23
|
+
* further: the cost is a stage-1 run to re-observe, and the alternative — keeping
|
|
24
|
+
* the entries that happened to parse — reports a partial history as if it were
|
|
25
|
+
* the whole one.
|
|
20
26
|
*/
|
|
21
27
|
export declare function readRedRecord(root: string, changeName: string): Promise<RedRecord>;
|
|
22
28
|
/** What the record says about one scenario, or undefined if it never saw it. */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"red-record.d.ts","sourceRoot":"","sources":["../../src/core/red-record.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"red-record.d.ts","sourceRoot":"","sources":["../../src/core/red-record.ts"],"names":[],"mappings":"AAiDA,OAAO,KAAK,EAAE,UAAU,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAGjE,4DAA4D;AAC5D,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,MAAM,CAEtE;AAED,iFAAiF;AACjF,eAAO,MAAM,eAAe,mBAAmB,CAAC;AAEhD;;;;;;;GAOG;AACH,MAAM,MAAM,SAAS,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;AA8BhE;;;;;;;;;;;GAWG;AACH,wBAAsB,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,CAAC,CAkBxF;AAED,gFAAgF;AAChF,wBAAgB,eAAe,CAC7B,MAAM,EAAE,SAAS,EACjB,KAAK,EAAE,MAAM,EACb,QAAQ,EAAE,MAAM,GACf,OAAO,GAAG,SAAS,CAErB;AAED;;;;;;;;GAQG;AACH,wBAAgB,cAAc,CAAC,MAAM,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAE1F;AAED;;;;;;;;;GASG;AACH,wBAAgB,cAAc,CAC5B,QAAQ,EAAE,SAAS,EACnB,IAAI,EAAE,UAAU,EAChB,GAAG,EAAE,SAAS,EACd,QAAQ,EAAE,SAAS,MAAM,EAAE,GAC1B;IAAE,MAAM,EAAE,SAAS,CAAC;IAAC,OAAO,EAAE,OAAO,CAAA;CAAE,CAmCzC;AAED,wFAAwF;AACxF,wBAAgB,kBAAkB,CAAC,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,GAAG,MAAM,CAGhF"}
|
package/dist/core/red-record.js
CHANGED
|
@@ -45,6 +45,7 @@
|
|
|
45
45
|
// because the only way to produce one is for the scenario to actually fail.
|
|
46
46
|
import { readFile } from 'node:fs/promises';
|
|
47
47
|
import { join } from 'node:path';
|
|
48
|
+
import { z } from 'zod';
|
|
48
49
|
import { byCodeUnit } from './order.js';
|
|
49
50
|
/** Where the record lives, relative to the project root. */
|
|
50
51
|
export function redRecordPath(root, changeName) {
|
|
@@ -52,11 +53,33 @@ export function redRecordPath(root, changeName) {
|
|
|
52
53
|
}
|
|
53
54
|
/** The file name, exported so a diagnostic can name it without rebuilding it. */
|
|
54
55
|
export const RED_RECORD_FILE = 'first-run.json';
|
|
56
|
+
/**
|
|
57
|
+
* The record as it is allowed to come back off disk.
|
|
58
|
+
*
|
|
59
|
+
* The values are the two `Outcome`s and nothing else. Reading the file used to
|
|
60
|
+
* be `JSON.parse(raw) as RedRecordFile` followed by an "is it an object" probe
|
|
61
|
+
* declared as `value is RedRecord` — a type predicate that checked the
|
|
62
|
+
* container and asserted the contents. A hand-edited or half-written file then
|
|
63
|
+
* put an arbitrary string where an `Outcome` is declared, and it travelled: out
|
|
64
|
+
* through `StatusRow.scenarios[].firstRun`, whose type says `Outcome | null`,
|
|
65
|
+
* into the `--json` contract, and into a human row whose hint counted it as
|
|
66
|
+
* neither `pass` nor never-run and so rendered blank.
|
|
67
|
+
*
|
|
68
|
+
* The gate was never at risk — `hasRecordedRed` compares against `'fail'`, so an
|
|
69
|
+
* unrecognised value blocks exactly like a missing one. This closes the report.
|
|
70
|
+
*/
|
|
71
|
+
const RedRecordSchema = z.record(z.string(), z.record(z.string(), z.enum(['pass', 'fail'])));
|
|
55
72
|
/**
|
|
56
73
|
* Read the record for a change. A missing or unreadable file is an empty
|
|
57
74
|
* record, never an error: the first stage-1 run legitimately finds nothing, and
|
|
58
75
|
* a corrupt file must not be more permissive than a missing one — with an empty
|
|
59
76
|
* record every obligation is "never observed", which the gate blocks on.
|
|
77
|
+
*
|
|
78
|
+
* A file whose `firstRun` does not validate is discarded whole rather than
|
|
79
|
+
* per-entry, which is the same "as strict as a missing file" rule one step
|
|
80
|
+
* further: the cost is a stage-1 run to re-observe, and the alternative — keeping
|
|
81
|
+
* the entries that happened to parse — reports a partial history as if it were
|
|
82
|
+
* the whole one.
|
|
60
83
|
*/
|
|
61
84
|
export async function readRedRecord(root, changeName) {
|
|
62
85
|
let raw;
|
|
@@ -66,13 +89,18 @@ export async function readRedRecord(root, changeName) {
|
|
|
66
89
|
catch {
|
|
67
90
|
return {};
|
|
68
91
|
}
|
|
92
|
+
let parsed;
|
|
69
93
|
try {
|
|
70
|
-
|
|
71
|
-
return isRecord(parsed?.firstRun) ? parsed.firstRun : {};
|
|
94
|
+
parsed = JSON.parse(raw);
|
|
72
95
|
}
|
|
73
96
|
catch {
|
|
74
97
|
return {};
|
|
75
98
|
}
|
|
99
|
+
// `JSON.parse` yields `any`; nothing about the file is known until the schema
|
|
100
|
+
// says so, including whether it is an object at all (`JSON.parse('null')`).
|
|
101
|
+
const firstRun = isRecord(parsed) ? parsed['firstRun'] : undefined;
|
|
102
|
+
const result = RedRecordSchema.safeParse(firstRun);
|
|
103
|
+
return result.success ? result.data : {};
|
|
76
104
|
}
|
|
77
105
|
/** What the record says about one scenario, or undefined if it never saw it. */
|
|
78
106
|
export function recordedOutcome(record, reqId, scenario) {
|
|
@@ -142,6 +170,7 @@ export function serialiseRedRecord(changeName, record) {
|
|
|
142
170
|
const file = { version: 1, change: changeName, firstRun: record };
|
|
143
171
|
return `${JSON.stringify(file, null, 2)}\n`;
|
|
144
172
|
}
|
|
173
|
+
/** Container check only — what is *in* it is the schema's business, not this. */
|
|
145
174
|
function isRecord(value) {
|
|
146
175
|
return typeof value === 'object' && value !== null && !Array.isArray(value);
|
|
147
176
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"red-record.js","sourceRoot":"","sources":["../../src/core/red-record.ts"],"names":[],"mappings":"AAAA,+EAA+E;AAC/E,sBAAsB;AACtB,EAAE;AACF,+EAA+E;AAC/E,8EAA8E;AAC9E,iFAAiF;AACjF,6EAA6E;AAC7E,iFAAiF;AACjF,uCAAuC;AACvC,EAAE;AACF,6EAA6E;AAC7E,6EAA6E;AAC7E,gFAAgF;AAChF,mBAAmB;AACnB,EAAE;AACF,iFAAiF;AACjF,8EAA8E;AAC9E,+EAA+E;AAC/E,iFAAiF;AACjF,gFAAgF;AAChF,+EAA+E;AAC/E,gFAAgF;AAChF,oBAAoB;AACpB,EAAE;AACF,8EAA8E;AAC9E,iFAAiF;AACjF,8EAA8E;AAC9E,2BAA2B;AAC3B,EAAE;AACF,8EAA8E;AAC9E,uEAAuE;AACvE,EAAE;AACF,4EAA4E;AAC5E,+EAA+E;AAC/E,4EAA4E;AAC5E,+EAA+E;AAC/E,EAAE;AACF,6EAA6E;AAC7E,8EAA8E;AAC9E,+EAA+E;AAC/E,0EAA0E;AAC1E,4EAA4E;AAC5E,gFAAgF;AAChF,8EAA8E;AAC9E,4EAA4E;AAE5E,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC5C,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"red-record.js","sourceRoot":"","sources":["../../src/core/red-record.ts"],"names":[],"mappings":"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"}
|
package/dist/core/runner.d.ts
CHANGED
|
@@ -17,7 +17,7 @@ export interface RunAndCollectOptions {
|
|
|
17
17
|
* DOM, path aliases — cannot be specified without one. Omitted by default so
|
|
18
18
|
* the run stays isolated and deterministic.
|
|
19
19
|
*/
|
|
20
|
-
vitestConfig?: string;
|
|
20
|
+
vitestConfig?: string | undefined;
|
|
21
21
|
}
|
|
22
22
|
/** The option object handed to `startVitest`. Kept separate so its shaping — in
|
|
23
23
|
* particular the config-vs-isolation precedence — is testable without a run. */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"runner.d.ts","sourceRoot":"","sources":["../../src/core/runner.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAE1C,OAAO,KAAK,EAAW,SAAS,EAAE,MAAM,YAAY,CAAC;AAQrD,MAAM,WAAW,oBAAoB;IACnC,sEAAsE;IACtE,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,6CAA6C;IAC7C,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB,kFAAkF;IAClF,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,oDAAoD;IACpD,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB,yEAAyE;IACzE,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB;;;;;OAKG;IACH,YAAY,CAAC,EAAE,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"runner.d.ts","sourceRoot":"","sources":["../../src/core/runner.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAE1C,OAAO,KAAK,EAAW,SAAS,EAAE,MAAM,YAAY,CAAC;AAQrD,MAAM,WAAW,oBAAoB;IACnC,sEAAsE;IACtE,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,6CAA6C;IAC7C,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB,kFAAkF;IAClF,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,oDAAoD;IACpD,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB,yEAAyE;IACzE,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB;;;;;OAKG;IACH,YAAY,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CACnC;AAED;gFACgF;AAChF,KAAK,aAAa,GAAG,WAAW,CAAC,UAAU,CAAC,OAAO,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAEpE;;;;;;GAMG;AACH,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,oBAAoB,GAAG,aAAa,CAkB/E;AAED,wBAAsB,aAAa,CACjC,OAAO,GAAE,oBAAyB,GACjC,OAAO,CAAC,SAAS,CAAC,CAsDpB"}
|
package/dist/core/runner.js
CHANGED
|
@@ -18,7 +18,10 @@ const DEFAULT_EXCLUDE = [...configDefaults.exclude, '**/changes/**', '**/archive
|
|
|
18
18
|
export function buildVitestOptions(options) {
|
|
19
19
|
return {
|
|
20
20
|
watch: false,
|
|
21
|
-
|
|
21
|
+
// Omitted rather than passed as `undefined`: Vitest's own option type is
|
|
22
|
+
// exact about it, and "no root" is the absent key, not a present one
|
|
23
|
+
// holding nothing. Same spread idiom the Issue builders use for `line`.
|
|
24
|
+
...(options.root === undefined ? {} : { root: options.root }),
|
|
22
25
|
include: options.include ?? ['**/*.spec.ts'],
|
|
23
26
|
exclude: options.exclude ?? DEFAULT_EXCLUDE,
|
|
24
27
|
config: options.vitestConfig ?? false,
|
|
@@ -32,10 +35,12 @@ export function buildVitestOptions(options) {
|
|
|
32
35
|
};
|
|
33
36
|
}
|
|
34
37
|
export async function runAndCollect(options = {}) {
|
|
38
|
+
// No `if (!vitest)` guard: `startVitest` is declared `Promise<Vitest>`, so the
|
|
39
|
+
// check was dead — vestigial from an older Vitest that returned `undefined`.
|
|
40
|
+
// The compiler is the better guard anyway: were the signature to go nullable
|
|
41
|
+
// again, every `vitest.` below stops compiling, which is louder than a runtime
|
|
42
|
+
// throw and arrives before the release rather than during a run.
|
|
35
43
|
const vitest = await startVitest('test', options.filters ?? [], buildVitestOptions(options));
|
|
36
|
-
if (!vitest) {
|
|
37
|
-
throw new Error('runAndCollect: failed to start Vitest.');
|
|
38
|
-
}
|
|
39
44
|
try {
|
|
40
45
|
const runtimeCoverage = new Map();
|
|
41
46
|
const outcomes = new Map();
|
|
@@ -67,9 +72,19 @@ export async function runAndCollect(options = {}) {
|
|
|
67
72
|
for (const c of task.tasks ?? [])
|
|
68
73
|
walk(c);
|
|
69
74
|
};
|
|
75
|
+
// Assigned, never cast. `TaskLike` is the narrow view this walk needs, and
|
|
76
|
+
// Vitest's `File` satisfies it structurally — so the compiler is the thing
|
|
77
|
+
// that notices if the task tree ever stops having a `type`, a `name` or a
|
|
78
|
+
// `result.state`. An `as unknown as` here bought nothing and blinded it to
|
|
79
|
+
// exactly the change that would silently empty the runtime coverage.
|
|
70
80
|
for (const file of vitest.state.getFiles())
|
|
71
81
|
walk(file);
|
|
72
|
-
|
|
82
|
+
// No optional call and no `?? 0` default: `getCountOfFailedTests` is a
|
|
83
|
+
// required method on Vitest's state, so the guard was dead at the type
|
|
84
|
+
// level — and had it ever become live it defaulted the wrong way, reading a
|
|
85
|
+
// missing API as zero failures and turning a red suite green. This is the
|
|
86
|
+
// one boolean in the engine that must never fail open.
|
|
87
|
+
const passed = vitest.state.getCountOfFailedTests() === 0;
|
|
73
88
|
return { passed, runtimeCoverage, outcomes };
|
|
74
89
|
}
|
|
75
90
|
finally {
|
package/dist/core/runner.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"runner.js","sourceRoot":"","sources":["../../src/core/runner.ts"],"names":[],"mappings":"AAAA,+EAA+E;AAC/E,8EAA8E;AAC9E,4EAA4E;AAC5E,qEAAqE;AAErE,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC1C,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAG/C,mFAAmF;AACnF,MAAM,SAAS,GAAG,YAAY,CAAC;AAE/B,kFAAkF;AAClF,MAAM,eAAe,GAAG,CAAC,GAAG,cAAc,CAAC,OAAO,EAAE,eAAe,EAAE,eAAe,CAAC,CAAC;AA0BtF;;;;;;GAMG;AACH,MAAM,UAAU,kBAAkB,CAAC,OAA6B;IAC9D,OAAO;QACL,KAAK,EAAE,KAAK;QACZ,IAAI,EAAE,OAAO,CAAC,IAAI;
|
|
1
|
+
{"version":3,"file":"runner.js","sourceRoot":"","sources":["../../src/core/runner.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"static-registry.d.ts","sourceRoot":"","sources":["../../src/core/static-registry.ts"],"names":[],"mappings":"AAyBA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AACnD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAE3C,mFAAmF;AACnF,MAAM,MAAM,cAAc,GAAG,kBAAkB,GAAG,qBAAqB,GAAG,qBAAqB,CAAC;AAEhG,MAAM,MAAM,gBAAgB,GACxB;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,QAAQ,EAAE,QAAQ,CAAA;CAAE,GAChC;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,IAAI,EAAE,cAAc,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC;AAkGxE,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,gBAAgB,CAqBjF;AAED,kFAAkF;AAClF,MAAM,MAAM,aAAa,GAAG,kBAAkB,GAAG,qBAAqB,CAAC;AAEvE,MAAM,MAAM,eAAe,GACvB;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,KAAK,EAAE,aAAa,CAAA;CAAE,GAClC;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,IAAI,EAAE,aAAa,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC;AAEvE;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,eAAe,
|
|
1
|
+
{"version":3,"file":"static-registry.d.ts","sourceRoot":"","sources":["../../src/core/static-registry.ts"],"names":[],"mappings":"AAyBA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AACnD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAE3C,mFAAmF;AACnF,MAAM,MAAM,cAAc,GAAG,kBAAkB,GAAG,qBAAqB,GAAG,qBAAqB,CAAC;AAEhG,MAAM,MAAM,gBAAgB,GACxB;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,QAAQ,EAAE,QAAQ,CAAA;CAAE,GAChC;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,IAAI,EAAE,cAAc,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC;AAkGxE,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,gBAAgB,CAqBjF;AAED,kFAAkF;AAClF,MAAM,MAAM,aAAa,GAAG,kBAAkB,GAAG,qBAAqB,CAAC;AAEvE,MAAM,MAAM,eAAe,GACvB;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,KAAK,EAAE,aAAa,CAAA;CAAE,GAClC;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,IAAI,EAAE,aAAa,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC;AAEvE;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,eAAe,CAsB7E"}
|
|
@@ -137,6 +137,11 @@ export function readDeltaSource(file, source) {
|
|
|
137
137
|
message: `A delta file must default-export the result of ${DELTA}({ … }).`,
|
|
138
138
|
};
|
|
139
139
|
}
|
|
140
|
+
// No assertion: every field of a delta is optional, so the narrowed `object`
|
|
141
|
+
// is already assignable. Writing `as RegistryDelta` claimed a check this
|
|
142
|
+
// function deliberately does not make (see the note above on why a delta is
|
|
143
|
+
// not schema-validated here), which is the worst thing an assertion can do —
|
|
144
|
+
// look like verification.
|
|
140
145
|
return { ok: true, delta: value };
|
|
141
146
|
}
|
|
142
147
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"static-registry.js","sourceRoot":"","sources":["../../src/core/static-registry.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"static-registry.js","sourceRoot":"","sources":["../../src/core/static-registry.ts"],"names":[],"mappings":"AAAA,4EAA4E;AAC5E,qEAAqE;AACrE,EAAE;AACF,+EAA+E;AAC/E,+EAA+E;AAC/E,iFAAiF;AACjF,iFAAiF;AACjF,4EAA4E;AAC5E,2EAA2E;AAC3E,EAAE;AACF,+EAA+E;AAC/E,8EAA8E;AAC9E,4EAA4E;AAC5E,kBAAkB;AAClB,EAAE;AACF,iFAAiF;AACjF,iFAAiF;AACjF,uEAAuE;AACvE,iFAAiF;AACjF,+EAA+E;AAC/E,8EAA8E;AAE9E,OAAO,EAAE,MAAM,YAAY,CAAC;AAC5B,OAAO,EAAE,uBAAuB,EAAE,MAAM,eAAe,CAAC;AACxD,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAW7C,gFAAgF;AAChF,MAAM,MAAM,GAAG,oBAAoB,CAAC;AAEpC,wEAAwE;AACxE,MAAM,KAAK,GAAG,OAAO,CAAC;AAEtB,4EAA4E;AAC5E,MAAM,SAAU,SAAQ,KAAK;IAEhB;IACA;IAFX,YACW,IAAa,EACb,MAAc;QAEvB,KAAK,CAAC,MAAM,CAAC,CAAC;QAHL,SAAI,GAAJ,IAAI,CAAS;QACb,WAAM,GAAN,MAAM,CAAQ;IAGzB,CAAC;CACF;AAaD;;;;;;;GAOG;AACH,SAAS,oBAAoB,CAC3B,IAAY,EACZ,MAAc,EACd,EAAU,EACV,IAAY;IAEZ,MAAM,EAAE,GAAG,EAAE,CAAC,gBAAgB,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,CAAC,YAAY,CAAC,MAAM,EAAE,oBAAoB,CAAC,IAAI,CAAC,CAAC;IAChG,MAAM,MAAM,GAAG,CAAC,IAAa,EAAU,EAAE,CACvC,EAAE,CAAC,6BAA6B,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC;IAE/D,MAAM,QAAQ,GAAG,uBAAuB,CAAC,EAAE,CAAC,CAAC;IAC7C,IAAI,CAAC,QAAQ,EAAE,CAAC;QACd,2EAA2E;QAC3E,2CAA2C;QAC3C,OAAO;YACL,EAAE,EAAE,KAAK;YACT,MAAM,EAAE,YAAY;YACpB,OAAO,EAAE,KAAK,IAAI,2CAA2C,EAAE,QAAQ;SACxE,CAAC;IACJ,CAAC;IAED,MAAM,IAAI,GAAG,aAAa,CAAC,QAAQ,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;IAC7C,IAAI,CAAC,IAAI,EAAE,CAAC;QACV,OAAO;YACL,EAAE,EAAE,KAAK;YACT,MAAM,EAAE,YAAY;YACpB,OAAO,EACL,KAAK,IAAI,+EAA+E,EAAE,gBAAgB;gBAC1G,uDAAuD,IAAI,oDAAoD;YACjH,IAAI,EAAE,MAAM,CAAC,QAAQ,CAAC;SACvB,CAAC;IACJ,CAAC;IAED,IAAI,CAAC;QACH,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,YAAY,CAAC,IAAI,CAAC,EAAE,CAAC;IACjD,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,IAAI,CAAC,CAAC,GAAG,YAAY,SAAS,CAAC;YAAE,MAAM,GAAG,CAAC;QAC3C,OAAO;YACL,EAAE,EAAE,KAAK;YACT,MAAM,EAAE,YAAY;YACpB,OAAO,EACL,KAAK,IAAI,uBAAuB,GAAG,CAAC,MAAM,4CAA4C;gBACtF,sDAAsD,IAAI,yBAAyB;YACrF,IAAI,EAAE,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC;SACvB,CAAC;IACJ,CAAC;AACH,CAAC;AAED,8EAA8E;AAC9E,SAAS,OAAO,CACd,SAAoC,EACpC,IAAO;IAEP,OAAO;QACL,EAAE,EAAE,KAAK;QACT,IAAI;QACJ,OAAO,EAAE,SAAS,CAAC,OAAO;QAC1B,GAAG,CAAC,SAAS,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,SAAS,CAAC,IAAI,EAAE,CAAC;KAClE,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,kBAAkB,CAAC,IAAY,EAAE,MAAc;IAC7D,MAAM,SAAS,GAAG,oBAAoB,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,UAAU,CAAC,CAAC;IACzE,IAAI,CAAC,SAAS,CAAC,EAAE,EAAE,CAAC;QAClB,OAAO,OAAO,CACZ,SAAS,EACT,SAAS,CAAC,MAAM,KAAK,YAAY,CAAC,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,qBAAqB,CAClF,CAAC;IACJ,CAAC;IAED,MAAM,MAAM,GAAG,cAAc,CAAC,SAAS,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;IACzD,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;QACpB,2EAA2E;QAC3E,2EAA2E;QAC3E,kBAAkB;QAClB,OAAO;YACL,EAAE,EAAE,KAAK;YACT,IAAI,EAAE,kBAAkB;YACxB,OAAO,EAAE,4BAA4B,IAAI,uBAAuB,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,OAAO,EAAE;SAChG,CAAC;IACJ,CAAC;IACD,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,CAAC,IAAI,EAAE,CAAC;AAC7C,CAAC;AASD;;;;;;;;;;;;;;GAcG;AACH,MAAM,UAAU,eAAe,CAAC,IAAY,EAAE,MAAc;IAC1D,MAAM,SAAS,GAAG,oBAAoB,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,CAAC,CAAC;IACrE,IAAI,CAAC,SAAS,CAAC,EAAE,EAAE,CAAC;QAClB,OAAO,OAAO,CACZ,SAAS,EACT,SAAS,CAAC,MAAM,KAAK,YAAY,CAAC,CAAC,CAAC,kBAAkB,CAAC,CAAC,CAAC,qBAAqB,CAC/E,CAAC;IACJ,CAAC;IACD,MAAM,KAAK,GAAG,SAAS,CAAC,KAAK,CAAC;IAC9B,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QACxE,OAAO;YACL,EAAE,EAAE,KAAK;YACT,IAAI,EAAE,kBAAkB;YACxB,OAAO,EAAE,kDAAkD,KAAK,UAAU;SAC3E,CAAC;IACJ,CAAC;IACD,6EAA6E;IAC7E,yEAAyE;IACzE,4EAA4E;IAC5E,6EAA6E;IAC7E,0BAA0B;IAC1B,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC;AACpC,CAAC;AAED;;;;;;GAMG;AACH,SAAS,uBAAuB,CAAC,EAAiB;IAChD,KAAK,MAAM,SAAS,IAAI,EAAE,CAAC,UAAU,EAAE,CAAC;QACtC,IAAI,CAAC,EAAE,CAAC,kBAAkB,CAAC,SAAS,CAAC,IAAI,SAAS,CAAC,cAAc;YAAE,SAAS;QAC5E,MAAM,IAAI,GAAG,MAAM,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC;QAC1C,IAAI,CAAC,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC;YAAE,OAAO,IAAI,CAAC;QACxC,OAAO,gBAAgB,CAAC,EAAE,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC;IACjD,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,gFAAgF;AAChF,SAAS,gBAAgB,CAAC,EAAiB,EAAE,IAAY;IACvD,KAAK,MAAM,SAAS,IAAI,EAAE,CAAC,UAAU,EAAE,CAAC;QACtC,IAAI,CAAC,EAAE,CAAC,mBAAmB,CAAC,SAAS,CAAC;YAAE,SAAS;QACjD,IAAI,CAAC,CAAC,SAAS,CAAC,eAAe,CAAC,KAAK,GAAG,EAAE,CAAC,SAAS,CAAC,KAAK,CAAC;YAAE,SAAS;QACtE,KAAK,MAAM,IAAI,IAAI,SAAS,CAAC,eAAe,CAAC,YAAY,EAAE,CAAC;YAC1D,IAAI,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,IAAI,KAAK,IAAI,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;gBAC9E,OAAO,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;YAClC,CAAC;QACH,CAAC;IACH,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC;AAED;;;;;;GAMG;AACH,SAAS,aAAa,CACpB,IAAmB,EACnB,EAAiB,EACjB,EAAU;IAEV,IAAI,CAAC,EAAE,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,SAAS,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,SAAS,CAAC;IAChF,MAAM,MAAM,GAAG,IAAI,CAAC,UAAU,CAAC;IAC/B,MAAM,KAAK,GACT,CAAC,EAAE,CAAC,YAAY,CAAC,MAAM,CAAC,IAAI,UAAU,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QAChE,CAAC,EAAE,CAAC,0BAA0B,CAAC,MAAM,CAAC,IAAI,MAAM,CAAC,IAAI,CAAC,IAAI,KAAK,EAAE,CAAC,CAAC;IACrE,OAAO,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;AAC/C,CAAC;AAED,iEAAiE;AACjE,SAAS,UAAU,CAAC,EAAiB,EAAE,EAAU;IAC/C,MAAM,KAAK,GAAG,IAAI,GAAG,EAAU,CAAC;IAChC,KAAK,MAAM,SAAS,IAAI,EAAE,CAAC,UAAU,EAAE,CAAC;QACtC,IAAI,CAAC,EAAE,CAAC,mBAAmB,CAAC,SAAS,CAAC;YAAE,SAAS;QACjD,MAAM,QAAQ,GAAG,SAAS,CAAC,YAAY,EAAE,aAAa,CAAC;QACvD,IAAI,CAAC,QAAQ,IAAI,CAAC,EAAE,CAAC,cAAc,CAAC,QAAQ,CAAC;YAAE,SAAS;QACxD,KAAK,MAAM,EAAE,IAAI,QAAQ,CAAC,QAAQ,EAAE,CAAC;YACnC,IAAI,CAAC,EAAE,CAAC,YAAY,IAAI,EAAE,CAAC,IAAI,CAAC,CAAC,IAAI,KAAK,EAAE;gBAAE,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACxE,CAAC;IACH,CAAC;IACD,8EAA8E;IAC9E,4EAA4E;IAC5E,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IACd,OAAO,KAAK,CAAC;AACf,CAAC;AAED,oGAAoG;AACpG,SAAS,MAAM,CAAC,IAAmB;IACjC,IAAI,OAAO,GAAG,IAAI,CAAC;IACnB,SAAS,CAAC;QACR,IACE,EAAE,CAAC,yBAAyB,CAAC,OAAO,CAAC;YACrC,EAAE,CAAC,cAAc,CAAC,OAAO,CAAC;YAC1B,EAAE,CAAC,qBAAqB,CAAC,OAAO,CAAC;YACjC,EAAE,CAAC,mBAAmB,CAAC,OAAO,CAAC;YAC/B,EAAE,CAAC,yBAAyB,CAAC,OAAO,CAAC;YACrC,EAAE,CAAC,6BAA6B,CAAC,OAAO,CAAC,EACzC,CAAC;YACD,OAAO,GAAG,OAAO,CAAC,UAAU,CAAC;YAC7B,SAAS;QACX,CAAC;QACD,OAAO,OAAO,CAAC;IACjB,CAAC;AACH,CAAC;AAED;;;;;;;GAOG;AACH,SAAS,YAAY,CAAC,IAAmB;IACvC,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC;IAE1B,IAAI,EAAE,CAAC,eAAe,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,+BAA+B,CAAC,IAAI,CAAC,EAAE,CAAC;QACzE,6DAA6D;QAC7D,OAAO,IAAI,CAAC,IAAI,CAAC;IACnB,CAAC;IACD,IAAI,EAAE,CAAC,gBAAgB,CAAC,IAAI,CAAC;QAAE,OAAO,YAAY,CAAC,IAAI,CAAC,CAAC;IACzD,IAAI,IAAI,CAAC,IAAI,KAAK,EAAE,CAAC,UAAU,CAAC,WAAW;QAAE,OAAO,IAAI,CAAC;IACzD,IAAI,IAAI,CAAC,IAAI,KAAK,EAAE,CAAC,UAAU,CAAC,YAAY;QAAE,OAAO,KAAK,CAAC;IAE3D,IAAI,EAAE,CAAC,uBAAuB,CAAC,IAAI,CAAC,EAAE,CAAC;QACrC,MAAM,OAAO,GAAG,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACrC,IAAI,EAAE,CAAC,gBAAgB,CAAC,OAAO,CAAC,EAAE,CAAC;YACjC,MAAM,CAAC,GAAG,YAAY,CAAC,OAAO,CAAC,CAAC;YAChC,IAAI,IAAI,CAAC,QAAQ,KAAK,EAAE,CAAC,UAAU,CAAC,UAAU;gBAAE,OAAO,CAAC,CAAC,CAAC;YAC1D,IAAI,IAAI,CAAC,QAAQ,KAAK,EAAE,CAAC,UAAU,CAAC,SAAS;gBAAE,OAAO,CAAC,CAAC;QAC1D,CAAC;QACD,MAAM,IAAI,SAAS,CAAC,IAAI,EAAE,uDAAuD,CAAC,CAAC;IACrF,CAAC;IAED,IAAI,EAAE,CAAC,wBAAwB,CAAC,IAAI,CAAC,EAAE,CAAC;QACtC,OAAO,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE;YAC9B,IAAI,EAAE,CAAC,eAAe,CAAC,EAAE,CAAC;gBAAE,MAAM,IAAI,SAAS,CAAC,EAAE,EAAE,kBAAkB,CAAC,CAAC;YACxE,IAAI,EAAE,CAAC,mBAAmB,CAAC,EAAE,CAAC;gBAAE,MAAM,IAAI,SAAS,CAAC,EAAE,EAAE,eAAe,CAAC,CAAC;YACzE,OAAO,YAAY,CAAC,EAAE,CAAC,CAAC;QAC1B,CAAC,CAAC,CAAC;IACL,CAAC;IAED,IAAI,EAAE,CAAC,yBAAyB,CAAC,IAAI,CAAC;QAAE,OAAO,WAAW,CAAC,IAAI,CAAC,CAAC;IAEjE,MAAM,IAAI,SAAS,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;AAC7D,CAAC;AAED,SAAS,WAAW,CAAC,IAAgC;IACnD,0EAA0E;IAC1E,4EAA4E;IAC5E,0BAA0B;IAC1B,MAAM,GAAG,GAA4B,MAAM,CAAC,MAAM,CAAC,IAAI,CAA4B,CAAC;IACpF,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;QACnC,IAAI,CAAC,EAAE,CAAC,oBAAoB,CAAC,IAAI,CAAC,EAAE,CAAC;YACnC,MAAM,IAAI,SAAS,CACjB,IAAI,EACJ,EAAE,CAAC,6BAA6B,CAAC,IAAI,CAAC;gBACpC,CAAC,CAAC,sBAAsB;gBACxB,CAAC,CAAC,EAAE,CAAC,kBAAkB,CAAC,IAAI,CAAC;oBAC3B,CAAC,CAAC,UAAU;oBACZ,CAAC,CAAC,sBAAsB,CAC7B,CAAC;QACJ,CAAC;QACD,MAAM,GAAG,GAAG,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACpC,yEAAyE;QACzE,uEAAuE;QACvE,2EAA2E;QAC3E,2EAA2E;QAC3E,kDAAkD;QAClD,IAAI,GAAG,KAAK,WAAW;YAAE,MAAM,IAAI,SAAS,CAAC,IAAI,EAAE,iBAAiB,CAAC,CAAC;QACtE,GAAG,CAAC,GAAG,CAAC,GAAG,YAAY,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;IAC5C,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAED,SAAS,YAAY,CAAC,IAAqB;IACzC,IAAI,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,eAAe,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,+BAA+B,CAAC,IAAI,CAAC,EAAE,CAAC;QAClG,OAAO,IAAI,CAAC,IAAI,CAAC;IACnB,CAAC;IACD,IAAI,EAAE,CAAC,gBAAgB,CAAC,IAAI,CAAC;QAAE,OAAO,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC;IACjE,MAAM,IAAI,SAAS,CAAC,IAAI,EAAE,gBAAgB,CAAC,CAAC;AAC9C,CAAC;AAED;;;;;;;GAOG;AACH,SAAS,YAAY,CAAC,IAAuB;IAC3C,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,CAAC;IACvD,IAAI,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC;QAAE,MAAM,IAAI,SAAS,CAAC,IAAI,EAAE,uCAAuC,CAAC,CAAC;IAC5F,OAAO,KAAK,CAAC;AACf,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@am_shork/attest",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.4.0",
|
|
4
4
|
"description": "TDD-native spec framework: tests are the source of truth for verification, ID-bound requirements the source of truth for intent.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"engines": {
|
|
@@ -50,16 +50,16 @@
|
|
|
50
50
|
"zod": "^3.23.0"
|
|
51
51
|
},
|
|
52
52
|
"peerDependencies": {
|
|
53
|
-
"vite": "^
|
|
54
|
-
"vitest": "^
|
|
53
|
+
"vite": "^8.0.0",
|
|
54
|
+
"vitest": "^4.0.0"
|
|
55
55
|
},
|
|
56
56
|
"devDependencies": {
|
|
57
57
|
"@eslint/js": "^9.9.0",
|
|
58
58
|
"@types/node": "^20.19.0",
|
|
59
59
|
"eslint": "^9.9.0",
|
|
60
60
|
"typescript-eslint": "^8.2.0",
|
|
61
|
-
"vite": "^
|
|
62
|
-
"vitest": "^
|
|
61
|
+
"vite": "^8.1.5",
|
|
62
|
+
"vitest": "^4.1.10"
|
|
63
63
|
},
|
|
64
64
|
"scripts": {
|
|
65
65
|
"build": "tsc -p tsconfig.json",
|