Skip to content

Releases: BeamLabEU/phoenix_kit_projects

0.2.2

13 May 23:26

Choose a tag to compare

Dialyzer clean-up + version sync. See CHANGELOG.md for details.

0.2.0

11 May 22:52

Choose a tag to compare

0.2.0

Added

  • Multilang content — project name/description, task title/description, and
    assignment description are now translatable via core's Languages module.
    Forms auto-render <.multilang_tabs> when 2+ languages are enabled; primary
    values stay in their columns, overrides live in a translations JSONB.
  • Task groups view — task templates can be grouped by dependency tree in the
    task-library UI, with visual → X badges showing outgoing edges.
  • Drag-and-drop reorder — projects, templates, and tasks can be reordered
    via sortable tables with phx-reorder events. Dedup logic guarantees
    last-write-wins on duplicate UUIDs.
  • Closure-pull cascade — adding a task to a project can optionally pull in
    its entire upstream dependency closure with automatic Dependency wiring and
    execution-order position assignment.
  • Slide-in comments drawerProjectShowLive now supports a per-resource
    comments side-panel with live count badges.
  • Running dashboard prioritization — the Overview tab now surfaces late and
    near-done projects first, with tier pills (:late, :near_done, :on_track).
  • Derived status + soft-hide archive — replaced the string status column
    with archived_at timestamp. Project.derived_status/2 returns :running,
    :completed, :overdue, :scheduled, :setup, :archived, or :template.
    Projects.archive_project/1 / unarchive_project/1 are the public API.
  • Reusable UI components — extracted <.derived_status_badge>,
    <.empty_state>, <.page_header>, <.running_card>, <.sortable_table>,
    <.stat_tile>, <.tabs_strip>, and <.tier_pill> from the large LiveViews
    into individual PhoenixKitProjects.Web.Components.* modules.
  • handle_params/3 refactor — all list, show, and form LiveViews moved their
    initial DB queries from mount/3 to handle_params/3 so HTTP render and
    WebSocket connect share a single query path.
  • Translations JSONB validation — schema changesets now validate the shape
    of incoming translations maps to prevent malformed JSONB inserts.

Changed

  • build_group_tree/4 and build_closure_tree/3 switched from cond do with
    a single non-true clause to if/else (credo compliance).
  • wire_closure_dependencies/3 nesting reduced by extracting
    wire_child_dependency/4 and wire_assignment_dependency/2.
  • is_template_attr?/1 renamed to template_attr?/1 per Elixir naming
    conventions.

Fixed

  • Diamond-dependency skip in closure pull — a task reachable via both an
    excluded and a non-excluded parent is now correctly emitted once when the
    non-excluded branch reaches it.
  • O(n²) topo append eliminatedtopological_insertion_order/2 now builds
    the list in reverse and flips once at the end.
  • Duration editor prefill — the inline duration editor in ProjectShowLive
    now falls back to the task template's default values when the assignment has
    no explicit duration.
  • Inline duration editor UX — improved hover contrast, control sizing, and
    input prefill behavior.
  • Precommit hygiene — resolved all credo strict issues and suppressed a
    Dialyzer false-positive on recursive MapSet opacity.

0.1.1

30 Apr 01:00

Choose a tag to compare

PR #2 review follow-up batch — closes the actionable findings from dev_docs/pull_requests/2026/2-quality-sweep/CLAUDE_REVIEW.md. See CHANGELOG.md for the full delta since 0.1.0.

Highlights

Fixed

  • clone_template/2 outer transaction now opens at :serializable so add_dependency/2's cycle-race protection applies on the template-cloning path (Postgres ignores isolation: on nested transactions).
  • Activity.log_failed/2 wired into the three ProjectShowLive error branches that were leaking the db_pending: true invariant: do_update_progress/3, save_duration, and remove_dependency.
  • test_helper.exs no longer hard-fails when psql is missing — matches the AGENTS.md "never hard-fail on a missing DB" contract.

Changed

  • error_summary/2 humanizes Ecto field names in the cross-field flash summary.
  • Project.changeset/2 name_index_for/2 accepts the full set of truthy form values.
  • Cross-module typespec relaxation comments reference BeamLabEU/phoenix_kit_staff#3.

Carried over from PR #2 (the quality sweep)

  • New Activity.log_failed/2 helper (metadata.db_pending = true for failed-but-attempted mutations).
  • recompute_project_completion/1 transaction wrapper.
  • add_dependency/2 :serializable cycle-race protection.
  • Canonical post-Apr Activity.log/2 rescue shape; enabled?/0 catch :exit.
  • phx-disable-with on every destructive phx-click site.
  • error_summary/2 translates Ecto validator messages via Gettext.
  • ~32 @spec declarations across the public Projects context API.
  • Full LiveView smoke-test stack + self-contained setup migration.
  • Test count 56 → 355, line coverage 37.02% → 91.80%, dialyzer 6 → 0, credo --strict 0.

Verification

  • mix format --check-formatted — clean
  • mix compile --warnings-as-errors — clean
  • mix credo --strict — 0 issues (453 mods/funs)
  • mix test — 355 tests, 0 failures (10/10 stable runs in the pre-merge re-validation pass)

0.1.0 - 2026-04-20

20 Apr 19:29

Choose a tag to compare

Initial release of phoenix_kit_projects — a PhoenixKit module for project + task management.

Features

  • Task library — reusable task templates (title, description, estimated duration, optional default assignee, template-level dependencies)
  • Projects — containers with immediate or scheduled start mode, weekday/calendar awareness, automatic completion detection
  • Assignments — task instances inside a project, editable independently of the template; mass-assignment guard keeps completed_by_uuid / completed_at server-only
  • Dependencies — per-project "A must finish before B" with self-reference rejection and multi-hop cycle detection
  • Templates — project templates cloned atomically into real projects
  • Polymorphic assignees — team or department or person, enforced by both schema validation and a DB CHECK constraint
  • Schedule math — planned vs. projected end with velocity tracking; per-task counts_weekends override
  • Real-time updates via PhoenixKit.PubSub.Manager
  • Activity logging at the LiveView layer

Install

{:phoenix_kit_projects, "~> 0.1"}

phoenix_kit_staff ~> 0.1 is a hard dependency for the polymorphic assignee FKs. Database tables are created by V101 in phoenix_kit core (depends on V100 staff tables).