@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 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` and `./ports` load
356
- under node at all. `module` points at `./dist/index.js`, the same build
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
- - ⬜ rafa learns from its own runs: what one task works out is handed
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 (coming).** The design for merging what separate
469
- runs learn (one record per lesson, a rule for conflicting lessons,
470
- promotion on recurrence) follows Open Tomato's hive-learning design.
471
- In rafa it is partly built: lessons are recorded per project today, and
472
- sharing them across runs, projects and machines is on the
473
- [Roadmap](#roadmap) and not available yet.
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