includio-cms 0.22.0 → 0.23.0
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/API.md +1 -1
- package/CHANGELOG.md +21 -0
- package/DOCS.md +1169 -146
- package/ROADMAP.md +4 -330
- package/dist/updates/0.23.0/index.d.ts +2 -0
- package/dist/updates/0.23.0/index.js +21 -0
- package/dist/updates/index.js +2 -1
- package/package.json +1 -1
package/ROADMAP.md
CHANGED
|
@@ -5,344 +5,18 @@
|
|
|
5
5
|
> `[P0]` critical | `[P1]` important | `[P2]` nice-to-have
|
|
6
6
|
> `<!-- files: path/to/file.ts -->` optionally linked files
|
|
7
7
|
>
|
|
8
|
-
> **Versioning:** 0.0
|
|
9
|
-
|
|
10
|
-
## 0.0.69 _(last 0.0.x)_
|
|
11
|
-
|
|
12
|
-
- [x] `[feature]` `[P1]` DnD reordering in array fields + arrayMove utility <!-- files: src/cms/fields/array-field -->
|
|
13
|
-
- [x] `[fix]` `[P1]` Nav-search: batch-fetch data before rendering Command dialog <!-- files: src/cms/nav-search -->
|
|
14
|
-
|
|
15
|
-
## 0.1.0 — Stabilization
|
|
16
|
-
|
|
17
|
-
- [x] `[fix]` `[P0]` Collection table pagination — server-side, persistent page state, archived tab <!-- files: src/lib/admin/client/collection/collection-entries.svelte, src/lib/admin/client/collection/table-pagination.svelte -->
|
|
18
|
-
- [x] `[fix]` `[P0]` Language switcher — reactive globally without reload, remove hardcoded en/pl <!-- files: src/lib/admin/state/interface-language.svelte.ts, src/lib/admin/components/layout/header-actions.svelte -->
|
|
19
|
-
- [x] `[fix]` `[P0]` User account section — fix name input, aria-pressed on prefs, clean up 2FA stub (email change deferred to 0.1.2, avatar upload skipped) <!-- files: src/lib/admin/client/account/ -->
|
|
20
|
-
- [x] `[fix]` `[P0]` Media tag counts always 0 — pass actual files to TagSidebar <!-- files: src/lib/admin/components/media/media-library.svelte, src/lib/admin/components/media/tag-sidebar.svelte -->
|
|
21
|
-
- [x] `[fix]` `[P0]` Hybrid target — don't render `data-hybrid-path` for non-logged-in users <!-- files: src/lib/sveltekit/components/hybrid-target.svelte -->
|
|
22
|
-
|
|
23
|
-
## 0.1.1 — Input integrity
|
|
24
|
-
|
|
25
|
-
- [x] `[fix]` `[P1]` Input constraints UI — HTML maxlength, character counter, pattern feedback <!-- files: src/lib/admin/components/fields/text-field.svelte, src/lib/admin/components/fields/text-field-wrapper.svelte -->
|
|
26
|
-
- [x] `[fix]` `[P1]` Array field maxItems — disable Add button when max reached <!-- files: src/lib/admin/components/fields/array-field.svelte -->
|
|
27
|
-
- [x] `[feature]` `[P1]` Array field fixed length — fixed item count, no add/remove, reorder only
|
|
28
|
-
- [x] `[feature]` `[P1]` Field constraint info display — show constraints before validation error (WCAG/ATAG) <!-- files: src/lib/admin/components/fields/text-field-wrapper.svelte, src/lib/admin/components/fields/field-renderer.svelte -->
|
|
29
|
-
|
|
30
|
-
## 0.1.2 — User management & RBAC
|
|
31
|
-
|
|
32
|
-
### Phase 1 — Core
|
|
33
|
-
|
|
34
|
-
- [x] `[feature]` `[P0]` RBAC middleware — `requireRole()`, role check w `requireAuth()` <!-- files: src/lib/admin/remote/middleware/auth.ts -->
|
|
35
|
-
- [x] `[feature]` `[P0]` Admin users page — list, search, pagination via `authClient.admin.listUsers` <!-- files: src/lib/admin/client/users/ -->
|
|
36
|
-
- [x] `[feature]` `[P0]` Create user — dialog z email/password/name/role via `authClient.admin.createUser` <!-- files: src/lib/admin/client/users/create-user-dialog.svelte -->
|
|
37
|
-
- [x] `[feature]` `[P0]` Edit user — name, email, role via `adminUpdateUser` + `setRole` <!-- files: src/lib/admin/client/users/edit-user-dialog.svelte -->
|
|
38
|
-
- [x] `[feature]` `[P0]` Delete user — confirmation dialog via `removeUser` <!-- files: src/lib/admin/client/users/ -->
|
|
39
|
-
- [x] `[feature]` `[P0]` Route/sidebar gating — ukryj Users nav + chroń `/admin/users` dla non-admin <!-- files: src/lib/admin/components/layout/nav-main.svelte, src/lib/sveltekit/server/handle.ts -->
|
|
40
|
-
- [x] `[feature]` `[P0]` First user bootstrap — pierwszy utworzony user auto-gets role `admin` <!-- files: src/lib/server/auth.ts -->
|
|
41
|
-
|
|
42
|
-
### Phase 2 — Extended
|
|
43
|
-
|
|
44
|
-
- [x] `[feature]` `[P1]` Admin session mgmt — list/revoke sesji innych userów <!-- files: src/lib/admin/client/users/user-sessions-sheet.svelte -->
|
|
45
|
-
- [x] `[feature]` `[P2]` Email invitation system — invite link generation (custom, nie w better-auth) <!-- files: src/lib/admin/remote/invite.ts -->
|
|
46
|
-
|
|
47
|
-
## 0.1.3 — Admin DX
|
|
48
|
-
|
|
49
|
-
- [x] `[feature]` `[P1]` Admin route scaffolding — CLI `includio scaffold admin`, catch-all API handler, page.params fallbacks for CollectionPage/EntryPage <!-- files: src/lib/cli/scaffold/admin.ts, src/lib/admin/api/handler.ts, src/lib/admin/client/collection/collection-page.svelte, src/lib/admin/client/entry/entry-page.svelte -->
|
|
50
|
-
|
|
51
|
-
## 0.1.4 — Build & reactivity fixes
|
|
52
|
-
|
|
53
|
-
- [x] `[fix]` `[P0]` Prepack: remove dist/paraglide/.gitignore before publint (publish validation) <!-- files: package.json -->
|
|
54
|
-
- [x] `[fix]` `[P1]` Collection entries: {#key} wrapper on query blocks to force re-fetch on param change <!-- files: src/lib/admin/client/collection/collection-entries.svelte -->
|
|
55
|
-
|
|
56
|
-
## 0.2.1–0.5.0 — Hybrid Editor System
|
|
57
|
-
|
|
58
|
-
> Szczegóły w **[ROADMAP-EDITOR.md](./ROADMAP-EDITOR.md)**
|
|
59
|
-
|
|
60
|
-
- **0.2.1** — array→blocks rename + simple array `[breaking]`
|
|
61
|
-
- **0.2.2** — Structured Content field (TipTap JSON output)
|
|
62
|
-
- **0.3.0** — Bard-style inline blocks
|
|
63
|
-
- **0.4.0** — Zone system (layout orchestration)
|
|
64
|
-
- **0.4.1** — Accessibility layer (ATAG Part B)
|
|
65
|
-
- **0.5.0** — Frontend rendering
|
|
66
|
-
|
|
67
|
-
## 0.5.1 — Patches & dashboard
|
|
68
|
-
|
|
69
|
-
- [x] `[feature]` `[P1]` Restore archived entries — banner, read-only mode, list actions
|
|
70
|
-
- [x] `[feature]` `[P2]` Dashboard: changelog modal, orphaned entries redesign, grid layout
|
|
71
|
-
- [x] `[fix]` `[P1]` Translation flow — reactive status, switcher UX, dynamic ref, copyFrom crash, panel scroll
|
|
72
|
-
- [x] `[fix]` `[P1]` False "Niezapisane zmiany" on entry load
|
|
73
|
-
- [x] `[fix]` `[P2]` Hide translation dots for non-required empty fields
|
|
74
|
-
|
|
75
|
-
## 0.5.2 — Update system fix
|
|
76
|
-
|
|
77
|
-
- [x] `[fix]` `[P1]` Split `migration` field into `sql` + `notes` — fixes CLI crash on text descriptions
|
|
78
|
-
|
|
79
|
-
## 0.5.3 — Form fields, inline blocks, hybrid preview
|
|
80
|
-
|
|
81
|
-
- [x] `[feature]` `[P1]` Form fields: select type, minLength/maxLength, errorMessage, remote commands
|
|
82
|
-
- [x] `[feature]` `[P1]` Conditional field visibility (showWhen)
|
|
83
|
-
- [x] `[feature]` `[P1]` Hybrid preview: device frames, container queries
|
|
84
|
-
- [x] `[feature]` `[P2]` TipTap placeholder extension + Notion-style styles
|
|
85
|
-
- [x] `[feature]` `[P1]` Server-side field resolution for inline blocks
|
|
86
|
-
- [x] `[feature]` `[P1]` Inline blocks: standalone form, field rendering, collapse UI
|
|
87
|
-
- [x] `[feature]` `[P2]` URL field: rel attribute, external auto-detect, UI redesign
|
|
88
|
-
- [x] `[feature]` `[P2]` Switch UI component + boolean field toggle
|
|
89
|
-
- [x] `[chore]` `[P2]` Storybook stories for all field types
|
|
90
|
-
- [x] `[chore]` `[P1]` Field components refactor: bindable value props
|
|
91
|
-
|
|
92
|
-
## 0.5.4 — Collection ordering & list columns
|
|
93
|
-
|
|
94
|
-
- [x] `[feature]` `[P1]` Orderable collections: DnD reordering with keyboard alternative (WCAG 2.1) <!-- files: src/lib/admin/client/collection/data-table.svelte, src/lib/admin/client/collection/collection-entries.svelte -->
|
|
95
|
-
- [x] `[feature]` `[P1]` Custom list columns: display entry fields as columns in collection list <!-- files: src/lib/admin/client/collection/collection-entries.svelte -->
|
|
96
|
-
- [x] `[feature]` `[P1]` `sortOrder` column + `reorderEntriesCommand` remote <!-- files: src/lib/db-postgres/schema/entry.ts, src/lib/admin/remote/entry.remote.ts -->
|
|
97
|
-
|
|
98
|
-
## 0.5.5 — REST API & orderable fixes
|
|
99
|
-
|
|
100
|
-
- [x] `[feature]` `[P1]` REST API with API key authentication — CRUD for collections, singletons, entries, schema, languages <!-- files: src/lib/admin/api/rest/ -->
|
|
101
|
-
- [x] `[feature]` `[P1]` API key configuration in CMS config (`apiKeys`) <!-- files: src/lib/types/cms.ts, src/lib/core/cms.ts -->
|
|
102
|
-
- [x] `[feature]` `[P2]` getEntries `orderBy` parameter support <!-- files: src/lib/types/entries.ts, src/lib/core/server/entries/operations/get.ts -->
|
|
103
|
-
- [x] `[fix]` `[P1]` Orderable collections: proper `<tr>` markup, visible reorder buttons, selection enabled <!-- files: src/lib/admin/client/collection/data-table.svelte -->
|
|
104
|
-
- [x] `[fix]` `[P1]` Relation field respects orderable collection sort order <!-- files: src/lib/admin/components/fields/relation-field.svelte -->
|
|
105
|
-
- [x] `[fix]` `[P1]` Nav active state exact match — prevents false highlights <!-- files: src/lib/admin/components/layout/nav-*.svelte -->
|
|
106
|
-
- [x] `[chore]` `[P2]` Admin scaffold generates REST API route <!-- files: src/lib/cli/scaffold/admin.ts -->
|
|
107
|
-
|
|
108
|
-
## 0.5.6 — Relation field & collection improvements
|
|
109
|
-
|
|
110
|
-
- [x] `[feature]` `[P1]` Relation field: dialog picker, reorder, search, multi-select UX <!-- files: src/lib/admin/components/fields/relation-field.svelte -->
|
|
111
|
-
- [x] `[feature]` `[P1]` getEntryLabels — lightweight labels endpoint for relation fields <!-- files: src/lib/admin/remote/entry.remote.ts -->
|
|
112
|
-
- [x] `[feature]` `[P2]` Collection list: relation labels in columns, delete only for archived <!-- files: src/lib/admin/client/collection/collection-entries.svelte -->
|
|
113
|
-
- [x] `[feature]` `[P2]` Icon map — string-based sidebar icons replace component refs <!-- files: src/lib/admin/components/layout/nav-main.svelte -->
|
|
114
|
-
- [x] `[fix]` `[P1]` TipTap: auto-expand new inline blocks, editor overflow, toolbar bg <!-- files: src/lib/admin/components/fields/structured-content/ -->
|
|
115
|
-
- [x] `[chore]` `[P2]` Runtime types: FormEntryMap rename, add remote.ts
|
|
116
|
-
- [x] `[chore]` `[P2]` Remove mode-watcher, hardcode light theme
|
|
117
|
-
|
|
118
|
-
## 0.5.7 — SEO field & content fixes
|
|
119
|
-
|
|
120
|
-
- [x] `[feature]` `[P1]` SEO field: auto/manual slug toggle with Switch <!-- files: src/lib/admin/components/fields/seo-field.svelte -->
|
|
121
|
-
- [x] `[fix]` `[P1]` Structured content: skip empty paragraphs, wrap inline blocks in div <!-- files: src/lib/core/server/entries/operations/ -->
|
|
122
|
-
- [x] `[fix]` `[P1]` resolveUrlFields: normalize flat string url/text, use raw DB calls <!-- files: src/lib/core/server/entries/ -->
|
|
123
|
-
- [x] `[chore]` `[P1]` Migrate #await to reactive query pattern across admin UI
|
|
124
|
-
|
|
125
|
-
## 0.5.8 — Media GC
|
|
126
|
-
|
|
127
|
-
- [x] `[feature]` `[P1]` Image style upsert: replace duplicates instead of creating new files
|
|
128
|
-
- [x] `[feature]` `[P1]` Auto-cleanup old style files from disk on regeneration
|
|
129
|
-
- [x] `[feature]` `[P1]` Admin maintenance page: purge styles, reconcile orphaned disk files
|
|
130
|
-
- [x] `[fix]` `[P1]` Deduplicate existing image style records (keep newest per unique key)
|
|
131
|
-
|
|
132
|
-
## 0.6.0 — Entity module & DX
|
|
133
|
-
|
|
134
|
-
- [x] `[feature]` `[P0]` Entity module — programmatic CRUD API for entries (`getEntity`) <!-- files: src/lib/entity/ -->
|
|
135
|
-
- [x] `[feature]` `[P1]` CLI `install-peers` command <!-- files: src/lib/cli/ -->
|
|
136
|
-
- [x] `[feature]` `[P1]` Collection data filters — filter by select/radio fields in toolbar <!-- files: src/lib/admin/client/collection/ -->
|
|
137
|
-
- [x] `[feature]` `[P1]` Layout dot-notation — distribute object fields across layout nodes <!-- files: src/lib/admin/components/fields/ -->
|
|
138
|
-
- [x] `[fix]` `[P1]` AI Claude: lazy client init, no crash without API key <!-- files: src/lib/ai-claude/ -->
|
|
139
|
-
- [x] `[fix]` `[P1]` Codegen: quote hyphenated slugs, PascalCase form schemas, improved query types <!-- files: src/lib/core/server/generator/ -->
|
|
140
|
-
- [x] `[fix]` `[P1]` TipTap: inline block content field lang fix + placeholder UX
|
|
141
|
-
- [x] `[fix]` `[P1]` Zod schema: skip lang wrapper for non-localized content field
|
|
142
|
-
- [x] `[breaking]` `[P0]` Runtime deps → peerDependencies (run `pnpm includio install-peers`)
|
|
143
|
-
|
|
144
|
-
## 0.6.1 — Admin experience
|
|
145
|
-
|
|
146
|
-
- [ ] `[feature]` `[P1]` Admin overlay — built-in admin bar on site (quick edit, preview, audit)
|
|
147
|
-
- [ ] `[feature]` `[P1]` Media gallery virtualization/pagination <!-- files: src/lib/admin/components/media/files-list.svelte -->
|
|
148
|
-
- [ ] `[feature]` `[P2]` Image styles UI — preview generated variants in editor
|
|
149
|
-
|
|
150
|
-
## 0.7.0 — Auth core refactor & design fixes
|
|
151
|
-
|
|
152
|
-
- [x] `[breaking]` `[P0]` Auth moved into CMS core — lazy betterAuth init from config, AuthAdapter → AuthConfig <!-- files: src/lib/core/cms.ts, src/lib/types/cms.ts, src/lib/sveltekit/server/handle.ts -->
|
|
153
|
-
- [x] `[fix]` `[P1]` Media checkered bg & overlay gradient aligned with design system palette <!-- files: src/lib/admin/styles/admin.css -->
|
|
154
|
-
- [x] `[fix]` `[P1]` Form inputs (input, textarea, select, input-group) use consistent bg-card background
|
|
155
|
-
- [x] `[fix]` `[P2]` Blocks field accordion: rounded borders, card background
|
|
156
|
-
- [x] `[fix]` `[P2]` Media file miniature: reset img/svg margins
|
|
157
|
-
|
|
158
|
-
## 0.7.1 — Custom fields & admin DX
|
|
159
|
-
|
|
160
|
-
- [x] `[feature]` `[P0]` Custom fields plugin system — type, zod/TS codegen, field renderer, populate resolver
|
|
161
|
-
- [x] `[feature]` `[P1]` pathTemplate — configurable URL paths for collections/singles
|
|
162
|
-
- [x] `[feature]` `[P1]` Admin public exports: admin/helpers & admin/ui for plugin authors
|
|
163
|
-
- [x] `[feature]` `[P2]` resolveMediaWithStyles utility & core svelte export
|
|
164
|
-
- [x] `[fix]` `[P1]` Schema serialization type cast (stricter TS compatibility)
|
|
165
|
-
|
|
166
|
-
## 0.7.2 — CLI create-user
|
|
167
|
-
|
|
168
|
-
- [x] `[feature]` `[P1]` CLI `create-user` command — interactive user creation with role assignment <!-- files: src/lib/cli/create-user.ts, src/lib/cli/index.ts -->
|
|
169
|
-
|
|
170
|
-
## 0.7.3 — Typography
|
|
171
|
-
|
|
172
|
-
- [x] `[feature]` `[P1]` Read-time orphan fix — replace space after single-letter Polish conjunctions with `\u00A0` <!-- files: src/lib/core/server/fields/resolveTypographyOrphans.ts, src/lib/core/server/fields/utils/fixOrphans.ts -->
|
|
173
|
-
|
|
174
|
-
## 0.8.0 — Flat entry format
|
|
175
|
-
|
|
176
|
-
- [x] `[breaking]` `[P0]` Flat entry format: objects use `_slug` + spread fields instead of `slug` + `data` wrapper
|
|
177
|
-
- [x] `[breaking]` `[P0]` Blocks use `_slug` instead of `slug` with flat fields
|
|
178
|
-
- [x] `[breaking]` `[P0]` `FlatEntry` type removed — use `Entry` instead
|
|
179
|
-
|
|
180
|
-
## 0.9.0 — Per-language entry versions
|
|
181
|
-
|
|
182
|
-
- [x] `[breaking]` `[P0]` Per-language entry versions: each language gets its own `entry_version` with flat data
|
|
183
|
-
- [x] `[feature]` `[P0]` Per-language publication: publish/unpublish each language independently
|
|
184
|
-
- [x] `[breaking]` `[P0]` Simplified data format: no more nested `{ pl: "X", en: "Y" }` — values are flat strings
|
|
185
|
-
|
|
186
|
-
## 0.10.0 — Field type consolidation
|
|
187
|
-
|
|
188
|
-
- [x] `[breaking]` `[P1]` Remove `image` field type — use `media` with `accept: "image/*"`
|
|
189
|
-
- [x] `[breaking]` `[P1]` Remove `richtext` field type — use `content` (structured JSON)
|
|
190
|
-
- [x] `[chore]` `[P1]` Remove `ImageField`, `RichtextField` interfaces + components
|
|
191
|
-
|
|
192
|
-
## 0.11.0 — Codegen & REST consolidation
|
|
193
|
-
|
|
194
|
-
- [x] `[feature]` `[P1]` Codegen: flat types, inline block types, `countEntries`, simplified API
|
|
195
|
-
- [x] `[feature]` `[P1]` REST API: catch-all route, upload endpoint, media endpoint, schema templates
|
|
196
|
-
- [x] `[chore]` `[P1]` Admin scaffold updated for new REST route structure
|
|
197
|
-
|
|
198
|
-
## 0.12.0 — File field, dataOrderBy, _url
|
|
199
|
-
|
|
200
|
-
- [x] `[feature]` `[P1]` File field type with multipart upload, validation, rate limiting
|
|
201
|
-
- [x] `[feature]` `[P1]` `dataOrderBy` — sort entries by JSON data fields
|
|
202
|
-
- [x] `[feature]` `[P1]` Auto-populate `_url` field on entries from slug resolver
|
|
203
|
-
|
|
204
|
-
## 0.13.0 — Private file uploads
|
|
205
|
-
|
|
206
|
-
- [x] `[feature]` `[P1]` Private file uploads — form submissions can upload files to non-public directory
|
|
207
|
-
|
|
208
|
-
## 0.13.1 — Admin i18n, codegen cleanup, docs
|
|
209
|
-
|
|
210
|
-
- [x] `[feature]` `[P1]` Admin UI i18n — TipTap, blocks, array, media components support pl/en <!-- files: src/lib/admin/components/tiptap/lang.ts -->
|
|
211
|
-
- [x] `[feature]` `[P2]` Inline block accordion labels — show field value in collapsed header <!-- files: src/lib/admin/components/tiptap/InlineBlockNodeView.svelte -->
|
|
212
|
-
- [x] `[feature]` `[P2]` Blocks field UrlFieldData label support <!-- files: src/lib/admin/components/fields/blocks-field.svelte -->
|
|
213
|
-
- [x] `[feature]` `[P2]` Email configuration remote endpoint <!-- files: src/lib/admin/remote/email.remote.ts -->
|
|
214
|
-
- [x] `[fix]` `[P1]` Codegen: remove unused Flat*FieldData types, use ImageFieldData/VideoFieldData <!-- files: src/lib/core/server/generator/fields.ts, src/lib/core/server/generator/generator.ts -->
|
|
215
|
-
- [x] `[fix]` `[P1]` Layout renderer: hide card header when label empty <!-- files: src/lib/admin/components/layout/layout-renderer.svelte -->
|
|
216
|
-
- [x] `[fix]` `[P1]` Collection entries: improved relation label fetching (UUID validation, multi-version) <!-- files: src/lib/admin/client/collection/collection-entries.svelte -->
|
|
217
|
-
- [x] `[fix]` `[P1]` Users page: client-side email config, remove server load <!-- files: src/lib/admin/client/users/users-page.svelte -->
|
|
218
|
-
- [x] `[fix]` `[P2]` Entry remote: stricter UUID validation for ids <!-- files: src/lib/admin/remote/entry.remote.ts -->
|
|
219
|
-
- [x] `[fix]` `[P2]` Layout type: remove unused label property <!-- files: src/lib/types/layout.ts -->
|
|
220
|
-
- [x] `[chore]` `[P1]` Documentation rewrite — new pages for blocks, content, media-field, layout; expanded API, auth, entries, forms, plugins docs
|
|
221
|
-
|
|
222
|
-
## 0.13.2 — Upload limits, stable reordering, image style optimization
|
|
223
|
-
|
|
224
|
-
- [x] `[feature]` `[P1]` Configurable upload size limit — `BODY_SIZE_LIMIT` env var, pre-validation in UI <!-- files: src/lib/core/server/media/uploadLimit.ts, src/lib/admin/api/upload-limit.ts, src/lib/admin/components/media/file-upload.svelte -->
|
|
225
|
-
- [x] `[feature]` `[P1]` Stable slot reordering — preserve filtered-out entry positions during DnD <!-- files: src/lib/admin/remote/reorder.ts, src/lib/admin/remote/entry.remote.ts -->
|
|
226
|
-
- [x] `[feature]` `[P1]` Collection relation field filtering — filter entries by relation values <!-- files: src/lib/admin/client/collection/collection-entries.svelte -->
|
|
227
|
-
- [x] `[feature]` `[P2]` Expose `_sortOrder` on entries + codegen for orderable collections <!-- files: src/lib/core/server/entries/operations/get.ts, src/lib/core/server/generator/generator.ts, src/lib/types/entries.ts -->
|
|
228
|
-
- [x] `[feature]` `[P2]` `getImageStyleIfExists` — non-blocking image style lookup <!-- files: src/lib/core/server/media/styles/operations/getImageStyle.ts -->
|
|
229
|
-
- [x] `[fix]` `[P1]` Concurrent image style generation with buffer reuse (download once, parallel limit 3) <!-- files: src/lib/core/server/media/styles/operations/generateDefaultStyles.ts, src/lib/core/server/media/styles/sharp/generateImageStyle.ts -->
|
|
230
|
-
- [x] `[fix]` `[P1]` Image style resolution gracefully skips missing styles <!-- files: src/lib/core/server/fields/utils/imageStyles.ts -->
|
|
231
|
-
|
|
232
|
-
## 0.13.3 — Security hardening
|
|
233
|
-
|
|
234
|
-
- [x] `[fix]` `[P0]` Timing-safe API key comparison (prevents timing attacks) <!-- files: src/lib/admin/api/rest/middleware/apiKey.ts -->
|
|
235
|
-
- [x] `[fix]` `[P0]` Remove demo reset endpoint with hardcoded fallback secret <!-- files: src/routes/api/demo/reset/ -->
|
|
236
|
-
- [x] `[fix]` `[P1]` Form rate limit: all requests + getClientAddress() instead of x-forwarded-for <!-- files: src/routes/api/forms/[slug]/submit/+server.ts -->
|
|
237
|
-
- [x] `[feature]` `[P1]` MIME blocklist on upload/replace endpoints <!-- files: src/lib/core/server/media/mimeBlocklist.ts -->
|
|
238
|
-
- [x] `[feature]` `[P1]` Security headers: X-Content-Type-Options, X-Frame-Options, Referrer-Policy <!-- files: src/lib/sveltekit/server/handle.ts -->
|
|
239
|
-
- [x] `[fix]` `[P1]` CMS constructor validates non-empty languages array <!-- files: src/lib/core/cms.ts -->
|
|
240
|
-
- [x] `[fix]` `[P2]` Unhandled promise rejection handlers in admin components
|
|
241
|
-
|
|
242
|
-
## 0.13.4 — Video poster regeneration
|
|
243
|
-
|
|
244
|
-
- [x] `[feature]` `[P1]` Batch video poster regeneration — admin maintenance page with SSE progress <!-- files: src/lib/admin/api/regenerate-posters.ts, src/lib/core/server/media/operations/batchRegenerateVideoPosters.ts, src/lib/admin/client/maintenance/maintenance-page.svelte -->
|
|
245
|
-
- [x] `[feature]` `[P1]` Video poster status reporting in media GC endpoint <!-- files: src/lib/admin/api/media-gc.ts -->
|
|
246
|
-
- [x] `[chore]` `[P1]` Extracted video processing to reusable module <!-- files: src/lib/files-local/video.ts, src/lib/files-local/index.ts -->
|
|
247
|
-
- [x] `[fix]` `[P1]` Filename sanitization normalizes Unicode to NFC <!-- files: src/lib/files-local/sanitizeFilename.ts -->
|
|
248
|
-
|
|
249
|
-
## 0.14.0 — Video transcoding
|
|
250
|
-
|
|
251
|
-
- [x] `[feature]` `[P1]` Video styles system — auto-transcode to mp4 h264 + webm vp9 <!-- files: src/lib/db-postgres/schema/videoStyle.ts, src/lib/files-local/transcode.ts -->
|
|
252
|
-
- [x] `[feature]` `[P1]` Background transcoding pipeline on upload with skip logic <!-- files: src/lib/core/server/media/styles/operations/generateDefaultVideoStyles.ts -->
|
|
253
|
-
- [x] `[feature]` `[P1]` Admin maintenance: video transcoding card (batch, purge, SSE progress) <!-- files: src/lib/admin/client/maintenance/maintenance-page.svelte -->
|
|
254
|
-
- [x] `[feature]` `[P2]` Frontend multi-source video delivery (webm, mp4, original) <!-- files: src/lib/sveltekit/components/video.svelte -->
|
|
255
|
-
- [x] `[feature]` `[P2]` Configurable video transcoding in MediaConfig <!-- files: src/lib/types/cms.ts -->
|
|
256
|
-
- [x] `[feature]` `[P2]` System info endpoint — CMS version, Node, PostgreSQL, ffmpeg, sharp, OS <!-- files: src/lib/admin/api/system-info.ts, src/lib/core/server/media/operations/getSystemInfo.ts -->
|
|
257
|
-
- [x] `[feature]` `[P2]` Disk usage endpoint — breakdown per category (originals, image styles, video styles, posters) <!-- files: src/lib/admin/api/system-info.ts, src/lib/core/server/media/operations/getDiskUsage.ts -->
|
|
258
|
-
|
|
259
|
-
## 0.14.1 — CMS context, Svelte 5 compat, docs
|
|
260
|
-
|
|
261
|
-
- [x] `[feature]` `[P1]` CMS context provider — Safari mp4 preference for video delivery <!-- files: src/lib/sveltekit/components/cms-provider.svelte, src/lib/sveltekit/components/video-context.ts, src/lib/types/cms-context.ts -->
|
|
262
|
-
- [x] `[fix]` `[P1]` Svelte 5 compatibility — a11y annotations, warning suppression across admin components
|
|
263
|
-
- [x] `[chore]` `[P1]` Documentation overhaul — new pages, README rewrite, DOCS.md compilation script <!-- files: scripts/compile-docs.ts, DOCS.md -->
|
|
264
|
-
- [x] `[chore]` `[P2]` Remove obsolete docs/ Obsidian config & stale docs
|
|
265
|
-
|
|
266
|
-
## 0.14.2 — Image styles: aspectRatio, skip defaults, lazy generation
|
|
267
|
-
|
|
268
|
-
- [x] `[feature]` `[P1]` aspectRatio option for image styles — crop to ratio without fixed dimensions <!-- files: src/lib/types/fields.ts, src/lib/core/server/media/styles/sharp/generateImageStyle.ts, src/lib/db-postgres/schema/imageStyle.ts -->
|
|
269
|
-
- [x] `[feature]` `[P1]` Skip default styles when field defines custom styles (prevents `<source>` conflicts in `<picture>`) <!-- files: src/lib/core/server/fields/utils/imageStyles.ts -->
|
|
270
|
-
- [x] `[feature]` `[P2]` Lazy generation of custom field styles on first read <!-- files: src/lib/core/server/fields/utils/imageStyles.ts -->
|
|
271
|
-
|
|
272
|
-
## 0.14.3 — Background maintenance
|
|
273
|
-
|
|
274
|
-
- [x] `[feature]` `[P1]` Background maintenance scheduler — auto styles, posters, transcodes, orphan cleanup on configurable interval <!-- files: src/lib/core/server/media/operations/backgroundMaintenance.ts, src/lib/core/cms.ts -->
|
|
275
|
-
- [x] `[feature]` `[P1]` Maintenance status API endpoint <!-- files: src/lib/admin/api/maintenance-status.ts, src/lib/admin/api/handler.ts -->
|
|
276
|
-
- [x] `[feature]` `[P2]` Configurable maintenance interval via `media.maintenance` config <!-- files: src/lib/types/cms.ts -->
|
|
277
|
-
- [x] `[feature]` `[P1]` Maintenance page UI redesign — status banner, sections, SSE handler dedup <!-- files: src/lib/admin/client/maintenance/maintenance-page.svelte -->
|
|
278
|
-
|
|
279
|
-
## 0.14.5 — Schema cleanup
|
|
280
|
-
|
|
281
|
-
- [x] `[chore]` `[P2]` Move image & video style unique indexes into Drizzle ORM schema (single source of truth) <!-- files: src/lib/db-postgres/schema/imageStyle.ts, src/lib/db-postgres/schema/videoStyle.ts -->
|
|
282
|
-
|
|
283
|
-
## 0.14.6 — Admin page titles
|
|
284
|
-
|
|
285
|
-
- [x] `[fix]` `[P2]` Admin `<title>` from breadcrumbs + pre-login titles + AriaCMS brand <!-- files: src/lib/admin/utils/pageTitle.ts, src/lib/admin/client/admin/admin-after-login-layout-content.svelte -->
|
|
286
|
-
- [x] `[fix]` `[P1]` Video poster always from first frame (no jump on load) <!-- files: src/lib/files-local/video.ts -->
|
|
287
|
-
- [x] `[feature]` `[P2]` Manual poster regeneration in media library file details <!-- files: src/lib/core/server/media/operations/regenerateVideoPoster.ts, src/lib/admin/components/media/file/file-details.svelte -->
|
|
288
|
-
- [x] `[feature]` `[P2]` Config flag `sidebarHelp` to hide admin sidebar Help link (default true) <!-- files: src/lib/types/cms.ts, src/lib/core/cms.ts, src/routes/admin/(afterLogin)/+layout.server.ts, src/lib/admin/components/layout/nav-footer.svelte -->
|
|
289
|
-
|
|
290
|
-
## 0.15.0 — Shop MVP (headless e-commerce)
|
|
291
|
-
|
|
292
|
-
- [x] `[feature]` `[P0]` Scaffold: `defineShop`, types, CMSConfig slot, package export `./shop` <!-- files: src/lib/shop/index.ts, src/lib/shop/types.ts -->
|
|
293
|
-
- [x] `[feature]` `[P0]` Drizzle tables: products (entry-backed), variants, orders, order items, status history, payments, shipping methods, stock reservations <!-- files: src/lib/db-postgres/schema/shop/ -->
|
|
294
|
-
- [x] `[feature]` `[P0]` Runtime `schema.ts` generator for drizzle-kit (core + auth + optional shop) <!-- files: src/lib/core/server/generator/generator.ts, src/lib/db-postgres/schema-core.ts, src/lib/db-postgres/schema-shop.ts -->
|
|
295
|
-
- [x] `[feature]` `[P0]` Rate-limit middleware (checkout/webhook) <!-- files: src/lib/shop/rate-limit.ts -->
|
|
296
|
-
- [x] `[feature]` `[P0]` Built-in `shop` field type — makes entries purchasable, auto-hydrated via populateEntryData <!-- files: src/lib/admin/components/fields/shop-field.svelte, src/lib/shop/server/populate.ts -->
|
|
297
|
-
- [x] `[feature]` `[P0]` Net/gross price toggle + live VAT preview in shop field and shipping form
|
|
298
|
-
- [x] `[feature]` `[P0]` Auto default variant on upsert — cart/order always reference variantId
|
|
299
|
-
- [x] `[feature]` `[P0]` Shop admin: products list (JOIN entries × shop_products), shipping methods CRUD with drag-n-drop reorder + free-above threshold
|
|
300
|
-
- [x] `[feature]` `[P0]` Cart (signed cookie) service + `/api/shop/cart` REST + headless SDK `createShopClient()` <!-- files: src/lib/shop/cart/, src/lib/shop/client/ -->
|
|
301
|
-
- [x] `[feature]` `[P0]` Orders + checkout + `manualAdapter` + status emails (inline HTML, PL/EN) <!-- files: src/lib/shop/server/orders.ts, src/lib/shop/http/checkout-handler.ts -->
|
|
302
|
-
- [x] `[feature]` `[P0]` Stock reservation with 30-min TTL — released on cancel/reject, consumed on paid
|
|
303
|
-
- [x] `[feature]` `[P0]` Admin orders view — list (status + email filter), detail (items, history, customer/address/consents, change status, resend email)
|
|
304
|
-
- [x] `[feature]` `[P0]` Random Crockford base32 order numbers (`XXXXX-XXXXX`), unguessable
|
|
305
|
-
- [x] `[feature]` `[P0]` CLI scaffold provisions all shop routes (admin + public API) in consumer app
|
|
306
|
-
- [x] `[feature]` `[P1]` PayU payment adapter + webhook — shipped in 0.15.1 (access-token-gated order view, idempotent webhooks, MD5 signature, shipping↔payment compat, poll fallback)
|
|
307
|
-
- [ ] `[feature]` `[P1]` Stripe payment adapter + webhook — deferred to 0.15.4
|
|
308
|
-
- [x] `[feature]` `[P2]` InPost carrier adapter — shipped in 0.15.3 (Geowidget v5 picker + ShipX shipments + auto-confirm + webhook status updates)
|
|
309
|
-
|
|
310
|
-
## 0.15.2 — Price precision fix
|
|
311
|
-
|
|
312
|
-
- [x] `[fix]` `[P1]` Price drift on reload — storage jako `numeric(20,6)` (PLN z 6dp), brutto round-tripuje bez utraty ±1gr. Snapshot zamówienia dalej w groszach (KSeF). <!-- files: src/lib/db-postgres/schema/shop/product.ts, productVariant.ts, shippingMethod.ts, src/lib/shop/pricing.ts, src/lib/shop/server/cart-hydrate.ts, shipping.ts, shop-data.ts, src/lib/admin/components/fields/shop-field.svelte, src/lib/admin/client/shop/shipping-method-form.svelte -->
|
|
313
|
-
- [x] `[feature]` `[P2]` Variant price toggle netto/brutto (spójne z toggle\'em ceny bazowej)
|
|
314
|
-
- [x] `[feature]` `[P2]` `nodemailerAdapter` — typowanie `transportOptions` jako `SMTPTransport.Options` (OAuth2, pool, itd.)
|
|
315
|
-
|
|
316
|
-
## 0.15.3 — InPost carrier
|
|
317
|
-
|
|
318
|
-
- [x] `[feature]` `[P2]` `inpostAdapter()` — Geowidget v5 (`<InpostPicker>` Svelte + raw config endpoint), ShipX shipment create + auto-buy + label PDF + cancel, webhook → status + tracking, per-shipping-method service config, customer tracking display in `<OrderStatus>` + email templates
|
|
319
|
-
- [x] `[chore]` `[P2]` Verbose logging on adapter auto-confirm flow (offer prep wait, buy POST, polling) for sandbox debugging
|
|
320
|
-
|
|
321
|
-
## 0.15.4 — Forms submission scaffold + best-effort notification emails
|
|
322
|
-
|
|
323
|
-
- [x] `[feature]` `[P1]` CLI scaffold emits `src/routes/api/forms/[slug]/submit/+server.ts` — public form submit endpoint auto-generated, no manual setup per project <!-- files: src/lib/cli/scaffold/admin.ts, src/lib/cli/scaffold/admin.spec.ts -->
|
|
324
|
-
- [x] `[fix]` `[P0]` `createFormSubmission` — split try/catch so SMTP failure no longer returns `false` (endpoint responded 500 even though submission was persisted); notification email is best-effort, logged via `console.error` <!-- files: src/lib/core/server/forms/submissions/operations/create.ts -->
|
|
325
|
-
- [ ] `[feature]` `[P1]` Built-in `/api/health` + `/api/health/ready` with per-adapter checks (db/files/email/ai) + ręczny SMTP diagnostics panel in maintenance page <!-- files: ideas/health-check-module.md -->
|
|
326
|
-
|
|
327
|
-
## 0.16.0 — Hard reset
|
|
328
|
-
|
|
329
|
-
> Start drogi do v1.0.0. Decyzje: **[V1-DECISIONS.md](./V1-DECISIONS.md)** | Workflow: **[V1-WORKFLOW.md](./V1-WORKFLOW.md)**
|
|
330
|
-
|
|
331
|
-
- [x] `[breaking]` `[P0]` Wycięty `src/lib/inline-edit-proto/` (kod na lokalnym branchu `archive/inline-edit-proto`) — inline edit od zera w v1.x
|
|
332
|
-
- [x] `[breaking]` `[P0]` Wycięty `src/lib/demo/seed.ts` + demo routes (`/demo/*`, `/admin/demo/*`) — demo content od zera w v1.x
|
|
333
|
-
- [x] `[breaking]` `[P0]` Skasowany `ROADMAP-EDITOR.md` (treść na archive branch)
|
|
334
|
-
- [x] `[chore]` `[P2]` `ideas/*.md` przeniesione do `ideas/post-v1/` (lokalnie, w `.gitignore`); `select-field-defaultvalue-bug` promowany do v1.0 fix
|
|
335
|
-
- [x] `[chore]` `[P2]` `V1-DECISIONS.md` jako referencja decyzji v1 dla każdej kolejnej sesji
|
|
8
|
+
> **Versioning:** since 0.16.0 droga do v1.0.0. Pre-v1.0 history → **[ROADMAP-ARCHIVE.md](./ROADMAP-ARCHIVE.md)**.
|
|
336
9
|
|
|
337
10
|
## v1.0.0 — Stabilizacja (in progress)
|
|
338
11
|
|
|
339
|
-
> 13 faz w ~16 sesjach, droga 0.16 → 1.0.0. Lean scope: stabilizacja, security, testy, docs, audit + polish shopa. Bez nowych feature'ów.
|
|
12
|
+
> 13 faz w ~16 sesjach, droga 0.16 → 1.0.0. Lean scope: stabilizacja, security, testy, docs, audit + polish shopa. Bez nowych feature'ów. Decyzje: **[V1-DECISIONS.md](./V1-DECISIONS.md)** | Workflow: **[V1-WORKFLOW.md](./V1-WORKFLOW.md)**.
|
|
340
13
|
|
|
341
|
-
- [x] `[breaking]` `[P0]` API surface lock — exports trim 26→
|
|
14
|
+
- [x] `[breaking]` `[P0]` API surface lock — exports trim 26→16, JSDoc tagi (@public/@internal/@experimental), `API.md` autogenerated (0.20.0) <!-- files: package.json, scripts/generate-api-md.ts -->
|
|
342
15
|
- [x] `[chore]` `[P1]` Faza 6 — Test foundation: docker postgres + integration project + 43 cases (30 REST + 6 shop checkout + 7 webhook signature/idempotency dla PayU/InPost), coverage report <!-- files: tests/integration/rest/, tests/helpers/{rest,shop}.ts, tests/integration/fixtures/shopConfig.ts, tests/setup.ts -->
|
|
343
16
|
- [x] `[chore]` `[P1]` Faza 7 — E2E foundation: Playwright config (storageState reuse, setup project), `db_test_e2e` na 5435, `e2e/setup/global-setup.ts` (drizzle push), `e2e/admin/auth.setup.ts` (sign-up + admin role + login), 4 specy zielone w ~23s: login, collection-crud (blog-post create→edit→archive→permanent-delete), media-upload, user-mgmt (create→delete); data-testid na critical buttons admin <!-- files: playwright.config.ts, e2e/admin/*, src/lib/admin/client/{collection,entry,users}/, src/lib/admin/components/media/file-upload.svelte -->
|
|
344
17
|
- [x] `[chore]` `[P1]` Faza 8 — CI na PR: `.github/workflows/ci.yml` z jobs lint/typecheck/unit/integration (postgres :5434)/e2e (postgres :5435 + playwright cache)/build, pnpm cache, trace artifacts on fail, README CI badge <!-- files: .github/workflows/ci.yml, README.md -->
|
|
345
18
|
- [x] `[breaking]` `[P0]` Faza 9 — DX & config validation (0.22.0): `defineConfig` Zod strict z field path + hint, `CmsError` + `ConfigValidationError` z code/context, resolver throw sites zmigrowane, CLI `--help` per subcommand + `--version`, `.env.example` rozszerzony o `INCLUDIO_*`, README rebuild (TOC + system req + 5-min quickstart), JSDoc body (opis + @param + @returns + @example) na każdym `@public` <!-- files: src/lib/core/errors.ts, src/lib/types/cms.schema.ts, src/lib/sveltekit/config.ts, src/lib/cli/index.ts, README.md, .env.example, src/lib/updates/0.22.0/ -->
|
|
19
|
+
- [x] `[chore]` `[P1]` Faza 10 — Documentation Pass (0.23.0): DOCS.md uzupełnione (number/boolean/date edge cases, REST cURL + error codes, Entries error handling + transactions, Admin UI a11y, Adapter Contracts), nowe sekcje (Stability Promise, Security Model), Migration Guide v0.x → v1.0 master cheatsheet (0.16-0.22), ROADMAP cleanup (pre-v1.0 → ROADMAP-ARCHIVE.md) <!-- files: src/routes/docs/{stability-promise,security}/+page.svx, src/routes/docs/migration/+page.svx, src/routes/docs/_config/nav.ts, scripts/compile-docs.ts, ROADMAP-ARCHIVE.md, src/lib/updates/0.23.0/ -->
|
|
346
20
|
- [ ] `[fix]` `[P1]` Select field — `defaultValue` propagacja do zod schema (full repro: `ideas/post-v1/select-field-defaultvalue-bug.md`); fix planowany w Fazie 12 (RC)
|
|
347
21
|
|
|
348
22
|
## v1.x — Post-v1.0 deferred
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
export const update = {
|
|
2
|
+
version: '0.23.0',
|
|
3
|
+
date: '2026-04-30',
|
|
4
|
+
description: 'Faza 10 — Documentation Pass. DOCS.md uzupełniony (REST cURL + error codes, Entries error handling + transaction patterns, Admin UI a11y guide, Adapter Contracts z interfaces + peer deps + lazy import, Shop retry-payment lifecycle, edge cases dla number/boolean/date/datetime). Nowe sekcje: Stability Promise (semver, @public/@experimental/@internal, deprecation timeline) i Security Model (CSRF, CSP, rate-limit, API keys, link do KNOWN-RISKS.md). Migration Guide rozszerzony o master cheatsheet 0.x → 1.0 (agregat 0.16-0.22). ROADMAP cleanup: pre-v1.0 historia → ROADMAP-ARCHIVE.md.',
|
|
5
|
+
features: [
|
|
6
|
+
'`docs/stability-promise/` — nowa strona: SemVer 2.0, JSDoc tagi (@public semver-protected, @experimental opt-in to change, @internal poza kontraktem), deprecation timeline (1 minor cycle z @deprecated → remove w MAJOR), reference do `API.md` jako single source of truth public surface.',
|
|
7
|
+
'`docs/security/` — nowa strona: threat model in/out of scope, CSRF (Origin/Referer guard na `/admin/api/*`), CSP (`default-src self`, `unsafe-inline` na script/style + uzasadnienie TipTap/Paraglide), rate limiting (200/60s admin, 5/h forms, env override), API keys (opt-in `expiresAt`, audit `rotatedAt`, `generateApiKey()`), Sharp 30s timeout, link do `KNOWN-RISKS.md` (5 zaakceptowanych ryzyk).',
|
|
8
|
+
'`docs/migration/` — sekcja "Migrating from 0.x to 1.0 — master cheatsheet": global find-replace (getEntry → resolveEntry, language → locale), per-version blocks dla 0.16.0, 0.18.0, 0.19.0, 0.20.0, 0.21.0, 0.22.0 z migration steps + code examples, suggested upgrade path (pnpm + check + db:push + test).',
|
|
9
|
+
'`docs/adapters/` — sekcja "Adapter contracts": tabela 4 interfaces (DatabaseAdapter 38 metod, FilesAdapter 5+3 optional, EmailAdapter 1+config, AIAdapter 1) z source paths, peer deps required vs optional, lazy import pattern (przykład `email-nodemailer`), error contracts, best practices (timeouts, retry, partial state).',
|
|
10
|
+
'`docs/api/` — REST cURL examples (GET/POST/PUT/DELETE, upload), tabela error responses (HTTP × `CmsError.code`: UNAUTHORIZED, ENTRY_NOT_FOUND, INVALID_DATA, MISSING_REQUIRED_PARAM, RATE_LIMITED, etc.), authentication (Bearer header), opt-in `expiresAt` w API keys. Remote Functions section zaktualizowana na `resolveEntry/resolveEntries/countEntries`.',
|
|
11
|
+
'`docs/entries/` — sekcja "Error handling" (CmsError instanceof + stable codes), sekcja "Transaction patterns" (last-write-wins versioning, custom Drizzle tx z `cms.db.driver`, plugin hooks vs partial failure). Querying przepisany na `resolveEntry/resolveEntries/countEntries` (status enum: published/draft/scheduled, archived = ops nie status).',
|
|
12
|
+
'`docs/admin-ui/` — sekcja "Accessibility": WCAG 2.1 AA targets per surface (color contrast, keyboard nav, focus management, skip-link, heading hierarchy, ARIA roles, reduced motion), pattern dla custom plugin panels.',
|
|
13
|
+
'`docs/shop/retry-payment/` — pełen lifecycle (5 kroków + ASCII diagram), server endpoint scaffold, headless SDK + `createOrderState`, error responses (400/401/404/409/429/502 z `CmsError.code`), constraints (same totals, token-gated, rate-limited, idempotent gateway, no auto-retry), admin override.',
|
|
14
|
+
'`docs/fields/{number,boolean,date,datetime}/` — sekcje "Edge cases": number (NaN/Infinity rejection, floating-point precision, integer-only via step:1, parseFloat guards), boolean (null vs false, no string coercion, defaultValue vs runtime backfill), date (no timezone, ISO-8601 calendar string, null handling, edge years), datetime (UTC storage + local render, DST traps, ISO datetime validation).',
|
|
15
|
+
'`ROADMAP-ARCHIVE.md` (root) — pełna historia 0.0.69 → 0.16.0 wycięta z `ROADMAP.md`. `ROADMAP.md` zawiera od teraz wyłącznie v1.0+ (header + legenda + v1.0 + v1.x + Security + Backlog), z linkiem do archive.',
|
|
16
|
+
'`_config/nav.ts` + `scripts/compile-docs.ts` — zsynchronizowane: dodane "Stability Promise" w Guides, "Security Model" w "Authentication & Security" (renamed z "Authentication"). Brakujący "InPost Carrier" w nav.ts dodany dla parity z compile-docs.'
|
|
17
|
+
],
|
|
18
|
+
fixes: [],
|
|
19
|
+
breakingChanges: [],
|
|
20
|
+
notes: 'Brak code changes — only docs + ROADMAP cleanup. DOCS.md regeneruje się przez `pnpm docs:compile` (część `prepublishOnly`). Po publikacji pełen TOC widoczny w DOCS.md z 10 zaktualizowanymi/nowymi sekcjami. Dla user-facing changes — żadnych. Dla devów customizujących admin UI lub piszących adaptery — pełny stable contract w jednym miejscu.'
|
|
21
|
+
};
|
package/dist/updates/index.js
CHANGED
|
@@ -56,7 +56,8 @@ import { update as update0190 } from './0.19.0/index.js';
|
|
|
56
56
|
import { update as update0200 } from './0.20.0/index.js';
|
|
57
57
|
import { update as update0210 } from './0.21.0/index.js';
|
|
58
58
|
import { update as update0220 } from './0.22.0/index.js';
|
|
59
|
-
|
|
59
|
+
import { update as update0230 } from './0.23.0/index.js';
|
|
60
|
+
export const updates = [update0065, update0066, update0067, update0068, update0069, update010, update011, update012, update013, update014, update015, update020, update022, update050, update051, update052, update053, update054, update055, update056, update057, update058, update060, update061, update062, update070, update071, update072, update073, update080, update090, update0100, update0110, update0120, update0130, update0131, update0132, update0133, update0134, update0140, update0141, update0142, update0143, update0144, update0145, update0146, update0150, update0151, update0152, update0153, update0154, update0155, update0160, update0180, update0190, update0200, update0210, update0220, update0230];
|
|
60
61
|
export const getUpdatesFrom = (fromVersion) => {
|
|
61
62
|
const fromParts = fromVersion.split('.').map(Number);
|
|
62
63
|
return updates.filter((update) => {
|