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)