Files
recap-relay/startos/versions/v0.2.54.ts
T

14 lines
1.9 KiB
TypeScript
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
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 }) => {},
},
})