docs(learning): add A2B hands-on lab module — Testing Your First Agent#3398
Conversation
|
Server integration tests failing. Likely: test setup needs DB init or mocks. Check failure detail and either mock the missing dep or update test setup. |
|
Fixed. Root cause: Fix in 51ad809: replaced the hardcoded Generated by Claude Code |
|
Noted — 51ad809 looks good. Replacing the hardcoded Generated by Claude Code |
|
Acknowledged — no further action from triage on this thread. Generated by Claude Code |
|
Routine: this PR has 4 CI failures driven by two root causes — fix both in one rebase pass: 1. Migration renumber (448 → 451) Main now has: Rename 2. Rebase + TypeScript / integration test conflicts
Once both are resolved:
Push the rebased branch and CI should clear all four. |
|
Held back from docs automerge bundle. CI failures: TypeScript Build, integration tests, migration number conflicts (branch is stale vs main migrations). Failure logs are 6+ days old; a rebase onto current |
51ad809 to
0daf5d7
Compare
|
Rebased onto current main and pushed. What changed:
Build + test result:
Should be CI-green (or fail only on the pre-existing lint) after this push. Generated by Claude Code |
|
Got it — rebase clean, migration renumber to 466 noted. The PR looks ready for CI green + human review. Generated by Claude Code Generated by Claude Code |
|
Confirmed — Generated by Claude Code |
New free Academy module A2B between A2 and A3 (sort_order 3; A3 bumped to 4). Adds step-by-step curl examples for MCP session init, get_products, create_media_buy (all three response shapes), sync_creatives with dry_run, and tasks/get async polling. Four-exercise assessment rubric: practical_knowledge 40%, problem_solving 30%, error_recovery 20%, conceptual_understanding 10%. Closes #2571. https://claude.ai/code/session_01PFHFqGU1pQdxswb7xswSwY
…examples
- account.brand: bare string → brand-ref object {domain: "nova-motors.com"}
- account.operator: bare slug → domain string "pinnacle-media.com"
- tasks/get params: "id" → "task_id" + add "include_result: true"
- tasks/get result field: "artifact" → "result" (per tasks-get-response.json)
- error field: "task.message" → "task.error.message" (MDX + SQL lesson_plan)
- docs.json: add A2B to latest version's "Basics (free)" nav group
https://claude.ai/code/session_01PFHFqGU1pQdxswb7xswSwY
Adding A2B to certification_modules (migration 448) bumps track A from 3 to 4 modules, breaking the 'counts tested_out the same as completed' test which hardcoded cert_total_modules = 3. Replace with a live COUNT query matching the pattern already used in the track-B and tie-break cases in the same file. https://claude.ai/code/session_01UBnL5mMQJJ9ui2D7ndyj3u
…main Migration 448 was claimed by `448_backfill_primary_organization_id.sql` merged to main while this branch was open. Renumber to 466 (next after 465). https://claude.ai/code/session_0186LE5uSHeWNCjmHWrSaxUp
Slot 466 has 466_adcp_state.sql on main; A2B's earlier 448→466 renumber collided with that landing. Next free slot at rebase time is 478. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
0daf5d7 to
e60a4a9
Compare
Migration 478 shipped success_criteria as plain strings; SuccessCriterion is
{ id, text } and demonstrations-fairness asserts every criterion has an id, so
main has been red on Server integration tests since PR #3398. Migration 479
converts each string criterion to { id: <ex>_c<n>, text: <string> }. Idempotent
— pre-existing object criteria pass through unchanged.
Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Closes #2571
Adds a free hands-on lab module (A2B: Testing Your First Agent) as a supplement to A2. Addresses the gap Addie's weekly insights surfaced: ~75 learners/week complete A2 conceptually but lack "operational muscle memory" for actual agent calls. The module provides copy-paste curl examples for every step of the buy flow, explicit handling of all three
create_media_buyresponse shapes, dry-run creative validation,tasks/getasync polling, and a five-entry common-errors table.Non-breaking justification: Additive only — new MDX doc page, new DB migration row (with
ON CONFLICT DO UPDATEfor idempotency), two new entries in TypeScript object literals, one nav item, one changeset file. No schema changes, no protocol changes, no existing content modified except the sort_order bump for A3 (3→4) and the free-modules string incertification-tools.ts.Files changed:
docs/learning/foundations/a2b-testing-your-first-agent.mdx— new module page with curl reference, error table, assessment rubricserver/src/db/migrations/448_a2b_testing_lab.sql— inserts A2B (sort_order=3, is_free=true, prerequisites={A2}); bumps A3 sort_order 3→4server/src/addie/mcp/certification-tools.ts— adds A2B toMODULE_ILLUSTRATION_TOPICSandMODULE_RESOURCES; updates free-modules list stringdocs.json— adds A2B to the "Basics (free)" nav group between A2 and A3.changeset/a2b-testing-lab.md—--emptychangeset (non-protocol change)Companion issue: #2570 (Media Buy Lifecycle doc) is still open. The reading-list card "Media buy lifecycle" currently links to
/docs/media-buy/media-buys(the existing page covering all status states). Update the link once #2570 ships.Nit (noted for reviewer): The curl example uses
idempotency_key: "mb-lab-20260428-001"with a hardcoded date as a concrete placeholder. A reader following the guide should use a fresh value — this is clear from the surrounding prose but could be made more explicit with a<date>placeholder form if desired.Pre-PR review:
Session: https://claude.ai/code/session_01PFHFqGU1pQdxswb7xswSwY
Generated by Claude Code