Skip to content

add some changes making the beans project more usable for my needs - #215

Closed
plasmobit wants to merge 25 commits into
hmans:mainfrom
plasmobit:just-beans
Closed

plasmobit wants to merge 25 commits into
hmans:mainfrom
plasmobit:just-beans

Conversation

@plasmobit

Copy link
Copy Markdown

No description provided.

Plasmobit and others added 25 commits October 2, 2026 16:57
- Add fork note to README naming hmans/beans and Hendrik Mans
- Add Credits section to README
- Add NOTICE file for Apache-2.0 attribution
- Install from source with mise or just; the fork has no releases yet
- Name the three binaries beans, beans-tui and beans-serve; mention the web UI
- Keep only the license badge, pointed at plasmobit/beans
- Fix OpenCode plugin paths and the gitignored .conversations/ directory
- Point Contributing and Getting in Touch at the fork's issues
- Add Core.ClosedAncestor: nearest closed ancestor of an open bean;
  completed/scrapped beans return nothing without walking the parent chain
- List/tree (CLI and TUI): a red ↑ takes the place of the space left of the
  status (`↑T`) instead of the ` ↑completed` title suffix; status stays aligned
- beans show: `parent: <id> !<status>` in red when the parent is closed,
  otherwise an extra `ancestor: <id> !<status>` line; header suffix removed
- ImplicitStatus, the GraphQL implicitStatus field and filters are unchanged

Refs: beans-5fp6
- Rows below a closed ancestor carried a ` ↑completed` suffix appended after
  a title already truncated to the full title width; at width 120 the rows
  wrapped inside the 39-column list pane and pushed the top of the TUI off
  screen, depending on which rows the visible page held
- The suffix is replaced by the in-column ↑ marker (beans-5fp6); add a
  regression test that the list pane renders exactly its given size

Refs: beans-1q77
- Tests in internal/ui and internal/commands import it directly; go mod tidy moves it out of the indirect block
- Recipes for setup, deps, codegen, build, install, test, test-e2e, beans, beans-serve, beans-tui, dev-frontend
- Run pnpm as corepack pnpm@10, since pnpm 11+ ignores onlyBuiltDependencies

Refs: beans-xwvt
- Add `h` key in the list view that hides beans with an archive status
  and beans below a closed ancestor
- Show the mode in the list title as "Beans (active)"
- esc / clear filter leaves the mode untouched
- Add footer and help overlay entries
- Add tests for filtering, tag-filter combination and toggling

Refs: beans-9bmv
- Enable mouse cell motion, so the TUI receives mouse events (also under tmux)
- Left click on a list/tree row selects that bean; the wheel does not scroll the list
- Mouse wheel scrolls the body in the detail view, even while links are focused
- Mouse wheel over the two-column preview scrolls its body; header stays fixed,
  scroll resets on cursor change and survives a reload of the same bean

Refs: beans-xbqz
…nals

- Render the preview body with a glamour renderer that wraps at the pane's
  content width, so lines are wrapped once instead of twice
- Widen the side preview to 88 columns, which leaves 80 columns of
  paragraph text after border, padding and glamour margins
- Show the preview below a 15-row list when the terminal is at least
  35 rows tall and too narrow for a side preview with 80 columns of text
  (< 128 columns); short terminals keep the shrunk side preview from 120
- Cap the stacked preview at 120 columns of text
- Mouse wheel over the stacked preview scrolls it; clicks in the list select
- Replace pane-layout literals in tui.go, preview.go and list.go with named
  constants (borders, footer, separator, paddings, glamour margins)
- Add tests for single wrapping, layout selection and the stacked layout

Refs: beans-cwsf, beans-e8qv, beans-c3t7
…tus names

- CalculateResponsiveColumns reserved 10 columns for the full type name
  while RenderBeanRow rendered 12, so truncated rows overflowed by 2 and
  the pane border wrapped "..." onto its own line
- Share ColWidthStatusFull and ColWidthTypeFull between both
- Add TestListRowsFitPane

Refs: beans-bzbo
- add tui.stacked_list_height to .beans.yml (default 15, minimum 5)
- stack only when the terminal has list height + 20 rows
- keep the setting when the config is saved

Refs: beans-sg3r
- size the list model to its rendered pane (stacked, two-column, single)
- refit before forwarding messages, covering resizes in other views
- share the pane size between paging and the mouse hit test

Refs: beans-0jew
- with a preview visible, pgup/pgdown scroll it by 3 rows
- without a preview they keep paging the list
- list the keys in the help overlay

Refs: beans-dexi
- Add ui.DarkMarkdownStyle and ui.AutoMarkdownStyle: glamour styles with Document.Margin = 0
- beans show: use AutoMarkdownStyle, so text wraps at the full 80 columns
- TUI detail view and preview: use DarkMarkdownStyle; drop glamourMarginX from previewChromeX
- Test that rendered text starts at column 0 and glamour defaults stay unmodified

Refs: beans-l4t4
- List title, or the filter input while typing a filter, sits in the
  list's top border instead of a title bar (gains two rows)
- Bean ID sits in the preview's top border; the header starts with the
  title (gains one row)
- withBorderTitle truncates long titles to keep the pane width
- List click hit-testing no longer offsets by a title bar
- Tests for border titles, filter input and truncation

Refs: beans-bcxk
- New config tui.preview_position: auto (size-based, default), right, below
- A position that does not fit falls back to the other layout, then the list alone
- Key v in the list view toggles right/below until the TUI exits
- List v in the help overlay and the footer
- Tests for layout selection per position, the toggle and the config round trip

Refs: beans-m5hh
- New okf/tui-taxonomy.md: views, list view layouts with the preview
  position, panes, bean row columns and row states, parts of the
  preview pane and the detail view
- Each name gives the code location that defines it

Refs: beans-h08d
- New okf/okf-format.md: the OKF v0.2 subset a project needs to keep its
  documentation as a bundle - layout, frontmatter, sources, linking,
  index and log formats, authoring steps
- New okf/index.md: bundle-root index with okf_version 0.2
- OKF frontmatter for okf/tui-taxonomy.md

Refs: beans-ekdb, beans-b175
- Type/status show names cut to 5 columns from pane width 120 and grow
  to 12 by width 160, taking turns so the title never shrinks
- Tags column appears at 140 with 24 columns, grows to 70 between 160
  and 220; MaxTags follows from the tags width
- RenderBeanRow takes TypeColWidth/StatusColWidth instead of UseFullNames
- Tests for column widths, row text per width, rows fitting the pane
- okf/tui-taxonomy.md describes the column growth

Refs: beans-v3i8
- RenderBeanRow marks a blocked open bean with an amber ⊘ before the
  status; the closed-ancestor ↑ takes precedence, dimmed rows stay
  unmarked
- TUI loadBeans computes blocked beans via Core.IsBlocked (direct,
  incoming blocking links, blocked ancestors)
- h cycles the list view all -> active -> unblocked -> ready instead of
  toggling hide-closed; title shows the mode, footer the next one
- beangraph.AddReadyFilter holds the --ready filter, shared by
  `beans list --ready` and the TUI ready view
- okf/tui-taxonomy.md describes the view modes and the ⊘ mark
- Tests for the mark, the blocked set, each view mode and the h cycle

Refs: beans-cc97, beans-4cko
- e2e/run.sh builds test binaries with plain go build and falls back to `just build-embed` when mise is absent
- justfile passes recipe arguments with their quoting intact (positional-arguments + "$@")
- justfile disables corepack's interactive download prompt and documents corepack as a prerequisite for Node 25+
- `just install` creates ~/.local/bin if missing
- Add bean for git tests that break under a global push.pushOption

Refs: beans-ubkt, beans-eudm

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- Title reads 'Blocks:' instead of 'Manage Blocking'
- Legend '● = blocked by <id>' above the key hints

Refs: beans-aln3
- The preview's metadata line shows an amber "⊘ blocked" after the status
  when the list row carries the ⊘ mark
- beanItem.showsBlocked holds the list's precedence: a closed ancestor
  suppresses the blocked mark
- cursorChangedMsg carries the flag; the beansLoadedMsg handler takes it
  from the selected item
- okf/tui-taxonomy.md mentions the mark in the preview header
- Tests for the rendering and for the flag after load and cursor moves

Refs: beans-i597
- beans show prints a "blocked by:" line per direct blocker, from the
  bean's own blocked_by field and from incoming blocking links; a
  resolved blocker is marked with its status
- show --json and list --json print every direct blocker in blocked_by,
  wherever the relation is stored; the file is unchanged
- New output.Bean view for the JSON output
- Fix: list --json without --full printed a wrong etag, because it
  cleared the body of the core's in-memory beans before the etag was
  computed; the body also stayed lost for later reads in the process.
  The view now takes the etag from the full bean and omits the body
  on a copy
- Tests: TestFormatRelationships_BlockedBy, TestJSONBeansBlockedBy,
  TestBeanJSON, TestListJSONETag

Refs: beans-34gf, beans-pl3m
- Add config.FormatVersion (v0.3.0, the last breaking format change) and a top-level format_version field
- beans init writes it; Load leaves it empty when the file has none, so an empty value means the format is unknown
- Save writes the field first with a comment and omits it when empty
- Add format_version to the project's own .beans.yml

Refs: beans-vl03
@plasmobit plasmobit closed this Oct 2, 2026
@plasmobit plasmobit reopened this Oct 2, 2026
@plasmobit

Copy link
Copy Markdown
Author

wrong destination..

@plasmobit plasmobit closed this Oct 2, 2026
@plasmobit
plasmobit deleted the just-beans branch October 2, 2026 15:12
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant