Skip to content

chore(release): 0.8.1#69

Merged
pbean merged 3 commits into
mainfrom
release/0.8.1
Jul 6, 2026
Merged

chore(release): 0.8.1#69
pbean merged 3 commits into
mainfrom
release/0.8.1

Conversation

@pbean

@pbean pbean commented Jul 6, 2026

Copy link
Copy Markdown
Collaborator

Release 0.8.1 — patch. Bugfix-dominant, plus bounded retention for the attempt-preserve recovery ref families.

Version stamped 0.8.0 → 0.8.1 across all files; TUI screenshots + demo regenerated (src/bmad_loop/tui changed since v0.8.0). Once merged to main, release.yml auto-creates the v0.8.1 tag and GitHub release from the CHANGELOG.

Fixed

Added

Changed

Full detail in CHANGELOG.md.

🤖 Generated with Claude Code

Summary by CodeRabbit

  • Bug Fixes
    • Improved reliability for crashed-session recovery and replay handling, including several edge cases.
    • Fixed journal entry display so long fields wrap neatly without misaligning earlier columns.
    • Reduced chances of workflow stalls or livelocks during session completion.
    • Improved Windows-related process and path handling for more consistent behavior.
  • Added
    • Added a new release entry for v0.8.1 and updated version metadata across the project.

pbean and others added 2 commits July 5, 2026 22:42
…k/kind

Render each journal row as a Rich Table.grid with fixed clock/kind columns
and a folding fields column, so long field strings wrap within their own
column instead of spilling back under the timestamp and kind cells.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
@coderabbitai

coderabbitai Bot commented Jul 6, 2026

Copy link
Copy Markdown

Review Change Stack

Warning

Review limit reached

@pbean, you've reached your PR review limit, so we couldn't start this review.

Next review available in: 44 minutes

Enable usage-based reviews in Billing to review now. Otherwise, wait until the next included review is available.
You're only billed for reviews past your plan's rate limits ($0.25/file).

How can I continue?

After more reviews become available, a review can be triggered using the @coderabbitai review command as a PR comment. Alternatively, push new commits to this PR.

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 configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro

Run ID: 812ec8e8-103b-4cac-9883-3f56ffa81b67

📥 Commits

Reviewing files that changed from the base of the PR and between f4b5427 and c6fb96e.

📒 Files selected for processing (2)
  • src/bmad_loop/tui/widgets.py
  • tests/test_tui_app.py

Walkthrough

This PR bumps the package version to 0.8.1 across manifest files and adds a corresponding CHANGELOG entry, and separately refactors journal_line() in the TUI widgets module to render journal entries as a multi-column Rich Table instead of a single Text line, with updated tests.

Changes

Version Bump and Changelog

Layer / File(s) Summary
Bump version to 0.8.1
.claude-plugin/marketplace.json, module.yaml, src/bmad_loop/data/skills/bmad-loop-setup/assets/module.yaml, pyproject.toml, src/bmad_loop/__init__.py
Version/module_version strings updated from 0.8.0 to 0.8.1 across manifest and metadata files.
CHANGELOG entry for v0.8.1
CHANGELOG.md
Adds a new v0.8.1 (2026-07-05) section with Fixed, Added, and Changed subsections, plus the corresponding release reference link.

Journal Table Rendering

Layer / File(s) Summary
Journal line table refactor and tests
src/bmad_loop/tui/widgets.py, tests/test_tui_app.py
journal_line() now returns a Table with clock, kind, and fields columns (fields fold within their own column); tests import Console to capture rendered prompt output, journal_rows() uses console capture, and a new test asserts wrapping with hanging-indent alignment.

Estimated code review effort: 2 (Simple) | ~12 minutes

Sequence Diagram(s)

Not applicable — changes are version metadata updates and a self-contained rendering refactor without multi-component interaction flows.

Poem

A hop, a bump, from .8.0 to .8.1,
My journal now sits in columns, so well done!
Clock ticks dim, kind glows bright,
Fields fold neatly, wrapped just right.
🐇✨ Changelog stacked, tests all passed —
Off to nibble carrots, review complete at last!

🚥 Pre-merge checks | ✅ 4 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Linked Issues check ⚠️ Warning The reviewable changes only show release metadata and TUI wrapping; the required durability, completion, and ref-pruning fixes are not evidenced. Add the engine/model/adaptor changes for #57, #48, and #32, or explain why those files were excluded from review.
✅ Passed checks (4 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title clearly and concisely identifies the main change as the 0.8.1 release.
Out of Scope Changes check ✅ Passed The visible changes stay within release prep and the documented TUI wrapping fix.
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch release/0.8.1

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.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@augmentcode

augmentcode Bot commented Jul 6, 2026

Copy link
Copy Markdown
🤖 Augment PR Summary

Summary: Cuts the 0.8.1 patch release and updates TUI journal rendering to wrap long fields cleanly.

Changes:

  • Bumps version metadata from 0.8.00.8.1 across package/module/plugin files.
  • Adds a detailed 0.8.1 section to CHANGELOG.md covering durability/resume fixes, fence-aware result scanning, and bounded attempt-preserve ref retention.
  • Reworks journal_line to render each journal row as a Rich Table.grid with fixed clock/kind columns and a folded fields column (hanging indent).
  • Updates TUI tests to render journal prompts via a Rich Console capture and adds a regression test for hanging-indent wrapping.
  • Regenerates TUI screenshots/demo assets under docs/images to match the updated UI.

Technical Notes: Introduces shared JOURNAL* width constants used by both the row layout and the wrapping test to prevent expectation drift.

🤖 Was this summary useful? React with 👍 or 👎

@augmentcode augmentcode Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Review completed. 2 suggestions posted.

Fix All in Augment

Comment augment review to trigger a new review at any time.

Comment thread src/bmad_loop/tui/widgets.py Outdated
# indent) instead of wrapping back under the clock/kind columns.
grid = Table.grid(padding=(0, 1, 0, 0))
grid.add_column(width=8)
grid.add_column(width=24, overflow="fold")

@augmentcode augmentcode Bot Jul 6, 2026

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

src/bmad_loop/tui/widgets.py:185 — Setting overflow="fold" on the fixed-width kind column changes behavior from the previous Text formatting: long kinds will now wrap and can make a single journal entry render as multiple lines. If only the fields column is intended to fold, it may be worth double-checking that wrapping kind won’t hurt journal row readability/selection behavior in Textual.

Severity: low

Fix This in Augment

🤖 Was this useful? React with 👍 or 👎, or 🚀 if it prevented an incident/outage.

Copy link
Copy Markdown
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Intentional — keeping fold on the kind column. The ~7 real journal kinds that exceed 24 chars (sweep-returned-after-decisions, decision-skipped-unattended, attempt-worktree-preserved, …) fold within their own column, so the full kind stays visible and the fields still hang-indent in their column rather than spilling. In a Textual OptionList each entry is one selectable unit regardless of visual height, so a two-line kind does not affect selection. Ellipsis/crop was considered but would hide the tail of those kinds; we prefer full visibility over row compactness here.

Comment thread tests/test_tui_app.py Outdated
# continuation lines stay in the fields column (clock 8 + pad 1 + kind 24
# + pad 1 = 34), never spilling back under the clock/kind columns
for line in lines[1:]:
assert line.startswith(" " * 34) and line[34] != " "

@augmentcode augmentcode Bot Jul 6, 2026

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

tests/test_tui_app.py:329 — This assertion can be brittle: line[34] can raise IndexError if a wrapped continuation line is shorter than 35 characters, and line[34] != " " may fail if Rich wraps such that a continuation line begins with whitespace even though it’s still correctly indented into the fields column.

Severity: low

Fix This in Augment

🤖 Was this useful? React with 👍 or 👎, or 🚀 if it prevented an incident/outage.

Copy link
Copy Markdown
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Good catch — hardened in c6fb96e. The fields-column offset is now derived from shared width constants (_JOURNAL_CLOCK_WIDTH + _JOURNAL_COL_PAD + _JOURNAL_KIND_WIDTH + _JOURNAL_COL_PAD) instead of a hardcoded 34, and the per-line check is now line[:indent] == " " * indent (slice-safe, no IndexError, and tolerant of a fold boundary landing a space at the column edge) plus a single any(line[indent:].strip() …) to assert real fields content is carried.

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🧹 Nitpick comments (1)
src/bmad_loop/tui/widgets.py (1)

183-186: 📐 Maintainability & Code Quality | 🔵 Trivial | 💤 Low value

Magic numbers for column widths.

width=8 and width=24 are hardcoded with only a comment explaining the resulting 34 in the test file. Consider naming these as module-level constants (e.g. _CLOCK_COL_WIDTH, _KIND_COL_WIDTH) so the relationship between this function and the hanging-indent test assertion (34 = 8 + 1 + 24 + 1) is self-documenting and doesn't silently drift if one side changes without the other.

♻️ Proposed refactor
+_JOURNAL_CLOCK_WIDTH = 8
+_JOURNAL_KIND_WIDTH = 24
+
 def journal_line(entry: dict[str, Any]) -> Table:
     ...
     grid = Table.grid(padding=(0, 1, 0, 0))
-    grid.add_column(width=8)
-    grid.add_column(width=24, overflow="fold")
+    grid.add_column(width=_JOURNAL_CLOCK_WIDTH)
+    grid.add_column(width=_JOURNAL_KIND_WIDTH, overflow="fold")
     grid.add_column(overflow="fold")
🤖 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 `@src/bmad_loop/tui/widgets.py` around lines 183 - 186, The Table.grid setup in
the widget builder uses hardcoded column widths that are coupled to the
hanging-indent test assertion, so replace the inline widths in the
grid.add_column calls with module-level named constants such as _CLOCK_COL_WIDTH
and _KIND_COL_WIDTH. Update the relevant widget construction logic in the same
area as the grid definition so the relationship between the layout and the
34-column test expectation stays explicit and easy to keep in sync.
🤖 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.

Nitpick comments:
In `@src/bmad_loop/tui/widgets.py`:
- Around line 183-186: The Table.grid setup in the widget builder uses hardcoded
column widths that are coupled to the hanging-indent test assertion, so replace
the inline widths in the grid.add_column calls with module-level named constants
such as _CLOCK_COL_WIDTH and _KIND_COL_WIDTH. Update the relevant widget
construction logic in the same area as the grid definition so the relationship
between the layout and the 34-column test expectation stays explicit and easy to
keep in sync.

ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro

Run ID: 1b8f78be-2017-4c70-9376-1238df07c242

📥 Commits

Reviewing files that changed from the base of the PR and between abd09d6 and f4b5427.

⛔ Files ignored due to path filters (15)
  • docs/images/dashboard.png is excluded by !**/*.png
  • docs/images/dashboard.svg is excluded by !**/*.svg
  • docs/images/decision-answer.png is excluded by !**/*.png
  • docs/images/decision-answer.svg is excluded by !**/*.svg
  • docs/images/deferred-modal.png is excluded by !**/*.png
  • docs/images/deferred-modal.svg is excluded by !**/*.svg
  • docs/images/demo.gif is excluded by !**/*.gif
  • docs/images/settings-scm.png is excluded by !**/*.png
  • docs/images/settings-scm.svg is excluded by !**/*.svg
  • docs/images/settings.svg is excluded by !**/*.svg
  • docs/images/start-run-modal.png is excluded by !**/*.png
  • docs/images/start-run-modal.svg is excluded by !**/*.svg
  • docs/images/sweep-decision.png is excluded by !**/*.png
  • docs/images/sweep-decision.svg is excluded by !**/*.svg
  • uv.lock is excluded by !**/*.lock
📒 Files selected for processing (8)
  • .claude-plugin/marketplace.json
  • CHANGELOG.md
  • module.yaml
  • pyproject.toml
  • src/bmad_loop/__init__.py
  • src/bmad_loop/data/skills/bmad-loop-setup/assets/module.yaml
  • src/bmad_loop/tui/widgets.py
  • tests/test_tui_app.py

…dent test

Extract _JOURNAL_CLOCK_WIDTH/_JOURNAL_KIND_WIDTH/_JOURNAL_COL_PAD so the grid
layout in journal_line and the hanging-indent test derive the fields-column
offset from one source instead of hardcoding a coupled 34 in the test comment.
Make the continuation-line assertion slice-safe (no IndexError on a short
wrap) and tolerant of a fold boundary landing a space at the column edge,
while still catching any real left-spill. Rendering is unchanged.

Addresses review comments on PR #69.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
@pbean

pbean commented Jul 6, 2026

Copy link
Copy Markdown
Collaborator Author

@coderabbitai Addressed in c6fb96e. Extracted module-level constants _JOURNAL_CLOCK_WIDTH = 8, _JOURNAL_KIND_WIDTH = 24, and _JOURNAL_COL_PAD = 1 (matching the file's existing _JOURNAL_* convention), used in the Table.grid layout, and the hanging-indent test now derives its indent from the same constants — so the layout and the 34-column expectation can no longer drift independently.

@coderabbitai

coderabbitai Bot commented Jul 6, 2026

Copy link
Copy Markdown

Tip

For best results, initiate chat on the files or code changes.

🧩 Analysis chain

🏁 Script executed:

#!/bin/bash
cd /repo 2>/dev/null || true
git log --oneline -1 c6fb96e 2>/dev/null
git show c6fb96e -- src/bmad_loop/tui/widgets.py 2>/dev/null | head -100
git show c6fb96e -- tests/test_tui_app.py 2>/dev/null | head -100

Length of output: 5165


Verified in commit c6fb96e — the constants _JOURNAL_CLOCK_WIDTH, _JOURNAL_KIND_WIDTH, and _JOURNAL_COL_PAD are now defined in src/bmad_loop/tui/widgets.py and used in the Table.grid column widths/padding, and the test in tests/test_tui_app.py imports the same constants to compute indent instead of hardcoding 34. The test assertion was also made slice-safe and tolerant of a fold boundary landing on a space, while still checking for real content past the indent. This looks good — thanks for closing the loop.

@pbean

pbean commented Jul 6, 2026

Copy link
Copy Markdown
Collaborator Author

augment review

@augmentcode augmentcode Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Review completed. No suggestions at this time.

Comment augment review to trigger a new review at any time.

@pbean pbean merged commit 9aefd40 into main Jul 6, 2026
9 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

1 participant