NAME
App::karr::Board - Shared board-level computations for the rendering commands
VERSION
version 0.601
SYNOPSIS
my $board = App::karr::Board->new( store => $store );
my $final = $board->final_status;
my $hidden = $board->hidden_done_count( \@tasks );
my @keys = $board->group_keys( $task, 'assignee' );
my @order = $board->group_order( \%groups, 'status' );
DESCRIPTION
The computations the two rendering commands share. App::karr::Cmd::Board and App::karr::Cmd::List both answer "how many finished cards did the default view hide" and both split a task list into --group-by groups; the answers live here so neither command can drift from the other.
final_status
my $final = $board->final_status;
The board's final status -- the column the default views hide. archived is never the answer: it is not a column, and the callers that ask this question have already dropped it from their status list.
hidden_done_count
my $hidden = $board->hidden_done_count( \@tasks );
How many of @$tasks sit in the board's final status -- the count the default views withhold and their footers name. The caller decides which tasks are in scope: board drops the archive before asking, list asks over everything it loaded, and the same grep answers both.
group_keys
my @keys = $board->group_keys( $task, 'tag' );
The group keys a task belongs to under --group-by FIELD, matching kanban-md's extractGroupKeys (internal/board/group.go): assignee falls back to (unassigned), a task without tags to (untagged) -- and one with several tags appears in each of them -- class to the board's default, and priority and status to their own values.
group_order
my @order = $board->group_order( \%groups, 'status' );
The group headings in display order, matching kanban-md's sortGroupKeys (internal/board/group.go): status, priority and class follow the board config's own order, assignee and tag are alphabetical. Note that priority groups read the config list forward here -- low to critical on a default board -- where --sort priority reads it backwards for pick agreement; grouping and sorting are separate axes.
store
The App::karr::BoardStore this board's computations run against -- final_status and hidden_done_count read the board's status list from it, and group_order reads its config-derived status, priority, and class ordering. Required.
SUPPORT
Issues
Please report bugs and feature requests on GitHub at https://github.com/Getty/karr/issues.
IRC
Join #langertha on irc.perl.org or message Getty directly.
CONTRIBUTING
Contributions are welcome! Please fork the repository and submit a pull request.
AUTHOR
Torsten Raudssus <getty@cpan.org>
COPYRIGHT AND LICENSE
This software is Copyright (c) 2026 by Torsten Raudssus <torsten@raudssus.de> https://raudssus.de/.
This is free software, licensed under:
The Artistic License 2.0 (GPL Compatible)