Package v0.2.12→v0.2.124: manifest, actions, version graph

This commit is contained in:
Keysat
2026-06-13 13:36:30 -05:00
parent 318c6c4b81
commit 1243f4414c
126 changed files with 2052 additions and 441 deletions
+13
View File
@@ -0,0 +1,13 @@
import { VersionInfo } from '@start9labs/start-sdk'
export const v_0_2_54 = VersionInfo.of({
version: '0.2.54:0',
releaseNotes: {
en_US:
'Two real root-cause fixes (no entitlement-name shortcuts). (1) License verifier was always null, silently degrading every paid license to Core. keysat-client.js\'s loadVerifier() called `mod.createVerifier()` — but the licensing-client doesn\'t export a `createVerifier` factory; it exports a `Verifier` CLASS that must be constructed as `new Verifier(PublicKey.fromPem(pem))`. So `verifier` stayed null forever → offline verification was skipped → `entitlements` came back as an empty Set → tierFromEntitlements() always returned "core" no matter what the license actually contained. A Pro license with the documented `relay_pro` entitlement (correctly configured in Keysat) still resolved to Core. Fixed by using the documented constructor shape AND loading the issuer PEM from /app/assets/issuer.pub at first use. The same PEM file Recap-app ships, so any license that validates in Recap now validates here too. (2) Dockerfile wasn\'t copying the assets/ directory into the runtime image, so even with the verifier code fixed, issuer.pub wouldn\'t exist at runtime. Added `COPY assets/ ./assets/` alongside the public/ and server/ copies. The entitlement-name namespacing stays intact: relay still requires explicit "relay_pro" / "relay_max" to grant Pro/Max — bare "pro"/"max" entitlements remain a Recap-app-only signal as originally designed. Also includes the stitcher containment dedup from the earlier 0.2.54 build draft: sections that the analyze model emits as fully-contained inside another section (e.g., "Decentralizing 1:101:12" inside "Systemic Critique 1:101:23") are now dropped instead of both surviving into the final output.',
},
migrations: {
up: async ({ effects }) => {},
down: async ({ effects }) => {},
},
})