@rune-kit/rune 2.10.0 → 2.11.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (205) hide show
  1. package/LICENSE +21 -21
  2. package/README.md +8 -6
  3. package/commands/rune.md +168 -168
  4. package/contexts/dev.md +34 -34
  5. package/contexts/research.md +43 -43
  6. package/contexts/review.md +55 -55
  7. package/extensions/ai-ml/PACK.md +88 -88
  8. package/extensions/ai-ml/skills/ai-agents.md +172 -172
  9. package/extensions/ai-ml/skills/code-sandbox.md +187 -187
  10. package/extensions/ai-ml/skills/deep-research.md +146 -146
  11. package/extensions/ai-ml/skills/embedding-search.md +66 -66
  12. package/extensions/ai-ml/skills/fine-tuning-guide.md +74 -74
  13. package/extensions/ai-ml/skills/llm-architect.md +125 -125
  14. package/extensions/ai-ml/skills/llm-integration.md +64 -64
  15. package/extensions/ai-ml/skills/prompt-patterns.md +72 -72
  16. package/extensions/ai-ml/skills/rag-patterns.md +66 -66
  17. package/extensions/ai-ml/skills/web-extraction.md +114 -114
  18. package/extensions/analytics/PACK.md +92 -92
  19. package/extensions/analytics/skills/ab-testing.md +72 -72
  20. package/extensions/analytics/skills/dashboard-patterns.md +83 -83
  21. package/extensions/analytics/skills/data-validation.md +68 -68
  22. package/extensions/analytics/skills/funnel-analysis.md +81 -81
  23. package/extensions/analytics/skills/sql-patterns.md +57 -57
  24. package/extensions/analytics/skills/statistical-analysis.md +79 -79
  25. package/extensions/analytics/skills/tracking-setup.md +71 -71
  26. package/extensions/backend/PACK.md +104 -104
  27. package/extensions/backend/skills/api-patterns.md +84 -84
  28. package/extensions/backend/skills/async-pipeline.md +193 -193
  29. package/extensions/backend/skills/auth-patterns.md +97 -97
  30. package/extensions/backend/skills/background-jobs.md +133 -133
  31. package/extensions/backend/skills/caching-patterns.md +108 -108
  32. package/extensions/backend/skills/cli-generation.md +133 -133
  33. package/extensions/backend/skills/database-patterns.md +87 -87
  34. package/extensions/backend/skills/middleware-patterns.md +104 -104
  35. package/extensions/chrome-ext/PACK.md +93 -93
  36. package/extensions/chrome-ext/skills/cws-preflight.md +143 -143
  37. package/extensions/chrome-ext/skills/cws-publish.md +104 -104
  38. package/extensions/chrome-ext/skills/ext-ai-integration.md +251 -251
  39. package/extensions/chrome-ext/skills/ext-messaging.md +139 -139
  40. package/extensions/chrome-ext/skills/ext-storage.md +133 -133
  41. package/extensions/chrome-ext/skills/mv3-scaffold.md +164 -164
  42. package/extensions/content/PACK.md +96 -96
  43. package/extensions/content/skills/blog-patterns.md +88 -88
  44. package/extensions/content/skills/cms-integration.md +131 -131
  45. package/extensions/content/skills/content-scoring.md +107 -107
  46. package/extensions/content/skills/i18n.md +83 -83
  47. package/extensions/content/skills/mdx-authoring.md +137 -137
  48. package/extensions/content/skills/reference.md +1014 -1014
  49. package/extensions/content/skills/seo-patterns.md +67 -67
  50. package/extensions/content/skills/video-repurpose.md +153 -153
  51. package/extensions/devops/PACK.md +101 -101
  52. package/extensions/devops/skills/chaos-testing.md +67 -67
  53. package/extensions/devops/skills/ci-cd.md +75 -75
  54. package/extensions/devops/skills/docker.md +58 -58
  55. package/extensions/devops/skills/edge-serverless.md +163 -163
  56. package/extensions/devops/skills/infra-as-code.md +158 -158
  57. package/extensions/devops/skills/kubernetes.md +110 -110
  58. package/extensions/devops/skills/monitoring.md +57 -57
  59. package/extensions/devops/skills/server-setup.md +64 -64
  60. package/extensions/devops/skills/ssl-domain.md +42 -42
  61. package/extensions/ecommerce/PACK.md +116 -116
  62. package/extensions/ecommerce/skills/cart-system.md +79 -79
  63. package/extensions/ecommerce/skills/inventory-mgmt.md +102 -102
  64. package/extensions/ecommerce/skills/order-management.md +126 -126
  65. package/extensions/ecommerce/skills/payment-integration.md +472 -472
  66. package/extensions/ecommerce/skills/shopify-dev.md +69 -69
  67. package/extensions/ecommerce/skills/subscription-billing.md +93 -93
  68. package/extensions/ecommerce/skills/tax-compliance.md +117 -117
  69. package/extensions/gamedev/PACK.md +142 -142
  70. package/extensions/gamedev/skills/asset-pipeline.md +74 -74
  71. package/extensions/gamedev/skills/audio-system.md +129 -129
  72. package/extensions/gamedev/skills/camera-system.md +87 -87
  73. package/extensions/gamedev/skills/ecs.md +98 -98
  74. package/extensions/gamedev/skills/game-loops.md +72 -72
  75. package/extensions/gamedev/skills/input-system.md +199 -199
  76. package/extensions/gamedev/skills/multiplayer.md +180 -180
  77. package/extensions/gamedev/skills/particles.md +105 -105
  78. package/extensions/gamedev/skills/physics-engine.md +89 -89
  79. package/extensions/gamedev/skills/scene-management.md +146 -146
  80. package/extensions/gamedev/skills/threejs-patterns.md +90 -90
  81. package/extensions/gamedev/skills/webgl.md +71 -71
  82. package/extensions/mobile/PACK.md +106 -106
  83. package/extensions/mobile/skills/app-store-connect.md +152 -152
  84. package/extensions/mobile/skills/app-store-prep.md +66 -66
  85. package/extensions/mobile/skills/deep-linking.md +109 -109
  86. package/extensions/mobile/skills/flutter.md +60 -60
  87. package/extensions/mobile/skills/ios-build-pipeline.md +142 -142
  88. package/extensions/mobile/skills/native-bridge.md +66 -66
  89. package/extensions/mobile/skills/ota-updates.md +97 -97
  90. package/extensions/mobile/skills/push-notifications.md +111 -111
  91. package/extensions/mobile/skills/react-native.md +82 -82
  92. package/extensions/saas/PACK.md +116 -116
  93. package/extensions/saas/skills/billing-integration.md +200 -200
  94. package/extensions/saas/skills/feature-flags.md +130 -130
  95. package/extensions/saas/skills/multi-tenant.md +103 -103
  96. package/extensions/saas/skills/onboarding-flow.md +139 -139
  97. package/extensions/saas/skills/subscription-flow.md +95 -95
  98. package/extensions/saas/skills/team-management.md +144 -144
  99. package/extensions/security/PACK.md +99 -99
  100. package/extensions/security/skills/api-security.md +140 -140
  101. package/extensions/security/skills/compliance.md +68 -68
  102. package/extensions/security/skills/owasp-audit.md +64 -64
  103. package/extensions/security/skills/pentest-patterns.md +77 -77
  104. package/extensions/security/skills/secret-mgmt.md +65 -65
  105. package/extensions/security/skills/supply-chain.md +65 -65
  106. package/extensions/trading/PACK.md +80 -80
  107. package/extensions/trading/skills/chart-components.md +55 -55
  108. package/extensions/trading/skills/experiment-loop.md +125 -125
  109. package/extensions/trading/skills/fintech-patterns.md +47 -47
  110. package/extensions/trading/skills/indicator-library.md +58 -58
  111. package/extensions/trading/skills/quant-analysis.md +111 -111
  112. package/extensions/trading/skills/realtime-data.md +58 -58
  113. package/extensions/trading/skills/trade-logic.md +104 -104
  114. package/extensions/ui/PACK.md +130 -130
  115. package/extensions/ui/skills/a11y-audit.md +91 -91
  116. package/extensions/ui/skills/animation-patterns.md +127 -127
  117. package/extensions/ui/skills/component-patterns.md +100 -100
  118. package/extensions/ui/skills/design-decision.md +108 -108
  119. package/extensions/ui/skills/design-system.md +68 -68
  120. package/extensions/ui/skills/landing-patterns.md +155 -155
  121. package/extensions/ui/skills/palette-picker.md +173 -173
  122. package/extensions/ui/skills/react-health.md +90 -90
  123. package/extensions/ui/skills/type-system.md +125 -125
  124. package/extensions/ui/skills/web-vitals.md +153 -153
  125. package/extensions/zalo/PACK.md +145 -145
  126. package/extensions/zalo/skills/zalo-oa-mcp.md +317 -317
  127. package/extensions/zalo/skills/zalo-oa-messaging.md +429 -429
  128. package/extensions/zalo/skills/zalo-oa-setup.md +236 -236
  129. package/extensions/zalo/skills/zalo-oa-webhook.md +189 -189
  130. package/extensions/zalo/skills/zalo-personal-messaging.md +194 -194
  131. package/extensions/zalo/skills/zalo-personal-setup.md +153 -153
  132. package/extensions/zalo/skills/zalo-rate-guard.md +219 -219
  133. package/hooks/auto-format/index.cjs +48 -48
  134. package/hooks/hooks.json +111 -111
  135. package/hooks/post-session-reflect/index.cjs +189 -189
  136. package/hooks/pre-compact/index.cjs +95 -95
  137. package/hooks/run-hook.cmd +1 -1
  138. package/hooks/secrets-scan/index.cjs +100 -100
  139. package/hooks/session-start/index.cjs +71 -71
  140. package/hooks/typecheck/index.cjs +65 -65
  141. package/package.json +63 -63
  142. package/references/ui-pro-max-data/LICENSE-UI-PRO-MAX +21 -21
  143. package/references/ui-pro-max-data/charts.csv +26 -26
  144. package/references/ui-pro-max-data/colors.csv +161 -161
  145. package/references/ui-pro-max-data/styles.csv +68 -68
  146. package/references/ui-pro-max-data/typography.csv +74 -74
  147. package/references/ui-pro-max-data/ui-reasoning.csv +162 -162
  148. package/references/ui-pro-max-data/ux-guidelines.csv +99 -99
  149. package/skills/adversary/SKILL.md +283 -283
  150. package/skills/asset-creator/SKILL.md +157 -157
  151. package/skills/audit/SKILL.md +147 -2
  152. package/skills/autopsy/SKILL.md +335 -335
  153. package/skills/brainstorm/SKILL.md +342 -342
  154. package/skills/browser-pilot/SKILL.md +168 -168
  155. package/skills/constraint-check/SKILL.md +165 -165
  156. package/skills/context-engine/SKILL.md +404 -404
  157. package/skills/cook/SKILL.md +917 -863
  158. package/skills/db/SKILL.md +273 -273
  159. package/skills/debug/SKILL.md +465 -465
  160. package/skills/dependency-doctor/SKILL.md +265 -235
  161. package/skills/deploy/SKILL.md +274 -231
  162. package/skills/design/DESIGN-REFERENCE.md +365 -365
  163. package/skills/design/SKILL.md +589 -589
  164. package/skills/doc-processor/SKILL.md +254 -254
  165. package/skills/docs/SKILL.md +374 -374
  166. package/skills/docs-seeker/SKILL.md +177 -177
  167. package/skills/fix/SKILL.md +330 -330
  168. package/skills/git/SKILL.md +339 -339
  169. package/skills/hallucination-guard/SKILL.md +219 -219
  170. package/skills/incident/SKILL.md +254 -253
  171. package/skills/integrity-check/SKILL.md +169 -169
  172. package/skills/journal/SKILL.md +240 -240
  173. package/skills/launch/SKILL.md +344 -344
  174. package/skills/logic-guardian/SKILL.md +251 -251
  175. package/skills/marketing/SKILL.md +290 -289
  176. package/skills/mcp-builder/SKILL.md +425 -425
  177. package/skills/neural-memory/SKILL.md +362 -362
  178. package/skills/onboard/SKILL.md +404 -403
  179. package/skills/perf/SKILL.md +346 -346
  180. package/skills/plan/SKILL.md +433 -428
  181. package/skills/preflight/SKILL.md +415 -415
  182. package/skills/problem-solver/SKILL.md +380 -284
  183. package/skills/rescue/SKILL.md +474 -474
  184. package/skills/retro/SKILL.md +3 -1
  185. package/skills/review/SKILL.md +612 -588
  186. package/skills/review-intake/SKILL.md +249 -249
  187. package/skills/safeguard/SKILL.md +200 -200
  188. package/skills/sast/SKILL.md +190 -190
  189. package/skills/scaffold/SKILL.md +328 -287
  190. package/skills/scope-guard/SKILL.md +180 -180
  191. package/skills/scout/SKILL.md +263 -263
  192. package/skills/sentinel/SKILL.md +382 -381
  193. package/skills/sentinel-env/SKILL.md +254 -254
  194. package/skills/sequential-thinking/SKILL.md +234 -234
  195. package/skills/session-bridge/SKILL.md +543 -543
  196. package/skills/skill-forge/SKILL.md +581 -581
  197. package/skills/skill-router/SKILL.md +3 -0
  198. package/skills/surgeon/SKILL.md +215 -215
  199. package/skills/team/SKILL.md +556 -537
  200. package/skills/test/SKILL.md +614 -614
  201. package/skills/trend-scout/SKILL.md +145 -145
  202. package/skills/verification/SKILL.md +326 -326
  203. package/skills/video-creator/SKILL.md +201 -201
  204. package/skills/watchdog/SKILL.md +168 -168
  205. package/skills/worktree/SKILL.md +140 -140
@@ -1,77 +1,77 @@
1
- ---
2
- name: "pentest-patterns"
3
- pack: "@rune/security"
4
- description: "Penetration testing methodology — attack surface mapping, vulnerability identification, proof-of-concept construction, automated fuzzing setup, JWT attack pattern detection, GraphQL hardening, and remediation verification."
5
- model: opus
6
- tools: [Read, Edit, Write, Grep, Glob, Bash]
7
- ---
8
-
9
- # pentest-patterns
10
-
11
- Penetration testing methodology — attack surface mapping, vulnerability identification, proof-of-concept construction, automated fuzzing setup, JWT attack pattern detection, GraphQL hardening, and remediation verification. Outputs actionable PoC code, not just advisories.
12
-
13
- #### Workflow
14
-
15
- **Step 1 — Map Attack Surface**
16
- Use Grep to enumerate all HTTP endpoints, WebSocket handlers, file upload paths, and external-facing inputs. List trust boundaries: what data crosses from client to server without validation? Identify highest-value targets (auth endpoints, admin APIs, payment flows). Note GraphQL endpoints — they require separate analysis.
17
-
18
- **Step 2 — Identify and Construct PoC**
19
- For each attack vector, use Read to inspect input handling. Write minimal PoC code (curl command, script, or payload) that demonstrates the vulnerability — SSRF via URL parameter, SQL injection via unsanitized filter, IDOR via predictable ID enumeration. Keep PoCs minimal and clearly scoped to the finding.
20
-
21
- **Step 3 — JWT Attack Pattern Review**
22
- Inspect all JWT creation and validation code. Check for:
23
- - **Algorithm confusion (alg:none)** — does the validator accept `"alg":"none"` tokens?
24
- - **Key confusion (RS256 → HS256)** — if the public key is accessible, can an attacker sign HS256 tokens with it?
25
- - **Token replay** — is `jti` (JWT ID) tracked and blacklisted on logout? Is token expiry enforced server-side, not just client-side?
26
- - **Audience/issuer validation** — are `aud` and `iss` claims verified to prevent cross-service token reuse?
27
-
28
- **Step 4 — Automated Fuzzing Setup**
29
- Use property-based testing to fuzz input boundaries. Set up `fast-check` (TypeScript) or `hypothesis` (Python) to generate adversarial inputs for parsers, validators, and business logic. Focus on: integer overflows in numeric fields, Unicode normalization in string comparisons, path traversal in file name parameters, prototype pollution in object merge operations.
30
-
31
- **Step 5 — GraphQL Security Review**
32
- If a GraphQL endpoint exists: Is introspection disabled in production? Are deeply nested queries limited (max depth/complexity)? Are batch queries rate-limited independently? Check for field-level authorization — a resolver that returns user data must enforce the same ownership checks as a REST equivalent.
33
-
34
- **Step 6 — Suggest Remediation and Verify Fix**
35
- Pair each PoC with a concrete fix. After fix is applied, use Bash to re-run the PoC and confirm it no longer succeeds. Document the before/after in the security report.
36
-
37
- #### Example
38
-
39
- ```typescript
40
- // FINDING: SSRF — user-supplied URL fetched server-side without allowlist
41
- // File: src/api/webhook.ts, Line: 34
42
-
43
- // VULNERABLE: attacker can probe internal services
44
- const response = await fetch(req.body.callbackUrl)
45
- // POC: curl -X POST /api/webhook -d '{"callbackUrl":"http://169.254.169.254/latest/meta-data/"}'
46
-
47
- // REMEDIATION: validate against allowlist before fetching
48
- const ALLOWED_HOSTS = new Set(['api.partner.com', 'hooks.stripe.com'])
49
- const parsed = new URL(req.body.callbackUrl)
50
- if (!ALLOWED_HOSTS.has(parsed.hostname)) {
51
- throw new ForbiddenError('callbackUrl host not in allowlist')
52
- }
53
-
54
- // FINDING: JWT algorithm confusion
55
- // File: src/middleware/auth.ts, Line: 19
56
- // VULNERABLE: accepts any algorithm the token declares
57
- import jwt from 'jsonwebtoken'
58
- const payload = jwt.verify(token, secret) // no algorithm pin
59
-
60
- // REMEDIATION: pin algorithm explicitly
61
- const payload = jwt.verify(token, secret, { algorithms: ['HS256'] })
62
-
63
- // FUZZING SETUP: fast-check for path traversal in file name param
64
- import * as fc from 'fast-check'
65
- fc.assert(
66
- fc.property(fc.string(), (filename) => {
67
- const result = sanitizeFilename(filename)
68
- return !result.includes('..') && !result.includes('/')
69
- })
70
- )
71
-
72
- // GRAPHQL: max depth guard (graphql-depth-limit)
73
- import depthLimit from 'graphql-depth-limit'
74
- const server = new ApolloServer({
75
- validationRules: [depthLimit(5)],
76
- })
77
- ```
1
+ ---
2
+ name: "pentest-patterns"
3
+ pack: "@rune/security"
4
+ description: "Penetration testing methodology — attack surface mapping, vulnerability identification, proof-of-concept construction, automated fuzzing setup, JWT attack pattern detection, GraphQL hardening, and remediation verification."
5
+ model: opus
6
+ tools: [Read, Edit, Write, Grep, Glob, Bash]
7
+ ---
8
+
9
+ # pentest-patterns
10
+
11
+ Penetration testing methodology — attack surface mapping, vulnerability identification, proof-of-concept construction, automated fuzzing setup, JWT attack pattern detection, GraphQL hardening, and remediation verification. Outputs actionable PoC code, not just advisories.
12
+
13
+ #### Workflow
14
+
15
+ **Step 1 — Map Attack Surface**
16
+ Use Grep to enumerate all HTTP endpoints, WebSocket handlers, file upload paths, and external-facing inputs. List trust boundaries: what data crosses from client to server without validation? Identify highest-value targets (auth endpoints, admin APIs, payment flows). Note GraphQL endpoints — they require separate analysis.
17
+
18
+ **Step 2 — Identify and Construct PoC**
19
+ For each attack vector, use Read to inspect input handling. Write minimal PoC code (curl command, script, or payload) that demonstrates the vulnerability — SSRF via URL parameter, SQL injection via unsanitized filter, IDOR via predictable ID enumeration. Keep PoCs minimal and clearly scoped to the finding.
20
+
21
+ **Step 3 — JWT Attack Pattern Review**
22
+ Inspect all JWT creation and validation code. Check for:
23
+ - **Algorithm confusion (alg:none)** — does the validator accept `"alg":"none"` tokens?
24
+ - **Key confusion (RS256 → HS256)** — if the public key is accessible, can an attacker sign HS256 tokens with it?
25
+ - **Token replay** — is `jti` (JWT ID) tracked and blacklisted on logout? Is token expiry enforced server-side, not just client-side?
26
+ - **Audience/issuer validation** — are `aud` and `iss` claims verified to prevent cross-service token reuse?
27
+
28
+ **Step 4 — Automated Fuzzing Setup**
29
+ Use property-based testing to fuzz input boundaries. Set up `fast-check` (TypeScript) or `hypothesis` (Python) to generate adversarial inputs for parsers, validators, and business logic. Focus on: integer overflows in numeric fields, Unicode normalization in string comparisons, path traversal in file name parameters, prototype pollution in object merge operations.
30
+
31
+ **Step 5 — GraphQL Security Review**
32
+ If a GraphQL endpoint exists: Is introspection disabled in production? Are deeply nested queries limited (max depth/complexity)? Are batch queries rate-limited independently? Check for field-level authorization — a resolver that returns user data must enforce the same ownership checks as a REST equivalent.
33
+
34
+ **Step 6 — Suggest Remediation and Verify Fix**
35
+ Pair each PoC with a concrete fix. After fix is applied, use Bash to re-run the PoC and confirm it no longer succeeds. Document the before/after in the security report.
36
+
37
+ #### Example
38
+
39
+ ```typescript
40
+ // FINDING: SSRF — user-supplied URL fetched server-side without allowlist
41
+ // File: src/api/webhook.ts, Line: 34
42
+
43
+ // VULNERABLE: attacker can probe internal services
44
+ const response = await fetch(req.body.callbackUrl)
45
+ // POC: curl -X POST /api/webhook -d '{"callbackUrl":"http://169.254.169.254/latest/meta-data/"}'
46
+
47
+ // REMEDIATION: validate against allowlist before fetching
48
+ const ALLOWED_HOSTS = new Set(['api.partner.com', 'hooks.stripe.com'])
49
+ const parsed = new URL(req.body.callbackUrl)
50
+ if (!ALLOWED_HOSTS.has(parsed.hostname)) {
51
+ throw new ForbiddenError('callbackUrl host not in allowlist')
52
+ }
53
+
54
+ // FINDING: JWT algorithm confusion
55
+ // File: src/middleware/auth.ts, Line: 19
56
+ // VULNERABLE: accepts any algorithm the token declares
57
+ import jwt from 'jsonwebtoken'
58
+ const payload = jwt.verify(token, secret) // no algorithm pin
59
+
60
+ // REMEDIATION: pin algorithm explicitly
61
+ const payload = jwt.verify(token, secret, { algorithms: ['HS256'] })
62
+
63
+ // FUZZING SETUP: fast-check for path traversal in file name param
64
+ import * as fc from 'fast-check'
65
+ fc.assert(
66
+ fc.property(fc.string(), (filename) => {
67
+ const result = sanitizeFilename(filename)
68
+ return !result.includes('..') && !result.includes('/')
69
+ })
70
+ )
71
+
72
+ // GRAPHQL: max depth guard (graphql-depth-limit)
73
+ import depthLimit from 'graphql-depth-limit'
74
+ const server = new ApolloServer({
75
+ validationRules: [depthLimit(5)],
76
+ })
77
+ ```
@@ -1,65 +1,65 @@
1
- ---
2
- name: "secret-mgmt"
3
- pack: "@rune/security"
4
- description: "Secret management patterns — audit current secret handling, design vault or environment strategy, implement rotation policies, detect secrets in pre-commit hooks, and verify zero leaks in logs, errors, and source history."
5
- model: sonnet
6
- tools: [Read, Edit, Write, Grep, Glob, Bash]
7
- ---
8
-
9
- # secret-mgmt
10
-
11
- Secret management patterns — audit current secret handling, design vault or environment strategy, implement rotation policies, detect secrets in pre-commit hooks, and verify zero leaks in logs, errors, and source history.
12
-
13
- #### Workflow
14
-
15
- **Step 1 — Scan Current Secret Handling**
16
- Use Grep to search for hardcoded credentials, API keys, connection strings, and JWT secrets across all source files and config files. Check git history with Bash (`git log -S 'password' --source --all`) to surface secrets ever committed. Catalog every secret by type and location. Check for base64-encoded secrets (`grep -r 'base64' | grep -i 'key\|secret\|pass'`).
17
-
18
- **Step 2 — Design Vault or Env Strategy**
19
- Based on project type (serverless, container, bare metal), prescribe a secret backend: AWS Secrets Manager, HashiCorp Vault, Doppler, or `.env` + CI/CD injection. Define which secrets are per-environment vs per-service. Write the access pattern (IAM role, token scope, least privilege).
20
-
21
- **Step 3 — .env File Safety Audit**
22
- Verify `.env` and `.env.*` files are in `.gitignore`. Check that a `.env.example` exists with placeholder values (not real secrets). Audit CI/CD environment variable lists — flag any variable that contains `SECRET`, `KEY`, `TOKEN`, or `PASSWORD` that is not masked. Verify `.env.example` is kept in sync with application startup validation schema.
23
-
24
- **Step 4 — Secret Rotation Automation**
25
- Document rotation schedule per secret type. For AWS: use Secrets Manager rotation Lambda triggered on schedule. For GitHub Actions: document secret rotation runbook (rotate in provider → update in repo Settings → verify deployment). Add startup validation that fails fast if any required env var is absent or malformed. Set up gitleaks or trufflehog as pre-commit hook to catch accidental commits before they hit remote.
26
-
27
- **Step 5 — Verify No Leaks in Runtime**
28
- Use Grep to confirm secrets never appear in log statements, error responses, or exception stack traces. Check error serialization — does the global error handler accidentally serialize `process.env` or full request headers into the response body?
29
-
30
- #### Example
31
-
32
- ```typescript
33
- // PATTERN: startup validation — fail fast on missing secrets
34
- import { z } from 'zod'
35
-
36
- const SecretsSchema = z.object({
37
- DATABASE_URL: z.string().url(),
38
- JWT_SECRET: z.string().min(32),
39
- STRIPE_SECRET: z.string().startsWith('sk_'),
40
- OPENAI_API_KEY: z.string().startsWith('sk-'),
41
- })
42
-
43
- export const secrets = SecretsSchema.parse(process.env) // throws at boot if absent/malformed
44
-
45
- // NEVER log secrets — use masked representation
46
- logger.info(`DB connected to ${new URL(secrets.DATABASE_URL).hostname}`)
47
-
48
- // PRE-COMMIT: .gitleaks.toml — scan for secrets before commit
49
- // [[rules]]
50
- // id = "generic-api-key"
51
- // description = "Generic API Key"
52
- // regex = '''(?i)(api_key|apikey|secret)[^\w]*[=:]\s*['"]?[0-9a-zA-Z\-_]{16,}'''
53
- // entropy = 3.5
54
-
55
- // ROTATION LAMBDA: AWS Secrets Manager rotation handler skeleton
56
- export async function handler(event: SecretsManagerRotationEvent) {
57
- const { SecretId, ClientRequestToken, Step } = event
58
- switch (Step) {
59
- case 'createSecret': await createNewVersion(SecretId, ClientRequestToken); break
60
- case 'setSecret': await updateDownstreamService(SecretId, ClientRequestToken); break
61
- case 'testSecret': await validateNewSecret(SecretId, ClientRequestToken); break
62
- case 'finishSecret': await finalizeRotation(SecretId, ClientRequestToken); break
63
- }
64
- }
65
- ```
1
+ ---
2
+ name: "secret-mgmt"
3
+ pack: "@rune/security"
4
+ description: "Secret management patterns — audit current secret handling, design vault or environment strategy, implement rotation policies, detect secrets in pre-commit hooks, and verify zero leaks in logs, errors, and source history."
5
+ model: sonnet
6
+ tools: [Read, Edit, Write, Grep, Glob, Bash]
7
+ ---
8
+
9
+ # secret-mgmt
10
+
11
+ Secret management patterns — audit current secret handling, design vault or environment strategy, implement rotation policies, detect secrets in pre-commit hooks, and verify zero leaks in logs, errors, and source history.
12
+
13
+ #### Workflow
14
+
15
+ **Step 1 — Scan Current Secret Handling**
16
+ Use Grep to search for hardcoded credentials, API keys, connection strings, and JWT secrets across all source files and config files. Check git history with Bash (`git log -S 'password' --source --all`) to surface secrets ever committed. Catalog every secret by type and location. Check for base64-encoded secrets (`grep -r 'base64' | grep -i 'key\|secret\|pass'`).
17
+
18
+ **Step 2 — Design Vault or Env Strategy**
19
+ Based on project type (serverless, container, bare metal), prescribe a secret backend: AWS Secrets Manager, HashiCorp Vault, Doppler, or `.env` + CI/CD injection. Define which secrets are per-environment vs per-service. Write the access pattern (IAM role, token scope, least privilege).
20
+
21
+ **Step 3 — .env File Safety Audit**
22
+ Verify `.env` and `.env.*` files are in `.gitignore`. Check that a `.env.example` exists with placeholder values (not real secrets). Audit CI/CD environment variable lists — flag any variable that contains `SECRET`, `KEY`, `TOKEN`, or `PASSWORD` that is not masked. Verify `.env.example` is kept in sync with application startup validation schema.
23
+
24
+ **Step 4 — Secret Rotation Automation**
25
+ Document rotation schedule per secret type. For AWS: use Secrets Manager rotation Lambda triggered on schedule. For GitHub Actions: document secret rotation runbook (rotate in provider → update in repo Settings → verify deployment). Add startup validation that fails fast if any required env var is absent or malformed. Set up gitleaks or trufflehog as pre-commit hook to catch accidental commits before they hit remote.
26
+
27
+ **Step 5 — Verify No Leaks in Runtime**
28
+ Use Grep to confirm secrets never appear in log statements, error responses, or exception stack traces. Check error serialization — does the global error handler accidentally serialize `process.env` or full request headers into the response body?
29
+
30
+ #### Example
31
+
32
+ ```typescript
33
+ // PATTERN: startup validation — fail fast on missing secrets
34
+ import { z } from 'zod'
35
+
36
+ const SecretsSchema = z.object({
37
+ DATABASE_URL: z.string().url(),
38
+ JWT_SECRET: z.string().min(32),
39
+ STRIPE_SECRET: z.string().startsWith('sk_'),
40
+ OPENAI_API_KEY: z.string().startsWith('sk-'),
41
+ })
42
+
43
+ export const secrets = SecretsSchema.parse(process.env) // throws at boot if absent/malformed
44
+
45
+ // NEVER log secrets — use masked representation
46
+ logger.info(`DB connected to ${new URL(secrets.DATABASE_URL).hostname}`)
47
+
48
+ // PRE-COMMIT: .gitleaks.toml — scan for secrets before commit
49
+ // [[rules]]
50
+ // id = "generic-api-key"
51
+ // description = "Generic API Key"
52
+ // regex = '''(?i)(api_key|apikey|secret)[^\w]*[=:]\s*['"]?[0-9a-zA-Z\-_]{16,}'''
53
+ // entropy = 3.5
54
+
55
+ // ROTATION LAMBDA: AWS Secrets Manager rotation handler skeleton
56
+ export async function handler(event: SecretsManagerRotationEvent) {
57
+ const { SecretId, ClientRequestToken, Step } = event
58
+ switch (Step) {
59
+ case 'createSecret': await createNewVersion(SecretId, ClientRequestToken); break
60
+ case 'setSecret': await updateDownstreamService(SecretId, ClientRequestToken); break
61
+ case 'testSecret': await validateNewSecret(SecretId, ClientRequestToken); break
62
+ case 'finishSecret': await finalizeRotation(SecretId, ClientRequestToken); break
63
+ }
64
+ }
65
+ ```
@@ -1,65 +1,65 @@
1
- ---
2
- name: "supply-chain"
3
- pack: "@rune/security"
4
- description: "Supply chain security analysis — detect dependency confusion attacks, typosquatting, lockfile injection, manifest confusion, and verify SLSA provenance attestations. Generates a complete supply chain risk report."
5
- model: sonnet
6
- tools: [Read, Edit, Write, Grep, Glob, Bash]
7
- ---
8
-
9
- # supply-chain
10
-
11
- Supply chain security analysis — detect dependency confusion attacks, typosquatting, lockfile injection, manifest confusion, and verify SLSA provenance attestations. Generates a complete supply chain risk report.
12
-
13
- #### Workflow
14
-
15
- **Step 1 — Inventory Dependencies**
16
- Use Read on `package.json` / `requirements.txt` / `go.mod` / `Cargo.toml`. Build a complete dependency graph including devDependencies and indirect (transitive) dependencies via `npm ls --all --json` or `pip-audit --format json`. Flag phantom dependencies — packages used in source code (via import) but not declared in the manifest.
17
-
18
- **Step 2 — Check Naming Collisions (Dependency Confusion)**
19
- For any private/internal package names (scoped like `@company/internal-lib` OR unscoped names that look internal), verify they also exist on the public registry (npm, PyPI, RubyGems). If a package name is registered internally but NOT on the public registry, an attacker can register it there — package managers may prefer the public version depending on configuration. Flag all such packages for private registry enforcement.
20
-
21
- **Step 3 — Typosquatting Detection**
22
- Compare each dependency name against a known-popular packages list. Flag names with edit distance ≤ 2 from a popular package: `lodas` (lodash), `requets` (requests), `coloers` (colors), `expres` (express). Also flag: packages with unusual character substitution (zero vs letter o, l vs 1), recently published packages with very high download counts but no GitHub stars, and packages with install scripts that execute shell commands.
23
-
24
- **Step 4 — Verify Lockfile Integrity**
25
- Check that `package-lock.json` / `yarn.lock` / `pnpm-lock.yaml` exists and is committed. Verify resolved hashes match between manifest and lockfile. Detect lockfile injection: compare resolved URLs — any `file:`, `git+`, or non-registry URL in the lockfile for a package expected to come from the registry is a red flag. Run `npm audit signatures` (npm ≥ 9.5) to verify package signatures against the registry's public key.
26
-
27
- **Step 5 — Audit Transitive Dependencies and Known Malicious Packages**
28
- Run `npm audit --all` / `pip-audit` / `cargo audit`. Cross-reference against OSV (Open Source Vulnerabilities) database. Check install scripts: `cat node_modules/<pkg>/package.json | jq '.scripts.install,.scripts.postinstall'` — any install script running `curl | sh` or spawning child processes is HIGH severity.
29
-
30
- **Step 6 — SLSA Provenance and Report**
31
- For critical dependencies, check if SLSA provenance attestations are available (`npm install @sigstore/bundle` / cosign verify-attestation). Emit `.rune/security/supply-chain-report.md` with: dependency inventory, collision risks, typosquatting flags, lockfile anomalies, install script warnings, and remediation steps.
32
-
33
- #### Example
34
-
35
- ```bash
36
- # STEP 1: Full dependency inventory with phantom dep check
37
- npm ls --all --json 2>/dev/null | jq '[.. | objects | select(.version) | {name: .name, version: .version}]' > deps-inventory.json
38
-
39
- # STEP 2: Check if internal package exists on public registry
40
- # VULNERABLE: @company/utils exists internally but NOT on npm → dependency confusion risk
41
- curl -s https://registry.npmjs.org/@company/utils | jq '.error'
42
- # If returns null (package exists publicly) → verify it's YOUR package, not an attacker's
43
-
44
- # STEP 3: Detect install scripts in dependencies
45
- for pkg in node_modules/*/package.json; do
46
- scripts=$(jq -r '(.scripts.install // "") + " " + (.scripts.postinstall // "")' "$pkg")
47
- if echo "$scripts" | grep -qE 'curl|wget|exec|spawn|child_process'; then
48
- echo "WARN: install script in $pkg: $scripts"
49
- fi
50
- done
51
-
52
- # STEP 4: Verify lockfile integrity (npm ≥ 9.5)
53
- npm audit signatures
54
- # Expected: "audited X packages, 0 packages have invalid signatures"
55
- ```
56
-
57
- ```typescript
58
- // PATTERN: enforce private registry for scoped packages (.npmrc)
59
- // @company:registry=https://npm.company.internal
60
- // //npm.company.internal/:_authToken=${NPM_INTERNAL_TOKEN}
61
-
62
- // PATTERN: detect phantom dependencies in TypeScript
63
- // Any import from a package not in dependencies/devDependencies = phantom dep
64
- // Tool: depcheck → npx depcheck --json | jq '.missing'
65
- ```
1
+ ---
2
+ name: "supply-chain"
3
+ pack: "@rune/security"
4
+ description: "Supply chain security analysis — detect dependency confusion attacks, typosquatting, lockfile injection, manifest confusion, and verify SLSA provenance attestations. Generates a complete supply chain risk report."
5
+ model: sonnet
6
+ tools: [Read, Edit, Write, Grep, Glob, Bash]
7
+ ---
8
+
9
+ # supply-chain
10
+
11
+ Supply chain security analysis — detect dependency confusion attacks, typosquatting, lockfile injection, manifest confusion, and verify SLSA provenance attestations. Generates a complete supply chain risk report.
12
+
13
+ #### Workflow
14
+
15
+ **Step 1 — Inventory Dependencies**
16
+ Use Read on `package.json` / `requirements.txt` / `go.mod` / `Cargo.toml`. Build a complete dependency graph including devDependencies and indirect (transitive) dependencies via `npm ls --all --json` or `pip-audit --format json`. Flag phantom dependencies — packages used in source code (via import) but not declared in the manifest.
17
+
18
+ **Step 2 — Check Naming Collisions (Dependency Confusion)**
19
+ For any private/internal package names (scoped like `@company/internal-lib` OR unscoped names that look internal), verify they also exist on the public registry (npm, PyPI, RubyGems). If a package name is registered internally but NOT on the public registry, an attacker can register it there — package managers may prefer the public version depending on configuration. Flag all such packages for private registry enforcement.
20
+
21
+ **Step 3 — Typosquatting Detection**
22
+ Compare each dependency name against a known-popular packages list. Flag names with edit distance ≤ 2 from a popular package: `lodas` (lodash), `requets` (requests), `coloers` (colors), `expres` (express). Also flag: packages with unusual character substitution (zero vs letter o, l vs 1), recently published packages with very high download counts but no GitHub stars, and packages with install scripts that execute shell commands.
23
+
24
+ **Step 4 — Verify Lockfile Integrity**
25
+ Check that `package-lock.json` / `yarn.lock` / `pnpm-lock.yaml` exists and is committed. Verify resolved hashes match between manifest and lockfile. Detect lockfile injection: compare resolved URLs — any `file:`, `git+`, or non-registry URL in the lockfile for a package expected to come from the registry is a red flag. Run `npm audit signatures` (npm ≥ 9.5) to verify package signatures against the registry's public key.
26
+
27
+ **Step 5 — Audit Transitive Dependencies and Known Malicious Packages**
28
+ Run `npm audit --all` / `pip-audit` / `cargo audit`. Cross-reference against OSV (Open Source Vulnerabilities) database. Check install scripts: `cat node_modules/<pkg>/package.json | jq '.scripts.install,.scripts.postinstall'` — any install script running `curl | sh` or spawning child processes is HIGH severity.
29
+
30
+ **Step 6 — SLSA Provenance and Report**
31
+ For critical dependencies, check if SLSA provenance attestations are available (`npm install @sigstore/bundle` / cosign verify-attestation). Emit `.rune/security/supply-chain-report.md` with: dependency inventory, collision risks, typosquatting flags, lockfile anomalies, install script warnings, and remediation steps.
32
+
33
+ #### Example
34
+
35
+ ```bash
36
+ # STEP 1: Full dependency inventory with phantom dep check
37
+ npm ls --all --json 2>/dev/null | jq '[.. | objects | select(.version) | {name: .name, version: .version}]' > deps-inventory.json
38
+
39
+ # STEP 2: Check if internal package exists on public registry
40
+ # VULNERABLE: @company/utils exists internally but NOT on npm → dependency confusion risk
41
+ curl -s https://registry.npmjs.org/@company/utils | jq '.error'
42
+ # If returns null (package exists publicly) → verify it's YOUR package, not an attacker's
43
+
44
+ # STEP 3: Detect install scripts in dependencies
45
+ for pkg in node_modules/*/package.json; do
46
+ scripts=$(jq -r '(.scripts.install // "") + " " + (.scripts.postinstall // "")' "$pkg")
47
+ if echo "$scripts" | grep -qE 'curl|wget|exec|spawn|child_process'; then
48
+ echo "WARN: install script in $pkg: $scripts"
49
+ fi
50
+ done
51
+
52
+ # STEP 4: Verify lockfile integrity (npm ≥ 9.5)
53
+ npm audit signatures
54
+ # Expected: "audited X packages, 0 packages have invalid signatures"
55
+ ```
56
+
57
+ ```typescript
58
+ // PATTERN: enforce private registry for scoped packages (.npmrc)
59
+ // @company:registry=https://npm.company.internal
60
+ // //npm.company.internal/:_authToken=${NPM_INTERNAL_TOKEN}
61
+
62
+ // PATTERN: detect phantom dependencies in TypeScript
63
+ // Any import from a package not in dependencies/devDependencies = phantom dep
64
+ // Tool: depcheck → npx depcheck --json | jq '.missing'
65
+ ```
@@ -1,80 +1,80 @@
1
- ---
2
- name: "@rune/trading"
3
- description: Fintech and trading patterns — real-time data, financial dashboards, technical indicators, WebSocket architecture, and experiment-driven strategy development.
4
- metadata:
5
- author: runedev
6
- version: "0.3.0"
7
- layer: L4
8
- price: "$15"
9
- target: Fintech developers
10
- format: split
11
- ---
12
-
13
- # @rune/trading
14
-
15
- ## Purpose
16
-
17
- Fintech applications demand precision that general-purpose patterns cannot guarantee. This pack groups five tightly-coupled concerns — safe money arithmetic, WebSocket reliability, financial chart rendering, streaming indicator computation, and experiment-driven strategy development — because a gap in any one layer breaks the entire trading surface. It solves the recurring problem of developers accidentally using JavaScript floats for currency, missing auto-reconnect logic, or computing indicators on stale snapshots. Activates automatically when trading or financial project signals are detected.
18
-
19
- ## Triggers
20
-
21
- - Auto-trigger: when `TradingView`, `Lightweight Charts`, `decimal.js`, `ccxt`, or `ws` detected in `package.json`
22
- - Auto-trigger: when files matching `**/price*.ts`, `**/ticker*.ts`, `**/orderbook*.ts` exist in project
23
- - `/rune trading` — manual invocation
24
- - Called by `cook` (L1) when fintech or trading project context detected
25
-
26
- ## Skills Included
27
-
28
- | Skill | Model | Description |
29
- |-------|-------|-------------|
30
- | [fintech-patterns](skills/fintech-patterns.md) | sonnet | Safe money handling with Decimal/BigInt, transaction processing, audit trails, regulatory compliance, and PnL calculations. |
31
- | [realtime-data](skills/realtime-data.md) | sonnet | WebSocket lifecycle management, auto-reconnect with exponential backoff, event normalization, rate limiting, and TanStack Query cache invalidation. |
32
- | [chart-components](skills/chart-components.md) | sonnet | Candlestick, line, and area charts using TradingView Lightweight Charts with real-time updates, crosshair sync, indicator overlays, and reduced-motion support. |
33
- | [indicator-library](skills/indicator-library.md) | sonnet | SMA, EMA, RSI, MACD, Bollinger Bands, VWAP — streaming calculation patterns that update incrementally on each new tick. |
34
- | [trade-logic](skills/trade-logic.md) | sonnet | Entry/exit spec management, indicator parameter registry, strategy state tracking, and backtest result linkage. |
35
- | [experiment-loop](skills/experiment-loop.md) | sonnet | Scientific method for strategy development — hypothesize → implement → backtest → analyze → refine. |
36
- | [quant-analysis](skills/quant-analysis.md) | sonnet | Portfolio metrics, risk calculations, statistical edge detection, Monte Carlo simulation, and position sizing models. |
37
-
38
- ## Tech Stack Support
39
-
40
- | Framework | Library | Notes |
41
- |-----------|---------|-------|
42
- | React 19 / Vite | Lightweight Charts 5.x | Preferred for custom dashboards |
43
- | React 19 / Next.js | TradingView Charting Library | For advanced trading terminals |
44
- | Any | Decimal.js 10.x | Required for all money arithmetic |
45
- | Any | ws / native WebSocket | Auto-reconnect via `realtime-data` skill |
46
- | React 19 | TanStack Query v5 | WebSocket → cache invalidation bridge |
47
- | Any | date-fns-tz | Timezone-safe candle timestamp handling |
48
-
49
- ## Connections
50
-
51
- ```
52
- Calls → @rune/ui (L4): chart component styling, color tokens, responsive layout
53
- Called By ← cook (L1): when trading project detected
54
- Called By ← launch (L1): pre-flight check for financial dashboards
55
- Called By ← logic-guardian (L2): when project is classified as trading domain
56
- ```
57
-
58
- ## Sharp Edges
59
-
60
- | Failure Mode | Severity | Mitigation |
61
- |---|---|---|
62
- | Float arithmetic on price (`0.1 + 0.2 !== 0.3`) silently corrupts PnL | HIGH | Enforce Decimal.js at parse boundary; lint rule banning `*`, `+`, `-` on raw number price fields |
63
- | WebSocket silently stops receiving after network blip with no reconnect | HIGH | Always attach `onclose` handler; test disconnect/reconnect in CI with a mock server |
64
- | Chart series not removed on symbol change causes memory leak and ghost lines | HIGH | Track series refs; call `chart.removeSeries(s)` in cleanup / `useEffect` return |
65
- | Indicator computed on float prices accumulates rounding drift over 1000+ ticks | MEDIUM | Feed Decimal-converted `toNumber()` only at the indicator boundary; document precision loss |
66
- | `localStorage` used for auth token or balance cache exposes data to XSS | HIGH | Use `httpOnly` cookies or in-memory store; audit with `Grep pattern="localStorage" glob="**/*.ts"` |
67
- | Candlestick timestamps in local timezone cause gaps on DST transitions | MEDIUM | Normalize all timestamps to UTC unix seconds at the WebSocket boundary |
68
-
69
- ## Done When
70
-
71
- - All price/quantity/fee fields are wrapped in `Decimal` with no raw float arithmetic reachable by Grep
72
- - WebSocket reconnects automatically after 5-second disconnect in manual or automated test
73
- - Chart renders candlesticks and at least one indicator overlay without layout shift on resize
74
- - Streaming indicator values match reference batch output within floating-point display tolerance
75
- - `prefers-reduced-motion` disables chart animations (verified via browser devtools emulation)
76
- - No `localStorage` usage for financial data (confirmed by Grep audit)
77
-
78
- ## Cost Profile
79
-
80
- ~2,000–4,000 tokens per skill activation. `sonnet` default for code generation; `haiku` for Grep/file-scan steps; `opus` if regulatory compliance or security audit context is detected. Full pack activation (all 7 skills) runs ~14,000–28,000 tokens end-to-end.
1
+ ---
2
+ name: "@rune/trading"
3
+ description: Fintech and trading patterns — real-time data, financial dashboards, technical indicators, WebSocket architecture, and experiment-driven strategy development.
4
+ metadata:
5
+ author: runedev
6
+ version: "0.3.0"
7
+ layer: L4
8
+ price: "$15"
9
+ target: Fintech developers
10
+ format: split
11
+ ---
12
+
13
+ # @rune/trading
14
+
15
+ ## Purpose
16
+
17
+ Fintech applications demand precision that general-purpose patterns cannot guarantee. This pack groups five tightly-coupled concerns — safe money arithmetic, WebSocket reliability, financial chart rendering, streaming indicator computation, and experiment-driven strategy development — because a gap in any one layer breaks the entire trading surface. It solves the recurring problem of developers accidentally using JavaScript floats for currency, missing auto-reconnect logic, or computing indicators on stale snapshots. Activates automatically when trading or financial project signals are detected.
18
+
19
+ ## Triggers
20
+
21
+ - Auto-trigger: when `TradingView`, `Lightweight Charts`, `decimal.js`, `ccxt`, or `ws` detected in `package.json`
22
+ - Auto-trigger: when files matching `**/price*.ts`, `**/ticker*.ts`, `**/orderbook*.ts` exist in project
23
+ - `/rune trading` — manual invocation
24
+ - Called by `cook` (L1) when fintech or trading project context detected
25
+
26
+ ## Skills Included
27
+
28
+ | Skill | Model | Description |
29
+ |-------|-------|-------------|
30
+ | [fintech-patterns](skills/fintech-patterns.md) | sonnet | Safe money handling with Decimal/BigInt, transaction processing, audit trails, regulatory compliance, and PnL calculations. |
31
+ | [realtime-data](skills/realtime-data.md) | sonnet | WebSocket lifecycle management, auto-reconnect with exponential backoff, event normalization, rate limiting, and TanStack Query cache invalidation. |
32
+ | [chart-components](skills/chart-components.md) | sonnet | Candlestick, line, and area charts using TradingView Lightweight Charts with real-time updates, crosshair sync, indicator overlays, and reduced-motion support. |
33
+ | [indicator-library](skills/indicator-library.md) | sonnet | SMA, EMA, RSI, MACD, Bollinger Bands, VWAP — streaming calculation patterns that update incrementally on each new tick. |
34
+ | [trade-logic](skills/trade-logic.md) | sonnet | Entry/exit spec management, indicator parameter registry, strategy state tracking, and backtest result linkage. |
35
+ | [experiment-loop](skills/experiment-loop.md) | sonnet | Scientific method for strategy development — hypothesize → implement → backtest → analyze → refine. |
36
+ | [quant-analysis](skills/quant-analysis.md) | sonnet | Portfolio metrics, risk calculations, statistical edge detection, Monte Carlo simulation, and position sizing models. |
37
+
38
+ ## Tech Stack Support
39
+
40
+ | Framework | Library | Notes |
41
+ |-----------|---------|-------|
42
+ | React 19 / Vite | Lightweight Charts 5.x | Preferred for custom dashboards |
43
+ | React 19 / Next.js | TradingView Charting Library | For advanced trading terminals |
44
+ | Any | Decimal.js 10.x | Required for all money arithmetic |
45
+ | Any | ws / native WebSocket | Auto-reconnect via `realtime-data` skill |
46
+ | React 19 | TanStack Query v5 | WebSocket → cache invalidation bridge |
47
+ | Any | date-fns-tz | Timezone-safe candle timestamp handling |
48
+
49
+ ## Connections
50
+
51
+ ```
52
+ Calls → @rune/ui (L4): chart component styling, color tokens, responsive layout
53
+ Called By ← cook (L1): when trading project detected
54
+ Called By ← launch (L1): pre-flight check for financial dashboards
55
+ Called By ← logic-guardian (L2): when project is classified as trading domain
56
+ ```
57
+
58
+ ## Sharp Edges
59
+
60
+ | Failure Mode | Severity | Mitigation |
61
+ |---|---|---|
62
+ | Float arithmetic on price (`0.1 + 0.2 !== 0.3`) silently corrupts PnL | HIGH | Enforce Decimal.js at parse boundary; lint rule banning `*`, `+`, `-` on raw number price fields |
63
+ | WebSocket silently stops receiving after network blip with no reconnect | HIGH | Always attach `onclose` handler; test disconnect/reconnect in CI with a mock server |
64
+ | Chart series not removed on symbol change causes memory leak and ghost lines | HIGH | Track series refs; call `chart.removeSeries(s)` in cleanup / `useEffect` return |
65
+ | Indicator computed on float prices accumulates rounding drift over 1000+ ticks | MEDIUM | Feed Decimal-converted `toNumber()` only at the indicator boundary; document precision loss |
66
+ | `localStorage` used for auth token or balance cache exposes data to XSS | HIGH | Use `httpOnly` cookies or in-memory store; audit with `Grep pattern="localStorage" glob="**/*.ts"` |
67
+ | Candlestick timestamps in local timezone cause gaps on DST transitions | MEDIUM | Normalize all timestamps to UTC unix seconds at the WebSocket boundary |
68
+
69
+ ## Done When
70
+
71
+ - All price/quantity/fee fields are wrapped in `Decimal` with no raw float arithmetic reachable by Grep
72
+ - WebSocket reconnects automatically after 5-second disconnect in manual or automated test
73
+ - Chart renders candlesticks and at least one indicator overlay without layout shift on resize
74
+ - Streaming indicator values match reference batch output within floating-point display tolerance
75
+ - `prefers-reduced-motion` disables chart animations (verified via browser devtools emulation)
76
+ - No `localStorage` usage for financial data (confirmed by Grep audit)
77
+
78
+ ## Cost Profile
79
+
80
+ ~2,000–4,000 tokens per skill activation. `sonnet` default for code generation; `haiku` for Grep/file-scan steps; `opus` if regulatory compliance or security audit context is detected. Full pack activation (all 7 skills) runs ~14,000–28,000 tokens end-to-end.