{"timestamp":"2026-07-19T01:08:53.231-07:00","level":"debug","pid":34940,"message":"TTSR rule registered","ruleName":"go-add-cleanup","conditions":["runtime\\.SetFinalizer"],"scope":["tool:edit(*.go)","tool:write(*.go)"]}
{"timestamp":"2026-07-19T01:08:53.232-07:00","level":"debug","pid":34940,"message":"TTSR rule registered","ruleName":"go-bench-loop","astConditions":["func $F($B *testing.B) { $$$PRE for $I := 0; $I < $B.N; $I++ { $$$BODY } $$$POST }"],"scope":["tool:edit(*_test.go)","tool:write(*_test.go)"]}
{"timestamp":"2026-07-19T01:08:53.232-07:00","level":"debug","pid":34940,"message":"TTSR rule registered","ruleName":"go-exp-promoted","conditions":["\"golang.org/x/exp/slices\"","\"golang.org/x/exp/maps\""],"scope":["tool:edit(*.go)","tool:write(*.go)"]}
{"timestamp":"2026-07-19T01:08:53.232-07:00","level":"debug","pid":34940,"message":"TTSR rule registered","ruleName":"go-ioutil","conditions":["\"io/ioutil\""],"scope":["tool:edit(*.go)","tool:write(*.go)"]}
{"timestamp":"2026-07-19T01:08:53.232-07:00","level":"debug","pid":34940,"message":"TTSR rule registered","ruleName":"go-join-hostport","conditions":["fmt\\.Sprintf\\(\"%s:%d\""],"scope":["tool:edit(*.go)","tool:write(*.go)"]}
{"timestamp":"2026-07-19T01:08:53.232-07:00","level":"debug","pid":34940,"message":"TTSR rule registered","ruleName":"go-new-expr","astConditions":["func $F($V $T) *$T { return &$V }","func $F[$$$TP]($V $T) *$T { return &$V }"],"scope":["tool:edit(*.go)","tool:write(*.go)"]}
{"timestamp":"2026-07-19T01:08:53.232-07:00","level":"debug","pid":34940,"message":"TTSR rule registered","ruleName":"go-rand-v2","conditions":["\"math/rand\""],"scope":["tool:edit(*.go)","tool:write(*.go)"]}
{"timestamp":"2026-07-19T01:08:53.233-07:00","level":"debug","pid":34940,"message":"TTSR rule registered","ruleName":"go-range-int","astConditions":["for $I := 0; $I < $N; $I++ { $$$BODY }"],"scope":["tool:edit(*.go)","tool:write(*.go)"]}
{"timestamp":"2026-07-19T01:08:53.233-07:00","level":"debug","pid":34940,"message":"TTSR rule registered","ruleName":"rs-box-leak","conditions":["Box::leak"],"scope":["tool:edit(*.rs)","tool:write(*.rs)"]}
{"timestamp":"2026-07-19T01:08:53.233-07:00","level":"debug","pid":34940,"message":"TTSR rule registered","ruleName":"rs-future-prelude","conditions":["std::future::Future"],"scope":["tool:edit(*.rs)","tool:write(*.rs)"]}
{"timestamp":"2026-07-19T01:08:53.233-07:00","level":"debug","pid":34940,"message":"TTSR rule registered","ruleName":"rs-lazylock","conditions":["once_cell::","OnceLock::new"],"scope":["tool:edit(*.rs)","tool:write(*.rs)"]}
{"timestamp":"2026-07-19T01:08:53.233-07:00","level":"debug","pid":34940,"message":"TTSR rule registered","ruleName":"rs-match-ergonomics","conditions":["\\(ref mut","\\(ref [a-z_]"],"scope":["tool:edit(*.rs)","tool:write(*.rs)"]}
{"timestamp":"2026-07-19T01:08:53.233-07:00","level":"debug","pid":34940,"message":"TTSR rule registered","ruleName":"rs-parking-lot","conditions":["\\.lock\\(\\)\\.unwrap\\(\\)","\\.read\\(\\)\\.unwrap\\(\\)","\\.write\\(\\)\\.unwrap\\(\\)"],"scope":["tool:edit(*.rs)","tool:write(*.rs)"]}
{"timestamp":"2026-07-19T01:08:53.233-07:00","level":"debug","pid":34940,"message":"TTSR rule registered","ruleName":"rs-result-type","conditions":["type\\s+Result<[A-Za-z_]\\w*>\\s*="],"scope":["tool:edit(*.rs)","tool:write(*.rs)"]}
{"timestamp":"2026-07-19T01:08:53.233-07:00","level":"debug","pid":34940,"message":"TTSR rule registered","ruleName":"ts-bare-catch","conditions":["catch \\(_"],"scope":["tool:edit(*.ts)","tool:edit(*.tsx)","tool:write(*.ts)","tool:write(*.tsx)"]}
{"timestamp":"2026-07-19T01:08:53.233-07:00","level":"debug","pid":34940,"message":"TTSR rule registered","ruleName":"ts-import-type","conditions":["import\\("],"scope":["tool:edit(*.ts)","tool:edit(*.tsx)","tool:write(*.ts)","tool:write(*.tsx)"]}
{"timestamp":"2026-07-19T01:08:53.233-07:00","level":"debug","pid":34940,"message":"TTSR rule registered","ruleName":"ts-no-any","conditions":[": any|as any"],"scope":["tool:edit(*.ts)","tool:edit(*.tsx)","tool:write(*.ts)","tool:write(*.tsx)"]}
{"timestamp":"2026-07-19T01:08:53.233-07:00","level":"debug","pid":34940,"message":"TTSR rule registered","ruleName":"ts-no-deprecated-leftovers","conditions":["@deprecated"],"scope":["tool:edit(*.ts)","tool:edit(*.tsx)","tool:write(*.ts)","tool:write(*.tsx)"]}
{"timestamp":"2026-07-19T01:08:53.233-07:00","level":"debug","pid":34940,"message":"TTSR rule registered","ruleName":"ts-no-dynamic-import","conditions":["await import\\("],"scope":["tool:edit(*.ts)","tool:edit(*.tsx)","tool:write(*.ts)","tool:write(*.tsx)"]}
{"timestamp":"2026-07-19T01:08:53.233-07:00","level":"debug","pid":34940,"message":"TTSR rule registered","ruleName":"ts-no-inline-cast-access","astConditions":["($X as { $$$BODY }).$PROP","($X as { $$$BODY })?.$PROP","($X as { $$$BODY })[$IDX]"],"scope":["tool:edit(*.{ts,tsx,mts,cts})","tool:write(*.{ts,tsx,mts,cts})"]}
{"timestamp":"2026-07-19T01:08:53.233-07:00","level":"debug","pid":34940,"message":"TTSR rule registered","ruleName":"ts-no-return-type","conditions":["ReturnType<"],"scope":["tool:edit(*.ts)","tool:edit(*.tsx)","tool:write(*.ts)","tool:write(*.tsx)"]}
{"timestamp":"2026-07-19T01:08:53.233-07:00","level":"debug","pid":34940,"message":"TTSR rule registered","ruleName":"ts-no-test-timers","conditions":["Bun\\.sleep\\(","\\bsetInterval\\(","\\bsetTimeout\\("],"scope":["tool:edit(*.test.ts)","tool:write(*.test.ts)"]}
{"timestamp":"2026-07-19T01:08:53.233-07:00","level":"debug","pid":34940,"message":"TTSR rule registered","ruleName":"ts-no-tiny-functions","conditions":["\\{\\s*return [^;{}\\n]+;?\\s*\\}|\\b(?:const|let|var)\\s+[\\w$]+\\s*=\\s*(\\([^)]*\\)|[a-zA-Z_$][\\w$]*)\\s*=>\\s*[^{\\n]+$"],"scope":["tool:edit(*.ts)","tool:edit(*.tsx)","tool:write(*.ts)","tool:write(*.tsx)"]}
{"timestamp":"2026-07-19T01:08:53.233-07:00","level":"debug","pid":34940,"message":"TTSR rule registered","ruleName":"ts-promise-with-resolvers","conditions":["new Promise\\("],"scope":["tool:edit(*.ts)","tool:edit(*.tsx)","tool:write(*.ts)","tool:write(*.tsx)"]}
{"timestamp":"2026-07-19T01:08:53.234-07:00","level":"debug","pid":34940,"message":"TTSR rule registered","ruleName":"ts-redundant-clear-guard","astConditions":["if ($X) clearTimeout($X)","if ($X) { clearTimeout($X) }","if ($X) clearInterval($X)","if ($X) { clearInterval($X) }","if ($X) clearImmediate($X)","if ($X) { clearImmediate($X) }","if ($X !== null) clearTimeout($X)","if ($X !== null) { clearTimeout($X) }","if ($X !== null) clearInterval($X)","if ($X !== null) { clearInterval($X) }","if ($X !== null) clearImmediate($X)","if ($X !== null) { clearImmediate($X) }","if ($X != null) clearTimeout($X)","if ($X != null) { clearTimeout($X) }","if ($X != null) clearInterval($X)","if ($X != null) { clearInterval($X) }","if ($X != null) clearImmediate($X)","if ($X != null) { clearImmediate($X) }","if ($X !== undefined) clearTimeout($X)","if ($X !== undefined) { clearTimeout($X) }","if ($X !== undefined) clearInterval($X)","if ($X !== undefined) { clearInterval($X) }","if ($X !== undefined) clearImmediate($X)","if ($X !== undefined) { clearImmediate($X) }","if ($X != undefined) clearTimeout($X)","if ($X != undefined) { clearTimeout($X) }","if ($X != undefined) clearInterval($X)","if ($X != undefined) { clearInterval($X) }","if ($X != undefined) clearImmediate($X)","if ($X != undefined) { clearImmediate($X) }"],"scope":["tool:edit(*.{ts,tsx,js,jsx,mts,cts,mjs,cjs})","tool:write(*.{ts,tsx,js,jsx,mts,cts,mjs,cjs})"]}
{"timestamp":"2026-07-19T01:08:53.234-07:00","level":"debug","pid":34940,"message":"TTSR rule registered","ruleName":"ts-set-map","conditions":["\\bnew\\s+(Set|Map)\\b"],"scope":["tool:edit(**/*.{ts,tsx})","tool:write(**/*.{ts,tsx})"]}
{"timestamp":"2026-07-19T01:08:53.354-07:00","level":"warn","pid":34940,"message":"model discovery failed for provider","provider":"ollama","url":"http://127.0.0.1:11434","error":"Unable to connect. Is the computer able to access the url?"}
{"timestamp":"2026-07-19T01:08:53.356-07:00","level":"warn","pid":34940,"message":"model discovery failed for provider","provider":"llama.cpp","url":"http://127.0.0.1:8080","error":"Unable to connect. Is the computer able to access the url?"}
{"timestamp":"2026-07-19T01:08:53.358-07:00","level":"warn","pid":34940,"message":"model discovery failed for provider","provider":"lm-studio","url":"http://127.0.0.1:1234/v1","error":"Unable to connect. Is the computer able to access the url?"}
{"timestamp":"2026-07-19T01:08:53.677-07:00","level":"debug","pid":34940,"message":"Usage fetch requested","providers":["openai-codex"]}
{"timestamp":"2026-07-19T01:08:53.677-07:00","level":"debug","pid":34940,"message":"Usage fetch queued","provider":"openai-codex","credentialType":"oauth","baseUrl":"https://chatgpt.com/backend-api","accountId":"86bdf5a2-ea49-48e1-9979-974615693428","email":"brandon@bigscreenvr.com"}
{"timestamp":"2026-07-19T01:08:53.682-07:00","level":"error","pid":34940,"message":"MCP tool load failed","path":"mcp:screen-timelapse:screen-timelapse","error":"Transport closed"}
{"timestamp":"2026-07-19T01:08:54.144-07:00","level":"debug","pid":34940,"message":"Usage fetch resolved","reports":[{"provider":"openai-codex","limits":2,"account":"brandon@bigscreenvr.com"}]}
