@bendyline/gilde 0.1.71 → 0.1.73
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/data/craftbook-templates/ap/apply-review-findings/versions/1.0.3/craftbook.json +604 -0
- package/data/craftbook-templates/ap/apply-review-findings/versions/1.0.3/test.json +290 -0
- package/data/craftbook-templates/co/code-review/versions/1.0.2/craftbook.json +230 -0
- package/data/craftbook-templates/co/code-review/versions/1.0.2/test.json +252 -0
- package/data/craftbook-templates/co/content-accuracy-review/versions/1.1.0/craftbook.json +311 -0
- package/data/craftbook-templates/co/content-accuracy-review/versions/1.1.0/test.json +167 -0
- package/data/craftbook-templates/eb/ebook-compile/versions/1.1.0/craftbook.json +332 -0
- package/data/craftbook-templates/eb/ebook-compile/versions/1.1.0/test.json +111 -0
- package/data/craftbook-templates/fa/faq-from-docs/versions/1.1.0/craftbook.json +245 -0
- package/data/craftbook-templates/fa/faq-from-docs/versions/1.1.0/test.json +113 -0
- package/data/craftbook-templates/index.json +1 -1
- package/data/craftbook-templates/me/meeting-minutes/versions/1.1.0/craftbook.json +246 -0
- package/data/craftbook-templates/me/meeting-minutes/versions/1.1.0/test.json +113 -0
- package/data/craftbook-templates/me/meeting-notes-to-actions/versions/1.1.0/craftbook.json +245 -0
- package/data/craftbook-templates/me/meeting-notes-to-actions/versions/1.1.0/test.json +113 -0
- package/data/craftbook-templates/ni/nightly-fix-sweep/versions/1.0.2/craftbook.json +243 -0
- package/data/craftbook-templates/ni/nightly-fix-sweep/versions/1.0.2/test.json +120 -0
- package/data/craftbook-templates/po/powerpoint-deck/versions/1.7.12/craftbook.json +581 -0
- package/data/craftbook-templates/po/powerpoint-deck/versions/1.7.12/test.json +240 -0
- package/data/craftbook-templates/pr/press-release/versions/1.0.4/craftbook.json +281 -0
- package/data/craftbook-templates/pr/press-release/versions/1.0.4/test.json +356 -0
- package/data/craftbook-templates/st/standup-summary/versions/1.1.0/craftbook.json +249 -0
- package/data/craftbook-templates/st/standup-summary/versions/1.1.0/test.json +113 -0
- package/data/craftbook-templates/we/weekly-review/versions/1.0.4/craftbook.json +223 -0
- package/data/craftbook-templates/we/weekly-review/versions/1.0.4/test.json +110 -0
- package/package.json +1 -1
|
@@ -0,0 +1,113 @@
|
|
|
1
|
+
{
|
|
2
|
+
"schemaVersion": 1,
|
|
3
|
+
"title": "Meeting Notes to Action Items smoke eval",
|
|
4
|
+
"objective": "Self-contained smoke eval for the Meeting Notes to Action Items craftbook using the corpus generic harness.",
|
|
5
|
+
"tags": [
|
|
6
|
+
"corpus"
|
|
7
|
+
],
|
|
8
|
+
"prompt": "We need a meeting notes to action items for the returns-desk work. The backgound info is in source/brief.md — have a look and write it up in report.md.",
|
|
9
|
+
"setup": {
|
|
10
|
+
"projectName": "Meeting Notes to Action Items Eval",
|
|
11
|
+
"about": "Self-contained eval project for meeting-notes-to-actions. Seeded inputs are under workspace/source or workspace/fixtures; final deliverable is workspace/report.md.",
|
|
12
|
+
"missionObjectives": "Use the Meeting Notes to Action Items craftbook/template, read the seeded local fixtures, and write report.md without network calls, real credentials, or live services.",
|
|
13
|
+
"files": [
|
|
14
|
+
{
|
|
15
|
+
"path": "source/brief.md",
|
|
16
|
+
"content": "# Meeting Notes to Action Items Eval Brief\n\nClient: Boreal Desk, a home-office accessories company.\nAudience: operations leads who need an artifact they can use this week.\n\nFixed source facts for grounding:\n- The returns desk pilot covered 18 SKUs.\n- Median first response improved from 18 hours to 6 hours.\n- Preventable refund leakage fell from 14.2% to 8.9%.\n- The top unresolved complaint is status silence after photo submission.\n- Required next actions are automated status emails, barcode-exception training, and a weekly Finance exception export.\n\nUse these facts when the task asks for prose, analysis, copy, UI content, or test data. Do not use live web services, real credentials, or current outside data.\n\nCraftbook under test: meeting-notes-to-actions - Meeting Notes to Action Items.\n"
|
|
17
|
+
}
|
|
18
|
+
],
|
|
19
|
+
"worker": {
|
|
20
|
+
"name": "Jules",
|
|
21
|
+
"role": "Writer"
|
|
22
|
+
},
|
|
23
|
+
"craftbookParams": {
|
|
24
|
+
"source": "source/brief.md"
|
|
25
|
+
}
|
|
26
|
+
},
|
|
27
|
+
"mocks": [],
|
|
28
|
+
"success": {
|
|
29
|
+
"summary": "report.md is a source-grounded markdown artifact with required facts and actions.",
|
|
30
|
+
"deliverables": [
|
|
31
|
+
{
|
|
32
|
+
"path": "report.md",
|
|
33
|
+
"kind": "markdown-report",
|
|
34
|
+
"minBytes": 1000,
|
|
35
|
+
"checks": [
|
|
36
|
+
{
|
|
37
|
+
"kind": "contains",
|
|
38
|
+
"file": "report.md",
|
|
39
|
+
"pattern": "(?:^|\\n)#{1,3}\\s+\\S",
|
|
40
|
+
"flags": "i"
|
|
41
|
+
},
|
|
42
|
+
{
|
|
43
|
+
"kind": "contains",
|
|
44
|
+
"file": "report.md",
|
|
45
|
+
"pattern": "source/brief\\.md|Brief",
|
|
46
|
+
"flags": "i",
|
|
47
|
+
"label": "cite or name the seeded source"
|
|
48
|
+
},
|
|
49
|
+
{
|
|
50
|
+
"kind": "contains",
|
|
51
|
+
"file": "report.md",
|
|
52
|
+
"pattern": "18\\b[\\s\\S]{0,30}\\bSKUs",
|
|
53
|
+
"flags": "i",
|
|
54
|
+
"label": "include the 18-SKU pilot scope"
|
|
55
|
+
},
|
|
56
|
+
{
|
|
57
|
+
"kind": "contains",
|
|
58
|
+
"file": "report.md",
|
|
59
|
+
"pattern": "18\\s*hours|6\\s*hours",
|
|
60
|
+
"flags": "i"
|
|
61
|
+
},
|
|
62
|
+
{
|
|
63
|
+
"kind": "contains",
|
|
64
|
+
"file": "report.md",
|
|
65
|
+
"pattern": "14\\.2%|8\\.9%",
|
|
66
|
+
"flags": "i"
|
|
67
|
+
},
|
|
68
|
+
{
|
|
69
|
+
"kind": "contains",
|
|
70
|
+
"file": "report.md",
|
|
71
|
+
"pattern": "status silence|photo submission",
|
|
72
|
+
"flags": "i"
|
|
73
|
+
},
|
|
74
|
+
{
|
|
75
|
+
"kind": "contains",
|
|
76
|
+
"file": "report.md",
|
|
77
|
+
"pattern": "automated status emails|barcode|Finance",
|
|
78
|
+
"flags": "i"
|
|
79
|
+
}
|
|
80
|
+
]
|
|
81
|
+
}
|
|
82
|
+
]
|
|
83
|
+
},
|
|
84
|
+
"rubric": {
|
|
85
|
+
"artifact": {
|
|
86
|
+
"path": "report.md",
|
|
87
|
+
"kind": "markdown"
|
|
88
|
+
},
|
|
89
|
+
"axes": [
|
|
90
|
+
{
|
|
91
|
+
"name": "grounding",
|
|
92
|
+
"description": "Seeded facts appear faithfully and the source is cited."
|
|
93
|
+
},
|
|
94
|
+
{
|
|
95
|
+
"name": "structure",
|
|
96
|
+
"description": "Sections progress logically for the artifact class."
|
|
97
|
+
},
|
|
98
|
+
{
|
|
99
|
+
"name": "completeness",
|
|
100
|
+
"description": "Required elements (risks, next actions, scope) are all present."
|
|
101
|
+
},
|
|
102
|
+
{
|
|
103
|
+
"name": "tone",
|
|
104
|
+
"description": "The register fits the audience and artifact class."
|
|
105
|
+
}
|
|
106
|
+
]
|
|
107
|
+
},
|
|
108
|
+
"qualityFocus": [
|
|
109
|
+
"source-grounded prose",
|
|
110
|
+
"section structure",
|
|
111
|
+
"next-action clarity"
|
|
112
|
+
]
|
|
113
|
+
}
|
|
@@ -0,0 +1,243 @@
|
|
|
1
|
+
{
|
|
2
|
+
"id": "nightly-fix-sweep",
|
|
3
|
+
"name": "Nightly Fix Sweep",
|
|
4
|
+
"description": "Turn a batch of open code findings into reviewable change proposals. The host triages the leads against the current code — a lead that no longer matches the file, or that needs a judgement only the owner can make, is legitimately left out — then clusters what belongs together as ONE change (a fix that spans a file and its caller is one cluster, not two) and fans out one drafting shard per cluster. Each shard makes the smallest correct change for its leads and explains it under Problem, Change, Risk, and How to verify. Built for unattended night runs: proposals are what the user reviews and applies in the morning, and the project's files are never touched by the sweep itself.",
|
|
5
|
+
"entryStepId": "triage",
|
|
6
|
+
"triggers": [
|
|
7
|
+
"sweep the open findings",
|
|
8
|
+
"nightly fixes",
|
|
9
|
+
"draft fixes for the open issues",
|
|
10
|
+
"fix the boekwachter findings"
|
|
11
|
+
],
|
|
12
|
+
"runModes": {
|
|
13
|
+
"nightShift": "recommended"
|
|
14
|
+
},
|
|
15
|
+
"paramSchema": {
|
|
16
|
+
"type": "object",
|
|
17
|
+
"properties": {
|
|
18
|
+
"workPath": {
|
|
19
|
+
"type": "string",
|
|
20
|
+
"title": "Working folder",
|
|
21
|
+
"description": "Per-task working folder in the artifacts drawer. Defaults to this task's own folder so runs never collide; override with a stable name when you deliberately want runs to share files.",
|
|
22
|
+
"default": "{{task.dir}}"
|
|
23
|
+
},
|
|
24
|
+
"leads": {
|
|
25
|
+
"type": "string",
|
|
26
|
+
"askUser": false,
|
|
27
|
+
"title": "Leads",
|
|
28
|
+
"description": "Comma-separated finding refs to sweep (e.g. BW-3,BW-8). Leave empty when the task description carries the leads.",
|
|
29
|
+
"default": ""
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
},
|
|
33
|
+
"steps": [
|
|
34
|
+
{
|
|
35
|
+
"id": "triage",
|
|
36
|
+
"name": "Triage the leads into clusters",
|
|
37
|
+
"prompt": "You have been handed open findings to sweep: {{leads}}. The task description may carry more detail per lead.\n\nRead the affected files and judge each lead against the CURRENT code: real, already fixed, stale, or a judgement only the owner can make. Leaving a lead out is legitimate — say why rather than forcing a change to satisfy a stale review.\n\nCluster what belongs together as ONE change: a fix that spans a file and its caller is one cluster, not two — splitting it would hand the user two half-changes neither of which stands alone. At most 8 clusters; prefer fewer, focused ones.\n\nWrite ONE `write_task_note` starting with the line `## Triage`: per lead, whether you will fix it and which cluster it belongs to, with reasons for anything left out.\n\nThen write the cluster list to the artifact `{{workPath}}/clusters.json` with ONE `write_artifact` call: a JSON array where each entry is an object with exactly these string fields — `slug` (short kebab-case name for the cluster, e.g. \"auth-null-guard\"), `issueRefs` (the refs in that cluster, comma-separated), and `focus` (one sentence on what that cluster should change). If nothing is worth fixing, write an empty array `[]` and say why in your note.",
|
|
38
|
+
"suggestedRole": "developer",
|
|
39
|
+
"capabilityFloor": "medium",
|
|
40
|
+
"advanceWhen": {
|
|
41
|
+
"file": "{{workPath}}/clusters.json",
|
|
42
|
+
"minBytes": 2,
|
|
43
|
+
"sniff": "json-valid",
|
|
44
|
+
"artifact": true
|
|
45
|
+
},
|
|
46
|
+
"gate": {
|
|
47
|
+
"at": "completion",
|
|
48
|
+
"checks": [
|
|
49
|
+
{
|
|
50
|
+
"kind": "sniff",
|
|
51
|
+
"file": "{{workPath}}/clusters.json",
|
|
52
|
+
"sniff": "json-valid",
|
|
53
|
+
"artifact": true
|
|
54
|
+
}
|
|
55
|
+
],
|
|
56
|
+
"scripts": [
|
|
57
|
+
{
|
|
58
|
+
"name": "checkTaskNoteContains",
|
|
59
|
+
"scope": "standard",
|
|
60
|
+
"inputs": {
|
|
61
|
+
"taskRef": "{{task.ref}}",
|
|
62
|
+
"pattern": "##\\s*Triage"
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
],
|
|
66
|
+
"onReject": "triage",
|
|
67
|
+
"maxAttempts": 3
|
|
68
|
+
},
|
|
69
|
+
"next": "fanout",
|
|
70
|
+
"toolPolicy": {
|
|
71
|
+
"disallowBuiltinToolsets": [
|
|
72
|
+
"ai-apps",
|
|
73
|
+
"archives",
|
|
74
|
+
"audio",
|
|
75
|
+
"browser-automation",
|
|
76
|
+
"craftbooks",
|
|
77
|
+
"data-tables",
|
|
78
|
+
"entity-intel",
|
|
79
|
+
"git",
|
|
80
|
+
"image-intel",
|
|
81
|
+
"images",
|
|
82
|
+
"role-delegation",
|
|
83
|
+
"role-delegation-escalation",
|
|
84
|
+
"security-intel",
|
|
85
|
+
"team-management",
|
|
86
|
+
"videos",
|
|
87
|
+
"web",
|
|
88
|
+
"workspace-fs-write"
|
|
89
|
+
],
|
|
90
|
+
"outputMedium": "artifact",
|
|
91
|
+
"additionalOutputMedia": [
|
|
92
|
+
"task-note"
|
|
93
|
+
]
|
|
94
|
+
}
|
|
95
|
+
},
|
|
96
|
+
{
|
|
97
|
+
"id": "fanout",
|
|
98
|
+
"name": "Draft the proposals",
|
|
99
|
+
"prompt": "Your clusters are being drafted, one proposal per cluster. Wait for the shards to finish, then call `advance_task_step`.",
|
|
100
|
+
"next": "collect",
|
|
101
|
+
"spawnFanout": true,
|
|
102
|
+
"toolPolicy": {
|
|
103
|
+
"disallowBuiltinToolsets": [
|
|
104
|
+
"ai-apps",
|
|
105
|
+
"archives",
|
|
106
|
+
"artifacts",
|
|
107
|
+
"audio",
|
|
108
|
+
"browser-automation",
|
|
109
|
+
"code-execution",
|
|
110
|
+
"craftbooks",
|
|
111
|
+
"data-tables",
|
|
112
|
+
"entity-intel",
|
|
113
|
+
"git",
|
|
114
|
+
"image-intel",
|
|
115
|
+
"images",
|
|
116
|
+
"role-delegation",
|
|
117
|
+
"role-delegation-escalation",
|
|
118
|
+
"security-intel",
|
|
119
|
+
"team-management",
|
|
120
|
+
"videos",
|
|
121
|
+
"web",
|
|
122
|
+
"workspace-fs-write"
|
|
123
|
+
],
|
|
124
|
+
"outputMedium": "none"
|
|
125
|
+
}
|
|
126
|
+
},
|
|
127
|
+
{
|
|
128
|
+
"id": "collect",
|
|
129
|
+
"name": "Hand over",
|
|
130
|
+
"prompt": "The sweep is done. Write one short `write_task_note` naming the proposals your crew drafted (by cluster) and any leads deliberately left alone with their reasons, then call `advance_task_step`. Never claim anything was fixed or applied — these are proposals for the user to review.",
|
|
131
|
+
"terminal": true,
|
|
132
|
+
"toolPolicy": {
|
|
133
|
+
"disallowBuiltinToolsets": [
|
|
134
|
+
"ai-apps",
|
|
135
|
+
"archives",
|
|
136
|
+
"artifacts",
|
|
137
|
+
"audio",
|
|
138
|
+
"browser-automation",
|
|
139
|
+
"code-execution",
|
|
140
|
+
"craftbooks",
|
|
141
|
+
"data-tables",
|
|
142
|
+
"entity-intel",
|
|
143
|
+
"git",
|
|
144
|
+
"image-intel",
|
|
145
|
+
"images",
|
|
146
|
+
"role-delegation",
|
|
147
|
+
"role-delegation-escalation",
|
|
148
|
+
"security-intel",
|
|
149
|
+
"team-management",
|
|
150
|
+
"videos",
|
|
151
|
+
"web",
|
|
152
|
+
"workspace-fs-write"
|
|
153
|
+
],
|
|
154
|
+
"outputMedium": "task-note"
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
],
|
|
158
|
+
"spawn": {
|
|
159
|
+
"overFile": "{{workPath}}/clusters.json",
|
|
160
|
+
"overArtifact": true,
|
|
161
|
+
"entryStepId": "draft",
|
|
162
|
+
"steps": [
|
|
163
|
+
{
|
|
164
|
+
"id": "draft",
|
|
165
|
+
"name": "Draft the change",
|
|
166
|
+
"prompt": "Your cluster is {{issueRefs}} ({{slug}}). What it should change: {{focus}}\n\nRead the affected files first, then make the smallest correct change for those leads and nothing else. Use `read_file`, `write_file`, and `replace_in_file` exactly as you always do. Keep it focused — a change a reviewer can read in a minute gets applied; a sprawling one gets dismissed. If a lead turns out to be wrong once you are in the code, leave it alone and say so.\n\nThen write your explanation to the artifact `{{diffpack.dir}}/notes.md` in ONE `write_artifact` call, with exactly these four headings:\n\n## Problem\n## Change\n## Risk\n## How to verify\n\nUnder Change, describe what you altered and why, naming the refs. Under Risk, be honest about what you could not verify without running the code. Then call `advance_task_step`.",
|
|
167
|
+
"suggestedRole": "developer",
|
|
168
|
+
"capabilityFloor": "small",
|
|
169
|
+
"advanceWhen": {
|
|
170
|
+
"file": "{{diffpack.dir}}/notes.md",
|
|
171
|
+
"minBytes": 200,
|
|
172
|
+
"artifact": true
|
|
173
|
+
},
|
|
174
|
+
"gate": {
|
|
175
|
+
"at": "completion",
|
|
176
|
+
"checks": [
|
|
177
|
+
{
|
|
178
|
+
"kind": "contains",
|
|
179
|
+
"file": "{{diffpack.dir}}/notes.md",
|
|
180
|
+
"pattern": "##\\s+Problem",
|
|
181
|
+
"label": "Problem section",
|
|
182
|
+
"artifact": true
|
|
183
|
+
},
|
|
184
|
+
{
|
|
185
|
+
"kind": "contains",
|
|
186
|
+
"file": "{{diffpack.dir}}/notes.md",
|
|
187
|
+
"pattern": "##\\s+Change",
|
|
188
|
+
"label": "Change section",
|
|
189
|
+
"artifact": true
|
|
190
|
+
},
|
|
191
|
+
{
|
|
192
|
+
"kind": "contains",
|
|
193
|
+
"file": "{{diffpack.dir}}/notes.md",
|
|
194
|
+
"pattern": "##\\s+Risk",
|
|
195
|
+
"label": "Risk section",
|
|
196
|
+
"artifact": true
|
|
197
|
+
},
|
|
198
|
+
{
|
|
199
|
+
"kind": "contains",
|
|
200
|
+
"file": "{{diffpack.dir}}/notes.md",
|
|
201
|
+
"pattern": "##\\s+How to verify",
|
|
202
|
+
"label": "How to verify section",
|
|
203
|
+
"artifact": true
|
|
204
|
+
}
|
|
205
|
+
],
|
|
206
|
+
"onReject": "draft",
|
|
207
|
+
"maxAttempts": 3
|
|
208
|
+
},
|
|
209
|
+
"terminal": true,
|
|
210
|
+
"toolPolicy": {
|
|
211
|
+
"disallowBuiltinToolsets": [
|
|
212
|
+
"ai-apps",
|
|
213
|
+
"archives",
|
|
214
|
+
"audio",
|
|
215
|
+
"browser-automation",
|
|
216
|
+
"code-execution",
|
|
217
|
+
"craftbooks",
|
|
218
|
+
"data-tables",
|
|
219
|
+
"entity-intel",
|
|
220
|
+
"git",
|
|
221
|
+
"image-intel",
|
|
222
|
+
"images",
|
|
223
|
+
"role-delegation",
|
|
224
|
+
"role-delegation-escalation",
|
|
225
|
+
"security-intel",
|
|
226
|
+
"team-management",
|
|
227
|
+
"videos",
|
|
228
|
+
"web"
|
|
229
|
+
],
|
|
230
|
+
"outputMedium": "artifact",
|
|
231
|
+
"additionalOutputMedia": [
|
|
232
|
+
"workspace"
|
|
233
|
+
]
|
|
234
|
+
}
|
|
235
|
+
}
|
|
236
|
+
]
|
|
237
|
+
},
|
|
238
|
+
"diffpackCapable": true,
|
|
239
|
+
"capabilityFloor": "small",
|
|
240
|
+
"version": "1.0.2",
|
|
241
|
+
"releasedAt": "2026-09-24T00:00:00Z",
|
|
242
|
+
"minGezelVersion": "1.26236"
|
|
243
|
+
}
|
|
@@ -0,0 +1,120 @@
|
|
|
1
|
+
{
|
|
2
|
+
"schemaVersion": 1,
|
|
3
|
+
"title": "Nightly sweep drafts sealed proposals without touching the tree",
|
|
4
|
+
"objective": "The host triages two seeded findings into clusters and fans out drafting shards; each shard's edits land in a change proposal that seals on completion, the four-heading notes contract holds, and the workspace files stay byte-identical.",
|
|
5
|
+
"tags": [
|
|
6
|
+
"code",
|
|
7
|
+
"night-shift",
|
|
8
|
+
"proposals",
|
|
9
|
+
"fanout",
|
|
10
|
+
"tactical-fleet"
|
|
11
|
+
],
|
|
12
|
+
"prompt": "Run the Nightly Fix Sweep for the two open findings described in the task. LEAD-1: src/greet.js builds the greeting with a stray double space when no title is given. LEAD-2: src/farewell.js says 'Godbye' instead of 'Goodbye'. Draft the fixes as proposals.",
|
|
13
|
+
"setup": {
|
|
14
|
+
"projectName": "Sweep Fixture",
|
|
15
|
+
"about": "A tiny greeting library with two known low-risk defects, used to exercise the nightly proposal sweep.",
|
|
16
|
+
"managedWorkspaceWritePolicy": "deny",
|
|
17
|
+
"files": [
|
|
18
|
+
{
|
|
19
|
+
"path": "src/greet.js",
|
|
20
|
+
"content": "export function greet(name, title) {\n const prefix = title ? `${title} ` : ' ';\n return `Hello, ${prefix}${name}!`;\n}\n"
|
|
21
|
+
},
|
|
22
|
+
{
|
|
23
|
+
"path": "src/farewell.js",
|
|
24
|
+
"content": "export function farewell(name) {\n return `Godbye, ${name}.`;\n}\n"
|
|
25
|
+
},
|
|
26
|
+
{
|
|
27
|
+
"path": "source/findings.md",
|
|
28
|
+
"content": "# Open findings\n\n- LEAD-1 (minor, src/greet.js): greeting has a leading double space when no title is passed - `greet('Ada')` returns `Hello, Ada!`. The no-title prefix should be empty.\n- LEAD-2 (minor, src/farewell.js): the farewell text misspells Goodbye as 'Godbye'.\n"
|
|
29
|
+
}
|
|
30
|
+
],
|
|
31
|
+
"craftbookParams": {
|
|
32
|
+
"leads": "LEAD-1,LEAD-2"
|
|
33
|
+
}
|
|
34
|
+
},
|
|
35
|
+
"success": {
|
|
36
|
+
"summary": "Clusters were published, shards drafted, at least one proposal sealed with the four-heading notes, and the workspace was never modified.",
|
|
37
|
+
"deliverables": [
|
|
38
|
+
{
|
|
39
|
+
"path": "{{task.dir}}/clusters.json",
|
|
40
|
+
"kind": "json",
|
|
41
|
+
"artifact": true,
|
|
42
|
+
"minBytes": 2,
|
|
43
|
+
"checks": [
|
|
44
|
+
{
|
|
45
|
+
"kind": "recordSchema",
|
|
46
|
+
"file": "{{task.dir}}/clusters.json",
|
|
47
|
+
"artifact": true,
|
|
48
|
+
"minRows": 1,
|
|
49
|
+
"fields": [
|
|
50
|
+
{
|
|
51
|
+
"name": "slug",
|
|
52
|
+
"rule": "nonempty"
|
|
53
|
+
},
|
|
54
|
+
{
|
|
55
|
+
"name": "issueRefs",
|
|
56
|
+
"rule": "nonempty"
|
|
57
|
+
},
|
|
58
|
+
{
|
|
59
|
+
"name": "focus",
|
|
60
|
+
"rule": "nonempty"
|
|
61
|
+
}
|
|
62
|
+
]
|
|
63
|
+
}
|
|
64
|
+
]
|
|
65
|
+
}
|
|
66
|
+
],
|
|
67
|
+
"taskNotes": {
|
|
68
|
+
"minBytes": 120,
|
|
69
|
+
"requireCraftbookTask": true,
|
|
70
|
+
"checks": [
|
|
71
|
+
{
|
|
72
|
+
"kind": "contains",
|
|
73
|
+
"file": "task-notes.md",
|
|
74
|
+
"pattern": "##\\s*Triage",
|
|
75
|
+
"label": "triage note present"
|
|
76
|
+
}
|
|
77
|
+
]
|
|
78
|
+
},
|
|
79
|
+
"taskGraph": {
|
|
80
|
+
"requireCraftbookTask": true,
|
|
81
|
+
"requireTerminalStep": true
|
|
82
|
+
},
|
|
83
|
+
"history": [
|
|
84
|
+
{
|
|
85
|
+
"kind": "project.diffpack.sealed",
|
|
86
|
+
"minEntries": 1
|
|
87
|
+
}
|
|
88
|
+
],
|
|
89
|
+
"unchangedFixtures": [
|
|
90
|
+
"src/greet.js",
|
|
91
|
+
"src/farewell.js",
|
|
92
|
+
"source/findings.md"
|
|
93
|
+
]
|
|
94
|
+
},
|
|
95
|
+
"rubric": {
|
|
96
|
+
"artifact": {
|
|
97
|
+
"path": "{{task.dir}}/clusters.json",
|
|
98
|
+
"kind": "json"
|
|
99
|
+
},
|
|
100
|
+
"axes": [
|
|
101
|
+
{
|
|
102
|
+
"name": "Triage judgement",
|
|
103
|
+
"description": "Leads were judged against the current code and clustered sensibly; anything left out has an honest reason."
|
|
104
|
+
},
|
|
105
|
+
{
|
|
106
|
+
"name": "Proposal focus",
|
|
107
|
+
"description": "Each drafted proposal is the smallest correct change for its cluster, explained under Problem, Change, Risk, and How to verify."
|
|
108
|
+
},
|
|
109
|
+
{
|
|
110
|
+
"name": "Honesty about mode",
|
|
111
|
+
"description": "Notes never claim anything was fixed or applied; risk sections admit what could not be verified without running the code."
|
|
112
|
+
}
|
|
113
|
+
]
|
|
114
|
+
},
|
|
115
|
+
"qualityFocus": [
|
|
116
|
+
"proposal discipline",
|
|
117
|
+
"cluster judgement",
|
|
118
|
+
"untouched workspace"
|
|
119
|
+
]
|
|
120
|
+
}
|