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 8e0b526  update specs and implementation plan (#329)
8e0b526 is described below

commit 8e0b5265b8109cdd90230ecf9ef44f7c3e06c215
Author: Justin Mclean <[email protected]>
AuthorDate: Thu May 28 09:03:46 2026 +1000

    update specs and implementation plan (#329)
    
    * docs(spec-loop): sync specs with contributed functionality
    
    - mentoring-mode: proposed → experimental; pr-management-mentor now
      shipped, update Where-it-lives and Known-gaps accordingly
    - pairing-mode: proposed → experimental; pairing-self-review now shipped,
      update Where-it-lives and Known-gaps accordingly
    - overview: update mode table (Mentoring, Pairing: 0 skills → 1 skill,
      proposed → experimental); add security-reporting to cross-cutting table
    - triage-mode: add contributor-nomination (contributor-readiness brief),
      issue-reassess-stats (campaign dashboard), tools/pr-management-stats
      reference implementation, and tools/mail-source to Where-it-lives
    - agent-isolation-sandbox: add setup-isolated-setup-doctor to skills list
    - meta-and-quality-tooling: add tools/spec-status-index and
      tools/spec-validator to Where-it-lives
    - adapters: rename title/source/Acceptance to include mail-source;
      document tools/mail-source abstract backend contract + IMAP + mbox
    - security-reporting.md: new spec for security-tracker-stats-dashboard
      skill and tools/security-tracker-stats-dashboard tool
    - README + overview indexes updated to reference security-reporting.md
    
    Generated-by: Claude (Opus 4.7)
    
    * update plan
---
 tools/spec-loop/IMPLEMENTATION_PLAN.md            | 113 +++++++++++++---------
 tools/spec-loop/specs/README.md                   |   3 +-
 tools/spec-loop/specs/adapters.md                 |  11 ++-
 tools/spec-loop/specs/agent-isolation-sandbox.md  |   5 +-
 tools/spec-loop/specs/mentoring-mode.md           |  18 ++--
 tools/spec-loop/specs/meta-and-quality-tooling.md |   6 ++
 tools/spec-loop/specs/overview.md                 |   9 +-
 tools/spec-loop/specs/pairing-mode.md             |  20 ++--
 tools/spec-loop/specs/security-reporting.md       |  77 +++++++++++++++
 tools/spec-loop/specs/triage-mode.md              |   8 +-
 10 files changed, 195 insertions(+), 75 deletions(-)

diff --git a/tools/spec-loop/IMPLEMENTATION_PLAN.md 
b/tools/spec-loop/IMPLEMENTATION_PLAN.md
index db69e0a..cd8964e 100644
--- a/tools/spec-loop/IMPLEMENTATION_PLAN.md
+++ b/tools/spec-loop/IMPLEMENTATION_PLAN.md
@@ -25,6 +25,45 @@ one PR** (the branch-per-feature constraint).
   per work item; never pushes), `PROMPT_plan.md`, `PROMPT_build.md`,
   `PROMPT_consolidate.md`, `AGENTS.md` (loop-scoped operational context),
   and this plan.
+- **Pairing — pre-flight self-review skill** — 
`.claude/skills/pairing-self-review/`
+  shipped; `docs/modes.md` Pairing row updated to 1 skill / `experimental`.
+  Spec: [`specs/pairing-mode.md`](specs/pairing-mode.md).
+- **Mentoring — first prototype skill** — `pr-management-mentor` shipped,
+  `mode: Mentoring` + `experimental`, teaching-register replies with
+  explicit hand-off. Spec: 
[`specs/mentoring-mode.md`](specs/mentoring-mode.md).
+- **Docs — mode economics page** — `docs/mode-economics.md` exists
+  (per-mode token-cost shape, vendor-neutral).
+- **Meta — spec-status index** — `tools/spec-status-index/` exists as a
+  `uv` tool that prints specs grouped by status.
+  Spec: 
[`specs/meta-and-quality-tooling.md`](specs/meta-and-quality-tooling.md).
+- **Eval backfill** — 24 skill eval suites committed to `main`, covering
+  every non-setup skill. Setup-family suites are in-flight (see below).
+
+---
+
+## In-flight work
+
+These branches and/or open PRs already carry the change. Do **not** add
+a plan item for any of them; the build beat must not re-pick them.
+
+| Branch | PR | Description |
+|---|---|---|
+| `pairing-multi-agent-review` | #269 (draft) | Pairing multi-agent review 
pipeline |
+| `generic-drafting` | #296 (draft) | Generic (non-security) drafting from 
audit findings |
+| `eval-setup-isolated-setup-doctor` | — | Eval suite for 
setup-isolated-setup-doctor |
+| `eval-setup-isolated-setup-install` | — | Eval suite for 
setup-isolated-setup-install |
+| `eval-setup-isolated-setup-update` | — | Eval suite for 
setup-isolated-setup-update |
+| `eval-setup-override-upstream` | — | Eval suite for setup-override-upstream |
+| `eval-setup-shared-config-sync` | — | Eval suite for 
setup-shared-config-sync |
+| `eval-setup-steward` | — | Eval suite for setup-steward |
+| `spec-validator` | — | `tools/spec-validator/` — spec frontmatter + 
body-section validator |
+| `spec-loop-preflight-checks` | — | Freshness check + branch-name collision 
guard for the loop |
+| `injection-guard` | — | Prompt-injection defence hardening |
+| `check-headers` | — | License headers as a first-class review category |
+| `issue-fix-workflow` | — | issue-fix-workflow skill updates |
+| `contributor-readiness` | #227 (draft) | contributor-nomination skill + eval 
|
+| `contributor-activity` | #228 (draft) | contributor-activity-sweep skill + 
eval |
+| `contributor-onboarding` | #229 (draft) | committer-onboarding skill |
 
 ---
 
@@ -33,54 +72,30 @@ one PR** (the branch-per-feature constraint).
 Priority order. Each maps to one branch and one PR. Branch names are
 slugs, not numbers (numbering implies an order the specs don't carry).
 
-1. **Pairing — pre-flight self-review skill.** Highest priority: closes
-   the empty-Pairing-family gap MISSION makes a v1 goal. New
-   `.claude/skills/pairing-self-review/SKILL.md` (read-only, hands a
-   report back, never opens a PR); update `docs/modes.md` Pairing row
-   0 → 1, `proposed` → `experimental`. Validate with `skill-validate`.
-   Spec: [`specs/pairing-mode.md`](specs/pairing-mode.md). Branch
-   `pairing-self-review`.
-
-2. **Mentoring — first prototype skill.** `pr-management-mentor` (working
-   name), `mode: Mentoring` + `experimental`, drafting replies in a
-   teaching register with an explicit hand-off to a human. The Mentoring
-   spec/tone-guide already exists under `docs/mentoring/`. Spec:
-   [`specs/mentoring-mode.md`](specs/mentoring-mode.md). Branch
-   `mentoring-prototype`.
-
-3. **Docs — mode economics page.** New `docs/mode-economics.md` (per-mode
-   token-cost shape, vendor-neutral, indicative-not-a-quote), linked from
-   `docs/modes.md`. From MISSION § Affordability. Branch
-   `mode-economics-doc`.
-
-4. **Meta — spec-status index.** A deterministic `uv` tool (mirrors
-   `list-steward-skills`) that prints specs by status and a `--ready`
-   filter, so later build iterations choose the next work item
-   mechanically. Spec: 
[`specs/meta-and-quality-tooling.md`](specs/meta-and-quality-tooling.md).
-   Branch `spec-status-index`.
-
-5. **Pairing — multi-agent review pipeline.** Fans a local diff through
-   independent review passes (correctness / security / conventions) and
-   merges the findings. Reuses the self-review report format, so it
-   follows work item 1. Branch `pairing-multi-agent-review`.
-
-6. **Drafting — generic (non-security) drafting.** Extend Drafting beyond
-   the security + general-issue cases to lint fixes, audit-tool findings,
-   and documentation holes (MISSION names these in scope). Larger; split
-   into per-source work items as it is picked up. Spec:
-   [`specs/drafting-mode.md`](specs/drafting-mode.md). Branch
-   `generic-drafting`.
-
-7. **Meta — back-fill missing skill eval suites.** Per `/AGENTS.md`
-   § Reusable skills, every skill ships an eval suite under
-   `tools/skill-evals/evals/<skill-name>/`. Several skills predate that
-   convention and have none. Add one suite per uncovered skill — one
-   branch per skill (or per family). Spec:
-   [`specs/meta-and-quality-tooling.md`](specs/meta-and-quality-tooling.md).
-   Branch `eval-<skill-name>`.
-
-   Also: when a build iteration creates a new skill, its eval suite is
-   part of that same work item — not a separate one.
+1. **Security reporting — add tool test suite.** 
`tools/security-tracker-stats-dashboard/`
+   has Python scripts (`render.py`, `fetch_*.py`) but no `tests/`
+   directory. The spec acceptance criterion #3 and its Known Gaps section
+   both require tests here. Add a `tests/` directory with pytest coverage
+   for the fetch/render pipeline. Validation:
+   ```bash
+   uv run --project tools/security-tracker-stats-dashboard --group dev pytest
+   bash -n tools/security-tracker-stats-dashboard/run.sh
+   shellcheck tools/security-tracker-stats-dashboard/run.sh
+   ```
+   Spec: [`specs/security-reporting.md`](specs/security-reporting.md).
+   Branch `security-reporting-tests`.
+
+2. **Agent isolation — Python packaging and test harness.** 
`tools/agent-isolation/`
+   is shell-only (no `pyproject.toml`, no `tests/`), but the spec's
+   validation command requires `uv run --project tools/agent-isolation
+   --group dev pytest`. Convert the tool to a `uv` Python project, add a
+   `pyproject.toml`, and write tests that verify the sandbox profiles and
+   clean-env wrapper behave correctly. Validation:
+   ```bash
+   uv run --project tools/agent-isolation --group dev pytest
+   ```
+   Spec: 
[`specs/agent-isolation-sandbox.md`](specs/agent-isolation-sandbox.md).
+   Branch `agent-isolation-tests`.
 
 ---
 
@@ -93,3 +108,5 @@ slugs, not numbers (numbering implies an order the specs 
don't carry).
   section; the build prompt runs it as backpressure before committing.
 - Auto-merge is deliberately off and has no work items — building toward
   it would skip the proof MISSION requires.
+- When a build iteration creates a new skill, its eval suite is part of
+  that same work item — not a separate one.
diff --git a/tools/spec-loop/specs/README.md b/tools/spec-loop/specs/README.md
index ab811a7..fbef80d 100644
--- a/tools/spec-loop/specs/README.md
+++ b/tools/spec-loop/specs/README.md
@@ -36,7 +36,8 @@ Start with [`overview.md`](overview.md), then:
   [`cve-tooling.md`](cve-tooling.md),
   [`adoption-and-setup.md`](adoption-and-setup.md),
   [`adapters.md`](adapters.md),
-  [`meta-and-quality-tooling.md`](meta-and-quality-tooling.md).
+  [`meta-and-quality-tooling.md`](meta-and-quality-tooling.md),
+  [`security-reporting.md`](security-reporting.md).
 
 (Auto-merge, the fifth MISSION mode, is deliberately off and has no
 spec — see the note in [`overview.md`](overview.md).)
diff --git a/tools/spec-loop/specs/adapters.md 
b/tools/spec-loop/specs/adapters.md
index 37d2b7e..2e2fc32 100644
--- a/tools/spec-loop/specs/adapters.md
+++ b/tools/spec-loop/specs/adapters.md
@@ -2,7 +2,7 @@
      https://www.apache.org/licenses/LICENSE-2.0 -->
 
 ---
-title: Adapters (Gmail / PonyMail / Jira / GitHub)
+title: Adapters (Gmail / PonyMail / Jira / GitHub / mail-source)
 status: experimental
 kind: feature
 mode: infra
@@ -10,7 +10,7 @@ source: >
   MISSION.md § Rationale ("ASF integrations live behind clean
   configuration boundaries; non-ASF adopters swap them") and § Technical
   scope (extensible adapter layer). Implemented in tools/gmail/,
-  tools/ponymail/, tools/jira/, tools/github/.
+  tools/ponymail/, tools/jira/, tools/github/, tools/mail-source/.
 acceptance:
   - Project-specific integrations live behind adapter modules, not
     hardcoded into skills.
@@ -36,6 +36,13 @@ by swapping the adapter, not the skill.
 - `tools/ponymail/` — public mailing-list archive search.
 - `tools/jira/` — issue-tracker adapter for projects on Jira.
 - `tools/github/` — issues/PRs/labels read + write-back helpers.
+- `tools/mail-source/` — abstract mail backend contract (operations,
+  capability matrix, adopter-declaration syntax) with concrete IMAP and
+  mbox implementations. Skills (`security-issue-import`,
+  `security-issue-sync`, `security-cve-allocate`) address every mail
+  source through this contract rather than calling Gmail or PonyMail
+  directly; the adopter's `<project-config>/project.md → Mail sources`
+  section declares which backends are active and what role each plays.
 
 ## Behaviour & contract
 
diff --git a/tools/spec-loop/specs/agent-isolation-sandbox.md 
b/tools/spec-loop/specs/agent-isolation-sandbox.md
index c668053..057dc2b 100644
--- a/tools/spec-loop/specs/agent-isolation-sandbox.md
+++ b/tools/spec-loop/specs/agent-isolation-sandbox.md
@@ -35,7 +35,10 @@ saying "no".
 - `.claude/settings.json` — the `sandbox` block (filesystem
   allow/deny, network `allowedDomains`) and `permissions` (`deny` /
   `ask`).
-- Skills: `setup-isolated-setup-install`, `-update`, `-verify`.
+- Skills: `setup-isolated-setup-install`, `-update`, `-verify`,
+  `-doctor` (probes live sandbox restrictions — SSH-agent reachability,
+  localhost port binding, docker/podman socket — and maps each to a
+  numbered troubleshooting entry; read-only, never modifies settings).
 - `docs/setup/secure-agent-internals.md` — the three-layer model.
 
 ## Behaviour & contract
diff --git a/tools/spec-loop/specs/mentoring-mode.md 
b/tools/spec-loop/specs/mentoring-mode.md
index abc6ada..626919f 100644
--- a/tools/spec-loop/specs/mentoring-mode.md
+++ b/tools/spec-loop/specs/mentoring-mode.md
@@ -3,13 +3,13 @@
 
 ---
 title: Mentoring mode
-status: proposed
+status: experimental
 kind: feature
 mode: Mentoring
 source: >
   MISSION.md § Technical scope (Mentoring) — "the highest-value
   project-side mode and the one off-the-shelf agent tooling skips".
-  docs/modes.md § Mentoring (proposed, 0 skills). Spec exists at
+  docs/modes.md § Mentoring (experimental, 1 skill). Spec exists at
   docs/mentoring/spec.md ahead of any skill code.
 acceptance:
   - The Mentoring spec (tone guide, hand-off protocol, adopter knobs) is
@@ -32,11 +32,11 @@ contributor-empowerment lever the wider ecosystem most 
needs.
 
 ## Where it lives
 
-- Spec ahead of code: `docs/mentoring/README.md`,
-  `docs/mentoring/spec.md`.
+- Spec: `docs/mentoring/README.md`, `docs/mentoring/spec.md`.
 - Adopter config scaffold: `projects/_template/mentoring-config.md`.
-- First skill (planned): `pr-management-mentor` (working name), ships
-  `mode: Mentoring` + `experimental`.
+- Skill: `pr-management-mentor` — drafts a teaching-register comment on
+  a single GitHub issue or PR thread; waits for explicit maintainer
+  confirmation before posting. Ships `mode: Mentoring` + `experimental`.
 
 ## Behaviour & contract
 
@@ -70,6 +70,6 @@ uv run --project tools/skill-validator --group dev 
skill-validate
 
 ## Known gaps
 
-- **No skill yet** — this is a pure `proposed` gap. The spec and tone
-  guide exist; the prototype skill is the first work item the loop would
-  pick up under this area.
+- **`experimental` — no adopter pilot has run.** The first skill
+  (`pr-management-mentor`) shipped; shape may change as adopter pilots
+  and contributor-sentiment evaluations land.
diff --git a/tools/spec-loop/specs/meta-and-quality-tooling.md 
b/tools/spec-loop/specs/meta-and-quality-tooling.md
index f12f9ce..f3a9fd8 100644
--- a/tools/spec-loop/specs/meta-and-quality-tooling.md
+++ b/tools/spec-loop/specs/meta-and-quality-tooling.md
@@ -39,6 +39,12 @@ trustworthy as it grows.
 - `tools/dashboard-generator/` — read-only HTML dashboards over campaign
   artefacts.
 - `tools/probe-templates/` — reusable probes.
+- `tools/spec-status-index/` — deterministic `uv` tool that reads
+  `tools/spec-loop/specs/` and prints specs grouped by status; used by
+  build iterations to mechanically select the next work item.
+- `tools/spec-validator/` — validates spec-loop spec frontmatter
+  (required keys, valid `status`/`kind`/`mode` values, body-section
+  presence); the spec-side counterpart to `skill-validator`.
 - Skills: `write-skill` (author/update a skill), `list-steward-skills`
   (live, generated index of every skill, grouped by family).
 
diff --git a/tools/spec-loop/specs/overview.md 
b/tools/spec-loop/specs/overview.md
index 0022df8..2aebdc0 100644
--- a/tools/spec-loop/specs/overview.md
+++ b/tools/spec-loop/specs/overview.md
@@ -30,10 +30,10 @@ Each mode is an independently toggleable set of skills. 
Maturity mirrors
 
 | Mode | Spec | Maturity |
 |---|---|---|
-| Triage | [triage-mode.md](triage-mode.md) | stable (security) / experimental 
(PR, issue) |
-| Mentoring | [mentoring-mode.md](mentoring-mode.md) | proposed (0 skills) |
+| Triage | [triage-mode.md](triage-mode.md) | stable (security) / experimental 
(PR, issue, contributor-nomination) |
+| Mentoring | [mentoring-mode.md](mentoring-mode.md) | experimental (1 skill) |
 | Drafting | [drafting-mode.md](drafting-mode.md) | stable (security) / 
experimental (issue) |
-| Pairing | [pairing-mode.md](pairing-mode.md) | proposed (0 skills) |
+| Pairing | [pairing-mode.md](pairing-mode.md) | experimental (1 skill) |
 
 > **Auto-merge** is the fifth MISSION mode but is deliberately **off** by
 > sequencing policy (`.asf.yaml` `allow_auto_merge: false`) — it has no
@@ -48,8 +48,9 @@ Each mode is an independently toggleable set of skills. 
Maturity mirrors
 | Privacy-LLM gate + PII redaction | 
[privacy-llm-gate.md](privacy-llm-gate.md) |
 | Agent isolation / layered sandbox | 
[agent-isolation-sandbox.md](agent-isolation-sandbox.md) |
 | CVE tooling | [cve-tooling.md](cve-tooling.md) |
+| Security reporting & dashboards | 
[security-reporting.md](security-reporting.md) |
 | Adoption & setup | [adoption-and-setup.md](adoption-and-setup.md) |
-| Adapters (Gmail / PonyMail / Jira / GitHub) | [adapters.md](adapters.md) |
+| Adapters (Gmail / PonyMail / Jira / GitHub / mail-source) | 
[adapters.md](adapters.md) |
 | Meta & quality tooling | 
[meta-and-quality-tooling.md](meta-and-quality-tooling.md) |
 
 ## The non-negotiables every area inherits
diff --git a/tools/spec-loop/specs/pairing-mode.md 
b/tools/spec-loop/specs/pairing-mode.md
index 2594d23..8eb9111 100644
--- a/tools/spec-loop/specs/pairing-mode.md
+++ b/tools/spec-loop/specs/pairing-mode.md
@@ -3,13 +3,13 @@
 
 ---
 title: Pairing mode
-status: proposed
+status: experimental
 kind: feature
 mode: Pairing
 source: >
   MISSION.md § Technical scope (Pairing) and § Initial Goals ("Ship at
   least one Pairing skill family in v1"). docs/modes.md § Pairing
-  (proposed, 0 skills).
+  (experimental, 1 skill).
 acceptance:
   - At least one Pairing skill exists and validates (v1 goal).
   - Pairing skills run in the developer's OWN dev loop and make no state
@@ -32,9 +32,12 @@ protecting the ASF contribution path (contributor → 
committer → PMC).
 
 ## Where it lives
 
-- Currently nowhere — the family is empty (`docs/modes.md`: 0 skills).
-- Planned skills: a pre-flight **self-review** skill (highest priority)
-  and a **multi-agent review** pipeline — both tracked as work items in
+- Skill: `pairing-self-review` — structured pre-flight self-review of
+  local changes before opening a PR. Read-only; returns a structured
+  report with no external writes. Ships `mode: Pairing` + `experimental`.
+- Planned follow-on: a **multi-agent review** pipeline (fans the diff
+  through independent review passes, shares the self-review report
+  format) — tracked as a work item in
   [`../IMPLEMENTATION_PLAN.md`](../IMPLEMENTATION_PLAN.md).
 
 ## Behaviour & contract
@@ -66,7 +69,6 @@ uv run --project tools/skill-validator --group dev 
skill-validate
 
 ## Known gaps
 
-- **Empty family** — the largest functional gap against MISSION's v1
-  goals. Work items (in 
[`../IMPLEMENTATION_PLAN.md`](../IMPLEMENTATION_PLAN.md)):
-  a pre-flight self-review skill (first, highest priority), then a
-  multi-agent review pipeline.
+- **`experimental` — no adopter pilot has run.** `pairing-self-review`
+  shipped; the multi-agent review pipeline is the next planned skill.
+  No contributor-sentiment evaluation has run yet; shape may change.
diff --git a/tools/spec-loop/specs/security-reporting.md 
b/tools/spec-loop/specs/security-reporting.md
new file mode 100644
index 0000000..43227e5
--- /dev/null
+++ b/tools/spec-loop/specs/security-reporting.md
@@ -0,0 +1,77 @@
+<!-- SPDX-License-Identifier: Apache-2.0
+     https://www.apache.org/licenses/LICENSE-2.0 -->
+
+---
+title: Security reporting & dashboards
+status: experimental
+kind: feature
+mode: infra
+source: >
+  README.md § Skill families (security) and AGENTS.md § Reusable skills.
+  Implemented by tools/security-tracker-stats-dashboard/ and the
+  security-tracker-stats-dashboard skill.
+acceptance:
+  - A single command produces a self-contained HTML dashboard of tracker
+    statistics without modifying any tracker state.
+  - The dashboard is read-only; no tracker labels, milestones, or issue
+    bodies are written.
+  - The tool ships its own tests.
+---
+
+# Security reporting & dashboards
+
+## What it does
+
+Generates read-only aggregate views of the security tracker's issue
+backlog — lifecycle-band breakdowns, time-to-triage trends, per-scope
+pressure, and velocity charts — so the security team can review campaign
+health without navigating the tracker issue-by-issue.
+
+## Where it lives
+
+- `tools/security-tracker-stats-dashboard/` — Python tool that fetches
+  issue and event data from `<tracker>` (via `gh`) and renders a
+  self-contained HTML file. Supports incremental resume (re-runs extend
+  the existing data rather than re-fetching everything), configurable
+  lifecycle categories, milestone annotations, and a null-`upstream_repo`
+  path for trackers whose fixes land across multiple repos.
+- Skill: `security-tracker-stats-dashboard` — invokes the tool, surfaces
+  the output path, and handles staleness detection (~24 h default). Reads
+  only; never posts to the tracker.
+
+## Behaviour & contract
+
+- **Read-only.** Neither the tool nor the skill writes to any tracker
+  issue, label, milestone, or project board field.
+- **Self-contained output.** The rendered HTML embeds all data; no
+  external service is needed to view it.
+- **Incremental by default.** Resume behaviour extends an existing dataset
+  without re-fetching all history; a full rebuild is an opt-in flag.
+- **Config-driven.** Lifecycle category bands, time-to-triage signal,
+  milestone vertical annotations, and the null-`upstream_repo` path are
+  declared in the tool's `default-config.yaml` and overridden per-adopter.
+
+## Out of scope
+
+- Writing back any artefact to the tracker (that is the lifecycle skills).
+- Publishing the dashboard publicly — output is a local file; distribution
+  is the security team's choice.
+
+## Acceptance criteria
+
+1. `render.py` / `run.sh` produces a valid HTML file from `<tracker>` data.
+2. No tracker state is mutated (read-only `gh` calls only).
+3. The tool ships its own tests under 
`tools/security-tracker-stats-dashboard/`.
+
+## Validation
+
+```bash
+bash -n tools/security-tracker-stats-dashboard/run.sh
+shellcheck tools/security-tracker-stats-dashboard/run.sh
+```
+
+## Known gaps
+
+- `experimental` — no adopter pilot has run the dashboard end-to-end.
+  The tool's test coverage and CI integration are tracked as follow-on
+  work items.
diff --git a/tools/spec-loop/specs/triage-mode.md 
b/tools/spec-loop/specs/triage-mode.md
index a264e0a..8c51684 100644
--- a/tools/spec-loop/specs/triage-mode.md
+++ b/tools/spec-loop/specs/triage-mode.md
@@ -31,13 +31,19 @@ suggestion the human signs off on.
 
 - PR queue: `pr-management-triage`, `pr-management-stats`,
   `pr-management-code-review` (deep review is a triage variant).
+  Reference implementation: `tools/pr-management-stats/`.
 - General issues: `issue-triage`, `issue-reassess`, `issue-reproducer`.
+  Companion reporting skill: `issue-reassess-stats` (read-only dashboard
+  over `verdict.json` files produced by `issue-reassess` campaigns).
+- Contributor readiness: `contributor-nomination` (read-only brief for a
+  named contributor — activity breadth, consistency, and nomination-
+  evidence prose for a committer or PMC thread).
 - Security inbound: `security-issue-import`, `-import-from-pr`,
   `-import-from-md`, `security-issue-deduplicate`,
   `security-issue-invalidate`, `security-issue-sync`,
   `security-cve-allocate`.
 - Adapters it reads through: `tools/github`, `tools/jira`,
-  `tools/ponymail`, `tools/gmail`.
+  `tools/ponymail`, `tools/gmail`, `tools/mail-source`.
 
 ## Behaviour & contract
 

Reply via email to