Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
9 changes: 4 additions & 5 deletions .floop/corrections.jsonl
Original file line number Diff line number Diff line change
Expand Up @@ -4,8 +4,7 @@
{"id":"c-1770862232174665584","timestamp":"2026-02-11T18:10:32.174665584-08:00","context":{"timestamp":"2026-02-11T18:10:32.169881678-08:00","repo":"git@github.com:nvandessel/feedback-loop.git","repo_root":".","branch":"feature/graph-view","project_type":"go","file_path":"internal/visualization/dot.go","file_language":"go","file_ext":".go","task":"development","user":"nvandessel","environment":"development"},"agent_action":"Used template.HTML for injecting JSON into a script block in html/template. html/template applies JS-encoding on template.HTML values inside script contexts, turning JSON objects into quoted strings.","human_response":"","corrected_action":"Use template.JS for values injected into script blocks. Pre-sanitize with json.HTMLEscape to prevent script breakout XSS. template.HTML is only trusted for HTML contexts, not JS contexts in html/template.","conversation_id":"","turn_number":0,"corrector":"mcp-client","processed":true,"processed_at":"2026-02-11T18:10:32.245897276-08:00"}
{"id":"c-1770879274977158579","timestamp":"2026-02-11T22:54:34.977158579-08:00","context":{"timestamp":"2026-02-11T22:54:34.972016718-08:00","repo":"git@github.com:nvandessel/feedback-loop.git","repo_root":".","branch":"feature/graph-view","project_type":"go","task":"development","user":"nvandessel","environment":"development"},"agent_action":"When stashing before rebase, didn't account for .floop data files causing stash pop conflicts. Also spent time resolving conflicts that were already in main.","human_response":"","corrected_action":"When feature branches have commits that were already cherry-picked or merged to main, consider using `git rebase --skip` for commits marked as \"patch contents already upstream\". For .floop data files, prefer `git checkout --theirs` on stash pop conflicts since the stash has the latest local state.","conversation_id":"","turn_number":0,"corrector":"mcp-client","processed":true,"processed_at":"2026-02-11T22:54:35.147289698-08:00"}
{"id":"c-1770879519409346793","timestamp":"2026-02-11T22:58:39.409346793-08:00","context":{"timestamp":"2026-02-11T22:58:39.40369598-08:00","repo":"git@github.com:nvandessel/feedback-loop.git","repo_root":".","branch":"feature/graph-view","project_type":"go","file_path":"internal/visualization/templates/graph.html.tmpl","file_ext":".tmpl","task":"development","user":"nvandessel","environment":"development"},"agent_action":"Set cooldownTicks(500) on force-graph, which permanently kills the d3 simulation after 500 ticks. The internal tick counter never resets on drag — only on graphData() calls. This causes all drag interactions (node and canvas) to break after the initial simulation settles.","human_response":"","corrected_action":"Never set cooldownTicks to a finite value on force-graph — use cooldownTime(Infinity) and let the simulation cool down naturally via d3AlphaDecay. Also add onNodeDragEnd to release pinned nodes (fx/fy = undefined) so they rejoin the simulation after being dragged.","conversation_id":"","turn_number":0,"corrector":"mcp-client","processed":true,"processed_at":"2026-02-11T22:58:39.705283924-08:00"}
{"id":"c-1771389331126140572","timestamp":"2026-02-17T20:35:31.126140572-08:00","context":{"timestamp":"2026-02-17T20:35:31.12140797-08:00","repo":"git@github.com:nvandessel/feedback-loop.git","repo_root":".","branch":"main","project_type":"go","user":"nvandessel","environment":"development"},"agent_action":"Used `/review` to request a Greptile code review on a GitHub PR","human_response":"","corrected_action":"Use `@greptileai review` in a PR comment to trigger a Greptile code review","conversation_id":"","turn_number":0,"corrector":"mcp-client","processed":true,"processed_at":"2026-02-17T20:35:31.242116618-08:00"}
{"id":"c-1771390886273390213","timestamp":"2026-02-17T21:01:26.273390213-08:00","context":{"timestamp":"2026-02-17T21:01:26.269161096-08:00","repo":"git@github.com:nvandessel/feedback-loop.git","repo_root":".","branch":"main","project_type":"go","task":"development","user":"nvandessel","environment":"development"},"agent_action":"Committed and pushed Go code without running `gofmt` or `golangci-lint` locally first, causing CI lint failure on import ordering","human_response":"","corrected_action":"Before committing Go code, always run `gofmt -l` on changed files (or `gofmt -w` to auto-fix) to catch formatting issues. For broader checks, run `golangci-lint run` locally before pushing. Import groups must be alphabetically sorted within each group.","conversation_id":"","turn_number":0,"corrector":"mcp-client","processed":true,"processed_at":"2026-02-17T21:01:26.439987987-08:00"}
{"id":"c-1771396948890433001","timestamp":"2026-02-17T22:42:28.890433001-08:00","context":{"timestamp":"2026-02-17T22:42:28.884624714-08:00","repo":"git@github.com:nvandessel/feedback-loop.git","repo_root":".","branch":"main","project_type":"go","task":"development","user":"nvandessel","environment":"development"},"agent_action":"Created a stacked PR (targeting a feature branch instead of main). When the base PR was squash-merged, GitHub auto-retargeted the stacked PR to main, but the branch still contained the original pre-squash commits from the base branch. This made the PR diff show extra files (JSON data files, beads) that weren't part of the actual change.","human_response":"","corrected_action":"After a base PR is squash-merged and GitHub retargets the stacked PR to main, rebase the stacked branch using `git rebase --onto origin/main \u003clast-base-commit\u003e ` to replay only the new commits onto main. This drops the pre-squash commits that are now redundant. Always review the PR diff (`gh pr diff --name-only`) after retargeting to catch stale files before requesting review.","conversation_id":"","turn_number":0,"corrector":"mcp-client","processed":true,"processed_at":"2026-02-17T22:42:29.081028409-08:00"}
{"id":"c-1771396957423537500","timestamp":"2026-02-17T22:42:37.4235375-08:00","context":{"timestamp":"2026-02-17T22:42:37.416084797-08:00","repo":"git@github.com:nvandessel/feedback-loop.git","repo_root":".","branch":"main","project_type":"go","file_path":"internal/store/schema.go","file_language":"go","file_ext":".go","task":"development","user":"nvandessel","environment":"development"},"agent_action":"Assumed dirty tracking triggers on the main `behaviors` table would cover all changes that affect JSONL export. Stats changes (times_activated, times_confirmed, times_overridden) update `behavior_stats` directly, bypassing the behaviors table triggers entirely. Stats were silently lost on DB recreation/reimport.","human_response":"","corrected_action":"When a database schema separates frequently-updated data into satellite tables (like behavior_stats), each satellite table that contributes to the export needs its own dirty tracking trigger. The export path (getNodeUnlocked) and import path (addBehavior) may already handle the data correctly — the gap is specifically in the change detection layer. Audit all UPDATE paths to verify they fire dirty tracking.","conversation_id":"","turn_number":0,"corrector":"mcp-client","processed":true,"processed_at":"2026-02-17T22:42:37.592380325-08:00"}
{"id":"c-1771519733701650875","timestamp":"2026-02-19T08:48:53.701650875-08:00","context":{"timestamp":"2026-02-19T08:48:53.696325814-08:00","repo":"git@github.com:nvandessel/feedback-loop.git","repo_root":".","branch":"chore/capture-corrections-feb18","project_type":"go","user":"nvandessel","environment":"development"},"agent_action":"Only using weighted Jaccard score (when + content + tags blended) to determine similar-to edges. Two behaviors sharing 2+ tags but with different canonical text score ~0.3 and get no edge, breaking spreading activation.","human_response":"","corrected_action":"Add a tag-overlap rule for edge derivation: if two behaviors share \u003e= 2 tags, create a similar-to edge regardless of overall similarity score. Tag co-occurrence is a strong signal for conceptual relatedness — the whole premise of spreading activation is associative recall (git → branch, worktree, etc).","conversation_id":"","turn_number":0,"corrector":"mcp-client","processed":true,"processed_at":"2026-02-19T08:48:53.882350316-08:00"}
{"id":"c-1771536375187080601","timestamp":"2026-02-19T13:26:15.187080601-08:00","context":{"timestamp":"2026-02-19T13:26:15.181733795-08:00","repo":"git@github.com:nvandessel/feedback-loop.git","repo_root":".","branch":"feature/electric-graph","project_type":"go","file_path":"internal/visualization/templates/graph.html.tmpl","file_ext":".tmpl","task":"development","user":"nvandessel","environment":"development"},"agent_action":"Announced visual features (sparks, animations) as complete after only reasoning about the code, without actually confirming visually that the rendering works. Told the user the sparks were there based on code analysis alone.","human_response":"","corrected_action":"For ANY visual/rendering changes: create a visual test (puppeteer script, screenshot capture, or at minimum a debug console.log confirming the code path executes) BEFORE announcing the feature works. Never claim visual features are working based solely on code reasoning — canvas rendering has too many subtle failure modes (coordinate transforms, draw order, API version quirks, state leaks).","conversation_id":"","turn_number":0,"corrector":"mcp-client","processed":true,"processed_at":"2026-02-19T13:26:15.287444732-08:00"}
{"id":"c-1771539574522859165","timestamp":"2026-02-19T14:19:34.522859165-08:00","context":{"timestamp":"2026-02-19T14:19:34.51723349-08:00","repo":"git@github.com:nvandessel/feedback-loop.git","repo_root":".","branch":"feature/electric-graph","project_type":"go","file_path":"internal/visualization/templates/graph.html.tmpl","file_language":"javascript","file_ext":".tmpl","user":"nvandessel","environment":"development"},"agent_action":"Used linkCanvasObject API in force-graph v1.51.1 for custom link rendering. Despite the API existing as a getter/setter, the callback is NEVER invoked during rendering - 0 calls across all frames. Spent significant debugging time before discovering this.","human_response":"","corrected_action":"Use onRenderFramePost(ctx, globalScale) for custom edge rendering in force-graph. It fires every frame (60fps), provides the canvas context in graph coordinate space, and actually works. Iterate graph.graphData().links manually inside the callback. linkDirectionalParticles also works for simpler particle effects.","conversation_id":"","turn_number":0,"corrector":"mcp-client","processed":true,"processed_at":"2026-02-19T14:19:34.61680466-08:00"}
{"id":"c-1771540059207750210","timestamp":"2026-02-19T14:27:39.20775021-08:00","context":{"timestamp":"2026-02-19T14:27:39.203292646-08:00","repo":"git@github.com:nvandessel/feedback-loop.git","repo_root":".","branch":"feature/electric-graph","project_type":"go","task":"development","user":"nvandessel","environment":"development"},"agent_action":"When debugging visual rendering issues, made assumptions about what was wrong (threshold too high, spark code buggy) and iterated blindly on code changes without verifying the rendering pipeline was even executing. Wasted multiple rounds of changes before adding diagnostic instrumentation.","human_response":"","corrected_action":"When visual rendering doesn't appear: first verify the rendering callback is actually being CALLED (add a counter/console.log at the very first line). Then verify coordinates are correct (draw an obvious debug marker like a big red circle). Only then debug the rendering logic itself. Work from the pipeline inward: callback fires → coordinates correct → drawing visible → styling correct.","conversation_id":"","turn_number":0,"corrector":"mcp-client","processed":true,"processed_at":"2026-02-19T14:27:39.282810681-08:00"}
{"id":"c-1771540063197257993","timestamp":"2026-02-19T14:27:43.197257993-08:00","context":{"timestamp":"2026-02-19T14:27:43.192343031-08:00","repo":"git@github.com:nvandessel/feedback-loop.git","repo_root":".","branch":"feature/electric-graph","project_type":"go","task":"testing","user":"nvandessel","environment":"development"},"agent_action":"Test scripts spawned browser instances and HTTP servers but didn't reliably clean them up, leaving orphaned tabs and processes on the user's machine. Used `head` to truncate test output which killed the process before cleanup ran.","human_response":"","corrected_action":"Always add process cleanup handlers: process.on('exit'), process.on('SIGINT'), process.on('SIGTERM'), process.on('uncaughtException'). Use SIGKILL for spawned servers in cleanup. Never pipe test output through head/tail which can kill the process before finally blocks run. The user's machine resources matter.","conversation_id":"","turn_number":0,"corrector":"mcp-client","processed":true,"processed_at":"2026-02-19T14:27:43.315771633-08:00"}
Loading