@am_shork/attest 0.4.0 → 0.4.1

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 CHANGED
@@ -13,6 +13,115 @@ 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
+ ## [0.4.1] - 2026-07-29
17
+
18
+ Every diagnostic now links to a section that explains it, and the README is a
19
+ README again — the reference it had grown into has a page of its own, in both
20
+ languages, saying which version each part of it arrived in. No behaviour a CI
21
+ step branches on changed; the human report gains one line per issue.
22
+
23
+ ### Added
24
+
25
+ - **A troubleshooting document, with one section per issue code — and every
26
+ diagnostic links to its own.** A diagnostic names a rule and states a fix in
27
+ one line, which is the right size for a reader who already knows the rule and
28
+ the wrong size for the one who does not — and the second reader is the one
29
+ adopting Attest, who meets six codes at once on their first run. The knowledge
30
+ was not missing so much as filed where nobody looks during a failure: the
31
+ cross-platform traps (a backslash is an escape in a glob; Vitest's 5-second
32
+ default against a scenario that starts a subprocess) lived in `CLAUDE.md`,
33
+ which ships with no release, and the rationale lived in a 450-line README
34
+ nobody greps mid-failure. Both languages, as always
35
+ (`docs/{en,zh}/troubleshooting.md`).
36
+
37
+ What makes this cheap to keep true is that `code` was already the
38
+ machine-readable name of a rule, so the section heading is the code verbatim
39
+ and the link is *derived*: there is no second string to keep in step, and so
40
+ no way to ship a diagnostic pointing at the wrong section. The remaining
41
+ failure mode — a section that does not exist — is closed from the other end:
42
+ `Issue.code` is narrowed from `string` to the roster in `core/docs.ts`, which
43
+ the suite asserts against both documents. An undocumented diagnostic is now a
44
+ compile error. (That narrowing found two families of codes a regex over the
45
+ source had missed, because they are built through a helper rather than written
46
+ at the issue site.) The two readers that restate a *subset* of the roster —
47
+ `StaticReadCode`, `DeltaReadCode` — are now asserted to be subsets of it in
48
+ `tests/issue-code-types.spec-d.ts`. That was already caught, but downstream
49
+ and by accident: the failure surfaced where the code is assigned into an
50
+ `Issue`, several files from the two lines that disagree.
51
+
52
+ Links are pinned to `v<version>` — the tag of the build that printed the
53
+ diagnostic — not to `main`. The two failure modes are not the same size. An
54
+ unresolved tag exists only between a release commit and its push, which is a
55
+ version nobody has installed, so no build in anyone's `node_modules` prints
56
+ those links. An unpinned link is dereferenced by every installed copy forever,
57
+ and the first breaking change to a code turns years of shipped builds into
58
+ links that miss — or worse, land on a section confidently describing a rule
59
+ that has since been redefined. (`main` remains the fallback for the one case
60
+ where pinning is impossible rather than imprecise: an unreadable manifest.)
61
+
62
+ - **`docsUrl` on every issue in `--json`.** Additive, so no `schemaVersion`
63
+ bump. It is attached in the one envelope every report is built through —
64
+ including the `internal-error` crash path — rather than at the ~26 sites that
65
+ construct an `Issue`, for the same reason `hasError` is one function. It is
66
+ for the human reading a CI log; a consumer should still branch on `code`,
67
+ which is the more precise form of the same information.
68
+
69
+ ### Changed
70
+
71
+ - **Every issue in the human report gains a line: `→ <docs url>`, dim, under the
72
+ message.** The one behaviour change an existing invocation can notice. No exit
73
+ code moves, no verdict moves, no input that passed now fails, and `--json` is
74
+ untouched by it — but a snapshot test over `attest`'s stdout will need
75
+ re-recording. That report is prose for humans by the same rule that makes
76
+ `Issue.message` prose (see *Versioning* above); the machine surface is
77
+ `--json`, which is where a CI step should have been looking.
78
+
79
+ - **`Issue.code` is typed `IssueCode`, not `string`.** Breaking only for code
80
+ that *constructs* an `Issue` — reading one, which is what `--json` consumers
81
+ do, gets strictly more type information than before. Nothing in the CLI
82
+ surface, the report shape or the exit codes changes.
83
+
84
+ `SCHEMA_VERSION` stays at 1 for this too, not only for `docsUrl`: the emitted
85
+ values are the same strings they always were, so nothing on the wire changed
86
+ and no consumer can tell the difference. The narrowing is a compile-time
87
+ constraint on this repository, not a report-shape change.
88
+
89
+ - **The README is a README again; the reference moved to
90
+ `docs/{en,zh}/cli-reference.md`.** It had become four documents wearing one
91
+ hat — a pitch, a tutorial, a CLI reference and a running design argument — at
92
+ 470 lines, which is long past the point where a newcomer reads it and well
93
+ past where anyone looks up a flag in it. It is now 199: the pitch, a
94
+ five-minute start, and a table of where everything else lives. Nothing was
95
+ deleted. Per-command behaviour, `--eval`, `--vitest-config`, the run scope and
96
+ the whole `--json` shape are in the new reference; the rationale for the
97
+ diagnostics that were argued through in the README (`registry-not-static`,
98
+ `duplicate-prefix`, `empty-spec`, `stale-spec-doc`) already had a better home
99
+ in the troubleshooting document, so the reference states the rule and links to
100
+ it rather than restating the argument a third time.
101
+
102
+ Each section of the reference that has changed since it first shipped now
103
+ carries a collapsed **History** table. Attest is 0.x and moves fast enough
104
+ that a page describes the latest build to a reader who installed an earlier
105
+ one, with nothing to tell them which half applies — `--vitest-config` has
106
+ existed since 0.1.5, the run has been scoped to attesting spec files only
107
+ since 0.2.0, and the registry has had to be a literal only since 0.2.0. The
108
+ rows were written from this file. A gate checks that every version they name
109
+ is a heading in it, so a row cannot cite a version that was never cut; it
110
+ cannot check that a row is *true*, which still needs a reader with the
111
+ changelog open. `Unreleased` counts as a heading while one exists — and stops
112
+ counting when a release removes it, which is what makes renumbering those rows
113
+ part of cutting the release rather than something to remember.
114
+
115
+ The two documentation gates widened with it: they scanned `README.md` alone,
116
+ and the JSON sample they exist to catch had just moved out from under them.
117
+ They now enumerate `README.md` plus every `*.md` in both language directories,
118
+ so a page added later is covered by default rather than by remembering.
119
+
120
+ - **`packageVersion()` moved from `src/cli/version.ts` to `src/core/version.ts`.**
121
+ It answers "which build is this", which `core/docs.ts` now has to ask in order
122
+ to pin a link — not a CLI concern. Neither path is in the `exports` map, so
123
+ nothing installable can have been importing either.
124
+
16
125
  ## [0.4.0] - 2026-07-28
17
126
 
18
127
  Reading a registry no longer opens a port or lets the repository under test write
@@ -1330,7 +1439,7 @@ sinking one version deeper each time a release was cut above it, and a rejection
1330
1439
  filed under a version reads as belonging to it.
1331
1440
 
1332
1441
  - **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
1442
+ half of the rule that shipped as `duplicate-prefix` (see `[0.4.0]`), and
1334
1443
  the half that does not pay for itself. What killed it is that the corpus
1335
1444
  already conforms: every fixture registry matches (`auth.reqs.ts` → `AUTH-`,
1336
1445
  `core.reqs.ts` → `CORE-`), so the rule would detect nothing anywhere it was
@@ -1553,7 +1662,8 @@ filed under a version reads as belonging to it.
1553
1662
  is still the whole answer. What is rejected is grouping as a way to assist it,
1554
1663
  and this reopens only on a contradiction that grouping would have caught.
1555
1664
 
1556
- [Unreleased]: https://gitlab.com/Pseudorca/attest/-/compare/v0.4.0...main
1665
+ [Unreleased]: https://gitlab.com/Pseudorca/attest/-/compare/v0.4.1...main
1666
+ [0.4.1]: https://gitlab.com/Pseudorca/attest/-/tags/v0.4.1
1557
1667
  [0.4.0]: https://gitlab.com/Pseudorca/attest/-/tags/v0.4.0
1558
1668
  [0.3.0]: https://gitlab.com/Pseudorca/attest/-/tags/v0.3.0
1559
1669
  [0.2.2]: https://gitlab.com/Pseudorca/attest/-/tags/v0.2.2
package/README.md CHANGED
@@ -21,8 +21,6 @@ the stronger property; noticing that it *moved* is `verify`'s job, and only when
21
21
  a scenario asserts on the value it read from `params`. Read the param inside the
22
22
  assertion, not beside it.
23
23
 
24
- See the authoritative design — [English](https://gitlab.com/Pseudorca/attest/-/blob/main/docs/en/attest-design.md) · [中文](https://gitlab.com/Pseudorca/attest/-/blob/main/docs/zh/attest-design.md) — and the rest of the [docs](https://gitlab.com/Pseudorca/attest/-/tree/main/docs).
25
-
26
24
  ## Prerequisites
27
25
 
28
26
  - Node ≥ 20.19
@@ -43,9 +41,10 @@ pnpm add -D @am_shork/attest vitest vite
43
41
  ```
44
42
 
45
43
  **1. Declare a requirement** (`requirements/auth.reqs.ts`) — import the intent API
46
- from the vitest-free `/define` subpath so registry loading never touches the runtime.
47
- A registry is a **literal**: every value is written where you can read it (see
48
- [A registry is a literal](#a-registry-is-a-literal)):
44
+ from the vitest-free `/define` subpath so registry loading never touches the
45
+ runtime. A registry is a **literal**: every value is written where you can read
46
+ it, because the commands below read it without executing it
47
+ ([why](https://gitlab.com/Pseudorca/attest/-/blob/main/docs/en/cli-reference.md#a-registry-is-a-literal)).
49
48
 
50
49
  ```ts
51
50
  import { defineRequirements } from '@am_shork/attest/define';
@@ -78,12 +77,6 @@ requirement('AUTH-3', () => {
78
77
  });
79
78
  ```
80
79
 
81
- `scenario` takes an optional third argument, a timeout in milliseconds, forwarded
82
- to Vitest's `it`. The run is isolated (see [What a run actually
83
- runs](#what-a-run-actually-runs)), so Vitest's default applies unless a scenario
84
- says otherwise — worth setting on anything that drives a subprocess, a container
85
- or a build.
86
-
87
80
  **3. Run the engine:**
88
81
 
89
82
  ```bash
@@ -97,31 +90,10 @@ attest archive <change> # gate a proposed change: green + covered + no drift
97
90
  attest status <change> # what that gate still wants, without running anything
98
91
  ```
99
92
 
100
- `<change>` names one directory inside `changes/` it cannot be empty, `.`,
101
- `..`, or contain a path separator, since the name is interpolated into a path
102
- whose module the gate then loads and runs. Both commands check it before
103
- resolving anything on its behalf. Any other directory name is fine.
104
-
105
- `status` is the mid-flight view `archive` cannot give you: it reports each
106
- requirement the change adds as `no-scenario`, `unproven` (a scenario exists but
107
- has never been seen failing) or `proven`, reading the delta, the specs and
108
- `first-run.json` — no suite run, no project code. Every state is named after the
109
- issue the gate will raise, and it uses the gate's own predicate, so the two
110
- cannot disagree. What it deliberately cannot tell you is whether the tests pass:
111
-
112
- ```console
113
- $ attest status add-2fa
114
- Change: add-2fa
115
- ✓ AUTH-7 2 scenarios, seen red
116
- ● AUTH-8 1 never run
117
- ✗ AUTH-9 no scenario yet
118
- — 3 added requirements, 1 ready to archive
119
- Not a verdict: run `attest archive add-2fa` to run the suite.
120
- ```
121
-
122
- It exits 0 there. Unmet obligations are the normal state of a change in flight,
123
- so they are rows, never a failing verdict — only a delta it could not read makes
124
- `status` fail. `archive` remains the one command that says "done".
93
+ Every command takes the project root as an optional last argument, and `--json`
94
+ for exactly one machine-readable document on stdout. Flags, per-command
95
+ behaviour and the JSON shape are in the
96
+ [CLI reference](https://gitlab.com/Pseudorca/attest/-/blob/main/docs/en/cli-reference.md).
125
97
 
126
98
  ### Working with an agent
127
99
 
@@ -130,274 +102,50 @@ agree on intent, write the delta, drive the scenarios red, then implement to
130
102
  green — and it is written for an agent to follow:
131
103
 
132
104
  ```bash
133
- attest init # .claude/skills/attest/SKILL.md
134
- attest init --target cursor # .cursor/rules/attest.mdc
135
- attest init --target copilot # .github/instructions/attest.instructions.md
105
+ attest init # .claude/skills/attest/SKILL.md
106
+ attest init --target cursor # .cursor/rules/attest.mdc
107
+ attest init --target copilot # .github/instructions/attest.instructions.md
136
108
  ```
137
109
 
138
- Each target gets the same document; only the frontmatter differs, because that
139
- is the part the tool parses rather than the part the agent follows.
140
-
141
- That document carries the workflow: how to write a `changes/<name>/` delta, why
142
- its scenarios have to be red before you implement, what `attest archive` blocks
143
- on, and the three shortcuts that turn the gate green without changing anything.
144
110
  "Red before you implement" is enforced rather than advised: `archive` records how
145
111
  each of a change's scenarios ended on its first run, into
146
112
  `changes/<name>/first-run.json`, and blocks with `never-red` on any requirement
147
113
  the delta adds whose scenarios were never seen to fail. Commit `first-run.json`
148
114
  with the change — it is the evidence, and CI has to reach the same verdict as
149
115
  you do.
150
- An agent loads it on its own — its description is already in the agent's
151
- context, or its path matches what you have open — so nothing has to be found or
152
- pasted, and nothing is resident when you are working on something else.
153
-
154
- `--target` is repeatable, and a name that is not a known target writes nothing
155
- at all — an `unknown-target` error naming the ones that would have worked. An
156
- agent whose instructions live in a file your *project* owns — `AGENTS.md`,
157
- `CLAUDE.md` — is deliberately not a target: Attest writes whole files at paths it
158
- names and never edits a document you maintain, so what covers those is one line
159
- you add there yourself, pointing at the file above. It is cheaper than a
160
- generated block and it cannot go stale.
161
-
162
- There is deliberately **no `--check`**. The file is a function of the version you
163
- installed, so gating it would turn CI red on upgrades you did nothing to cause,
164
- and the remedy would be a commit containing no decision. `init` is idempotent
165
- instead: re-run it after upgrading, and that is the whole update mechanism.
166
-
167
- It also writes nothing else — no registry, no `package.json` scripts, no
168
- `changes/` skeleton. A generated registry is either empty (an `empty-spec` error
169
- on day one) or invented, and invented requirements are worse than none.
170
-
171
- ### A registry is a literal
172
-
173
- `check`, `cover`, `render` and `status` read your `*.reqs.ts` files from their
174
- **source**, with the TypeScript compiler API. They never execute them. That is
175
- what makes `attest check` safe to run where its description implies you can —
176
- first in the pipeline, on an untrusted fork MR, outside whatever sandbox you give
177
- the tests. (`verify` and `archive` do run your suite, so they read the registry by
178
- evaluating it: there is nothing left to protect at that point.)
179
-
180
- The cost is a contract: every value in a registry must be written in the
181
- registry.
182
116
 
183
- ```ts
184
- import { MAX_MB } from '../src/config.js';
117
+ An agent loads the document on its own — its description is already in the
118
+ agent's context, or its path matches what you have open — so nothing has to be
119
+ found or pasted. See
120
+ [`attest init`](https://gitlab.com/Pseudorca/attest/-/blob/main/docs/en/cli-reference.md#attest-init)
121
+ for the targets and what `init` deliberately does not write.
185
122
 
186
- export default defineRequirements({
187
- 'UP-1': {
188
- statement: 'An upload SHALL be rejected above {maxMb} MB.',
189
- rationale: 'Protect the storage tier from unbounded writes.',
190
- params: { maxMb: MAX_MB }, // ✗ registry-not-static
191
- },
192
- });
193
- ```
123
+ ### When something goes wrong
194
124
 
195
- This is reported as a `registry-not-static` ERROR pointing at the line. It is
196
- not only a tooling limit: the single-source rule says the requirement owns that
197
- number, and importing it says the application owns it. Inline the value and read
198
- it from the registry in your code — that is the fix. If you need the old
199
- behaviour instead, `--eval` restores it on every one of those commands:
125
+ Every diagnostic carries a `code`, and every code has a section in
126
+ **Troubleshooting** which the diagnostic itself links to:
200
127
 
201
- ```bash
202
- attest check --eval # reads the registry by executing every *.reqs.ts
203
128
  ```
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
-
209
- **The same rule covers a change's `requirements.delta.ts`**, because `status`
210
- reads that file the same way — a delta built from an imported constant is the
211
- same `registry-not-static` ERROR, with the same `--eval` way out. The reason is
212
- sharper there than it is for a registry: `changes/` holds a proposal nobody has
213
- agreed to yet, so a command whose only job is to report on it is the last thing
214
- that should execute it. `archive` evaluates the delta regardless — it is about to
215
- run your suite anyway.
216
-
217
- One more thing to know about literals: write registry prose as **one long
218
- single-line string**. A template literal with no substitution reads statically and
219
- is accepted — but it keeps every newline and every space of indentation inside it,
220
- and `render` puts the statement into the Markdown exactly as written, so the
221
- wrapping that looked tidy in the editor lands in the generated document.
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
129
+ ERROR registry-not-static (requirements/upload.reqs.ts:5)
130
+ Value is not a literal.
131
+ https://gitlab.com/Pseudorca/attest/-/blob/v0.4.1/docs/en/troubleshooting.md#registry-not-static
235
132
  ```
236
133
 
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
-
248
- ### A readable spec for humans (`attest render`)
134
+ The anchor **is** the code, so the link cannot point somewhere the section
135
+ isn't. In `--json` the same link is on each issue as `docsUrl`.
249
136
 
250
- The intent layer lives in TypeScript, which means a reviewer, a QA engineer, or
251
- anyone doing an audit cannot read it. `render` projects the registry into one
252
- Markdown document — an index of every requirement, then each one with its
253
- statement, rationale, params and out-of-scope notes:
254
-
255
- ```bash
256
- attest render # to stdout
257
- attest render --out docs/SPEC.md # to a file
258
- attest render --out docs/SPEC.md --check # fail if that file is out of date
259
- ```
137
+ ## Documentation
260
138
 
261
- The rendering **substitutes params into the statement**, so the document says
262
- "after **30** minutes" where the source says `{idleTimeoutMin}` — the number a
263
- reader actually wants, still from the single source.
264
-
265
- Three properties this deliberately keeps:
266
-
267
- - **One-way.** Markdown is only ever an output. Nothing reads it back, so the
268
- free-form-prose drift that a Markdown *source* invites stays out.
269
- - **Intent only.** No coverage, no counts, no test locations, no pass/fail —
270
- those are verdicts, and `cover` / `verify` recompute them on demand. So the
271
- document is a pure function of your `*.reqs.ts` files and changes if and only
272
- if intent changes: one readable hunk per registry edit, and never a rewrite
273
- because a line moved in a test file.
274
- - **Gated.** A generated file you commit is a new place for drift to hide, so
275
- `--check` regenerates and compares, failing with `stale-spec-doc` if the
276
- committed document no longer matches the registry, or `missing-spec-doc` if it
277
- was never generated. It compares the document, not the bytes: line endings are
278
- a property of your checkout (`core.autocrlf` is on by default on Windows), and
279
- a gate that calls a fresh clone stale is worse than no gate.
280
- Put it in CI next to `attest check`. (Attest does this to itself:
281
- [`self/requirements/SPEC.md`](https://gitlab.com/Pseudorca/attest/-/blob/main/self/requirements/SPEC.md)
282
- is generated, and the pipeline fails if it goes stale.)
283
-
284
- The Markdown is prose for humans and its formatting is not a stable contract —
285
- don't parse it. `--json` is the machine surface.
286
-
287
- ### What a run actually runs
288
-
289
- `verify` executes **only the spec files that declare a `requirement()`**. A repo
290
- that already has a test suite keeps it: those files are located, reported, and
291
- left alone — Attest is not a general test runner, and running someone's suite in
292
- a child process with no aliases and no DOM only ever produced a red about code it
293
- was never pointed at. `archive` uses the same scope.
294
-
295
- Every run says so, before the issues:
296
-
297
- ```
298
- Running 12 spec files (30 without a requirement(), not run)
299
- ✓ No issues.
300
- — 20 requirements / 41 scenarios, 0 error, 0 warning, 0 info
301
- ```
302
-
303
- The gap between the two numbers is worth watching: a spec file whose
304
- `requirement()` call Attest cannot see statically is skipped rather than failed,
305
- and that is where it shows. The same four numbers are in `--json` under `counts`.
306
-
307
- When three or more issues in one report share a level and a code, one line above
308
- the counts says so, because a wall of identical codes is one rule and many sites:
309
-
310
- ```
311
- Repeated: 6 × ERROR registry-not-static, 4 × WARNING rationale-placeholder
312
- ```
313
-
314
- Every per-issue line stays exactly as it is — they are what makes a diagnostic
315
- clickable — and the summary is terminal output only: it is not an issue, so it
316
- appears nowhere in `--json`, changes no count, and never moves a verdict.
317
-
318
- A run with **no requirements** under the root is an `empty-spec` ERROR, not a
319
- pass. "No failing tests" is not the same claim as "the requirements hold", and
320
- the case that matters is not the empty directory — it is the repo whose registry
321
- quietly stopped being found, where the tests still run and still go green.
322
-
323
- ### Framework code (`.vue`, DOM, path aliases)
324
-
325
- The child run isolates from any ambient config by default, so specs run in a bare
326
- Vite/Vitest environment — no `.vue` transform, DOM, or `~/`/`@/` aliases. When
327
- your specs need that environment, point `verify` (or `archive`) at a config:
328
-
329
- ```bash
330
- attest verify --vitest-config vitest.config.ts
331
- ```
332
-
333
- The config supplies the environment (plugins, `resolve.alias`, `test.environment`);
334
- Attest still owns the run scope — `include`/`exclude`/`root` always win, so a
335
- config cannot pull in your existing suite or un-exclude `changes/`. Without the
336
- flag the run stays isolated and deterministic.
337
-
338
- ### Machine-readable output
339
-
340
- Every command that produces a verdict takes `--json` and then writes exactly one
341
- JSON document to stdout — same work, same exit code. Branch on `ok`,
342
- `issues[].code` and `issues[].reqId`; never parse `message`, which is prose and
343
- may be reworded. (`render` is the one exception, because its own output is a
344
- document: there, `--json` needs `--out` or `--check`, so stdout still carries
345
- exactly one thing.)
346
-
347
- ```bash
348
- attest check --json
349
- ```
350
-
351
- ```json
352
- {
353
- "tool": "attest",
354
- "schemaVersion": 1,
355
- "version": "0.4.0",
356
- "command": "check",
357
- "ok": false,
358
- "summary": { "error": 1, "warning": 0, "info": 0 },
359
- "issues": [
360
- {
361
- "level": "ERROR",
362
- "code": "orphan-test",
363
- "reqId": "PLAN-2",
364
- "file": "auth/session.spec.ts",
365
- "line": 12,
366
- "message": "scenario \"…\" attests unknown requirement \"PLAN-2\". …"
367
- }
368
- ]
369
- }
370
- ```
139
+ | Document | English | 中文 |
140
+ |---|---|---|
141
+ | **CLI reference** — every command, flag and JSON field | [en](https://gitlab.com/Pseudorca/attest/-/blob/main/docs/en/cli-reference.md) | [中文](https://gitlab.com/Pseudorca/attest/-/blob/main/docs/zh/cli-reference.md) |
142
+ | **Troubleshooting** — one section per issue code | [en](https://gitlab.com/Pseudorca/attest/-/blob/main/docs/en/troubleshooting.md) | [中文](https://gitlab.com/Pseudorca/attest/-/blob/main/docs/zh/troubleshooting.md) |
143
+ | **Design** the authoritative design of the framework | [en](https://gitlab.com/Pseudorca/attest/-/blob/main/docs/en/attest-design.md) | [中文](https://gitlab.com/Pseudorca/attest/-/blob/main/docs/zh/attest-design.md) |
144
+ | **Feedback template** — report how adoption actually went | [en](https://gitlab.com/Pseudorca/attest/-/blob/main/docs/en/feedback.template.md) | [中文](https://gitlab.com/Pseudorca/attest/-/blob/main/docs/zh/feedback.template.md) |
371
145
 
372
- `verify` adds `passed` (was the test run itself green, independent of the
373
- overall verdict) and `counts` (`requirements`, `scenarios`, `specFiles`,
374
- `attesting`); `cover` adds `coverage[]` — one `{ reqId, covered,
375
- scenarioCount }` row per requirement — plus a `requirements` roll-up;
376
- `archive` adds `change`; `status` adds `change`, `progress[]` — one
377
- `{ reqId, state, scenarios[] }` row per added requirement, each scenario
378
- carrying its recorded `firstRun` (`"fail"`, `"pass"`, or `null` for never
379
- observed) — plus an `added` roll-up; `render` and `init` add `outFile` — the
380
- file the command wrote, and never its contents — and `init` adds `outFiles`,
381
- every file it wrote, since it can be asked for more than one agent target at
382
- once (`outFile` is still there whenever exactly one was written).
383
- `schemaVersion` is bumped on any breaking change to
384
- the shape. The TypeScript type is exported as `JsonReport`.
385
-
386
- `ok` means the same thing everywhere: the report carries no `ERROR`. So an
387
- uncovered requirement reaches a `cover` report twice — as a `covered: false`
388
- row and as an `uncovered-requirement` issue — because the rule above is to
389
- branch on `issues[].code`, and a command that answered `ok: false` with an
390
- empty `issues` array would make you read `coverage[]` to find out why.
391
-
392
- `status` is the one report whose rows are deliberately *not* issues. Its rows
393
- describe a change in progress, and a change in progress has unmet obligations by
394
- definition; carrying them as errors would make `status` exit 1 for the whole life
395
- of every change, and put a second verdict beside `archive`'s. Its `issues` carry
396
- only the reasons the report could not be produced.
397
-
398
- Even when a command crashes, `--json` still writes one parseable envelope
399
- (`ok: false` with an `internal-error` issue) rather than an empty stdout — so a
400
- consumer can always parse stdout and branch on `ok`.
146
+ The change workflow is not here: it is what `attest init` writes into your
147
+ project, as a skill, a rule or an instructions file, depending on which agent
148
+ reads it.
401
149
 
402
150
  ## Development
403
151
 
@@ -430,12 +178,12 @@ from `pnpm test`; it runs in CI and as `prepublishOnly`.
430
178
  ## Feedback
431
179
 
432
180
  Adoption reports drive the roadmap. After using Attest on a real project, fill in
433
- the feedback template [English](https://gitlab.com/Pseudorca/attest/-/blob/main/docs/en/feedback.template.md) · [中文](https://gitlab.com/Pseudorca/attest/-/blob/main/docs/zh/feedback.template.md)
434
- and open it as an issue (it is also the **Usage feedback** issue template). It
435
- covers greenfield and mid-project adoption alike, and ends with a prompt to run
436
- inside the adopting repo that fills most of the report automatically and probes
437
- for problems you haven't hit yet. The highest-value part is **false negatives**:
438
- drift the engine should have caught and didn't.
181
+ the feedback template (linked above) and open it as an issue it is also the
182
+ **Usage feedback** issue template. It covers greenfield and mid-project adoption
183
+ alike, and ends with a prompt to run inside the adopting repo that fills most of
184
+ the report automatically and probes for problems you haven't hit yet. The
185
+ highest-value part is **false negatives**: drift the engine should have caught
186
+ and didn't.
439
187
 
440
188
  ## Acknowledgments
441
189
 
package/dist/cli/index.js CHANGED
@@ -15,7 +15,7 @@ import { runCheck, runVerify, runCover, runArchive, runInit, runRender, runRende
15
15
  import { hasError } from '../core/types.js';
16
16
  import { formatIssues, formatScope, summarize, formatCoverage, formatStatus, } from './report.js';
17
17
  import { archiveReport, checkReport, coverReport, errorReport, initReport, renderJson, renderReport, statusReport, verifyReport, } from './json.js';
18
- import { packageVersion } from './version.js';
18
+ import { packageVersion } from '../core/version.js';
19
19
  const VERSION = packageVersion();
20
20
  const program = new Command();
21
21
  program
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"json.d.ts","sourceRoot":"","sources":["../../src/cli/json.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"json.d.ts","sourceRoot":"","sources":["../../src/cli/json.ts"],"names":[],"mappings":"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"}
package/dist/cli/json.js CHANGED
@@ -5,6 +5,7 @@
5
5
  // The shape is a contract: `schemaVersion` is bumped on any breaking change,
6
6
  // and every command emits the same envelope (tool/version/command/ok/summary/
7
7
  // issues) plus command-specific fields.
8
+ import { docsUrl } from '../core/docs.js';
8
9
  import { hasError } from '../core/types.js';
9
10
  /** Bumped whenever the emitted shape changes incompatibly. */
10
11
  export const SCHEMA_VERSION = 1;
@@ -19,15 +20,38 @@ export function countLevels(issues) {
19
20
  summary[LEVEL_KEY[i.level]]++;
20
21
  return summary;
21
22
  }
23
+ /**
24
+ * Attach the page that explains each code (design §5.3).
25
+ *
26
+ * Done here rather than at the ~20 sites that construct an `Issue`, for the
27
+ * reason `hasError` is one function: a property every report shares should have
28
+ * one place to be wrong. Every JSON report is built through this envelope —
29
+ * including the `internal-error` crash path — so there is no command that emits
30
+ * issues without going past this line.
31
+ *
32
+ * Non-mutating, and an issue that already carries a `docsUrl` keeps it: the
33
+ * argument arrays belong to the caller, and one of them is a pipeline result a
34
+ * human rendering may read afterwards.
35
+ */
36
+ function withDocs(issues) {
37
+ return issues.map((i) => {
38
+ const url = i.docsUrl ?? docsUrl(i.code);
39
+ return url === undefined ? i : { ...i, docsUrl: url };
40
+ });
41
+ }
22
42
  function envelope({ version, command, ok, issues = [] }) {
43
+ const documented = withDocs(issues);
23
44
  return {
24
45
  tool: 'attest',
25
46
  schemaVersion: SCHEMA_VERSION,
26
47
  version,
27
48
  command,
28
49
  ok,
50
+ // Counted from the input, not the decorated copy: the two have the same
51
+ // length by construction, and counting what was passed in keeps the summary
52
+ // a function of the issues rather than of the decoration.
29
53
  summary: countLevels(issues),
30
- issues,
54
+ issues: documented,
31
55
  };
32
56
  }
33
57
  export function checkReport(version, issues) {
@@ -1 +1 @@
1
- {"version":3,"file":"json.js","sourceRoot":"","sources":["../../src/cli/json.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"json.js","sourceRoot":"","sources":["../../src/cli/json.ts"],"names":[],"mappings":"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"}
@@ -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;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"}
1
+ {"version":3,"file":"report.d.ts","sourceRoot":"","sources":["../../src/cli/report.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,WAAW,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAEnF,OAAO,KAAK,EAAE,KAAK,EAAS,MAAM,kBAAkB,CAAC;AAgFrD,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"}
@@ -1,6 +1,7 @@
1
1
  // Terminal rendering of graded issues (design §5.3 levels). Pure formatting —
2
2
  // no process side effects — so it stays testable and the CLI stays thin.
3
3
  import chalk from 'chalk';
4
+ import { docsUrl } from '../core/docs.js';
4
5
  import { byCodeUnit } from '../core/order.js';
5
6
  const LEVEL_TAG = {
6
7
  ERROR: (s) => chalk.red.bold(s),
@@ -59,6 +60,19 @@ function control(text) {
59
60
  })
60
61
  .join('');
61
62
  }
63
+ /**
64
+ * The line under a message pointing at the section that explains the code.
65
+ *
66
+ * Dim and last, so it never competes with the file:line above it — that is what
67
+ * a reader navigates by, and this is what they reach for once navigating did not
68
+ * settle it. Not sanitised through `inline`, unlike everything else on these
69
+ * lines: it is derived from a fixed roster, so unlike a scenario name or a path
70
+ * it never contains a byte the repository under test chose.
71
+ */
72
+ function docsLine(issue) {
73
+ const url = issue.docsUrl ?? docsUrl(issue.code);
74
+ return url ? `\n${INDENT}${chalk.dim(`→ ${url}`)}` : '';
75
+ }
62
76
  export function formatIssues(issues) {
63
77
  if (issues.length === 0)
64
78
  return chalk.green('✓ No issues.');
@@ -67,7 +81,7 @@ export function formatIssues(issues) {
67
81
  for (const i of issues.filter((x) => x.level === level)) {
68
82
  const where = i.file ? `${inline(i.file)}${i.line ? `:${i.line}` : ''}` : '';
69
83
  const loc = where ? chalk.dim(` (${where})`) : '';
70
- lines.push(`${LEVEL_TAG[level](level.padEnd(7))} ${chalk.cyan(inline(i.code))}${loc}\n${INDENT}${block(i.message)}`);
84
+ lines.push(`${LEVEL_TAG[level](level.padEnd(7))} ${chalk.cyan(inline(i.code))}${loc}\n${INDENT}${block(i.message)}${docsLine(i)}`);
71
85
  }
72
86
  }
73
87
  const repeats = formatRepeats(issues);
@@ -1 +1 @@
1
- {"version":3,"file":"report.js","sourceRoot":"","sources":["../../src/cli/report.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"report.js","sourceRoot":"","sources":["../../src/cli/report.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"apply.d.ts","sourceRoot":"","sources":["../../src/core/apply.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AACnD,OAAO,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAe,MAAM,YAAY,CAAC;AAE/D,MAAM,WAAW,WAAW;IAC1B,QAAQ,EAAE,QAAQ,CAAC;IACnB,MAAM,EAAE,KAAK,EAAE,CAAC;CACjB;AAED;;;;;;GAMG;AACH,wBAAgB,QAAQ,CAAC,CAAC,EAAE,aAAa,GAAG,MAAM,EAAE,CAEnD;AAED;;;;GAIG;AACH,wBAAgB,UAAU,CAAC,IAAI,EAAE,QAAQ,EAAE,CAAC,EAAE,aAAa,GAAG,WAAW,CAiExE"}
1
+ {"version":3,"file":"apply.d.ts","sourceRoot":"","sources":["../../src/core/apply.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AACnD,OAAO,KAAK,EAAE,KAAK,EAAa,QAAQ,EAAe,MAAM,YAAY,CAAC;AAE1E,MAAM,WAAW,WAAW;IAC1B,QAAQ,EAAE,QAAQ,CAAC;IACnB,MAAM,EAAE,KAAK,EAAE,CAAC;CACjB;AAED;;;;;;GAMG;AACH,wBAAgB,QAAQ,CAAC,CAAC,EAAE,aAAa,GAAG,MAAM,EAAE,CAEnD;AAED;;;;GAIG;AACH,wBAAgB,UAAU,CAAC,IAAI,EAAE,QAAQ,EAAE,CAAC,EAAE,aAAa,GAAG,WAAW,CAiExE"}
@@ -1 +1 @@
1
- {"version":3,"file":"apply.js","sourceRoot":"","sources":["../../src/core/apply.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"apply.js","sourceRoot":"","sources":["../../src/core/apply.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,23 @@
1
+ /**
2
+ * Every code the engine can put on an `Issue`, and therefore every section the
3
+ * troubleshooting document must have. Alphabetical, so a diff against a heading
4
+ * list reads as a diff.
5
+ *
6
+ * This roster is asserted against two independent things: the `code: '…'`
7
+ * literals in `src/`, so a new diagnostic cannot be added without landing here,
8
+ * and the `##` headings of both language documents, so landing here cannot
9
+ * produce a dead link.
10
+ */
11
+ export declare const ISSUE_CODES: readonly ["add-conflict", "add-invalid", "change-not-found", "declared-not-run", "duplicate-prefix", "duplicate-requirement", "empty-spec", "internal-error", "invalid-change-name", "missing-spec-doc", "modify-invalid", "modify-missing", "never-red", "orphan-test", "possible-drift", "rationale-placeholder", "registry-invalid", "registry-no-default", "registry-not-static", "rename-source-missing", "rename-target-exists", "stale-spec-doc", "tests-red", "unbound-param", "uncovered-requirement", "unknown-target"];
12
+ export type IssueCode = (typeof ISSUE_CODES)[number];
13
+ /**
14
+ * The page explaining `code`, or `undefined` when nothing explains it.
15
+ *
16
+ * `undefined` rather than a best-effort link: an anchor that resolves to the
17
+ * top of the page looks like an answer and is not one. In this repository the
18
+ * roster is exhaustive, so the undefined branch is unreachable from the
19
+ * engine's own issues — it exists because `code` is typed `string` on `Issue`,
20
+ * and a caller outside the engine can put anything there.
21
+ */
22
+ export declare function docsUrl(code: string): string | undefined;
23
+ //# sourceMappingURL=docs.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"docs.d.ts","sourceRoot":"","sources":["../../src/core/docs.ts"],"names":[],"mappings":"AAYA;;;;;;;;;GASG;AACH,eAAO,MAAM,WAAW,mgBA2Bd,CAAC;AAEX,MAAM,MAAM,SAAS,GAAG,CAAC,OAAO,WAAW,CAAC,CAAC,MAAM,CAAC,CAAC;AAoCrD;;;;;;;;GAQG;AACH,wBAAgB,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAExD"}
@@ -0,0 +1,91 @@
1
+ // The link from a diagnostic to the page that explains it (design §5.3).
2
+ //
3
+ // `Issue.code` is the machine-readable name of a rule, and the troubleshooting
4
+ // document gives every rule one section whose heading *is* that code. So the
5
+ // anchor is not a second thing to maintain — it is the code — and a link can be
6
+ // derived rather than authored. Nothing here is hand-written per issue site,
7
+ // which is the whole point: a diagnostic added without a link is impossible,
8
+ // and a link pointing at a section that does not exist is caught by
9
+ // `tests/docs-consistency.spec.ts` rather than by a reader clicking it.
10
+ import { packageVersion } from './version.js';
11
+ /**
12
+ * Every code the engine can put on an `Issue`, and therefore every section the
13
+ * troubleshooting document must have. Alphabetical, so a diff against a heading
14
+ * list reads as a diff.
15
+ *
16
+ * This roster is asserted against two independent things: the `code: '…'`
17
+ * literals in `src/`, so a new diagnostic cannot be added without landing here,
18
+ * and the `##` headings of both language documents, so landing here cannot
19
+ * produce a dead link.
20
+ */
21
+ export const ISSUE_CODES = [
22
+ 'add-conflict',
23
+ 'add-invalid',
24
+ 'change-not-found',
25
+ 'declared-not-run',
26
+ 'duplicate-prefix',
27
+ 'duplicate-requirement',
28
+ 'empty-spec',
29
+ 'internal-error',
30
+ 'invalid-change-name',
31
+ 'missing-spec-doc',
32
+ 'modify-invalid',
33
+ 'modify-missing',
34
+ 'never-red',
35
+ 'orphan-test',
36
+ 'possible-drift',
37
+ 'rationale-placeholder',
38
+ 'registry-invalid',
39
+ 'registry-no-default',
40
+ 'registry-not-static',
41
+ 'rename-source-missing',
42
+ 'rename-target-exists',
43
+ 'stale-spec-doc',
44
+ 'tests-red',
45
+ 'unbound-param',
46
+ 'uncovered-requirement',
47
+ 'unknown-target',
48
+ ];
49
+ const DOCUMENTED = new Set(ISSUE_CODES);
50
+ const REPO = 'https://gitlab.com/Pseudorca/attest/-/blob';
51
+ const DOC = 'docs/en/troubleshooting.md';
52
+ /**
53
+ * The version whose documents a link points at, as a git ref.
54
+ *
55
+ * Pinned to the tag of the build that printed the diagnostic, not to `main`.
56
+ * The two failure modes are not symmetric:
57
+ *
58
+ * - **Pinned, between a release commit and its tag** — the ref does not resolve
59
+ * yet. But that window is a version nobody has installed: the manifest is
60
+ * bumped and the package is not published, so no build in anyone's
61
+ * `node_modules` prints those links. The 404 is unreachable in practice.
62
+ * - **Unpinned, after any breaking change to the codes** — a build from a year
63
+ * ago links into today's document. A renamed or removed code lands on a
64
+ * missing anchor, and worse, a code whose *meaning* changed lands on a
65
+ * section confidently describing a different rule. That one is reachable by
66
+ * every installed copy, forever, and it gets worse with every release.
67
+ *
68
+ * So the ref is `v<version>`, matching this repository's release tags. The
69
+ * fallback is `main`, for the one case where pinning is impossible rather than
70
+ * merely imprecise: `packageVersion()` answers `0.0.0` when it cannot read the
71
+ * manifest, and `v0.0.0` is a tag that has never existed.
72
+ */
73
+ function ref() {
74
+ const version = packageVersion();
75
+ return version === '0.0.0' ? 'main' : `v${version}`;
76
+ }
77
+ /** Resolved once: the version cannot change while the process runs. */
78
+ const BASE = `${REPO}/${ref()}/${DOC}`;
79
+ /**
80
+ * The page explaining `code`, or `undefined` when nothing explains it.
81
+ *
82
+ * `undefined` rather than a best-effort link: an anchor that resolves to the
83
+ * top of the page looks like an answer and is not one. In this repository the
84
+ * roster is exhaustive, so the undefined branch is unreachable from the
85
+ * engine's own issues — it exists because `code` is typed `string` on `Issue`,
86
+ * and a caller outside the engine can put anything there.
87
+ */
88
+ export function docsUrl(code) {
89
+ return DOCUMENTED.has(code) ? `${BASE}#${code}` : undefined;
90
+ }
91
+ //# sourceMappingURL=docs.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"docs.js","sourceRoot":"","sources":["../../src/core/docs.ts"],"names":[],"mappings":"AAAA,yEAAyE;AACzE,EAAE;AACF,+EAA+E;AAC/E,6EAA6E;AAC7E,gFAAgF;AAChF,6EAA6E;AAC7E,6EAA6E;AAC7E,oEAAoE;AACpE,wEAAwE;AAExE,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAE9C;;;;;;;;;GASG;AACH,MAAM,CAAC,MAAM,WAAW,GAAG;IACzB,cAAc;IACd,aAAa;IACb,kBAAkB;IAClB,kBAAkB;IAClB,kBAAkB;IAClB,uBAAuB;IACvB,YAAY;IACZ,gBAAgB;IAChB,qBAAqB;IACrB,kBAAkB;IAClB,gBAAgB;IAChB,gBAAgB;IAChB,WAAW;IACX,aAAa;IACb,gBAAgB;IAChB,uBAAuB;IACvB,kBAAkB;IAClB,qBAAqB;IACrB,qBAAqB;IACrB,uBAAuB;IACvB,sBAAsB;IACtB,gBAAgB;IAChB,WAAW;IACX,eAAe;IACf,uBAAuB;IACvB,gBAAgB;CACR,CAAC;AAIX,MAAM,UAAU,GAAG,IAAI,GAAG,CAAS,WAAW,CAAC,CAAC;AAEhD,MAAM,IAAI,GAAG,4CAA4C,CAAC;AAC1D,MAAM,GAAG,GAAG,4BAA4B,CAAC;AAEzC;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,SAAS,GAAG;IACV,MAAM,OAAO,GAAG,cAAc,EAAE,CAAC;IACjC,OAAO,OAAO,KAAK,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,OAAO,EAAE,CAAC;AACtD,CAAC;AAED,uEAAuE;AACvE,MAAM,IAAI,GAAG,GAAG,IAAI,IAAI,GAAG,EAAE,IAAI,GAAG,EAAE,CAAC;AAEvC;;;;;;;;GAQG;AACH,MAAM,UAAU,OAAO,CAAC,IAAY;IAClC,OAAO,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,IAAI,IAAI,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;AAC9D,CAAC"}
@@ -1,4 +1,6 @@
1
1
  export type { Requirement, Registry } from './schema.js';
2
+ export type { IssueCode } from './docs.js';
3
+ import type { IssueCode } from './docs.js';
2
4
  /** A scenario extracted statically from a spec file (design §5.2). */
3
5
  export interface ParsedScenario {
4
6
  reqId: string;
@@ -50,12 +52,31 @@ export type Level = 'ERROR' | 'WARNING' | 'INFO';
50
52
  */
51
53
  export interface Issue {
52
54
  level: Level;
53
- code: string;
55
+ /**
56
+ * Narrowed to the roster in core/docs.ts rather than left as `string`: that
57
+ * roster is also what the troubleshooting document is asserted against, so a
58
+ * diagnostic that no section explains cannot be constructed in the first
59
+ * place. The check is the compiler's, not a regex over the source — several
60
+ * issue sites build the code with a ternary or hand it through a variable,
61
+ * and a pattern that quietly missed those would police nothing.
62
+ */
63
+ code: IssueCode;
54
64
  /** The requirement this issue is about, when the issue is about exactly one. */
55
65
  reqId?: string;
56
66
  file?: string;
57
67
  line?: number;
58
68
  message: string;
69
+ /**
70
+ * Where `code` is explained. Derived from `code` at the moment a report is
71
+ * rendered (see core/docs.ts), never written at an issue site — so it cannot
72
+ * be forgotten on a new diagnostic and cannot disagree with the code beside it.
73
+ *
74
+ * Additive to the JSON shape, so no SCHEMA_VERSION bump: a consumer that has
75
+ * never heard of it reads the same report it always did. It is there for the
76
+ * human reading a CI log, not for the branch — a machine already has `code`,
77
+ * which is the more precise form of the same information.
78
+ */
79
+ docsUrl?: string;
59
80
  }
60
81
  /**
61
82
  * Whether an issue set is failing: true iff it contains any ERROR. This is the
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/core/types.ts"],"names":[],"mappings":"AAIA,YAAY,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAEzD,sEAAsE;AACtE,MAAM,WAAW,cAAc;IAC7B,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;CACd;AAED;;;GAGG;AACH,MAAM,WAAW,QAAQ;IACvB,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,+EAA+E;AAC/E,MAAM,WAAW,UAAU;IACzB,SAAS,EAAE,cAAc,EAAE,CAAC;IAC5B,SAAS,EAAE,QAAQ,EAAE,CAAC;CACvB;AAED;;;;GAIG;AACH,MAAM,MAAM,OAAO,GAAG,MAAM,GAAG,MAAM,CAAC;AAEtC,8DAA8D;AAC9D,MAAM,WAAW,SAAS;IACxB,gCAAgC;IAChC,MAAM,EAAE,OAAO,CAAC;IAChB,kFAAkF;IAClF,eAAe,EAAE,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC;IAC1C;;;;;OAKG;IACH,QAAQ,EAAE,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;CAC7C;AAED,0DAA0D;AAC1D,MAAM,MAAM,KAAK,GAAG,OAAO,GAAG,SAAS,GAAG,MAAM,CAAC;AAEjD;;;;;;GAMG;AACH,MAAM,WAAW,KAAK;IACpB,KAAK,EAAE,KAAK,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,gFAAgF;IAChF,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;CACjB;AAED;;;;GAIG;AACH,wBAAgB,QAAQ,CAAC,MAAM,EAAE,KAAK,EAAE,GAAG,OAAO,CAEjD"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/core/types.ts"],"names":[],"mappings":"AAIA,YAAY,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AACzD,YAAY,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AAE3C,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AAE3C,sEAAsE;AACtE,MAAM,WAAW,cAAc;IAC7B,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;CACd;AAED;;;GAGG;AACH,MAAM,WAAW,QAAQ;IACvB,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,+EAA+E;AAC/E,MAAM,WAAW,UAAU;IACzB,SAAS,EAAE,cAAc,EAAE,CAAC;IAC5B,SAAS,EAAE,QAAQ,EAAE,CAAC;CACvB;AAED;;;;GAIG;AACH,MAAM,MAAM,OAAO,GAAG,MAAM,GAAG,MAAM,CAAC;AAEtC,8DAA8D;AAC9D,MAAM,WAAW,SAAS;IACxB,gCAAgC;IAChC,MAAM,EAAE,OAAO,CAAC;IAChB,kFAAkF;IAClF,eAAe,EAAE,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC;IAC1C;;;;;OAKG;IACH,QAAQ,EAAE,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;CAC7C;AAED,0DAA0D;AAC1D,MAAM,MAAM,KAAK,GAAG,OAAO,GAAG,SAAS,GAAG,MAAM,CAAC;AAEjD;;;;;;GAMG;AACH,MAAM,WAAW,KAAK;IACpB,KAAK,EAAE,KAAK,CAAC;IACb;;;;;;;OAOG;IACH,IAAI,EAAE,SAAS,CAAC;IAChB,gFAAgF;IAChF,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB;;;;;;;;;OASG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED;;;;GAIG;AACH,wBAAgB,QAAQ,CAAC,MAAM,EAAE,KAAK,EAAE,GAAG,OAAO,CAEjD"}
@@ -1 +1 @@
1
- {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/core/types.ts"],"names":[],"mappings":"AAAA,2CAA2C;AAC3C,4EAA4E;AAC5E,gFAAgF;AAqEhF;;;;GAIG;AACH,MAAM,UAAU,QAAQ,CAAC,MAAe;IACtC,OAAO,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,KAAK,OAAO,CAAC,CAAC;AACjD,CAAC"}
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/core/types.ts"],"names":[],"mappings":"AAAA,2CAA2C;AAC3C,4EAA4E;AAC5E,gFAAgF;AA2FhF;;;;GAIG;AACH,MAAM,UAAU,QAAQ,CAAC,MAAe;IACtC,OAAO,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,KAAK,OAAO,CAAC,CAAC;AACjD,CAAC"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"version.d.ts","sourceRoot":"","sources":["../../src/core/version.ts"],"names":[],"mappings":"AAaA,wBAAgB,cAAc,IAAI,MAAM,CAOvC"}
@@ -1,7 +1,11 @@
1
1
  // The running attest version, read from the package manifest at runtime.
2
- // Resolved relative to this module (dist/cli/ -> package root) so the built
2
+ // Resolved relative to this module (dist/core/ -> package root) so the built
3
3
  // CLI reports the version it was actually installed as, not a literal that
4
4
  // silently rots between releases.
5
+ //
6
+ // In core rather than cli because it is not a CLI concern: `core/docs.ts` pins
7
+ // every documentation link to the tag of the build that printed it, which is
8
+ // the same question — which build is this — asked by something below the shell.
5
9
  import { createRequire } from 'node:module';
6
10
  const require = createRequire(import.meta.url);
7
11
  export function packageVersion() {
@@ -0,0 +1 @@
1
+ {"version":3,"file":"version.js","sourceRoot":"","sources":["../../src/core/version.ts"],"names":[],"mappings":"AAAA,yEAAyE;AACzE,6EAA6E;AAC7E,2EAA2E;AAC3E,kCAAkC;AAClC,EAAE;AACF,+EAA+E;AAC/E,6EAA6E;AAC7E,gFAAgF;AAEhF,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAE5C,MAAM,OAAO,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAE/C,MAAM,UAAU,cAAc;IAC5B,IAAI,CAAC;QACH,MAAM,QAAQ,GAAG,OAAO,CAAC,oBAAoB,CAAyB,CAAC;QACvE,OAAO,QAAQ,CAAC,OAAO,IAAI,OAAO,CAAC;IACrC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,OAAO,CAAC;IACjB,CAAC;AACH,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@am_shork/attest",
3
- "version": "0.4.0",
3
+ "version": "0.4.1",
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": {
@@ -1 +0,0 @@
1
- {"version":3,"file":"version.d.ts","sourceRoot":"","sources":["../../src/cli/version.ts"],"names":[],"mappings":"AASA,wBAAgB,cAAc,IAAI,MAAM,CAOvC"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"version.js","sourceRoot":"","sources":["../../src/cli/version.ts"],"names":[],"mappings":"AAAA,yEAAyE;AACzE,4EAA4E;AAC5E,2EAA2E;AAC3E,kCAAkC;AAElC,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAE5C,MAAM,OAAO,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAE/C,MAAM,UAAU,cAAc;IAC5B,IAAI,CAAC;QACH,MAAM,QAAQ,GAAG,OAAO,CAAC,oBAAoB,CAAyB,CAAC;QACvE,OAAO,QAAQ,CAAC,OAAO,IAAI,OAAO,CAAC;IACrC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,OAAO,CAAC;IACjB,CAAC;AACH,CAAC"}
File without changes