feat(status): add /awos:status kanban board plugin command - #164
feat(status): add /awos:status kanban board plugin command#164dustyo-O wants to merge 5 commits into
Conversation
|
Warning Review limit reached
Next review available in: 37 minutes Enable usage-based reviews in Billing to review now. Otherwise, wait until the next included review is available. How can I continue?After more reviews become available, a review can be triggered using the To avoid repeated limits, reduce automatic review volume by pausing incremental auto-reviews earlier, using label-based review opt-in, excluding WIP or generated PR titles, or requesting reviews manually when the PR is ready. If your team needs uninterrupted high-volume reviews, an organization admin can enable usage-based reviews. How do review limits work?CodeRabbit enforces per-developer PR review limits for each organization. Most developers receive the normal plan review availability. For paid Pro and Pro+ PR reviews, CodeRabbit uses adaptive limits for sustained high-volume activity. When a developer's recent PR review activity reaches the 95th percentile or higher among CodeRabbit users, additional reviews become available more gradually as earlier reviews age out of the rolling window. Please refer docs for additional details. Review details⚙️ Run configurationConfiguration used: defaults Review profile: CHILL Plan: Pro Plus Run ID: 📒 Files selected for processing (2)
📝 WalkthroughWalkthroughAdds ChangesStatus board feature
Estimated code review effort: 3 (Moderate) | ~20 minutes Sequence Diagram(s)sequenceDiagram
participant StatusCommand
participant ProjectContext
participant StatusBoard
StatusCommand->>ProjectContext: discover specs and roadmap documents
StatusCommand->>StatusBoard: provide project directory and optional filter
StatusBoard->>ProjectContext: read functional specs and tasks
StatusBoard->>StatusBoard: group statuses and render cards
StatusBoard-->>StatusCommand: print Kanban board
Possibly related PRs
Suggested reviewers: 🚥 Pre-merge checks | ✅ 4 | ❌ 1❌ Failed checks (1 warning)
✅ Passed checks (4 passed)
✨ Finishing Touches 💡 1📝 Generate docstrings 💡
🧪 Generate unit tests (beta)
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
There was a problem hiding this comment.
Actionable comments posted: 6
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Inline comments:
In `@plugins/awos/.claude-plugin/plugin.json`:
- Line 9: Reformat the keywords array in the plugin manifest using Prettier’s
80-column layout, expanding it across multiple lines with two-space indentation
while preserving the existing keyword values and order.
In `@plugins/awos/commands/status.md`:
- Line 44: Update the “Step 1: Discover features” heading under “# PROCESS” from
level-three to level-two Markdown syntax, preserving the existing heading text
and process-step structure.
In `@plugins/awos/README.md`:
- Around line 103-110: Annotate every affected fenced example with an explicit
language identifier: mark the card diagrams in plugins/awos/README.md lines
103-110 and plugins/awos/commands/status.md lines 83-90 as text, mark the
command examples in plugins/awos/README.md lines 114-117 as bash or text, and
mark the directory tree in plugins/awos/README.md lines 123-146 as text.
In `@plugins/awos/scripts/status-board.py`:
- Around line 91-98: Update the task-counting logic in the status-board script
to count only atomic checklist entries that are either prefixed with “[Agent:]”
or nested beneath a slice; exclude unrelated top-level and composite checklist
items while preserving the existing Slice-header exclusion.
- Around line 75-76: Update the status-board flow around the directory parsing
and sizer/filter logic to retain each card’s parsed short name, compute size
thresholds from all project specs before applying the focus filter, and filter
displayed cards by the documented short name rather than the title. Keep the
existing project-wide tiers and display behavior for unfiltered results.
- Around line 99-104: Update the status-age calculation around the git log
lookup so it dates the commit that changed the file’s Status field rather than
the latest commit affecting the file. When that history is unavailable, fall
back to the documented directory commit and file mtime sources instead of
defaulting to zero; preserve the existing days calculation once a valid
timestamp is selected.
🪄 Autofix (Beta)
Fix all unresolved CodeRabbit comments on this PR:
- Push a commit to this branch (recommended)
- Create a new PR with the fixes
ℹ️ Review info
⚙️ Run configuration
Configuration used: defaults
Review profile: CHILL
Plan: Pro Plus
Run ID: 40ab736b-8600-4326-865c-6bfad29bf19c
📒 Files selected for processing (8)
.claude-plugin/marketplace.jsonREADME.mdplugins/awos/.claude-plugin/plugin.jsonplugins/awos/README.mdplugins/awos/commands/flow.mdplugins/awos/commands/status.mdplugins/awos/scripts/status-board.pytests/lint-prompts.test.js
| }, | ||
| "license": "MIT", | ||
| "keywords": ["audit", "code-quality", "dimensions", "delivery-flow", "bug-fix"] | ||
| "keywords": ["audit", "code-quality", "dimensions", "delivery-flow", "bug-fix", "status", "kanban"] |
There was a problem hiding this comment.
📐 Maintainability & Code Quality | 🟡 Minor | ⚡ Quick win
Format the expanded keyword array with Prettier.
Line 9 exceeds the configured width and should be expanded to Prettier’s multi-line array layout. As per coding guidelines, format repository files with Prettier using 80-column width and two-space indentation.
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
In `@plugins/awos/.claude-plugin/plugin.json` at line 9, Reformat the keywords
array in the plugin manifest using Prettier’s 80-column layout, expanding it
across multiple lines with two-space indentation while preserving the existing
keyword values and order.
Source: Coding guidelines
| ``` | ||
| ┌───────────────────────┐ | ||
| │ OAPBCRNA-122 │ ticket | ||
| │ 005 · Task Cards Fee… │ spec number · title | ||
| │ Claude (with Dusty) │ author | ||
| │ 🟥 HUGE 5d 🟤 │ size · days in current status | ||
| └───────────────────────┘ | ||
| ``` |
There was a problem hiding this comment.
📐 Maintainability & Code Quality | 🟡 Minor | ⚡ Quick win
Add language identifiers to fenced examples.
plugins/awos/README.md#L103-L110: mark the card diagram astext.plugins/awos/README.md#L114-L117: mark command examples asbashortext.plugins/awos/README.md#L123-L146: mark the directory tree astext.plugins/awos/commands/status.md#L83-L90: mark the card diagram astext.
🧰 Tools
🪛 markdownlint-cli2 (0.23.0)
[warning] 103-103: Fenced code blocks should have a language specified
(MD040, fenced-code-language)
📍 Affects 2 files
plugins/awos/README.md#L103-L110(this comment)plugins/awos/README.md#L114-L117plugins/awos/README.md#L123-L146plugins/awos/commands/status.md#L83-L90
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
In `@plugins/awos/README.md` around lines 103 - 110, Annotate every affected
fenced example with an explicit language identifier: mark the card diagrams in
plugins/awos/README.md lines 103-110 and plugins/awos/commands/status.md lines
83-90 as text, mark the command examples in plugins/awos/README.md lines 114-117
as bash or text, and mark the directory tree in plugins/awos/README.md lines
123-146 as text.
Source: Linters/SAST tools
CodeRabbit review of #164: - status-board.py: compute size tiers over ALL project specs before the focus filter (a one-spec view previously always rendered HUGE), and filter by the directory short name / index rather than the free-text title. - status-board.py: count only atomic tasks — [Agent:]-tagged or under a slice header — via slice-state tracking, excluding stray top-level checkboxes. - status-board.py: date the current status from the commit that last changed the Status: line (git log -L), falling back to the spec dir's last commit, then file mtime, then 0 — matching the documented behaviour. - status.md: PROCESS steps use ## (was ###) to match flow.md and satisfy MD001; size prose says Medium to match the rendered casing. Skipped (with reason): the keywords-array width note (Prettier — our format gate — accepts the file as-is) and the fenced-code-language note (the plugin README and core command docs use bare fences by convention; a repo-wide MD040 sweep is out of scope for this PR). Co-Authored-By: Claude Opus 4.8 <[email protected]>
|
Addressed the review in Fixed (Major correctness —
Fixed (style):
Skipped, with reason:
|
There was a problem hiding this comment.
Actionable comments posted: 2
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Inline comments:
In `@plugins/awos/scripts/status-board.py`:
- Around line 75-84: The slice-task counting loop must stop counting when
leaving the current Slice section. Update the logic around in_slice and the
heading/list parsing to track the active structural depth, clearing slice scope
at the next sibling or ancestor boundary such as a later peer heading, while
preserving counting for checkboxes within the active Slice section.
- Around line 90-98: Update the exception handling in _git_epoch() to catch
subprocess.TimeoutExpired alongside OSError, returning None so the existing
directory/mtime fallback logic runs when the git history lookup exceeds its
timeout.
🪄 Autofix (Beta)
Fix all unresolved CodeRabbit comments on this PR:
- Push a commit to this branch (recommended)
- Create a new PR with the fixes
ℹ️ Review info
⚙️ Run configuration
Configuration used: defaults
Review profile: CHILL
Plan: Pro Plus
Run ID: 8d784b20-b728-4f48-9d42-87484b9b1aae
📒 Files selected for processing (2)
plugins/awos/commands/status.mdplugins/awos/scripts/status-board.py
🚧 Files skipped from review as they are similar to previous changes (1)
- plugins/awos/commands/status.md
|
@dustyo-O - could you please attach screenshots of results on some not-NDA project (or just blurred)? Because for now everyone interested in feature need to clone this branch, understand how to run it on it's repo, try different shapes, etc. It is quite unfair to reviewer-s 😉 Just look at README-s of https://github.com/BloopAI/vibe-kanban and https://github.com/B1tMaster/Auto-Claude - this is a good level of "promotion". And please fix conflicts. |
A read-only visibility surface over the document-centric workflow: scans context/spec/*/ and the roadmap, and renders a Kanban board with columns by functional-spec lifecycle state (Draft → In Review → Approved → Completed). Each card shows task progress (atomic [Agent:]-tagged tasks, excluding slice headers to match /awos:implement's counting) and the roadmap item it delivers, followed by a per-phase roll-up and a next-step suggestion. Ships as a plugin command (plugins/awos/commands/), documented in the plugin README, with no core wrapper — mirroring the /awos:flow precedent. Bumps the plugin version 2.4.2 → 2.5.0 across plugin.json, marketplace.json, the flow.md generator constant, and the EXPECTED_PLUGIN_VERSION lint pin, and adds a status.md contract test (read-only, state sources, lifecycle columns, task counting). Co-Authored-By: Claude Opus 4.8 <[email protected]>
Evolve the /awos:status board into a triage-ready kanban grid and ship a deterministic renderer alongside it: - Card model: ticket · number+title · author · size+days, box-drawing borders. - Emoji is the first-class colour mechanism (ANSI does not render in the Markdown chat surface): 🟥/🟨/🟩 size square by the size word, ⚪/🟡/🔴/🟤 days circle by the day count. Size tiers HUGE / Medium / small, relative to the project's task-count terciles; days-in-status derived from git. - Layout: kanban grid sized to ~80 cols — three columns per row (Draft · In Review · Approved, then Completed · Other) instead of one long stack. An Other column captures non-canonical statuses so no spec is dropped. - Ship plugins/awos/scripts/status-board.py — a dependency-free (stdlib + git), read-only reference renderer; status.md points at it as the runnable spec. - Lint pins the card contract, emoji/ANSI policy, grid, Other column, and the reference-script link; README documents the board. Co-Authored-By: Claude Opus 4.8 <[email protected]>
CodeRabbit review of #164: - status-board.py: compute size tiers over ALL project specs before the focus filter (a one-spec view previously always rendered HUGE), and filter by the directory short name / index rather than the free-text title. - status-board.py: count only atomic tasks — [Agent:]-tagged or under a slice header — via slice-state tracking, excluding stray top-level checkboxes. - status-board.py: date the current status from the commit that last changed the Status: line (git log -L), falling back to the spec dir's last commit, then file mtime, then 0 — matching the documented behaviour. - status.md: PROCESS steps use ## (was ###) to match flow.md and satisfy MD001; size prose says Medium to match the rendered casing. Skipped (with reason): the keywords-array width note (Prettier — our format gate — accepts the file as-is) and the fenced-code-language note (the plugin README and core command docs use bare fences by convention; a repo-wide MD040 sweep is out of scope for this PR). Co-Authored-By: Claude Opus 4.8 <[email protected]>
29fef41 to
d5f7bd5
Compare
Layout: lay the lifecycle columns side by side in one row (Draft · In Review · Approved · Completed, then Other) instead of the three-per-row grid, so the whole delivery flow reads left to right on a wide terminal. Card: move the spec number to the top line — right of the ticket, or alone on the left when the spec has none — so the title gets the card's full inner width. Adds a justify() helper shared by the top and size/days lines. CodeRabbit fixes on status-board.py: - count_atomic_tasks: terminate a slice's scope at its structural boundary (a peer/ancestor heading, or a checklist item dedented to the slice item's indent) so tasks under a later section such as `## Notes` are no longer miscounted as slice tasks. - _git_epoch: catch subprocess.TimeoutExpired alongside OSError, so a slow `git log -L` falls back to the dir commit / mtime as documented instead of returning 0 days. Docs: add the rendered board screenshot to the plugin README and update the card diagrams; lint now pins the single-row layout contract. Co-Authored-By: Claude Opus 4.8 <[email protected]>
There was a problem hiding this comment.
Actionable comments posted: 4
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Inline comments:
In `@plugins/awos/commands/status.md`:
- Around line 83-97: Label the fenced rendered-board example in the status
documentation as a text block by changing its opening fence to specify text,
while leaving the example contents unchanged.
In `@plugins/awos/scripts/status-board.py`:
- Around line 271-274: Update the status-board rendering flow around band() to
read and parse context/product/roadmap.md, then append the required Step 5
per-phase completion roll-up after the board output. When the roadmap file is
absent, report that condition instead of silently omitting the summary; preserve
the existing board columns and rendering behavior.
- Around line 107-117: Update the list parsing around the checkbox regex so
generic list items are recognized and can close an active slice before checkbox
processing. When a non-checkbox peer item appears at the slice indent, clear
slice_indent; preserve existing counting for checkbox items and nested items
within the slice.
- Around line 259-265: Update the focus filtering in the argument-handling flow
to match a spec’s index or short name exactly, rather than using substring
containment. Use the existing `s['num']` and `s['short']` identifiers in the
`specs` filter, while preserving the no-match message and return behavior.
🪄 Autofix (Beta)
Fix all unresolved CodeRabbit comments on this PR:
- Push a commit to this branch (recommended)
- Create a new PR with the fixes
ℹ️ Review info
⚙️ Run configuration
Configuration used: defaults
Review profile: CHILL
Plan: Pro Plus
Run ID: ad7bfbc5-00d0-4327-9ecd-4a7fb19fa2e9
⛔ Files ignored due to path filters (1)
plugins/awos/assets/kanban.pngis excluded by!**/*.png
📒 Files selected for processing (8)
.claude-plugin/marketplace.jsonREADME.mdplugins/awos/.claude-plugin/plugin.jsonplugins/awos/README.mdplugins/awos/commands/flow.mdplugins/awos/commands/status.mdplugins/awos/scripts/status-board.pytests/lint-prompts.test.js
🚧 Files skipped from review as they are similar to previous changes (5)
- README.md
- plugins/awos/.claude-plugin/plugin.json
- plugins/awos/commands/flow.md
- .claude-plugin/marketplace.json
- tests/lint-prompts.test.js
CodeRabbit follow-ups on the status board: - count_atomic_tasks: a plain non-checkbox peer bullet (e.g. `- Notes`) at the slice item's indent now closes a list-form slice, so a checkbox nested under that peer is no longer miscounted as a slice task. The scope-close runs for any list item (checkbox or bullet) that dedents to the slice level, ahead of the checkbox-count decision. - status.md: label the card-example fence `text` (markdownlint MD040), and correct the stale "number · title" width note to the post-redesign layout (title on its own line; top line justifies ticket + number). Co-Authored-By: Claude Opus 4.8 <[email protected]>
What
Adds
/awos:status— a read-only plugin command that renders a Kanban board of where every feature stands, read from the project's owncontext/documents. It never mutates state; it scans and prints.Roadmap item: Kanban visibility surface (
/awos:status) (SDLC).The board
Columns are the functional-spec lifecycle states, laid out as a kanban grid sized to ~80 columns — three per row (Draft · In Review · Approved, then Completed · Other). Each feature is a card:
Statusisn't one of the four canonical values, so nothing is silently dropped.Contents
plugins/awos/commands/status.md— the command prompt (plugin command, no core wrapper, per the/awos:flowprecedent).plugins/awos/scripts/status-board.py— a dependency-free (Python 3 stdlib +git), read-only reference renderer.status.mdpoints at it as the runnable spec, so the board can be produced deterministically instead of hand-drawn.EXPECTED_PLUGIN_VERSION).Testing
Validated against 12 real AWOS projects (7–40 specs each). Lint suite: 147 pass / 0 fail. Installer + fixtures layers unaffected. Behavioural coverage belongs in
awos-qaper CLAUDE.md.🤖 Generated with Claude Code
Summary by CodeRabbit
Summary by CodeRabbit
New Features
/awos:status, a read-only Kanban board showing feature delivery stages, progress indicators, status age, sizing, and next steps.Documentation
Tests
Chores