Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions .agents/agents/catalogue-auditor.agent.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
---
name: Catalogue Auditor
description: "Specialist for auditing src/src/data/projects.yml against reality: schema validity, documentation configuration, lifecycle stability, metadata, tags, packages, relationships, use-case coverage, and ordering."
description: "Specialist for auditing every catalogue record under src/src/data/ against reality: schema validity, documentation configuration, lifecycle stability, metadata, tags, packages, relationships, use-case coverage, and ordering."
tools:
[
"search/codebase",
Expand All @@ -18,7 +18,7 @@ You are a specialist for auditing (and repairing) the Purview-Dev project catalo

## Primary objective

Prove that every project defined in `src/src/data/projects.yml` is correct and report the evidence,
Prove that every project defined in the catalogue (`src/src/data/projects/`) is correct and report the evidence,
then fix the drift that is unambiguous and safe to fix.

## Background knowledge
Expand Down
8 changes: 5 additions & 3 deletions .agents/agents/catalogue-onboarder.agent.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
---
name: Catalogue Onboarder
description: "Specialist for adding a purview-dev (or collaboration) repository to the website catalogue: recon the repository, author the projects.yml record (docs, tags, packages, use cases), integrate it across the site, and prove it with the validation pipeline."
description: "Specialist for adding a purview-dev (or collaboration) repository to the website catalogue: recon the repository, author the catalogue record (docs, tags, packages, use cases), integrate it across the site, and prove it with the validation pipeline."
tools:
[
"search/codebase",
Expand All @@ -19,7 +19,7 @@ You are a specialist for onboarding repositories into the Purview-Dev website ca
## Primary objective

Take a repository (`purview-dev/<repo>` or a collaboration repository) and deliver a complete,
validated integration: a correct `src/src/data/projects.yml` record, a working documentation
validated integration: a correct catalogue record under `src/src/data/projects/`, a working documentation
configuration, concrete use cases, tags/metadata, and a green `just validate`.

## Background knowledge
Expand All @@ -41,7 +41,9 @@ The most important rules are:
- **Tags are GitHub topics**, not manifest fields.
- **`name` must slugify to `id`** for any project with `docs` (the per-project LLM bundle path).
- **Every non-archived project needs at least one use case with real code and evidence.**
- **`status` must match reality** (`stable` / `preview` / `archived`).
- **`status` must match reality** (`stable` / `preview` / `archived`), and **`experimental: true`** marks
an exploratory project — it is orthogonal to `status`, invalid on an archived project, and displayed
through `displayStatus()` (ADR 0004).
- **Never hand-edit generated content** or weaken a check.

## Workflow
Expand Down
3 changes: 2 additions & 1 deletion .agents/prompts/add-project.prompt.md
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@ Inputs (fill in before running):
- Owned by purview-dev? `yes` (catalogue project) / `no` (collaboration)
- Category (optional — let the recon decide): `<category>`
- Status (optional — let the release channel decide): `stable | preview | archived`
- Experimental? `yes` / `no` — `yes` sets the `experimental` flag (ADR 0004); it does not replace `status`
- Notes: anything known about docs location, package ids, or the story to tell

## Instructions
Expand All @@ -30,7 +31,7 @@ Use the `catalogue-onboarder` agent if it is available.

1. Recon evidence: repository metadata, docs tree/landing page, package ids and channels, release
channel. Show the commands and their output.
2. The `projects.yml` record (or `externalProjects` record) added at an unused `order`, with `docs`,
2. The catalogue record (or `externalProjects` record) added at an unused `order`, with `docs`,
`packages`, `targetFrameworks`, `install` (only when not plain NuGet), relationships and
acknowledgments where they genuinely apply.
3. At least one concrete use case with `code` + `language`, an `evidence` fact, and a `docsPage` that
Expand Down
2 changes: 1 addition & 1 deletion .agents/prompts/audit-projects.prompt.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
---
mode: agent
description: Audit every project in projects.yml for correctness (documentation, stability, metadata) and repair the clear drift.
description: Audit every project in the catalogue for correctness (documentation, stability, metadata) and repair the clear drift.
---

# Audit the project catalogue
Expand Down
10 changes: 7 additions & 3 deletions .agents/skills/add-catalogue-project/SKILL.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
---
name: add-catalogue-project
description: Use when adding a repository to the Purview-Dev website catalogue — recon the repo, author the projects.yml record (docs, packages, tags, use cases), integrate it across the catalogue/docs/releases surfaces, and prove it with the validation pipeline.
description: Use when adding a repository to the Purview-Dev website catalogue — recon the repo, author the catalogue record (docs, packages, tags, use cases), integrate it across the catalogue/docs/releases surfaces, and prove it with the validation pipeline.
category: purview-dev-website
roles:
- catalogue
Expand Down Expand Up @@ -61,16 +61,20 @@ description/topics.
`source-generation`, `aspire`, `build-tooling`, `developer-tooling`.
- `status`:
- `archived` when the repository is archived (GitHub `archived: true`).
- `preview` when there is no stable NuGet release, or the tooling is explicitly experimental.
- `preview` when there is no stable NuGet release.
- `stable` only when a stable (non-prerelease) release exists and is recommended for use.
- `experimental: true` (a flag, not a status value) when the tooling is explicitly an experiment:
no compatibility promise, no production support guarantee. Keep `status` as the honest release
channel alongside it (`preview` for prerelease-only tooling). See ADR 0004; the project page and
every aggregated documentation page then carry an Experimental warning.
- `id`: lowercase `[a-z0-9-]` slug, normally the repository name.
- `name`: display name. **It must slugify to `id` when the project has `docs`** (the LLM bundle is
emitted at `/_llms-txt/<slug(name)>.txt` while the UI links `/_llms-txt/<id>.txt`).
- `order`: pick an unused value (10–80 in tens is the existing convention).

## Step 3 — author the record

Add the entry to `src/src/data/projects.yml` (see `project-manifest-reference` for every field):
Add the entry as `src/src/data/projects/<id>.yml` (see `project-manifest-reference` for every field):

```yaml
- id: <slug>
Expand Down
7 changes: 5 additions & 2 deletions .agents/skills/audit-catalogue-projects/SKILL.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
---
name: audit-catalogue-projects
description: Use when auditing or repairing src/src/data/projects.yml — the invariant checklist for documentation, stability, metadata, tags, packages, relationships, use cases and ordering, plus the findings report format.
description: Use when auditing or repairing the catalogue records under src/src/data/ — the invariant checklist for documentation, stability, metadata, tags, packages, relationships, use cases and ordering, plus the findings report format.
category: purview-dev-website
roles:
- catalogue
Expand Down Expand Up @@ -58,6 +58,9 @@ Related: `project-manifest-reference` (fields and vocabularies), `docs-aggregati

- `archived` repository ⇒ `status: archived`.
- No stable NuGet release ⇒ not `stable` (`preview`).
- `experimental: true` is orthogonal to `status`: report `experimental` with `status: stable` as
`drift` (the flag says "no support promise" while the channel says "recommended for use"), and
`experimental` on an archived project as a `blocker` (the schema rejects it outright).
- `stable` ⇒ a stable, listed NuGet release exists and the repository is not archived.
- Deprecated NuGet packages are reported, not silently accepted.
- A project with `packages: []` is intentional: build tooling consumed as a tool/SDK still declares
Expand Down Expand Up @@ -132,5 +135,5 @@ evidence and the guards agree.
the gap instead.
- Do not change the schema vocabulary; adding a `status`/`category` value needs an ADR.
- Do not hand-edit the docs mirror or caches to make the audit pass.
- If an audit fix changes `projects.yml`, re-run `just check-projects`, `bun run test`, and
- If an audit fix changes a catalogue record, re-run `just check-projects`, `bun run test`, and
`just validate` before reporting completion.
3 changes: 2 additions & 1 deletion .agents/skills/docs-aggregation-rules/SKILL.md
Original file line number Diff line number Diff line change
Expand Up @@ -66,7 +66,8 @@ The wikis of several product repositories are mirrored into `docs/wiki`, so the
## Injected front matter (per page)

`title` (first `# H1`, else the slug), `description` (first prose paragraph, ≤160 chars),
`owners: [purview-dev]`, `status` (the project's status), `lastReviewed`, `sourceProject`,
`owners: [purview-dev]`, `status` (the project's status), `experimental: true` (written only when
the catalogue flags the project, ADR 0004), `lastReviewed`, `sourceProject`,
`sourceRepo`, `projectName`, `sourcePath`, `editUrl`, `tags` (the repository's GitHub **topics**,
absent when there are none), and `sidebar.label`/`sidebar.order`.

Expand Down
3 changes: 2 additions & 1 deletion .agents/skills/github-repo-metadata/SKILL.md
Original file line number Diff line number Diff line change
Expand Up @@ -67,7 +67,7 @@ Discussions on an organisation repository requires organisation permission; repo
four chips are meaningful (cards render `tags.slice(0, 4)`).
- Prefer ecosystem-standard names (`dotnet`, `csharp`, `nuget`, `opentelemetry`) so cross-repo
searches behave predictably.
- Topics are the **only** way tags reach the site. There is no `tags` field in `projects.yml` — do
- Topics are the **only** way tags reach the site. There is no `tags` field in a catalogue record — do
not add one.

## Stability signals to check against `status`
Expand All @@ -77,6 +77,7 @@ Discussions on an organisation repository requires organisation permission; repo
| `archived: true` | `status` must be `archived` (and `supersededBy` when a successor exists) |
| No stable release, only `-prerelease.N` tags | `preview` at most |
| Latest NuGet version is stable and listed | `stable` is allowed |
| The README/repository presents the project as an experiment | Set `experimental: true` (it does not replace `status`, which stays the release channel) |
| NuGet `deprecated: true` | Report as `drift`/`upstream`; a deprecated package should not front a `stable` project without explanation |
| `default_branch` is not `main` | Docs aggregation produces nothing — a blocker for any project with `docs` |

Expand Down
15 changes: 10 additions & 5 deletions .agents/skills/project-manifest-reference/SKILL.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
---
name: project-manifest-reference
description: Field-by-field reference for src/src/data/projects.yml (schema vocabulary, defaults, loader-enforced rules, and the invariants the site build depends on). Use whenever authoring or reviewing a catalogue record.
description: Field-by-field reference for the catalogue records under src/src/data/projects/ (schema vocabulary, defaults, loader-enforced rules, and the invariants the site build depends on). Use whenever authoring or reviewing a catalogue record.
category: purview-dev-website
roles:
- catalogue
Expand All @@ -13,7 +13,8 @@ tags:

# project-manifest-reference Skill

The catalogue is `src/src/data/projects.yml`, typed by `src/src/lib/manifest/schema.ts` and validated
The catalogue is one file per project under `src/src/data/projects/` (plus
`src/src/data/external-projects.yml` for collaborations), typed by `src/src/lib/manifest/schema.ts` and validated
by `src/src/lib/manifest/load.ts`. `$schema: ../lib/manifest/schema.ts` is the first line of the file.

## Vocabularies (do not invent values)
Expand All @@ -22,10 +23,12 @@ by `src/src/lib/manifest/load.ts`. `$schema: ../lib/manifest/schema.ts` is the f
| --- | --- |
| `category` | `application-framework`, `validation`, `observability`, `source-generation`, `aspire`, `build-tooling`, `developer-tooling` |
| `status` | `stable`, `preview`, `archived` |
| `experimental` | boolean flag, default `false` — orthogonal to `status` (ADR 0004); invalid with `status: archived` |
| `install` | `nuget` (default), `msbuild-sdk`, `dotnet-tool` |
| `useCases[].audience` | `developer`, `team-lead`, `architect`, `contributor` (labels: Developer, Team lead, Architect, Contributor) |

Adding a value to any of these lists is a schema change and requires an ADR.
Adding a value to any of these lists is a schema change and requires an ADR. `experimental` is a
**flag, not a status value**: it never replaces `status`, which stays the project's release channel.

## `projects[]` fields

Expand All @@ -41,6 +44,7 @@ Adding a value to any of these lists is a schema change and requires an ADR.
| `repository` | yes | `owner/repository`; **`owner` must be `purview-dev`** for `projects[]` |
| `category` | yes | See vocabulary |
| `status` | yes | See vocabulary |
| `experimental` | no | Default `false`; marks an exploratory project (unstable API, no support promise). Orthogonal to `status`; invalid with `status: archived`. Displayed as its own status via `displayStatus()` |
| `featured` | no | Default `false`; shown prominently on the home page |
| `order` | no | Default `1000`; projects are sorted ascending; keep values unique |
| `docs` | no | See below |
Expand Down Expand Up @@ -76,12 +80,13 @@ Adding a value to any of these lists is a schema change and requires an ADR.
2. `projects[].repository.split('/')[0]` must equal `purview-dev`.
3. `related`, `supersedes`, and `supersededBy` must all reference existing project ids.
4. A NuGet package id may be declared by **exactly one** project.
5. The returned list is sorted by `order` ascending.
5. `experimental: true` is rejected when `status` is `archived` (schema refinement).
6. The returned list is sorted by `order` ascending.

## Defaults applied by the loader

`featured: false`, `order: 1000`, `packages: []`, `related: []`, `useCases: []`,
`acknowledgments: []`, `discussions: false`, `install: 'nuget'`. Derived values (`repoOwner`,
`acknowledgments: []`, `discussions: false`, `install: 'nuget'`, `experimental: false`. Derived values (`repoOwner`,
`repoName`, `sourceUrl`, `issuesUrl`, `discussionsUrl`, `changelogUrl`, `releasesUrl`) are computed,
never authored.

Expand Down
2 changes: 1 addition & 1 deletion .agents/skills/site-validation-loop/SKILL.md
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,7 @@ tags:

## The catalogue guard (`just check-projects`)

`src/scripts/check-projects.ts` validates `projects.yml` against the generated data (offline,
`src/scripts/check-projects.ts` validates the catalogue records (`src/src/data/`) against the generated data (offline,
deterministic). It fails the build on:

- ids/orders duplicated, `order` not a unique integer, `name` not slugifying to `id` for documented
Expand Down
4 changes: 2 additions & 2 deletions .agents/skills/use-case-authoring/SKILL.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
---
name: use-case-authoring
description: Use when writing or reviewing useCases in projects.yml — the ADR 0002 rules for audience-tagged, concrete, evidence-backed examples with short code snippets and resolvable documentation deep links.
description: Use when writing or reviewing useCases in the catalogue records — the ADR 0002 rules for audience-tagged, concrete, evidence-backed examples with short code snippets and resolvable documentation deep links.
category: purview-dev-website
roles:
- catalogue
Expand All @@ -14,7 +14,7 @@ tags:
# use-case-authoring Skill

Use cases are the "what does it actually do for me" evidence on the home page, on each project page,
and on `/use-cases/`. They are authored in `src/src/data/projects.yml` and validated by the manifest
and on `/use-cases/`. They are authored in the catalogue records (`src/src/data/projects/<id>.yml`) and validated by the manifest
schema. The governing decision is `docs/decisions/0002-concrete-use-cases.md`.

## Shape
Expand Down
7 changes: 5 additions & 2 deletions .github/copilot-instructions.md
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ package is `src/`.
- Treat `just validate` as the definition of done. It chains format-check, lint, typecheck, unit
tests, asset checks, build, link crawl, generated-output checks, built-output tests, and the
catalogue guard (`just check-projects`).
- Edit the catalogue in `src/src/data/projects.yml` only, and keep every invariant listed in
- Edit the catalogue under `src/src/data/` only (one file per project, plus `external-projects.yml`), and keep every invariant listed in
`AGENTS.md` (unique ids/orders/packages, `name` slugifying to `id` for documented projects, at
least one use case per non-archived project, `code` paired with `language`, resolvable `docsPage`).
- Keep documentation where it lives (the product repository). This site aggregates it at build time.
Expand All @@ -33,12 +33,15 @@ package is `src/`.
`src/src/lib/manifest/schema.ts`.
- Never claim a project is `stable` without a stable NuGet release, or leave a project `stable`
while its repository is archived.
- Never derive a project's displayed status outside `displayStatus()` (`src/src/lib/status.ts`):
`experimental: true` is an intent flag orthogonal to `status` (ADR 0004) and is invalid with
`status: archived`.

## Task routing

- Adding a project → `.agents/agents/catalogue-onboarder.agent.md` and
`.agents/skills/add-catalogue-project/SKILL.md`.
- Auditing/fixing `projects.yml` → `.agents/agents/catalogue-auditor.agent.md` and
- Auditing/fixing the catalogue → `.agents/agents/catalogue-auditor.agent.md` and
`.agents/skills/audit-catalogue-projects/SKILL.md`.
- Any other change → `.agents/` holds the manifest reference, docs-aggregation rules, use-case
authoring rules, repo-metadata guidance, and the validation loop.
Loading
Loading