Skip to content

Instantly share code, notes, and snippets.

View renezander030's full-sized avatar

René Zander renezander030

View GitHub Profile
@renezander030
renezander030 / README.md
Created September 6, 2026 07:49
Production AI Automation Notes #19: Dropped without a count: permission-aware retrieval that never leaks through counts, titles or provenance chains (delegated reads, membership at question time, cite or drop)

Dropped without a count

A context layer over chat, tickets, wiki, CRM, mailboxes and meeting notes has to answer as the person asking. The usual build gets this wrong in a way that passes every demo: one service account reads everything, an index is built from it, and a filter at query time trims the result. The filter runs after the read. It leaks in 3 places.

The 3 leaks

  1. Counts. "How many pages in the sales space mention Acme" answered with a number, for a caller who cannot open the sales space.
  2. Titles. A trimmed result that still shows the title of a meeting the caller was not in.
  3. Provenance chains. A fact shared with the caller whose chain links to a write-up the caller cannot open, so the chain becomes a directory of things they are not allowed to see.

The pattern

  • Every read runs delegated, with the caller's own token. The layer holds no permissions of its own, the sources enforce theirs, which they already do well.
@renezander030
renezander030 / README.md
Last active September 1, 2026 11:48
Production AI Automation Notes #18: Never let an agent write to the knowledge graph — queued proposals, one writer, and why a refusal that exits 0 is not a refusal (graphiti add_episode cross-group contamination)

Never let an agent write to the knowledge graph: queued proposals, one writer, and why a refusal that exits 0 is not a refusal

Retrieval bugs are loud. Write bugs are silent — a concurrent add_episode() puts your facts in the wrong graph, a refused proposal that exits 0 tells the caller it succeeded, and both look exactly like success until someone reads the data months later.

Last tested: September 2026 — graphiti-core 0.29.3, FalkorDB graph module ver 42003 on Redis 8.6.3, Python 3.13. See Changelog at the bottom.

If this saves you a re-ingest, follow @renezander030 — production notes on agent pipelines, retrieval and approval gates.

Reference implementation: graphiti-local (kg propose / kg-workspace approve / drain).

@renezander030
renezander030 / README.md
Created September 1, 2026 10:50
Vector dimension mismatch, expected 1024 but got 768 — the silent embedding-width bug in Graphiti + FalkorDB (client-side truncating slice, import-time EMBEDDING_DIM, nomic-embed-text 768 vs text-embedding-3-small 1536)

Vector dimension mismatch, expected 1024 but got 768 — the embedding width your graph stored is not the one your config claims (Graphiti + FalkorDB)

Nothing errors when the wrong-width vector is written. The write path truncates with a Python slice, and a slice past the end of a list is a no-op. You find out at query time, from the database, about rows you ingested weeks ago.

Last tested: September 2026 — graphiti-core 0.29.3, FalkorDB graph module ver 42003 on Redis 8.6.3, Ollama nomic-embed-text, Python 3.13. See Changelog at the bottom.

If this saves you a re-ingest, follow @renezander030 — production notes on agent pipelines, retrieval and approval gates.

The preflight checks described here ship in graphiti-local as kg doctor.

@renezander030
renezander030 / README.md
Created August 22, 2026 14:18
Production AI Automation Notes #17: Validate before you log — the RAG query guard that belongs above your first log line, and the ordering test that isn't vacuous

Validate before you log: the RAG query guard that belongs above your first log line (TypeError: Cannot read properties of null (reading 'substring'))

The first thing most pipelines do with user input is interpolate it into a debug log. If validation sits one line below that, your "guard" runs after the crash — and everything that doesn't crash goes into the logs unvalidated.

Last tested: August 2026, Node 22 / TypeScript. See Changelog at the bottom.

If this saves you a confusing stack trace, follow @renezander030 — production notes on agent pipelines, retrieval and approval gates.

Real-world fix using this pattern: tetherto/qvac#3729, merged into Tether's QVAC RAG package.

@renezander030
renezander030 / README.md
Created August 22, 2026 14:18
GPT-5 / o-series vision calls failing in Go — go-openai's client-side rejections ("this model is not supported MaxTokens, please use MaxCompletionTokens"), and the empty response with finish_reason=length

GPT-5 / o-series vision calls failing in Go: "this model is not supported MaxTokens, please use MaxCompletionTokens" — and the empty response with finish_reason: "length"

Renaming max_tokens is not enough. go-openai rejects reasoning-model requests client-side on seven independent grounds, and even a request that passes can return zero content with no error at all.

Last tested: August 2026 — go-openai master (reasoning_validator.go), GPT-5 / o-series vision endpoints. See Changelog at the bottom.

If this saves you a debugging afternoon, follow @renezander030 — production notes on agent pipelines, retrieval and approval gates.

The fix described here is merged in Tencent's WeKnora: Tencent/WeKnora#2614

@renezander030
renezander030 / agent-review-cost-worksheet.md
Created August 11, 2026 11:32
The Agent Review Cost Worksheet: what every AI-authored change costs in senior review hours, and how to buy that cost down by narrowing the agent's write surface

The Agent Review Cost Worksheet

What every AI-authored change costs you in senior review hours, and how to buy that cost down.

Most organisations book a coding agent as a productivity gain and leave review as a background activity nobody owns a number for. This worksheet produces that number and then attacks it. Forward it to engineering, finance, or procurement as-is.


Step 1: the figure nobody can produce

@renezander030
renezander030 / README.md
Last active August 2, 2026 09:07
Production AI Automation Notes #16: Agent memory that degrades instead of failing — keyword fallback when the embedding provider dies ("Premature close", APIConnectionError)

Agent memory that degrades instead of failing: keyword fallback when the embedding provider dies ("Premature close", APIConnectionError)

Retrieval with a single vector path goes to zero recall the moment the embedder is unreachable. Two branches plus reciprocal rank fusion keeps it answering.

Last tested: August 2026. See Changelog at the bottom.

If this saves you an outage, follow @renezander030 — production notes on agent memory, retrieval and approval gates.

Reference implementation: github.com/renezander030/agentic-task-system

@renezander030
renezander030 / ai-signoff-checklist.md
Created July 22, 2026 13:47
The AI Sign-Off Checklist: eight questions before an AI agent's output ships (trust basis for AI-shipped work)

The AI Sign-Off Checklist

Trust basis for AI-shipped work: eight questions before an agent's output lands.

Before you approve anything an AI agent produced, run these. If you cannot answer them, your sign-off documents a decision without securing it. Forward this to engineering, security, or procurement as-is.


Everything reduces to two questions

@renezander030
renezander030 / ai-agent-dns-payload-guard.md
Created July 1, 2026 05:55
Stop the 'invisible malware' attack on your AI coding agent — a 30-line PreToolUse hook (0DIN DNS-payload defense)

Stop the "invisible malware" attack on your AI coding agent (30-line hook)

TL;DR — A malicious GitHub repo can own your machine the moment an AI coding agent touches it, without a single line of malware in the repo. The payload lives in a DNS TXT record and is pulled at runtime, so scanners, code review, and the agent itself never see it. Below is the attack in plain terms and a small, fail-safe PreToolUse hook that blocks the two actions the attack depends on — while leaving your own repos untouched.

Reported by 0DIN (Mozilla's GenAI bug bounty), write-up via

@renezander030
renezander030 / README.md
Created June 19, 2026 12:30
One query across GitHub, Notion, and your task app — cross-source agent memory for Claude Code (RRF, no vector database)

One query across GitHub, Notion, and your task app — cross-source agent memory for Claude Code (RRF, no vector database)

Connectors give your agent access to one tool each. This fuses them: a single search across every backend, ranked by meaning, each result tagged with where it came from.

Last tested: 2026-06-19 — @reneza/ats-mcp + @reneza/ats-adapter-composite. See Changelog at the bottom.

If this saves you setup time, follow @renezander030 — practical AI / coding-agent infrastructure notes.

Full repo with the MCP server + adapter source: github.com/renezander030/agentic-task-system