{"authors":[{"name":"Serhii Smetanskyi"}],"description":"Serhii Smetanskyi, Software Test & Automation Engineer: a blog and knowledge base on QA, test automation, API testing and testing LLMs and AI agents.","feed_url":"https://serhiismetanskyi.com/feed_json_created.json","home_page_url":"https://serhiismetanskyi.com/","icon":null,"items":[{"authors":[],"content_html":"<h1>Jinja — Syntax Basics</h1>\n<p>All examples render with a default <code>Environment()</code> unless the text says otherwise:</p>\n<p>```python\nfrom jinja2 import Environment</p>\n<p>env = ...</p>","date_modified":"2026-09-29T00:00:00+00:00","date_published":"2026-09-29T00:00:00+00:00","id":"https://serhiismetanskyi.com/docs/libs/jinja/01-syntax-basics/","image":null,"tags":["jinja","libraries","python"],"title":"Jinja — Syntax Basics","url":"https://serhiismetanskyi.com/docs/libs/jinja/01-syntax-basics/"},{"authors":[],"content_html":"<h1>Jinja — Environment, Loaders &amp; Inheritance</h1>\n<h2>Environment</h2>\n<p><code>Environment</code> holds the configuration and the template cache. Create it once (module level or a...</p>","date_modified":"2026-09-29T00:00:00+00:00","date_published":"2026-09-29T00:00:00+00:00","id":"https://serhiismetanskyi.com/docs/libs/jinja/02-environment-inheritance/","image":null,"tags":["jinja","libraries","python"],"title":"Jinja — Environment, Loaders & Inheritance","url":"https://serhiismetanskyi.com/docs/libs/jinja/02-environment-inheritance/"},{"authors":[],"content_html":"<h1>Jinja — Filters, Escaping &amp; Security</h1>\n<h2>Custom Filters, Tests &amp; Globals</h2>\n<p>A filter is any Python function: the value before <code>|</code> is the first argument. A te...</p>","date_modified":"2026-09-29T00:00:00+00:00","date_published":"2026-09-29T00:00:00+00:00","id":"https://serhiismetanskyi.com/docs/libs/jinja/03-customization-security/","image":null,"tags":["appsec","jinja","libraries","python","security"],"title":"Jinja — Filters, Escaping & Security","url":"https://serhiismetanskyi.com/docs/libs/jinja/03-customization-security/"},{"authors":[],"content_html":"<h1>Jinja — QA Recipes</h1>\n<p>Each recipe uses a strict environment: <code>StrictUndefined</code>, <code>trim_blocks</code>, <code>lstrip_blocks</code>, <code>keep_trailing_newline</code>. Autoescape is on onl...</p>","date_modified":"2026-09-29T00:00:00+00:00","date_published":"2026-09-29T00:00:00+00:00","id":"https://serhiismetanskyi.com/docs/libs/jinja/04-qa-recipes/","image":null,"tags":["jinja","libraries","llm","pytest","python","test-automation","test-data"],"title":"Jinja — QA Recipes","url":"https://serhiismetanskyi.com/docs/libs/jinja/04-qa-recipes/"},{"authors":[],"content_html":"<h1>Jinja — Testing Templates</h1>\n<p>Templates are code: they have branches, loops and escaping rules, and they break on refactoring. Test them at three levels:</p>\n<p>| L...</p>","date_modified":"2026-09-29T00:00:00+00:00","date_published":"2026-09-29T00:00:00+00:00","id":"https://serhiismetanskyi.com/docs/libs/jinja/05-testing-templates/","image":null,"tags":["code-quality","jinja","libraries","pytest","python","testing"],"title":"Jinja — Testing Templates","url":"https://serhiismetanskyi.com/docs/libs/jinja/05-testing-templates/"},{"authors":[],"content_html":"<h1>Jinja — Templates for Python</h1>\n<p>Jinja (package <code>Jinja2</code>) is a text template engine: it takes a template with placeholders and logic, adds data from Python, a...</p>","date_modified":"2026-09-29T00:00:00+00:00","date_published":"2026-09-29T00:00:00+00:00","id":"https://serhiismetanskyi.com/docs/libs/jinja/","image":null,"tags":["jinja","libraries","python","test-automation","test-data"],"title":"Jinja — Templates for Python","url":"https://serhiismetanskyi.com/docs/libs/jinja/"},{"authors":[],"content_html":"<h1>LangGraph — Graph Design &amp; State</h1>\n<p>A LangGraph app is a <strong>state schema</strong> plus <strong>nodes</strong> that return partial updates plus <strong>edges</strong> that decide what runs nex...</p>","date_modified":"2026-09-29T00:00:00+00:00","date_published":"2026-09-29T00:00:00+00:00","id":"https://serhiismetanskyi.com/docs/libs/langgraph/01-graph-design-state/","image":null,"tags":["ai-agents","langgraph","libraries","llm","python"],"title":"LangGraph — Graph Design & State","url":"https://serhiismetanskyi.com/docs/libs/langgraph/01-graph-design-state/"},{"authors":[],"content_html":"<h1>LangGraph — Persistence, Memory &amp; Interrupts</h1>\n<p>A checkpointer turns a graph into a <strong>durable, resumable process</strong>: state is saved after every super-step per...</p>","date_modified":"2026-09-29T00:00:00+00:00","date_published":"2026-09-29T00:00:00+00:00","id":"https://serhiismetanskyi.com/docs/libs/langgraph/02-persistence-memory-interrupts/","image":null,"tags":["ai-agents","langgraph","libraries","llm","python"],"title":"LangGraph — Persistence, Memory & Interrupts","url":"https://serhiismetanskyi.com/docs/libs/langgraph/02-persistence-memory-interrupts/"},{"authors":[],"content_html":"<h1>LangGraph — Streaming &amp; Runtime</h1>\n<p>How to watch a graph while it runs, pass per-run dependencies into nodes, and make nodes resilient: retries, caching, time...</p>","date_modified":"2026-09-29T00:00:00+00:00","date_published":"2026-09-29T00:00:00+00:00","id":"https://serhiismetanskyi.com/docs/libs/langgraph/03-streaming-runtime/","image":null,"tags":["ai-agents","langgraph","libraries","llm","python"],"title":"LangGraph — Streaming & Runtime","url":"https://serhiismetanskyi.com/docs/libs/langgraph/03-streaming-runtime/"},{"authors":[],"content_html":"<h1>LangGraph — Multi-Agent Patterns</h1>\n<p>From a single tool-calling agent to supervisors and handoffs. Architecture-level trade-offs of multi-agent systems are co...</p>","date_modified":"2026-09-29T00:00:00+00:00","date_published":"2026-09-29T00:00:00+00:00","id":"https://serhiismetanskyi.com/docs/libs/langgraph/04-multi-agent-patterns/","image":null,"tags":["ai-agents","langchain","langgraph","libraries","llm","python"],"title":"LangGraph — Multi-Agent Patterns","url":"https://serhiismetanskyi.com/docs/libs/langgraph/04-multi-agent-patterns/"},{"authors":[],"content_html":"<h1>LangGraph — Testing LangGraph Apps</h1>\n<p>A LangGraph app is ordinary Python around a non-deterministic model. Test the deterministic parts (nodes, routing, stat...</p>","date_modified":"2026-09-29T00:00:00+00:00","date_published":"2026-09-29T00:00:00+00:00","id":"https://serhiismetanskyi.com/docs/libs/langgraph/05-testing/","image":null,"tags":["ai-agents","langgraph","libraries","llm","pytest","python","testing"],"title":"LangGraph — Testing LangGraph Apps","url":"https://serhiismetanskyi.com/docs/libs/langgraph/05-testing/"},{"authors":[],"content_html":"<h1>LangGraph — Observability &amp; Deployment</h1>\n<p>Every LangGraph run is a tree of runnables: graph → nodes → model calls → tools. Any LangChain-compatible tracer sh...</p>","date_modified":"2026-09-29T00:00:00+00:00","date_published":"2026-09-29T00:00:00+00:00","id":"https://serhiismetanskyi.com/docs/libs/langgraph/06-observability-deployment/","image":null,"tags":["ai-agents","deployment","langgraph","libraries","llm","observability","python"],"title":"LangGraph — Observability & Deployment","url":"https://serhiismetanskyi.com/docs/libs/langgraph/06-observability-deployment/"},{"authors":[],"content_html":"<h1>LangGraph — Stateful Agent Orchestration</h1>\n<p>Low-level framework for building agents and workflows as <strong>graphs of steps over a shared state</strong>: loops, branchin...</p>","date_modified":"2026-09-29T00:00:00+00:00","date_published":"2026-09-29T00:00:00+00:00","id":"https://serhiismetanskyi.com/docs/libs/langgraph/","image":null,"tags":["ai-agents","langchain","langgraph","libraries","llm","python"],"title":"LangGraph — Stateful Agent Orchestration","url":"https://serhiismetanskyi.com/docs/libs/langgraph/"},{"authors":[],"content_html":"<h1>SDD — Open Knowledge Format (OKF)</h1>\n<h2>What OKF Is</h2>\n<p><strong>Open Knowledge Format (OKF)</strong> is an open specification from Google Cloud for giving AI agents curated ...</p>","date_modified":"2026-09-29T00:00:00+00:00","date_published":"2026-09-29T00:00:00+00:00","id":"https://serhiismetanskyi.com/docs/spec-driven-development/05-open-knowledge-format/","image":null,"tags":["ai-agents","coding-agents","spec-driven-development"],"title":"SDD — Open Knowledge Format (OKF)","url":"https://serhiismetanskyi.com/docs/spec-driven-development/05-open-knowledge-format/"},{"authors":[],"content_html":"<h1>Jaeger — Setup &amp; Architecture</h1>\n<p>Jaeger v2 is a distribution of the OpenTelemetry Collector: one <code>jaeger</code> binary with OTel receivers and processors plus Jaeg...</p>","date_modified":"2026-09-29T00:00:00+00:00","date_published":"2026-09-29T00:00:00+00:00","id":"https://serhiismetanskyi.com/docs/tools/jaeger/01-setup-architecture/","image":null,"tags":["docker","jaeger","observability","opentelemetry","tools"],"title":"Jaeger — Setup & Architecture","url":"https://serhiismetanskyi.com/docs/tools/jaeger/01-setup-architecture/"},{"authors":[],"content_html":"<h1>Jaeger — Sending Traces from Python</h1>\n<p>Jaeger has no Python client of its own: services and tests use the OpenTelemetry SDK with an OTLP exporter. This page ...</p>","date_modified":"2026-09-29T00:00:00+00:00","date_published":"2026-09-29T00:00:00+00:00","id":"https://serhiismetanskyi.com/docs/tools/jaeger/02-sending-traces-python/","image":null,"tags":["jaeger","observability","opentelemetry","python","tools"],"title":"Jaeger — Sending Traces from Python","url":"https://serhiismetanskyi.com/docs/tools/jaeger/02-sending-traces-python/"},{"authors":[],"content_html":"<h1>Jaeger — UI &amp; Trace Analysis</h1>\n<p>The Jaeger UI at <code>http://localhost:16686</code> has four main views: <strong>Search</strong>, <strong>Trace</strong> (one trace in detail), <strong>Compare</strong>, and ...</p>","date_modified":"2026-09-29T00:00:00+00:00","date_published":"2026-09-29T00:00:00+00:00","id":"https://serhiismetanskyi.com/docs/tools/jaeger/03-ui-trace-analysis/","image":null,"tags":["jaeger","observability","opentelemetry","tools"],"title":"Jaeger — UI & Trace Analysis","url":"https://serhiismetanskyi.com/docs/tools/jaeger/03-ui-trace-analysis/"},{"authors":[],"content_html":"<h1>Jaeger — Testing, CI &amp; Troubleshooting</h1>\n<p>What Jaeger gives a test suite for a distributed system:</p>\n<ol>\n<li><strong>One trace per test</strong> — the test is the root span; ev...</li>\n</ol>","date_modified":"2026-09-29T00:00:00+00:00","date_published":"2026-09-29T00:00:00+00:00","id":"https://serhiismetanskyi.com/docs/tools/jaeger/04-testing-ci-troubleshooting/","image":null,"tags":["jaeger","observability","opentelemetry","pytest","testing","tools"],"title":"Jaeger — Testing, CI & Troubleshooting","url":"https://serhiismetanskyi.com/docs/tools/jaeger/04-testing-ci-troubleshooting/"},{"authors":[],"content_html":"<h1>Jaeger — Distributed Tracing for OpenTelemetry</h1>\n<p>Open-source (Apache 2.0, CNCF graduated) backend for distributed traces: it receives OTLP spans, stores the...</p>","date_modified":"2026-09-29T00:00:00+00:00","date_published":"2026-09-29T00:00:00+00:00","id":"https://serhiismetanskyi.com/docs/tools/jaeger/","image":null,"tags":["jaeger","observability","opentelemetry","tools"],"title":"Jaeger — Distributed Tracing for OpenTelemetry","url":"https://serhiismetanskyi.com/docs/tools/jaeger/"},{"authors":[],"content_html":"<h1>MLflow — Setup &amp; Architecture</h1>\n<p>The MLflow tracking server is one Python process (uvicorn with several workers) that serves the UI and the REST API. It keep...</p>","date_modified":"2026-09-29T00:00:00+00:00","date_published":"2026-09-29T00:00:00+00:00","id":"https://serhiismetanskyi.com/docs/tools/mlflow/01-setup-architecture/","image":null,"tags":["docker","mlflow","observability","tools"],"title":"MLflow — Setup & Architecture","url":"https://serhiismetanskyi.com/docs/tools/mlflow/01-setup-architecture/"},{"authors":[],"content_html":"<h1>MLflow — Experiment Tracking</h1>\n<p>Experiment tracking is the original core of MLflow: every execution is a <strong>run</strong> with its inputs (params), results (metrics),...</p>","date_modified":"2026-09-29T00:00:00+00:00","date_published":"2026-09-29T00:00:00+00:00","id":"https://serhiismetanskyi.com/docs/tools/mlflow/02-experiment-tracking/","image":null,"tags":["mlflow","python","testing","tools"],"title":"MLflow — Experiment Tracking","url":"https://serhiismetanskyi.com/docs/tools/mlflow/02-experiment-tracking/"},{"authors":[],"content_html":"<h1>MLflow — GenAI Tracing</h1>\n<p>MLflow Tracing records what an LLM app or agent did on one request: every LLM call, tool call, retrieval and custom step as a span,...</p>","date_modified":"2026-09-29T00:00:00+00:00","date_published":"2026-09-29T00:00:00+00:00","id":"https://serhiismetanskyi.com/docs/tools/mlflow/03-genai-tracing/","image":null,"tags":["llm","mlflow","observability","opentelemetry","tools"],"title":"MLflow — GenAI Tracing","url":"https://serhiismetanskyi.com/docs/tools/mlflow/03-genai-tracing/"},{"authors":[],"content_html":"<h1>MLflow — Evaluation &amp; Prompts</h1>\n<p><code>mlflow.genai.evaluate()</code> runs an app over a dataset, traces every call and applies <strong>scorers</strong> to the results. Each evaluat...</p>","date_modified":"2026-09-29T00:00:00+00:00","date_published":"2026-09-29T00:00:00+00:00","id":"https://serhiismetanskyi.com/docs/tools/mlflow/04-evaluation-prompts/","image":null,"tags":["deepeval","evaluation","llm","mlflow","tools"],"title":"MLflow — Evaluation & Prompts","url":"https://serhiismetanskyi.com/docs/tools/mlflow/04-evaluation-prompts/"},{"authors":[],"content_html":"<h1>MLflow — Testing, CI &amp; Model Registry</h1>\n<p>What MLflow gives an automated test suite for LLM apps:</p>\n<ol>\n<li><strong>One run per CI job</strong> — pass rate, eval scores and repo...</li>\n</ol>","date_modified":"2026-09-29T00:00:00+00:00","date_published":"2026-09-29T00:00:00+00:00","id":"https://serhiismetanskyi.com/docs/tools/mlflow/05-testing-ci-registry/","image":null,"tags":["ci-cd","deepeval","mlflow","pytest","testing","tools"],"title":"MLflow — Testing, CI & Model Registry","url":"https://serhiismetanskyi.com/docs/tools/mlflow/05-testing-ci-registry/"},{"authors":[],"content_html":"<h1>MLflow — Experiment Tracking, LLM Tracing &amp; Evaluation</h1>\n<p>Open-source (Apache 2.0, Linux Foundation) platform for the ML and GenAI lifecycle: experiment trac...</p>","date_modified":"2026-09-29T00:00:00+00:00","date_published":"2026-09-29T00:00:00+00:00","id":"https://serhiismetanskyi.com/docs/tools/mlflow/","image":null,"tags":["evaluation","llm","mlflow","observability","tools"],"title":"MLflow — Experiment Tracking, LLM Tracing &amp; Evaluation","url":"https://serhiismetanskyi.com/docs/tools/mlflow/"},{"authors":[{"name":"Serhii Smetanskyi"}],"content_html":"A pytest framework for testing voice AI agents through real calls: TTS caller, Whisper STT, audio and latency metrics, WER and LLM-as-a-judge evals.","date_modified":"2026-09-27T00:00:00+00:00","date_published":"2026-09-27T00:00:00+00:00","id":"https://serhiismetanskyi.com/blog/2026/09/27/how-to-test-voice-ai-agents-tts-stt-audio-metrics-and-llm-as-a-judge-evals-in-practice/","image":null,"tags":["AI Testing","ai-evaluation","ai-testing","ai-voice-agent","llm-evaluation"],"title":"How to Test Voice AI Agents: TTS, STT, Audio Metrics and LLM-as-a-Judge Evals in Practice","url":"https://serhiismetanskyi.com/blog/2026/09/27/how-to-test-voice-ai-agents-tts-stt-audio-metrics-and-llm-as-a-judge-evals-in-practice/"},{"authors":[],"content_html":"<h1>Guardrails AI — Guards &amp; Validators</h1>\n<h2>Core Objects</h2>\n<p>| Object | Role |\n|--------|------|\n| <code>Guard</code> / <code>AsyncGuard</code> | Container of validators; runs them on ...</p>","date_modified":"2026-09-27T00:00:00+00:00","date_published":"2026-09-27T00:00:00+00:00","id":"https://serhiismetanskyi.com/docs/libs/guardrails/01-guards-validators/","image":null,"tags":["guardrails","libraries","llm","python","security"],"title":"Guardrails AI — Guards & Validators","url":"https://serhiismetanskyi.com/docs/libs/guardrails/01-guards-validators/"},{"authors":[],"content_html":"<h1>Guardrails AI — Structured Output</h1>\n<h2>Why a Guard for JSON</h2>\n<p>A typed output contract has two layers — Guardrails checks both and reports them separately:</p>\n<p>|...</p>","date_modified":"2026-09-27T00:00:00+00:00","date_published":"2026-09-27T00:00:00+00:00","id":"https://serhiismetanskyi.com/docs/libs/guardrails/02-structured-output/","image":null,"tags":["guardrails","libraries","llm","python","security"],"title":"Guardrails AI — Structured Output","url":"https://serhiismetanskyi.com/docs/libs/guardrails/02-structured-output/"},{"authors":[],"content_html":"<h1>Guardrails AI — Input &amp; Output Safety</h1>\n<h2>Input vs Output Validation</h2>\n<p>| | Input (<code>on=\"messages\"</code>) | Output (<code>on=\"output\"</code>, default) |\n|---|---|---|\n| Runs ...</p>","date_modified":"2026-09-27T00:00:00+00:00","date_published":"2026-09-27T00:00:00+00:00","id":"https://serhiismetanskyi.com/docs/libs/guardrails/03-input-output-safety/","image":null,"tags":["guardrails","libraries","llm","python","security"],"title":"Guardrails AI — Input & Output Safety","url":"https://serhiismetanskyi.com/docs/libs/guardrails/03-input-output-safety/"},{"authors":[],"content_html":"<h1>Guardrails AI — Custom Validators</h1>\n<h2>Anatomy of a Validator</h2>\n<p>| Piece | Purpose |\n|-------|---------|\n| `@register_validator(name=\"org/name\", data_type=\"st...</p>","date_modified":"2026-09-27T00:00:00+00:00","date_published":"2026-09-27T00:00:00+00:00","id":"https://serhiismetanskyi.com/docs/libs/guardrails/04-custom-validators/","image":null,"tags":["guardrails","libraries","llm","python","security"],"title":"Guardrails AI — Custom Validators","url":"https://serhiismetanskyi.com/docs/libs/guardrails/04-custom-validators/"},{"authors":[],"content_html":"<h1>Guardrails AI — Server &amp; Production</h1>\n<h2>Library or Server?</h2>\n<p>| | In-process library | Guardrails server (<code>guardrails-api</code>) |\n|---|---|---|\n| Runs | Inside y...</p>","date_modified":"2026-09-27T00:00:00+00:00","date_published":"2026-09-27T00:00:00+00:00","id":"https://serhiismetanskyi.com/docs/libs/guardrails/05-server-production/","image":null,"tags":["guardrails","libraries","llm","python","security"],"title":"Guardrails AI — Server & Production","url":"https://serhiismetanskyi.com/docs/libs/guardrails/05-server-production/"},{"authors":[],"content_html":"<h1>Guardrails AI — Testing Guardrails</h1>\n<h2>What to Test</h2>\n<p>| Level | Question | Tooling | LLM calls |\n|-------|----------|---------|-----------|\n| Wiring | Right...</p>","date_modified":"2026-09-27T00:00:00+00:00","date_published":"2026-09-27T00:00:00+00:00","id":"https://serhiismetanskyi.com/docs/libs/guardrails/06-testing/","image":null,"tags":["guardrails","libraries","llm","pytest","python","security","testing"],"title":"Guardrails AI — Testing Guardrails","url":"https://serhiismetanskyi.com/docs/libs/guardrails/06-testing/"},{"authors":[],"content_html":"<h1>Guardrails AI — Input &amp; Output Guards for LLMs</h1>\n<p>Open-source Python framework (Apache-2.0) that wraps LLM calls with <strong>validators</strong>: checks run on the promp...</p>","date_modified":"2026-09-27T00:00:00+00:00","date_published":"2026-09-27T00:00:00+00:00","id":"https://serhiismetanskyi.com/docs/libs/guardrails/","image":null,"tags":["guardrails","libraries","llm","python","security"],"title":"Guardrails AI — Input &amp; Output Guards for LLMs","url":"https://serhiismetanskyi.com/docs/libs/guardrails/"},{"authors":[],"content_html":"<h1>LiteLLM — Completion &amp; Providers</h1>\n<h2>Model Names</h2>\n<p>The model string is <code>&lt;provider&gt;/&lt;model&gt;</code>. The provider prefix selects the adapter, auth and endpoint.</p>\n<p>| ...</p>","date_modified":"2026-09-27T00:00:00+00:00","date_published":"2026-09-27T00:00:00+00:00","id":"https://serhiismetanskyi.com/docs/libs/litellm/01-completion-providers/","image":null,"tags":["libraries","litellm","llm","python"],"title":"LiteLLM — Completion & Providers","url":"https://serhiismetanskyi.com/docs/libs/litellm/01-completion-providers/"},{"authors":[],"content_html":"<h1>LiteLLM — Tools &amp; Structured Output</h1>\n<h2>Function Calling</h2>\n<p>Tools are always described in the <strong>OpenAI format</strong>. LiteLLM converts them to Anthropic `tool_use...</p>","date_modified":"2026-09-27T00:00:00+00:00","date_published":"2026-09-27T00:00:00+00:00","id":"https://serhiismetanskyi.com/docs/libs/litellm/02-tools-structured-output/","image":null,"tags":["libraries","litellm","llm","pydantic","python"],"title":"LiteLLM — Tools & Structured Output","url":"https://serhiismetanskyi.com/docs/libs/litellm/02-tools-structured-output/"},{"authors":[],"content_html":"<h1>LiteLLM — Router &amp; Reliability</h1>\n<h2>Retries, Timeouts, Fallbacks per Call</h2>\n<p>```python\nresponse = completion(\n    model=\"anthropic/claude-sonnet-5\",\n    messa...</p>","date_modified":"2026-09-27T00:00:00+00:00","date_published":"2026-09-27T00:00:00+00:00","id":"https://serhiismetanskyi.com/docs/libs/litellm/03-router-reliability/","image":null,"tags":["libraries","litellm","llm","python"],"title":"LiteLLM — Router & Reliability","url":"https://serhiismetanskyi.com/docs/libs/litellm/03-router-reliability/"},{"authors":[],"content_html":"<h1>LiteLLM — Proxy (AI Gateway)</h1>\n<h2>What the Proxy Adds</h2>\n<p>```mermaid\nflowchart LR\n  A[\"Service A<br/>(OpenAI SDK, Python)\"] --&gt; P\n  B[\"Service B<br/>(TypeScrip...</p>","date_modified":"2026-09-27T00:00:00+00:00","date_published":"2026-09-27T00:00:00+00:00","id":"https://serhiismetanskyi.com/docs/libs/litellm/04-proxy-gateway/","image":null,"tags":["docker","libraries","litellm","llm","python"],"title":"LiteLLM — Proxy (AI Gateway)","url":"https://serhiismetanskyi.com/docs/libs/litellm/04-proxy-gateway/"},{"authors":[],"content_html":"<h1>LiteLLM — Observability &amp; Testing</h1>\n<h2>Built-in Callbacks</h2>\n<p>One line sends every call (input, output, tokens, cost, latency, errors) to an observability back...</p>","date_modified":"2026-09-27T00:00:00+00:00","date_published":"2026-09-27T00:00:00+00:00","id":"https://serhiismetanskyi.com/docs/libs/litellm/05-observability-testing/","image":null,"tags":["libraries","litellm","llm","pytest","python","testing"],"title":"LiteLLM — Observability & Testing","url":"https://serhiismetanskyi.com/docs/libs/litellm/05-observability-testing/"},{"authors":[],"content_html":"<h1>LiteLLM — One API for 100+ LLM Providers</h1>\n<p>Python SDK and AI gateway that calls OpenAI, Anthropic, Gemini, Bedrock, Azure, Ollama and many more through one ...</p>","date_modified":"2026-09-27T00:00:00+00:00","date_published":"2026-09-27T00:00:00+00:00","id":"https://serhiismetanskyi.com/docs/libs/litellm/","image":null,"tags":["libraries","litellm","llm","python"],"title":"LiteLLM — One API for 100+ LLM Providers","url":"https://serhiismetanskyi.com/docs/libs/litellm/"},{"authors":[],"content_html":"<h1>OpenTelemetry — Core Concepts</h1>\n<h2>Signals</h2>\n<p>OpenTelemetry defines independent signals that share one context and one resource model.</p>\n<p>| Signal | Answers | U...</p>","date_modified":"2026-09-27T00:00:00+00:00","date_published":"2026-09-27T00:00:00+00:00","id":"https://serhiismetanskyi.com/docs/libs/opentelemetry/01-core-concepts/","image":null,"tags":["libraries","observability","opentelemetry","python"],"title":"OpenTelemetry — Core Concepts","url":"https://serhiismetanskyi.com/docs/libs/opentelemetry/01-core-concepts/"},{"authors":[],"content_html":"<h1>OpenTelemetry — Tracing</h1>\n<h2>Tracer Provider Setup</h2>\n<p>Configure the SDK once, as early as possible in the entry point (<code>main.py</code>, app factory).</p>\n<p>```python</p>\n<h1>t...</h1>","date_modified":"2026-09-27T00:00:00+00:00","date_published":"2026-09-27T00:00:00+00:00","id":"https://serhiismetanskyi.com/docs/libs/opentelemetry/02-tracing/","image":null,"tags":["libraries","observability","opentelemetry","python"],"title":"OpenTelemetry — Tracing","url":"https://serhiismetanskyi.com/docs/libs/opentelemetry/02-tracing/"},{"authors":[],"content_html":"<h1>OpenTelemetry — Metrics &amp; Logs</h1>\n<h2>Meter Provider Setup</h2>\n<p>```python\nfrom opentelemetry import metrics\nfrom opentelemetry.exporter.otlp.proto.grpc.metric_exp...</p>","date_modified":"2026-09-27T00:00:00+00:00","date_published":"2026-09-27T00:00:00+00:00","id":"https://serhiismetanskyi.com/docs/libs/opentelemetry/03-metrics-logs/","image":null,"tags":["libraries","observability","opentelemetry","python"],"title":"OpenTelemetry — Metrics & Logs","url":"https://serhiismetanskyi.com/docs/libs/opentelemetry/03-metrics-logs/"},{"authors":[],"content_html":"<h1>OpenTelemetry — Auto-Instrumentation</h1>\n<h2>Two Ways to Instrument Libraries</h2>\n<p>| Approach | How | Pros | Cons |\n|----------|-----|------|------|\n| *<em>Zero-code</em>...</p>","date_modified":"2026-09-27T00:00:00+00:00","date_published":"2026-09-27T00:00:00+00:00","id":"https://serhiismetanskyi.com/docs/libs/opentelemetry/04-auto-instrumentation/","image":null,"tags":["fastapi","libraries","observability","opentelemetry","python"],"title":"OpenTelemetry — Auto-Instrumentation","url":"https://serhiismetanskyi.com/docs/libs/opentelemetry/04-auto-instrumentation/"},{"authors":[],"content_html":"<h1>OpenTelemetry — Collector &amp; Backends</h1>\n<h2>Why a Collector</h2>\n<p>| Without Collector | With Collector |\n|-------------------|----------------|\n| Every service hol...</p>","date_modified":"2026-09-27T00:00:00+00:00","date_published":"2026-09-27T00:00:00+00:00","id":"https://serhiismetanskyi.com/docs/libs/opentelemetry/05-collector-backends/","image":null,"tags":["docker","libraries","observability","opentelemetry","python"],"title":"OpenTelemetry — Collector & Backends","url":"https://serhiismetanskyi.com/docs/libs/opentelemetry/05-collector-backends/"},{"authors":[],"content_html":"<h1>OpenTelemetry — Testing with OpenTelemetry</h1>\n<p>Two different goals:</p>\n<ol>\n<li><strong>Test the instrumentation</strong> — unit tests assert that code emits the right spans, attr...</li>\n</ol>","date_modified":"2026-09-27T00:00:00+00:00","date_published":"2026-09-27T00:00:00+00:00","id":"https://serhiismetanskyi.com/docs/libs/opentelemetry/06-testing/","image":null,"tags":["libraries","observability","opentelemetry","pytest","python","testing"],"title":"OpenTelemetry — Testing with OpenTelemetry","url":"https://serhiismetanskyi.com/docs/libs/opentelemetry/06-testing/"},{"authors":[],"content_html":"<h1>OpenTelemetry — Python Observability</h1>\n<p>Vendor-neutral standard for traces, metrics and logs: one API in the code, any backend behind the Collector.</p>\n<h2>Inst...</h2>","date_modified":"2026-09-27T00:00:00+00:00","date_published":"2026-09-27T00:00:00+00:00","id":"https://serhiismetanskyi.com/docs/libs/opentelemetry/","image":null,"tags":["libraries","observability","opentelemetry","python"],"title":"OpenTelemetry — Python Observability","url":"https://serhiismetanskyi.com/docs/libs/opentelemetry/"},{"authors":[],"content_html":"<h1>Langfuse — Setup &amp; Architecture</h1>\n<h2>Cloud vs Self-Hosted</h2>\n<p>| Aspect | Langfuse Cloud | Self-hosted (OSS / Enterprise Edition) |\n|--------|----------------|-...</p>","date_modified":"2026-09-27T00:00:00+00:00","date_published":"2026-09-27T00:00:00+00:00","id":"https://serhiismetanskyi.com/docs/tools/langfuse/01-setup-architecture/","image":null,"tags":["langfuse","llm","observability","tools"],"title":"Langfuse — Setup & Architecture","url":"https://serhiismetanskyi.com/docs/tools/langfuse/01-setup-architecture/"},{"authors":[],"content_html":"<h1>Langfuse — Tracing with the Python SDK</h1>\n<p>The current Python SDK (<code>langfuse</code> <strong>v4</strong>) is built on OpenTelemetry: every Langfuse observation is an OTel span, e...</p>","date_modified":"2026-09-27T00:00:00+00:00","date_published":"2026-09-27T00:00:00+00:00","id":"https://serhiismetanskyi.com/docs/tools/langfuse/02-tracing-sdk/","image":null,"tags":["langfuse","llm","observability","tools"],"title":"Langfuse — Tracing with the Python SDK","url":"https://serhiismetanskyi.com/docs/tools/langfuse/02-tracing-sdk/"},{"authors":[],"content_html":"<h1>Langfuse — Prompt Management</h1>\n<p>Prompts live in Langfuse, not in the code. The application fetches a prompt <strong>by label</strong>, compiles variables in, and links th...</p>","date_modified":"2026-09-27T00:00:00+00:00","date_published":"2026-09-27T00:00:00+00:00","id":"https://serhiismetanskyi.com/docs/tools/langfuse/03-prompt-management/","image":null,"tags":["langfuse","llm","observability","tools"],"title":"Langfuse — Prompt Management","url":"https://serhiismetanskyi.com/docs/tools/langfuse/03-prompt-management/"},{"authors":[],"content_html":"<h1>Langfuse — Datasets &amp; Evaluations</h1>\n<p>Datasets are the LLM equivalent of a regression suite: fixed inputs with expected outputs. <strong>Experiments</strong> run your appl...</p>","date_modified":"2026-09-27T00:00:00+00:00","date_published":"2026-09-27T00:00:00+00:00","id":"https://serhiismetanskyi.com/docs/tools/langfuse/04-datasets-evaluations/","image":null,"tags":["langfuse","llm","observability","tools"],"title":"Langfuse — Datasets & Evaluations","url":"https://serhiismetanskyi.com/docs/tools/langfuse/04-datasets-evaluations/"},{"authors":[],"content_html":"<h1>Langfuse — Testing, CI &amp; Production</h1>\n<p>Three ways Langfuse shows up in a QA workflow:</p>\n<ol>\n<li><strong>Tests as traced traffic</strong> — every pytest case produces a trace, t...</li>\n</ol>","date_modified":"2026-09-27T00:00:00+00:00","date_published":"2026-09-27T00:00:00+00:00","id":"https://serhiismetanskyi.com/docs/tools/langfuse/05-testing-ci-production/","image":null,"tags":["langfuse","llm","observability","tools"],"title":"Langfuse — Testing, CI & Production","url":"https://serhiismetanskyi.com/docs/tools/langfuse/05-testing-ci-production/"},{"authors":[],"content_html":"<h1>Langfuse — LLM Tracing, Prompts &amp; Evals</h1>\n<p>Open-source LLM engineering platform: trace every LLM call, version prompts outside the code, build datasets from ...</p>","date_modified":"2026-09-27T00:00:00+00:00","date_published":"2026-09-27T00:00:00+00:00","id":"https://serhiismetanskyi.com/docs/tools/langfuse/","image":null,"tags":["langfuse","llm","observability","tools"],"title":"Langfuse — LLM Tracing, Prompts &amp; Evals","url":"https://serhiismetanskyi.com/docs/tools/langfuse/"},{"authors":[],"content_html":"<h1>Phoenix — Setup &amp; Architecture</h1>\n<p>Phoenix is one Python process (FastAPI + gRPC) that serves the UI, the REST/GraphQL API and the OTLP collector, backed by S...</p>","date_modified":"2026-09-27T00:00:00+00:00","date_published":"2026-09-27T00:00:00+00:00","id":"https://serhiismetanskyi.com/docs/tools/phoenix/01-setup-architecture/","image":null,"tags":["llm","observability","phoenix","tools"],"title":"Phoenix — Setup & Architecture","url":"https://serhiismetanskyi.com/docs/tools/phoenix/01-setup-architecture/"},{"authors":[],"content_html":"<h1>Phoenix — Tracing &amp; Instrumentation</h1>\n<p>Three layers, usually combined: <code>register()</code> configures OpenTelemetry, OpenInference <strong>instrumentors</strong> trace SDK calls...</p>","date_modified":"2026-09-27T00:00:00+00:00","date_published":"2026-09-27T00:00:00+00:00","id":"https://serhiismetanskyi.com/docs/tools/phoenix/02-tracing-instrumentation/","image":null,"tags":["llm","observability","phoenix","tools"],"title":"Phoenix — Tracing & Instrumentation","url":"https://serhiismetanskyi.com/docs/tools/phoenix/02-tracing-instrumentation/"},{"authors":[],"content_html":"<h1>Phoenix — Datasets &amp; Experiments</h1>\n<p>A <strong>dataset</strong> is a versioned set of examples (<code>input</code>, <code>output</code> = expected, <code>metadata</code>). An <strong>experiment</strong> runs a task ov...</p>","date_modified":"2026-09-27T00:00:00+00:00","date_published":"2026-09-27T00:00:00+00:00","id":"https://serhiismetanskyi.com/docs/tools/phoenix/03-datasets-experiments/","image":null,"tags":["llm","observability","phoenix","tools"],"title":"Phoenix — Datasets & Experiments","url":"https://serhiismetanskyi.com/docs/tools/phoenix/03-datasets-experiments/"},{"authors":[],"content_html":"<h1>Phoenix — Evaluations</h1>\n<p><code>arize-phoenix-evals</code> is a standalone library: evaluators run in <strong>your</strong> process (notebook, pytest, CI job), and their scores go to...</p>","date_modified":"2026-09-27T00:00:00+00:00","date_published":"2026-09-27T00:00:00+00:00","id":"https://serhiismetanskyi.com/docs/tools/phoenix/04-evaluations/","image":null,"tags":["llm","observability","phoenix","tools"],"title":"Phoenix — Evaluations","url":"https://serhiismetanskyi.com/docs/tools/phoenix/04-evaluations/"},{"authors":[],"content_html":"<h1>Phoenix — Testing, CI &amp; Production</h1>\n<p>Three ways Phoenix helps a test suite for an LLM system:</p>\n<ol>\n<li><strong>Trace test runs</strong> — every test gets its own session in P...</li>\n</ol>","date_modified":"2026-09-27T00:00:00+00:00","date_published":"2026-09-27T00:00:00+00:00","id":"https://serhiismetanskyi.com/docs/tools/phoenix/05-testing-ci-production/","image":null,"tags":["llm","observability","phoenix","tools"],"title":"Phoenix — Testing, CI & Production","url":"https://serhiismetanskyi.com/docs/tools/phoenix/05-testing-ci-production/"},{"authors":[],"content_html":"<h1>Arize Phoenix — LLM Tracing &amp; Evaluation</h1>\n<p>Open-source (Elastic License 2.0) platform for tracing, evaluating and testing LLM applications: agents, RAG pipe...</p>","date_modified":"2026-09-27T00:00:00+00:00","date_published":"2026-09-27T00:00:00+00:00","id":"https://serhiismetanskyi.com/docs/tools/phoenix/","image":null,"tags":["llm","observability","phoenix","tools"],"title":"Arize Phoenix — LLM Tracing &amp; Evaluation","url":"https://serhiismetanskyi.com/docs/tools/phoenix/"},{"authors":[],"content_html":"<h1>Agent Harness — Concepts &amp; Components</h1>\n<h2>What Is an Agent Harness</h2>\n<p>An <strong>agent harness</strong> (also called a <em>scaffold</em>) is the system that lets a model act as ...</p>","date_modified":"2026-09-25T00:00:00+00:00","date_published":"2026-09-25T00:00:00+00:00","id":"https://serhiismetanskyi.com/docs/ai-harness/01-agent-harness-concepts/","image":null,"tags":["ai-agents","harness","llm"],"title":"Agent Harness — Concepts & Components","url":"https://serhiismetanskyi.com/docs/ai-harness/01-agent-harness-concepts/"},{"authors":[],"content_html":"<h1>Agent Harness — Patterns &amp; Anti-Patterns</h1>\n<p><strong>Harness engineering</strong> is the practice of improving an agent by changing its harness — prompts, tools,\ncontext, ...</p>","date_modified":"2026-09-25T00:00:00+00:00","date_published":"2026-09-25T00:00:00+00:00","id":"https://serhiismetanskyi.com/docs/ai-harness/02-agent-harness-patterns/","image":null,"tags":["ai-agents","context-engineering","harness","llm"],"title":"Agent Harness — Patterns & Anti-Patterns","url":"https://serhiismetanskyi.com/docs/ai-harness/02-agent-harness-patterns/"},{"authors":[],"content_html":"<h1>Eval Harness — Concepts &amp; Metrics</h1>\n<h2>What Is an Evaluation Harness</h2>\n<p>An <strong>evaluation harness</strong> is the infrastructure that runs evals end to end:\nit gives t...</p>","date_modified":"2026-09-25T00:00:00+00:00","date_published":"2026-09-25T00:00:00+00:00","id":"https://serhiismetanskyi.com/docs/ai-harness/03-eval-harness-concepts/","image":null,"tags":["evaluation","harness","llm","metrics","testing"],"title":"Eval Harness — Concepts & Metrics","url":"https://serhiismetanskyi.com/docs/ai-harness/03-eval-harness-concepts/"},{"authors":[],"content_html":"<h1>Eval Harness — Tools, Testing &amp; CI</h1>\n<h2>Tool Landscape</h2>\n<p>| Tool | Best for | Style | License |\n|---|---|---|---|\n| <strong>EleutherAI lm-evaluation-harness</strong> | Aca...</p>","date_modified":"2026-09-25T00:00:00+00:00","date_published":"2026-09-25T00:00:00+00:00","id":"https://serhiismetanskyi.com/docs/ai-harness/04-eval-harness-tools-ci/","image":null,"tags":["ci-cd","evaluation","harness","llm","testing"],"title":"Eval Harness — Tools, Testing & CI","url":"https://serhiismetanskyi.com/docs/ai-harness/04-eval-harness-tools-ci/"},{"authors":[],"content_html":"<h1>Building a Harness with Jev (System One Models)</h1>\n<h2>The Problem: Every Decision Is a Model Call</h2>\n<p>A typical agent loop asks the LLM for <em>every</em> small decisi...</p>","date_modified":"2026-09-25T00:00:00+00:00","date_published":"2026-09-25T00:00:00+00:00","id":"https://serhiismetanskyi.com/docs/ai-harness/05-jev-system-one-harness/","image":null,"tags":["ai-agents","harness","langchain","llm"],"title":"Building a Harness with Jev","url":"https://serhiismetanskyi.com/docs/ai-harness/05-jev-system-one-harness/"},{"authors":[],"content_html":"<h1>AI Harness</h1>\n<p>A <strong>harness</strong> is everything around the model that turns it into a working system.\nThe word is used for two different things, and both matter to...</p>","date_modified":"2026-09-25T00:00:00+00:00","date_published":"2026-09-25T00:00:00+00:00","id":"https://serhiismetanskyi.com/docs/ai-harness/","image":null,"tags":["ai-agents","evaluation","harness","llm"],"title":"AI Harness","url":"https://serhiismetanskyi.com/docs/ai-harness/"},{"authors":[],"content_html":"<h1>REST: The HTTP QUERY Method (RFC 10008)</h1>\n<p><strong>QUERY</strong> is a new HTTP method for <strong>safe, idempotent requests with a body</strong>. It was published as\n[RFC 10008](http...</p>","date_modified":"2026-09-25T00:00:00+00:00","date_published":"2026-09-25T00:00:00+00:00","id":"https://serhiismetanskyi.com/docs/api-architectures/01-rest/08-query-method/","image":null,"tags":["api","api-testing","architecture","rest"],"title":"REST: The HTTP QUERY Method (RFC 10008)","url":"https://serhiismetanskyi.com/docs/api-architectures/01-rest/08-query-method/"},{"authors":[],"content_html":"<h1>uv — Scripts &amp; Tools</h1>\n<h2>uv run</h2>\n<p>```bash\nuv run python main.py          # run in project venv (auto-syncs deps)\nuv run pytest                  # run instal...</p>","date_modified":"2026-09-25T00:00:00+00:00","date_published":"2026-09-25T00:00:00+00:00","id":"https://serhiismetanskyi.com/docs/libs/uv/02-scripts-tools/","image":null,"tags":["libraries","python","uv"],"title":"uv — Scripts & Tools","url":"https://serhiismetanskyi.com/docs/libs/uv/02-scripts-tools/"},{"authors":[],"content_html":"<h1>uv — Python &amp; Environments</h1>\n<h2>Python Versions</h2>\n<p>```bash\nuv python install 3.13          # download + install\nuv python install 3.12 3.13    # multiple vers...</p>","date_modified":"2026-09-25T00:00:00+00:00","date_published":"2026-09-25T00:00:00+00:00","id":"https://serhiismetanskyi.com/docs/libs/uv/03-python-environments/","image":null,"tags":["libraries","python","uv"],"title":"uv — Python & Environments","url":"https://serhiismetanskyi.com/docs/libs/uv/03-python-environments/"},{"authors":[],"content_html":"<h1>uv — Workspaces &amp; Docker</h1>\n<h2>Workspaces (Monorepo)</h2>\n<p>```toml</p>\n<h1>root pyproject.toml</h1>\n<p>[tool.uv.workspace]\nmembers = [\"packages/<em>\", \"services/</em>\"]\n```</p>\n<p>```bash\nu...</p>","date_modified":"2026-09-25T00:00:00+00:00","date_published":"2026-09-25T00:00:00+00:00","id":"https://serhiismetanskyi.com/docs/libs/uv/04-workspaces-docker/","image":null,"tags":["libraries","python","uv"],"title":"uv — Workspaces & Docker","url":"https://serhiismetanskyi.com/docs/libs/uv/04-workspaces-docker/"},{"authors":[],"content_html":"<h1>uv — Build &amp; Publish</h1>\n<h2>Build Backend</h2>\n<p><code>toml\n[build-system]\nrequires = [\"uv_build&gt;=0.11,&lt;0.12\"]\nbuild-backend = \"uv_build\"</code></p>\n<p>| Backend | Best for |\n|...</p>","date_modified":"2026-09-25T00:00:00+00:00","date_published":"2026-09-25T00:00:00+00:00","id":"https://serhiismetanskyi.com/docs/libs/uv/05-build-publish/","image":null,"tags":["libraries","python","uv"],"title":"uv — Build & Publish","url":"https://serhiismetanskyi.com/docs/libs/uv/05-build-publish/"},{"authors":[],"content_html":"<h1>SDD — Concepts &amp; Workflow</h1>\n<h2>What Is Spec-Driven Development</h2>\n<p>Thoughtworks Technology Radar describes SDD as workflows that \"begin with a structured funct...</p>","date_modified":"2026-09-25T00:00:00+00:00","date_published":"2026-09-25T00:00:00+00:00","id":"https://serhiismetanskyi.com/docs/spec-driven-development/01-concepts-workflow/","image":null,"tags":["ai-agents","coding-agents","spec-driven-development"],"title":"SDD — Concepts & Workflow","url":"https://serhiismetanskyi.com/docs/spec-driven-development/01-concepts-workflow/"},{"authors":[],"content_html":"<h1>SDD — Writing Good Specs</h1>\n<p>A spec is only as useful as it is <strong>clear, testable and short enough to review</strong>.\nThe agent reads it literally — every vague sent...</p>","date_modified":"2026-09-25T00:00:00+00:00","date_published":"2026-09-25T00:00:00+00:00","id":"https://serhiismetanskyi.com/docs/spec-driven-development/02-writing-specs/","image":null,"tags":["coding-agents","spec-driven-development","test-design"],"title":"SDD — Writing Good Specs","url":"https://serhiismetanskyi.com/docs/spec-driven-development/02-writing-specs/"},{"authors":[],"content_html":"<h1>SDD — Tools</h1>\n<h2>Overview</h2>\n<p>| Tool | Type | Workflow | Best for | License |\n|---|---|---|---|---|\n| <strong>GitHub Spec Kit</strong> | CLI + agent commands for 50+ agents...</p>","date_modified":"2026-09-25T00:00:00+00:00","date_published":"2026-09-25T00:00:00+00:00","id":"https://serhiismetanskyi.com/docs/spec-driven-development/03-tools/","image":null,"tags":["coding-agents","spec-driven-development","tools"],"title":"SDD — Tools","url":"https://serhiismetanskyi.com/docs/spec-driven-development/03-tools/"},{"authors":[],"content_html":"<h1>SDD — QA, Testing &amp; Best Practices</h1>\n<h2>Why SDD Matters for QA</h2>\n<p>In spec-driven development the spec already contains what QA needs most: **acceptance criter...</p>","date_modified":"2026-09-25T00:00:00+00:00","date_published":"2026-09-25T00:00:00+00:00","id":"https://serhiismetanskyi.com/docs/spec-driven-development/04-qa-testing-best-practices/","image":null,"tags":["qa","spec-driven-development","testing"],"title":"SDD — QA, Testing & Best Practices","url":"https://serhiismetanskyi.com/docs/spec-driven-development/04-qa-testing-best-practices/"},{"authors":[],"content_html":"<h1>Spec-Driven Development</h1>\n<p><strong>Spec-driven development (SDD)</strong> is a way of working with AI coding agents where you start from a\nstructured, behaviour-oriented ...</p>","date_modified":"2026-09-25T00:00:00+00:00","date_published":"2026-09-25T00:00:00+00:00","id":"https://serhiismetanskyi.com/docs/spec-driven-development/","image":null,"tags":["ai-agents","coding-agents","spec-driven-development"],"title":"Spec-Driven Development","url":"https://serhiismetanskyi.com/docs/spec-driven-development/"},{"authors":[],"content_html":"<h1>SQLAlchemy — Alembic Migrations</h1>\n<h2>Setup</h2>\n<p>```bash\nuv add alembic\nalembic init alembic           # sync template\nalembic init -t async alembic  # async tem...</p>","date_modified":"2026-09-24T00:00:00+00:00","date_published":"2026-09-24T00:00:00+00:00","id":"https://serhiismetanskyi.com/docs/libs/sqlalchemy/05-alembic-migrations/","image":null,"tags":["databases","libraries","python","sqlalchemy"],"title":"SQLAlchemy — Alembic Migrations","url":"https://serhiismetanskyi.com/docs/libs/sqlalchemy/05-alembic-migrations/"},{"authors":[],"content_html":"<h1>SQLAlchemy — Advanced Recipes</h1>\n<h2>Hybrid Properties</h2>\n<p>Attributes that behave differently at instance level (Python) and class level (SQL).</p>\n<p>```python\nfrom s...</p>","date_modified":"2026-09-24T00:00:00+00:00","date_published":"2026-09-24T00:00:00+00:00","id":"https://serhiismetanskyi.com/docs/libs/sqlalchemy/06-advanced-recipes/","image":null,"tags":["databases","libraries","python","sqlalchemy"],"title":"SQLAlchemy — Advanced Recipes","url":"https://serhiismetanskyi.com/docs/libs/sqlalchemy/06-advanced-recipes/"},{"authors":[],"content_html":"<h1>uv — Projects &amp; Dependencies</h1>\n<h2>Create Project</h2>\n<p>```bash\nuv init my-api              # new directory\nuv init                     # current directory\nuv ini...</p>","date_modified":"2026-09-24T00:00:00+00:00","date_published":"2026-09-24T00:00:00+00:00","id":"https://serhiismetanskyi.com/docs/libs/uv/01-projects-dependencies/","image":null,"tags":["libraries","python","uv"],"title":"uv — Projects & Dependencies","url":"https://serhiismetanskyi.com/docs/libs/uv/01-projects-dependencies/"},{"authors":[],"content_html":"<h1>uv — Fast Python Project Manager</h1>\n<p>Rust-based tool that replaces pip, poetry, pyenv, pipx, virtualenv, twine. 10–100x faster than pip.</p>\n<h2>Installation</h2>\n<p>```...</p>","date_modified":"2026-09-24T00:00:00+00:00","date_published":"2026-09-24T00:00:00+00:00","id":"https://serhiismetanskyi.com/docs/libs/uv/","image":null,"tags":["libraries","python","uv"],"title":"uv — Fast Python Project Manager","url":"https://serhiismetanskyi.com/docs/libs/uv/"},{"authors":[],"content_html":"<h1>SQLAlchemy — Engine &amp; Models</h1>\n<h2>Engine Configuration</h2>\n<p>```python\nfrom sqlalchemy import create_engine</p>\n<p>engine = create_engine(\n    \"postgresql+psycopg2://u...</p>","date_modified":"2026-09-23T00:00:00+00:00","date_published":"2026-09-23T00:00:00+00:00","id":"https://serhiismetanskyi.com/docs/libs/sqlalchemy/01-engine-models/","image":null,"tags":["databases","libraries","python","sqlalchemy"],"title":"SQLAlchemy — Engine & Models","url":"https://serhiismetanskyi.com/docs/libs/sqlalchemy/01-engine-models/"},{"authors":[],"content_html":"<h1>SQLAlchemy — Relationships &amp; Queries</h1>\n<h2>One-to-Many Relationship</h2>\n<p>```python\nfrom sqlalchemy import ForeignKey, String, select\nfrom sqlalchemy.orm import M...</p>","date_modified":"2026-09-23T00:00:00+00:00","date_published":"2026-09-23T00:00:00+00:00","id":"https://serhiismetanskyi.com/docs/libs/sqlalchemy/02-relationships-queries/","image":null,"tags":["databases","libraries","python","sqlalchemy"],"title":"SQLAlchemy — Relationships & Queries","url":"https://serhiismetanskyi.com/docs/libs/sqlalchemy/02-relationships-queries/"},{"authors":[],"content_html":"<h1>SQLAlchemy — Sessions &amp; Transactions</h1>\n<h2>Session Basics</h2>\n<p>```python\nfrom sqlalchemy import create_engine\nfrom sqlalchemy.orm import Session</p>\n<p>engine = create...</p>","date_modified":"2026-09-23T00:00:00+00:00","date_published":"2026-09-23T00:00:00+00:00","id":"https://serhiismetanskyi.com/docs/libs/sqlalchemy/03-sessions-transactions/","image":null,"tags":["databases","libraries","python","sqlalchemy"],"title":"SQLAlchemy — Sessions & Transactions","url":"https://serhiismetanskyi.com/docs/libs/sqlalchemy/03-sessions-transactions/"},{"authors":[],"content_html":"<h1>SQLAlchemy — Async Patterns</h1>\n<h2>Async Engine &amp; Session</h2>\n<p>```python\nfrom sqlalchemy.ext.asyncio import AsyncSession, async_sessionmaker, create_async_engine\n...</p>","date_modified":"2026-09-23T00:00:00+00:00","date_published":"2026-09-23T00:00:00+00:00","id":"https://serhiismetanskyi.com/docs/libs/sqlalchemy/04-async-patterns/","image":null,"tags":["databases","libraries","python","sqlalchemy"],"title":"SQLAlchemy — Async Patterns","url":"https://serhiismetanskyi.com/docs/libs/sqlalchemy/04-async-patterns/"},{"authors":[],"content_html":"<h1>Requests — Fundamentals &amp; Methods</h1>\n<h2>Installation</h2>\n<p><code>bash\nuv add requests</code></p>\n<hr />\n<h2>GET — Read Data</h2>\n<h3>Basic GET</h3>\n<p>```python\nimport requests</p>\n<p>r = req...</p>","date_modified":"2026-09-22T00:00:00+00:00","date_published":"2026-09-22T00:00:00+00:00","id":"https://serhiismetanskyi.com/docs/libs/requests-http/01-fundamentals-methods/","image":null,"tags":["api-testing","libraries","python","requests"],"title":"Requests — Fundamentals & Methods","url":"https://serhiismetanskyi.com/docs/libs/requests-http/01-fundamentals-methods/"},{"authors":[],"content_html":"<h1>Requests — Advanced Patterns &amp; Best Practices</h1>\n<h2>Authentication</h2>\n<h3>Basic Auth</h3>\n<p>```python\nimport requests\nfrom requests.auth import HTTPBasicAuth</p>\n<h1>two ...</h1>","date_modified":"2026-09-22T00:00:00+00:00","date_published":"2026-09-22T00:00:00+00:00","id":"https://serhiismetanskyi.com/docs/libs/requests-http/02-advanced-patterns/","image":null,"tags":["api-testing","libraries","python","requests"],"title":"Requests — Advanced Patterns & Best Practices","url":"https://serhiismetanskyi.com/docs/libs/requests-http/02-advanced-patterns/"},{"authors":[],"content_html":"<h1>Requests — Python HTTP Client</h1>\n<p>Standard synchronous HTTP client for Python. Simple API, connection pooling, auth, retries.</p>\n<blockquote>\n<p>For async or HTTP/2, use `htt...</p>\n</blockquote>","date_modified":"2026-09-22T00:00:00+00:00","date_published":"2026-09-22T00:00:00+00:00","id":"https://serhiismetanskyi.com/docs/libs/requests-http/","image":null,"tags":["api-testing","libraries","python","requests"],"title":"Requests — Python HTTP Client","url":"https://serhiismetanskyi.com/docs/libs/requests-http/"},{"authors":[],"content_html":"<h1>SQLAlchemy — Python ORM &amp; SQL Toolkit</h1>\n<p>Modern database toolkit for Python. Two layers: <strong>Core</strong> (SQL expression language) and <strong>ORM</strong> (object-relational ma...</p>","date_modified":"2026-09-22T00:00:00+00:00","date_published":"2026-09-22T00:00:00+00:00","id":"https://serhiismetanskyi.com/docs/libs/sqlalchemy/","image":null,"tags":["databases","libraries","python","sqlalchemy"],"title":"SQLAlchemy — Python ORM &amp; SQL Toolkit","url":"https://serhiismetanskyi.com/docs/libs/sqlalchemy/"},{"authors":[],"content_html":"<h1>Pytest Playbook — Real-World Recipes</h1>\n<p>Copy-paste templates for common testing scenarios.</p>\n<h2>1) FastAPI Endpoint Test</h2>\n<p>```python\nimport pytest\nfrom httpx i...</p>","date_modified":"2026-09-21T00:00:00+00:00","date_published":"2026-09-21T00:00:00+00:00","id":"https://serhiismetanskyi.com/docs/libs/pytest/02-practical-playbooks/01-real-world-recipes/","image":null,"tags":["libraries","pytest","python","testing"],"title":"Pytest Playbook — Real-World Recipes","url":"https://serhiismetanskyi.com/docs/libs/pytest/02-practical-playbooks/01-real-world-recipes/"},{"authors":[],"content_html":"<h1>Pytest Playbook — Test Data Factories</h1>\n<p>Patterns for creating consistent, readable test data.</p>\n<h2>Minimal Valid Object Rule</h2>\n<p>Every factory should return the...</p>","date_modified":"2026-09-21T00:00:00+00:00","date_published":"2026-09-21T00:00:00+00:00","id":"https://serhiismetanskyi.com/docs/libs/pytest/02-practical-playbooks/02-test-data-factories/","image":null,"tags":["libraries","pytest","python","testing"],"title":"Pytest Playbook — Test Data Factories","url":"https://serhiismetanskyi.com/docs/libs/pytest/02-practical-playbooks/02-test-data-factories/"},{"authors":[],"content_html":"<h1>Pytest Playbook — Flakiness Debugging</h1>\n<p>Workflow for tests that pass locally but fail randomly in CI.</p>\n<h2>Common Causes</h2>\n<p>| Cause | Symptom |\n|-------|------...</p>","date_modified":"2026-09-21T00:00:00+00:00","date_published":"2026-09-21T00:00:00+00:00","id":"https://serhiismetanskyi.com/docs/libs/pytest/02-practical-playbooks/03-flakiness-debugging/","image":null,"tags":["libraries","pytest","python","testing"],"title":"Pytest Playbook — Flakiness Debugging","url":"https://serhiismetanskyi.com/docs/libs/pytest/02-practical-playbooks/03-flakiness-debugging/"},{"authors":[],"content_html":"<h1>Pytest Playbook — Config Template</h1>\n<p>Production-ready <code>pyproject.toml</code> baseline for Python projects.</p>\n<h2>Template</h2>\n<p>```toml\n[tool.pytest.ini_options]\ntestpath...</p>","date_modified":"2026-09-21T00:00:00+00:00","date_published":"2026-09-21T00:00:00+00:00","id":"https://serhiismetanskyi.com/docs/libs/pytest/02-practical-playbooks/04-pytest-config-template/","image":null,"tags":["libraries","pytest","python","testing"],"title":"Pytest Playbook — Config Template","url":"https://serhiismetanskyi.com/docs/libs/pytest/02-practical-playbooks/04-pytest-config-template/"},{"authors":[],"content_html":"<h1>Pytest — Fundamentals</h1>\n<h2>Test Discovery</h2>\n<p>Pytest auto-discovers tests by convention:</p>\n<p>| Convention | Pattern |\n|------------|---------|\n| File names | `tes...</p>","date_modified":"2026-09-20T00:00:00+00:00","date_published":"2026-09-20T00:00:00+00:00","id":"https://serhiismetanskyi.com/docs/libs/pytest/01-core-guides/01-fundamentals/","image":null,"tags":["libraries","pytest","python","testing"],"title":"Pytest — Fundamentals","url":"https://serhiismetanskyi.com/docs/libs/pytest/01-core-guides/01-fundamentals/"},{"authors":[],"content_html":"<h1>Pytest — Advanced Patterns &amp; Best Practices</h1>\n<h2>Mocking</h2>\n<h3>unittest.mock (built-in)</h3>\n<p>```python\nfrom unittest.mock import MagicMock, patch</p>\n<p>def test_fetc...</p>","date_modified":"2026-09-20T00:00:00+00:00","date_published":"2026-09-20T00:00:00+00:00","id":"https://serhiismetanskyi.com/docs/libs/pytest/01-core-guides/02-advanced-patterns/","image":null,"tags":["libraries","pytest","python","testing"],"title":"Pytest — Advanced Patterns & Best Practices","url":"https://serhiismetanskyi.com/docs/libs/pytest/01-core-guides/02-advanced-patterns/"},{"authors":[],"content_html":"<h1>Core Guides</h1>\n<p>Core Guides covers practical usage patterns for core Python libraries and engineering tooling, with focused guides on Fundamentals, Advanced P...</p>","date_modified":"2026-09-20T00:00:00+00:00","date_published":"2026-09-20T00:00:00+00:00","id":"https://serhiismetanskyi.com/docs/libs/pytest/01-core-guides/","image":null,"tags":["libraries","pytest","python","testing"],"title":"Core Guides","url":"https://serhiismetanskyi.com/docs/libs/pytest/01-core-guides/"},{"authors":[],"content_html":"<h1>Practical Playbooks</h1>\n<p>Practical Playbooks covers practical usage patterns for core Python libraries and engineering tooling, with focused guides on Real Wor...</p>","date_modified":"2026-09-20T00:00:00+00:00","date_published":"2026-09-20T00:00:00+00:00","id":"https://serhiismetanskyi.com/docs/libs/pytest/02-practical-playbooks/","image":null,"tags":["libraries","pytest","python","testing"],"title":"Practical Playbooks","url":"https://serhiismetanskyi.com/docs/libs/pytest/02-practical-playbooks/"},{"authors":[],"content_html":"<h1>Pydantic — Validators &amp; Serialization</h1>\n<h2>Field Validators</h2>\n<p>Run on a single field after type parsing. Must be <code>@classmethod</code>.</p>\n<p>```python\nfrom pydantic impo...</p>","date_modified":"2026-09-19T00:00:00+00:00","date_published":"2026-09-19T00:00:00+00:00","id":"https://serhiismetanskyi.com/docs/libs/pydantic/02-validators-serialization/","image":null,"tags":["libraries","pydantic","python"],"title":"Pydantic — Validators & Serialization","url":"https://serhiismetanskyi.com/docs/libs/pydantic/02-validators-serialization/"},{"authors":[],"content_html":"<h1>Pydantic — Advanced Patterns</h1>\n<h2>Discriminated Unions</h2>\n<p>Use a literal field to select the correct model variant — faster and more predictable than untagged ...</p>","date_modified":"2026-09-19T00:00:00+00:00","date_published":"2026-09-19T00:00:00+00:00","id":"https://serhiismetanskyi.com/docs/libs/pydantic/03-advanced-patterns/","image":null,"tags":["libraries","pydantic","python"],"title":"Pydantic — Advanced Patterns","url":"https://serhiismetanskyi.com/docs/libs/pydantic/03-advanced-patterns/"},{"authors":[],"content_html":"<h1>Pydantic — Config &amp; Performance</h1>\n<h2>ConfigDict</h2>\n<p>```python\nfrom pydantic import BaseModel, ConfigDict</p>\n<p>class StrictUser(BaseModel):\n    model_config = Conf...</p>","date_modified":"2026-09-19T00:00:00+00:00","date_published":"2026-09-19T00:00:00+00:00","id":"https://serhiismetanskyi.com/docs/libs/pydantic/04-config-performance/","image":null,"tags":["libraries","pydantic","python"],"title":"Pydantic — Config & Performance","url":"https://serhiismetanskyi.com/docs/libs/pydantic/04-config-performance/"},{"authors":[],"content_html":"<h1>Pytest — Python Testing Framework</h1>\n<p>Standard testing framework for Python: fixtures, parametrize, markers, mocking, coverage.</p>\n<h2>Installation</h2>\n<p>```bash\nuv a...</p>","date_modified":"2026-09-19T00:00:00+00:00","date_published":"2026-09-19T00:00:00+00:00","id":"https://serhiismetanskyi.com/docs/libs/pytest/","image":null,"tags":["libraries","pytest","python","testing"],"title":"Pytest — Python Testing Framework","url":"https://serhiismetanskyi.com/docs/libs/pytest/"},{"authors":[],"content_html":"<h1>Playwright — UI Practical Playbook</h1>\n<p>Copy-paste recipes for common UI testing scenarios.</p>\n<h2>1) Auth with Storage State Reuse</h2>\n<p>Authenticate once, reuse acro...</p>","date_modified":"2026-09-18T00:00:00+00:00","date_published":"2026-09-18T00:00:00+00:00","id":"https://serhiismetanskyi.com/docs/libs/playwright/05-ui-playbook/","image":null,"tags":["libraries","playwright","python","ui-testing"],"title":"Playwright — UI Practical Playbook","url":"https://serhiismetanskyi.com/docs/libs/playwright/05-ui-playbook/"},{"authors":[],"content_html":"<h1>Playwright — API Practical Playbook</h1>\n<p>Copy-paste recipes for common API testing scenarios with <code>APIRequestContext</code>.</p>\n<h2>1) Full CRUD Lifecycle</h2>\n<p>```python\nfr...</p>","date_modified":"2026-09-18T00:00:00+00:00","date_published":"2026-09-18T00:00:00+00:00","id":"https://serhiismetanskyi.com/docs/libs/playwright/06-api-playbook/","image":null,"tags":["libraries","playwright","python","ui-testing"],"title":"Playwright — API Practical Playbook","url":"https://serhiismetanskyi.com/docs/libs/playwright/06-api-playbook/"},{"authors":[],"content_html":"<h1>Pydantic — Models &amp; Fields</h1>\n<h2>BaseModel Basics</h2>\n<p>```python\nfrom pydantic import BaseModel</p>\n<p>class User(BaseModel):\n    id: int\n    name: str\n    email: str...</p>","date_modified":"2026-09-18T00:00:00+00:00","date_published":"2026-09-18T00:00:00+00:00","id":"https://serhiismetanskyi.com/docs/libs/pydantic/01-models-fields/","image":null,"tags":["libraries","pydantic","python"],"title":"Pydantic — Models & Fields","url":"https://serhiismetanskyi.com/docs/libs/pydantic/01-models-fields/"},{"authors":[],"content_html":"<h1>Pydantic — Data Validation &amp; Settings</h1>\n<p>Python's most widely used data validation library. Powered by Rust core in v2 (5–50x faster than v1). Type-hint-driv...</p>","date_modified":"2026-09-18T00:00:00+00:00","date_published":"2026-09-18T00:00:00+00:00","id":"https://serhiismetanskyi.com/docs/libs/pydantic/","image":null,"tags":["libraries","pydantic","python"],"title":"Pydantic — Data Validation &amp; Settings","url":"https://serhiismetanskyi.com/docs/libs/pydantic/"},{"authors":[],"content_html":"<h1>Playwright — UI Testing</h1>\n<h2>Locators</h2>\n<p>Locators are live objects that auto-wait and re-evaluate when DOM changes.</p>\n<h3>Priority (most resilient first)</h3>\n<p>```p...</p>","date_modified":"2026-09-17T00:00:00+00:00","date_published":"2026-09-17T00:00:00+00:00","id":"https://serhiismetanskyi.com/docs/libs/playwright/01-ui-testing/","image":null,"tags":["libraries","playwright","python","ui-testing"],"title":"Playwright — UI Testing","url":"https://serhiismetanskyi.com/docs/libs/playwright/01-ui-testing/"},{"authors":[],"content_html":"<h1>Playwright — API Testing</h1>\n<p>Playwright can send HTTP requests directly via <code>APIRequestContext</code> — no browser needed.</p>\n<h2>Use Cases</h2>\n<p>| Scenario | Why Playwrigh...</p>","date_modified":"2026-09-17T00:00:00+00:00","date_published":"2026-09-17T00:00:00+00:00","id":"https://serhiismetanskyi.com/docs/libs/playwright/02-api-testing/","image":null,"tags":["libraries","playwright","python","ui-testing"],"title":"Playwright — API Testing","url":"https://serhiismetanskyi.com/docs/libs/playwright/02-api-testing/"},{"authors":[],"content_html":"<h1>Playwright — Page Object Model</h1>\n<p>POM encapsulates page structure and interactions in classes. Tests stay readable; locators live in one place.</p>\n<h2>Basic Pag...</h2>","date_modified":"2026-09-17T00:00:00+00:00","date_published":"2026-09-17T00:00:00+00:00","id":"https://serhiismetanskyi.com/docs/libs/playwright/03-page-objects/","image":null,"tags":["libraries","playwright","python","ui-testing"],"title":"Playwright — Page Object Model","url":"https://serhiismetanskyi.com/docs/libs/playwright/03-page-objects/"},{"authors":[],"content_html":"<h1>Playwright — Advanced Patterns</h1>\n<h2>Network Mocking</h2>\n<p>Intercept requests and return fake data — no real backend needed.</p>\n<h3>Mock an API Endpoint</h3>\n<p>```python\n...</p>","date_modified":"2026-09-17T00:00:00+00:00","date_published":"2026-09-17T00:00:00+00:00","id":"https://serhiismetanskyi.com/docs/libs/playwright/04-advanced-patterns/","image":null,"tags":["libraries","playwright","python","ui-testing"],"title":"Playwright — Advanced Patterns","url":"https://serhiismetanskyi.com/docs/libs/playwright/04-advanced-patterns/"},{"authors":[],"content_html":"<h1>LangChain — LangGraph &amp; Production</h1>\n<h2>LangGraph Overview</h2>\n<p>!!! tip \"Full LangGraph guide\"\n    This page covers the basics. For state design, <code>Command</code> / `S...</p>","date_modified":"2026-09-16T00:00:00+00:00","date_published":"2026-09-16T00:00:00+00:00","id":"https://serhiismetanskyi.com/docs/libs/langchain/06-langgraph-production/","image":null,"tags":["langchain","libraries","llm","python"],"title":"LangChain — LangGraph & Production","url":"https://serhiismetanskyi.com/docs/libs/langchain/06-langgraph-production/"},{"authors":[],"content_html":"<h1>LangChain — Security, Evaluation &amp; Operations</h1>\n<h2>Tool Safety Baseline</h2>\n<p>Tools are the highest-risk surface in agent systems. Apply allowlist-first controls...</p>","date_modified":"2026-09-16T00:00:00+00:00","date_published":"2026-09-16T00:00:00+00:00","id":"https://serhiismetanskyi.com/docs/libs/langchain/07-security-evaluation-operations/","image":null,"tags":["evaluation","langchain","libraries","llm","python","security"],"title":"LangChain — Security, Evaluation & Operations","url":"https://serhiismetanskyi.com/docs/libs/langchain/07-security-evaluation-operations/"},{"authors":[],"content_html":"<h1>LangChain — Practical Playbooks</h1>\n<p>Three ready-to-use scenarios for fast start: simple Q&amp;A bot, documentation RAG bot, and agent with two tools.</p>\n<h2>Playbook...</h2>","date_modified":"2026-09-16T00:00:00+00:00","date_published":"2026-09-16T00:00:00+00:00","id":"https://serhiismetanskyi.com/docs/libs/langchain/08-practical-playbooks/","image":null,"tags":["langchain","libraries","llm","python"],"title":"LangChain — Practical Playbooks","url":"https://serhiismetanskyi.com/docs/libs/langchain/08-practical-playbooks/"},{"authors":[],"content_html":"<h1>Playwright — Python Browser &amp; API Testing</h1>\n<p>End-to-end testing framework: UI automation, API testing, network mocking, cross-browser support.</p>\n<h2>Installati...</h2>","date_modified":"2026-09-16T00:00:00+00:00","date_published":"2026-09-16T00:00:00+00:00","id":"https://serhiismetanskyi.com/docs/libs/playwright/","image":null,"tags":["libraries","playwright","python","ui-testing"],"title":"Playwright — Python Browser &amp; API Testing","url":"https://serhiismetanskyi.com/docs/libs/playwright/"},{"authors":[],"content_html":"<h1>LangChain — Models, Prompts &amp; Parsers</h1>\n<h2>Chat Models</h2>\n<p>```python\nfrom langchain_openai import ChatOpenAI\nfrom langchain_anthropic import ChatAnthropic</p>\n<p>ope...</p>","date_modified":"2026-09-15T00:00:00+00:00","date_published":"2026-09-15T00:00:00+00:00","id":"https://serhiismetanskyi.com/docs/libs/langchain/01-models-prompts-parsers/","image":null,"tags":["langchain","libraries","llm","python"],"title":"LangChain — Models, Prompts & Parsers","url":"https://serhiismetanskyi.com/docs/libs/langchain/01-models-prompts-parsers/"},{"authors":[],"content_html":"<h1>LangChain — LCEL &amp; Chains</h1>\n<h2>LCEL Overview</h2>\n<p>LangChain Expression Language (LCEL) is the declarative way to compose components using the pipe operator <code>|</code>....</p>","date_modified":"2026-09-15T00:00:00+00:00","date_published":"2026-09-15T00:00:00+00:00","id":"https://serhiismetanskyi.com/docs/libs/langchain/02-lcel-chains/","image":null,"tags":["langchain","libraries","llm","python"],"title":"LangChain — LCEL & Chains","url":"https://serhiismetanskyi.com/docs/libs/langchain/02-lcel-chains/"},{"authors":[],"content_html":"<h1>LangChain — RAG &amp; Retrieval</h1>\n<h2>RAG Pipeline Overview</h2>\n<p>Retrieval-Augmented Generation grounds LLM responses in external documents. Two phases:</p>\n<p>**Indexing ...</p>","date_modified":"2026-09-15T00:00:00+00:00","date_published":"2026-09-15T00:00:00+00:00","id":"https://serhiismetanskyi.com/docs/libs/langchain/03-rag-retrieval/","image":null,"tags":["evaluation","langchain","libraries","llm","python","rag"],"title":"LangChain — RAG & Retrieval","url":"https://serhiismetanskyi.com/docs/libs/langchain/03-rag-retrieval/"},{"authors":[],"content_html":"<h1>LangChain — Agents &amp; Tools</h1>\n<h2>Tools Overview</h2>\n<p>Tools are Python functions the LLM can invoke. LangChain auto-generates the JSON schema from the function si...</p>","date_modified":"2026-09-15T00:00:00+00:00","date_published":"2026-09-15T00:00:00+00:00","id":"https://serhiismetanskyi.com/docs/libs/langchain/04-agents-tools/","image":null,"tags":["langchain","libraries","llm","python"],"title":"LangChain — Agents & Tools","url":"https://serhiismetanskyi.com/docs/libs/langchain/04-agents-tools/"},{"authors":[],"content_html":"<h1>LangChain — Memory &amp; State</h1>\n<h2>Memory Overview</h2>\n<p>LLMs are stateless — every call is independent. Memory components inject conversation history or context in...</p>","date_modified":"2026-09-15T00:00:00+00:00","date_published":"2026-09-15T00:00:00+00:00","id":"https://serhiismetanskyi.com/docs/libs/langchain/05-memory-state/","image":null,"tags":["langchain","libraries","llm","python"],"title":"LangChain — Memory & State","url":"https://serhiismetanskyi.com/docs/libs/langchain/05-memory-state/"},{"authors":[],"content_html":"<h1>HTTPX — Fundamentals</h1>\n<h2>Client vs Module-Level Functions</h2>\n<p>```python\nimport httpx</p>\n<h1>module-level: new connection per request (fine for one-off scripts)</h1>\n<p>r ...</p>","date_modified":"2026-09-14T00:00:00+00:00","date_published":"2026-09-14T00:00:00+00:00","id":"https://serhiismetanskyi.com/docs/libs/httpx/01-fundamentals/","image":null,"tags":["api-testing","httpx","libraries","python"],"title":"HTTPX — Fundamentals","url":"https://serhiismetanskyi.com/docs/libs/httpx/01-fundamentals/"},{"authors":[],"content_html":"<h1>HTTPX — Async Patterns</h1>\n<h2>AsyncClient Basics</h2>\n<p>Same API as sync <code>Client</code>, but with <code>await</code> and <code>async with</code>.</p>\n<p>```python\nimport httpx</p>\n<p>async def fetch_user...</p>","date_modified":"2026-09-14T00:00:00+00:00","date_published":"2026-09-14T00:00:00+00:00","id":"https://serhiismetanskyi.com/docs/libs/httpx/02-async-patterns/","image":null,"tags":["api-testing","httpx","libraries","python"],"title":"HTTPX — Async Patterns","url":"https://serhiismetanskyi.com/docs/libs/httpx/02-async-patterns/"},{"authors":[],"content_html":"<h1>HTTPX — Advanced Configuration</h1>\n<h2>Timeouts (Granular)</h2>\n<p>Default is 5 seconds. Use <code>httpx.Timeout(default, connect=..., read=..., write=..., pool=...)</code> on t...</p>","date_modified":"2026-09-14T00:00:00+00:00","date_published":"2026-09-14T00:00:00+00:00","id":"https://serhiismetanskyi.com/docs/libs/httpx/03-advanced-config/","image":null,"tags":["api-testing","httpx","libraries","python"],"title":"HTTPX — Advanced Configuration","url":"https://serhiismetanskyi.com/docs/libs/httpx/03-advanced-config/"},{"authors":[],"content_html":"<h1>LangChain — LLM Application Framework</h1>\n<p>Framework for building applications powered by large language models. Composable components for prompts, chains, age...</p>","date_modified":"2026-09-14T00:00:00+00:00","date_published":"2026-09-14T00:00:00+00:00","id":"https://serhiismetanskyi.com/docs/libs/langchain/","image":null,"tags":["langchain","libraries","llm","python"],"title":"LangChain — LLM Application Framework","url":"https://serhiismetanskyi.com/docs/libs/langchain/"},{"authors":[],"content_html":"<h1>FastAPI — Testing</h1>\n<h2>TestClient Basics</h2>\n<p>```python\nfrom fastapi import FastAPI\nfrom fastapi.testclient import TestClient</p>\n<p>app = FastAPI()</p>\n<p>@app.get(\"/heal...</p>","date_modified":"2026-09-13T00:00:00+00:00","date_published":"2026-09-13T00:00:00+00:00","id":"https://serhiismetanskyi.com/docs/libs/fastapi/05-testing/","image":null,"tags":["api","fastapi","libraries","python"],"title":"FastAPI — Testing","url":"https://serhiismetanskyi.com/docs/libs/fastapi/05-testing/"},{"authors":[],"content_html":"<h1>FastAPI — Production Patterns</h1>\n<h2>Project Structure</h2>\n<p>```\napp/\n├── main.py              # FastAPI app, lifespan, router includes\n├── config.py            # ...</p>","date_modified":"2026-09-13T00:00:00+00:00","date_published":"2026-09-13T00:00:00+00:00","id":"https://serhiismetanskyi.com/docs/libs/fastapi/06-production-patterns/","image":null,"tags":["api","fastapi","libraries","python"],"title":"FastAPI — Production Patterns","url":"https://serhiismetanskyi.com/docs/libs/fastapi/06-production-patterns/"},{"authors":[],"content_html":"<h1>ASGI vs WSGI, Uvicorn, Starlette, Litestar</h1>\n<h2>Why This Matters</h2>\n<p>When you run FastAPI in production, you are not running \"just FastAPI\". You run:\n- an ASGI...</p>","date_modified":"2026-09-13T00:00:00+00:00","date_published":"2026-09-13T00:00:00+00:00","id":"https://serhiismetanskyi.com/docs/libs/fastapi/07-asgi-uvicorn-starlette/","image":null,"tags":["api","fastapi","libraries","python"],"title":"FastAPI — ASGI, Uvicorn, Starlette","url":"https://serhiismetanskyi.com/docs/libs/fastapi/07-asgi-uvicorn-starlette/"},{"authors":[],"content_html":"<h1>HTTPX — Modern Python HTTP Client</h1>\n<p>Async-capable HTTP client with full sync support. Drop-in <code>requests</code> replacement with HTTP/2, type hints, and granular t...</p>","date_modified":"2026-09-13T00:00:00+00:00","date_published":"2026-09-13T00:00:00+00:00","id":"https://serhiismetanskyi.com/docs/libs/httpx/","image":null,"tags":["api-testing","httpx","libraries","python"],"title":"HTTPX — Modern Python HTTP Client","url":"https://serhiismetanskyi.com/docs/libs/httpx/"},{"authors":[],"content_html":"<h1>FastAPI — App &amp; Routing</h1>\n<h2>App Configuration</h2>\n<p>```python\nfrom fastapi import FastAPI</p>\n<p>app = FastAPI(\n    title=\"My Service\",\n    version=\"1.0.0\",\n    docs_...</p>","date_modified":"2026-09-12T00:00:00+00:00","date_published":"2026-09-12T00:00:00+00:00","id":"https://serhiismetanskyi.com/docs/libs/fastapi/01-app-routing/","image":null,"tags":["api","fastapi","libraries","python"],"title":"FastAPI — App & Routing","url":"https://serhiismetanskyi.com/docs/libs/fastapi/01-app-routing/"},{"authors":[],"content_html":"<h1>FastAPI — Dependencies &amp; Middleware</h1>\n<h2>Dependency Injection Basics</h2>\n<p>```python\nfrom fastapi import Depends, FastAPI</p>\n<p>app = FastAPI()</p>\n<p>async def common_par...</p>","date_modified":"2026-09-12T00:00:00+00:00","date_published":"2026-09-12T00:00:00+00:00","id":"https://serhiismetanskyi.com/docs/libs/fastapi/02-dependencies-middleware/","image":null,"tags":["api","fastapi","libraries","python"],"title":"FastAPI — Dependencies & Middleware","url":"https://serhiismetanskyi.com/docs/libs/fastapi/02-dependencies-middleware/"},{"authors":[],"content_html":"<h1>FastAPI — Database Integration</h1>\n<h2>Async Engine &amp; Session Setup</h2>\n<p>```python\nfrom sqlalchemy.ext.asyncio import AsyncSession, async_sessionmaker, create_asyn...</p>","date_modified":"2026-09-12T00:00:00+00:00","date_published":"2026-09-12T00:00:00+00:00","id":"https://serhiismetanskyi.com/docs/libs/fastapi/03-database-integration/","image":null,"tags":["api","fastapi","libraries","python"],"title":"FastAPI — Database Integration","url":"https://serhiismetanskyi.com/docs/libs/fastapi/03-database-integration/"},{"authors":[],"content_html":"<h1>FastAPI — Auth &amp; Security</h1>\n<h2>OAuth2 Password Flow</h2>\n<p>```python\nfrom fastapi import Depends, FastAPI, HTTPException, status\nfrom fastapi.security import OAut...</p>","date_modified":"2026-09-12T00:00:00+00:00","date_published":"2026-09-12T00:00:00+00:00","id":"https://serhiismetanskyi.com/docs/libs/fastapi/04-auth-security/","image":null,"tags":["api","fastapi","libraries","python","security"],"title":"FastAPI — Auth & Security","url":"https://serhiismetanskyi.com/docs/libs/fastapi/04-auth-security/"},{"authors":[],"content_html":"<h1>Pre-Commit Hooks</h1>\n<p>Run linters, formatters, and type checkers automatically on every <code>git commit</code> — and heavier checks, such as tests, on <code>git push</code>.</p>\n<h2>In...</h2>","date_modified":"2026-09-11T00:00:00+00:00","date_published":"2026-09-11T00:00:00+00:00","id":"https://serhiismetanskyi.com/docs/libs/code-quality/03-pre-commit-hooks/","image":null,"tags":["code-quality","libraries","python"],"title":"Pre-Commit Hooks","url":"https://serhiismetanskyi.com/docs/libs/code-quality/03-pre-commit-hooks/"},{"authors":[],"content_html":"<h1>Test Coverage — Measurement, Enforcement, Mutation Testing</h1>\n<h2>pytest-cov + coverage.py</h2>\n<p><code>pytest-cov</code> is the pytest plugin that wraps <code>coverage.py</code> for sea...</p>","date_modified":"2026-09-11T00:00:00+00:00","date_published":"2026-09-11T00:00:00+00:00","id":"https://serhiismetanskyi.com/docs/libs/code-quality/04-test-coverage/","image":null,"tags":["code-quality","libraries","python","rag"],"title":"Test Coverage — Measurement, Enforcement, Mutation Testing","url":"https://serhiismetanskyi.com/docs/libs/code-quality/04-test-coverage/"},{"authors":[],"content_html":"<h1>Config Template — pyproject.toml + Pre-Commit</h1>\n<p>Copy-paste baseline for a new Python project with full quality stack.</p>\n<h2><code>pyproject.toml</code></h2>\n<p>```toml\n[project...</p>","date_modified":"2026-09-11T00:00:00+00:00","date_published":"2026-09-11T00:00:00+00:00","id":"https://serhiismetanskyi.com/docs/libs/code-quality/05-pyproject-template/","image":null,"tags":["code-quality","libraries","python"],"title":"Config Template — pyproject.toml + Pre-Commit","url":"https://serhiismetanskyi.com/docs/libs/code-quality/05-pyproject-template/"},{"authors":[],"content_html":"<h1>FastAPI — Modern Async Web Framework</h1>\n<p>High-performance Python web framework built on Starlette and Pydantic. Automatic OpenAPI docs, type-safe request vali...</p>","date_modified":"2026-09-11T00:00:00+00:00","date_published":"2026-09-11T00:00:00+00:00","id":"https://serhiismetanskyi.com/docs/libs/fastapi/","image":null,"tags":["api","fastapi","libraries","python"],"title":"FastAPI — Modern Async Web Framework","url":"https://serhiismetanskyi.com/docs/libs/fastapi/"},{"authors":[],"content_html":"<h1>Ruff — Linting &amp; Formatting</h1>\n<p>Rust-based all-in-one tool. Replaces Flake8, Black, isort, bandit, pyupgrade, pydocstyle, and 20+ others. 10–100x faster.</p>\n<h2>...</h2>","date_modified":"2026-09-10T00:00:00+00:00","date_published":"2026-09-10T00:00:00+00:00","id":"https://serhiismetanskyi.com/docs/libs/code-quality/01-ruff-linting-formatting/","image":null,"tags":["code-quality","libraries","python"],"title":"Ruff — Linting & Formatting","url":"https://serhiismetanskyi.com/docs/libs/code-quality/01-ruff-linting-formatting/"},{"authors":[],"content_html":"<h1>Static Analysis — mypy, Pyright, wemake-python-styleguide</h1>\n<h2>mypy — Static Type Checker (CI Standard)</h2>\n<p>```bash\nuv add --dev mypy\nuv run mypy .\nuv run mypy...</p>","date_modified":"2026-09-10T00:00:00+00:00","date_published":"2026-09-10T00:00:00+00:00","id":"https://serhiismetanskyi.com/docs/libs/code-quality/02-type-checkers/","image":null,"tags":["code-quality","libraries","python"],"title":"Static Analysis — mypy, Pyright, wemake-python-styleguide","url":"https://serhiismetanskyi.com/docs/libs/code-quality/02-type-checkers/"},{"authors":[],"content_html":"<h1>Code Quality — Linters, Formatters, Type Checkers, Coverage</h1>\n<p>Practical guide to the modern Python quality stack: what to use, how to configure, how to enfo...</p>","date_modified":"2026-09-10T00:00:00+00:00","date_published":"2026-09-10T00:00:00+00:00","id":"https://serhiismetanskyi.com/docs/libs/code-quality/","image":null,"tags":["code-quality","libraries","python"],"title":"Code Quality — Linters, Formatters, Type Checkers, Coverage","url":"https://serhiismetanskyi.com/docs/libs/code-quality/"},{"authors":[],"content_html":"<h1>Python Libraries</h1>\n<p>Practical guides for key Python libraries: core API, patterns, and production best practices.</p>\n<h2>Section Map</h2>\n<p>| Library | Focus |\n|-----...</p>","date_modified":"2026-09-10T00:00:00+00:00","date_published":"2026-09-10T00:00:00+00:00","id":"https://serhiismetanskyi.com/docs/libs/","image":null,"tags":["libraries","python"],"title":"Python Libraries","url":"https://serhiismetanskyi.com/docs/libs/"},{"authors":[],"content_html":"<h1>Services &amp; Networking</h1>\n<h2>Networking Model</h2>\n<p>Every Pod gets a unique cluster-wide IP address. Pods communicate directly — no NAT required. A CNI (Container ...</p>","date_modified":"2026-09-09T00:00:00+00:00","date_published":"2026-09-09T00:00:00+00:00","id":"https://serhiismetanskyi.com/docs/tools/kubernetes/03-services-networking/","image":null,"tags":["kubernetes","tools"],"title":"Services & Networking","url":"https://serhiismetanskyi.com/docs/tools/kubernetes/03-services-networking/"},{"authors":[],"content_html":"<h1>Configuration &amp; Storage</h1>\n<h2>ConfigMaps</h2>\n<p>Store non-sensitive configuration data as key-value pairs, consumed as environment variables or mounted files.</p>\n<h3>...</h3>","date_modified":"2026-09-09T00:00:00+00:00","date_published":"2026-09-09T00:00:00+00:00","id":"https://serhiismetanskyi.com/docs/tools/kubernetes/04-config-storage/","image":null,"tags":["kubernetes","rag","tools"],"title":"Configuration & Storage","url":"https://serhiismetanskyi.com/docs/tools/kubernetes/04-config-storage/"},{"authors":[],"content_html":"<h1>Helm &amp; Deployment Strategies</h1>\n<h2>Helm</h2>\n<p>Helm is the package manager for Kubernetes. A <strong>chart</strong> is a collection of templates that produce Kubernetes manifes...</p>","date_modified":"2026-09-09T00:00:00+00:00","date_published":"2026-09-09T00:00:00+00:00","id":"https://serhiismetanskyi.com/docs/tools/kubernetes/05-helm-deployments/","image":null,"tags":["kubernetes","tools"],"title":"Helm & Deployment Strategies","url":"https://serhiismetanskyi.com/docs/tools/kubernetes/05-helm-deployments/"},{"authors":[],"content_html":"<h1>Security &amp; Observability</h1>\n<h2>RBAC (Role-Based Access Control)</h2>\n<p>RBAC controls who can do what in the cluster. Two scopes: namespace-level (Role) and cluster...</p>","date_modified":"2026-09-09T00:00:00+00:00","date_published":"2026-09-09T00:00:00+00:00","id":"https://serhiismetanskyi.com/docs/tools/kubernetes/06-security-observability/","image":null,"tags":["kubernetes","observability","security","tools"],"title":"Security & Observability","url":"https://serhiismetanskyi.com/docs/tools/kubernetes/06-security-observability/"},{"authors":[],"content_html":"<h1>kubectl Fundamentals</h1>\n<h2>Installation</h2>\n<p>```bash</p>\n<h1>Linux (latest stable)</h1>\n<p>curl -LO \"https://dl.k8s.io/release/$(curl -L -s https://dl.k8s.io/release/stable.tx...</p>","date_modified":"2026-09-08T00:00:00+00:00","date_published":"2026-09-08T00:00:00+00:00","id":"https://serhiismetanskyi.com/docs/tools/kubernetes/01-kubectl-fundamentals/","image":null,"tags":["kubernetes","tools"],"title":"kubectl Fundamentals","url":"https://serhiismetanskyi.com/docs/tools/kubernetes/01-kubectl-fundamentals/"},{"authors":[],"content_html":"<h1>Workloads &amp; Scheduling</h1>\n<h2>Pod</h2>\n<p>The smallest deployable unit. A Pod runs one or more containers sharing the same network namespace and storage volumes.</p>\n<p>``...</p>","date_modified":"2026-09-08T00:00:00+00:00","date_published":"2026-09-08T00:00:00+00:00","id":"https://serhiismetanskyi.com/docs/tools/kubernetes/02-workloads-scheduling/","image":null,"tags":["kubernetes","tools"],"title":"Workloads & Scheduling","url":"https://serhiismetanskyi.com/docs/tools/kubernetes/02-workloads-scheduling/"},{"authors":[],"content_html":"<h1>Kubernetes (K8s) — Overview</h1>\n<h2>What Is Kubernetes</h2>\n<p>Kubernetes is an open-source container orchestration platform that automates deploying, scaling, and ma...</p>","date_modified":"2026-09-08T00:00:00+00:00","date_published":"2026-09-08T00:00:00+00:00","id":"https://serhiismetanskyi.com/docs/tools/kubernetes/","image":null,"tags":["kubernetes","tools"],"title":"Kubernetes (K8s) — Overview","url":"https://serhiismetanskyi.com/docs/tools/kubernetes/"},{"authors":[],"content_html":"<h1>Administration &amp; Scripting Basics</h1>\n<h2>Package management (Debian/Ubuntu)</h2>\n<p>```bash\nsudo apt update                  # refresh package index\nsudo apt upgrade...</p>","date_modified":"2026-09-08T00:00:00+00:00","date_published":"2026-09-08T00:00:00+00:00","id":"https://serhiismetanskyi.com/docs/tools/linux-terminal/05-admin-scripting/","image":null,"tags":["linux","tools"],"title":"Administration & Scripting Basics","url":"https://serhiismetanskyi.com/docs/tools/linux-terminal/05-admin-scripting/"},{"authors":[],"content_html":"<h1>Navigation, Files &amp; Shell Basics</h1>\n<h2>Get help</h2>\n<p>```bash\nman ls                   # open manual page for ls\nman grep                 # open manual page for g...</p>","date_modified":"2026-09-07T00:00:00+00:00","date_published":"2026-09-07T00:00:00+00:00","id":"https://serhiismetanskyi.com/docs/tools/linux-terminal/01-navigation-files/","image":null,"tags":["linux","tools"],"title":"Navigation, Files & Shell Basics","url":"https://serhiismetanskyi.com/docs/tools/linux-terminal/01-navigation-files/"},{"authors":[],"content_html":"<h1>Search, Pipes &amp; Text Processing</h1>\n<h2>Find files</h2>\n<p>```bash\nfind . -name \"<em>.py\"              # find by name pattern\nfind . -name \"name</em>\"             # find fil...</p>","date_modified":"2026-09-07T00:00:00+00:00","date_published":"2026-09-07T00:00:00+00:00","id":"https://serhiismetanskyi.com/docs/tools/linux-terminal/02-search-text-processing/","image":null,"tags":["linux","tools"],"title":"Search, Pipes & Text Processing","url":"https://serhiismetanskyi.com/docs/tools/linux-terminal/02-search-text-processing/"},{"authors":[],"content_html":"<h1>Processes &amp; System Monitoring</h1>\n<h2>View running processes</h2>\n<p>```bash\nps                       # processes in current shell\nps aux                   # all proc...</p>","date_modified":"2026-09-07T00:00:00+00:00","date_published":"2026-09-07T00:00:00+00:00","id":"https://serhiismetanskyi.com/docs/tools/linux-terminal/03-processes-system-monitoring/","image":null,"tags":["linux","observability","tools"],"title":"Processes & System Monitoring","url":"https://serhiismetanskyi.com/docs/tools/linux-terminal/03-processes-system-monitoring/"},{"authors":[],"content_html":"<h1>Network Basics</h1>\n<h2>Local network info</h2>\n<p>```bash\nip a                     # show interfaces and IP addresses\nip route                 # show routing table\nss...</p>","date_modified":"2026-09-07T00:00:00+00:00","date_published":"2026-09-07T00:00:00+00:00","id":"https://serhiismetanskyi.com/docs/tools/linux-terminal/04-network-ssh-downloads/","image":null,"tags":["linux","tools"],"title":"Network Basics","url":"https://serhiismetanskyi.com/docs/tools/linux-terminal/04-network-ssh-downloads/"},{"authors":[],"content_html":"<h1>Git — Advanced Workflows</h1>\n<h2>Interactive Rebase</h2>\n<p>Rewrite local commit history before pushing — squash, reorder, edit, drop.</p>\n<p>```bash\ngit rebase -i HEAD~5  ...</p>","date_modified":"2026-09-06T00:00:00+00:00","date_published":"2026-09-06T00:00:00+00:00","id":"https://serhiismetanskyi.com/docs/tools/git/04-advanced-workflows/","image":null,"tags":["git","tools"],"title":"Git — Advanced Workflows","url":"https://serhiismetanskyi.com/docs/tools/git/04-advanced-workflows/"},{"authors":[],"content_html":"<h1>Git — Hooks &amp; Configuration</h1>\n<h2>Git Hooks Overview</h2>\n<p>Scripts that Git executes automatically at specific points in the workflow.</p>\n<p>| Hook | Trigger | Common ...</p>","date_modified":"2026-09-06T00:00:00+00:00","date_published":"2026-09-06T00:00:00+00:00","id":"https://serhiismetanskyi.com/docs/tools/git/05-hooks-configuration/","image":null,"tags":["git","tools"],"title":"Git — Hooks & Configuration","url":"https://serhiismetanskyi.com/docs/tools/git/05-hooks-configuration/"},{"authors":[],"content_html":"<h1>Git — Troubleshooting &amp; Recovery</h1>\n<h2>Undo Cheat Sheet</h2>\n<p>| What happened | Fix command | Safe? |\n|--------------|-------------|-------|\n| Unstage a file | `g...</p>","date_modified":"2026-09-06T00:00:00+00:00","date_published":"2026-09-06T00:00:00+00:00","id":"https://serhiismetanskyi.com/docs/tools/git/06-troubleshooting-recovery/","image":null,"tags":["git","tools"],"title":"Git — Troubleshooting & Recovery","url":"https://serhiismetanskyi.com/docs/tools/git/06-troubleshooting-recovery/"},{"authors":[],"content_html":"<h1>Linux Terminal — Essential Commands</h1>\n<p>Core Linux terminal commands for everyday use, plus basic networking and system administration.</p>\n<h2>Section Map</h2>\n<p>| Fil...</p>","date_modified":"2026-09-06T00:00:00+00:00","date_published":"2026-09-06T00:00:00+00:00","id":"https://serhiismetanskyi.com/docs/tools/linux-terminal/","image":null,"tags":["linux","tools"],"title":"Linux Terminal — Essential Commands","url":"https://serhiismetanskyi.com/docs/tools/linux-terminal/"},{"authors":[],"content_html":"<h1>Git — Commands &amp; Fundamentals</h1>\n<h2>Repository Setup</h2>\n<p>```bash\ngit init                                       # Initialize new repo in current dir\ngit init my...</p>","date_modified":"2026-09-05T00:00:00+00:00","date_published":"2026-09-05T00:00:00+00:00","id":"https://serhiismetanskyi.com/docs/tools/git/01-commands-fundamentals/","image":null,"tags":["git","tools"],"title":"Git — Commands & Fundamentals","url":"https://serhiismetanskyi.com/docs/tools/git/01-commands-fundamentals/"},{"authors":[],"content_html":"<h1>Git — Branching Strategies</h1>\n<h2>GitHub Flow (Recommended Default)</h2>\n<p>Simplest model. One permanent branch (<code>main</code>), short-lived feature branches.</p>\n<p>```\nmain ──...</p>","date_modified":"2026-09-05T00:00:00+00:00","date_published":"2026-09-05T00:00:00+00:00","id":"https://serhiismetanskyi.com/docs/tools/git/02-branching-strategies/","image":null,"tags":["git","tools"],"title":"Git — Branching Strategies","url":"https://serhiismetanskyi.com/docs/tools/git/02-branching-strategies/"},{"authors":[],"content_html":"<h1>Git — Commit Conventions &amp; PR Practices</h1>\n<h2>Conventional Commits</h2>\n<p>Standard format adopted by most open-source projects and enforced by tools like `commitli...</p>","date_modified":"2026-09-05T00:00:00+00:00","date_published":"2026-09-05T00:00:00+00:00","id":"https://serhiismetanskyi.com/docs/tools/git/03-commit-conventions/","image":null,"tags":["git","tools"],"title":"Git — Commit Conventions & PR Practices","url":"https://serhiismetanskyi.com/docs/tools/git/03-commit-conventions/"},{"authors":[],"content_html":"<h1>Git — Overview</h1>\n<h2>What Is Git</h2>\n<p>Git is a <strong>distributed version control system</strong> — every developer has a full copy of the repository, including its entire h...</p>","date_modified":"2026-09-05T00:00:00+00:00","date_published":"2026-09-05T00:00:00+00:00","id":"https://serhiismetanskyi.com/docs/tools/git/","image":null,"tags":["git","tools"],"title":"Git — Overview","url":"https://serhiismetanskyi.com/docs/tools/git/"},{"authors":[],"content_html":"<h1>Docker — Dockerfile Best Practices</h1>\n<h2>Multi-Stage Builds</h2>\n<p>Separate build-time dependencies from the final runtime image. Reduces size by 80–97%.</p>\n<p>```docke...</p>","date_modified":"2026-09-04T00:00:00+00:00","date_published":"2026-09-04T00:00:00+00:00","id":"https://serhiismetanskyi.com/docs/tools/docker/02-dockerfile-best-practices/","image":null,"tags":["docker","tools"],"title":"Docker — Dockerfile Best Practices","url":"https://serhiismetanskyi.com/docs/tools/docker/02-dockerfile-best-practices/"},{"authors":[],"content_html":"<h1>Docker — Docker Compose</h1>\n<h2>Compose File Structure</h2>\n<p><code>compose.yaml</code> (preferred name since Compose v2; <code>version</code> field is deprecated):</p>\n<p>```yaml\nservices:\n  a...</p>","date_modified":"2026-09-04T00:00:00+00:00","date_published":"2026-09-04T00:00:00+00:00","id":"https://serhiismetanskyi.com/docs/tools/docker/03-docker-compose/","image":null,"tags":["docker","tools"],"title":"Docker — Docker Compose","url":"https://serhiismetanskyi.com/docs/tools/docker/03-docker-compose/"},{"authors":[],"content_html":"<h1>Docker — Networking &amp; Volumes</h1>\n<h2>Network Drivers</h2>\n<p>| Driver | Scope | Use Case |\n|--------|-------|----------|\n| <strong>bridge</strong> | Single host | Default; contai...</p>","date_modified":"2026-09-04T00:00:00+00:00","date_published":"2026-09-04T00:00:00+00:00","id":"https://serhiismetanskyi.com/docs/tools/docker/04-networking-volumes/","image":null,"tags":["docker","tools"],"title":"Docker — Networking & Volumes","url":"https://serhiismetanskyi.com/docs/tools/docker/04-networking-volumes/"},{"authors":[],"content_html":"<h1>Docker — Security &amp; Production</h1>\n<h2>Non-Root Containers</h2>\n<p>Running as root inside a container = running as root on the host (if the container escapes).</p>\n<p>```do...</p>","date_modified":"2026-09-04T00:00:00+00:00","date_published":"2026-09-04T00:00:00+00:00","id":"https://serhiismetanskyi.com/docs/tools/docker/05-security-production/","image":null,"tags":["docker","security","tools"],"title":"Docker — Security & Production","url":"https://serhiismetanskyi.com/docs/tools/docker/05-security-production/"},{"authors":[],"content_html":"<h1>Docker — Debugging &amp; Troubleshooting</h1>\n<h2>Container Won't Start</h2>\n<p>```bash\ndocker logs myapp                                # Check startup errors\ndocker log...</p>","date_modified":"2026-09-04T00:00:00+00:00","date_published":"2026-09-04T00:00:00+00:00","id":"https://serhiismetanskyi.com/docs/tools/docker/06-debugging-troubleshooting/","image":null,"tags":["docker","tools"],"title":"Docker — Debugging & Troubleshooting","url":"https://serhiismetanskyi.com/docs/tools/docker/06-debugging-troubleshooting/"},{"authors":[],"content_html":"<h1>PostgreSQL — Basic Query Commands</h1>\n<p>Quick-reference for daily SQL work. For performance tuning see <a href=\"./03-queries-performance.md\">03 — Queries &amp; Performance</a>...</p>","date_modified":"2026-09-03T00:00:00+00:00","date_published":"2026-09-03T00:00:00+00:00","id":"https://serhiismetanskyi.com/docs/databases/postgresql/05-basic-query-commands/","image":null,"tags":["databases","postgresql","sql"],"title":"PostgreSQL — Basic Query Commands","url":"https://serhiismetanskyi.com/docs/databases/postgresql/05-basic-query-commands/"},{"authors":[],"content_html":"<h1>Docker — Commands &amp; Fundamentals</h1>\n<h2>Image Commands</h2>\n<p>```bash\ndocker build -t myapp:1.0 .                          # Build from Dockerfile in current dir\nd...</p>","date_modified":"2026-09-03T00:00:00+00:00","date_published":"2026-09-03T00:00:00+00:00","id":"https://serhiismetanskyi.com/docs/tools/docker/01-commands-fundamentals/","image":null,"tags":["docker","tools"],"title":"Docker — Commands & Fundamentals","url":"https://serhiismetanskyi.com/docs/tools/docker/01-commands-fundamentals/"},{"authors":[],"content_html":"<h1>Docker &amp; Docker Compose — Overview</h1>\n<h2>What Is Docker</h2>\n<p>Docker packages applications and their dependencies into lightweight, portable <strong>containers</strong> that r...</p>","date_modified":"2026-09-03T00:00:00+00:00","date_published":"2026-09-03T00:00:00+00:00","id":"https://serhiismetanskyi.com/docs/tools/docker/","image":null,"tags":["docker","tools"],"title":"Docker &amp; Docker Compose — Overview","url":"https://serhiismetanskyi.com/docs/tools/docker/"},{"authors":[],"content_html":"<h1>Tools — Practical Reference Guides</h1>\n<p>Hands-on command references, configuration patterns, and best practices for the tools a software engineer uses daily.</p>\n<p>...</p>","date_modified":"2026-09-03T00:00:00+00:00","date_published":"2026-09-03T00:00:00+00:00","id":"https://serhiismetanskyi.com/docs/tools/","image":null,"tags":["tools"],"title":"Tools — Practical Reference Guides","url":"https://serhiismetanskyi.com/docs/tools/"},{"authors":[],"content_html":"<h1>PostgreSQL — Commands &amp; psql</h1>\n<h2>Connecting</h2>\n<p>```bash\npsql -U myuser -d mydb                         # Local connection\npsql -U myuser -h localhost -p 5432 ...</p>","date_modified":"2026-09-02T00:00:00+00:00","date_published":"2026-09-02T00:00:00+00:00","id":"https://serhiismetanskyi.com/docs/databases/postgresql/01-commands-psql/","image":null,"tags":["databases","postgresql","sql"],"title":"PostgreSQL — Commands & psql","url":"https://serhiismetanskyi.com/docs/databases/postgresql/01-commands-psql/"},{"authors":[],"content_html":"<h1>PostgreSQL — Schema &amp; Data Types</h1>\n<h2>Common Data Types</h2>\n<p>| Category | Type | Description |\n|----------|------|-------------|\n| <strong>Integer</strong> | <code>INTEGER</code> / `IN...</p>","date_modified":"2026-09-02T00:00:00+00:00","date_published":"2026-09-02T00:00:00+00:00","id":"https://serhiismetanskyi.com/docs/databases/postgresql/02-schema-data-types/","image":null,"tags":["databases","postgresql","sql"],"title":"PostgreSQL — Schema & Data Types","url":"https://serhiismetanskyi.com/docs/databases/postgresql/02-schema-data-types/"},{"authors":[],"content_html":"<h1>PostgreSQL — Queries &amp; Performance</h1>\n<p>For baseline SQL syntax see <a href=\"./05-basic-query-commands.md\">05 — Basic Query Commands</a>. This file focuses on **query dia...</p>","date_modified":"2026-09-02T00:00:00+00:00","date_published":"2026-09-02T00:00:00+00:00","id":"https://serhiismetanskyi.com/docs/databases/postgresql/03-queries-performance/","image":null,"tags":["databases","postgresql","sql"],"title":"PostgreSQL — Queries & Performance","url":"https://serhiismetanskyi.com/docs/databases/postgresql/03-queries-performance/"},{"authors":[],"content_html":"<h1>PostgreSQL — Admin &amp; Operations</h1>\n<h2>Users &amp; Roles</h2>\n<p>```sql\n-- Create user (role with LOGIN)\nCREATE ROLE myuser WITH LOGIN PASSWORD 'strongpass';</p>\n<p>-- Create ...</p>","date_modified":"2026-09-02T00:00:00+00:00","date_published":"2026-09-02T00:00:00+00:00","id":"https://serhiismetanskyi.com/docs/databases/postgresql/04-admin-operations/","image":null,"tags":["databases","postgresql","sql"],"title":"PostgreSQL — Admin & Operations","url":"https://serhiismetanskyi.com/docs/databases/postgresql/04-admin-operations/"},{"authors":[],"content_html":"<h1>Anti-Patterns &amp; Risks</h1>\n<h2>Anti-Patterns</h2>\n<h3>Slow Pipelines</h3>\n<p>A pipeline that takes 45 minutes teaches developers to batch changes.\nBatched changes mean lar...</p>","date_modified":"2026-09-01T00:00:00+00:00","date_published":"2026-09-01T00:00:00+00:00","id":"https://serhiismetanskyi.com/docs/ci-cd-approaches/07-patterns-decisions/03-antipatterns-risks/","image":null,"tags":["ci-cd","devops"],"title":"Anti-Patterns & Risks","url":"https://serhiismetanskyi.com/docs/ci-cd-approaches/07-patterns-decisions/03-antipatterns-risks/"},{"authors":[],"content_html":"<h1>Real-World Architectures, Heuristics &amp; Decision Factors</h1>\n<h2>Real-World CI/CD Architectures</h2>\n<h3>Microservices</h3>\n<p>Each service has its own independent pipelin...</p>","date_modified":"2026-09-01T00:00:00+00:00","date_published":"2026-09-01T00:00:00+00:00","id":"https://serhiismetanskyi.com/docs/ci-cd-approaches/07-patterns-decisions/04-real-world-decisions/","image":null,"tags":["ci-cd","devops"],"title":"Real-World Architectures, Heuristics & Decision Factors","url":"https://serhiismetanskyi.com/docs/ci-cd-approaches/07-patterns-decisions/04-real-world-decisions/"},{"authors":[],"content_html":"<h1>Databases — Types, Differences &amp; Selection Guide</h1>\n<h2>Database Categories at a Glance</h2>\n<p>| Category | Data Model | Query Language | Examples |\n|----------|---...</p>","date_modified":"2026-09-01T00:00:00+00:00","date_published":"2026-09-01T00:00:00+00:00","id":"https://serhiismetanskyi.com/docs/databases/","image":null,"tags":["databases"],"title":"Databases — Types, Differences &amp; Selection Guide","url":"https://serhiismetanskyi.com/docs/databases/"},{"authors":[],"content_html":"<h1>PostgreSQL — Overview</h1>\n<h2>What Is PostgreSQL</h2>\n<p>PostgreSQL is an open-source <strong>object-relational database</strong> focused on reliability and flexibility. In practi...</p>","date_modified":"2026-09-01T00:00:00+00:00","date_published":"2026-09-01T00:00:00+00:00","id":"https://serhiismetanskyi.com/docs/databases/postgresql/","image":null,"tags":["databases","postgresql","sql"],"title":"PostgreSQL — Overview","url":"https://serhiismetanskyi.com/docs/databases/postgresql/"},{"authors":[],"content_html":"<h1>Testing in Production</h1>\n<h2>Why Test in Production</h2>\n<p>Staging is not production. No matter how well staging mirrors production,\nthe real environment has real d...</p>","date_modified":"2026-08-31T00:00:00+00:00","date_published":"2026-08-31T00:00:00+00:00","id":"https://serhiismetanskyi.com/docs/ci-cd-approaches/06-release-production/03-testing-in-production/","image":null,"tags":["ci-cd","devops"],"title":"Testing in Production","url":"https://serhiismetanskyi.com/docs/ci-cd-approaches/06-release-production/03-testing-in-production/"},{"authors":[],"content_html":"<h1>Advanced CI/CD Patterns</h1>\n<h2>GitOps</h2>\n<p>Git is the <strong>single source of truth</strong> for both application code and infrastructure state.\nEvery change to production is...</p>","date_modified":"2026-08-31T00:00:00+00:00","date_published":"2026-08-31T00:00:00+00:00","id":"https://serhiismetanskyi.com/docs/ci-cd-approaches/07-patterns-decisions/01-advanced-patterns/","image":null,"tags":["ci-cd","devops"],"title":"Advanced CI/CD Patterns","url":"https://serhiismetanskyi.com/docs/ci-cd-approaches/07-patterns-decisions/01-advanced-patterns/"},{"authors":[],"content_html":"<h1>Failure Handling in CI/CD</h1>\n<h2>Pipeline Failure Categories</h2>\n<p>| Category | Example | Response |\n|----------|---------|---------|\n| Transient failure | Flaky t...</p>","date_modified":"2026-08-31T00:00:00+00:00","date_published":"2026-08-31T00:00:00+00:00","id":"https://serhiismetanskyi.com/docs/ci-cd-approaches/07-patterns-decisions/02-failure-handling/","image":null,"tags":["ci-cd","devops"],"title":"Failure Handling in CI/CD","url":"https://serhiismetanskyi.com/docs/ci-cd-approaches/07-patterns-decisions/02-failure-handling/"},{"authors":[],"content_html":"<h1>Patterns Decisions</h1>\n<p>Patterns Decisions covers pipeline architecture, testing gates, deployment, and release controls, with focused guides on Advanced Patte...</p>","date_modified":"2026-08-31T00:00:00+00:00","date_published":"2026-08-31T00:00:00+00:00","id":"https://serhiismetanskyi.com/docs/ci-cd-approaches/07-patterns-decisions/","image":null,"tags":["ci-cd","devops"],"title":"Patterns Decisions","url":"https://serhiismetanskyi.com/docs/ci-cd-approaches/07-patterns-decisions/"},{"authors":[],"content_html":"<h1>Pipeline Performance &amp; Optimisation</h1>\n<h2>Why Pipeline Speed Matters</h2>\n<p>A 30-minute pipeline discourages small commits. Developers batch changes to avoid waiti...</p>","date_modified":"2026-08-30T00:00:00+00:00","date_published":"2026-08-30T00:00:00+00:00","id":"https://serhiismetanskyi.com/docs/ci-cd-approaches/05-security-observability/03-pipeline-performance/","image":null,"tags":["ci-cd","devops","observability","security"],"title":"Pipeline Performance & Optimisation","url":"https://serhiismetanskyi.com/docs/ci-cd-approaches/05-security-observability/03-pipeline-performance/"},{"authors":[],"content_html":"<h1>Release Management</h1>\n<h2>Semantic Versioning</h2>\n<p>The standard versioning scheme for software releases.</p>\n<p>```\nMAJOR.MINOR.PATCH</p>\n<p>2.1.3\n│ │ └── 3: Backwards-compat...</p>","date_modified":"2026-08-30T00:00:00+00:00","date_published":"2026-08-30T00:00:00+00:00","id":"https://serhiismetanskyi.com/docs/ci-cd-approaches/06-release-production/01-release-management/","image":null,"tags":["ci-cd","devops"],"title":"Release Management","url":"https://serhiismetanskyi.com/docs/ci-cd-approaches/06-release-production/01-release-management/"},{"authors":[],"content_html":"<h1>Rollback Strategies</h1>\n<h2>Why Rollback Must Be Instant</h2>\n<p>Every deployment can fail. The question is how quickly you recover.\nA rollback plan designed in advan...</p>","date_modified":"2026-08-30T00:00:00+00:00","date_published":"2026-08-30T00:00:00+00:00","id":"https://serhiismetanskyi.com/docs/ci-cd-approaches/06-release-production/02-rollback-strategies/","image":null,"tags":["ci-cd","devops"],"title":"Rollback Strategies","url":"https://serhiismetanskyi.com/docs/ci-cd-approaches/06-release-production/02-rollback-strategies/"},{"authors":[],"content_html":"<h1>Release Production</h1>\n<p>Release Production covers pipeline architecture, testing gates, deployment, and release controls, with focused guides on Release Manage...</p>","date_modified":"2026-08-30T00:00:00+00:00","date_published":"2026-08-30T00:00:00+00:00","id":"https://serhiismetanskyi.com/docs/ci-cd-approaches/06-release-production/","image":null,"tags":["ci-cd","devops"],"title":"Release Production","url":"https://serhiismetanskyi.com/docs/ci-cd-approaches/06-release-production/"},{"authors":[],"content_html":"<h1>Environment Management</h1>\n<h2>Environment Model</h2>\n<p>Most systems use three tiers. The artifact is promoted unchanged between them.</p>\n<p>```\nDeveloper → [Dev] → [Stag...</p>","date_modified":"2026-08-29T00:00:00+00:00","date_published":"2026-08-29T00:00:00+00:00","id":"https://serhiismetanskyi.com/docs/ci-cd-approaches/04-deployment/03-environment-management/","image":null,"tags":["ci-cd","deployment","devops"],"title":"Environment Management","url":"https://serhiismetanskyi.com/docs/ci-cd-approaches/04-deployment/03-environment-management/"},{"authors":[],"content_html":"<h1>Security in CI/CD</h1>\n<h2>Security Belongs in the Pipeline</h2>\n<p>Security checks that run only at the end are too late.\nShift left: catch vulnerabilities at the PR ...</p>","date_modified":"2026-08-29T00:00:00+00:00","date_published":"2026-08-29T00:00:00+00:00","id":"https://serhiismetanskyi.com/docs/ci-cd-approaches/05-security-observability/01-security/","image":null,"tags":["ci-cd","devops","observability","security"],"title":"Security in CI/CD","url":"https://serhiismetanskyi.com/docs/ci-cd-approaches/05-security-observability/01-security/"},{"authors":[],"content_html":"<h1>Pipeline Observability</h1>\n<h2>What to Observe</h2>\n<p>Running a pipeline without observability is flying blind.\nTwo dimensions matter: <strong>pipeline health</strong> and **depl...</p>","date_modified":"2026-08-29T00:00:00+00:00","date_published":"2026-08-29T00:00:00+00:00","id":"https://serhiismetanskyi.com/docs/ci-cd-approaches/05-security-observability/02-observability/","image":null,"tags":["ci-cd","devops","observability","security"],"title":"Pipeline Observability","url":"https://serhiismetanskyi.com/docs/ci-cd-approaches/05-security-observability/02-observability/"},{"authors":[],"content_html":"<h1>Security Observability</h1>\n<p>Security Observability covers pipeline architecture, testing gates, deployment, and release controls, with focused guides on Securi...</p>","date_modified":"2026-08-29T00:00:00+00:00","date_published":"2026-08-29T00:00:00+00:00","id":"https://serhiismetanskyi.com/docs/ci-cd-approaches/05-security-observability/","image":null,"tags":["ci-cd","devops","observability","security"],"title":"Security Observability","url":"https://serhiismetanskyi.com/docs/ci-cd-approaches/05-security-observability/"},{"authors":[],"content_html":"<h1>Quality Gates</h1>\n<h2>What Is a Quality Gate</h2>\n<p>A quality gate is an automated threshold that blocks pipeline progression when not met.\nNot a warning. A hard sto...</p>","date_modified":"2026-08-28T00:00:00+00:00","date_published":"2026-08-28T00:00:00+00:00","id":"https://serhiismetanskyi.com/docs/ci-cd-approaches/03-testing/02-quality-gates/","image":null,"tags":["ci-cd","devops","testing"],"title":"Quality Gates","url":"https://serhiismetanskyi.com/docs/ci-cd-approaches/03-testing/02-quality-gates/"},{"authors":[],"content_html":"<h1>Deployment Strategies</h1>\n<h2>Recreate (Big Bang)</h2>\n<p>Stop everything. Deploy new version. Start everything.</p>\n<p>```\nv1 running\n    ↓ stop all\n    ↓ deploy v2\n    ↓ ...</p>","date_modified":"2026-08-28T00:00:00+00:00","date_published":"2026-08-28T00:00:00+00:00","id":"https://serhiismetanskyi.com/docs/ci-cd-approaches/04-deployment/01-deployment-strategies/","image":null,"tags":["ci-cd","deployment","devops"],"title":"Deployment Strategies","url":"https://serhiismetanskyi.com/docs/ci-cd-approaches/04-deployment/01-deployment-strategies/"},{"authors":[],"content_html":"<h1>Infrastructure &amp; Infrastructure as Code</h1>\n<h2>Containers — Docker</h2>\n<p>Docker packages an application and all its dependencies into an immutable image.\nThe same ...</p>","date_modified":"2026-08-28T00:00:00+00:00","date_published":"2026-08-28T00:00:00+00:00","id":"https://serhiismetanskyi.com/docs/ci-cd-approaches/04-deployment/02-infrastructure-iac/","image":null,"tags":["ci-cd","deployment","devops"],"title":"Infrastructure & Infrastructure as Code","url":"https://serhiismetanskyi.com/docs/ci-cd-approaches/04-deployment/02-infrastructure-iac/"},{"authors":[],"content_html":"<h1>Deployment</h1>\n<p>Deployment covers pipeline architecture, testing gates, deployment, and release controls, with focused guides on Deployment Strategies, Infrast...</p>","date_modified":"2026-08-28T00:00:00+00:00","date_published":"2026-08-28T00:00:00+00:00","id":"https://serhiismetanskyi.com/docs/ci-cd-approaches/04-deployment/","image":null,"tags":["ci-cd","deployment","devops"],"title":"Deployment","url":"https://serhiismetanskyi.com/docs/ci-cd-approaches/04-deployment/"},{"authors":[],"content_html":"<h1>Build Stage</h1>\n<h2>What the Build Stage Does</h2>\n<p>The build stage transforms source code into a deployable artifact.\nIt must be <strong>fast</strong>, <strong>deterministic</strong>, and *...</p>","date_modified":"2026-08-27T00:00:00+00:00","date_published":"2026-08-27T00:00:00+00:00","id":"https://serhiismetanskyi.com/docs/ci-cd-approaches/02-build-artifacts/01-build-stage/","image":null,"tags":["ci-cd","devops"],"title":"Build Stage","url":"https://serhiismetanskyi.com/docs/ci-cd-approaches/02-build-artifacts/01-build-stage/"},{"authors":[],"content_html":"<h1>Artifact Management</h1>\n<h2>What Is an Artifact</h2>\n<p>An artifact is the <strong>immutable output</strong> of a build stage that is promoted through environments.</p>\n<p>```\nBuild onc...</p>","date_modified":"2026-08-27T00:00:00+00:00","date_published":"2026-08-27T00:00:00+00:00","id":"https://serhiismetanskyi.com/docs/ci-cd-approaches/02-build-artifacts/02-artifact-management/","image":null,"tags":["ci-cd","devops"],"title":"Artifact Management","url":"https://serhiismetanskyi.com/docs/ci-cd-approaches/02-build-artifacts/02-artifact-management/"},{"authors":[],"content_html":"<h1>Testing in CI/CD — Layers &amp; Strategy</h1>\n<h2>Test Layers in the Pipeline</h2>\n<p>Each test layer has different speed, coverage, and placement in the pipeline.</p>\n<p>```\n┌─...</p>","date_modified":"2026-08-27T00:00:00+00:00","date_published":"2026-08-27T00:00:00+00:00","id":"https://serhiismetanskyi.com/docs/ci-cd-approaches/03-testing/01-test-layers-strategy/","image":null,"tags":["ci-cd","devops","testing"],"title":"Testing in CI/CD — Layers & Strategy","url":"https://serhiismetanskyi.com/docs/ci-cd-approaches/03-testing/01-test-layers-strategy/"},{"authors":[],"content_html":"<h1>Testing</h1>\n<p>Testing covers pipeline architecture, testing gates, deployment, and release controls, with focused guides on Test Layers Strategy, Quality Gates....</p>","date_modified":"2026-08-27T00:00:00+00:00","date_published":"2026-08-27T00:00:00+00:00","id":"https://serhiismetanskyi.com/docs/ci-cd-approaches/03-testing/","image":null,"tags":["ci-cd","devops","testing"],"title":"Testing","url":"https://serhiismetanskyi.com/docs/ci-cd-approaches/03-testing/"},{"authors":[],"content_html":"<h1>CI/CD — Concepts &amp; Goals</h1>\n<h2>Continuous Integration (CI)</h2>\n<p>Developers integrate code into a shared repository <strong>frequently</strong> — multiple times per day.\nEach ...</p>","date_modified":"2026-08-26T00:00:00+00:00","date_published":"2026-08-26T00:00:00+00:00","id":"https://serhiismetanskyi.com/docs/ci-cd-approaches/01-fundamentals/01-concepts-goals/","image":null,"tags":["ci-cd","devops"],"title":"CI/CD — Concepts & Goals","url":"https://serhiismetanskyi.com/docs/ci-cd-approaches/01-fundamentals/01-concepts-goals/"},{"authors":[],"content_html":"<h1>Pipeline Architecture</h1>\n<h2>Pipeline Stages</h2>\n<p>A pipeline is a sequence of automated stages. Each stage must pass for the next to run.</p>\n<p>```\nSource → Build → Te...</p>","date_modified":"2026-08-26T00:00:00+00:00","date_published":"2026-08-26T00:00:00+00:00","id":"https://serhiismetanskyi.com/docs/ci-cd-approaches/01-fundamentals/02-pipeline-architecture/","image":null,"tags":["ci-cd","devops"],"title":"Pipeline Architecture","url":"https://serhiismetanskyi.com/docs/ci-cd-approaches/01-fundamentals/02-pipeline-architecture/"},{"authors":[],"content_html":"<h1>Fundamentals</h1>\n<p>Fundamentals covers pipeline architecture, testing gates, deployment, and release controls, with focused guides on Concepts Goals, Pipeline A...</p>","date_modified":"2026-08-26T00:00:00+00:00","date_published":"2026-08-26T00:00:00+00:00","id":"https://serhiismetanskyi.com/docs/ci-cd-approaches/01-fundamentals/","image":null,"tags":["ci-cd","devops"],"title":"Fundamentals","url":"https://serhiismetanskyi.com/docs/ci-cd-approaches/01-fundamentals/"},{"authors":[],"content_html":"<h1>Build Artifacts</h1>\n<p>Build Artifacts covers pipeline architecture, testing gates, deployment, and release controls, with focused guides on Build Stage, Artifac...</p>","date_modified":"2026-08-26T00:00:00+00:00","date_published":"2026-08-26T00:00:00+00:00","id":"https://serhiismetanskyi.com/docs/ci-cd-approaches/02-build-artifacts/","image":null,"tags":["ci-cd","devops"],"title":"Build Artifacts","url":"https://serhiismetanskyi.com/docs/ci-cd-approaches/02-build-artifacts/"},{"authors":[],"content_html":"<h1>CI/CD</h1>\n<p>Complete technical reference for Continuous Integration, Continuous Delivery, and Continuous Deployment.</p>\n<h2>Sections</h2>\n<h3>1. [Fundamentals](01-fund...</h3>","date_modified":"2026-08-25T00:00:00+00:00","date_published":"2026-08-25T00:00:00+00:00","id":"https://serhiismetanskyi.com/docs/ci-cd-approaches/","image":null,"tags":["ci-cd","devops"],"title":"CI/CD","url":"https://serhiismetanskyi.com/docs/ci-cd-approaches/"},{"authors":[],"content_html":"<h1>Shared Libraries</h1>\n<p>Reuse pipeline code across multiple projects with Jenkins Shared Libraries.</p>\n<hr />\n<h2>Why Shared Libraries?</h2>\n<p>When 3+ projects have similar...</p>","date_modified":"2026-08-25T00:00:00+00:00","date_published":"2026-08-25T00:00:00+00:00","id":"https://serhiismetanskyi.com/docs/jenkins-guide/03-advanced-features/03-shared-libraries/","image":null,"tags":["ci-cd","jenkins"],"title":"Shared Libraries","url":"https://serhiismetanskyi.com/docs/jenkins-guide/03-advanced-features/03-shared-libraries/"},{"authors":[],"content_html":"<h1>Security &amp; Performance</h1>\n<p>How to keep pipelines secure and fast.</p>\n<hr />\n<h2>Security</h2>\n<h3>Credential Management</h3>\n<p>```groovy\n// GOOD: Use Jenkins credentials\nenv...</p>","date_modified":"2026-08-25T00:00:00+00:00","date_published":"2026-08-25T00:00:00+00:00","id":"https://serhiismetanskyi.com/docs/jenkins-guide/04-patterns-best-practices/01-security-performance/","image":null,"tags":["ci-cd","jenkins","security"],"title":"Security & Performance","url":"https://serhiismetanskyi.com/docs/jenkins-guide/04-patterns-best-practices/01-security-performance/"},{"authors":[],"content_html":"<h1>Real-World Templates</h1>\n<p>Complete Jenkinsfile examples you can copy and adapt for your projects.</p>\n<hr />\n<h2>Python Project Pipeline</h2>\n<p>```groovy\npipeline {\n    ag...</p>","date_modified":"2026-08-25T00:00:00+00:00","date_published":"2026-08-25T00:00:00+00:00","id":"https://serhiismetanskyi.com/docs/jenkins-guide/04-patterns-best-practices/02-real-world-templates/","image":null,"tags":["ci-cd","jenkins"],"title":"Real-World Templates","url":"https://serhiismetanskyi.com/docs/jenkins-guide/04-patterns-best-practices/02-real-world-templates/"},{"authors":[],"content_html":"<h1>Patterns &amp; Best Practices</h1>\n<p>Real-world patterns, security guidelines, performance tips, and complete pipeline templates.</p>\n<hr />\n<h2>Topics</h2>\n<p>| Page | What You ...</p>","date_modified":"2026-08-25T00:00:00+00:00","date_published":"2026-08-25T00:00:00+00:00","id":"https://serhiismetanskyi.com/docs/jenkins-guide/04-patterns-best-practices/","image":null,"tags":["ci-cd","jenkins"],"title":"Patterns &amp; Best Practices","url":"https://serhiismetanskyi.com/docs/jenkins-guide/04-patterns-best-practices/"},{"authors":[],"content_html":"<h1>Post, Triggers &amp; Tools</h1>\n<p>Actions after pipeline finishes, automatic triggers, and tool configuration.</p>\n<hr />\n<h2>Post Block</h2>\n<p>The <code>post</code> block runs after stage...</p>","date_modified":"2026-08-24T00:00:00+00:00","date_published":"2026-08-24T00:00:00+00:00","id":"https://serhiismetanskyi.com/docs/jenkins-guide/02-declarative-syntax/03-post-triggers-tools/","image":null,"tags":["ci-cd","jenkins"],"title":"Post, Triggers & Tools","url":"https://serhiismetanskyi.com/docs/jenkins-guide/02-declarative-syntax/03-post-triggers-tools/"},{"authors":[],"content_html":"<h1>Parameters &amp; Environment</h1>\n<p>Make your pipelines configurable with parameters, environment variables, and credentials.</p>\n<hr />\n<h2>Parameters</h2>\n<p>Parameters let use...</p>","date_modified":"2026-08-24T00:00:00+00:00","date_published":"2026-08-24T00:00:00+00:00","id":"https://serhiismetanskyi.com/docs/jenkins-guide/03-advanced-features/01-parameters-environment/","image":null,"tags":["ci-cd","jenkins"],"title":"Parameters & Environment","url":"https://serhiismetanskyi.com/docs/jenkins-guide/03-advanced-features/01-parameters-environment/"},{"authors":[],"content_html":"<h1>When Conditions &amp; Parallel Stages</h1>\n<p>Control which stages run and execute independent stages at the same time.</p>\n<hr />\n<h2>When Conditions</h2>\n<p>The <code>when</code> block dec...</p>","date_modified":"2026-08-24T00:00:00+00:00","date_published":"2026-08-24T00:00:00+00:00","id":"https://serhiismetanskyi.com/docs/jenkins-guide/03-advanced-features/02-when-parallel/","image":null,"tags":["ci-cd","jenkins"],"title":"When Conditions & Parallel","url":"https://serhiismetanskyi.com/docs/jenkins-guide/03-advanced-features/02-when-parallel/"},{"authors":[],"content_html":"<h1>Advanced Features</h1>\n<p>This section covers features that make pipelines flexible and powerful: parameters, credentials, conditions, parallel execution, and sha...</p>","date_modified":"2026-08-24T00:00:00+00:00","date_published":"2026-08-24T00:00:00+00:00","id":"https://serhiismetanskyi.com/docs/jenkins-guide/03-advanced-features/","image":null,"tags":["ci-cd","jenkins"],"title":"Advanced Features","url":"https://serhiismetanskyi.com/docs/jenkins-guide/03-advanced-features/"},{"authors":[],"content_html":"<h1>Declarative vs Scripted</h1>\n<p>Jenkins has two pipeline syntaxes. This page explains both and helps you choose.</p>\n<hr />\n<h2>Quick Comparison</h2>\n<p>| Feature | Declarativ...</p>","date_modified":"2026-08-23T00:00:00+00:00","date_published":"2026-08-23T00:00:00+00:00","id":"https://serhiismetanskyi.com/docs/jenkins-guide/01-fundamentals/02-declarative-vs-scripted/","image":null,"tags":["ci-cd","jenkins"],"title":"Declarative vs Scripted","url":"https://serhiismetanskyi.com/docs/jenkins-guide/01-fundamentals/02-declarative-vs-scripted/"},{"authors":[],"content_html":"<h1>Pipeline, Agent &amp; Options</h1>\n<p>The three blocks that set up your pipeline: where it runs and how it behaves.</p>\n<hr />\n<h2>The <code>pipeline</code> Block</h2>\n<p>Every declarative J...</p>","date_modified":"2026-08-23T00:00:00+00:00","date_published":"2026-08-23T00:00:00+00:00","id":"https://serhiismetanskyi.com/docs/jenkins-guide/02-declarative-syntax/01-pipeline-agent-options/","image":null,"tags":["ci-cd","jenkins"],"title":"Pipeline, Agent & Options","url":"https://serhiismetanskyi.com/docs/jenkins-guide/02-declarative-syntax/01-pipeline-agent-options/"},{"authors":[],"content_html":"<h1>Stages &amp; Steps</h1>\n<p>Stages define <strong>what</strong> your pipeline does. Steps define <strong>how</strong> each stage does it.</p>\n<hr />\n<h2>Stages Block</h2>\n<p>All stages live inside a single ...</p>","date_modified":"2026-08-23T00:00:00+00:00","date_published":"2026-08-23T00:00:00+00:00","id":"https://serhiismetanskyi.com/docs/jenkins-guide/02-declarative-syntax/02-stages-steps/","image":null,"tags":["ci-cd","jenkins"],"title":"Stages & Steps","url":"https://serhiismetanskyi.com/docs/jenkins-guide/02-declarative-syntax/02-stages-steps/"},{"authors":[],"content_html":"<h1>Declarative Syntax</h1>\n<p>This section covers every block available in a declarative Jenkinsfile. Each page explains one concept with practical examples.</p>\n<hr />\n<h1>...</h1>","date_modified":"2026-08-23T00:00:00+00:00","date_published":"2026-08-23T00:00:00+00:00","id":"https://serhiismetanskyi.com/docs/jenkins-guide/02-declarative-syntax/","image":null,"tags":["ci-cd","jenkins"],"title":"Declarative Syntax","url":"https://serhiismetanskyi.com/docs/jenkins-guide/02-declarative-syntax/"},{"authors":[],"content_html":"<h1>What Is a Jenkinsfile</h1>\n<p>A Jenkinsfile is a text file that defines your CI/CD pipeline. It lives in your repository and Jenkins reads it automatically.</p>\n<hr />\n<p>...</p>","date_modified":"2026-08-22T00:00:00+00:00","date_published":"2026-08-22T00:00:00+00:00","id":"https://serhiismetanskyi.com/docs/jenkins-guide/01-fundamentals/01-what-is-jenkinsfile/","image":null,"tags":["ci-cd","jenkins"],"title":"What Is a Jenkinsfile","url":"https://serhiismetanskyi.com/docs/jenkins-guide/01-fundamentals/01-what-is-jenkinsfile/"},{"authors":[],"content_html":"<h1>Fundamentals</h1>\n<p>This section explains what Jenkins Pipeline is, why we use Jenkinsfiles, and the difference between declarative and scripted syntax.</p>\n<hr />\n<h2>...</h2>","date_modified":"2026-08-22T00:00:00+00:00","date_published":"2026-08-22T00:00:00+00:00","id":"https://serhiismetanskyi.com/docs/jenkins-guide/01-fundamentals/","image":null,"tags":["ci-cd","jenkins"],"title":"Fundamentals","url":"https://serhiismetanskyi.com/docs/jenkins-guide/01-fundamentals/"},{"authors":[],"content_html":"<h1>Jenkins Pipeline Guide</h1>\n<p>A practical guide to writing Jenkinsfiles — from basic syntax to production-ready pipelines.</p>\n<hr />\n<h2>What You Will Learn</h2>\n<p>| Sectio...</p>","date_modified":"2026-08-22T00:00:00+00:00","date_published":"2026-08-22T00:00:00+00:00","id":"https://serhiismetanskyi.com/docs/jenkins-guide/","image":null,"tags":["ci-cd","jenkins"],"title":"Jenkins Pipeline Guide","url":"https://serhiismetanskyi.com/docs/jenkins-guide/"},{"authors":[],"content_html":"<h1>Further Learning</h1>\n<p>This page gives you a clear path to keep learning after this guide.</p>\n<hr />\n<h2>Official Sources</h2>\n<p>Start with official documentation first:</p>\n<p>...</p>","date_modified":"2026-08-22T00:00:00+00:00","date_published":"2026-08-22T00:00:00+00:00","id":"https://serhiismetanskyi.com/docs/python-guide/07-best-practices/05-further-learning/","image":null,"tags":["python"],"title":"Further Learning","url":"https://serhiismetanskyi.com/docs/python-guide/07-best-practices/05-further-learning/"},{"authors":[],"content_html":"<h1>Security</h1>\n<p>Security in Python means protecting secrets, validating input, and following safe coding practices.</p>\n<hr />\n<h2>Never Store Secrets in Code</h2>\n<p>Secrets...</p>","date_modified":"2026-08-21T00:00:00+00:00","date_published":"2026-08-21T00:00:00+00:00","id":"https://serhiismetanskyi.com/docs/python-guide/07-best-practices/01-security/","image":null,"tags":["python","security"],"title":"Security","url":"https://serhiismetanskyi.com/docs/python-guide/07-best-practices/01-security/"},{"authors":[],"content_html":"<h1>Common Pitfalls</h1>\n<p>These are mistakes that even experienced Python developers make. Know them to avoid them.</p>\n<hr />\n<h2>1. Mutable Default Arguments</h2>\n<p>```python...</p>","date_modified":"2026-08-21T00:00:00+00:00","date_published":"2026-08-21T00:00:00+00:00","id":"https://serhiismetanskyi.com/docs/python-guide/07-best-practices/02-common-pitfalls/","image":null,"tags":["python"],"title":"Common Pitfalls","url":"https://serhiismetanskyi.com/docs/python-guide/07-best-practices/02-common-pitfalls/"},{"authors":[],"content_html":"<h1>Interview Readiness</h1>\n<p>Prepare for Python Automation QA interviews with these topics, questions, and tasks.</p>\n<hr />\n<h2>Core Python Questions</h2>\n<h3>Data Types &amp; ...</h3>","date_modified":"2026-08-21T00:00:00+00:00","date_published":"2026-08-21T00:00:00+00:00","id":"https://serhiismetanskyi.com/docs/python-guide/07-best-practices/03-interview-readiness/","image":null,"tags":["python"],"title":"Interview Readiness","url":"https://serhiismetanskyi.com/docs/python-guide/07-best-practices/03-interview-readiness/"},{"authors":[],"content_html":"<h1>Recommended Stack</h1>\n<p>A modern Python stack for Automation QA Engineers in 2026.</p>\n<hr />\n<h2>Core</h2>\n<p>| Tool | Purpose | Install |\n|------|---------|---------|\n| **...</p>","date_modified":"2026-08-21T00:00:00+00:00","date_published":"2026-08-21T00:00:00+00:00","id":"https://serhiismetanskyi.com/docs/python-guide/07-best-practices/04-recommended-stack/","image":null,"tags":["python"],"title":"Recommended Stack","url":"https://serhiismetanskyi.com/docs/python-guide/07-best-practices/04-recommended-stack/"},{"authors":[],"content_html":"<h1>Decorators &amp; Generators</h1>\n<p>Decorators and generators are powerful Python features used often in test automation.</p>\n<hr />\n<h2>Decorators</h2>\n<p>A decorator is a functi...</p>","date_modified":"2026-08-20T00:00:00+00:00","date_published":"2026-08-20T00:00:00+00:00","id":"https://serhiismetanskyi.com/docs/python-guide/06-advanced-topics/01-decorators-generators/","image":null,"tags":["python"],"title":"Decorators & Generators","url":"https://serhiismetanskyi.com/docs/python-guide/06-advanced-topics/01-decorators-generators/"},{"authors":[],"content_html":"<h1>Context Managers &amp; Async</h1>\n<p>Context managers handle setup and cleanup. Async programming speeds up I/O-bound tasks.</p>\n<hr />\n<h2>Context Managers</h2>\n<p>A context mana...</p>","date_modified":"2026-08-20T00:00:00+00:00","date_published":"2026-08-20T00:00:00+00:00","id":"https://serhiismetanskyi.com/docs/python-guide/06-advanced-topics/02-context-managers-async/","image":null,"tags":["context-engineering","python"],"title":"Context Managers & Async","url":"https://serhiismetanskyi.com/docs/python-guide/06-advanced-topics/02-context-managers-async/"},{"authors":[],"content_html":"<h1>Performance &amp; Optimization</h1>\n<p>Write fast code by choosing the right tools and avoiding common mistakes.</p>\n<hr />\n<h2>Measure First</h2>\n<p>!!! warning \"Do not guess — m...</p>","date_modified":"2026-08-20T00:00:00+00:00","date_published":"2026-08-20T00:00:00+00:00","id":"https://serhiismetanskyi.com/docs/python-guide/06-advanced-topics/03-performance/","image":null,"tags":["python"],"title":"Performance & Optimization","url":"https://serhiismetanskyi.com/docs/python-guide/06-advanced-topics/03-performance/"},{"authors":[],"content_html":"<h1>Best Practices</h1>\n<p>This section covers security, common mistakes, interview tips, and the recommended tool stack.</p>\n<hr />\n<h2>Topics</h2>\n<p>| Page | What You Will Lear...</p>","date_modified":"2026-08-20T00:00:00+00:00","date_published":"2026-08-20T00:00:00+00:00","id":"https://serhiismetanskyi.com/docs/python-guide/07-best-practices/","image":null,"tags":["python"],"title":"Best Practices","url":"https://serhiismetanskyi.com/docs/python-guide/07-best-practices/"},{"authors":[],"content_html":"<h1>Code Quality Tools</h1>\n<p>Code quality tools catch bugs, enforce style, and keep your codebase consistent.</p>\n<hr />\n<h2>PEP 8 — Python Style Guide</h2>\n<p>PEP 8 is the offi...</p>","date_modified":"2026-08-19T00:00:00+00:00","date_published":"2026-08-19T00:00:00+00:00","id":"https://serhiismetanskyi.com/docs/python-guide/05-quality-cicd/01-code-quality-tools/","image":null,"tags":["ci-cd","code-quality","python"],"title":"Code Quality Tools","url":"https://serhiismetanskyi.com/docs/python-guide/05-quality-cicd/01-code-quality-tools/"},{"authors":[],"content_html":"<h1>Dependency Management</h1>\n<p>Managing dependencies correctly makes your project reproducible and safe.</p>\n<hr />\n<h2>Virtual Environments</h2>\n<p>A virtual environment is an...</p>","date_modified":"2026-08-19T00:00:00+00:00","date_published":"2026-08-19T00:00:00+00:00","id":"https://serhiismetanskyi.com/docs/python-guide/05-quality-cicd/02-dependency-management/","image":null,"tags":["ci-cd","code-quality","python"],"title":"Dependency Management","url":"https://serhiismetanskyi.com/docs/python-guide/05-quality-cicd/02-dependency-management/"},{"authors":[],"content_html":"<h1>CI/CD Integration</h1>\n<p>CI/CD runs your tests and checks automatically on every code change.</p>\n<hr />\n<h2>What Is CI/CD?</h2>\n<p>| Term | Meaning |\n|------|---------|\n| **...</p>","date_modified":"2026-08-19T00:00:00+00:00","date_published":"2026-08-19T00:00:00+00:00","id":"https://serhiismetanskyi.com/docs/python-guide/05-quality-cicd/03-cicd-integration/","image":null,"tags":["ci-cd","code-quality","python"],"title":"CI/CD Integration","url":"https://serhiismetanskyi.com/docs/python-guide/05-quality-cicd/03-cicd-integration/"},{"authors":[],"content_html":"<h1>Advanced Topics</h1>\n<p>This section covers powerful Python features that make your code more elegant and efficient.</p>\n<hr />\n<h2>Topics</h2>\n<p>| Page | What You Will Learn...</p>","date_modified":"2026-08-19T00:00:00+00:00","date_published":"2026-08-19T00:00:00+00:00","id":"https://serhiismetanskyi.com/docs/python-guide/06-advanced-topics/","image":null,"tags":["python"],"title":"Advanced Topics","url":"https://serhiismetanskyi.com/docs/python-guide/06-advanced-topics/"},{"authors":[],"content_html":"<h1>API Testing</h1>\n<p>API testing checks that your backend works correctly. You send HTTP requests and verify the responses.</p>\n<hr />\n<h2>HTTP Basics</h2>\n<p>| Method | Purpos...</p>","date_modified":"2026-08-18T00:00:00+00:00","date_published":"2026-08-18T00:00:00+00:00","id":"https://serhiismetanskyi.com/docs/python-guide/04-automation/01-api-testing/","image":null,"tags":["python","test-automation"],"title":"API Testing","url":"https://serhiismetanskyi.com/docs/python-guide/04-automation/01-api-testing/"},{"authors":[],"content_html":"<h1>UI Automation</h1>\n<p>UI automation tests your application through a real browser, like a real user would.</p>\n<hr />\n<h2>Tool Comparison</h2>\n<p>| Feature | Playwright | Sele...</p>","date_modified":"2026-08-18T00:00:00+00:00","date_published":"2026-08-18T00:00:00+00:00","id":"https://serhiismetanskyi.com/docs/python-guide/04-automation/02-ui-automation/","image":null,"tags":["python","test-automation"],"title":"UI Automation","url":"https://serhiismetanskyi.com/docs/python-guide/04-automation/02-ui-automation/"},{"authors":[],"content_html":"<h1>Test Design Patterns</h1>\n<p>Design patterns keep your test code organized, reusable, and easy to maintain.</p>\n<hr />\n<h2>Page Object Model (POM)</h2>\n<p>The most important p...</p>","date_modified":"2026-08-18T00:00:00+00:00","date_published":"2026-08-18T00:00:00+00:00","id":"https://serhiismetanskyi.com/docs/python-guide/04-automation/03-test-patterns/","image":null,"tags":["python","test-automation"],"title":"Test Design Patterns","url":"https://serhiismetanskyi.com/docs/python-guide/04-automation/03-test-patterns/"},{"authors":[],"content_html":"<h1>Code Quality &amp; CI/CD</h1>\n<p>This section covers tools that keep your code clean and pipelines that run your tests automatically.</p>\n<hr />\n<h2>Topics</h2>\n<p>| Page | What Y...</p>","date_modified":"2026-08-18T00:00:00+00:00","date_published":"2026-08-18T00:00:00+00:00","id":"https://serhiismetanskyi.com/docs/python-guide/05-quality-cicd/","image":null,"tags":["ci-cd","code-quality","python"],"title":"Code Quality &amp; CI/CD","url":"https://serhiismetanskyi.com/docs/python-guide/05-quality-cicd/"},{"authors":[],"content_html":"<h1>Fixtures &amp; Parametrize</h1>\n<p>Fixtures provide test data and setup. Parametrize runs the same test with different inputs.</p>\n<hr />\n<h2>Fixtures</h2>\n<p>A fixture is a funct...</p>","date_modified":"2026-08-17T00:00:00+00:00","date_published":"2026-08-17T00:00:00+00:00","id":"https://serhiismetanskyi.com/docs/python-guide/03-testing-pytest/03-fixtures-parametrize/","image":null,"tags":["pytest","python","testing"],"title":"Fixtures & Parametrize","url":"https://serhiismetanskyi.com/docs/python-guide/03-testing-pytest/03-fixtures-parametrize/"},{"authors":[],"content_html":"<h1>Test Architecture</h1>\n<p>Good test architecture keeps your test code organized, maintainable, and scalable.</p>\n<hr />\n<h2>Project Structure</h2>\n<p>```\nproject/\n├── src/\n│  ...</p>","date_modified":"2026-08-17T00:00:00+00:00","date_published":"2026-08-17T00:00:00+00:00","id":"https://serhiismetanskyi.com/docs/python-guide/03-testing-pytest/04-test-architecture/","image":null,"tags":["pytest","python","testing"],"title":"Test Architecture","url":"https://serhiismetanskyi.com/docs/python-guide/03-testing-pytest/04-test-architecture/"},{"authors":[],"content_html":"<h1>Assertions &amp; Mocking</h1>\n<p>Custom assertions make tests more readable. Mocking isolates code from external dependencies.</p>\n<hr />\n<h2>Built-in Assertions</h2>\n<p>pytest re...</p>","date_modified":"2026-08-17T00:00:00+00:00","date_published":"2026-08-17T00:00:00+00:00","id":"https://serhiismetanskyi.com/docs/python-guide/03-testing-pytest/05-assertions-mocking/","image":null,"tags":["pytest","python","testing"],"title":"Assertions & Mocking","url":"https://serhiismetanskyi.com/docs/python-guide/03-testing-pytest/05-assertions-mocking/"},{"authors":[],"content_html":"<h1>Automation</h1>\n<p>This section covers practical test automation — API testing, UI automation, and design patterns.</p>\n<hr />\n<h2>Topics</h2>\n<p>| Page | What You Will Learn ...</p>","date_modified":"2026-08-17T00:00:00+00:00","date_published":"2026-08-17T00:00:00+00:00","id":"https://serhiismetanskyi.com/docs/python-guide/04-automation/","image":null,"tags":["python","test-automation"],"title":"Automation","url":"https://serhiismetanskyi.com/docs/python-guide/04-automation/"},{"authors":[],"content_html":"<h1>Files &amp; Data Formats</h1>\n<p>Python makes it easy to read and write files. This page covers text files, JSON, and CSV.</p>\n<hr />\n<h2>Reading and Writing Text Files</h2>\n<h2>...</h2>","date_modified":"2026-08-16T00:00:00+00:00","date_published":"2026-08-16T00:00:00+00:00","id":"https://serhiismetanskyi.com/docs/python-guide/02-oop-error-handling/04-files-data-formats/","image":null,"tags":["python"],"title":"Files & Data Formats","url":"https://serhiismetanskyi.com/docs/python-guide/02-oop-error-handling/04-files-data-formats/"},{"authors":[],"content_html":"<h1>Testing Fundamentals</h1>\n<p>Before writing tests, you need to understand the different types and levels of testing.</p>\n<hr />\n<h2>Why We Test</h2>\n<ul>\n<li>Find bugs <strong>early</strong> (...</li>\n</ul>","date_modified":"2026-08-16T00:00:00+00:00","date_published":"2026-08-16T00:00:00+00:00","id":"https://serhiismetanskyi.com/docs/python-guide/03-testing-pytest/01-testing-fundamentals/","image":null,"tags":["pytest","python","testing"],"title":"Testing Fundamentals","url":"https://serhiismetanskyi.com/docs/python-guide/03-testing-pytest/01-testing-fundamentals/"},{"authors":[],"content_html":"<h1>pytest Basics</h1>\n<p><code>pytest</code> is the most popular testing framework in Python. It is simple, powerful, and has a large plugin ecosystem.</p>\n<hr />\n<h2>Install pytest</h2>\n<p>...</p>","date_modified":"2026-08-16T00:00:00+00:00","date_published":"2026-08-16T00:00:00+00:00","id":"https://serhiismetanskyi.com/docs/python-guide/03-testing-pytest/02-pytest-basics/","image":null,"tags":["pytest","python","testing"],"title":"pytest Basics","url":"https://serhiismetanskyi.com/docs/python-guide/03-testing-pytest/02-pytest-basics/"},{"authors":[],"content_html":"<h1>Testing with pytest</h1>\n<p>This section covers testing fundamentals and the <code>pytest</code> framework — the standard testing tool in Python.</p>\n<hr />\n<h2>Topics</h2>\n<p>| Page | W...</p>","date_modified":"2026-08-16T00:00:00+00:00","date_published":"2026-08-16T00:00:00+00:00","id":"https://serhiismetanskyi.com/docs/python-guide/03-testing-pytest/","image":null,"tags":["pytest","python","testing"],"title":"Testing with pytest","url":"https://serhiismetanskyi.com/docs/python-guide/03-testing-pytest/"},{"authors":[],"content_html":"<h1>Classes &amp; Objects</h1>\n<p>A class is a blueprint for creating objects. Objects have data (attributes) and behavior (methods).</p>\n<hr />\n<h2>Creating a Class</h2>\n<p>```python...</p>","date_modified":"2026-08-15T00:00:00+00:00","date_published":"2026-08-15T00:00:00+00:00","id":"https://serhiismetanskyi.com/docs/python-guide/02-oop-error-handling/01-classes-objects/","image":null,"tags":["python"],"title":"Classes & Objects","url":"https://serhiismetanskyi.com/docs/python-guide/02-oop-error-handling/01-classes-objects/"},{"authors":[],"content_html":"<h1>Inheritance &amp; Composition</h1>\n<p>Inheritance and composition are two ways to reuse code. Each has its place.</p>\n<hr />\n<h2>Inheritance</h2>\n<p>A child class gets all attribu...</p>","date_modified":"2026-08-15T00:00:00+00:00","date_published":"2026-08-15T00:00:00+00:00","id":"https://serhiismetanskyi.com/docs/python-guide/02-oop-error-handling/02-inheritance-composition/","image":null,"tags":["python"],"title":"Inheritance & Composition","url":"https://serhiismetanskyi.com/docs/python-guide/02-oop-error-handling/02-inheritance-composition/"},{"authors":[],"content_html":"<h1>Exceptions &amp; Logging</h1>\n<p>Good error handling makes your code reliable. Good logging makes debugging easy.</p>\n<hr />\n<h2>Exception Handling Basics</h2>\n<p>```python\ntry:\n ...</p>","date_modified":"2026-08-15T00:00:00+00:00","date_published":"2026-08-15T00:00:00+00:00","id":"https://serhiismetanskyi.com/docs/python-guide/02-oop-error-handling/03-exceptions-logging/","image":null,"tags":["python"],"title":"Exceptions & Logging","url":"https://serhiismetanskyi.com/docs/python-guide/02-oop-error-handling/03-exceptions-logging/"},{"authors":[],"content_html":"<h1>OOP &amp; Error Handling</h1>\n<p>This section covers object-oriented programming, exception handling, logging, and working with files.</p>\n<hr />\n<h2>Topics</h2>\n<p>| Page | What ...</p>","date_modified":"2026-08-15T00:00:00+00:00","date_published":"2026-08-15T00:00:00+00:00","id":"https://serhiismetanskyi.com/docs/python-guide/02-oop-error-handling/","image":null,"tags":["python"],"title":"OOP &amp; Error Handling","url":"https://serhiismetanskyi.com/docs/python-guide/02-oop-error-handling/"},{"authors":[],"content_html":"<h1>Environment Setup</h1>\n<p>This page explains how to set up a Python project using <code>uv</code> — a modern, fast package manager.</p>\n<hr />\n<h2>What Is uv?</h2>\n<p><code>uv</code> is a Python pa...</p>","date_modified":"2026-08-14T00:00:00+00:00","date_published":"2026-08-14T00:00:00+00:00","id":"https://serhiismetanskyi.com/docs/python-guide/01-setup-fundamentals/01-environment-setup/","image":null,"tags":["python"],"title":"Environment Setup","url":"https://serhiismetanskyi.com/docs/python-guide/01-setup-fundamentals/01-environment-setup/"},{"authors":[],"content_html":"<h1>Data Types &amp; Variables</h1>\n<p>Python has simple and powerful data types. This page covers the basics you use every day.</p>\n<hr />\n<h2>Basic Data Types</h2>\n<p>| Type | Examp...</p>","date_modified":"2026-08-14T00:00:00+00:00","date_published":"2026-08-14T00:00:00+00:00","id":"https://serhiismetanskyi.com/docs/python-guide/01-setup-fundamentals/02-data-types-variables/","image":null,"tags":["python"],"title":"Data Types & Variables","url":"https://serhiismetanskyi.com/docs/python-guide/01-setup-fundamentals/02-data-types-variables/"},{"authors":[],"content_html":"<h1>Control Flow &amp; Loops</h1>\n<p>Control flow lets you make decisions in your code. Loops let you repeat actions.</p>\n<hr />\n<h2>Conditional Statements</h2>\n<h3>Basic if/elif/e...</h3>","date_modified":"2026-08-14T00:00:00+00:00","date_published":"2026-08-14T00:00:00+00:00","id":"https://serhiismetanskyi.com/docs/python-guide/01-setup-fundamentals/03-control-flow-loops/","image":null,"tags":["python"],"title":"Control Flow & Loops","url":"https://serhiismetanskyi.com/docs/python-guide/01-setup-fundamentals/03-control-flow-loops/"},{"authors":[],"content_html":"<h1>Data Structures</h1>\n<p>Python has four main built-in data structures. Each one is good for different tasks.</p>\n<hr />\n<h2>Overview</h2>\n<p>| Structure | Ordered | Mutable | ...</p>","date_modified":"2026-08-14T00:00:00+00:00","date_published":"2026-08-14T00:00:00+00:00","id":"https://serhiismetanskyi.com/docs/python-guide/01-setup-fundamentals/04-data-structures/","image":null,"tags":["python"],"title":"Data Structures","url":"https://serhiismetanskyi.com/docs/python-guide/01-setup-fundamentals/04-data-structures/"},{"authors":[],"content_html":"<h1>Functions &amp; Modules</h1>\n<p>Functions help you organize code into reusable pieces. Modules help you split code across files.</p>\n<hr />\n<h2>Defining Functions</h2>\n<p>```pytho...</p>","date_modified":"2026-08-14T00:00:00+00:00","date_published":"2026-08-14T00:00:00+00:00","id":"https://serhiismetanskyi.com/docs/python-guide/01-setup-fundamentals/05-functions-modules/","image":null,"tags":["python"],"title":"Functions & Modules","url":"https://serhiismetanskyi.com/docs/python-guide/01-setup-fundamentals/05-functions-modules/"},{"authors":[],"content_html":"<h1>Interpreting Results</h1>\n<h2>Healthy System</h2>\n<p>A system behaving correctly under load shows:</p>\n<p>| Signal | What It Looks Like |\n|--------|-------------------|\n| St...</p>","date_modified":"2026-08-13T00:00:00+00:00","date_published":"2026-08-13T00:00:00+00:00","id":"https://serhiismetanskyi.com/docs/performance-testing/04-execution-results/03-interpreting-results/","image":null,"tags":["load-testing","performance"],"title":"Interpreting Results","url":"https://serhiismetanskyi.com/docs/performance-testing/04-execution-results/03-interpreting-results/"},{"authors":[],"content_html":"<h1>Pitfalls, Real-World Scenarios &amp; Heuristics</h1>\n<h2>Common Pitfalls</h2>\n<h3>Ignoring Percentiles</h3>\n<p>Using average response time as the success metric. Average hides...</p>","date_modified":"2026-08-13T00:00:00+00:00","date_published":"2026-08-13T00:00:00+00:00","id":"https://serhiismetanskyi.com/docs/performance-testing/04-execution-results/04-pitfalls-heuristics/","image":null,"tags":["load-testing","performance"],"title":"Pitfalls, Real-World Scenarios & Heuristics","url":"https://serhiismetanskyi.com/docs/performance-testing/04-execution-results/04-pitfalls-heuristics/"},{"authors":[],"content_html":"<h1>Setup &amp; Fundamentals</h1>\n<p>This section covers everything you need to start writing Python code.</p>\n<hr />\n<h2>Topics</h2>\n<p>| Page | What You Will Learn |\n|------|-------...</p>","date_modified":"2026-08-13T00:00:00+00:00","date_published":"2026-08-13T00:00:00+00:00","id":"https://serhiismetanskyi.com/docs/python-guide/01-setup-fundamentals/","image":null,"tags":["python"],"title":"Setup &amp; Fundamentals","url":"https://serhiismetanskyi.com/docs/python-guide/01-setup-fundamentals/"},{"authors":[],"content_html":"<h1>Python Guide for Automation QA</h1>\n<p>A complete, practical Python guide for Automation QA Engineers (Middle level).</p>\n<p>This guide covers Python from environment s...</p>","date_modified":"2026-08-13T00:00:00+00:00","date_published":"2026-08-13T00:00:00+00:00","id":"https://serhiismetanskyi.com/docs/python-guide/","image":null,"tags":["python"],"title":"Python Guide for Automation QA","url":"https://serhiismetanskyi.com/docs/python-guide/"},{"authors":[],"content_html":"<h1>Monitoring &amp; Observability</h1>\n<h2>Why It Matters</h2>\n<p>Locust tells you what users experience. System metrics tell you <strong>why</strong>.\nRunning a load test without monitor...</p>","date_modified":"2026-08-12T00:00:00+00:00","date_published":"2026-08-12T00:00:00+00:00","id":"https://serhiismetanskyi.com/docs/performance-testing/03-bottlenecks-monitoring/02-monitoring-observability/","image":null,"tags":["load-testing","observability","performance"],"title":"Monitoring & Observability","url":"https://serhiismetanskyi.com/docs/performance-testing/03-bottlenecks-monitoring/02-monitoring-observability/"},{"authors":[],"content_html":"<h1>SLA / SLO</h1>\n<h2>Definitions</h2>\n<h3>SLA — Service Level Agreement</h3>\n<p>An <strong>external contract</strong> with customers or partners.\nDefines the minimum acceptable performan...</p>","date_modified":"2026-08-12T00:00:00+00:00","date_published":"2026-08-12T00:00:00+00:00","id":"https://serhiismetanskyi.com/docs/performance-testing/04-execution-results/01-sla-slo/","image":null,"tags":["load-testing","performance"],"title":"SLA / SLO","url":"https://serhiismetanskyi.com/docs/performance-testing/04-execution-results/01-sla-slo/"},{"authors":[],"content_html":"<h1>Test Execution Strategy</h1>\n<h2>Pre-Test Preparation</h2>\n<p>Running a test against a cold system produces misleading results.\nThe first requests hit empty caches, tr...</p>","date_modified":"2026-08-12T00:00:00+00:00","date_published":"2026-08-12T00:00:00+00:00","id":"https://serhiismetanskyi.com/docs/performance-testing/04-execution-results/02-execution-strategy/","image":null,"tags":["load-testing","performance"],"title":"Test Execution Strategy","url":"https://serhiismetanskyi.com/docs/performance-testing/04-execution-results/02-execution-strategy/"},{"authors":[],"content_html":"<h1>Execution Results</h1>\n<p>Execution Results covers workload modeling, performance metrics, bottleneck analysis, and SLO validation, with focused guides on SLA SLO...</p>","date_modified":"2026-08-12T00:00:00+00:00","date_published":"2026-08-12T00:00:00+00:00","id":"https://serhiismetanskyi.com/docs/performance-testing/04-execution-results/","image":null,"tags":["load-testing","performance"],"title":"Execution Results","url":"https://serhiismetanskyi.com/docs/performance-testing/04-execution-results/"},{"authors":[],"content_html":"<h1>Metrics Analysis in Locust</h1>\n<h2>Built-in Metrics</h2>\n<p>Locust tracks and reports the following out of the box:</p>\n<p>| Metric | Description |\n|--------|-------------|...</p>","date_modified":"2026-08-11T00:00:00+00:00","date_published":"2026-08-11T00:00:00+00:00","id":"https://serhiismetanskyi.com/docs/performance-testing/02-locust/04-metrics-analysis/","image":null,"tags":["load-testing","locust","metrics","performance"],"title":"Metrics Analysis in Locust","url":"https://serhiismetanskyi.com/docs/performance-testing/02-locust/04-metrics-analysis/"},{"authors":[],"content_html":"<h1>Advanced Locust Usage</h1>\n<h2>Distributed Testing</h2>\n<p>A single machine can typically simulate 500–5000 users (depends on wait time and request speed).\nFor larger ...</p>","date_modified":"2026-08-11T00:00:00+00:00","date_published":"2026-08-11T00:00:00+00:00","id":"https://serhiismetanskyi.com/docs/performance-testing/02-locust/05-advanced-usage/","image":null,"tags":["load-testing","locust","performance"],"title":"Advanced Locust Usage","url":"https://serhiismetanskyi.com/docs/performance-testing/02-locust/05-advanced-usage/"},{"authors":[],"content_html":"<h1>Performance Bottlenecks</h1>\n<p>A bottleneck is the <strong>constraint that limits overall throughput</strong>.\nFixing anything else first is wasted effort. Find the bottlenec...</p>","date_modified":"2026-08-11T00:00:00+00:00","date_published":"2026-08-11T00:00:00+00:00","id":"https://serhiismetanskyi.com/docs/performance-testing/03-bottlenecks-monitoring/01-bottlenecks/","image":null,"tags":["load-testing","observability","performance"],"title":"Performance Bottlenecks","url":"https://serhiismetanskyi.com/docs/performance-testing/03-bottlenecks-monitoring/01-bottlenecks/"},{"authors":[],"content_html":"<h1>Bottlenecks Monitoring</h1>\n<p>Bottlenecks Monitoring covers workload modeling, performance metrics, bottleneck analysis, and SLO validation, with focused guides ...</p>","date_modified":"2026-08-11T00:00:00+00:00","date_published":"2026-08-11T00:00:00+00:00","id":"https://serhiismetanskyi.com/docs/performance-testing/03-bottlenecks-monitoring/","image":null,"tags":["load-testing","observability","performance"],"title":"Bottlenecks Monitoring","url":"https://serhiismetanskyi.com/docs/performance-testing/03-bottlenecks-monitoring/"},{"authors":[],"content_html":"<h1>Locust — Architecture &amp; Basics</h1>\n<h2>What Locust Is</h2>\n<p>Locust is an open-source load testing tool where test scenarios are written in <strong>plain Python</strong>.\nNo DSLs...</p>","date_modified":"2026-08-10T00:00:00+00:00","date_published":"2026-08-10T00:00:00+00:00","id":"https://serhiismetanskyi.com/docs/performance-testing/02-locust/01-architecture-basics/","image":null,"tags":["load-testing","locust","performance"],"title":"Locust — Architecture & Basics","url":"https://serhiismetanskyi.com/docs/performance-testing/02-locust/01-architecture-basics/"},{"authors":[],"content_html":"<h1>Load Modeling</h1>\n<h2>User Behavior Modeling</h2>\n<p>A load test that only hammers a single endpoint is not realistic.\nReal users follow <strong>flows</strong>: they log in, brows...</p>","date_modified":"2026-08-10T00:00:00+00:00","date_published":"2026-08-10T00:00:00+00:00","id":"https://serhiismetanskyi.com/docs/performance-testing/02-locust/02-load-modeling/","image":null,"tags":["load-testing","locust","performance"],"title":"Load Modeling","url":"https://serhiismetanskyi.com/docs/performance-testing/02-locust/02-load-modeling/"},{"authors":[],"content_html":"<h1>Test Design in Locust</h1>\n<h2>Scenario Design</h2>\n<p>Design tests around <strong>business flows</strong>, not individual endpoints.</p>\n<p>| Approach | Problem |\n|----------|---------|...</p>","date_modified":"2026-08-10T00:00:00+00:00","date_published":"2026-08-10T00:00:00+00:00","id":"https://serhiismetanskyi.com/docs/performance-testing/02-locust/03-test-design/","image":null,"tags":["load-testing","locust","performance"],"title":"Test Design in Locust","url":"https://serhiismetanskyi.com/docs/performance-testing/02-locust/03-test-design/"},{"authors":[],"content_html":"<h1>Locust</h1>\n<p>Locust covers workload modeling, performance metrics, bottleneck analysis, and SLO validation, with focused guides on Architecture Basics, Load Mod...</p>","date_modified":"2026-08-10T00:00:00+00:00","date_published":"2026-08-10T00:00:00+00:00","id":"https://serhiismetanskyi.com/docs/performance-testing/02-locust/","image":null,"tags":["load-testing","locust","performance"],"title":"Locust","url":"https://serhiismetanskyi.com/docs/performance-testing/02-locust/"},{"authors":[],"content_html":"<h1>Performance Testing — Goals &amp; Types</h1>\n<h2>Why We Do It</h2>\n<p>Performance testing is not about proving the system is fast.\nIt is about understanding **how the syst...</p>","date_modified":"2026-08-09T00:00:00+00:00","date_published":"2026-08-09T00:00:00+00:00","id":"https://serhiismetanskyi.com/docs/performance-testing/01-fundamentals-metrics/01-goals-and-types/","image":null,"tags":["load-testing","metrics","performance"],"title":"Performance Testing — Goals & Types","url":"https://serhiismetanskyi.com/docs/performance-testing/01-fundamentals-metrics/01-goals-and-types/"},{"authors":[],"content_html":"<h1>Core Metrics</h1>\n<h2>Response Time (Latency)</h2>\n<p>Time from the moment a request is sent until the full response is received.</p>\n<h3>Components</h3>\n<p>```\nDNS resolution →...</p>","date_modified":"2026-08-09T00:00:00+00:00","date_published":"2026-08-09T00:00:00+00:00","id":"https://serhiismetanskyi.com/docs/performance-testing/01-fundamentals-metrics/02-core-metrics/","image":null,"tags":["load-testing","metrics","performance"],"title":"Core Metrics","url":"https://serhiismetanskyi.com/docs/performance-testing/01-fundamentals-metrics/02-core-metrics/"},{"authors":[],"content_html":"<h1>Metric Relationships</h1>\n<h2>Little's Law</h2>\n<p>The fundamental law connecting the three core metrics:</p>\n<p><code>Concurrency = RPS × Response Time (seconds)</code></p>\n<p>| Scena...</p>","date_modified":"2026-08-09T00:00:00+00:00","date_published":"2026-08-09T00:00:00+00:00","id":"https://serhiismetanskyi.com/docs/performance-testing/01-fundamentals-metrics/03-metric-relationships/","image":null,"tags":["load-testing","metrics","performance"],"title":"Metric Relationships","url":"https://serhiismetanskyi.com/docs/performance-testing/01-fundamentals-metrics/03-metric-relationships/"},{"authors":[],"content_html":"<h1>Fundamentals Metrics</h1>\n<p>Fundamentals Metrics covers workload modeling, performance metrics, bottleneck analysis, and SLO validation, with focused guides on G...</p>","date_modified":"2026-08-09T00:00:00+00:00","date_published":"2026-08-09T00:00:00+00:00","id":"https://serhiismetanskyi.com/docs/performance-testing/01-fundamentals-metrics/","image":null,"tags":["load-testing","metrics","performance"],"title":"Fundamentals Metrics","url":"https://serhiismetanskyi.com/docs/performance-testing/01-fundamentals-metrics/"},{"authors":[],"content_html":"<h1>DeepEval Guide — Part 18: Evaluation Configs, Flags &amp; Reference</h1>\n<h2>Configs for <code>evaluate()</code></h2>\n<p>All configs are optional parameters passed to <code>evaluate()</code> or...</p>","date_modified":"2026-08-08T00:00:00+00:00","date_published":"2026-08-08T00:00:00+00:00","id":"https://serhiismetanskyi.com/docs/llm-evaluation/03_practical/18_configs_flags_reference/","image":null,"tags":["deepeval","evaluation","llm","rag"],"title":"DeepEval Guide — Part 18: Evaluation Configs, Flags & Reference","url":"https://serhiismetanskyi.com/docs/llm-evaluation/03_practical/18_configs_flags_reference/"},{"authors":[],"content_html":"<h1>DeepEval Guide — Part 19: Reference Appendix</h1>\n<h2>DeepTeam Migration (Red Teaming)</h2>\n<p>Red teaming moved to dedicated package <strong>DeepTeam</strong> (`pip install deepte...</p>","date_modified":"2026-08-08T00:00:00+00:00","date_published":"2026-08-08T00:00:00+00:00","id":"https://serhiismetanskyi.com/docs/llm-evaluation/03_practical/19_reference_appendix/","image":null,"tags":["deepeval","evaluation","llm","rag"],"title":"DeepEval Guide — Part 19: Reference Appendix","url":"https://serhiismetanskyi.com/docs/llm-evaluation/03_practical/19_reference_appendix/"},{"authors":[],"content_html":"<h1>DeepEval Guide — Part 20: End-to-End Complex Tests</h1>\n<h2>What Is a Complex E2E Test?</h2>\n<p>A complex end-to-end test covers <strong>one realistic dialogue scenario</strong> th...</p>","date_modified":"2026-08-08T00:00:00+00:00","date_published":"2026-08-08T00:00:00+00:00","id":"https://serhiismetanskyi.com/docs/llm-evaluation/03_practical/20_e2e_complex_tests/","image":null,"tags":["deepeval","evaluation","llm","rag"],"title":"DeepEval Guide — Part 20: End-to-End Complex Tests","url":"https://serhiismetanskyi.com/docs/llm-evaluation/03_practical/20_e2e_complex_tests/"},{"authors":[],"content_html":"<h1>Performance Testing</h1>\n<p>Performance testing answers one question: <strong>does the system behave correctly under load?</strong></p>\n<p>This section covers the full spectrum — fr...</p>","date_modified":"2026-08-08T00:00:00+00:00","date_published":"2026-08-08T00:00:00+00:00","id":"https://serhiismetanskyi.com/docs/performance-testing/","image":null,"tags":["load-testing","performance"],"title":"Performance Testing","url":"https://serhiismetanskyi.com/docs/performance-testing/"},{"authors":[],"content_html":"<h1>DeepEval Guide — Part 14: Practical RAG Testing</h1>\n<p>Based on the <a href=\"https://testerstories.com/2026/02/ai-and-testing-evaluation-and-deepeval/\">AI and Testing</a>\ns...</p>","date_modified":"2026-08-07T00:00:00+00:00","date_published":"2026-08-07T00:00:00+00:00","id":"https://serhiismetanskyi.com/docs/llm-evaluation/03_practical/14_practical_rag_testing/","image":null,"tags":["deepeval","evaluation","llm","rag"],"title":"DeepEval Guide — Part 14: Practical RAG Testing","url":"https://serhiismetanskyi.com/docs/llm-evaluation/03_practical/14_practical_rag_testing/"},{"authors":[],"content_html":"<h1>DeepEval Guide — Part 15: RAG Diagnostic Testing</h1>\n<p>Based on the [Improving Retrieval Quality](https://testerstories.com/2026/02/ai-and-testing-improving-ret...</p>","date_modified":"2026-08-07T00:00:00+00:00","date_published":"2026-08-07T00:00:00+00:00","id":"https://serhiismetanskyi.com/docs/llm-evaluation/03_practical/15_rag_diagnostic_testing/","image":null,"tags":["deepeval","evaluation","llm","rag"],"title":"DeepEval Guide — Part 15: RAG Diagnostic Testing","url":"https://serhiismetanskyi.com/docs/llm-evaluation/03_practical/15_rag_diagnostic_testing/"},{"authors":[],"content_html":"<h1>DeepEval Guide — Part 16: Datasets and Goldens</h1>\n<h2>Golden vs Test Case</h2>\n<p>A <strong>Golden</strong> is a template — it holds input data and expected results\nbut is missin...</p>","date_modified":"2026-08-07T00:00:00+00:00","date_published":"2026-08-07T00:00:00+00:00","id":"https://serhiismetanskyi.com/docs/llm-evaluation/03_practical/16_datasets/","image":null,"tags":["deepeval","evaluation","llm","rag"],"title":"DeepEval Guide — Part 16: Datasets and Goldens","url":"https://serhiismetanskyi.com/docs/llm-evaluation/03_practical/16_datasets/"},{"authors":[],"content_html":"<h1>DeepEval Guide — Part 17: Prompts &amp; Prompt Optimization</h1>\n<h2>The Prompt Class</h2>\n<p>A <code>Prompt</code> in DeepEval is a first-class object that holds your prompt\ntemplat...</p>","date_modified":"2026-08-07T00:00:00+00:00","date_published":"2026-08-07T00:00:00+00:00","id":"https://serhiismetanskyi.com/docs/llm-evaluation/03_practical/17_prompts_optimization/","image":null,"tags":["deepeval","evaluation","llm","rag"],"title":"DeepEval Guide — Part 17: Prompts & Prompt Optimization","url":"https://serhiismetanskyi.com/docs/llm-evaluation/03_practical/17_prompts_optimization/"},{"authors":[],"content_html":"<h1>DeepEval Guide — Part 12: Testing Workflows</h1>\n<h2>Synthetic Data Generation (Synthesizer)</h2>\n<p>Manually creating test cases is slow. DeepEval's <code>Synthesizer</code> gen...</p>","date_modified":"2026-08-06T00:00:00+00:00","date_published":"2026-08-06T00:00:00+00:00","id":"https://serhiismetanskyi.com/docs/llm-evaluation/02_testing/12_testing_workflows/","image":null,"tags":["deepeval","evaluation","llm"],"title":"DeepEval Guide — Part 12: Testing Workflows","url":"https://serhiismetanskyi.com/docs/llm-evaluation/02_testing/12_testing_workflows/"},{"authors":[],"content_html":"<h1>DeepEval Guide — Part 13: LLM Benchmarks</h1>\n<h2>What Are LLM Benchmarks?</h2>\n<p>Benchmarks are standardized tests to measure LLM performance on various\nskills: reas...</p>","date_modified":"2026-08-06T00:00:00+00:00","date_published":"2026-08-06T00:00:00+00:00","id":"https://serhiismetanskyi.com/docs/llm-evaluation/02_testing/13_benchmarks/","image":null,"tags":["deepeval","evaluation","llm"],"title":"DeepEval Guide — Part 13: LLM Benchmarks","url":"https://serhiismetanskyi.com/docs/llm-evaluation/02_testing/13_benchmarks/"},{"authors":[],"content_html":"<h1>DeepEval Guide — Part 14b: Conversational RAG Evaluation</h1>\n<p>Based on [Evaluating Conversations](https://testerstories.com/2026/04/ai-and-testing-evaluating-c...</p>","date_modified":"2026-08-06T00:00:00+00:00","date_published":"2026-08-06T00:00:00+00:00","id":"https://serhiismetanskyi.com/docs/llm-evaluation/02_testing/14_conversational_rag_evaluation/","image":null,"tags":["deepeval","evaluation","llm","rag"],"title":"DeepEval Guide — Part 14b: Conversational RAG Evaluation","url":"https://serhiismetanskyi.com/docs/llm-evaluation/02_testing/14_conversational_rag_evaluation/"},{"authors":[],"content_html":"<h1>Practical</h1>\n<p>Practical covers LLM quality, RAG, agent, and safety evaluation methods, with focused guides on Practical RAG Testing, RAG Diagnostic Testing, D...</p>","date_modified":"2026-08-06T00:00:00+00:00","date_published":"2026-08-06T00:00:00+00:00","id":"https://serhiismetanskyi.com/docs/llm-evaluation/03_practical/","image":null,"tags":["deepeval","evaluation","llm","rag"],"title":"Practical","url":"https://serhiismetanskyi.com/docs/llm-evaluation/03_practical/"},{"authors":[],"content_html":"<h1>DeepEval Guide — Part 9: Red Teaming LLM Applications</h1>\n<h2>What is Red Teaming?</h2>\n<p>Red teaming is the process of probing your LLM for security vulnerabilities...</p>","date_modified":"2026-08-05T00:00:00+00:00","date_published":"2026-08-05T00:00:00+00:00","id":"https://serhiismetanskyi.com/docs/llm-evaluation/02_testing/09_red_teaming/","image":null,"tags":["deepeval","evaluation","llm"],"title":"DeepEval Guide — Part 9: Red Teaming LLM Applications","url":"https://serhiismetanskyi.com/docs/llm-evaluation/02_testing/09_red_teaming/"},{"authors":[],"content_html":"<h1>DeepEval Guide — Part 10: Custom LLMs and Embedding Models</h1>\n<h2>Why Use Custom Models?</h2>\n<p>By default, DeepEval uses OpenAI GPT models as the judge LLM. But yo...</p>","date_modified":"2026-08-05T00:00:00+00:00","date_published":"2026-08-05T00:00:00+00:00","id":"https://serhiismetanskyi.com/docs/llm-evaluation/02_testing/10_custom_llms/","image":null,"tags":["deepeval","evaluation","llm"],"title":"DeepEval Guide — Part 10: Custom LLMs and Embedding Models","url":"https://serhiismetanskyi.com/docs/llm-evaluation/02_testing/10_custom_llms/"},{"authors":[],"content_html":"<h1>DeepEval Guide — Part 11: Building Custom Metrics</h1>\n<h2>Why Build Custom Metrics?</h2>\n<ul>\n<li>GEval is not flexible enough for your use case</li>\n<li>You want a metric that ...</li>\n</ul>","date_modified":"2026-08-05T00:00:00+00:00","date_published":"2026-08-05T00:00:00+00:00","id":"https://serhiismetanskyi.com/docs/llm-evaluation/02_testing/11_custom_metrics/","image":null,"tags":["deepeval","evaluation","llm","metrics"],"title":"DeepEval Guide — Part 11: Building Custom Metrics","url":"https://serhiismetanskyi.com/docs/llm-evaluation/02_testing/11_custom_metrics/"},{"authors":[],"content_html":"<h1>Testing</h1>\n<p>Testing covers LLM quality, RAG, agent, and safety evaluation methods, with focused guides on Red Teaming, Custom Llms, Custom Metrics, and more.\n...</p>","date_modified":"2026-08-05T00:00:00+00:00","date_published":"2026-08-05T00:00:00+00:00","id":"https://serhiismetanskyi.com/docs/llm-evaluation/02_testing/","image":null,"tags":["deepeval","evaluation","llm"],"title":"Testing","url":"https://serhiismetanskyi.com/docs/llm-evaluation/02_testing/"},{"authors":[],"content_html":"<h1>DeepEval Guide — Part 5: Chatbot Metrics</h1>\n<h2>What Are Chatbot Metrics?</h2>\n<p>Chatbot metrics test MULTI-TURN conversations. They check how well\nyour chatbot beh...</p>","date_modified":"2026-08-04T00:00:00+00:00","date_published":"2026-08-04T00:00:00+00:00","id":"https://serhiismetanskyi.com/docs/llm-evaluation/01_metrics/05_chatbot_metrics/","image":null,"tags":["deepeval","evaluation","llm","metrics"],"title":"DeepEval Guide — Part 5: Chatbot Metrics","url":"https://serhiismetanskyi.com/docs/llm-evaluation/01_metrics/05_chatbot_metrics/"},{"authors":[],"content_html":"<h1>DeepEval Guide — Part 6: MCP (Model Context Protocol) Metrics</h1>\n<h2>What is MCP?</h2>\n<p>MCP = Model Context Protocol. It is a standard way for AI agents to connect...</p>","date_modified":"2026-08-04T00:00:00+00:00","date_published":"2026-08-04T00:00:00+00:00","id":"https://serhiismetanskyi.com/docs/llm-evaluation/01_metrics/06_mcp_metrics/","image":null,"tags":["deepeval","evaluation","llm","mcp","metrics"],"title":"DeepEval Guide — Part 6: MCP (Model Context Protocol) Metrics","url":"https://serhiismetanskyi.com/docs/llm-evaluation/01_metrics/06_mcp_metrics/"},{"authors":[],"content_html":"<h1>DeepEval Guide — Part 7: Extra Metrics and Advanced Patterns</h1>\n<h2>Deterministic Metrics (No LLM Judge Needed)</h2>\n<p>These metrics do NOT use an LLM judge. They a...</p>","date_modified":"2026-08-04T00:00:00+00:00","date_published":"2026-08-04T00:00:00+00:00","id":"https://serhiismetanskyi.com/docs/llm-evaluation/01_metrics/07_extra_metrics/","image":null,"tags":["deepeval","evaluation","llm","metrics"],"title":"DeepEval Guide — Part 7: Extra Metrics and Advanced Patterns","url":"https://serhiismetanskyi.com/docs/llm-evaluation/01_metrics/07_extra_metrics/"},{"authors":[],"content_html":"<h1>DeepEval Guide — Part 8: Multimodal (Image) Metrics</h1>\n<h2>What Are Multimodal Metrics?</h2>\n<p>These metrics evaluate LLM systems that work with IMAGES — not just t...</p>","date_modified":"2026-08-04T00:00:00+00:00","date_published":"2026-08-04T00:00:00+00:00","id":"https://serhiismetanskyi.com/docs/llm-evaluation/01_metrics/08_multimodal_metrics/","image":null,"tags":["deepeval","evaluation","llm","metrics"],"title":"DeepEval Guide — Part 8: Multimodal (Image) Metrics","url":"https://serhiismetanskyi.com/docs/llm-evaluation/01_metrics/08_multimodal_metrics/"},{"authors":[],"content_html":"<h1>DeepEval Testing Guide for QA Engineers</h1>\n<h2>Part 1: Introduction</h2>\n<h3>What is DeepEval?</h3>\n<p>DeepEval is a Python testing framework for LLM (Large Language Mod...</p>","date_modified":"2026-08-03T00:00:00+00:00","date_published":"2026-08-03T00:00:00+00:00","id":"https://serhiismetanskyi.com/docs/llm-evaluation/01_introduction/","image":null,"tags":["deepeval","evaluation","llm"],"title":"DeepEval Testing Guide for QA Engineers","url":"https://serhiismetanskyi.com/docs/llm-evaluation/01_introduction/"},{"authors":[],"content_html":"<h1>DeepEval Guide — Part 2: RAG Metrics</h1>\n<h2>What is RAG?</h2>\n<p>RAG = Retrieval-Augmented Generation. Your system:\n1. Takes a user question\n2. Searches a database f...</p>","date_modified":"2026-08-03T00:00:00+00:00","date_published":"2026-08-03T00:00:00+00:00","id":"https://serhiismetanskyi.com/docs/llm-evaluation/01_metrics/02_rag_metrics/","image":null,"tags":["deepeval","evaluation","llm","metrics","rag"],"title":"DeepEval Guide — Part 2: RAG Metrics","url":"https://serhiismetanskyi.com/docs/llm-evaluation/01_metrics/02_rag_metrics/"},{"authors":[],"content_html":"<h1>DeepEval Guide — Part 3: LLM Output Quality Metrics</h1>\n<p>These metrics check the QUALITY of your LLM's output.\nThey do not need a RAG system. They work with an...</p>","date_modified":"2026-08-03T00:00:00+00:00","date_published":"2026-08-03T00:00:00+00:00","id":"https://serhiismetanskyi.com/docs/llm-evaluation/01_metrics/03_llm_quality_metrics/","image":null,"tags":["deepeval","evaluation","llm","metrics"],"title":"DeepEval Guide — Part 3: LLM Output Quality Metrics","url":"https://serhiismetanskyi.com/docs/llm-evaluation/01_metrics/03_llm_quality_metrics/"},{"authors":[],"content_html":"<h1>DeepEval Guide — Part 4: AI Agent Metrics</h1>\n<h2>What is an AI Agent?</h2>\n<p>An AI agent is an LLM that can USE TOOLS. For example:\n- Search the internet\n- Query a ...</p>","date_modified":"2026-08-03T00:00:00+00:00","date_published":"2026-08-03T00:00:00+00:00","id":"https://serhiismetanskyi.com/docs/llm-evaluation/01_metrics/04_agent_metrics/","image":null,"tags":["deepeval","evaluation","llm","metrics"],"title":"DeepEval Guide — Part 4: AI Agent Metrics","url":"https://serhiismetanskyi.com/docs/llm-evaluation/01_metrics/04_agent_metrics/"},{"authors":[],"content_html":"<h1>Metrics</h1>\n<p>Metrics covers LLM quality, RAG, agent, and safety evaluation methods, with focused guides on RAG Metrics, LLM Quality Metrics, Agent Metrics, and...</p>","date_modified":"2026-08-03T00:00:00+00:00","date_published":"2026-08-03T00:00:00+00:00","id":"https://serhiismetanskyi.com/docs/llm-evaluation/01_metrics/","image":null,"tags":["deepeval","evaluation","llm","metrics"],"title":"Metrics","url":"https://serhiismetanskyi.com/docs/llm-evaluation/01_metrics/"},{"authors":[],"content_html":"<h1>DeepEval — LLM Testing Guide</h1>\n<p>A complete reference for testing LLM systems with DeepEval (v3.8+).\nCovers all metric categories, custom models and metrics, ...</p>","date_modified":"2026-08-02T00:00:00+00:00","date_published":"2026-08-02T00:00:00+00:00","id":"https://serhiismetanskyi.com/docs/llm-evaluation/","image":null,"tags":["deepeval","evaluation","llm"],"title":"DeepEval — LLM Testing Guide","url":"https://serhiismetanskyi.com/docs/llm-evaluation/"},{"authors":[],"content_html":"<h1>Scalability &amp; Maintainability</h1>\n<p>Large Robot suites fail for predictable reasons: wall-clock time, merge contention, and unclear ownership. Treat the framewo...</p>","date_modified":"2026-08-02T00:00:00+00:00","date_published":"2026-08-02T00:00:00+00:00","id":"https://serhiismetanskyi.com/docs/robot-framework/07-decisions-production/01-scalability-maintainability/","image":null,"tags":["robot-framework","test-automation"],"title":"Scalability & Maintainability","url":"https://serhiismetanskyi.com/docs/robot-framework/07-decisions-production/01-scalability-maintainability/"},{"authors":[],"content_html":"<h1>Anti-Patterns, Risks &amp; Limitations</h1>\n<p>Robot Framework rewards discipline: scenarios stay declarative, complexity moves to keywords and libraries. This page m...</p>","date_modified":"2026-08-02T00:00:00+00:00","date_published":"2026-08-02T00:00:00+00:00","id":"https://serhiismetanskyi.com/docs/robot-framework/07-decisions-production/02-antipatterns-risks/","image":null,"tags":["robot-framework","test-automation"],"title":"Anti-Patterns, Risks & Limitations","url":"https://serhiismetanskyi.com/docs/robot-framework/07-decisions-production/02-antipatterns-risks/"},{"authors":[],"content_html":"<h1>Maturity Model &amp; Engineering Heuristics</h1>\n<p>Use this as a conversation tool with leadership: where you are today, what the next investment buys, and which pra...</p>","date_modified":"2026-08-02T00:00:00+00:00","date_published":"2026-08-02T00:00:00+00:00","id":"https://serhiismetanskyi.com/docs/robot-framework/07-decisions-production/03-maturity-model-heuristics/","image":null,"tags":["robot-framework","test-automation"],"title":"Maturity Model & Engineering Heuristics","url":"https://serhiismetanskyi.com/docs/robot-framework/07-decisions-production/03-maturity-model-heuristics/"},{"authors":[],"content_html":"<h1>Configuration &amp; Secrets Management</h1>\n<p>Keep <strong>what changes per environment</strong> (URLs, feature flags, timeouts) and <strong>what must never appear in Git</strong> (tokens, pa...</p>","date_modified":"2026-08-01T00:00:00+00:00","date_published":"2026-08-01T00:00:00+00:00","id":"https://serhiismetanskyi.com/docs/robot-framework/06-infrastructure/01-configuration-secrets/","image":null,"tags":["ci-cd","robot-framework","test-automation"],"title":"Configuration & Secrets Management","url":"https://serhiismetanskyi.com/docs/robot-framework/06-infrastructure/01-configuration-secrets/"},{"authors":[],"content_html":"<h1>Logging, Debugging &amp; Reporting</h1>\n<p>Good infrastructure makes failures <strong>visible</strong>, <strong>traceable</strong>, and <strong>machine-consumable</strong>. Robot Framework’s built-in log a...</p>","date_modified":"2026-08-01T00:00:00+00:00","date_published":"2026-08-01T00:00:00+00:00","id":"https://serhiismetanskyi.com/docs/robot-framework/06-infrastructure/02-logging-reporting/","image":null,"tags":["ci-cd","robot-framework","test-automation"],"title":"Logging, Debugging & Reporting","url":"https://serhiismetanskyi.com/docs/robot-framework/06-infrastructure/02-logging-reporting/"},{"authors":[],"content_html":"<h1>CI/CD Integration</h1>\n<p>Pipelines should give <strong>fast confidence</strong> on every change and <strong>deeper coverage</strong> on a schedule, without hiding failures behind slow job...</p>","date_modified":"2026-08-01T00:00:00+00:00","date_published":"2026-08-01T00:00:00+00:00","id":"https://serhiismetanskyi.com/docs/robot-framework/06-infrastructure/03-ci-cd-integration/","image":null,"tags":["ci-cd","robot-framework","test-automation"],"title":"CI/CD Integration","url":"https://serhiismetanskyi.com/docs/robot-framework/06-infrastructure/03-ci-cd-integration/"},{"authors":[],"content_html":"<h1>Robot Framework — Decisions &amp; Production</h1>\n<p>How to scale large suites, avoid costly anti-patterns, and mature your automation from ad-hoc scripts to an owned...</p>","date_modified":"2026-08-01T00:00:00+00:00","date_published":"2026-08-01T00:00:00+00:00","id":"https://serhiismetanskyi.com/docs/robot-framework/07-decisions-production/","image":null,"tags":["robot-framework","test-automation"],"title":"Robot Framework — Decisions &amp; Production","url":"https://serhiismetanskyi.com/docs/robot-framework/07-decisions-production/"},{"authors":[{"name":"Serhii Smetanskyi"}],"content_html":"How to send DeepEval scores to Arize Phoenix so LLM agent metrics get history: run comparisons, traces and annotations to tell a regression from noise.","date_modified":"2026-07-31T00:00:00+00:00","date_published":"2026-07-31T00:00:00+00:00","id":"https://serhiismetanskyi.com/blog/2026/07/31/deepeval-phoenix-tracking-how-agent-metrics-change-between-runs/","image":null,"tags":["AI Testing","ai-observability","ai-testing","llm-evaluation","llm-observability"],"title":"DeepEval + Phoenix: Tracking How Agent Metrics Change Between Runs","url":"https://serhiismetanskyi.com/blog/2026/07/31/deepeval-phoenix-tracking-how-agent-metrics-change-between-runs/"},{"authors":[],"content_html":"<h1>Parallel Execution with Pabot</h1>\n<p><a href=\"https://pabot.org/\">Pabot</a> is a parallel test runner for Robot Framework. It spawns multiple <code>robot</code> processes and merges l...</p>","date_modified":"2026-07-31T00:00:00+00:00","date_published":"2026-07-31T00:00:00+00:00","id":"https://serhiismetanskyi.com/docs/robot-framework/05-execution-reliability/01-parallel-execution/","image":null,"tags":["robot-framework","test-automation"],"title":"Parallel Execution with Pabot","url":"https://serhiismetanskyi.com/docs/robot-framework/05-execution-reliability/01-parallel-execution/"},{"authors":[],"content_html":"<h1>Error Handling &amp; Retry Patterns</h1>\n<p>Robot Framework 5 introduced native <strong><code>TRY</code> / <code>EXCEPT</code> / <code>FINALLY</code> / <code>ELSE</code></strong> blocks inside keywords and tests. Together w...</p>","date_modified":"2026-07-31T00:00:00+00:00","date_published":"2026-07-31T00:00:00+00:00","id":"https://serhiismetanskyi.com/docs/robot-framework/05-execution-reliability/02-error-handling-retries/","image":null,"tags":["robot-framework","test-automation"],"title":"Error Handling & Retry Patterns","url":"https://serhiismetanskyi.com/docs/robot-framework/05-execution-reliability/02-error-handling-retries/"},{"authors":[],"content_html":"<h1>Setup, Teardown &amp; Test Organization</h1>\n<p>Setup and teardown keywords define <strong>lifecycle boundaries</strong>: what must be true before work starts, and what must run t...</p>","date_modified":"2026-07-31T00:00:00+00:00","date_published":"2026-07-31T00:00:00+00:00","id":"https://serhiismetanskyi.com/docs/robot-framework/05-execution-reliability/03-setup-teardown/","image":null,"tags":["robot-framework","test-automation"],"title":"Setup, Teardown & Test Organization","url":"https://serhiismetanskyi.com/docs/robot-framework/05-execution-reliability/03-setup-teardown/"},{"authors":[],"content_html":"<h1>Robot Framework — Infrastructure</h1>\n<p>Practical patterns for <strong>configuration</strong>, <strong>observability of test runs</strong>, and <strong>CI/CD</strong>. These topics keep suites portabl...</p>","date_modified":"2026-07-31T00:00:00+00:00","date_published":"2026-07-31T00:00:00+00:00","id":"https://serhiismetanskyi.com/docs/robot-framework/06-infrastructure/","image":null,"tags":["ci-cd","robot-framework","test-automation"],"title":"Robot Framework — Infrastructure","url":"https://serhiismetanskyi.com/docs/robot-framework/06-infrastructure/"},{"authors":[],"content_html":"<h1>Wait Strategies &amp; Flakiness Control</h1>\n<p>Flaky UI tests usually come from <strong>assumptions about time</strong> (DOM, network, animations). Robot Framework gives you expl...</p>","date_modified":"2026-07-30T00:00:00+00:00","date_published":"2026-07-30T00:00:00+00:00","id":"https://serhiismetanskyi.com/docs/robot-framework/04-ui-testing/02-wait-strategy-flakiness/","image":null,"tags":["robot-framework","test-automation","ui-testing"],"title":"Wait Strategies & Flakiness Control","url":"https://serhiismetanskyi.com/docs/robot-framework/04-ui-testing/02-wait-strategy-flakiness/"},{"authors":[],"content_html":"<h1>UI Testing — Step by Step</h1>\n<p>Progressive path: simple Selenium test -&gt; reusable page keywords -&gt; data-driven -&gt; Browser (Playwright).</p>\n<h2>Level 1 — Simple Se...</h2>","date_modified":"2026-07-30T00:00:00+00:00","date_published":"2026-07-30T00:00:00+00:00","id":"https://serhiismetanskyi.com/docs/robot-framework/04-ui-testing/03-ui-step-by-step/","image":null,"tags":["robot-framework","test-automation","ui-testing"],"title":"UI Testing — Step by Step","url":"https://serhiismetanskyi.com/docs/robot-framework/04-ui-testing/03-ui-step-by-step/"},{"authors":[],"content_html":"<h1>Practical — Full UI Framework</h1>\n<p>Compact but real end-to-end framework example using <code>Robot Framework + Browser (Playwright) + Python helpers</code>.</p>\n<p>For progress...</p>","date_modified":"2026-07-30T00:00:00+00:00","date_published":"2026-07-30T00:00:00+00:00","id":"https://serhiismetanskyi.com/docs/robot-framework/04-ui-testing/04-practical-ui-framework/","image":null,"tags":["robot-framework","test-automation","ui-testing"],"title":"Practical — Full UI Framework","url":"https://serhiismetanskyi.com/docs/robot-framework/04-ui-testing/04-practical-ui-framework/"},{"authors":[],"content_html":"<h1>Robot Framework — Execution &amp; Reliability</h1>\n<p>Short, practical notes on running Robot Framework faster (parallelism), recovering from transient failures (retr...</p>","date_modified":"2026-07-30T00:00:00+00:00","date_published":"2026-07-30T00:00:00+00:00","id":"https://serhiismetanskyi.com/docs/robot-framework/05-execution-reliability/","image":null,"tags":["robot-framework","test-automation"],"title":"Robot Framework — Execution &amp; Reliability","url":"https://serhiismetanskyi.com/docs/robot-framework/05-execution-reliability/"},{"authors":[],"content_html":"<h1>API Testing — Step by Step</h1>\n<p>Progressive examples: from a single test to a proper layered architecture.</p>\n<h2>Architecture (goal)</h2>\n<p>```text\ntests → keywords → ...</p>","date_modified":"2026-07-29T00:00:00+00:00","date_published":"2026-07-29T00:00:00+00:00","id":"https://serhiismetanskyi.com/docs/robot-framework/03-api-testing/03-api-step-by-step/","image":null,"tags":["api-testing","robot-framework","test-automation"],"title":"API Testing — Step by Step","url":"https://serhiismetanskyi.com/docs/robot-framework/03-api-testing/03-api-step-by-step/"},{"authors":[],"content_html":"<h1>Practical — Full API Framework</h1>\n<p>Compact but real end-to-end framework example using <code>Robot Framework + RequestsLibrary + Python libraries</code>.</p>\n<p>For progressiv...</p>","date_modified":"2026-07-29T00:00:00+00:00","date_published":"2026-07-29T00:00:00+00:00","id":"https://serhiismetanskyi.com/docs/robot-framework/03-api-testing/04-practical-api-framework/","image":null,"tags":["api-testing","robot-framework","test-automation"],"title":"Practical — Full API Framework","url":"https://serhiismetanskyi.com/docs/robot-framework/03-api-testing/04-practical-api-framework/"},{"authors":[],"content_html":"<h1>Page Object Pattern &amp; Locators</h1>\n<p>In Robot Framework, the common “page object” shape is a <strong><code>.resource</code> file</strong>: locators live in <strong>variables</strong>, interactions ...</p>","date_modified":"2026-07-29T00:00:00+00:00","date_published":"2026-07-29T00:00:00+00:00","id":"https://serhiismetanskyi.com/docs/robot-framework/04-ui-testing/01-page-objects-locators/","image":null,"tags":["robot-framework","test-automation","ui-testing"],"title":"Page Object Pattern & Locators","url":"https://serhiismetanskyi.com/docs/robot-framework/04-ui-testing/01-page-objects-locators/"},{"authors":[],"content_html":"<h1>Robot Framework — UI Testing</h1>\n<p>Practical notes for structuring UI automation with Robot Framework: page-level <code>.resource</code> files, locator hygiene, and stable...</p>","date_modified":"2026-07-29T00:00:00+00:00","date_published":"2026-07-29T00:00:00+00:00","id":"https://serhiismetanskyi.com/docs/robot-framework/04-ui-testing/","image":null,"tags":["robot-framework","test-automation","ui-testing"],"title":"Robot Framework — UI Testing","url":"https://serhiismetanskyi.com/docs/robot-framework/04-ui-testing/"},{"authors":[],"content_html":"<h1>Test Data Management</h1>\n<p>Reliable RF suites use <strong>isolated</strong>, <strong>repeatable</strong> data. Combine patterns from test engineering (builders, factories, fixtures) with...</p>","date_modified":"2026-07-28T00:00:00+00:00","date_published":"2026-07-28T00:00:00+00:00","id":"https://serhiismetanskyi.com/docs/robot-framework/02-architecture/03-test-data-management/","image":null,"tags":["robot-framework","test-automation"],"title":"Test Data Management","url":"https://serhiismetanskyi.com/docs/robot-framework/02-architecture/03-test-data-management/"},{"authors":[],"content_html":"<h1>API Testing Architecture &amp; Patterns</h1>\n<p>Treat API automation as <strong>three layers</strong>. Tests call the <strong>service layer</strong>; services orchestrate <strong>API client</strong> calls;...</p>","date_modified":"2026-07-28T00:00:00+00:00","date_published":"2026-07-28T00:00:00+00:00","id":"https://serhiismetanskyi.com/docs/robot-framework/03-api-testing/01-api-architecture-patterns/","image":null,"tags":["api-testing","robot-framework","test-automation"],"title":"API Testing Architecture & Patterns","url":"https://serhiismetanskyi.com/docs/robot-framework/03-api-testing/01-api-architecture-patterns/"},{"authors":[],"content_html":"<h1>Request Design &amp; Validation Strategy</h1>\n<p>Use a <strong>consistent validation ladder</strong> so API suites stay maintainable and failures point to the real defect (transpo...</p>","date_modified":"2026-07-28T00:00:00+00:00","date_published":"2026-07-28T00:00:00+00:00","id":"https://serhiismetanskyi.com/docs/robot-framework/03-api-testing/02-request-validation/","image":null,"tags":["api-testing","robot-framework","test-automation"],"title":"Request Design & Validation Strategy","url":"https://serhiismetanskyi.com/docs/robot-framework/03-api-testing/02-request-validation/"},{"authors":[],"content_html":"<h1>Robot Framework — API Testing</h1>\n<p>This section describes how to structure REST API automation with <strong>Robot Framework</strong> using a clear separation between HTTP m...</p>","date_modified":"2026-07-28T00:00:00+00:00","date_published":"2026-07-28T00:00:00+00:00","id":"https://serhiismetanskyi.com/docs/robot-framework/03-api-testing/","image":null,"tags":["api-testing","robot-framework","test-automation"],"title":"Robot Framework — API Testing","url":"https://serhiismetanskyi.com/docs/robot-framework/03-api-testing/"},{"authors":[],"content_html":"<h1>Libraries &amp; Extensibility</h1>\n<h2>Built-in standard libraries</h2>\n<p>Ship with Robot Framework (Python stdlib-backed). Common ones:</p>\n<p>| Library | Purpose |\n|---------...</p>","date_modified":"2026-07-27T00:00:00+00:00","date_published":"2026-07-27T00:00:00+00:00","id":"https://serhiismetanskyi.com/docs/robot-framework/01-fundamentals/03-libraries/","image":null,"tags":["robot-framework","test-automation"],"title":"Libraries & Extensibility","url":"https://serhiismetanskyi.com/docs/robot-framework/01-fundamentals/03-libraries/"},{"authors":[],"content_html":"<h1>Layered Architecture</h1>\n<p>Enterprise Robot Framework automation stays maintainable when <strong>tests stay thin</strong>, <strong>keywords express behavior</strong>, and **technical det...</p>","date_modified":"2026-07-27T00:00:00+00:00","date_published":"2026-07-27T00:00:00+00:00","id":"https://serhiismetanskyi.com/docs/robot-framework/02-architecture/01-layered-architecture/","image":null,"tags":["robot-framework","test-automation"],"title":"Layered Architecture","url":"https://serhiismetanskyi.com/docs/robot-framework/02-architecture/01-layered-architecture/"},{"authors":[],"content_html":"<h1>Keyword Design Principles</h1>\n<p>Well-designed keywords make suites <strong>readable by product owners</strong> and <strong>cheap to refactor</strong> when the UI or API changes. Treat ke...</p>","date_modified":"2026-07-27T00:00:00+00:00","date_published":"2026-07-27T00:00:00+00:00","id":"https://serhiismetanskyi.com/docs/robot-framework/02-architecture/02-keyword-design/","image":null,"tags":["robot-framework","test-automation"],"title":"Keyword Design Principles","url":"https://serhiismetanskyi.com/docs/robot-framework/02-architecture/02-keyword-design/"},{"authors":[],"content_html":"<h1>Robot Framework — Architecture</h1>\n<p>This section describes how to structure enterprise Robot Framework (RF) projects: layers, responsibilities, keyword design,...</p>","date_modified":"2026-07-27T00:00:00+00:00","date_published":"2026-07-27T00:00:00+00:00","id":"https://serhiismetanskyi.com/docs/robot-framework/02-architecture/","image":null,"tags":["robot-framework","test-automation"],"title":"Robot Framework — Architecture","url":"https://serhiismetanskyi.com/docs/robot-framework/02-architecture/"},{"authors":[],"content_html":"<h1>Core Syntax &amp; Test Structure</h1>\n<h2>What is Robot Framework?</h2>\n<p>Robot Framework is <strong>open-source</strong>, <strong>keyword-driven</strong>, and <strong>Python-centric</strong>: libraries expose...</p>","date_modified":"2026-07-26T00:00:00+00:00","date_published":"2026-07-26T00:00:00+00:00","id":"https://serhiismetanskyi.com/docs/robot-framework/01-fundamentals/01-core-syntax-structure/","image":null,"tags":["robot-framework","test-automation"],"title":"Core Syntax & Test Structure","url":"https://serhiismetanskyi.com/docs/robot-framework/01-fundamentals/01-core-syntax-structure/"},{"authors":[],"content_html":"<h1>Keywords &amp; Variables</h1>\n<h2>Built-in keywords (BuiltIn)</h2>\n<p>The <strong>BuiltIn</strong> library is always available. Common keywords:</p>\n<p>| Keyword | Typical use |\n|---------|-...</p>","date_modified":"2026-07-26T00:00:00+00:00","date_published":"2026-07-26T00:00:00+00:00","id":"https://serhiismetanskyi.com/docs/robot-framework/01-fundamentals/02-keywords-variables/","image":null,"tags":["robot-framework","test-automation"],"title":"Keywords & Variables","url":"https://serhiismetanskyi.com/docs/robot-framework/01-fundamentals/02-keywords-variables/"},{"authors":[],"content_html":"<h1>Fundamentals</h1>\n<p>Fundamentals cover Robot Framework’s <strong>data format</strong>, <strong>keywords &amp; variables</strong>, and <strong>libraries</strong> so you can read and write maintainable `.ro...</p>","date_modified":"2026-07-26T00:00:00+00:00","date_published":"2026-07-26T00:00:00+00:00","id":"https://serhiismetanskyi.com/docs/robot-framework/01-fundamentals/","image":null,"tags":["robot-framework","test-automation"],"title":"Fundamentals","url":"https://serhiismetanskyi.com/docs/robot-framework/01-fundamentals/"},{"authors":[],"content_html":"<h1>Robot Framework — Complete Guide</h1>\n<p><strong>Robot Framework</strong> is an open-source, <strong>keyword-driven</strong> automation framework. Tests and tasks are expressed as human-re...</p>","date_modified":"2026-07-26T00:00:00+00:00","date_published":"2026-07-26T00:00:00+00:00","id":"https://serhiismetanskyi.com/docs/robot-framework/","image":null,"tags":["robot-framework","test-automation"],"title":"Robot Framework — Complete Guide","url":"https://serhiismetanskyi.com/docs/robot-framework/"},{"authors":[],"content_html":"<h1>CI/CD Integration</h1>\n<h2>Pipeline Design Principles</h2>\n<p>Tests in CI must be:\n- <strong>Fast</strong> — fast feedback prevents context switching\n- <strong>Reliable</strong> — false positiv...</p>","date_modified":"2026-07-25T00:00:00+00:00","date_published":"2026-07-25T00:00:00+00:00","id":"https://serhiismetanskyi.com/docs/test-automation-framework/07-config-ci-decisions/03-ci-cd-integration/","image":null,"tags":["architecture","ci-cd","test-automation"],"title":"CI/CD Integration","url":"https://serhiismetanskyi.com/docs/test-automation-framework/07-config-ci-decisions/03-ci-cd-integration/"},{"authors":[],"content_html":"<h1>Performance Testing Support &amp; Security Testing</h1>\n<h2>Performance Testing in the Framework</h2>\n<h3>What to Test</h3>\n<p>| Type | Measures | Tool |\n|------|---------|---...</p>","date_modified":"2026-07-25T00:00:00+00:00","date_published":"2026-07-25T00:00:00+00:00","id":"https://serhiismetanskyi.com/docs/test-automation-framework/07-config-ci-decisions/04-performance-security/","image":null,"tags":["architecture","ci-cd","security","test-automation"],"title":"Performance Testing Support & Security Testing","url":"https://serhiismetanskyi.com/docs/test-automation-framework/07-config-ci-decisions/04-performance-security/"},{"authors":[],"content_html":"<h1>Framework Extensibility &amp; Anti-Patterns</h1>\n<h2>Framework Extensibility</h2>\n<p>A good framework grows without rewriting its core.</p>\n<h3>Custom pytest Plugins</h3>\n<p>Encapsu...</p>","date_modified":"2026-07-25T00:00:00+00:00","date_published":"2026-07-25T00:00:00+00:00","id":"https://serhiismetanskyi.com/docs/test-automation-framework/07-config-ci-decisions/05-extensibility-antipatterns/","image":null,"tags":["architecture","ci-cd","test-automation"],"title":"Framework Extensibility & Anti-Patterns","url":"https://serhiismetanskyi.com/docs/test-automation-framework/07-config-ci-decisions/05-extensibility-antipatterns/"},{"authors":[],"content_html":"<h1>Risks, Real-World Patterns &amp; Decision Heuristics</h1>\n<h2>Framework Risks &amp; Limitations</h2>\n<h3>High Maintenance Cost</h3>\n<p>A test automation framework is a product wit...</p>","date_modified":"2026-07-25T00:00:00+00:00","date_published":"2026-07-25T00:00:00+00:00","id":"https://serhiismetanskyi.com/docs/test-automation-framework/07-config-ci-decisions/06-risks-decisions/","image":null,"tags":["architecture","ci-cd","test-automation"],"title":"Risks, Real-World Patterns & Decision Heuristics","url":"https://serhiismetanskyi.com/docs/test-automation-framework/07-config-ci-decisions/06-risks-decisions/"},{"authors":[],"content_html":"<h1>Reliability &amp; Flakiness</h1>\n<h2>What Is a Flaky Test</h2>\n<p>A test that sometimes passes and sometimes fails with no code change.\nFlakiness destroys trust. Teams tha...</p>","date_modified":"2026-07-24T00:00:00+00:00","date_published":"2026-07-24T00:00:00+00:00","id":"https://serhiismetanskyi.com/docs/test-automation-framework/06-execution-reliability/02-flakiness/","image":null,"tags":["architecture","test-automation"],"title":"Reliability & Flakiness","url":"https://serhiismetanskyi.com/docs/test-automation-framework/06-execution-reliability/02-flakiness/"},{"authors":[],"content_html":"<h1>Mocking &amp; Test Isolation</h1>\n<h2>Mock vs Stub vs Fake vs Spy</h2>\n<p>| Type | Definition | Returns | Verifies calls |\n|------|-----------|---------|----------------|\n...</p>","date_modified":"2026-07-24T00:00:00+00:00","date_published":"2026-07-24T00:00:00+00:00","id":"https://serhiismetanskyi.com/docs/test-automation-framework/06-execution-reliability/03-mocking-isolation/","image":null,"tags":["architecture","test-automation"],"title":"Mocking & Test Isolation","url":"https://serhiismetanskyi.com/docs/test-automation-framework/06-execution-reliability/03-mocking-isolation/"},{"authors":[],"content_html":"<h1>Configuration Management</h1>\n<h2>Environment Config</h2>\n<p>Tests run against multiple environments: dev, staging, production.\nConfig must be environment-aware withou...</p>","date_modified":"2026-07-24T00:00:00+00:00","date_published":"2026-07-24T00:00:00+00:00","id":"https://serhiismetanskyi.com/docs/test-automation-framework/07-config-ci-decisions/01-config-management/","image":null,"tags":["architecture","ci-cd","test-automation"],"title":"Configuration Management","url":"https://serhiismetanskyi.com/docs/test-automation-framework/07-config-ci-decisions/01-config-management/"},{"authors":[],"content_html":"<h1>Logging, Reporting &amp; Observability</h1>\n<h2>Structured Test Logging</h2>\n<p>Tests must produce logs that help diagnose failures without re-running.</p>\n<h3>Logger Setup</h3>\n<p>...</p>","date_modified":"2026-07-24T00:00:00+00:00","date_published":"2026-07-24T00:00:00+00:00","id":"https://serhiismetanskyi.com/docs/test-automation-framework/07-config-ci-decisions/02-logging-reporting/","image":null,"tags":["architecture","ci-cd","test-automation"],"title":"Logging, Reporting & Observability","url":"https://serhiismetanskyi.com/docs/test-automation-framework/07-config-ci-decisions/02-logging-reporting/"},{"authors":[],"content_html":"<h1>Config CI Decisions</h1>\n<p>Config CI/CD Decisions covers automation framework architecture, reliability, and CI integration, with focused guides on Config Manage...</p>","date_modified":"2026-07-24T00:00:00+00:00","date_published":"2026-07-24T00:00:00+00:00","id":"https://serhiismetanskyi.com/docs/test-automation-framework/07-config-ci-decisions/","image":null,"tags":["architecture","ci-cd","test-automation"],"title":"Config CI Decisions","url":"https://serhiismetanskyi.com/docs/test-automation-framework/07-config-ci-decisions/"},{"authors":[],"content_html":"<h1>UI Testing — Tools &amp; Patterns</h1>\n<h2>Tool Selection</h2>\n<h3>Playwright (recommended for most projects)</h3>\n<p>| Property | Value |\n|----------|-------|\n| Language | Py...</p>","date_modified":"2026-07-23T00:00:00+00:00","date_published":"2026-07-23T00:00:00+00:00","id":"https://serhiismetanskyi.com/docs/test-automation-framework/05-ui-testing/01-tools-patterns/","image":null,"tags":["architecture","test-automation","ui-testing"],"title":"UI Testing — Tools & Patterns","url":"https://serhiismetanskyi.com/docs/test-automation-framework/05-ui-testing/01-tools-patterns/"},{"authors":[],"content_html":"<h1>UI Testing — Wait Strategies, Retry &amp; Selector Abstraction</h1>\n<h2>Wait Strategies</h2>\n<p>The #1 cause of flaky UI tests is improper waiting.\n<code>sleep()</code> is never a wa...</p>","date_modified":"2026-07-23T00:00:00+00:00","date_published":"2026-07-23T00:00:00+00:00","id":"https://serhiismetanskyi.com/docs/test-automation-framework/05-ui-testing/02-wait-retry-selectors/","image":null,"tags":["architecture","test-automation","ui-testing"],"title":"UI Testing — Wait Strategies, Retry & Selector Abstraction","url":"https://serhiismetanskyi.com/docs/test-automation-framework/05-ui-testing/02-wait-retry-selectors/"},{"authors":[],"content_html":"<h1>Test Execution — Parallel &amp; Test Organisation</h1>\n<h2>Parallel Execution</h2>\n<h3>Why It Matters</h3>\n<p>500 tests × 0.5s average = 250s sequential.\nWith 8 workers: ~35s....</p>","date_modified":"2026-07-23T00:00:00+00:00","date_published":"2026-07-23T00:00:00+00:00","id":"https://serhiismetanskyi.com/docs/test-automation-framework/06-execution-reliability/01-parallel-execution/","image":null,"tags":["architecture","test-automation"],"title":"Test Execution — Parallel & Test Organisation","url":"https://serhiismetanskyi.com/docs/test-automation-framework/06-execution-reliability/01-parallel-execution/"},{"authors":[],"content_html":"<h1>Execution Reliability</h1>\n<p>Execution Reliability covers automation framework architecture, reliability, and CI integration, with focused guides on Parallel Exe...</p>","date_modified":"2026-07-23T00:00:00+00:00","date_published":"2026-07-23T00:00:00+00:00","id":"https://serhiismetanskyi.com/docs/test-automation-framework/06-execution-reliability/","image":null,"tags":["architecture","test-automation"],"title":"Execution Reliability","url":"https://serhiismetanskyi.com/docs/test-automation-framework/06-execution-reliability/"},{"authors":[],"content_html":"<h1>API Testing — REST &amp; GraphQL</h1>\n<h2>REST Testing Architecture</h2>\n<h3>Client Wrapper</h3>\n<p>Each domain gets its own client. No raw <code>httpx</code> calls in tests.</p>\n<p>```python\n...</p>","date_modified":"2026-07-22T00:00:00+00:00","date_published":"2026-07-22T00:00:00+00:00","id":"https://serhiismetanskyi.com/docs/test-automation-framework/04-api-testing/01-rest-graphql/","image":null,"tags":["api-testing","architecture","test-automation"],"title":"API Testing — REST & GraphQL","url":"https://serhiismetanskyi.com/docs/test-automation-framework/04-api-testing/01-rest-graphql/"},{"authors":[],"content_html":"<h1>API Testing — gRPC &amp; WebSocket</h1>\n<h2>gRPC Testing</h2>\n<h3>Architecture</h3>\n<p>gRPC tests use generated stubs. Never call the raw channel directly from tests.</p>\n<p>```\nTes...</p>","date_modified":"2026-07-22T00:00:00+00:00","date_published":"2026-07-22T00:00:00+00:00","id":"https://serhiismetanskyi.com/docs/test-automation-framework/04-api-testing/02-grpc-websocket/","image":null,"tags":["api-testing","architecture","test-automation"],"title":"API Testing — gRPC & WebSocket","url":"https://serhiismetanskyi.com/docs/test-automation-framework/04-api-testing/02-grpc-websocket/"},{"authors":[],"content_html":"<h1>API Testing</h1>\n<p>API Testing covers automation framework architecture, reliability, and CI integration, with focused guides on REST GraphQL, gRPC Websocket.</p>\n<h1>...</h1>","date_modified":"2026-07-22T00:00:00+00:00","date_published":"2026-07-22T00:00:00+00:00","id":"https://serhiismetanskyi.com/docs/test-automation-framework/04-api-testing/","image":null,"tags":["api-testing","architecture","test-automation"],"title":"API Testing","url":"https://serhiismetanskyi.com/docs/test-automation-framework/04-api-testing/"},{"authors":[],"content_html":"<h1>UI Testing</h1>\n<p>UI Testing covers automation framework architecture, reliability, and CI integration, with focused guides on Tools Patterns, Wait Retry Selecto...</p>","date_modified":"2026-07-22T00:00:00+00:00","date_published":"2026-07-22T00:00:00+00:00","id":"https://serhiismetanskyi.com/docs/test-automation-framework/05-ui-testing/","image":null,"tags":["architecture","test-automation","ui-testing"],"title":"UI Testing","url":"https://serhiismetanskyi.com/docs/test-automation-framework/05-ui-testing/"},{"authors":[],"content_html":"<h1>Advanced Framework Patterns</h1>\n<h2>Fluent Interface</h2>\n<p>Fluent interfaces chain calls to read like a sentence.\nUsed for builders, request construction, and asser...</p>","date_modified":"2026-07-21T00:00:00+00:00","date_published":"2026-07-21T00:00:00+00:00","id":"https://serhiismetanskyi.com/docs/test-automation-framework/02-design-patterns/03-advanced-patterns/","image":null,"tags":["architecture","test-automation"],"title":"Advanced Framework Patterns","url":"https://serhiismetanskyi.com/docs/test-automation-framework/02-design-patterns/03-advanced-patterns/"},{"authors":[],"content_html":"<h1>Test Data Strategies &amp; Isolation</h1>\n<h2>Three Data Strategies</h2>\n<h3>Static Data</h3>\n<p>Predefined, version-controlled. Loaded from YAML or JSON files.\nGood for: conf...</p>","date_modified":"2026-07-21T00:00:00+00:00","date_published":"2026-07-21T00:00:00+00:00","id":"https://serhiismetanskyi.com/docs/test-automation-framework/03-test-data/01-strategies-isolation/","image":null,"tags":["architecture","test-automation","test-data"],"title":"Test Data Strategies & Isolation","url":"https://serhiismetanskyi.com/docs/test-automation-framework/03-test-data/01-strategies-isolation/"},{"authors":[],"content_html":"<h1>Builders, Factories &amp; DB Seeding</h1>\n<h2>Test Data Builder — Full Pattern</h2>\n<p>A builder creates a single domain object with configurable defaults.\nThe same builde...</p>","date_modified":"2026-07-21T00:00:00+00:00","date_published":"2026-07-21T00:00:00+00:00","id":"https://serhiismetanskyi.com/docs/test-automation-framework/03-test-data/02-builders-factories/","image":null,"tags":["architecture","test-automation","test-data"],"title":"Builders, Factories & DB Seeding","url":"https://serhiismetanskyi.com/docs/test-automation-framework/03-test-data/02-builders-factories/"},{"authors":[],"content_html":"<h1>Test Data</h1>\n<p>Test Data covers automation framework architecture, reliability, and CI integration, with focused guides on Strategies Isolation, Builders Facto...</p>","date_modified":"2026-07-21T00:00:00+00:00","date_published":"2026-07-21T00:00:00+00:00","id":"https://serhiismetanskyi.com/docs/test-automation-framework/03-test-data/","image":null,"tags":["architecture","test-automation","test-data"],"title":"Test Data","url":"https://serhiismetanskyi.com/docs/test-automation-framework/03-test-data/"},{"authors":[],"content_html":"<h1>Framework Directory Structure</h1>\n<h2>Canonical Layout</h2>\n<p>```\nproject-root/\n├── tests/\n│   ├── e2e/              # Browser-driven end-to-end tests\n│   ├── api/  ...</p>","date_modified":"2026-07-20T00:00:00+00:00","date_published":"2026-07-20T00:00:00+00:00","id":"https://serhiismetanskyi.com/docs/test-automation-framework/01-architecture/03-directory-structure/","image":null,"tags":["architecture","test-automation"],"title":"Framework Directory Structure","url":"https://serhiismetanskyi.com/docs/test-automation-framework/01-architecture/03-directory-structure/"},{"authors":[],"content_html":"<h1>UI Test Design Patterns</h1>\n<h2>Page Object Model (POM)</h2>\n<p>The foundational pattern for UI test automation.\nOne class per page or significant component. Tests ca...</p>","date_modified":"2026-07-20T00:00:00+00:00","date_published":"2026-07-20T00:00:00+00:00","id":"https://serhiismetanskyi.com/docs/test-automation-framework/02-design-patterns/01-ui-patterns/","image":null,"tags":["architecture","test-automation"],"title":"UI Test Design Patterns","url":"https://serhiismetanskyi.com/docs/test-automation-framework/02-design-patterns/01-ui-patterns/"},{"authors":[],"content_html":"<h1>API &amp; Data Test Design Patterns</h1>\n<h2>Request Builder</h2>\n<p>Fluent API for constructing HTTP requests without coupling tests to raw HTTP semantics.</p>\n<p>```python\ncla...</p>","date_modified":"2026-07-20T00:00:00+00:00","date_published":"2026-07-20T00:00:00+00:00","id":"https://serhiismetanskyi.com/docs/test-automation-framework/02-design-patterns/02-api-data-patterns/","image":null,"tags":["architecture","test-automation"],"title":"API & Data Test Design Patterns","url":"https://serhiismetanskyi.com/docs/test-automation-framework/02-design-patterns/02-api-data-patterns/"},{"authors":[],"content_html":"<h1>Design Patterns</h1>\n<p>Design Patterns covers automation framework architecture, reliability, and CI integration, with focused guides on UI Patterns, API Data Pa...</p>","date_modified":"2026-07-20T00:00:00+00:00","date_published":"2026-07-20T00:00:00+00:00","id":"https://serhiismetanskyi.com/docs/test-automation-framework/02-design-patterns/","image":null,"tags":["architecture","test-automation"],"title":"Design Patterns","url":"https://serhiismetanskyi.com/docs/test-automation-framework/02-design-patterns/"},{"authors":[],"content_html":"<h1>Framework Goals &amp; Core Principles</h1>\n<h2>What the Framework Must Achieve</h2>\n<p>A test automation framework is not just a test runner with helpers.\nIt is a product ...</p>","date_modified":"2026-07-19T00:00:00+00:00","date_published":"2026-07-19T00:00:00+00:00","id":"https://serhiismetanskyi.com/docs/test-automation-framework/01-architecture/01-goals-principles/","image":null,"tags":["architecture","test-automation"],"title":"Framework Goals & Core Principles","url":"https://serhiismetanskyi.com/docs/test-automation-framework/01-architecture/01-goals-principles/"},{"authors":[],"content_html":"<h1>Framework Architecture — Layers &amp; Responsibilities</h1>\n<h2>High-Level Layer Model</h2>\n<p>```\n┌─────────────────────────────────────────────┐\n│               TEST LAY...</p>","date_modified":"2026-07-19T00:00:00+00:00","date_published":"2026-07-19T00:00:00+00:00","id":"https://serhiismetanskyi.com/docs/test-automation-framework/01-architecture/02-layers-responsibilities/","image":null,"tags":["architecture","test-automation"],"title":"Framework Architecture — Layers & Responsibilities","url":"https://serhiismetanskyi.com/docs/test-automation-framework/01-architecture/02-layers-responsibilities/"},{"authors":[],"content_html":"<h1>Architecture</h1>\n<p>Architecture covers automation framework architecture, reliability, and CI integration, with focused guides on Goals Principles, Layers Respo...</p>","date_modified":"2026-07-19T00:00:00+00:00","date_published":"2026-07-19T00:00:00+00:00","id":"https://serhiismetanskyi.com/docs/test-automation-framework/01-architecture/","image":null,"tags":["architecture","test-automation"],"title":"Architecture","url":"https://serhiismetanskyi.com/docs/test-automation-framework/01-architecture/"},{"authors":[],"content_html":"<h1>Test Automation Framework</h1>\n<p>Complete technical reference for designing, building, and operating a production-grade test automation framework.</p>\n<h2>Sections</h2>\n<p>...</p>","date_modified":"2026-07-19T00:00:00+00:00","date_published":"2026-07-19T00:00:00+00:00","id":"https://serhiismetanskyi.com/docs/test-automation-framework/","image":null,"tags":["architecture","test-automation"],"title":"Test Automation Framework","url":"https://serhiismetanskyi.com/docs/test-automation-framework/"},{"authors":[],"content_html":"<h1>E2E Tests — Concept &amp; Examples</h1>\n<h2>What They Test</h2>\n<p>The whole application, from the user's perspective. A real browser, real clicks,\nreal page content. Play...</p>","date_modified":"2026-07-18T00:00:00+00:00","date_published":"2026-07-18T00:00:00+00:00","id":"https://serhiismetanskyi.com/docs/testing-pyramid/03-e2e-tests/01-concept-and-examples/","image":null,"tags":["e2e-testing","test-strategy","testing"],"title":"E2E Tests — Concept & Examples","url":"https://serhiismetanskyi.com/docs/testing-pyramid/03-e2e-tests/01-concept-and-examples/"},{"authors":[],"content_html":"<h1>E2E Tests — Common Mistakes</h1>\n<h2>Mistake 1: Fragile DOM-Path Selectors</h2>\n<p>Selectors copied from Chrome DevTools describe the DOM structure, not the user inten...</p>","date_modified":"2026-07-18T00:00:00+00:00","date_published":"2026-07-18T00:00:00+00:00","id":"https://serhiismetanskyi.com/docs/testing-pyramid/03-e2e-tests/02-common-mistakes/","image":null,"tags":["e2e-testing","test-strategy","testing"],"title":"E2E Tests — Common Mistakes","url":"https://serhiismetanskyi.com/docs/testing-pyramid/03-e2e-tests/02-common-mistakes/"},{"authors":[],"content_html":"<h1>Pyramid Shape, Anti-Patterns &amp; Alternatives</h1>\n<h2>The Numbers</h2>\n<p>On a typical project with a healthy pyramid:</p>\n<p>| Layer | Count | Time per test | Suite contribu...</p>","date_modified":"2026-07-18T00:00:00+00:00","date_published":"2026-07-18T00:00:00+00:00","id":"https://serhiismetanskyi.com/docs/testing-pyramid/04-pyramid-strategy/01-shape-antipatterns-alternatives/","image":null,"tags":["test-strategy","testing"],"title":"Pyramid Shape, Anti-Patterns & Alternatives","url":"https://serhiismetanskyi.com/docs/testing-pyramid/04-pyramid-strategy/01-shape-antipatterns-alternatives/"},{"authors":[],"content_html":"<h1>Pyramid Strategy</h1>\n<p>Pyramid Strategy covers test-level strategy across unit, integration, and end-to-end layers, with focused guides on Shape Antipatterns Al...</p>","date_modified":"2026-07-18T00:00:00+00:00","date_published":"2026-07-18T00:00:00+00:00","id":"https://serhiismetanskyi.com/docs/testing-pyramid/04-pyramid-strategy/","image":null,"tags":["test-strategy","testing"],"title":"Pyramid Strategy","url":"https://serhiismetanskyi.com/docs/testing-pyramid/04-pyramid-strategy/"},{"authors":[],"content_html":"<h1>Integration Tests — Concept &amp; Examples</h1>\n<h2>What They Test</h2>\n<p>How components work <strong>together</strong>. The pieces are real — no mocks for the parts being integrated....</p>","date_modified":"2026-07-17T00:00:00+00:00","date_published":"2026-07-17T00:00:00+00:00","id":"https://serhiismetanskyi.com/docs/testing-pyramid/02-integration-tests/01-concept-and-examples/","image":null,"tags":["integration-testing","test-strategy","testing"],"title":"Integration Tests — Concept & Examples","url":"https://serhiismetanskyi.com/docs/testing-pyramid/02-integration-tests/01-concept-and-examples/"},{"authors":[],"content_html":"<h1>Integration Tests — Common Mistakes</h1>\n<h2>Mistake 1: Shared State Between Tests</h2>\n<p>One test creates data, another assumes it exists.\nWorks locally, breaks on C...</p>","date_modified":"2026-07-17T00:00:00+00:00","date_published":"2026-07-17T00:00:00+00:00","id":"https://serhiismetanskyi.com/docs/testing-pyramid/02-integration-tests/02-common-mistakes/","image":null,"tags":["integration-testing","test-strategy","testing"],"title":"Integration Tests — Common Mistakes","url":"https://serhiismetanskyi.com/docs/testing-pyramid/02-integration-tests/02-common-mistakes/"},{"authors":[],"content_html":"<h1>Integration Tests</h1>\n<p>Integration Tests covers test-level strategy across unit, integration, and end-to-end layers, with focused guides on Concept And Example...</p>","date_modified":"2026-07-17T00:00:00+00:00","date_published":"2026-07-17T00:00:00+00:00","id":"https://serhiismetanskyi.com/docs/testing-pyramid/02-integration-tests/","image":null,"tags":["integration-testing","test-strategy","testing"],"title":"Integration Tests","url":"https://serhiismetanskyi.com/docs/testing-pyramid/02-integration-tests/"},{"authors":[],"content_html":"<h1>E2E Tests</h1>\n<p>E2E Tests covers test-level strategy across unit, integration, and end-to-end layers, with focused guides on Concept And Examples, Common Mistak...</p>","date_modified":"2026-07-17T00:00:00+00:00","date_published":"2026-07-17T00:00:00+00:00","id":"https://serhiismetanskyi.com/docs/testing-pyramid/03-e2e-tests/","image":null,"tags":["e2e-testing","test-strategy","testing"],"title":"E2E Tests","url":"https://serhiismetanskyi.com/docs/testing-pyramid/03-e2e-tests/"},{"authors":[],"content_html":"<h1>Unit Tests — Concept &amp; Examples</h1>\n<h2>What They Test</h2>\n<p>One function, one method, one class. No database, no API calls, no browser.\nCode calls code, result is ...</p>","date_modified":"2026-07-16T00:00:00+00:00","date_published":"2026-07-16T00:00:00+00:00","id":"https://serhiismetanskyi.com/docs/testing-pyramid/01-unit-tests/01-concept-and-examples/","image":null,"tags":["test-strategy","testing","unit-testing"],"title":"Unit Tests — Concept & Examples","url":"https://serhiismetanskyi.com/docs/testing-pyramid/01-unit-tests/01-concept-and-examples/"},{"authors":[],"content_html":"<h1>Unit Tests — Common Mistakes</h1>\n<h2>Mistake 1: Test Without an Assertion</h2>\n<p>The test calls the function, nothing crashes, pytest marks it green.\nBut the result ...</p>","date_modified":"2026-07-16T00:00:00+00:00","date_published":"2026-07-16T00:00:00+00:00","id":"https://serhiismetanskyi.com/docs/testing-pyramid/01-unit-tests/02-common-mistakes/","image":null,"tags":["test-strategy","testing","unit-testing"],"title":"Unit Tests — Common Mistakes","url":"https://serhiismetanskyi.com/docs/testing-pyramid/01-unit-tests/02-common-mistakes/"},{"authors":[],"content_html":"<h1>Unit Tests</h1>\n<p>Unit Tests covers test-level strategy across unit, integration, and end-to-end layers, with focused guides on Concept And Examples, Common Mist...</p>","date_modified":"2026-07-16T00:00:00+00:00","date_published":"2026-07-16T00:00:00+00:00","id":"https://serhiismetanskyi.com/docs/testing-pyramid/01-unit-tests/","image":null,"tags":["test-strategy","testing","unit-testing"],"title":"Unit Tests","url":"https://serhiismetanskyi.com/docs/testing-pyramid/01-unit-tests/"},{"authors":[],"content_html":"<h1>Testing Pyramid</h1>\n<p>Practical reference for test levels, tooling, and strategy.\nBased on: [The Testing Pyramid: Everybody Knows It, Nobody Follows It](https:/...</p>","date_modified":"2026-07-16T00:00:00+00:00","date_published":"2026-07-16T00:00:00+00:00","id":"https://serhiismetanskyi.com/docs/testing-pyramid/","image":null,"tags":["test-strategy","testing"],"title":"Testing Pyramid","url":"https://serhiismetanskyi.com/docs/testing-pyramid/"},{"authors":[],"content_html":"<h1>CI/CD Integration and Security Testing</h1>\n<h2>CI/CD Integration</h2>\n<h3>Pipeline Test Stages</h3>\n<p>Recommended stage order for fast feedback:</p>\n<p>```\nCommit push\n  │\n  ├...</p>","date_modified":"2026-07-15T00:00:00+00:00","date_published":"2026-07-15T00:00:00+00:00","id":"https://serhiismetanskyi.com/docs/test-design-patterns/07-decisions-production/01-ci-cd-security/","image":null,"tags":["ci-cd","design-patterns","security","test-automation"],"title":"CI/CD Integration and Security Testing","url":"https://serhiismetanskyi.com/docs/test-design-patterns/07-decisions-production/01-ci-cd-security/"},{"authors":[],"content_html":"<h1>Test Anti-Patterns and Risks</h1>\n<h2>Test Anti-Patterns</h2>\n<h3>1. Flaky Tests</h3>\n<p><strong>Description:</strong> Tests that pass or fail non-deterministically.</p>\n<p><strong>Causes:</strong> `time...</p>","date_modified":"2026-07-15T00:00:00+00:00","date_published":"2026-07-15T00:00:00+00:00","id":"https://serhiismetanskyi.com/docs/test-design-patterns/07-decisions-production/02-antipatterns-risks/","image":null,"tags":["design-patterns","test-automation"],"title":"Test Anti-Patterns and Risks","url":"https://serhiismetanskyi.com/docs/test-design-patterns/07-decisions-production/02-antipatterns-risks/"},{"authors":[],"content_html":"<h1>Real-World Test Architectures, Decision Factors, and Heuristics</h1>\n<h2>Real-World Architectures</h2>\n<h3>Microservices</h3>\n<p>| Challenge | Strategy |\n|---|---|\n| Many ...</p>","date_modified":"2026-07-15T00:00:00+00:00","date_published":"2026-07-15T00:00:00+00:00","id":"https://serhiismetanskyi.com/docs/test-design-patterns/07-decisions-production/03-real-world-decisions-heuristics/","image":null,"tags":["design-patterns","test-automation"],"title":"Real-World Test Architectures, Decision Factors, and Heuristics","url":"https://serhiismetanskyi.com/docs/test-design-patterns/07-decisions-production/03-real-world-decisions-heuristics/"},{"authors":[],"content_html":"<h1>Decisions Production</h1>\n<p>Decisions Production covers test architecture patterns, data strategy, and execution reliability, with focused guides on CI/CD Securi...</p>","date_modified":"2026-07-15T00:00:00+00:00","date_published":"2026-07-15T00:00:00+00:00","id":"https://serhiismetanskyi.com/docs/test-design-patterns/07-decisions-production/","image":null,"tags":["design-patterns","test-automation"],"title":"Decisions Production","url":"https://serhiismetanskyi.com/docs/test-design-patterns/07-decisions-production/"},{"authors":[],"content_html":"<h1>Test Execution Strategies</h1>\n<h2>Parallel Execution</h2>\n<h3>Thread Safety</h3>\n<p>Running tests in parallel requires every test to be fully isolated.</p>\n<p>| Requirement | R...</p>","date_modified":"2026-07-14T00:00:00+00:00","date_published":"2026-07-14T00:00:00+00:00","id":"https://serhiismetanskyi.com/docs/test-design-patterns/06-execution-reliability/01-execution-strategies/","image":null,"tags":["design-patterns","test-automation"],"title":"Test Execution Strategies","url":"https://serhiismetanskyi.com/docs/test-design-patterns/06-execution-reliability/01-execution-strategies/"},{"authors":[],"content_html":"<h1>Test Reliability and Flakiness</h1>\n<h2>Causes of Flakiness</h2>\n<p>| Cause | Description | Example |\n|---|---|---|\n| Timing issues | Test proceeds before async operat...</p>","date_modified":"2026-07-14T00:00:00+00:00","date_published":"2026-07-14T00:00:00+00:00","id":"https://serhiismetanskyi.com/docs/test-design-patterns/06-execution-reliability/02-reliability-flakiness/","image":null,"tags":["design-patterns","test-automation"],"title":"Test Reliability and Flakiness","url":"https://serhiismetanskyi.com/docs/test-design-patterns/06-execution-reliability/02-reliability-flakiness/"},{"authors":[],"content_html":"<h1>Performance Testing and Observability in Tests</h1>\n<h2>Performance Testing</h2>\n<h3>Metrics</h3>\n<p>| Metric | Definition | Typical SLO |\n|---|---|---|\n| Latency (p50) | ...</p>","date_modified":"2026-07-14T00:00:00+00:00","date_published":"2026-07-14T00:00:00+00:00","id":"https://serhiismetanskyi.com/docs/test-design-patterns/06-execution-reliability/03-performance-observability/","image":null,"tags":["design-patterns","observability","test-automation"],"title":"Performance Testing and Observability in Tests","url":"https://serhiismetanskyi.com/docs/test-design-patterns/06-execution-reliability/03-performance-observability/"},{"authors":[],"content_html":"<h1>Execution Reliability</h1>\n<p>Execution Reliability covers test architecture patterns, data strategy, and execution reliability, with focused guides on Execution ...</p>","date_modified":"2026-07-14T00:00:00+00:00","date_published":"2026-07-14T00:00:00+00:00","id":"https://serhiismetanskyi.com/docs/test-design-patterns/06-execution-reliability/","image":null,"tags":["design-patterns","test-automation"],"title":"Execution Reliability","url":"https://serhiismetanskyi.com/docs/test-design-patterns/06-execution-reliability/"},{"authors":[],"content_html":"<h1>API Test Patterns: gRPC and WebSocket</h1>\n<h2>gRPC</h2>\n<h3>Stub-Based Testing</h3>\n<p>gRPC tests use generated stubs. Never call the raw channel directly in tests —\nwrap...</p>","date_modified":"2026-07-13T00:00:00+00:00","date_published":"2026-07-13T00:00:00+00:00","id":"https://serhiismetanskyi.com/docs/test-design-patterns/04-api-test-patterns/02-grpc-websocket/","image":null,"tags":["api-testing","design-patterns","test-automation"],"title":"API Test Patterns: gRPC and WebSocket","url":"https://serhiismetanskyi.com/docs/test-design-patterns/04-api-test-patterns/02-grpc-websocket/"},{"authors":[],"content_html":"<h1>Test Data Management</h1>\n<h2>Data Strategies</h2>\n<h3>Static Data</h3>\n<p>Pre-defined, version-controlled data used as-is.</p>\n<p>| Use case | Example |\n|---|---|\n| Reference l...</p>","date_modified":"2026-07-13T00:00:00+00:00","date_published":"2026-07-13T00:00:00+00:00","id":"https://serhiismetanskyi.com/docs/test-design-patterns/05-data-mocking-env/01-test-data-management/","image":null,"tags":["design-patterns","mocking","test-automation","test-data"],"title":"Test Data Management","url":"https://serhiismetanskyi.com/docs/test-design-patterns/05-data-mocking-env/01-test-data-management/"},{"authors":[],"content_html":"<h1>Mocking and Stubbing</h1>\n<h2>Types</h2>\n<h3>Mock</h3>\n<p>A mock is a test double that records calls and allows assertions on how it was used.\nIt verifies <strong>behaviour</strong>: w...</p>","date_modified":"2026-07-13T00:00:00+00:00","date_published":"2026-07-13T00:00:00+00:00","id":"https://serhiismetanskyi.com/docs/test-design-patterns/05-data-mocking-env/02-mocking-stubbing/","image":null,"tags":["design-patterns","mocking","test-automation","test-data"],"title":"Mocking and Stubbing","url":"https://serhiismetanskyi.com/docs/test-design-patterns/05-data-mocking-env/02-mocking-stubbing/"},{"authors":[],"content_html":"<h1>Test Environment Design</h1>\n<h2>Environments</h2>\n<h3>Local</h3>\n<p>Developer machine or CI agent running the full stack via Docker Compose.</p>\n<p>| Property | Value |\n|---|--...</p>","date_modified":"2026-07-13T00:00:00+00:00","date_published":"2026-07-13T00:00:00+00:00","id":"https://serhiismetanskyi.com/docs/test-design-patterns/05-data-mocking-env/03-environment-design/","image":null,"tags":["design-patterns","mocking","test-automation","test-data"],"title":"Test Environment Design","url":"https://serhiismetanskyi.com/docs/test-design-patterns/05-data-mocking-env/03-environment-design/"},{"authors":[],"content_html":"<h1>Data Mocking Env</h1>\n<p>Data Mocking Env covers test architecture patterns, data strategy, and execution reliability, with focused guides on Test Data Management...</p>","date_modified":"2026-07-13T00:00:00+00:00","date_published":"2026-07-13T00:00:00+00:00","id":"https://serhiismetanskyi.com/docs/test-design-patterns/05-data-mocking-env/","image":null,"tags":["design-patterns","mocking","test-automation","test-data"],"title":"Data Mocking Env","url":"https://serhiismetanskyi.com/docs/test-design-patterns/05-data-mocking-env/"},{"authors":[],"content_html":"<h1>Wrapper / Abstraction Layer and Fluent Interface Pattern</h1>\n<h2>Wrapper / Abstraction Layer</h2>\n<h3>Concept</h3>\n<p>A wrapper hides the implementation details of a libr...</p>","date_modified":"2026-07-12T00:00:00+00:00","date_published":"2026-07-12T00:00:00+00:00","id":"https://serhiismetanskyi.com/docs/test-design-patterns/03-advanced-patterns/01-wrapper-fluent-interface/","image":null,"tags":["design-patterns","test-automation"],"title":"Wrapper / Abstraction Layer and Fluent Interface Pattern","url":"https://serhiismetanskyi.com/docs/test-design-patterns/03-advanced-patterns/01-wrapper-fluent-interface/"},{"authors":[],"content_html":"<h1>Assertion Pattern, Test Template Pattern, Data-Driven Pattern</h1>\n<h2>Assertion Pattern</h2>\n<h3>Concept</h3>\n<p>Centralise assertion logic in reusable helpers or custom ...</p>","date_modified":"2026-07-12T00:00:00+00:00","date_published":"2026-07-12T00:00:00+00:00","id":"https://serhiismetanskyi.com/docs/test-design-patterns/03-advanced-patterns/02-assertion-template-data-driven/","image":null,"tags":["design-patterns","test-automation"],"title":"Assertion Pattern, Test Template Pattern, Data-Driven Pattern","url":"https://serhiismetanskyi.com/docs/test-design-patterns/03-advanced-patterns/02-assertion-template-data-driven/"},{"authors":[],"content_html":"<h1>API Test Patterns: REST and GraphQL</h1>\n<h2>REST</h2>\n<h3>Request Builder</h3>\n<p>Encapsulate request construction. Keep tests readable and DRY.</p>\n<p>```python\nclass RestRequ...</p>","date_modified":"2026-07-12T00:00:00+00:00","date_published":"2026-07-12T00:00:00+00:00","id":"https://serhiismetanskyi.com/docs/test-design-patterns/04-api-test-patterns/01-rest-graphql/","image":null,"tags":["api-testing","design-patterns","test-automation"],"title":"API Test Patterns: REST and GraphQL","url":"https://serhiismetanskyi.com/docs/test-design-patterns/04-api-test-patterns/01-rest-graphql/"},{"authors":[],"content_html":"<h1>API Test Patterns</h1>\n<p>API Test Patterns covers test architecture patterns, data strategy, and execution reliability, with focused guides on REST GraphQL, gRPC...</p>","date_modified":"2026-07-12T00:00:00+00:00","date_published":"2026-07-12T00:00:00+00:00","id":"https://serhiismetanskyi.com/docs/test-design-patterns/04-api-test-patterns/","image":null,"tags":["api-testing","design-patterns","test-automation"],"title":"API Test Patterns","url":"https://serhiismetanskyi.com/docs/test-design-patterns/04-api-test-patterns/"},{"authors":[],"content_html":"<h1>Screenplay Pattern</h1>\n<h2>Concept</h2>\n<p>Screenplay models tests as actors performing tasks using abilities, rather than pages owning actions.</p>\n<p>```\nActor  →  perfor...</p>","date_modified":"2026-07-11T00:00:00+00:00","date_published":"2026-07-11T00:00:00+00:00","id":"https://serhiismetanskyi.com/docs/test-design-patterns/02-core-patterns/02-screenplay-pattern/","image":null,"tags":["design-patterns","test-automation"],"title":"Screenplay Pattern","url":"https://serhiismetanskyi.com/docs/test-design-patterns/02-core-patterns/02-screenplay-pattern/"},{"authors":[],"content_html":"<h1>Test Data Builder</h1>\n<h2>Concept</h2>\n<p>A Builder provides a fluent interface for constructing test objects with sensible defaults,\noverriding only the fields relev...</p>","date_modified":"2026-07-11T00:00:00+00:00","date_published":"2026-07-11T00:00:00+00:00","id":"https://serhiismetanskyi.com/docs/test-design-patterns/02-core-patterns/03-test-data-builder/","image":null,"tags":["design-patterns","test-automation"],"title":"Test Data Builder","url":"https://serhiismetanskyi.com/docs/test-design-patterns/02-core-patterns/03-test-data-builder/"},{"authors":[],"content_html":"<h1>Fixture Pattern and Factory Pattern</h1>\n<h2>Fixture Pattern</h2>\n<h3>Concept</h3>\n<p>A fixture is a reusable piece of setup (and optional teardown) that provides a known,...</p>","date_modified":"2026-07-11T00:00:00+00:00","date_published":"2026-07-11T00:00:00+00:00","id":"https://serhiismetanskyi.com/docs/test-design-patterns/02-core-patterns/04-fixture-factory/","image":null,"tags":["design-patterns","test-automation"],"title":"Fixture Pattern and Factory Pattern","url":"https://serhiismetanskyi.com/docs/test-design-patterns/02-core-patterns/04-fixture-factory/"},{"authors":[],"content_html":"<h1>Advanced Patterns</h1>\n<p>Advanced Patterns covers test architecture patterns, data strategy, and execution reliability, with focused guides on Wrapper Fluent Int...</p>","date_modified":"2026-07-11T00:00:00+00:00","date_published":"2026-07-11T00:00:00+00:00","id":"https://serhiismetanskyi.com/docs/test-design-patterns/03-advanced-patterns/","image":null,"tags":["design-patterns","test-automation"],"title":"Advanced Patterns","url":"https://serhiismetanskyi.com/docs/test-design-patterns/03-advanced-patterns/"},{"authors":[],"content_html":"<h1>Test Pyramid, Trophy and Core Principles</h1>\n<h2>Test Pyramid</h2>\n<p>```\n        ▲\n       /E2E\\       ← few, slow, expensive\n      /------\\\n     /  API   \\    ← mode...</p>","date_modified":"2026-07-10T00:00:00+00:00","date_published":"2026-07-10T00:00:00+00:00","id":"https://serhiismetanskyi.com/docs/test-design-patterns/01-fundamentals/02-test-pyramid-principles/","image":null,"tags":["design-patterns","test-automation"],"title":"Test Pyramid, Trophy and Core Principles","url":"https://serhiismetanskyi.com/docs/test-design-patterns/01-fundamentals/02-test-pyramid-principles/"},{"authors":[],"content_html":"<h1>Test Architecture</h1>\n<h2>Test Layers</h2>\n<h3>UI Layer</h3>\n<p>Responsibilities:\n- Browser or native app interactions\n- User journey validation\n- Accessibility and visua...</p>","date_modified":"2026-07-10T00:00:00+00:00","date_published":"2026-07-10T00:00:00+00:00","id":"https://serhiismetanskyi.com/docs/test-design-patterns/01-fundamentals/03-test-architecture/","image":null,"tags":["design-patterns","test-automation"],"title":"Test Architecture","url":"https://serhiismetanskyi.com/docs/test-design-patterns/01-fundamentals/03-test-architecture/"},{"authors":[],"content_html":"<h1>Page Object Model (POM)</h1>\n<h2>Concept</h2>\n<p>POM encapsulates all interactions with a UI page or component behind a dedicated class.\nTests call methods on the page...</p>","date_modified":"2026-07-10T00:00:00+00:00","date_published":"2026-07-10T00:00:00+00:00","id":"https://serhiismetanskyi.com/docs/test-design-patterns/02-core-patterns/01-page-object-model/","image":null,"tags":["design-patterns","test-automation"],"title":"Page Object Model (POM)","url":"https://serhiismetanskyi.com/docs/test-design-patterns/02-core-patterns/01-page-object-model/"},{"authors":[],"content_html":"<h1>Core Patterns</h1>\n<p>Core Patterns covers test architecture patterns, data strategy, and execution reliability, with focused guides on Page Object Model, Screenp...</p>","date_modified":"2026-07-10T00:00:00+00:00","date_published":"2026-07-10T00:00:00+00:00","id":"https://serhiismetanskyi.com/docs/test-design-patterns/02-core-patterns/","image":null,"tags":["design-patterns","test-automation"],"title":"Core Patterns","url":"https://serhiismetanskyi.com/docs/test-design-patterns/02-core-patterns/"},{"authors":[],"content_html":"<h1>Test Types and Levels</h1>\n<h2>Test Types</h2>\n<h3>Unit Tests</h3>\n<p>| Property | Value |\n|---|---|\n| Scope | Single function / class / module |\n| Speed | Sub-millisecond...</p>","date_modified":"2026-07-09T00:00:00+00:00","date_published":"2026-07-09T00:00:00+00:00","id":"https://serhiismetanskyi.com/docs/test-design-patterns/01-fundamentals/01-test-types-levels/","image":null,"tags":["design-patterns","test-automation"],"title":"Test Types and Levels","url":"https://serhiismetanskyi.com/docs/test-design-patterns/01-fundamentals/01-test-types-levels/"},{"authors":[],"content_html":"<h1>Fundamentals</h1>\n<p>Fundamentals covers test architecture patterns, data strategy, and execution reliability, with focused guides on Test Types Levels, Test Pyra...</p>","date_modified":"2026-07-09T00:00:00+00:00","date_published":"2026-07-09T00:00:00+00:00","id":"https://serhiismetanskyi.com/docs/test-design-patterns/01-fundamentals/","image":null,"tags":["design-patterns","test-automation"],"title":"Fundamentals","url":"https://serhiismetanskyi.com/docs/test-design-patterns/01-fundamentals/"},{"authors":[],"content_html":"<h1>Test Design Patterns in Test Automation</h1>\n<h2>Section Descriptions</h2>\n<h3>1. <a href=\"01-fundamentals/index.md\">Fundamentals</a></h3>\n<p>| File | Topics |\n|------|--------|\n| [T...</p>","date_modified":"2026-07-09T00:00:00+00:00","date_published":"2026-07-09T00:00:00+00:00","id":"https://serhiismetanskyi.com/docs/test-design-patterns/","image":null,"tags":["design-patterns","test-automation"],"title":"Test Design Patterns in Test Automation","url":"https://serhiismetanskyi.com/docs/test-design-patterns/"},{"authors":[],"content_html":"<h1>Fuzz &amp; Random Testing</h1>\n<h2>Concept</h2>\n<p>Fuzz testing sends unexpected, random, or malformed data to a system to expose crashes,\nunhandled exceptions, and behavi...</p>","date_modified":"2026-07-09T00:00:00+00:00","date_published":"2026-07-09T00:00:00+00:00","id":"https://serhiismetanskyi.com/docs/test-design-techniques/03-experience-based/03-fuzz-random-testing/","image":null,"tags":["test-design","testing"],"title":"Fuzz & Random Testing","url":"https://serhiismetanskyi.com/docs/test-design-techniques/03-experience-based/03-fuzz-random-testing/"},{"authors":[],"content_html":"<h1>State Transition Testing</h1>\n<h2>Concept</h2>\n<p>State transition testing verifies that a system moves correctly between states.\nIt tests both valid transitions (allo...</p>","date_modified":"2026-07-08T00:00:00+00:00","date_published":"2026-07-08T00:00:00+00:00","id":"https://serhiismetanskyi.com/docs/test-design-techniques/02-logic-state-based/02-state-transition/","image":null,"tags":["test-design","testing"],"title":"State Transition Testing","url":"https://serhiismetanskyi.com/docs/test-design-techniques/02-logic-state-based/02-state-transition/"},{"authors":[],"content_html":"<h1>CRUD Testing</h1>\n<h2>Concept</h2>\n<p>CRUD testing verifies the full data lifecycle: Create, Read, Update, Delete.\nThe key insight is to verify **data state after ever...</p>","date_modified":"2026-07-08T00:00:00+00:00","date_published":"2026-07-08T00:00:00+00:00","id":"https://serhiismetanskyi.com/docs/test-design-techniques/03-experience-based/01-crud-testing/","image":null,"tags":["test-design","testing"],"title":"CRUD Testing","url":"https://serhiismetanskyi.com/docs/test-design-techniques/03-experience-based/01-crud-testing/"},{"authors":[],"content_html":"<h1>Metamorphic Testing</h1>\n<h2>Concept</h2>\n<p>Metamorphic testing is used when there is no easy way to determine the exact expected output,\nbut you know the **relations...</p>","date_modified":"2026-07-08T00:00:00+00:00","date_published":"2026-07-08T00:00:00+00:00","id":"https://serhiismetanskyi.com/docs/test-design-techniques/03-experience-based/02-metamorphic-testing/","image":null,"tags":["test-design","testing"],"title":"Metamorphic Testing","url":"https://serhiismetanskyi.com/docs/test-design-techniques/03-experience-based/02-metamorphic-testing/"},{"authors":[],"content_html":"<h1>Experience Based</h1>\n<p>Experience Based covers test case design techniques and input/state coverage strategies, with focused guides on CRUD Testing, Metamorphic...</p>","date_modified":"2026-07-08T00:00:00+00:00","date_published":"2026-07-08T00:00:00+00:00","id":"https://serhiismetanskyi.com/docs/test-design-techniques/03-experience-based/","image":null,"tags":["test-design","testing"],"title":"Experience Based","url":"https://serhiismetanskyi.com/docs/test-design-techniques/03-experience-based/"},{"authors":[],"content_html":"<h1>Boundary Value Analysis</h1>\n<h2>Concept</h2>\n<p>Most bugs live on the edges of valid ranges. BVA focuses specifically on the minimum, maximum,\nand values immediately ...</p>","date_modified":"2026-07-07T00:00:00+00:00","date_published":"2026-07-07T00:00:00+00:00","id":"https://serhiismetanskyi.com/docs/test-design-techniques/01-input-based/02-boundary-value-analysis/","image":null,"tags":["test-design","testing"],"title":"Boundary Value Analysis","url":"https://serhiismetanskyi.com/docs/test-design-techniques/01-input-based/02-boundary-value-analysis/"},{"authors":[],"content_html":"<h1>Pairwise Testing</h1>\n<h2>Concept</h2>\n<p>When there are many parameters with multiple values, exhaustive testing is impractical.\nPairwise testing covers every possibl...</p>","date_modified":"2026-07-07T00:00:00+00:00","date_published":"2026-07-07T00:00:00+00:00","id":"https://serhiismetanskyi.com/docs/test-design-techniques/01-input-based/03-pairwise-testing/","image":null,"tags":["test-design","testing"],"title":"Pairwise Testing","url":"https://serhiismetanskyi.com/docs/test-design-techniques/01-input-based/03-pairwise-testing/"},{"authors":[],"content_html":"<h1>Decision Table Testing</h1>\n<h2>Concept</h2>\n<p>When system behaviour depends on multiple conditions with multiple outcomes, a decision table\nmaps every combination of...</p>","date_modified":"2026-07-07T00:00:00+00:00","date_published":"2026-07-07T00:00:00+00:00","id":"https://serhiismetanskyi.com/docs/test-design-techniques/02-logic-state-based/01-decision-table/","image":null,"tags":["test-design","testing"],"title":"Decision Table Testing","url":"https://serhiismetanskyi.com/docs/test-design-techniques/02-logic-state-based/01-decision-table/"},{"authors":[],"content_html":"<h1>Logic State Based</h1>\n<p>Logic State Based covers test case design techniques and input/state coverage strategies, with focused guides on Decision Table, State T...</p>","date_modified":"2026-07-07T00:00:00+00:00","date_published":"2026-07-07T00:00:00+00:00","id":"https://serhiismetanskyi.com/docs/test-design-techniques/02-logic-state-based/","image":null,"tags":["test-design","testing"],"title":"Logic State Based","url":"https://serhiismetanskyi.com/docs/test-design-techniques/02-logic-state-based/"},{"authors":[],"content_html":"<h1>Shift-Left Testing</h1>\n<h2>Core Idea</h2>\n<p>Shift-left moves testing, security, and validation to the <strong>earliest possible stage</strong>\nof the development lifecycle. Inste...</p>","date_modified":"2026-07-06T00:00:00+00:00","date_published":"2026-07-06T00:00:00+00:00","id":"https://serhiismetanskyi.com/docs/qa-methodology/16-shift-left-testing/","image":null,"tags":["qa","test-strategy","testing"],"title":"Shift-Left Testing","url":"https://serhiismetanskyi.com/docs/qa-methodology/16-shift-left-testing/"},{"authors":[],"content_html":"<h1>Equivalence Partitioning</h1>\n<h2>Concept</h2>\n<p>Split all possible inputs into groups (partitions) where each value in the group behaves the same way.\nTest one repre...</p>","date_modified":"2026-07-06T00:00:00+00:00","date_published":"2026-07-06T00:00:00+00:00","id":"https://serhiismetanskyi.com/docs/test-design-techniques/01-input-based/01-equivalence-partitioning/","image":null,"tags":["test-design","testing"],"title":"Equivalence Partitioning","url":"https://serhiismetanskyi.com/docs/test-design-techniques/01-input-based/01-equivalence-partitioning/"},{"authors":[],"content_html":"<h1>Input Based</h1>\n<p>Input Based covers test case design techniques and input/state coverage strategies, with focused guides on Equivalence Partitioning, Boundary ...</p>","date_modified":"2026-07-06T00:00:00+00:00","date_published":"2026-07-06T00:00:00+00:00","id":"https://serhiismetanskyi.com/docs/test-design-techniques/01-input-based/","image":null,"tags":["test-design","testing"],"title":"Input Based","url":"https://serhiismetanskyi.com/docs/test-design-techniques/01-input-based/"},{"authors":[],"content_html":"<h1>Test Design Techniques</h1>\n<hr />\n<h2>Why Test Design Matters</h2>\n<p>Test design techniques are ways to stop testing randomly and start testing with logic.\nThey reduce...</p>","date_modified":"2026-07-06T00:00:00+00:00","date_published":"2026-07-06T00:00:00+00:00","id":"https://serhiismetanskyi.com/docs/test-design-techniques/","image":null,"tags":["test-design","testing"],"title":"Test Design Techniques","url":"https://serhiismetanskyi.com/docs/test-design-techniques/"},{"authors":[],"content_html":"<h1>Defect Triage, Root Cause Analysis &amp; CAPA</h1>\n<h2>Defect triage</h2>\n<p>Triage decides what to fix first, what can wait, and what is not a bug.\nIt is a business-and-e...</p>","date_modified":"2026-07-05T00:00:00+00:00","date_published":"2026-07-05T00:00:00+00:00","id":"https://serhiismetanskyi.com/docs/qa-methodology/12-defect-triage-rca-capa/","image":null,"tags":["qa","testing"],"title":"Defect Triage, Root Cause Analysis & CAPA","url":"https://serhiismetanskyi.com/docs/qa-methodology/12-defect-triage-rca-capa/"},{"authors":[],"content_html":"<h1>Coverage Strategy</h1>\n<h2>Coverage is not one number</h2>\n<p>Teams often reduce coverage to line or branch percentage. That is incomplete.\nUseful coverage strategy co...</p>","date_modified":"2026-07-05T00:00:00+00:00","date_published":"2026-07-05T00:00:00+00:00","id":"https://serhiismetanskyi.com/docs/qa-methodology/13-coverage-strategy/","image":null,"tags":["qa","rag","testing"],"title":"Coverage Strategy","url":"https://serhiismetanskyi.com/docs/qa-methodology/13-coverage-strategy/"},{"authors":[],"content_html":"<h1>Test Estimation &amp; Effort Planning</h1>\n<h2>Purpose</h2>\n<p>QA estimation is not guessing test case count. It is forecasting the effort\nneeded to reduce release risk to...</p>","date_modified":"2026-07-05T00:00:00+00:00","date_published":"2026-07-05T00:00:00+00:00","id":"https://serhiismetanskyi.com/docs/qa-methodology/14-estimation-effort-planning/","image":null,"tags":["qa","testing"],"title":"Test Estimation & Effort Planning","url":"https://serhiismetanskyi.com/docs/qa-methodology/14-estimation-effort-planning/"},{"authors":[],"content_html":"<h1>Domain-Specific QA</h1>\n<h2>Why domain-specific QA matters</h2>\n<p>General testing principles stay the same, but failure modes change by system type.\nGood QA strategy ...</p>","date_modified":"2026-07-05T00:00:00+00:00","date_published":"2026-07-05T00:00:00+00:00","id":"https://serhiismetanskyi.com/docs/qa-methodology/15-domain-specific-qa/","image":null,"tags":["qa","testing"],"title":"Domain-Specific QA","url":"https://serhiismetanskyi.com/docs/qa-methodology/15-domain-specific-qa/"},{"authors":[],"content_html":"<h1>Release Quality Gates, Flaky Tests &amp; Templates</h1>\n<h2>Release Quality Gates (Merge/Deploy)</h2>\n<p>Use strict, measurable gates. If any gate fails, merge/deploy is b...</p>","date_modified":"2026-07-04T00:00:00+00:00","date_published":"2026-07-04T00:00:00+00:00","id":"https://serhiismetanskyi.com/docs/qa-methodology/08-release-quality-gates-checklists/","image":null,"tags":["qa","testing"],"title":"Release Quality Gates, Flaky Tests & Templates","url":"https://serhiismetanskyi.com/docs/qa-methodology/08-release-quality-gates-checklists/"},{"authors":[],"content_html":"<h1>Shift-Right Testing, SLO/Error Budget &amp; AI-Assisted QA (2026)</h1>\n<h2>Shift-Right Testing</h2>\n<p>Shift-right extends quality validation into staging/production with ...</p>","date_modified":"2026-07-04T00:00:00+00:00","date_published":"2026-07-04T00:00:00+00:00","id":"https://serhiismetanskyi.com/docs/qa-methodology/09-shift-right-observability/","image":null,"tags":["observability","qa","test-strategy","testing"],"title":"Shift-Right Testing, SLO/Error Budget & AI-Assisted QA (2026)","url":"https://serhiismetanskyi.com/docs/qa-methodology/09-shift-right-observability/"},{"authors":[],"content_html":"<h1>Exploratory Testing &amp; Session-Based Test Management</h1>\n<h2>What exploratory testing is</h2>\n<p>Exploratory testing is simultaneous learning, test design, and executi...</p>","date_modified":"2026-07-04T00:00:00+00:00","date_published":"2026-07-04T00:00:00+00:00","id":"https://serhiismetanskyi.com/docs/qa-methodology/10-exploratory-session-based-testing/","image":null,"tags":["qa","testing"],"title":"Exploratory Testing & Session-Based Test Management","url":"https://serhiismetanskyi.com/docs/qa-methodology/10-exploratory-session-based-testing/"},{"authors":[],"content_html":"<h1>Requirements Quality &amp; Testability</h1>\n<h2>Why this matters</h2>\n<p>Many defects start before coding. Weak requirements create weak tests,\nrework, and late defects. Q...</p>","date_modified":"2026-07-04T00:00:00+00:00","date_published":"2026-07-04T00:00:00+00:00","id":"https://serhiismetanskyi.com/docs/qa-methodology/11-requirements-quality-testability/","image":null,"tags":["qa","testing"],"title":"Requirements Quality & Testability","url":"https://serhiismetanskyi.com/docs/qa-methodology/11-requirements-quality-testability/"},{"authors":[],"content_html":"<h1>Test Execution, Defect Management &amp; Environments</h1>\n<h2>Test Execution</h2>\n<h3>Process</h3>\n<p>```\n1. Verify entry criteria are met\n2. Execute test cases (manual or aut...</p>","date_modified":"2026-07-03T00:00:00+00:00","date_published":"2026-07-03T00:00:00+00:00","id":"https://serhiismetanskyi.com/docs/qa-methodology/04-execution-defects-envs/","image":null,"tags":["qa","testing"],"title":"Test Execution, Defect Management & Environments","url":"https://serhiismetanskyi.com/docs/qa-methodology/04-execution-defects-envs/"},{"authors":[],"content_html":"<h1>Test Automation, SDLC, Agile &amp; Risk-Based Testing</h1>\n<h2>Test Automation Basics</h2>\n<h3>When to Automate</h3>\n<p>Automation pays off when a test is:</p>\n<p>| Signal | Rationa...</p>","date_modified":"2026-07-03T00:00:00+00:00","date_published":"2026-07-03T00:00:00+00:00","id":"https://serhiismetanskyi.com/docs/qa-methodology/05-automation-sdlc-agile/","image":null,"tags":["qa","testing"],"title":"Test Automation, SDLC, Agile & Risk-Based Testing","url":"https://serhiismetanskyi.com/docs/qa-methodology/05-automation-sdlc-agile/"},{"authors":[],"content_html":"<h1>Metrics, Documentation, Best Practices &amp; QA Roles</h1>\n<h2>Test Metrics</h2>\n<p>Metrics give stakeholders data-driven confidence and help QA improve continuously.</p>\n<p>| M...</p>","date_modified":"2026-07-03T00:00:00+00:00","date_published":"2026-07-03T00:00:00+00:00","id":"https://serhiismetanskyi.com/docs/qa-methodology/06-metrics-docs-practices-roles/","image":null,"tags":["metrics","qa","testing"],"title":"Metrics, Documentation, Best Practices & QA Roles","url":"https://serhiismetanskyi.com/docs/qa-methodology/06-metrics-docs-practices-roles/"},{"authors":[],"content_html":"<h1>TDD, BDD &amp; ATDD</h1>\n<h2>Overview</h2>\n<p>All three are <strong>test-first</strong> approaches — tests are written before (or alongside)\nproduction code. They differ in scope, audi...</p>","date_modified":"2026-07-03T00:00:00+00:00","date_published":"2026-07-03T00:00:00+00:00","id":"https://serhiismetanskyi.com/docs/qa-methodology/07-tdd-bdd-atdd/","image":null,"tags":["qa","tdd-bdd","testing"],"title":"TDD, BDD & ATDD","url":"https://serhiismetanskyi.com/docs/qa-methodology/07-tdd-bdd-atdd/"},{"authors":[],"content_html":"<h1>OWASP LLM Security Guide (2026)</h1>\n<p>Reference baseline: <strong>OWASP Top 10 for LLM Applications (2026)</strong> from OWASP GenAI Security Project.</p>\n<h2>Why LLM Security I...</h2>","date_modified":"2026-07-02T00:00:00+00:00","date_published":"2026-07-02T00:00:00+00:00","id":"https://serhiismetanskyi.com/docs/owasp-llm-security/01-owasp-llm-security-guide/","image":null,"tags":["llm","owasp","security"],"title":"OWASP LLM Security Guide (2026)","url":"https://serhiismetanskyi.com/docs/owasp-llm-security/01-owasp-llm-security-guide/"},{"authors":[],"content_html":"<h1>OWASP LLM Security Testing Checklist (2026)</h1>\n<p>Use this checklist for pre-release validation and periodic regression testing.\nPriority labels: <strong>[P0]</strong> must-...</p>","date_modified":"2026-07-02T00:00:00+00:00","date_published":"2026-07-02T00:00:00+00:00","id":"https://serhiismetanskyi.com/docs/owasp-llm-security/02-owasp-llm-security-testing-checklist/","image":null,"tags":["llm","owasp","security"],"title":"OWASP LLM Security Testing Checklist (2026)","url":"https://serhiismetanskyi.com/docs/owasp-llm-security/02-owasp-llm-security-testing-checklist/"},{"authors":[],"content_html":"<h1>QA &amp; Testing Fundamentals, Levels &amp; Types</h1>\n<h2>What is QA</h2>\n<h3>Quality Assurance vs Quality Control</h3>\n<p>| | QA | QC |\n|---|---|---|\n| Focus | <strong>Process</strong> — pre...</p>","date_modified":"2026-07-02T00:00:00+00:00","date_published":"2026-07-02T00:00:00+00:00","id":"https://serhiismetanskyi.com/docs/qa-methodology/01-fundamentals-levels-types/","image":null,"tags":["qa","testing"],"title":"QA & Testing Fundamentals, Levels & Types","url":"https://serhiismetanskyi.com/docs/qa-methodology/01-fundamentals-levels-types/"},{"authors":[],"content_html":"<h1>Test Design Techniques, Test Case Design &amp; Test Planning</h1>\n<h2>Test Design Techniques</h2>\n<h3>Black-Box Techniques</h3>\n<p>Test without knowledge of internal code. Inp...</p>","date_modified":"2026-07-02T00:00:00+00:00","date_published":"2026-07-02T00:00:00+00:00","id":"https://serhiismetanskyi.com/docs/qa-methodology/03-design-planning/","image":null,"tags":["qa","testing"],"title":"Test Design Techniques, Test Case Design & Test Planning","url":"https://serhiismetanskyi.com/docs/qa-methodology/03-design-planning/"},{"authors":[],"content_html":"<h1>QA &amp; Testing Methodology</h1>\n<p>A complete reference for QA fundamentals, testing theory, process, and career growth.\nCovers both conceptual knowledge (principle...</p>","date_modified":"2026-07-02T00:00:00+00:00","date_published":"2026-07-02T00:00:00+00:00","id":"https://serhiismetanskyi.com/docs/qa-methodology/","image":null,"tags":["qa","testing"],"title":"QA &amp; Testing Methodology","url":"https://serhiismetanskyi.com/docs/qa-methodology/"},{"authors":[],"content_html":"<h1>OWASP API Security: Recommendations and Best Practices</h1>\n<p>Reference: <strong>OWASP API Security Top 10 (2023)</strong> · OWASP REST Security Cheat Sheet.</p>\n<h2>Security Bas...</h2>","date_modified":"2026-07-01T00:00:00+00:00","date_published":"2026-07-01T00:00:00+00:00","id":"https://serhiismetanskyi.com/docs/owasp-api-security/01-owasp-api-recommendations/","image":null,"tags":["api","owasp","security"],"title":"OWASP API Security: Recommendations and Best Practices","url":"https://serhiismetanskyi.com/docs/owasp-api-security/01-owasp-api-recommendations/"},{"authors":[],"content_html":"<h1>OWASP API Security Testing Checklist</h1>\n<p>Use this checklist for pre-release validation and periodic regression security testing.\nPriority labels: <strong>[P0]</strong> = m...</p>","date_modified":"2026-07-01T00:00:00+00:00","date_published":"2026-07-01T00:00:00+00:00","id":"https://serhiismetanskyi.com/docs/owasp-api-security/02-owasp-api-testing-checklist/","image":null,"tags":["api","owasp","security"],"title":"OWASP API Security Testing Checklist","url":"https://serhiismetanskyi.com/docs/owasp-api-security/02-owasp-api-testing-checklist/"},{"authors":[],"content_html":"<h1>OWASP API Advanced Controls</h1>\n<p>Deeper controls that go beyond the per-risk baseline in <a href=\"./01-owasp-api-recommendations.md\">01</a>: token flows, webhooks, gatewa...</p>","date_modified":"2026-07-01T00:00:00+00:00","date_published":"2026-07-01T00:00:00+00:00","id":"https://serhiismetanskyi.com/docs/owasp-api-security/03-owasp-api-advanced-controls/","image":null,"tags":["api","owasp","security"],"title":"OWASP API Advanced Controls","url":"https://serhiismetanskyi.com/docs/owasp-api-security/03-owasp-api-advanced-controls/"},{"authors":[],"content_html":"<h1>OWASP LLM Security</h1>\n<p>Practical knowledge-base section focused on <strong>OWASP Top 10 for LLM Applications (2026)</strong> — risk guidance, architecture controls, and a ...</p>","date_modified":"2026-07-01T00:00:00+00:00","date_published":"2026-07-01T00:00:00+00:00","id":"https://serhiismetanskyi.com/docs/owasp-llm-security/","image":null,"tags":["llm","owasp","security"],"title":"OWASP LLM Security","url":"https://serhiismetanskyi.com/docs/owasp-llm-security/"},{"authors":[],"content_html":"<h1>Auth, Config &amp; Security Headers</h1>\n<p><strong>Broken Access Control</strong> is the <strong>#1 OWASP Top 10</strong> risk — found in <strong>94% of applications</strong>. Authentication flaws, miscon...</p>","date_modified":"2026-06-30T00:00:00+00:00","date_published":"2026-06-30T00:00:00+00:00","id":"https://serhiismetanskyi.com/docs/code-security/04-auth-config-headers/","image":null,"tags":["appsec","security"],"title":"Auth, Config & Security Headers","url":"https://serhiismetanskyi.com/docs/code-security/04-auth-config-headers/"},{"authors":[],"content_html":"<h1>CI/CD &amp; Monitoring</h1>\n<p>A compromised CI/CD pipeline can <strong>exfiltrate every secret</strong> and <strong>deploy backdoored code</strong> to production. Pipeline security is as crit...</p>","date_modified":"2026-06-30T00:00:00+00:00","date_published":"2026-06-30T00:00:00+00:00","id":"https://serhiismetanskyi.com/docs/code-security/05-cicd-monitoring/","image":null,"tags":["appsec","ci-cd","observability","security"],"title":"CI/CD & Monitoring","url":"https://serhiismetanskyi.com/docs/code-security/05-cicd-monitoring/"},{"authors":[],"content_html":"<h1>Security Audit Checklist</h1>\n<p>A <strong>40-point</strong> checklist for auditing code security. Run the full audit <strong>quarterly</strong>. Between audits, automated scanning handles...</p>","date_modified":"2026-06-30T00:00:00+00:00","date_published":"2026-06-30T00:00:00+00:00","id":"https://serhiismetanskyi.com/docs/code-security/06-security-audit-checklist/","image":null,"tags":["appsec","security"],"title":"Security Audit Checklist","url":"https://serhiismetanskyi.com/docs/code-security/06-security-audit-checklist/"},{"authors":[],"content_html":"<h1>OWASP API Security</h1>\n<p>Practical knowledge-base section focused on <strong>OWASP API Security Top 10 (2023)</strong> — actionable recommendations, advanced controls, and a...</p>","date_modified":"2026-06-30T00:00:00+00:00","date_published":"2026-06-30T00:00:00+00:00","id":"https://serhiismetanskyi.com/docs/owasp-api-security/","image":null,"tags":["api","owasp","security"],"title":"OWASP API Security","url":"https://serhiismetanskyi.com/docs/owasp-api-security/"},{"authors":[],"content_html":"<h1>Secrets &amp; Leak Prevention</h1>\n<p>Hardcoded secrets are the <strong>easiest vulnerability</strong> for attackers to exploit and the <strong>most common</strong> in AI-generated code. In 20...</p>","date_modified":"2026-06-29T00:00:00+00:00","date_published":"2026-06-29T00:00:00+00:00","id":"https://serhiismetanskyi.com/docs/code-security/01-secrets-leak-prevention/","image":null,"tags":["appsec","security"],"title":"Secrets & Leak Prevention","url":"https://serhiismetanskyi.com/docs/code-security/01-secrets-leak-prevention/"},{"authors":[],"content_html":"<h1>Dependency Security</h1>\n<p>Vulnerable dependencies are the <strong>#6 OWASP Top 10</strong> risk. Your application inherits every vulnerability from every transitive dependen...</p>","date_modified":"2026-06-29T00:00:00+00:00","date_published":"2026-06-29T00:00:00+00:00","id":"https://serhiismetanskyi.com/docs/code-security/02-dependency-security/","image":null,"tags":["appsec","security"],"title":"Dependency Security","url":"https://serhiismetanskyi.com/docs/code-security/02-dependency-security/"},{"authors":[],"content_html":"<h1>Code Analysis &amp; Secure Review</h1>\n<p>Static analysis catches vulnerabilities <strong>before code reaches production</strong>. Combined with security-focused code review, it p...</p>","date_modified":"2026-06-29T00:00:00+00:00","date_published":"2026-06-29T00:00:00+00:00","id":"https://serhiismetanskyi.com/docs/code-security/03-code-analysis-review/","image":null,"tags":["appsec","security"],"title":"Code Analysis & Secure Review","url":"https://serhiismetanskyi.com/docs/code-security/03-code-analysis-review/"},{"authors":[],"content_html":"<h1>Code Security</h1>\n<p>Practical guide covering <strong>code-level security</strong> — secrets leak prevention, dependency hardening, static analysis, authentication patterns, ...</p>","date_modified":"2026-06-29T00:00:00+00:00","date_published":"2026-06-29T00:00:00+00:00","id":"https://serhiismetanskyi.com/docs/code-security/","image":null,"tags":["appsec","security"],"title":"Code Security","url":"https://serhiismetanskyi.com/docs/code-security/"},{"authors":[],"content_html":"<h1>SKILL.md Universal Standard (2026)</h1>\n<p>A practical guide to writing reusable, cross-agent <code>SKILL.md</code> files using the \"Universal Standard\" model.</p>\n<hr />\n<h2>What...</h2>","date_modified":"2026-06-28T00:00:00+00:00","date_published":"2026-06-28T00:00:00+00:00","id":"https://serhiismetanskyi.com/docs/ai-skills/16-skill-md-universal-standard/","image":null,"tags":["ai-agents","coding-agents"],"title":"SKILL.md Universal Standard (2026)","url":"https://serhiismetanskyi.com/docs/ai-skills/16-skill-md-universal-standard/"},{"authors":[],"content_html":"<h1>Building Skills for Claude: Practical Playbook</h1>\n<p>Condensed guide with the most important ideas from the \"The Complete Guide to Building Skills for Claude\" d...</p>","date_modified":"2026-06-28T00:00:00+00:00","date_published":"2026-06-28T00:00:00+00:00","id":"https://serhiismetanskyi.com/docs/ai-skills/17-building-skills-for-claude-playbook/","image":null,"tags":["ai-agents","coding-agents"],"title":"Building Skills for Claude: Practical Playbook","url":"https://serhiismetanskyi.com/docs/ai-skills/17-building-skills-for-claude-playbook/"},{"authors":[],"content_html":"<h1>Skills Troubleshooting &amp; Checklists</h1>\n<p>Operational checklist and failure playbook distilled from the Claude skills guide.</p>\n<hr />\n<h2>Pre-Build Checklist</h2>\n<p>Befor...</p>","date_modified":"2026-06-28T00:00:00+00:00","date_published":"2026-06-28T00:00:00+00:00","id":"https://serhiismetanskyi.com/docs/ai-skills/18-skills-troubleshooting-checklists/","image":null,"tags":["ai-agents","coding-agents"],"title":"Skills Troubleshooting & Checklists","url":"https://serhiismetanskyi.com/docs/ai-skills/18-skills-troubleshooting-checklists/"},{"authors":[],"content_html":"<h1>Claude Code — Commands Reference</h1>\n<p>Complete reference for all built-in slash commands, keyboard shortcuts, and CLI flags.</p>\n<p>Type <code>/</code> on an empty prompt to se...</p>","date_modified":"2026-06-28T00:00:00+00:00","date_published":"2026-06-28T00:00:00+00:00","id":"https://serhiismetanskyi.com/docs/ai-skills/19-claude-code-commands-reference/","image":null,"tags":["ai-agents","coding-agents"],"title":"Claude Code Commands Reference","url":"https://serhiismetanskyi.com/docs/ai-skills/19-claude-code-commands-reference/"},{"authors":[],"content_html":"<h1>AGENTS.md — The Universal Agent Instructions Standard</h1>\n<h2>What Is AGENTS.md</h2>\n<p><code>AGENTS.md</code> is an open Markdown format — a \"README for AI coding agents.\" It p...</p>","date_modified":"2026-06-27T00:00:00+00:00","date_published":"2026-06-27T00:00:00+00:00","id":"https://serhiismetanskyi.com/docs/ai-skills/12-agents-md/","image":null,"tags":["ai-agents","coding-agents"],"title":"AGENTS.md Standard","url":"https://serhiismetanskyi.com/docs/ai-skills/12-agents-md/"},{"authors":[],"content_html":"<h1>SKILL.md Playground</h1>\n<p>Hands-on exercises for writing production-quality <code>SKILL.md</code> files. Each exercise builds on the previous one.</p>\n<hr />\n<h2>Exercise 1 — Mi...</h2>","date_modified":"2026-06-27T00:00:00+00:00","date_published":"2026-06-27T00:00:00+00:00","id":"https://serhiismetanskyi.com/docs/ai-skills/13-skill-playground/","image":null,"tags":["ai-agents","coding-agents"],"title":"SKILL.md Playground","url":"https://serhiismetanskyi.com/docs/ai-skills/13-skill-playground/"},{"authors":[],"content_html":"<h1>AGENTS.md Playground</h1>\n<p>Hands-on exercises for writing effective <code>AGENTS.md</code> files. Each exercise targets a specific section — combine them in Exercise 6.</p>\n<p>-...</p>","date_modified":"2026-06-27T00:00:00+00:00","date_published":"2026-06-27T00:00:00+00:00","id":"https://serhiismetanskyi.com/docs/ai-skills/14-agents-md-playground/","image":null,"tags":["ai-agents","coding-agents"],"title":"AGENTS.md Playground","url":"https://serhiismetanskyi.com/docs/ai-skills/14-agents-md-playground/"},{"authors":[],"content_html":"<h1>Claude Code Project Structure</h1>\n<p>A modular repository structure designed for building Claude Code projects with structured AI context, reusable skills, and a...</p>","date_modified":"2026-06-27T00:00:00+00:00","date_published":"2026-06-27T00:00:00+00:00","id":"https://serhiismetanskyi.com/docs/ai-skills/15-claude-code-project-structure/","image":null,"tags":["ai-agents","coding-agents"],"title":"Claude Code Project Structure","url":"https://serhiismetanskyi.com/docs/ai-skills/15-claude-code-project-structure/"},{"authors":[],"content_html":"<h1>Claude Code Hooks &amp; Agent Personas</h1>\n<h2>Hooks — Deterministic Automation</h2>\n<p>Hooks run deterministically at lifecycle events, while natural-language instructio...</p>","date_modified":"2026-06-26T00:00:00+00:00","date_published":"2026-06-26T00:00:00+00:00","id":"https://serhiismetanskyi.com/docs/ai-skills/08-claude-code-hooks-agents/","image":null,"tags":["ai-agents","coding-agents"],"title":"Claude Code Hooks & Agents","url":"https://serhiismetanskyi.com/docs/ai-skills/08-claude-code-hooks-agents/"},{"authors":[],"content_html":"<h1>Claude Code Workflow Patterns</h1>\n<h2>Give Claude a Way to Verify</h2>\n<p>The single highest-leverage practice. Claude performs dramatically better when it can check ...</p>","date_modified":"2026-06-26T00:00:00+00:00","date_published":"2026-06-26T00:00:00+00:00","id":"https://serhiismetanskyi.com/docs/ai-skills/09-claude-code-workflow-patterns/","image":null,"tags":["ai-agents","coding-agents"],"title":"Claude Code Workflow Patterns","url":"https://serhiismetanskyi.com/docs/ai-skills/09-claude-code-workflow-patterns/"},{"authors":[],"content_html":"<h1>Claude Code Advanced Configuration</h1>\n<h2>Sandbox — OS-Level Isolation</h2>\n<p>Sandbox restricts filesystem and network access for all bash commands:</p>\n<p>```json\n{\n  \"s...</p>","date_modified":"2026-06-26T00:00:00+00:00","date_published":"2026-06-26T00:00:00+00:00","id":"https://serhiismetanskyi.com/docs/ai-skills/10-claude-code-advanced-config/","image":null,"tags":["ai-agents","coding-agents"],"title":"Claude Code Advanced Config","url":"https://serhiismetanskyi.com/docs/ai-skills/10-claude-code-advanced-config/"},{"authors":[],"content_html":"<h1>Model Context Protocol (MCP)</h1>\n<p>MCP is an <strong>open protocol</strong> (Linux Foundation, Dec 2025) that standardizes how AI agents connect to external tools, data sour...</p>","date_modified":"2026-06-26T00:00:00+00:00","date_published":"2026-06-26T00:00:00+00:00","id":"https://serhiismetanskyi.com/docs/ai-skills/11-mcp-protocol/","image":null,"tags":["ai-agents","coding-agents","mcp"],"title":"Model Context Protocol (MCP)","url":"https://serhiismetanskyi.com/docs/ai-skills/11-mcp-protocol/"},{"authors":[],"content_html":"<h1>Orchestration &amp; Workflows</h1>\n<h2>From Single Skills to Workflows</h2>\n<p>Individual skills solve local tasks. Workflow skills (orchestrators) chain them into end-to-...</p>","date_modified":"2026-06-25T00:00:00+00:00","date_published":"2026-06-25T00:00:00+00:00","id":"https://serhiismetanskyi.com/docs/ai-skills/04-orchestration-workflows/","image":null,"tags":["ai-agents","coding-agents"],"title":"Orchestration & Workflows","url":"https://serhiismetanskyi.com/docs/ai-skills/04-orchestration-workflows/"},{"authors":[],"content_html":"<h1>Evaluation &amp; Security</h1>\n<h2>Evaluation Strategy</h2>\n<p>Test skills at 3 levels:</p>\n<ol>\n<li><strong>Contract tests</strong>: input/output schema conformance</li>\n<li><strong>Behavior tests</strong>: task...</li>\n</ol>","date_modified":"2026-06-25T00:00:00+00:00","date_published":"2026-06-25T00:00:00+00:00","id":"https://serhiismetanskyi.com/docs/ai-skills/05-evaluation-security/","image":null,"tags":["ai-agents","coding-agents","evaluation","security"],"title":"Evaluation & Security","url":"https://serhiismetanskyi.com/docs/ai-skills/05-evaluation-security/"},{"authors":[],"content_html":"<h1>Cross-Agent Compatibility</h1>\n<h2>The Open Standard</h2>\n<p><code>SKILL.md</code> is an open format. A single skill file works across multiple AI coding agents:</p>\n<p>| Agent | Skill...</p>","date_modified":"2026-06-25T00:00:00+00:00","date_published":"2026-06-25T00:00:00+00:00","id":"https://serhiismetanskyi.com/docs/ai-skills/06-cross-agent-compatibility/","image":null,"tags":["ai-agents","coding-agents"],"title":"Cross-Agent Compatibility","url":"https://serhiismetanskyi.com/docs/ai-skills/06-cross-agent-compatibility/"},{"authors":[],"content_html":"<h1>Claude Code Best Practices</h1>\n<h2>Anatomy of the <code>.claude/</code> Folder</h2>\n<p>Everything Claude Code needs to know about your project lives in one place:</p>\n<p>```text\nyour-...</p>","date_modified":"2026-06-25T00:00:00+00:00","date_published":"2026-06-25T00:00:00+00:00","id":"https://serhiismetanskyi.com/docs/ai-skills/07-claude-code-best-practices/","image":null,"tags":["ai-agents","coding-agents"],"title":"Claude Code Best Practices","url":"https://serhiismetanskyi.com/docs/ai-skills/07-claude-code-best-practices/"},{"authors":[],"content_html":"<h1>What Is a Skill</h1>\n<h2>Definition</h2>\n<p>A skill is a <strong>reusable, structured capability</strong> for an AI coding agent. It packages:</p>\n<ul>\n<li><strong>identity</strong> — name + description ...</li>\n</ul>","date_modified":"2026-06-24T00:00:00+00:00","date_published":"2026-06-24T00:00:00+00:00","id":"https://serhiismetanskyi.com/docs/ai-skills/01-what-is-a-skill/","image":null,"tags":["ai-agents","coding-agents"],"title":"What Is a Skill","url":"https://serhiismetanskyi.com/docs/ai-skills/01-what-is-a-skill/"},{"authors":[],"content_html":"<h1>How Agents Load Skills</h1>\n<h2>Progressive Disclosure (3-Level Loading)</h2>\n<p>Skills use a layered loading model to keep the agent's context window efficient.</p>\n<h3>...</h3>","date_modified":"2026-06-24T00:00:00+00:00","date_published":"2026-06-24T00:00:00+00:00","id":"https://serhiismetanskyi.com/docs/ai-skills/02-how-agents-load-skills/","image":null,"tags":["ai-agents","coding-agents"],"title":"How Agents Load Skills","url":"https://serhiismetanskyi.com/docs/ai-skills/02-how-agents-load-skills/"},{"authors":[],"content_html":"<h1>Skill Packaging</h1>\n<h2>Standard Folder Layout</h2>\n<p>```text\nskills/\n  git-commit-creator/\n    SKILL.md              ← required: identity + instructions\n    README....</p>","date_modified":"2026-06-24T00:00:00+00:00","date_published":"2026-06-24T00:00:00+00:00","id":"https://serhiismetanskyi.com/docs/ai-skills/03-skill-packaging/","image":null,"tags":["ai-agents","coding-agents"],"title":"Skill Packaging","url":"https://serhiismetanskyi.com/docs/ai-skills/03-skill-packaging/"},{"authors":[],"content_html":"<h1>AI Skills for Coding Agents</h1>\n<p>AI Skills are modular, reusable capabilities that turn general-purpose AI agents into domain specialists.</p>\n<p>A skill is <strong>not</strong> ...</p>","date_modified":"2026-06-24T00:00:00+00:00","date_published":"2026-06-24T00:00:00+00:00","id":"https://serhiismetanskyi.com/docs/ai-skills/","image":null,"tags":["ai-agents","coding-agents"],"title":"AI Skills for Coding Agents","url":"https://serhiismetanskyi.com/docs/ai-skills/"},{"authors":[],"content_html":"<h1>LLM Configuration, Model Selection &amp; Security</h1>\n<h2>LLM Parameters</h2>\n<p>| Parameter | Range | Recommendation | Effect |\n|-----------|-------|----------------|---...</p>","date_modified":"2026-06-23T00:00:00+00:00","date_published":"2026-06-23T00:00:00+00:00","id":"https://serhiismetanskyi.com/docs/agentic-ai-architecture/05-llm-config-security/","image":null,"tags":["ai-agents","llm","security"],"title":"LLM Configuration, Model Selection & Security","url":"https://serhiismetanskyi.com/docs/agentic-ai-architecture/05-llm-config-security/"},{"authors":[],"content_html":"<h1>Testing, Evaluation &amp; Observability</h1>\n<h2>Quality Metrics</h2>\n<p>| Metric | Measures | How to Measure |\n|--------|----------|----------------|\n| **Task Success Rat...</p>","date_modified":"2026-06-23T00:00:00+00:00","date_published":"2026-06-23T00:00:00+00:00","id":"https://serhiismetanskyi.com/docs/agentic-ai-architecture/06-testing-observability/","image":null,"tags":["ai-agents","llm","observability"],"title":"Testing, Evaluation & Observability","url":"https://serhiismetanskyi.com/docs/agentic-ai-architecture/06-testing-observability/"},{"authors":[],"content_html":"<h1>Agentic Search &amp; Context Engineering (2025+)</h1>\n<h2>Context Engineering vs Prompt Engineering</h2>\n<p>Prompt engineering optimizes <strong>wording</strong>. Context engineering o...</p>","date_modified":"2026-06-23T00:00:00+00:00","date_published":"2026-06-23T00:00:00+00:00","id":"https://serhiismetanskyi.com/docs/agentic-ai-architecture/07-agentic-search-context-engineering/","image":null,"tags":["ai-agents","context-engineering","llm"],"title":"Agentic Search & Context Engineering (2025+)","url":"https://serhiismetanskyi.com/docs/agentic-ai-architecture/07-agentic-search-context-engineering/"},{"authors":[],"content_html":"<h1>Vectorless RAG</h1>\n<h2>What Is Vectorless RAG?</h2>\n<p>Traditional RAG converts documents into vector embeddings and retrieves by similarity search.\nVectorless RAG el...</p>","date_modified":"2026-06-23T00:00:00+00:00","date_published":"2026-06-23T00:00:00+00:00","id":"https://serhiismetanskyi.com/docs/agentic-ai-architecture/08-vectorless-rag/","image":null,"tags":["ai-agents","llm","rag"],"title":"Vectorless RAG","url":"https://serhiismetanskyi.com/docs/agentic-ai-architecture/08-vectorless-rag/"},{"authors":[],"content_html":"<h1>Agentic AI — Fundamentals &amp; Core Components</h1>\n<h2>What Is Agentic AI</h2>\n<p><strong>Agentic AI</strong> is a system where an LLM acts as an autonomous agent that:\n- Sets sub-go...</p>","date_modified":"2026-06-22T00:00:00+00:00","date_published":"2026-06-22T00:00:00+00:00","id":"https://serhiismetanskyi.com/docs/agentic-ai-architecture/01-fundamentals-components/","image":null,"tags":["ai-agents","llm"],"title":"Agentic AI — Fundamentals & Core Components","url":"https://serhiismetanskyi.com/docs/agentic-ai-architecture/01-fundamentals-components/"},{"authors":[],"content_html":"<h1>Multi-Agent Architecture Patterns</h1>\n<p>Use multi-agent systems when tasks are complex, multi-stage, or need specialization.\nEach agent has its own reasoning lo...</p>","date_modified":"2026-06-22T00:00:00+00:00","date_published":"2026-06-22T00:00:00+00:00","id":"https://serhiismetanskyi.com/docs/agentic-ai-architecture/02-multi-agent-patterns/","image":null,"tags":["ai-agents","llm"],"title":"Multi-Agent Architecture Patterns","url":"https://serhiismetanskyi.com/docs/agentic-ai-architecture/02-multi-agent-patterns/"},{"authors":[],"content_html":"<h1>Memory &amp; Retrieval-Augmented Generation (RAG)</h1>\n<h2>Memory Architecture</h2>\n<p>Agents usually use two memory layers:</p>\n<h3>Short-Term Memory (STM)</h3>\n<ul>\n<li>Holds the curr...</li>\n</ul>","date_modified":"2026-06-22T00:00:00+00:00","date_published":"2026-06-22T00:00:00+00:00","id":"https://serhiismetanskyi.com/docs/agentic-ai-architecture/03-memory-rag/","image":null,"tags":["ai-agents","llm","rag"],"title":"Memory & Retrieval-Augmented Generation (RAG)","url":"https://serhiismetanskyi.com/docs/agentic-ai-architecture/03-memory-rag/"},{"authors":[],"content_html":"<h1>Tool Integration &amp; Prompt Engineering</h1>\n<h2>Tool Integration</h2>\n<h3>Function Calling (OpenAI Style)</h3>\n<p>Define JSON schemas for functions. The LLM decides when an...</p>","date_modified":"2026-06-22T00:00:00+00:00","date_published":"2026-06-22T00:00:00+00:00","id":"https://serhiismetanskyi.com/docs/agentic-ai-architecture/04-tool-integration-prompting/","image":null,"tags":["ai-agents","llm"],"title":"Tool Integration & Prompt Engineering","url":"https://serhiismetanskyi.com/docs/agentic-ai-architecture/04-tool-integration-prompting/"},{"authors":[],"content_html":"<h1>Agentic AI Architecture</h1>\n<p>Agentic AI is an architecture where an LLM acts as an <strong>autonomous agent</strong>.\nIt plans and executes multi-step tasks with memory and...</p>","date_modified":"2026-06-22T00:00:00+00:00","date_published":"2026-06-22T00:00:00+00:00","id":"https://serhiismetanskyi.com/docs/agentic-ai-architecture/","image":null,"tags":["ai-agents","llm"],"title":"Agentic AI Architecture","url":"https://serhiismetanskyi.com/docs/agentic-ai-architecture/"},{"authors":[],"content_html":"<h1>Pattern Comparison and Testing Strategies</h1>\n<p>Simple English (B1). Comparisons help you pick a pattern. Testing proves the boundaries behave as designed.</p>\n<h2>...</h2>","date_modified":"2026-06-21T00:00:00+00:00","date_published":"2026-06-21T00:00:00+00:00","id":"https://serhiismetanskyi.com/docs/software-design-patterns/07-decisions-testing-production/01-comparison-testing/","image":null,"tags":["architecture","design-patterns","testing"],"title":"Pattern Comparison and Testing Strategies","url":"https://serhiismetanskyi.com/docs/software-design-patterns/07-decisions-testing-production/01-comparison-testing/"},{"authors":[],"content_html":"<h1>Anti-Patterns, Real-World Usage, Heuristics, and Decision Factors</h1>\n<p>Simple English (B1). Senior readers: names stay standard; text stays short.</p>\n<h2>Producti...</h2>","date_modified":"2026-06-21T00:00:00+00:00","date_published":"2026-06-21T00:00:00+00:00","id":"https://serhiismetanskyi.com/docs/software-design-patterns/07-decisions-testing-production/02-antipatterns-real-world/","image":null,"tags":["architecture","design-patterns","testing"],"title":"Anti-Patterns, Real-World Usage, Heuristics, and Decision Factors","url":"https://serhiismetanskyi.com/docs/software-design-patterns/07-decisions-testing-production/02-antipatterns-real-world/"},{"authors":[],"content_html":"<h1>Microservice Production Readiness Checklist</h1>\n<p>Use before deploying any new service to production. Each section is a gate.</p>\n<hr />\n<h2>Observability</h2>\n<h3>Loggin...</h3>","date_modified":"2026-06-21T00:00:00+00:00","date_published":"2026-06-21T00:00:00+00:00","id":"https://serhiismetanskyi.com/docs/software-design-patterns/07-decisions-testing-production/03-production-readiness/","image":null,"tags":["architecture","design-patterns","testing"],"title":"Microservice Production Readiness Checklist","url":"https://serhiismetanskyi.com/docs/software-design-patterns/07-decisions-testing-production/03-production-readiness/"},{"authors":[],"content_html":"<h1>Decisions Testing Production</h1>\n<p>Decisions Testing Production covers design principles, patterns, architecture decisions, and anti-patterns, with focused guid...</p>","date_modified":"2026-06-21T00:00:00+00:00","date_published":"2026-06-21T00:00:00+00:00","id":"https://serhiismetanskyi.com/docs/software-design-patterns/07-decisions-testing-production/","image":null,"tags":["architecture","design-patterns","testing"],"title":"Decisions Testing Production","url":"https://serhiismetanskyi.com/docs/software-design-patterns/07-decisions-testing-production/"},{"authors":[],"content_html":"<h1>Queues vs Streams: Message Delivery, Ordering &amp; Reliability</h1>\n<h2>Core Distinction</h2>\n<p>The fundamental split is about <strong>message lifecycle</strong>.</p>\n<p>| Concept | Queue ...</p>","date_modified":"2026-06-20T00:00:00+00:00","date_published":"2026-06-20T00:00:00+00:00","id":"https://serhiismetanskyi.com/docs/software-design-patterns/05-composition-architectural/04-queues-streams-messaging/","image":null,"tags":["architecture","design-patterns"],"title":"Queues vs Streams: Message Delivery, Ordering & Reliability","url":"https://serhiismetanskyi.com/docs/software-design-patterns/05-composition-architectural/04-queues-streams-messaging/"},{"authors":[],"content_html":"<h1>View Layer Patterns</h1>\n<p>Patterns for building the user-facing layer in a Python-centric stack.</p>\n<h2>Template-Based Architecture</h2>\n<p>The view is built from small, ...</p>","date_modified":"2026-06-20T00:00:00+00:00","date_published":"2026-06-20T00:00:00+00:00","id":"https://serhiismetanskyi.com/docs/software-design-patterns/06-frontend-cross-layer/01-frontend-patterns/","image":null,"tags":["architecture","design-patterns"],"title":"View Layer Patterns","url":"https://serhiismetanskyi.com/docs/software-design-patterns/06-frontend-cross-layer/01-frontend-patterns/"},{"authors":[],"content_html":"<h1>Cross-Layer Design Patterns</h1>\n<p>Patterns that touch both client and server: shared shapes, validation, and types at boundaries.</p>\n<h2>Shared Contracts (DTOs)</h2>\n<p>D...</p>","date_modified":"2026-06-20T00:00:00+00:00","date_published":"2026-06-20T00:00:00+00:00","id":"https://serhiismetanskyi.com/docs/software-design-patterns/06-frontend-cross-layer/02-cross-layer-patterns/","image":null,"tags":["architecture","design-patterns"],"title":"Cross-Layer Design Patterns","url":"https://serhiismetanskyi.com/docs/software-design-patterns/06-frontend-cross-layer/02-cross-layer-patterns/"},{"authors":[],"content_html":"<h1>Frontend Cross Layer</h1>\n<p>Frontend Cross Layer covers design principles, patterns, architecture decisions, and anti-patterns, with focused guides on Frontend P...</p>","date_modified":"2026-06-20T00:00:00+00:00","date_published":"2026-06-20T00:00:00+00:00","id":"https://serhiismetanskyi.com/docs/software-design-patterns/06-frontend-cross-layer/","image":null,"tags":["architecture","design-patterns"],"title":"Frontend Cross Layer","url":"https://serhiismetanskyi.com/docs/software-design-patterns/06-frontend-cross-layer/"},{"authors":[],"content_html":"<h1>Composition and Advanced Structuring Patterns</h1>\n<h2>Layout Composer Pattern</h2>\n<p>Compose complex UI from smaller, reusable components. Separate\nwhat a component ...</p>","date_modified":"2026-06-19T00:00:00+00:00","date_published":"2026-06-19T00:00:00+00:00","id":"https://serhiismetanskyi.com/docs/software-design-patterns/05-composition-architectural/01-composition-advanced/","image":null,"tags":["architecture","design-patterns"],"title":"Composition and Advanced Structuring Patterns","url":"https://serhiismetanskyi.com/docs/software-design-patterns/05-composition-architectural/01-composition-advanced/"},{"authors":[],"content_html":"<h1>Architectural Patterns: Layered, Clean, Hexagonal</h1>\n<h2>Layered Architecture</h2>\n<p>Code is organized in horizontal layers. Each layer has one role.\nDependencies f...</p>","date_modified":"2026-06-19T00:00:00+00:00","date_published":"2026-06-19T00:00:00+00:00","id":"https://serhiismetanskyi.com/docs/software-design-patterns/05-composition-architectural/02-architectural-patterns/","image":null,"tags":["architecture","design-patterns"],"title":"Architectural Patterns: Layered, Clean, Hexagonal","url":"https://serhiismetanskyi.com/docs/software-design-patterns/05-composition-architectural/02-architectural-patterns/"},{"authors":[],"content_html":"<h1>Architectural Patterns: Microservices, Event-Driven, Isomorphic</h1>\n<h2>Microservices</h2>\n<p>Each domain is a separate service: its own codebase, deployment, and dat...</p>","date_modified":"2026-06-19T00:00:00+00:00","date_published":"2026-06-19T00:00:00+00:00","id":"https://serhiismetanskyi.com/docs/software-design-patterns/05-composition-architectural/03-event-driven-isomorphic/","image":null,"tags":["architecture","design-patterns"],"title":"Architectural Patterns: Microservices, Event-Driven, Isomorphic","url":"https://serhiismetanskyi.com/docs/software-design-patterns/05-composition-architectural/03-event-driven-isomorphic/"},{"authors":[],"content_html":"<h1>Composition Architectural</h1>\n<p>Composition Architectural covers design principles, patterns, architecture decisions, and anti-patterns, with focused guides on ...</p>","date_modified":"2026-06-19T00:00:00+00:00","date_published":"2026-06-19T00:00:00+00:00","id":"https://serhiismetanskyi.com/docs/software-design-patterns/05-composition-architectural/","image":null,"tags":["architecture","design-patterns"],"title":"Composition Architectural","url":"https://serhiismetanskyi.com/docs/software-design-patterns/05-composition-architectural/"},{"authors":[],"content_html":"<h1>Behavioral Patterns: Strategy, Observer, Command</h1>\n<p>Behavioral patterns describe how objects talk to each other and share work. This note covers three classi...</p>","date_modified":"2026-06-18T00:00:00+00:00","date_published":"2026-06-18T00:00:00+00:00","id":"https://serhiismetanskyi.com/docs/software-design-patterns/04-behavioral-patterns/01-strategy-observer-command/","image":null,"tags":["architecture","design-patterns"],"title":"Behavioral Patterns: Strategy, Observer, Command","url":"https://serhiismetanskyi.com/docs/software-design-patterns/04-behavioral-patterns/01-strategy-observer-command/"},{"authors":[],"content_html":"<h1>Behavioral Patterns: Chain of Responsibility, State, Mediator</h1>\n<h2>Chain of Responsibility</h2>\n<p><strong>Idea:</strong> Send a request through a line of handlers. Each handle...</p>","date_modified":"2026-06-18T00:00:00+00:00","date_published":"2026-06-18T00:00:00+00:00","id":"https://serhiismetanskyi.com/docs/software-design-patterns/04-behavioral-patterns/02-chain-state-mediator/","image":null,"tags":["architecture","design-patterns"],"title":"Behavioral Patterns: Chain of Responsibility, State, Mediator","url":"https://serhiismetanskyi.com/docs/software-design-patterns/04-behavioral-patterns/02-chain-state-mediator/"},{"authors":[],"content_html":"<h1>Behavioral Patterns: Iterator, Template Method, Visitor</h1>\n<h2>Iterator</h2>\n<p><strong>Idea:</strong> Walk through a collection step by step without knowing its inner layout.</p>\n<p>P...</p>","date_modified":"2026-06-18T00:00:00+00:00","date_published":"2026-06-18T00:00:00+00:00","id":"https://serhiismetanskyi.com/docs/software-design-patterns/04-behavioral-patterns/03-iterator-template-visitor/","image":null,"tags":["architecture","design-patterns"],"title":"Behavioral Patterns: Iterator, Template Method, Visitor","url":"https://serhiismetanskyi.com/docs/software-design-patterns/04-behavioral-patterns/03-iterator-template-visitor/"},{"authors":[],"content_html":"<h1>Behavioral Patterns</h1>\n<p>Behavioral Patterns covers design principles, patterns, architecture decisions, and anti-patterns, with focused guides on Strategy Obs...</p>","date_modified":"2026-06-18T00:00:00+00:00","date_published":"2026-06-18T00:00:00+00:00","id":"https://serhiismetanskyi.com/docs/software-design-patterns/04-behavioral-patterns/","image":null,"tags":["architecture","design-patterns"],"title":"Behavioral Patterns","url":"https://serhiismetanskyi.com/docs/software-design-patterns/04-behavioral-patterns/"},{"authors":[],"content_html":"<h1>Creational Patterns</h1>\n<p>Creational patterns control how objects are created. They remove direct coupling between code and specific classes.</p>\n<h2>Singleton</h2>\n<p>Ens...</p>","date_modified":"2026-06-17T00:00:00+00:00","date_published":"2026-06-17T00:00:00+00:00","id":"https://serhiismetanskyi.com/docs/software-design-patterns/02-creational-patterns/01-patterns/","image":null,"tags":["architecture","design-patterns"],"title":"Creational Patterns","url":"https://serhiismetanskyi.com/docs/software-design-patterns/02-creational-patterns/01-patterns/"},{"authors":[],"content_html":"<h1>Structural Patterns: Adapter, Decorator, Facade</h1>\n<p>Structural patterns describe how objects and classes are composed to form larger structures.</p>\n<h2>Adapter</h2>\n<p>...</p>","date_modified":"2026-06-17T00:00:00+00:00","date_published":"2026-06-17T00:00:00+00:00","id":"https://serhiismetanskyi.com/docs/software-design-patterns/03-structural-patterns/01-adapter-decorator-facade/","image":null,"tags":["architecture","design-patterns"],"title":"Structural Patterns: Adapter, Decorator, Facade","url":"https://serhiismetanskyi.com/docs/software-design-patterns/03-structural-patterns/01-adapter-decorator-facade/"},{"authors":[],"content_html":"<h1>Structural Patterns: Proxy, Composite, Bridge, Flyweight</h1>\n<h2>Proxy</h2>\n<p>Controls access to another object. Used for: lazy initialization, access control, cachi...</p>","date_modified":"2026-06-17T00:00:00+00:00","date_published":"2026-06-17T00:00:00+00:00","id":"https://serhiismetanskyi.com/docs/software-design-patterns/03-structural-patterns/02-proxy-composite-bridge-flyweight/","image":null,"tags":["architecture","design-patterns"],"title":"Structural Patterns: Proxy, Composite, Bridge, Flyweight","url":"https://serhiismetanskyi.com/docs/software-design-patterns/03-structural-patterns/02-proxy-composite-bridge-flyweight/"},{"authors":[],"content_html":"<h1>Structural Patterns</h1>\n<p>Structural Patterns covers design principles, patterns, architecture decisions, and anti-patterns, with focused guides on Adapter Deco...</p>","date_modified":"2026-06-17T00:00:00+00:00","date_published":"2026-06-17T00:00:00+00:00","id":"https://serhiismetanskyi.com/docs/software-design-patterns/03-structural-patterns/","image":null,"tags":["architecture","design-patterns"],"title":"Structural Patterns","url":"https://serhiismetanskyi.com/docs/software-design-patterns/03-structural-patterns/"},{"authors":[],"content_html":"<h1>Design Principles: Beyond SOLID</h1>\n<p>SOLID is not the whole story. These ideas work in any language. They reduce accidental complexity and make systems easier ...</p>","date_modified":"2026-06-16T00:00:00+00:00","date_published":"2026-06-16T00:00:00+00:00","id":"https://serhiismetanskyi.com/docs/software-design-patterns/01-design-principles/02-fundamental-principles/","image":null,"tags":["architecture","design-patterns"],"title":"Design Principles: Beyond SOLID","url":"https://serhiismetanskyi.com/docs/software-design-patterns/01-design-principles/02-fundamental-principles/"},{"authors":[],"content_html":"<h1>Clean Code</h1>\n<p>Clean code is code that a new team member can read and understand without asking questions.\nIt is not about style preferences — it is about red...</p>","date_modified":"2026-06-16T00:00:00+00:00","date_published":"2026-06-16T00:00:00+00:00","id":"https://serhiismetanskyi.com/docs/software-design-patterns/01-design-principles/03-clean-code/","image":null,"tags":["architecture","design-patterns"],"title":"Clean Code","url":"https://serhiismetanskyi.com/docs/software-design-patterns/01-design-principles/03-clean-code/"},{"authors":[],"content_html":"<h1>Code Quality Tools</h1>\n<p>Clean code principles are enforced by humans during review — but code quality tools\ncatch violations **automatically, before review eve...</p>","date_modified":"2026-06-16T00:00:00+00:00","date_published":"2026-06-16T00:00:00+00:00","id":"https://serhiismetanskyi.com/docs/software-design-patterns/01-design-principles/04-code-quality-tools/","image":null,"tags":["architecture","design-patterns"],"title":"Code Quality Tools","url":"https://serhiismetanskyi.com/docs/software-design-patterns/01-design-principles/04-code-quality-tools/"},{"authors":[],"content_html":"<h1>Creational Patterns</h1>\n<p>Creational Patterns covers design principles, patterns, architecture decisions, and anti-patterns, with focused guides on Patterns.</p>\n<h1>...</h1>","date_modified":"2026-06-16T00:00:00+00:00","date_published":"2026-06-16T00:00:00+00:00","id":"https://serhiismetanskyi.com/docs/software-design-patterns/02-creational-patterns/","image":null,"tags":["architecture","design-patterns"],"title":"Creational Patterns","url":"https://serhiismetanskyi.com/docs/software-design-patterns/02-creational-patterns/"},{"authors":[],"content_html":"<h1>OOP — Fundamentals</h1>\n<p>Object-Oriented Programming organizes code around <strong>objects</strong> — entities that bundle\nstate (data) and behavior (methods) together. Four...</p>","date_modified":"2026-06-15T00:00:00+00:00","date_published":"2026-06-15T00:00:00+00:00","id":"https://serhiismetanskyi.com/docs/software-design-patterns/01-design-principles/00-oop-fundamentals/","image":null,"tags":["architecture","design-patterns"],"title":"OOP — Fundamentals","url":"https://serhiismetanskyi.com/docs/software-design-patterns/01-design-principles/00-oop-fundamentals/"},{"authors":[],"content_html":"<h1>Design Principles: SOLID</h1>\n<p>SOLID is a set of five principles for writing maintainable, extensible software. Robert C. Martin defined them. Each principle ta...</p>","date_modified":"2026-06-15T00:00:00+00:00","date_published":"2026-06-15T00:00:00+00:00","id":"https://serhiismetanskyi.com/docs/software-design-patterns/01-design-principles/01-solid-principles/","image":null,"tags":["architecture","design-patterns"],"title":"Design Principles: SOLID","url":"https://serhiismetanskyi.com/docs/software-design-patterns/01-design-principles/01-solid-principles/"},{"authors":[],"content_html":"<h1>Design Principles</h1>\n<p>Design Principles covers design principles, patterns, architecture decisions, and anti-patterns, with focused guides on Oop Fundamentals...</p>","date_modified":"2026-06-15T00:00:00+00:00","date_published":"2026-06-15T00:00:00+00:00","id":"https://serhiismetanskyi.com/docs/software-design-patterns/01-design-principles/","image":null,"tags":["architecture","design-patterns"],"title":"Design Principles","url":"https://serhiismetanskyi.com/docs/software-design-patterns/01-design-principles/"},{"authors":[],"content_html":"<h1>Software Design Patterns and Principles</h1>\n<h2>Section Descriptions</h2>\n<h3>1. <a href=\"01-design-principles/index.md\">Design Principles</a></h3>\n<p>| File | Topics |\n|------|----...</p>","date_modified":"2026-06-15T00:00:00+00:00","date_published":"2026-06-15T00:00:00+00:00","id":"https://serhiismetanskyi.com/docs/software-design-patterns/","image":null,"tags":["architecture","design-patterns"],"title":"Software Design Patterns and Principles","url":"https://serhiismetanskyi.com/docs/software-design-patterns/"},{"authors":[],"content_html":"<h1>Testing</h1>\n<h2>15.1 API Testing</h2>\n<p>Test every protocol at the HTTP/contract level. Each protocol has specific tools and scenarios.</p>\n<h3>REST and GraphQL</h3>\n<p>Use **...</p>","date_modified":"2026-06-14T00:00:00+00:00","date_published":"2026-06-14T00:00:00+00:00","id":"https://serhiismetanskyi.com/docs/client-server-architecture/07-testing-risks-patterns/01-testing/","image":null,"tags":["architecture","networking","testing"],"title":"Testing","url":"https://serhiismetanskyi.com/docs/client-server-architecture/07-testing-risks-patterns/01-testing/"},{"authors":[],"content_html":"<h1>Risks, Limitations, and Anti-Patterns</h1>\n<h2>16. Architectural Risks</h2>\n<h3>16.1 Distributed Complexity</h3>\n<p>Every service call can fail, be slow, or return unexpec...</p>","date_modified":"2026-06-14T00:00:00+00:00","date_published":"2026-06-14T00:00:00+00:00","id":"https://serhiismetanskyi.com/docs/client-server-architecture/07-testing-risks-patterns/02-risks-anti-patterns/","image":null,"tags":["architecture","networking","testing"],"title":"Risks, Limitations, and Anti-Patterns","url":"https://serhiismetanskyi.com/docs/client-server-architecture/07-testing-risks-patterns/02-risks-anti-patterns/"},{"authors":[],"content_html":"<h1>Real-World Patterns and Decision Factors</h1>\n<h2>18. Real-World Patterns</h2>\n<p>These are proven architecture patterns used in production systems.\nEach pattern addre...</p>","date_modified":"2026-06-14T00:00:00+00:00","date_published":"2026-06-14T00:00:00+00:00","id":"https://serhiismetanskyi.com/docs/client-server-architecture/07-testing-risks-patterns/03-real-world-decision-factors/","image":null,"tags":["architecture","networking","testing"],"title":"Real-World Patterns and Decision Factors","url":"https://serhiismetanskyi.com/docs/client-server-architecture/07-testing-risks-patterns/03-real-world-decision-factors/"},{"authors":[],"content_html":"<h1>Testing Risks Patterns</h1>\n<p>Testing Risks Patterns covers client-server boundaries, traffic management, scalability, and resilience, with focused guides on Tes...</p>","date_modified":"2026-06-14T00:00:00+00:00","date_published":"2026-06-14T00:00:00+00:00","id":"https://serhiismetanskyi.com/docs/client-server-architecture/07-testing-risks-patterns/","image":null,"tags":["architecture","networking","testing"],"title":"Testing Risks Patterns","url":"https://serhiismetanskyi.com/docs/client-server-architecture/07-testing-risks-patterns/"},{"authors":[],"content_html":"<h1>Reliability</h1>\n<p>Reliability means the system works correctly under failures. Not if failures happen, but when.</p>\n<h2>12.1 Retry</h2>\n<p>When a request fails, retry aft...</p>","date_modified":"2026-06-13T00:00:00+00:00","date_published":"2026-06-13T00:00:00+00:00","id":"https://serhiismetanskyi.com/docs/client-server-architecture/06-reliability-security-observability/01-reliability/","image":null,"tags":["architecture","networking","observability","reliability","security"],"title":"Reliability","url":"https://serhiismetanskyi.com/docs/client-server-architecture/06-reliability-security-observability/01-reliability/"},{"authors":[],"content_html":"<h1>Security</h1>\n<p>Security is defense in depth. Multiple layers. No single layer is sufficient alone.</p>\n<h2>13.1 Authentication</h2>\n<h3>JWT (JSON Web Token)</h3>\n<ul>\n<li>Stateless...</li>\n</ul>","date_modified":"2026-06-13T00:00:00+00:00","date_published":"2026-06-13T00:00:00+00:00","id":"https://serhiismetanskyi.com/docs/client-server-architecture/06-reliability-security-observability/02-security/","image":null,"tags":["architecture","networking","observability","reliability","security"],"title":"Security","url":"https://serhiismetanskyi.com/docs/client-server-architecture/06-reliability-security-observability/02-security/"},{"authors":[],"content_html":"<h1>Observability</h1>\n<p>Observability means you can understand what the system is doing from its outputs. Three pillars: logs, metrics, traces.</p>\n<h2>14.1 Logging</h2>\n<h2>...</h2>","date_modified":"2026-06-13T00:00:00+00:00","date_published":"2026-06-13T00:00:00+00:00","id":"https://serhiismetanskyi.com/docs/client-server-architecture/06-reliability-security-observability/03-observability/","image":null,"tags":["architecture","networking","observability","reliability","security"],"title":"Observability","url":"https://serhiismetanskyi.com/docs/client-server-architecture/06-reliability-security-observability/03-observability/"},{"authors":[],"content_html":"<h1>Reliability Security Observability</h1>\n<p>Reliability Security Observability covers client-server boundaries, traffic management, scalability, and resilience, wi...</p>","date_modified":"2026-06-13T00:00:00+00:00","date_published":"2026-06-13T00:00:00+00:00","id":"https://serhiismetanskyi.com/docs/client-server-architecture/06-reliability-security-observability/","image":null,"tags":["architecture","networking","observability","reliability","security"],"title":"Reliability Security Observability","url":"https://serhiismetanskyi.com/docs/client-server-architecture/06-reliability-security-observability/"},{"authors":[],"content_html":"<h1>Client Architecture</h1>\n<h2>9.1 Data Fetching</h2>\n<p>Modern clients separate data fetching from UI rendering. Use a data-fetching\nlayer, not raw HTTP calls scattered...</p>","date_modified":"2026-06-12T00:00:00+00:00","date_published":"2026-06-12T00:00:00+00:00","id":"https://serhiismetanskyi.com/docs/client-server-architecture/05-client-scalability-performance/01-client-architecture/","image":null,"tags":["architecture","networking","performance"],"title":"Client Architecture","url":"https://serhiismetanskyi.com/docs/client-server-architecture/05-client-scalability-performance/01-client-architecture/"},{"authors":[],"content_html":"<h1>Scalability</h1>\n<h2>10.1 Horizontal Scaling</h2>\n<p>Add more instances behind a load balancer. This is the primary scaling strategy\nfor stateless services.</p>\n<p>**Statele...</p>","date_modified":"2026-06-12T00:00:00+00:00","date_published":"2026-06-12T00:00:00+00:00","id":"https://serhiismetanskyi.com/docs/client-server-architecture/05-client-scalability-performance/02-scalability/","image":null,"tags":["architecture","networking","performance"],"title":"Scalability","url":"https://serhiismetanskyi.com/docs/client-server-architecture/05-client-scalability-performance/02-scalability/"},{"authors":[],"content_html":"<h1>Performance</h1>\n<h2>11.1 Latency</h2>\n<h3>Sources of latency</h3>\n<p>| Source                  | Typical cost      | Mitigation                                  |\n| -----...</p>","date_modified":"2026-06-12T00:00:00+00:00","date_published":"2026-06-12T00:00:00+00:00","id":"https://serhiismetanskyi.com/docs/client-server-architecture/05-client-scalability-performance/03-performance/","image":null,"tags":["architecture","networking","performance"],"title":"Performance","url":"https://serhiismetanskyi.com/docs/client-server-architecture/05-client-scalability-performance/03-performance/"},{"authors":[],"content_html":"<h1>Client Scalability Performance</h1>\n<p>Client Scalability Performance covers client-server boundaries, traffic management, scalability, and resilience, with focus...</p>","date_modified":"2026-06-12T00:00:00+00:00","date_published":"2026-06-12T00:00:00+00:00","id":"https://serhiismetanskyi.com/docs/client-server-architecture/05-client-scalability-performance/","image":null,"tags":["architecture","networking","performance"],"title":"Client Scalability Performance","url":"https://serhiismetanskyi.com/docs/client-server-architecture/05-client-scalability-performance/"},{"authors":[],"content_html":"<h1>Traffic Management</h1>\n<h2>4.1 Routing</h2>\n<h3>Path-based routing</h3>\n<p>Route requests based on URL path:</p>\n<ul>\n<li><code>/api/v1/users</code> → user service</li>\n<li><code>/api/v1/orders</code> → order ...</li>\n</ul>","date_modified":"2026-06-11T00:00:00+00:00","date_published":"2026-06-11T00:00:00+00:00","id":"https://serhiismetanskyi.com/docs/client-server-architecture/03-traffic-service-mesh/01-traffic-management/","image":null,"tags":["architecture","networking","service-mesh"],"title":"Traffic Management","url":"https://serhiismetanskyi.com/docs/client-server-architecture/03-traffic-service-mesh/01-traffic-management/"},{"authors":[],"content_html":"<h1>Service Layer and Service Mesh</h1>\n<h2>5.1 Backend Architecture</h2>\n<h3>Monolith</h3>\n<p>All functionality lives in one deployable unit. One codebase, one database, one ...</p>","date_modified":"2026-06-11T00:00:00+00:00","date_published":"2026-06-11T00:00:00+00:00","id":"https://serhiismetanskyi.com/docs/client-server-architecture/03-traffic-service-mesh/02-service-layer-mesh/","image":null,"tags":["architecture","networking","service-mesh"],"title":"Service Layer and Service Mesh","url":"https://serhiismetanskyi.com/docs/client-server-architecture/03-traffic-service-mesh/02-service-layer-mesh/"},{"authors":[],"content_html":"<h1>Connection Management</h1>\n<p>Connection management is about keeping network connections alive and efficient.\nEvery new connection costs time (TCP handshake + TLS...</p>","date_modified":"2026-06-11T00:00:00+00:00","date_published":"2026-06-11T00:00:00+00:00","id":"https://serhiismetanskyi.com/docs/client-server-architecture/04-connections-backpressure/01-connection-management/","image":null,"tags":["architecture","networking"],"title":"Connection Management","url":"https://serhiismetanskyi.com/docs/client-server-architecture/04-connections-backpressure/01-connection-management/"},{"authors":[],"content_html":"<h1>Backpressure and Flow Control</h1>\n<p>Backpressure is what happens when a producer sends data faster than a consumer can process it.\nWithout control, memory grows...</p>","date_modified":"2026-06-11T00:00:00+00:00","date_published":"2026-06-11T00:00:00+00:00","id":"https://serhiismetanskyi.com/docs/client-server-architecture/04-connections-backpressure/02-backpressure-flow-control/","image":null,"tags":["architecture","networking"],"title":"Backpressure and Flow Control","url":"https://serhiismetanskyi.com/docs/client-server-architecture/04-connections-backpressure/02-backpressure-flow-control/"},{"authors":[],"content_html":"<h1>Connections Backpressure</h1>\n<p>Connections Backpressure covers client-server boundaries, traffic management, scalability, and resilience, with focused guides on...</p>","date_modified":"2026-06-11T00:00:00+00:00","date_published":"2026-06-11T00:00:00+00:00","id":"https://serhiismetanskyi.com/docs/client-server-architecture/04-connections-backpressure/","image":null,"tags":["architecture","networking"],"title":"Connections Backpressure","url":"https://serhiismetanskyi.com/docs/client-server-architecture/04-connections-backpressure/"},{"authors":[],"content_html":"<h1>Edge Layer: CDN and Load Balancers</h1>\n<h2>3.1 CDN (Content Delivery Network)</h2>\n<p>A CDN is a network of geographically distributed servers called **PoPs (Points o...</p>","date_modified":"2026-06-10T00:00:00+00:00","date_published":"2026-06-10T00:00:00+00:00","id":"https://serhiismetanskyi.com/docs/client-server-architecture/02-edge-layer/01-cdn-load-balancer/","image":null,"tags":["architecture","networking"],"title":"Edge Layer: CDN and Load Balancers","url":"https://serhiismetanskyi.com/docs/client-server-architecture/02-edge-layer/01-cdn-load-balancer/"},{"authors":[],"content_html":"<h1>Edge Layer: Reverse Proxy, Forward Proxy, API Gateway, WAF</h1>\n<h2>3.3 Reverse Proxy</h2>\n<p>A reverse proxy sits <strong>in front of backend servers</strong> and receives all inc...</p>","date_modified":"2026-06-10T00:00:00+00:00","date_published":"2026-06-10T00:00:00+00:00","id":"https://serhiismetanskyi.com/docs/client-server-architecture/02-edge-layer/02-reverse-proxy-api-gateway/","image":null,"tags":["architecture","networking"],"title":"Edge Layer: Reverse Proxy, Forward Proxy, API Gateway, WAF","url":"https://serhiismetanskyi.com/docs/client-server-architecture/02-edge-layer/02-reverse-proxy-api-gateway/"},{"authors":[],"content_html":"<h1>Edge Layer</h1>\n<p>Edge Layer covers client-server boundaries, traffic management, scalability, and resilience, with focused guides on CDN Load Balancer, Reverse ...</p>","date_modified":"2026-06-10T00:00:00+00:00","date_published":"2026-06-10T00:00:00+00:00","id":"https://serhiismetanskyi.com/docs/client-server-architecture/02-edge-layer/","image":null,"tags":["architecture","networking"],"title":"Edge Layer","url":"https://serhiismetanskyi.com/docs/client-server-architecture/02-edge-layer/"},{"authors":[],"content_html":"<h1>Traffic Service Mesh</h1>\n<p>Traffic Service Mesh covers client-server boundaries, traffic management, scalability, and resilience, with focused guides on Traffic...</p>","date_modified":"2026-06-10T00:00:00+00:00","date_published":"2026-06-10T00:00:00+00:00","id":"https://serhiismetanskyi.com/docs/client-server-architecture/03-traffic-service-mesh/","image":null,"tags":["architecture","networking","service-mesh"],"title":"Traffic Service Mesh","url":"https://serhiismetanskyi.com/docs/client-server-architecture/03-traffic-service-mesh/"},{"authors":[],"content_html":"<h1>Client-Server Architecture: Core Model</h1>\n<h2>1.1 Responsibilities</h2>\n<p>Client and server have clear, separate responsibilities. This separation is fundamental to...</p>","date_modified":"2026-06-09T00:00:00+00:00","date_published":"2026-06-09T00:00:00+00:00","id":"https://serhiismetanskyi.com/docs/client-server-architecture/01-core-model/01-responsibilities-communication/","image":null,"tags":["architecture","networking"],"title":"Client-Server Architecture: Core Model","url":"https://serhiismetanskyi.com/docs/client-server-architecture/01-core-model/01-responsibilities-communication/"},{"authors":[],"content_html":"<h1>Client-Server: API Architectures Overview</h1>\n<p>This document gives a quick summary of API architecture choices in the context of\nclient-server systems. For dee...</p>","date_modified":"2026-06-09T00:00:00+00:00","date_published":"2026-06-09T00:00:00+00:00","id":"https://serhiismetanskyi.com/docs/client-server-architecture/01-core-model/02-api-architectures-overview/","image":null,"tags":["architecture","networking"],"title":"Client-Server: API Architectures Overview","url":"https://serhiismetanskyi.com/docs/client-server-architecture/01-core-model/02-api-architectures-overview/"},{"authors":[],"content_html":"<h1>Core Model</h1>\n<p>Core Model covers client-server boundaries, traffic management, scalability, and resilience, with focused guides on Responsibilities Communicat...</p>","date_modified":"2026-06-09T00:00:00+00:00","date_published":"2026-06-09T00:00:00+00:00","id":"https://serhiismetanskyi.com/docs/client-server-architecture/01-core-model/","image":null,"tags":["architecture","networking"],"title":"Core Model","url":"https://serhiismetanskyi.com/docs/client-server-architecture/01-core-model/"},{"authors":[],"content_html":"<h1>Client–Server Architecture</h1>\n<h2>Section Descriptions</h2>\n<h3>1. <a href=\"01-core-model/index.md\">Core Model</a></h3>\n<p>| File | Topics |\n|------|--------|\n| [Responsibilities &amp;...</p>","date_modified":"2026-06-09T00:00:00+00:00","date_published":"2026-06-09T00:00:00+00:00","id":"https://serhiismetanskyi.com/docs/client-server-architecture/","image":null,"tags":["architecture","networking"],"title":"Client–Server Architecture","url":"https://serhiismetanskyi.com/docs/client-server-architecture/"},{"authors":[],"content_html":"<h1>Cross-Cutting: Performance, Scalability and Reliability</h1>\n<h2>Performance</h2>\n<h3>Latency</h3>\n<ul>\n<li><strong>Target SLOs</strong>: p50 &lt; 100ms, p95 &lt; 500ms, p99 &lt; 1000ms for most AP...</li>\n</ul>","date_modified":"2026-06-08T00:00:00+00:00","date_published":"2026-06-08T00:00:00+00:00","id":"https://serhiismetanskyi.com/docs/api-architectures/05-cross-cutting/02-performance-reliability/","image":null,"tags":["api","architecture","observability","reliability","security"],"title":"Cross-Cutting: Performance, Scalability and Reliability","url":"https://serhiismetanskyi.com/docs/api-architectures/05-cross-cutting/02-performance-reliability/"},{"authors":[],"content_html":"<h1>Cross-Cutting: SLO, Error Budget, Incident Playbook</h1>\n<p>This document adds an actionable reliability policy for API teams.</p>\n<h2>SLO baseline model</h2>\n<ul>\n<li>Availabil...</li>\n</ul>","date_modified":"2026-06-08T00:00:00+00:00","date_published":"2026-06-08T00:00:00+00:00","id":"https://serhiismetanskyi.com/docs/api-architectures/05-cross-cutting/03-slo-error-budget-incident-playbook/","image":null,"tags":["api","architecture","observability","reliability","security"],"title":"Cross-Cutting: SLO, Error Budget, Incident Playbook","url":"https://serhiismetanskyi.com/docs/api-architectures/05-cross-cutting/03-slo-error-budget-incident-playbook/"},{"authors":[],"content_html":"<h1>API Architecture: Decision Factors and Comparison Guide</h1>\n<h2>Comparison Table</h2>\n<p>| Factor | REST | GraphQL | gRPC | WebSocket |\n|--------|------|---------|---...</p>","date_modified":"2026-06-08T00:00:00+00:00","date_published":"2026-06-08T00:00:00+00:00","id":"https://serhiismetanskyi.com/docs/api-architectures/06-decision-factors/01-comparison-guide/","image":null,"tags":["api","architecture"],"title":"API Architecture: Decision Factors and Comparison Guide","url":"https://serhiismetanskyi.com/docs/api-architectures/06-decision-factors/01-comparison-guide/"},{"authors":[],"content_html":"<h1>Decision Factors</h1>\n<p>Decision Factors covers API styles, contracts, performance, and reliability, with focused guides on Comparison Guide.</p>\n<h2>Guides</h2>\n<ul>\n<li>[Comp...</li>\n</ul>","date_modified":"2026-06-08T00:00:00+00:00","date_published":"2026-06-08T00:00:00+00:00","id":"https://serhiismetanskyi.com/docs/api-architectures/06-decision-factors/","image":null,"tags":["api","architecture"],"title":"Decision Factors","url":"https://serhiismetanskyi.com/docs/api-architectures/06-decision-factors/"},{"authors":[],"content_html":"<h1>WebSocket: Code Examples (Python + Pydantic + Playwright)</h1>\n<h2>1. Pydantic Models for WebSocket Messages</h2>\n<p>```python\nfrom pydantic import BaseModel, Field\nfr...</p>","date_modified":"2026-06-07T00:00:00+00:00","date_published":"2026-06-07T00:00:00+00:00","id":"https://serhiismetanskyi.com/docs/api-architectures/04-websocket/04-code-examples/","image":null,"tags":["api","architecture","websocket"],"title":"WebSocket: Code Examples (Python + Pydantic + Playwright)","url":"https://serhiismetanskyi.com/docs/api-architectures/04-websocket/04-code-examples/"},{"authors":[],"content_html":"<h1>WebSocket: Reliability Pattern</h1>\n<p>WebSocket does not provide exactly-once delivery by default.\nThis document describes a practical \"exactly-once-like\" patter...</p>","date_modified":"2026-06-07T00:00:00+00:00","date_published":"2026-06-07T00:00:00+00:00","id":"https://serhiismetanskyi.com/docs/api-architectures/04-websocket/05-reliability-pattern/","image":null,"tags":["api","architecture","websocket"],"title":"WebSocket: Reliability Pattern","url":"https://serhiismetanskyi.com/docs/api-architectures/04-websocket/05-reliability-pattern/"},{"authors":[],"content_html":"<h1>Cross-Cutting: Security and Observability</h1>\n<h2>Security</h2>\n<h3>Authentication</h3>\n<ul>\n<li><strong>JWT (JSON Web Token)</strong>: most common for APIs. Three parts: header.payload.s...</li>\n</ul>","date_modified":"2026-06-07T00:00:00+00:00","date_published":"2026-06-07T00:00:00+00:00","id":"https://serhiismetanskyi.com/docs/api-architectures/05-cross-cutting/01-security-observability/","image":null,"tags":["api","architecture","observability","reliability","security"],"title":"Cross-Cutting: Security and Observability","url":"https://serhiismetanskyi.com/docs/api-architectures/05-cross-cutting/01-security-observability/"},{"authors":[],"content_html":"<h1>Cross Cutting</h1>\n<p>Cross Cutting covers API styles, contracts, performance, and reliability, with focused guides on Security Observability, Performance Reliabi...</p>","date_modified":"2026-06-07T00:00:00+00:00","date_published":"2026-06-07T00:00:00+00:00","id":"https://serhiismetanskyi.com/docs/api-architectures/05-cross-cutting/","image":null,"tags":["api","architecture","observability","reliability","security"],"title":"Cross Cutting","url":"https://serhiismetanskyi.com/docs/api-architectures/05-cross-cutting/"},{"authors":[],"content_html":"<h1>WebSocket: Protocol, Communication and Messages</h1>\n<h2>4.1 Protocol</h2>\n<p>WebSocket is a protocol for persistent, bidirectional communication between client and se...</p>","date_modified":"2026-06-06T00:00:00+00:00","date_published":"2026-06-06T00:00:00+00:00","id":"https://serhiismetanskyi.com/docs/api-architectures/04-websocket/01-protocol-communication/","image":null,"tags":["api","architecture","websocket"],"title":"WebSocket: Protocol, Communication and Messages","url":"https://serhiismetanskyi.com/docs/api-architectures/04-websocket/01-protocol-communication/"},{"authors":[],"content_html":"<h1>WebSocket: State Management, Scaling and Backpressure</h1>\n<h2>4.4 State</h2>\n<h3>Connection Lifecycle</h3>\n<p>Every WebSocket connection goes through four states:</p>\n<p>```\nCO...</p>","date_modified":"2026-06-06T00:00:00+00:00","date_published":"2026-06-06T00:00:00+00:00","id":"https://serhiismetanskyi.com/docs/api-architectures/04-websocket/02-state-scaling/","image":null,"tags":["api","architecture","websocket"],"title":"WebSocket: State Management, Scaling and Backpressure","url":"https://serhiismetanskyi.com/docs/api-architectures/04-websocket/02-state-scaling/"},{"authors":[],"content_html":"<h1>WebSocket: Testing Plan and Risks</h1>\n<h2>4.7 Testing Plan</h2>\n<h3>Connection Tests</h3>\n<p>| Test Case          | Steps                                              | E...</p>","date_modified":"2026-06-06T00:00:00+00:00","date_published":"2026-06-06T00:00:00+00:00","id":"https://serhiismetanskyi.com/docs/api-architectures/04-websocket/03-testing-risks/","image":null,"tags":["api","architecture","websocket"],"title":"WebSocket: Testing Plan and Risks","url":"https://serhiismetanskyi.com/docs/api-architectures/04-websocket/03-testing-risks/"},{"authors":[],"content_html":"<h1>Websocket</h1>\n<p>Websocket covers API styles, contracts, performance, and reliability, with focused guides on Protocol Communication, State Scaling, Testing Risk...</p>","date_modified":"2026-06-06T00:00:00+00:00","date_published":"2026-06-06T00:00:00+00:00","id":"https://serhiismetanskyi.com/docs/api-architectures/04-websocket/","image":null,"tags":["api","architecture","websocket"],"title":"Websocket","url":"https://serhiismetanskyi.com/docs/api-architectures/04-websocket/"},{"authors":[],"content_html":"<h1>gRPC: Communication Patterns, Code Generation and Error Model</h1>\n<h2>3.4 Communication Patterns</h2>\n<h3>Unary RPC</h3>\n<p>Single request, single response. Similar to a ...</p>","date_modified":"2026-06-05T00:00:00+00:00","date_published":"2026-06-05T00:00:00+00:00","id":"https://serhiismetanskyi.com/docs/api-architectures/03-grpc/02-patterns-codegen-errors/","image":null,"tags":["api","architecture","grpc"],"title":"gRPC: Communication Patterns, Code Generation and Error Model","url":"https://serhiismetanskyi.com/docs/api-architectures/03-grpc/02-patterns-codegen-errors/"},{"authors":[],"content_html":"<h1>gRPC: Testing Plan and Risks</h1>\n<h2>3.7 Testing Plan</h2>\n<h3>Contract Tests</h3>\n<ul>\n<li><strong>Backward compatibility</strong>: add new field to <code>.proto</code> — old client still works cor...</li>\n</ul>","date_modified":"2026-06-05T00:00:00+00:00","date_published":"2026-06-05T00:00:00+00:00","id":"https://serhiismetanskyi.com/docs/api-architectures/03-grpc/03-testing-risks/","image":null,"tags":["api","architecture","grpc"],"title":"gRPC: Testing Plan and Risks","url":"https://serhiismetanskyi.com/docs/api-architectures/03-grpc/03-testing-risks/"},{"authors":[],"content_html":"<h1>gRPC: Code Examples (Python + Pydantic + Playwright)</h1>\n<p>Playwright is HTTP-based, so for gRPC we use <code>grpcio</code> for native calls\nand Pydantic for validation. W...</p>","date_modified":"2026-06-05T00:00:00+00:00","date_published":"2026-06-05T00:00:00+00:00","id":"https://serhiismetanskyi.com/docs/api-architectures/03-grpc/04-code-examples/","image":null,"tags":["api","architecture","grpc"],"title":"gRPC: Code Examples (Python + Pydantic + Playwright)","url":"https://serhiismetanskyi.com/docs/api-architectures/03-grpc/04-code-examples/"},{"authors":[],"content_html":"<h1>gRPC: Retry and Hedging Policy</h1>\n<p>This document adds a clear policy for retry and hedging in production gRPC systems.</p>\n<h2>Core rule</h2>\n<p>Retry and hedging must b...</p>","date_modified":"2026-06-05T00:00:00+00:00","date_published":"2026-06-05T00:00:00+00:00","id":"https://serhiismetanskyi.com/docs/api-architectures/03-grpc/05-retry-hedging-policy/","image":null,"tags":["api","architecture","grpc"],"title":"gRPC: Retry and Hedging Policy","url":"https://serhiismetanskyi.com/docs/api-architectures/03-grpc/05-retry-hedging-policy/"},{"authors":[],"content_html":"<h1>GraphQL: Code Examples (Python + Pydantic + Playwright)</h1>\n<p>Practical code examples for testing GraphQL APIs. Uses Pydantic for response validation and Playwr...</p>","date_modified":"2026-06-04T00:00:00+00:00","date_published":"2026-06-04T00:00:00+00:00","id":"https://serhiismetanskyi.com/docs/api-architectures/02-graphql/04-code-examples/","image":null,"tags":["api","architecture","graphql"],"title":"GraphQL: Code Examples (Python + Pydantic + Playwright)","url":"https://serhiismetanskyi.com/docs/api-architectures/02-graphql/04-code-examples/"},{"authors":[],"content_html":"<h1>GraphQL: APQ and Safelisting Rollout</h1>\n<p>This document adds a practical production rollout model for persisted operations.</p>\n<h2>APQ vs Safelisting</h2>\n<p>| Topic | A...</p>","date_modified":"2026-06-04T00:00:00+00:00","date_published":"2026-06-04T00:00:00+00:00","id":"https://serhiismetanskyi.com/docs/api-architectures/02-graphql/05-apq-safelist-rollout/","image":null,"tags":["api","architecture","graphql"],"title":"GraphQL: APQ and Safelisting Rollout","url":"https://serhiismetanskyi.com/docs/api-architectures/02-graphql/05-apq-safelist-rollout/"},{"authors":[],"content_html":"<h1>gRPC: Contract Layer, Transport and Serialization</h1>\n<h2>3.1 Contract Layer</h2>\n<h3>Protobuf Schema</h3>\n<p>Protocol Buffers (protobuf) is the default serialization for...</p>","date_modified":"2026-06-04T00:00:00+00:00","date_published":"2026-06-04T00:00:00+00:00","id":"https://serhiismetanskyi.com/docs/api-architectures/03-grpc/01-contract-transport/","image":null,"tags":["api","architecture","grpc"],"title":"gRPC: Contract Layer, Transport and Serialization","url":"https://serhiismetanskyi.com/docs/api-architectures/03-grpc/01-contract-transport/"},{"authors":[],"content_html":"<h1>gRPC</h1>\n<p>gRPC covers API styles, contracts, performance, and reliability, with focused guides on Contract Transport, Patterns Codegen Errors, Testing Risks, a...</p>","date_modified":"2026-06-04T00:00:00+00:00","date_published":"2026-06-04T00:00:00+00:00","id":"https://serhiismetanskyi.com/docs/api-architectures/03-grpc/","image":null,"tags":["api","architecture","grpc"],"title":"gRPC","url":"https://serhiismetanskyi.com/docs/api-architectures/03-grpc/"},{"authors":[],"content_html":"<h1>GraphQL: Schema, Architecture and Execution Model</h1>\n<h2>2.1 Schema &amp; Architecture</h2>\n<p>GraphQL uses a schema as a contract between client and server. The schema ...</p>","date_modified":"2026-06-03T00:00:00+00:00","date_published":"2026-06-03T00:00:00+00:00","id":"https://serhiismetanskyi.com/docs/api-architectures/02-graphql/01-schema-execution/","image":null,"tags":["api","architecture","graphql"],"title":"GraphQL: Schema, Architecture and Execution Model","url":"https://serhiismetanskyi.com/docs/api-architectures/02-graphql/01-schema-execution/"},{"authors":[],"content_html":"<h1>GraphQL: Queries, Performance and Caching</h1>\n<h2>2.3 Query Model</h2>\n<p>GraphQL gives clients full control over what data they receive. The client writes the query,...</p>","date_modified":"2026-06-03T00:00:00+00:00","date_published":"2026-06-03T00:00:00+00:00","id":"https://serhiismetanskyi.com/docs/api-architectures/02-graphql/02-queries-performance/","image":null,"tags":["api","architecture","graphql"],"title":"GraphQL: Queries, Performance and Caching","url":"https://serhiismetanskyi.com/docs/api-architectures/02-graphql/02-queries-performance/"},{"authors":[],"content_html":"<h1>GraphQL: Testing Plan and Risks</h1>\n<h2>2.7 Testing Plan</h2>\n<h3>Schema Tests</h3>\n<p>| Test Case                    | What to Check                                     ...</p>","date_modified":"2026-06-03T00:00:00+00:00","date_published":"2026-06-03T00:00:00+00:00","id":"https://serhiismetanskyi.com/docs/api-architectures/02-graphql/03-testing-risks/","image":null,"tags":["api","architecture","graphql"],"title":"GraphQL: Testing Plan and Risks","url":"https://serhiismetanskyi.com/docs/api-architectures/02-graphql/03-testing-risks/"},{"authors":[],"content_html":"<h1>GraphQL</h1>\n<p>GraphQL covers API styles, contracts, performance, and reliability, with focused guides on Schema Execution, Queries Performance, Testing Risks, a...</p>","date_modified":"2026-06-03T00:00:00+00:00","date_published":"2026-06-03T00:00:00+00:00","id":"https://serhiismetanskyi.com/docs/api-architectures/02-graphql/","image":null,"tags":["api","architecture","graphql"],"title":"GraphQL","url":"https://serhiismetanskyi.com/docs/api-architectures/02-graphql/"},{"authors":[],"content_html":"<h1>REST: Caching, Concurrency and Idempotency</h1>\n<h2>1.5 Caching</h2>\n<p>HTTP caching reduces server load, saves bandwidth, and speeds up responses.\nThe server tells th...</p>","date_modified":"2026-06-02T00:00:00+00:00","date_published":"2026-06-02T00:00:00+00:00","id":"https://serhiismetanskyi.com/docs/api-architectures/01-rest/04-caching-concurrency/","image":null,"tags":["api","architecture","rest"],"title":"REST: Caching, Concurrency and Idempotency","url":"https://serhiismetanskyi.com/docs/api-architectures/01-rest/04-caching-concurrency/"},{"authors":[],"content_html":"<h1>REST: Error Model, Security and Versioning</h1>\n<h2>1.8 Error Model</h2>\n<p>A good API returns errors that are easy to read, parse, and act on.\nUse a consistent schema...</p>","date_modified":"2026-06-02T00:00:00+00:00","date_published":"2026-06-02T00:00:00+00:00","id":"https://serhiismetanskyi.com/docs/api-architectures/01-rest/05-errors-security-versioning/","image":null,"tags":["api","architecture","rest","security"],"title":"REST: Error Model, Security and Versioning","url":"https://serhiismetanskyi.com/docs/api-architectures/01-rest/05-errors-security-versioning/"},{"authors":[],"content_html":"<h1>REST: Testing Plan and Risks</h1>\n<h2>1.11 Testing Plan</h2>\n<p>Tests are organized by category. Each test describes input and expected result.</p>\n<h3>Schema Validation ...</h3>","date_modified":"2026-06-02T00:00:00+00:00","date_published":"2026-06-02T00:00:00+00:00","id":"https://serhiismetanskyi.com/docs/api-architectures/01-rest/06-testing-risks/","image":null,"tags":["api","architecture","rest"],"title":"REST: Testing Plan and Risks","url":"https://serhiismetanskyi.com/docs/api-architectures/01-rest/06-testing-risks/"},{"authors":[],"content_html":"<h1>REST API: Code Examples (Python + Pydantic + Playwright)</h1>\n<p>Practical code examples for REST API testing. Each section shows a pattern you can copy into your...</p>","date_modified":"2026-06-02T00:00:00+00:00","date_published":"2026-06-02T00:00:00+00:00","id":"https://serhiismetanskyi.com/docs/api-architectures/01-rest/07-code-examples/","image":null,"tags":["api","architecture","rest"],"title":"REST API: Code Examples (Python + Pydantic + Playwright)","url":"https://serhiismetanskyi.com/docs/api-architectures/01-rest/07-code-examples/"},{"authors":[],"content_html":"<h1>REST: Architecture and HTTP Layer</h1>\n<h2>1.1 Architecture &amp; Constraints</h2>\n<h3>Statelessness</h3>\n<p>Each request from a client must contain all information the server...</p>","date_modified":"2026-06-01T00:00:00+00:00","date_published":"2026-06-01T00:00:00+00:00","id":"https://serhiismetanskyi.com/docs/api-architectures/01-rest/01-architecture-http/","image":null,"tags":["api","architecture","rest"],"title":"REST: Architecture and HTTP Layer","url":"https://serhiismetanskyi.com/docs/api-architectures/01-rest/01-architecture-http/"},{"authors":[],"content_html":"<h1>REST: Data Schema and Validation</h1>\n<h2>1.3 Data Schema</h2>\n<h3>OpenAPI 3.1 / JSON Schema</h3>\n<p>OpenAPI is the standard way to define REST API contracts. Version 3.1 ...</p>","date_modified":"2026-06-01T00:00:00+00:00","date_published":"2026-06-01T00:00:00+00:00","id":"https://serhiismetanskyi.com/docs/api-architectures/01-rest/02-data-schema/","image":null,"tags":["api","architecture","rest"],"title":"REST: Data Schema and Validation","url":"https://serhiismetanskyi.com/docs/api-architectures/01-rest/02-data-schema/"},{"authors":[],"content_html":"<h1>REST: Querying Layer</h1>\n<h2>Field Selection (Sparse Fieldsets)</h2>\n<p>Select only needed fields to reduce payload size:\n<code>GET /users?fields=id,name,email</code>\nServ...</p>","date_modified":"2026-06-01T00:00:00+00:00","date_published":"2026-06-01T00:00:00+00:00","id":"https://serhiismetanskyi.com/docs/api-architectures/01-rest/03-querying/","image":null,"tags":["api","architecture","rest"],"title":"REST: Querying Layer","url":"https://serhiismetanskyi.com/docs/api-architectures/01-rest/03-querying/"},{"authors":[],"content_html":"<h1>REST</h1>\n<p>REST covers API styles, contracts, performance, and reliability, with focused guides on Architecture HTTP, Data Schema, Querying, and more.</p>\n<h2>Guide...</h2>","date_modified":"2026-06-01T00:00:00+00:00","date_published":"2026-06-01T00:00:00+00:00","id":"https://serhiismetanskyi.com/docs/api-architectures/01-rest/","image":null,"tags":["api","architecture","rest"],"title":"REST","url":"https://serhiismetanskyi.com/docs/api-architectures/01-rest/"},{"authors":[],"content_html":"<h1>API Architectures</h1>\n<h2>Section Descriptions</h2>\n<h3>1) REST API</h3>\n<p>| File | Topics |\n|------|--------|\n| <a href=\"./01-rest/01-architecture-http.md\">Architecture &amp; HTTP</a>...</p>","date_modified":"2026-06-01T00:00:00+00:00","date_published":"2026-06-01T00:00:00+00:00","id":"https://serhiismetanskyi.com/docs/api-architectures/","image":null,"tags":["api","architecture"],"title":"API Architectures","url":"https://serhiismetanskyi.com/docs/api-architectures/"},{"authors":[{"name":"Serhii Smetanskyi"}],"content_html":"A hands-on guide to testing LLM outputs with DeepEval and pytest: about thirty metrics for RAG, safety, agents and chatbots, with passing and failing cases.","date_modified":"2026-03-25T00:00:00+00:00","date_published":"2026-03-25T00:00:00+00:00","id":"https://serhiismetanskyi.com/blog/2026/03/25/testing-llm-outputs-a-hands-on-guide-to-deepeval-metrics/","image":null,"tags":["AI Testing","ai","ai-testing","deepeval","llm","llm-evaluation"],"title":"Testing LLM Outputs: A Hands-On Guide to DeepEval Metrics","url":"https://serhiismetanskyi.com/blog/2026/03/25/testing-llm-outputs-a-hands-on-guide-to-deepeval-metrics/"},{"authors":[{"name":"Serhii Smetanskyi"}],"content_html":"Test design techniques in real work, not just before interviews: equivalence partitioning, boundary values, decision tables and state transitions.","date_modified":"2026-03-24T00:00:00+00:00","date_published":"2026-03-24T00:00:00+00:00","id":"https://serhiismetanskyi.com/blog/2026/03/24/test-design-stop-clicking-start-thinking/","image":null,"tags":["QA","qa","test-design-technique","testing"],"title":"Test Design: Stop Clicking, Start Thinking","url":"https://serhiismetanskyi.com/blog/2026/03/24/test-design-stop-clicking-start-thinking/"},{"authors":[{"name":"Serhii Smetanskyi"}],"content_html":"Practical n8n workflows for QA engineers: notifications, test data, smoke checks after deploys, reports and Jira hygiene, automated instead of done by hand.","date_modified":"2026-03-23T00:00:00+00:00","date_published":"2026-03-23T00:00:00+00:00","id":"https://serhiismetanskyi.com/blog/2026/03/23/n8n-for-qa-automate-the-boring-stuff-you-keep-doing-manually/","image":null,"tags":["Automation","automation","n8n","qa"],"title":"n8n for QA: Automate the Boring Stuff You Keep Doing Manually","url":"https://serhiismetanskyi.com/blog/2026/03/23/n8n-for-qa-automate-the-boring-stuff-you-keep-doing-manually/"}],"language":"en","title":"Serhii Smetanskyi","version":"https://jsonfeed.org/version/1.1"}