kanban·time
kanban·time
PROD
Please log in to access this page.

Sign in

Sign in with Authentik
or use password

Changelog

v1.11.1 2026-05-12 latest

Fixed

  • Card modal UUID copy button: clicking actually puts the UUID in the clipboard now. The old code defined `copyUuid()` on a nested x-data and tried to reach the parent's `currentCardId` via `this.$root` — but `$root` is an Alpine expression-time magic, not on the `this` proxy of method bodies, so the call returned undefined and the function early-exited silently. Fix: hoisted the copy state + method into the dialog's own factory (cardModalCtl) so everything shares one scope; same applies to the in-card display-ID copy button.
  • Both copy buttons now fall back to document.execCommand('copy') with a temporary textarea appended to the modal element when the async Clipboard API is unavailable or rejected (some browsers gate it inside <dialog> top-layer). Last-resort fallback is a prompt with the value pre-filled so it can be copied manually.

v1.11.0 2026-05-12

Added

  • Card dependencies now accept friendly references — Azure DevOps style. The 'Add dependency' input takes 'ANP-42' (project code + card number), bare '42' (matches a card in the current card's project), or a full UUID. Helpful error messages on unknown codes or numbers.
  • Click-to-copy on the card display ID — click the 'ANP-42' badge at the top of any card to copy that identifier to your clipboard, with a checkmark confirmation. The copied string is exactly what the dependencies input accepts.
  • Card modal: UUID + copy button now in the modal header on the right side of 'Card detail'. Click to copy the card's full UUID for backwards-compatible workflows or external links.

Fixed

  • Dependencies endpoint now rejects self-dependencies (a card cannot block itself).

v1.10.2 2026-05-11

Fixed

  • AI modal: Export button now actually downloads. The previous build used `| tojson` inside an HTML attribute, which is unsafe — the inner double quotes broke the @click handler at parse time, so clicking did nothing silently. Entity name now flows through a data-attribute and the controller's `entityName` property.
  • AI modal: long answers no longer overflow the modal width. Message row wrappers gained `w-full min-w-0`, and the scrollable area gained `overflow-x-hidden`. The bubble's `max-w-[85%]` is now respected because the flex item can shrink below its intrinsic content width.

v1.10.1 2026-05-11

Added

  • AI modal: '↓ Export' button in the header that downloads the current conversation as a Markdown file. The file leads with entity metadata (type, id, export timestamp) then alternates 'You' and 'AI' sections — useful for filing a consultant check-in or sharing with a colleague. Disabled until at least one AI reply has landed.

Changed

  • AI modal width raised from max-w-2xl (672px) to max-w-5xl (1024px) so longer AI reports fit without truncation.
  • AI markdown bubble now wraps long tokens (URLs, identifiers) instead of overflowing the bubble width — overflow-wrap: anywhere + word-break: break-word.

v1.10.0 2026-05-11

Added

  • Per-project approval — each row in a weekly submission now carries its own status (Submitted / Approved / Rejected) so different PMs can sign off only on the projects they own. Approvals tracked in new project_approvals table.
  • PM grid view: per-row Approve / Reject / Revoke buttons + inline reject reason modal. Status badges update in place without reloading.
  • Consultant My Timesheets: each project row shows its own approval status badge under the project name.
  • Project Allocations form: new optional 'Daily Hours' field. When set, becomes the per-day default forecast on My Timesheets and the PM Grid view for that consultant on that project (Mon-Fri only). Explicit week-level forecast cells still override the default.
  • Project Forecast tab cells: pre-filled with the allocation's daily_hours when no explicit forecast row exists.

Changed

  • Test Timesheets has graduated to My Timesheets — same route at /me/timesheets, same template renamed (the old history table is removed; week navigation gives you back-in-time access).
  • Timesheet grids: project column is now sticky-left so it stays visible when the table scrolls horizontally; page width raised to 1800px so the full week + project column fits without scrolling on most monitors.
  • Weekly Allocations section removed from the client detail page — allocations live at the project level with the new daily_hours field driving the forecast.

v1.9.1 2026-05-11

Changed

  • Time inputs are now in hours (decimal) everywhere — 1.25 instead of 75. Storage and the /api/v1/forecasts/ wire format stay in minutes; the UI converts. Step is 0.25h on every editable cell.
  • Consultant Test Timesheets: cell input, suggested-cards summary ('Xh logged'), row totals, day totals, grand total, and the forecast 'target Xh' marker all display in hours.
  • PM Grid view: forecast target input accepts hours; submitted, observed, day totals, and grand total all render in hours.
  • Project Forecast tab: per-day inputs accept hours; row totals tick live as hours.

v1.9.0 2026-05-11

Added

  • Forecasting — PMs can now set a per-day forecast (in minutes) for each consultant on each project for a given ISO week
  • Project detail: new 'Forecast' tab — grid with one row per allocated consultant and seven day columns. Numbers save on blur via the new forecast API.
  • PM Grid review: each cell now has an editable 'target' input above the consultant's submitted minutes. Edits save inline.
  • Consultant Test Timesheets: each cell now shows the PM forecast as a 'target Xm' read-only marker above the editable input, plus a Forecast row in the table footer summing per-day targets.
  • API: POST /api/v1/forecasts/ upserts a row by (project, user, ISO year, ISO week); only admins/PMs with client access can write. GET /api/v1/forecasts/ lists rows by project_id or user_id within a week.

v1.8.1 2026-05-11

Added

  • Test Timesheets: bulleted preview per cell with clickable links to each card touched that day; each bullet shows the card number, title, and the time-entry note
  • Test Timesheets: notes textarea expands to 10 rows on focus and shrinks back to 2 on blur — easier to read and edit long entries
  • Test Timesheets: 'Add project row' button at the top — pick any (client, project) you have access to and a row is added so you can log time on it even without prior tracked entries or allocations
  • Test Timesheets: rows for projects you previously added via 'Add row' now persist across page reloads
  • PM approvals: 'Grid view' link per approval — opens a read-only project × weekday grid showing the consultant's submitted minutes and notes, plus the system-observed time entries with clickable card links per day
  • PM approvals: Approve / Reject / Revoke actions live directly on the new Grid view page, with inline note modals for reject and revoke

v1.8.0 2026-05-11

Added

  • Inline timer on Kanban card tiles — start, pause, and stop a timer directly from the board without opening the card detail; running card shows a live HH:MM:SS ticker in indigo
  • Logged-time badge on each card tile — shows total tracked time (e.g. 1.5h or 45m) when greater than zero; updates after each stop
  • Test Timesheets — new weekly per-client grid at /me/test-timesheets with project rows by weekday columns; system pre-fills suggested minutes and aggregated card notes from tracked time, shown in grey so consultants can review and edit before submitting
  • Row totals, day totals, and grand total update live as cells are edited
  • Consultant submit action — flips a weekly approval to status 'submitted', visible to PMs in /me/approvals with a blue badge alongside Approve/Reject actions
  • Save as Draft — persist edits without submitting for review
  • Settings.timesheet_enabled — feature flag (default on) that hides the Test Timesheets nav link and 302s the routes back to /me/timesheets when disabled

Changed

  • Board header timer pill now reads from the same live tick as the card-tile ticker (one source of truth across the page)
  • Stop timer on the board prompts for the required final note in a single dialog; pause prompt is optional and skippable

v1.7.0 2026-05-04

Added

  • Labels — coloured tags scoped per client, applied to any card across all boards
  • Label management on client Overview tab — create, rename, recolour, delete; 10-colour palette
  • Label chips on board card tiles — colour-coded, shown below the card title
  • Label filter bar on board — click one or more labels to filter visible cards; multi-select ANDs the filters
  • Label picker on card detail — add or remove labels inline; changes saved immediately

v1.6.24 2026-05-04

Added

  • Dynamic Credentials section inside My Secrets — generate on-demand credentials from Vault's AWS, Kubernetes, SSH CA, SSH OTP, and TOTP engines; credentials expire automatically and are never stored in the app
  • AWS engine — generate temporary IAM access keys, STS assume-role, or federation tokens scoped to a configured Vault role
  • Kubernetes engine — generate short-lived service account JWTs for a configured cluster role
  • SSH CA engine — sign your SSH public key with the Vault CA; signed certificate expires at the role TTL
  • SSH OTP engine — generate a one-time password for SSH access to a specific host IP
  • TOTP engine — store 2FA seeds securely in Vault; generate the current 6-digit code on demand without exposing the seed; supports importing an existing otpauth:// URL or generating a new key
  • Per-engine inline instructions and contextual generate modals with copy buttons for each credential field
  • Credential rotation — Rotate button on stored KV secrets generates a new random password, writes a new Vault version, and shows the new value once; logged as 'rotated' in the secret's audit timeline
  • Vault Kubernetes auth for dynamic secrets — pod authenticates via its mounted service account JWT (kanban-time-dynamic role, 10-minute TTL); no static tokens

Changed

  • Dynamic Credentials merged into the My Secrets tab (was a separate tab)
  • Client detail tab bar is now horizontally scrollable on mobile — all tabs stay on one row with no wrapping or clipping

v1.6.22 2026-05-04

Added

  • Vault secret versioning — every edit creates a new KV v2 version; version number shown in audit timeline
  • Secret audit timeline — Timeline button per secret shows full history: who created, revealed, updated, deleted, restored, or purged it, with timestamp, actor name, IP address, and Vault version number
  • Soft-delete with configurable retention — deleted secrets are hidden but preserved in Vault for the admin-configured retention period (default 30 days) before nightly purge
  • Restore — deleted secrets can be restored within the retention window
  • Admin: global vault_secret_retention_days setting in Settings API
  • Admin: deleted secrets list at /api/v1/clients/<id>/secrets/admin/deleted
  • Nightly purge job at 02:30 UTC — permanently destroys Vault KV data for secrets past their retention window using Kubernetes service account auth (no static token)
  • Vault purge uses K8s SA auth (kanban-time-purge role) — no static token to rotate

v1.6.0 2026-05-01

Added

  • AI Overview button on client, project, and board detail pages — opens a streaming conversation modal powered by Anthropic Claude; summarises current state and answers follow-up questions
  • AI Diagnostics page for admins at /admin/ai — free-form conversation about system state, user counts, time entry volumes, and application behaviour
  • PM Consultant check-in AI button on the Capacity Planner — ask questions about a consultant's workload and allocation
  • Settings → AI section — admin can enable AI and enter the Anthropic API key without a redeploy; key stored in the database (never in env vars)
  • app/services/ai_context.py — context builders for client, project, board, admin, and consultant entities; uses only metadata (no encrypted card bodies)
  • app/api/ai.py — POST /api/v1/ai/chat streaming SSE endpoint; requires authenticated session; respects ai_enabled flag
  • Migration 0046: ai_enabled and anthropic_api_key columns on settings table

v1.5.0 2026-05-01

Added

  • Capacity Planner at /program/capacity — 8-week forward grid per consultant showing committed allocation hours plus estimated card demand (estimate_days × 8h bucketed by due date), colour-coded green/amber/red against weekly capacity; hover tooltip shows breakdown
  • Capacity Planner linked from Program Dashboard header
  • Milestone forecast — projected completion date calculated from estimate velocity (days completed in done swimlanes over last 4 weeks ÷ 4) shown on milestone detail header and milestones list alongside the target end date
  • Milestones list flags projected dates that overshoot the end date in red

v1.4.0 2026-05-01

Added

  • Card estimates — estimate_days (Float, 0.5-day steps) field on every card; editable in the card edit form and displayed as a badge on card detail and board task tables
  • Card dependency graph — Dependencies tab on card detail; create blocks/blocked-by links between cards; delete links; API: GET/POST /cards/<id>/dependencies, DELETE /cards/dependencies/<dep_id>
  • Estimate vs Actual section on project Reports tab — per-card estimate, logged hours, and variance; totals row; note when no cards have estimates yet

v1.3.0 2026-05-01

Added

  • Decision model — create, view, and archive decisions per client or project with encrypted content; Decisions tab on client and project detail pages
  • Lessons Learned — freetext field on projects; visible on project detail Overview tab
  • Meeting Note card type — new card_type option alongside Epic, Task, Subtask, Risk, Assumption, Issue, Dependency
  • Swimlane management UI — rename, reorder, and toggle is_done on swimlanes from Board Settings
  • Standup job updated to skip meeting_note cards in daily summary output

v1.2.0 2026-05-01

Added

  • Program Dashboard at /program — cross-client portfolio view for PMs and admins: engagement health grid, upcoming milestones (next 14 days), open RAID inbox, and pending approval count
  • User-scoped weekly report accessible from My Timesheets

v1.1.1 2026-05-01

Added

  • iCal feed at /calendars/<token>.ics — personal read-only calendar with standup occurrences and due-date card events; token generated from Preferences page

v1.1.0 2026-05-01

Added

  • Email notification transport — per-user opt-in via Settings; SMTP configured globally in Settings → Notifications
  • Slack notification transport — webhook URL configured in Settings → Notifications
  • Stakeholder weekly digest — email sent to client contacts with notify_weekly=true; includes hours logged, open RAID items, and upcoming milestones; configurable send day/hour per client and per contact; dedup prevents duplicate sends within an ISO week
  • Digest CLI command: flask send-digest [--force]
  • Digest Preview tab on client detail
  • Unsubscribe endpoint at /unsubscribe/<token> — no auth required
  • Board status and Archived tabs on board detail

Fixed

  • Alpine.js single-quote collision in boardStatus x-data attribute
  • Milestone query in digest preview returning wrong results

v1.0.0 2026-04-30

Added

  • Production baseline release — all v0.x features stable and deployed to cluster

v0.5.8 2026-04-30

Added

  • Board-level PM and Consultant assignment — set in Board Settings, shown in the board header panel and on each board card in the client overview

v0.5.7 2026-04-30

Added

  • Client detail header now shows an Assigned panel (PM and Consultants) in the top-right corner

v0.5.6 2026-04-30

Added

  • Dashboard Due Dates section — cards assigned to you with due dates, split into Overdue (red), Due Soon (amber), and Upcoming (gray) groups
  • Due soon window preference in Preferences — configurable 1–90 days, default 3; controls the amber Due Soon threshold

v0.5.5 2026-04-30

Fixed

  • Board grant access failing with 500 — services.board_grants was not importable (broken import pattern)
  • Revoke grant button calling wrong API URL (used user_id instead of grant_id)

v0.5.4 2026-04-30

Added

  • Web and worker pods automatically restart after a successful restore — no manual kubectl rollout restart needed
  • RBAC Role extended to allow the app ServiceAccount to patch Deployments in its own namespace

v0.5.3 2026-04-30

Fixed

  • Restore failing with encryption_key_id mismatch on backups that pre-date key ID tracking — check now skipped when manifest has no key ID set

v0.5.2 2026-04-30

Added

  • Settings → Demo Data section: seed the Globex dataset (8 users, 15 projects, 12-month history) from the UI without a CLI hop
  • Seed runs as a background thread with live spinner and status polling — won't timeout the web request
  • Clickable version badge opens full changelog modal

v0.5.1 2026-04-30

Added

  • Clickable version badge under logo opens a changelog modal with colour-coded Added/Fixed/Changed sections

v0.5.0 2026-04-30

Added

  • Backup file download from Admin → Backups
  • Backup import — upload a previously downloaded .enc file and restore from it
  • Upload progress bar in the import modal
  • Flux Image Automation — pushes to main now trigger automatic cluster rollouts without manual kubectl restarts

Fixed

  • Backup storage path resolved to ./storage instead of /app/storage, causing 500 errors on download
  • Upload size limit raised to 512 MB to accommodate backup file imports
  • ImageUpdateAutomation template updated to .Changed.Changes API (Flux v2.8+ requirement)

v0.4.0 2026-04-30

Added

  • Role assumption — admin can assume any non-admin user; PM can assume consultants (read-only)
  • Amber banner on all pages when an assumption session is active
  • Exit assumed role button in banner
  • Audit log filter for assumed-role activity only
  • All activity during assumption is logged under the real actor with _assumed_as metadata
  • Version number displayed under the kanban-time logo

Changed

  • Nav bar reorganised into Management and Admin dropdown groups
  • PM assumption sessions are read-only — all mutation API calls blocked

v0.3.0 2026-04-29

Added

  • Admin can edit user permission sets (admin / PM roles)
  • Founding admin (first created user) is permanently protected — permissions cannot be changed
  • System role badges (Admin / PM / Consultant) shown on profile page
  • Per-project consultant titles assignable by PM on the client detail page (inline click-to-edit)

v0.2.0 2026-04-28

Added

  • Backup and restore system with encrypted .tar.gz.enc files
  • Separate BACKUP_ENCRYPTION_KEY — independent from MASTER_KEY so backups survive cluster loss
  • Admin → Backups page with live status polling and log viewer modal
  • Ad-hoc backup trigger from the UI
  • Restore confirmation modal with data-loss warning
  • Scheduled backup CronJob support (chart-level, cadence configurable in Settings)
  • Optional S3 mirror for backup files
  • DEMO_MODE support — seeds Globex dataset on first-user setup and creates a restorable demo baseline

Fixed

  • Backup log modal no longer closes on status poll refresh
  • Backup directory created automatically before encrypt step in backup.sh

v0.1.0 2026-04-20

Added

  • Kanban board management with columns and cards
  • Time tracking — start/pause/stop timers per card
  • Timecard views and weekly reports
  • Client and project management
  • Consultant utilisation reports
  • First-user setup page — no kubectl exec required to bootstrap admin
  • Standup report generation
  • Role-based access: Admin, Program Manager, Consultant