Maintenance release — internal changes only.
Maintenance release — internal changes only.
Maintenance release — internal changes only.
Maintenance release — internal changes only.
New
- deployAsk for the website host name in install.sh
Fixed
- depsBump nodemailer to 10.3.1 for the published advisories
Plus 1 internal change (tests, build and tooling).
New
- identityAdd smtp mail provider and bundled postfix relay
New
- deployServe the landing site on the apex, app on its own host
- websiteProduct, use-case and role pages with video slots
- websiteTurn off contact and waitlist forms until a backend serves them
Maintenance release — internal changes only.
New
- saasHide the admin console entry from non-admins
New
- deployInteractive installer for a single server
New
- scaleShare rate limits, login backoff, key invalidation and job runs across replicas (#332)
Fixed
- billingStale deletion notice after upgrade, read-only plan name, cancellation spacing (#328)
New
- billingEmail owners when a downgrade makes history unreadable and before it is deleted
- billingMake the history retention job interval configurable
- billingPurge sessions a plan no longer covers once a grace period has run out
- billingTighten the free plan to 1 host, 1 concurrent session and 10 days of history
- billingWarn on the billing page what a downgrade or cancellation does to history
- securityEncrypt ticket content and secrets at rest with per-tenant keys
- securitySeal names, emails and organisation names with lookup hashes
- securitySeal ticket keys, votes, board moves, estimate history and names
Fixed
- billingKeep the analytics plan notice off pages that only borrow analytics
- billingScope the analytics plan notice to the page that read analytics
Plus 2 internal changes (tests, build and tooling).
New
- First-run onboarding and a getting-started checklist
Plus 2 internal changes (tests, build and tooling).
New
- Failed-payment banner, grace period and read-only state
Plus 1 internal change (tests, build and tooling).
Maintenance release — internal changes only.
New
- Organisation settings, members and billing pages
- Slack and teams notifications for team sessions
Maintenance release — internal changes only.
Fixed
- Stack the host session layout and wrap the top bars on phones
New
- Participant onboarding tour
- Shareable read-only stakeholder report
Fixed
- Add report link to the saas-plugin-orgs isolation fixture
New
- billingSync stripe seat quantity with organisation members (bill-07)
- Session export (csv/json) and bulk ticket import from text or csv
New
- frontendRequest host access after sign-up, phone layout for team panels
- saasGrant host access on request, point denied users at My account
Maintenance release — internal changes only.
New
- saasAccept-invite page, org switcher width, plan prompt only on user action
Fixed
- backendJson 404 for api routes, team invites without flag, teams on in saas
Fixed
- frontendDrop autofocus from the bulk confirm dialogs
- frontendKeep visible button text in accessible names
- websiteInclude the search shortcut in the docs search button's name
Plus 1 internal change (tests, build and tooling).
New
- frontendMake the team members view scale to large teams
- frontendRedesign the admin and teams dashboards
- frontendSearch, paging and bulk actions for team sessions and invites
Fixed
- frontendKeep the teams page h1 focusable while teams load
Faster
- backendIndex unindexed lookups, batch the admin users list, cache sqlite statements
New
- System-level defaults hosts can override
Fixed
- depsUpdate lockfile to clear the high and critical audit advisories
Plus 1 internal change (tests, build and tooling).
New
- Async estimation voting, reveal and finalise (ft-09)
- backendCarry async votes into the live round as pre-votes
- billingCoded plan-limit 402s and upgrade prompt (bill-06)
- billingCustomer portal endpoint (bill-04)
- billingStripe tax and vat id collection for uk and eu (bill-11)
- frontendShow pre-votes in the live round
- identityOauth2 and multi-tenant provider hooks in the oidc engine
- identitySign in with github (idn-09)
- identitySign in with google (idn-07)
- identitySign in with microsoft entra id (idn-08)
- identitySign in with provider buttons and group label
- orgsAdd invitation storage, hashed tokens, account directory and seat events (org-07)
- orgsAdd last-owner guard, slug rules, ownership transfer and purge to the repo
- orgsMembers and email invitations api (org-07)
- orgsOrganisation api with update, soft-delete and transfer ownership (org-06)
- saasServe /metrics on its own port by default, with no token
- websiteAdd accessible contact and waitlist pages
- websiteAdd contact and waitlist function with accessible spam protection
- websiteAdd draft legal pages for solicitor review
Fixed
- authRequire an authenticated host to register a developer
- ciSerialize releases and push the release commit and tag atomically
- depsBump sharp and source-map-js to clear the high audit advisories
- websiteKeep draft legal pages out of search until they are signed off
Plus 6 internal changes (tests, build and tooling).
Maintenance release — internal changes only.
Fixed
- depsBump better-sqlite3 to 13
Maintenance release — internal changes only.
Fixed
- backendAccept string chunks in the mock ldap server
Maintenance release — internal changes only.
New
- frontendExpose ImportWizard for plugin reuse
- frontendMerge ImportWizard plugin export (#61)
Plus 2 internal changes (tests, build and tooling).
New
- Add session-scoped ticket comments
Fixed
- frontendAvoid keyed writes from server ids in the comment store
Plus 2 internal changes (tests, build and tooling).
Fixed
- backend,frontendExclude closed sessions from "active" counts
- frontendPick up an approved host/admin role without a re-login
Maintenance release — internal changes only.
Fixed
- backendKeep in-memory session timestamps in step with the row
- frontendClarify the GitLab estimate label prefix and spell GitLab
- frontendKeep cookie-mode logins across page reloads
- frontendKeep the admin config form in place after a save
- frontendLand on the admin dashboard after the token sign-in
- frontendLet a newly approved host open the dashboard
- frontendMark the current ticket estimated when a round is finalized
- frontendOnly toast "Time's up!" when the timer actually expires
- frontendStop showing admin accounts empty admin console pages
- frontendTruthful feedback on the push-estimate buttons
Plus 6 internal changes (tests, build and tooling).
New
- Auth_transport=cookie option with httponly session cookie and csrf
- Auth-provider extension points and frontend auth slots
- backendAccess-policy hooks for session and team routes (ctx.policy)
- backendBroadcaster abstraction and session snapshots (ctx.scale)
- backendEncryption v2 with kdf, key ids and a rotation command
- backendEntitlements hook with plan_limit enforcement (ctx.entitlements)
- backendLifecycle events for plugins (ctx.events)
- backendReadiness endpoint /api/health/ready that checks the database
- Host "+30 s" timer extension and participant warning before auto-lock
- Opentelemetry tracing and sentry error reporting, off unless configured
- saasEmail verification with single-use hashed tokens
- saasGeneric oidc engine with pkce, safe account linking and mock server
- saasOrganisations schema and repository
- saasPlan entitlements from the organisation's subscription
- saasRedis broadcaster plugin for multi-replica scale-out
- saasScaffold billing plugin with shared plans catalogue
- saasScaffold identity plugin and require an email at registration
- saasSelf-service forgot and reset password
- saasStripe customer per org and checkout session endpoint
- saasTenant context with active-org resolution and org switching
- saasTenant isolation via access policy and ownership events
- saasTransactional mail transport with postmark, ses and templates
- saasVerified stripe webhooks with idempotent subscription state machine
- websiteChangelog page generated from CHANGELOG.md at build
- websitePort the home page with an accessible meeting-cost calculator
- websitePricing page generated from the shared plans catalogue
- websiteScaffold the astro marketing site with shared tokens and a11y gates
- websiteSecurity and trust page with cited, implemented claims only
- websiteStarlight docs site synced from docs/user and docs/admin
Fixed
- backendKeep the readiness probe timer referenced
- Close codeql property-injection and request-forgery findings
- frontendAdmin token autocomplete and show toggle, reset result in a dialog
- frontendChange-password requirement text, submit validation and sign-out countdown
- frontendDispatch plugin ws handlers through a map lookup
- frontendMain landmarks, heading order and a consistent help link
- frontendStop opacity-dimming text below aa contrast
- frontendTour overlay keyboard scope, focus restore and labelled heading
- Session ux bugs (join name, broadcast close, dashboard link, remove confirm, time hint)
Plus 19 internal changes (tests, build and tooling).
New
- apiAdd typebox request schemas to account, team, session and host routes
- backendAdd job scheduler with auth-session and draft cleanup
- backendAdd per-account login backoff, root-token attempt limit and trust_proxy
- backendAdd ssrf-safe safefetch for integration egress
- backendAdd typebox route schemas and ws message validation
- backendCap login session lifetime and rotate sessions on role grants
- backendMake the global per-ip rate limit configurable
- backendProtect /metrics with a bearer token or a separate port
- backendUpgrade to fastify 5 and node 22
- dbAdd an opt-in postgres driver (DB_DRIVER=postgres)
- frontendAdd an escape layer stack and rebuild uidrawer on usedialog
- frontendAdd per-route page titles and focus the page heading on navigation
- frontendAdd useannouncer live regions; announce toasts and connection changes
- frontendApply chart theme defaults and give every chart a text and table alternative
- frontendMake uimenu a full menu button and use it for the header menu
- plugin-apiAdd ctx.jobs, ctx.mail and ctx.audit hooks (2.2.0)
- saasRun the saas image as compiled js and add saas secure defaults
- sessionAnnounce live session events to screen readers
Fixed
- authReal login form with per-field errors and focus
- authStore session admin tokens hashed and compare timing-safely
- backendCheck account status and role on legacy host and developer tokens
- backendEncode and validate jira query parameters
- backendLinear-time parsing of attacker-supplied strings
- backendMake seed refuse production and mask printed tokens
- backendReject passwords longer than bcrypt's 72-byte limit
- backendReplace deprecated disableRequestLogging with logController
- backendRestrict cors to an explicit origin allow-list
- backendRetire legacy credentials on password change and reset
- backendRoute gitlab through safefetch with generic upstream errors
- backendRoute jira through safefetch with generic upstream errors
- backendSpend one bcrypt comparison on logins for unknown usernames
- backendStore bearer tokens as hashes only and clear plaintext columns
- dbKeep mariadb connections referenced while a query is in flight
- dbMake the mariadb driver migrate and boot on a fresh database
- docsContain docs route paths and hide developer docs by default
- Explicit decrypt errors, require_encryption_key and admin banner
- frontendAdd contrast tokens for hue text and control borders
- frontendKeep focus on loading buttons, decorative spinners, named modals
- frontendKeep pulsing session text at full contrast
- frontendRecover from failed route chunks and reject protocol-relative redirects
- frontendRoute panel escape through the layer stack; drop dead reactivate
- frontendUi kit a11y fixes for field, textarea, tooltip, empty state, table and tabs
- homeField-level errors, real tabpanels, main landmark
- hostReject deactivated accounts on every host route
- Never return decrypted integration tokens to the browser
- Only store and render http(s) links for imported tickets
- rolesRestrict host revocation and protect admins' roles
- Send session admin and draft tokens in headers, not query strings
- sessionConvey ticket status and presence beyond colour
- sessionDock the ticket detail panel into the session layout
- sessionKeyboard path through the relative estimation board
- sessionKeyboard tabs and resizable separator for ticket details
- sessionReadable selected tiles and revealed votes as a list
- sessionSkip link, main landmark and heading outline on session pages
- sessionsLimit session-code probes and lengthen new codes
- teamsEnforce session-team ownership on team session routes
- teamsMake invite redemption atomic and validate invite options
- teamsScope join-request approve and reject to the url team
- timerReadable time pill and milestone announcements
- wsAuthorise host websocket actions by socket identity
- wsCap connections per ip and per account, key rate limit by identity
- wsEnforce an origin allow-list and 64 kib max payload on upgrade
- wsReject malformed websocket messages instead of crashing
- wsSchema-validate board websocket messages
- wsSchema-validate voting and config websocket messages
Plus 19 internal changes (tests, build and tooling).
New
- backendAdd job scheduler with auth-session and draft cleanup
- backendAdd typebox route schemas and ws message validation
- backendUpgrade to fastify 5 and node 22
Fixed
- backendReplace deprecated disableRequestLogging with logController
- wsReject malformed websocket messages instead of crashing
Plus 8 internal changes (tests, build and tooling).
Maintenance release — internal changes only.
Maintenance release — internal changes only.
Fixed
- brandRepair warped card silhouettes in logo assets
Fixed
- huskyDon't fail prepare-commit-msg when no tty is attached
Plus 1 internal change (tests, build and tooling).
New
- homeShow a member's active sessions across all their teams
New
- brandMigrate to the new fanned-cards logo mark
Plus 1 internal change (tests, build and tooling).
Fixed
- homeDeclutter hero and fix host-session panel spacing
New
- Add SessionStateBadge component
- Add SessionSummaryRow component
- homeRedesign hero with two-column layout and RoomPreview
- libAdd shared formatDate module
- uiAdd keyboard navigation to UiTabs
- uiAdd link variant, pill CTAs, aria-busy, and a dev a11y warning
- uiAdd optional rowAttrs prop to UiDataTable
- uiAdd success/warning/danger tones to UiCallout
- uiAdd UiBulkActionBar component
- uiAdd UiCheckbox component
- uiAdd UiDataTable component
- uiAdd UiDrawer component
- uiAdd UiFilterChips component
- uiAdd UiPageHeader component
- uiAdd UiSearchInput component
- uiAdd UiStatTile component
- uiAdd UiTextarea component
- uiExport new work-package 1B components from the barrel
- uiGive every UiSwitch an accessible name and a 32px hit area
- uiMake UiInput/UiSelect own their styling and forward aria attrs
- uiMake UiSpinner's accessible label overridable
- uiSurface required via UiField's exposed slot props
- uiWire UiModal focus trap, aria-labelledby, and inert background
Fixed
- a11yResolve contrast and nested-interactive violations
- e2eUpdate tests for the ticket-item/remove-button DOM split
- sessionDocument tile semantics and clean up avatar accessible names
- sessionReserve board space for the open ticket detail panel
- sessionRevert TicketDetailPanel/DraggableTicket to fix e2e regressions
- uiGive UiTooltip a real accessible element instead of ::after
- uiMake UiBadge uppercase opt-in and enforce a 12px text minimum
- uiPause toast auto-dismiss on hover/focus and fix roles
- uiRender interactive UiCard as a real button or anchor
- uiTeleport UiMenu to body and add full keyboard navigation
- uiUse a stable module-level counter for UiPanel ids
- uiWire UiConfirm aria-describedby and focus Cancel for danger tone
Plus 34 internal changes (tests, build and tooling).
Fixed
- uiKeep session status pill centered in top bar
New
- authAdd LDAP-driven team auto-join
New
- authAdd PKI certificate login with optional LDAP role mapping
New
- saasAdd single-repo SaaS edition build alongside Core, with JS hardening
Fixed
- ciBuild backend before typecheck, declare terser explicitly in frontend
Fixed
- Resolve planning-poker and admin ui bugs
New
- adminAdd admin-editable application configuration
Fixed
- uiMake UiField's auto-generated id unique per instance
Plus 1 internal change (tests, build and tooling).
New
- ticketsAdd priority sort and filter to ticket list
Maintenance release — internal changes only.
Fixed
- ciSkip republishing plugin-api when its version is unchanged
New
- jiraAdd standalone mock server for import testing
- jiraSync ticket priority and support label removal on push-back
- teamsAdd graph-based metrics to Teams dashboard
Fixed
- sessionSurvive websocket reconnects without losing state
Plus 2 internal changes (tests, build and tooling).
Fixed
- ciBump plugin-api to 1.0.1 to unblock release publish
Fixed
- estimationDon't restart voting when reopening an already-estimated ticket
Maintenance release — internal changes only.
New
- teamsAdd team management dashboard; plugin architecture refactor
Fixed
- estimationLet ticket description fill available space in poker mode
Plus 1 internal change (tests, build and tooling).
Fixed
- e2eImprove registration error handling, reduce CI workers, extend password redirect timeout
- estimationVoted-user tracking, concurrency guards, admin/team/dashboard refactor
Maintenance release — internal changes only.
Fixed
- Close session, ticket removal state consistency, recent sessions, onboarding tour
- Relative estimation board — unassigned column visibility and drag ghost dismissal
New
- Add co-facilitators support
Fixed
- Update stale e2e suite for removed create-name field and vote counting
Fixed
- Persist facilitator Jira/GitLab defaults correctly
- Prevent ticket loss and visibility bugs in the import wizard flow
- Render markdown ticket descriptions and contain their height
Maintenance release — internal changes only.
Maintenance release — internal changes only.
New
- Write estimates back to GitLab on finalize, show existing label value on import
- Write estimates back to Jira on finalize, show existing field value on import
New
- Adopt vue-router with real session URLs and deep links
- Design foundation — token system, styles split, lucide icons
- Gitlab integration for issue import, estimate write-back, and resync
- Redesign the core estimation experience
- Shared UI component library scaffolding
- Waiting room for draft sessions + fix stale WebSocket race condition
Fixed
- Broadcast session reset when the current ticket is removed
- Facilitator password login and e2e suite repairs
Plus 3 internal changes (tests, build and tooling).
New
- Presence cleanup, resizable ticket panel, facilitator broadcast, and Jira resync
New
- Redesign website and update branding for dashboard rollout
Fixed
- ciReinstall from scratch to resolve platform-correct rollup optional dep
- ciUse npm ci and pin root typescript to fix vue-tsc failure
- ciUse npm install instead of npm ci to fix rollup optional-dep gap
New
- Redesign teams as dashboard view with modal dialogs
New
- authFacilitator password change with bcrypt hashing
- backendAdd ticket estimation history, point spread detection, and facilitator defaults
- docsRedesign documentation to match app styling with build-time filtering
- frontendAdd history tab, highlights UI, facilitator defaults, menu icons, and polish
Fixed
- backendRemove unused beforeEach import in auth.test.ts
New
- authFacilitator password change with bcrypt hashing and complexity enforcement (TBD)
- authAuto-migrate legacy plaintext tokens to bcrypt on first verify
Fixed
- cssReplace undefined --text-dim var with --text-muted in SuperAdmin and HomePage
- uxTimer expired toast now auto-dismisses after 4 seconds and triggers on actual expiry
- clipboardFix copy button false-positive feedback in all 5 copy implementations
New
- teamsAdd team support behind ENABLE_TEAMS feature flag
New
- initial build of websiteAdded initial public website build
New
- Self-service facilitator registration and account management
New
- frontendRedesign UI with cool-toned color system and refined typography
Fixed
- dbSet created_at and updated_at timestamps on facilitator creation
New
- Add external database support (MariaDB)
New
- frontendRender markdown and Jira wiki in ticket detail panel
- Implement full dark mode support
Fixed
- Set theme toggle icon color for dark mode contrast
- Show theme toggle on all pages
Plus 1 internal change (tests, build and tooling).
New
- Add session state override and hide sidebar during relative estimation
Fixed
- Restore draft session management with persisted admin token
Fixed
- Wire up relative estimation session UI with swimlane board
Fixed
Plus 1 internal change (tests, build and tooling).
New
- Add facilitator admin dashboard, session management, and Jira import
- Add facilitator role with database schema, auth, and API routes
Fixed
- Add EXTERNAL_FQDN=true to E2E test environment
- Delete node_modules before install in CI to clear darwin-platform binaries
- Resolve 4 remaining E2E test selector mismatches
- Resolve CI typecheck failures
- Restore docs route source and add Vite proxy for /docs
- Validate user identity in WebSocket submitEstimate handler
Plus 7 internal changes (tests, build and tooling).
Maintenance release — internal changes only.
Breaking changes
- SUPER_ADMIN_TOKEN env var renamed to ROOT_ADMIN_TOKEN
New
- Overhaul super admin dashboard with bulk ops, charts, and token rename
Fixed
- Return to login page after super admin logout
Plus 1 internal change (tests, build and tooling).
Fixed
- Guard persist() against closed DB, fix unused vars in tests
Plus 2 internal changes (tests, build and tooling).
New
- e2eAdd Playwright test suite with 36 interactive browser tests
- frontendAdd data-testid attributes to components for e2e testing
Fixed
- backendPrevent async microtask from persisting on closed DB
- Resolve merge conflicts and make rate-limit configurable for e2e tests
Plus 2 internal changes (tests, build and tooling).
Fixed
- Add input length validation to WebSocket messages
- Use crypto.randomInt() for session code generation
- Use sessionStorage instead of localStorage for auth tokens
Plus 1 internal change (tests, build and tooling).
Fixed
- backendAdd graceful shutdown, health endpoint, and socketMap usage
- backendAdd TTL-based session eviction and O(1) disconnectUser
- backendUse env-based DB path with fallback and add WAL checkpointing
Plus 2 internal changes (tests, build and tooling).
Fixed
- backendPersist Jira API token across server restarts
- backendPrevent double disconnect on WebSocket error
- frontendPre-populate final estimate input with median value
- frontendValidate super admin token against server on page load
- Use relative time for timer to avoid client clock skew
Plus 1 internal change (tests, build and tooling).
New
- TIK-0001 Initial commit
- TIK-0001 Initial commit
Fixed
- Configure git user identity before standard-version commit
- Disable husky hooks during release commit in CI
- Regenerate package-lock.json to resolve npm ci sync failure
- Use bash-compatible glob for backend test script
Plus 1 internal change (tests, build and tooling).