lib/rodedholds the core editor classes (Application, Buffer, Window, StatusBar, Minibuffer, Event/Command, Logging); frontends live inlib/roded/frontends(currently curses).- Binaries:
bin/rodedentrypoint,bin/consolefor IRB sandboxing,bin/setupfor bootstrapping. - Tests sit in
specwith shared config inspec/spec_helper.rb; default Rake task runs tests and lint. - Packaging/metadata lives in
roded.gemspec; docs indocs/; built gems accumulate inpkg/.
bin/setupinstalls Bundler dependencies.bundle exec rakeruns specs and RuboCop (default task).bundle exec rspecruns the test suite;.rspec_statustracks failures between runs.bundle exec rubocopenforces style (TargetRubyVersion 3.4, double-quoted strings).bundle exec rake installbuilds and installs the gem locally;bin/rodedlaunches the curses UI (requires terminal curses support).
- Ruby 3.4 syntax; prefer double-quoted strings; omit
# frozen_string_literal: trueheaders. - One top-level class/module per file under
lib/roded, matching snake_case filenames. - Class/module names PascalCase; methods/variables snake_case; constants SCREAMING_SNAKE_CASE.
- Keep concurrency interactions thread-safe (Application uses Queue + threads; curses frontend reads input via
IO.select).
- Framework: RSpec; place specs alongside features in
spec/*_spec.rb. - Name examples with behavior statements (
it "renders buffer top line"), avoiding brittle curses-terminal assertions. - Cover command routing and buffer mutations when adding features; use test doubles for frontends when possible.
- Commit messages short, imperative, and scoped (
Add cursor redraw command); reserve--wip-- [skip ci]only for temporary checkpoints. - Rebase or squash noisy WIP commits before review; link issues in the message or PR description when relevant.
- PRs should describe intent, testing performed (
bundle exec rake, manual TUI check), and any UI changes (screenshots/recordings welcome). - Flag breaking changes (keybindings, file I/O) prominently and update docs/README if behavior shifts.