@open-tomato/rafa 0.24.1 → 0.28.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -175,11 +175,12 @@ the next one, so you rarely have to remember it.
175
175
  ### Tracking effort and learning from skills
176
176
 
177
177
  Each run records what it cost in time, tokens and work, and which skills
178
- were offered, invoked and worked. Two commands read that record:
178
+ were offered, invoked and worked. Key commands for the effort record:
179
179
 
180
180
  ```bash
181
181
  rafa effort collect # gather and store session logs
182
182
  rafa effort report # per-plan summary: sessions, tasks, costs
183
+ rafa effort merge <file> # join another device's store into this one
183
184
  ```
184
185
 
185
186
  `rafa effort report` shows the per-plan tables (sessions by status and
@@ -210,6 +211,26 @@ The report opens with a fixed line explaining that it shows co-occurrence,
210
211
  not causation: a skill can be invoked and its failure recur for reasons the
211
212
  skill does not cover.
212
213
 
214
+ ### Starting a second device
215
+
216
+ To run rafa on a second device for the same project, bring the effort
217
+ store over consistently:
218
+
219
+ 1. On the new device, check for an existing `.rafa/effort/` store and set
220
+ it aside (rename or back up).
221
+ 2. From the primary device, make a consistent copy:
222
+ ```bash
223
+ rafa effort copy --to=<path>
224
+ ```
225
+ Or use `sqlite3 .rafa/effort/effort.sqlite ".backup <path>"`, but never
226
+ a plain file copy during a write.
227
+ 3. Transfer the copied store and `.rafa/config.yaml` to the new device's
228
+ `.rafa/` directory.
229
+ 4. After both devices have recorded effort, bring them back together with:
230
+ ```bash
231
+ rafa effort merge <copied-store-file>
232
+ ```
233
+
213
234
  ### Which agents and skills are involved
214
235
 
215
236
  A task line may end with a declaration, for example
@@ -279,6 +300,23 @@ project's file outranks the same one in yours. `rafa init` writes both
279
300
  with every setting commented out at its default, so uncomment a line,
280
301
  with its section line, to change it.
281
302
 
303
+ ### `effort`
304
+
305
+ One setting says how long a command waits for another rafa process that
306
+ is writing the effort store before it gives up with `SQLITE_BUSY`.
307
+
308
+ | Key | Default | What it sets |
309
+ |---|---|---|
310
+ | `effort.busyTimeoutMs` | `5000` | the wait in milliseconds, a whole number from 1 to 60000 |
311
+
312
+ There is no unlimited wait, since a lock wait with no end can hang a
313
+ loop; `0`, a fraction and a quoted `"5000"` are refused.
314
+
315
+ ```yaml
316
+ effort:
317
+ busyTimeoutMs: 10000
318
+ ```
319
+
282
320
  ### `cleanup`
283
321
 
284
322
  Three settings shape what `rafa cleanup` lists.
@@ -359,6 +397,19 @@ from GitHub Issues:
359
397
  file `.rafa/position.json` holds your current place, where you were, and
360
398
  where you came from — the same two-slot pattern as `cd -` and
361
399
  `git checkout -`, plus a home anchor.
400
+ - **Hopping between epics with `rafa next --roadmap`.** When your epic's
401
+ work is blocked by an issue in another epic, `rafa next --roadmap`
402
+ reaches for that blocker, works it, and comes home. You hold two slots:
403
+ home (your anchor) and current (the work in hand). Reaching for a third
404
+ would mean letting go of home, so rafa halts if a blocker is itself
405
+ blocked. The pattern keeps unattended work safe: a hop into another
406
+ team's epic asks for that team's review before it changes their code.
407
+ Solo projects see a dry hop — the useful part without the permission
408
+ check. One team hops between its own epics. Several teams open a pull
409
+ request when a hop crosses to another board, and `rafa status` says
410
+ `waiting on #C (owner review)` until the team reviews and approves. The
411
+ hop record (`.rafa/hop.json`) tracks where home is and what rafa works.
412
+ When `rafa next` finishes, it deletes the record and returns home.
362
413
  - **Other trackers.** GitHub Issues is what works today. Linear support
363
414
  is being ported from the project rafa grew out of, as an optional
364
415
  add-on in a later version. For anything else, open or upvote a request
@@ -503,6 +503,17 @@ The report rules in this skill restate `src/report/parse.ts`, which is the autho
503
503
 
504
504
  ---
505
505
 
506
+ ## Plans that change the effort store
507
+
508
+ When the spec adds or changes anything in `.rafa/effort/`:
509
+
510
+ - Give each migration its own task, naming its id and whether it is additive or which side it breaks. Never write a schema version number or an array position.
511
+ - A task that runs the branch's store code over real data first runs `bun src/rafa.ts effort copy --to=.rafa/scratch/<stub>-effort`, and runs each command with `RAFA_EFFORT_DIR=<absolute path of that dir>` on the same line. The close-out task removes the copy.
512
+ - Work that must land in the live store goes under "Operator steps after the plan merges [human]": `rafa self-update`, then the command.
513
+ - PREREQUISITES carries `- [ ] The installed rafa can read and write the live store: \`rafa effort schema --check\`` under an `[auto]` heading.
514
+
515
+ ---
516
+
506
517
  ## Command-development rule: Claude session declaration
507
518
 
508
519
  When planning work on rafa commands: every command that can start a Claude