@bendyline/gilde 0.1.57 → 0.1.59

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.
Files changed (48) hide show
  1. package/data/craftbook-templates/ba/backup-routine/versions/1.0.4/craftbook.json +0 -16
  2. package/data/craftbook-templates/bo/booking-automation/versions/1.0.3/craftbook.json +0 -16
  3. package/data/craftbook-templates/ch/character-turnaround/versions/1.0.3/test.json +7 -10
  4. package/data/craftbook-templates/co/content-deck/versions/1.2.4/craftbook.json +4 -4
  5. package/data/craftbook-templates/co/content-deck/versions/1.2.4/test.json +3 -0
  6. package/data/craftbook-templates/co/corpus-email-digest/versions/1.2.4/craftbook.json +4 -4
  7. package/data/craftbook-templates/co/corpus-email-digest/versions/1.2.4/test.json +3 -0
  8. package/data/craftbook-templates/da/data-export-migrate/versions/1.0.4/craftbook.json +0 -16
  9. package/data/craftbook-templates/db/db-index-tuning/versions/1.0.4/craftbook.json +0 -16
  10. package/data/craftbook-templates/do/doc-intake-pipeline/versions/1.0.4/craftbook.json +0 -16
  11. package/data/craftbook-templates/do/doc-rewrite/versions/1.0.3/test.json +3 -6
  12. package/data/craftbook-templates/do/dockerize-app/versions/1.0.4/craftbook.json +0 -16
  13. package/data/craftbook-templates/ed/edit-notes/versions/1.0.3/test.json +5 -8
  14. package/data/craftbook-templates/fo/form-fill-batch/versions/1.0.4/craftbook.json +0 -16
  15. package/data/craftbook-templates/ho/holiday-card-run/versions/1.0.3/test.json +5 -8
  16. package/data/craftbook-templates/in/insurance-inventory/versions/1.0.3/test.json +6 -9
  17. package/data/craftbook-templates/index.json +1 -1
  18. package/data/craftbook-templates/it/item-intake/versions/1.0.3/test.json +7 -10
  19. package/data/craftbook-templates/me/memory-prompt-session/versions/1.0.3/test.json +9 -11
  20. package/data/craftbook-templates/mo/monitor-and-alert/versions/1.0.3/craftbook.json +0 -16
  21. package/data/craftbook-templates/mo/morning-report/versions/1.0.3/test.json +14 -17
  22. package/data/craftbook-templates/na/narrated-slideshow/versions/1.1.4/craftbook.json +314 -0
  23. package/data/craftbook-templates/na/narrated-slideshow/versions/1.1.4/test.json +89 -0
  24. package/data/craftbook-templates/pe/pest-diagnosis/versions/1.0.3/test.json +12 -15
  25. package/data/craftbook-templates/pl/playtest-report/versions/1.0.3/test.json +9 -12
  26. package/data/craftbook-templates/po/powerpoint-deck/versions/1.7.10/craftbook.json +581 -0
  27. package/data/craftbook-templates/po/powerpoint-deck/versions/1.7.10/test.json +240 -0
  28. package/data/craftbook-templates/pr/practice-exam/versions/1.0.3/test.json +3 -6
  29. package/data/craftbook-templates/pr/practice-session/versions/1.0.3/test.json +6 -9
  30. package/data/craftbook-templates/pr/price-tracker/versions/1.0.3/craftbook.json +0 -8
  31. package/data/craftbook-templates/re/receipt-intake/versions/1.0.3/test.json +8 -11
  32. package/data/craftbook-templates/re/recipe-capture/versions/1.0.3/test.json +8 -11
  33. package/data/craftbook-templates/re/record-a-relative/versions/1.0.3/test.json +9 -11
  34. package/data/craftbook-templates/re/recurring-invoice-run/versions/1.0.4/craftbook.json +0 -16
  35. package/data/craftbook-templates/re/report-pdf/versions/1.1.4/craftbook.json +315 -0
  36. package/data/craftbook-templates/re/report-pdf/versions/1.1.4/test.json +101 -0
  37. package/data/craftbook-templates/re/research-to-document/versions/1.2.4/craftbook.json +386 -0
  38. package/data/craftbook-templates/re/research-to-document/versions/1.2.4/test.json +242 -0
  39. package/data/craftbook-templates/ro/rough-cut-assembly/versions/1.0.4/test.json +9 -12
  40. package/data/craftbook-templates/so/source-quality-audit/versions/1.0.3/test.json +15 -18
  41. package/data/craftbook-templates/sq/sql-analysis/versions/1.0.3/craftbook.json +0 -8
  42. package/data/craftbook-templates/th/thank-you-sweep/versions/1.0.3/test.json +5 -8
  43. package/data/craftbook-templates/ti/tileset-batch/versions/1.0.3/test.json +5 -8
  44. package/data/craftbook-templates/we/weak-spot-drill/versions/1.0.3/test.json +5 -8
  45. package/data/craftbook-templates/we/weekly-walkthrough/versions/1.0.3/test.json +13 -16
  46. package/data/toolsets/do/docblocks/versions/2.6.0/manifest.json +95 -0
  47. package/data/toolsets/index.json +1 -1
  48. package/package.json +1 -1
@@ -0,0 +1,240 @@
1
+ {
2
+ "schemaVersion": 1,
3
+ "title": "PowerPoint source-acquisition, outline parity, and DocBlocks production",
4
+ "objective": "Measure the whole PowerPoint route in one eval: acquire and cite sources, hold the deck to its own outline, and then actually PRODUCE the binary — 1.5.0 graded only the Markdown and 1.4.0 graded only the production, so each on its own let half the recipe pass unverified.",
5
+ "tags": [
6
+ "corpus",
7
+ "research",
8
+ "grounding",
9
+ "external",
10
+ "documents"
11
+ ],
12
+ "prompt": "Create a PowerPoint from source/brief.md for operations leads. Use 6-8 slides, preserve the supplied facts exactly, and close with next actions. Do not create HTML.\n\nProduce the finished file through the DocBlocks tools on your roster: `list_roots`, then `convert_document` on the approved `powerpoint/eval/deck.md`, `preview_document` to confirm it rendered, and `save_artifact` to write the deck to `deliverables/d-day.pptx`. Markdown or hand-built OOXML written to that path is not a substitute for the real file.",
13
+ "setup": {
14
+ "projectName": "PowerPoint Grounding Eval",
15
+ "about": "The exact source file is authoritative; the deck must keep the locked outline and its facts.",
16
+ "missionObjectives": "Read source/brief.md, cite it, lock a numbered outline, and create matching slide-structured Markdown ready for editable PPTX conversion.",
17
+ "craftbookParams": {
18
+ "outputPath": "deliverables/d-day.pptx",
19
+ "sourcePath": "source/brief.md",
20
+ "topic": "Boreal Desk Returns Pilot",
21
+ "content": "",
22
+ "audience": "operations leads",
23
+ "outputDir": "powerpoint/eval"
24
+ },
25
+ "files": [
26
+ {
27
+ "path": "source/brief.md",
28
+ "content": "# Boreal Desk Returns Pilot\n\nAudience: operations leads.\n\nFacts:\n- Pilot coverage: 18 SKUs.\n- Median first response: 18 hours to 6 hours.\n- Preventable refund leakage: 14.2% to 8.9%.\n- Top unresolved complaint: status silence after photo submission.\n- Next actions: automated status emails, barcode-exception training, weekly Finance exception export.\n\nDo not invent other metrics."
29
+ }
30
+ ],
31
+ "worker": {
32
+ "name": "Mara",
33
+ "role": "Researcher"
34
+ }
35
+ },
36
+ "mocks": [
37
+ {
38
+ "kind": "mcp",
39
+ "id": "docblocks",
40
+ "toolsetId": "docblocks",
41
+ "description": "Deterministic fake DocBlocks MCP for final presentation conversion, preview, and saving.",
42
+ "tools": [
43
+ {
44
+ "name": "list_roots",
45
+ "description": "List the workspace read root and artifacts write root.",
46
+ "resultTemplate": {
47
+ "roots": [
48
+ {
49
+ "id": "workspace",
50
+ "name": "workspace",
51
+ "capabilities": [
52
+ "read"
53
+ ]
54
+ },
55
+ {
56
+ "id": "artifacts",
57
+ "name": "artifacts",
58
+ "capabilities": [
59
+ "read",
60
+ "write"
61
+ ]
62
+ }
63
+ ]
64
+ }
65
+ },
66
+ {
67
+ "name": "get_authoring_context",
68
+ "description": "Return optional PPTX authoring guidance.",
69
+ "resultTemplate": {
70
+ "targetFormat": "pptx",
71
+ "guidance": "Use one H1 per slide and editable-native fidelity."
72
+ }
73
+ },
74
+ {
75
+ "name": "convert_document",
76
+ "description": "Convert approved Markdown to a deterministic PPTX artifact URI.",
77
+ "resultTemplate": {
78
+ "artifacts": [
79
+ {
80
+ "format": "pptx",
81
+ "uri": "mock://docblocks/deck.pptx",
82
+ "sha256": "1111111111111111111111111111111111111111111111111111111111111111"
83
+ }
84
+ ],
85
+ "diagnostics": []
86
+ }
87
+ },
88
+ {
89
+ "name": "preview_document",
90
+ "description": "Return deterministic slide-preview evidence.",
91
+ "resultTemplate": {
92
+ "slides": 7,
93
+ "overflow": false,
94
+ "tinyText": false,
95
+ "previewed": true
96
+ }
97
+ },
98
+ {
99
+ "name": "save_artifact",
100
+ "description": "Save the converted PPTX into the project artifacts drawer.",
101
+ "resultTemplate": {
102
+ "ok": true,
103
+ "bytes": 2400,
104
+ "sha256": "2222222222222222222222222222222222222222222222222222222222222222"
105
+ },
106
+ "writeFixture": {
107
+ "surface": "artifact",
108
+ "pathArgument": "destination.path",
109
+ "fixture": "minimal-pptx"
110
+ }
111
+ }
112
+ ]
113
+ }
114
+ ],
115
+ "success": {
116
+ "summary": "The source packet cites the exact brief, the outline is numbered, powerpoint/eval/deck.md matches every outline slide while preserving the supplied facts, and a real ZIP-shaped PPTX — not the Markdown source — lands at the requested workspace path via DocBlocks.",
117
+ "deliverables": [
118
+ {
119
+ "path": "{{task.dir}}/sources.md",
120
+ "kind": "markdown-doc",
121
+ "minBytes": 500,
122
+ "artifact": true,
123
+ "checks": [
124
+ {
125
+ "kind": "citationsResolve",
126
+ "file": "{{task.dir}}/sources.md",
127
+ "artifact": true,
128
+ "minCitations": 1
129
+ }
130
+ ]
131
+ },
132
+ {
133
+ "path": "{{task.dir}}/outline.md",
134
+ "kind": "markdown-doc",
135
+ "minBytes": 500,
136
+ "artifact": true,
137
+ "checks": [
138
+ {
139
+ "kind": "contains",
140
+ "file": "{{task.dir}}/outline.md",
141
+ "pattern": "(?:^|\\n)#{2,6}\\s+(?:Slide\\s+)?1(?:\\s*[.:\\-–—]\\s*|\\s+)\\S",
142
+ "flags": "i",
143
+ "label": "a numbered Slide 1 heading",
144
+ "artifact": true
145
+ }
146
+ ]
147
+ },
148
+ {
149
+ "path": "powerpoint/eval/deck.md",
150
+ "kind": "markdown-doc",
151
+ "minBytes": 700,
152
+ "checks": [
153
+ {
154
+ "kind": "markdownHeadingsMatch",
155
+ "file": "powerpoint/eval/deck.md",
156
+ "outlineFile": "{{task.dir}}/outline.md",
157
+ "outlineArtifact": true
158
+ },
159
+ {
160
+ "kind": "citationsResolve",
161
+ "file": "powerpoint/eval/deck.md",
162
+ "minCitations": 1
163
+ },
164
+ {
165
+ "kind": "contains",
166
+ "file": "powerpoint/eval/deck.md",
167
+ "pattern": "18\\s+SKUs|18\\s+hours|6\\s+hours|14\\.2%|8\\.9%",
168
+ "flags": "i",
169
+ "label": "the supplied figures, verbatim"
170
+ },
171
+ {
172
+ "kind": "contains",
173
+ "file": "powerpoint/eval/deck.md",
174
+ "pattern": "automated status emails|barcode-exception training|weekly Finance exception export",
175
+ "flags": "i",
176
+ "label": "the supplied next actions"
177
+ },
178
+ {
179
+ "kind": "notContains",
180
+ "file": "powerpoint/eval/deck.md",
181
+ "pattern": "<html|<script|<style",
182
+ "flags": "i"
183
+ }
184
+ ]
185
+ },
186
+ {
187
+ "path": "deliverables/d-day.pptx",
188
+ "kind": "slide-deck",
189
+ "minBytes": 1000,
190
+ "checks": [
191
+ {
192
+ "kind": "binaryDocument",
193
+ "file": "deliverables/d-day.pptx",
194
+ "minBytes": 1000
195
+ }
196
+ ]
197
+ }
198
+ ],
199
+ "mocks": [
200
+ {
201
+ "service": "docblocks",
202
+ "requiredTools": [
203
+ "convert_document",
204
+ "preview_document",
205
+ "save_artifact"
206
+ ]
207
+ }
208
+ ]
209
+ },
210
+ "rubric": {
211
+ "artifact": {
212
+ "path": "powerpoint/eval/deck.md",
213
+ "kind": "markdown"
214
+ },
215
+ "axes": [
216
+ {
217
+ "name": "source-acquisition",
218
+ "description": "The workflow read and cited the exact supplied source before outlining."
219
+ },
220
+ {
221
+ "name": "outline-parity",
222
+ "description": "Every numbered outline slide appears exactly once as a same-title H1 in powerpoint/eval/deck.md, in order."
223
+ },
224
+ {
225
+ "name": "grounding",
226
+ "description": "Every metric and action comes from source/brief.md and no extra metric was invented."
227
+ },
228
+ {
229
+ "name": "convertibility",
230
+ "description": "One H1 per slide and concise block content make the source ready for DocBlocks PPTX conversion."
231
+ }
232
+ ]
233
+ },
234
+ "qualityFocus": [
235
+ "successful exact-source retrieval",
236
+ "resolvable citations",
237
+ "exact outline-to-deck slide parity",
238
+ "no HTML intermediary"
239
+ ]
240
+ }
@@ -19,14 +19,11 @@
19
19
  "worker": {
20
20
  "name": "Milan",
21
21
  "role": "Developer"
22
- },
23
- "craftbookParams": {
24
- "workPath": "tasks/eval"
25
22
  }
26
23
  },
27
24
  "mocks": [],
28
25
  "success": {
29
- "summary": "exam.html is a timed, self-scoring exam built from the deck with the record's weak topics weighted up; tasks/eval/answer-key.md explains every answer.",
26
+ "summary": "exam.html is a timed, self-scoring exam built from the deck with the record's weak topics weighted up; answer-key.md in this task's own artifacts working folder explains every answer.",
30
27
  "deliverables": [
31
28
  {
32
29
  "path": "exam.html",
@@ -73,13 +70,13 @@
73
70
  ]
74
71
  },
75
72
  {
76
- "path": "tasks/eval/answer-key.md",
73
+ "path": "{{task.dir}}/answer-key.md",
77
74
  "kind": "markdown-notes",
78
75
  "minBytes": 800,
79
76
  "checks": [
80
77
  {
81
78
  "kind": "contains",
82
- "file": "tasks/eval/answer-key.md",
79
+ "file": "{{task.dir}}/answer-key.md",
83
80
  "pattern": "card|deck",
84
81
  "flags": "i",
85
82
  "label": "key points back to the deck",
@@ -23,30 +23,27 @@
23
23
  "worker": {
24
24
  "name": "Ruben",
25
25
  "role": "Coach"
26
- },
27
- "craftbookParams": {
28
- "workPath": "tasks/eval"
29
26
  }
30
27
  },
31
28
  "mocks": [],
32
29
  "success": {
33
- "summary": "Today's session is appended to practice.json as a well-formed entry, and tasks/eval/report.md closes the day with the streak state and a concrete, targeted plan for tomorrow.",
30
+ "summary": "Today's session is appended to practice.json as a well-formed entry, and report.md in this task's own artifacts working folder closes the day with the streak state and a concrete, targeted plan for tomorrow.",
34
31
  "deliverables": [
35
32
  {
36
- "path": "tasks/eval/report.md",
33
+ "path": "{{task.dir}}/report.md",
37
34
  "kind": "markdown-report",
38
35
  "minBytes": 800,
39
36
  "checks": [
40
37
  {
41
38
  "kind": "contains",
42
- "file": "tasks/eval/report.md",
39
+ "file": "{{task.dir}}/report.md",
43
40
  "pattern": "(?:^|\\n)#{1,3}\\s+\\S",
44
41
  "flags": "i",
45
42
  "artifact": true
46
43
  },
47
44
  {
48
45
  "kind": "contains",
49
- "file": "tasks/eval/report.md",
46
+ "file": "{{task.dir}}/report.md",
50
47
  "pattern": "tomorrow|next session",
51
48
  "flags": "i",
52
49
  "label": "tomorrow's plan present",
@@ -54,7 +51,7 @@
54
51
  },
55
52
  {
56
53
  "kind": "contains",
57
- "file": "tasks/eval/report.md",
54
+ "file": "{{task.dir}}/report.md",
58
55
  "pattern": "bpm|bar\\s*\\d+",
59
56
  "flags": "i",
60
57
  "label": "concrete tempo or bar targets",
@@ -91,7 +88,7 @@
91
88
  },
92
89
  "rubric": {
93
90
  "artifact": {
94
- "path": "tasks/eval/report.md",
91
+ "path": "{{task.dir}}/report.md",
95
92
  "kind": "markdown"
96
93
  },
97
94
  "axes": [
@@ -104,14 +104,6 @@
104
104
  "kind": "sniff",
105
105
  "file": "price_tracker.py",
106
106
  "sniff": "nonempty"
107
- },
108
- {
109
- "kind": "esmImports",
110
- "file": "price_tracker.py"
111
- },
112
- {
113
- "kind": "sourceParses",
114
- "file": "price_tracker.py"
115
107
  }
116
108
  ],
117
109
  "onReject": "build",
@@ -8,8 +8,8 @@
8
8
  "prompt": "i dropped this months recipts into inbox/ — can you get them into the shoebox and flag anything that looks off?",
9
9
  "setup": {
10
10
  "projectName": "Tax Shoebox — Receipt Intake Eval",
11
- "about": "Self-contained eval project for receipt-intake. The intake rail has already pre-extracted each snapped receipt photo into a plain-text note under inbox/ (vendor, date, total, and any handwriting). The ledger lives at ledger.json in the workspace; the run's write-up goes to tasks/eval/report.md.",
12
- "missionObjectives": "Use the Receipt Intake craftbook/template, read the seeded local fixtures only, and finish with an updated ledger.json plus tasks/eval/report.md — no network calls, real credentials, or live services.",
11
+ "about": "Self-contained eval project for receipt-intake. The intake rail has already pre-extracted each snapped receipt photo into a plain-text note under inbox/ (vendor, date, total, and any handwriting). The ledger lives at ledger.json in the workspace; the run's write-up goes to report.md in this task's own artifacts working folder.",
12
+ "missionObjectives": "Use the Receipt Intake craftbook/template, read the seeded local fixtures only, and finish with an updated ledger.json plus report.md in this task's own artifacts working folder — no network calls, real credentials, or live services.",
13
13
  "files": [
14
14
  {
15
15
  "path": "inbox/receipt-01.txt",
@@ -39,30 +39,27 @@
39
39
  "worker": {
40
40
  "name": "Nora",
41
41
  "role": "Clerk"
42
- },
43
- "craftbookParams": {
44
- "workPath": "tasks/eval"
45
42
  }
46
43
  },
47
44
  "mocks": [],
48
45
  "success": {
49
- "summary": "The ledger gains schema-clean entries whose amounts match the receipts exactly, and tasks/eval/report.md surfaces the duplicate and the owner question instead of guessing.",
46
+ "summary": "The ledger gains schema-clean entries whose amounts match the receipts exactly, and report.md in this task's own artifacts working folder surfaces the duplicate and the owner question instead of guessing.",
50
47
  "deliverables": [
51
48
  {
52
- "path": "tasks/eval/report.md",
49
+ "path": "{{task.dir}}/report.md",
53
50
  "kind": "markdown-report",
54
51
  "minBytes": 600,
55
52
  "checks": [
56
53
  {
57
54
  "kind": "contains",
58
- "file": "tasks/eval/report.md",
55
+ "file": "{{task.dir}}/report.md",
59
56
  "pattern": "(?:^|\\n)#{1,3}\\s+\\S",
60
57
  "flags": "i",
61
58
  "artifact": true
62
59
  },
63
60
  {
64
61
  "kind": "contains",
65
- "file": "tasks/eval/report.md",
62
+ "file": "{{task.dir}}/report.md",
66
63
  "pattern": "question|unsure|unclear|flag",
67
64
  "flags": "i",
68
65
  "label": "ambiguous receipt surfaced as an owner question, not a guess",
@@ -70,7 +67,7 @@
70
67
  },
71
68
  {
72
69
  "kind": "contains",
73
- "file": "tasks/eval/report.md",
70
+ "file": "{{task.dir}}/report.md",
74
71
  "pattern": "duplicate|already (in|entered|logged)|double[- ]?count",
75
72
  "flags": "i",
76
73
  "label": "the repeat Office Depot receipt is flagged as a likely duplicate",
@@ -126,7 +123,7 @@
126
123
  },
127
124
  "rubric": {
128
125
  "artifact": {
129
- "path": "tasks/eval/report.md",
126
+ "path": "{{task.dir}}/report.md",
130
127
  "kind": "markdown"
131
128
  },
132
129
  "axes": [
@@ -8,8 +8,8 @@
8
8
  "prompt": "scanned two of omas cards — the transcriptions are in inbox/card-1.txt and inbox/card-2.txt. can you get them into the book propperly?",
9
9
  "setup": {
10
10
  "projectName": "Family Recipe Book — Card Capture Eval",
11
- "about": "Self-contained eval project for recipe-capture. The card photos have already been pre-extracted into plain-text scan notes under inbox/ (the text as written, plus margin notes). Captured recipes go under recipes/ and are recorded in recipes.json; the capture log goes to tasks/eval/report.md.",
12
- "missionObjectives": "Use the Capture a Recipe Card craftbook/template, work only from the seeded card notes, and finish with the recipe files, an updated recipes.json, and tasks/eval/report.md — no network calls, real credentials, or live services.",
11
+ "about": "Self-contained eval project for recipe-capture. The card photos have already been pre-extracted into plain-text scan notes under inbox/ (the text as written, plus margin notes). Captured recipes go under recipes/ and are recorded in recipes.json; the capture log goes to report.md in this task's own artifacts working folder.",
12
+ "missionObjectives": "Use the Capture a Recipe Card craftbook/template, work only from the seeded card notes, and finish with the recipe files, an updated recipes.json, and report.md in this task's own artifacts working folder — no network calls, real credentials, or live services.",
13
13
  "files": [
14
14
  {
15
15
  "path": "inbox/card-1.txt",
@@ -27,9 +27,6 @@
27
27
  "worker": {
28
28
  "name": "Bep",
29
29
  "role": "Archivist"
30
- },
31
- "craftbookParams": {
32
- "workPath": "tasks/eval"
33
30
  }
34
31
  },
35
32
  "mocks": [],
@@ -37,34 +34,34 @@
37
34
  "summary": "Both cards become recipe files under recipes/ with provenance kept beside the food, the store records each capture, and the log flags what needs a test-cook.",
38
35
  "deliverables": [
39
36
  {
40
- "path": "tasks/eval/report.md",
37
+ "path": "{{task.dir}}/report.md",
41
38
  "kind": "markdown-report",
42
39
  "minBytes": 500,
43
40
  "checks": [
44
41
  {
45
42
  "kind": "contains",
46
- "file": "tasks/eval/report.md",
43
+ "file": "{{task.dir}}/report.md",
47
44
  "pattern": "(?:^|\\n)#{1,3}\\s+\\S",
48
45
  "flags": "i",
49
46
  "artifact": true
50
47
  },
51
48
  {
52
49
  "kind": "contains",
53
- "file": "tasks/eval/report.md",
50
+ "file": "{{task.dir}}/report.md",
54
51
  "pattern": "Oma|Riet",
55
52
  "label": "provenance carried into the capture log",
56
53
  "artifact": true
57
54
  },
58
55
  {
59
56
  "kind": "contains",
60
- "file": "tasks/eval/report.md",
57
+ "file": "{{task.dir}}/report.md",
61
58
  "pattern": "\\?",
62
59
  "label": "questions for the family are actually asked",
63
60
  "artifact": true
64
61
  },
65
62
  {
66
63
  "kind": "contains",
67
- "file": "tasks/eval/report.md",
64
+ "file": "{{task.dir}}/report.md",
68
65
  "pattern": "test[- ]?cook|try (it|the)|verify",
69
66
  "flags": "i",
70
67
  "label": "test-cook needs named",
@@ -106,7 +103,7 @@
106
103
  },
107
104
  "rubric": {
108
105
  "artifact": {
109
- "path": "tasks/eval/report.md",
106
+ "path": "{{task.dir}}/report.md",
110
107
  "kind": "markdown"
111
108
  },
112
109
  "axes": [
@@ -23,29 +23,26 @@
23
23
  "worker": {
24
24
  "name": "Teun",
25
25
  "role": "Genealogist"
26
- },
27
- "craftbookParams": {
28
- "workPath": "tasks/eval"
29
26
  }
30
27
  },
31
28
  "mocks": [],
32
29
  "success": {
33
- "summary": "The transcript is filed under interviews/, and tasks/eval/report.md extracts the facts with their quotes, surfaces the 1919-vs-1921 birth-year conflict as a conflict, keeps the uncertain brother story uncertain, and asks follow-up questions.",
30
+ "summary": "The transcript is filed under interviews/, and report.md in this task's own artifacts working folder extracts the facts with their quotes, surfaces the 1919-vs-1921 birth-year conflict as a conflict, keeps the uncertain brother story uncertain, and asks follow-up questions.",
34
31
  "deliverables": [
35
32
  {
36
- "path": "tasks/eval/report.md",
33
+ "path": "{{task.dir}}/report.md",
37
34
  "kind": "markdown-report",
38
35
  "minBytes": 1000,
39
36
  "checks": [
40
37
  {
41
38
  "kind": "contains",
42
- "file": "tasks/eval/report.md",
39
+ "file": "{{task.dir}}/report.md",
43
40
  "pattern": "(?:^|\\n)#{1,3}\\s+\\S",
44
41
  "flags": "i"
45
42
  },
46
43
  {
47
44
  "kind": "valuesSubsetOf",
48
- "file": "tasks/eval/report.md",
45
+ "file": "{{task.dir}}/report.md",
49
46
  "sourceFiles": [
50
47
  "recordings/oma-2026-07.txt",
51
48
  "tree.json"
@@ -56,18 +53,19 @@
56
53
  },
57
54
  {
58
55
  "kind": "contains",
59
- "file": "tasks/eval/report.md",
56
+ "file": "{{task.dir}}/report.md",
60
57
  "pattern": "conflict|differs|doesn.t match|discrepan|disagree",
61
58
  "flags": "i",
62
59
  "label": "the tree conflict is surfaced"
63
60
  },
64
61
  {
65
62
  "kind": "contains",
66
- "file": "tasks/eval/report.md",
63
+ "file": "{{task.dir}}/report.md",
67
64
  "pattern": "\\?",
68
65
  "label": "follow-up questions are real questions"
69
66
  }
70
- ]
67
+ ],
68
+ "artifact": true
71
69
  }
72
70
  ],
73
71
  "checks": [
@@ -83,7 +81,7 @@
83
81
  },
84
82
  "rubric": {
85
83
  "artifact": {
86
- "path": "tasks/eval/report.md",
84
+ "path": "{{task.dir}}/report.md",
87
85
  "kind": "markdown"
88
86
  },
89
87
  "axes": [
@@ -129,14 +129,6 @@
129
129
  "kind": "sniff",
130
130
  "file": "invoice_run.py",
131
131
  "sniff": "nonempty"
132
- },
133
- {
134
- "kind": "esmImports",
135
- "file": "invoice_run.py"
136
- },
137
- {
138
- "kind": "sourceParses",
139
- "file": "invoice_run.py"
140
132
  }
141
133
  ],
142
134
  "onReject": "build",
@@ -194,14 +186,6 @@
194
186
  "kind": "sniff",
195
187
  "file": "invoice_run.py",
196
188
  "sniff": "nonempty"
197
- },
198
- {
199
- "kind": "esmImports",
200
- "file": "invoice_run.py"
201
- },
202
- {
203
- "kind": "sourceParses",
204
- "file": "invoice_run.py"
205
189
  }
206
190
  ],
207
191
  "onReject": "verify",