All the small things.

Review code, pull requests, and docs without fighting your editor. Rip keeps the useful parts close and leaves the rest out.

rocket-launch
Pull Requests
xipkit/rocket-launch5 openOpenClosedMergedAll
#12feature/redline-hold-reasonsagent
claude · → main · today 09:41 · 4 files
3 passed+118 −22
#11fix/countdown-drift
bflowers · → main · today 09:12 · 2 files
3 passed+31 −9
#9docs/runbook-abort-modesagent
claude · → main · yesterday · 3 files
1 failedDraft+64 −0
#8refactor/sequencer-phase-enumagent
codex · → main · yesterday · 6 files
3 passed+210 −187
#6feature/telemetry-compression
bflowers · → main · 2 days ago · 2 files
3 passedDraft+40 −0
main↑↓ select↩ openCommandR refresh
Your whole review queue

See every open pull request or merge request with its CI status, size, and author. Rip badges the ones agents wrote so you know where to look closer.

docs · ARCHITECTURE.md
ARCHITECTURE.md
Preview: ARCHITECTURE.md
1# Architecture
2
3Four programs, one manifest.
4Everything reads `mission.toml`.
5
6```mermaid
7sequenceDiagram
8 participant GC as ground-control
9 participant Seq as sequencer
10 GC->>Seq: start count
11 loop every second
12 Seq->>Seq: redline check
13 Seq-->>GC: phase + count
14 end
15```
16
17## The sequencer
18
19The count is a small state
20machine. Holds are automatic.
Architecture
Four programs, one manifest. Everything reads mission.toml.
ground-control
sequencer
ground-control
sequencer
start count
phase + count
The sequencer
mainLn 1, Col 1Spaces: 2Markdown
Write Markdown. See the result.Edit beside a live preview. Rip highlights code and renders Mermaid diagrams, Obsidian callouts, and wikilinks inline.
rocket-launch
Uncommitted changes
Split Files
Uncommitted changes
~/Work/bflowers/rocket-launch · 2 files · +4 −1
src/sequencer.rs+1−1Viewed
const MIN_BATTERY_V@@ -78,7 +78,7 @@
78/// Redlines checked every second of the count.
79const MAX_CHAMBER_PRESSURE_BAR: f64 = 92.0;
80const MIN_LOX_PRESSURE_BAR: f64 = 3.2;
81−const MIN_BATTERY_V: f64 = 27.5;
81+const MIN_BATTERY_V: f64 = 27.0;
82
83impl Sequencer {
84 pub fn from_manifest(path: &str) -> Result<Self> {
85 let raw = std::fs::read_to_string(path)?;
main
Diffs you can actually readChoose a unified or side-by-side view. Rip highlights changed words while you mark files viewed and stage hunks.
src
src
main.rs
sequencer.rs
telemetry.rs
main.rs
1//! Kestrel launch sequencer.
2
3mod sequencer;
4mod telemetry;
5
6use sequencer::{Phase, Sequencer};
7
8fn main() -> anyhow::Result<()> {
9 let mut seq = Sequencer::from_manifest("mission.toml")?;
10 while seq.phase() != Phase::Liftoff {
11 let frame = telemetry::sample(seq.t());
12 match seq.step(&frame) {
13 Ok(phase) => println!("{:<6} T{:+}", phase.label(), seq.t()),
14 Err(abort) => return Err(abort.into()),
15 }
16 }
17 println!("LIFTOFF");
18 Ok(())
19}
git
Workspace: Toggle Git StatusOptionCommandG
Git: Switch BranchCommandK CommandB
Git: Open Pull Requests
Git: Uncommitted ChangesCommandShiftG
Git: File History
Review: Toggle Whitespace
Editor: Move Right
mainLn 1, Col 1Spaces: 2Rust
Every command, one keystroke awayFind any command in the palette. Your keybindings appear beside each one.
rocket-launch
rocket-launch
.github
docs
src
tools
Cargo.toml
mission.toml
README.md
Locations
Locations3 locations
warning: unused variable `frame` --> src/sequencer.rs:147:22 error[E0308]: mismatched types --> src/main.rs:24:31 Traceback (most recent call last): File "tools/trajectory.py", line 44, in main
Command↩ jump to the first hit · ↑↓ ↩ walk the list · esc back to the editor
src/sequencer.rs
line 147, col 22
146 }
147 if frame.lox_pressure < MIN_LOX_PRESSURE_BAR && self.t > -120 {
148 return Some(format!("LOX ullage {:.2} bar", frame.lox_pressure));
149 }
src/main.rs
line 24, col 31
23 while seq.phase() != Phase::Liftoff {
24 let frame = telemetry::sample(seq.t());
25 match seq.step(&frame) {
main
Paste an error, land on the linePaste compiler output or a stack trace. Rip turns every file path into a jump target.
rocket-launch
#12 · 4 files
src/sequencer.rs+14 −9
src/redlines.rs+22 −3
tests/hold.rs+41 −0
docs/RUNBOOK.md+6 −1
#12 feature/redline-hold-reasons
Request changesApprove
src/sequencer.rshunk 1 of 3J/K next · V seen
@@ -142,9 +142,14 @@ impl Sequencer
142142 match self.phase {
143143 Phase::Hold { at, reason } => {
144- if self.operator_released() {
144+ if self.operator_released() && self.redlines.all_clear() {
145145 self.resume_from(at);
146+ self.log("hold released", reason);
146147 }
b
bflowers2 min ago
If the hold is released before redline_clear fires we'll re-enter Hold on the next tick. Should this also check self.redlines.all_clear()?
C
claudeagentjust now
Good catch. Pushed a follow-up that gates the release on all_clear() and added a test for the double-hold case.
Reply…ResolveComment Command↩
147148 }
148149 Phase::PropellantLoad => self.check_redlines(),
149150 _ => {}
150151 }
feature/redline-hold-reasons1 of 4 files seen2 comments
Review where you read

Comment on any line, step through hunks with J/K, and mark files seen. Then approve or request changes. Rip syncs every thread with GitHub or GitLab, including agent replies.