@bendyline/gilde 0.1.24 → 0.1.26
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/authoring/gstack/evals/cso.json +2 -0
- package/authoring/gstack/overlays/cso.json +1 -0
- package/authoring/gstack/wave.json +2 -2
- package/data/craftbook-templates/br/browser-qa-audit/versions/2.0.1/craftbook.json +358 -0
- package/data/craftbook-templates/br/browser-qa-audit/versions/2.0.1/test.json +376 -0
- package/data/craftbook-templates/de/design-system-consultation/versions/2.0.1/craftbook.json +385 -0
- package/data/craftbook-templates/de/design-system-consultation/versions/2.0.1/test.json +201 -0
- package/data/craftbook-templates/en/engineering-retrospective/versions/2.0.1/craftbook.json +353 -0
- package/data/craftbook-templates/en/engineering-retrospective/versions/2.0.1/test.json +191 -0
- package/data/craftbook-templates/ex/executive-level-review/versions/2.0.1/craftbook.json +347 -0
- package/data/craftbook-templates/ex/executive-level-review/versions/2.0.1/test.json +135 -0
- package/data/craftbook-templates/id/idea-office-hours/versions/2.0.1/craftbook.json +333 -0
- package/data/craftbook-templates/id/idea-office-hours/versions/2.0.1/test.json +141 -0
- package/data/craftbook-templates/index.json +1 -1
- package/data/craftbook-templates/pu/pull-request-review/manifest.json +1 -1
- package/data/craftbook-templates/pu/pull-request-review/versions/1.4.0/craftbook.json +179 -0
- package/data/craftbook-templates/pu/pull-request-review/versions/1.4.0/test.json +123 -0
- package/data/craftbook-templates/ro/root-cause-investigation/versions/2.0.1/craftbook.json +348 -0
- package/data/craftbook-templates/ro/root-cause-investigation/versions/2.0.1/test.json +153 -0
- package/data/craftbook-templates/se/security-architecture-review/versions/2.0.1/craftbook.json +390 -0
- package/data/craftbook-templates/se/security-architecture-review/versions/2.0.1/test.json +154 -0
- package/data/craftbook-templates/se/security-architecture-review/versions/2.0.2/craftbook.json +450 -0
- package/data/craftbook-templates/se/security-architecture-review/versions/2.0.2/test.json +154 -0
- package/data/craftbook-templates/sp/spec-authoring/versions/2.0.1/craftbook.json +391 -0
- package/data/craftbook-templates/sp/spec-authoring/versions/2.0.1/test.json +162 -0
- package/data/craftbook-templates/te/technical-documentation/versions/2.0.1/craftbook.json +343 -0
- package/data/craftbook-templates/te/technical-documentation/versions/2.0.1/test.json +174 -0
- package/package.json +1 -1
- package/schemas/craftbook-doc.schema.json +170 -0
- package/schemas/craftbook-template-version.schema.json +170 -0
- package/schemas/craftbook-test.schema.json +143 -0
|
@@ -0,0 +1,162 @@
|
|
|
1
|
+
{
|
|
2
|
+
"schemaVersion": 1,
|
|
3
|
+
"title": "Spec Authoring — asynchronous CSV exports",
|
|
4
|
+
"objective": "Require the Spec Authoring craftbook to reconcile approved intent with current code and produce a backlog-ready, file-specific implementation spec with measurable acceptance and rollback criteria.",
|
|
5
|
+
"tags": [
|
|
6
|
+
"workflow",
|
|
7
|
+
"spec",
|
|
8
|
+
"planning",
|
|
9
|
+
"typescript"
|
|
10
|
+
],
|
|
11
|
+
"prompt": "Use the Spec Authoring craftbook to turn `source/approved-intent.md` into an implementation-ready spec grounded in the current files under `src/` and `tests/`. Resolve ambiguities from the supplied evidence without writing production code. Produce the craftbook audit and decision log, then write `specs/implementation-spec.md` with all required sections, exact file references, API/state transitions, authorization and limit behavior, measurable acceptance criteria, a dependency-free testing plan, rollback, and explicit out-of-scope items. Cite every workspace file used.",
|
|
12
|
+
"setup": {
|
|
13
|
+
"projectName": "Async export spec",
|
|
14
|
+
"about": "A hermetic specification exercise for an existing TypeScript service. The source of truth is limited to seeded workspace files.",
|
|
15
|
+
"missionObjectives": "Produce a spec another engineer can implement without reopening product scope or guessing security, lifecycle, limit, and rollback behavior.",
|
|
16
|
+
"files": [
|
|
17
|
+
{
|
|
18
|
+
"path": "source/approved-intent.md",
|
|
19
|
+
"content": "# Approved intent: asynchronous CSV exports\n\nReplace the synchronous customer export with an asynchronous job API.\n\n## Locked product decisions\n- `POST /v1/exports` accepts a saved report id and an `Idempotency-Key` header.\n- Roles `analyst` and `admin` may create exports; `viewer` receives 403.\n- Requests above **50,000 rows** receive 422 before a job is queued.\n- Job states are `queued`, `running`, `succeeded`, and `failed`.\n- Reusing an idempotency key for the same actor within **24 hours** returns the original job.\n- Successful download URLs expire after **15 minutes**.\n- Existing synchronous `/v1/reports/:id.csv` remains available behind a feature flag during rollout.\n\n## Out of scope\nNew report builders, additional export formats, recurring schedules, and email delivery.\n"
|
|
20
|
+
},
|
|
21
|
+
{
|
|
22
|
+
"path": "src/export-controller.ts",
|
|
23
|
+
"content": "import { mayExport } from './policy.js';\n\nexport type Role = 'viewer' | 'analyst' | 'admin';\n\nexport function downloadReportCsv(role: Role, reportId: string): { status: number; body: string } {\n if (!mayExport(role)) return { status: 403, body: 'forbidden' };\n return { status: 200, body: `report_id\\n${reportId}\\n` };\n}\n"
|
|
24
|
+
},
|
|
25
|
+
{
|
|
26
|
+
"path": "src/policy.ts",
|
|
27
|
+
"content": "export function mayExport(role: 'viewer' | 'analyst' | 'admin'): boolean {\n return role === 'analyst' || role === 'admin';\n}\n"
|
|
28
|
+
},
|
|
29
|
+
{
|
|
30
|
+
"path": "tests/export-contract.test.ts",
|
|
31
|
+
"content": "import { strict as assert } from 'node:assert';\nimport { downloadReportCsv } from '../src/export-controller.js';\n\nassert.equal(downloadReportCsv('viewer', 'r-1').status, 403);\nassert.equal(downloadReportCsv('analyst', 'r-1').status, 200);\n"
|
|
32
|
+
}
|
|
33
|
+
]
|
|
34
|
+
},
|
|
35
|
+
"mocks": [],
|
|
36
|
+
"success": {
|
|
37
|
+
"summary": "The named craftbook produces an evidence-grounded, backlog-ready asynchronous-export spec and records a terminal task handoff.",
|
|
38
|
+
"deliverables": [
|
|
39
|
+
{
|
|
40
|
+
"path": "specs/implementation-spec.md",
|
|
41
|
+
"kind": "markdown-doc",
|
|
42
|
+
"minBytes": 1700,
|
|
43
|
+
"checks": [
|
|
44
|
+
{
|
|
45
|
+
"kind": "contains",
|
|
46
|
+
"file": "specs/implementation-spec.md",
|
|
47
|
+
"pattern": "^#{1,3}\\s+Context\\b[\\s\\S]*^#{1,3}\\s+Current state\\b[\\s\\S]*^#{1,3}\\s+Proposed change\\b[\\s\\S]*^#{1,3}\\s+Implementation details\\b[\\s\\S]*^#{1,3}\\s+Acceptance criteria\\b[\\s\\S]*^#{1,3}\\s+Testing plan\\b[\\s\\S]*^#{1,3}\\s+Rollback plan\\b[\\s\\S]*^#{1,3}\\s+Out of scope\\b[\\s\\S]*^#{1,3}\\s+File reference\\b",
|
|
48
|
+
"flags": "im",
|
|
49
|
+
"label": "complete implementation-spec structure"
|
|
50
|
+
},
|
|
51
|
+
{
|
|
52
|
+
"kind": "valueGrounding",
|
|
53
|
+
"file": "specs/implementation-spec.md",
|
|
54
|
+
"facts": [
|
|
55
|
+
{
|
|
56
|
+
"id": "create-api",
|
|
57
|
+
"required": [
|
|
58
|
+
"POST\\s+`?/v1/exports`?"
|
|
59
|
+
]
|
|
60
|
+
},
|
|
61
|
+
{
|
|
62
|
+
"id": "role-policy",
|
|
63
|
+
"required": [
|
|
64
|
+
"analyst[\\s\\S]{0,80}admin[\\s\\S]{0,120}(viewer[\\s\\S]{0,40}403|403[\\s\\S]{0,40}viewer)"
|
|
65
|
+
]
|
|
66
|
+
},
|
|
67
|
+
{
|
|
68
|
+
"id": "row-limit",
|
|
69
|
+
"required": [
|
|
70
|
+
"50,?000\\s+rows"
|
|
71
|
+
]
|
|
72
|
+
},
|
|
73
|
+
{
|
|
74
|
+
"id": "row-limit-status",
|
|
75
|
+
"required": [
|
|
76
|
+
"422"
|
|
77
|
+
]
|
|
78
|
+
},
|
|
79
|
+
{
|
|
80
|
+
"id": "lifecycle",
|
|
81
|
+
"required": [
|
|
82
|
+
"queued[\\s\\S]{0,100}running[\\s\\S]{0,100}succeeded[\\s\\S]{0,100}failed"
|
|
83
|
+
]
|
|
84
|
+
},
|
|
85
|
+
{
|
|
86
|
+
"id": "idempotency-window",
|
|
87
|
+
"required": [
|
|
88
|
+
"24\\s+hours"
|
|
89
|
+
]
|
|
90
|
+
},
|
|
91
|
+
{
|
|
92
|
+
"id": "download-expiry",
|
|
93
|
+
"required": [
|
|
94
|
+
"15\\s+minutes"
|
|
95
|
+
]
|
|
96
|
+
}
|
|
97
|
+
]
|
|
98
|
+
},
|
|
99
|
+
{
|
|
100
|
+
"kind": "contains",
|
|
101
|
+
"file": "specs/implementation-spec.md",
|
|
102
|
+
"pattern": "(Given[\\s\\S]{0,200}When[\\s\\S]{0,200}Then|shall|must)[\\s\\S]*(feature flag|synchronous|reports/:id\\.csv)",
|
|
103
|
+
"flags": "i",
|
|
104
|
+
"label": "testable criteria and rollout compatibility"
|
|
105
|
+
},
|
|
106
|
+
{
|
|
107
|
+
"kind": "citationsResolve",
|
|
108
|
+
"file": "specs/implementation-spec.md",
|
|
109
|
+
"minCitations": 4
|
|
110
|
+
}
|
|
111
|
+
]
|
|
112
|
+
}
|
|
113
|
+
],
|
|
114
|
+
"taskNotes": {
|
|
115
|
+
"minBytes": 170,
|
|
116
|
+
"checks": [
|
|
117
|
+
{
|
|
118
|
+
"kind": "contains",
|
|
119
|
+
"file": "task-notes.md",
|
|
120
|
+
"pattern": "\\bDONE\\b[\\s\\S]*specs/implementation-spec\\.md",
|
|
121
|
+
"label": "terminal craftbook note names the spec"
|
|
122
|
+
}
|
|
123
|
+
],
|
|
124
|
+
"requireCraftbookTask": true
|
|
125
|
+
},
|
|
126
|
+
"taskGraph": {
|
|
127
|
+
"requireCraftbookTask": true,
|
|
128
|
+
"requireTerminalStep": true
|
|
129
|
+
},
|
|
130
|
+
"unchangedFixtures": [
|
|
131
|
+
"source/approved-intent.md",
|
|
132
|
+
"src/export-controller.ts",
|
|
133
|
+
"src/policy.ts",
|
|
134
|
+
"tests/export-contract.test.ts"
|
|
135
|
+
]
|
|
136
|
+
},
|
|
137
|
+
"rubric": {
|
|
138
|
+
"artifact": {
|
|
139
|
+
"path": "specs/implementation-spec.md",
|
|
140
|
+
"kind": "markdown"
|
|
141
|
+
},
|
|
142
|
+
"axes": [
|
|
143
|
+
{
|
|
144
|
+
"name": "Codebase grounding",
|
|
145
|
+
"description": "Current-state claims and file changes trace to the seeded implementation, policy, contract test, and approved intent."
|
|
146
|
+
},
|
|
147
|
+
{
|
|
148
|
+
"name": "Implementation precision",
|
|
149
|
+
"description": "The API, authorization, state machine, idempotency, limits, expiry, persistence boundaries, and file responsibilities are unambiguous."
|
|
150
|
+
},
|
|
151
|
+
{
|
|
152
|
+
"name": "Backlog readiness",
|
|
153
|
+
"description": "Acceptance criteria are observable, the testing plan covers failure paths, and rollout and rollback can be executed safely."
|
|
154
|
+
}
|
|
155
|
+
]
|
|
156
|
+
},
|
|
157
|
+
"qualityFocus": [
|
|
158
|
+
"Locked product decisions are conserved exactly",
|
|
159
|
+
"Current and proposed behavior are clearly separated",
|
|
160
|
+
"File-level implementation and test responsibilities are specific enough to execute"
|
|
161
|
+
]
|
|
162
|
+
}
|
|
@@ -0,0 +1,343 @@
|
|
|
1
|
+
{
|
|
2
|
+
"id": "technical-documentation",
|
|
3
|
+
"name": "Technical Documentation",
|
|
4
|
+
"description": "Generate a coherent documentation set from a codebase, organized by the Diataxis model (tutorials, how-to guides, reference, explanation), with cross-links and a coverage pass.",
|
|
5
|
+
"basedOn": {
|
|
6
|
+
"name": "gstack",
|
|
7
|
+
"url": "https://github.com/garrytan/gstack"
|
|
8
|
+
},
|
|
9
|
+
"plan": "Treat documentation as a tested product surface. Research implementation, tests, configuration, and existing prose before writing. Separate learning-oriented tutorials, task-oriented how-to guides, factual reference, and explanatory rationale. Every public claim must trace to a workspace source, every example must be verified when the environment permits, and every produced page must be reachable from the documentation index.",
|
|
10
|
+
"entryStepId": "inventory",
|
|
11
|
+
"triggers": [
|
|
12
|
+
"write docs for this",
|
|
13
|
+
"generate documentation",
|
|
14
|
+
"document this feature",
|
|
15
|
+
"create a tutorial",
|
|
16
|
+
"write a how-to",
|
|
17
|
+
"explain this module",
|
|
18
|
+
"docs for this project"
|
|
19
|
+
],
|
|
20
|
+
"command": "technical-documentation",
|
|
21
|
+
"steps": [
|
|
22
|
+
{
|
|
23
|
+
"id": "inventory",
|
|
24
|
+
"name": "Inventory the documentation surface",
|
|
25
|
+
"description": "Map readers, public interfaces, source evidence, existing coverage, and gaps.",
|
|
26
|
+
"prompt": "Confirm the requested scope from the task and project context. Inspect the project guide, package or build metadata, entry points, public interfaces, configuration, examples, tests, and current docs with workspace tools. Build an exact inventory of the entities in scope, their source paths, intended readers, existing documentation, missing coverage, and risky claims that need verification. Do not start polished prose yet.\n\nObservable handoff: write the completed result to `notes/documentation-inventory.md` in the workspace. Do not merely describe what the file would contain. Re-read it before finishing this phase and repair any incomplete sections.",
|
|
27
|
+
"suggestedRole": "technical researcher",
|
|
28
|
+
"advanceWhen": {
|
|
29
|
+
"file": "notes/documentation-inventory.md",
|
|
30
|
+
"minBytes": 900,
|
|
31
|
+
"sniff": "nonempty",
|
|
32
|
+
"requireChange": true,
|
|
33
|
+
"goto": "plan-docs"
|
|
34
|
+
},
|
|
35
|
+
"gate": {
|
|
36
|
+
"at": "completion",
|
|
37
|
+
"checks": [
|
|
38
|
+
{
|
|
39
|
+
"kind": "minBytes",
|
|
40
|
+
"file": "notes/documentation-inventory.md",
|
|
41
|
+
"bytes": 900
|
|
42
|
+
},
|
|
43
|
+
{
|
|
44
|
+
"kind": "sniff",
|
|
45
|
+
"file": "notes/documentation-inventory.md",
|
|
46
|
+
"sniff": "nonempty"
|
|
47
|
+
},
|
|
48
|
+
{
|
|
49
|
+
"kind": "contains",
|
|
50
|
+
"file": "notes/documentation-inventory.md",
|
|
51
|
+
"pattern": "^##\\s+Scope",
|
|
52
|
+
"flags": "im",
|
|
53
|
+
"label": "Scope section"
|
|
54
|
+
},
|
|
55
|
+
{
|
|
56
|
+
"kind": "contains",
|
|
57
|
+
"file": "notes/documentation-inventory.md",
|
|
58
|
+
"pattern": "^##\\s+Readers",
|
|
59
|
+
"flags": "im",
|
|
60
|
+
"label": "Readers section"
|
|
61
|
+
},
|
|
62
|
+
{
|
|
63
|
+
"kind": "contains",
|
|
64
|
+
"file": "notes/documentation-inventory.md",
|
|
65
|
+
"pattern": "^##\\s+Public surface",
|
|
66
|
+
"flags": "im",
|
|
67
|
+
"label": "Public surface section"
|
|
68
|
+
},
|
|
69
|
+
{
|
|
70
|
+
"kind": "contains",
|
|
71
|
+
"file": "notes/documentation-inventory.md",
|
|
72
|
+
"pattern": "^##\\s+Source map",
|
|
73
|
+
"flags": "im",
|
|
74
|
+
"label": "Source map section"
|
|
75
|
+
},
|
|
76
|
+
{
|
|
77
|
+
"kind": "contains",
|
|
78
|
+
"file": "notes/documentation-inventory.md",
|
|
79
|
+
"pattern": "^##\\s+Coverage gaps",
|
|
80
|
+
"flags": "im",
|
|
81
|
+
"label": "Coverage gaps section"
|
|
82
|
+
}
|
|
83
|
+
],
|
|
84
|
+
"onReject": "inventory",
|
|
85
|
+
"maxAttempts": 3
|
|
86
|
+
},
|
|
87
|
+
"next": "plan-docs"
|
|
88
|
+
},
|
|
89
|
+
{
|
|
90
|
+
"id": "plan-docs",
|
|
91
|
+
"name": "Design the documentation set",
|
|
92
|
+
"description": "Choose the right document type for each reader need and lock verification criteria.",
|
|
93
|
+
"prompt": "Turn `notes/documentation-inventory.md` into a document plan. For each proposed page, state its reader, job, quadrant, destination path, evidence sources, prerequisites, cross-links, and pass/fail checks. Reuse existing conventions and update existing pages when that is clearer than duplication. Keep the set proportional to the scope, but cover every public item in the inventory or explicitly defer it with a reason.\n\nObservable handoff: write the completed result to `notes/documentation-plan.md` in the workspace. Do not merely describe what the file would contain. Re-read it before finishing this phase and repair any incomplete sections.",
|
|
94
|
+
"suggestedRole": "documentation architect",
|
|
95
|
+
"advanceWhen": {
|
|
96
|
+
"file": "notes/documentation-plan.md",
|
|
97
|
+
"minBytes": 900,
|
|
98
|
+
"sniff": "nonempty",
|
|
99
|
+
"requireChange": true,
|
|
100
|
+
"goto": "author-and-verify"
|
|
101
|
+
},
|
|
102
|
+
"gate": {
|
|
103
|
+
"at": "completion",
|
|
104
|
+
"checks": [
|
|
105
|
+
{
|
|
106
|
+
"kind": "minBytes",
|
|
107
|
+
"file": "notes/documentation-plan.md",
|
|
108
|
+
"bytes": 900
|
|
109
|
+
},
|
|
110
|
+
{
|
|
111
|
+
"kind": "sniff",
|
|
112
|
+
"file": "notes/documentation-plan.md",
|
|
113
|
+
"sniff": "nonempty"
|
|
114
|
+
},
|
|
115
|
+
{
|
|
116
|
+
"kind": "contains",
|
|
117
|
+
"file": "notes/documentation-plan.md",
|
|
118
|
+
"pattern": "^##\\s+Document matrix",
|
|
119
|
+
"flags": "im",
|
|
120
|
+
"label": "Document matrix section"
|
|
121
|
+
},
|
|
122
|
+
{
|
|
123
|
+
"kind": "contains",
|
|
124
|
+
"file": "notes/documentation-plan.md",
|
|
125
|
+
"pattern": "^##\\s+Information architecture",
|
|
126
|
+
"flags": "im",
|
|
127
|
+
"label": "Information architecture section"
|
|
128
|
+
},
|
|
129
|
+
{
|
|
130
|
+
"kind": "contains",
|
|
131
|
+
"file": "notes/documentation-plan.md",
|
|
132
|
+
"pattern": "^##\\s+Verification plan",
|
|
133
|
+
"flags": "im",
|
|
134
|
+
"label": "Verification plan section"
|
|
135
|
+
},
|
|
136
|
+
{
|
|
137
|
+
"kind": "contains",
|
|
138
|
+
"file": "notes/documentation-plan.md",
|
|
139
|
+
"pattern": "^##\\s+Deferred coverage",
|
|
140
|
+
"flags": "im",
|
|
141
|
+
"label": "Deferred coverage section"
|
|
142
|
+
}
|
|
143
|
+
],
|
|
144
|
+
"onReject": "plan-docs",
|
|
145
|
+
"maxAttempts": 3
|
|
146
|
+
},
|
|
147
|
+
"next": "author-and-verify"
|
|
148
|
+
},
|
|
149
|
+
{
|
|
150
|
+
"id": "author-and-verify",
|
|
151
|
+
"name": "Author, link, and verify the docs",
|
|
152
|
+
"description": "Write the planned pages, validate examples and links, and expose the complete set through one index.",
|
|
153
|
+
"prompt": "Implement the approved document plan in the workspace. Keep reference factual, how-to steps actionable, tutorials quick to first result, and explanations explicit about trade-offs. Verify commands, code examples, option names, defaults, and constraints against implementation and tests; run safe examples where possible and label anything not executed. Add troubleshooting based on real failure paths. Cross-link related pages and write an index that lists every created or updated document, its reader job, quadrant, source evidence, and verification status.\n\nObservable handoff: write the completed result to `docs/documentation-index.md` in the workspace. Do not merely describe what the file would contain. Re-read it before finishing this phase and repair any incomplete sections.",
|
|
154
|
+
"suggestedRole": "technical writer",
|
|
155
|
+
"advanceWhen": {
|
|
156
|
+
"file": "docs/documentation-index.md",
|
|
157
|
+
"minBytes": 1200,
|
|
158
|
+
"sniff": "nonempty",
|
|
159
|
+
"requireChange": true,
|
|
160
|
+
"goto": "evaluate"
|
|
161
|
+
},
|
|
162
|
+
"gate": {
|
|
163
|
+
"at": "completion",
|
|
164
|
+
"checks": [
|
|
165
|
+
{
|
|
166
|
+
"kind": "minBytes",
|
|
167
|
+
"file": "docs/documentation-index.md",
|
|
168
|
+
"bytes": 1200
|
|
169
|
+
},
|
|
170
|
+
{
|
|
171
|
+
"kind": "sniff",
|
|
172
|
+
"file": "docs/documentation-index.md",
|
|
173
|
+
"sniff": "nonempty"
|
|
174
|
+
},
|
|
175
|
+
{
|
|
176
|
+
"kind": "contains",
|
|
177
|
+
"file": "docs/documentation-index.md",
|
|
178
|
+
"pattern": "^##\\s+Documentation map",
|
|
179
|
+
"flags": "im",
|
|
180
|
+
"label": "Documentation map section"
|
|
181
|
+
},
|
|
182
|
+
{
|
|
183
|
+
"kind": "contains",
|
|
184
|
+
"file": "docs/documentation-index.md",
|
|
185
|
+
"pattern": "^##\\s+Tutorials",
|
|
186
|
+
"flags": "im",
|
|
187
|
+
"label": "Tutorials section"
|
|
188
|
+
},
|
|
189
|
+
{
|
|
190
|
+
"kind": "contains",
|
|
191
|
+
"file": "docs/documentation-index.md",
|
|
192
|
+
"pattern": "^##\\s+How-to guides",
|
|
193
|
+
"flags": "im",
|
|
194
|
+
"label": "How-to guides section"
|
|
195
|
+
},
|
|
196
|
+
{
|
|
197
|
+
"kind": "contains",
|
|
198
|
+
"file": "docs/documentation-index.md",
|
|
199
|
+
"pattern": "^##\\s+Reference",
|
|
200
|
+
"flags": "im",
|
|
201
|
+
"label": "Reference section"
|
|
202
|
+
},
|
|
203
|
+
{
|
|
204
|
+
"kind": "contains",
|
|
205
|
+
"file": "docs/documentation-index.md",
|
|
206
|
+
"pattern": "^##\\s+Explanation",
|
|
207
|
+
"flags": "im",
|
|
208
|
+
"label": "Explanation section"
|
|
209
|
+
},
|
|
210
|
+
{
|
|
211
|
+
"kind": "contains",
|
|
212
|
+
"file": "docs/documentation-index.md",
|
|
213
|
+
"pattern": "^##\\s+Verification",
|
|
214
|
+
"flags": "im",
|
|
215
|
+
"label": "Verification section"
|
|
216
|
+
}
|
|
217
|
+
],
|
|
218
|
+
"onReject": "author-and-verify",
|
|
219
|
+
"maxAttempts": 3
|
|
220
|
+
},
|
|
221
|
+
"next": "evaluate"
|
|
222
|
+
},
|
|
223
|
+
{
|
|
224
|
+
"id": "evaluate",
|
|
225
|
+
"name": "Evaluate the deliverable",
|
|
226
|
+
"description": "Independently grade the observable deliverable and route it to finish, repair, or user escalation.",
|
|
227
|
+
"prompt": "Review `docs/documentation-index.md`, `notes/documentation-inventory.md`, `notes/documentation-plan.md` against every criterion below. Inspect the underlying evidence files named by the workflow; do not grade from the author's summary alone.\n\n1. Every in-scope public item is documented or explicitly deferred with a reason.\n2. Claims, types, defaults, constraints, and examples agree with the cited implementation or tests.\n3. Tutorial, how-to, reference, and explanation content serve distinct reader jobs without needless duplication.\n4. Commands and examples have credible verification results or are clearly marked unexecuted.\n5. Every produced page is linked from the index and all internal links resolve.\n6. The prose is concrete, readable, and includes real troubleshooting and trade-offs where relevant.\n\nWrite an evidence-backed review to `reviews/technical-documentation-review.md`. Give each criterion a PASS or FAIL with a concrete path, excerpt, measurement, or observed behavior. End with exactly `Verdict: PASS` or `Verdict: REVISE`. Then use `advance_task_step` for the active task: PASS routes to `finish`; REVISE routes to `repair` for review rounds 1 through 2, and the 3th REVISE routes to `needs-user`. Never route to finish while a criterion is unmet.",
|
|
228
|
+
"suggestedRole": "technical editor",
|
|
229
|
+
"gate": {
|
|
230
|
+
"at": "completion",
|
|
231
|
+
"checks": [
|
|
232
|
+
{
|
|
233
|
+
"kind": "minBytes",
|
|
234
|
+
"file": "reviews/technical-documentation-review.md",
|
|
235
|
+
"bytes": 400
|
|
236
|
+
},
|
|
237
|
+
{
|
|
238
|
+
"kind": "contains",
|
|
239
|
+
"file": "reviews/technical-documentation-review.md",
|
|
240
|
+
"pattern": "Verdict:\\s*(?:PASS|REVISE)",
|
|
241
|
+
"flags": "i",
|
|
242
|
+
"label": "explicit PASS or REVISE verdict"
|
|
243
|
+
}
|
|
244
|
+
],
|
|
245
|
+
"onReject": "evaluate",
|
|
246
|
+
"maxAttempts": 3
|
|
247
|
+
},
|
|
248
|
+
"next": "repair"
|
|
249
|
+
},
|
|
250
|
+
{
|
|
251
|
+
"id": "repair",
|
|
252
|
+
"name": "Repair the deliverable",
|
|
253
|
+
"description": "Fix only the concrete gaps from the latest independent review.",
|
|
254
|
+
"prompt": "Read `reviews/technical-documentation-review.md` and repair every failed criterion in `docs/documentation-index.md`, `notes/documentation-inventory.md`, `notes/documentation-plan.md`. Make the changes in the actual workspace files, not just in task notes or a reply. Preserve evidence that already passed. Re-run or re-check anything the reviewer found unproven. Ensure `docs/documentation-index.md` is genuinely updated this turn so the repair is observable, then hand it back for independent evaluation.",
|
|
255
|
+
"suggestedRole": "technical writer",
|
|
256
|
+
"advanceWhen": {
|
|
257
|
+
"file": "docs/documentation-index.md",
|
|
258
|
+
"minBytes": 1200,
|
|
259
|
+
"sniff": "nonempty",
|
|
260
|
+
"requireChange": true,
|
|
261
|
+
"goto": "evaluate"
|
|
262
|
+
},
|
|
263
|
+
"gate": {
|
|
264
|
+
"at": "completion",
|
|
265
|
+
"checks": [
|
|
266
|
+
{
|
|
267
|
+
"kind": "minBytes",
|
|
268
|
+
"file": "docs/documentation-index.md",
|
|
269
|
+
"bytes": 1200
|
|
270
|
+
},
|
|
271
|
+
{
|
|
272
|
+
"kind": "sniff",
|
|
273
|
+
"file": "docs/documentation-index.md",
|
|
274
|
+
"sniff": "nonempty"
|
|
275
|
+
},
|
|
276
|
+
{
|
|
277
|
+
"kind": "contains",
|
|
278
|
+
"file": "docs/documentation-index.md",
|
|
279
|
+
"pattern": "^##\\s+Documentation map",
|
|
280
|
+
"flags": "im",
|
|
281
|
+
"label": "Documentation map section"
|
|
282
|
+
},
|
|
283
|
+
{
|
|
284
|
+
"kind": "contains",
|
|
285
|
+
"file": "docs/documentation-index.md",
|
|
286
|
+
"pattern": "^##\\s+Tutorials",
|
|
287
|
+
"flags": "im",
|
|
288
|
+
"label": "Tutorials section"
|
|
289
|
+
},
|
|
290
|
+
{
|
|
291
|
+
"kind": "contains",
|
|
292
|
+
"file": "docs/documentation-index.md",
|
|
293
|
+
"pattern": "^##\\s+How-to guides",
|
|
294
|
+
"flags": "im",
|
|
295
|
+
"label": "How-to guides section"
|
|
296
|
+
},
|
|
297
|
+
{
|
|
298
|
+
"kind": "contains",
|
|
299
|
+
"file": "docs/documentation-index.md",
|
|
300
|
+
"pattern": "^##\\s+Reference",
|
|
301
|
+
"flags": "im",
|
|
302
|
+
"label": "Reference section"
|
|
303
|
+
},
|
|
304
|
+
{
|
|
305
|
+
"kind": "contains",
|
|
306
|
+
"file": "docs/documentation-index.md",
|
|
307
|
+
"pattern": "^##\\s+Explanation",
|
|
308
|
+
"flags": "im",
|
|
309
|
+
"label": "Explanation section"
|
|
310
|
+
},
|
|
311
|
+
{
|
|
312
|
+
"kind": "contains",
|
|
313
|
+
"file": "docs/documentation-index.md",
|
|
314
|
+
"pattern": "^##\\s+Verification",
|
|
315
|
+
"flags": "im",
|
|
316
|
+
"label": "Verification section"
|
|
317
|
+
}
|
|
318
|
+
],
|
|
319
|
+
"onReject": "repair",
|
|
320
|
+
"maxAttempts": 3
|
|
321
|
+
},
|
|
322
|
+
"next": "evaluate"
|
|
323
|
+
},
|
|
324
|
+
{
|
|
325
|
+
"id": "finish",
|
|
326
|
+
"name": "Finish",
|
|
327
|
+
"description": "All deterministic and reviewer criteria passed.",
|
|
328
|
+
"prompt": "The independent review passed. Read `reviews/technical-documentation-review.md`, then use `write_task_note` to record a concise DONE summary with the final deliverable paths (`docs/documentation-index.md`, `notes/documentation-inventory.md`, `notes/documentation-plan.md`) and the evidence that each acceptance criterion passed. Report DONE without starting new work.",
|
|
329
|
+
"suggestedRole": "project lead",
|
|
330
|
+
"terminal": true
|
|
331
|
+
},
|
|
332
|
+
{
|
|
333
|
+
"id": "needs-user",
|
|
334
|
+
"name": "Escalate unresolved concerns",
|
|
335
|
+
"description": "The bounded repair loop ended without a defensible pass.",
|
|
336
|
+
"prompt": "The deliverable did not pass after 3 review rounds. Do not claim success. Read `reviews/technical-documentation-review.md`, then use `write_task_note` to record DONE_WITH_CONCERNS: the unmet criteria, what was attempted, the affected paths, and the smallest user decision or missing input needed to continue.",
|
|
337
|
+
"suggestedRole": "project lead",
|
|
338
|
+
"terminal": true
|
|
339
|
+
}
|
|
340
|
+
],
|
|
341
|
+
"version": "2.0.1",
|
|
342
|
+
"releasedAt": "2026-08-13T00:00:00Z"
|
|
343
|
+
}
|