<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>romp — label an issue, get a pull request</title>
    <link>https://romp.sidv.dev/</link>
    <description>Recent content on romp — label an issue, get a pull request</description>
    <generator>Hugo</generator>
    <language>en</language>
    <atom:link href="https://romp.sidv.dev/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>Getting Started</title>
      <link>https://romp.sidv.dev/docs/getting-started/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>https://romp.sidv.dev/docs/getting-started/</guid>
      <description>&lt;h2 id=&#34;requirements&#34;&gt;Requirements&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;code&gt;git&lt;/code&gt; 2.35+ — the first release with reliable worktree support&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;gh&lt;/code&gt; — authenticated via &lt;code&gt;gh auth login&lt;/code&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;codex&lt;/code&gt; or &lt;code&gt;claude&lt;/code&gt;, logged in&lt;/li&gt;&#xA;&lt;li&gt;Go 1.25+ to build, or a release binary&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;install&#34;&gt;Install&lt;/h2&gt;&#xA;&lt;h3 id=&#34;go-install-recommended&#34;&gt;Go install (recommended)&lt;/h3&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;go install github.com/BRO3886/romp/cmd/romp@latest&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id=&#34;download-a-release&#34;&gt;Download a release&lt;/h3&gt;&#xA;&lt;p&gt;Apple Silicon:&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;curl -LO https://github.com/BRO3886/romp/releases/latest/download/romp-darwin-arm64.tar.gz&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;tar xzf romp-darwin-arm64.tar.gz&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;mkdir -p ~/.local/bin &lt;span class=&#34;o&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; mv romp ~/.local/bin/romp&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Intel:&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;curl -LO https://github.com/BRO3886/romp/releases/latest/download/romp-darwin-amd64.tar.gz&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;tar xzf romp-darwin-amd64.tar.gz&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;mkdir -p ~/.local/bin &lt;span class=&#34;o&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; mv romp ~/.local/bin/romp&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id=&#34;build-from-source&#34;&gt;Build from source&lt;/h3&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;git clone https://github.com/BRO3886/romp.git&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;cd&lt;/span&gt; romp&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;make build&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# Binary at ./bin/romp&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;quickstart&#34;&gt;Quickstart&lt;/h2&gt;&#xA;&lt;p&gt;romp reads the repo from your current directory&amp;rsquo;s &lt;code&gt;origin&lt;/code&gt; remote.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Commands</title>
      <link>https://romp.sidv.dev/docs/commands/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>https://romp.sidv.dev/docs/commands/</guid>
      <description>&lt;p&gt;romp is a single binary. Every command runs against the repo in your current&#xA;directory (resolved from its &lt;code&gt;origin&lt;/code&gt; remote) unless noted.&lt;/p&gt;&#xA;&lt;table&gt;&#xA;  &lt;thead&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;th&gt;Command&lt;/th&gt;&#xA;          &lt;th&gt;What it does&lt;/th&gt;&#xA;      &lt;/tr&gt;&#xA;  &lt;/thead&gt;&#xA;  &lt;tbody&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;code&gt;romp init&lt;/code&gt;&lt;/td&gt;&#xA;          &lt;td&gt;Write &lt;code&gt;romp.toml&lt;/code&gt;, create the labels, update &lt;code&gt;.gitignore&lt;/code&gt;.&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;code&gt;romp watch&lt;/code&gt;&lt;/td&gt;&#xA;          &lt;td&gt;Poll and work labelled issues. One repo, foreground.&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;code&gt;romp run -i N&lt;/code&gt;&lt;/td&gt;&#xA;          &lt;td&gt;Run one issue now, ignoring the label.&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;code&gt;romp status&lt;/code&gt;&lt;/td&gt;&#xA;          &lt;td&gt;In-flight jobs. &lt;code&gt;--all&lt;/code&gt; for every repo.&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;code&gt;romp history&lt;/code&gt;&lt;/td&gt;&#xA;          &lt;td&gt;Recently finished jobs. &lt;code&gt;--all&lt;/code&gt; for every repo.&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;code&gt;romp logs &amp;lt;codename|issue&amp;gt; [-f]&lt;/code&gt;&lt;/td&gt;&#xA;          &lt;td&gt;Show or follow a job&amp;rsquo;s log.&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;code&gt;romp cancel &amp;lt;issue&amp;gt;&lt;/code&gt;&lt;/td&gt;&#xA;          &lt;td&gt;Kill a running job and abandon it.&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;code&gt;romp gc&lt;/code&gt;&lt;/td&gt;&#xA;          &lt;td&gt;Remove stale worktrees and old history. Dry-run unless &lt;code&gt;--apply&lt;/code&gt;.&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;code&gt;romp doctor&lt;/code&gt;&lt;/td&gt;&#xA;          &lt;td&gt;Check git, gh auth, harness, config.&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;  &lt;/tbody&gt;&#xA;&lt;/table&gt;&#xA;&lt;h2 id=&#34;romp-run&#34;&gt;&lt;code&gt;romp run&lt;/code&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Run one issue now, in the foreground, without claiming it in the job table.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Configuration</title>
      <link>https://romp.sidv.dev/docs/configuration/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>https://romp.sidv.dev/docs/configuration/</guid>
      <description>&lt;p&gt;Configuration is TOML. &lt;code&gt;romp init&lt;/code&gt; writes a starting &lt;code&gt;romp.toml&lt;/code&gt;:&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-toml&#34; data-lang=&#34;toml&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nx&#34;&gt;label&lt;/span&gt;          &lt;span class=&#34;p&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;romp&amp;#34;&lt;/span&gt;           &lt;span class=&#34;c&#34;&gt;# trigger label&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nx&#34;&gt;claimed_label&lt;/span&gt;  &lt;span class=&#34;p&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;romp:claimed&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nx&#34;&gt;blocked_label&lt;/span&gt;  &lt;span class=&#34;p&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;romp:blocked&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nx&#34;&gt;base&lt;/span&gt;           &lt;span class=&#34;p&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;main&amp;#34;&lt;/span&gt;           &lt;span class=&#34;c&#34;&gt;# default: repo default branch&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nx&#34;&gt;width&lt;/span&gt;          &lt;span class=&#34;p&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;3&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nx&#34;&gt;timeout&lt;/span&gt;        &lt;span class=&#34;p&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;25m&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;verify&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nx&#34;&gt;build&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;go build ./...&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nx&#34;&gt;test&lt;/span&gt;  &lt;span class=&#34;p&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;go test ./... -count=1&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nx&#34;&gt;lint&lt;/span&gt;  &lt;span class=&#34;p&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;golangci-lint run&amp;#34;&lt;/span&gt;      &lt;span class=&#34;c&#34;&gt;# optional&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;scope&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nx&#34;&gt;protected&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;testdata/**&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;internal/testutil/**&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;.github/**&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nx&#34;&gt;ignore&lt;/span&gt;    &lt;span class=&#34;p&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;vendor/**&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;node_modules/**&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;harness&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nx&#34;&gt;default&lt;/span&gt;   &lt;span class=&#34;p&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;codex&amp;#34;&lt;/span&gt;              &lt;span class=&#34;c&#34;&gt;# claude | codex&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nx&#34;&gt;model&lt;/span&gt;     &lt;span class=&#34;p&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nx&#34;&gt;effort&lt;/span&gt;    &lt;span class=&#34;p&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;high&amp;#34;&lt;/span&gt;               &lt;span class=&#34;c&#34;&gt;# claude: low..max; codex: + none, minimal, ultra&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nx&#34;&gt;max_turns&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;30&lt;/span&gt;                   &lt;span class=&#34;c&#34;&gt;# claude only&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;prompt&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nx&#34;&gt;template&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;.romp/prompt.md&amp;#34;&lt;/span&gt;     &lt;span class=&#34;c&#34;&gt;# optional&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nx&#34;&gt;brief&lt;/span&gt;    &lt;span class=&#34;p&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;.romp/DESIGN.md&amp;#34;&lt;/span&gt;     &lt;span class=&#34;c&#34;&gt;# optional&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;precedence&#34;&gt;Precedence&lt;/h2&gt;&#xA;&lt;p&gt;Config merges in a fixed order — later layers override only the fields they&#xA;set:&lt;/p&gt;</description>
    </item>
    <item>
      <title>Goal Contract</title>
      <link>https://romp.sidv.dev/docs/goal-contract/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>https://romp.sidv.dev/docs/goal-contract/</guid>
      <description>&lt;p&gt;romp hands the agent a finish line, not a task description. The rendered prompt&#xA;is the single contract between romp and the agent, and it is harness-agnostic:&#xA;claude and codex receive the same structure.&lt;/p&gt;&#xA;&lt;h2 id=&#34;the-four-sections&#34;&gt;The four sections&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;strong&gt;GATE&lt;/strong&gt; — reject the issue before touching code if it&amp;rsquo;s ambiguous,&#xA;contradictory, or under-scoped. Don&amp;rsquo;t invent missing criteria.&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;DONE&lt;/strong&gt; — every acceptance criterion met, on a clean tree.&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;PROVE IT&lt;/strong&gt; — run the verify command and show the fresh passing output.&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;CONSTRAINTS&lt;/strong&gt; — no deleted, skipped, or weakened tests, no hardcoded&#xA;expected values, no out-of-scope files, no &lt;code&gt;git commit&lt;/code&gt;/&lt;code&gt;git push&lt;/code&gt;.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;The GATE is the point. An issue is shippable only if all three of these are&#xA;already written in the issue body:&lt;/p&gt;</description>
    </item>
    <item>
      <title>Outcomes</title>
      <link>https://romp.sidv.dev/docs/outcomes/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>https://romp.sidv.dev/docs/outcomes/</guid>
      <description>&lt;p&gt;Every job ends in exactly one named outcome. There is no silent grey area.&lt;/p&gt;&#xA;&lt;table&gt;&#xA;  &lt;thead&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;th&gt;Outcome&lt;/th&gt;&#xA;          &lt;th&gt;What you get&lt;/th&gt;&#xA;      &lt;/tr&gt;&#xA;  &lt;/thead&gt;&#xA;  &lt;tbody&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;strong&gt;done&lt;/strong&gt;&lt;/td&gt;&#xA;          &lt;td&gt;PR opened, trigger label removed.&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;strong&gt;blocked&lt;/strong&gt;&lt;/td&gt;&#xA;          &lt;td&gt;No PR. &lt;code&gt;romp:blocked&lt;/code&gt; label + gap comment.&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;strong&gt;no-changes&lt;/strong&gt;&lt;/td&gt;&#xA;          &lt;td&gt;Agent exited clean with no commits. No PR.&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;strong&gt;red&lt;/strong&gt;&lt;/td&gt;&#xA;          &lt;td&gt;Verify failed on independent re-run. No PR, worktree kept.&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;strong&gt;timeout&lt;/strong&gt;&lt;/td&gt;&#xA;          &lt;td&gt;Exceeded &lt;code&gt;timeout&lt;/code&gt;. Killed, worktree kept.&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;strong&gt;cancelled&lt;/strong&gt;&lt;/td&gt;&#xA;          &lt;td&gt;You cancelled. Worktree, branch, and both labels removed.&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;strong&gt;error&lt;/strong&gt;&lt;/td&gt;&#xA;          &lt;td&gt;git/gh failure (incl. rate limits outliving retries). Re-claimed later.&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;  &lt;/tbody&gt;&#xA;&lt;/table&gt;&#xA;&lt;p&gt;&lt;code&gt;rate-limited&lt;/code&gt; is not an outcome: it names the in-job GitHub retry, not a&#xA;terminal state.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Architecture</title>
      <link>https://romp.sidv.dev/docs/architecture/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>https://romp.sidv.dev/docs/architecture/</guid>
      <description>&lt;p&gt;romp is a Go CLI that drives your local coding agent. It is deliberately&#xA;minimal: the durable source of truth is GitHub, and romp adds only the&#xA;machinery to claim, isolate, and verify work.&lt;/p&gt;&#xA;&lt;h2 id=&#34;job-lifecycle&#34;&gt;Job lifecycle&lt;/h2&gt;&#xA;&lt;svg viewBox=&#34;0 0 860 300&#34; role=&#34;img&#34; aria-label=&#34;romp job lifecycle: label, poll, claim, worktree, agent, verify, then open PR, red, or blocked&#34; xmlns=&#34;http://www.w3.org/2000/svg&#34; style=&#34;width:100%;height:auto;max-width:860px;display:block&#34;&gt;&#xA;  &lt;defs&gt;&#xA;    &lt;marker id=&#34;a-navy&#34; viewBox=&#34;0 0 10 10&#34; refX=&#34;9&#34; refY=&#34;5&#34; markerWidth=&#34;7&#34; markerHeight=&#34;7&#34; orient=&#34;auto&#34;&gt;&lt;path d=&#34;M0 0L10 5L0 10z&#34; fill=&#34;#1a2530&#34;/&gt;&lt;/marker&gt;&#xA;    &lt;marker id=&#34;a-fox&#34; viewBox=&#34;0 0 10 10&#34; refX=&#34;9&#34; refY=&#34;5&#34; markerWidth=&#34;7&#34; markerHeight=&#34;7&#34; orient=&#34;auto&#34;&gt;&lt;path d=&#34;M0 0L10 5L0 10z&#34; fill=&#34;#c0662e&#34;/&gt;&lt;/marker&gt;&#xA;    &lt;marker id=&#34;a-green&#34; viewBox=&#34;0 0 10 10&#34; refX=&#34;9&#34; refY=&#34;5&#34; markerWidth=&#34;7&#34; markerHeight=&#34;7&#34; orient=&#34;auto&#34;&gt;&lt;path d=&#34;M0 0L10 5L0 10z&#34; fill=&#34;#2f7d4f&#34;/&gt;&lt;/marker&gt;&#xA;    &lt;marker id=&#34;a-red&#34; viewBox=&#34;0 0 10 10&#34; refX=&#34;9&#34; refY=&#34;5&#34; markerWidth=&#34;7&#34; markerHeight=&#34;7&#34; orient=&#34;auto&#34;&gt;&lt;path d=&#34;M0 0L10 5L0 10z&#34; fill=&#34;#b3422f&#34;/&gt;&lt;/marker&gt;&#xA;  &lt;/defs&gt;&#xA;  &lt;line x1=&#34;136&#34; y1=&#34;59&#34; x2=&#34;163&#34; y2=&#34;59&#34; stroke=&#34;#1a2530&#34; stroke-width=&#34;1.5&#34; marker-end=&#34;url(#a-navy)&#34;/&gt;&#xA;  &lt;line x1=&#34;238&#34; y1=&#34;59&#34; x2=&#34;265&#34; y2=&#34;59&#34; stroke=&#34;#1a2530&#34; stroke-width=&#34;1.5&#34; marker-end=&#34;url(#a-navy)&#34;/&gt;&#xA;  &lt;line x1=&#34;340&#34; y1=&#34;59&#34; x2=&#34;367&#34; y2=&#34;59&#34; stroke=&#34;#1a2530&#34; stroke-width=&#34;1.5&#34; marker-end=&#34;url(#a-navy)&#34;/&gt;&#xA;  &lt;line x1=&#34;474&#34; y1=&#34;59&#34; x2=&#34;501&#34; y2=&#34;59&#34; stroke=&#34;#1a2530&#34; stroke-width=&#34;1.5&#34; marker-end=&#34;url(#a-navy)&#34;/&gt;&#xA;  &lt;line x1=&#34;576&#34; y1=&#34;59&#34; x2=&#34;603&#34; y2=&#34;59&#34; stroke=&#34;#1a2530&#34; stroke-width=&#34;1.5&#34; marker-end=&#34;url(#a-navy)&#34;/&gt;&#xA;  &lt;line x1=&#34;540&#34; y1=&#34;82&#34; x2=&#34;505&#34; y2=&#34;197&#34; stroke=&#34;#c0662e&#34; stroke-width=&#34;1.5&#34; marker-end=&#34;url(#a-fox)&#34;/&gt;&#xA;  &lt;text x=&#34;486&#34; y=&#34;140&#34; text-anchor=&#34;end&#34; fill=&#34;#9a4b1c&#34; font-family=&#34;Inter, sans-serif&#34; font-size=&#34;12&#34;&gt;self-reject&lt;/text&gt;&#xA;  &lt;line x1=&#34;642&#34; y1=&#34;82&#34; x2=&#34;622&#34; y2=&#34;197&#34; stroke=&#34;#2f7d4f&#34; stroke-width=&#34;1.5&#34; marker-end=&#34;url(#a-green)&#34;/&gt;&#xA;  &lt;text x=&#34;610&#34; y=&#34;140&#34; text-anchor=&#34;end&#34; fill=&#34;#2f7d4f&#34; font-family=&#34;Inter, sans-serif&#34; font-size=&#34;12&#34;&gt;pass&lt;/text&gt;&#xA;  &lt;line x1=&#34;642&#34; y1=&#34;82&#34; x2=&#34;732&#34; y2=&#34;197&#34; stroke=&#34;#b3422f&#34; stroke-width=&#34;1.5&#34; marker-end=&#34;url(#a-red)&#34;/&gt;&#xA;  &lt;text x=&#34;690&#34; y=&#34;140&#34; text-anchor=&#34;start&#34; fill=&#34;#b3422f&#34; font-family=&#34;Inter, sans-serif&#34; font-size=&#34;12&#34;&gt;fail&lt;/text&gt;&#xA;  &lt;g font-family=&#34;Inter, -apple-system, sans-serif&#34; font-size=&#34;14&#34; font-weight=&#34;600&#34; fill=&#34;#1a2530&#34; text-anchor=&#34;middle&#34;&gt;&#xA;    &lt;rect x=&#34;20&#34; y=&#34;36&#34; width=&#34;116&#34; height=&#34;46&#34; rx=&#34;10&#34; fill=&#34;#fffdf8&#34; stroke=&#34;#1a2530&#34; stroke-width=&#34;1.5&#34;/&gt;&#xA;    &lt;text x=&#34;78&#34; y=&#34;64&#34;&gt;Label issue&lt;/text&gt;&#xA;    &lt;rect x=&#34;166&#34; y=&#34;36&#34; width=&#34;72&#34; height=&#34;46&#34; rx=&#34;10&#34; fill=&#34;#fffdf8&#34; stroke=&#34;#1a2530&#34; stroke-width=&#34;1.5&#34;/&gt;&#xA;    &lt;text x=&#34;202&#34; y=&#34;64&#34;&gt;Poll&lt;/text&gt;&#xA;    &lt;rect x=&#34;268&#34; y=&#34;36&#34; width=&#34;72&#34; height=&#34;46&#34; rx=&#34;10&#34; fill=&#34;#fffdf8&#34; stroke=&#34;#1a2530&#34; stroke-width=&#34;1.5&#34;/&gt;&#xA;    &lt;text x=&#34;304&#34; y=&#34;64&#34;&gt;Claim&lt;/text&gt;&#xA;    &lt;rect x=&#34;370&#34; y=&#34;36&#34; width=&#34;104&#34; height=&#34;46&#34; rx=&#34;10&#34; fill=&#34;#fffdf8&#34; stroke=&#34;#1a2530&#34; stroke-width=&#34;1.5&#34;/&gt;&#xA;    &lt;text x=&#34;422&#34; y=&#34;64&#34;&gt;Worktree&lt;/text&gt;&#xA;    &lt;rect x=&#34;504&#34; y=&#34;36&#34; width=&#34;72&#34; height=&#34;46&#34; rx=&#34;10&#34; fill=&#34;#fffdf8&#34; stroke=&#34;#1a2530&#34; stroke-width=&#34;1.5&#34;/&gt;&#xA;    &lt;text x=&#34;540&#34; y=&#34;64&#34;&gt;Agent&lt;/text&gt;&#xA;    &lt;rect x=&#34;606&#34; y=&#34;36&#34; width=&#34;72&#34; height=&#34;46&#34; rx=&#34;10&#34; fill=&#34;#fffdf8&#34; stroke=&#34;#1a2530&#34; stroke-width=&#34;1.5&#34;/&gt;&#xA;    &lt;text x=&#34;642&#34; y=&#34;64&#34;&gt;Verify&lt;/text&gt;&#xA;  &lt;/g&gt;&#xA;  &lt;g font-family=&#34;Inter, -apple-system, sans-serif&#34; font-size=&#34;14&#34; font-weight=&#34;600&#34; text-anchor=&#34;middle&#34;&gt;&#xA;    &lt;rect x=&#34;450&#34; y=&#34;200&#34; width=&#34;100&#34; height=&#34;46&#34; rx=&#34;10&#34; fill=&#34;#f6e5cf&#34; stroke=&#34;#c0662e&#34; stroke-width=&#34;1.5&#34;/&gt;&#xA;    &lt;text x=&#34;500&#34; y=&#34;228&#34; fill=&#34;#9a4b1c&#34;&gt;blocked&lt;/text&gt;&#xA;    &lt;rect x=&#34;570&#34; y=&#34;200&#34; width=&#34;100&#34; height=&#34;46&#34; rx=&#34;10&#34; fill=&#34;#e3f1e7&#34; stroke=&#34;#2f7d4f&#34; stroke-width=&#34;1.5&#34;/&gt;&#xA;    &lt;text x=&#34;620&#34; y=&#34;228&#34; fill=&#34;#2f7d4f&#34;&gt;Open PR&lt;/text&gt;&#xA;    &lt;rect x=&#34;700&#34; y=&#34;200&#34; width=&#34;70&#34; height=&#34;46&#34; rx=&#34;10&#34; fill=&#34;#f5e0dc&#34; stroke=&#34;#b3422f&#34; stroke-width=&#34;1.5&#34;/&gt;&#xA;    &lt;text x=&#34;735&#34; y=&#34;228&#34; fill=&#34;#b3422f&#34;&gt;red&lt;/text&gt;&#xA;  &lt;/g&gt;&#xA;&lt;/svg&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;strong&gt;Poll&lt;/strong&gt; — &lt;code&gt;watch&lt;/code&gt; lists open issues carrying the trigger label every 60&#xA;seconds. The label is the entire queue; there is no local backlog.&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Claim&lt;/strong&gt; — atomic insert (unique on repo + issue), claim label, assign&#xA;&lt;code&gt;@me&lt;/code&gt;. Concurrent watchers on other machines skip claimed issues.&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Worktree&lt;/strong&gt; — each job runs in a fresh &lt;code&gt;git worktree&lt;/code&gt; branched from the&#xA;default branch. Never the local tree; the base is deterministic.&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Agent&lt;/strong&gt; — the goal contract is rendered and handed to the harness (claude&#xA;or codex).&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Verify&lt;/strong&gt; — romp re-runs every &lt;code&gt;[verify]&lt;/code&gt; command itself. The agent&amp;rsquo;s own&#xA;&amp;ldquo;tests pass&amp;rdquo; is never trusted.&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;PR or block&lt;/strong&gt; — green and scoped means a PR and label removal; an&#xA;under-scoped issue becomes &lt;code&gt;blocked&lt;/code&gt; with a gap comment.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;h2 id=&#34;components&#34;&gt;Components&lt;/h2&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;romp/&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;├── cmd/romp/          # Cobra commands (init, watch, run, status, ...)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;├── internal/&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;│   ├── config/        # TOML layering, language detection, effort validation&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;│   ├── harness/       # claude + codex adapters behind a Run/Name interface&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;│   ├── prompt/        # goal-contract template rendering&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;│   ├── runner/        # job pipeline: worktree → agent → verify → PR/block&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;│   ├── watch/         # poll loop + claim + cancel socket&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;│   ├── job/           # SQLite job table + outcome history&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;│   ├── gh/            # GitHub client with rate-limit retry&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;│   ├── git/           # worktree and branch management&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;│   └── codename/      # deterministic adjective_name per job&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;└── docs/adr/          # design decisions&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;isolation-and-concurrency&#34;&gt;Isolation and concurrency&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;strong&gt;Worktree isolation&lt;/strong&gt; — concurrent jobs never share a checkout.&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Width&lt;/strong&gt; — an in-memory semaphore bounds concurrent jobs per repo.&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Cross-machine dedupe&lt;/strong&gt; — the claim label, not any local state, is the&#xA;authority across machines.&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Crash recovery&lt;/strong&gt; — a fresh watcher clears only its own stale in-flight&#xA;rows and reconciles issues whose &lt;code&gt;romp-N&lt;/code&gt; branch already has an open PR.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;observability&#34;&gt;Observability&lt;/h2&gt;&#xA;&lt;p&gt;Every job gets a &lt;strong&gt;codename&lt;/strong&gt; — an &lt;code&gt;adjective_name&lt;/code&gt; pair like &lt;code&gt;sunny_naruto&lt;/code&gt;,&#xA;derived deterministically from the repo and issue number. The codename prefixes&#xA;every log line, names the per-job log file, and is the primary column in&#xA;&lt;code&gt;status&lt;/code&gt;.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Safety</title>
      <link>https://romp.sidv.dev/docs/safety/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>https://romp.sidv.dev/docs/safety/</guid>
      <description>&lt;p&gt;romp runs a coding agent on your machine. That agent can run arbitrary tools&#xA;and edit files. Read this before you let it loose.&lt;/p&gt;&#xA;&lt;h2 id=&#34;the-label-is-privileged&#34;&gt;The label is privileged&lt;/h2&gt;&#xA;&lt;p&gt;The agent is driven by text that anyone with repo write access can author —&#xA;the issue title and body. Adding the trigger label to an issue is authorizing&#xA;your machine to execute whatever that issue says. Treat the trigger label as a&#xA;privileged action and label only issues you would run yourself.&lt;/p&gt;</description>
    </item>
  </channel>
</rss>
