upgrading/app/upgrades/0.14-to-0.15/instructions.md
upgrading/app/upgrades/0.14-to-0.15/instructions.mdBrowse 76 files
5,015 tokens
20,683 bytes
Token encoding: o200k_base
Snapshot fac8604
← Back to SKILL.md
from: "0.14" to: "0.15" changes:
- id: sql-orm-includes-decode-codec-values
summary: |
SQL ORM includes now decode every scalar child field through its contract-bound codec, matching top-level query results. Update application code and tests that relied on included fields retaining the database's JSON representation: for example, Postgres
byteainclude fields now returnUint8Arrayinstead of\\x-prefixed hex text, and timestamp include fields returnDateinstead of timestamp strings. Custom codec-backed include fields likewise return the value produced by the codec'sdecodeJsonmethod. - id: db-verify-json-single-issue-list
summary: |
prisma-next db verify --json(anddb verify --schema-only --json) now report a singleschema.issuesarray instead of the splitschema.issues/schema.schemaDiffIssuespair — the one-differ-two-ir-planner slice unified the CLI's schema-issue vocabulary onto one shape:{ path, reason, message, expected?, actual? }.reasonreplaces the retiredoutcomefield ('missing'->'not-found','extra'->'not-expected','mismatch'->'not-equal'). The same collapse applies toschema.warnings. If a script or CI step parsesdb verify --jsonoutput and readsschema.schemaDiffIssues/schema.warnings.schemaDiffIssues, or compares an issue's.outcomefield, update it: readschema.issues(it already carries everything the two lists used to, concatenated) and switch any.outcomecomparison to the matching.reasonvalue. detection: glob: "**/*.{ts,mts,cts,js,mjs,sh}" contains: - "schemaDiffIssues" - ".outcome === 'missing'" - ".outcome === 'extra'" - ".outcome === 'mismatch'" anyMatch: true - id: policy-target-models-require-rls-attribute
summary: |
RLS enablement is now an explicit, authored table attribute: a
policy_selectblock'stargetmodel must declare@@rls, orprisma-next contract emitfails withPSL_EXTENSION_TARGET_MODEL_MISSING_ATTRIBUTEnaming the model and the policy. Add@@rlsto every policy-bearing model and re-runprisma-next contract emit; the re-emittedcontract.jsongains anrlsmarker entity and a new storage hash. Plan semantics follow the marker, not the policy set: a marked table with RLS off plansENABLE ROW LEVEL SECURITY(even with policies in sync), removing every policy keeps RLS enabled (fail-closed deny-all), removing@@rlsitself plansDISABLE ROW LEVEL SECURITY(requires the destructive allowance), and changing only a policy's name prefix plans a singleALTER POLICY ... RENAME TOinstead of drop+create. detection: glob: "**/*.prisma" contains: - "policy_select" anyMatch: true
Upgrade 0.14 → 0.15
No consumer-facing action is required for this transition.
The diff under examples/ (and the example migration snapshots) is incidental —
emitted contract artefacts (contract.json / contract.d.ts) were regenerated
for two internal substrate changes:
- Scalar-list storage machinery. The emitted contracts now carry the
adapter-reported
scalarListcapability marker and the bumped envelope version. The scalar-list machinery threaded through this release is internal — no authoring path emits a list storage column yet, so generated types and runtime behaviour for existing schemas are unchanged. - Namespace-scoped execution-default refs (M:N). The contract's
ExecutionMutationDefault.refnow carries anamespacealongsidetableandcolumn, so an execution-time mutation default is keyed by(namespace, table, column), disambiguating same-named tables across namespaces. The runtime applies defaults by namespace transparently.
No user action — a re-emit picks up the new contract shape.