@open-tomato/rafa 0.18.0 → 0.19.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 +13 -10
- package/dist/PROMPT.md +2 -1
- package/dist/bundled/skills/dev-planner/SKILL.md +2 -0
- package/dist/cli.js +2212 -950
- package/dist/{describe-vq037dyt.js → describe-cenk70n5.js} +4 -3
- package/dist/effort/store/index.js +6 -4
- package/dist/{index-0pdsq2hy.js → index-09p41s0n.js} +11 -224
- package/dist/{index-kvnggvyk.js → index-c5cecsga.js} +2 -2
- package/dist/{index-6vkd153j.js → index-ca0fccvr.js} +1220 -1104
- package/dist/{index-944pncd8.js → index-cedghpva.js} +10 -2
- package/dist/index-d6d0942q.js +218 -0
- package/dist/{index-at9f1z2z.js → index-gb51x34c.js} +1007 -51
- package/dist/{index-cvpdvmtg.js → index-mh5hyw8g.js} +602 -665
- package/dist/{index-jva32qe6.js → index-pqrpcfaz.js} +246 -2
- package/dist/{index-ddf85qac.js → index-vg7ycs94.js} +1 -1
- package/dist/index-wp8c28fd.js +18 -0
- package/dist/index.js +13 -11
- package/dist/learning/index.js +25 -0
- package/dist/plan/index.js +8 -7
- package/package.json +4 -3
package/README.md
CHANGED
|
@@ -352,9 +352,9 @@ and never none.
|
|
|
352
352
|
The build targets bun, and `engines` names `bun` alone: there is no
|
|
353
353
|
`engines.node`, because no node version runs the binary. The package
|
|
354
354
|
root, `./cli` and `./store` import `bun:sqlite`, which node's ESM loader
|
|
355
|
-
refuses before any module code runs, so only `./plan
|
|
356
|
-
under node at all. `module` points at
|
|
357
|
-
the root of `exports` names. The package ships no type declarations:
|
|
355
|
+
refuses before any module code runs, so only `./plan`, `./ports` and
|
|
356
|
+
`./learning` load under node at all. `module` points at
|
|
357
|
+
`./dist/index.js`, the same build the root of `exports` names. The package ships no type declarations:
|
|
358
358
|
`exports` names no `types`, and a TypeScript consumer gets TS7016 under
|
|
359
359
|
`strict`.
|
|
360
360
|
|
|
@@ -411,7 +411,7 @@ and a line here is ticked by the change that finishes the feature.
|
|
|
411
411
|
- ✅ The right skills reach the right task, chosen when the plan is
|
|
412
412
|
written
|
|
413
413
|
- ⬜ Know which skills earn their place and which are ignored
|
|
414
|
-
-
|
|
414
|
+
- ✅ rafa learns from its own runs: what one task works out is handed
|
|
415
415
|
to the tasks that need it later
|
|
416
416
|
- ⬜ Skills and lessons shared across projects and machines
|
|
417
417
|
- ⬜ Config as code: a typed `rafa.config.ts` holding your settings, your
|
|
@@ -465,12 +465,15 @@ rafa stands on other people's work and on earlier work of ours.
|
|
|
465
465
|
evidence, scope) is adapted from the `continuous-learning-v2` skill of
|
|
466
466
|
[`affaan-m/everything-claude-code`](https://github.com/affaan-m/everything-claude-code)
|
|
467
467
|
by Affaan Mustafa (MIT).
|
|
468
|
-
- **Shared learning
|
|
469
|
-
|
|
470
|
-
|
|
471
|
-
|
|
472
|
-
|
|
473
|
-
|
|
468
|
+
- **Shared learning.** The design for merging what separate runs learn
|
|
469
|
+
(one record per lesson, a rule for conflicting lessons, promotion on
|
|
470
|
+
recurrence) follows Open Tomato's hive-learning design. rafa now records
|
|
471
|
+
lessons in `.rafa/instincts/` — one lesson per task finding that carries
|
|
472
|
+
a resolution — and pushes them after each task's report. Lessons that
|
|
473
|
+
meet a confidence floor are blessed and handed to tasks that need them
|
|
474
|
+
later; lessons that recur enough are promoted into the pages that own
|
|
475
|
+
their subjects. Sharing lessons across projects and machines is planned
|
|
476
|
+
for a future version.
|
|
474
477
|
|
|
475
478
|
## License
|
|
476
479
|
|
package/dist/PROMPT.md
CHANGED
|
@@ -2,7 +2,7 @@ We shared as much of the plan as this run is configured to share — the whole p
|
|
|
2
2
|
|
|
3
3
|
Do not stage or commit anything: the loop owns staging and committing, and once this session exits cleanly it runs `git add -A` and commits your work under a subject derived from the task text. Leave your changes in the working tree, and leave them in a state the pre-commit hooks accept — a refused hook blocks the task and stops the loop.
|
|
4
4
|
|
|
5
|
-
End your final message with exactly one `rafa:report` block shaped like the example below, and write nothing after it: the loop stores what it reads there, and a message without the block stores none of your findings. Write all seven fields, `status`, `feedback`, `findings`, `skills_used`, `blockers`, `out_of_scope_bugs` and `changes`, and write a list with nothing in it as `[]` rather than leaving its field out. `status` is `done` or `blocked`. `feedback` says what was done and how it went. `findings` is a list with one entry per distinct observation, never several merged into one; a finding's `kind` is one of `gotcha`, `pattern`, `location` or `skill-suggestion`, its `signal` is `loud` when it surfaced as a failure or `silent` when something passed while wrong, and its `artifact`, when there is one, is the exact string a recurrence would match on, such as an error message. `skills_used` names each skill you invoked. `blockers` lists what stopped the task, each entry a `what` and, when there is one, an `artifact`, `out_of_scope_bugs` the bugs you saw outside it, each bug with `security` set to `true` or `false`, and `changes` is the changelog for your diff, each entry holding the required fields `level` (one of patch, minor, major, none) and `summary` (a quoted line the user would understand), plus optional `area` (the changelog section). Write those closed-set words and `security` bare, as the example does, and double-quote every other value on one line: an unquoted value that opens with a backtick, `@`, `%` or `[` makes the whole block unreadable, and a `#` after a space silently cuts a value short.
|
|
5
|
+
End your final message with exactly one `rafa:report` block shaped like the example below, and write nothing after it: the loop stores what it reads there, and a message without the block stores none of your findings. Write all seven fields, `status`, `feedback`, `findings`, `skills_used`, `blockers`, `out_of_scope_bugs` and `changes`, and write a list with nothing in it as `[]` rather than leaving its field out. `status` is `done` or `blocked`. `feedback` says what was done and how it went. `findings` is a list with one entry per distinct observation, never several merged into one; a finding's `kind` is one of `gotcha`, `pattern`, `location` or `skill-suggestion`, its `signal` is `loud` when it surfaced as a failure or `silent` when something passed while wrong, and its `artifact`, when there is one, is the exact string a recurrence would match on, such as an error message. A finding may also carry a `domain`, the area of work its lesson belongs to, one of `code-style`, `testing`, `git`, `debugging`, `workflow`, `security` or `general-best-practices`; leave it out when none fits. `skills_used` names each skill you invoked. `blockers` lists what stopped the task, each entry a `what` and, when there is one, an `artifact`, `out_of_scope_bugs` the bugs you saw outside it, each bug with `security` set to `true` or `false`, and `changes` is the changelog for your diff, each entry holding the required fields `level` (one of patch, minor, major, none) and `summary` (a quoted line the user would understand), plus optional `area` (the changelog section). Write those closed-set words and `security` bare, as the example does, and double-quote every other value on one line: an unquoted value that opens with a backtick, `@`, `%` or `[` makes the whole block unreadable, and a `#` after a space silently cuts a value short.
|
|
6
6
|
|
|
7
7
|
```rafa:report
|
|
8
8
|
status: done
|
|
@@ -16,6 +16,7 @@ findings:
|
|
|
16
16
|
resolution: "run bun install before the first test"
|
|
17
17
|
artifact: "Cannot find package"
|
|
18
18
|
signal: loud
|
|
19
|
+
domain: testing
|
|
19
20
|
skills_used: ["git-workflow"]
|
|
20
21
|
blockers: []
|
|
21
22
|
out_of_scope_bugs:
|
|
@@ -223,6 +223,7 @@ findings:
|
|
|
223
223
|
resolution: "wrap append in try/finally"
|
|
224
224
|
artifact: "EMFILE: too many open files"
|
|
225
225
|
signal: loud
|
|
226
|
+
domain: debugging
|
|
226
227
|
- trigger: "SQLite schema migration timing"
|
|
227
228
|
kind: pattern
|
|
228
229
|
what: "migrations run on every store init, not just schema changes"
|
|
@@ -262,6 +263,7 @@ Finding entry fields:
|
|
|
262
263
|
| `resolution` | string | no | How to fix or work around it |
|
|
263
264
|
| `artifact` | string | no | Error message, file path, or code snippet that signals the finding |
|
|
264
265
|
| `signal` | string | yes | `loud` (it surfaced as a failure) or `silent` (it passed while wrong) |
|
|
266
|
+
| `domain` | string | no | The area of work the finding's lesson belongs to: `code-style`, `testing`, `git`, `debugging`, `workflow`, `security` or `general-best-practices`. A value outside the set is reported as an issue and read as absent |
|
|
265
267
|
|
|
266
268
|
Change note entry fields:
|
|
267
269
|
|