@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,111 +1,111 @@
1
- ---
2
- name: "quant-analysis"
3
- pack: "@rune/trading"
4
- description: "Quantitative analysis patterns — portfolio metrics, risk calculations, statistical edge detection, Monte Carlo simulation, and position sizing models."
5
- model: sonnet
6
- tools: [Read, Edit, Write, Grep, Glob, Bash]
7
- ---
8
-
9
- # quant-analysis
10
-
11
- Quantitative analysis patterns — portfolio metrics, risk calculations, statistical edge detection, Monte Carlo simulation, and position sizing models.
12
-
13
- #### Workflow
14
-
15
- **Step 1 — Define analysis scope**
16
- Determine what the user needs: portfolio-level metrics (Sharpe, Sortino, max drawdown, VaR), strategy-level analysis (win rate, profit factor, expectancy, risk-of-ruin), or position sizing (Kelly criterion, fixed fractional, volatility-adjusted). Load trade history from data source (CSV, database query, API response).
17
-
18
- **Step 2 — Calculate core metrics**
19
- For portfolio analysis:
20
- - **Sharpe Ratio**: (mean return - risk-free rate) / std(returns). Annualize with √252.
21
- - **Sortino Ratio**: (mean return - risk-free rate) / downside_std. Only penalizes downside volatility.
22
- - **Max Drawdown**: Largest peak-to-trough decline. Include recovery time.
23
- - **Value at Risk (VaR)**: 95th/99th percentile loss using historical simulation or parametric method.
24
- - **Calmar Ratio**: Annualized return / max drawdown. > 1.0 = good risk-adjusted return.
25
-
26
- For strategy analysis:
27
- - **Expectancy**: (win_rate × avg_win) - (loss_rate × avg_loss). Must be positive.
28
- - **Profit Factor**: gross_profit / gross_loss. > 1.5 = viable, > 2.0 = strong.
29
- - **Risk of Ruin**: probability of losing X% of capital given win rate and risk per trade.
30
-
31
- **Step 3 — Monte Carlo simulation**
32
- Run 10,000 random resamples of the trade sequence to estimate:
33
- - Probability of reaching profit target within N trades
34
- - Confidence interval for max drawdown (95th percentile)
35
- - Optimal position size that maximizes geometric growth (Kelly fraction)
36
-
37
- Emit results as structured data + visualization-ready format for `chart-components`.
38
-
39
- **Step 4 — Position sizing recommendation**
40
- Based on Monte Carlo results, recommend:
41
- - **Conservative**: Half-Kelly (50% of optimal Kelly fraction)
42
- - **Moderate**: Full Kelly
43
- - **Aggressive**: 1.5x Kelly (with warning about increased ruin probability)
44
-
45
- Save analysis to `.rune/trading/quant-analysis-<date>.md`.
46
-
47
- #### Example
48
-
49
- ```typescript
50
- import Decimal from 'decimal.js';
51
-
52
- interface TradeResult {
53
- pnl: Decimal;
54
- entryPrice: Decimal;
55
- exitPrice: Decimal;
56
- size: Decimal;
57
- duration: number; // minutes
58
- }
59
-
60
- interface QuantMetrics {
61
- totalTrades: number;
62
- winRate: Decimal;
63
- profitFactor: Decimal;
64
- expectancy: Decimal;
65
- sharpeRatio: Decimal;
66
- sortinoRatio: Decimal;
67
- maxDrawdown: Decimal;
68
- maxDrawdownDuration: number;
69
- calmarRatio: Decimal;
70
- valueAtRisk95: Decimal;
71
- kellyFraction: Decimal;
72
- riskOfRuin: Decimal;
73
- }
74
-
75
- function calculateExpectancy(trades: TradeResult[]): Decimal {
76
- const wins = trades.filter(t => t.pnl.gt(0));
77
- const losses = trades.filter(t => t.pnl.lte(0));
78
- const winRate = new Decimal(wins.length).div(trades.length);
79
- const avgWin = wins.length > 0
80
- ? wins.reduce((sum, t) => sum.plus(t.pnl), new Decimal(0)).div(wins.length)
81
- : new Decimal(0);
82
- const avgLoss = losses.length > 0
83
- ? losses.reduce((sum, t) => sum.plus(t.pnl.abs()), new Decimal(0)).div(losses.length)
84
- : new Decimal(0);
85
- return winRate.mul(avgWin).minus(new Decimal(1).minus(winRate).mul(avgLoss));
86
- }
87
-
88
- function kellyFraction(winRate: Decimal, avgWinLossRatio: Decimal): Decimal {
89
- // Kelly: f* = (p * b - q) / b where p=winRate, q=1-p, b=avgWin/avgLoss
90
- const q = new Decimal(1).minus(winRate);
91
- return winRate.mul(avgWinLossRatio).minus(q).div(avgWinLossRatio);
92
- }
93
-
94
- // Monte Carlo: resample trades 10,000 times
95
- function monteCarloDrawdown(trades: TradeResult[], simulations = 10000): Decimal {
96
- const drawdowns: Decimal[] = [];
97
- for (let i = 0; i < simulations; i++) {
98
- const shuffled = [...trades].sort(() => Math.random() - 0.5);
99
- let peak = new Decimal(0), maxDd = new Decimal(0), equity = new Decimal(0);
100
- for (const t of shuffled) {
101
- equity = equity.plus(t.pnl);
102
- if (equity.gt(peak)) peak = equity;
103
- const dd = peak.minus(equity).div(peak.gt(0) ? peak : new Decimal(1));
104
- if (dd.gt(maxDd)) maxDd = dd;
105
- }
106
- drawdowns.push(maxDd);
107
- }
108
- drawdowns.sort((a, b) => a.cmp(b));
109
- return drawdowns[Math.floor(simulations * 0.95)]; // 95th percentile
110
- }
111
- ```
1
+ ---
2
+ name: "quant-analysis"
3
+ pack: "@rune/trading"
4
+ description: "Quantitative analysis patterns — portfolio metrics, risk calculations, statistical edge detection, Monte Carlo simulation, and position sizing models."
5
+ model: sonnet
6
+ tools: [Read, Edit, Write, Grep, Glob, Bash]
7
+ ---
8
+
9
+ # quant-analysis
10
+
11
+ Quantitative analysis patterns — portfolio metrics, risk calculations, statistical edge detection, Monte Carlo simulation, and position sizing models.
12
+
13
+ #### Workflow
14
+
15
+ **Step 1 — Define analysis scope**
16
+ Determine what the user needs: portfolio-level metrics (Sharpe, Sortino, max drawdown, VaR), strategy-level analysis (win rate, profit factor, expectancy, risk-of-ruin), or position sizing (Kelly criterion, fixed fractional, volatility-adjusted). Load trade history from data source (CSV, database query, API response).
17
+
18
+ **Step 2 — Calculate core metrics**
19
+ For portfolio analysis:
20
+ - **Sharpe Ratio**: (mean return - risk-free rate) / std(returns). Annualize with √252.
21
+ - **Sortino Ratio**: (mean return - risk-free rate) / downside_std. Only penalizes downside volatility.
22
+ - **Max Drawdown**: Largest peak-to-trough decline. Include recovery time.
23
+ - **Value at Risk (VaR)**: 95th/99th percentile loss using historical simulation or parametric method.
24
+ - **Calmar Ratio**: Annualized return / max drawdown. > 1.0 = good risk-adjusted return.
25
+
26
+ For strategy analysis:
27
+ - **Expectancy**: (win_rate × avg_win) - (loss_rate × avg_loss). Must be positive.
28
+ - **Profit Factor**: gross_profit / gross_loss. > 1.5 = viable, > 2.0 = strong.
29
+ - **Risk of Ruin**: probability of losing X% of capital given win rate and risk per trade.
30
+
31
+ **Step 3 — Monte Carlo simulation**
32
+ Run 10,000 random resamples of the trade sequence to estimate:
33
+ - Probability of reaching profit target within N trades
34
+ - Confidence interval for max drawdown (95th percentile)
35
+ - Optimal position size that maximizes geometric growth (Kelly fraction)
36
+
37
+ Emit results as structured data + visualization-ready format for `chart-components`.
38
+
39
+ **Step 4 — Position sizing recommendation**
40
+ Based on Monte Carlo results, recommend:
41
+ - **Conservative**: Half-Kelly (50% of optimal Kelly fraction)
42
+ - **Moderate**: Full Kelly
43
+ - **Aggressive**: 1.5x Kelly (with warning about increased ruin probability)
44
+
45
+ Save analysis to `.rune/trading/quant-analysis-<date>.md`.
46
+
47
+ #### Example
48
+
49
+ ```typescript
50
+ import Decimal from 'decimal.js';
51
+
52
+ interface TradeResult {
53
+ pnl: Decimal;
54
+ entryPrice: Decimal;
55
+ exitPrice: Decimal;
56
+ size: Decimal;
57
+ duration: number; // minutes
58
+ }
59
+
60
+ interface QuantMetrics {
61
+ totalTrades: number;
62
+ winRate: Decimal;
63
+ profitFactor: Decimal;
64
+ expectancy: Decimal;
65
+ sharpeRatio: Decimal;
66
+ sortinoRatio: Decimal;
67
+ maxDrawdown: Decimal;
68
+ maxDrawdownDuration: number;
69
+ calmarRatio: Decimal;
70
+ valueAtRisk95: Decimal;
71
+ kellyFraction: Decimal;
72
+ riskOfRuin: Decimal;
73
+ }
74
+
75
+ function calculateExpectancy(trades: TradeResult[]): Decimal {
76
+ const wins = trades.filter(t => t.pnl.gt(0));
77
+ const losses = trades.filter(t => t.pnl.lte(0));
78
+ const winRate = new Decimal(wins.length).div(trades.length);
79
+ const avgWin = wins.length > 0
80
+ ? wins.reduce((sum, t) => sum.plus(t.pnl), new Decimal(0)).div(wins.length)
81
+ : new Decimal(0);
82
+ const avgLoss = losses.length > 0
83
+ ? losses.reduce((sum, t) => sum.plus(t.pnl.abs()), new Decimal(0)).div(losses.length)
84
+ : new Decimal(0);
85
+ return winRate.mul(avgWin).minus(new Decimal(1).minus(winRate).mul(avgLoss));
86
+ }
87
+
88
+ function kellyFraction(winRate: Decimal, avgWinLossRatio: Decimal): Decimal {
89
+ // Kelly: f* = (p * b - q) / b where p=winRate, q=1-p, b=avgWin/avgLoss
90
+ const q = new Decimal(1).minus(winRate);
91
+ return winRate.mul(avgWinLossRatio).minus(q).div(avgWinLossRatio);
92
+ }
93
+
94
+ // Monte Carlo: resample trades 10,000 times
95
+ function monteCarloDrawdown(trades: TradeResult[], simulations = 10000): Decimal {
96
+ const drawdowns: Decimal[] = [];
97
+ for (let i = 0; i < simulations; i++) {
98
+ const shuffled = [...trades].sort(() => Math.random() - 0.5);
99
+ let peak = new Decimal(0), maxDd = new Decimal(0), equity = new Decimal(0);
100
+ for (const t of shuffled) {
101
+ equity = equity.plus(t.pnl);
102
+ if (equity.gt(peak)) peak = equity;
103
+ const dd = peak.minus(equity).div(peak.gt(0) ? peak : new Decimal(1));
104
+ if (dd.gt(maxDd)) maxDd = dd;
105
+ }
106
+ drawdowns.push(maxDd);
107
+ }
108
+ drawdowns.sort((a, b) => a.cmp(b));
109
+ return drawdowns[Math.floor(simulations * 0.95)]; // 95th percentile
110
+ }
111
+ ```
@@ -1,58 +1,58 @@
1
- ---
2
- name: "realtime-data"
3
- pack: "@rune/trading"
4
- description: "Real-time data architecture — WebSocket lifecycle management, auto-reconnect with exponential backoff, event normalization, rate limiting, and TanStack Query cache invalidation."
5
- model: sonnet
6
- tools: [Read, Edit, Write, Grep, Glob, Bash]
7
- ---
8
-
9
- # realtime-data
10
-
11
- Real-time data architecture — WebSocket lifecycle management, auto-reconnect with exponential backoff, event normalization, rate limiting, and TanStack Query cache invalidation.
12
-
13
- #### Workflow
14
-
15
- **Step 1 — WebSocket setup and event normalization**
16
- Use `Read` on existing data-fetching files to understand current polling or REST patterns. Replace with a WebSocket client class that emits typed, normalized events regardless of upstream message format. Define a `NormalizedTick` interface at the boundary.
17
-
18
- **Step 2 — Implement exponential backoff reconnect**
19
- In the WebSocket class, add a reconnect handler: attempt 1 after 1 s, attempt 2 after 2 s, attempt 3 after 4 s, cap at 30 s. Use `Bash` to run unit tests covering disconnect and reconnect sequences. Track `reconnectAttempts` in state; reset to 0 on successful open.
20
-
21
- **Step 3 — Wire to TanStack Query cache invalidation**
22
- On each normalized event received, call `queryClient.setQueryData(['ticker', symbol], tick)` for optimistic updates or `queryClient.invalidateQueries(['orderbook', symbol])` for full refresh. Use `Grep` to confirm no stale `setInterval` polling remains alongside the new WebSocket feed.
23
-
24
- #### Example
25
-
26
- ```typescript
27
- class TradingWebSocket {
28
- private ws: WebSocket | null = null;
29
- private reconnectAttempts = 0;
30
- private readonly MAX_DELAY_MS = 30_000;
31
-
32
- connect(url: string, onTick: (tick: NormalizedTick) => void): void {
33
- this.ws = new WebSocket(url);
34
-
35
- this.ws.onmessage = (event) => {
36
- const raw = JSON.parse(event.data as string);
37
- onTick(this.normalize(raw));
38
- };
39
-
40
- this.ws.onclose = () => {
41
- const delay = Math.min(
42
- 1000 * 2 ** this.reconnectAttempts,
43
- this.MAX_DELAY_MS,
44
- );
45
- this.reconnectAttempts += 1;
46
- setTimeout(() => this.connect(url, onTick), delay);
47
- };
48
-
49
- this.ws.onopen = () => { this.reconnectAttempts = 0; };
50
- }
51
-
52
- private normalize(raw: unknown): NormalizedTick {
53
- // map exchange-specific shape to shared interface
54
- const r = raw as Record<string, unknown>;
55
- return { symbol: String(r['s']), price: String(r['p']), ts: Date.now() };
56
- }
57
- }
58
- ```
1
+ ---
2
+ name: "realtime-data"
3
+ pack: "@rune/trading"
4
+ description: "Real-time data architecture — WebSocket lifecycle management, auto-reconnect with exponential backoff, event normalization, rate limiting, and TanStack Query cache invalidation."
5
+ model: sonnet
6
+ tools: [Read, Edit, Write, Grep, Glob, Bash]
7
+ ---
8
+
9
+ # realtime-data
10
+
11
+ Real-time data architecture — WebSocket lifecycle management, auto-reconnect with exponential backoff, event normalization, rate limiting, and TanStack Query cache invalidation.
12
+
13
+ #### Workflow
14
+
15
+ **Step 1 — WebSocket setup and event normalization**
16
+ Use `Read` on existing data-fetching files to understand current polling or REST patterns. Replace with a WebSocket client class that emits typed, normalized events regardless of upstream message format. Define a `NormalizedTick` interface at the boundary.
17
+
18
+ **Step 2 — Implement exponential backoff reconnect**
19
+ In the WebSocket class, add a reconnect handler: attempt 1 after 1 s, attempt 2 after 2 s, attempt 3 after 4 s, cap at 30 s. Use `Bash` to run unit tests covering disconnect and reconnect sequences. Track `reconnectAttempts` in state; reset to 0 on successful open.
20
+
21
+ **Step 3 — Wire to TanStack Query cache invalidation**
22
+ On each normalized event received, call `queryClient.setQueryData(['ticker', symbol], tick)` for optimistic updates or `queryClient.invalidateQueries(['orderbook', symbol])` for full refresh. Use `Grep` to confirm no stale `setInterval` polling remains alongside the new WebSocket feed.
23
+
24
+ #### Example
25
+
26
+ ```typescript
27
+ class TradingWebSocket {
28
+ private ws: WebSocket | null = null;
29
+ private reconnectAttempts = 0;
30
+ private readonly MAX_DELAY_MS = 30_000;
31
+
32
+ connect(url: string, onTick: (tick: NormalizedTick) => void): void {
33
+ this.ws = new WebSocket(url);
34
+
35
+ this.ws.onmessage = (event) => {
36
+ const raw = JSON.parse(event.data as string);
37
+ onTick(this.normalize(raw));
38
+ };
39
+
40
+ this.ws.onclose = () => {
41
+ const delay = Math.min(
42
+ 1000 * 2 ** this.reconnectAttempts,
43
+ this.MAX_DELAY_MS,
44
+ );
45
+ this.reconnectAttempts += 1;
46
+ setTimeout(() => this.connect(url, onTick), delay);
47
+ };
48
+
49
+ this.ws.onopen = () => { this.reconnectAttempts = 0; };
50
+ }
51
+
52
+ private normalize(raw: unknown): NormalizedTick {
53
+ // map exchange-specific shape to shared interface
54
+ const r = raw as Record<string, unknown>;
55
+ return { symbol: String(r['s']), price: String(r['p']), ts: Date.now() };
56
+ }
57
+ }
58
+ ```
@@ -1,104 +1,104 @@
1
- ---
2
- name: "trade-logic"
3
- pack: "@rune/trading"
4
- description: "Trading logic preservation and reasoning — entry/exit spec management, indicator parameter registry, strategy state tracking, and backtest result linkage. Prevents the #1 trading bot failure: AI sessions overwriting working logic without understanding it."
5
- model: sonnet
6
- tools: [Read, Edit, Write, Grep, Glob, Bash]
7
- ---
8
-
9
- # trade-logic
10
-
11
- Trading logic preservation and reasoning — entry/exit spec management, indicator parameter registry, strategy state tracking, and backtest result linkage. Prevents the #1 trading bot failure: AI sessions overwriting working logic without understanding it.
12
-
13
- #### Workflow
14
-
15
- **Step 1 — Load trading logic context**
16
- Check if `logic-guardian` (L2) has a manifest loaded. If `.rune/logic-manifest.json` exists, read it and extract trading-specific components (ENTRY_LOGIC, EXIT_LOGIC, FILTER, INDICATOR). If no manifest exists, trigger `logic-guardian` Phase 3 to generate one with trading-aware scanning.
17
-
18
- Trading-specific file patterns to scan:
19
- - `**/scenarios/**`, `**/signals/**`, `**/strategies/**` — entry/exit logic
20
- - `**/trailing/**`, `**/exit/**`, `**/stoploss/**` — exit engine components
21
- - `**/indicators/**`, `**/core/indicators*` — technical indicator implementations
22
- - `**/backtest/**`, `**/engine*` — backtesting mirrors of production logic
23
- - `**/config/settings*`, `**/config/token*` — parameter source of truth
24
-
25
- **Step 2 — Build trading logic spec**
26
- For each trading component, extract a structured spec:
27
-
28
- ```
29
- COMPONENT: RSI Entry Detector
30
- TYPE: ENTRY_LOGIC
31
- STATUS: ACTIVE (production)
32
- LAYERS: [which layer in the trading pipeline this belongs to]
33
-
34
- ENTRY CONDITIONS:
35
- 1. TrendPass ticket exists with available fires
36
- 2. RSI_MA crosses threshold (65 LONG / 35 SHORT)
37
- 3. Previous RSI in entry zone (30-55 LONG / 45-70 SHORT)
38
- 4. RSI crosses RSI_MA + 40% TF filter + EMA filter
39
-
40
- PARAMETERS:
41
- - rsi_period: 7 (source: settings.py)
42
- - challenge_threshold_long: 65 (source: settings.py)
43
- - entry_zone_long: [30, 55] (source: settings.py)
44
-
45
- DEPENDENCIES: trend_pass.tracker, core.indicators
46
- MIRROR: backtest/engine.py (must stay in sync with production)
47
- ```
48
-
49
- **Step 3 — Enforce production-backtest sync**
50
- For trading bots, production logic and backtest logic MUST be mirrors. Scan for:
51
- - Production file: `src/worker/production_worker.py` or equivalent
52
- - Backtest file: `backtest/engine.py` or equivalent
53
- - Compare entry/exit function signatures and conditional branches
54
- - Flag any divergence: "Production uses condition X but backtest doesn't"
55
-
56
- **Step 4 — Parameter registry**
57
- Build a parameter registry linking every configurable threshold to its source:
58
- - Single source of truth file (e.g., `settings.py`)
59
- - Per-token overrides (e.g., `token_config.py`, `final_config.json`)
60
- - Scan for hardcoded magic numbers in logic files that should be in config
61
- - Flag: "Hardcoded value 65 in detect.py:L42 — should reference settings.CHALLENGE_THRESHOLD_LONG"
62
-
63
- **Step 5 — Strategy state machine documentation**
64
- If the trading logic uses a multi-step state machine (e.g., 3-step RSI entry):
65
- - Document each state and its transition conditions
66
- - Generate a state diagram in text format
67
- - Save to manifest as `state_machine` field on the component
68
-
69
- ```
70
- State Machine: RSI Entry
71
- [IDLE] --ticket_exists--> [STEP1_CHALLENGE]
72
- [STEP1_CHALLENGE] --rsi_ma_crosses_threshold--> [STEP2_ZONE_CHECK]
73
- [STEP2_ZONE_CHECK] --prev_rsi_in_zone--> [STEP3_ENTRY_POINT]
74
- [STEP3_ENTRY_POINT] --rsi_crosses_rsi_ma + filters--> [SIGNAL_EMITTED]
75
- [any_step] --ticket_expired--> [IDLE]
76
- ```
77
-
78
- **Step 6 — Backtest result linkage**
79
- Link logic components to their backtest performance:
80
- - Scan `backtest/scan_results/` or equivalent for result files
81
- - Associate each strategy variant with its performance metrics
82
- - Record in manifest: "RSI Entry v5 with EMA Follow: $20,445 over 6mo backtest"
83
- - Flag if logic was modified AFTER the latest backtest: "Logic changed since last backtest — results may be invalid"
84
-
85
- #### Example
86
-
87
- ```python
88
- # trade-logic generates this spec from code analysis:
89
- # COMPONENT: EMA Follow Exit
90
- # TYPE: EXIT_LOGIC
91
- # STATUS: ACTIVE
92
- # BUG_HISTORY: 2026-02-22 fixed wick detection (was using close, now uses candle_low/high)
93
- #
94
- # EXIT CONDITION:
95
- # if candle_wick crosses EMA120 -> exit position
96
- # (NOT candle_close — this was the V4 bug)
97
- #
98
- # PARAMETERS:
99
- # ema_period: 120 (source: settings.py)
100
- # use_wick: True (source: settings.py, changed from False in V4)
101
- #
102
- # MIRROR: backtest/exit_checker.py:check_ema_follow()
103
- # BACKTEST: $22,481 (x2.0 adaptive variant, validated 2026-02-22)
104
- ```
1
+ ---
2
+ name: "trade-logic"
3
+ pack: "@rune/trading"
4
+ description: "Trading logic preservation and reasoning — entry/exit spec management, indicator parameter registry, strategy state tracking, and backtest result linkage. Prevents the #1 trading bot failure: AI sessions overwriting working logic without understanding it."
5
+ model: sonnet
6
+ tools: [Read, Edit, Write, Grep, Glob, Bash]
7
+ ---
8
+
9
+ # trade-logic
10
+
11
+ Trading logic preservation and reasoning — entry/exit spec management, indicator parameter registry, strategy state tracking, and backtest result linkage. Prevents the #1 trading bot failure: AI sessions overwriting working logic without understanding it.
12
+
13
+ #### Workflow
14
+
15
+ **Step 1 — Load trading logic context**
16
+ Check if `logic-guardian` (L2) has a manifest loaded. If `.rune/logic-manifest.json` exists, read it and extract trading-specific components (ENTRY_LOGIC, EXIT_LOGIC, FILTER, INDICATOR). If no manifest exists, trigger `logic-guardian` Phase 3 to generate one with trading-aware scanning.
17
+
18
+ Trading-specific file patterns to scan:
19
+ - `**/scenarios/**`, `**/signals/**`, `**/strategies/**` — entry/exit logic
20
+ - `**/trailing/**`, `**/exit/**`, `**/stoploss/**` — exit engine components
21
+ - `**/indicators/**`, `**/core/indicators*` — technical indicator implementations
22
+ - `**/backtest/**`, `**/engine*` — backtesting mirrors of production logic
23
+ - `**/config/settings*`, `**/config/token*` — parameter source of truth
24
+
25
+ **Step 2 — Build trading logic spec**
26
+ For each trading component, extract a structured spec:
27
+
28
+ ```
29
+ COMPONENT: RSI Entry Detector
30
+ TYPE: ENTRY_LOGIC
31
+ STATUS: ACTIVE (production)
32
+ LAYERS: [which layer in the trading pipeline this belongs to]
33
+
34
+ ENTRY CONDITIONS:
35
+ 1. TrendPass ticket exists with available fires
36
+ 2. RSI_MA crosses threshold (65 LONG / 35 SHORT)
37
+ 3. Previous RSI in entry zone (30-55 LONG / 45-70 SHORT)
38
+ 4. RSI crosses RSI_MA + 40% TF filter + EMA filter
39
+
40
+ PARAMETERS:
41
+ - rsi_period: 7 (source: settings.py)
42
+ - challenge_threshold_long: 65 (source: settings.py)
43
+ - entry_zone_long: [30, 55] (source: settings.py)
44
+
45
+ DEPENDENCIES: trend_pass.tracker, core.indicators
46
+ MIRROR: backtest/engine.py (must stay in sync with production)
47
+ ```
48
+
49
+ **Step 3 — Enforce production-backtest sync**
50
+ For trading bots, production logic and backtest logic MUST be mirrors. Scan for:
51
+ - Production file: `src/worker/production_worker.py` or equivalent
52
+ - Backtest file: `backtest/engine.py` or equivalent
53
+ - Compare entry/exit function signatures and conditional branches
54
+ - Flag any divergence: "Production uses condition X but backtest doesn't"
55
+
56
+ **Step 4 — Parameter registry**
57
+ Build a parameter registry linking every configurable threshold to its source:
58
+ - Single source of truth file (e.g., `settings.py`)
59
+ - Per-token overrides (e.g., `token_config.py`, `final_config.json`)
60
+ - Scan for hardcoded magic numbers in logic files that should be in config
61
+ - Flag: "Hardcoded value 65 in detect.py:L42 — should reference settings.CHALLENGE_THRESHOLD_LONG"
62
+
63
+ **Step 5 — Strategy state machine documentation**
64
+ If the trading logic uses a multi-step state machine (e.g., 3-step RSI entry):
65
+ - Document each state and its transition conditions
66
+ - Generate a state diagram in text format
67
+ - Save to manifest as `state_machine` field on the component
68
+
69
+ ```
70
+ State Machine: RSI Entry
71
+ [IDLE] --ticket_exists--> [STEP1_CHALLENGE]
72
+ [STEP1_CHALLENGE] --rsi_ma_crosses_threshold--> [STEP2_ZONE_CHECK]
73
+ [STEP2_ZONE_CHECK] --prev_rsi_in_zone--> [STEP3_ENTRY_POINT]
74
+ [STEP3_ENTRY_POINT] --rsi_crosses_rsi_ma + filters--> [SIGNAL_EMITTED]
75
+ [any_step] --ticket_expired--> [IDLE]
76
+ ```
77
+
78
+ **Step 6 — Backtest result linkage**
79
+ Link logic components to their backtest performance:
80
+ - Scan `backtest/scan_results/` or equivalent for result files
81
+ - Associate each strategy variant with its performance metrics
82
+ - Record in manifest: "RSI Entry v5 with EMA Follow: $20,445 over 6mo backtest"
83
+ - Flag if logic was modified AFTER the latest backtest: "Logic changed since last backtest — results may be invalid"
84
+
85
+ #### Example
86
+
87
+ ```python
88
+ # trade-logic generates this spec from code analysis:
89
+ # COMPONENT: EMA Follow Exit
90
+ # TYPE: EXIT_LOGIC
91
+ # STATUS: ACTIVE
92
+ # BUG_HISTORY: 2026-02-22 fixed wick detection (was using close, now uses candle_low/high)
93
+ #
94
+ # EXIT CONDITION:
95
+ # if candle_wick crosses EMA120 -> exit position
96
+ # (NOT candle_close — this was the V4 bug)
97
+ #
98
+ # PARAMETERS:
99
+ # ema_period: 120 (source: settings.py)
100
+ # use_wick: True (source: settings.py, changed from False in V4)
101
+ #
102
+ # MIRROR: backtest/exit_checker.py:check_ema_follow()
103
+ # BACKTEST: $22,481 (x2.0 adaptive variant, validated 2026-02-22)
104
+ ```