@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 +3 -0
- package/package.json +2 -2
- package/scripts/run-cooking-lane.cjs +2 -10
- package/skills/recipe-cook/SKILL.md +4 -4
- package/skills/recipe-cook/TASK.md +3 -3
- package/skills/recipe-cook/references/TASK.md +3 -3
- package/skills/recipe-cook/repos/example-browser.md +1 -2
- package/skills/recipe-cook/repos/example-mobile.md +2 -2
- package/skills/recipe-harness/SKILL.md +2 -2
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.
|
|
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.
|
|
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 (!
|
|
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
|
|
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
|
|
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`
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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$|
|
|
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$|
|
|
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
|
|
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
|
|
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-
|
|
28
|
+
- Do not bypass project fixtures or user-journey validation by directly mutating app state.
|
|
29
29
|
|
|
30
30
|
## Output
|
|
31
31
|
|