@farmslot/skills 0.2.0 → 0.3.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/CHANGELOG.md CHANGED
@@ -4,6 +4,9 @@ All notable changes to `@farmslot/skills` are tracked here.
4
4
 
5
5
  ## Unreleased
6
6
 
7
+ ## 0.3.0 - 2026-08-03
8
+
9
+ - Teach recipe authors to start from existing parameterized recipes and compose them node by node before adding new capabilities.
7
10
  - Active-development baseline; add user-facing changes here before release or package publication.
8
11
 
9
12
  ## 0.2.0 - 2026-07-19
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@farmslot/skills",
3
- "version": "0.2.0",
3
+ "version": "0.3.0",
4
4
  "type": "module",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",
@@ -33,7 +33,7 @@
33
33
  "prepublishOnly": "node ../../scripts/quality/check-farmslot-package-readiness.mjs --publish --packages @farmslot/skills"
34
34
  },
35
35
  "dependencies": {
36
- "@farmslot/agent-runtime": "0.2.0"
36
+ "@farmslot/agent-runtime": "0.6.0"
37
37
  },
38
38
  "devDependencies": {
39
39
  "@types/node": "^22.0.0",
@@ -222,9 +222,7 @@ function resolveRepoLocalContext({ startDir, repoName }) {
222
222
  const repoRoot = findUp(startDir, (candidate) => {
223
223
  if (!fs.existsSync(path.join(candidate, '.git'))) return false;
224
224
  if (repoName === 'example-browser') {
225
- return (
226
- findFilesByBasename(candidate, ['validate-recipe.js', 'validate-flow-schema.js']).length > 0
227
- );
225
+ return findFilesByBasename(candidate, ['validate-recipe.js']).length > 0;
228
226
  }
229
227
  if (repoName === 'example-mobile') {
230
228
  return findFilesByBasename(candidate, ['validate-recipe.sh']).length > 0;
@@ -661,17 +659,11 @@ function discoverValidationSteps({ repoName, repoRoot, recipePath, artifactsDir,
661
659
  }
662
660
 
663
661
  if (repoName === 'example-browser') {
664
- const schemaValidator = findFilesByBasename(repoRoot, ['validate-flow-schema.js'])[0];
665
662
  const recipeValidator = findFilesByBasename(repoRoot, ['validate-recipe.js'])[0];
666
- if (!schemaValidator || !recipeValidator) {
663
+ if (!recipeValidator) {
667
664
  return [];
668
665
  }
669
666
  const steps = [
670
- {
671
- name: 'schema_validation',
672
- command: ['node', schemaValidator, recipePath],
673
- cwd: repoRoot,
674
- },
675
667
  {
676
668
  name: 'dry_run',
677
669
  command: ['node', recipeValidator, '--recipe', recipePath, '--dry-run'],
@@ -101,7 +101,7 @@ Completion requires:
101
101
  - Do not emit canonical success output if every target is unresolved
102
102
  - Do not prefer screenshots when state proof is enough
103
103
  - Do not skip screenshots when the claim is visual or review-sensitive
104
- - Do not rebuild known flows as raw steps when `call` exists
104
+ - Do not rebuild known recipes as raw steps when `call` exists
105
105
  - Do not stop after printing a recipe or JSON payload if writable artifacts and validation surfaces still exist
106
106
  - Do not leave the copied `TASK.md` as the untouched template
107
107
  - Do not write `SIGNAL.json` with `complete/success` when a required validation failed or when a required proof target remains `UNRESOLVED`
@@ -112,11 +112,11 @@ Completion requires:
112
112
 
113
113
  | Pitfall | Correct Pattern |
114
114
  | ------------------------------------------------------------------ | ---------------------------------------------------------------------------------------------------- |
115
- | Treating cooking as deterministic templating | Treat it as LLM synthesis constrained by repo flows/evals and honest proof |
115
+ | Treating cooking as deterministic templating | Treat it as LLM synthesis constrained by repo journeys/recipes/evals and honest proof |
116
116
  | Using the whole PR description as one target | Extract small executable proof targets |
117
117
  | Defaulting every UI claim to screenshots only | choose `visual` or `mixed` deliberately |
118
118
  | Defaulting every non-visual claim to a screenshot anyway | prefer state/log/trace proof |
119
- | Rewriting long repeated setup chains | reuse `call` flows |
119
+ | Rewriting long repeated setup chains | reuse parameterized recipes through `call` |
120
120
  | Forcing a canonical recipe when the claim is unresolved | stop or emit only resolved targets with explicit gaps |
121
121
  | Treating interactive farmslot execution like chat-only drafting | keep driving the workspace until artifacts + validation evidence exist |
122
122
  | Writing recipe artifacts but forgetting the copied `TASK.md` | rewrite the task file and update `STATUS` / evidence sections before stopping |
@@ -127,7 +127,7 @@ Completion requires:
127
127
  Stop and report instead of forcing a recipe when:
128
128
 
129
129
  - target text is still too ambiguous to map honestly
130
- - repo has no viable flow/eval/native interaction path for the claim
130
+ - repo has no viable recipe/eval/native interaction path for the claim
131
131
  - current runner context is missing and the missing context changes what should be proven
132
132
  - the repo has no validation runner and you already recorded `validation unavailable`
133
133
 
@@ -22,7 +22,7 @@ Paste or summarize:
22
22
  - PR body
23
23
  - linked ticket ACs / expected behavior
24
24
  - investigation findings
25
- - existing recipe / flow / eval refs
25
+ - existing action / recipe / eval refs
26
26
 
27
27
  ## Acceptance Criteria
28
28
 
@@ -88,11 +88,11 @@ It must include:
88
88
  ## Checklist
89
89
 
90
90
  - [ ] **1. Fill the task block** — set `TARGET_REPO`, `SOURCE_KIND`, `SOURCE_REF`, `ARTIFACT_DIR`, `VALIDATION_MODE`, `STATUS: working`.
91
- - [ ] **2. Gather the real source of truth** — PR/ticket/investigation text plus existing flows/evals in the target repo.
91
+ - [ ] **2. Gather the real source of truth** — PR/ticket/investigation text plus existing user journeys, recipes, and evals in the target repo.
92
92
  - [ ] **3. Enumerate acceptance criteria** — write a numbered canonical list under `## Acceptance Criteria`.
93
93
  - [ ] **4. Extract proof targets** — split the work into the smallest executable claims.
94
94
  - [ ] **5. Decide proof mode** — choose `state`, `visual`, or `mixed` for every target and justify every `mixed`.
95
- - [ ] **6. Discover reuse** — list existing `flow` / `eval_ref` / canonical recipe surfaces before writing new graph steps.
95
+ - [ ] **6. Discover reuse** — list existing actions, recipes, and eval refs before writing new graph steps.
96
96
  - [ ] **7. Draft the recipe** — write `artifacts/recipe.json` and, when supported, `artifacts/recipe-cook.json`.
97
97
  - [ ] **8. Run schema validation** — if the repo provides a schema validator, run it and record the command + output under `## Validation Evidence`.
98
98
  - [ ] **9. Run runner dry-run validation** — if the repo provides a runner, run at least a dry-run and record the command + output.
@@ -43,7 +43,7 @@ Then replace this section with your own summary of:
43
43
  - PR body
44
44
  - linked ticket ACs / expected behavior
45
45
  - investigation findings
46
- - existing recipe / flow / eval refs
46
+ - existing action / recipe / eval refs
47
47
 
48
48
  ## Acceptance Criteria
49
49
 
@@ -111,11 +111,11 @@ It must include:
111
111
  ## Checklist
112
112
 
113
113
  - [ ] **1. Fill the task block** — set `TARGET_REPO`, `SOURCE_KIND`, `SOURCE_REF`, `ARTIFACT_DIR`, `VALIDATION_MODE`, `STATUS: working`.
114
- - [ ] **2. Gather the real source of truth** — PR/ticket/investigation text plus existing flows/evals in the target repo.
114
+ - [ ] **2. Gather the real source of truth** — PR/ticket/investigation text plus existing user journeys, recipes, and evals in the target repo.
115
115
  - [ ] **3. Enumerate acceptance criteria** — write a numbered canonical list under `## Acceptance Criteria`.
116
116
  - [ ] **4. Extract proof targets** — split the work into the smallest executable claims.
117
117
  - [ ] **5. Decide proof mode** — choose `state`, `visual`, or `mixed` for every target and justify every `mixed`.
118
- - [ ] **6. Discover reuse** — list existing `flow` / `eval_ref` / canonical recipe surfaces before writing new graph steps.
118
+ - [ ] **6. Discover reuse** — list existing actions, recipes, and eval refs before writing new graph steps.
119
119
  - [ ] **7. Draft the recipe** — write `artifacts/recipe.json` and, when supported, `artifacts/recipe-cook.json`. Use documented runner field names for nodes (for example `timeout_ms` / `poll_ms` on `wait_for`), not guessed aliases.
120
120
  - [ ] **8. Rewrite this copied TASK file** — replace the template placeholders with the real run data and working notes. Leaving the untouched template is a failure.
121
121
  - [ ] **9. Run schema validation** — if the repo provides a schema validator, run it and record the command + output under `## Validation Evidence`.
@@ -12,7 +12,7 @@ Use this overlay when the target project is a browser or web app and has no more
12
12
  Start with:
13
13
 
14
14
  ```bash
15
- rg --files | rg 'recipes?/.*\\.json$|flows?/.*\\.json$|validate-recipe\\.(js|mjs|cjs|ts)|validate-flow-schema\\.(js|mjs|cjs|ts)|playwright|cypress|vitest|agentic-toolkit\\.md'
15
+ rg --files | rg 'recipes?/.*\\.json$|validate-recipe\\.(js|mjs|cjs|ts)|playwright|cypress|vitest|agentic-toolkit\\.md'
16
16
  ```
17
17
 
18
18
  Then inspect package scripts for existing validation surfaces:
@@ -37,7 +37,6 @@ Look for:
37
37
  Use repo-local commands first. Common shapes include:
38
38
 
39
39
  ```bash
40
- node <validate-flow-schema.js> <recipe.json>
41
40
  node <validate-recipe.js> --recipe <recipe.json> --dry-run
42
41
  npm test -- --runInBand
43
42
  ```
@@ -12,7 +12,7 @@ Use this overlay when the target project is a mobile app and has no more specifi
12
12
  Start with:
13
13
 
14
14
  ```bash
15
- rg --files | rg 'recipes?/.*\\.json$|flows?/.*\\.json$|validate-recipe\\.(sh|js|mjs|cjs|ts)|detox|maestro|appium|testIds?|accessibility|agentic-toolkit\\.md'
15
+ rg --files | rg 'recipes?/.*\\.json$|validate-recipe\\.(sh|js|mjs|cjs|ts)|detox|maestro|appium|testIds?|accessibility|agentic-toolkit\\.md'
16
16
  ```
17
17
 
18
18
  Then inspect package scripts for local test and validation commands:
@@ -23,7 +23,7 @@ node -e "const p=require('./package.json'); console.log(p.scripts || {})"
23
23
 
24
24
  ## Cooking Rules
25
25
 
26
- - Prefer stable accessibility labels, test IDs, or existing mobile flows when they exist.
26
+ - Prefer stable accessibility labels, test IDs, or existing mobile automation when it exists.
27
27
  - Keep proof targets separate from platform mechanics.
28
28
  - Do not import web-only selectors or desktop assumptions into mobile recipes.
29
29
  - If mobile lacks a repo-owned helper, write a recipe and proof plan, then mark live validation unavailable with the concrete blocker.
@@ -16,7 +16,7 @@ Use the local recipe runtime when one exists, or recommend the smallest install
16
16
 
17
17
  1. Find the project-owned recipe command first.
18
18
  2. If no command exists, check for `@farmslot/recipe-harness` or an app-specific harness package.
19
- 3. Before authoring, inspect declared actions and reusable flows. Prefer project discovery commands. For generic flow discovery, run `farmslot-recipe flows list` and `farmslot-recipe flows describe <ref>`. If no action discovery command exists, read only the relevant project manifest entries and examples.
19
+ 3. Before authoring, inspect the closest recipes with `farmslot-recipe run --list` and `farmslot-recipe run <id> --describe`, then inspect declared actions only if no recipe fits. Prefer project discovery commands; otherwise read only the relevant manifest entries and examples.
20
20
  4. Run dry-run or schema validation before live execution when available.
21
21
  5. Record artifact paths and validation output.
22
22
  6. If no runner exists, stop with a concrete install recommendation.
@@ -25,7 +25,7 @@ Use the local recipe runtime when one exists, or recommend the smallest install
25
25
 
26
26
  - Do not invent runner commands.
27
27
  - Do not require Farmslot Gateway, pool files, slots, Command Center, or Companion for first use.
28
- - Do not bypass project fixtures or user-flow validation by directly mutating app state.
28
+ - Do not bypass project fixtures or user-journey validation by directly mutating app state.
29
29
 
30
30
  ## Output
31
31