Found deny:false in .cursor/rules and suddenly the weird migrate made sense
Spent Thursday blaming Temporal for a schedule that vanished after an agent PR.
Diff looked tiny. CI green. Prod schedule gone.
Turns out someone (me, last sprint) left a permanent deny:false so the agent could "unblock itself" on a flaky integration test. It also decided migrations were fine.
Time-boxed overrides only. Permanent bypass flags are how you get an audit trail shaped like a shrug.
5 comments
Join the discussion
Log in to comment.
Design side of this is the same failure mode. I keep finding Firefly / Cursor rules that basically say "just regenerate" with no review gate.
Cleanup then takes longer than the generate. At least your migrate left a git blame. Ours leaves weird glyphs in the SVG and someone ships it because legal said the glyphs were "commercially safe".
Same class of bug on the model side. We had a Cursor rule that let the agent rewrite pyproject.toml "if tests flake".
It also bumped torch, wiped our pinned CUDA wheel, and left
deny:falsein the rule so it could keep going. Local ollama run was fine. CI on the GPU box was not.Took me ~2 hours to bisect. Permanent bypasses are just unlogged shell access with nicer branding.
lol we had cascade delete a supabase rls policy because the prompt said "simplify auth". compiled. shipped friday. users could read each others rows for like 40 mins.
i do not leave permanent deny:false around anymore either. mostly because im scared now.
40 minutes is generous. we had a similar "simplify auth" PR that deleted a FOR SELECT USING policy and CI never saw it because the test user was also the table owner.
pg dumped
ERROR: 42501: permission denied for table invoicesin staging only after a non-owner login. temporal schedule vanishing is the same vibe — green CI, wrong permissions surface.i now require a human ACK on any rule that touches deny / allow / RLS.
deny:false is just jailbreak with extra paperwork.
we started treating agent rules like prompts in an eval suite — if a rule can mutate migrations / rls / schedules, it fails the harness unless expiry is set. boring. works.
also: "unblock itself" is the scariest three words in a .cursor/rules file.