This is an automated email from the ASF dual-hosted git repository.

potiuk pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/airflow-steward.git


The following commit(s) were added to refs/heads/main by this push:
     new ee21d85  docs: scope expansion (Pairing mode) + mode-letter rename 
(#99)
ee21d85 is described below

commit ee21d85affe042cbe1a8f5d6e5c8d9a0b45beb8c
Author: Jarek Potiuk <[email protected]>
AuthorDate: Sun May 10 12:44:12 2026 +0200

    docs: scope expansion (Pairing mode) + mode-letter rename (#99)
    
    Two changes landed together because the rename also introduces
    the new mode:
    
    1. Apply Russell Spitzer's kickoff-thread feedback: extend the
       project's scope from agent-assisted maintainership to
       maintainership AND development. New "Pairing" mode covers
       developer-side dev-cycle skills (multi-agent dev workflow,
       self-review and pre-flight patterns, scoped agent-drafted
       patches under the developer's own driver's seat). Mentorship
       is intrinsic to Pairing — agents handle implementation-detail
       review so the human conversation stays on design, reasoning,
       and the ASF contributor → committer → PMC progression.
       Pairing ships before Auto-merge in the project's automation
       roadmap.
    
    2. Rename Mode A/B/C/D to single-word names so references read
       without lookup:
         Mode A → Triage
         Mode B → Mentoring
         Mode C → Drafting
         (new)  → Pairing
         Mode D → Auto-merge
    
       Auto-merge's gating sentence updated to require Triage,
       Mentoring, Drafting, AND Pairing running for two quarters
       before it can ship.
    
    Touches MISSION.md, docs/modes.md (canonical taxonomy doc),
    docs/rfcs/RFC-AI-0004.md, docs/security/threat-model.md,
    docs/mentoring/{README,spec}.md, the pr-management-mentor skill
    files, the projects/_template/mentoring-config.md scaffold, the
    .asf.yaml description, and the skill-validator code + tests
    (ALLOWED_MODES updated). DocToc TOCs regenerated by prek.
    
    Generated-by: Claude Code (Claude Opus 4.7)
---
 .asf.yaml                                          |   2 +-
 .claude/skills/pr-management-code-review/SKILL.md  |   2 +-
 .claude/skills/pr-management-mentor/SKILL.md       |  20 +--
 .../pr-management-mentor/comment-templates.md      |   4 +-
 .claude/skills/pr-management-mentor/tone-checks.md |   6 +-
 .claude/skills/pr-management-triage/SKILL.md       |   2 +-
 .claude/skills/security-cve-allocate/SKILL.md      |   2 +-
 .claude/skills/security-issue-deduplicate/SKILL.md |   2 +-
 .claude/skills/security-issue-fix/SKILL.md         |   2 +-
 .../skills/security-issue-import-from-md/SKILL.md  |   2 +-
 .../skills/security-issue-import-from-pr/SKILL.md  |   2 +-
 .claude/skills/security-issue-import/SKILL.md      |   2 +-
 .claude/skills/security-issue-invalidate/SKILL.md  |   2 +-
 .claude/skills/security-issue-sync/SKILL.md        |   2 +-
 MISSION.md                                         |  34 +++---
 docs/mentoring/README.md                           |  10 +-
 docs/mentoring/spec.md                             |  53 ++++----
 docs/modes.md                                      | 135 +++++++++++++--------
 docs/rfcs/RFC-AI-0004.md                           |   8 +-
 docs/security/threat-model.md                      |  44 +++----
 projects/_template/mentoring-config.md             |  12 +-
 .../src/skill_validator/__init__.py                |   4 +-
 tools/skill-validator/tests/test_validator.py      |  10 +-
 23 files changed, 203 insertions(+), 159 deletions(-)

diff --git a/.asf.yaml b/.asf.yaml
index 1655abe..8613e43 100644
--- a/.asf.yaml
+++ b/.asf.yaml
@@ -18,7 +18,7 @@
 # https://cwiki.apache.org/confluence/display/INFRA/git+-+.asf.yaml+features
 ---
 github:
-  description: "Agent-assisted maintainership framework for Apache projects — 
triage (Mode A) and agent-authored fixes with human review (Mode C); mentoring 
(Mode B) and narrowly-scoped auto-merge (Mode D) on the roadmap."
+  description: "Agent-assisted maintainership and development framework for 
Apache projects — Triage and Drafting (agent-authored fixes with human review); 
Mentoring, Pairing (developer-side dev-cycle), and Auto-merge on the roadmap."
   homepage: "https://github.com/apache/airflow-steward";
   labels:
     # Note that GitHub only supports <=20 labels/topics per repo! Pipeline
diff --git a/.claude/skills/pr-management-code-review/SKILL.md 
b/.claude/skills/pr-management-code-review/SKILL.md
index 0495761..0fdc490 100644
--- a/.claude/skills/pr-management-code-review/SKILL.md
+++ b/.claude/skills/pr-management-code-review/SKILL.md
@@ -1,6 +1,6 @@
 ---
 name: maintainer-review
-mode: A
+mode: Triage
 description: |
   Walk a maintainer through deep code review of open pull requests on the 
configured `<upstream>` repo (default: read from `<project-config>/project.md → 
upstream_repo`). The
   default working list — referred to throughout the docs as **"my reviews"** — 
is the union of five signals on the
diff --git a/.claude/skills/pr-management-mentor/SKILL.md 
b/.claude/skills/pr-management-mentor/SKILL.md
index 6217866..6488cd2 100644
--- a/.claude/skills/pr-management-mentor/SKILL.md
+++ b/.claude/skills/pr-management-mentor/SKILL.md
@@ -1,6 +1,6 @@
 ---
 name: pr-management-mentor
-mode: B
+mode: Mentoring
 description: |
   Draft a teaching-register comment on a single GitHub issue or
   PR thread on the configured `<upstream>` repo (default: read
@@ -13,7 +13,7 @@ description: |
   maintainer confirmation before posting via `gh`. Does **not**
   triage (no labels, draft toggles, closes), review code (no
   diff comments, approve / request-changes), or open PRs — those
-  are Mode A and Mode C surfaces. Bows out and pings the
+  are Triage and Drafting surfaces. Bows out and pings the
   configured maintainer team when the thread reaches
   `max_agent_turns`, when the contributor pushes back on a
   substantive design point, when the topic enters
@@ -27,7 +27,7 @@ when_to_use: |
   contributor, missing repro / convention". Not appropriate for
   PRs already mid-review with a maintainer (the agent should
   not talk over a human reviewer), for security-sensitive
-  threads (Mode B always hands off these), or for any thread
+  threads (Mentoring always hands off these), or for any thread
   where the maintainer has *deliberately* not replied yet — ask
   before invoking.
 license: Apache-2.0
@@ -42,7 +42,7 @@ license: Apache-2.0
 
 # pr-management-mentor
 
-**Status: experimental.** First prototype of Mode B
+**Status: experimental.** First prototype of Mentoring
 ([conversational mentoring](../../../docs/mentoring/spec.md)). The
 skill exists to make the spec executable on a single thread at
 a time so we can iterate on tone wording, convention pointers,
@@ -58,7 +58,7 @@ answer, for the invoked thread, one question:
 > what does it say?*
 
 If the answer is "no" (thread is already on track, maintainer
-already engaging, scope exceeds Mode B), the skill says so and
+already engaging, scope exceeds Mentoring), the skill says so and
 exits without posting. The agent's silence is a feature, not a
 failure.
 
@@ -118,7 +118,7 @@ is short on purpose — one comment in, one decision out:
    audience.
 3. **Out-of-scope check**. If the thread title or recent
    comments touch any `out_of_scope_topics` entry, **do not
-   draft**. Surface "this thread is out of Mode B scope —
+   draft**. Surface "this thread is out of Mentoring scope —
    handing off" and run the [hand-off](hand-off.md) flow.
 4. **Maintainer-already-engaged check**. If a maintainer (login
    in the configured committers team, see `pr-management-config.md →
@@ -178,7 +178,7 @@ maintainer reads the thread.
 - **Triage.** No labels, no draft toggles, no closes.
   [`pr-management-triage`](../pr-management-triage/SKILL.md)
   owns that.
-- **Authoring fixes.** No PRs opened. That is Mode C.
+- **Authoring fixes.** No PRs opened. That is Drafting.
 - **Predicting maintainer decisions.** The skill never says
   "the maintainers will probably want X". It says "a
   maintainer will reply on this; in the meantime, here's the
@@ -188,7 +188,7 @@ maintainer reads the thread.
   voice; the agent does not have a list-subscriber identity.
 - **Auto-fire.** Every invocation is opt-in by a maintainer.
   No cron, no webhook, no auto-trigger. Auto-fire is a
-  Mode-D-shaped problem and inherits Mode D's sequencing
+  Auto-merge-shaped problem and inherits Auto-merge's sequencing
   constraint.
 
 ## Cross-references
@@ -197,10 +197,10 @@ maintainer reads the thread.
   the full spec this skill implements.
 - [`docs/mentoring/README.md`](../../../docs/mentoring/README.md) —
   family overview + status.
-- [`docs/modes.md` § Mode 
B](../../../docs/modes.md#mode-b--conversational-mentoring) —
+- [`docs/modes.md` § Mentoring](../../../docs/modes.md#mentoring) —
   current implementation status (experimental once this skill
   ships).
 - 
[`projects/_template/mentoring-config.md`](../../../projects/_template/mentoring-config.md)
 —
   adopter scaffold.
-- [`MISSION.md` § Mode B](../../../MISSION.md#technical-scope) —
+- [`MISSION.md` § Mentoring](../../../MISSION.md#technical-scope) —
   RAI empowerment framing.
diff --git a/.claude/skills/pr-management-mentor/comment-templates.md 
b/.claude/skills/pr-management-mentor/comment-templates.md
index 4a8b651..fdd628c 100644
--- a/.claude/skills/pr-management-mentor/comment-templates.md
+++ b/.claude/skills/pr-management-mentor/comment-templates.md
@@ -96,7 +96,7 @@ Listed so reviewers see the choices and can push back.
   agent posting "welcome to the project!" before the
   maintainer has the chance is rude and cuts the maintainer
   out of the relationship. If a project wants a welcome
-  comment, that is a triage-level concern, not a Mode B
+  comment, that is a triage-level concern, not a Mentoring
   concern.
 - **Closing comment**. The skill never posts on a thread it is
   about to close — closing belongs to triage. If the
@@ -104,7 +104,7 @@ Listed so reviewers see the choices and can push back.
   skill exits without commenting and lets
   [`pr-management-triage`](../pr-management-triage/SKILL.md)
   handle the close.
-- **Approval / "looks good"**. Mode B does not signal review
+- **Approval / "looks good"**. Mentoring does not signal review
   outcomes. Even a casual "this looks like a good direction"
   shifts contributor expectations.
   [`pr-management-code-review`](../pr-management-code-review/SKILL.md)
diff --git a/.claude/skills/pr-management-mentor/tone-checks.md 
b/.claude/skills/pr-management-mentor/tone-checks.md
index 5583a45..a7ac4e6 100644
--- a/.claude/skills/pr-management-mentor/tone-checks.md
+++ b/.claude/skills/pr-management-mentor/tone-checks.md
@@ -23,7 +23,7 @@ The checks run in order. The first failure stops the run.
 
 | # | Rule | Detection |
 |---|---|---|
-| 1 | No praise without specificity. | Reject if the draft contains "great 
question", "thanks for the contribution", "awesome", "amazing", "fantastic", 
"love this", or any standalone praise sentence (a sentence whose only content 
is positive affect). Praise *with* a specific reference ("nice catch on the 
off-by-one in `foo()`") is fine, but Mode B does not have that information by 
construction; in practice this rule means: no praise. |
+| 1 | No praise without specificity. | Reject if the draft contains "great 
question", "thanks for the contribution", "awesome", "amazing", "fantastic", 
"love this", or any standalone praise sentence (a sentence whose only content 
is positive affect). Praise *with* a specific reference ("nice catch on the 
off-by-one in `foo()`") is fine, but Mentoring does not have that information 
by construction; in practice this rule means: no praise. |
 | 2 | No restating the contributor's message. | Reject if the draft contains 
"so what you're saying is", "if I understand correctly", "you mentioned that", 
or any sentence whose content is a paraphrase of the contributor's most recent 
message. |
 | 3 | No AI self-reference outside the footer. | Reject if the body 
(everything before `<ai_attribution_footer>`) contains "as an AI", "I'm an AI", 
"I cannot", "as a language model", "I was trained", "my training", or "I don't 
have access to". The footer says it once. The body says nothing. |
 | 4 | No speaking for the maintainer. | Reject if the draft contains "the 
maintainers will probably", "the maintainers want", "the team would prefer", or 
any forward-looking claim about a maintainer decision. The skill says "a 
maintainer will reply" and stops. |
@@ -32,7 +32,7 @@ The checks run in order. The first failure stops the run.
 | 7 | Footer present and verbatim. | Reject if the draft does not end with the 
literal `<ai_attribution_footer>` expansion from 
`<project-config>/mentoring-config.md`. Reject if anything follows the footer. |
 | 8 | Author tagged once. | Reject if `@<author>` appears zero times or more 
than once. The first line tags; the rest of the comment does not. |
 | 9 | No paraphrased docs. | Reject if the body contains a quoted block of 
more than two lines from a project doc. The convention is link, don't quote. |
-| 10 | No predictions about review outcome. | Reject if the draft contains 
"looks good", "this should be approved", "this will probably be merged", "I 
don't think this will land". Mode B does not signal review outcomes. |
+| 10 | No predictions about review outcome. | Reject if the draft contains 
"looks good", "this should be approved", "this will probably be merged", "I 
don't think this will land". Mentoring does not signal review outcomes. |
 
 ---
 
@@ -67,5 +67,5 @@ Surfaced so reviewers can push back.
   the right length depends on the intervention; a why-question
   answer can legitimately need a few sentences of context.
 - **Inclusivity / language scan.** Important, but lives in the
-  framework's general writing standards, not in the Mode B
+  framework's general writing standards, not in the Mentoring
   tone checks specifically.
diff --git a/.claude/skills/pr-management-triage/SKILL.md 
b/.claude/skills/pr-management-triage/SKILL.md
index 5b43280..9d9129a 100644
--- a/.claude/skills/pr-management-triage/SKILL.md
+++ b/.claude/skills/pr-management-triage/SKILL.md
@@ -1,6 +1,6 @@
 ---
 name: pr-management-triage
-mode: A
+mode: Triage
 description: |
   Sweep open pull requests on the configured `<upstream>` repo
   (default: read from `<project-config>/project.md →
diff --git a/.claude/skills/security-cve-allocate/SKILL.md 
b/.claude/skills/security-cve-allocate/SKILL.md
index 4836e8b..ac269e2 100644
--- a/.claude/skills/security-cve-allocate/SKILL.md
+++ b/.claude/skills/security-cve-allocate/SKILL.md
@@ -1,6 +1,6 @@
 ---
 name: security-cve-allocate
-mode: A
+mode: Triage
 description: |
   Walk a security team member through allocating a CVE for an
   <tracker> tracking issue. Prints the ASF Vulnogram
diff --git a/.claude/skills/security-issue-deduplicate/SKILL.md 
b/.claude/skills/security-issue-deduplicate/SKILL.md
index 6f35ac7..b5dafa0 100644
--- a/.claude/skills/security-issue-deduplicate/SKILL.md
+++ b/.claude/skills/security-issue-deduplicate/SKILL.md
@@ -1,6 +1,6 @@
 ---
 name: security-issue-deduplicate
-mode: A
+mode: Triage
 description: |
   Merge two <tracker> tracking issues that describe the same
   root-cause vulnerability (typically discovered independently by two
diff --git a/.claude/skills/security-issue-fix/SKILL.md 
b/.claude/skills/security-issue-fix/SKILL.md
index c0a6356..974be3d 100644
--- a/.claude/skills/security-issue-fix/SKILL.md
+++ b/.claude/skills/security-issue-fix/SKILL.md
@@ -1,6 +1,6 @@
 ---
 name: security-issue-fix
-mode: C
+mode: Drafting
 description: |
   Attempt to fix a security issue tracked in <tracker> by
   implementing the change in a public <upstream> PR. Runs the
diff --git a/.claude/skills/security-issue-import-from-md/SKILL.md 
b/.claude/skills/security-issue-import-from-md/SKILL.md
index 0d0202c..6bfb7bf 100644
--- a/.claude/skills/security-issue-import-from-md/SKILL.md
+++ b/.claude/skills/security-issue-import-from-md/SKILL.md
@@ -1,6 +1,6 @@
 ---
 name: security-issue-import-from-md
-mode: A
+mode: Triage
 description: |
   Open one or more `<tracker>` tracking issues from a markdown file
   containing a batch of security findings (typically the output of an
diff --git a/.claude/skills/security-issue-import-from-pr/SKILL.md 
b/.claude/skills/security-issue-import-from-pr/SKILL.md
index 7dadc94..30aad04 100644
--- a/.claude/skills/security-issue-import-from-pr/SKILL.md
+++ b/.claude/skills/security-issue-import-from-pr/SKILL.md
@@ -1,6 +1,6 @@
 ---
 name: security-issue-import-from-pr
-mode: A
+mode: Triage
 description: |
   Open a tracking issue in <tracker> for a security-relevant fix that
   has already been opened (or merged) as a public PR in <upstream>,
diff --git a/.claude/skills/security-issue-import/SKILL.md 
b/.claude/skills/security-issue-import/SKILL.md
index 57f9474..aa61897 100644
--- a/.claude/skills/security-issue-import/SKILL.md
+++ b/.claude/skills/security-issue-import/SKILL.md
@@ -1,6 +1,6 @@
 ---
 name: security-issue-import
-mode: A
+mode: Triage
 description: |
   Scan <security-list> for reports that have not yet been
   copied into <tracker> as tracking issues, present the proposed
diff --git a/.claude/skills/security-issue-invalidate/SKILL.md 
b/.claude/skills/security-issue-invalidate/SKILL.md
index 909fb2b..24b82d6 100644
--- a/.claude/skills/security-issue-invalidate/SKILL.md
+++ b/.claude/skills/security-issue-invalidate/SKILL.md
@@ -1,6 +1,6 @@
 ---
 name: security-issue-invalidate
-mode: A
+mode: Triage
 description: |
   Close an `<tracker>` tracking issue as invalid: apply the
   `invalid` label, remove the scope label, post a short closing
diff --git a/.claude/skills/security-issue-sync/SKILL.md 
b/.claude/skills/security-issue-sync/SKILL.md
index d0df918..3a331dd 100644
--- a/.claude/skills/security-issue-sync/SKILL.md
+++ b/.claude/skills/security-issue-sync/SKILL.md
@@ -1,6 +1,6 @@
 ---
 name: security-issue-sync
-mode: A
+mode: Triage
 description: |
   Synchronize a security issue in <tracker> with the state of its
   GitHub discussion, the <security-list> mailing thread, and any
diff --git a/MISSION.md b/MISSION.md
index 5982162..4dfd327 100644
--- a/MISSION.md
+++ b/MISSION.md
@@ -31,17 +31,18 @@
 
 ## Abstract
 
-Apache `<PROJECT_NAME>` is platform infrastructure for **agent-assisted 
repository maintainership** — across the ASF and equally for any open-source 
project that wants in. Three streams of day-to-day work:
+Apache `<PROJECT_NAME>` is platform infrastructure for **agent-assisted 
repository maintainership and development** — across the ASF and equally for 
any open-source project that wants in. Four streams of day-to-day work:
 
 - **Security-issue handling** end-to-end — inbound triage, deduplication, 
agent-drafted reporter replies under human review, CVE allocation hand-off, 
audit-logged status tracking through publication.
 - **Issue and PR triage and management** — including audit-tool findings 
(Apache Verum, Apache Caer, equivalents) ingested as actionable issues.
 - **Conversational contributor mentoring** — meeting new contributors where 
they are.
+- **Development-cycle skills for committers and contributors, mentorship built 
in** — multi-agent development workflows, self-review and pre-flight patterns, 
scoped agent-drafted patches under the developer's own driver's seat. 
Mentorship is intrinsic, not a separate mode: the agent handles 
implementation-detail review (formatting, conventions, lint-grade nits) so the 
human conversation between contributor and maintainer — and between peer 
maintainers — stays on design, reasoning, and th [...]
 
 One conviction underneath: each project picks how much automation actually 
fits. The platform makes a range of automation levels possible without picking 
one for you, and "project" means both an ASF PMC and any non-ASF community — 
neither is a second-class citizen.
 
 ## Proposal
 
-The Apache Software Foundation establishes the Apache `<PROJECT_NAME>` Project 
as a Top-Level Project by Board resolution, scope: agent-assisted 
repository-maintainership infrastructure under the Apache License, Version 2.0.
+The Apache Software Foundation establishes the Apache `<PROJECT_NAME>` Project 
as a Top-Level Project by Board resolution, scope: agent-assisted repository 
**maintainership and development** infrastructure under the Apache License, 
Version 2.0.
 
 ## Proposed Names
 
@@ -60,21 +61,24 @@ The initial committee will discuss and vote on the final 
name. Starting candidat
 
 Open-source projects share the same shape of problem: contributors keep 
arriving, reviewers don't scale to match, and the highest-stakes work — 
security-issue handling — is the *most* manual, the *most* reviewer-intensive, 
and the *most* embarrassing to get wrong. The two complaints heard most loudly 
— **onboarding latency** and **review-cycle latency** — are the priorities the 
ASF Responsible AI Initiative names. `<PROJECT_NAME>` is the operational layer 
for those goals: not a position  [...]
 
-Three design choices set the project apart from "just bolt a code-review bot 
on it":
+Four design choices set the project apart from "just bolt a code-review bot on 
it":
 
-**Project autonomy is the structural starting point — and "project" includes 
non-ASF.** Four modes (A – triage, B – mentoring, C – agent-authored fix with 
human review, D – narrowly-scoped auto-merge) ship as separate, 
independently-toggleable skills. Each project picks the modes that match its 
culture and risk tolerance. ASF integrations (private lists, Vulnogram CVE 
flows, PMC roles, ASF release process) live behind clean configuration 
boundaries; non-ASF adopters swap them for whateve [...]
+**Project autonomy is the structural starting point — and "project" includes 
non-ASF.** Five modes — **Triage**, **Mentoring**, **Drafting** (agent-authored 
fix with human review), **Pairing** (developer-side dev-cycle skills with 
mentorship intrinsic), and **Auto-merge** (narrowly-scoped fix-and-merge) — 
ship as separate, independently-toggleable skills. Each project picks the modes 
that match its culture and risk tolerance. ASF integrations (private lists, 
Vulnogram CVE flows, PMC role [...]
 
-**Security-issue handling is a load-bearing use case, not a footnote on 
triage.** The work that became `<PROJECT_NAME>` started as a framework for 
handling ASF security reports — high-stakes, high-procedure, 
every-step-needs-an-audit-trail flows that turn out to be exactly what 
agent-assisted-with-human-gates is good at. Every Mode A/B/C/D capability has 
to clear the security-flow bar (private content stays private, every outbound 
draft has a human signature, every state change is logged [...]
+**Security-issue handling is a load-bearing use case, not a footnote on 
triage.** The work that became `<PROJECT_NAME>` started as a framework for 
handling ASF security reports — high-stakes, high-procedure, 
every-step-needs-an-audit-trail flows that turn out to be exactly what 
agent-assisted-with-human-gates is good at. Every mode has to clear the 
security-flow bar (private content stays private, every outbound draft has a 
human signature, every state change is logged) before it ships.  [...]
 
 **Mentoring is a first-class mode, not a side-effect of triage.** The lever 
the ASF — and the wider open-source world — actually needs and the one 
off-the-shelf agent tooling skips. Meets new contributors where they are, 
explains conventions, points at the relevant prior PR, asks the clarifying 
question *before* a reviewer burns time on it. This is where the Responsible AI 
Initiative's contributor-empowerment goal gets operationalised: the mode that 
produces the outcomes RAI is trying to [...]
 
+**Development-cycle skills sit alongside maintainership skills, with 
mentorship intrinsic to them.** Maintainers also write code; contributors live 
the development side of every project. The same agentic primitives that triage 
an inbound report or mentor a new contributor compose into a committer's or 
contributor's own dev loop: multi-agent review pipelines that catch issues 
before submission, self-review patterns that pre-flight a PR against project 
conventions, scoped agent-drafted pat [...]
+
 ## Initial Goals
 
 - Stand up `github.com/apache/<PROJECT_NAME>` with project skeleton, CI, and 
contributor docs.
 - Provision standard ASF infrastructure: `private@`, `dev@`, `commits@`; 
GitHub Issues; site at `<PROJECT_NAME>.apache.org`.
-- Get modes A–C running against **3–4 friendly pilots within 3 months** — at 
least one ASF PMC running the full security-issue flow (Airflow, given the 
project's lineage), one ASF PMC running just triage + mentoring (Arrow or ATR), 
and **at least one non-ASF project from day one** (Python core has folks 
interested). Non-ASF in the first cohort, not later — the 
project-governance-agnosticism claim is only worth what it can prove.
+- Get **Triage**, **Mentoring**, and **Drafting** running against **3–4 
friendly pilots within 3 months** — at least one ASF PMC running the full 
security-issue flow (Airflow, given the project's lineage), one ASF PMC running 
just Triage + Mentoring (Arrow or ATR), and **at least one non-ASF project from 
day one** (Python core has folks interested). Non-ASF in the first cohort, not 
later — the project-governance-agnosticism claim is only worth what it can 
prove.
 - Cut a first Apache release through the standard process within 3 months of 
resolution adoption, with artefacts usable directly by non-ASF adopters (no 
ASF-only assumption baked into the install path).
-- Wire modes A–C up to Apache Verum and Apache Caer findings, and to at least 
one non-ASF audit-tool equivalent (a CodeQL output stream is the likely first 
non-ASF case).
+- Wire **Triage**, **Mentoring**, and **Drafting** up to Apache Verum and 
Apache Caer findings, and to at least one non-ASF audit-tool equivalent (a 
CodeQL output stream is the likely first non-ASF case).
+- **Ship at least one Pairing skill family** in v1, with mentorship hooks 
intrinsic — multi-agent review or pre-flight self-review — demonstrated against 
a friendly-pilot project's contributor dev loop, so the 
maintainership-and-development scope claim and the 
human-relationship-preservation claim both have working code to point at.
 - Settle on a contributor-sentiment evaluation methodology with Apache Plumb 
(separate proposal). Eval covers both ASF and non-ASF cohorts so the data isn't 
an internal-ASF artefact.
 - **Ship the privacy and security posture** as a release-blocking part of v1 — 
sandbox setup, clean-env wrapper, privacy-LLM gate, PII redactor, signed 
releases, pinned-tools manifest. Not a follow-up.
 - **Ship the maintainer-education stream** alongside v1 — pattern catalogue, 
"your first skill" path, first scheduled workshops. The platform is only as 
adoptable as the docs that go with it.
@@ -82,17 +86,19 @@ Three design choices set the project apart from "just bolt 
a code-review bot on
 
 ## Technical scope
 
-A platform substrate — issue and PR ingestion, GitHub API write-back, 
conversation threading, audit logging, integration with adjacent systems 
(Gmail, PonyMail, Vulnogram, generic CVE submission, an extensible adapter 
layer so non-ASF adopters plug in their own equivalents) — with four modes 
built on top.
+A platform substrate — issue and PR ingestion, GitHub API write-back, 
conversation threading, audit logging, integration with adjacent systems 
(Gmail, PonyMail, Vulnogram, generic CVE submission, an extensible adapter 
layer so non-ASF adopters plug in their own equivalents) — with five modes 
built on top.
 
 [`docs/modes.md`](docs/modes.md) is the honest snapshot mapping each mode 
below to the skills currently shipped, with a `stable / experimental / proposed 
/ off` status legend.
 
-**Mode A — triage assistant** for issues, security reports, and PRs. *On the 
security side:* spots inbound reports, classifies against prior triaged cases, 
surfaces likely duplicates, identifies anything that should not have been filed 
publicly, proposes initial routing to the security team. *On the regular side:* 
suggests labels, spots duplicates, links related discussions, proposes routing. 
Every output is a suggestion the human signs off on; nothing lands without 
review. Lowest risk surface.
+**Triage** — for issues, security reports, and PRs. *On the security side:* 
spots inbound reports, classifies against prior triaged cases, surfaces likely 
duplicates, identifies anything that should not have been filed publicly, 
proposes initial routing to the security team. *On the regular side:* suggests 
labels, spots duplicates, links related discussions, proposes routing. Every 
output is a suggestion the human signs off on; nothing lands without review. 
Lowest risk surface.
+
+**Mentoring** — conversational. Joins issue and PR threads in a deliberately 
teaching register: clarifying questions, pointers to project conventions and 
docs, an explanation of *why* a change is being asked for, paired examples from 
similar prior PRs, clean hand-off to a human reviewer when the question exceeds 
what an agent should answer. The differentiator and the highest-value 
project-side mode — where the Responsible AI Initiative's empowerment outcome 
lives.
 
-**Mode B — conversational mentoring**. Joins issue and PR threads in a 
deliberately teaching register: clarifying questions, pointers to project 
conventions and docs, an explanation of *why* a change is being asked for, 
paired examples from similar prior PRs, clean hand-off to a human reviewer when 
the question exceeds what an agent should answer. The differentiator and the 
highest-value mode — where the Responsible AI Initiative's empowerment outcome 
lives.
+**Drafting** — agent-authored fixes with human review. The agent drafts a fix 
for a well-scoped problem (a tracked issue, a triaged security report with team 
consensus on scope, an Apache Verum or Apache Caer finding, a failing test with 
an obvious cause, a documentation hole) and opens a PR. Every PR is reviewed 
and merged by a human committer; the agent never merges its own work. For 
security PRs the public surface strips CVE / private context per the project's 
disclosure policy, so th [...]
 
-**Mode C — agent-authored fixes with human review**. The agent drafts a fix 
for a well-scoped problem (a tracked issue, a triaged security report with team 
consensus on scope, an Apache Verum or Apache Caer finding, a failing test with 
an obvious cause, a documentation hole) and opens a PR. Every PR is reviewed 
and merged by a human committer; the agent never merges its own work. For 
security PRs the public surface strips CVE / private context per the project's 
disclosure policy, so the  [...]
+**Pairing** — developer-side dev-loop skills, mentorship intrinsic. Beyond the 
project-side modes above — which describe the project's agent presence on its 
own infrastructure — the platform also ships skills that maintainers and 
contributors run in their *own* dev loop: multi-agent review pipelines, 
self-review and pre-flight patterns, scoped fix drafting under the developer's 
driver's seat. Pairing skills don't make state changes on behalf of the 
project; they're the developer's indivi [...]
 
-**Mode D — narrowly-scoped fix-and-merge**. Auto-merge restricted to 
objectively boring change classes — lint fixes, dependency bumps inside an 
allow-list, license-header insertion, formatting, broken-link repair. 
Per-project AND per-class opt-in; every auto-merged change is reversibly 
logged. **Not turned on** until A/B/C have been running for two quarters and 
contributor-sentiment data says the project is healthier, not just faster. 
Security-class changes are explicitly *out* of D — no [...]
+**Auto-merge** — narrowly-scoped fix-and-merge. Auto-merge restricted to 
objectively boring change classes — lint fixes, dependency bumps inside an 
allow-list, license-header insertion, formatting, broken-link repair. 
Per-project AND per-class opt-in; every auto-merged change is reversibly 
logged. **Not turned on** until Triage, Mentoring, Drafting, **and Pairing** 
have been running for two quarters and contributor-sentiment data says the 
project is healthier, not just faster. Security-c [...]
 
 The substrate also handles per-project config (which modes are on, eligible 
change classes, who reviews, how disputes route, where security reports come 
from, where audit findings come from, what the release process expects), full 
audit logging and rollback for every agent-authored change — security and 
non-security alike — and an integration hook for the Apache Plumb eval 
framework so the contributor-empowerment claim has measurable data behind it.
 
@@ -149,7 +155,7 @@ The ASF mission line — *"to provide software for the public 
good"* — has alw
 
 ## Initial PMC composition (target)
 
-PMC composition matters more than most because the project's social stakes are 
higher than its technical stakes. The PMC will be filled from existing ASF 
members, and potentially Apache Airflow PMC members where implementation of 
A/B/C is already live and used — coordinated with Membership before the 
resolution is adopted.
+PMC composition matters more than most because the project's social stakes are 
higher than its technical stakes. The PMC will be filled from existing ASF 
members, and potentially Apache Airflow PMC members where implementation of 
Triage, Mentoring, and Drafting is already live and used — coordinated with 
Membership before the resolution is adopted.
 
 - **Size:** 7–9 members.
 - **Diversity:** at least three distinct organisational affiliations; no 
single employer holding a majority.
@@ -210,7 +216,7 @@ The contributor experience is the most sensitive surface in 
any open-source proj
 
 The project commits to:
 
-- **Mentoring-first sequencing** — Modes A and B before C and D.
+- **Mentoring-first sequencing** — Triage and Mentoring before Drafting and 
Pairing; Auto-merge last.
 - **ASF Privacy and Legal involvement from project start**, not 
retrospectively.
 - **Contributor-sentiment evidence as a graduation criterion** for new 
automation modes alongside the standard technical-maturity criteria.
 - **Tight feedback loop** — the SKILL-based approach with human oversight lets 
agentic skills self-update from maintainer / triager feedback and contributor 
responses; mistakes get corrected and message tone is tuned to the 
communication style the PMC selects.
diff --git a/docs/mentoring/README.md b/docs/mentoring/README.md
index 7a55e18..9622257 100644
--- a/docs/mentoring/README.md
+++ b/docs/mentoring/README.md
@@ -18,7 +18,7 @@
 spec — tone guide, hand-off protocol, adopter contract — ahead
 of any skill code so the project's tone choices are reviewable
 independently of runtime behaviour. See
-[`MISSION.md` § Mode B](../../MISSION.md#technical-scope) for
+[`MISSION.md` § Mentoring](../../MISSION.md#technical-scope) for
 the *why*.
 
 Why a framework skill family? Mentoring is named in
@@ -31,7 +31,7 @@ at once.
 
 ## Status
 
-Mode B is **proposed**. No SKILL.md exists yet. This directory
+Mentoring is **proposed**. No SKILL.md exists yet. This directory
 currently contains:
 
 - [**`spec.md`**](spec.md) — what the future skill should do:
@@ -39,7 +39,7 @@ currently contains:
 
 A prototype skill (`pr-management-mentor`, working name) lands
 in a follow-up PR after this spec is reviewed. The skill ships
-flagged `mode: B` + `experimental` per the
+flagged `mode: Mentoring` + `experimental` per the
 [mode lifecycle](../modes.md#mode-lifecycle).
 
 ## Adopter contract (proposed)
@@ -51,8 +51,8 @@ template at
 
 ## Cross-references
 
-- [`MISSION.md` § Mode B](../../MISSION.md#technical-scope) —
+- [`MISSION.md` § Mentoring](../../MISSION.md#technical-scope) —
   mode definition, RAI empowerment framing.
-- [`docs/modes.md` § Mode B](../modes.md#mode-b--conversational-mentoring) —
+- [`docs/modes.md` § Mentoring](../modes.md#mentoring) —
   implementation status.
 - [`spec.md`](spec.md) — full spec.
diff --git a/docs/mentoring/spec.md b/docs/mentoring/spec.md
index f970b48..78f91b2 100644
--- a/docs/mentoring/spec.md
+++ b/docs/mentoring/spec.md
@@ -2,7 +2,7 @@
 <!-- DON'T EDIT THIS SECTION, INSTEAD RE-RUN doctoc TO UPDATE -->
 **Table of Contents**  *generated with 
[DocToc](https://github.com/thlorenz/doctoc)*
 
-- [Mode B — conversational mentoring 
(spec)](#mode-b--conversational-mentoring-spec)
+- [Mentoring (spec)](#mentoring-spec)
   - [Status](#status)
   - [Scope](#scope)
   - [Triggers](#triggers)
@@ -20,21 +20,21 @@
 <!-- SPDX-License-Identifier: Apache-2.0
      https://www.apache.org/licenses/LICENSE-2.0 -->
 
-# Mode B — conversational mentoring (spec)
+# Mentoring (spec)
 
 ## Status
 
-Proposed. No skill code yet. This document defines what Mode B
+Proposed. No skill code yet. This document defines what Mentoring
 should do once it exists; it lands ahead of any skill so the
 project's tone choices and hand-off rules are reviewable
 independently from runtime behaviour. See
-[`MISSION.md` § Mode B](../../MISSION.md#technical-scope) and
-[`docs/modes.md` § Mode B](../modes.md#mode-b--conversational-mentoring)
+[`MISSION.md` § Mentoring](../../MISSION.md#technical-scope) and
+[`docs/modes.md` § Mentoring](../modes.md#mentoring)
 for sequencing.
 
 ## Scope
 
-Mode B joins issue and PR threads in a teaching register. The
+Mentoring joins issue and PR threads in a teaching register. The
 agent's job is to lower the barrier to a contributor's *next
 useful action*. Concretely, in scope:
 
@@ -56,21 +56,20 @@ useful action*. Concretely, in scope:
 
 Out of scope:
 
-- *Reviewing code*. That is Mode A's
+- *Reviewing code*. That is Triage's
   
[`pr-management-code-review`](../../.claude/skills/pr-management-code-review/SKILL.md)
-  skill. Mode B does not approve, request changes, or post inline
+  skill. Mentoring does not approve, request changes, or post inline
   diff comments.
-- *Triage routing*. That is Mode A's
+- *Triage routing*. That is Triage's
   [`pr-management-triage`](../../.claude/skills/pr-management-triage/SKILL.md)
-  skill. Mode B does not assign labels, mark draft, or close PRs.
-- *Authoring fixes*. That is Mode C. Mode B does not open PRs or
+  skill. Mentoring does not assign labels, mark draft, or close PRs.
+- *Authoring fixes*. That is Drafting. Mentoring does not open PRs or
   edit code.
-- *Speaking for the maintainer team* on disputed decisions. Mode
-  B says "a maintainer will weigh in" and stops.
+- *Speaking for the maintainer team* on disputed decisions. Mentoring says "a 
maintainer will weigh in" and stops.
 
 ## Triggers
 
-Mode B never posts unprompted on a thread it has not been
+Mentoring never posts unprompted on a thread it has not been
 invoked on. The skill is opt-in per invocation. Three trigger
 paths:
 
@@ -84,7 +83,7 @@ paths:
    classifies a PR as "first contributor, missing repro" (or
    equivalent triage flag), the maintainer can chain
    `/pr-management-mentor` on that PR. The two skills compose;
-   Mode B does not run inside Mode A by default.
+   Mentoring does not run inside Triage by default.
 3. **Issue-thread invocation**. Same opt-in, on issues rather
    than PRs, for the "missing version / missing repro" case.
 
@@ -92,8 +91,8 @@ Why no auto-fire: posting a teaching-register comment without
 explicit human authorization risks the agent talking past a
 maintainer who is mid-conversation with the contributor, or
 posting on a thread where the maintainer has *deliberately* not
-replied yet. Auto-fire is a Mode-D-shaped problem and inherits
-Mode D's sequencing constraint.
+replied yet. Auto-fire is a Auto-merge-shaped problem and inherits
+Auto-merge's sequencing constraint.
 
 ## Teaching register — tone guide
 
@@ -131,7 +130,7 @@ feeling managed.
 - AI self-reference outside the attribution footer. The footer
   says it once; the body should not.
 - Speaking for the maintainer. "The maintainers will probably
-  want X" — Mode B does not predict maintainer decisions. It
+  want X" — Mentoring does not predict maintainer decisions. It
   says "a maintainer will reply on this; in the meantime,
   here's the convention" and stops.
 
@@ -153,12 +152,12 @@ documented two-stage process.
 The agent bows out and pings a human when:
 
 1. The contributor pushes back on a substantive design point.
-   Mode B answers "why is this convention" once. If the
-   contributor disagrees, Mode B does not argue; it pings the
+   Mentoring answers "why is this convention" once. If the
+   contributor disagrees, Mentoring does not argue; it pings the
    maintainer.
 2. The question touches security, embargoed work, deprecation
    timing, or anything not covered by public documentation.
-   Mode B does not improvise on these surfaces.
+   Mentoring does not improvise on these surfaces.
 3. The thread reaches `<max_agent_turns>` (configurable, default
    2). After that the agent stops engaging on the thread
    regardless of content.
@@ -191,7 +190,7 @@ Required keys:
 Surfaced here so reviewers can weigh in before the skill is
 built.
 
-- **Should Mode B post on the project's mailing list, or only
+- **Should Mentoring post on the project's mailing list, or only
   on GitHub threads?** Current draft: GitHub only. Mailing-list
   mentoring lives in the human maintainer's voice; the agent
   does not have a list-subscriber identity.
@@ -199,20 +198,20 @@ built.
   footer, or distinct?** Current draft: same wording, different
   step token. One contributor-trust calibration is easier to
   reason about than two.
-- **Should the maintainer review every Mode B draft, or can
+- **Should the maintainer review every Mentoring draft, or can
   they pre-authorize a class of comments (e.g., "always ok to
   ask for repro")?** Current draft: every draft is reviewed.
-  Pre-authorization is Mode-D-shaped and inherits the same
+  Pre-authorization is Auto-merge-shaped and inherits the same
   sequencing constraint.
 
 ## Cross-references
 
-- [`MISSION.md` § Mode B](../../MISSION.md#technical-scope) —
+- [`MISSION.md` § Mentoring](../../MISSION.md#technical-scope) —
   the mode definition + responsible-AI framing.
-- [`docs/modes.md` § Mode B](../modes.md#mode-b--conversational-mentoring) —
+- [`docs/modes.md` § Mentoring](../modes.md#mentoring) —
   current implementation status (proposed).
 - 
[`.claude/skills/pr-management-triage/comment-templates.md`](../../.claude/skills/pr-management-triage/comment-templates.md)
 —
   closest existing surface; informs the tone-footer convention
-  but is not Mode B.
+  but is not Mentoring.
 - [`AGENTS.md`](../../AGENTS.md) — repository-level rules every
   mode inherits.
diff --git a/docs/modes.md b/docs/modes.md
index 404c6df..e0c62eb 100644
--- a/docs/modes.md
+++ b/docs/modes.md
@@ -5,10 +5,11 @@
 - [Modes — MISSION taxonomy mapped to current 
skills](#modes--mission-taxonomy-mapped-to-current-skills)
   - [Status legend](#status-legend)
   - [Modes at a glance](#modes-at-a-glance)
-  - [Mode A — triage](#mode-a--triage)
-  - [Mode B — conversational mentoring](#mode-b--conversational-mentoring)
-  - [Mode C — agent-authored fixes with human 
review](#mode-c--agent-authored-fixes-with-human-review)
-  - [Mode D — narrowly-scoped 
fix-and-merge](#mode-d--narrowly-scoped-fix-and-merge)
+  - [Triage](#triage)
+  - [Mentoring](#mentoring)
+  - [Drafting](#drafting)
+  - [Pairing](#pairing)
+  - [Auto-merge](#auto-merge)
   - [Outside the modes](#outside-the-modes)
   - [Mode lifecycle](#mode-lifecycle)
   - [Cross-references](#cross-references)
@@ -20,12 +21,14 @@
 
 # Modes — MISSION taxonomy mapped to current skills
 
-[`MISSION.md`](../MISSION.md) frames the framework around four
-toggleable **modes** of agent-assisted repository maintainership:
-**A** (triage), **B** (mentoring), **C** (agent-authored fixes
-with human review), and **D** (narrowly-scoped fix-and-merge).
-Each adopting project picks the modes that match its culture and
-risk tolerance.
+[`MISSION.md`](../MISSION.md) frames the framework around five
+toggleable **modes** of agent-assisted repository maintainership
+and development: **Triage**, **Mentoring**, **Drafting**
+(agent-authored fixes with human review), **Pairing**
+(developer-side dev-cycle skills with mentorship intrinsic), and
+**Auto-merge** (narrowly-scoped fix-and-merge). Each adopting
+project picks the modes that match its culture and risk
+tolerance.
 
 This document maps that taxonomy to the skills that currently
 ship in the framework. It is the **honest snapshot** — modes
@@ -41,21 +44,22 @@ sequencing commitments behind them.
 | **stable** | Implemented, in use by at least one adopter, behaviour expected 
to remain backward-compatible across minor framework versions. |
 | **experimental** | Implemented but not yet covered by an adopter pilot or 
contributor-sentiment evaluation; shape may change. |
 | **proposed** | Designed in [`MISSION.md`](../MISSION.md) but no skill yet 
exists; tracked for future implementation. |
-| **off** | Deliberately not implemented per a MISSION-level sequencing rule 
(Mode D). |
+| **off** | Deliberately not implemented per a MISSION-level sequencing rule 
(Auto-merge). |
 
 ## Modes at a glance
 
 | Mode | Purpose | Status | Skill count |
 |---|---|---|---|
-| **A** — triage | Issues, security reports, PRs: spot, classify, route, 
surface duplicates. Every output is a suggestion the human signs off on. | 
stable (security) / experimental (pr-management) | 10 |
-| **B** — conversational mentoring | Joins issue and PR threads in a teaching 
register: clarifying questions, pointers to project conventions, paired 
examples from prior PRs, hand-off to a human when scope exceeds the agent. | 
proposed | 0 |
-| **C** — agent-authored fixes with human review | Agent drafts a fix for a 
well-scoped problem and opens a PR; every PR is reviewed and merged by a human 
committer. | stable (security-only); generic case proposed | 1 |
-| **D** — narrowly-scoped fix-and-merge | Auto-merge restricted to objectively 
boring change classes (lint, dependency bumps inside an allow-list, 
license-header insertion, formatting, broken-link repair). | off | 0 |
+| **Triage** | Issues, security reports, PRs: spot, classify, route, surface 
duplicates. Every output is a suggestion the human signs off on. | stable 
(security) / experimental (pr-management) | 10 |
+| **Mentoring** | Joins issue and PR threads in a teaching register: 
clarifying questions, pointers to project conventions, paired examples from 
prior PRs, hand-off to a human when scope exceeds the agent. | proposed | 0 |
+| **Drafting** | Agent drafts a fix for a well-scoped problem and opens a PR; 
every PR is reviewed and merged by a human committer. | stable (security-only); 
generic case proposed | 1 |
+| **Pairing** | Developer-side dev-cycle skills with mentorship intrinsic — 
multi-agent review pipelines, self-review and pre-flight patterns, scoped fix 
drafting under the developer's driver's seat. | proposed | 0 |
+| **Auto-merge** | Auto-merge restricted to objectively boring change classes 
(lint, dependency bumps inside an allow-list, license-header insertion, 
formatting, broken-link repair). | off | 0 |
 
 A few skills sit **outside** the mode taxonomy by design — see
 [Outside the modes](#outside-the-modes) below.
 
-## Mode A — triage
+## Triage
 
 Inbound report and PR triage. The lowest-risk surface and the
 foundation everything else builds on. Skills propose labels,
@@ -81,21 +85,21 @@ Two notes on the boundaries:
 - `pr-management-code-review` is a deeper variant of triage —
   the agent reads diff and surrounding code rather than only
   metadata, but the output is still a suggestion for the human
-  reviewer. It belongs to Mode A by the same rule.
+  reviewer. It belongs to Triage by the same rule.
 - `security-cve-allocate` is procedural rather than classificatory
-  (CVE allocation happens after assessment), but it shares Mode A's
+  (CVE allocation happens after assessment), but it shares Triage's
   shape: the agent prepares a paste-ready artefact, the human
   PMC member submits it. Listed here for navigability.
 
-## Mode B — conversational mentoring
+## Mentoring
 
 **Status: proposed. No skill yet.**
 
-[`MISSION.md` § Mode B](../MISSION.md#technical-scope) names this
-the highest-value mode and the one off-the-shelf agent tooling
-skips. Per MISSION sequencing, the spec — tone guide, hand-off
-protocol, adopter contract — lands ahead of any skill code so
-the project's tone choices are reviewable independently from
+[`MISSION.md` § Mentoring](../MISSION.md#technical-scope) names this
+the highest-value project-side mode and the one off-the-shelf agent
+tooling skips. Per MISSION sequencing, the spec — tone guide,
+hand-off protocol, adopter contract — lands ahead of any skill code
+so the project's tone choices are reviewable independently from
 the runtime behaviour.
 
 | Doc | Purpose |
@@ -106,14 +110,14 @@ the runtime behaviour.
 
 A prototype skill (`pr-management-mentor`, working name) lands
 in a follow-up PR after the spec is reviewed; it ships flagged
-`mode: B` + `experimental`.
+`mode: Mentoring` + `experimental`.
 
 The closest existing surface is
 
[`pr-management-triage/comment-templates.md`](../.claude/skills/pr-management-triage/comment-templates.md),
-which carries Mode A classification responses — informational,
-not pedagogical. It is **not** Mode B.
+which carries Triage classification responses — informational,
+not pedagogical. It is **not** Mentoring.
 
-## Mode C — agent-authored fixes with human review
+## Drafting
 
 The agent drafts a fix for a well-scoped problem (a tracked
 issue, a triaged security report with team consensus on scope, a
@@ -125,37 +129,71 @@ the agent never merges its own work.
 |---|---|---|
 | [`security-issue-fix`](../.claude/skills/security-issue-fix/SKILL.md) | 
Draft a fix PR in `<upstream>` from a triaged, CVE-allocated tracker. | stable 
(security-only) |
 
-**Generic Mode C is proposed.** [`MISSION.md`](../MISSION.md)
+**Generic Drafting is proposed.** [`MISSION.md`](../MISSION.md)
 names lint fixes, audit-tool findings (Apache Verum, Apache Caer,
 CodeQL, equivalents), failing tests with obvious causes, and
-documentation holes as in-scope for Mode C beyond the security
+documentation holes as in-scope for Drafting beyond the security
 case. None of those are implemented yet; security-issue-fix is
-the only Mode C skill in the framework today.
+the only Drafting skill in the framework today.
 
-For security-class Mode C PRs, the public surface strips CVE and
-private context per the project's disclosure policy, so the
+For security-class Drafting PRs, the public surface strips CVE
+and private context per the project's disclosure policy, so the
 public surface stays clean until the embargo lifts — see
 [`AGENTS.md` § 
Confidentiality](../AGENTS.md#confidentiality-of-the-tracker-repository)
 for the rules the skill enforces.
 
-## Mode D — narrowly-scoped fix-and-merge
+## Pairing
+
+**Status: proposed. No skill yet.**
+
+[`MISSION.md` § Pairing](../MISSION.md#technical-scope) introduces
+this mode as the developer-side counterpart to the project-side
+modes. Where Triage / Mentoring / Drafting / Auto-merge describe
+the agent's presence on the project's own infrastructure, Pairing
+skills run in the maintainer's or contributor's *own* dev loop —
+multi-agent review pipelines, self-review and pre-flight patterns,
+scoped fix drafting under the developer's driver's seat.
+**Mentorship is intrinsic** to Pairing skills: the agent handles
+the mechanical, implementation-detail review (formatting,
+conventions, lint-grade nits) so the human conversation between
+contributor and maintainer — and between peer maintainers —
+stays on design, reasoning, and the trade-offs the project cares
+about. Pairing skills are the platform's mechanism for protecting
+the **ASF contribution path** (contributor → committer → PMC)
+against being eroded by automation that replaces, rather than
+augments, the human-to-human relationships that path is built on.
+
+Pairing skills don't make state changes on behalf of the project;
+they share the same skill format and security posture as the
+project-side modes, so a maintainer who already trusts the
+framework for Triage gets the same posture for the patches they
+write themselves.
+
+**Sequencing.** Pairing ships before Auto-merge in the project's
+automation roadmap — full auto-merge of maintainer-driven changes
+follows only after Pairing has established that human reasoning
+and relationships, not implementation chatter, are the
+load-bearing parts of the workflow.
+
+## Auto-merge
 
 **Status: off. Deliberately not implemented.**
 
-[`MISSION.md` § Mode D](../MISSION.md#technical-scope) holds
-auto-merge off until Modes A, B, and C have been running for
-two quarters and contributor-sentiment data says the project is
-healthier, not just faster. Security-class changes are
-explicitly **out** of Mode D — no auto-merge ever touches
-anything embargoed or CVE-tagged.
+[`MISSION.md` § Auto-merge](../MISSION.md#technical-scope) holds
+auto-merge off until Triage, Mentoring, Drafting, and Pairing
+have been running for two quarters and contributor-sentiment
+data says the project is healthier, not just faster.
+Security-class changes are explicitly **out** of Auto-merge — no
+auto-merge ever touches anything embargoed or CVE-tagged.
 
 The framework's current `.asf.yaml` configuration reflects this
 posture: `pull_requests.allow_auto_merge` is set to `false`
 ([`.asf.yaml`](../.asf.yaml)).
 
-When Mode D ships, the eligible change classes will be declared
-per-adopter in `<project-config>/` and gated by an allow-list
-that the framework refuses to grow without an adopter PR.
+When Auto-merge ships, the eligible change classes will be
+declared per-adopter in `<project-config>/` and gated by an
+allow-list that the framework refuses to grow without an
+adopter PR.
 
 ## Outside the modes
 
@@ -191,11 +229,12 @@ A mode moves through four states as it matures:
    production, behaviour is backward-compatible across minor
    framework versions. The default state for skills shipped to
    adopters.
-4. **graduated-to-D-eligible** *(future state, Mode A/B/C only)* —
-   the mode has run stable for two quarters with positive
-   contributor-sentiment evidence, the framework will start
-   considering an equivalent change class for Mode D auto-merge.
-   This state does not exist yet because Mode D itself is off.
+4. **graduated-to-Auto-merge-eligible** *(future state; Triage,
+   Mentoring, Drafting, and Pairing only)* — the mode has run
+   stable for two quarters with positive contributor-sentiment
+   evidence, the framework will start considering an equivalent
+   change class for Auto-merge. This state does not exist yet
+   because Auto-merge itself is off.
 
 A mode can be **retracted** from any state. The retraction
 triggers MISSION names — sustained negative contributor
diff --git a/docs/rfcs/RFC-AI-0004.md b/docs/rfcs/RFC-AI-0004.md
index 9ce1e82..ca457ed 100644
--- a/docs/rfcs/RFC-AI-0004.md
+++ b/docs/rfcs/RFC-AI-0004.md
@@ -137,16 +137,16 @@ A skill that triages 200 PRs in 10 minutes is doing 200 
state changes. If the ma
 
 1. **Propose-then-apply, always.** The agent's natural unit of work is "here 
is the proposal, will you confirm?". The "apply" pass that follows confirmation 
is mechanical — no reasoning, no surprises, no second proposal hidden inside.
 2. **Per-proposal confirmation, no batch yes.** Multiple state changes in the 
same response require a confirmation surface that lets the maintainer say "1, 
3, 4 yes; 2 no". `all` as a one-keystroke shortcut is acceptable; the agent 
must still surface every item before honouring it.
-3. **No standing pre-approvals.** A skill MUST NOT support a config switch 
that says "auto-approve every X-class proposal". The boundary between Mode C 
(agent-authored fix with human review) and Mode D (narrowly-scoped auto-merge) 
is exactly this; Mode D is governed by a separate, much stricter contract (see 
Principle 1, *narrow auto-merge carve-out* below).
+3. **No standing pre-approvals.** A skill MUST NOT support a config switch 
that says "auto-approve every X-class proposal". The boundary between Drafting 
(agent-authored fix with human review) and Auto-merge (narrowly-scoped 
auto-merge) is exactly this; Auto-merge is governed by a separate, much 
stricter contract (see Principle 1, *narrow auto-merge carve-out* below).
 4. **Drafts, never sends.** Outbound communication (email, chat) is 
**drafted** by the agent and stored in the communication system's drafts 
folder. The maintainer reviews and presses Send. The framework MUST NOT have a 
"yes, send the draft" path that bypasses the human read.
 5. **Audit log of every confirmation.** Every applied state change writes a 
structured audit-log entry: timestamp, maintainer identity, proposal text, 
applied diff, triggering skill. Open-source maintenance is a public-trust 
activity; the trail makes future review possible.
 
 ### Narrow auto-merge carve-out
 
-Mode D ("narrowly-scoped fix-and-merge", in Apache Steward (to be renamed)'s 
terminology) is the explicit exception. It permits auto-merge, but only after 
**all** of the following gate conditions hold:
+Auto-merge ("narrowly-scoped fix-and-merge", in Apache Steward (to be 
renamed)'s terminology) is the explicit exception. It permits auto-merge, but 
only after **all** of the following gate conditions hold:
 
 - The change class is on a per-project, per-class allow-list (lint fixes, 
dependency bumps within an allow-list, license headers, formatting, broken-link 
repair). Security-class changes are explicitly out.
-- The project has been running Modes A/B/C with HITL confirmation for at least 
two release cycles, and a contributor-sentiment evaluation says the project is 
healthier, not just faster.
+- The project has been running Triage, Mentoring, and Drafting with HITL 
confirmation for at least two release cycles, and a contributor-sentiment 
evaluation says the project is healthier, not just faster.
 - Every auto-merged change is reversibly logged; reverts are one keystroke 
away.
 
 The carve-out exists because lint-rebase-format has marginal human value and 
should not require a human in the loop forever. It is **off by default** in the 
reference implementation. A project that turns it on without first running the 
manual loop has skipped the proof.
@@ -415,4 +415,4 @@ The Apache Steward (to be renamed) project is happy to 
consult on the lift — s
 
 ## Acknowledgements
 
-This RFC distils principles operationalised in the Apache Steward (to be 
renamed) reference implementation. The PMC roster and collaborator list (see 
[`MISSION.md`](https://github.com/apache/airflow-steward/blob/main/MISSION.md)) 
includes the people whose discussion, code, and incident-review work shaped 
these principles. The framing of the principles here owes a particular debt to 
the 2026-05 prompt-injection audit 
([gist](https://gist.github.com/andrew/0bc8bdaac6902656ccf3b1400ad160f0) [...]
+This RFC distils principles operationalised in the Apache Steward (to be 
renamed) reference implementation. The PMC roster and collaborator list (see 
[`MISSION.md`](https://github.com/apache/airflow-steward/blob/main/MISSION.md)) 
includes the people whose discussion, code, and incident-review work shaped 
these principles. The framing of the principles here owes a particular debt to 
the 2026-05 prompt-injection audit 
([gist](https://gist.github.com/andrew/0bc8bdaac6902656ccf3b1400ad160f0) [...]
diff --git a/docs/security/threat-model.md b/docs/security/threat-model.md
index 5197529..bb6e0fc 100644
--- a/docs/security/threat-model.md
+++ b/docs/security/threat-model.md
@@ -59,13 +59,13 @@ This document is the authoritative threat model for that 
automation.
 It enumerates the trust boundaries, the adversaries that may attack
 each boundary, the asset each adversary is after, and the
 mitigations the framework relies on. It is a release-blocking
-artefact: a Mode C skill that touches a security tracker without
+artefact: a Drafting skill that touches a security tracker without
 a STRIDE row in this document is, by construction, unreviewed.
 
 The intended readers are:
 
 - security-team members evaluating whether to enable a skill in
-  Mode A or Mode C against their tracker;
+  Triage or Drafting against their tracker;
 - contributors proposing a new skill in the security family or a
   change that crosses one of the trust boundaries below;
 - ASF Security and the project PMC during a pre-release security
@@ -93,11 +93,11 @@ In scope for this document:
 The following are out of scope and should be addressed in their
 own threat model when they are introduced:
 
-- Mode D auto-merge — not implemented in v1; see
-  [`docs/modes.md`](../modes.md). When proposed, Mode D requires
+- Auto-merge auto-merge — not implemented in v1; see
+  [`docs/modes.md`](../modes.md). When proposed, Auto-merge requires
   its own threat model entry and a separate ASF Security review.
-- generic Mode C beyond `security-issue-fix` — proposed but not
-  shipped. Each new Mode C skill ships with its own STRIDE row in
+- generic Drafting beyond `security-issue-fix` — proposed but not
+  shipped. Each new Drafting skill ships with its own STRIDE row in
   the [STRIDE matrix](#stride-matrix-per-skill-family).
 - the underlying LLM provider's infrastructure — treated as a
   trusted component subject to its own provider-side threat model.
@@ -118,11 +118,11 @@ The threat model is valid only while these assumptions 
hold. A
 violation of any assumption invalidates the corresponding mitigation
 and triggers a re-audit.
 
-1. **The maintainer reviewing a Mode C output is competent and
-   acting in good faith.** Mode C ships agent-authored fixes
+1. **The maintainer reviewing a Drafting output is competent and
+   acting in good faith.** Drafting ships agent-authored fixes
    gated on human review; the human is the final defence against
-   subtle agent error. A maintainer who rubber-stamps Mode C output
-   collapses Mode C into Mode D, which is explicitly out of scope.
+   subtle agent error. A maintainer who rubber-stamps Drafting output
+   collapses Drafting into Auto-merge, which is explicitly out of scope.
 2. **The agent host's filesystem sandbox is enforced by the runtime,
    not by the agent's good behaviour.** `permissions.deny` entries
    are advisory and visible to the agent; `sandbox.filesystem.denyRead`
@@ -154,9 +154,9 @@ and triggers a re-audit.
 - **Embargo window** — the period between a report arriving on
   `security@` and the public advisory being published. During this
   window the existence and detail of the issue are confidential.
-- **Mode A / B / C / D** — see [`docs/modes.md`](../modes.md). Mode A
-  is read-only triage; Mode B is mentoring; Mode C is agent-authored
-  PRs gated on human review; Mode D is auto-merge (not shipped).
+- **Triage / Mentoring / Drafting / Auto-merge** — see 
[`docs/modes.md`](../modes.md). Triage
+  is read-only triage; Mentoring is mentoring; Drafting is agent-authored
+  PRs gated on human review; Auto-merge is auto-merge (not shipped).
 - **Privileged egress** — any agent action that publishes content
   outside the agent host: a comment on the public upstream, a CVE
   record submission, a mailing-list reply, a `gh pr create`.
@@ -390,7 +390,7 @@ Skills: 
[`security-issue-import`](../../.claude/skills/security-issue-import/SKI
 
 | ID | STRIDE | Adversary | Boundary | Threat | Mitigation |
 |---|---|---|---|---|---|
-| A.1 | T (Tampering) | P1 | B1 | Reporter embeds prompt-injection in mail 
body to alter import classification. | M.1 (redactor input pass), M.2 
(instruction-data separation), M.6 (Mode A is read-only on upstream). |
+| A.1 | T (Tampering) | P1 | B1 | Reporter embeds prompt-injection in mail 
body to alter import classification. | M.1 (redactor input pass), M.2 
(instruction-data separation), M.6 (Triage is read-only on upstream). |
 | A.2 | I (Info disclosure) | P1 | B1→B3 | Mail body contains a "please 
confirm receipt with full prior thread" payload aimed at making the agent reply 
with tracker contents. | M.3 (canned-response templates only), M.4 (no 
auto-reply on import — Step 1 is human-acknowledged). |
 | A.3 | T | P1 | B1 | Markdown report file contains crafted YAML/JSON 
front-matter to alter `security-issue-import-from-md` behaviour. | M.1, M.5 
(front-matter ignored unless on a known allowlist). |
 | A.4 | E (Elevation of privilege) | P1 | B1 | Mail body asks the agent to 
"now act as security-issue-fix and apply this patch upstream". | M.7 
(skill-scope discipline — a skill cannot invoke another skill mid-run), M.6. |
@@ -433,8 +433,8 @@ Skill: 
[`security-issue-fix`](../../.claude/skills/security-issue-fix/SKILL.md).
 | D.1 | I | P2 | B3, B4 | The PR title or body uses words ("security", "CVE", 
"vulnerability", "exploit") that confirm an embargoed issue. | M.20 
(`security-issue-fix` scrubs framing terms from PR title/body until Step 14; 
Step 8 of [`process.md`](process.md) gives the canonical phrasings). |
 | D.2 | I | P2 | B3 | The patch itself is so narrowly-scoped to the vulnerable 
code path that reading it discloses the bug. | M.21 (accepted residual; see 
[residual risk](#residual-risk-and-accepted-gaps) — the patch *is* the 
disclosure once committed publicly; embargo length minimised, not eliminated). |
 | D.3 | T | P3 | B5 | A compromised dependency injects an extra commit into 
the fix branch. | M.22 (commit signing required; the human reviewer verifies 
the signed commit matches the agent-authored output). |
-| D.4 | E | P1 | B1→B3 | An injection in the tracker body makes the agent open 
a PR that reverts a prior security fix or weakens a check. | M.1, M.23 (Mode C 
requires human review; the maintainer is the final defence per [Assumption 
1](#assumptions)). |
-| D.5 | I | P5 | B3, B4 | An insider's `git commit -am` accidentally includes 
an unrelated tracker scratch file in the public PR. | M.24 (the agent's `git 
add` is path-scoped to the patched files; an open question on Mode B mentoring 
assistance — see [residual risk](#residual-risk-and-accepted-gaps)). |
+| D.4 | E | P1 | B1→B3 | An injection in the tracker body makes the agent open 
a PR that reverts a prior security fix or weakens a check. | M.1, M.23 
(Drafting requires human review; the maintainer is the final defence per 
[Assumption 1](#assumptions)). |
+| D.5 | I | P5 | B3, B4 | An insider's `git commit -am` accidentally includes 
an unrelated tracker scratch file in the public PR. | M.24 (the agent's `git 
add` is path-scoped to the patched files; an open question on Mentoring 
mentoring assistance — see [residual risk](#residual-risk-and-accepted-gaps)). |
 | D.6 | R | P5 | B2, B3 | After release, attribution between the agent's 
authoring and the human reviewer's approval is disputed. | M.9, M.25 (the 
public commit carries a `Generated-by:` trailer for the agent and a 
`Signed-off-by:` line for the human reviewer; `Co-Authored-By:` for agents is 
forbidden, so an agent cannot be misattributed as a human author). |
 
 ### Skill family E — Closure
@@ -522,7 +522,7 @@ describes it.
 | M.3 | Canned-response templates only for reporter-facing replies. | 
[`projects/_template/canned-responses.md`](../../projects/_template/canned-responses.md).
 |
 | M.4 | No auto-reply on inbound import. Step 1 acknowledgement is 
human-authored. | [`process.md` Step 
1](process.md#step-1--report-arrives-on-security). |
 | M.5 | Front-matter on imported markdown reports is ignored unless on the 
documented allowlist. | 
[`security-issue-import-from-md/SKILL.md`](../../.claude/skills/security-issue-import-from-md/SKILL.md).
 |
-| M.6 | Mode A is read-only on the upstream public repository. | 
[`docs/modes.md`](../modes.md). |
+| M.6 | Triage is read-only on the upstream public repository. | 
[`docs/modes.md`](../modes.md). |
 | M.7 | Skill-scope discipline by authoring convention — each `SKILL.md` 
declares its own scope and does not chain into other skills mid-run. **Not** 
runtime-enforced; the discipline is a function of how the skills are written 
and reviewed. The residual gap (an injection that successfully prompts the 
agent to behave as a different skill) is captured in [residual risk 
#9](#residual-risk-and-accepted-gaps). | Per-skill 
[`SKILL.md`](../../.claude/skills/) authoring; not a runtime control. |
 | M.8 | Identity claims in inbound mail are not trusted; mail headers are 
recorded but not used for authorisation. | Skill family A behaviour. |
 | M.9 | Every agent-driven state transition is recorded as a tracker comment 
attributable to the agent's bot identity. | Skill behaviour; the bot identity 
is configured per adopter in `projects/<adopter>/project.md`. |
@@ -539,7 +539,7 @@ describes it.
 | M.20 | `security-issue-fix` scrubs embargo-framing terms from PR title and 
body until Step 14. | 
[`security-issue-fix/SKILL.md`](../../.claude/skills/security-issue-fix/SKILL.md).
 |
 | M.21 | Embargo window is minimised by promptly merging and releasing once 
the fix is reviewed; the diff itself is accepted as a controlled disclosure. | 
[`process.md` Steps 11 and 12](process.md). |
 | M.22 | Commit signing is expected on the fix branch by adopter policy; the 
human reviewer verifies the signed commit chain matches the agent's authored 
set. | Maintainer / adopter process; **not framework-enforceable** — see 
[residual risk #10](#residual-risk-and-accepted-gaps). |
-| M.23 | Mode C is gated on human review; the maintainer is the last line of 
defence on agent-authored fixes. | [`docs/modes.md`](../modes.md). |
+| M.23 | Drafting is gated on human review; the maintainer is the last line of 
defence on agent-authored fixes. | [`docs/modes.md`](../modes.md). |
 | M.24 | The agent's `git add` is path-scoped to the patched files. | 
[`security-issue-fix/SKILL.md`](../../.claude/skills/security-issue-fix/SKILL.md).
 |
 | M.25 | Agent authorship is recorded via a `Generated-by:` commit trailer in 
the public commit (per [`AGENTS.md` Commit and PR 
conventions](../../AGENTS.md#commit-and-pr-conventions) and 
[`security-issue-fix/SKILL.md`](../../.claude/skills/security-issue-fix/SKILL.md)).
 `Co-Authored-By:` is **forbidden** for agents per the same section — agents 
are assistants, not authors. The trailer is part of the public commit metadata 
and survives merge. | [`AGENTS.md`](../../AGENTS.md#commit-and-pr [...]
 | M.26 | The agent will not draft the CVE-record submission until the public 
advisory URL is present in the tracker. | 
[`security-issue-sync/SKILL.md`](../../.claude/skills/security-issue-sync/SKILL.md).
 |
@@ -557,7 +557,7 @@ the trigger that would force a re-evaluation.
    identified that the redactor contract (M.1) describes the
    *what* but not *which skills call the redactor at which step*.
    v1 ships the redactor; v1.1 ships the per-skill wiring. **Trigger
-   for re-eval:** any new Mode C skill, or any reported false-negative
+   for re-eval:** any new Drafting skill, or any reported false-negative
    from the redactor on a skill that does not yet wire it explicitly.
 2. **Mailing-list flood (A.7) has no framework-side rate limit.**
    The agent will process whatever the mailing-list moderator lets
@@ -628,9 +628,9 @@ the trigger that would force a re-evaluation.
 This document is release-blocking and time-bounded. The cadences
 below are the framework's commitment.
 
-- **On every new Mode C skill** — the proposing PR must add a
+- **On every new Drafting skill** — the proposing PR must add a
   STRIDE row to the matching skill family in [STRIDE matrix per
-  skill family](#stride-matrix-per-skill-family). A Mode C skill
+  skill family](#stride-matrix-per-skill-family). A Drafting skill
   without a row does not pass review.
 - **On every change to `.claude/settings.json`** — the proposing
   PR must update the [Trust boundaries](#trust-boundaries) and
@@ -645,7 +645,7 @@ below are the framework's commitment.
   as PRs that update this document and (if applicable) the
   [`process.md`](process.md) flow.
 - **Pre-release audit** — every framework release that bumps the
-  major version, or that ships a new Mode C skill, requires a fresh
+  major version, or that ships a new Drafting skill, requires a fresh
   pass over [Assumptions](#assumptions), [Adversaries](#adversaries),
   and [Residual risk](#residual-risk-and-accepted-gaps).
 
diff --git a/projects/_template/mentoring-config.md 
b/projects/_template/mentoring-config.md
index 91ac478..0208d14 100644
--- a/projects/_template/mentoring-config.md
+++ b/projects/_template/mentoring-config.md
@@ -2,7 +2,7 @@
 <!-- DON'T EDIT THIS SECTION, INSTEAD RE-RUN doctoc TO UPDATE -->
 **Table of Contents**  *generated with 
[DocToc](https://github.com/thlorenz/doctoc)*
 
-- [Apache Airflow — mentoring (Mode B) 
configuration](#apache-airflow--mentoring-mode-b-configuration)
+- [Apache Airflow — mentoring (Mentoring) 
configuration](#apache-airflow--mentoring-mentoring-configuration)
   - [Identifiers](#identifiers)
   - [Convention pointers](#convention-pointers)
   - [Out-of-scope topics](#out-of-scope-topics)
@@ -13,13 +13,13 @@
 <!-- SPDX-License-Identifier: Apache-2.0
      https://www.apache.org/licenses/LICENSE-2.0 -->
 
-# Apache Airflow — mentoring (Mode B) configuration
+# Apache Airflow — mentoring (Mentoring) configuration
 
-**This file is a placeholder ahead of the Mode B skill landing.**
-The skill does not exist yet (Mode B is proposed per
-[`docs/modes.md`](../../docs/modes.md#mode-b--conversational-mentoring)).
+**This file is a placeholder ahead of the Mentoring skill landing.**
+The skill does not exist yet (Mentoring is proposed per
+[`docs/modes.md`](../../docs/modes.md#mentoring)).
 The keys below match the
-[Mode B spec](../../docs/mentoring/spec.md#adopter-contract)
+[Mentoring spec](../../docs/mentoring/spec.md#adopter-contract)
 and are the values the future skill will read. New adopters
 should copy this file into their own
 `<project-config>/mentoring-config.md` and replace every
diff --git a/tools/skill-validator/src/skill_validator/__init__.py 
b/tools/skill-validator/src/skill_validator/__init__.py
index cb4b768..e66fa8c 100644
--- a/tools/skill-validator/src/skill_validator/__init__.py
+++ b/tools/skill-validator/src/skill_validator/__init__.py
@@ -53,8 +53,8 @@ REQUIRED_FRONTMATTER_KEYS = {"name", "description", "license"}
 OPTIONAL_FRONTMATTER_KEYS = {"when_to_use", "mode"}
 ALLOWED_LICENSES = {"Apache-2.0"}
 # MISSION mode taxonomy — see docs/modes.md.
-# "D" deliberately excluded: Mode D (auto-merge) is off per MISSION sequencing.
-ALLOWED_MODES = {"A", "B", "C"}
+# "Auto-merge" deliberately excluded: it is off per MISSION sequencing.
+ALLOWED_MODES = {"Triage", "Mentoring", "Drafting", "Pairing"}
 
 # Forbidden hardcoded project references (fixed strings, case-sensitive)
 FORBIDDEN_PATTERNS: list[str] = [
diff --git a/tools/skill-validator/tests/test_validator.py 
b/tools/skill-validator/tests/test_validator.py
index 3b991f8..9094b2f 100644
--- a/tools/skill-validator/tests/test_validator.py
+++ b/tools/skill-validator/tests/test_validator.py
@@ -113,7 +113,7 @@ class TestValidateFrontmatter:
 
     def test_valid_mode(self, tmp_path: Path) -> None:
         path = tmp_path / "SKILL.md"
-        for mode in ("A", "B", "C"):
+        for mode in ("Triage", "Mentoring", "Drafting", "Pairing"):
             text = (
                 "---\n"
                 "name: foo\n"
@@ -132,11 +132,11 @@ class TestValidateFrontmatter:
             "name: foo\n"
             "description: bar\n"
             "license: Apache-2.0\n"
-            "mode: D\n"
+            "mode: Auto-merge\n"
             "---\n"
         )
         violations = list(validate_frontmatter(path, text))
-        assert any("mode" in v.message and "'D'" in v.message for v in 
violations)
+        assert any("mode" in v.message and "'Auto-merge'" in v.message for v 
in violations)
 
     def test_mode_optional(self, tmp_path: Path) -> None:
         # Skills without a mode (e.g. setup-* infrastructure) must not fail.
@@ -167,8 +167,8 @@ class TestSlugify:
 
     def test_em_dash_in_heading(self) -> None:
         assert (
-            slugify("Mode B — conversational mentoring")
-            == "mode-b--conversational-mentoring"
+            slugify("Mentoring")
+            == "mentoring"
         )
 
 

Reply via email to