Raw JSON report machine-readable
{
"data": {
"repo": {
"topics": [],
"is_fork": false,
"size_kb": 68897,
"has_wiki": false,
"homepage": null,
"languages": {
"Go": 5878108,
"CSS": 28394,
"HTML": 21058,
"Shell": 84738,
"Python": 4163170,
"JavaScript": 106114
},
"pushed_at": "2026-07-21T01:38:17Z",
"created_at": "2026-02-09T05:26:51Z",
"owner_type": "User",
"updated_at": "2026-07-21T01:38:19Z",
"description": "Crypto trading bot — backtesting, paper trading, live trading with risk management",
"is_archived": false,
"is_disabled": false,
"license_spdx": "MIT",
"default_branch": "main",
"license_spdx_raw": "MIT",
"primary_language": "Go",
"significant_languages": [
"Go",
"Python"
]
},
"owner": {
"blog": null,
"name": "Rich Kuo",
"type": "User",
"login": "richkuo",
"company": null,
"location": null,
"followers": 87,
"avatar_url": "https://avatars.githubusercontent.com/u/880112?v=4",
"created_at": "2011-06-27T23:32:54Z",
"is_verified": null,
"public_repos": 57,
"account_age_days": 5502
},
"license": {
"state": "standard",
"spdx_id": "MIT",
"raw_spdx": "MIT",
"file_present": true,
"scorecard_found": true,
"profile_has_license": true
},
"activity": {
"releases": [
{
"tag": "v0.94.0",
"kind": "minor",
"published_at": "2026-07-20T09:05:42Z"
},
{
"tag": "v0.93.0",
"kind": "minor",
"published_at": "2026-07-18T07:05:30Z"
},
{
"tag": "v0.92.0",
"kind": "minor",
"published_at": "2026-07-16T01:54:00Z"
},
{
"tag": "v0.91.0",
"kind": "minor",
"published_at": "2026-07-12T10:13:17Z"
},
{
"tag": "v0.90.0",
"kind": "minor",
"published_at": "2026-07-11T04:54:06Z"
},
{
"tag": "v0.89.0",
"kind": "minor",
"published_at": "2026-07-03T05:16:04Z"
},
{
"tag": "v0.88.0",
"kind": "minor",
"published_at": "2026-07-02T09:33:11Z"
},
{
"tag": "v0.87.0",
"kind": "minor",
"published_at": "2026-07-01T00:13:48Z"
},
{
"tag": "v0.86.0",
"kind": "minor",
"published_at": "2026-06-27T08:40:58Z"
},
{
"tag": "v0.85.2",
"kind": "patch",
"published_at": "2026-06-26T07:56:56Z"
},
{
"tag": "v0.85.1",
"kind": "patch",
"published_at": "2026-06-25T22:36:19Z"
},
{
"tag": "v0.85.0",
"kind": "minor",
"published_at": "2026-06-25T08:20:02Z"
},
{
"tag": "v0.84.0",
"kind": "minor",
"published_at": "2026-06-25T07:33:39Z"
},
{
"tag": "v0.83.0",
"kind": "minor",
"published_at": "2026-06-24T21:22:56Z"
},
{
"tag": "v0.82.0",
"kind": "minor",
"published_at": "2026-06-21T23:06:00Z"
},
{
"tag": "v0.81.0",
"kind": "minor",
"published_at": "2026-06-19T03:26:45Z"
},
{
"tag": "v0.80.0",
"kind": "minor",
"published_at": "2026-06-18T07:53:42Z"
},
{
"tag": "v0.79.0",
"kind": "minor",
"published_at": "2026-06-15T10:26:14Z"
},
{
"tag": "v0.78.1",
"kind": "patch",
"published_at": "2026-06-14T19:28:26Z"
},
{
"tag": "v0.78.0",
"kind": "minor",
"published_at": "2026-06-14T08:03:24Z"
},
{
"tag": "v0.77.0",
"kind": "minor",
"published_at": "2026-06-11T21:06:35Z"
},
{
"tag": "v0.76.0",
"kind": "minor",
"published_at": "2026-06-10T19:14:53Z"
},
{
"tag": "v0.75.0",
"kind": "minor",
"published_at": "2026-06-10T06:34:28Z"
},
{
"tag": "v0.74.0",
"kind": "minor",
"published_at": "2026-06-04T01:56:10Z"
},
{
"tag": "v0.73.1",
"kind": "patch",
"published_at": "2026-06-02T12:42:50Z"
},
{
"tag": "v0.73.0",
"kind": "minor",
"published_at": "2026-06-02T12:11:13Z"
},
{
"tag": "v0.72.0",
"kind": "minor",
"published_at": "2026-06-01T08:50:43Z"
},
{
"tag": "v0.71.0",
"kind": "minor",
"published_at": "2026-06-01T06:03:21Z"
},
{
"tag": "v0.70.0",
"kind": "minor",
"published_at": "2026-05-30T22:46:05Z"
},
{
"tag": "v0.69.1",
"kind": "patch",
"published_at": "2026-05-30T10:07:15Z"
},
{
"tag": "v0.69.0",
"kind": "minor",
"published_at": "2026-05-30T03:26:48Z"
},
{
"tag": "v0.68.1",
"kind": "patch",
"published_at": "2026-05-29T18:58:58Z"
},
{
"tag": "v0.68.0",
"kind": "minor",
"published_at": "2026-05-29T18:23:18Z"
},
{
"tag": "v0.67.1",
"kind": "patch",
"published_at": "2026-05-29T03:17:01Z"
},
{
"tag": "v0.67.0",
"kind": "minor",
"published_at": "2026-05-28T05:58:40Z"
},
{
"tag": "v0.66.5",
"kind": "patch",
"published_at": "2026-05-26T02:08:01Z"
},
{
"tag": "v0.66.4",
"kind": "patch",
"published_at": "2026-05-26T01:09:30Z"
},
{
"tag": "v0.66.3",
"kind": "patch",
"published_at": "2026-05-26T00:35:33Z"
},
{
"tag": "v0.66.2",
"kind": "patch",
"published_at": "2026-05-25T03:35:21Z"
},
{
"tag": "v0.66.1",
"kind": "patch",
"published_at": "2026-05-23T22:05:54Z"
},
{
"tag": "v0.66.0",
"kind": "minor",
"published_at": "2026-05-23T13:22:30Z"
},
{
"tag": "v0.65.2",
"kind": "patch",
"published_at": "2026-05-23T12:22:12Z"
},
{
"tag": "v0.65.1",
"kind": "patch",
"published_at": "2026-05-23T10:18:32Z"
},
{
"tag": "v0.65.0",
"kind": "minor",
"published_at": "2026-05-23T00:23:59Z"
},
{
"tag": "v0.64.0",
"kind": "minor",
"published_at": "2026-05-15T07:10:38Z"
},
{
"tag": "v0.63.1",
"kind": "patch",
"published_at": "2026-05-15T03:10:00Z"
},
{
"tag": "v0.63.0",
"kind": "minor",
"published_at": "2026-05-14T22:39:21Z"
},
{
"tag": "v0.62.2",
"kind": "patch",
"published_at": "2026-05-14T04:44:53Z"
},
{
"tag": "v0.62.1",
"kind": "patch",
"published_at": "2026-05-13T04:09:35Z"
},
{
"tag": "v0.62.0",
"kind": "minor",
"published_at": "2026-05-13T03:39:46Z"
},
{
"tag": "v0.61.0",
"kind": "minor",
"published_at": "2026-05-13T00:36:57Z"
},
{
"tag": "v0.60.1",
"kind": "patch",
"published_at": "2026-05-12T10:28:15Z"
},
{
"tag": "v0.60.0",
"kind": "minor",
"published_at": "2026-05-12T08:24:16Z"
},
{
"tag": "v0.59.1",
"kind": "patch",
"published_at": "2026-05-11T02:13:54Z"
},
{
"tag": "v0.59.0",
"kind": "minor",
"published_at": "2026-05-11T00:42:35Z"
},
{
"tag": "v0.58.0",
"kind": "minor",
"published_at": "2026-05-10T22:35:48Z"
},
{
"tag": "v0.57.0",
"kind": "minor",
"published_at": "2026-05-10T09:55:41Z"
},
{
"tag": "v0.56.0",
"kind": "minor",
"published_at": "2026-05-10T02:35:35Z"
},
{
"tag": "v0.55.0",
"kind": "minor",
"published_at": "2026-05-09T00:12:45Z"
},
{
"tag": "v0.54.0",
"kind": "minor",
"published_at": "2026-05-08T07:49:24Z"
},
{
"tag": "v0.53.1",
"kind": "patch",
"published_at": "2026-05-07T23:07:48Z"
},
{
"tag": "v0.53.0",
"kind": "minor",
"published_at": "2026-05-07T02:34:42Z"
},
{
"tag": "v0.52.0",
"kind": "minor",
"published_at": "2026-05-06T23:18:21Z"
},
{
"tag": "v0.51.2",
"kind": "patch",
"published_at": "2026-05-06T11:42:39Z"
},
{
"tag": "v0.51.1",
"kind": "patch",
"published_at": "2026-05-06T08:29:44Z"
},
{
"tag": "v0.51.0",
"kind": "minor",
"published_at": "2026-05-06T05:10:15Z"
},
{
"tag": "v0.50.0",
"kind": "minor",
"published_at": "2026-05-05T06:59:56Z"
},
{
"tag": "v0.49.0",
"kind": "minor",
"published_at": "2026-05-04T17:55:40Z"
},
{
"tag": "v0.48.0",
"kind": "minor",
"published_at": "2026-05-04T05:12:04Z"
},
{
"tag": "v0.47.0",
"kind": "minor",
"published_at": "2026-05-03T00:20:18Z"
},
{
"tag": "v0.46.0",
"kind": "minor",
"published_at": "2026-05-01T16:59:40Z"
},
{
"tag": "v0.45.0",
"kind": "minor",
"published_at": "2026-05-01T07:48:08Z"
},
{
"tag": "v0.44.0",
"kind": "minor",
"published_at": "2026-05-01T05:23:22Z"
},
{
"tag": "v0.43.0",
"kind": "minor",
"published_at": "2026-05-01T03:20:51Z"
},
{
"tag": "v0.42.0",
"kind": "minor",
"published_at": "2026-04-30T23:35:04Z"
},
{
"tag": "v0.41.0",
"kind": "minor",
"published_at": "2026-04-30T16:03:28Z"
},
{
"tag": "v0.40.1",
"kind": "patch",
"published_at": "2026-04-30T03:35:19Z"
},
{
"tag": "v0.40.0",
"kind": "minor",
"published_at": "2026-04-30T01:45:43Z"
},
{
"tag": "v0.39.3",
"kind": "patch",
"published_at": "2026-04-29T06:42:01Z"
},
{
"tag": "v0.39.2",
"kind": "patch",
"published_at": "2026-04-29T00:45:47Z"
},
{
"tag": "v0.39.1",
"kind": "patch",
"published_at": "2026-04-28T16:43:55Z"
},
{
"tag": "v0.39.0",
"kind": "minor",
"published_at": "2026-04-28T15:46:50Z"
},
{
"tag": "v0.38.0",
"kind": "minor",
"published_at": "2026-04-28T05:13:06Z"
},
{
"tag": "v0.37.0",
"kind": "minor",
"published_at": "2026-04-28T01:22:31Z"
},
{
"tag": "v0.36.0",
"kind": "minor",
"published_at": "2026-04-25T05:14:57Z"
},
{
"tag": "v0.35.0",
"kind": "minor",
"published_at": "2026-04-24T04:53:52Z"
},
{
"tag": "v0.34.0",
"kind": "minor",
"published_at": "2026-04-23T17:07:21Z"
},
{
"tag": "v0.33.5",
"kind": "patch",
"published_at": "2026-04-22T08:50:25Z"
},
{
"tag": "v0.33.4",
"kind": "patch",
"published_at": "2026-04-21T13:18:17Z"
},
{
"tag": "v0.33.3",
"kind": "patch",
"published_at": "2026-04-21T06:55:00Z"
},
{
"tag": "v0.33.2",
"kind": "patch",
"published_at": "2026-04-21T04:45:58Z"
},
{
"tag": "v0.33.1",
"kind": "patch",
"published_at": "2026-04-21T03:06:11Z"
},
{
"tag": "v0.33.0",
"kind": "minor",
"published_at": "2026-04-20T09:11:28Z"
},
{
"tag": "v0.32.2",
"kind": "patch",
"published_at": "2026-04-19T11:56:06Z"
},
{
"tag": "v0.32.1",
"kind": "patch",
"published_at": "2026-04-18T20:36:46Z"
},
{
"tag": "v0.32.0",
"kind": "minor",
"published_at": "2026-04-18T19:43:40Z"
},
{
"tag": "v0.31.2",
"kind": "patch",
"published_at": "2026-04-18T10:57:50Z"
},
{
"tag": "v0.31.1",
"kind": "patch",
"published_at": "2026-04-18T08:33:28Z"
},
{
"tag": "v0.31.0",
"kind": "minor",
"published_at": "2026-04-18T07:01:41Z"
},
{
"tag": "v0.30.1",
"kind": "patch",
"published_at": "2026-04-18T02:55:45Z"
}
],
"recent_commits": [
{
"oid": "a6f2eb5ea03c9dcc10181c4105186c5841781a36",
"body": "…ursor Grok 4.5, high] (#1401)\n\n* feat(#1400): clear CashReconcileRequired only via owner command\n\nStop treating solvency as reconciliation: disable maybeClearCashReconcileRequired\nauto-clear and add owner-DM /clear-cash-reconcile so live buys resume only after\nan explicit operator confirm that book\n[…]\nclears solvent latches after #1400 — document that it\nonly emits the throttled reminder and that the latch clears via the owner command.\n\n---\nUpdated with LLM: Cursor Grok 4.5 | high | Harness: Cursor",
"is_bot": false,
"headline": "feat(#1400): add owner command to clear CashReconcileRequired [C62, C…",
"author_name": "Rich Kuo",
"author_login": "richkuo",
"committed_at": "2026-07-21T01:38:14Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "74e2ba6a6a134d80ef3be20556700329cb7e1ba5",
"body": "…ncile [C62, Cursor Grok 4.5, high] (#1397)\n\n* fix(#1394): book live spot fills that overshoot virtual cash\n\nAlways book venue fills even when cash is under $1 or debit exceeds budget;\nlatch CashReconcileRequired and CRITICAL-alert after unlock instead of\ndropping the fill (the #298 drift class).\n\n-\n[…]\n)→b no longer pings B twice. Documented that solvency auto-clear is a proxy pending #1400 (expanded to require operator-explicit clear).\n\n---\nUpdated with LLM: Cursor Grok 4.5 | high | Harness: Cursor",
"is_bot": false,
"headline": "fix(#1394): book live spot fills past virtual cash with CRITICAL reco…",
"author_name": "Rich Kuo",
"author_login": "richkuo",
"committed_at": "2026-07-20T23:55:06Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "3adf178914fc5a8c17ed881388d5d484269cc3cc",
"body": "…l (#1399)\n\nThe main loop and AskOwnerDM goroutine shared a plain bool with no\nsynchronization — replace with atomic CAS claim/release so the\nsingle-flight reset prompt cannot race.\n\n---\nCreated with LLM: Cursor Grok 4.5 | high | Harness: Cursor",
"is_bot": false,
"headline": "fix(#1396): synchronize kill-switch reset prompt flag with atomic.Boo…",
"author_name": "Rich Kuo",
"author_login": "richkuo",
"committed_at": "2026-07-20T22:56:10Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "aca9bb6550163e689c3c645d68e0d3051ad1e1c6",
"body": "LoadState queried a strategy's entire lifetime trades with no LIMIT,\nthen truncated to maxTradeHistory in Go. Startup load time and memory\nscaled with total trade count instead of the intended bound.\n\n- Bound the query with ORDER BY timestamp DESC, rowid DESC LIMIT ?,\n mirroring RecentTradesForStra\n[…]\n in ascending order,\n and asserts (via EXPLAIN QUERY PLAN) the composite index is used\n instead of a full table scan + temp b-tree sort.\n\n---\nCreated with LLM: Sonnet 5 | high | Harness: Claude Code",
"is_bot": false,
"headline": "fix(#1395): bound LoadState's per-strategy trade query in SQL (#1398)",
"author_name": "Rich Kuo",
"author_login": "richkuo",
"committed_at": "2026-07-20T19:52:32Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "1acb9b1c1432996b5cefeb17f2c01f0d0ce90051",
"body": "…#1393)\n\nLock in clear-then-re-evaluate on the same CheckRisk call so a still-breached\ndrawdown re-latches, recovery clears, loss-streak resets by design, and flat\nperps use peak-relative after force-close.\n\n---\nCreated with LLM: Cursor Grok 4.5 | high | Harness: Cursor",
"is_bot": false,
"headline": "test(#1392): pin circuit-breaker cooldown expiry re-check invariant (…",
"author_name": "Rich Kuo",
"author_login": "richkuo",
"committed_at": "2026-07-20T18:50:14Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "4fa1107be419e4e137d19e6d7b28b13b15045a72",
"body": "…C62, Cursor Grok 4.5, high] (#1391)\n\n* fix(#1344): hold notional-cap opens without skipping close/SL paths\n\nReplace the whole-strategy continue on notionalBlocked with per-signal\npausedBlocksSignal holds so closes, reductions, and trailing SL/TP\nmaintenance keep running when the book is over max_no\n[…]\nain.go cycle-skip decision through notionalCapSkipsStrategyCycle\nand AST-scan main.go so a raw notionalBlocked continue bypass fails CI.\n\n---\nUpdated with LLM: Cursor Grok 4.5 | high | Harness: Cursor",
"is_bot": false,
"headline": "fix(#1344): hold notional-cap opens without skipping close/SL paths […",
"author_name": "Rich Kuo",
"author_login": "richkuo",
"committed_at": "2026-07-20T09:08:52Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "0d4436c148142cb6b21f07c4e595cc7989fdb5c0",
"body": "…t updates\n\n---\nUpdated with LLM: Claude Haiku 4.5 | medium | Harness: sync-docs-release",
"is_bot": false,
"headline": "docs: sync docs reflecting #1341/#1386 tuning apply feature and recen…",
"author_name": "Richard",
"author_login": "richkuo",
"committed_at": "2026-07-20T09:02:54Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "acc95d187fd29c51c77e1a36d01a996414efe1e2",
"body": "…ub (#1390)\n\nReplace printf|grep branch dispatch with case matching so EPIPE under\npytest -n auto cannot mis-route --paginate/--method calls to the empty\nGET fallback. Strengthen noop and miss diagnostics so unexpected misses\nsurface stdout/stderr instead of a blank assertion.\n\nLLM: Cursor Grok 4.5 | high | Harness: Cursor",
"is_bot": false,
"headline": "fix(#1389): remove pipefail race from patch_claude_comment fake gh st…",
"author_name": "Rich Kuo",
"author_login": "richkuo",
"committed_at": "2026-07-20T07:43:26Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "6fe26d11f6fadc69ea4cd793ba60d74381cb9fcb",
"body": "…[C95, Cursor Grok 4.5, high] (#1388)\n\n* feat(#1341): one-click apply of tuning suggestion with drift refusal\n\nAdd POST /api/tuning/apply so operators can promote a ranked survivor\nonly when the live raw baseline still matches the schema-v2 artifact,\nwith a crash-recoverable promotions journal and A\n[…]\nnal to manual_review instead\nof leaving an unretryable pending loop. Also cache live baselines once\nper strategy in the eligibility overlay.\n\nUpdated with LLM: Cursor Grok 4.5 | high | Harness: Cursor",
"is_bot": false,
"headline": "feat(#1341): one-click apply of tuning suggestion with drift refusal …",
"author_name": "Rich Kuo",
"author_login": "richkuo",
"committed_at": "2026-07-20T07:23:06Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "49066daa68df352b1e8d4dcd30291c30d897b5a0",
"body": "…tifacts (#1387)\n\nCapture verbatim open_strategy / user_defaults / user_close_defaults with\npresence bits from the same load_strategy_config read (opt-in, so Backtester\nspread callers stay safe) so #1341 can drift-check without re-resolving.\n\nLLM: Cursor Grok 4.5 | high | Harness: Cursor",
"is_bot": false,
"headline": "feat(#1386): persist schema-v2 raw promotion baseline in tune_live ar…",
"author_name": "Rich Kuo",
"author_login": "richkuo",
"committed_at": "2026-07-20T04:25:18Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "058b82cef3ed3b3a06f02ddfdb028943d41d3f76",
"body": "Document the strategy tuning page (#1340) and related tuning API (#1339/#1382) in CLAUDE.md, SKILL.md, and README.md. These features were implemented but their doc references were missed in their original PRs.\n\n---\nUpdated with LLM: Claude Haiku 4.5 | high | Harness: Claude Code",
"is_bot": false,
"headline": "docs: sync docs reflecting #1340 tuning page feature",
"author_name": "Richard",
"author_login": "richkuo",
"committed_at": "2026-07-18T07:03:11Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "e92f5c9cae6cb9875d9e51c4abc77bb7d1608926",
"body": "… high] (#1385)\n\n* feat(#1382): bound tuning-run artifact retention with max_retained_runs\n\nAdd tuning.max_retained_runs (0=keep-all) so operators can cap terminal\ntuning run dirs/metadata without deleting in-flight jobs; prune at\nstartup and after terminal persist, SIGHUP-adoptable.\n\nLLM: Cursor Gr\n[…]\neviction result-less first, then CompletedAt (else\nCreatedAt), then ID, so empty rejects/interrupts cannot displace a run\nwith results.json.\n\nUpdated with LLM: Cursor Grok 4.5 | high | Harness: Cursor",
"is_bot": false,
"headline": "feat(#1382): cap tuning run artifact retention [C37, Cursor Grok 4.5,…",
"author_name": "Rich Kuo",
"author_login": "richkuo",
"committed_at": "2026-07-18T06:47:34Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "ba228f59d0c74c96d27545b9dadfa8364ba64a98",
"body": "* feat(#1340): add strategy tuning page\n\nLLM: GPT-5 | high | Harness: Codex\n\n* fix(#1383): clarify tuning diffs and baseline state\n\nLLM: GPT Sol | high | Harness: Codex\n\n* Address review on #1383: always re-read live config on poll\n\nRemove the per-run liveSnapshots cache so diffs and baseline banner\n[…]\netches finish so\n3s poll ticks update diffs in place instead of removing visible content\nwhile replacement data is still in flight.\n\n---\nUpdated with LLM: Cursor Grok 4.5 | high | Harness: Claude Code",
"is_bot": false,
"headline": "feat(#1340): add strategy tuning page [C40, GPT Sol, high] (#1383)",
"author_name": "Rich Kuo",
"author_login": "richkuo",
"committed_at": "2026-07-18T06:17:11Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "bec25c7b57a3c2e5d50b615ee304265f59eae9a9",
"body": "…C5, Cursor Grok 4.5, high] (#1384)\n\n* docs: require Plain simple English in PR bodies and review findings\n\nSync the CI review prompt with rk-skills so every finding is human-readable, and require a Plain simple English lead on PR descriptions.\n\nLLM: Cursor Grok 4.5 | high | Harness: Cursor\n\n* docs:\n[…]\nke the rk-skills type(#N): summary [Cscore, model, effort] title rule explicit for go-trader so agents that only read this repo still match fleet titles.\n\nLLM: Cursor Grok 4.5 | high | Harness: Cursor",
"is_bot": false,
"headline": "docs: require Plain simple English in PR bodies and review findings […",
"author_name": "Rich Kuo",
"author_login": "richkuo",
"committed_at": "2026-07-18T06:01:38Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "f539982e294bfcd40cfef465970a1aa5e5ca7c75",
"body": "* feat(#1339): add persistent tuning run API\n\nAdd auth-gated REST endpoints backed by a restart-safe, serial research worker that bypasses trading Python slots. Persist run lifecycle, progress, and results beside the resolved out-of-tree config, and route OHLCV caching through a fail-loud StateDirec\n[…]\nl recover.\n\n---\nUpdated with LLM: Cursor Grok 4.5 | high | Harness: Cursor\n\n* Address review on #1381: resolve tuning registries and errors\n\n---\nUpdated with LLM: GPT Sol | high | Harness: Claude Code",
"is_bot": false,
"headline": "feat(#1339): add persistent tuning run API [C55, GPT Sol, high] (#1381)",
"author_name": "Rich Kuo",
"author_login": "richkuo",
"committed_at": "2026-07-18T04:36:27Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "ed9f570f7adcf19e21cba26c441500b027bac726",
"body": "… (#1370)\n\n* docs: condense CLAUDE.md under 40k-byte cap, document #1368 in README\n\nThe previous doc-sync (f98a49a) grew CLAUDE.md to 47,858 bytes, over\nthis project's 40k soft cap on the auto-loaded context file. Relocates\nrestated \"why\"/mechanism prose into docs/ARCHITECTURE.md (which has no\nsize \n[…]\nle\", a config-corruption-adjacent guardrail not reachable\n from either doc file otherwise, and relevant to the script's --force\n bypass.\n\n---\nUpdated with LLM: Sonnet 5 | high | Harness: Claude Code",
"is_bot": false,
"headline": "docs: condense CLAUDE.md under 40k-byte cap, document #1368 in README…",
"author_name": "Rich Kuo",
"author_login": "richkuo",
"committed_at": "2026-07-16T10:17:27Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "f98a49ade1474f749bec86951d1ec75da8fb9a6d",
"body": "- CLAUDE.md: note configurable kill_switch_reset_dm_timeout (#1368,\n replaces hard-coded 30m wait) on the Kill switch bullet; add\n backtest/tune_live.py (#1338) one-command retune driver to the\n Backtest section.\n- SKILL.md: correct stale #1190 \"No config change\" line (now\n superseded by #1368's timeout knob) and add the #1368 upgrade\n reference row.\n- AGENTS.md mirrors CLAUDE.md via symlink, no separate edit needed.\n\n---\nUpdated with LLM: Sonnet 5 | medium | Harness: Claude Code",
"is_bot": false,
"headline": "docs: sync docs reflecting recent commits (#1338, #1368) (#1343, #1369)",
"author_name": "Richard",
"author_login": "richkuo",
"committed_at": "2026-07-16T01:53:47Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "3b0c03a0f921f6e392903b2763f039ba546409a1",
"body": "…1343)\n\n* feat(#1338): one-command live-strategy tuning pipeline (tune_live)\n\nNew driver `backtest/tune_live.py` connects the config loader, walk-forward\nsearch, and the auto_suggest M-harness gate so deployed strategies can be\nretuned systematically instead of drifting stale.\n\nFor each config strat\n[…]\n), auto-neighborhood overlap variant, and a no-note assertion\non the constraint-free skip case. ARCHITECTURE.md tune_live bullet\nupdated.\n\n---\nUpdated with LLM: Fable 5 | medium | Harness: Claude Code",
"is_bot": false,
"headline": "feat(#1338): one-command live-strategy tuning pipeline (tune_live) (#…",
"author_name": "Rich Kuo",
"author_login": "richkuo",
"committed_at": "2026-07-16T00:45:01Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "ba181507745f6fc31bf05b46ddc469a2e69faf3a",
"body": "…#1369)\n\nReplace the hard-coded 30m AskOwnerDM wait with kill_switch_reset_dm_timeout,\nindependent of alert_throttle_interval, with load validation and SIGHUP adopt.\n\nLLM: Cursor Grok 4.5 | high | Harness: Cursor",
"is_bot": false,
"headline": "feat(#1368): configurable kill-switch reset DM timeout (default 6h) (…",
"author_name": "Rich Kuo",
"author_login": "richkuo",
"committed_at": "2026-07-16T00:44:32Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "3e5a2d2cf54bedf0901af88cf05cf16269e36906",
"body": "- CLAUDE.md: rewrite the @claude mode-routing bullet for the\n classify->review/implement/fix-pr consolidation (#1334) - the\n retired \"fix\" keyword, DOCS_RELEASE_ENABLED-gated docs-sync/release\n flow, and trusted-author fix-pr routing.\n- CLAUDE.md: note the new rsi_bb_combo strategy's M1-fail-but-\n[…]\nheadroom; the file still exceeds\n the 40k warning threshold pre-existing from before this sync and\n needs a dedicated condensation pass.\n\n---\nUpdated with LLM: Sonnet 5 | high | Harness: Claude Code",
"is_bot": false,
"headline": "docs: sync docs reflecting recent commits (#1330-#1335) (#1342)",
"author_name": "Rich Kuo",
"author_login": "richkuo",
"committed_at": "2026-07-12T10:11:52Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "652f5b32b9e69ef7dbd749b55f803bdb36a305ab",
"body": "…a real edge verdict (#1335)\n\n* feat(#1326): carry-pair backtest harness gives delta_neutral_funding a real edge verdict\n\nThe Backtester holds one leg, so its result for delta_neutral_funding was\ndominated by the naked short's price PnL (e.g. SOL 2023 ≈ −30%) — exactly what\nthe live spot hedge cance\n[…]\ntests (two-rebalance sell path, buy-side blend, rebalance→\nsignal-close leak, exit-bar close-vs-open valuation); 25 carry-pair tests pass.\n\n---\nUpdated with LLM: Opus 4.8 | high | Harness: Claude Code",
"is_bot": false,
"headline": "feat(#1326): carry-pair backtest harness gives delta_neutral_funding …",
"author_name": "Rich Kuo",
"author_login": "richkuo",
"committed_at": "2026-07-12T00:50:09Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "05667cfc9c9a7b32188f7256f414c2bc2e5d1eab",
"body": "Sync the vendored claude.yml with the new rk-skills template: routes are\nnow classify -> review / implement / fix-pr. Any non-\"review\" @claude\ncomment on a trusted-author PR runs the full review-reconciliation\nplaybook (fetch all unaddressed review feedback, validate each finding,\nfix what survives,\n[…]\nrsion 1.26, gofmt extra_allowed_tools,\nPUBLIC-repo gate comments) re-applied to all three call sites.\nRegression tests updated for the new routing; 31 pass.\n\n---\nLLM: Fable 5 | medium | Harness: agent",
"is_bot": false,
"headline": "Consolidate @claude PR-comment routing to single fix-pr mode (#1334)",
"author_name": "Rich Kuo",
"author_login": "richkuo",
"committed_at": "2026-07-11T08:51:53Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "7e5380944aaa41f388944458e2cf0bfe64104635",
"body": "* feat: add RSI+Bollinger Bands combo strategy\n\n- New rsi_bb_combo_core signal generator in shared_strategies/open/rsi_bb_combo.py\n- Mean reversion at Bollinger Band extremes confirmed by RSI oscillator\n- Registers under both spot and futures platforms\n\nFixes #1329\n\n* fix: add missing DEFAULT_PARAM_\n[…]\nregistered-but-unproven tunable baseline\n(consolidation_range precedent).\n\n---\nUpdated with LLM: Fable 5 | high | Harness: Claude Code\n\n---------\n\nCo-authored-by: OpenClaw Agent <openclaw@openclaw.ai>",
"is_bot": false,
"headline": "feat: add RSI+Bollinger Bands combo strategy (#1330)",
"author_name": "Rich Kuo",
"author_login": "richkuo",
"committed_at": "2026-07-11T07:18:15Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "0db1d51e0070595d3fa107c4d065c13522265042",
"body": "Updates CLAUDE.md/AGENTS.md (symlinked), SKILL.md, and README.md to\nreflect the feature/fix commits landed since the last docs sync\n(4b1d4514, #1205/#1206 era) through #1327:\n\n- SKILL.md: add missing Adjustable Settings + Per-strategy rows for\n portfolio_risk.daily_max_loss_usd/pct (#1269), same-di\n[…]\nprose in several dense bullets toward the\n 40k-char budget (still over target — flagged to the user for a\n dedicated condensation pass).\n\n---\nCreated with LLM: Sonnet 5 | high | Harness: Claude Code",
"is_bot": false,
"headline": "docs: sync docs reflecting recent commits (#1224-#1327) (#1328)",
"author_name": "Rich Kuo",
"author_login": "richkuo",
"committed_at": "2026-07-11T04:55:54Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "ee5781c5693b543f8fc68ca5533bcd61c2c5ba61",
"body": "… resolution; attribute deltas vs #1320 fee model (#1327)\n\n* research(#1294): re-run stale backtest baselines under intra-bar stop resolution; attribute deltas vs #1320 fee model\n\n- Thread --intrabar-resolution through exit_policy_ab (M6), the\n regime_1152_exit_retune driver, and the squeeze_983/br\n[…]\nwider's #1271 surface in the umbrella row (address review on #1327)\n\n---\nUpdated with LLM: Fable 5 | high | Harness: Claude Code\nClaude-Session: https://claude.ai/code/session_01Wym4oZiLY8FmSieT8juuSa",
"is_bot": false,
"headline": "research(#1294): re-run stale backtest baselines under intra-bar stop…",
"author_name": "Rich Kuo",
"author_login": "richkuo",
"committed_at": "2026-07-11T04:36:03Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "c3a8ef534405ce49b59d1183a0f6b2aaa6746aa6",
"body": "…#1325)\n\nM5 long+short screens, #1054 noise gates, and M1 held-out runs for\nanchored_vwap_channel, anchored_vwap_reversion, atr_band_revert, and\nbear_pullback_st; funding-aware eval_windows run for delta_neutral_funding\n(unmodelable as a hedged pair — live-only decision with a carry-pair harness\nspe\n[…]\ninal and bull-window-liquidation-prone; no whole-strategy deprecate,\nno roster changes. fee-audit-m5.md gains a pointer to the new study.\n\n---\nCreated with LLM: Fable 5 | medium | Harness: Claude Code",
"is_bot": false,
"headline": "research(#1280): edge verdicts for the five verdict-less strategies (…",
"author_name": "Rich Kuo",
"author_login": "richkuo",
"committed_at": "2026-07-11T03:47:34Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "8ce3675e8c3b69fc0986df3087a31e568d344d6d",
"body": "…gration (v17) (#1324)\n\n* feat(#1277): configurable Wilder-RMA ATR behind a gated atr_method migration (v17)\n\nAdds method=\"simple\"|\"wilder\" to the indicators_core ATR choke point\n(atr_from_true_range; wilder = tr.ewm(alpha=1/period, adjust=False).mean(),\nnever integer-rounded) and threads it through\n[…]\nime config,\npre-upgrade fallback, nil-cfg default, limit first-fill stamp +\npartial-fill no-restamp, and the pending-queue DB round-trip.\n\n---\nUpdated with LLM: Fable 5 | medium | Harness: Claude Code",
"is_bot": false,
"headline": "feat(#1277): configurable Wilder-RMA ATR behind a gated atr_method mi…",
"author_name": "Rich Kuo",
"author_login": "richkuo",
"committed_at": "2026-07-11T03:18:08Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "2b6c7ff48ba3d335cfb5353af89a5022a5ece985",
"body": "…ozen risk anchor (#1323)\n\n* feat(#1276): simulate scale-in add legs in the backtester with the frozen risk anchor\n\nA strategy with allow_scale_in: true traded a materially different system\nlive than the one its backtest scored — same-direction adds were silently\nskipped. The engine now simulates th\n[…]\nrtial→full across three legs, and two adds straddling a\npartial close reconciling sum(pnl) == final_capital − initial_capital\nwith fees on.\n\n---\nUpdated with LLM: Fable 5 | high | Harness: Claude Code",
"is_bot": false,
"headline": "feat(#1276): simulate scale-in add legs in the backtester with the fr…",
"author_name": "Rich Kuo",
"author_login": "richkuo",
"committed_at": "2026-07-10T17:11:06Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "405d2cb5397e9bc0ff26b037f3b8203645ba9c01",
"body": "…tive param constraints (#1321)\n\n* feat(#1281): consolidate indicator math into indicators_core; declarative param constraints\n\nOne shared open-tree module (shared_strategies/open/indicators_core.py:\nwilder_rsi, true_range, atr_sma with a round_large flag and per-site\nmin_periods) replaces all 20 in\n[…]\ng the strategy,\nconstraint, and unknown parameter. Runtime skip guards stay as\ndefense-in-depth.\n\nAddresses the Recommended Optional finding on PR #1321.\n\nLLM: Sonnet 5 | medium | Harness: Claude Code",
"is_bot": false,
"headline": "feat(#1281): consolidate indicator math into indicators_core; declara…",
"author_name": "Rich Kuo",
"author_login": "richkuo",
"committed_at": "2026-07-10T15:55:18Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "ebc21014908b9c18afd215b53c0d22a687be9590",
"body": "…attern), not tema_cross (#1322)\n\nThe #1314 starter flip changed starterSpotStrategyID to chart_pattern but\nleft the applyMinimalStarterDefaults doc comment naming tema_cross.\nReference the constant so the comment tracks future changes.\n\n---\nCreated with LLM: Fable 5 | medium | Harness: Claude Code",
"is_bot": false,
"headline": "docs: fix stale starter comment — name starterSpotStrategyID (chart_p…",
"author_name": "Rich Kuo",
"author_login": "richkuo",
"committed_at": "2026-07-10T15:25:02Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "71bc8ba60439603b52f09a9aa2e53c63b4c2ef2f",
"body": "…ts, roster adds, BH family passes (#1314)\n\nRuns the full pipeline for every graduate_m1-pending and unscreened_short\nM5 leg: #989 short-leg screens, #1054 noise gates (wide-pool primary — the\nis+oos short \"passes\" are all 2026-crash artifacts), M1 protocol, and BH\nfamily passes via auto_suggest (sp\n[…]\nxit_policy_ab._binom_two_sided_p overflowed past n≈1030\n (math.comb → float); rewritten in log space, regression-tested.\n\nCloses #1282\n\n---\nCreated with LLM: Fable 5 | medium | Harness: work-on-issue",
"is_bot": false,
"headline": "research(#1282): adjudicate the 11 M5-limbo strategies — final verdic…",
"author_name": "Rich Kuo",
"author_login": "richkuo",
"committed_at": "2026-07-10T15:21:32Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "a236719d9d03c509708a198e2d735a0a811c7b10",
"body": "…ant, hyperliquid audit fees, roster re-screen (#1320)\n\n* fix(#1315): correct Hyperliquid fee model — 0.045% taker, add maker constant, hyperliquid audit fee model, roster re-screen\n\n- scheduler/fees.go: HyperliquidTakerFeePct 0.00035 → 0.00045 (base tier per\n the official schedule); add Hyperliqui\n[…]\neen artifact clarified: only the fee axis changed — its data was\n binanceus throughout (eval_windows loads under the default exchange_id).\n\n---\nUpdated with LLM: Fable 5 | high | Harness: Claude Code",
"is_bot": false,
"headline": "fix(#1315): correct Hyperliquid fee model — 0.045% taker, maker const…",
"author_name": "Rich Kuo",
"author_login": "richkuo",
"committed_at": "2026-07-10T15:19:19Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "118be1254b7b3090ba7f08e56d1cf9cfa27a9ccc",
"body": "…SSES (#1319)\n\n#1295 (landed via #1312) added the advisory Monte Carlo harness and\nenabled it by default, contradicting its own originating issue and\nacceptance criteria (\"DEFAULT_HARNESSES is unchanged\"). Every spec\nthat didn't pin its own harnesses list was silently running a 10k-path\nMonte Carlo \n[…]\n no monte_carlo.py\n command or subprocess spawns when a spec doesn't name it.\n- Correct the \"Default:\" comment in suggest.template.jsonc.\n\n---\nCreated with LLM: Sonnet 5 | high | Harness: Claude Code",
"is_bot": false,
"headline": "fix(#1316): restore opt-in Monte Carlo — drop \"mc\" from DEFAULT_HARNE…",
"author_name": "Rich Kuo",
"author_login": "richkuo",
"committed_at": "2026-07-10T13:26:56Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "febe3e1e3ee88cc859a1c61dbb5b1229c7f622c9",
"body": "…ivate copy (#1318)\n\n* Migrate to the central rk-skills claude-run reusable workflow\n\nDelete the vendored .github/workflows/claude-run.yml and point claude.yml's\nreview, implement, and fix-pr-review jobs at\nrichkuo/rk-skills/.github/workflows/claude-run.yml@main with secrets: inherit.\n\nLocal diverge\n[…]\nml was deleted in this PR; the\nplugin/workflow references now point at the central\nrichkuo/rk-skills/.github/workflows/claude-run.yml@main.\n\n---\nUpdated with LLM: Fable 5 | high | Harness: Claude Code",
"is_bot": false,
"headline": "[C32] Use the shared Claude runner workflow instead of this repo's pr…",
"author_name": "Rich Kuo",
"author_login": "richkuo",
"committed_at": "2026-07-10T13:22:20Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "9ccd431bc64c8859d49c2874c97e00999cc4ae39",
"body": "…t shortlist (#1312)\n\n* feat(#1295): advisory Monte Carlo drawdown columns in the auto-suggest shortlist\n\nSurface per-candidate trade-order Monte Carlo risk (P95 max drawdown,\nP(max DD >= kill switch), P(final < start)) next to the promotion verdict, so a\ncandidate that clears the gate with a fragil\n[…]\naces as `mc_run_failed`.\n\nBoth fixes are regression-covered and confirmed red on the prior code.\nVerified: full Python suite, 2614 passed.\n\n---\nUpdated with LLM: Opus 4.8 | high | Harness: Claude Code",
"is_bot": false,
"headline": "feat(#1295): advisory Monte Carlo drawdown columns in the auto-sugges…",
"author_name": "Rich Kuo",
"author_login": "richkuo",
"committed_at": "2026-07-10T12:24:43Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "f93b8304fb4a756d64983310e2258032da721b2e",
"body": "…kflow switch blocked) (#1311)\n\n* Drop project-level rk-skills plugin pin; make the plugin CI-only (#1310)\n\nDelete .claude/settings.json (added in #1308) and the !.claude/settings.json\ntracking exception in .gitignore — .claude/* is now fully ignored. Rewrite\nthe CLAUDE.md \"Claude Code Skills\" secti\n[…]\nss review nits — durable settings.json ignore / accurate comment\n\n---\nUpdated with LLM: Fable 5 | medium | Harness: Claude Code\n\nClaude-Session: https://claude.ai/code/session_01RCjSkFmes3abQRRZarweF5",
"is_bot": false,
"headline": "Drop project-level rk-skills plugin pin; make the plugin CI-only (wor…",
"author_name": "Rich Kuo",
"author_login": "richkuo",
"committed_at": "2026-07-10T11:46:30Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "850ae5c83f2209e2b6719b52ad45ab737a68e3dd",
"body": "…1309)\n\n* Enforce config_version migration floor of 13; prune v6-v12 handlers (#1285)\n\n- MinSupportedConfigVersion=13: a config stamped below the floor is\n rejected loudly by both loadConfig (checkRawConfigVersionSupported,\n before any migration pass) and MigrateConfig (before any rewrite) with\n \n[…]\nded Optional finding on PR #1309.\n\nLLM: Claude Opus 4.8 (1M) | xhigh | Harness: anthropics/claude-code-action@v1\n\n---------\n\nCo-authored-by: claude[bot] <41898282+claude[bot]@users.noreply.github.com>",
"is_bot": false,
"headline": "Enforce config_version migration floor (13); prune v6-v12 handlers (#…",
"author_name": "Rich Kuo",
"author_login": "richkuo",
"committed_at": "2026-07-10T11:13:28Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "25957ffac50c959ec72a05a4f42de3ca8df91017",
"body": "* Install rk-skills as a project-scoped Claude Code plugin (#1307)\n\nPin the richkuo/rk-skills marketplace and enable the rk-skills plugin in\n.claude/settings.json so every session in this repo gets the workflow\nskills (new-issue, validate-issue, work-on-issue, fix-pr-review, the -loop\nvariants, gith\n[…]\ned copies\n on a persistent runner can never shadow the plugin.\n\n---\nUpdated with LLM: Opus 4.8 | medium | Harness: Claude Code\n\nClaude-Session: https://claude.ai/code/session_01RCjSkFmes3abQRRZarweF5",
"is_bot": false,
"headline": "[C10] Install rk-skills as a project-scoped Claude Code plugin (#1308)",
"author_name": "Rich Kuo",
"author_login": "richkuo",
"committed_at": "2026-07-10T11:02:04Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "24688633b06d3c41d17ce4909a2f0531f3770cd9",
"body": "* ci(#1304): parallelize CI pytest with pytest-xdist\n\nThe CI python job's pytest step ran all 2,517 tests sequentially in\n~12.3 minutes, ~95% of it in five regime test files\n(test_regime_bounded_window.py alone: 404s). Add pytest-xdist to the\ntest extra and run `uv run pytest -n auto` in CI, distrib\n[…]\n 1306 review: new tests must load ambiguous module names by path,\nand intermittent parallel pytest failures are isolation bugs, not flakes.\n\n---\nUpdated with LLM: Fable 5 | high | Harness: Claude Code",
"is_bot": false,
"headline": "ci(#1304): parallelize CI pytest with pytest-xdist (#1306)",
"author_name": "Rich Kuo",
"author_login": "richkuo",
"committed_at": "2026-07-10T10:33:13Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "6c9344a38f0ac717430ffffe0892c65ad704d2b7",
"body": "* feat(#1268): opt-in risk-per-trade sizing for HL perps\n\nAdd risk_per_trade_pct — fixed-fractional sizing where every open risks a\nconstant fraction of strategy cash: qty = (cash × pct/100) / stop_distance,\nnotional capped at cash × exchange_leverage. Stop distance resolves from the\nstrategy's stop\n[…]\ngression test covers all five explicit-zero owners.\n\n---\nUpdated with LLM: Fable 5 | high | Harness: Claude Code\n\n---------\n\nCo-authored-by: claude[bot] <41898282+claude[bot]@users.noreply.github.com>",
"is_bot": false,
"headline": "feat(#1268): opt-in risk-per-trade sizing for HL perps (#1303)",
"author_name": "Rich Kuo",
"author_login": "richkuo",
"committed_at": "2026-07-10T10:33:02Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "38318d77ba44ef0ca02c0a84c2e63977d11a0ee6",
"body": "New phase: check mergeable/mergeStateStatus, merge base into head\n(never rebase), reconcile each conflicted file by the intent of both\nsides, stop on irreconcilable safety-critical conflicts. Synced from\nrk-skills claude-workflow template.\n\n---\nCreated with LLM: Fable 5 | medium | Harness: Claude Code",
"is_bot": false,
"headline": "Add merge-conflict resolution to @claude fix prompt (#1305)",
"author_name": "Rich Kuo",
"author_login": "richkuo",
"committed_at": "2026-07-10T09:51:09Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "7642eb308e2479ab1ba4a6879811451a095a361d",
"body": "…hiding plus config-load warnings (#1297)\n\n* feat(#1275): quarantine 26 M5-deprecated strategies behind discovery hiding plus config-load warnings\n\nThe M5 fee audit (#999, docs/research/fee-audit-m5.md) documented 26 open\nstrategies with no positive gross edge, but 23 of them were still fully\ndiscov\n[…]\n stay\nsilent.\n\nTests: TestAllowDeprecatedHotReloadable (alone/bundled/while-open) and\nTestNewlyDeprecatedEdgeWarnings (6 transition cases).\n\n---\nUpdated with LLM: Fable 5 | high | Harness: Claude Code",
"is_bot": false,
"headline": "feat(#1275): quarantine 26 M5-deprecated strategies behind discovery …",
"author_name": "Rich Kuo",
"author_login": "richkuo",
"committed_at": "2026-07-10T09:37:51Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "336372b90e22b207a1db361abee993ecfce1c598",
"body": "…300)\n\n* Add configurable regime_gate_on_failure entry-gate failure policy\n\nCloses #1278. The allowed_regimes entry gate failed open when the regime\nstore could not produce a label (#879 policy b), so a transient\nregime-subprocess outage admitted exactly the entries the filter exists\nto block. This \n[…]\nailure and\n regime suites still pass (70 passed).\n\n---\nUpdated with LLM: Opus 4.8 | high | Harness: Claude Code\n\n---------\n\nCo-authored-by: claude[bot] <41898282+claude[bot]@users.noreply.github.com>",
"is_bot": false,
"headline": "Add configurable regime_gate_on_failure entry-gate failure policy (#1…",
"author_name": "Rich Kuo",
"author_login": "richkuo",
"committed_at": "2026-07-10T09:19:20Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "77cb91434f227f119f495d0f85fdc62dcd41500a",
"body": "…uin distributions (#1293)\n\n* feat(#1274): Monte Carlo trade-order resampler for drawdown/risk-of-ruin distributions\n\nNew suggest-only harness backtest/monte_carlo.py: resamples a completed\nrun's closed-trade order (permutation + circular block bootstrap) into\nequity-path distributions — configurabl\n[…]\nnet 5 | high | Harness: Claude Code\n\n* Address review on #1293: SystemExit guards for file-I/O, --params, --dataset, and trade-dict inputs\n\n---\nUpdated with LLM: Sonnet 5 | high | Harness: Claude Code",
"is_bot": false,
"headline": "feat(#1274): Monte Carlo trade-order resampler for drawdown/risk-of-r…",
"author_name": "Rich Kuo",
"author_login": "richkuo",
"committed_at": "2026-07-10T09:15:26Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "7f17c30ee1af940726543092102ca2749e6ac463",
"body": "* Add same-direction exposure cap that blocks new opens (#1270)\n\nPortfolio risk previously treated correlated crypto positions as\ndiversified: the only portfolio-level exposure control was the gross\nnotional cap, so an all-long BTC+ETH+SOL perps book passed every check\nwhile drawing down as a single\n[…]\nth LLM: Fable 5 | high | Harness: Claude Code\n\n---------\n\nCo-authored-by: claude[bot] <41898282+claude[bot]@users.noreply.github.com>\nCo-authored-by: Rich Kuo <880112+richkuo@users.noreply.github.com>",
"is_bot": false,
"headline": "Add same-direction exposure cap that blocks correlated new opens (#1301)",
"author_name": "Rich Kuo",
"author_login": "richkuo",
"committed_at": "2026-07-10T09:14:57Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "562ce8eef6282b4ea3d3926ba794c72790acc301",
"body": "… per strategy (#1299)\n\nAdds three optional StrategyConfig fields — cb_drawdown_cooldown_minutes\n(default 1440), cb_loss_streak_threshold (default 5), and\ncb_loss_streak_cooldown_minutes (default 60) — read exclusively through\nnil-safe accessors mirroring the #1048 CircuitBreakerEnabled() pattern,\ns\n[…]\njson can stamp fleet-wide overrides on non-manual strategies.\n\nCloses #1273\n\nLLM: Fable 5 | high | Harness: issue-implement\n\nCo-authored-by: claude[bot] <41898282+claude[bot]@users.noreply.github.com>",
"is_bot": false,
"headline": "Make circuit-breaker cooldowns and loss-streak threshold configurable…",
"author_name": "Rich Kuo",
"author_login": "richkuo",
"committed_at": "2026-07-10T09:02:19Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "82387646b4caba8122969e300ba5bd3ad529f9e6",
"body": "* docs(ci): forbid test/backtest execution in the PR review prompt\n\nThe review prompt now states the review is static: never run test\nsuites, backtests, builds, simulations, or scripts. Judge the diff by\nreading it; CI runs tests separately. Ports rk-skills f5140d1.\n\n---\nUpdated with LLM: Fable 5 | \n[…]\nnew pin covers\nthe retired fix-pr spelling routing as a plain ask.\n\n---\nUpdated with LLM: Fable 5 | high | Harness: Claude Code\n\nClaude-Session: https://claude.ai/code/session_013QLCd2vnryHLa4W94GqLEx",
"is_bot": false,
"headline": "ci: ban executing project code in all Claude workflow modes (#1302)",
"author_name": "Rich Kuo",
"author_login": "richkuo",
"committed_at": "2026-07-10T08:52:12Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "d29b2ffce770525464324c707dfd01a842958374",
"body": "… over all open strategies (#1296)\n\n* test(#1279): registry-wide forward-peek (truncation-invariance) sweep over all open strategies\n\nAdds shared_strategies/open/test_registry_forward_peek.py: a parameterized\npytest module that sweeps every strategy in the open registry (including\nhidden and backtes\n[…]\nd under -k selection, ordering plugins, or xdist. Now it\nalways recomputes per allowlisted name (one cheap eval each); the cache is\ndeleted.\n\n---\nUpdated with LLM: Fable 5 | low | Harness: Claude Code",
"is_bot": false,
"headline": "test(#1279): registry-wide forward-peek (truncation-invariance) sweep…",
"author_name": "Rich Kuo",
"author_login": "richkuo",
"committed_at": "2026-07-10T08:17:10Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "70fd3c89ea13abf2b62a6c1e3b67df81fe43e16e",
"body": "…ter (#1292)\n\n* feat(#1271): intra-bar OHLC-walk SL/TP race resolution in the backtester\n\nThe engine resolved same-bar stop-loss vs take-profit races at bar close\nwith no intra-bar walk: a volatile bar that swept both the armed SL\ntrigger and a TP level credited the TP whenever the close confirmed i\n[…]\ns + stop remainder)\nprorates each leg by initial_quantity — the live-position-denominator\nand dropped-qty_frac mutations both fail these.\n\n---\nUpdated with LLM: Fable 5 | medium | Harness: Claude Code",
"is_bot": false,
"headline": "feat(#1271): intra-bar OHLC-walk SL/TP race resolution in the backtes…",
"author_name": "Rich Kuo",
"author_login": "richkuo",
"committed_at": "2026-07-09T23:21:43Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "2fd12cdd02ba0815f7e9f2c4b03a117d7e9ea20d",
"body": "Implement runs on large issues exceeded the 45m cap (run 29046988463).\n\n---\nCreated with LLM: Fable 5 | high | Harness: Claude Code",
"is_bot": false,
"headline": "chore: bump Claude workflow job timeout to 90 minutes",
"author_name": "Richard",
"author_login": "richkuo",
"committed_at": "2026-07-09T22:53:31Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "04d59cecc59544eff46a966fcf71a7f55bc7ae40",
"body": "…ies until UTC rollover (#1291)\n\n* feat(#1269): portfolio-wide hard daily loss limit that holds new entries until UTC rollover\n\nNew portfolio_risk.daily_max_loss_usd / daily_max_loss_pct (0/unset =\ndisabled; both set -> lower resolved USD threshold wins; pct basis = sum of\nper-strategy initial_capit\n[…]\nMissWarning) keeps log greps and operator\nreports identical. Tests cover the both-arms, tripped, pct-only note\nshapes and the DM formatter.\n\n---\nUpdated with LLM: Fable 5 | high | Harness: Claude Code",
"is_bot": false,
"headline": "feat(#1269): portfolio-wide hard daily loss limit that holds new entr…",
"author_name": "Rich Kuo",
"author_login": "richkuo",
"committed_at": "2026-07-09T19:53:05Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "d36d2fef8231f7d6edeb7bc94aef496a5e418b1e",
"body": "…rs (#1288)\n\n* chore(#1286): remove dead scheduler Go wrappers and zero-caller helpers\n\nDelete unused helpers and migrate tests onto the surviving validateConfig,\nWithOIDTotals, WithResolver, and Execute*With* entry points with no behavior change.\n\nLLM: Cursor Grok 4.5 | high | Harness: Cursor\n\n* Ad\n[…]\nRCHITECTURE.md, and remove regimeLabelAtOpen plus its sole unit test\nafter positionRegimeForFeature deletion left it production-unreachable.\n\nUpdated with LLM: Cursor Grok 4.5 | high | Harness: Cursor",
"is_bot": false,
"headline": "chore(#1286): remove dead scheduler Go wrappers and zero-caller helpe…",
"author_name": "Rich Kuo",
"author_login": "richkuo",
"committed_at": "2026-07-09T05:32:42Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "cdd1b0cb470581d98b0a73abdf6ffbe26ffd1d50",
"body": "…ults (#1289)\n\nRemove 14 unreferenced pre-refactor archive files and the self-marked-superseded\nTHETA_HARVEST_RESULTS.md so stale figures can't be cited by accident.\n\nLLM: Grok 4.5 | high | Harness: Cursor",
"is_bot": false,
"headline": "chore(#1284): delete unused archive/ and superseded theta-harvest res…",
"author_name": "Rich Kuo",
"author_login": "richkuo",
"committed_at": "2026-07-09T05:18:15Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "9373d71a53dc42d1be48923d34c01b1c15315496",
"body": "…#1287)\n\n* fix(#1272): panic if startup kill-switch clear runs after scheduler starts\n\nEnforce the single-threaded contract of ClearLatchedKillSwitchSharedWallet\nwith an atomic phase flag set before server.Start, so a future refactor\ncannot silently race the portfolio kill-switch latch.\n\nCloses #127\n[…]\ntarted via t.Cleanup\n\nPrevent the panic-path ClearLatched test from leaking the package-level\nphase flag into later Clear-calling tests.\n\n---\nUpdated with LLM: Cursor Grok 4.5 | high | Harness: Cursor",
"is_bot": false,
"headline": "fix(#1272): enforce startup-only kill-switch clear with phase guard (…",
"author_name": "Rich Kuo",
"author_login": "richkuo",
"committed_at": "2026-07-09T05:17:49Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "912e1bdff50a99387349d419a246a4703d151dfc",
"body": "…port (#1283)\n\n* docs: add HTML reports directory with strategy framework review and BTC cycle report\n\nAdds docs/reports/ as the home for standalone HTML analysis reports:\n- strategy-framework-review.html — code-level review of the strategy stack\n (entry signals, exit/risk, backtesting rigor, live \n[…]\nnew system-hygiene\nsection covering the dead/legacy-code audit (issues 1284-1286).\n\nLLM: Fable 5 | medium | Harness: Claude Code\nClaude-Session: https://claude.ai/code/session_01AGfCwm7K4MGARqReHsiJnA",
"is_bot": false,
"headline": "docs: add docs/reports/ with strategy framework review + BTC cycle re…",
"author_name": "Rich Kuo",
"author_login": "richkuo",
"committed_at": "2026-07-09T03:23:26Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "647c5131c5517adaff15887efb9d705eb04cc960",
"body": "…267)\n\n* feat(#1266): make alert throttle interval configurable with 6h default\n\nAdd alert_throttle_interval to config.json so repeated operator alerts back off on a fleet-wide cadence instead of a hardcoded hour, wire all four throttle paths, and hot-reload via SIGHUP.\n\nLLM: Composer 2.5 | high | H\n[…]\nad\n\nStop loadConfig from mutating the live interval during probe/candidate parses; apply explicitly after daemon startup and on accepted SIGHUP reload only.\n\nLLM: Composer 2.5 | high | Harness: Cursor",
"is_bot": false,
"headline": "feat(#1266): configurable alert throttle interval with 6h default (#1…",
"author_name": "Rich Kuo",
"author_login": "richkuo",
"committed_at": "2026-07-08T09:50:50Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "63b833932d6d64db435f4f875a4aafeee7a1ffaf",
"body": "…osition (#1265)\n\nDelegate the Discord write path to executePaperToLive and add a shared\npaperToLiveBlockedReason helper so flat-only matches the dashboard surface.\n\n---\nCreated with LLM: Composer 2.5 | high | Harness: Cursor",
"is_bot": false,
"headline": "fix(#1264): refuse Discord /paper-to-live while strategy holds open p…",
"author_name": "Rich Kuo",
"author_login": "richkuo",
"committed_at": "2026-07-07T02:41:01Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "22404137bc641f37d29e630431fd53f40dba18f8",
"body": "* fix(#1261): guard manual limit opens against market races\n\nShare pending-limit visibility with the manual market cores so queued resting orders block position-changing submits for the same strategy and symbol.\n\nHold the manual-action file lock around limit placement from guard reads through pendin\n[…]\n7 is validated against the re-read instead of refused against 0.4.\n\nLLM: Opus 4.8 | xhigh | Harness: Claude Code\n\n---------\n\nCo-authored-by: claude[bot] <41898282+claude[bot]@users.noreply.github.com>",
"is_bot": false,
"headline": "fix(#1261): guard manual limit opens against market races (#1263)",
"author_name": "Rich Kuo",
"author_login": "richkuo",
"committed_at": "2026-07-07T02:28:49Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "76b165423284bb7f72036aa417107e77bb57f0ef",
"body": "…per-to-live, apply-regime-gate behind confirm-nonce flow (Phase 5 of #1229) (#1262)\n\n* feat(#1258): dashboard structural mutations behind confirm-nonce flow (Phase 5 of #1229)\n\nFour confirm-nonce-gated structural endpoints (ui_structural.go): POST\n/api/config/add-strategy and /api/strategies/{id}/{\n[…]\ncritical\nsection — only the blast-radius growth check is inside).\n\n---\nUpdated with LLM: Opus 4.8 | xhigh | Harness: Claude Code\nClaude-Session: https://claude.ai/code/session_01ER2VzaXjdgqHDXKMcEBFcA",
"is_bot": false,
"headline": "feat(#1258): dashboard structural mutations — add/remove strategy, pa…",
"author_name": "Rich Kuo",
"author_login": "richkuo",
"committed_at": "2026-07-07T01:38:35Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "858e3ad338100ca0316b2ee7db0e101e7368aef5",
"body": "…rmation (Phase 4 of #1229) (#1260)\n\n* feat(#1257): dashboard trade actions behind confirm-nonce typed confirmation (Phase 4 of #1229)\n\nServer-issued single-use 60s confirm nonces (POST /api/confirm) bound to\naction+strategy+canonicalized params; six POST endpoints (open/add/close/\nforce-close/updat\n[…]\n gofmt/vet clean. ARCHITECTURE.md manual-mechanics updated.\n\nLLM: Claude Opus 4.8 | xhigh | Harness: Claude Code\n\n---------\n\nCo-authored-by: claude[bot] <41898282+claude[bot]@users.noreply.github.com>",
"is_bot": false,
"headline": "feat(#1257): dashboard trade actions behind confirm-nonce typed confi…",
"author_name": "Rich Kuo",
"author_login": "richkuo",
"committed_at": "2026-07-06T23:56:09Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "c58d1f02df8cfd65982167b91d4e0598a6a86611",
"body": "…otification toggles (Phase 3 of #1229) (#1259)\n\n* feat(#1256): dashboard low-risk mutations — pause/unpause + ratchet-notification toggles (Phase 3 of #1229)\n\nNew POST surface in ui_mutations.go, all guarded by uiMutationGuards\n(POST-only, requireMutatingAPIAuth, JSON content type, requireSameOrigi\n[…]\nen status_token is unset steering shared-host operators to configure\nit, and document the widened scope in the ARCHITECTURE.md #1256 bullet.\n\n---\nUpdated with LLM: Fable 5 | low | Harness: Claude Code",
"is_bot": false,
"headline": "feat(#1256): dashboard low-risk mutations — pause/unpause + ratchet-n…",
"author_name": "Rich Kuo",
"author_login": "richkuo",
"committed_at": "2026-07-06T10:46:07Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "e21df8bdc055fd675975b47a17ca648e0c99a1a1",
"body": "Reviews on PR #1254 surfaced one to two findings per round across five\nrounds, though five of the six findings existed in the original diff —\neach pass anchored on the most salient issue and stopped. Instruct the\nreviewer to sweep the full diff once per dimension (correctness, error\npaths, state/lif\n[…]\naling, concurrency, security) and\nreport all surviving findings in a single comment.\n\nLLM: Fable 5 | high | Harness: Claude Code\nClaude-Session: https://claude.ai/code/session_01CcsnwhZjVsaMUhrtkCiBUe",
"is_bot": false,
"headline": "docs: add multi-dimension sweep to the PR review prompt (#1255)",
"author_name": "Rich Kuo",
"author_login": "richkuo",
"committed_at": "2026-07-06T10:09:34Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "5a85008729bd98022f2669538bcd4e933a0f5575",
"body": "…erboard, diagnostics, cashflow, dead, closing, correlation) (#1254)\n\n* feat(#1231): six read-only ops API endpoints + dashboard panels (leaderboard, diagnostics, cashflow, dead, closing, correlation)\n\nPhase 2 of #1229. New ui_ops.go registers six GET routes — all\nrejectIfDraining + requireAPIAuth, \n[…]\ntree sort as lifetime\nhistory grows. Idempotent CREATE INDEX IF NOT EXISTS in schemaDDL, so\nexisting deployments pick them up on next open.\n\n---\nUpdated with LLM: Fable 5 | high | Harness: Claude Code",
"is_bot": false,
"headline": "feat(#1231): six read-only ops API endpoints + dashboard panels (lead…",
"author_name": "Rich Kuo",
"author_login": "richkuo",
"committed_at": "2026-07-06T09:37:24Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "d43c89297fd5c60c020aabe09caab1758700ec6f",
"body": "…ill-switch and directional-cert state (#1253)\n\n* feat(#1230): dashboard renders regime store, transitions, pause, CB/kill-switch and directional-cert state\n\nPhase 1 of #1229. Frontend panels plus serialization glue — no new\nendpoints, no mutations:\n\n- Wire the unused GET /api/regime and GET /api/re\n[…]\nnet avg_win/avg_loss, while\n#1251's test stubs carried only pnl/pnl_pct. Extend the stub with\nrealistic notional fields; all 11 tests pass.\n\n---\nCreated with LLM: Fable 5 | high | Harness: Claude Code",
"is_bot": false,
"headline": "feat(#1230): dashboard renders regime store, transitions, pause, CB/k…",
"author_name": "Rich Kuo",
"author_login": "richkuo",
"committed_at": "2026-07-06T08:06:55Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "af50b2a33dfaebe113bd692a45c6b8c059a2ea61",
"body": "… geometry — dated addenda (#1252)\n\nRe-ran all six documented studies whose verdicts rest on ATR-stop/tiered-TP\ngeometry against current main (the #1238 audit fixes plus #1250 fee-net-per-trade\nand #1251 canonical Sortino / None profit-factor / half-open windows), on the\nidentical #1228 audit cache \n[…]\nded/deprecated/repurposed, so no\nbacktesting-registry.md row changes.\n\nCloses #1243\n\nLLM: Opus 4.8 | high | Harness: Claude Code\nClaude-Session: https://claude.ai/code/session_01TMQ1ic25DvfW2pBkVYbKvu",
"is_bot": false,
"headline": "docs(#1243): re-run documented backtest studies under corrected #1228…",
"author_name": "Rich Kuo",
"author_login": "richkuo",
"committed_at": "2026-07-06T07:00:19Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "48424d44d6c882e95b0e9ca211f1c0606d1c3c7c",
"body": "…te (#1250)\n\n* fix(#1241): net backtest per-trade pnl of both fees at every close site\n\nBefore this change, backtest `Trade.pnl` was inconsistently fee-netted:\nonly the engine/registry close path deducted the exit commission, and no\nclose path deducted the entry commission. The plain signal / stop-l\n[…]\ntry commission and each leg nets net-of-both-fees,\nconfirming the positive shares / initial_quantity handling against a\nnegative position.\n\n---\nUpdated with LLM: Opus 4.8 | high | Harness: Claude Code",
"is_bot": false,
"headline": "fix(#1241): net backtest per-trade pnl of both fees at every close si…",
"author_name": "Rich Kuo",
"author_login": "richkuo",
"committed_at": "2026-07-06T05:45:37Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "acfc1c917db64353784230e2c5eddce14a08c268",
"body": "…ws (#1251)\n\nThree independent backtest metric/convention degenerates surfaced by the\n#1228 audit, fixed together:\n\n1. Sortino (backtester._calculate_metrics): replace the sample std of\n negative returns about their own mean (which gated on >=2 down bars and\n scored a near-perfect leg a neutral \n[…]\nresearch/1181-htf-filter-baseline-revalidation.md is annotated as\npre-#1242, with regeneration tracked in #1243. Sharpe/return/DD unaffected.\n\nCloses #1242\n\nLLM: Opus 4.8 | high | Harness: Claude Code",
"is_bot": false,
"headline": "fix(#1242): canonical Sortino, None profit factor, half-open M1 windo…",
"author_name": "Rich Kuo",
"author_login": "richkuo",
"committed_at": "2026-07-06T05:45:35Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "4fe59e51bedd97a41aee3aa58c52e3408d2b05b4",
"body": "…tion (#1248)\n\nMutation audit of backtest look-ahead and #1005 liquidation-floor tests:\nevery .shift(1) HTF site in run_backtest.py (_aligned_regime_columns,\n_profile_label_series, _htf_trend_series), the backtester sticky floor /\nsentinel floor / liquidated flag, the eval_windows ddadj floor and\nle\n[…]\ne_audit screen_leg's\nnet-OR-gross liquidated propagation — add three tests pinning both sides\nof the OR (net-only bust, gross-only bust, neither).\n\nCloses #1235\n\nLLM: Fable 5 | medium | Harness: agent",
"is_bot": false,
"headline": "test(#1235): pin fee_audit screen_leg net-OR-gross liquidated propaga…",
"author_name": "Rich Kuo",
"author_login": "richkuo",
"committed_at": "2026-07-06T02:12:57Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "39d429383936fcecad601d6c7f871e3b091a7ab8",
"body": "… + deterministic v15 alias fold (#1246)\n\nAudit of config.go / config_migration.go (v13–v16) / close_defaults.go /\nconfig_reload.go validator tests. Eight mutation spot-checks (stop-loss\npct/margin mutex, close_strategies len>1 reject, unknown-key guard, v16\nalias-conflict reject, hot-reload leverag\n[…]\nConfig preserves\nall fields and only restamps; deterministic v15 alias precedence;\nleverage hot-reload allowed while flat (symmetry with the while-open\nreject).\n\nLLM: Fable 5 | medium | Harness: agent",
"is_bot": false,
"headline": "test(#1236): audit config validation/migration tests — compound cases…",
"author_name": "Rich Kuo",
"author_login": "richkuo",
"committed_at": "2026-07-06T02:12:55Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "507618917e01b5614660854a45d45b23613b708f",
"body": "…, trailing SL, kill switch, ratchet gates (#1247)\n\nAudit of tests guarding auto-protective mechanisms; adds class-level tests\nfor every confirmed gap (no production changes — no masked bugs found):\n\n- regime_atr_test.go: all 9 previously untested regime-block × scalar-owner\n mutex pairs (stop_loss\n[…]\nquidKillSwitchFillShare fail-closed\n (non-peer, zero-qty peer, all-zero peers -> (0,0)); sole-peer full fill;\n peer shares sum to reported fill.\n\nCloses #1234\n\nLLM: Fable 5 | medium | Harness: agent",
"is_bot": false,
"headline": "test(#1234): strengthen auto-protective test assertions — stop owners…",
"author_name": "Rich Kuo",
"author_login": "richkuo",
"committed_at": "2026-07-06T02:11:15Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "e2dc781af66b2bcecabd20f69da06be2247a607e",
"body": "…verage gaps (#1245)\n\nAssertion-quality audit across trade_pnl, shared-wallet reconcile/drift,\nHL/OKX/TopStep cashflow journals, backfill trade-ledger/hl-fees, and\nkill-switch fill-share. New class-level tests (inverse/compound/boundary):\n\n- trade_pnl_test.go: gross-vs-net W/L classification; SQL-vs\n[…]\now\nrefuses non-Hyperliquid keys, turning the OKX/TopStep shadow-only rule\nfrom call-site convention into an enforced guard (with regression test).\n\nCloses #1233\n\nLLM: Fable 5 | medium | Harness: agent",
"is_bot": false,
"headline": "test(#1233): audit money/PnL/fee accounting tests; close bug-class co…",
"author_name": "Rich Kuo",
"author_login": "richkuo",
"committed_at": "2026-07-06T02:09:34Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "2b5adf3f45f3502d5b241144fe20bd8ff967291b",
"body": "Default --config backtests now inject user_defaults, matching the live loader. By-name runs still use system defaults, and --defaults system remains available for old baseline comparisons.\n\nTests cover the context-aware default, the explicit system override, and the existing user/system injection contract. Docs now state that --config defaults to live-matching user defaults.\n\nLLM: GPT-5 | high | Harness: Codex",
"is_bot": false,
"headline": "fix(#1240): default config backtests to user defaults (#1244)",
"author_name": "Rich Kuo",
"author_login": "richkuo",
"committed_at": "2026-07-06T01:53:22Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "1aadf4fc3a974185f6c8bb337200218401c00ede",
"body": "…rategies; run shared_scripts tests in CI (#1249)\n\nAudit of strategy signal tests and the out-of-testpaths shared_scripts\ntests (issue #1237, umbrella #1226):\n\n- Add test_registry_core_signals.py: 29 tests asserting actual signal\n values (buy/sell on constructed scenarios, exact cross-bar indices,\n\n[…]\nsert concrete signal values;\nclose-evaluator tests already pin atr_source/EntryATR requirements and\nthe #1124 bare-covers-subs regime family rule.\n\nCloses #1237\n\nLLM: Fable 5 | medium | Harness: agent",
"is_bot": false,
"headline": "test(#1237): concrete signal-value tests for 13 uncovered registry st…",
"author_name": "Rich Kuo",
"author_login": "richkuo",
"committed_at": "2026-07-06T01:47:58Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "c7e42205e5caf06202c92221cc3cd79b38b7c846",
"body": "…fects (#1238)\n\n* fix(#1228): backtest audit — close 5 simulation-correctness/parity defects with regressions\n\nEnd-to-end Fable 5 audit of the backtest system (look-ahead, live parity,\nfee/metric fidelity, M-series statistics, registry conformance). Full report:\ndocs/research/1228-backtest-audit.md.\n[…]\nosite stamp)\nplus the tier-count rule, proven red with the validation call disabled; test\nfixtures upgraded to live-valid two-tier ladders.\n\n---\nUpdated with LLM: Fable 5 | high | Harness: Claude Code",
"is_bot": false,
"headline": "fix(#1228): backtest audit — close 5 simulation-correctness/parity de…",
"author_name": "Rich Kuo",
"author_login": "richkuo",
"committed_at": "2026-07-06T01:12:43Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "228c267f895224470f71a45326a94fb6689eda06",
"body": "…ate-self-v2 — negative (#1239)\n\nRe-ran both merged bake-off harnesses unchanged under the #1211 gate semantics\n(1080 BTC; 1095 BTC + ETH, full 90-candidate family per invocation). No candidate\nsurvives ship + family-corrected significance + non-degeneracy on either asset;\n#1074 blocker 2 is now mea\n[…]\n below the incumbent-derived active-label floor); closest misses\nrecorded per arm. Evidence doc + full JSON artifacts under docs/research/.\n\n---\nCreated with LLM: Fable 5 | high | Harness: Claude Code",
"is_bot": false,
"headline": "docs(#1218): record 1080/1095 vol-regime bake-off re-run under candid…",
"author_name": "Rich Kuo",
"author_login": "richkuo",
"committed_at": "2026-07-06T01:11:35Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "d5840bde3104af316e61e2774a17f456fe6f4e93",
"body": "…n comment (#1232)\n\nThe least-privilege split (#1178 port) gave the review job pull-requests:read\non the assumption that issues:write authorizes PR comments through the shared\nissues-comments endpoint. It doesn't: GitHub authorizes\nPOST /issues/{n}/comments by the target's type, so a comment on a pu\n[…]\nis PUBLIC\nrepo also serves external fork-PR reviews) is preserved.\n\n---\nCreated with LLM: Opus 4.8 | high | Harness: Claude Code\nClaude-Session: https://claude.ai/code/session_01JxNLCdbEX1wtrnEuPEordZ",
"is_bot": false,
"headline": "fix(ci): grant review job pull-requests:write so @claude PR review ca…",
"author_name": "Rich Kuo",
"author_login": "richkuo",
"committed_at": "2026-07-05T21:04:18Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "e7d46601e46e0b89109df867844d10c7aa90b6a1",
"body": "…thor fix scope) (#1227)\n\n* ci(claude): harden @claude auth boundary — author gate + trusted-PR-author fix scope\n\nThis repo is PUBLIC and the @claude workflow had NO author gate: any GitHub\nuser could comment \"@claude do X\" on an issue/PR and reach the write-capable\nimplement path. issue_comment / i\n[…]\ngh issue create, and edit tools. Routing tests extended (70 pass).\n\n---\nCreated with LLM: Opus 4.8 | low | Harness: Claude Code\n\nClaude-Session: https://claude.ai/code/session_01ApCRz2EUrPCHjcnsrhjwR9",
"is_bot": false,
"headline": "ci(claude): harden @claude auth boundary (author gate + trusted-PR-au…",
"author_name": "Rich Kuo",
"author_login": "richkuo",
"committed_at": "2026-07-05T07:49:23Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "ce95c1935f298f194e8bfeb600b52f6fa7d5cbca",
"body": "…ersal alerts (#1225)\n\n* feat(#1224): per-window regime transition history, detection, and reversal alerts\n\nPersist every cycle's per-window regime labels (full bundle key + window)\ninto SQLite, diff against the last stored label to detect transitions\nwithin one cycle of the closed-bar flip, and DM \n[…]\nrrectly rejecting.\n\nVerified validateHotReloadStateCompatible has no independent regime\nequality/Transitions gate, so it needed no change.\n\n---\nUpdated with LLM: Sonnet 5 | high | Harness: Claude Code",
"is_bot": false,
"headline": "feat(#1224): per-window regime transition history, detection, and rev…",
"author_name": "Rich Kuo",
"author_login": "richkuo",
"committed_at": "2026-07-03T22:57:35Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "752386cb9cfc1dc17d0c1c90a4bcb70b4eda1f8f",
"body": "…llback fires (#1223)\n\ntest_load_cell_on_cached_data_if_available was meant to skip when no local\nOHLCV cache exists, but its skip check only inspected the result of\nload_cell(), which calls data_fetcher.load_cached_data() -- a function that\nsilently falls back to a live exchange fetch when the cach\n[…]\ntch fallback can fire.\n\nVerified against a populated local cache (assertions still pass) and the\nfull backtest/tests/ suite (1070 passed).\n\n---\nCreated with LLM: Sonnet 5 | high | Harness: Claude Code",
"is_bot": false,
"headline": "fix: skip #1211 incumbent-baseline smoke test before any live-data fa…",
"author_name": "Rich Kuo",
"author_login": "richkuo",
"committed_at": "2026-07-03T09:29:20Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "4b1d451492ac5a303ad8ad26a82dbc7633d002fc",
"body": "Updates CLAUDE.md, SKILL.md, README.md, and docs/ARCHITECTURE.md to\nreflect recent feature additions (#1205, #1206), bug fixes, and\ndocumentation improvements across backtesting and strategy subsystems.\n\n---\nUpdated with LLM: Haiku 4.5 | high | Harness: commit-push-pr",
"is_bot": false,
"headline": "docs: sync docs reflecting recent commits and PRs",
"author_name": "Richard",
"author_login": "richkuo",
"committed_at": "2026-07-03T05:14:24Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "ffd5a40ffba10dc2d124ad8feacbb871d086438a",
"body": "…M vol-regime models (#1222)\n\nfit_gmm/fit_hmm could store a component that won no hard argmax/Viterbi assignment (n=0). The causal decoder forward_filter_labels ignores the hard n and decodes purely on emission geometry, so a truly-dead component collapsed toward the standardized origin at var_floor\n[…]\ne left untouched. Parking (not decoder-side exclusion) keeps the shared decoder and the label-anchored path byte-identical.\n\nCloses #1219\n\n---\nCreated with LLM: Opus 4.8 | xhigh | Harness: Claude Code",
"is_bot": false,
"headline": "fix(#1219): neutralize truly-dead n=0 decoder states in fitted GMM/HM…",
"author_name": "Rich Kuo",
"author_login": "richkuo",
"committed_at": "2026-07-03T04:46:35Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "7c9991cf8acd3b15810415a892d0def3c192c0bf",
"body": "…leteness test (#1221)\n\n* docs(#1220): enumerate candidate-study drivers + harden registry test\n\nAddresses the two PR #1217 review findings:\n- Coverage honesty: the intro no longer claims to enumerate every study-local\n script, and the candidate-studies section describes backtest/candidates/*/ as\n \n[…]\nle\nresolver — every first-cell token must resolve to a real file under backtest/\nor a real candidates/<study>/ directory, no shape exempt.\n\nUpdated with LLM: Opus 4.8 | high | Harness: PR review fixes",
"is_bot": false,
"headline": "docs(#1220): enumerate candidate-study drivers + harden registry comp…",
"author_name": "Rich Kuo",
"author_login": "richkuo",
"committed_at": "2026-07-03T04:07:14Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "af5756050655b1e7cd052a8670eea4685d4a3482",
"body": "…1217)\n\n* docs(#1216): backtesting & research harness registry + upkeep rule\n\nAdds docs/backtesting-registry.md — a single map of every backtest/ tool\n(core simulators, M1-M6 validators, the #1065-#1097 regime-promotion pipeline,\nthe #1210 auto-suggester, research one-shots, candidate studies). One \n[…]\non alone:\n- every non-test .py under backtest/ and backtest/research/ has a row\n- no row references a nonexistent file (inverse invariant)\n\nUpdated with LLM: Opus 4.8 | high | Harness: PR review fixes",
"is_bot": false,
"headline": "docs(#1216): backtesting & research harness registry + upkeep rule (#…",
"author_name": "Rich Kuo",
"author_login": "richkuo",
"committed_at": "2026-07-03T03:53:37Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "444a625088ee91adb25dd5ba05c63a8671c59d22",
"body": "…contained via incumbent_close (#1213)\n\n* feat(#1210): full-options default spec + annotated template; M6 self-contained via incumbent_close\n\nFollow-up to #1212. Two deliverables plus the small enabler they needed.\n\n- Annotated template `backtest/candidates/suggest.template.jsonc` documents every\n \n[…]\neader now describes them separately and accurately. 52 tests pass.\n\n---\nUpdated with LLM: Opus 4.8 | high | Harness: Claude Code\nClaude-Session: https://claude.ai/code/session_01QS9j5Ure4nDCdMqjiPDTpB",
"is_bot": false,
"headline": "feat(#1210): full-options default spec + annotated template; M6 self-…",
"author_name": "Rich Kuo",
"author_login": "richkuo",
"committed_at": "2026-07-03T01:09:55Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "3f30029709fa70e23bf86b96a6bf3f1d87f28e34",
"body": "…-v2) (#1215)\n\nThe regime-promotion gate was unreachable: gate_verdict hard-gated `ship`\non `incumbent_trustworthy` (the hand-rule incumbent's OWN single-window\nforward-vol separation significant), which the #1177 re-measurement found\nunmet, so the #1095 bake-off abstained every candidate regardless\n[…]\nGNIFICANCE_ALPHA, lowering n_perm, dropping either check.\n\nOffline research layer only — the live daemon never calls gate_verdict.\n\nCloses #1211\n\nCreated with LLM: Opus 4.8 | high | Harness: fableplan",
"is_bot": false,
"headline": "fix(#1211): restore a reachable regime-promotion gate (candidate-self…",
"author_name": "Rich Kuo",
"author_login": "richkuo",
"committed_at": "2026-07-03T00:25:45Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "9d5902f301ec0f0be9c8aa1ab8648265792f9b3b",
"body": "…k gate-survivors, never auto-apply (#1212)\n\n* feat(#1210): generalized M1-M6 auto-suggester — sweep candidates, rank gate-survivors, never auto-apply\n\nExtract the per-study driver skeleton (regime_1152_exit_retune.py's\n_run_one/_window_rollup/_verdict) into a reusable cross-harness module,\nbacktest\n[…]\n)\nand a distinct-params-families-stay-independent test. 42 passed.\n\n---\nUpdated with LLM: Opus 4.8 | high | Harness: Claude Code\nClaude-Session: https://claude.ai/code/session_01QS9j5Ure4nDCdMqjiPDTpB",
"is_bot": false,
"headline": "feat(#1210): generalized M1–M6 auto-suggester — sweep candidates, ran…",
"author_name": "Rich Kuo",
"author_login": "richkuo",
"committed_at": "2026-07-02T23:34:47Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "dc9d0a7ac092966b1820ca639235b863a368730d",
"body": "…open) (#1208)\n\n* feat(#1137): optional LLM multi-agent entry analysis (advisory, post-open)\n\nPer-strategy `llm_entry_analysis` block (default off): after a FRESH\nposition-open is confirmed, an async pipeline (shared_scripts/llm_review.py:\nanalysts from the open cycle's indicators + adapter OHLCV/fu\n[…]\nNotifyDM/NotifyChannel) and no-double-post behavior are unchanged.\n\n---\nUpdated with LLM: Sonnet 5 | high | Harness: Claude Code\nClaude-Session: https://claude.ai/code/session_01MicdgoxpLWgEgvXpuEVZ8k",
"is_bot": false,
"headline": "feat(#1137): optional LLM multi-agent entry analysis (advisory, post-…",
"author_name": "Rich Kuo",
"author_login": "richkuo",
"committed_at": "2026-07-02T22:27:40Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "040dfad453b695aa5b413abef56a7d2fd55eac77",
"body": "…s stand (#1209)\n\nRuns the validation deferred from #1120/#1149: per-substate M6 entry-locked\nA/Bs (exit_policy_ab.py, #1066) of the three composite ranging ratchet\nladders and a substate split of the collapsed B2 ranging TP group, across\nthe six audit datasets, is/oos windows, and two entry styles\n\n[…]\n Stale\n\"starting priors\" comments on both ladder tables now cite the #1152 evidence.\n\nLLM: Fable 5 | high | Harness: Claude Code\nClaude-Session: https://claude.ai/code/session_01NXXGT4z7CZPVQScpnJFsZv",
"is_bot": false,
"headline": "research(#1152): M6 ranging ratchet/B2-TP geometry retune — incumbent…",
"author_name": "Rich Kuo",
"author_login": "richkuo",
"committed_at": "2026-07-02T21:57:47Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "2026c141f9c5a60ded080a45aa186a3200241501",
"body": "… strategy (#1207)\n\nNew offline research strategy (arXiv 2502.05878's transferable, LLM-free\ncore): encode each bar into a scale-free state vector (return efficiency,\nATR-normalized momentum, ATR%, vol regime, trend), retrieve the K most\nsimilar strictly-prior states whose forward return is realized\n[…]\n FAIL on every window (protocol OOS FAIL, held-out 0/3);\n negative baseline recorded, strategy stays backtest-only research.\n\nCloses #1138\n\n---\nCreated with LLM: Fable 5 | high | Harness: Claude Code",
"is_bot": false,
"headline": "feat(#1138): analog_retrieval — backtest-only k-NN analog forecasting…",
"author_name": "Rich Kuo",
"author_login": "richkuo",
"committed_at": "2026-07-02T21:45:49Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "14dfbbd6bf8f2d2daf73f7f26b639ca4b7ca1aa1",
"body": "* feat(#1205): interactive /apply-regime-gate Discord command\n\nAdd an owner-DM-only mutating slash command that wires a validated regime\nentry-gate onto an operator-chosen live strategy interactively, instead of\nrequiring a hand-edit of the out-of-tree config JSON.\n\n- New command registered in opsCo\n[…]\nLLM: Claude Sonnet 5 | medium | Harness: Claude Code\n\n---------\n\nCo-authored-by: claude[bot] <41898282+claude[bot]@users.noreply.github.com>\nCo-authored-by: Rich Kuo <richkuo@users.noreply.github.com>",
"is_bot": false,
"headline": "feat(#1205): interactive /apply-regime-gate Discord command (#1206)",
"author_name": "Rich Kuo",
"author_login": "richkuo",
"committed_at": "2026-07-02T20:48:04Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "5f9c74b6d831e217bc591f8f8cf7301daef90667",
"body": "…e evaluators (#1204)\n\n* feat(#1203): /closing-strategies — Discord catalog of registered close evaluators\n\nAdds a read-only Discord slash command that lists every registered close\nevaluator (name, description, platforms, config params) so an operator can\npick and configure a close_strategy without \n[…]\nly.\nRegression test covers: both keys configured (both marked), tp_tiers-only (no\nspurious SL line), and no user entry (no override note).\n\n---\nUpdated with LLM: Opus 4.8 | high | Harness: Claude Code",
"is_bot": false,
"headline": "feat(#1203): /closing-strategies — Discord catalog of registered clos…",
"author_name": "Rich Kuo",
"author_login": "richkuo",
"committed_at": "2026-07-02T13:33:32Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "b4ae52d87edc8c83f2b4c540dd3c9718390674f1",
"body": "…e comp_up_clean_p21 breakout gate (#1202)\n\n* feat(#1197): live-label fidelity evidence + config-shape tests for the comp_up_clean_p21 breakout gate\n\nWires the #1165 comp_up_clean_p21 regime gate toward live deployment. The\nlive config is out-of-tree (#1056), so the repo side ships everything the\nop\n[…]\n-specific, does not transfer. Point at the result\ninstead of naming it as open work.\n\nLLM: Fable 5 | high | Harness: Claude Code\nClaude-Session: https://claude.ai/code/session_015HyPijTTu3JwgTd5je81P9",
"is_bot": false,
"headline": "feat(#1197): live-label fidelity evidence + config-shape tests for th…",
"author_name": "Rich Kuo",
"author_login": "richkuo",
"committed_at": "2026-07-02T12:49:55Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "3a9094d5766a7e21ce3e85e75226b9ac01668f09",
"body": "… entry — negative (#1201)\n\nRe-runs the #1165 breakout M4 regime-gate drivers against squeeze_momentum\n(#983's named next candidate, same \"DD is regime exposure, not exit quality\"\nverdict, -58.5% worst DD). New self-contained study dir\nbacktest/candidates/squeeze_momentum_1198/ reusing the four stra\n[…]\ntests/test_squeeze_momentum_1198_drivers.py (8 tests).\nVerified: py_compile clean, new tests pass, full backtest/tests suite 959\npassed.\n\nCloses #1198\n\n---\nLLM: Opus 4.8 | xhigh | Harness: Claude Code",
"is_bot": false,
"headline": "research(#1198): squeeze_momentum M4 regime-gate re-run on the frozen…",
"author_name": "Rich Kuo",
"author_login": "richkuo",
"committed_at": "2026-07-02T12:32:52Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "05a284cd870222a22ef8be9fb2ca4565bb1cd1bb",
"body": "…d VWAP (#1200)\n\n* feat(#1196): avwap_stop close evaluator — exit on loss of the anchored VWAP\n\nNew close evaluator `avwap_stop` (shared_strategies/close/avwap_stop.py):\nfull close when the mark breaches the anchored VWAP by buffer_atr_mult ATR\non the losing side (long below / short above the line).\n[…]\nrtions\neach see it. Tests cover: fires once for absent column and all-NaN column;\ndoes not fire when avwap is present or when avwap_stop is not configured.\n\nLLM: Opus 4.8 | high | Harness: Claude Code",
"is_bot": false,
"headline": "feat(#1196): avwap_stop close evaluator — exit on loss of the anchore…",
"author_name": "Rich Kuo",
"author_login": "richkuo",
"committed_at": "2026-07-02T12:32:02Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "508b96178d1f4a2ebbd03ba810476e09761d4659",
"body": "…r B) (#1199)\n\nAdd opt-in gate params to anchored_vwap so S/R flips only fire when\naligned with broader momentum/trend, following the #982 chart_pattern\nHTF-gate shape (default-off knobs layered after the base trigger, no\ncheck-script changes):\n\n- gate_rsi_period / gate_rsi_level (default 0 / 50.0):\n[…]\nmputed\nsignal-bar RSI); warmup fail-open both gates; gated signal prefix-\nindependent of future bars; inline-RSI extremes/warmup unit test.\n\n---\nCreated with LLM: Fable 5 | high | Harness: Claude Code",
"is_bot": false,
"headline": "feat(#1017): default-off RSI/EMA momentum gate on anchored_vwap (ride…",
"author_name": "Rich Kuo",
"author_login": "richkuo",
"committed_at": "2026-07-02T11:44:24Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "f9ece125d5d862618358544285692b6efa927baf",
"body": "…ning report (#1195)\n\n* feat(#1147): per-trade trade-quality diagnostics store + on-demand tuning report\n\nCapture: every full close (all recordClosedPosition paths) eagerly inserts\none trade_diagnostics row (identity/outcome) under the caller's lock via a\ntradeRecorder-style hook; a background worke\n[…]\n> 1h; unknown token ->\n1h for both math and fetch; explicit 15m -> fetch unchanged.\n\nLLM: Opus 4.8 | high | Harness: Claude Code\nClaude-Session: https://claude.ai/code/session_01BZgv2k7JEXPZ2521FoUnLU",
"is_bot": false,
"headline": "feat(#1147): per-trade trade-quality diagnostics store + on-demand tu…",
"author_name": "Rich Kuo",
"author_login": "richkuo",
"committed_at": "2026-07-02T11:24:44Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "e3b28d5204fbb5c53475bbeaba57c8d2c7fcf2ec",
"body": "… trending_up_clean p21 clears the bar (#1194)\n\nM4 application to breakout (futures) per the #984 verdict (DD is regime\nexposure, not exit quality). Entry, params, and close stack frozen; the sweep\nis over when the entry may fire (Arm A allowed_regimes gates over ADX +\ncomposite classifiers, Arm B #\n[…]\nfive\ncandidate JSONs, committed artifacts, README. No live config change; no\nshared_strategies/ edits; futures --list-json byte-identical.\n\nCloses #1165\n\n---\nLLM: Fable 5 | high | Harness: Claude Code",
"is_bot": false,
"headline": "research(#1165): breakout regime-gate M4 — positive result; composite…",
"author_name": "Rich Kuo",
"author_login": "richkuo",
"committed_at": "2026-07-02T11:15:25Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "3daff6b9887df1fcfd87ca471df634d72fd03436",
"body": "The DM asking the owner to reply 'reset' after the portfolio-wide kill\nswitch fires was a bare \"Kill switch active. Reply 'reset' to resume\ntrading.\" with no drawdown reason, no account identity, no trading\ninstance, and no explanation of what 'reset' does or doesn't do.\n\nformatKillSwitchResetPrompt\n[…]\ne.\n\nWired into the existing DM call site in scheduler/main.go, which already\nhad the plan, hlAddr, and config path in scope.\n\nCloses #1190\n\n---\nCreated with LLM: Sonnet 5 | high | Harness: Claude Code",
"is_bot": false,
"headline": "fix(#1190): give the kill-switch reset DM real context (#1192)",
"author_name": "Rich Kuo",
"author_login": "richkuo",
"committed_at": "2026-07-02T11:05:38Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "f10de2a6a05b064d350784249bd642f354e06972",
"body": "… not the shared default (#1193)\n\nPer-strategy status surfaces (Phase 6 status log, /status API, dashboard)\ndisplayed stratState.Regime, which is always the shared-default window's\nlabel (primaryRegimeWindowKey — \"medium\" when configured). A strategy\noverriding regime_gate_window to a different wind\n[…]\n\noperator-facing surfaces (main.go status log, server.go StratStatus,\nui_server.go UIStrategyOverview) without touching stratState.Regime.\n\n---\nCreated with LLM: Sonnet 5 | high | Harness: Claude Code",
"is_bot": false,
"headline": "fix(#1189): show a strategy's gate-window regime in status/dashboard,…",
"author_name": "Rich Kuo",
"author_login": "richkuo",
"committed_at": "2026-07-02T11:05:36Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "b55cf3532060e9a0a72012a74194e8687c1d255e",
"body": "Updated CLAUDE.md, SKILL.md, README.md, and docs/ARCHITECTURE.md to\nreflect recent commits and PRs.\n\n---\nUpdated with LLM: Haiku 4.5 | high | Harness: Claude Code",
"is_bot": false,
"headline": "docs: sync documentation to reflect recent changes",
"author_name": "Richard",
"author_login": "richkuo",
"committed_at": "2026-07-02T09:31:23Z",
"body_truncated": false,
"is_coding_agent": false
}
],
"releases_count": 100,
"commits_last_year": 1473,
"latest_release_at": "2026-07-20T09:05:42Z",
"latest_release_tag": "v0.94.0",
"releases_from_tags": false,
"days_since_last_push": 0,
"active_weeks_last_year": 24,
"days_since_latest_release": 1,
"mean_days_between_releases": 2.7
},
"community": {
"has_readme": true,
"has_license": true,
"has_description": true,
"has_contributing": false,
"health_percentage": 42,
"has_issue_template": false,
"has_code_of_conduct": false,
"has_pull_request_template": false
},
"ecosystem": {
"packages": []
},
"popularity": {
"forks": 93,
"stars": 338,
"watchers": 4,
"fork_history": {
"days": [
{
"date": "2026-02-21",
"count": 3
},
{
"date": "2026-02-22",
"count": 5
},
{
"date": "2026-02-23",
"count": 1
},
{
"date": "2026-02-24",
"count": 2
},
{
"date": "2026-02-28",
"count": 2
},
{
"date": "2026-03-06",
"count": 3
},
{
"date": "2026-03-14",
"count": 1
},
{
"date": "2026-03-30",
"count": 1
},
{
"date": "2026-04-03",
"count": 1
},
{
"date": "2026-04-05",
"count": 1
},
{
"date": "2026-04-06",
"count": 1
},
{
"date": "2026-04-07",
"count": 1
},
{
"date": "2026-04-08",
"count": 4
},
{
"date": "2026-04-09",
"count": 4
},
{
"date": "2026-04-10",
"count": 1
},
{
"date": "2026-04-11",
"count": 2
},
{
"date": "2026-04-14",
"count": 3
},
{
"date": "2026-04-20",
"count": 2
},
{
"date": "2026-04-24",
"count": 1
},
{
"date": "2026-04-25",
"count": 1
},
{
"date": "2026-04-26",
"count": 5
},
{
"date": "2026-04-27",
"count": 2
},
{
"date": "2026-04-28",
"count": 5
},
{
"date": "2026-04-29",
"count": 1
},
{
"date": "2026-04-30",
"count": 1
},
{
"date": "2026-05-02",
"count": 2
},
{
"date": "2026-05-03",
"count": 1
},
{
"date": "2026-05-04",
"count": 1
},
{
"date": "2026-05-05",
"count": 2
},
{
"date": "2026-05-07",
"count": 1
},
{
"date": "2026-05-08",
"count": 1
},
{
"date": "2026-05-09",
"count": 1
},
{
"date": "2026-05-11",
"count": 1
},
{
"date": "2026-05-13",
"count": 4
},
{
"date": "2026-05-14",
"count": 7
},
{
"date": "2026-05-15",
"count": 1
},
{
"date": "2026-05-16",
"count": 1
},
{
"date": "2026-05-17",
"count": 1
},
{
"date": "2026-05-18",
"count": 1
},
{
"date": "2026-05-19",
"count": 1
},
{
"date": "2026-05-24",
"count": 2
},
{
"date": "2026-05-27",
"count": 1
},
{
"date": "2026-05-28",
"count": 1
},
{
"date": "2026-05-30",
"count": 1
},
{
"date": "2026-05-31",
"count": 1
},
{
"date": "2026-06-06",
"count": 1
},
{
"date": "2026-06-10",
"count": 1
},
{
"date": "2026-06-11",
"count": 2
},
{
"date": "2026-06-26",
"count": 1
},
{
"date": "2026-07-05",
"count": 1
},
{
"date": "2026-07-09",
"count": 1
}
],
"complete": true,
"collected": 93,
"total_forks": 93
},
"star_history": {
"days": [
{
"date": "2026-02-20",
"count": 6
},
{
"date": "2026-02-21",
"count": 14
},
{
"date": "2026-02-22",
"count": 5
},
{
"date": "2026-02-23",
"count": 4
},
{
"date": "2026-02-24",
"count": 3
},
{
"date": "2026-02-25",
"count": 3
},
{
"date": "2026-02-26",
"count": 2
},
{
"date": "2026-02-28",
"count": 1
},
{
"date": "2026-03-01",
"count": 1
},
{
"date": "2026-03-04",
"count": 1
},
{
"date": "2026-03-05",
"count": 1
},
{
"date": "2026-03-06",
"count": 9
},
{
"date": "2026-03-07",
"count": 1
},
{
"date": "2026-03-08",
"count": 1
},
{
"date": "2026-03-09",
"count": 2
},
{
"date": "2026-03-10",
"count": 1
},
{
"date": "2026-03-12",
"count": 1
},
{
"date": "2026-03-16",
"count": 1
},
{
"date": "2026-03-17",
"count": 1
},
{
"date": "2026-03-19",
"count": 1
},
{
"date": "2026-03-21",
"count": 1
},
{
"date": "2026-03-22",
"count": 1
},
{
"date": "2026-03-24",
"count": 2
},
{
"date": "2026-03-29",
"count": 1
},
{
"date": "2026-04-01",
"count": 1
},
{
"date": "2026-04-03",
"count": 3
},
{
"date": "2026-04-04",
"count": 1
},
{
"date": "2026-04-06",
"count": 2
},
{
"date": "2026-04-07",
"count": 5
},
{
"date": "2026-04-08",
"count": 13
},
{
"date": "2026-04-09",
"count": 8
},
{
"date": "2026-04-10",
"count": 12
},
{
"date": "2026-04-11",
"count": 7
},
{
"date": "2026-04-12",
"count": 4
},
{
"date": "2026-04-13",
"count": 5
},
{
"date": "2026-04-14",
"count": 3
},
{
"date": "2026-04-16",
"count": 4
},
{
"date": "2026-04-17",
"count": 4
},
{
"date": "2026-04-19",
"count": 2
},
{
"date": "2026-04-20",
"count": 3
},
{
"date": "2026-04-21",
"count": 1
},
{
"date": "2026-04-23",
"count": 2
},
{
"date": "2026-04-25",
"count": 3
},
{
"date": "2026-04-26",
"count": 10
},
{
"date": "2026-04-27",
"count": 12
},
{
"date": "2026-04-28",
"count": 8
},
{
"date": "2026-04-29",
"count": 6
},
{
"date": "2026-04-30",
"count": 13
},
{
"date": "2026-05-01",
"count": 4
},
{
"date": "2026-05-02",
"count": 1
},
{
"date": "2026-05-04",
"count": 5
},
{
"date": "2026-05-05",
"count": 2
},
{
"date": "2026-05-07",
"count": 3
},
{
"date": "2026-05-08",
"count": 1
},
{
"date": "2026-05-10",
"count": 1
},
{
"date": "2026-05-11",
"count": 2
},
{
"date": "2026-05-12",
"count": 3
},
{
"date": "2026-05-13",
"count": 13
},
{
"date": "2026-05-14",
"count": 29
},
{
"date": "2026-05-15",
"count": 19
},
{
"date": "2026-05-16",
"count": 5
},
{
"date": "2026-05-17",
"count": 2
},
{
"date": "2026-05-18",
"count": 1
},
{
"date": "2026-05-19",
"count": 3
},
{
"date": "2026-05-20",
"count": 2
},
{
"date": "2026-05-22",
"count": 2
},
{
"date": "2026-05-23",
"count": 1
},
{
"date": "2026-05-24",
"count": 1
},
{
"date": "2026-05-25",
"count": 1
},
{
"date": "2026-05-26",
"count": 1
},
{
"date": "2026-05-29",
"count": 3
},
{
"date": "2026-05-31",
"count": 1
},
{
"date": "2026-06-02",
"count": 3
},
{
"date": "2026-06-03",
"count": 1
},
{
"date": "2026-06-04",
"count": 1
},
{
"date": "2026-06-05",
"count": 3
},
{
"date": "2026-06-07",
"count": 3
},
{
"date": "2026-06-10",
"count": 1
},
{
"date": "2026-06-11",
"count": 1
},
{
"date": "2026-06-13",
"count": 2
},
{
"date": "2026-06-14",
"count": 2
},
{
"date": "2026-06-17",
"count": 1
},
{
"date": "2026-06-19",
"count": 1
},
{
"date": "2026-06-23",
"count": 1
},
{
"date": "2026-06-29",
"count": 1
},
{
"date": "2026-07-01",
"count": 1
},
{
"date": "2026-07-04",
"count": 1
},
{
"date": "2026-07-05",
"count": 2
},
{
"date": "2026-07-07",
"count": 4
},
{
"date": "2026-07-08",
"count": 3
},
{
"date": "2026-07-09",
"count": 1
},
{
"date": "2026-07-10",
"count": 1
},
{
"date": "2026-07-17",
"count": 1
},
{
"date": "2026-07-19",
"count": 1
}
],
"complete": true,
"collected": 338,
"total_stars": 338
},
"open_issues_and_prs": 24
},
"ai_readiness": {
"has_nix": false,
"example_dirs": [],
"has_llms_txt": false,
"has_dockerfile": false,
"has_mcp_signal": false,
"bootstrap_files": [],
"api_schema_files": [],
"has_devcontainer": false,
"typecheck_configs": [],
"toolchain_manifests": [
"scheduler/go.mod"
],
"largest_source_bytes": 221864,
"source_files_sampled": 598,
"oversized_source_files": 28,
"agent_instruction_files": [
"AGENTS.md",
"CLAUDE.md"
],
"agent_instruction_max_bytes": 38648
},
"dependencies": {
"manifests": [
"pyproject.toml",
"scheduler/go.mod"
],
"advisories": {
"error": null,
"scope": null,
"source": null,
"findings": [],
"collected": false,
"truncated": false,
"by_severity": {},
"advisory_count": 0,
"affected_count": 0,
"assessed_count": 0,
"assessed_package": null,
"unassessed_count": 0,
"direct_affected_count": 0
},
"ecosystems": [
"go",
"pypi"
],
"dependencies": [
{
"name": "ccxt",
"manifest": "pyproject.toml",
"ecosystem": "pypi",
"version_constraint": ">=4.5.37"
},
{
"name": "hyperliquid-python-sdk",
"manifest": "pyproject.toml",
"ecosystem": "pypi",
"version_constraint": ">=0.4.0"
},
{
"name": "numpy",
"manifest": "pyproject.toml",
"ecosystem": "pypi",
"version_constraint": ">=2.4.2"
},
{
"name": "pandas",
"manifest": "pyproject.toml",
"ecosystem": "pypi",
"version_constraint": ">=3.0.0"
},
{
"name": "robin-stocks",
"manifest": "pyproject.toml",
"ecosystem": "pypi",
"version_constraint": ">=3.0.0"
},
{
"name": "pyotp",
"manifest": "pyproject.toml",
"ecosystem": "pypi",
"version_constraint": ">=2.9.0"
},
{
"name": "yfinance",
"manifest": "pyproject.toml",
"ecosystem": "pypi",
"version_constraint": ">=0.2.0"
},
{
"name": "github.com/bwmarrin/discordgo",
"manifest": "scheduler/go.mod",
"ecosystem": "go",
"version_constraint": "v0.29.0"
},
{
"name": "modernc.org/sqlite",
"manifest": "scheduler/go.mod",
"ecosystem": "go",
"version_constraint": "v1.51.0"
}
],
"all_dependencies": {
"error": "GitHub dependency-graph SBOM unavailable (404); the dependency graph may be disabled for this repository",
"source": null,
"packages": [],
"collected": false,
"truncated": false,
"total_count": null,
"direct_count": null,
"indirect_count": null
}
},
"maintainership": {
"issues": {
"open_prs": 21,
"merged_prs": 695,
"open_issues": 3,
"closed_ratio": 0.995,
"closed_issues": 644,
"closed_unmerged_prs": 37
},
"bus_factor": 1,
"bot_contributors": 1,
"top_contributors": [
{
"type": "User",
"login": "richkuo",
"commits": 1270,
"avatar_url": "https://avatars.githubusercontent.com/u/880112?v=4"
}
],
"contributors_sampled": 1,
"top_contributor_share": 1
},
"quality_signals": {
"has_ci": true,
"has_tests": true,
"ci_workflows": [
"ci.yml",
"claude.yml",
"discord-release.yml"
],
"has_docs_dir": true,
"linter_configs": [],
"has_editorconfig": false,
"has_linter_config": false,
"has_precommit_config": false
},
"security_signals": {
"lockfiles": [
"go.sum",
"uv.lock"
],
"scorecard": {
"checks": [
{
"name": "Binary-Artifacts",
"score": 10,
"reason": "no binaries found in the repo",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#binary-artifacts"
},
{
"name": "Branch-Protection",
"score": 0,
"reason": "branch protection not enabled on development/release branches",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#branch-protection"
},
{
"name": "CI-Tests",
"score": 10,
"reason": "27 out of 27 merged PRs checked by a CI test -- score normalized to 10",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#ci-tests"
},
{
"name": "CII-Best-Practices",
"score": 0,
"reason": "no effort to earn an OpenSSF best practices badge detected",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#cii-best-practices"
},
{
"name": "Code-Review",
"score": 0,
"reason": "Found 0/30 approved changesets -- score normalized to 0",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#code-review"
},
{
"name": "Contributors",
"score": 0,
"reason": "project has 0 contributing companies or organizations -- score normalized to 0",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#contributors"
},
{
"name": "Dangerous-Workflow",
"score": 10,
"reason": "no dangerous workflow patterns detected",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#dangerous-workflow"
},
{
"name": "Dependency-Update-Tool",
"score": 0,
"reason": "no update tool detected",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#dependency-update-tool"
},
{
"name": "Fuzzing",
"score": 0,
"reason": "project is not fuzzed",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#fuzzing"
},
{
"name": "License",
"score": 10,
"reason": "license file detected",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#license"
},
{
"name": "Maintained",
"score": 10,
"reason": "30 commit(s) and 27 issue activity found in the last 90 days -- score normalized to 10",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#maintained"
},
{
"name": "Packaging",
"score": null,
"reason": "packaging workflow not detected",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#packaging"
},
{
"name": "Pinned-Dependencies",
"score": 0,
"reason": "dependency not pinned by hash detected -- score normalized to 0",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#pinned-dependencies"
},
{
"name": "SAST",
"score": 0,
"reason": "SAST tool is not run on all commits -- score normalized to 0",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#sast"
},
{
"name": "Security-Policy",
"score": 0,
"reason": "security policy file not detected",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#security-policy"
},
{
"name": "Signed-Releases",
"score": null,
"reason": "no releases found",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#signed-releases"
},
{
"name": "Token-Permissions",
"score": 0,
"reason": "detected GitHub workflow tokens with excessive permissions",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#token-permissions"
},
{
"name": "Vulnerabilities",
"score": 0,
"reason": "28 existing vulnerabilities detected",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#vulnerabilities"
}
],
"commit": "a6f2eb5ea03c9dcc10181c4105186c5841781a36",
"ran_at": "2026-07-21T19:05:35Z",
"aggregate_score": 3.2,
"scorecard_version": "v5.5.0"
},
"has_codeql_workflow": false,
"has_security_policy": false,
"has_dependabot_config": false
}
},
"config": {
"disabled_metrics": [],
"disabled_categories": [],
"disabled_components": {}
},
"source": {
"url": "https://github.com/richkuo/go-trader",
"host": "github.com",
"name": "go-trader",
"owner": "richkuo"
},
"metrics": {
"overall": {
"key": "overall",
"band": "moderate",
"name": "Overall health",
"note": null,
"notes": [],
"value": 60,
"inputs": {
"security": 32,
"vitality": 89,
"community": 55,
"governance": 49,
"engineering": 67
},
"components": []
},
"categories": [
{
"key": "vitality",
"band": "excellent",
"name": "Vitality",
"value": 89,
"weight": 0.22,
"metrics": [
{
"key": "development_activity",
"band": "good",
"name": "Development activity",
"note": null,
"notes": [],
"value": 81,
"inputs": {
"commits_last_year": 1473,
"human_commit_share": 1,
"days_since_last_push": 0,
"active_weeks_last_year": 24
},
"components": [
{
"key": "push_recency",
"name": "Push recency",
"detail": "last push 0 days ago",
"points": 36,
"status": "met",
"details": [
{
"code": "push_recency",
"params": {
"days": 0
}
}
],
"max_points": 36
},
{
"key": "commit_cadence",
"name": "Commit cadence",
"detail": "24/52 weeks with commits",
"points": 16.6,
"status": "partial",
"details": [
{
"code": "commit_cadence_weeks",
"params": {
"weeks": 24
}
}
],
"max_points": 36
},
{
"key": "commit_volume",
"name": "Commit volume",
"detail": "1473 commits in the last year",
"points": 18,
"status": "met",
"details": [
{
"code": "commits_last_year",
"params": {
"count": 1473
}
}
],
"max_points": 18
},
{
"key": "openssf_scorecard_maintained",
"name": "OpenSSF Scorecard: Maintained",
"detail": "30 commit(s) and 27 issue activity found in the last 90 days -- score normalized to 10",
"points": 10,
"status": "met",
"details": [],
"max_points": 10
}
]
},
{
"key": "release_discipline",
"band": "excellent",
"name": "Release discipline",
"note": "Excluded from scoring (no data or not applicable): OpenSSF Scorecard: Signed-Releases. Remaining weights renormalized.",
"notes": [
{
"code": "excluded_no_data",
"params": {
"components": [
"openssf_scorecard_signed_releases"
]
}
},
{
"code": "weights_renormalized",
"params": {}
}
],
"value": 100,
"inputs": {
"releases_count": 100,
"latest_release_tag": "v0.94.0",
"releases_from_tags": false,
"days_since_latest_release": 1,
"mean_days_between_releases": 2.7
},
"components": [
{
"key": "ships_releases",
"name": "Ships releases",
"detail": "100 releases published",
"points": 27,
"status": "met",
"details": [
{
"code": "releases_published",
"params": {
"count": 100
}
}
],
"max_points": 27
},
{
"key": "release_recency",
"name": "Release recency",
"detail": "latest release 1 days ago",
"points": 36,
"status": "met",
"details": [
{
"code": "release_recency",
"params": {
"days": 1
}
}
],
"max_points": 36
},
{
"key": "release_cadence",
"name": "Release cadence",
"detail": "a release every ~2.7 days",
"points": 27,
"status": "met",
"details": [
{
"code": "release_cadence",
"params": {
"gap": 2.7
}
}
],
"max_points": 27
},
{
"key": "openssf_scorecard_signed_releases",
"name": "OpenSSF Scorecard: Signed-Releases",
"detail": "no releases found",
"points": 0,
"status": "excluded",
"details": [
{
"code": "no_data",
"params": {}
}
],
"max_points": 10
}
]
},
{
"key": "abandonment",
"band": "excellent",
"name": "Abandonment",
"note": null,
"notes": [],
"value": 100,
"inputs": {
"cap": null,
"state": "unverified",
"guards": [],
"signals": [],
"red_flag": false,
"multiplier_pct": 100,
"declared_reason": null,
"unverified_reason": "repository_too_young",
"unanswered_open_prs": null,
"unanswered_open_issues": null,
"days_since_last_merged_pr": null,
"days_since_last_human_commit": null,
"days_since_last_human_commit_is_floor": false
},
"components": [
{
"key": "project_is_still_maintained",
"name": "Project is still maintained",
"detail": "maintenance record not established from the collected data",
"points": 100,
"status": "met",
"details": [
{
"code": "abandonment_unverified",
"params": {}
}
],
"max_points": 100
}
]
}
],
"description": "Is the project alive — is code being written and are releases shipping?"
},
{
"key": "community",
"band": "moderate",
"name": "Community & Adoption",
"value": 55,
"weight": 0.18,
"metrics": [
{
"key": "popularity",
"band": "moderate",
"name": "Popularity & adoption",
"note": null,
"notes": [],
"value": 60,
"inputs": {
"forks": 93,
"stars": 338,
"watchers": 4,
"growth_state": "organic",
"growth_factor_pct": 100
},
"components": [
{
"key": "stars",
"name": "Stars",
"detail": "338 stars",
"points": 41,
"status": "partial",
"details": [
{
"code": "stars",
"params": {
"count": 338
}
}
],
"max_points": 60
},
{
"key": "forks",
"name": "Forks",
"detail": "93 forks",
"points": 16.4,
"status": "partial",
"details": [
{
"code": "forks",
"params": {
"count": 93
}
}
],
"max_points": 25
},
{
"key": "watchers",
"name": "Watchers",
"detail": "4 watchers",
"points": 2.7,
"status": "partial",
"details": [
{
"code": "watchers",
"params": {
"count": 4
}
}
],
"max_points": 15
}
]
},
{
"key": "community_health",
"band": "moderate",
"name": "Community health",
"note": null,
"notes": [],
"value": 50,
"inputs": {
"has_readme": true,
"has_license": true,
"has_contributing": false,
"has_issue_template": false,
"has_code_of_conduct": false,
"has_pull_request_template": false
},
"components": [
{
"key": "readme",
"name": "README",
"detail": null,
"points": 22.5,
"status": "met",
"details": [],
"max_points": 22.5
},
{
"key": "license",
"name": "License",
"detail": "recognized license (MIT)",
"points": 22.5,
"status": "met",
"details": [
{
"code": "license_standard",
"params": {}
},
{
"code": "license_spdx",
"params": {
"spdx": "MIT"
}
}
],
"max_points": 22.5
},
{
"key": "contributing_guide",
"name": "CONTRIBUTING guide",
"detail": null,
"points": 0,
"status": "missed",
"details": [],
"max_points": 18
},
{
"key": "code_of_conduct",
"name": "Code of conduct",
"detail": null,
"points": 0,
"status": "missed",
"details": [],
"max_points": 13.5
},
{
"key": "issue_template",
"name": "Issue template",
"detail": null,
"points": 0,
"status": "missed",
"details": [],
"max_points": 7.2
},
{
"key": "pr_template",
"name": "PR template",
"detail": null,
"points": 0,
"status": "missed",
"details": [],
"max_points": 6.3
}
]
}
],
"description": "Does the project have users, downloads, attention, and a welcoming setup for contributors?"
},
{
"key": "governance",
"band": "at_risk",
"name": "Sustainability & Governance",
"value": 49,
"weight": 0.24,
"metrics": [
{
"key": "maintainer_resilience",
"band": "critical",
"name": "Maintainer resilience (bus factor)",
"note": null,
"notes": [],
"value": 10,
"inputs": {
"bus_factor": 1,
"contributors_sampled": 1,
"top_contributor_share": 1
},
"components": [
{
"key": "bus_factor",
"name": "Bus factor",
"detail": "1 contributor(s) cover half of all commits",
"points": 9,
"status": "partial",
"details": [
{
"code": "bus_factor",
"params": {
"count": 1
}
}
],
"max_points": 54
},
{
"key": "commit_distribution",
"name": "Commit distribution",
"detail": "top contributor authored 100% of commits",
"points": 0,
"status": "missed",
"details": [
{
"code": "top_contributor_share",
"params": {
"share": 100
}
}
],
"max_points": 22.5
},
{
"key": "contributor_breadth",
"name": "Contributor breadth",
"detail": "1 contributors",
"points": 1.4,
"status": "partial",
"details": [
{
"code": "contributors_sampled",
"params": {
"count": 1
}
}
],
"max_points": 13.5
},
{
"key": "openssf_scorecard_contributors",
"name": "OpenSSF Scorecard: Contributors",
"detail": "project has 0 contributing companies or organizations -- score normalized to 0",
"points": 0,
"status": "missed",
"details": [],
"max_points": 10
}
]
},
{
"key": "responsiveness",
"band": "good",
"name": "Issue & PR responsiveness",
"note": null,
"notes": [],
"value": 83,
"inputs": {
"merged_prs": 695,
"open_issues": 3,
"closed_issues": 644,
"issue_closed_ratio": 0.995,
"closed_unmerged_prs": 37
},
"components": [
{
"key": "issue_resolution",
"name": "Issue resolution",
"detail": "100% of issues closed",
"points": 46.5,
"status": "partial",
"details": [
{
"code": "issues_closed_share",
"params": {
"share": 100
}
}
],
"max_points": 46.75
},
{
"key": "pr_acceptance",
"name": "PR acceptance",
"detail": "695/732 decided PRs merged",
"points": 36.3,
"status": "partial",
"details": [
{
"code": "decided_prs_merged",
"params": {
"merged": 695,
"decided": 732
}
}
],
"max_points": 38.25
},
{
"key": "openssf_scorecard_code_review",
"name": "OpenSSF Scorecard: Code-Review",
"detail": "Found 0/30 approved changesets -- score normalized to 0",
"points": 0,
"status": "missed",
"details": [],
"max_points": 15
}
]
},
{
"key": "stewardship",
"band": "moderate",
"name": "Ownership & stewardship",
"note": "Excluded from scoring (no data or not applicable): Verified domain. Remaining weights renormalized.",
"notes": [
{
"code": "excluded_no_data",
"params": {
"components": [
"verified_domain"
]
}
},
{
"code": "weights_renormalized",
"params": {}
}
],
"value": 61,
"inputs": {
"followers": 87,
"owner_type": "User",
"is_verified": null,
"owner_login": "richkuo",
"public_repos": 57,
"account_age_days": 5502
},
"components": [
{
"key": "ownership_backing",
"name": "Ownership backing",
"detail": "personal (user) account",
"points": 10,
"status": "partial",
"details": [
{
"code": "owner_personal",
"params": {}
}
],
"max_points": 30
},
{
"key": "verified_domain",
"name": "Verified domain",
"detail": "not applicable to user accounts",
"points": 0,
"status": "excluded",
"details": [
{
"code": "not_applicable_to_user_accounts",
"params": {}
}
],
"max_points": 20
},
{
"key": "owner_reach",
"name": "Owner reach",
"detail": "87 followers of richkuo",
"points": 14,
"status": "partial",
"details": [
{
"code": "owner_followers",
"params": {
"count": 87,
"login": "richkuo"
}
}
],
"max_points": 25
},
{
"key": "track_record",
"name": "Track record",
"detail": "57 public repos, account ~15 yr old",
"points": 24.8,
"status": "partial",
"details": [
{
"code": "public_repos",
"params": {
"count": 57
}
},
{
"code": "account_age_years",
"params": {
"years": 15
}
}
],
"max_points": 25
}
]
}
],
"description": "Will the project survive its people — bus factor, responsiveness, who backs it, and package upkeep?"
},
{
"key": "engineering",
"band": "moderate",
"name": "Engineering Quality",
"value": 67,
"weight": 0.2,
"metrics": [
{
"key": "engineering_practices",
"band": "moderate",
"name": "Engineering practices",
"note": null,
"notes": [],
"value": 68,
"inputs": {
"has_ci": true,
"has_tests": true,
"has_editorconfig": false,
"has_linter_config": false,
"has_precommit_config": false
},
"components": [
{
"key": "ci_workflows",
"name": "CI workflows",
"detail": "3 workflow(s)",
"points": 24,
"status": "met",
"details": [
{
"code": "ci_workflows",
"params": {
"count": 3
}
}
],
"max_points": 24
},
{
"key": "tests_present",
"name": "Tests present",
"detail": null,
"points": 24,
"status": "met",
"details": [],
"max_points": 24
},
{
"key": "linter_config",
"name": "Linter config",
"detail": null,
"points": 0,
"status": "missed",
"details": [],
"max_points": 16
},
{
"key": "pre_commit_hooks",
"name": "Pre-commit hooks",
"detail": null,
"points": 0,
"status": "missed",
"details": [],
"max_points": 9.6
},
{
"key": "editorconfig",
"name": ".editorconfig",
"detail": null,
"points": 0,
"status": "missed",
"details": [],
"max_points": 6.4
},
{
"key": "openssf_scorecard_ci_tests",
"name": "OpenSSF Scorecard: CI-Tests",
"detail": "27 out of 27 merged PRs checked by a CI test -- score normalized to 10",
"points": 20,
"status": "met",
"details": [],
"max_points": 20
}
]
},
{
"key": "documentation",
"band": "moderate",
"name": "Documentation",
"note": null,
"notes": [],
"value": 65,
"inputs": {
"topics": [],
"has_wiki": false,
"homepage": null,
"has_readme": true,
"has_docs_dir": true,
"has_description": true
},
"components": [
{
"key": "readme",
"name": "README",
"detail": null,
"points": 30,
"status": "met",
"details": [],
"max_points": 30
},
{
"key": "documentation_directory",
"name": "Documentation directory",
"detail": null,
"points": 25,
"status": "met",
"details": [],
"max_points": 25
},
{
"key": "documentation_homepage_site",
"name": "Documentation / homepage site",
"detail": null,
"points": 0,
"status": "missed",
"details": [],
"max_points": 15
},
{
"key": "repository_description",
"name": "Repository description",
"detail": null,
"points": 10,
"status": "met",
"details": [],
"max_points": 10
},
{
"key": "topics",
"name": "Topics",
"detail": null,
"points": 0,
"status": "missed",
"details": [],
"max_points": 10
},
{
"key": "wiki",
"name": "Wiki",
"detail": null,
"points": 0,
"status": "missed",
"details": [],
"max_points": 10
}
]
}
],
"description": "Are baseline engineering and documentation practices in place?"
},
{
"key": "security",
"band": "at_risk",
"name": "Security",
"value": 32,
"weight": 0.16,
"metrics": [
{
"key": "security_posture",
"band": "at_risk",
"name": "Security posture",
"note": "Excluded from scoring (no data or not applicable): Packaging, Signed-Releases. Remaining weights renormalized.",
"notes": [
{
"code": "excluded_no_data",
"params": {
"components": [
"packaging",
"signed_releases"
]
}
},
{
"code": "weights_renormalized",
"params": {}
}
],
"value": 32,
"inputs": {
"source": "openssf_scorecard",
"checks_evaluated": 16,
"scorecard_version": "v5.5.0",
"checks_inconclusive": 2,
"scorecard_aggregate": 3.2
},
"components": [
{
"key": "binary_artifacts",
"name": "Binary-Artifacts",
"detail": "no binaries found in the repo",
"points": 7.5,
"status": "met",
"details": [],
"max_points": 7.5
},
{
"key": "branch_protection",
"name": "Branch-Protection",
"detail": "branch protection not enabled on development/release branches",
"points": 0,
"status": "missed",
"details": [],
"max_points": 7.5
},
{
"key": "ci_tests",
"name": "CI-Tests",
"detail": "27 out of 27 merged PRs checked by a CI test -- score normalized to 10",
"points": 2.5,
"status": "met",
"details": [],
"max_points": 2.5
},
{
"key": "cii_best_practices",
"name": "CII-Best-Practices",
"detail": "no effort to earn an OpenSSF best practices badge detected",
"points": 0,
"status": "missed",
"details": [],
"max_points": 2.5
},
{
"key": "code_review",
"name": "Code-Review",
"detail": "Found 0/30 approved changesets -- score normalized to 0",
"points": 0,
"status": "missed",
"details": [],
"max_points": 7.5
},
{
"key": "contributors",
"name": "Contributors",
"detail": "project has 0 contributing companies or organizations -- score normalized to 0",
"points": 0,
"status": "missed",
"details": [],
"max_points": 2.5
},
{
"key": "dangerous_workflow",
"name": "Dangerous-Workflow",
"detail": "no dangerous workflow patterns detected",
"points": 10,
"status": "met",
"details": [],
"max_points": 10
},
{
"key": "dependency_update_tool",
"name": "Dependency-Update-Tool",
"detail": "no update tool detected",
"points": 0,
"status": "missed",
"details": [],
"max_points": 7.5
},
{
"key": "fuzzing",
"name": "Fuzzing",
"detail": "project is not fuzzed",
"points": 0,
"status": "missed",
"details": [],
"max_points": 5
},
{
"key": "license",
"name": "License",
"detail": "license file detected",
"points": 2.5,
"status": "met",
"details": [],
"max_points": 2.5
},
{
"key": "maintained",
"name": "Maintained",
"detail": "30 commit(s) and 27 issue activity found in the last 90 days -- score normalized to 10",
"points": 7.5,
"status": "met",
"details": [],
"max_points": 7.5
},
{
"key": "packaging",
"name": "Packaging",
"detail": "packaging workflow not detected",
"points": 0,
"status": "excluded",
"details": [
{
"code": "no_data",
"params": {}
}
],
"max_points": 5
},
{
"key": "pinned_dependencies",
"name": "Pinned-Dependencies",
"detail": "dependency not pinned by hash detected -- score normalized to 0",
"points": 0,
"status": "missed",
"details": [],
"max_points": 5
},
{
"key": "sast",
"name": "SAST",
"detail": "SAST tool is not run on all commits -- score normalized to 0",
"points": 0,
"status": "missed",
"details": [],
"max_points": 5
},
{
"key": "security_policy",
"name": "Security-Policy",
"detail": "security policy file not detected",
"points": 0,
"status": "missed",
"details": [],
"max_points": 5
},
{
"key": "signed_releases",
"name": "Signed-Releases",
"detail": "no releases found",
"points": 0,
"status": "excluded",
"details": [
{
"code": "no_data",
"params": {}
}
],
"max_points": 7.5
},
{
"key": "token_permissions",
"name": "Token-Permissions",
"detail": "detected GitHub workflow tokens with excessive permissions",
"points": 0,
"status": "missed",
"details": [],
"max_points": 7.5
},
{
"key": "vulnerabilities",
"name": "Vulnerabilities",
"detail": "28 existing vulnerabilities detected",
"points": 0,
"status": "missed",
"details": [],
"max_points": 7.5
}
]
}
],
"description": "Are visible security and supply-chain practices strong, with no malicious dependency and no unresolved high-risk jurisdiction exposure?"
},
{
"key": "ai_readiness",
"band": "good",
"name": "AI Readiness",
"value": 78,
"weight": 0,
"metrics": [
{
"key": "ai_agent_context",
"band": "excellent",
"name": "Agent context & guidance",
"note": null,
"notes": [],
"value": 85,
"inputs": {
"has_llms_txt": false,
"legible_history_share": 1,
"agent_instruction_files": [
"AGENTS.md",
"CLAUDE.md"
],
"agent_instruction_max_bytes": 38648
},
"components": [
{
"key": "agent_instructions",
"name": "Agent instructions",
"detail": "AGENTS.md, CLAUDE.md",
"points": 45,
"status": "met",
"details": [
{
"code": "file_list",
"params": {
"files": "AGENTS.md, CLAUDE.md"
}
}
],
"max_points": 45
},
{
"key": "machine_readable_docs_llms_txt",
"name": "Machine-readable docs (llms.txt)",
"detail": null,
"points": 0,
"status": "missed",
"details": [],
"max_points": 15
},
{
"key": "legible_commit_history",
"name": "Legible commit history",
"detail": "100 of 100 human commits state their intent (structured subject or explanatory body)",
"points": 40,
"status": "met",
"details": [
{
"code": "legible_history",
"params": {
"legible": 100,
"sampled": 100
}
}
],
"max_points": 40
}
]
},
{
"key": "ai_verify_loop",
"band": "moderate",
"name": "Verify loop (build / test / typecheck)",
"note": null,
"notes": [],
"value": 66,
"inputs": {
"has_nix": false,
"has_tests": true,
"lockfiles": [
"go.sum",
"uv.lock"
],
"has_dockerfile": false,
"typed_language": true,
"bootstrap_files": [],
"has_devcontainer": false,
"has_linter_config": false,
"typecheck_configs": [],
"agent_commit_share": 0.08,
"toolchain_manifests": [
"scheduler/go.mod"
],
"dependency_bot_commit_share": 0
},
"components": [
{
"key": "one_command_bootstrap",
"name": "One-command bootstrap",
"detail": "scheduler/go.mod (toolchain convention, no task runner)",
"points": 12.6,
"status": "partial",
"details": [
{
"code": "toolchain_convention",
"params": {
"files": "scheduler/go.mod"
}
}
],
"max_points": 18
},
{
"key": "automated_tests",
"name": "Automated tests",
"detail": null,
"points": 22,
"status": "met",
"details": [],
"max_points": 22
},
{
"key": "lint_format_config",
"name": "Lint / format config",
"detail": null,
"points": 0,
"status": "missed",
"details": [],
"max_points": 11
},
{
"key": "static_type_checking",
"name": "Static type checking",
"detail": "Go (statically typed)",
"points": 11,
"status": "met",
"details": [
{
"code": "statically_typed_language",
"params": {
"language": "Go"
}
}
],
"max_points": 11
},
{
"key": "reproducible_environment",
"name": "Reproducible environment",
"detail": "lockfile",
"points": 10,
"status": "met",
"details": [
{
"code": "file_list",
"params": {
"files": "lockfile"
}
}
],
"max_points": 10
},
{
"key": "demonstrated_agent_practice",
"name": "Demonstrated agent practice",
"detail": "8 of the last 100 commits agent-authored or agent-credited",
"points": 10,
"status": "met",
"details": [
{
"code": "agent_authored_commits",
"params": {
"count": 8,
"sampled": 100
}
}
],
"max_points": 10
},
{
"key": "automated_maintenance",
"name": "Automated maintenance",
"detail": "no automated dependency updates observed",
"points": 0,
"status": "missed",
"details": [
{
"code": "no_dependency_automation",
"params": {}
}
],
"max_points": 8
},
{
"key": "openssf_scorecard_pinned_dependencies",
"name": "OpenSSF Scorecard: Pinned-Dependencies",
"detail": "dependency not pinned by hash detected -- score normalized to 0",
"points": 0,
"status": "missed",
"details": [],
"max_points": 10
}
]
},
{
"key": "ai_code_legibility",
"band": "excellent",
"name": "Code legibility for models",
"note": null,
"notes": [],
"value": 97,
"inputs": {
"primary_language": "Go",
"largest_source_bytes": 221864,
"source_files_sampled": 598,
"oversized_source_files": 28
},
"components": [
{
"key": "type_checkable_code",
"name": "Type-checkable code",
"detail": "Go (statically typed)",
"points": 45,
"status": "met",
"details": [
{
"code": "statically_typed_language",
"params": {
"language": "Go"
}
}
],
"max_points": 45
},
{
"key": "manageable_file_sizes",
"name": "Manageable file sizes",
"detail": "28/598 source files over 60KB",
"points": 52.4,
"status": "partial",
"details": [
{
"code": "oversized_source_files",
"params": {
"kb": 60,
"sampled": 598,
"oversized": 28
}
}
],
"max_points": 55
}
]
}
],
"description": "How well is the repo equipped to be developed and maintained with AI coding agents? An independent, experimental badge — weight 0.0, so it is surfaced on its own and does not affect the overall health score."
}
],
"metrics_version": "1.13.0"
},
"warnings": [
"Could not fetch pypi package 'go-trader' from its registry",
"GitHub dependency-graph SBOM unavailable (404); the dependency graph may be disabled for this repository"
],
"report_type": "repository",
"generated_at": "2026-07-21T19:05:51.296505Z",
"schema_version": "0.23.0",
"badge_url": "https://raw.githubusercontent.com/inspect-software/badges/main/v1/r/richkuo/go-trader.svg",
"full_name": "richkuo/go-trader",
"license_state": "standard",
"license_spdx": "MIT"
}