Releases: BeamLabEU/phoenix_kit_projects
Releases · BeamLabEU/phoenix_kit_projects
0.2.2
0.2.0
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 atranslations JSONB. - Task groups view — task templates can be grouped by dependency tree in the
task-library UI, with visual→ Xbadges showing outgoing edges. - Drag-and-drop reorder — projects, templates, and tasks can be reordered
via sortable tables withphx-reorderevents. 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 automaticDependencywiring and
execution-order position assignment. - Slide-in comments drawer —
ProjectShowLivenow 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
statuscolumn
witharchived_attimestamp.Project.derived_status/2returns:running,
:completed,:overdue,:scheduled,:setup,:archived, or:template.
Projects.archive_project/1/unarchive_project/1are 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 individualPhoenixKitProjects.Web.Components.*modules. handle_params/3refactor — all list, show, and form LiveViews moved their
initial DB queries frommount/3tohandle_params/3so HTTP render and
WebSocket connect share a single query path.- Translations JSONB validation — schema changesets now validate the shape
of incomingtranslationsmaps to prevent malformed JSONB inserts.
Changed
build_group_tree/4andbuild_closure_tree/3switched fromcond dowith
a single non-trueclause toif/else(credo compliance).wire_closure_dependencies/3nesting reduced by extracting
wire_child_dependency/4andwire_assignment_dependency/2.is_template_attr?/1renamed totemplate_attr?/1per 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 eliminated —
topological_insertion_order/2now 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 recursiveMapSetopacity.
0.1.1
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/2outer transaction now opens at:serializablesoadd_dependency/2's cycle-race protection applies on the template-cloning path (Postgres ignoresisolation:on nested transactions).Activity.log_failed/2wired into the threeProjectShowLiveerror branches that were leaking thedb_pending: trueinvariant:do_update_progress/3,save_duration, andremove_dependency.test_helper.exsno longer hard-fails whenpsqlis missing — matches the AGENTS.md "never hard-fail on a missing DB" contract.
Changed
error_summary/2humanizes Ecto field names in the cross-field flash summary.Project.changeset/2name_index_for/2accepts 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/2helper (metadata.db_pending = truefor failed-but-attempted mutations). recompute_project_completion/1transaction wrapper.add_dependency/2:serializablecycle-race protection.- Canonical post-Apr
Activity.log/2rescue shape;enabled?/0catch :exit. phx-disable-withon every destructivephx-clicksite.error_summary/2translates Ecto validator messages via Gettext.- ~32
@specdeclarations across the publicProjectscontext 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— cleanmix compile --warnings-as-errors— cleanmix 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
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
immediateorscheduledstart 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_atserver-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
CHECKconstraint - Schedule math — planned vs. projected end with velocity tracking; per-task
counts_weekendsoverride - 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).