Releases: ashproto/Resume-Designer
Release list
Resume Designer 1.15.0
Resume Designer 1.15.0
✨ New features
Profiles
- Move profile switching into Settings → Account with stats
- Move the profile switcher beside the brand as an avatar chip
- Manage-profiles dialog with export, import, and guards
- Header profile switcher with reload-based switching
- Per-profile export and import-as-new-profile
- Multi-profile backup format 2 and scoped legacy restore
- Share the openrouter api key across profiles
- Crash-safe adoption migration and boot wiring
- Registry crud with delete guards
- Namespace per-profile keys at the appStorage facade
- Add pure profile key classification module
Library
- Phase 2 polish - resize-aware preview, backdated adds, scoped empty states
- Timeline view with per-resume lanes
- Timeline tab with outcome stats strip
- Application stats and timeline helpers
- Live first-page preview in detail pane
- Detail pane with application tracking and variant actions
- Add library dialog with tiered search and status chips
- Add tiered library search module
- Auto-draft applications when tailoring
- Add applications store with status pipeline
Bridge
- Pairing token section in settings data tab
- Headless per-variant pdf export endpoint
- Wire loopback requests through the js router
- Pure request router with auth and all v1 endpoints
- Context-free ai completion entry point
- Include learned answers and bridge token in backups
- Learned-answers store for application q&a
- Start loopback listener and register bridge_respond
- Add loopback bridge state, respond command, and request forwarding
Updates & Changelog
- Split digest summary from full log in release bodies
- Synthesize a user-level digest with grouped-log fallback
- Sentinel-based digest validator for release notes
Canvas
- Actionable empty state when no resume is loaded
Settings
- Distinguish current profile and keep profile list compact
🐛 Fixes
Profiles
- Refuse profile ops while a backup restore is guarded
- Roll back partial adoption copies on a browser quota failure
- Treat markerless degraded init as adoption pending
- Keep the blob credential until the shared write is durable
- Flush an imported profile and roll back if it isn't durable
- Block switching/creating profiles during adoption recovery
- Surface profile-dialog save failures to switch/export callers
- Abort a profile switch when the pre-switch save fails
- Give the adoption marker a resume- prefix so disk adoption keeps it
- Validate/coerce registry emoji so a bad one can't blank the app
- Activate mapping only after sources are durably deleted
- Never delete adoption sources while mapping is off
- Roll back a profile import that fails mid-write
- Keep print mapping off during pending adoption
- Flush pending edits before exporting the active profile
- Hide the switcher while an adoption is mid-recovery
- Include unprefixed live data in a recovery-state profile export
- Keep mapping inactive when adoption doesn't complete
- Move adoption keys one at a time to avoid doubling storage
- Don't recopy a stale source over post-adoption edits
- Use a filename-safe separator for namespaced storage keys
- Throw synchronously for unknown export profile ids
- Gate adoption finalization on every durability barrier
- Durable adoption barriers and existence-checked key extraction
- Reject corrupt registries whole and re-roll id collisions
Backup
- Resume saves only if this import acquired the suspension
- Only resume saves if this import suspended them
- Resume saves after a failed flush only on the merge path
- Re-enable saves when the post-import flush fails
- Suspend saves before the durable import, not after
- Suspend saves before a restore reload to prevent stale overwrite
- Avoid prototype-name collisions in the profile map
- Reject case-colliding registry ids before a format-2 restore
- Reject unknown shared keys before a format-2 restore
- Capture markerless recovery data in full backups
- Roll back cached imports when the durability flush fails
- Reconcile orphan namespaces into the exported registry
- Reject orphan profiles entries before a format-2 restore
- Roll back a quota-failed import instead of losing the store
- Capture unprefixed live data in a recovery-state export
- Reject a non-object shared container before the format-2 wipe
- Validate shared values before the format-2 wipe
- Accept keyless profiles in format-2 restores
- Validate profile entries before wipe and restore quota-safely
Library
- Persist notes on every edit so they survive a native close
- Flush pending note edits on teardown
- Persist application notes during editing, not only on blur
- Clear appliedAt when reverting an application to prepared
- Caption and status legend for the timeline view
- Show tab panels only while active so hidden panes free their space
- Honest backdated history and guarded timeline jumps
- Anchor view-all item in variant dropdown
- Cancel dialog escape-close while renaming via onEscapeKeyDown
- Keep dialog open when escape cancels a rename
- Reset rename on escape and pin tailor variant id
- Route library variant deletes through thread handling
- Include applications store in full backup
Profile
- Track a failed markdown import on the tracked-save flag
- Make renames durable and surface rename failures
- Make deletion durable before reporting success
- Abort the switch reload when the pointer is not durable
- Retry a failed debounced save when flushing
Bridge
- Reject writes while a destructive import is in flight
- Polish — init rejection guard, clipboard catch, aria-label, unicode test, comments
- 404 prototype-key resume ids instead of resolving inherited keys
- Mirror applications.js storage-error handling in learned answers
Settings
- Refresh the header avatar after renaming the active profile
- Surface a quota failure from profile creation
- Cleared shared api key masks stale blob values
Storage
- Drop unreachable passthrough branch in flushDeferredWrites
- Central appStorage guard for backup restores
- Cancel the coalescing drain timer when a flush forces a drain
Updates & Changelog
- Require every post-heading digest line to be a bullet
- Degrade malformed release bodies atomically
- Reject inline sentinels and bare section headers in digests
Job Descriptions
- Skip tailor drafts when the pinned résumé was deleted mid-generation
- Keep tailored changes on the resume they were generated for
Migration
- Skip legacy import when physical namespaces survive
- Skip legacy electron import on profiled stores
Onboarding
- Make dismissing the wizard durable for empty profiles
- Let a new empty profile's onboarding be dismissed
Updates
- Gate release-notes dialog on scheduled onboarding too
- Defer release-notes dialog until onboarding closes
Ci
- Emit the validated normalized digest, not the raw lines
General
- Close cross-feature seams from the whole-branch review
PDF Export
- Hold the export guard across the interactive preview lifecycle
Persistence
- Keep the blob credential fallback on every settings save
Security
- Generate profile and thread ids with crypto.getRandomValues
⚡ Improvements
Storage
- Coalesce write-behind drains instead of one per keystroke
Resume Designer (beta)
Resume Designer 1.15.0-next.112
✨ New features
Profiles
- Move profile switching into Settings → Account with stats
- Move the profile switcher beside the brand as an avatar chip
- Manage-profiles dialog with export, import, and guards
- Header profile switcher with reload-based switching
- Per-profile export and import-as-new-profile
- Multi-profile backup format 2 and scoped legacy restore
- Share the openrouter api key across profiles
- Crash-safe adoption migration and boot wiring
- Registry crud with delete guards
- Namespace per-profile keys at the appStorage facade
- Add pure profile key classification module
Library
- Phase 2 polish - resize-aware preview, backdated adds, scoped empty states
- Timeline view with per-resume lanes
- Timeline tab with outcome stats strip
- Application stats and timeline helpers
- Live first-page preview in detail pane
- Detail pane with application tracking and variant actions
- Add library dialog with tiered search and status chips
- Add tiered library search module
- Auto-draft applications when tailoring
- Add applications store with status pipeline
Bridge
- Pairing token section in settings data tab
- Headless per-variant pdf export endpoint
- Wire loopback requests through the js router
- Pure request router with auth and all v1 endpoints
- Context-free ai completion entry point
- Include learned answers and bridge token in backups
- Learned-answers store for application q&a
- Start loopback listener and register bridge_respond
- Add loopback bridge state, respond command, and request forwarding
Updates & Changelog
- Split digest summary from full log in release bodies
- Synthesize a user-level digest with grouped-log fallback
- Sentinel-based digest validator for release notes
Canvas
- Actionable empty state when no resume is loaded
Settings
- Distinguish current profile and keep profile list compact
🐛 Fixes
Profiles
- Refuse profile ops while a backup restore is guarded
- Roll back partial adoption copies on a browser quota failure
- Treat markerless degraded init as adoption pending
- Keep the blob credential until the shared write is durable
- Flush an imported profile and roll back if it isn't durable
- Block switching/creating profiles during adoption recovery
- Surface profile-dialog save failures to switch/export callers
- Abort a profile switch when the pre-switch save fails
- Give the adoption marker a resume- prefix so disk adoption keeps it
- Validate/coerce registry emoji so a bad one can't blank the app
- Activate mapping only after sources are durably deleted
- Never delete adoption sources while mapping is off
- Roll back a profile import that fails mid-write
- Keep print mapping off during pending adoption
- Flush pending edits before exporting the active profile
- Hide the switcher while an adoption is mid-recovery
- Include unprefixed live data in a recovery-state profile export
- Keep mapping inactive when adoption doesn't complete
- Move adoption keys one at a time to avoid doubling storage
- Don't recopy a stale source over post-adoption edits
- Use a filename-safe separator for namespaced storage keys
- Throw synchronously for unknown export profile ids
- Gate adoption finalization on every durability barrier
- Durable adoption barriers and existence-checked key extraction
- Reject corrupt registries whole and re-roll id collisions
Backup
- Resume saves only if this import acquired the suspension
- Only resume saves if this import suspended them
- Resume saves after a failed flush only on the merge path
- Re-enable saves when the post-import flush fails
- Suspend saves before the durable import, not after
- Suspend saves before a restore reload to prevent stale overwrite
- Avoid prototype-name collisions in the profile map
- Reject case-colliding registry ids before a format-2 restore
- Reject unknown shared keys before a format-2 restore
- Capture markerless recovery data in full backups
- Roll back cached imports when the durability flush fails
- Reconcile orphan namespaces into the exported registry
- Reject orphan profiles entries before a format-2 restore
- Roll back a quota-failed import instead of losing the store
- Capture unprefixed live data in a recovery-state export
- Reject a non-object shared container before the format-2 wipe
- Validate shared values before the format-2 wipe
- Accept keyless profiles in format-2 restores
- Validate profile entries before wipe and restore quota-safely
Library
- Persist notes on every edit so they survive a native close
- Flush pending note edits on teardown
- Persist application notes during editing, not only on blur
- Clear appliedAt when reverting an application to prepared
- Caption and status legend for the timeline view
- Show tab panels only while active so hidden panes free their space
- Honest backdated history and guarded timeline jumps
- Anchor view-all item in variant dropdown
- Cancel dialog escape-close while renaming via onEscapeKeyDown
- Keep dialog open when escape cancels a rename
- Reset rename on escape and pin tailor variant id
- Route library variant deletes through thread handling
- Include applications store in full backup
Profile
- Track a failed markdown import on the tracked-save flag
- Make renames durable and surface rename failures
- Make deletion durable before reporting success
- Abort the switch reload when the pointer is not durable
- Retry a failed debounced save when flushing
Bridge
- Reject writes while a destructive import is in flight
- Polish — init rejection guard, clipboard catch, aria-label, unicode test, comments
- 404 prototype-key resume ids instead of resolving inherited keys
- Mirror applications.js storage-error handling in learned answers
Settings
- Refresh the header avatar after renaming the active profile
- Surface a quota failure from profile creation
- Cleared shared api key masks stale blob values
Storage
- Drop unreachable passthrough branch in flushDeferredWrites
- Central appStorage guard for backup restores
- Cancel the coalescing drain timer when a flush forces a drain
Updates & Changelog
- Require every post-heading digest line to be a bullet
- Degrade malformed release bodies atomically
- Reject inline sentinels and bare section headers in digests
Job Descriptions
- Skip tailor drafts when the pinned résumé was deleted mid-generation
- Keep tailored changes on the resume they were generated for
Migration
- Skip legacy import when physical namespaces survive
- Skip legacy electron import on profiled stores
Onboarding
- Make dismissing the wizard durable for empty profiles
- Let a new empty profile's onboarding be dismissed
Updates
- Gate release-notes dialog on scheduled onboarding too
- Defer release-notes dialog until onboarding closes
Ci
- Emit the validated normalized digest, not the raw lines
General
- Close cross-feature seams from the whole-branch review
PDF Export
- Hold the export guard across the interactive preview lifecycle
Persistence
- Keep the blob credential fallback on every settings save
Security
- Generate profile and thread ids with crypto.getRandomValues
⚡ Improvements
Storage
- Coalesce write-behind drains instead of one per keystroke
Resume Designer 1.14.0
Resume Designer 1.14.0
✨ New features
AI Chat
- Refine cross-résumé threads and streaming UX
- Add a fade-rise streaming markdown renderer
- Expose re-home action + active variant id to the panel
- Tag turns with their résumé + mark context switches
- Follow the active résumé on variant switch
- Home new threads to the active résumé + pick on load
- Name the active résumé in the chat system prompt
- Add reassignThreadsForDeletedVariant + countThreadsForVariant
- Add lastTurnVariantId + withContextMarker helpers
- Add groupThreadsByHome + pickCurrentThreadId helpers
- Add homeVariantId to threads + migrateThreads
Updates & Changelog
- Organize the release changelog by type and app area
- Add a release-history view in Settings
- Show release notes before and after updating
- Add SafeMarkdown and the update-notes dialog host
- Add changelog data helpers and post-update check
Interface
- Prompt to keep or delete threads on résumé delete
- Banner when viewing a thread from another résumé
- Group the thread selector by résumé + add move-here
- Render the context-switch divider with a jump button
Desktop App
- Add Settings and Check for Updates to the macOS app menu
🐛 Fixes
AI Chat
- Gate request cleanup by identity to end a stale-abort race
- Read web-search citation urls from the nested field
- Clear helper thinking on origin delete, guard interview start
- Expose stop on the thinking block for helper runs
- Guard helper success paths against abort-resolved partials
- Scope helper flows to their origin thread with abort support
- Re-check the active resume before improving the summary
- Derive live reasoning from details-only streams
- Gate resume-mutating message actions by origin variant
- Abort an in-flight stream when its thread dies with a resume
- Repaint the live stream when reopening its origin thread
- Keep a stop affordance for background-thread streams
- Abort a reply only when its origin thread is deleted
- Don't abort/misroute replies on résumé navigation or interview finish
- Bind async replies to the résumé/thread active at request start
- Only abort an in-flight reply when deleting the active thread
- Keep an in-flight reply running when switching threads
- Trim the outgoing thread on variant switch
- Scope the profile interview to the thread it started in
- Stamp async replies with the résumé active at request start
- Reopen the last-selected thread on launch, not the one left
- Keep thread selection homed to the active résumé after delete
- Home the replacement thread to the active résumé on last delete
- Re-read threads before persist in the follow effect
- Persist migrated threads on switch + scope context marker
- Route slash-command results to the dispatch-time thread
PDF Export
- Materialize all inherited geometry boxes before reparenting
- Scale inherited page boxes in the macOS merge path
- Scale page annotations with content on macOS merge
- Materialize inherited page resources when merging sheets
- Size each browser PDF page from its own sheet
- Set Windows print orientation from the page dimensions
- Set Windows print orientation from each sheet's dimensions
- Export each sheet as its own page on Windows (macOS parity)
Interface
- Unwind a pending inline change set before showing a new one
- Render modal dialogs above the app header
- Slide the chat panel on-screen when opened on narrow viewports
- Repaginate after accent changes
- Swap import/export menu icons
Résumé Rendering
- Split inline tool rows across pages at the token level
- Preserve preview scroll position across résumé re-renders
- Split oversized sidebar skills and tools across pages
Updates & Changelog
- Resolve relative changelog links to github blob routes
- Resolve relative changelog links to absolute urls
- Resolve beta version matching and post-update retry
Ci
- Validate bullet count so a late-truncated rewrite can't publish
- Give the changelog rewrite a token budget so notes can't truncate
Data & Storage
- Recover an interrupted localstorage-to-disk adoption
- Normalize legacy object-map job descriptions
Pagination
- Preserve sidebar wrappers when splitting bulleted tools
- Grow oversized atomic sheets instead of clipping them
Desktop App
- Install the native app menu on macOS only
Job Descriptions
- Tolerate recommendations without a section
Onboarding
- Don't re-save target jobs on repeat tailoring passes
Profile
- Flush pending edits before starting the interview
What's Changed
Other Changes
- fix: deferred follow-ups (chat-thread routing, atomic-block clipping) + website link by @ashproto in #61
- feat(chat): per-résumé chat threads by @ashproto in #62
- Preview rendering fixes: scroll preservation + sidebar section pagination by @ashproto in #63
- feat(desktop): add Settings and Check for Updates to the macOS app menu by @ashproto in #66
- feat(chat): smooth streaming, wide-content containment, and thread-switcher clarity by @ashproto in #65
- fix: resolve the two Codex findings on the next→main promotion (#64) by @ashproto in #67
- fix(chat): keep a stop affordance for background-thread streams by @ashproto in #68
- feat(update): user-facing changelog — before/after update + history (Phase 1) by @ashproto in #69
- fix(chat): repaint the live stream when reopening its origin thread by @ashproto in #70
- fix(chat): abort an in-flight stream when its thread dies with a resume by @ashproto in #71
- fix(chat): gate resume-mutating message actions by origin variant by @ashproto in #72
- docs: add project-level claude.md with commands, layout, and repo rules by @ashproto in #73
- fix(chat): scope helper flows to their origin thread with abort support by @ashproto in #74
- fix(pdf): materialize inherited page resources when merging sheets by @ashproto in #75
- fix(desktop): install the native app menu on macOS only by @ashproto in #76
- fix(update): resolve relative changelog links to absolute urls by @ashproto in #77
- feat(update): organize the release changelog by type and app area by @ashproto in #78
- fix(chat): gate request cleanup by identity to end a stale-abort race by @ashproto in #79
- fix(ci): give the changelog rewrite a token budget so notes can't truncate by @ashproto in #80
- Promote next → main: chat threads, per-sheet PDF, in-app changelog, macOS menu, hardening by @ashproto in #64
Full Changelog: v1.13.1...v1.14.0
Resume Designer 1.13.1
Resume Designer 1.13.1
- fix(render): keep sidebar skills and tools from overflowing the column
What's Changed
Other Changes
- fix(render): keep sidebar skills and tools from overflowing the column by @ashproto in #59
- promote: sidebar skills/tools overflow fix + regenerated hero by @ashproto in #60
Full Changelog: v1.13.0...v1.13.1
Resume Designer 1.13.0
Resume Designer 1.13.0
- fix(pdf): match browser pdf orientation to the page dimensions
- fix(pdf): delimit macOS pdf wrapper streams to avoid token merges
- fix: paginate browser pdf export per sheet and guard font-load re-render
- fix: re-paginate on toolbar text-size change and keep summary markdown on cancel
- feat: add github pages marketing site
- fix(pdf): keep the export preview open when a save fails
- fix(pdf): strip on-screen sheet chrome from browser pdf export
- feat(backup): restore manual import of previous (Electron) app data
- fix(render): format markdown emphasis in the summary field
- fix(pagination): re-paginate after profile photo changes
- fix(pagination): re-paginate after font changes too
- fix(pdf): paginate the Windows PDF export per sheet
- fix(pagination): re-paginate after spacing changes when a page size is fixed
- feat(pdf): preview the generated pdf before saving
- fix(glass): show vibrancy through the gaps between paginated sheets
- feat(pdf): multi-page export matching the on-screen sheets
- feat(pagination): page setup + on-screen page sheets
What's Changed
Other Changes
- feat: page setup, on-screen pagination, and multi-page PDF export with preview by @ashproto in #47
- chore: repoint repo urls to ashproto after username rename by @ashproto in #48
- fix(pdf): strip on-screen sheet chrome from browser pdf export by @ashproto in #50
- fix(pdf): keep the export preview open when a save fails by @ashproto in #51
- build(deps): upgrade to vite 8 and patch undici/dompurify by @ashproto in #52
- feat: add github pages marketing site by @ashproto in #53
- fix: re-paginate on toolbar text-size change and keep summary markdown on cancel by @ashproto in #54
- fix: paginate browser pdf export per sheet and guard font-load re-render by @ashproto in #55
- chore: raise macOS minimum to 14.4 for pdf.js compatibility by @ashproto in #56
- fix(pdf): delimit macOS pdf wrapper streams to avoid token merges by @ashproto in #57
- fix(pdf): match browser pdf orientation to the page dimensions by @ashproto in #58
- Promote next → main: page setup, pagination & multi-page PDF, owner rename by @ashproto in #49
Full Changelog: v1.12.0...v1.13.0
Resume Designer 1.12.0
Resume Designer 1.12.0
- fix(onboarding): scope wizard window-drag to a top header strip
- fix(tauri): grant core:window:allow-destroy for the titlebar close path
- fix(renderer): make inline-tag tools per-chip editable in stacked layouts
- fix(structure): keep tool slots aligned while editing a cleared field
- feat(onboarding): dedicated generating-résumé screen for the job flow
- fix(editor): hug the floating toolbar when it wraps to two rows
- fix(structure): default generated and blank skills sections to bulleted
- fix(profile): show clean plain text instead of raw markdown markers
- feat(ai): apply strategic bold/italic emphasis in generated résumés
- fix(editor): edit a single tool chip instead of the whole list
- fix(header): make the kebab-to-tools gap draggable
- feat(structure): add a tools display option, sync the toggle, default to bulleted
- fix(editor): stop the inline AI button sticking or covering the chrome
- feat(updater): background update polling with an actionable, deduped toast
- fix(ui): legible bottom-bar icons, theme-aware glass pill, distinct fields
- fix(storage): abort the disk load when a valid-key file cannot be read
- fix(storage): abort PDF print init when disk data cannot load
- fix(storage): retry failed writes; gate update relaunch on durability
- fix(storage): propagate flush failures to durability callers
- fix(chat): keep the draft when a send is ignored mid-stream
- fix(storage): open the React mount gate only after the legacy migration lands
- fix(fonts): load resume fonts only for the selected pairing — zero Google requests on system fonts
- fix(storage): surface failed writes in create/duplicate/import, auto-save, and JD paths
- feat(storage): boot appStorage first, read-only print init, flush at every exit point
- feat(storage): appStorage facade with write-behind cache and boot adoption
- feat(storage): add Rust per-key disk storage commands with atomic writes
- fix(onboarding): keep replayed onboarding dismissible
- fix(persistence): surface storage-full failures when saving a generated resume
- fix(diff): keep rejected changes out of Apply All
- fix(onboarding): honor new-resume mode without an API key
- fix(ui): lift Radix dropdowns above the onboarding and jobs overlays
- feat(ai): stream OpenRouter reasoning live with full run transparency
- feat(structure): bottom-bar text tools, custom experience sort, persist design-tab collapse
- fix: restyle Settings + History panels to match the app's design
- fix: re-add Preflight form-control resets for shadcn surfaces
- fix: derive PDF filename from the active variant, not a dead DOM query
- fix: sync bottom-bar text tools with React-managed inputs
- feat: convert the onboarding wizard to React
- feat: convert the job descriptions panel to React
- feat: convert the user profile panel to React
- feat: convert the AI chat panel to React
- feat: convert the structure panel to React
- feat: convert version history to a React component
- feat: convert the app header to a React component
- feat: boot app chrome through React with print split and Settings dialog
- feat: add shadcn/ui primitives and glass-aware theme tokens
What's Changed
Other Changes
- feat: migrate app chrome to React + shadcn/ui with live AI streaming by @SiriusA7 in #39
- feat(storage): per-key disk storage replaces webview localStorage by @SiriusA7 in #40
- Polish pass: icon legibility, update polling, header reorg, field contrast, hover-button fixes by @SiriusA7 in #41
- Polish: tool editing, AI emphasis, generating screen, and chrome fixes by @SiriusA7 in #42
- fix(onboarding): scope wizard window-drag to a top header strip by @SiriusA7 in #43
- merge next into main: promote the beta channel to stable by @SiriusA7 in #45
Full Changelog: v1.11.1...v1.12.0
Resume Designer 1.11.1
Resume Designer 1.11.1
- fix(updater): keep checking stable when the beta endpoint fails
- fix(updater): make the beta channel a superset and default beta builds to it
What's Changed
Other Changes
- Settings panel polish: Usage tab, theme contrast fix, drop Electron + header theme dropdown by @SiriusA7 in #36
- fix(updater): keep checking stable when the beta endpoint fails by @SiriusA7 in #38
- Promote next → main: stable v1.11.1 (settings polish + updater channel fix) by @SiriusA7 in #37
Full Changelog: v1.11.0...v1.11.1
Resume Designer 1.11.0
Resume Designer 1.11.0
- feat: add header settings gear and relocate update/backup controls from Tools
- feat: promote settings into a top-level panel with General/AI/Updates/Data tabs
- feat: add launch update-check preference consulted by startupUpdateCheck
What's Changed
Other Changes
- ci: bump GitHub Actions to Node 24 runtimes and build on Node 24 by @SiriusA7 in #33
- feat: consolidated Settings panel (theme, updates, data, AI) by @SiriusA7 in #34
- Promote next → main: cut stable v1.11.0 (Settings panel + Node 24 CI) by @SiriusA7 in #35
Full Changelog: v1.10.0...v1.11.0
Resume Designer 1.10.0
Resume Designer 1.10.0
- feat: add in-app stable/beta update channel toggle
- feat(updater): add channel-aware check/install commands
What's Changed
Other Changes
- ci: fix skip-build race in release decide job by @SiriusA7 in #30
- feat: in-app stable/beta update channel toggle by @SiriusA7 in #31
- Promote next → main: release v1.10.0 by @SiriusA7 in #32
Full Changelog: v1.9.5...v1.10.0
Resume Designer 1.9.5
Resume Designer 1.9.5
- fix(security): escape recommendation index and impact label
- fix(security): escape recommendation impact and typography font fields
- fix(security): coerce matchScore to string before escaping
- fix(security): escape match-score and custom-palette swatch
- fix(security): escape remaining xss-through-dom interpolations
- fix(security): strip annotated example-URL placeholder on profile import
- fix(security): use crypto.getRandomValues for generated IDs
- fix(security): escape onboarding inputs and DOM text rendered into HTML
- fix(security): escape profile contact fields and validate example-URL by hostname
- fix(security): use escapeAttr for HTML attributes and consolidate escape helpers
- fix: pass --allow-same-version to npm version in release build
What's Changed
Maintenance
- build(deps): bump the npm_and_yarn group across 1 directory with 2 updates by @dependabot[bot] in #18
Other Changes
- ci: gate releases behind release-please (PR 2 of CI/CD redesign) by @SiriusA7 in #21
- chore: pin Node 20 and document npm 10 lockfile requirement by @SiriusA7 in #22
- ci: skip commitlint on dependabot commits by @SiriusA7 in #23
- fix(security): resolve CodeQL code-scanning alerts (XSS escaping, secure IDs, URL check) by @SiriusA7 in #24
- fix(security): clear remaining 4 xss-through-dom CodeQL alerts by @SiriusA7 in #25
- fix(security): escape last 2 xss-through-dom sinks (match-score, custom-palette swatch) by @SiriusA7 in #26
- fix(security): comprehensive escape pass for last 2 xss-through-dom alerts by @SiriusA7 in #27
- fix(security): escape last xss-through-dom sink (recommendation index) by @SiriusA7 in #28
- ci: replace release-please with next/main dual-channel release pipeline by @SiriusA7 in #29
New Contributors
- @dependabot[bot] made their first contribution in #18
Full Changelog: v1.9.4...v1.9.5