blob: 65d9c7c2d8178ed6b7782973d3c5761c9c81cd0b [file] [view]
<!-- SPDX-License-Identifier: Apache-2.0
https://www.apache.org/licenses/LICENSE-2.0 -->
<!-- START doctoc generated TOC please keep comment here to allow auto update -->
<!-- DON'T EDIT THIS SECTION, INSTEAD RE-RUN doctoc TO UPDATE -->
**Table of Contents** *generated with [DocToc](https://github.com/thlorenz/doctoc)*
- [pilot-report-validator](#pilot-report-validator)
- [Prerequisites](#prerequisites)
- [What it checks](#what-it-checks)
- [Usage](#usage)
- [Writing a pilot report](#writing-a-pilot-report)
<!-- END doctoc generated TOC please keep comment here to allow auto update -->
<!-- SPDX-License-Identifier: Apache-2.0
https://www.apache.org/licenses/LICENSE-2.0 -->
# pilot-report-validator
**Capability:** substrate:framework-dev
**Harness:** agnostic
Validates adopter pilot-report files against the required schema defined
in [`docs/pilot-report-template.md`](../../docs/pilot-report-template.md).
Pilot reports are the feedback artefact that documents an adopter's
end-to-end run of an experimental skill family, and are the primary
evidence source for advancing a skill from `experimental` to `stable`.
## Prerequisites
- **Runtime:** Python 3.11+ run via `uv`; stdlib-only (no runtime
dependencies). The `dev` group pulls `pytest`, `ruff`.
- **CLIs:** None beyond the runtime.
- **Credentials / auth:** None.
- **Network:** Runs fully offline against local report files.
## What it checks
For every `.md` file that carries a YAML frontmatter block:
1. **Required frontmatter keys** — `skill`, `date`, `target_repo`,
`profile`.
2. **Valid `profile` value** — `asf` | `non-asf` | `custom`.
3. **No unfilled placeholders** — frontmatter values must not contain
un-substituted `<...>` tokens, and `date` must be a real ISO 8601
date (`YYYY-MM-DD`).
4. **Required body sections** — `## Skill or family`,
`## Target repo and profile`, `## Blocked preflights`,
`## False positives`, `## Confirmation points`,
`## Privacy and adapter notes`, `## Proposed spec changes`.
The frontmatter block must be at the very top of the file — YAML
frontmatter placed lower in the document is not detected. Files without
a top-of-file frontmatter block (e.g. README files) are silently
skipped. `docs/pilot-report-template.md` ships with placeholder
frontmatter values, so running the validator on the unedited template
reports those placeholders until you fill them in.
## Usage
```bash
# Validate a single filled-in report
uv run --project tools/pilot-report-validator \
pilot-report-validate path/to/my-pilot-report.md
# Validate every report in a directory
uv run --project tools/pilot-report-validator \
pilot-report-validate path/to/reports/
# Run the test suite (use --directory, not --project, to avoid the
# duplicate-`tests`-package collision when run from the repo root)
uv run --directory tools/pilot-report-validator --group dev pytest
```
## Writing a pilot report
Copy `docs/pilot-report-template.md`, fill in the frontmatter and each
section, then validate with this tool before sharing. See the template
for detailed per-section instructions.