Skip to content

Releases: jmynes/punt

v0.9.6

09 Jun 00:59
48e798c

Choose a tag to compare

PUNT (Projects, Users, Notes, Tickets) is a local-first issue tracking system with Jira-like backlog, Kanban board, and sprint planning.

This is a maintenance release focused on dependency upgrades — including five coordinated major-version migrations — and the regressions they exposed.

Technical

  • Node 22.22.1 — Minimum Node bumped (from a previously-inconsistent 20/22 mix between .node-version and package.json engines). CI, dev, and Railway deploys now all run on the same version.
  • lint-staged 17 — Upgraded together with the Node bump (v17 requires Node ≥22.22.1).
  • @tsparticles/ 3 → 4 (engine/confetti/slim)* — Migrated useParticles hook to v4's paint.fill.color schema, refactored plugin registration so confetti and fire effects can both initialize correctly, and timestamped container ids so consecutive triggers don't collide.
  • @mdxeditor/editor 3 → 4 — Migrated three components that read codeBlockLanguages$ to v4's NormalizedCodeBlockLanguages shape. Dropped a now-defunct @stitches/core test mock since v4 sheds the entire sandpack transitive chain (lockfile shrank by ~670 lines).
  • react-day-picker 9 → 10 — Migrated initialFocusautoFocus, fromYear/toYearstartMonth/endMonth, and the table classname slot to month_grid. Affects the ticket due-date picker and the backlog due-date filter range picker.
  • Combined dependency rounds — Four batches of grouped Dependabot PRs covering @anthropic-ai/sdk, @tanstack/react-query, Next 16.2.4 → 16.2.7, React 19.2.5 → 19.2.7, radix-ui, Tailwind 4.3, Vitest 4.1.5 → 4.1.8, msw, jsdom, biome, tsx, and many more.
  • CI consistencydeploy-docs.yml switched from hardcoded node-version: '20' to node-version-file: '.node-version', matching ci.yml and release.yml.

Bug Fixes

  • Demo mode crash — Restored early-return pattern in useCurrentUser / useIsAuthenticated / useIsSystemAdmin / useAccountUser. A prior lint cleanup had moved useSession() to the top of these hooks, which crashed in demo mode (no SessionProvider is mounted) with Cannot destructure property 'data' of useSession() as it is undefined. Affected anyone visiting the demo home page.
  • Duplicate InsertCodeBlock button — Removed a redundant code-block insertion button from the description editor toolbar; the existing ResponsiveCodeToggle already renders one.

Known Issues

  • Source-mode crash in next dev --turbopack — Clicking the source-mode toggle in the description editor under Turbopack dev throws tags is undefined. Reproduces on v3.55 too — pre-existing Next.js 16 / Turbopack incompatibility with mdxeditor's CodeMirror-based source editor. Does not affect production builds; Railway demo and next start are unaffected.

Full Changelog: v0.9.5...v0.9.6

v0.9.5

20 Apr 21:12
47e0542

Choose a tag to compare

PUNT (Project Unified Nimble Tracker) is a local-first issue tracking system with Jira-like backlog, Kanban board, and sprint planning.

New Features

Official PUNT Logo & Dynamic Favicon — Added the official PUNT logo with a branding mode selector (logo only, text only, or both). The favicon now updates dynamically to match custom branding when configured.

Responsive Layout Foundation — Mobile-first responsive layout for the entire app. Sidebar collapses on narrow viewports, tables and boards adapt to available width.

Cross-Project Ticket Move — MCP tool to move tickets between projects, preserving metadata and reassigning ticket keys.

Independent Table Sort — Each sprint section and backlog table now maintains its own sort state independently, so sorting one section doesn't affect others.

Row Selection Checkboxes — Table views now show checkboxes for explicit row selection alongside the existing click-based selection.

Inline Story Points — Edit story points directly from the ticket context menu without opening the full ticket form.

Improvements

  • Custom scrollbars — Consistent styled scrollbars across Chromium browsers
  • Column layout — Summary column widened by narrowing key/status/priority/points columns
  • Drag handle fix — Fixed drag handle offset and simplified status/points cells
  • Column header safety — Prevented column header drag from accidentally triggering ticket DnD
  • Parent nav distinction — Visually distinguish parent nav items from sub-options in menus
  • Tooltip & export polish — Fixed tooltip warning and export dialog spacing

Technical

  • TypeScript 6.0 — Upgraded from TypeScript 5.9 to 6.0
  • Node.js 22 — Minimum Node.js requirement bumped to 22.0.0
  • lucide-react 1.7 — Major version upgrade (brand icons removed, replaced with inline SVGs)
  • file-type 22 — Major version upgrade
  • Biome lint cleanup — Removed 47 of 90 biome-ignore suppressions through structural fixes (demo mode hook restructuring, Prisma type safety improvements)
  • next-auth — Updated to 5.0.0-beta.31
  • Combined dependency bumps — Two rounds of batched Dependabot PRs covering CI actions, Docusaurus, React Query, Anthropic SDK, Next.js 16.2.4, Vitest, and more

Bug Fixes

  • Fixed column header drag accidentally triggering ticket DnD
  • Fixed drag handle offset in table rows
  • Fixed tooltip warning and export dialog spacing issues
  • Fixed custom scrollbar inconsistencies in Chromium

Cumulative Features

Kanban boards, backlog views with 20+ columns, PQL query language, sprint planning with burndown charts, ticket linking with bulk operations and undo/redo, bulk ticket editing, activity audit trail, 2FA authentication, custom roles with granular permissions, team management, real-time SSE sync, 44+ MCP tools for Claude integration, chat with @user and #ticket context tagging, subtask progress tracking, agent attribution, subpath deployments, view-as-member simulation, demo mode with full localStorage persistence, responsive mobile layout, and official branding with dynamic favicon.

Requirements

Node.js 22+ and PostgreSQL 16+. Clone, pnpm install, configure DATABASE_URL in .env, pnpm db:push, pnpm dev → localhost:3000. Or run pnpm run setup for guided installation.


Full Changelog: v0.9.4...v0.9.5

What's Changed

  • feat(mobile): responsive layout foundation (PUNT-7) by @jmynes in #468
  • feat(ui): official PUNT logo, branding mode selector, dynamic favicon (PUNT-398) by @jmynes in #477
  • fix(ui): tooltip warning and export dialog spacing (PUNT-399) by @jmynes in #476
  • fix(ui): widen summary column by narrowing key/status/priority/points columns (PUNT-377) by @jmynes in #479
  • fix(ui): fix drag handle offset and simplify status/points cells (PUNT-402) by @jmynes in #482
  • fix(ui): prevent column header drag from triggering ticket DnD (PUNT-408) by @jmynes in #483
  • fix(ui): visually distinguish parent nav items from sub-options (PUNT-404) by @jmynes in #485
  • fix(ui): consistent custom scrollbars in Chromium browsers (PUNT-394) by @jmynes in #478
  • feat(ui): inline story points input in context menu (PUNT-413) by @jmynes in #487
  • feat(ui): add row selection checkboxes to table views (PUNT-407) by @jmynes in #486
  • feat(ui): independent table sort per sprint/backlog section (PUNT-397) by @jmynes in #490
  • feat(mcp): add cross-project ticket move support (PUNT-403) by @jmynes in #488
  • chore(lint): replace biome-ignore suppressions with structural fixes (PUNT-384) by @jmynes in #480
  • chore(deps): Bump typescript from 5.9.3 to 6.0.2 by @dependabot in #495
  • chore(deps): Bump file-type from 21.3.4 to 22.0.0 by @dependabot in #498
  • chore(deps): Bump lucide-react from 0.577.0 to 1.7.0 by @dependabot in #499
  • chore(deps): combined dependency bumps (PRs #503-512) by @jmynes in #513
  • chore(deps): combined dependency bumps (PRs #514-518) by @jmynes in #521

Full Changelog: v0.9.4...v0.9.5

What's Changed

  • feat(mobile): responsive layout foundation (PUNT-7) by @jmynes in #468
  • chore(deps): Bump @biomejs/biome from 2.4.7 to 2.4.8 in the dev-dependencies group by @dependabot[bot] in #471
  • chore(deps): Bump jsdom from 28.1.0 to 29.0.1 by @dependabot[bot] in #474
  • chore(deps): Bump the production-dependencies group across 1 directory with 14 updates by @dependabot[bot] in #475
  • chore(ci): Bump pnpm/action-setup from 4 to 5 by @dependabot[bot] in #469
  • fix(ui): tooltip warning and export dialog spacing (PUNT-399) by @jmynes in #476
  • feat(ui): official PUNT logo, branding mode selector, dynamic favicon (PUNT-398) by @jmynes in #477
  • fix(ui): widen summary column by narrowing key/status/priority/points columns (PUNT-377) by @jmynes in #479
  • fix(ui): fix drag handle offset and simplify status/points cells (PUNT-402) by @jmynes in #482
  • fix(ui): prevent column header drag from triggering ticket DnD (PUNT-408) by @jmynes in #483
  • fix(ui): visually distinguish parent nav items from sub-options (PUNT-404) by @jmynes in #485
  • fix(ui): consistent custom scrollbars in Chromium browsers (PUNT-394) by @jmynes in #478
  • feat(ui): inline story points input in context menu (PUNT-413) by @jmynes in #487
  • feat(ui): add row selection checkboxes to table views (PUNT-407) by @jmynes in #486
  • feat(ui): independent table sort per sprint/backlog section (PUNT-397) by @jmynes in #490
  • feat(mcp): add cross-project ticket move support (PUNT-403) by @jmynes in #488
  • chore(ci): Bump actions/deploy-pages from 4 to 5 by @dependabot[bot] in #491
  • chore(deps): Bump typescript from 5.9.3 to 6.0.2 in /docs-site by @dependabot[bot] in #492
  • chore(deps): Bump the dev-dependencies group with 2 updates by @dependabot[bot] in #494
  • chore(deps): Bump typescript from 5.9.3 to 6.0.2 by @dependabot[bot] in #495
  • chore(deps): Bump the production-dependencies group across 1 directory with 9 updates by @dependabot[bot] in #500
  • chore(deps): Bump file-type from 21.3.4 to 22.0.0 by @dependabot[bot] in #498
  • chore(deps): Bump lucide-react from 0.577.0 to 1.7.0 by @dependabot[bot] in #499
  • chore(lint): replace biome-ignore suppressions with structural fixes (PUNT-384) by @jmynes in #480
  • chore(deps): combined dependency bumps (PRs #503-512 excluding #505) by @jmynes in #513
  • chore(deps): combined dependency bumps (PRs #514-518) by @jmynes in #521
  • chore(release): bump version to 0.9.5 by @jmynes in #522

Full Changelog: v0.9.4...v0.9.5

v0.9.4

22 Mar 04:55
2fe437e

Choose a tag to compare

PUNT (Project Unified Nimble Tracker) is a local-first issue tracking system with Jira-like backlog, Kanban board, and sprint planning.

New Features

Bulk Ticket Editing — Multi-select tickets on the board or backlog and edit shared fields (assignee, priority, labels, due date, parent) in a single dialog. Select with Ctrl/Cmd+Click or Shift+Click, then use the bulk edit toolbar.

Chat Context Tagging — Type @ to mention team members or # to reference tickets inline in chat messages. Autocomplete resolves names, usernames, and ticket keys with a searchable dropdown.

Kanban Drop Targeting Rewrite — Completely rebuilt the board drag-and-drop indicator system. The old inline placeholder caused a feedback loop in large columns (58+ items) where the indicator showed at wrong positions. The new absolutely-positioned indicator line tracks the pointer accurately regardless of column size or scroll position.

Demo Mode Persistence — The demo now fully persists all changes to localStorage. Column creation, renaming, deletion, ticket moves, field updates, comments, ticket links, and member changes all survive page refresh. Previously, only tickets and labels persisted.

Activity-Based Chat Timeout — Replaced the hard 2-hour timeout with an inactivity-based timeout that resets on each streaming event. Long-running operations that are actively producing output will never be killed. Only 3 minutes of complete silence triggers the timeout.

Improvements

  • KebabMenu shared component — Extracted reusable three-dot menu component used across sprint sections
  • LoadingButton component — DRY replacement for 36+ loading-state button patterns
  • Unified ConfirmDialog — Standardized confirmation dialog with imperative useConfirmation() hook
  • Reset to System Defaults — Admin Project Defaults tabs now have a "Reset to System Defaults" button
  • Sticky table headers — Ticket table headers stay visible when scrolling, with polished styling in sprint card contexts
  • Chat stop button — Can now stop Claude mid-response and continue typing while streaming
  • Symmetric card padding — Kanban card content has equal left/right spacing, preventing text from appearing flush against the right border
  • Backlog cross-section drag — Can now drag tickets between sprint and backlog sections even when a column sort is active, with contextual drop banners color-matched to section state

Bug Fixes

  • Fixed kanban drop indicator skipping positions in large columns (58+ items)
  • Fixed inability to drag indicator back to position 0 after moving down
  • Fixed ticket drop landing at wrong position (stale closure in drag end handler)
  • Fixed demo mode "Failed to move ticket" errors when dragging between columns
  • Fixed demo mode mutations (delete, update, reorder) not persisting to localStorage
  • Fixed visual artifacts when Esc cancels a ticket drag
  • Fixed Reset to Defaults bugs across repository, agents, hooks, and sprints settings pages
  • Fixed long spinner on Reset to Defaults in demo mode
  • Fixed missing spaces in chat streamed responses
  • Fixed MCP storyPoints rejected as invalid type (string vs number coercion)
  • Fixed sidebar vertical rhythm during section expand/collapse
  • Added Enter key submission to database export dialog and other forms

Cumulative Features

Kanban boards, backlog views with 20+ columns, PQL query language, sprint planning with burndown charts, ticket linking with bulk operations and undo/redo, bulk ticket editing, activity audit trail, 2FA authentication, custom roles with granular permissions, team management, real-time SSE sync, 44+ MCP tools for Claude integration, chat with @user and #ticket context tagging, subtask progress tracking, agent attribution, subpath deployments, view-as-member simulation, and demo mode with full localStorage persistence.

Requirements

Node.js 20.9.0+ and PostgreSQL 16+. Clone, pnpm install, configure DATABASE_URL in .env, pnpm db:push, pnpm dev → localhost:3000. Or run pnpm run setup for guided installation.


Full Changelog: v0.9.3...v0.9.4

What's Changed

  • feat(ui): add Enter key submission to forms and dialogs (PUNT-349) by @jmynes in #444
  • feat(board): add Link ticket option to context menus (PUNT-367) by @jmynes in #443
  • fix(mcp): coerce numeric tool parameters to handle string inputs (PUNT-350) by @jmynes in #439
  • chore(deps): Bump the dev-dependencies group across 1 directory with 3 updates by @dependabot[bot] in #446
  • chore(deps): Bump the production-dependencies group across 1 directory with 13 updates by @dependabot[bot] in #447
  • fix(chat): resolve missing spaces in streamed responses (PUNT-340) by @jmynes in #440
  • fix(settings): resolve long spinner on Reset to Defaults in demo mode (PUNT-347) by @jmynes in #451
  • fix(chat): add stop button and enable input during streaming (PUNT-338) by @jmynes in #449
  • fix(ui): stabilize sidebar vertical rhythm during section expand/collapse (PUNT-381) by @jmynes in #452
  • fix(admin): add Enter key submission to database export dialog (PUNT-372) by @jmynes in #448
  • feat(table): make ticket table header sticky when scrolling (PUNT-383) by @jmynes in #454
  • fix(table): polish sticky header for sprint card contexts (PUNT-383) by @jmynes in #455
  • feat(chat): add @user and #ticket context tagging (PUNT-198) by @jmynes in #450
  • fix(settings): resolve Reset to Defaults bugs across settings pages (PUNT-380) by @jmynes in #453
  • feat(ui): unified confirmation dialog system (PUNT-385) by @jmynes in #456
  • feat(ui): LoadingButton component to DRY up loading state buttons (PUNT-386) by @jmynes in #457
  • feat(settings): add Reset to System Defaults to admin Project Defaults tabs (PUNT-388) by @jmynes in #458
  • feat(tickets): add bulk edit flow for multi-selected tickets (PUNT-375) by @jmynes in #461
  • fix(board): clean up visual artifacts when Esc cancels ticket drag (PUNT-378) by @jmynes in #459
  • fix(board): rewrite kanban drop targeting and backlog cross-section drag (PUNT-389) by @jmynes in #462
  • fix(demo): add isDemoMode() guards to all client-side API calls (PUNT-392) by @jmynes in #463
  • feat(demo): localStorage persistence for columns, comments, links, members (PUNT-393) by @jmynes in #464
  • fix(demo): persist ticket mutations to demoStorage (PUNT-393) by @jmynes in #465
  • feat(ui): KebabMenu shared component and migrate sprint menus (PUNT-387) by @jmynes in #460
  • fix(chat): replace hard timeout with activity-based inactivity timeout (PUNT-332) by @jmynes in #466
  • chore(release): bump version to 0.9.4 by @jmynes in #467

Full Changelog: v0.9.3...v0.9.4

v0.9.3

12 Mar 18:15
83575cc

Choose a tag to compare

PUNT (Project Unified Nimble Tracker) is a local-first issue tracking system with Jira-like backlog, Kanban board, and sprint planning.

New Features

Ticket Linking Overhaul — A comprehensive rework of ticket relationships. A new "splits from / split to" link type supports breaking tickets into smaller pieces. Relation types can now be changed on existing links without deleting and recreating them. The link dialog supports bulk linking — search or paste multiple ticket keys to link them all at once. All link operations (create, delete, type change) are now fully integrated into the undo/redo stack.

Board Column Drag-and-Drop Placement — New columns can now be placed at a specific position via drag-and-drop during creation, and existing columns can be moved from the column header context menu. The add and edit column dialogs have been unified into a single component.

Manual Ticket Reorder in Sprints — Tickets within sprint sections on the table view can now be manually reordered via drag-and-drop, giving teams control over work priority within a sprint.

Subpath Deployments — PUNT can now be served at a subpath (e.g., example.com/punt) by setting NEXT_PUBLIC_BASE_PATH=/punt. All internal routing, API calls, and asset URLs respect the configured base path.

View-as-Member Simulation — Project admins can now simulate how the UI appears to a specific team member, making it easy to verify role-based permissions and visibility without switching accounts.

External MCP Server Management — Improved configuration and management of external MCP servers, with a markdown editor for agent guidance and better settings organization.

Default Project View — Users can now set their preferred default view (board or backlog) per-project in user settings, so PUNT opens to the view they use most.

Improvements

  • Unified ticket action layer across board, backlog, and sprint views for consistent behavior
  • Unified sprint/backlog table — shared component with extracted sort utilities, reducing code duplication
  • Board store decoupled from resolution state, removing redundant coupling
  • Priority icons now shown in activity log entries with corrected color alignment
  • Agent guidance textarea replaced with a full markdown editor
  • Sprint defaults now include duration and carry-over settings
  • Advanced Options sections have hover highlights for better discoverability
  • Agent attribution persists on tickets even when the agent is revoked

Bug Fixes

  • Hardened 2FA implementation against bypass attacks
  • Chat timeout increased from 3 minutes to 2 hours, with state recovery and user guidance on timeout
  • Fixed keyboard scrolling not working in ticket drawer on open
  • Fixed false "unsaved changes" warning in ticket description editor
  • Fixed drawer scroll position not resetting when navigating to a linked ticket
  • Fixed multi-select click breaking after cross-table move in backlog
  • Fixed card overflow in Done column on board view
  • Fixed off-by-one error in sprint days remaining calculation
  • Fixed overdue sprint completion prompt not showing on sprints page
  • Added prompt to start next sprint after manual completion
  • Fixed env branches overflow and enforced unique names in project settings
  • Preserved query string in callbackUrl when redirecting to login
  • Fixed code block language displayed as editable in read-only mode
  • Removed current user from assignee dropdown when "Assign to me" is shown
  • Increased MCP body size limit for attachment uploads

Cumulative Features

Kanban boards, backlog views with 20+ columns, PQL query language, sprint planning with burndown charts, ticket linking with bulk operations and undo/redo, activity audit trail, 2FA authentication, custom roles with granular permissions, team management, real-time SSE sync, 44+ MCP tools for Claude integration, subtask progress tracking, agent attribution, subpath deployments, view-as-member simulation, and demo mode.

Requirements

Node.js 20.9.0+ and PostgreSQL 16+. Clone, pnpm install, configure DATABASE_URL in .env, pnpm db:push, pnpm dev → localhost:3000. Or run pnpm run setup for guided installation.


Full Changelog: v0.9.2...v0.9.3

What's Changed

  • feat(settings): add hover highlight to Advanced Options sections (PUNT-323) by @jmynes in #396
  • fix(sprints): prompt to start next sprint after manual completion (PUNT-336) by @jmynes in #397
  • fix(sprints): correct off-by-one in days remaining calculation (PUNT-335) by @jmynes in #398
  • fix(chat): handle timeout with state recovery and user guidance (PUNT-330, PUNT-331) by @jmynes in #399
  • fix(board): prevent card overflow in Done column (PUNT-328) by @jmynes in #400
  • fix(settings): fix env branches overflow and enforce unique names (PUNT-325, PUNT-326) by @jmynes in #401
  • fix(chat): increase timeout from 3 minutes to 2 hours (PUNT-337) by @jmynes in #402
  • feat(admin): add missing sprint default settings for duration and carry-over (PUNT-327) by @jmynes in #403
  • feat(settings): replace agent guidance textarea with markdown editor (PUNT-324) by @jmynes in #404
  • feat(mcp): improve external MCP server configuration and management (PUNT-213) by @jmynes in #405
  • fix(mcp): increase body size limit for attachment uploads (PUNT-333) by @jmynes in #406
  • feat(projects): add view-as-member simulation for specific members (PUNT-24) by @jmynes in #407
  • refactor(backlog): extract shared sort utility and unify backlog/sprint table behavior (PUNT-122) by @jmynes in #409
  • fix(auth): harden 2FA implementation against bypass attacks (PUNT-216) by @jmynes in #410
  • refactor(tickets): unified ticket action layer for all UI surfaces (PUNT-308) by @jmynes in #411
  • feat(deploy): support subpath deployments via Next.js basePath (PUNT-292) by @jmynes in #412
  • feat(tickets): persist agent reporter attribution when agent is revoked (PUNT-341) by @jmynes in #414
  • fix(tickets): remove current user from assignee dropdown when Assign to me is shown (PUNT-344) by @jmynes in #415
  • fix(sprints): add overdue sprint completion prompt to sprints page (PUNT-345) by @jmynes in #416
  • fix(viewer): display code block language as static badge in read-only mode (PUNT-343) by @jmynes in #417
  • fix(auth): preserve query string in callbackUrl when redirecting to login (PUNT-346) by @jmynes in #418
  • fix(tests): add missing agent attribution fields to test mocks by @jmynes in #421
  • chore: gitignore .claude/worktrees and remove tracked leftovers by @jmynes in #422
  • fix(tickets): enable keyboard scrolling in ticket drawer on open (PUNT-352) by @jmynes in #423
  • feat(tickets): show priority icon in activity log entries (PUNT-351) by @jmynes in #424
  • fix(tickets): reset drawer scroll position when navigating to linked ticket (PUNT-354) by @jmynes in #425
  • feat(settings): add user preference for default project view (PUNT-359) by @jmynes in #426
  • fix(tickets): prevent false unsaved changes warning in description editor (PUNT-353) by @jmynes in #427
  • feat(board): unify add and edit column dialogs (PUNT-355) by @jmynes in #428
  • fix(backlog): resolve multi-select click after cross-table move (PUNT-358) by @jmynes in #429
  • fix(tickets): align priority icon colors with badge text colors (PUNT-351) by @jmynes in #430
  • feat(tickets): add "splits from" / "split to" ticket link type (PUNT-363) by @jmynes in #431
  • feat(tickets): allow changing ticket link relation type (PUNT-364) by @jmynes in #432
  • feat(tickets): bulk ticket linking dialog (PUNT-366) by @jmynes in #433
  • feat(tickets): add ticket link operations to undo/redo stack (PUNT-365) by @jmynes in #434
  • refactor(backlog): unify sprint/backlog into single table component (PUNT-122) by @jmynes in #435
  • refactor(board): remove redundant resolution coupling from board store (PUNT-371) by @jmynes in #436
  • feat(board): column placement via drag-and-drop on creation + move in column menu (PUNT-360) by @jmynes in #437
  • feat(table): add manual ticket reorder within sprint sections (PUNT-362) by @jmynes in #438

Full Changelog: v0.9.2...v0.9.3

What's Changed

  • fix(mcp): correct link type display labels for inward links (PUNT-309) by @jmynes in #368
  • feat(mcp): link Agent record to MCP API key generation (PUNT-299) by @jmynes in #367
  • feat(auth): resolve Agent identity from MCP API key in auth flow (PUNT-300) by @jmynes in #369
  • feat(api): attribute ticket crea...
Read more

v0.9.2

07 Mar 02:56

Choose a tag to compare

PUNT (Project Unified Nimble Tracker) is a local-first issue tracking system with Jira-like backlog, Kanban board, and sprint planning.

New Features

Agent Identity & Attribution — MCP API keys now link to Agent records with full identity resolution in the auth flow. Tickets created by agents display attribution badges in the UI, giving clear visibility into AI-assisted work. Users can manage their agents from a new "My Agents" section in the profile page, and system admins have a dedicated agent management panel.

Agent Identicons — Agents are automatically assigned unique identicon avatars and better default names, making it easy to visually distinguish between different agents at a glance.

Activity Logging for Links — Ticket link changes (created, removed) and blocker status transitions are now recorded in the activity audit trail, providing a complete history of ticket relationship changes.

Project Defaults — Admins can now configure default repository settings, automation hooks, and agent settings that are applied to all newly created projects. The admin settings page has been reorganized into separate "System Settings" and "Project Defaults" sections for clarity.

Story Point Scale Toggle — Projects can now switch between Fibonacci (1, 2, 3, 5, 8, 13, 21) and sequential (1–10) story point scales via project settings.

Account Settings Panel — All settings pages now use route-based URLs for deep linking and browser history support. A new Account panel consolidates account-related settings.

Reset to System Defaults — Roles and sprint settings can now be reset to system defaults with a single click, making it easy to restore standard configurations after customization.

Improvements

  • Sidebar unified indentation, icons, and section patterns for a cleaner layout
  • Children and linked tickets now display resolution, story points, and assignee inline
  • MCP link type labels corrected for inward links (e.g., "is blocked by" instead of "blocks")

Bug Fixes

  • Fixed parent subtask count not updating when a child ticket's resolution changes
  • Fixed "Load Defaults" button not appearing when repository/hook patterns differ from defaults
  • Fixed story point entries misaligned in the context menu
  • Fixed admin roles tab slug and tab ordering
  • Hardened database import/export against schema version mismatches
  • Resolved pre-existing lint errors across the codebase

Cumulative Features

Kanban boards, backlog views with 20+ columns, PQL query language, sprint planning with burndown charts, ticket linking, activity audit trail, 2FA authentication, custom roles with granular permissions, team management, real-time SSE sync, 44+ MCP tools for Claude integration, subtask progress tracking, agent attribution, and demo mode.

Requirements

Node.js 20.9.0+ and PostgreSQL 16+. Clone, pnpm install, configure DATABASE_URL in .env, pnpm db:push, pnpm dev → localhost:3000. Or run pnpm run setup for guided installation.


Full Changelog: v0.9.1...v0.9.2

What's Changed

  • fix(mcp): correct link type display labels for inward links (PUNT-309) by @jmynes in #368
  • feat(mcp): link Agent record to MCP API key generation (PUNT-299) by @jmynes in #367
  • feat(auth): resolve Agent identity from MCP API key in auth flow (PUNT-300) by @jmynes in #369
  • feat(api): attribute ticket creation to Agent (PUNT-301) by @jmynes in #370
  • feat(profile): add My Agents section to user profile (PUNT-303) by @jmynes in #371
  • fix(backup): harden import/export against schema version mismatches (PUNT-311) by @jmynes in #373
  • feat(admin): add agent management to admin panel (PUNT-304) by @jmynes in #372
  • feat(settings): add Account panel and convert all settings to route-based URLs (PUNT-312) by @jmynes in #374
  • fix(admin): rename roles tab slug to default-roles and fix tab order by @jmynes in #388
  • fix(ui): align story point entries in context menu (PUNT-317) by @jmynes in #379
  • fix(lint): resolve pre-existing lint errors (PUNT-315) by @jmynes in #375
  • fix(tickets): show resolution, story points, and assignee on children and links (PUNT-314) by @jmynes in #376
  • feat(tickets): add agent attribution badges to ticket UI (PUNT-302) by @jmynes in #377
  • fix(sidebar): unify indentation, icons, and section patterns (PUNT-316) by @jmynes in #389
  • feat(agents): add identicon system and better default names (PUNT-313) by @jmynes in #378
  • feat(activity): log ticket link changes and blocker status transitions (PUNT-310) by @jmynes in #380
  • feat(settings): add Fibonacci vs sequential story point scale toggle (PUNT-318) by @jmynes in #387
  • feat(admin): add default repository, hooks, and agent settings for new projects (PUNT-171) by @jmynes in #390
  • fix(admin): show load defaults button when patterns differ from defaults (PUNT-321) by @jmynes in #391
  • feat(admin): split settings into system settings and project defaults sections (PUNT-322) by @jmynes in #392
  • fix(board): update parent subtask count on child resolution change (PUNT-319) by @jmynes in #393
  • feat(settings): add reset to system defaults for roles and sprints (PUNT-320) by @jmynes in #394

Full Changelog: v0.9.1...v0.9.2

v0.9.1

05 Mar 20:46
43b7cf9

Choose a tag to compare

PUNT (Project Unified Nimble Tracker) is a local-first issue tracking system with Jira-like backlog, Kanban board, and sprint planning.

New Features

Guided Installer — A new pnpm run setup command walks through PostgreSQL detection, database creation, .env configuration, Prisma setup, and admin user creation. Also supports a demo mode path that requires no database.

MCP CLI Login — A new pnpm mcp:login command lets users authenticate with the MCP server from the command line, storing credentials for headless or CI use cases.

Context Menu Send-to-Top/Bottom — Tickets on the Kanban board and backlog now have "Send to Top" and "Send to Bottom" options in the context menu, with full undo support.

Scrollable Tab Navigation — Settings and other tabbed interfaces now handle overflow gracefully with left/right scroll arrows when tabs exceed the available width.

Multiple Keywords per Hook Rule — Automation hook rules can now match on multiple keywords per rule instead of requiring separate rules for each keyword.

Improvements

  • Export UI redesigned with accurate size estimation so users know the download size before exporting
  • Database import streamlined from 8 steps to 6 for a faster restore experience
  • Settings tabs alphabetized for easier navigation
  • Resolved tickets can now be moved to completed sprints from the ticket detail drawer
  • Sprint completion now prevents unresolved tickets from being orphaned — users must reassign or resolve them first

Bug Fixes

  • Fixed client-side redirect after sign-out to prevent middleware race conditions

Dependencies

  • Bumped 6 production dependencies and 2 dev dependencies

Cumulative Features

Kanban boards, backlog views with 20+ columns, PQL query language, sprint planning with burndown charts, ticket linking, activity audit trail, 2FA authentication, custom roles with granular permissions, team management, real-time SSE sync, 44+ MCP tools for Claude integration, subtask progress tracking, and demo mode.

Requirements

Node.js 20.9.0+ and PostgreSQL 16+. Clone, pnpm install, configure DATABASE_URL in .env, pnpm db:push, pnpm dev → localhost:3000. Or run pnpm run setup for guided installation.


Full Changelog: v0.9.0...v0.9.1

What's Changed

  • chore(deps): Bump the production-dependencies group with 6 updates (#346)
  • chore(deps): Bump the dev-dependencies group with 2 updates (#347)
  • refactor(admin): streamline database import from 8 steps to 6 (PUNT-293) (#351)
  • chore(settings): alphabetize settings tabs (PUNT-294) (#352)
  • feat(admin): redesign export UI with accurate size estimation (PUNT-295) (#353)
  • fix(auth): use client-side redirect after sign-out (PUNT-291) (#354)
  • feat(ui): add scrollable tab navigation for overflow handling (PUNT-251) (#356)
  • feat(mcp): add CLI login command for MCP credentials (PUNT-200) (#358)
  • feat(setup): add guided installer script (PUNT-275) (#359)
  • feat(hooks): support multiple keywords per hook rule (PUNT-172) (#360)
  • feat(sprints): prevent unresolved tickets from being orphaned in completed sprints (PUNT-296) (#361)
  • feat(tickets): allow moving resolved tickets to completed sprints in drawer (PUNT-305) (#362)
  • feat(ui): context menu send-to-top/bottom with undo support (PUNT-306) (#364)
  • chore(release): bump version to 0.9.1 (#365)

Full Changelog: v0.9.0...v0.9.1

What's Changed

  • chore(deps): Bump the dev-dependencies group with 2 updates by @dependabot[bot] in #347
  • chore(deps): Bump the production-dependencies group with 6 updates by @dependabot[bot] in #346
  • refactor(admin): streamline database import from 8 steps to 6 (PUNT-293) by @jmynes in #351
  • chore(settings): alphabetize settings tabs (PUNT-294) by @jmynes in #352
  • feat(admin): redesign export UI with accurate size estimation (PUNT-295) by @jmynes in #353
  • fix(auth): use client-side redirect after sign-out (PUNT-291) by @jmynes in #354
  • feat(ui): add scrollable tab navigation for overflow handling (PUNT-251) by @jmynes in #356
  • feat(hooks): support multiple keywords per hook rule (PUNT-172) by @jmynes in #360
  • feat(mcp): add CLI login command for MCP credentials (PUNT-200) by @jmynes in #358
  • feat(setup): add guided installer script (PUNT-275) by @jmynes in #359
  • feat(sprints): prevent unresolved tickets from being orphaned in completed sprints (PUNT-296) by @jmynes in #361
  • feat(tickets): allow moving resolved tickets to completed sprints in drawer (PUNT-305) by @jmynes in #362
  • feat(ui): context menu send-to-top/bottom with undo support (PUNT-306) by @jmynes in #364
  • feat(schema): add Agent model and Ticket relation (PUNT-298) by @jmynes in #363
  • fix(board): propagate resolution to linked tickets (PUNT-307) by @jmynes in #366
  • chore(release): bump version to 0.9.1 by @jmynes in #365

Full Changelog: v0.9.0...v0.9.1

v0.9.0

02 Mar 08:12
2ae1018

Choose a tag to compare

PUNT (Project Unified Nimble Tracker) is a local-first issue tracking system with Jira-like backlog, Kanban board, and sprint planning.

New Features

PostgreSQL Migration — PUNT has migrated from SQLite to PostgreSQL for improved performance, concurrent access, and production readiness. Native enums, JSON fields, and case-insensitive username lookups are now handled natively by the database.

Subtask UX Overhaul — Tickets with subtasks now display a progress badge (2/5) on Kanban cards and table rows showing resolved vs total subtasks. A new "Add Subtask" option in the ticket context menu (board + backlog) opens the create dialog with type and parent pre-filled. Server-side validation prevents nested subtasks (max 1 level deep).

Unified Profile & Admin User Detail — The user profile page and admin user detail page have been consolidated into a single tabbed interface. Admins see additional tabs (security, admin actions) when viewing other users. Profile settings have been reorganized into dedicated tabs with a sidebar layout.

Project Membership Management — Admins can now manage project memberships directly from the user detail page, including adding users to projects, removing them, and changing roles with full undo support.

MCP Tooling Expansion — Four new MCP tools: whoami for current user context, get_user for profile lookups with fuzzy name/username/email resolution, and attachment management tools (list, upload, delete) for ticket file handling.

Drawer Undo/Redo — Ticket field changes made in the detail drawer now participate in the Ctrl+Z/Y undo/redo chain. Undo/redo works while the drawer is open, and closing the drawer no longer clears the undo history.

Context Menu Enhancements — Ticket context menus now show checkmarks next to the current value in all submenus (type, priority, status, resolution, assignee, sprint). A new "Change Type" submenu allows quick type changes without opening the edit form.

Backlog Sorting Context Menu — Column headers in the backlog table now have a right-click context menu for quick sort direction toggling and sort clearing.

Improvements

  • Sidebar now truncates long project names with a tooltip, and includes a context menu for quick actions
  • Project deletion now requires typing the project name (not key) for confirmation, with password re-authentication
  • "Already Implemented" added as a resolution option for tickets
  • Sprint move toasts now include ticket keys for better identification
  • Click-to-deselect extended to page headers, filter bars, and footer areas
  • Sign-out now uses client-side redirect to prevent middleware race conditions
  • User avatar button in the header now has a hover effect
  • Backlog drag-and-drop from sprint to backlog improved — dragging below the sprint container now targets the backlog instead of scrolling the sprint

Bug Fixes

  • Fixed resolvedAt timestamp not syncing when tickets are moved to Done columns or when resolution is set/cleared
  • Fixed edit project dialog not re-initializing state when reopened after closing
  • Fixed sidebar project name truncation not triggering for names at the boundary length
  • Fixed sprint undo not clearing the sprint assignment from the ticket display
  • Fixed chat error messages overflowing the message box (added word-break)
  • Fixed horizontal scrollbar flashing briefly during drag-and-drop auto-scroll in backlog
  • Fixed undo of ticket deletion closing an unrelated ticket's detail drawer
  • Fixed dotenv v17 stdout banner breaking MCP stdio transport

Cumulative Features

Kanban boards, backlog views with 20+ columns, PQL query language, sprint planning with burndown charts, ticket linking, activity audit trail, 2FA authentication, custom roles with granular permissions, team management, real-time SSE sync, 44+ MCP tools for Claude integration, subtask progress tracking, and demo mode.

Requirements

Node.js 20.9.0+ and PostgreSQL 16+. Clone, pnpm install, configure DATABASE_URL in .env, pnpm db:push, pnpm dev → localhost:3000.


Full Changelog: v0.8.0...v0.9.0

What's Changed

  • feat(db): migrate from SQLite to PostgreSQL (PUNT-228) by @jmynes in #312
  • chore(tickets): add "Already Implemented" resolution option (PUNT-245) by @jmynes in #313
  • feat(backlog): add sorting context menu to column headers (PUNT-247) by @jmynes in #314
  • fix(table): clear selection when clicking empty space in table views (PUNT-261) by @jmynes in #315
  • fix(tickets): sync resolvedAt with column and resolution changes (PUNT-248) by @jmynes in #316
  • docs: update README and setup docs for PostgreSQL onboarding (PUNT-272) by @jmynes in #317
  • feat(sidebar): truncate long project names and add context menu (PUNT-273) by @jmynes in #319
  • fix(selection): extend click-to-deselect to cover page headers and filter bars (PUNT-263) by @jmynes in #323
  • feat(tickets): add change type option to context menu (PUNT-274) by @jmynes in #321
  • feat(mcp): add whoami tool for current user context (PUNT-269) by @jmynes in #320
  • feat(mcp): add get_user tool for user profile lookup (PUNT-270) by @jmynes in #318
  • feat(mcp): resolve users by name, username, or email (PUNT-268) by @jmynes in #322
  • fix(projects): re-initialize edit dialog state on reopen (PUNT-276) by @jmynes in #324
  • fix(sidebar): ensure project name truncation triggers for long names (PUNT-277) by @jmynes in #325
  • feat(tickets): show current value checkmarks in all context menu submenus (PUNT-278) by @jmynes in #327
  • feat(mcp): add attachment management tools (PUNT-264) by @jmynes in #326
  • feat(admin): add project membership management to user detail page (PUNT-266) by @jmynes in #328
  • fix(projects): change deletion confirmation from key to name (PUNT-280) by @jmynes in #329
  • fix(mcp): suppress dotenv v17 stdout banner breaking stdio transport (PUNT-281) by @jmynes in #330
  • feat(users): unify profile and admin user detail page (PUNT-271) by @jmynes in #331
  • fix(selection): allow deselecting tickets by clicking header and footer (PUNT-288) by @jmynes in #334
  • fix(header): add hover effect to user avatar button (PUNT-289) by @jmynes in #335
  • fix(toasts): include ticket keys in sprint move action toasts (PUNT-287) by @jmynes in #333
  • fix(projects): require password reauth for project deletion (PUNT-286) by @jmynes in #337
  • fix(auth): use client-side redirect after sign-out (PUNT-291) by @jmynes in #342
  • fix(chat): prevent error messages from overflowing message box (PUNT-285) by @jmynes in #332
  • fix(sprints): clear sprint assignment on undo of backlog-to-sprint move (PUNT-290) by @jmynes in #339
  • feat(tickets): add "Add subtask" option to context menu (PUNT-282) by @jmynes in #338
  • fix(tickets): prevent subtasks from having subtasks (PUNT-284) by @jmynes in #336
  • feat(board): show subtask count badge on Kanban cards (PUNT-283) by @jmynes in #343
  • fix(tickets): drawer saves participate in undo/redo chain (PUNT-265) by @jmynes in #340
  • feat(tickets): show subtask progress as resolved/total (PUNT-283) by @jmynes in #344
  • chore(release): bump version to 0.9.0 by @jmynes in #345

Full Changelog: v0.8.0...v0.9.0

What's Changed

  • feat(db): migrate from SQLite to PostgreSQL (PUNT-228) by @jmynes in #312
  • chore(tickets): add "Already Implemented" resolution option (PUNT-245) by @jmynes in #313
  • feat(backlog): add sorting context menu to column headers (PUNT-247) by @jmynes in #314
  • fix(table): clear selection when clicking empty space in table views (PUNT-261) by @jmynes in #315
  • fix(tickets): sync resolvedAt with column and resolution changes (PUNT-248) by @jmynes in #316
  • docs: update README and setup docs for PostgreSQL onboarding (PUNT-272) by @jmynes in #317
  • feat(sidebar): truncate long project names and add context menu (PUNT-273) by @jmynes in #319
  • fix(selection): extend click-to-deselect to cover page headers and filter bars (PUNT-263) by @jmynes in #323
  • feat(tickets): add change type option to context menu (PUNT-274) by @jmynes in #321
  • feat(mcp): add whoami tool for current user context (PUNT-269) by @jmynes in #320
  • feat(mcp): add get_user tool for user profile lookup (PUNT-270) by @jmynes in #318
  • feat(mcp): resolve users by name, username, or email (PUNT-268) by @jmynes in #322
  • fix(projects): re-initiali...
Read more

v0.8.0

27 Feb 06:35
c61b09f

Choose a tag to compare

PUNT (Project Unified Nimble Tracker) is a local-first issue tracking system with Jira-like backlog, Kanban board, and sprint planning.

New Features

First-Run Setup Page & CLI Database Import — New /setup page guides first-time users through creating the initial admin account. Also adds CLI-based database import via pnpm db:import <file> for headless server setup without a browser.

Case-Insensitive Usernames — Usernames are now case-insensitive for login and duplicate detection (e.g., Admin and admin are the same account) while preserving the original display case. A new usernameLower field handles lookups; database imports automatically backfill this field.

MCP & Claude Badges in Admin Panel — The admin user list now shows purple MCP and orange Claude badges next to users who have those integrations configured. Raw API keys are never exposed to the frontend — only boolean flags.

2FA Secrets in Database Export/Import — Two-factor authentication secrets and recovery codes are now included in database exports, so users retain their 2FA setup after a backup restore.

Combined Resolution Activity Entries — When a ticket is resolved and moved to Done simultaneously, the activity timeline now shows a single combined entry instead of two separate ones.

Improvements

  • Admin user creation now requires re-authentication (password + optional 2FA) for added security
  • Timestamps now display seconds for more precise time tracking
  • Search bar in backlog view automatically clears when switching projects

Bug Fixes

  • Fixed ticket environment, affected version, and fix version fields not being saved on create/update
  • Fixed admin self-deletion being blocked even when not the sole super admin
  • Fixed admin delete user dialog showing empty parentheses when user had no display name
  • Suppressed Firefox scroll-linked positioning warning on Kanban board columns
  • Fixed excessive setProjects calls on page load (~80+ redundant store updates reduced to 1) by adding equality checks and Zustand selectors
  • Resolved all Biome lint warnings and updated schema version
  • Fixed .husky/pre-commit hook not being executable

Cumulative Features

Kanban boards, backlog views with 20+ columns, PQL query language, sprint planning with burndown charts, ticket linking, activity audit trail, 2FA authentication, custom roles with granular permissions, team management, real-time SSE sync, 44 MCP tools for Claude integration, and demo mode.

Requirements

Node.js 20.9.0+ and SQLite via Prisma. Clone, pnpm install, pnpm db:push, pnpm dev → localhost:3000.


Full Changelog: v0.7.2...v0.8.0

What's Changed

  • feat(activity): combine resolution/done activity entries (PUNT-227) by @jmynes in #301
  • fix(admin): fix delete user empty parens and add reauth to create user (PUNT-238, PUNT-240) by @jmynes in #300
  • fix(tickets): show seconds in timestamps (PUNT-235) by @jmynes in #298
  • fix(backlog): clear search bar on project switch (PUNT-242) by @jmynes in #299
  • feat(admin): persist 2FA secrets in database export/import (PUNT-241) by @jmynes in #302
  • feat(auth): add first-run setup page and CLI database import (PUNT-244) by @jmynes in #303
  • chore(lint): resolve all Biome warnings and update schema version (PUNT-212) by @jmynes in #304
  • fix(tickets): save environment, affected version, and fix version fields (PUNT-243) by @jmynes in #305
  • fix(admin): allow self-deletion when not sole super admin (PUNT-239) by @jmynes in #306
  • fix(board): suppress Firefox scroll-linked positioning warning (PUNT-226) by @jmynes in #307
  • fix(perf): deduplicate excessive setProjects calls on page load (PUNT-249) by @jmynes in #308
  • fix(auth): make usernames case-insensitive for lookups (PUNT-250) by @jmynes in #309
  • feat(admin): add MCP and Claude badges to user management rows (PUNT-246) by @jmynes in #310
  • chore(release): bump version to 0.8.0 by @jmynes in #311

What's Changed

  • feat(activity): combine resolution/done activity entries (PUNT-227) by @jmynes in #301
  • fix(admin): fix delete user empty parens and add reauth to create user (PUNT-238, PUNT-240) by @jmynes in #300
  • fix(tickets): show seconds in timestamps (PUNT-235) by @jmynes in #298
  • fix(backlog): clear search bar on project switch (PUNT-242) by @jmynes in #299
  • feat(admin): persist 2FA secrets in database export/import (PUNT-241) by @jmynes in #302
  • feat(auth): add first-run setup page and CLI database import (PUNT-244) by @jmynes in #303
  • chore(lint): resolve all Biome warnings and update schema version (PUNT-212) by @jmynes in #304
  • fix(tickets): save environment, affected version, and fix version fields (PUNT-243) by @jmynes in #305
  • fix(admin): allow self-deletion when not sole super admin (PUNT-239) by @jmynes in #306
  • fix(board): suppress Firefox scroll-linked positioning warning (PUNT-226) by @jmynes in #307
  • fix(perf): deduplicate excessive setProjects calls on page load (PUNT-249) by @jmynes in #308
  • feat(admin): add MCP and Claude badges to user management rows (PUNT-246) by @jmynes in #310
  • fix(auth): make usernames case-insensitive for lookups (PUNT-250) by @jmynes in #309
  • chore(release): bump version to 0.8.0 by @jmynes in #311

Full Changelog: v0.7.2...v0.8.0

v0.7.2

26 Feb 05:15
f824d52

Choose a tag to compare

PUNT (Project Unified Nimble Tracker) is a local-first issue tracking system with Jira-like backlog, Kanban board, and sprint planning.

New Features

Comment @mention and #ticket Autocomplete — The comments section now supports @username mentions and #TICKET-KEY autocomplete, matching the ticket description editor. A floating dropdown appears with filtered suggestions, navigable via keyboard (Arrow keys, Tab/Enter to select, Escape to dismiss).

Unified Re-authentication Dialog — All sensitive operations (password change, email change, account deletion, 2FA disable/regenerate, project wipe) now use a shared ReauthDialog component with password + optional 2FA verification, replacing ~250+ lines of duplicated inline UI.

MCP Key Security — Generating, regenerating, and revoking MCP API keys now requires password verification and 2FA (if enabled), preventing unauthorized key operations.

Dev Startup Auto-detectionpnpm dev now automatically detects stale Prisma client and missing dependencies by comparing file modification times, and runs the necessary commands before starting the dev server.

Improvements

  • PQL field expansion: PQL now supports key, summary (alias: title), and description fields for more flexible ticket queries
  • Cleaner toasts: Undo/redo buttons removed from toasts — use Ctrl+Z/Y keyboard shortcuts instead

Bug Fixes

  • Keyboard shortcuts dialog now uses standard arrow symbols (← → ↑ ↓) instead of triangle symbols for better legibility, with consistent vertical alignment
  • Markdown checkboxes in comment history are now non-interactive (no pointer cursor, no hover effects, no drag handles) — ticket description checkboxes remain fully interactive
  • Admin database import no longer flashes a modal on the import page; errors redirect to login with a toast message
  • Ticket selection now clears when switching between views or browser tabs, preventing stale multi-select state
  • Two-pass ticket import resolves parentId foreign key constraint errors when importing tickets with parent references

Cumulative Features

Kanban boards, backlog views with 20+ columns, PQL query language, sprint planning with burndown charts, ticket linking, activity audit trail, 2FA authentication, custom roles with granular permissions, team management, real-time SSE sync, 44 MCP tools for Claude integration, and demo mode.

Requirements

Node.js 20.9.0+ and SQLite via Prisma. Clone, pnpm install, pnpm db:push, pnpm dev → localhost:3000.


Full Changelog: v0.7.1...v0.7.2

What's Changed

  • fix(ui): improve keyboard shortcuts dialog legibility and alignment (PUNT-229) by @jmynes in #288
  • fix(comments): make checkboxes non-interactive in comments history (PUNT-231) by @jmynes in #289
  • feat(profile): require password + 2FA for MCP key operations (PUNT-206) by @jmynes in #286
  • fix(import): use two-pass ticket import to avoid parentId FK constraint (PUNT-234) by @jmynes in #296
  • fix(selection): clear ticket selection when switching views or browser tabs (PUNT-232) by @jmynes in #293
  • refactor(undo): remove undo/redo buttons from toasts (PUNT-225) by @jmynes in #295
  • fix(admin): replace flashing import modal with login page toast (PUNT-209) by @jmynes in #290
  • feat(reauth): normalize ReauthDialog across all sensitive operations (PUNT-233) by @jmynes in #294
  • feat(dx): auto-detect stale Prisma client and missing deps on dev startup (PUNT-219) by @jmynes in #287
  • feat(comments): add @mention and #ticket autocomplete (PUNT-197) by @jmynes in #292
  • fix(pql): add support for key, title, summary, and description fields (PUNT-218) by @jmynes in #291
  • chore(release): bump version to 0.7.2 by @jmynes in #297

Full Changelog: v0.7.1...v0.7.2

v0.7.1

24 Feb 01:29
0a5f1e2

Choose a tag to compare

PUNT (Project Unified Nimble Tracker) is a local-first issue tracking system with Jira-like backlog, Kanban board, and sprint planning.

New Features

Drag-and-Drop Markdown Checklists — GFM task list items in ticket descriptions and comments can now be reordered via drag-and-drop and toggled directly from the viewer without entering edit mode. Grip handles appear on hover, and changes persist immediately via API.

Tab Cycling Shortcuts — Navigate between project tabs (Board, Backlog, Sprints, Settings) with Ctrl+Shift+Arrow. Tab order matches the sidebar layout.

Deselect-All Button — Clear multi-selection with a single click or press Esc. Visible in the board toolbar when tickets are selected.

Admin 2FA Reset Security — Resetting another user's 2FA now requires entering your own password and completing 2FA verification, preventing unauthorized resets.

Improvements

  • MCP/Claude tab split: Integrations tab replaced with separate MCP and Claude tabs in profile settings for clearer organization
  • Undo/redo blocked in overlays: Ctrl+Z/Y no longer triggers board undo when a ticket drawer, create dialog, or sprint modal is open
  • Input-aware shortcuts: Undo/redo handlers in admin users, members, and roles tabs now skip processing when typing in form fields
  • PQL autofocus: Switching to PQL mode auto-focuses the input and triggers suggestions immediately
  • Admin avatars: User avatars on the admin page now display correctly with proper fallback colors

Bug Fixes

  • Sprint complete dialog no longer re-prompts after being dismissed
  • MCP API key display no longer overflows its container (uses truncation with select-all)
  • ALL CAPS confirmation dialogs (project deletion) no longer silently auto-uppercase input — users must type the key exactly
  • Removed redundant clones/is_cloned_by ticket link types
  • Tab cycle order matches sidebar order instead of being arbitrary

Cumulative Features

Kanban boards, backlog views with 20+ columns, PQL query language, sprint planning with burndown charts, ticket linking, activity audit trail, 2FA authentication, custom roles with granular permissions, team management, real-time SSE sync, 44 MCP tools for Claude integration, and demo mode.

Requirements

Node.js 20.9.0+ and SQLite via Prisma. Clone, `pnpm install`, `pnpm db:push`, `pnpm dev` → localhost:3000.


Full Changelog: v0.7.0...v0.7.1

What's Changed

  • feat(sprints): add time support for sprint dates (PUNT-193) by @jmynes in #251
  • feat(roles): add editable description field to roles (PUNT-165) by @jmynes in #250
  • fix(comments): autofocus delete button in comment modal (PUNT-196) by @jmynes in #252
  • feat(markdown): expand support for bullets, italic, and underline (PUNT-190) by @jmynes in #254
  • feat(mcp): hot-reload API key without restart (PUNT-182) by @jmynes in #255
  • feat(permissions): add view-as-role simulation mode (PUNT-23) by @jmynes in #257
  • fix(sprints): auto-populate dates on sprint created during completion (PUNT-204) by @jmynes in #264
  • feat(tickets): add sprint history timeline to ticket drawer (PUNT-205) by @jmynes in #265
  • fix(markdown): fix __bold, nested formatting, and list spacing (PUNT-190) by @jmynes in #263
  • fix(mcp): improve credentials error messaging and security warnings (PUNT-182) by @jmynes in #262
  • feat(profile): add MCP management UI for Claude CLI provider (PUNT-179) by @jmynes in #256
  • feat(attachments): add ctrl+z/y undo/redo for attachment operations (PUNT-144) by @jmynes in #258
  • feat(auth): add two-factor authentication with TOTP (PUNT-170) by @jmynes in #259
  • feat(backlog): add PQL query language for ticket filtering (PUNT-4) by @jmynes in #260
  • feat(tickets): add comprehensive activity/audit trail (PUNT-79) by @jmynes in #261
  • feat(undo): delete activity entries when undoing ticket changes (PUNT-221) by @jmynes in #266
  • docs(claude): simplify CLAUDE.md to reduce file size (PUNT-202) by @jmynes in #267
  • chore(deps): Bump the production-dependencies group with 8 updates by @dependabot[bot] in #268
  • chore(deps): Bump the dev-dependencies group with 2 updates by @dependabot[bot] in #269
  • fix(search): autofocus and trigger autosuggest when activating PQL mode (PUNT-220) by @jmynes in #273
  • feat(tickets): add deselect-all button and Esc shortcut (PUNT-207) by @jmynes in #279
  • fix(admin): display correct user avatars with fallback colors on admin users page (PUNT-223) by @jmynes in #275
  • refactor(links): remove redundant clones/is_cloned_by link types (PUNT-222) by @jmynes in #277
  • feat(navigation): add Ctrl+Shift+Arrow keyboard shortcut for tab cycling (PUNT-208) by @jmynes in #278
  • fix(navigation): match tab cycle order to sidebar order (PUNT-208) by @jmynes in #280
  • fix(profile): replace Integrations tab with separate MCP and Claude tabs (PUNT-210) by @jmynes in #274
  • feat(admin): require password and 2FA to reset user 2FA (PUNT-214) by @jmynes in #276
  • fix(sprints): prevent sprint complete dialog from re-prompting after dismiss (PUNT-203) by @jmynes in #272
  • fix(profile): fix MCP API key input field width overflow (PUNT-211) by @jmynes in #281
  • fix(undo): interrupt Ctrl+Z/Y undo actions while ticket drawer is open (PUNT-224) by @jmynes in #283
  • feat(markdown): add drag-and-drop reordering for markdown checkboxes (PUNT-217) by @jmynes in #284
  • fix(modals): make ALL CAPS confirmation modals behave consistently (PUNT-199) by @jmynes in #282
  • chore(release): bump version to 0.7.1 by @jmynes in #285

Full Changelog: v0.6.1...v0.7.1