blob: 902eadffefaa3c982b668ac48472a68b6d892697 [file] [view]
<!-- SPDX-License-Identifier: Apache-2.0
https://www.apache.org/licenses/LICENSE-2.0 -->
<!-- START doctoc generated TOC please keep comment here to allow auto update -->
<!-- DON'T EDIT THIS SECTION, INSTEAD RE-RUN doctoc TO UPDATE -->
**Table of Contents** *generated with [DocToc](https://github.com/thlorenz/doctoc)*
- [Facilitator guide — Building and running AI agents for open-source projects](#facilitator-guide--building-and-running-ai-agents-for-open-source-projects)
- [Who this guide is for](#who-this-guide-is-for)
- [Module overview](#module-overview)
- [Delivery formats](#delivery-formats)
- [Self-paced with facilitator check-ins](#self-paced-with-facilitator-check-ins)
- [Instructor-led workshop (one day)](#instructor-led-workshop-one-day)
- [Two-session intensive](#two-session-intensive)
- [LMS-based self-study](#lms-based-self-study)
- [Environment setup](#environment-setup)
- [In-person](#in-person)
- [Virtual](#virtual)
- [Schedule templates](#schedule-templates)
- [One-day workshop (~7.5 hours with breaks)](#one-day-workshop-75-hours-with-breaks)
- [Two-session intensive](#two-session-intensive-1)
- [Weekly reading group (~11 weeks)](#weekly-reading-group-11-weeks)
- [Per-lesson facilitator notes](#per-lesson-facilitator-notes)
- [Lesson 1 — What agents are](#lesson-1--what-agents-are)
- [Lesson 2 — Working with agents](#lesson-2--working-with-agents)
- [Lesson 3 — Choosing models](#lesson-3--choosing-models)
- [Lesson 4 — Your first skill](#lesson-4--your-first-skill)
- [Lesson 5 — Writing safe skills](#lesson-5--writing-safe-skills)
- [Lesson 6 — Debugging a skill](#lesson-6--debugging-a-skill)
- [Lesson 7 — Writing portable skills](#lesson-7--writing-portable-skills)
- [Lesson 8 — Eval-driven development](#lesson-8--eval-driven-development)
- [Lesson 9 — Agentic and autonomous work](#lesson-9--agentic-and-autonomous-work)
- [Lesson 10 — English as a programming language](#lesson-10--english-as-a-programming-language)
- [Lesson 11 — How to contribute](#lesson-11--how-to-contribute)
- [Customising for your project](#customising-for-your-project)
- [Replacing placeholders](#replacing-placeholders)
- [Adapting examples](#adapting-examples)
- [Selecting lessons](#selecting-lessons)
- [Assessment and progression](#assessment-and-progression)
- [Self-check questions](#self-check-questions)
- [When a learner is not ready to proceed](#when-a-learner-is-not-ready-to-proceed)
- [No formal certification](#no-formal-certification)
- [Frequently asked questions](#frequently-asked-questions)
- [Upstream contribution](#upstream-contribution)
- [Licence](#licence)
<!-- END doctoc generated TOC please keep comment here to allow auto update -->
# Facilitator guide — Building and running AI agents for open-source projects
This guide is for **instructors and facilitators** running the Apache Training
module (this directory) as a structured course. Learners working through the
material self-paced do not need it — the lesson files stand alone.
---
## Who this guide is for
A **facilitator** is anyone organising and running the module for others:
a PMC member running a project on-boarding session, a community mentor
hosting a workshop at a conference, or a team lead running a weekly reading
group. No prior experience teaching AI is required; the lesson files carry the
technical content. This guide covers the logistics, timing, and facilitation
moves that turn static reading material into an active learning session.
---
## Module overview
Eleven lessons totalling approximately 7 hours of learner time:
| Lesson | Topic | Learner time |
|---|---|---|
| 1 | What agents are | 30 min |
| 2 | Working with agents | 30 min |
| 3 | Choosing models | 30 min |
| 4 | Your first skill | 60 min |
| 5 | Writing safe skills | 45 min |
| 6 | Debugging a skill | 45 min |
| 7 | Writing portable skills | 30 min |
| 8 | Eval-driven development | 60 min |
| 9 | Agentic and autonomous work | 45 min |
| 10 | English as a programming language | 30 min |
| 11 | How to contribute | 30 min |
Each lesson follows the same structure: read the source page → work through
four or five exercises (20–40 min) → answer the self-check questions. Exercises need
no computer; they use paper, a whiteboard, or a shared document. The self-check
questions include hidden answers that learners reveal to grade themselves.
---
## Delivery formats
### Self-paced with facilitator check-ins
Learners work through one or two lessons per week on their own. The
facilitator runs a 30-minute weekly check-in to answer questions and debrief
the self-check answers. **Recommended for distributed teams and reading
groups.** Lowest facilitation overhead; high learner flexibility.
### Instructor-led workshop (one day)
Cover all eleven lessons in a single day. Use the one-day schedule in the
[Schedule templates](#schedule-templates) section. Requires a dedicated room
or video-conference session. Best for initial project on-boarding, conference
tutorials, or intensive team training.
### Two-session intensive
Split the module across two half-days or two evenings. Lessons 1–5 (concepts
and first skill) in session one; lessons 6–11 (safety, portability, evals,
autonomy, prose discipline, and contributing) in session two. A natural break point: session two
builds on working skills, so learners have time between sessions to write one
for their own project.
### LMS-based self-study
Upload each lesson file as a unit in your learning management system. Tag
learning time using the per-lesson estimates above. Use the self-check
questions as the in-LMS quiz. The facilitator role reduces to answering
questions in the discussion forum.
---
## Environment setup
### In-person
- **Projector or large screen.** You will display source pages, lesson files,
and learner diagrams. A browser with two tabs (source page and lesson file)
is all you need.
- **Whiteboard or flip chart.** Every exercise mentions "paper or whiteboard";
a shared whiteboard (physical or digital) works well for group exercises.
- **No computers for learners** are required for the exercises themselves. If
learners have laptops, remind them to close them during exercise time to
keep the group in sync.
- **Printed exercise sheets (optional).** The exercises are short enough to
read from a screen, but some facilitators find printed sheets reduce context
switching during exercises.
### Virtual
- **Video-conference platform** with screen sharing and a breakout-room
feature. Breakout rooms let pairs or small groups work through exercises
without the full group listening in.
- **Shared document** (a collaborative whiteboard or a shared markdown file)
replaces the physical whiteboard. One doc per lesson works well; create them
before the session.
- **Paste the exercise text into the shared doc** so learners can write their
answers inline. After the exercise, unmute/reconvene and ask two or three
groups to share.
---
## Schedule templates
### One-day workshop (~7.5 hours with breaks)
| Time | Activity |
|---|---|
| 09:00–09:15 | Welcome, objectives, module overview |
| 09:15–09:45 | Lesson 1 — What agents are |
| 09:45–10:15 | Lesson 2 — Working with agents |
| 10:15–10:45 | Lesson 3 — Choosing models |
| 10:45–11:00 | Break |
| 11:00–12:00 | Lesson 4 — Your first skill (60 min) |
| 12:00–13:00 | Lunch |
| 13:00–13:45 | Lesson 5 — Writing safe skills |
| 13:45–14:30 | Lesson 6 — Debugging a skill |
| 14:30–15:00 | Lesson 7 — Writing portable skills |
| 15:00–15:15 | Break |
| 15:15–16:15 | Lesson 8 — Eval-driven development (60 min) |
| 16:15–17:00 | Lesson 9 — Agentic and autonomous work |
| 17:00–17:30 | Lesson 10 — English as a programming language |
| 17:30–18:00 | Lesson 11 — How to contribute |
| 18:00–18:15 | Wrap-up and next steps |
Reduce to a half-day by covering lessons 1–5 only (concepts and first
skill). Lessons 6–11 form a natural second half.
### Two-session intensive
**Session 1 (~3.5 hours):** Welcome (15 min), lessons 1–5 (175 min), wrap-up
(10 min). Assign: write one skill for your project between sessions.
**Session 2 (~4.5 hours):** Review and share skills from the between-session
assignment (20 min), lessons 6–11 (240 min), retrospective (15 min).
### Weekly reading group (~11 weeks)
One lesson per week, 45 minutes per session. Learners read the source page
and lesson file before the session. The session time is for exercises and
debrief only.
| Week | Lesson | Prep (before session) |
|---|---|---|
| 1 | What agents are | Read `what-agents-are.md` and lesson 1 |
| 2 | Working with agents | Read `working-with-agents.md` and lesson 2 |
| 3 | Choosing models | Read `choosing-models.md` and lesson 3 |
| 4 | Your first skill | Read `your-first-skill.md` and lesson 4 |
| 5 | Writing safe skills | Read `writing-safe-skills.md` and lesson 5 |
| 6 | Debugging a skill | Read `debugging-skills.md` and lesson 6 |
| 7 | Writing portable skills | Read `portable-skills.md` and lesson 7 |
| 8 | Eval-driven development | Read `eval-driven-development.md` and lesson 8 |
| 9 | Agentic and autonomous work | Read `agentic-work.md` and lesson 9 |
| 10 | English as a programming language | Read `english-as-code.md` and lesson 10 |
| 11 | How to contribute | Read `contributing.md` and lesson 11 |
---
## Per-lesson facilitator notes
For each lesson: the core idea to anchor, discussion prompts to deepen the
group's understanding, common misconceptions to correct, and rough timing
guidance for instructor-led delivery.
These timings are for instructor-led delivery, where the reading is compressed
(skimmed, or presented together) to leave most of the slot for exercises. They
deliberately allocate less reading time than the self-paced estimates in each
lesson's own header — a workshop should spend its time on active practice, not
on reading the source page aloud.
---
### Lesson 1 — What agents are
**Core idea.** An agent is a loop: model, tools, loop, context. Every other
idea in the module is a consequence of this structure.
**Timing.** 30 min: 10 min to read the source page together or in pairs,
15 min exercises, 5 min self-check debrief.
**Discussion prompts.**
- "Before this lesson, how would you have described what an AI agent does?
What would you change about that description now?"
- "The source page says the model can only reason about what is in its
context. What does that mean for a skill you want to write for
`<PROJECT>`? What would you need to put into context?"
- "Why does probabilistic behaviour matter more for testing an agent than
for testing a function? What would you do differently?"
**Common misconceptions.**
- *"The agent has access to the whole repo / internet / database."* No — it
can only see what has been explicitly put into context via tools. Draw the
loop on the board and mark where information enters.
- *"Agents are deterministic if you use them the same way each time."*
No — the model is probabilistic. The same input can produce different
outputs. This is not a defect; it is a property to design around.
---
### Lesson 2 — Working with agents
**Core idea.** An agent is a collaborator, not a command-runner. The quality
of what you get out depends on the quality of what you put in.
**Timing.** 30 min: 10 min reading, 15 min exercises, 5 min debrief.
**Discussion prompts.**
- "Think about a task you would want to delegate to an agent in `<PROJECT>`.
Write the first message you would send. Now read it back — is it complete?
What would the agent need to clarify?"
- "The page talks about 'treating outside text as data, not instructions'.
What does that mean in practice for a skill that processes issue comments
from the public?"
- "When should you give up on steering a mid-task agent and start over?
What signals tell you the agent is on the wrong path?"
**Common misconceptions.**
- *"You should give the agent as much context as possible."* More context is
not always better — a long, unfocused context degrades response quality.
The lesson's point is *relevant* context, not maximum context.
- *"If the agent makes a mistake, retry until it gets it right."* Retrying
without changing the prompt will produce the same distribution of answers.
Diagnose first; change the prompt, not just the run count.
---
### Lesson 3 — Choosing models
**Core idea.** There is no single best model for every task; there is a
best model for a given capability, speed, and cost combination, and the
eval suite is what decides.
**Timing.** 30 min: 10 min reading, 15 min exercises, 5 min debrief.
**Discussion prompts.**
- "For a skill that triages incoming issues on `<PROJECT>`, would you reach
for the cheapest available model, the most capable, or something in
between? What information would you need to decide?"
- "The page says 'let evals decide'. What does an eval tell you that a few
manual test runs don't?"
- "A 'judge model' is a model that scores another model's output. When might
you use a judge model for `<PROJECT>` tasks? What could go wrong?"
**Common misconceptions.**
- *"Always use the most capable model — it is most reliable."* Capability
and reliability are different dimensions. The most capable model may be
over-specified, slower, and more expensive for simple triage tasks.
- *"Local models are always worse."* For focused, rule-following tasks with
tight prompts, a local model can match hosted performance at zero cost.
The `local-smoke` eval tag exists precisely to test this claim.
---
### Lesson 4 — Your first skill
**Core idea.** A skill is a plain Markdown file with YAML frontmatter. Writing
one is within reach of any contributor who can open a pull request.
**Timing.** 60 min: 15 min reading, 35 min exercises (the writing exercise
takes longer), 10 min debrief.
**Discussion prompts.**
- "What task in `<PROJECT>` would benefit most from a repeatable agent skill?
Why that one?"
- "What is the difference between a skill and a script? When would you reach
for one instead of the other?"
- "The skill format requires a `description` field that triggers the skill.
If your description is vague, what happens? Try writing two descriptions
for the same skill — one vague, one precise — and compare them."
**Common misconceptions.**
- *"A skill needs to handle every possible edge case before I can ship it."*
No — ship the happy path first, add an eval suite, and expand from there.
A skill without an eval suite is incomplete; a skill with an eval suite can
grow incrementally.
- *"The `description` field is just documentation."* The description is what
the agent reads to decide *when* to invoke the skill. It is a trigger, not
a comment.
---
### Lesson 5 — Writing safe skills
**Core idea.** Safety is not a review gate at the end; it is three properties
built into the skill as you write it: propose-confirm-act, data-not-instructions,
and sandbox-by-default.
**Timing.** 45 min: 10 min reading, 30 min exercises (the propose/confirm
classification exercise is dense), 5 min debrief.
**Discussion prompts.**
- "For the skill you imagined in lesson 4, which steps would need a
confirm gate and which could run without one? Where is the line for
`<PROJECT>`'s context?"
- "What is the difference between treating outside text as data vs.
as instructions? Give an example from `<PROJECT>`'s issue tracker of
text that could be mistaken for an instruction."
- "A skill that reads files only needs no special sandbox configuration.
A skill that writes to the repo, posts comments, or sends email needs
explicit permission entries. Why is the default 'no permission' and not
'ask at runtime'?"
**Common misconceptions.**
- *"Propose-confirm-act slows the agent down — we want automation."*
The confirm step is cheap: it is a human reading a proposal and pressing
one button. Removing it when the action is irreversible (a posted comment,
a merged PR) removes the only safety net.
- *"Data-not-instructions only applies to security-sensitive skills."*
It applies to any skill that processes public or user-supplied text.
Prompt injection is not limited to security contexts.
---
### Lesson 6 — Debugging a skill
**Core idea.** Debugging an agent is diagnostic work: isolate the failing
step, read the transcript, find the moment the agent diverged, and adjust the
prompt or context — not the retry count.
**Timing.** 45 min: 10 min reading, 30 min exercises, 5 min debrief.
**Discussion prompts.**
- "You run a skill three times on the same issue and get three different
verdicts. How do you diagnose whether this is a prompt problem, a context
problem, or just normal variance?"
- "What is the first thing you would look at in a skill transcript when the
output looks wrong?"
- "When is it correct to increase the temperature of a model, and when is
that the wrong move?"
**Common misconceptions.**
- *"Add more examples to the prompt and the skill will stop making mistakes."*
More examples help with format and style. They do not fix ambiguous
instructions — the model will still apply the ambiguous rule, just more
consistently. Fix the rule first, then add examples.
- *"If the eval passes, the skill is correct."* An eval passing means the
skill behaves correctly on the cases you tested. It does not mean it is
correct on all inputs. Eval coverage is a claim about the tested set, not
the full input space.
---
### Lesson 7 — Writing portable skills
**Core idea.** A skill that hard-codes project names, tool paths, or hosting
assumptions only works in one place. Portability comes from placeholders and
config-resolution, not from "making it generic."
**Timing.** 30 min: 10 min reading, 15 min exercises, 5 min debrief.
**Discussion prompts.**
- "Look at the skill draft you started in lesson 4. How many project-specific
strings are in it? What would you need to replace to make it reusable across
`<PROJECT>` and a sister project?"
- "The `<tracker>` placeholder resolves differently for a GitHub project and
a Jira-backed project. Who decides which adapter to load, and when?"
- "What is the difference between a placeholder and a conditional? When is
'if GitHub else Jira' the wrong approach?"
**Common misconceptions.**
- *"My skill only runs on `<PROJECT>`, so portability is not my concern."*
Even a project-internal skill benefits from placeholders: it is easier to
test with a dummy config, easier to explain to new contributors, and easier
to donate upstream if the project later wants to.
- *"Placeholders make the skill harder to read."* A well-named placeholder
(`<tracker>`, `<PROJECT>`) is more readable than a hardcoded URL. It makes
the assumption explicit rather than hiding it in a string.
---
### Lesson 8 — Eval-driven development
**Core idea.** Correctness for an agent is not a binary; it is a distribution
over many inputs. An eval suite is how you measure that distribution and track
it over time.
**Timing.** 60 min: 15 min reading, 35 min exercises (the fixture design
exercise takes longer), 10 min debrief.
**Discussion prompts.**
- "For the skill you started in lesson 4, what are the four cases that
every eval suite should cover? Write them out."
- "A colleague says their skill 'works fine' because they ran it five times
on the same issue and it produced a good result. What is missing from that
claim?"
- "What is the difference between a `local-smoke` eval case and a
`frontier-only` case? Why does that distinction matter for a project that
wants to adopt the skill with a local model?"
**Common misconceptions.**
- *"I will add evals after the skill is stable."* A skill without an eval
suite cannot be called stable. Evals are what establish the baseline that
'stable' means.
- *"More eval cases are always better."* Coverage matters more than count.
Ten well-designed cases covering distinct failure modes are more useful than
a hundred cases that all test the same happy path.
---
### Lesson 9 — Agentic and autonomous work
**Core idea.** Autonomy is not an on/off switch; it is a dial with four
rungs. Moving up the dial is only safe once you have the guardrails and evals
that make it safe — not before.
**Timing.** 45 min: 15 min reading, 25 min exercises, 5 min debrief.
**Discussion prompts.**
- "Where on the supervision dial does `<PROJECT>`'s current automated
work sit? Where would you *want* it to sit in twelve months, and what
guardrails would you need to add first?"
- "The propose-confirm-act pattern is the guardrail for supervised
automation. What is the equivalent guardrail for unattended automation?"
- "A skill that runs on a cron schedule and posts comments autonomously
has a larger blast radius than one that posts under human review. What
does 'larger blast radius' mean concretely for `<PROJECT>`'s community?"
**Common misconceptions.**
- *"Fully autonomous is the goal — human review is just friction."*
Autonomy is a tool, not an end state. The question is not 'how do we
remove the human?' but 'at what rung is the risk acceptable given the
guardrails we have?'
- *"Compounding errors are unlikely in practice."* In a short session they
are unlikely. In a long autonomous run, the probability compounds across
each action taken. One misclassified issue that triggers an incorrect
follow-up action that triggers a public reply illustrates the chain.
---
### Lesson 10 — English as a programming language
**Core idea.** The words in a skill are the program. Ambiguity is a bug
class. The four disambiguating moves — define terms, say what done looks
like, state boundaries, name edge cases — are the tools for closing gaps.
**Timing.** 30 min: 10 min reading, 15 min exercises, 5 min debrief.
**Discussion prompts.**
- "Find a word in a skill you have read (or written) that is not defined.
What would a model do with it? Write a one-sentence definition that closes
the gap."
- "The page says 'ambiguity is the new class of bug'. Give an example of
a wording ambiguity in a skill that would not be caught by a linter or
type-checker but would cause the agent to behave unexpectedly."
- "DRY applies to prose as well as code. Find two skills in the framework
that define the same concept differently. What is the cost of that
duplication, and how would you fix it?"
**Common misconceptions.**
- *"Natural language is inherently imprecise — there is nothing you can do."*
Natural language *can* be precise. Technical writing, legal text, and
formal specifications are all precise natural language. The discipline is
learnable and the four moves are concrete.
- *"The model will ask for clarification if something is ambiguous."*
Models do not reject ambiguous instructions; they act on a plausible
interpretation. The result is silent divergence between intent and
execution.
---
### Lesson 11 — How to contribute
**Core idea.** Most of Magpie is prose the agent executes, so contributing is
within reach of anyone who can write precisely. The four first contributions —
fix a skill, improve a doc, add a pattern, write a new skill — all follow the
same spec-first, eval-backed, reviewed path.
**Timing.** 30 min: 10 min reading, 15 min exercises, 5 min debrief.
**Discussion prompts.**
- "Of the four first-contribution types (fix a skill, improve a doc, add a
pattern, write a new skill), which would you start with for `<PROJECT>`, and
why that one?"
- "Take a change you might make to one of `<PROJECT>`'s skills. Does it alter a
rule, a flow, or a contract? Walk the group through whether it needs a spec
update."
- "You are reviewing a contributor's first skill PR. Which of the five
framework rules would you check first, and what would you look for in the
diff?"
**Common misconceptions.**
- *"You need to be a strong programmer to contribute."* No — most contributions
are prose the agent executes. Clear thinking and precise writing are the core
skills; systems programming is only needed for the tool layer (`tools/`).
- *"Evals can come in a follow-up PR."* No — a skill without a matching eval
suite is not finished, and a PR that defers the evals will not pass review.
The eval suite ships in the same PR as the skill.
---
## Customising for your project
### Replacing placeholders
Every exercise uses `<PROJECT>` where a real project name would appear.
Before running the module, decide whether to:
1. **Replace globally** — do a find-and-replace in your copies of the lesson
files. Fast; produces more readable exercise sheets.
2. **Ask learners to substitute as they go** — keeps the original files
unmodified; slightly more cognitive load during exercises.
Other placeholders you may encounter:
| Placeholder | What it represents |
|---|---|
| `<PROJECT>` | The adopting project's name |
| `<tracker>` | The issue tracker (e.g. GitHub Issues, JIRA) |
| `<upstream>` | The main repository (e.g. `org/repo`) |
| `<security-list>` | The private security mailing list |
### Adapting examples
The source pages draw examples from open-source project maintenance. If your
audience works in a different domain (internal tooling, data pipelines,
etc.), swap the examples. The lesson structure remains the same; only the
illustrative context changes.
### Selecting lessons
You do not need to teach all eleven lessons in one sitting. A team that already
has experience with agent concepts and wants to focus on safety can start at
lesson 5. A team writing its first eval suite can teach lessons 1, 4, and 8
as a standalone mini-module. The lessons reference each other but are
designed to be understandable on their own.
---
## Assessment and progression
### Self-check questions
Each lesson ends with five or six self-check questions with hidden answers. Learners
reveal the answers themselves and grade their own understanding. This is
intentional: the goal is self-knowledge, not formal grading.
In an instructor-led session, use the self-check as a **group debrief**:
read each question aloud and ask learners to write a brief answer before you
reveal the answer. Gaps between a learner's answer and the reference answer
are the most productive discussion point.
### When a learner is not ready to proceed
If a learner cannot answer two or more self-check questions for a lesson,
suggest re-reading the source page before moving on. The lessons build
sequentially: a learner who does not understand context (lesson 1) will
struggle with evals (lesson 8).
### No formal certification
This module does not issue certificates. The intended outcome is that a
learner can read, write, debug, and evaluate a skill for their own project.
The evidence of that outcome is a skill they have written and an eval suite
that passes — not a quiz score.
---
## Frequently asked questions
**"Do learners need a running agent installation?"**
No. The exercises are paper-based or whiteboard-based. Learners can work
through all eleven lessons without installing any software. Lesson 4 (your first
skill) suggests writing a skill file; that requires only a text editor.
**"Can I skip the exercises and just present the source pages?"**
You can, but learners retain substantially less without active practice.
Exercises in this module are not optional enrichment; they are the mechanism
by which learners move from reading to application.
**"What if learners have very different backgrounds — some have never seen
a language model, others use one daily?"**
Lesson 1 is the equaliser: it defines terms that even experienced users often
hold loosely (the difference between a model and an agent, what context means
precisely). Spend extra time there. Experienced learners often find the
precision useful even if the concept is familiar.
**"How do I handle learners who want to build something live during the
module?"**
Encourage it as optional enrichment, but do not let live-building block
the group. Live building sessions fit better in the hands-on lab
([`tutorials.md`](../tutorials.md)) than during the lesson sequence. Point
interested learners there after the module.
**"Are there formal assessment instruments for each lesson?"**
Not yet. The self-check questions are the primary formative assessment.
Formal rubrics and summative assessments are planned for a future iteration
of the module; facilitators who develop them are encouraged to contribute
them back upstream (see [Upstream contribution](#upstream-contribution)).
---
## Upstream contribution
This module is shaped for contribution to
[Apache Training](https://training.apache.org/) so it can be taught beyond
the projects that adopt this framework. If you run the module and find gaps —
a lesson that generates persistent confusion, a discussion prompt that
falls flat, a misconception this guide does not address — please:
1. Open an issue or pull request against this repository (the framework
repo, not your adopter repo) with the proposed change.
2. If you are contributing to Apache Training directly, the module's
Apache-2.0 licence permits it. Coordinate with the Apache Training
project on format requirements before submitting.
3. Add your project's experience to the module's pilot record so future
facilitators can calibrate against real data.
Contributions that improve the instructor guide carry the same
`Generated-by:` convention as contributions to the lesson files: if you use
a generative tool to draft a section, note it in the commit message following
[ASF Generative Tooling Guidance](https://www.apache.org/legal/generative-tooling-guidance.html).
---
## Licence
Apache License 2.0 (PRINCIPLE 17). Pages written with help from AI carry a
`Generated-by:` note in their commit message following ASF Generative Tooling
Guidance.