@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,153 @@
|
|
|
1
|
+
{
|
|
2
|
+
"schemaVersion": 1,
|
|
3
|
+
"title": "Root-Cause Investigation — decimal cart total regression",
|
|
4
|
+
"objective": "Require the Root-Cause Investigation craftbook to reproduce a deterministic failure, identify the causal mechanism before editing, implement the smallest fix, and prove the regression test passes.",
|
|
5
|
+
"tags": [
|
|
6
|
+
"workflow",
|
|
7
|
+
"debugging",
|
|
8
|
+
"code-with-tests",
|
|
9
|
+
"node"
|
|
10
|
+
],
|
|
11
|
+
"prompt": "Use the Root-Cause Investigation craftbook to diagnose the failing decimal cart-total behavior in this workspace. First reproduce it with the existing dependency-free test and preserve concrete evidence; do not edit until a causal hypothesis has been tested. Then make the smallest correct source change, keep the regression coverage, and write the craftbook's artifacts, including `reports/root-cause-investigation.md`. The final report must cite the files inspected, distinguish root cause from symptom, include the exact verification command and result, and describe a safe rollback.",
|
|
12
|
+
"setup": {
|
|
13
|
+
"projectName": "Decimal cart total regression",
|
|
14
|
+
"about": "A tiny dependency-free Node project with one reproducible arithmetic defect. The initial test is expected to fail.",
|
|
15
|
+
"missionObjectives": "Restore exact cent-based addition for decimal prices without broad refactoring and leave a passing regression test plus an evidence-backed investigation report.",
|
|
16
|
+
"files": [
|
|
17
|
+
{
|
|
18
|
+
"path": "package.json",
|
|
19
|
+
"content": "{\n \"name\": \"cart-total-fixture\",\n \"private\": true,\n \"type\": \"module\"\n}\n"
|
|
20
|
+
},
|
|
21
|
+
{
|
|
22
|
+
"path": "src/cart-total.js",
|
|
23
|
+
"content": "/** Sum display-price strings and return a two-decimal total. */\nexport function cartTotal(prices) {\n const cents = prices.reduce((sum, price) => sum + parseInt(price, 10) * 100, 0);\n return (cents / 100).toFixed(2);\n}\n"
|
|
24
|
+
},
|
|
25
|
+
{
|
|
26
|
+
"path": "tests/cart-total.test.mjs",
|
|
27
|
+
"content": "import test from 'node:test';\nimport assert from 'node:assert/strict';\nimport { cartTotal } from '../src/cart-total.js';\n\ntest('keeps cents when totaling decimal display prices', () => {\n assert.equal(cartTotal(['19.99', '5.50']), '25.49');\n});\n\ntest('handles a single whole-dollar price', () => {\n assert.equal(cartTotal(['7.00']), '7.00');\n});\n"
|
|
28
|
+
},
|
|
29
|
+
{
|
|
30
|
+
"path": "source/incident.md",
|
|
31
|
+
"content": "# Incident note\n\nCheckout preview showed **$24.00** for line items **$19.99** and **$5.50**. The expected total is **$25.49**. The defect appeared after price inputs changed from integer-dollar strings to two-decimal display strings. No production data migration is in scope.\n"
|
|
32
|
+
},
|
|
33
|
+
{
|
|
34
|
+
"path": "tests/verify-cart-total.mjs",
|
|
35
|
+
"content": "import assert from 'node:assert/strict';\nimport { cartTotal } from '../src/cart-total.js';\n\nconst cases = [\n [['19.99', '5.50'], '25.49'],\n [['0.10', '0.20'], '0.30'],\n [['12.34', '0.66'], '13.00'],\n [['7.00'], '7.00'],\n [['1.01', '2.02', '3.03'], '6.06'],\n];\nfor (const [prices, expected] of cases) assert.equal(cartTotal(prices), expected, prices.join(' + '));\nconsole.log('CART_TOTAL_ORACLE_OK 5/5');\n",
|
|
36
|
+
"surface": "harness"
|
|
37
|
+
}
|
|
38
|
+
]
|
|
39
|
+
},
|
|
40
|
+
"mocks": [],
|
|
41
|
+
"success": {
|
|
42
|
+
"summary": "The decimal regression is fixed by a diagnosed causal change, the existing test passes, and the craftbook report preserves reproducible evidence.",
|
|
43
|
+
"deliverables": [
|
|
44
|
+
{
|
|
45
|
+
"path": "reports/root-cause-investigation.md",
|
|
46
|
+
"kind": "markdown-report",
|
|
47
|
+
"minBytes": 1200,
|
|
48
|
+
"checks": [
|
|
49
|
+
{
|
|
50
|
+
"kind": "contains",
|
|
51
|
+
"file": "reports/root-cause-investigation.md",
|
|
52
|
+
"pattern": "^#{1,3}\\s+Root cause\\b[\\s\\S]*^#{1,3}\\s+(Fix|Changed files)\\b[\\s\\S]*^#{1,3}\\s+(Regression coverage|Verification)\\b[\\s\\S]*^#{1,3}\\s+Rollback\\b",
|
|
53
|
+
"flags": "im",
|
|
54
|
+
"label": "root cause through rollback sections"
|
|
55
|
+
},
|
|
56
|
+
{
|
|
57
|
+
"kind": "contains",
|
|
58
|
+
"file": "reports/root-cause-investigation.md",
|
|
59
|
+
"pattern": "parseInt|truncat(?:e|ed|ion)|discard(?:s|ed)?\\s+(?:the\\s+)?(?:decimal|fractional|cent)",
|
|
60
|
+
"flags": "i",
|
|
61
|
+
"label": "causal mechanism"
|
|
62
|
+
},
|
|
63
|
+
{
|
|
64
|
+
"kind": "contains",
|
|
65
|
+
"file": "reports/root-cause-investigation.md",
|
|
66
|
+
"pattern": "node\\s+--test\\s+tests/cart-total\\.test\\.mjs[\\s\\S]*(pass|2\\s+tests?|exit(?:ed)?\\s+0)",
|
|
67
|
+
"flags": "i",
|
|
68
|
+
"label": "verification command and result"
|
|
69
|
+
},
|
|
70
|
+
{
|
|
71
|
+
"kind": "citationsResolve",
|
|
72
|
+
"file": "reports/root-cause-investigation.md",
|
|
73
|
+
"minCitations": 2
|
|
74
|
+
}
|
|
75
|
+
]
|
|
76
|
+
}
|
|
77
|
+
],
|
|
78
|
+
"checks": [
|
|
79
|
+
{
|
|
80
|
+
"kind": "notContains",
|
|
81
|
+
"file": "src/cart-total.js",
|
|
82
|
+
"pattern": "\\bparseInt\\s*\\(",
|
|
83
|
+
"label": "lossy integer parsing removed"
|
|
84
|
+
},
|
|
85
|
+
{
|
|
86
|
+
"kind": "sourceParses",
|
|
87
|
+
"file": "src/cart-total.js"
|
|
88
|
+
},
|
|
89
|
+
{
|
|
90
|
+
"kind": "nodeRuns",
|
|
91
|
+
"file": "tests/cart-total.test.mjs",
|
|
92
|
+
"timeoutMs": 20000
|
|
93
|
+
},
|
|
94
|
+
{
|
|
95
|
+
"kind": "nodeScriptPasses",
|
|
96
|
+
"script": "tests/verify-cart-total.mjs",
|
|
97
|
+
"requiredOutput": [
|
|
98
|
+
{
|
|
99
|
+
"pattern": "CART_TOTAL_ORACLE_OK 5/5",
|
|
100
|
+
"label": "hidden multi-case regression oracle"
|
|
101
|
+
}
|
|
102
|
+
]
|
|
103
|
+
}
|
|
104
|
+
],
|
|
105
|
+
"taskNotes": {
|
|
106
|
+
"minBytes": 180,
|
|
107
|
+
"checks": [
|
|
108
|
+
{
|
|
109
|
+
"kind": "contains",
|
|
110
|
+
"file": "task-notes.md",
|
|
111
|
+
"pattern": "\\bDONE\\b[\\s\\S]*(node\\s+--test|tests/cart-total\\.test\\.mjs)[\\s\\S]*reports/root-cause-investigation\\.md",
|
|
112
|
+
"flags": "i",
|
|
113
|
+
"label": "terminal note records proof and report"
|
|
114
|
+
}
|
|
115
|
+
],
|
|
116
|
+
"requireCraftbookTask": true
|
|
117
|
+
},
|
|
118
|
+
"taskGraph": {
|
|
119
|
+
"requireCraftbookTask": true,
|
|
120
|
+
"requireTerminalStep": true
|
|
121
|
+
},
|
|
122
|
+
"unchangedFixtures": [
|
|
123
|
+
"package.json",
|
|
124
|
+
"tests/cart-total.test.mjs",
|
|
125
|
+
"source/incident.md"
|
|
126
|
+
]
|
|
127
|
+
},
|
|
128
|
+
"rubric": {
|
|
129
|
+
"artifact": {
|
|
130
|
+
"path": "reports/root-cause-investigation.md",
|
|
131
|
+
"kind": "markdown"
|
|
132
|
+
},
|
|
133
|
+
"axes": [
|
|
134
|
+
{
|
|
135
|
+
"name": "Causal rigor",
|
|
136
|
+
"description": "The report explains why the observed inputs fail in this implementation and distinguishes causal evidence from guesses."
|
|
137
|
+
},
|
|
138
|
+
{
|
|
139
|
+
"name": "Fix discipline",
|
|
140
|
+
"description": "The source change is minimal, directly addresses the diagnosed mechanism, and avoids unrelated refactoring."
|
|
141
|
+
},
|
|
142
|
+
{
|
|
143
|
+
"name": "Verification quality",
|
|
144
|
+
"description": "Reproduction, regression coverage, final command result, blast radius, and rollback are concrete and auditable."
|
|
145
|
+
}
|
|
146
|
+
]
|
|
147
|
+
},
|
|
148
|
+
"qualityFocus": [
|
|
149
|
+
"Diagnosis precedes source edits",
|
|
150
|
+
"The fix preserves decimal cents and passes the dependency-free test",
|
|
151
|
+
"The final report cites real workspace files and includes rollback"
|
|
152
|
+
]
|
|
153
|
+
}
|
package/data/craftbook-templates/se/security-architecture-review/versions/2.0.1/craftbook.json
ADDED
|
@@ -0,0 +1,390 @@
|
|
|
1
|
+
{
|
|
2
|
+
"id": "security-architecture-review",
|
|
3
|
+
"name": "Security Architecture Review",
|
|
4
|
+
"description": "A structured security architecture review: walk the stack for secrets, dependencies, auth, and common vulnerability classes, then report findings ranked by severity and confidence.",
|
|
5
|
+
"basedOn": {
|
|
6
|
+
"name": "gstack",
|
|
7
|
+
"url": "https://github.com/garrytan/gstack"
|
|
8
|
+
},
|
|
9
|
+
"plan": "Run an evidence-first architecture review without changing product code. Trace trust boundaries, data flows, identity, authorization, secrets, dependencies, and operational controls from actual workspace material. Never copy secret values into notes or reports. Separate confirmed findings from hypotheses and research gaps. Rank actionable findings by severity, exploitability, confidence, and blast radius, then give the owner a practical remediation and verification path.",
|
|
10
|
+
"entryStepId": "model-system",
|
|
11
|
+
"triggers": [
|
|
12
|
+
"security audit",
|
|
13
|
+
"check for vulnerabilities",
|
|
14
|
+
"owasp review"
|
|
15
|
+
],
|
|
16
|
+
"command": "security-architecture-review",
|
|
17
|
+
"steps": [
|
|
18
|
+
{
|
|
19
|
+
"id": "model-system",
|
|
20
|
+
"name": "Map assets and trust boundaries",
|
|
21
|
+
"description": "Establish the system, sensitive assets, actors, data flows, controls, and review limits.",
|
|
22
|
+
"prompt": "Inspect architecture notes, entry points, deployment and dependency metadata, configuration schemas, authentication and authorization code, persistence, network surfaces, and security tests. Map sensitive assets, actors, privilege levels, trust boundaries, inbound and outbound data flows, third parties, and existing controls. Record only secret names or locations, never values. State scope exclusions and missing evidence explicitly.\n\nObservable handoff: write the completed result to `security/review-scope.md` in the project's artifacts drawer with `write_artifact`. Do not merely describe what the file would contain. Re-read it with `read_artifact` before finishing this phase and repair any incomplete sections.",
|
|
23
|
+
"suggestedRole": "security architect",
|
|
24
|
+
"advanceWhen": {
|
|
25
|
+
"file": "security/review-scope.md",
|
|
26
|
+
"minBytes": 1000,
|
|
27
|
+
"sniff": "nonempty",
|
|
28
|
+
"requireChange": true,
|
|
29
|
+
"artifact": true,
|
|
30
|
+
"goto": "audit"
|
|
31
|
+
},
|
|
32
|
+
"gate": {
|
|
33
|
+
"at": "completion",
|
|
34
|
+
"checks": [
|
|
35
|
+
{
|
|
36
|
+
"kind": "minBytes",
|
|
37
|
+
"file": "security/review-scope.md",
|
|
38
|
+
"bytes": 1000,
|
|
39
|
+
"artifact": true
|
|
40
|
+
},
|
|
41
|
+
{
|
|
42
|
+
"kind": "sniff",
|
|
43
|
+
"file": "security/review-scope.md",
|
|
44
|
+
"sniff": "nonempty",
|
|
45
|
+
"artifact": true
|
|
46
|
+
},
|
|
47
|
+
{
|
|
48
|
+
"kind": "contains",
|
|
49
|
+
"file": "security/review-scope.md",
|
|
50
|
+
"pattern": "^##\\s+System scope",
|
|
51
|
+
"flags": "im",
|
|
52
|
+
"label": "System scope section",
|
|
53
|
+
"artifact": true
|
|
54
|
+
},
|
|
55
|
+
{
|
|
56
|
+
"kind": "contains",
|
|
57
|
+
"file": "security/review-scope.md",
|
|
58
|
+
"pattern": "^##\\s+Assets",
|
|
59
|
+
"flags": "im",
|
|
60
|
+
"label": "Assets section",
|
|
61
|
+
"artifact": true
|
|
62
|
+
},
|
|
63
|
+
{
|
|
64
|
+
"kind": "contains",
|
|
65
|
+
"file": "security/review-scope.md",
|
|
66
|
+
"pattern": "^##\\s+Actors and privileges",
|
|
67
|
+
"flags": "im",
|
|
68
|
+
"label": "Actors and privileges section",
|
|
69
|
+
"artifact": true
|
|
70
|
+
},
|
|
71
|
+
{
|
|
72
|
+
"kind": "contains",
|
|
73
|
+
"file": "security/review-scope.md",
|
|
74
|
+
"pattern": "^##\\s+Trust boundaries",
|
|
75
|
+
"flags": "im",
|
|
76
|
+
"label": "Trust boundaries section",
|
|
77
|
+
"artifact": true
|
|
78
|
+
},
|
|
79
|
+
{
|
|
80
|
+
"kind": "contains",
|
|
81
|
+
"file": "security/review-scope.md",
|
|
82
|
+
"pattern": "^##\\s+Data flows",
|
|
83
|
+
"flags": "im",
|
|
84
|
+
"label": "Data flows section",
|
|
85
|
+
"artifact": true
|
|
86
|
+
},
|
|
87
|
+
{
|
|
88
|
+
"kind": "contains",
|
|
89
|
+
"file": "security/review-scope.md",
|
|
90
|
+
"pattern": "^##\\s+Review limits",
|
|
91
|
+
"flags": "im",
|
|
92
|
+
"label": "Review limits section",
|
|
93
|
+
"artifact": true
|
|
94
|
+
}
|
|
95
|
+
],
|
|
96
|
+
"onReject": "model-system",
|
|
97
|
+
"maxAttempts": 3
|
|
98
|
+
},
|
|
99
|
+
"next": "audit"
|
|
100
|
+
},
|
|
101
|
+
{
|
|
102
|
+
"id": "audit",
|
|
103
|
+
"name": "Audit controls and prove findings",
|
|
104
|
+
"description": "Walk the attack surface systematically and maintain an evidence-backed findings register.",
|
|
105
|
+
"prompt": "Use `security/review-scope.md` to inspect secrets handling, dependency and supply-chain controls, authentication, session management, authorization at every mutation sink, input handling, output encoding, injection boundaries, file and path access, cryptography, logging, privacy, network exposure, update paths, and failure behavior. For every candidate, capture the exact evidence path, attack preconditions, affected asset, impact, confidence, and a safe validation method. Do not claim a vulnerability from a pattern match alone. If external advisory research is unavailable, label dependency status unverified rather than guessing.\n\nObservable handoff: write the completed result to `security/findings-register.md` in the project's artifacts drawer with `write_artifact`. Do not merely describe what the file would contain. Re-read it with `read_artifact` before finishing this phase and repair any incomplete sections.",
|
|
106
|
+
"suggestedRole": "application security engineer",
|
|
107
|
+
"advanceWhen": {
|
|
108
|
+
"file": "security/findings-register.md",
|
|
109
|
+
"minBytes": 1300,
|
|
110
|
+
"sniff": "nonempty",
|
|
111
|
+
"requireChange": true,
|
|
112
|
+
"artifact": true,
|
|
113
|
+
"goto": "report"
|
|
114
|
+
},
|
|
115
|
+
"gate": {
|
|
116
|
+
"at": "completion",
|
|
117
|
+
"checks": [
|
|
118
|
+
{
|
|
119
|
+
"kind": "minBytes",
|
|
120
|
+
"file": "security/findings-register.md",
|
|
121
|
+
"bytes": 1300,
|
|
122
|
+
"artifact": true
|
|
123
|
+
},
|
|
124
|
+
{
|
|
125
|
+
"kind": "sniff",
|
|
126
|
+
"file": "security/findings-register.md",
|
|
127
|
+
"sniff": "nonempty",
|
|
128
|
+
"artifact": true
|
|
129
|
+
},
|
|
130
|
+
{
|
|
131
|
+
"kind": "contains",
|
|
132
|
+
"file": "security/findings-register.md",
|
|
133
|
+
"pattern": "^##\\s+Coverage",
|
|
134
|
+
"flags": "im",
|
|
135
|
+
"label": "Coverage section",
|
|
136
|
+
"artifact": true
|
|
137
|
+
},
|
|
138
|
+
{
|
|
139
|
+
"kind": "contains",
|
|
140
|
+
"file": "security/findings-register.md",
|
|
141
|
+
"pattern": "^##\\s+Confirmed findings",
|
|
142
|
+
"flags": "im",
|
|
143
|
+
"label": "Confirmed findings section",
|
|
144
|
+
"artifact": true
|
|
145
|
+
},
|
|
146
|
+
{
|
|
147
|
+
"kind": "contains",
|
|
148
|
+
"file": "security/findings-register.md",
|
|
149
|
+
"pattern": "^##\\s+Rejected hypotheses",
|
|
150
|
+
"flags": "im",
|
|
151
|
+
"label": "Rejected hypotheses section",
|
|
152
|
+
"artifact": true
|
|
153
|
+
},
|
|
154
|
+
{
|
|
155
|
+
"kind": "contains",
|
|
156
|
+
"file": "security/findings-register.md",
|
|
157
|
+
"pattern": "^##\\s+Research gaps",
|
|
158
|
+
"flags": "im",
|
|
159
|
+
"label": "Research gaps section",
|
|
160
|
+
"artifact": true
|
|
161
|
+
},
|
|
162
|
+
{
|
|
163
|
+
"kind": "contains",
|
|
164
|
+
"file": "security/findings-register.md",
|
|
165
|
+
"pattern": "Severity.*Confidence.*Evidence",
|
|
166
|
+
"flags": "im",
|
|
167
|
+
"label": "finding table with severity, confidence, and evidence",
|
|
168
|
+
"artifact": true
|
|
169
|
+
}
|
|
170
|
+
],
|
|
171
|
+
"onReject": "audit",
|
|
172
|
+
"maxAttempts": 3
|
|
173
|
+
},
|
|
174
|
+
"next": "report"
|
|
175
|
+
},
|
|
176
|
+
{
|
|
177
|
+
"id": "report",
|
|
178
|
+
"name": "Write the security architecture review",
|
|
179
|
+
"description": "Deliver prioritized findings, strengths, remediation, and retest instructions for owners.",
|
|
180
|
+
"prompt": "Synthesize the scope and findings register into a decision-ready report. Start with an executive risk posture and the strongest controls already working. For each confirmed finding, include severity, confidence, evidence path, causal control gap, realistic attack path, impact, prioritized remediation, owner, verification, and residual risk. Group systemic themes, distinguish quick containment from durable fixes, and state areas not verified. Do not include exploit payloads or sensitive values unless the user explicitly needs a safe proof and policy permits it.\n\nObservable handoff: write the completed result to `security/security-architecture-review.md` in the project's artifacts drawer with `write_artifact`. Do not merely describe what the file would contain. Re-read it with `read_artifact` before finishing this phase and repair any incomplete sections.",
|
|
181
|
+
"suggestedRole": "security reviewer",
|
|
182
|
+
"advanceWhen": {
|
|
183
|
+
"file": "security/security-architecture-review.md",
|
|
184
|
+
"minBytes": 1600,
|
|
185
|
+
"sniff": "nonempty",
|
|
186
|
+
"requireChange": true,
|
|
187
|
+
"artifact": true,
|
|
188
|
+
"goto": "evaluate"
|
|
189
|
+
},
|
|
190
|
+
"gate": {
|
|
191
|
+
"at": "completion",
|
|
192
|
+
"checks": [
|
|
193
|
+
{
|
|
194
|
+
"kind": "minBytes",
|
|
195
|
+
"file": "security/security-architecture-review.md",
|
|
196
|
+
"bytes": 1600,
|
|
197
|
+
"artifact": true
|
|
198
|
+
},
|
|
199
|
+
{
|
|
200
|
+
"kind": "sniff",
|
|
201
|
+
"file": "security/security-architecture-review.md",
|
|
202
|
+
"sniff": "nonempty",
|
|
203
|
+
"artifact": true
|
|
204
|
+
},
|
|
205
|
+
{
|
|
206
|
+
"kind": "contains",
|
|
207
|
+
"file": "security/security-architecture-review.md",
|
|
208
|
+
"pattern": "^##\\s+Executive risk posture",
|
|
209
|
+
"flags": "im",
|
|
210
|
+
"label": "Executive risk posture section",
|
|
211
|
+
"artifact": true
|
|
212
|
+
},
|
|
213
|
+
{
|
|
214
|
+
"kind": "contains",
|
|
215
|
+
"file": "security/security-architecture-review.md",
|
|
216
|
+
"pattern": "^##\\s+What is working",
|
|
217
|
+
"flags": "im",
|
|
218
|
+
"label": "What is working section",
|
|
219
|
+
"artifact": true
|
|
220
|
+
},
|
|
221
|
+
{
|
|
222
|
+
"kind": "contains",
|
|
223
|
+
"file": "security/security-architecture-review.md",
|
|
224
|
+
"pattern": "^##\\s+Prioritized findings",
|
|
225
|
+
"flags": "im",
|
|
226
|
+
"label": "Prioritized findings section",
|
|
227
|
+
"artifact": true
|
|
228
|
+
},
|
|
229
|
+
{
|
|
230
|
+
"kind": "contains",
|
|
231
|
+
"file": "security/security-architecture-review.md",
|
|
232
|
+
"pattern": "^##\\s+Remediation plan",
|
|
233
|
+
"flags": "im",
|
|
234
|
+
"label": "Remediation plan section",
|
|
235
|
+
"artifact": true
|
|
236
|
+
},
|
|
237
|
+
{
|
|
238
|
+
"kind": "contains",
|
|
239
|
+
"file": "security/security-architecture-review.md",
|
|
240
|
+
"pattern": "^##\\s+Verification",
|
|
241
|
+
"flags": "im",
|
|
242
|
+
"label": "Verification section",
|
|
243
|
+
"artifact": true
|
|
244
|
+
},
|
|
245
|
+
{
|
|
246
|
+
"kind": "contains",
|
|
247
|
+
"file": "security/security-architecture-review.md",
|
|
248
|
+
"pattern": "^##\\s+Unverified areas",
|
|
249
|
+
"flags": "im",
|
|
250
|
+
"label": "Unverified areas section",
|
|
251
|
+
"artifact": true
|
|
252
|
+
}
|
|
253
|
+
],
|
|
254
|
+
"onReject": "report",
|
|
255
|
+
"maxAttempts": 3
|
|
256
|
+
},
|
|
257
|
+
"next": "evaluate"
|
|
258
|
+
},
|
|
259
|
+
{
|
|
260
|
+
"id": "evaluate",
|
|
261
|
+
"name": "Evaluate the deliverable",
|
|
262
|
+
"description": "Independently grade the observable deliverable and route it to finish, repair, or user escalation.",
|
|
263
|
+
"prompt": "Review `security/security-architecture-review.md`, `security/review-scope.md`, `security/findings-register.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. Scope, assets, trust boundaries, actors, data flows, and review limits are explicit.\n2. Coverage includes identity, authorization, secrets, dependencies, inputs, storage, network, logging, updates, and operational failure paths where applicable.\n3. Every confirmed finding has inspectable evidence, realistic preconditions, impact, severity, and confidence; pattern-only suspicions are not promoted.\n4. No secret value or unsafe exploit detail is exposed in the deliverables.\n5. Remediation is prioritized, owned, verifiable, and distinguishes containment from durable control repair.\n6. Positive controls, rejected hypotheses, residual risk, and unverified areas are reported honestly.\n\nOpen every review target with `read_artifact`. Write the evidence-backed review to `reviews/security-architecture-review-evaluation.md` in the artifacts drawer with `write_artifact`. 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.",
|
|
264
|
+
"suggestedRole": "independent security reviewer",
|
|
265
|
+
"gate": {
|
|
266
|
+
"at": "completion",
|
|
267
|
+
"checks": [
|
|
268
|
+
{
|
|
269
|
+
"kind": "minBytes",
|
|
270
|
+
"file": "reviews/security-architecture-review-evaluation.md",
|
|
271
|
+
"bytes": 400,
|
|
272
|
+
"artifact": true
|
|
273
|
+
},
|
|
274
|
+
{
|
|
275
|
+
"kind": "contains",
|
|
276
|
+
"file": "reviews/security-architecture-review-evaluation.md",
|
|
277
|
+
"pattern": "Verdict:\\s*(?:PASS|REVISE)",
|
|
278
|
+
"flags": "i",
|
|
279
|
+
"label": "explicit PASS or REVISE verdict",
|
|
280
|
+
"artifact": true
|
|
281
|
+
}
|
|
282
|
+
],
|
|
283
|
+
"onReject": "evaluate",
|
|
284
|
+
"maxAttempts": 3
|
|
285
|
+
},
|
|
286
|
+
"next": "repair"
|
|
287
|
+
},
|
|
288
|
+
{
|
|
289
|
+
"id": "repair",
|
|
290
|
+
"name": "Repair the deliverable",
|
|
291
|
+
"description": "Fix only the concrete gaps from the latest independent review.",
|
|
292
|
+
"prompt": "Read `reviews/security-architecture-review-evaluation.md` with `read_artifact` and repair every failed criterion in `security/security-architecture-review.md`, `security/review-scope.md`, `security/findings-register.md`. Make the changes in the actual artifact files with `write_artifact`, not in the workspace, task notes, or a reply. Preserve evidence that already passed. Re-run or re-check anything the reviewer found unproven. Ensure `security/security-architecture-review.md` is genuinely updated this turn so the repair is observable, then hand it back for independent evaluation.",
|
|
293
|
+
"suggestedRole": "application security engineer",
|
|
294
|
+
"advanceWhen": {
|
|
295
|
+
"file": "security/security-architecture-review.md",
|
|
296
|
+
"minBytes": 1600,
|
|
297
|
+
"sniff": "nonempty",
|
|
298
|
+
"requireChange": true,
|
|
299
|
+
"artifact": true,
|
|
300
|
+
"goto": "evaluate"
|
|
301
|
+
},
|
|
302
|
+
"gate": {
|
|
303
|
+
"at": "completion",
|
|
304
|
+
"checks": [
|
|
305
|
+
{
|
|
306
|
+
"kind": "minBytes",
|
|
307
|
+
"file": "security/security-architecture-review.md",
|
|
308
|
+
"bytes": 1600,
|
|
309
|
+
"artifact": true
|
|
310
|
+
},
|
|
311
|
+
{
|
|
312
|
+
"kind": "sniff",
|
|
313
|
+
"file": "security/security-architecture-review.md",
|
|
314
|
+
"sniff": "nonempty",
|
|
315
|
+
"artifact": true
|
|
316
|
+
},
|
|
317
|
+
{
|
|
318
|
+
"kind": "contains",
|
|
319
|
+
"file": "security/security-architecture-review.md",
|
|
320
|
+
"pattern": "^##\\s+Executive risk posture",
|
|
321
|
+
"flags": "im",
|
|
322
|
+
"label": "Executive risk posture section",
|
|
323
|
+
"artifact": true
|
|
324
|
+
},
|
|
325
|
+
{
|
|
326
|
+
"kind": "contains",
|
|
327
|
+
"file": "security/security-architecture-review.md",
|
|
328
|
+
"pattern": "^##\\s+What is working",
|
|
329
|
+
"flags": "im",
|
|
330
|
+
"label": "What is working section",
|
|
331
|
+
"artifact": true
|
|
332
|
+
},
|
|
333
|
+
{
|
|
334
|
+
"kind": "contains",
|
|
335
|
+
"file": "security/security-architecture-review.md",
|
|
336
|
+
"pattern": "^##\\s+Prioritized findings",
|
|
337
|
+
"flags": "im",
|
|
338
|
+
"label": "Prioritized findings section",
|
|
339
|
+
"artifact": true
|
|
340
|
+
},
|
|
341
|
+
{
|
|
342
|
+
"kind": "contains",
|
|
343
|
+
"file": "security/security-architecture-review.md",
|
|
344
|
+
"pattern": "^##\\s+Remediation plan",
|
|
345
|
+
"flags": "im",
|
|
346
|
+
"label": "Remediation plan section",
|
|
347
|
+
"artifact": true
|
|
348
|
+
},
|
|
349
|
+
{
|
|
350
|
+
"kind": "contains",
|
|
351
|
+
"file": "security/security-architecture-review.md",
|
|
352
|
+
"pattern": "^##\\s+Verification",
|
|
353
|
+
"flags": "im",
|
|
354
|
+
"label": "Verification section",
|
|
355
|
+
"artifact": true
|
|
356
|
+
},
|
|
357
|
+
{
|
|
358
|
+
"kind": "contains",
|
|
359
|
+
"file": "security/security-architecture-review.md",
|
|
360
|
+
"pattern": "^##\\s+Unverified areas",
|
|
361
|
+
"flags": "im",
|
|
362
|
+
"label": "Unverified areas section",
|
|
363
|
+
"artifact": true
|
|
364
|
+
}
|
|
365
|
+
],
|
|
366
|
+
"onReject": "repair",
|
|
367
|
+
"maxAttempts": 3
|
|
368
|
+
},
|
|
369
|
+
"next": "evaluate"
|
|
370
|
+
},
|
|
371
|
+
{
|
|
372
|
+
"id": "finish",
|
|
373
|
+
"name": "Finish",
|
|
374
|
+
"description": "All deterministic and reviewer criteria passed.",
|
|
375
|
+
"prompt": "The independent review passed. Read `reviews/security-architecture-review-evaluation.md` with `read_artifact`, then use `write_task_note` to record a concise DONE summary with the final deliverable paths (`security/security-architecture-review.md`, `security/review-scope.md`, `security/findings-register.md`) and the evidence that each acceptance criterion passed. Report DONE without starting new work.",
|
|
376
|
+
"suggestedRole": "project lead",
|
|
377
|
+
"terminal": true
|
|
378
|
+
},
|
|
379
|
+
{
|
|
380
|
+
"id": "needs-user",
|
|
381
|
+
"name": "Escalate unresolved concerns",
|
|
382
|
+
"description": "The bounded repair loop ended without a defensible pass.",
|
|
383
|
+
"prompt": "The deliverable did not pass after 3 review rounds. Do not claim success. Read `reviews/security-architecture-review-evaluation.md` with `read_artifact`, 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.",
|
|
384
|
+
"suggestedRole": "project lead",
|
|
385
|
+
"terminal": true
|
|
386
|
+
}
|
|
387
|
+
],
|
|
388
|
+
"version": "2.0.1",
|
|
389
|
+
"releasedAt": "2026-08-13T00:00:00Z"
|
|
390
|
+
}
|