Sree Dayanidhi
Writing RSS riteangle
  • All
  • Riteangle 17
  • Decision systems 10
  • Agent architecture 8
  • Operations 8
  • Context engineering 6
  • Guardrails 6
  • Data platform 5
  • Agent evals 4
  • Agentic architecture 3
  • Advertising 2
  • Marketing 2

Decision systems — 10 posts

  • Five dbt detectors sharing one output contract, and the timezone table that breaks all of them twice a year

    Contact-centre rules about when you may call someone carry real penalties, and they change — so the structural question is whether adding next year's regulation means rewriting this year's checks. Five detectors that know nothing about each other, each emitting the same three fields, means a new rule is a new query rather than a schema migration. The interesting part is that the architecture is sound and the whole thing is still wrong for two months a year, because of a hardcoded timezone table nobody thought was interesting.

    September 1, 2026 5 min read

  • Tiered evidence for a sport with almost no data, and the accuracy headline that failed a per-class check

    Most sports modelling assumes abundance. Women's international T20 gives you a career of thirty appearances and matchups four deliveries deep, and the standard approach turns that into confident numbers derived from noise. So graceful degradation is the actual product: four declared tiers of evidence, adjacent leagues blended at a discount, thin matchups discarded rather than trusted, and every output labelled with which tier it rests on. It also includes the accuracy figure I stopped quoting once I checked it per class.

    August 31, 2026 6 min read

  • Integer programming and ten thousand Monte Carlo rollouts in 512 MB, for an optimal XI in four seconds

    Solvers want memory and time; a free-tier serverless function gives you 512 MB and thirty seconds, and a person is watching a spinner the whole time. This is what fits: integer programming, ten thousand Monte Carlo rollouts and two graph models, answering in about four seconds, with the language model firewalled to commentary that can be switched off without losing the answer. The ceiling turned out to force better decisions than an unconstrained environment would have.

    August 30, 2026 8 min read

  • Application-layer regex against managed guardrails: choosing by who has to sign the rule off

    A safety rule written in your own code can be read, reviewed and approved by a domain expert, and protects exactly the one route you remembered to wire it into. The same rule bought as managed infrastructure is opaque, catches paraphrase you never enumerated, and applies to every path including ones written six months from now by someone who never read your docs. Having built both, the split I would defend is to write the rules you must be able to defend, and buy the rules you must not be able to forget.

    August 29, 2026 6 min read

  • A replay harness gating an agent's edits at zero divergence, and the assumption ontology that explains each one

    Letting an agent edit a production configuration from a plain-English request is reckless unless something can answer what the change would actually do — offline, thousands of times, without touching live traffic. So a shadow reimplementation exists, and it earns the right to speak by reproducing every routing decision production has already made: 5,501 of 5,501, zero divergences, against a threshold set in advance. The same harness then makes a 7,900-line refactor reviewable, because behaviour preservation is demonstrated rather than argued.

    August 28, 2026 7 min read

  • MILP, counterfactual regret minimisation and POMDP: choosing the solver by what you cannot observe

    Reach for game theory on a problem with no opponent and you have built machinery you did not need; reach for optimisation when someone is actively choosing against you and your clean optimum will not hold still. Three decision-support systems built in sequence, where the rungs are not algorithms but what you are allowed to assume you know. The most transferable finding is that picking between equilibrium concepts is a question about who commits first, and once you have both solvers, the difference between them prices the commitment.

    August 27, 2026 9 min read

  • What LangGraph buys over a hand-wired agent pipeline, and the one-line reducer that stops two parallel branches from clobbering each other

    Say your pipeline has a threat-scoring agent and a coalition-modelling agent, and both append their findings to the same warnings list on a shared state object. Neither depends on the other, so a for-loop wastes time running them back to back — but fire them off concurrently and both read the old list, both write their own copy back, and one agent's findings silently vanish. A plain loop makes you choose between slow and wrong. A graph runtime solves exactly this, and nothing more exotic — I built two engines on it (a Game of Thrones strategy oracle and an intelligence-operations oracle), each eight to ten nodes over one shared typed state, where a one-line rule declaring that a field merges by appending rather than replacing lets two agents write the same list safely, and a gate kills a broken run before the expensive model step. If your pipeline is honestly a straight line — fetch, then compute, then summarize, each step waiting on the last — you have nothing to parallelize and nothing to merge; write the for-loop and move on.

    August 27, 2026 16 min read

  • An LLM auditor and a deterministic one in the same pipeline, and the check only one of them can run

    A pipeline produces a table of numbers and a written analysis, and somebody senior makes decisions from the summary — so something has to check that the prose actually describes the data. I built that check twice by accident, weeks apart: once as a model call, once as plain Python. The arithmetic version is obviously right for four of the five checks, and reimplementing it silently deleted the fifth, which was the only one a model can do.

    August 26, 2026 8 min read

  • A deterministic keyword gate ahead of the LLM, and the clinician sign-off a classifier can never get

    Some questions a patient asks are urgent in a way the patient does not know, and getting one wrong means telling someone to wait until morning. A model would detect those better than a keyword list by every ordinary measure — it handles paraphrase, typos and mid-sentence language switching. It is used anyway, because a list of phrases cannot be argued out of its judgement by the message it is reading, cannot fail open during an outage, and can be read line by line and signed off by a clinician.

    August 25, 2026 7 min read

  • When to use a vector database, when a SQL table, and when a graph, and what it costs to pick wrong

    For decades we modelled data so a human could read it, which is why tabular won. The first consumer now is an agent, and an agent's binding constraint is not legibility but token cost. If context were free you would hand a frontier model all 1,100 documents and ask; it is not, so the job becomes retrieving the smallest correct slice. An agent that drafts outreach kept quoting 600 calls a week from a summary someone wrote once, when the tracker said about 1,850. The fix was to split the archive by shape into three local stores, an embedding index for prose, DuckDB for spreadsheets and a graph database for relationships, with a rule deciding where each question goes before anything is searched. Eight lookups that would have cost a million tokens of reading now cost sixteen thousand. This is what each store is good at, what picking the wrong one costs, and the measured results.

    August 25, 2026 29 min read

© 2026 Sree Dayanidhi
LinkedIn GitHub Subscribe by RSS