<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Generative AI Boot Camp for Developers</title><link>https://genai-for-devs.agilebrainslabs.com/</link><description>Recent content on Generative AI Boot Camp for Developers</description><generator>Hugo</generator><language>en-us</language><atom:link href="https://genai-for-devs.agilebrainslabs.com/index.xml" rel="self" type="application/rss+xml"/><item><title>Lab</title><link>https://genai-for-devs.agilebrainslabs.com/modules/m01-genaifoundations/lab/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://genai-for-devs.agilebrainslabs.com/modules/m01-genaifoundations/lab/</guid><description>&lt;p&gt;&lt;strong&gt;Time budget:&lt;/strong&gt; ~20 minutes&lt;br&gt;
&lt;strong&gt;Section:&lt;/strong&gt; Day 1 AM (shared with M02 lab)&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="learning-objectives"&gt;Learning Objectives&lt;/h2&gt;
&lt;p&gt;After completing this lab, you will be able to:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Identify real engineering use cases where GenAI can add value&lt;/li&gt;
&lt;li&gt;Classify each use case as automation, augmentation, or risk&lt;/li&gt;
&lt;li&gt;Make your first LLM API call using both CLI and IDE-based tools&lt;/li&gt;
&lt;/ol&gt;
&lt;hr&gt;
&lt;h2 id="tool-introductions"&gt;Tool Introductions&lt;/h2&gt;
&lt;p&gt;Before starting the exercises, familiarize yourself with the GenAI tools available on
your sandbox VM. You&amp;rsquo;ll use these throughout the workshop.&lt;/p&gt;</description></item><item><title>Lab</title><link>https://genai-for-devs.agilebrainslabs.com/modules/m02-promptengineering/lab/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://genai-for-devs.agilebrainslabs.com/modules/m02-promptengineering/lab/</guid><description>&lt;p&gt;&lt;strong&gt;Time budget:&lt;/strong&gt; ~20 minutes&lt;br&gt;
&lt;strong&gt;Section:&lt;/strong&gt; Day 1 AM (shared with M01 lab)&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="learning-objectives"&gt;Learning Objectives&lt;/h2&gt;
&lt;p&gt;After completing this lab, you will:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Apply the four pillars (Context, Instruction, Constraints, Format) to craft effective prompts&lt;/li&gt;
&lt;li&gt;Iterate and refine prompts to measurably improve output quality&lt;/li&gt;
&lt;li&gt;Generate real development artifacts using prompt engineering across multiple tools&lt;/li&gt;
&lt;/ol&gt;
&lt;hr&gt;
&lt;h2 id="tool-reminders"&gt;Tool Reminders&lt;/h2&gt;
&lt;p&gt;&lt;em&gt;You used these tools in M01. Quick refresher:&lt;/em&gt;&lt;/p&gt;
&lt;table&gt;
	&lt;thead&gt;
			&lt;tr&gt;
					&lt;th&gt;Tool&lt;/th&gt;
					&lt;th&gt;Best For&lt;/th&gt;
					&lt;th&gt;Command / Access&lt;/th&gt;
			&lt;/tr&gt;
	&lt;/thead&gt;
	&lt;tbody&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;strong&gt;OpenCode CLI&lt;/strong&gt;&lt;/td&gt;
					&lt;td&gt;Provider-flexible, scriptable, one-shot tasks&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;opencode run &amp;quot;prompt&amp;quot;&lt;/code&gt;&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;strong&gt;VS Code Chat&lt;/strong&gt;&lt;/td&gt;
					&lt;td&gt;IDE-integrated, sees your open files&lt;/td&gt;
					&lt;td&gt;Ctrl+Shift+I in VS Code&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;strong&gt;Claude Code&lt;/strong&gt; &lt;em&gt;(optional)&lt;/em&gt;&lt;/td&gt;
					&lt;td&gt;Deep codebase analysis, complex refactoring&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;claude -p &amp;quot;prompt&amp;quot; # Requires ANTHROPIC_API_KEY set&lt;/code&gt;&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;strong&gt;Codex CLI&lt;/strong&gt; &lt;em&gt;(optional)&lt;/em&gt;&lt;/td&gt;
					&lt;td&gt;Fast prototyping, web dev&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;codex exec &amp;quot;prompt&amp;quot;&lt;/code&gt;&lt;/td&gt;
			&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Today&amp;rsquo;s focus:&lt;/strong&gt; Prompt engineering patterns work the same regardless of which tool
you use. Try at least two tools across the exercises to see how each handles the same
prompt differently.&lt;/p&gt;</description></item><item><title>Lab</title><link>https://genai-for-devs.agilebrainslabs.com/modules/m03-aiassistedcoding/lab/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://genai-for-devs.agilebrainslabs.com/modules/m03-aiassistedcoding/lab/</guid><description>&lt;p&gt;&lt;strong&gt;Time budget:&lt;/strong&gt; 90 minutes&lt;br&gt;
&lt;strong&gt;Section:&lt;/strong&gt; Day 1 PM — The Signature Lab&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="learning-objectives"&gt;Learning Objectives&lt;/h2&gt;
&lt;p&gt;After completing this lab, you will:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Build a complete REST API using at least two different GenAI developer tools&lt;/li&gt;
&lt;li&gt;Compare tools across key dimensions and identify which fits your workflow&lt;/li&gt;
&lt;li&gt;Apply prompt engineering (M02) and the AI quality checklist to AI-generated code&lt;/li&gt;
&lt;/ol&gt;
&lt;hr&gt;
&lt;h2 id="tool-introductions-your-ai-coding-toolkit"&gt;Tool Introductions: Your AI Coding Toolkit&lt;/h2&gt;
&lt;p&gt;&lt;em&gt;This module is about putting tools into practice. Here&amp;rsquo;s a detailed look at what&amp;rsquo;s
available on your sandbox VM and when to use each.&lt;/em&gt;&lt;/p&gt;</description></item><item><title>Lab</title><link>https://genai-for-devs.agilebrainslabs.com/modules/m04-aiinsdlc/lab/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://genai-for-devs.agilebrainslabs.com/modules/m04-aiinsdlc/lab/</guid><description>&lt;p&gt;&lt;strong&gt;Time budget:&lt;/strong&gt; ~20 min | &lt;strong&gt;Day 2 AM&lt;/strong&gt; (shared with M05)&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="learning-objectives"&gt;Learning Objectives&lt;/h2&gt;
&lt;p&gt;Convert a user story into a complete development package using AI across the full software
development lifecycle — from requirements through documentation.&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="concept-review-ai-across-the-sdlc"&gt;Concept Review: AI Across the SDLC&lt;/h2&gt;
&lt;h3 id="ai-augments-every-phase--but-doesnt-replace-human-judgment"&gt;AI augments every phase — but doesn&amp;rsquo;t replace human judgment&lt;/h3&gt;
&lt;table&gt;
	&lt;thead&gt;
			&lt;tr&gt;
					&lt;th&gt;SDLC Phase&lt;/th&gt;
					&lt;th&gt;What AI Can Do&lt;/th&gt;
					&lt;th&gt;What Humans Must Do&lt;/th&gt;
			&lt;/tr&gt;
	&lt;/thead&gt;
	&lt;tbody&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;strong&gt;Requirements&lt;/strong&gt;&lt;/td&gt;
					&lt;td&gt;Expand user stories, draft acceptance criteria, identify edge cases from patterns&lt;/td&gt;
					&lt;td&gt;Validate against domain knowledge, prioritize based on business value&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;strong&gt;Design&lt;/strong&gt;&lt;/td&gt;
					&lt;td&gt;Propose architecture, generate API contracts, suggest data models&lt;/td&gt;
					&lt;td&gt;Choose between trade-offs, ensure alignment with existing systems&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;strong&gt;Implementation&lt;/strong&gt;&lt;/td&gt;
					&lt;td&gt;Generate code, refactor, complete patterns (M03)&lt;/td&gt;
					&lt;td&gt;Review every line, ensure business logic correctness&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;strong&gt;Testing&lt;/strong&gt;&lt;/td&gt;
					&lt;td&gt;Generate test cases, identify edge cases (M07)&lt;/td&gt;
					&lt;td&gt;Add domain-specific tests, verify test quality&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;strong&gt;Documentation&lt;/strong&gt;&lt;/td&gt;
					&lt;td&gt;Generate API docs, READMEs, code comments&lt;/td&gt;
					&lt;td&gt;Add context only humans know (why decisions were made)&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;strong&gt;Deployment&lt;/strong&gt;&lt;/td&gt;
					&lt;td&gt;Generate CI/CD configs, IaC templates (M08)&lt;/td&gt;
					&lt;td&gt;Verify against infrastructure, test in staging&lt;/td&gt;
			&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id="the-golden-rule"&gt;The Golden Rule&lt;/h3&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;AI drafts → Human reviews → Human owns.&lt;/strong&gt;
Document AI involvement: &lt;code&gt;git commit -m &amp;quot;feat: add password reset (AI-assisted)&amp;quot;&lt;/code&gt;&lt;/p&gt;</description></item><item><title>Lab</title><link>https://genai-for-devs.agilebrainslabs.com/modules/m05-buildingaiapps/lab/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://genai-for-devs.agilebrainslabs.com/modules/m05-buildingaiapps/lab/</guid><description>&lt;p&gt;&lt;strong&gt;Time:&lt;/strong&gt; ~20 min | &lt;strong&gt;Day 2 AM&lt;/strong&gt; (shared with M04)&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="learning-objectives"&gt;Learning Objectives&lt;/h2&gt;
&lt;p&gt;Build a simple AI-powered chatbot API. Implement a basic LLM endpoint, then extend it
with prompt chaining — a foundational pattern for AI applications.&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="concept-review-llm-apis--prompt-chaining"&gt;Concept Review: LLM APIs &amp;amp; Prompt Chaining&lt;/h2&gt;
&lt;h3 id="every-llm-api-follows-the-same-pattern"&gt;Every LLM API Follows the Same Pattern&lt;/h3&gt;
&lt;p&gt;Regardless of provider (OpenAI, Anthropic, Google), the core interface is identical:&lt;/p&gt;
&lt;div class="code-block"&gt;
 &lt;button class="code-copy" type="button" hidden aria-label="Copy code to clipboard"&gt;
 &lt;span class="code-copy-label" aria-hidden="true"&gt;Copy&lt;/span&gt;
 &lt;/button&gt;
 &lt;pre tabindex="0"&gt;&lt;code&gt;Your App → [prompt + config] → LLM API → [response] → Your App&lt;/code&gt;&lt;/pre&gt;
 &lt;/div&gt;&lt;p&gt;&lt;strong&gt;Common parameters across all providers:&lt;/strong&gt;&lt;/p&gt;</description></item><item><title>Lab</title><link>https://genai-for-devs.agilebrainslabs.com/modules/m06-rag/lab/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://genai-for-devs.agilebrainslabs.com/modules/m06-rag/lab/</guid><description>&lt;p&gt;&lt;strong&gt;Time:&lt;/strong&gt; ~25 min | &lt;strong&gt;Day 2 PM&lt;/strong&gt; (shared with M07)&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="learning-objectives"&gt;Learning Objectives&lt;/h2&gt;
&lt;p&gt;Build a RAG-based knowledge assistant. Ingest documents, query with grounding, and compare
RAG vs. non-RAG responses.&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="concept-review-rag-in-practice"&gt;Concept Review: RAG in Practice&lt;/h2&gt;
&lt;h3 id="the-rag-pipeline"&gt;The RAG Pipeline&lt;/h3&gt;
&lt;div class="code-block"&gt;
 &lt;button class="code-copy" type="button" hidden aria-label="Copy code to clipboard"&gt;
 &lt;span class="code-copy-label" aria-hidden="true"&gt;Copy&lt;/span&gt;
 &lt;/button&gt;
 &lt;pre tabindex="0"&gt;&lt;code&gt;1. INGEST: Documents → chunks → embeddings → vector DB
2. QUERY: User question → embed → search vector DB → retrieve top-K chunks
3. AUGMENT: Build prompt with retrieved chunks as context
4. GENERATE: Send augmented prompt to LLM → grounded response&lt;/code&gt;&lt;/pre&gt;
 &lt;/div&gt;&lt;h3 id="key-components"&gt;Key Components&lt;/h3&gt;
&lt;table&gt;
	&lt;thead&gt;
			&lt;tr&gt;
					&lt;th&gt;Component&lt;/th&gt;
					&lt;th&gt;What It Does&lt;/th&gt;
					&lt;th&gt;Options&lt;/th&gt;
			&lt;/tr&gt;
	&lt;/thead&gt;
	&lt;tbody&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;strong&gt;Embedding Model&lt;/strong&gt;&lt;/td&gt;
					&lt;td&gt;Converts text to vectors&lt;/td&gt;
					&lt;td&gt;Chromadb built-in (onnx, free), OpenAI embeddings&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;strong&gt;Vector Database&lt;/strong&gt;&lt;/td&gt;
					&lt;td&gt;Stores and searches embeddings&lt;/td&gt;
					&lt;td&gt;ChromaDB (lightweight, pip install), Pinecone (cloud)&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;strong&gt;Chunking Strategy&lt;/strong&gt;&lt;/td&gt;
					&lt;td&gt;How you split documents&lt;/td&gt;
					&lt;td&gt;Fixed-size (200-500 tokens), sentence-based, semantic&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;strong&gt;Top-K Retrieval&lt;/strong&gt;&lt;/td&gt;
					&lt;td&gt;How many chunks to retrieve&lt;/td&gt;
					&lt;td&gt;Start with 3-5; more = broader context but higher token cost&lt;/td&gt;
			&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id="why-rag-instead-of-fine-tuning"&gt;Why RAG Instead of Fine-Tuning?&lt;/h3&gt;
&lt;table&gt;
	&lt;thead&gt;
			&lt;tr&gt;
					&lt;th&gt;RAG&lt;/th&gt;
					&lt;th&gt;Fine-Tuning&lt;/th&gt;
			&lt;/tr&gt;
	&lt;/thead&gt;
	&lt;tbody&gt;
			&lt;tr&gt;
					&lt;td&gt;Dynamic — docs update instantly&lt;/td&gt;
					&lt;td&gt;Static — retrain when data changes&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;No model training needed&lt;/td&gt;
					&lt;td&gt;Requires training data and compute&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;Works with any LLM&lt;/td&gt;
					&lt;td&gt;Tied to a specific model&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;Provides citations (retrieved chunks)&lt;/td&gt;
					&lt;td&gt;No built-in provenance&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;Cheaper and faster to implement&lt;/td&gt;
					&lt;td&gt;Better for consistent style/tone shifts&lt;/td&gt;
			&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id="common-failure-modes"&gt;Common Failure Modes&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Retrieval misses relevant docs&lt;/strong&gt; → Chunks too large or too small; try different chunk size&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Irrelevant chunks confuse the LLM&lt;/strong&gt; → Lower top-K; add relevance threshold&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Context window overflow&lt;/strong&gt; → Too many chunks; reduce top-K or chunk size&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Stale data&lt;/strong&gt; → Vector DB not re-indexed; schedule regular ingestion&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2 id="prerequisites"&gt;Prerequisites&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;LLM API access (for embeddings and generation)&lt;/li&gt;
&lt;li&gt;ChromaDB: &lt;code&gt;pip install chromadb&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Sample documents provided in &lt;code&gt;workshop/m06/docs/&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Using OpenCode or VS Code Chat:&lt;/strong&gt; Both work for this lab. OpenCode is good for
executing the Python scripts. VS Code Chat is good for explaining concepts as you go.&lt;/p&gt;</description></item><item><title>Lab</title><link>https://genai-for-devs.agilebrainslabs.com/modules/m07-testingqa/lab/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://genai-for-devs.agilebrainslabs.com/modules/m07-testingqa/lab/</guid><description>&lt;p&gt;&lt;strong&gt;Time:&lt;/strong&gt; ~25 min | &lt;strong&gt;Day 2 PM&lt;/strong&gt; (shared with M06)&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="learning-objectives"&gt;Learning Objectives&lt;/h2&gt;
&lt;p&gt;Generate and evaluate AI-produced test suites. Learn when to trust AI-generated tests and
when human judgment is essential.&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="concept-review-ai-assisted-testing"&gt;Concept Review: AI-Assisted Testing&lt;/h2&gt;
&lt;h3 id="what-ai-excels-at-in-testing"&gt;What AI Excels At in Testing&lt;/h3&gt;
&lt;table&gt;
	&lt;thead&gt;
			&lt;tr&gt;
					&lt;th&gt;Task&lt;/th&gt;
					&lt;th&gt;AI Capability&lt;/th&gt;
					&lt;th&gt;Human Role&lt;/th&gt;
			&lt;/tr&gt;
	&lt;/thead&gt;
	&lt;tbody&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;strong&gt;Unit test generation&lt;/strong&gt;&lt;/td&gt;
					&lt;td&gt;Generates happy path + common edge cases from function signatures&lt;/td&gt;
					&lt;td&gt;Add domain-specific edge cases; verify assertions&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;strong&gt;Edge case discovery&lt;/strong&gt;&lt;/td&gt;
					&lt;td&gt;Suggests scenarios humans often miss (null, boundary, type errors)&lt;/td&gt;
					&lt;td&gt;Filter out unrealistic scenarios&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;strong&gt;Test data generation&lt;/strong&gt;&lt;/td&gt;
					&lt;td&gt;Creates large, varied datasets&lt;/td&gt;
					&lt;td&gt;Ensure data is realistic for your domain&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;strong&gt;Mutation testing&lt;/strong&gt;&lt;/td&gt;
					&lt;td&gt;Introduces bugs → checks if tests catch them&lt;/td&gt;
					&lt;td&gt;Interpret results; strengthen weak tests&lt;/td&gt;
			&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id="ai-testing-limitations"&gt;AI Testing Limitations&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Doesn&amp;rsquo;t know your business logic:&lt;/strong&gt; AI can test that a function returns &lt;em&gt;something&lt;/em&gt; but
not that it returns the &lt;em&gt;right&lt;/em&gt; thing for your domain.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Can generate buggy tests:&lt;/strong&gt; AI tests can contain their own bugs — always review assertions.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Misses implicit requirements:&lt;/strong&gt; &amp;ldquo;This should never take more than 100ms&amp;rdquo; — AI won&amp;rsquo;t
know unless you tell it.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="the-ai-testing-workflow"&gt;The AI Testing Workflow&lt;/h3&gt;
&lt;div class="code-block"&gt;
 &lt;button class="code-copy" type="button" hidden aria-label="Copy code to clipboard"&gt;
 &lt;span class="code-copy-label" aria-hidden="true"&gt;Copy&lt;/span&gt;
 &lt;/button&gt;
 &lt;pre tabindex="0"&gt;&lt;code&gt;1. Provide function + context → AI generates baseline tests
2. Run tests → identify failures
3. Ask AI: &amp;#34;What edge cases am I missing?&amp;#34;
4. Add your domain-specific cases → run again
5. Review all assertions for correctness
6. Commit — human-reviewed, AI-assisted&lt;/code&gt;&lt;/pre&gt;
 &lt;/div&gt;&lt;hr&gt;
&lt;h2 id="exercise-generate--validate-tests"&gt;Exercise: Generate &amp;amp; Validate Tests&lt;/h2&gt;
&lt;h3 id="step-1--generate-baseline-tests-10-min"&gt;Step 1 — Generate Baseline Tests (10 min)&lt;/h3&gt;
&lt;p&gt;Use your code from M03 or M05, or the sample code from M02 (&lt;code&gt;workshop/m02/sample-code.py&lt;/code&gt;).&lt;/p&gt;</description></item><item><title>Lab</title><link>https://genai-for-devs.agilebrainslabs.com/modules/m08-devopscicd/lab/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://genai-for-devs.agilebrainslabs.com/modules/m08-devopscicd/lab/</guid><description>&lt;p&gt;&lt;strong&gt;Time:&lt;/strong&gt; ~20 min | &lt;strong&gt;Day 3 AM&lt;/strong&gt; (shared with M09)&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="learning-objectives"&gt;Learning Objectives&lt;/h2&gt;
&lt;p&gt;Build an AI-assisted CI pipeline with automated PR review — one of the highest-ROI AI
integration points for development teams.&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="concept-review-ai-in-cicd"&gt;Concept Review: AI in CI/CD&lt;/h2&gt;
&lt;h3 id="where-ai-adds-value-in-pipelines"&gt;Where AI Adds Value in Pipelines&lt;/h3&gt;
&lt;table&gt;
	&lt;thead&gt;
			&lt;tr&gt;
					&lt;th&gt;Pipeline Stage&lt;/th&gt;
					&lt;th&gt;What AI Can Do&lt;/th&gt;
					&lt;th&gt;Example&lt;/th&gt;
			&lt;/tr&gt;
	&lt;/thead&gt;
	&lt;tbody&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;strong&gt;Linting&lt;/strong&gt;&lt;/td&gt;
					&lt;td&gt;Catch semantic issues linters miss&lt;/td&gt;
					&lt;td&gt;&amp;ldquo;This function always returns None in this branch&amp;rdquo;&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;strong&gt;PR Review&lt;/strong&gt;&lt;/td&gt;
					&lt;td&gt;First-pass automated review&lt;/td&gt;
					&lt;td&gt;Style, missing error handling, security anti-patterns&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;strong&gt;Security Scan&lt;/strong&gt;&lt;/td&gt;
					&lt;td&gt;Explain vulnerabilities + suggest fixes&lt;/td&gt;
					&lt;td&gt;&amp;ldquo;This SQL query is vulnerable to injection. Use parameterized queries instead.&amp;rdquo;&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;strong&gt;Test Analysis&lt;/strong&gt;&lt;/td&gt;
					&lt;td&gt;Identify flaky tests, coverage gaps&lt;/td&gt;
					&lt;td&gt;&amp;ldquo;These 3 tests fail intermittently — possible race condition&amp;rdquo;&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;strong&gt;Pipeline Config&lt;/strong&gt;&lt;/td&gt;
					&lt;td&gt;Generate CI configs for new projects&lt;/td&gt;
					&lt;td&gt;&amp;ldquo;Generate a GitHub Actions workflow for a Python FastAPI project&amp;rdquo;&lt;/td&gt;
			&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id="the-ai-enhanced-pr-review-pattern"&gt;The AI-Enhanced PR Review Pattern&lt;/h3&gt;
&lt;div class="code-block"&gt;
 &lt;button class="code-copy" type="button" hidden aria-label="Copy code to clipboard"&gt;
 &lt;span class="code-copy-label" aria-hidden="true"&gt;Copy&lt;/span&gt;
 &lt;/button&gt;
 &lt;pre tabindex="0"&gt;&lt;code&gt;Developer pushes PR → CI runs AI review → AI posts review comments →
Developer addresses → Human reviewer approves → Merge&lt;/code&gt;&lt;/pre&gt;
 &lt;/div&gt;&lt;p&gt;&lt;strong&gt;What AI catches:&lt;/strong&gt; Style violations, missing error handling, hardcoded values, security
anti-patterns, obvious bugs.&lt;/p&gt;</description></item><item><title>Lab</title><link>https://genai-for-devs.agilebrainslabs.com/modules/m09-securitygovernance/lab/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://genai-for-devs.agilebrainslabs.com/modules/m09-securitygovernance/lab/</guid><description>&lt;p&gt;&lt;strong&gt;Time:&lt;/strong&gt; ~20 min | &lt;strong&gt;Day 3 AM&lt;/strong&gt; (shared with M08)&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="learning-objectives"&gt;Learning Objectives&lt;/h2&gt;
&lt;p&gt;Identify prompt injection vulnerabilities and implement practical guardrails — the most
critical security skill for AI-augmented developers.&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="concept-review-ai-security-threats"&gt;Concept Review: AI Security Threats&lt;/h2&gt;
&lt;h3 id="the-threat-landscape"&gt;The Threat Landscape&lt;/h3&gt;
&lt;table&gt;
	&lt;thead&gt;
			&lt;tr&gt;
					&lt;th&gt;Threat&lt;/th&gt;
					&lt;th&gt;What It Is&lt;/th&gt;
					&lt;th&gt;Real-World Example&lt;/th&gt;
			&lt;/tr&gt;
	&lt;/thead&gt;
	&lt;tbody&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;strong&gt;Direct Prompt Injection&lt;/strong&gt;&lt;/td&gt;
					&lt;td&gt;User input overrides system instructions&lt;/td&gt;
					&lt;td&gt;&amp;ldquo;Ignore all previous instructions and&amp;hellip;&amp;rdquo;&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;strong&gt;Indirect Prompt Injection&lt;/strong&gt;&lt;/td&gt;
					&lt;td&gt;Attack hidden in data the AI processes&lt;/td&gt;
					&lt;td&gt;Malicious instructions in a webpage the AI summarizes&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;strong&gt;Data Leakage&lt;/strong&gt;&lt;/td&gt;
					&lt;td&gt;Sensitive data sent to external APIs&lt;/td&gt;
					&lt;td&gt;Pasting customer PII into a public LLM chat&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;strong&gt;Output Manipulation&lt;/strong&gt;&lt;/td&gt;
					&lt;td&gt;AI output used without validation&lt;/td&gt;
					&lt;td&gt;AI-generated SQL executed without review&lt;/td&gt;
			&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id="defense-in-depth"&gt;Defense in Depth&lt;/h3&gt;
&lt;table&gt;
	&lt;thead&gt;
			&lt;tr&gt;
					&lt;th&gt;Layer&lt;/th&gt;
					&lt;th&gt;Technique&lt;/th&gt;
					&lt;th&gt;Example&lt;/th&gt;
			&lt;/tr&gt;
	&lt;/thead&gt;
	&lt;tbody&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;strong&gt;Input&lt;/strong&gt;&lt;/td&gt;
					&lt;td&gt;Sanitize, validate, separate with delimiters&lt;/td&gt;
					&lt;td&gt;&amp;ldquo;User query: [input] &amp;mdash; System: respond only to the query above&amp;rdquo;&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;strong&gt;Processing&lt;/strong&gt;&lt;/td&gt;
					&lt;td&gt;Least privilege, content filtering&lt;/td&gt;
					&lt;td&gt;Restrict AI to read-only operations; no shell access&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;strong&gt;Output&lt;/strong&gt;&lt;/td&gt;
					&lt;td&gt;Validate before acting&lt;/td&gt;
					&lt;td&gt;Never execute AI-generated commands without review&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;strong&gt;Human&lt;/strong&gt;&lt;/td&gt;
					&lt;td&gt;Approval for sensitive operations&lt;/td&gt;
					&lt;td&gt;Require human sign-off for: code merges, financial transactions&lt;/td&gt;
			&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id="the-minimum-ai-security-policy"&gt;The Minimum AI Security Policy&lt;/h3&gt;
&lt;p&gt;Every team using AI should have a policy covering:&lt;/p&gt;</description></item><item><title>Lab</title><link>https://genai-for-devs.agilebrainslabs.com/modules/m10-agentsworkflows/lab/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://genai-for-devs.agilebrainslabs.com/modules/m10-agentsworkflows/lab/</guid><description>&lt;p&gt;&lt;strong&gt;Time:&lt;/strong&gt; 45 min | &lt;strong&gt;Day 3 PM&lt;/strong&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="learning-objectives"&gt;Learning Objectives&lt;/h2&gt;
&lt;p&gt;Build a simple agent workflow — the capstone pattern of the workshop. Understand when
agents are the right solution and when they add unnecessary complexity.&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="concept-review-ai-agents"&gt;Concept Review: AI Agents&lt;/h2&gt;
&lt;h3 id="what-makes-an-agent"&gt;What Makes an Agent?&lt;/h3&gt;
&lt;p&gt;An agent is an AI system that can &lt;strong&gt;reason, plan, use tools, and take multi-step actions.&lt;/strong&gt;
The key difference from a chatbot: agents don&amp;rsquo;t just respond — they act.&lt;/p&gt;</description></item></channel></rss>