{"version":"1.0","generatedAt":"2026-07-31T19:56:47.373Z","site":{"name":"AI Wisdom","url":"https://www.aiwisdom.dev","description":"AI Wisdom is Amit Upadhyay's engineering reference for production AI systems, RAG, multi-agent architecture, LLM evaluation, token economics, and modern software design.","owner":"Amit Upadhyay","contact":"connect@aiwisdom.dev","language":"en","feeds":{"rss":"https://www.aiwisdom.dev/rss.xml","feed":"https://www.aiwisdom.dev/feed.xml","llms":"https://www.aiwisdom.dev/llms.txt"}},"latestUpdatedAt":"2026-07-29T00:00:00.000Z","counts":{"articles":153,"glossaryTerms":64,"patterns":17,"decisions":13,"domains":17},"articles":[{"type":"TechArticle","title":"AutoGen: Conversational Multi-Agent Systems","url":"https://www.aiwisdom.dev/articles/agentic-systems/autogen","summary":"Microsoft's conversational multi-agent framework where agents exchange messages to collaborate, critique, and complete tasks — the v0.4 async rewrite, GroupChat patterns, and when to reach for it over LangGraph.","domain":"agentic-systems","tags":["AutoGen","multi-agent","GroupChat","conversational-agents","microsoft"],"datePublished":"2026-07-29","dateModified":"2026-07-29","readingTime":"12 min","difficulty":"advanced"},{"type":"TechArticle","title":"Episodic Memory: Agents That Learn From Experience","url":"https://www.aiwisdom.dev/articles/agentic-systems/episodic-memory","summary":"Store and retrieve past agent episodes — full trajectories of thought, action, and outcome — so agents avoid repeating mistakes and replicate past successes.","domain":"agentic-systems","tags":["episodic-memory","trajectory","case-based-reasoning","experience-replay","agents"],"datePublished":"2026-07-29","dateModified":"2026-07-29","readingTime":"11 min","difficulty":"advanced"},{"type":"TechArticle","title":"LangGraph: Stateful Agentic Workflows","url":"https://www.aiwisdom.dev/articles/agentic-systems/langgraph","summary":"Model agent workflows as stateful graphs — nodes execute LLM calls or tools, edges control flow — for reliable, debuggable, and resumable agents.","domain":"agentic-systems","tags":["LangGraph","state-graph","checkpointing","agents","orchestration"],"datePublished":"2026-07-29","dateModified":"2026-07-29","readingTime":"12 min","difficulty":"advanced"},{"type":"TechArticle","title":"Long-Term Memory for AI Agents","url":"https://www.aiwisdom.dev/articles/agentic-systems/long-term-memory","summary":"Persist agent knowledge beyond the context window — vector stores, key-value caches, and structured stores for cross-session recall.","domain":"agentic-systems","tags":["long-term-memory","vector-store","cross-session","memory-consolidation","agents"],"datePublished":"2026-07-29","dateModified":"2026-07-29","readingTime":"12 min","difficulty":"advanced"},{"type":"TechArticle","title":"Designing Reliable Planning Loops","url":"https://www.aiwisdom.dev/articles/agentic-systems/planning-loops","summary":"Build reliable thought-action-observation cycles that let agents decompose complex goals into executable steps without going off-track.","domain":"agentic-systems","tags":["planning","ReAct","goal-decomposition","replanning","agents"],"datePublished":"2026-07-29","dateModified":"2026-07-29","readingTime":"12 min","difficulty":"advanced"},{"type":"TechArticle","title":"Managing Short-Term Memory in Agents","url":"https://www.aiwisdom.dev/articles/agentic-systems/short-term-memory","summary":"Manage the context window as working memory — what to include, summarise, or drop to keep agents coherent across long conversations.","domain":"agentic-systems","tags":["context-window","working-memory","summarisation","token-budget","agents"],"datePublished":"2026-07-29","dateModified":"2026-07-29","readingTime":"12 min","difficulty":"intermediate"},{"type":"TechArticle","title":"Building a Production Tool Registry","url":"https://www.aiwisdom.dev/articles/agentic-systems/tool-registry","summary":"Design and maintain a central catalogue of agent tools — versioning, capability tagging, and dynamic discovery for scalable agent systems.","domain":"agentic-systems","tags":["tool-registry","capability-tagging","versioning","dynamic-discovery","agents"],"datePublished":"2026-07-29","dateModified":"2026-07-29","readingTime":"11 min","difficulty":"advanced"},{"type":"TechArticle","title":"Embeddings: From Theory to Production Choice","url":"https://www.aiwisdom.dev/articles/ai-engineering/embeddings","summary":"Convert text, images, and code into dense vectors that capture semantic meaning — the foundational primitive of modern AI systems, and the choice that dominates RAG quality.","domain":"ai-engineering","tags":["embeddings","semantic-similarity","MTEB","bi-encoder","RAG"],"datePublished":"2026-07-29","dateModified":"2026-07-29","readingTime":"11 min","difficulty":"intermediate"},{"type":"TechArticle","title":"Guardrails: Input/Output Safety in Production","url":"https://www.aiwisdom.dev/articles/ai-engineering/guardrails","summary":"Input, output, schema, tool, and cost guardrails — the layered defence system that catches LLM failures before they reach a user or downstream system.","domain":"ai-engineering","tags":["guardrails","prompt-injection","content-safety","output-validation","PII"],"datePublished":"2026-07-29","dateModified":"2026-07-29","readingTime":"13 min","difficulty":"intermediate"},{"type":"TechArticle","title":"Content Safety for AI Applications","url":"https://www.aiwisdom.dev/articles/ai-observability/content-safety","summary":"Detect and filter harmful, biased, or inappropriate AI content — moderation APIs, classifiers, and the multi-layer approach from input filtering to human review.","domain":"ai-observability","tags":["content-safety","moderation","azure-content-safety","harmful-content","bias-detection"],"datePublished":"2026-07-29","dateModified":"2026-07-29","readingTime":"11 min","difficulty":"intermediate"},{"type":"TechArticle","title":"LLM Input Validation Strategies","url":"https://www.aiwisdom.dev/articles/ai-observability/input-validation","summary":"Validate and sanitize LLM inputs — prompt injection detection, PII filtering, and content moderation that run before the model call to prevent misuse and cut cost.","domain":"ai-observability","tags":["input-validation","prompt-injection","PII-filtering","content-moderation","guardrails"],"datePublished":"2026-07-29","dateModified":"2026-07-29","readingTime":"12 min","difficulty":"intermediate"},{"type":"TechArticle","title":"LangSmith: LLM Observability Platform","url":"https://www.aiwisdom.dev/articles/ai-observability/langsmith","summary":"LangChain's observability platform — distributed tracing, dataset curation, evaluation suites, and the prompt playground, for LangChain and framework-agnostic apps alike.","domain":"ai-observability","tags":["LangSmith","tracing","LangChain","observability","evaluation"],"datePublished":"2026-07-29","dateModified":"2026-07-29","readingTime":"13 min","difficulty":"intermediate"},{"type":"TechArticle","title":"LLM Latency: Measurement and Optimization","url":"https://www.aiwisdom.dev/articles/ai-observability/latency-analysis","summary":"Measure and optimize LLM response times — Time to First Token, tokens per second, P99 tail latency, and the streaming/caching levers that actually move the needle.","domain":"ai-observability","tags":["latency","TTFT","tokens-per-second","P99","streaming"],"datePublished":"2026-07-29","dateModified":"2026-07-29","readingTime":"11 min","difficulty":"intermediate"},{"type":"TechArticle","title":"LLM Monitoring in Production","url":"https://www.aiwisdom.dev/articles/ai-observability/llm-monitoring","summary":"Production dashboards for LLM apps — latency, error rates, token usage, and quality drift detection, wired into the alerting you already trust.","domain":"ai-observability","tags":["LLM-monitoring","dashboards","drift-detection","alerting","APM"],"datePublished":"2026-07-29","dateModified":"2026-07-29","readingTime":"12 min","difficulty":"intermediate"},{"type":"TechArticle","title":"Online Evals: Production Quality Monitoring","url":"https://www.aiwisdom.dev/articles/ai-observability/online-evals","summary":"Production-time evaluation — implicit user feedback, A/B testing, and real-time LLM-as-judge scoring for continuous quality monitoring after ship.","domain":"ai-observability","tags":["online-evals","A/B-testing","user-feedback","production-monitoring","quality-score"],"datePublished":"2026-07-29","dateModified":"2026-07-29","readingTime":"12 min","difficulty":"intermediate"},{"type":"TechArticle","title":"OpenTelemetry for LLM Applications","url":"https://www.aiwisdom.dev/articles/ai-observability/opentelemetry-ai","summary":"Instrument LLM apps with OpenTelemetry — the gen-ai semantic conventions, distributed tracing across RAG pipelines, and vendor-neutral export to any backend.","domain":"ai-observability","tags":["OpenTelemetry","gen-ai-semantic-conventions","distributed-tracing","OTEL","vendor-neutral"],"datePublished":"2026-07-29","dateModified":"2026-07-29","readingTime":"12 min","difficulty":"intermediate"},{"type":"TechArticle","title":"Validating LLM Outputs","url":"https://www.aiwisdom.dev/articles/ai-observability/output-validation","summary":"Validate LLM outputs — schema conformance, factuality checks against source documents, toxicity detection, and structured output parsing before serving users.","domain":"ai-observability","tags":["output-validation","schema-validation","factuality","toxicity","hallucination-detection"],"datePublished":"2026-07-29","dateModified":"2026-07-29","readingTime":"14 min","difficulty":"intermediate"},{"type":"TechArticle","title":"Phoenix: Open-Source LLM Observability","url":"https://www.aiwisdom.dev/articles/ai-observability/phoenix","summary":"Arize's open-source, OTel-native LLM observability stack — traces, eval workflows, and prompt experiments, self-hosted with no data leaving your VPC.","domain":"ai-observability","tags":["Phoenix","Arize","open-source","RAG-evaluation","tracing"],"datePublished":"2026-07-29","dateModified":"2026-07-29","readingTime":"14 min","difficulty":"intermediate"},{"type":"TechArticle","title":"Token Tracking and Cost Management","url":"https://www.aiwisdom.dev/articles/ai-observability/token-tracking","summary":"Monitor token usage and costs — per-request tracking, budgets, cost allocation across teams, and the optimization strategies that shrink the bill.","domain":"ai-observability","tags":["token-tracking","cost-allocation","token-budget","usage-metrics","FinOps"],"datePublished":"2026-07-29","dateModified":"2026-07-29","readingTime":"10 min","difficulty":"intermediate"},{"type":"TechArticle","title":"Alerting: Signal vs Noise","url":"https://www.aiwisdom.dev/articles/devops-cicd/alerting","summary":"Actionable alerts, on-call rotations, and incident response — alert rules, severity, routing, and the fatigue-prevention discipline that keeps on-call sane.","domain":"devops-cicd","tags":["alerting","PagerDuty","Alertmanager","on-call","incident-response"],"datePublished":"2026-07-29","dateModified":"2026-07-29","readingTime":"12 min","difficulty":"intermediate"},{"type":"TechArticle","title":"Container Registry Best Practices","url":"https://www.aiwisdom.dev/articles/devops-cicd/container-registry","summary":"Store, scan, and distribute container images — immutable tags, vulnerability scanning policies, geo-replication, and retention rules that keep a registry trustworthy.","domain":"devops-cicd","tags":["container-registry","ACR","Docker-Hub","GHCR","image-scanning"],"datePublished":"2026-07-29","dateModified":"2026-07-29","readingTime":"11 min","difficulty":"intermediate"},{"type":"TechArticle","title":"Helm Charts: Packaging K8s Applications","url":"https://www.aiwisdom.dev/articles/devops-cicd/helm","summary":"Kubernetes's package manager — chart structure, values.yaml, Go templates, dependencies, and release management (install, upgrade, rollback) for real deployments.","domain":"devops-cicd","tags":["Helm","charts","values","templates","release-management"],"datePublished":"2026-07-29","dateModified":"2026-07-29","readingTime":"12 min","difficulty":"intermediate"},{"type":"TechArticle","title":"Service Mesh: When and Why","url":"https://www.aiwisdom.dev/articles/devops-cicd/service-mesh","summary":"Sidecar proxies for traffic management, mTLS, observability, and resilience — what a service mesh actually buys you, and when the operational cost is worth it.","domain":"devops-cicd","tags":["service-mesh","Istio","Linkerd","sidecar-proxy","mTLS"],"datePublished":"2026-07-29","dateModified":"2026-07-29","readingTime":"12 min","difficulty":"advanced"},{"type":"TechArticle","title":"LLM API Providers Compared","url":"https://www.aiwisdom.dev/articles/llm-landscape/api-providers","summary":"OpenAI, Anthropic, Google, Azure, AWS Bedrock, Together, Groq — compare direct, cloud-hosted, and inference-as-a-service API providers on pricing, latency, and enterprise fit.","domain":"llm-landscape","tags":["API-providers","OpenAI-API","Anthropic-API","Bedrock","Groq"],"datePublished":"2026-07-29","dateModified":"2026-07-29","readingTime":"16 min","difficulty":"foundational"},{"type":"TechArticle","title":"Context Windows: Size, Quality, and Trade-offs","url":"https://www.aiwisdom.dev/articles/llm-landscape/context-windows","summary":"Context length limits, the 'lost in the middle' effect, prompt caching, and when a huge context window is the wrong fix for a retrieval problem.","domain":"llm-landscape","tags":["context-window","token-limit","lost-in-the-middle","context-compression","chunking"],"datePublished":"2026-07-29","dateModified":"2026-07-29","readingTime":"14 min","difficulty":"foundational"},{"type":"TechArticle","title":"LLM Cost-Performance Analysis","url":"https://www.aiwisdom.dev/articles/llm-landscape/cost-performance","summary":"Frontier vs mini-tier trade-offs, model routing and cascading architectures, batch pricing, and a worked cost model for a real production feature.","domain":"llm-landscape","tags":["cost-performance","pricing","model-routing","cascading","batch-API"],"datePublished":"2026-07-29","dateModified":"2026-07-29","readingTime":"13 min","difficulty":"intermediate"},{"type":"TechArticle","title":"Gemini: Google's Multimodal AI","url":"https://www.aiwisdom.dev/articles/llm-landscape/gemini","summary":"Google's natively multimodal model family — the Pro/Flash trade-off, Search grounding, built-in code execution, and Vertex AI for enterprise deployment.","domain":"llm-landscape","tags":["Gemini","Google-DeepMind","multimodal","grounding","Vertex-AI"],"datePublished":"2026-07-29","dateModified":"2026-07-29","readingTime":"11 min","difficulty":"foundational"},{"type":"TechArticle","title":"Constrained Generation: Beyond Hope-Based Parsing","url":"https://www.aiwisdom.dev/articles/prompt-engineering/constrained-generation","summary":"Enforce output structure at the token level with grammars and token masks — how it differs from native JSON mode, and when the strictness costs you reasoning quality.","domain":"prompt-engineering","tags":["constrained-generation","grammar","token-masking","Outlines","structured-output"],"datePublished":"2026-07-29","dateModified":"2026-07-29","readingTime":"13 min","difficulty":"advanced"},{"type":"TechArticle","title":"Assertion Functions in TypeScript","url":"https://www.aiwisdom.dev/articles/typescript/assertion-functions","summary":"asserts condition — functions that narrow types by throwing, for fail-fast validation patterns at function boundaries.","domain":"typescript","tags":["assertion-functions","asserts","invariant","fail-fast","type-narrowing"],"datePublished":"2026-07-29","dateModified":"2026-07-29","readingTime":"16 min","difficulty":"intermediate"},{"type":"TechArticle","title":"Declaration Files: The Complete Guide","url":"https://www.aiwisdom.dev/articles/typescript/declaration-files","summary":".d.ts files and @types — type definitions for JavaScript libraries, ambient declarations, and module augmentation.","domain":"typescript","tags":["declaration-files",".d.ts","types","DefinitelyTyped","module-augmentation"],"datePublished":"2026-07-29","dateModified":"2026-07-29","readingTime":"13 min","difficulty":"intermediate"},{"type":"TechArticle","title":"TypeScript Decorators: Legacy vs Modern","url":"https://www.aiwisdom.dev/articles/typescript/decorators","summary":"TC39 Stage 3 decorators vs legacy experimentalDecorators — class, method, and field decorators for metadata and cross-cutting concerns.","domain":"typescript","tags":["decorators","TC39","metadata","class-decorator","experimentalDecorators"],"datePublished":"2026-07-29","dateModified":"2026-07-29","readingTime":"13 min","difficulty":"advanced"},{"type":"TechArticle","title":"Module Resolution Demystified","url":"https://www.aiwisdom.dev/articles/typescript/module-resolution","summary":"Node, Node16, Bundler — understand how TypeScript actually finds and resolves your import paths, and why it breaks at runtime anyway.","domain":"typescript","tags":["module-resolution","Node16","Bundler","package-exports","paths"],"datePublished":"2026-07-29","dateModified":"2026-07-29","readingTime":"10 min","difficulty":"intermediate"},{"type":"TechArticle","title":"Template Literal Types Guide","url":"https://www.aiwisdom.dev/articles/typescript/template-literals","summary":"String manipulation at the type level — pattern matching, type-safe routes, and event name validation.","domain":"typescript","tags":["template-literals","string-types","pattern-matching","Capitalize","type-safe-routes"],"datePublished":"2026-07-29","dateModified":"2026-07-29","readingTime":"12 min","difficulty":"advanced"},{"type":"TechArticle","title":"tsconfig.json: The Complete Guide","url":"https://www.aiwisdom.dev/articles/typescript/tsconfig","summary":"Compiler options, strict mode, target vs lib, project references, and a pragmatic strategy for adopting strict mode on a legacy codebase.","domain":"typescript","tags":["tsconfig","strict-mode","compilerOptions","paths","project-references"],"datePublished":"2026-07-29","dateModified":"2026-07-29","readingTime":"13 min","difficulty":"foundational"},{"type":"TechArticle","title":"CI/CD Pipeline Design: Fast Feedback, Quality Gates, and DORA Metrics","url":"https://www.aiwisdom.dev/articles/devops-cicd/pipeline-design","summary":"Trunk-based development, parallel testing, deployment gates, feature flags, and designing pipelines that keep deployment frequency high and failure rate low.","domain":"devops-cicd","tags":["ci-cd","pipeline","DORA","quality-gates","feature-flags","trunk-based"],"datePublished":"2026-04-24","dateModified":"2026-07-29","readingTime":"13 min","difficulty":"intermediate"},{"type":"TechArticle","title":"Docker for Production: Multi-Stage Builds, Security, and Compose","url":"https://www.aiwisdom.dev/articles/devops-cicd/docker","summary":"Multi-stage builds that cut image size by 80%, non-root users, read-only filesystems, health checks, and Compose patterns for local development parity.","domain":"devops-cicd","tags":["docker","containers","multi-stage-builds","compose","security"],"datePublished":"2026-04-20","dateModified":"2026-07-29","readingTime":"12 min","difficulty":"intermediate"},{"type":"TechArticle","title":"CQRS in .NET Without the Cargo Cult: A Practical Guide for 2026","url":"https://www.aiwisdom.dev/articles/backend-dotnet/cqrs","summary":"CQRS as a folder discipline, command/query handlers without MediatR, vertical slice architecture, and when eventual consistency is overkill.","domain":"backend-dotnet","tags":["csharp","architecture","cqrs","ddd","design-patterns","dotnet-9"],"datePublished":"2026-04-18","dateModified":"2026-07-29","readingTime":"15 min","difficulty":"advanced"},{"type":"TechArticle","title":"GitHub Actions in Production: Workflows, OIDC, and Reusable Patterns","url":"https://www.aiwisdom.dev/articles/devops-cicd/github-actions","summary":"Triggers, matrix builds, reusable workflows, composite actions, OIDC cloud authentication, and the patterns that keep CI pipelines fast and secure.","domain":"devops-cicd","tags":["github-actions","ci-cd","OIDC","reusable-workflows","automation"],"datePublished":"2026-04-18","dateModified":"2026-07-29","readingTime":"13 min","difficulty":"intermediate"},{"type":"TechArticle","title":"Zod: Schema-First Validation That Earns Its Type Safety","url":"https://www.aiwisdom.dev/articles/typescript/zod","summary":"Parse API responses, form inputs, and env variables with Zod schemas that double as TypeScript types — no more manual type assertions at system boundaries.","domain":"typescript","tags":["typescript","zod","validation","schema","parsing","runtime-safety"],"datePublished":"2026-04-12","dateModified":"2026-07-29","readingTime":"12 min","difficulty":"intermediate"},{"type":"TechArticle","title":"TypeScript Type Guards: Narrowing Without the Noise","url":"https://www.aiwisdom.dev/articles/typescript/type-guards","summary":"typeof, instanceof, in, discriminated unions, custom type predicates, and assertion functions — the narrowing toolkit that keeps runtime errors out of production.","domain":"typescript","tags":["typescript","type-guards","narrowing","discriminated-unions","type-predicates"],"datePublished":"2026-04-10","dateModified":"2026-07-29","readingTime":"10 min","difficulty":"intermediate"},{"type":"TechArticle","title":"Dependency Scanning: Securing Your Software Supply Chain","url":"https://www.aiwisdom.dev/articles/security-engineering/dependency-scanning-supply-chain","summary":"Supply chain attacks, CVE scoring, SBOMs, transitive vulnerabilities, lockfile integrity, dependency confusion, Sigstore, and tools like Snyk and Dependabot.","domain":"security-engineering","tags":["dependency-scanning","supply-chain","sbom","cve","security"],"datePublished":"2026-03-15","dateModified":"2026-07-29","readingTime":"13 min","difficulty":"intermediate"},{"type":"TechArticle","title":"SAST & DAST: Automated Security Testing in CI/CD","url":"https://www.aiwisdom.dev/articles/security-engineering/sast-dast-security-testing","summary":"Static vs dynamic security testing, taint analysis, OWASP ZAP, Semgrep, integrating security gates into pull requests, and measuring programme effectiveness.","domain":"security-engineering","tags":["sast","dast","security-testing","cicd","appsec"],"datePublished":"2026-03-13","dateModified":"2026-07-29","readingTime":"12 min","difficulty":"intermediate"},{"type":"TechArticle","title":"Zero Trust Architecture: Never Trust, Always Verify","url":"https://www.aiwisdom.dev/articles/security-engineering/zero-trust-architecture","summary":"Core principles of Zero Trust, microsegmentation, identity-centric security, BeyondCorp, continuous verification, and implementing Zero Trust in cloud environments.","domain":"security-engineering","tags":["zero-trust","security","network-security","identity","cloud-security"],"datePublished":"2026-03-11","dateModified":"2026-07-29","readingTime":"13 min","difficulty":"intermediate"},{"type":"TechArticle","title":"OWASP Top 10: The Developer's Security Checklist","url":"https://www.aiwisdom.dev/articles/security-engineering/owasp-top-10-guide","summary":"A practical guide to the OWASP Top 10 — injection, broken authentication, XSS, IDOR, security misconfigurations, and how to prevent each vulnerability class.","domain":"security-engineering","tags":["owasp","security","web-security","vulnerabilities","appsec"],"datePublished":"2026-03-05","dateModified":"2026-07-29","readingTime":"14 min","difficulty":"foundational"},{"type":"TechArticle","title":"API Gateways in 2026: YARP, Azure APIM, and the AI Gateway Pattern","url":"https://www.aiwisdom.dev/articles/api-design/api-gateway","summary":"YARP for in-process east-west traffic, Azure APIM north-south with policies for auth + rate limit + transform, BFF per channel, defense in depth, and the 2026 AI Gateway: token caps + semantic cache + token metrics.","domain":"api-design","tags":["api-gateway","api-design","yarp","apim","azure","ai-gateway"],"datePublished":"2026-02-11","dateModified":"2026-07-29","readingTime":"15 min","difficulty":"advanced"},{"type":"TechArticle","title":"OpenAPI 3.1 on .NET 9: Built-in Spec, Scalar UI, and Kiota Clients","url":"https://www.aiwisdom.dev/articles/api-design/openapi-spec","summary":"Microsoft.AspNetCore.OpenApi replacing Swashbuckle, OpenAPI 3.1 with JSON Schema 2020-12, Scalar / Redoc UIs, schema + document transformers, Kiota / NSwag SDK generation, Spectral lint + oasdiff in CI.","domain":"api-design","tags":["openapi","api-design","aspnetcore","csharp","kiota","documentation"],"datePublished":"2026-02-09","dateModified":"2026-07-29","readingTime":"13 min","difficulty":"intermediate"},{"type":"TechArticle","title":"Rate Limiting on .NET 9: Token Buckets, Redis, and Tiered Policies","url":"https://www.aiwisdom.dev/articles/api-design/api-rate-limiting","summary":"Built-in RateLimiter middleware with FixedWindow/SlidingWindow/TokenBucket/Concurrency, partition by user/API key, distributed counters with Redis Lua INCR/EXPIRE, 429 + Retry-After + RateLimit-* headers, layered with APIM.","domain":"api-design","tags":["rate-limiting","api-design","aspnetcore","csharp","redis","apim"],"datePublished":"2026-02-07","dateModified":"2026-07-29","readingTime":"13 min","difficulty":"intermediate"},{"type":"TechArticle","title":"API Versioning: URL, Header, Media Type, and Sunset Discipline","url":"https://www.aiwisdom.dev/articles/api-design/api-versioning","summary":"Asp.Versioning 8 on .NET 9, URL/query/header/media-type schemes, additive evolution, one domain with multiple wire mappers, RFC 8594 Sunset + Deprecation headers, per-version OpenAPI documents.","domain":"api-design","tags":["api-versioning","api-design","aspnetcore","csharp","http","deprecation"],"datePublished":"2026-02-05","dateModified":"2026-07-29","readingTime":"12 min","difficulty":"intermediate"},{"type":"TechArticle","title":"Multi-Agent Architecture Patterns in Production","url":"https://www.aiwisdom.dev/articles/agentic-systems/multi-agent-architecture-patterns","summary":"Orchestrator, supervisor, and swarm patterns for multi-agent systems with real trade-offs and failure modes.","domain":"agentic-systems","tags":["multi-agent","orchestration","architecture","production"],"datePublished":"2026-02-04","dateModified":"2026-07-29","readingTime":"14 min","difficulty":"advanced"},{"type":"TechArticle","title":"WebSockets and SignalR: Heartbeats, Backplanes, and CSWSH Defense","url":"https://www.aiwisdom.dev/articles/api-design/websockets","summary":"WebSocket vs SignalR vs SSE vs WebTransport, .NET 9 SignalR Hub + MapHub, scale-out with Redis backplane or Azure SignalR Service, KeepAliveInterval heartbeats, JWT in query string, backpressure with Channels.","domain":"api-design","tags":["websockets","signalr","api-design","realtime","csharp","redis"],"datePublished":"2026-02-03","dateModified":"2026-07-29","readingTime":"13 min","difficulty":"intermediate"},{"type":"TechArticle","title":"gRPC on .NET 9: HTTP/3, Streaming, Deadlines, and JSON Transcoding","url":"https://www.aiwisdom.dev/articles/api-design/grpc","summary":"Four call patterns (unary/server/client/bidi), .NET 9 server + strongly-typed client over HTTP/3, deadlines + ServiceConfig retry policies, gRPC-Web for browsers, JSON transcoding so one service speaks gRPC and REST.","domain":"api-design","tags":["grpc","api-design","http2","http3","csharp","protobuf"],"datePublished":"2026-02-01","dateModified":"2026-07-29","readingTime":"14 min","difficulty":"advanced"},{"type":"TechArticle","title":"GraphQL with HotChocolate 14: Projections, DataLoaders, and Federation","url":"https://www.aiwisdom.dev/articles/api-design/graphql","summary":"When GraphQL beats REST and when it does not, HotChocolate 14 on .NET 9 with [UseProjection] + source-generated DataLoaders, persisted operations, cost analysis, Apollo Federation v2 with @key fields.","domain":"api-design","tags":["graphql","api-design","hotchocolate","csharp","federation","dataloader"],"datePublished":"2026-01-30","dateModified":"2026-07-29","readingTime":"14 min","difficulty":"advanced"},{"type":"TechArticle","title":"REST Principles in 2026: Resources, Idempotency, and Problem Details","url":"https://www.aiwisdom.dev/articles/api-design/rest-principles","summary":"The five constraints that still matter (resources, methods, status codes, statelessness, cacheability), idempotency keys, RFC 9457 problem+json, cursor pagination over OFFSET, ETags + 304s, ASP.NET Core 9 MapGroup.","domain":"api-design","tags":["rest","api-design","http","csharp","aspnetcore","idempotency"],"datePublished":"2026-01-28","dateModified":"2026-07-29","readingTime":"13 min","difficulty":"intermediate"},{"type":"TechArticle","title":"The AI Gateway Pattern: Why Every Production LLM Needs One","url":"https://www.aiwisdom.dev/articles/ai-engineering/the-ai-gateway-pattern","summary":"API Management, rate limiting, semantic caching, and cost control with Azure APIM as an AI Gateway.","domain":"ai-engineering","tags":["API-gateway","Azure-APIM","cost-control","caching","production"],"datePublished":"2026-01-21","dateModified":"2026-07-29","readingTime":"10 min","difficulty":"intermediate"},{"type":"TechArticle","title":"Weaviate 1.27+: Multi-Tenancy, Dynamic Indexes, and Generative Search","url":"https://www.aiwisdom.dev/articles/databases/weaviate","summary":"Weaviate 1.27/1.28 multi-tenancy, dynamic indexes (flat → HNSW), text2vec/generative modules, gRPC v4 clients, hybrid alpha, generative-openai for RAG-in-one-call, tenant offboarding.","domain":"databases","tags":["weaviate","databases","vector-search","rag","multi-tenant","ai","csharp"],"datePublished":"2026-01-20","dateModified":"2026-07-29","readingTime":"14 min","difficulty":"advanced"},{"type":"TechArticle","title":"pgvector 0.8/0.9: HNSW, halfvec, and RAG on Postgres","url":"https://www.aiwisdom.dev/articles/databases/pgvector","summary":"pgvector 0.8 (Oct 2024) iterative scans + halfvec, 0.9 sparse vectors, HNSW vs IVFFlat, EF Core 9 + Pgvector.EntityFrameworkCore, halfvec/bit quantization, hybrid search with tsvector, maintenance_work_mem for builds.","domain":"databases","tags":["pgvector","postgresql","databases","vector-search","rag","ai","csharp"],"datePublished":"2026-01-16","dateModified":"2026-07-29","readingTime":"14 min","difficulty":"advanced"},{"type":"TechArticle","title":"Claude vs GPT for Engineering Workflows","url":"https://www.aiwisdom.dev/articles/llm-landscape/claude-vs-gpt-for-engineering-workflows","summary":"A practical comparison of Claude and GPT models for real engineering tasks — code generation, debugging, architecture reviews, and documentation.","domain":"llm-landscape","tags":["Claude","GPT","comparison","engineering","benchmarks"],"datePublished":"2026-01-15","dateModified":"2026-07-29","readingTime":"12 min","difficulty":null},{"type":"TechArticle","title":"Redis 8 / Valkey in 2026: HybridCache, Streams, and Distributed Locks","url":"https://www.aiwisdom.dev/articles/databases/redis","summary":"Redis 8 SSPL/RSALv2 + Valkey LF fork, Azure Cache Enterprise, .NET 9 HybridCache (L1+L2 + stampede protection), atomic rate limit, SET NX EX + Lua compare-and-delete locks, Streams + consumer groups, sorted-set leaderboards, TTL jitter.","domain":"databases","tags":["redis","valkey","databases","caching","hybridcache","streams","csharp"],"datePublished":"2026-01-10","dateModified":"2026-07-29","readingTime":"14 min","difficulty":"intermediate"},{"type":"TechArticle","title":"Transactions and Isolation: ANSI Levels, MVCC, and SERIALIZABLE","url":"https://www.aiwisdom.dev/articles/databases/transactions","summary":"Four ANSI levels, MVCC vs 2PL, EF Core 9 BeginTransactionAsync, [Timestamp] rowversion optimistic concurrency, FOR UPDATE SKIP LOCKED, write-skew, retry on 40001/40P01 with exponential backoff, transactional outbox over 2PC.","domain":"databases","tags":["transactions","databases","isolation","mvcc","serializable","ef-core","csharp"],"datePublished":"2026-01-08","dateModified":"2026-07-29","readingTime":"14 min","difficulty":"advanced"},{"type":"TechArticle","title":"PostgreSQL 17/18 in 2026: MVCC, Indexes, and EF Core 9","url":"https://www.aiwisdom.dev/articles/databases/postgresql","summary":"PG 17 (Sept 2024) async I/O, PG 18 (Sept 2025) features, MVCC + xmin/xmax, btree/GIN/GiST/BRIN, JSONB jsonb_path_ops, partial/functional indexes, EF Core 9 + Npgsql 9, EXPLAIN (ANALYZE, BUFFERS), VACUUM and PgBouncer pitfalls.","domain":"databases","tags":["postgresql","databases","mvcc","indexes","jsonb","ef-core","csharp"],"datePublished":"2026-01-04","dateModified":"2026-07-29","readingTime":"15 min","difficulty":"intermediate"},{"type":"TechArticle","title":"Azure Functions in 2026: Flex Consumption, Isolated Worker, and Identity Everywhere","url":"https://www.aiwisdom.dev/articles/cloud-azure/functions","summary":"Move off in-process .NET and legacy Consumption — Flex Consumption + isolated worker, identity-based connections, Event Grid blob triggers, and concurrency tuned to the trigger.","domain":"cloud-azure","tags":["azure-functions","serverless","azure","flex-consumption","cloud"],"datePublished":"2025-12-07","dateModified":"2026-07-29","readingTime":"14 min","difficulty":"intermediate"},{"type":"TechArticle","title":"Chain-of-Thought Prompting: Making LLMs Show Their Work","url":"https://www.aiwisdom.dev/articles/prompt-engineering/chain-of-thought","summary":"Zero-shot CoT, few-shot CoT, self-consistency, and when reasoning traces hurt as much as they help — the technique that unlocked multi-step reasoning in LLMs.","domain":"prompt-engineering","tags":["chain-of-thought","CoT","reasoning","self-consistency","prompt-engineering"],"datePublished":"2026-05-10","dateModified":"2026-05-18","readingTime":"11 min","difficulty":"intermediate"},{"type":"TechArticle","title":"Next.js 16 App Router: Layouts, Cache Components, and the New Mental Model","url":"https://www.aiwisdom.dev/articles/frontend-react/app-router","summary":"File conventions (page, layout, loading, error), async params, route groups, parallel and intercepting routes, Cache Components with use cache, and Proxy.","domain":"frontend-react","tags":["nextjs-16","app-router","cache-components","react-server-components","frontend"],"datePublished":"2026-05-08","dateModified":"2026-05-18","readingTime":"15 min","difficulty":"intermediate"},{"type":"TechArticle","title":"ReAct Prompting: Reasoning and Acting in LLM Agents","url":"https://www.aiwisdom.dev/articles/prompt-engineering/react-prompting","summary":"The Thought → Action → Observation loop that lets LLMs use tools, verify intermediate steps, and self-correct — the pattern behind most modern AI agents.","domain":"prompt-engineering","tags":["ReAct","reasoning","agents","tool-use","chain-of-thought","prompt-engineering"],"datePublished":"2026-05-08","dateModified":"2026-05-18","readingTime":"11 min","difficulty":"intermediate"},{"type":"TechArticle","title":"TanStack Query v5: Server-Cache State Done Right","url":"https://www.aiwisdom.dev/articles/frontend-react/react-query","summary":"Query keys, staleTime vs gcTime, useSuspenseQuery, optimistic updates with rollback, and how to compose React Query with Next.js 16 Server Components.","domain":"frontend-react","tags":["react","tanstack-query","react-query","data-fetching","frontend"],"datePublished":"2026-05-06","dateModified":"2026-05-18","readingTime":"13 min","difficulty":"intermediate"},{"type":"TechArticle","title":"Prompt Injection: Attack Vectors and Defence in Production","url":"https://www.aiwisdom.dev/articles/prompt-engineering/prompt-injection","summary":"Direct injection, indirect injection via retrieved content, jailbreaks, and the defence-in-depth architecture that keeps LLM applications secure.","domain":"prompt-engineering","tags":["prompt-injection","security","jailbreak","LLM-security","red-teaming"],"datePublished":"2026-05-06","dateModified":"2026-05-18","readingTime":"13 min","difficulty":"intermediate"},{"type":"TechArticle","title":"React State Management in 2026: A Decision Tree, Not a Religion","url":"https://www.aiwisdom.dev/articles/frontend-react/state-management","summary":"Server data, URL state, local state, and global stores — when to use Zustand vs Jotai vs Context vs Redux, and why most state belongs nowhere near a global store.","domain":"frontend-react","tags":["react","state-management","zustand","jotai","context","frontend"],"datePublished":"2026-05-04","dateModified":"2026-05-18","readingTime":"12 min","difficulty":"intermediate"},{"type":"TechArticle","title":"Function Calling and Tool Use: Structured Outputs from LLMs","url":"https://www.aiwisdom.dev/articles/prompt-engineering/function-calling","summary":"JSON mode, tool schemas, parallel tool calls, and the architecture patterns that let LLMs interact reliably with external APIs and databases.","domain":"prompt-engineering","tags":["function-calling","tool-use","structured-output","JSON-mode","agents"],"datePublished":"2026-05-04","dateModified":"2026-05-18","readingTime":"12 min","difficulty":"intermediate"},{"type":"TechArticle","title":"React Server Components in Next.js 16: The Boundary Mental Model","url":"https://www.aiwisdom.dev/articles/frontend-react/server-components","summary":"Server Components vs Client Components vs SSR — what runs where, how the boundary works, and the React 19 + Next.js 16 patterns for forms, mutations, and streaming.","domain":"frontend-react","tags":["react","react-server-components","nextjs-16","server-actions","frontend"],"datePublished":"2026-05-02","dateModified":"2026-05-18","readingTime":"14 min","difficulty":"intermediate"},{"type":"TechArticle","title":"Zero-Shot Prompting: What LLMs Know Without Examples","url":"https://www.aiwisdom.dev/articles/prompt-engineering/zero-shot","summary":"Clear task framing, persona, output format, and constraints — how to get accurate results from a single well-crafted prompt with no examples.","domain":"prompt-engineering","tags":["zero-shot","prompt-engineering","task-framing","output-format"],"datePublished":"2026-05-02","dateModified":"2026-05-18","readingTime":"9 min","difficulty":"foundational"},{"type":"TechArticle","title":"React Fiber Explained: Lanes, Phases, and Why Your Renders Behave That Way","url":"https://www.aiwisdom.dev/articles/frontend-react/fiber","summary":"A working mental model for React Fiber — render vs commit phase, the Lane priority model, automatic batching, useTransition, and useDeferredValue.","domain":"frontend-react","tags":["react","fiber","concurrent-rendering","performance","react-internals"],"datePublished":"2026-04-30","dateModified":"2026-05-18","readingTime":"12 min","difficulty":"advanced"},{"type":"TechArticle","title":"Few-Shot Prompting: Teaching LLMs by Example","url":"https://www.aiwisdom.dev/articles/prompt-engineering/few-shot","summary":"Selecting, ordering, and structuring input-output examples to reliably steer model behaviour — the most effective prompting technique for consistent formatted output.","domain":"prompt-engineering","tags":["few-shot","in-context-learning","prompt-engineering","examples","ICL"],"datePublished":"2026-04-30","dateModified":"2026-05-18","readingTime":"10 min","difficulty":"foundational"},{"type":"TechArticle","title":"React 19 Hooks: The Modern Mental Model in the Compiler Era","url":"https://www.aiwisdom.dev/articles/frontend-react/hooks","summary":"A 2026 hooks refresher under React 19 and the React Compiler — what to write, what to delete, and the use(), useActionState, and useFormStatus APIs that change everything.","domain":"frontend-react","tags":["react","hooks","react-19","react-compiler","frontend"],"datePublished":"2026-04-28","dateModified":"2026-05-18","readingTime":"13 min","difficulty":"foundational"},{"type":"TechArticle","title":"Production Monitoring: The Four Golden Signals and the SLO Stack","url":"https://www.aiwisdom.dev/articles/devops-cicd/monitoring","summary":"Latency, traffic, errors, and saturation — the four golden signals — plus SLIs, SLOs, error budgets, and the alerting philosophy that prevents alert fatigue.","domain":"devops-cicd","tags":["monitoring","observability","SLO","SLI","golden-signals","alerting","error-budget"],"datePublished":"2026-04-28","dateModified":"2026-05-18","readingTime":"12 min","difficulty":"intermediate"},{"type":"TechArticle","title":"Branching Strategies: Trunk-Based Development vs GitFlow in 2026","url":"https://www.aiwisdom.dev/articles/devops-cicd/branching-strategies","summary":"Trunk-based development, feature flags, short-lived branches, GitFlow trade-offs, and why high-performing teams converge on committing to main.","domain":"devops-cicd","tags":["git","branching","trunk-based","GitFlow","feature-flags","release-management"],"datePublished":"2026-04-26","dateModified":"2026-05-18","readingTime":"11 min","difficulty":"foundational"},{"type":"TechArticle","title":"Minimal APIs in .NET 9: Typed Results, Route Groups, and Endpoint Filters Done Right","url":"https://www.aiwisdom.dev/articles/backend-dotnet/minimal-apis","summary":"Production-shaped Minimal APIs with typed Results<T>, route groups, endpoint filters, [FromKeyedServices], and the new built-in OpenAPI replacing Swashbuckle.","domain":"backend-dotnet","tags":["csharp","aspnet-core","minimal-apis","dotnet-9","web-api","openapi"],"datePublished":"2026-04-25","dateModified":"2026-05-18","readingTime":"13 min","difficulty":"intermediate"},{"type":"TechArticle","title":"Clean Architecture in .NET 9: One Rule, Four Layers, and When to Skip the Whole Thing","url":"https://www.aiwisdom.dev/articles/backend-dotnet/clean-architecture","summary":"The dependency rule applied pragmatically — solution layout, port-and-adapter wiring, NetArchTest enforcement, and when Vertical Slice Architecture is the better fit.","domain":"backend-dotnet","tags":["csharp","architecture","clean-architecture","ddd","design-patterns"],"datePublished":"2026-04-22","dateModified":"2026-05-18","readingTime":"14 min","difficulty":"advanced"},{"type":"TechArticle","title":"Kubernetes Deployments: Rolling Updates, Resource Limits, and HPA","url":"https://www.aiwisdom.dev/articles/devops-cicd/k8s-deployments","summary":"Deployment strategies, readiness and liveness probes, resource requests and limits, Horizontal Pod Autoscaler, and PodDisruptionBudgets for zero-downtime releases.","domain":"devops-cicd","tags":["kubernetes","k8s","deployments","HPA","rolling-updates","resource-limits"],"datePublished":"2026-04-22","dateModified":"2026-05-18","readingTime":"14 min","difficulty":"intermediate"},{"type":"TechArticle","title":"TypeScript Mapped Types and Template Literals: Transforming Shapes at the Type Level","url":"https://www.aiwisdom.dev/articles/typescript/mapped-types","summary":"Mapped types, key remapping, template literal types, and combining them with conditional types to build transformation layers with zero runtime cost.","domain":"typescript","tags":["typescript","mapped-types","template-literals","key-remapping","type-transforms"],"datePublished":"2026-04-16","dateModified":"2026-05-18","readingTime":"12 min","difficulty":"advanced"},{"type":"TechArticle","title":"The Repository Pattern in .NET: When It Helps, When It Hurts, and What to Use Instead","url":"https://www.aiwisdom.dev/articles/backend-dotnet/repository-pattern","summary":"Why generic IRepository<T> over EF Core is usually an anti-pattern, when domain repositories earn their keep, and the specification pattern as a cleaner alternative.","domain":"backend-dotnet","tags":["csharp","architecture","ef-core","design-patterns","ddd"],"datePublished":"2026-04-15","dateModified":"2026-05-18","readingTime":"12 min","difficulty":"intermediate"},{"type":"TechArticle","title":"TypeScript Conditional Types: Type-Level Logic That Scales","url":"https://www.aiwisdom.dev/articles/typescript/conditional-types","summary":"Conditional types, the infer keyword, distributive behaviour, and recursive types — the foundation of every advanced TypeScript utility.","domain":"typescript","tags":["typescript","conditional-types","infer","distributive","recursive-types"],"datePublished":"2026-04-14","dateModified":"2026-05-18","readingTime":"13 min","difficulty":"advanced"},{"type":"TechArticle","title":"EF Core 9 in Production: Tracking, Projections, and the Performance Levers That Matter","url":"https://www.aiwisdom.dev/articles/backend-dotnet/ef-core","summary":"Bulk updates with ExecuteUpdateAsync, projection over Include, AsSplitQuery for cartesian explosion, auto-compiled models, and IDbContextFactory for parallel work.","domain":"backend-dotnet","tags":["ef-core","ef-core-9","csharp","aspnet-core","performance","sql"],"datePublished":"2026-04-12","dateModified":"2026-05-18","readingTime":"14 min","difficulty":"intermediate"},{"type":"TechArticle","title":"Dependency Injection in .NET 9: Lifetimes, Keyed Services, and the Scope Pattern","url":"https://www.aiwisdom.dev/articles/backend-dotnet/dependency-injection","summary":"Lifetime selection, keyed services (.NET 8+), the BackgroundService scope pattern, and the four DI anti-patterns that cause production bugs.","domain":"backend-dotnet","tags":["csharp","dependency-injection","aspnet-core","dotnet-9","architecture"],"datePublished":"2026-04-08","dateModified":"2026-05-18","readingTime":"12 min","difficulty":"foundational"},{"type":"TechArticle","title":"TypeScript Utility Types: The Production Toolkit","url":"https://www.aiwisdom.dev/articles/typescript/utility-types","summary":"Partial, Required, Pick, Omit, Record, Extract, Exclude, ReturnType — when to use each and how to compose them for real-world type transformations.","domain":"typescript","tags":["typescript","utility-types","Partial","Pick","Omit","Record"],"datePublished":"2026-04-08","dateModified":"2026-05-18","readingTime":"11 min","difficulty":"intermediate"},{"type":"TechArticle","title":"Async/Await in .NET 9: ConfigureAwaitOptions, Task.WhenEach, and Bounded Concurrency","url":"https://www.aiwisdom.dev/articles/backend-dotnet/async-await","summary":"Modern async patterns for ASP.NET Core — context capture, the .NET 8 ConfigureAwaitOptions enum, .NET 9 Task.WhenEach, and the anti-patterns that cause production incidents.","domain":"backend-dotnet","tags":["csharp","async","concurrency","dotnet-9","performance"],"datePublished":"2026-04-06","dateModified":"2026-05-18","readingTime":"14 min","difficulty":"intermediate"},{"type":"TechArticle","title":"TypeScript Generics: Constraints, Variance, and Inference","url":"https://www.aiwisdom.dev/articles/typescript/generics-ts","summary":"Type parameters, constraints, conditional inference, and the patterns that make generics actually useful in production TypeScript.","domain":"typescript","tags":["typescript","generics","type-system","constraints","inference"],"datePublished":"2026-04-06","dateModified":"2026-05-18","readingTime":"12 min","difficulty":"intermediate"},{"type":"TechArticle","title":"LINQ in .NET 9: Deferred Execution, IQueryable, and the New Operators","url":"https://www.aiwisdom.dev/articles/backend-dotnet/linq","summary":"Practical LINQ for backend engineers — IEnumerable vs IQueryable, the .NET 9 CountBy/AggregateBy/Index additions, and EF Core translation pitfalls.","domain":"backend-dotnet","tags":["csharp","linq","dotnet-9","ef-core","performance"],"datePublished":"2026-04-04","dateModified":"2026-05-18","readingTime":"13 min","difficulty":"intermediate"},{"type":"TechArticle","title":"Mocking Patterns: Stubs, Spies, Fakes, and When Not to Mock","url":"https://www.aiwisdom.dev/articles/testing-engineering/mocking-patterns-guide","summary":"Master test double patterns — distinguish stubs from mocks, use Vitest module mocking, implement MSW for HTTP, and avoid over-mocking that hides real bugs.","domain":"testing-engineering","tags":["mocking","stubs","spies","test-doubles","msw","vitest"],"datePublished":"2026-04-04","dateModified":"2026-05-18","readingTime":"13 min","difficulty":"intermediate"},{"type":"TechArticle","title":"C# Generics Mastery: Constraints, Variance, and Generic Math in .NET 9","url":"https://www.aiwisdom.dev/articles/backend-dotnet/generics","summary":"Type-safe abstractions without overhead — constraints, covariance/contravariance, INumber<T>, and the .NET 9 \"allows ref struct\" anti-constraint.","domain":"backend-dotnet","tags":["csharp","generics","dotnet-9","language","type-system"],"datePublished":"2026-04-02","dateModified":"2026-05-18","readingTime":"12 min","difficulty":"intermediate"},{"type":"TechArticle","title":"Test Architecture Strategy: Pyramid, Trophy, and CI Optimization","url":"https://www.aiwisdom.dev/articles/testing-engineering/test-architecture-strategy","summary":"Design a scalable test architecture — apply the test pyramid and testing trophy, set meaningful coverage thresholds, and optimise CI pipeline execution time.","domain":"testing-engineering","tags":["test-architecture","test-pyramid","coverage","ci-optimization","testing-strategy"],"datePublished":"2026-04-02","dateModified":"2026-05-18","readingTime":"14 min","difficulty":"intermediate"},{"type":"TechArticle","title":"Snapshot Testing: When and How to Use toMatchSnapshot","url":"https://www.aiwisdom.dev/articles/testing-engineering/snapshot-testing-guide","summary":"Use snapshot testing effectively — understand inline vs file snapshots, handle dynamic values, avoid snapshot bloat, and know when snapshots add real value.","domain":"testing-engineering","tags":["snapshot-testing","jest","vitest","visual-regression","testing-patterns"],"datePublished":"2026-03-31","dateModified":"2026-05-18","readingTime":"11 min","difficulty":"foundational"},{"type":"TechArticle","title":"Contract Testing with Pact: Consumer-Driven Contracts for Microservices","url":"https://www.aiwisdom.dev/articles/testing-engineering/contract-testing-pact","summary":"Implement consumer-driven contract testing with Pact and PactFlow — learn pact files, provider verification, can-i-deploy, and bidirectional contracts.","domain":"testing-engineering","tags":["contract-testing","pact","microservices","consumer-driven","pactflow"],"datePublished":"2026-03-29","dateModified":"2026-05-18","readingTime":"15 min","difficulty":"intermediate"},{"type":"TechArticle","title":"Test-Driven Development: Red-Green-Refactor in Practice","url":"https://www.aiwisdom.dev/articles/testing-engineering/test-driven-development-guide","summary":"Apply the TDD cycle — Red-Green-Refactor — to drive better software design. Covers triangulation, outside-in TDD, BDD, and working with legacy code.","domain":"testing-engineering","tags":["tdd","red-green-refactor","bdd","software-design","legacy-code"],"datePublished":"2026-03-27","dateModified":"2026-05-18","readingTime":"14 min","difficulty":"intermediate"},{"type":"TechArticle","title":"E2E Testing with Playwright: Auto-Waiting, Page Objects, and Network Interception","url":"https://www.aiwisdom.dev/articles/testing-engineering/e2e-testing-playwright","summary":"Write reliable end-to-end tests with Playwright — leverage auto-waiting, build Page Object Models, intercept network requests, and eliminate flakiness.","domain":"testing-engineering","tags":["e2e-testing","playwright","cypress","page-objects","flaky-tests"],"datePublished":"2026-03-25","dateModified":"2026-05-18","readingTime":"15 min","difficulty":"intermediate"},{"type":"TechArticle","title":"Integration Testing with Testcontainers and WebApplicationFactory","url":"https://www.aiwisdom.dev/articles/testing-engineering/integration-testing-guide","summary":"Build reliable integration tests using Testcontainers for real databases, WebApplicationFactory for ASP.NET Core, and supertest for Node.js APIs.","domain":"testing-engineering","tags":["integration-testing","testcontainers","supertest","wiremock"],"datePublished":"2026-03-23","dateModified":"2026-05-18","readingTime":"14 min","difficulty":"intermediate"},{"type":"TechArticle","title":"Unit Testing Principles: AAA, Isolation, and Test Doubles","url":"https://www.aiwisdom.dev/articles/testing-engineering/unit-testing-principles","summary":"Master the foundational principles of unit testing — Arrange-Act-Assert, test isolation, deterministic tests, and test doubles with Vitest and xUnit.","domain":"testing-engineering","tags":["unit-testing","vitest","jest","xunit","test-doubles"],"datePublished":"2026-03-21","dateModified":"2026-05-18","readingTime":"12 min","difficulty":"foundational"},{"type":"TechArticle","title":"Threat Modeling for Developers: STRIDE, DREAD & Beyond","url":"https://www.aiwisdom.dev/articles/security-engineering/threat-modeling-for-developers","summary":"STRIDE threat categories, data flow diagrams, trust boundaries, attack trees, DREAD scoring, PASTA methodology, and integrating threat modeling into the SDLC.","domain":"security-engineering","tags":["threat-modeling","stride","security","appsec","sdlc"],"datePublished":"2026-03-19","dateModified":"2026-05-18","readingTime":"14 min","difficulty":"intermediate"},{"type":"TechArticle","title":"Secrets Management: Keeping Credentials Out of Code","url":"https://www.aiwisdom.dev/articles/security-engineering/secrets-management-best-practices","summary":"Vault patterns, dynamic secrets, automated rotation, git secret scanning, HashiCorp Vault, Azure Key Vault, envelope encryption, and incident response for leaked secrets.","domain":"security-engineering","tags":["secrets-management","vault","security","key-vault","devops"],"datePublished":"2026-03-17","dateModified":"2026-05-18","readingTime":"13 min","difficulty":"intermediate"},{"type":"TechArticle","title":"OAuth 2.0 & OIDC: Authorization and Identity Explained","url":"https://www.aiwisdom.dev/articles/security-engineering/oauth2-oidc-complete-guide","summary":"OAuth 2.0 grant types, PKCE, OpenID Connect layers, access vs ID tokens, token introspection, and securing SPAs and APIs with modern auth flows.","domain":"security-engineering","tags":["oauth2","oidc","authentication","authorization","security"],"datePublished":"2026-03-09","dateModified":"2026-05-18","readingTime":"15 min","difficulty":"intermediate"},{"type":"TechArticle","title":"JWT Authentication: From Basics to Best Practices","url":"https://www.aiwisdom.dev/articles/security-engineering/jwt-authentication-deep-dive","summary":"How JSON Web Tokens work, signing algorithms (HS256 vs RS256), common vulnerabilities (algorithm confusion, none attack), token storage, and refresh token patterns.","domain":"security-engineering","tags":["jwt","authentication","security","tokens","oauth"],"datePublished":"2026-03-07","dateModified":"2026-05-18","readingTime":"13 min","difficulty":"intermediate"}],"reference":{"glossary":[{"type":"DefinedTerm","name":"Agentic Workflow","url":"https://www.aiwisdom.dev/glossary/agentic-workflow","definition":"A workflow where an LLM autonomously decides steps, uses tools, and iterates until it achieves a goal.","relatedTerms":["agent","planning-loop","tool-use","multi-agent"]},{"type":"DefinedTerm","name":"AI Agent","url":"https://www.aiwisdom.dev/glossary/agent","definition":"An LLM-powered system that can plan, use tools, and take actions autonomously to achieve goals.","relatedTerms":["multi-agent","tool-use","planning"]},{"type":"DefinedTerm","name":"AI Gateway","url":"https://www.aiwisdom.dev/glossary/ai-gateway","definition":"An API management layer between your application and LLM providers for routing, caching, and cost control.","relatedTerms":["inference","model-serving","cost-control"]},{"type":"DefinedTerm","name":"Attention Mechanism","url":"https://www.aiwisdom.dev/glossary/attention","definition":"The core operation in transformers that computes relevance scores between all pairs of tokens.","relatedTerms":["transformer","flash-attention"]},{"type":"DefinedTerm","name":"AutoGen","url":"https://www.aiwisdom.dev/glossary/autogen","definition":"Microsoft Research's original open-source multi-agent framework via conversational message passing — now in maintenance mode, superseded by Microsoft Agent Framework.","relatedTerms":["multi-agent","agent","langgraph","planning-loop"]},{"type":"DefinedTerm","name":"BM25","url":"https://www.aiwisdom.dev/glossary/bm25","definition":"A keyword-based ranking function scoring documents by term frequency weighted by inverse document frequency.","relatedTerms":["hybrid-search","semantic-search","rag","rrf"]},{"type":"DefinedTerm","name":"Chain-of-Thought (CoT)","url":"https://www.aiwisdom.dev/glossary/chain-of-thought","definition":"A prompting technique that encourages the model to reason step-by-step before giving a final answer.","relatedTerms":["prompt-engineering","few-shot-learning","reasoning"]},{"type":"DefinedTerm","name":"Chunking","url":"https://www.aiwisdom.dev/glossary/chunking","definition":"Splitting documents into smaller segments for embedding and retrieval in RAG systems.","relatedTerms":["rag","embedding","semantic-search"]},{"type":"DefinedTerm","name":"Constrained Generation","url":"https://www.aiwisdom.dev/glossary/constrained-generation","definition":"Techniques that restrict LLM token generation to follow specific formats or formal grammars.","relatedTerms":["structured-output","json-mode","inference"]},{"type":"DefinedTerm","name":"Content Safety","url":"https://www.aiwisdom.dev/glossary/content-safety","definition":"AI-powered classification layers that detect and block harmful or policy-violating content in LLM inputs and outputs.","relatedTerms":["guardrails","prompt-injection","red-teaming"]},{"type":"DefinedTerm","name":"Context Window","url":"https://www.aiwisdom.dev/glossary/context-window","definition":"The maximum number of tokens an LLM can process in a single request (input + output combined).","relatedTerms":["token","rag","chunking"]},{"type":"DefinedTerm","name":"Cosine Similarity","url":"https://www.aiwisdom.dev/glossary/cosine-similarity","definition":"A metric measuring the angle between two vectors, used to compare embedding similarity.","relatedTerms":["embedding","semantic-search","vector-database"]},{"type":"DefinedTerm","name":"Edge Models (SLMs)","url":"https://www.aiwisdom.dev/glossary/edge-models","definition":"Compact language models optimised to run on-device without cloud connectivity.","relatedTerms":["quantisation","inference","vllm","model-serving"]},{"type":"DefinedTerm","name":"Embedding","url":"https://www.aiwisdom.dev/glossary/embedding","definition":"A dense vector representation of text, images, or other data in a continuous space.","relatedTerms":["vector-database","rag","semantic-search","cosine-similarity"]},{"type":"DefinedTerm","name":"Episodic Memory","url":"https://www.aiwisdom.dev/glossary/episodic-memory","definition":"Agent memory that stores records of past interactions, enabling recall of previous tasks or conversations.","relatedTerms":["agent","long-term-memory","short-term-memory","embedding"]},{"type":"DefinedTerm","name":"Few-Shot Learning","url":"https://www.aiwisdom.dev/glossary/few-shot-learning","definition":"Providing a small number of examples in the prompt to teach the model a desired behaviour.","relatedTerms":["prompt-engineering","chain-of-thought","in-context-learning"]},{"type":"DefinedTerm","name":"Fine-Tuning","url":"https://www.aiwisdom.dev/glossary/fine-tuning","definition":"Adapting a pre-trained model on domain-specific data to improve performance for a particular task.","relatedTerms":["lora","qlora","foundation-model","transfer-learning"]},{"type":"DefinedTerm","name":"Foundation Model","url":"https://www.aiwisdom.dev/glossary/foundation-model","definition":"A large model pre-trained on broad data that can be adapted to many downstream tasks.","relatedTerms":["fine-tuning","transfer-learning","llm"]},{"type":"DefinedTerm","name":"Guardrails","url":"https://www.aiwisdom.dev/glossary/guardrails","definition":"Input/output validation layers that prevent LLMs from generating harmful, off-topic, or incorrect responses.","relatedTerms":["prompt-injection","content-moderation","hallucination"]},{"type":"DefinedTerm","name":"Hallucination","url":"https://www.aiwisdom.dev/glossary/hallucination","definition":"When an LLM generates plausible-sounding but factually incorrect or fabricated information.","relatedTerms":["rag","grounding","guardrails"]},{"type":"DefinedTerm","name":"Hallucination Detection","url":"https://www.aiwisdom.dev/glossary/hallucination-detection","definition":"Techniques to identify when an LLM generates factually incorrect or unsupported claims.","relatedTerms":["hallucination","rag","llm-evaluation","guardrails"]},{"type":"DefinedTerm","name":"HNSW (Hierarchical Navigable Small World)","url":"https://www.aiwisdom.dev/glossary/hnsw","definition":"The most popular approximate nearest-neighbour algorithm used in vector databases.","relatedTerms":["vector-database","cosine-similarity","ann"]},{"type":"DefinedTerm","name":"Hybrid Search","url":"https://www.aiwisdom.dev/glossary/hybrid-search","definition":"Combining vector (semantic) search and keyword (BM25) search for superior retrieval quality.","relatedTerms":["semantic-search","bm25","rag","rrf","reranking"]},{"type":"DefinedTerm","name":"Inference","url":"https://www.aiwisdom.dev/glossary/inference","definition":"Running a trained model to generate predictions or outputs from new inputs.","relatedTerms":["model-serving","quantisation","latency"]},{"type":"DefinedTerm","name":"JSON Mode","url":"https://www.aiwisdom.dev/glossary/json-mode","definition":"An LLM API feature that constrains the model to output syntactically valid JSON.","relatedTerms":["structured-output","tool-use","function-calling"]},{"type":"DefinedTerm","name":"Knowledge Graph","url":"https://www.aiwisdom.dev/glossary/knowledge-graph","definition":"A graph database representing entities and relationships for structured, multi-hop knowledge retrieval.","relatedTerms":["rag","semantic-search","vector-database"]},{"type":"DefinedTerm","name":"LangGraph","url":"https://www.aiwisdom.dev/glossary/langgraph","definition":"A library for building stateful, graph-based agent workflows with persistence and human-in-the-loop support.","relatedTerms":["agent","planning-loop","multi-agent","react-prompting"]},{"type":"DefinedTerm","name":"LangSmith","url":"https://www.aiwisdom.dev/glossary/langsmith","definition":"LangChain's observability platform for tracing, evaluating, and managing LLM applications.","relatedTerms":["llm-evaluation","phoenix","opentelemetry-ai","rag"]},{"type":"DefinedTerm","name":"LLM Evaluation (Evals)","url":"https://www.aiwisdom.dev/glossary/llm-evaluation","definition":"Systematic measurement of LLM output quality using metrics, benchmarks, and automated judges.","relatedTerms":["hallucination","online-evaluation","offline-evaluation","rag"]},{"type":"DefinedTerm","name":"LLM Streaming","url":"https://www.aiwisdom.dev/glossary/llm-streaming","definition":"Returning LLM tokens incrementally as they are generated instead of waiting for the full response.","relatedTerms":["inference","model-serving","token","guardrails"]},{"type":"DefinedTerm","name":"Long-term Memory","url":"https://www.aiwisdom.dev/glossary/long-term-memory","definition":"External persistent memory that agents can query and update across multiple sessions.","relatedTerms":["episodic-memory","short-term-memory","vector-database","rag"]},{"type":"DefinedTerm","name":"LoRA (Low-Rank Adaptation)","url":"https://www.aiwisdom.dev/glossary/lora","definition":"A parameter-efficient fine-tuning technique that trains small adapter matrices instead of full model weights.","relatedTerms":["fine-tuning","qlora","adapter"]},{"type":"DefinedTerm","name":"MCP (Model Context Protocol)","url":"https://www.aiwisdom.dev/glossary/mcp","definition":"A standard protocol enabling AI agents to connect with tools, resources, and prompts across any provider.","relatedTerms":["agent","tool-use","tool-registry","agentic-workflow"]},{"type":"DefinedTerm","name":"Meta-Prompting","url":"https://www.aiwisdom.dev/glossary/meta-prompting","definition":"Using an LLM to generate, optimise, or select prompts for another LLM task.","relatedTerms":["prompt-engineering","few-shot-learning","chain-of-thought"]},{"type":"DefinedTerm","name":"Model Serving","url":"https://www.aiwisdom.dev/glossary/model-serving","definition":"Infrastructure for deploying and running ML models in production with APIs.","relatedTerms":["inference","quantisation","vllm"]},{"type":"DefinedTerm","name":"Multi-Agent System","url":"https://www.aiwisdom.dev/glossary/multi-agent","definition":"An architecture where multiple specialised AI agents collaborate to solve complex tasks.","relatedTerms":["agent","orchestration"]},{"type":"DefinedTerm","name":"Offline Evaluation","url":"https://www.aiwisdom.dev/glossary/offline-evaluation","definition":"Systematic evaluation of model quality using curated datasets before or outside production.","relatedTerms":["llm-evaluation","online-evaluation","rag","hallucination"]},{"type":"DefinedTerm","name":"Online Evaluation","url":"https://www.aiwisdom.dev/glossary/online-evaluation","definition":"Real-time evaluation of LLM outputs in production using automated judges or user feedback signals.","relatedTerms":["llm-evaluation","offline-evaluation","langsmith","phoenix"]},{"type":"DefinedTerm","name":"OpenTelemetry for AI","url":"https://www.aiwisdom.dev/glossary/opentelemetry-ai","definition":"Using OpenTelemetry semantic conventions to trace and instrument LLM systems for observability.","relatedTerms":["langsmith","phoenix","llm-evaluation"]},{"type":"DefinedTerm","name":"Phoenix (Arize)","url":"https://www.aiwisdom.dev/glossary/phoenix","definition":"An open-source LLM observability platform for trace analysis, RAG debugging, and embedding drift detection.","relatedTerms":["langsmith","opentelemetry-ai","llm-evaluation","rag"]},{"type":"DefinedTerm","name":"Planning Loop","url":"https://www.aiwisdom.dev/glossary/planning-loop","definition":"The core agentic cycle where an LLM plans actions, executes them, observes results, and re-plans iteratively.","relatedTerms":["agent","react-prompting","agentic-workflow","tool-use"]},{"type":"DefinedTerm","name":"Prompt Engineering","url":"https://www.aiwisdom.dev/glossary/prompt-engineering","definition":"The practice of designing and optimising input prompts to elicit desired outputs from LLMs.","relatedTerms":["chain-of-thought","few-shot-learning","system-prompt"]},{"type":"DefinedTerm","name":"Prompt Injection","url":"https://www.aiwisdom.dev/glossary/prompt-injection","definition":"An attack where malicious input manipulates an LLM into ignoring its instructions or leaking system prompts.","relatedTerms":["guardrails","system-prompt","llm-security"]},{"type":"DefinedTerm","name":"QLoRA (Quantised LoRA)","url":"https://www.aiwisdom.dev/glossary/qlora","definition":"Combines 4-bit quantisation with LoRA to enable fine-tuning of large models on consumer GPUs.","relatedTerms":["lora","fine-tuning","quantisation"]},{"type":"DefinedTerm","name":"Quantisation","url":"https://www.aiwisdom.dev/glossary/quantisation","definition":"Reducing model precision (e.g., 32-bit to 4-bit) to decrease memory usage and increase inference speed.","relatedTerms":["qlora","inference","model-serving"]},{"type":"DefinedTerm","name":"RAG (Retrieval-Augmented Generation)","url":"https://www.aiwisdom.dev/glossary/rag","definition":"A pattern that grounds LLM responses in retrieved external documents to reduce hallucination.","relatedTerms":["vector-database","embedding","chunking","semantic-search"]},{"type":"DefinedTerm","name":"ReAct Prompting","url":"https://www.aiwisdom.dev/glossary/react-prompting","definition":"A prompting paradigm that interleaves Reasoning and Acting steps, enabling LLMs to think before invoking tools.","relatedTerms":["chain-of-thought","tool-use","agent","planning-loop"]},{"type":"DefinedTerm","name":"Reciprocal Rank Fusion (RRF)","url":"https://www.aiwisdom.dev/glossary/rrf","definition":"A rank-fusion algorithm that merges multiple ranked result lists into a single reliable combined ranking.","relatedTerms":["hybrid-search","bm25","semantic-search","rag"]},{"type":"DefinedTerm","name":"Red Teaming (LLMs)","url":"https://www.aiwisdom.dev/glossary/red-teaming","definition":"Adversarial testing of LLM systems to systematically discover safety, security, and reliability vulnerabilities.","relatedTerms":["prompt-injection","guardrails","content-safety"]},{"type":"DefinedTerm","name":"Reranking","url":"https://www.aiwisdom.dev/glossary/reranking","definition":"Applying a cross-encoder model to rescore retrieved documents, improving RAG retrieval precision.","relatedTerms":["rag","semantic-search","hybrid-search","tiered-retrieval"]},{"type":"DefinedTerm","name":"RLHF (Reinforcement Learning from Human Feedback)","url":"https://www.aiwisdom.dev/glossary/rlhf","definition":"A training technique that aligns LLM behaviour with human values using human preference annotations.","relatedTerms":["fine-tuning","lora","foundation-model"]},{"type":"DefinedTerm","name":"Semantic Kernel","url":"https://www.aiwisdom.dev/glossary/semantic-kernel","definition":"Microsoft's plugin-based SDK for building AI-powered applications in C#, Python, and Java — now in maintenance mode, superseded by Microsoft Agent Framework.","relatedTerms":["agent","tool-use","rag","planning-loop"]},{"type":"DefinedTerm","name":"Semantic Search","url":"https://www.aiwisdom.dev/glossary/semantic-search","definition":"Search based on meaning rather than keyword matching, using vector similarity of embeddings.","relatedTerms":["embedding","vector-database","cosine-similarity","hybrid-search"]},{"type":"DefinedTerm","name":"Short-term Memory (In-Context)","url":"https://www.aiwisdom.dev/glossary/short-term-memory","definition":"In-context information available to an agent within one session — limited by the model's context window.","relatedTerms":["context-window","long-term-memory","episodic-memory","chunking"]},{"type":"DefinedTerm","name":"Structured Output","url":"https://www.aiwisdom.dev/glossary/structured-output","definition":"Techniques for constraining LLM responses to follow a specific schema (JSON, XML, etc.).","relatedTerms":["function-calling","tool-use","json-mode"]},{"type":"DefinedTerm","name":"System Prompt","url":"https://www.aiwisdom.dev/glossary/system-prompt","definition":"Instructions provided to an LLM that define its behaviour, personality, and constraints.","relatedTerms":["prompt-engineering","prompt-injection","guardrails"]},{"type":"DefinedTerm","name":"Token","url":"https://www.aiwisdom.dev/glossary/token","definition":"The smallest unit of text processed by an LLM — roughly 3/4 of a word in English.","relatedTerms":["context-window","tokeniser","bpe"]},{"type":"DefinedTerm","name":"Token Economics","url":"https://www.aiwisdom.dev/glossary/token-economics","definition":"The discipline of managing LLM token consumption to control costs and stay within context limits.","relatedTerms":["token","context-window","inference","ai-gateway","semantic-cache"]},{"type":"DefinedTerm","name":"Tool Registry","url":"https://www.aiwisdom.dev/glossary/tool-registry","definition":"A catalog of tools an AI agent can discover and invoke, with metadata for selection and usage.","relatedTerms":["tool-use","mcp","agent","agentic-workflow"]},{"type":"DefinedTerm","name":"Tool Use (Function Calling)","url":"https://www.aiwisdom.dev/glossary/tool-use","definition":"Enabling LLMs to invoke external functions, APIs, or tools based on user intent.","relatedTerms":["agent","structured-output","function-calling"]},{"type":"DefinedTerm","name":"Transformer","url":"https://www.aiwisdom.dev/glossary/transformer","definition":"The neural network architecture behind modern LLMs, based on self-attention mechanisms.","relatedTerms":["attention","llm","foundation-model"]},{"type":"DefinedTerm","name":"Tree of Thought (ToT)","url":"https://www.aiwisdom.dev/glossary/tree-of-thought","definition":"A prompting strategy that explores multiple reasoning branches in parallel to find the best path to a solution.","relatedTerms":["chain-of-thought","prompt-engineering","react-prompting"]},{"type":"DefinedTerm","name":"Vector Database","url":"https://www.aiwisdom.dev/glossary/vector-database","definition":"A database optimised for storing and querying high-dimensional embedding vectors.","relatedTerms":["embedding","rag","semantic-search","hnsw"]},{"type":"DefinedTerm","name":"vLLM","url":"https://www.aiwisdom.dev/glossary/vllm","definition":"A high-throughput, memory-efficient LLM inference engine using PagedAttention for GPU KV-cache management.","relatedTerms":["model-serving","inference","quantisation"]}],"patterns":[{"type":"TechArticle","name":"Circuit Breaker for LLMs","url":"https://www.aiwisdom.dev/patterns/circuit-breaker-llm","summary":"Prevent cascading failures by temporarily stopping requests to a failing LLM provider and automatically recovering when it stabilises."},{"type":"TechArticle","name":"Context Compression","url":"https://www.aiwisdom.dev/patterns/context-compression","summary":"Compress conversation history or retrieved documents to fit within context window limits while preserving critical information."},{"type":"TechArticle","name":"Evaluation-Driven Development (EDD)","url":"https://www.aiwisdom.dev/patterns/evaluation-driven-development","summary":"Build eval suites before building AI features, then measure quality continuously — the test-driven development of AI systems."},{"type":"TechArticle","name":"Fallback Chain","url":"https://www.aiwisdom.dev/patterns/fallback-chain","summary":"Route LLM requests through a prioritised list of models/providers, falling back to alternatives on rate limits, errors, or latency SLO violations."},{"type":"TechArticle","name":"GraphRAG","url":"https://www.aiwisdom.dev/patterns/graphrag","summary":"Augment vector search RAG with a knowledge graph layer to enable multi-hop reasoning over entity relationships."},{"type":"TechArticle","name":"Guardrail Sandwich","url":"https://www.aiwisdom.dev/patterns/guardrail-sandwich","summary":"Wrap every LLM call with input validation and output validation layers to enforce safety, quality, and schema compliance."},{"type":"TechArticle","name":"Human-in-the-Loop (HITL)","url":"https://www.aiwisdom.dev/patterns/human-in-the-loop","summary":"Insert human approval checkpoints in agent workflows for high-stakes, irreversible, or high-uncertainty actions."},{"type":"TechArticle","name":"Intent Router","url":"https://www.aiwisdom.dev/patterns/intent-router","summary":"Classify user intent first, then route to specialised handlers — cheaper models for simple tasks, expensive models for complex ones."},{"type":"TechArticle","name":"Plan and Execute","url":"https://www.aiwisdom.dev/patterns/plan-and-execute","summary":"Separate planning (powerful model) from execution (cheaper models) for complex multi-step tasks, reducing cost while maintaining quality."},{"type":"TechArticle","name":"Prompt Versioning","url":"https://www.aiwisdom.dev/patterns/prompt-versioning","summary":"Manage prompts as code artifacts with version control, review, and rollback — treating prompt changes with the same rigour as code changes."},{"type":"TechArticle","name":"ReAct Agent","url":"https://www.aiwisdom.dev/patterns/react-agent","summary":"Interleave Thought → Action → Observation cycles so the LLM reasons before invoking tools and adapts based on results."},{"type":"TechArticle","name":"Reflection Pattern","url":"https://www.aiwisdom.dev/patterns/reflection-pattern","summary":"Have the agent critique its own output and iteratively refine it before returning the final result."},{"type":"TechArticle","name":"Semantic Cache","url":"https://www.aiwisdom.dev/patterns/semantic-cache","summary":"Cache LLM responses by semantic similarity of the prompt rather than exact string match, reducing cost and latency for similar queries."},{"type":"TechArticle","name":"Streaming Pipeline","url":"https://www.aiwisdom.dev/patterns/streaming-pipeline","summary":"Stream LLM tokens through a processing pipeline to the client, showing output progressively and enabling real-time safety checks."},{"type":"TechArticle","name":"Tenant Isolator","url":"https://www.aiwisdom.dev/patterns/tenant-isolator","summary":"Ensure strict data isolation between tenants in multi-tenant LLM applications through namespace partitioning and context boundaries."},{"type":"TechArticle","name":"Tiered Retrieval","url":"https://www.aiwisdom.dev/patterns/tiered-retrieval","summary":"Combine keyword search (BM25), semantic search (vectors), and re-ranking in a multi-stage pipeline for optimal RAG quality."},{"type":"TechArticle","name":"Token Budget Gate","url":"https://www.aiwisdom.dev/patterns/token-budget-gate","summary":"Enforce per-user, per-tenant, or per-request token limits to prevent runaway costs in multi-tenant LLM systems."}],"decisions":[{"type":"DecisionRecord","title":"ADR-013: Multi-Tenant Data Isolation Strategy for RAG Pipelines","url":"https://www.aiwisdom.dev/decisions/multi-tenant-data-isolation","status":"proposed","date":"2026-04-20","summary":"As we expand from a single-tenant learning platform to supporting teams and organisations, we need to isolate content data between tenants in our RAG pipeline. A data leak where Tenant A's proprietary content appears in Tenant B's responses would be a critical trust and compliance failure."},{"type":"DecisionRecord","title":"ADR-012: Content Database Migration — Legacy PostgreSQL to Neon","url":"https://www.aiwisdom.dev/decisions/content-database-migration-neon","status":"accepted","date":"2026-04-15","summary":"Our platform content (topics, domains, glossary terms, patterns, decisions) had been stored in a legacy PostgreSQL setup. As our content grows and we add AI features requiring vector search and serverless edge deployments, we need to re-evaluate our database choice. Key drivers: better Vercel Edge compatibility, cost predictability, and branching support for content staging."},{"type":"DecisionRecord","title":"ADR-011: Testing Strategy for LLM-Powered Features","url":"https://www.aiwisdom.dev/decisions/llm-testing-strategy","status":"accepted","date":"2026-04-08","summary":"Traditional unit and integration tests are insufficient for AI features because LLM outputs are non-deterministic. We need a testing strategy that gives us confidence in AI feature quality without requiring expensive human review of every change."},{"type":"DecisionRecord","title":"ADR-010: Tool Integration Protocol — MCP vs Custom Tool Calling","url":"https://www.aiwisdom.dev/decisions/mcp-vs-custom-tools","status":"accepted","date":"2026-04-01","summary":"Our AI agents need to call external tools — content search, user data lookup, web scraping, code execution. We must decide whether to build custom tool integrations using OpenAI function calling / Vercel AI SDK tools, or adopt the Model Context Protocol (MCP) as a standard integration layer."},{"type":"DecisionRecord","title":"ADR-009: Agent Memory Architecture — In-Context vs External Memory","url":"https://www.aiwisdom.dev/decisions/agent-memory-architecture","status":"accepted","date":"2026-03-20","summary":"Our AI agents need memory to maintain context across multi-step tasks and across user sessions. We need to decide how to implement short-term (within session) and long-term (cross-session) memory, balancing recall quality, cost, complexity, and privacy."},{"type":"DecisionRecord","title":"ADR-008: AI Observability Platform — LangSmith vs Phoenix vs Custom OpenTelemetry","url":"https://www.aiwisdom.dev/decisions/ai-observability-platform","status":"accepted","date":"2026-03-12","summary":"We need an observability platform to trace LLM calls, evaluate output quality, debug RAG retrieval, and monitor production AI quality over time. Without observability, we are flying blind on LLM quality, cost, and reliability."},{"type":"DecisionRecord","title":"ADR-007: LLM Streaming Architecture — SSE vs WebSocket vs Polling","url":"https://www.aiwisdom.dev/decisions/llm-streaming-architecture","status":"accepted","date":"2026-03-05","summary":"Our AI chat and content generation features need to stream LLM responses to users rather than waiting for full completion. We need to choose between Server-Sent Events (SSE), WebSockets, and polling for delivering streaming tokens from the LLM to the browser."},{"type":"DecisionRecord","title":"ADR-006: Agentic Workflow Framework — LangGraph vs Direct Implementation","url":"https://www.aiwisdom.dev/decisions/agentic-framework-selection","status":"accepted","date":"2026-02-28","summary":"We are building agentic features — multi-step AI workflows that plan, use tools, and iterate. We need to decide whether to use LangGraph (stateful graph-based orchestration), build directly on the model APIs with lightweight wrappers, or adopt another framework like AutoGen."},{"type":"DecisionRecord","title":"ADR-005: Embedding Model Selection","url":"https://www.aiwisdom.dev/decisions/embedding-model-selection","status":"accepted","date":"2026-02-15","summary":"We need an embedding model for our RAG pipeline. The model determines retrieval quality, vector dimensions (affects storage), and API cost."},{"type":"DecisionRecord","title":"ADR-004: Orchestration Framework — LangChain vs Semantic Kernel","url":"https://www.aiwisdom.dev/decisions/langchain-vs-semantic-kernel","status":"accepted","date":"2026-02-10","summary":"We need an orchestration framework for building RAG pipelines, agent workflows, and tool-calling chains. The two leading options are LangChain (Python/JS) and Semantic Kernel (C#/.NET/Python)."},{"type":"DecisionRecord","title":"ADR-003: Primary LLM Selection — GPT-4.1 vs Claude 3.5","url":"https://www.aiwisdom.dev/decisions/gpt4-vs-claude-primary-model","status":"accepted","date":"2026-02-01","summary":"We need to select a primary LLM for our platform's AI features (article assistance, search, code generation). The choice affects cost, quality, and vendor dependency."},{"type":"DecisionRecord","title":"ADR-002: Vector Database Selection","url":"https://www.aiwisdom.dev/decisions/vector-database-selection","status":"accepted","date":"2026-01-15","summary":"We need a vector database for our RAG pipeline. Options range from managed services (Pinecone, Weaviate Cloud) to integrated solutions (pgvector in our existing PostgreSQL)."},{"type":"DecisionRecord","title":"ADR-001: RAG vs Fine-Tuning for Domain Knowledge","url":"https://www.aiwisdom.dev/decisions/rag-vs-fine-tuning","status":"accepted","date":"2026-01-10","summary":"We need to give our LLM domain-specific knowledge about AI engineering tools, patterns, and best practices. The model must provide accurate, up-to-date answers grounded in our curated content."}]}}