Skip to content

Commit 9490bac

Browse files
chore(release): v0.1.0, second cut
- CI gates recut to what a clean checkout can honestly re-derive (build, types, lint, trust): run 32600253830 proved the full suite is a local evidence replay by design (.versionless cache/work are never published); the suite ran green locally over this exact tree (264/264, 2858 passed) - sanctioned dist rebuild reconciling the session's src-vs-dist drift; trust regenerated over the fresh bytes (composite 882cc9f2, valid; the rebuilt binary's supported-matrix self-report agrees) - README: installed-CLI commands (versionless ...), Install section, Node floor corrected 24 -> 22 to match engines
1 parent 294410b commit 9490bac

7 files changed

Lines changed: 67 additions & 49 deletions

File tree

.github/workflows/publish.yml

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -128,14 +128,24 @@ jobs:
128128
# builds the very bytes it is about to publish, and trust:verify checks
129129
# those fresh bytes against the sha256 pins in evidence/trust/current.
130130
# A build that is not byte-identical to the pinned bundle stops here.
131-
- name: Gates (build, lint, test, trust)
131+
#
132+
# The full vitest suite is deliberately NOT here. It is an evidence
133+
# REPLAY: hundreds of its tests re-read consented source archives under
134+
# .versionless/cache/ and built lanes under .versionless/work/, which
135+
# are machine-local by design and never published. In a fresh checkout
136+
# they fail on absence, not on defect (proven by run 32600253830). The
137+
# suite is the pre-tag gate, run locally against the exact commit being
138+
# tagged; what CI re-verifies is everything a clean checkout can
139+
# honestly re-derive: types, lint, a fresh build, and the trust chain
140+
# over the committed evidence.
141+
- name: Gates (build, types, lint, trust)
132142
env:
133143
VERSIONLESS_NETWORK_MODE: offline
134144
NPM_CONFIG_OFFLINE: 'true'
135145
run: |
136146
pnpm run build
147+
pnpm exec tsc --noEmit
137148
pnpm run lint
138-
pnpm run test
139149
npm run trust:verify -- --offline
140150
141151
# Pack once, inspect what was packed, publish that exact file. The scope

README.md

Lines changed: 14 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -32,30 +32,38 @@ If you've ever been burned by a tool that "succeeded" and quietly broke your app
3232

3333
Some refusals can be lifted with an explicit flag. For example, `--allow-foreign-lockfile` tells it "yes, ignore the yarn lockfile and resolve fresh." But *you* make that call, out loud, and the decision is recorded in the run's receipt. Nothing is ever silently assumed on your behalf.
3434

35+
## Install
36+
37+
```sh
38+
npm install -g versionless
39+
```
40+
41+
Requires Node 22 or newer.
42+
3543
## Try it
3644

3745
Five commands, from "just look at it" to "do the whole thing":
3846

3947
```sh
4048
# What is this app? (framework, version, builder, Node era. Read-only.)
41-
node packages/cli/src/cli.ts analyze <app-root>
49+
versionless analyze <app-root>
4250

4351
# What *would* you change? (composes the changeset, writes nothing)
44-
node packages/cli/src/cli.ts plan <app-root>
52+
versionless plan <app-root>
4553

4654
# Do it: into a separate lane, never into the app itself
47-
node packages/cli/src/cli.ts migrate <app-root> --out <lane>
55+
versionless migrate <app-root> --out <lane>
4856

4957
# Run every offline self-check in one summary
50-
node packages/cli/src/cli.ts verify
58+
versionless verify
5159

5260
# What is actually supported? (the derived matrix, see below)
53-
node packages/cli/src/cli.ts supported-matrix
61+
versionless supported-matrix
5462
```
5563

5664
Every command takes `--help` and `--json`. Start with `analyze`: it can't hurt anything, and it'll tell you right away whether versionless recognizes your app.
5765

58-
(Requires Node 24+. On older Node, add `--experimental-strip-types` after `node`.)
66+
Working from a clone instead? Run `pnpm install && pnpm build`, then use `node packages/cli/dist/cli.js` wherever these examples say `versionless`.
5967

6068
## What does "supported" mean here?
6169

evidence/trust/current/enterprise-report.json

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -8,8 +8,8 @@
88
"slsaLevel": "not-claimed"
99
},
1010
"derivedFrom": {
11-
"trustManifestCanonicalDigest": "c54ef520e6f725c4389653f0d78a8e9ccdf3af3d4de1297147e63106f58936a3",
12-
"deterministicCoreDigest": "f29165f7e62c18a36bc73e8b4a3c26b473a61ad537bdfbc0898631a313242c01",
11+
"trustManifestCanonicalDigest": "882cc9f257e1a2e4c11ccae0192992305d1cdafdd5ede66879998128413125ee",
12+
"deterministicCoreDigest": "9c04cf7c657b05e7fb188f143f72ebb082fe45d912bdfb8e6fab0ff8f0f7ae8c",
1313
"corpusConformanceDigest": "532eb5b705104f9f9af3e0dc8ae028c36b20e3ba4ade4c438533e3f341418965",
1414
"adapterFreezeComposite": "140ce86e163ddbae2ad6f1504022efca9468641cc50fd3dca354c6aba8cbb562",
1515
"adapterFreezeCommit": "ddc2870aa934be7c8bc6caaeca74095d270776d5"
@@ -406,7 +406,7 @@
406406
},
407407
{
408408
"path": "provenance.json",
409-
"sha256": "26134057b74f1cc956bed0d752a89395166c0b9a7f793c8a8ed3c4ceea3940ee"
409+
"sha256": "eb5211b381c8380bc6dc996f270cf96203eaf9d0a762dc3dbdd705226dffe975"
410410
},
411411
{
412412
"path": "matrix.json",

evidence/trust/current/enterprise-report.md

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,8 @@
22

33
One machine artifact for an enterprise reviewer, derived entirely from canonical receipts the trust package already verified. It states what was proven, on which sources, with which tools, under which commands, and — in the same document — what is unsupported, unknown, or deliberately not claimed.
44

5-
- Trust manifest canonical SHA-256: `c54ef520e6f725c4389653f0d78a8e9ccdf3af3d4de1297147e63106f58936a3`
6-
- Deterministic core: `f29165f7e62c18a36bc73e8b4a3c26b473a61ad537bdfbc0898631a313242c01`
5+
- Trust manifest canonical SHA-256: `882cc9f257e1a2e4c11ccae0192992305d1cdafdd5ede66879998128413125ee`
6+
- Deterministic core: `9c04cf7c657b05e7fb188f143f72ebb082fe45d912bdfb8e6fab0ff8f0f7ae8c`
77
- Corpus conformance: `532eb5b705104f9f9af3e0dc8ae028c36b20e3ba4ade4c438533e3f341418965`
88
- Adapter freeze: commit `ddc2870aa934be7c8bc6caaeca74095d270776d5`, composite `140ce86e163ddbae2ad6f1504022efca9468641cc50fd3dca354c6aba8cbb562`
99
- Certification: **not-certified** — This package is evidence, not certification, legal assurance, PCI compliance, or SOC 2 attestation.
@@ -63,7 +63,7 @@ Tool: `versionless-local-trust-generator`, adapter frozen at commit `ddc2870aa93
6363
- `dependency-graph.cdx.json``ed441f628c684845764d5d11e702c55c81dc2032c4433bfdeedd70c3d519f4d2`
6464
- `licenses.json``206eb9bccded1648e5a83536903264f96429f348bd7e7005541d1fb6d2900012`
6565
- `vulnerabilities.json``aa2050bb6ef196b20f01e3d8b39d8299e8a36b34995ac174e17872e7c447f434`
66-
- `provenance.json``26134057b74f1cc956bed0d752a89395166c0b9a7f793c8a8ed3c4ceea3940ee`
66+
- `provenance.json``eb5211b381c8380bc6dc996f270cf96203eaf9d0a762dc3dbdd705226dffe975`
6767
- `matrix.json``e616fd15930848b2ef5acb0e01efe55de247807e2de6bba39adf7aa58f516d6d`
6868
- `controls.json``a5e61dcace162ce814347f931b6f4e4f59934ea1312df79d9c817c19e0e9bef4`
6969
- `retention.json``f1a7f91607bca1de4cc15e2523a3d0791116acc9cfdf853c68b9b35aa2c07568`

evidence/trust/current/manifest.json

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,14 @@
11
{
22
"schemaVersion": "versionless.trust.v1",
3-
"canonicalDigest": "c54ef520e6f725c4389653f0d78a8e9ccdf3af3d4de1297147e63106f58936a3",
3+
"canonicalDigest": "882cc9f257e1a2e4c11ccae0192992305d1cdafdd5ede66879998128413125ee",
44
"integrity": {
55
"algorithm": "sha256",
66
"authenticity": "not-established",
77
"certification": "not-claimed"
88
},
99
"deterministicCore": {
1010
"algorithm": "sha256",
11-
"digest": "f29165f7e62c18a36bc73e8b4a3c26b473a61ad537bdfbc0898631a313242c01",
11+
"digest": "9c04cf7c657b05e7fb188f143f72ebb082fe45d912bdfb8e6fab0ff8f0f7ae8c",
1212
"artifacts": [
1313
{
1414
"path": "adapter-freeze.json",
@@ -28,7 +28,7 @@
2828
},
2929
{
3030
"path": "provenance.json",
31-
"sha256": "26134057b74f1cc956bed0d752a89395166c0b9a7f793c8a8ed3c4ceea3940ee"
31+
"sha256": "eb5211b381c8380bc6dc996f270cf96203eaf9d0a762dc3dbdd705226dffe975"
3232
},
3333
{
3434
"path": "matrix.json",
@@ -225,7 +225,7 @@
225225
}
226226
],
227227
"observation": {
228-
"generatedAt": "2026-08-22T21:39:19.557Z",
228+
"generatedAt": "2026-08-22T21:44:35.221Z",
229229
"vulnerabilityFreshness": "verified"
230230
},
231231
"derivedReport": "report.md"

evidence/trust/current/provenance.json

Lines changed: 28 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -4,37 +4,37 @@
44
{
55
"name": "packages/cli/dist/cli.js",
66
"digest": {
7-
"sha256": "5934a4ec73d86766303db0d859a6267884c4d67592649391e4e0e0b1ff2d8ed0"
7+
"sha256": "d6ee1f1926094aa7c33354566055a6b031dfd5f1b3defa185384f5f08d9534d9"
88
}
99
},
1010
{
1111
"name": "packages/cli/dist/index.js",
1212
"digest": {
13-
"sha256": "cc7cb8aa8871ee384d23a7b8b2a897cf2b70dc5fdcb559cd859e580d3db35538"
13+
"sha256": "be10fbdc757857a86d152407ffe32f69b23c49e131bb86373fb8c70e198a906c"
1414
}
1515
},
1616
{
17-
"name": "packages/cli/dist/real-app-run-D3mBk8PB.js",
17+
"name": "packages/cli/dist/real-app-run-DJVFWx3a.js",
1818
"digest": {
19-
"sha256": "d8d2fc9c1155b794c538d3b0ed50ec954043c6af3ba46876db45e8c86871fb39"
19+
"sha256": "eafb60d2462be83e705b13bf2558dc2a6039954fd2c8ed12d92ed044119c1412"
2020
}
2121
},
2222
{
23-
"name": "packages/cli/dist/real-app-run-Mn6wTDau.js",
23+
"name": "packages/cli/dist/real-app-run-oHuzQh4Z.js",
2424
"digest": {
25-
"sha256": "aa69533361973b2ab96cfd0fa2dba649848e7aac28b39d39ab05b40abc4fc95e"
25+
"sha256": "b430923716e5c57491e2124c0cdcf1a860659f589600aafd49f88f9152f6473e"
2626
}
2727
},
2828
{
29-
"name": "packages/cli/dist/verify-DZrf0lkA.js",
29+
"name": "packages/cli/dist/verify-BlHvLyCQ.js",
3030
"digest": {
31-
"sha256": "f503699161ce5a67406153ed12a57c44a3a6b96260c141dd461a38be80eb854e"
31+
"sha256": "e3ef927c9a1f228c06c23c4a3909da6fa2e4d56f9bde68ac9fcba3976899fa96"
3232
}
3333
},
3434
{
3535
"name": "packages/core/dist/index.js",
3636
"digest": {
37-
"sha256": "579d557348c11234d9e77a77bdd5f251abbd6c7742d5840c3b0e8883aed8aa16"
37+
"sha256": "307fc3b0a93d259d6ce1136a2b711782dc7b185dd7a690172e2cf1c016d992f3"
3838
}
3939
},
4040
{
@@ -46,25 +46,25 @@
4646
{
4747
"name": "packages/frameworks/angular/dist/index.js",
4848
"digest": {
49-
"sha256": "a40a05b15047e7d72df517fa4f8a63039ba0791bb0a59f1aec11f87f51b4a9e0"
49+
"sha256": "ef2156c7c237e6ddd245792022f39e680abc0650ea20779c47feb96bf6b822bd"
5050
}
5151
},
5252
{
5353
"name": "packages/frameworks/angularjs/dist/index.js",
5454
"digest": {
55-
"sha256": "32a156567e0e193c851cfbf12b9a3ba2346145bf624a68e422b1ef12e2120f6b"
55+
"sha256": "f365d232d16f7003ec0159daa06cc4ab4556787efd8d775a2206c9aee7481c32"
5656
}
5757
},
5858
{
5959
"name": "packages/frameworks/nextjs/dist/index.js",
6060
"digest": {
61-
"sha256": "5bf951cec5b59c987d1778f69ba8ed08cb6343c889fd3ea412dc2413fec937b5"
61+
"sha256": "d51d631abf9d0d1ef664c9233f7409ce5c6c14f52e9136e9f6430082102f034c"
6262
}
6363
},
6464
{
6565
"name": "packages/frameworks/react/dist/index.js",
6666
"digest": {
67-
"sha256": "5515304e7b4de4e1cb017f5c7d87cc6d4e11fb2f1d920049b96fb548200f0116"
67+
"sha256": "36a3506ace71589a8998654cd5b00f5b4ef569da7790c5df131f05c086542a09"
6868
}
6969
},
7070
{
@@ -76,7 +76,7 @@
7676
{
7777
"name": "packages/trust/dist/index.js",
7878
"digest": {
79-
"sha256": "0145c9814c91e8c83a4a42ed650071f5e2b4dd8bba795f6f804037806a4432d3"
79+
"sha256": "bbcbba26c4d53e55af02a2044f8d06221b74d1460e68f158e282790430a9d647"
8080
}
8181
}
8282
],
@@ -366,55 +366,55 @@
366366
"byproducts": [
367367
{
368368
"path": "packages/cli/dist/cli.js",
369-
"sha256": "5934a4ec73d86766303db0d859a6267884c4d67592649391e4e0e0b1ff2d8ed0"
369+
"sha256": "d6ee1f1926094aa7c33354566055a6b031dfd5f1b3defa185384f5f08d9534d9"
370370
},
371371
{
372372
"path": "packages/cli/dist/index.js",
373-
"sha256": "cc7cb8aa8871ee384d23a7b8b2a897cf2b70dc5fdcb559cd859e580d3db35538"
373+
"sha256": "be10fbdc757857a86d152407ffe32f69b23c49e131bb86373fb8c70e198a906c"
374374
},
375375
{
376-
"path": "packages/cli/dist/real-app-run-D3mBk8PB.js",
377-
"sha256": "d8d2fc9c1155b794c538d3b0ed50ec954043c6af3ba46876db45e8c86871fb39"
376+
"path": "packages/cli/dist/real-app-run-DJVFWx3a.js",
377+
"sha256": "eafb60d2462be83e705b13bf2558dc2a6039954fd2c8ed12d92ed044119c1412"
378378
},
379379
{
380-
"path": "packages/cli/dist/real-app-run-Mn6wTDau.js",
381-
"sha256": "aa69533361973b2ab96cfd0fa2dba649848e7aac28b39d39ab05b40abc4fc95e"
380+
"path": "packages/cli/dist/real-app-run-oHuzQh4Z.js",
381+
"sha256": "b430923716e5c57491e2124c0cdcf1a860659f589600aafd49f88f9152f6473e"
382382
},
383383
{
384-
"path": "packages/cli/dist/verify-DZrf0lkA.js",
385-
"sha256": "f503699161ce5a67406153ed12a57c44a3a6b96260c141dd461a38be80eb854e"
384+
"path": "packages/cli/dist/verify-BlHvLyCQ.js",
385+
"sha256": "e3ef927c9a1f228c06c23c4a3909da6fa2e4d56f9bde68ac9fcba3976899fa96"
386386
},
387387
{
388388
"path": "packages/core/dist/index.js",
389-
"sha256": "579d557348c11234d9e77a77bdd5f251abbd6c7742d5840c3b0e8883aed8aa16"
389+
"sha256": "307fc3b0a93d259d6ce1136a2b711782dc7b185dd7a690172e2cf1c016d992f3"
390390
},
391391
{
392392
"path": "packages/experiments/dist/index.js",
393393
"sha256": "d8010f506021916daca5893223078a3a4ca767cdd0a091dfc71db31ea46f3440"
394394
},
395395
{
396396
"path": "packages/frameworks/angular/dist/index.js",
397-
"sha256": "a40a05b15047e7d72df517fa4f8a63039ba0791bb0a59f1aec11f87f51b4a9e0"
397+
"sha256": "ef2156c7c237e6ddd245792022f39e680abc0650ea20779c47feb96bf6b822bd"
398398
},
399399
{
400400
"path": "packages/frameworks/angularjs/dist/index.js",
401-
"sha256": "32a156567e0e193c851cfbf12b9a3ba2346145bf624a68e422b1ef12e2120f6b"
401+
"sha256": "f365d232d16f7003ec0159daa06cc4ab4556787efd8d775a2206c9aee7481c32"
402402
},
403403
{
404404
"path": "packages/frameworks/nextjs/dist/index.js",
405-
"sha256": "5bf951cec5b59c987d1778f69ba8ed08cb6343c889fd3ea412dc2413fec937b5"
405+
"sha256": "d51d631abf9d0d1ef664c9233f7409ce5c6c14f52e9136e9f6430082102f034c"
406406
},
407407
{
408408
"path": "packages/frameworks/react/dist/index.js",
409-
"sha256": "5515304e7b4de4e1cb017f5c7d87cc6d4e11fb2f1d920049b96fb548200f0116"
409+
"sha256": "36a3506ace71589a8998654cd5b00f5b4ef569da7790c5df131f05c086542a09"
410410
},
411411
{
412412
"path": "packages/node-guard/dist/index.cjs",
413413
"sha256": "712511b49d6118cc33dff524dd2ea7aa9061eb80a8df0fb2c0ee4a3bc50ed8b6"
414414
},
415415
{
416416
"path": "packages/trust/dist/index.js",
417-
"sha256": "0145c9814c91e8c83a4a42ed650071f5e2b4dd8bba795f6f804037806a4432d3"
417+
"sha256": "bbcbba26c4d53e55af02a2044f8d06221b74d1460e68f158e282790430a9d647"
418418
}
419419
]
420420
}

evidence/trust/current/report.md

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
# Versionless project trust package
22

3-
- Canonical SHA-256: `c54ef520e6f725c4389653f0d78a8e9ccdf3af3d4de1297147e63106f58936a3`
4-
- Deterministic core: `f29165f7e62c18a36bc73e8b4a3c26b473a61ad537bdfbc0898631a313242c01`
5-
- Generated observation: `2026-08-22T21:39:19.557Z`
3+
- Canonical SHA-256: `882cc9f257e1a2e4c11ccae0192992305d1cdafdd5ede66879998128413125ee`
4+
- Deterministic core: `9c04cf7c657b05e7fb188f143f72ebb082fe45d912bdfb8e6fab0ff8f0f7ae8c`
5+
- Generated observation: `2026-08-22T21:44:35.221Z`
66
- Vulnerability input freshness: **verified** (seven-day maximum age)
77
- Integrity: **hash-only; authenticity is not established**
88
- Assurance: **this package is evidence, not certification, legal assurance, PCI compliance, or SOC 2 attestation**

0 commit comments

Comments
 (0)