diff --git a/.cspell.yml b/.cspell.yml
index 9da23446..d73db896 100644
--- a/.cspell.yml
+++ b/.cspell.yml
@@ -20,6 +20,7 @@ ignorePaths:
# ignoreRegExpList:
# - CodeBlock
words:
+ - afdocs
- backstore
- Chalin
- CLOTributor
@@ -30,6 +31,8 @@ words:
- github
- keda
- knative
+ - llms
+ - llmstxt
- kedacore
- krator
- krook
diff --git a/.htmltest.yml b/.htmltest.yml
index 74607e7a..6636761a 100644
--- a/.htmltest.yml
+++ b/.htmltest.yml
@@ -4,7 +4,7 @@ DirectoryPath: build
TestFilesConcurrently: true
IgnoreDirs:
# We don't fix broken links on old analysis pages.
- # - analyses/202[0-5]/
+ - analyses/202[0-3]/
IgnoreInternalURLs: # list of paths
IgnoreURLs: # list of regexes of URLs or path to be ignored
- ^https?://localhost
diff --git a/docs/analysis/ai-harness/_github/copilot-instructions.md b/docs/analysis/ai-harness/_github/copilot-instructions.md
new file mode 100644
index 00000000..98b02ef2
--- /dev/null
+++ b/docs/analysis/ai-harness/_github/copilot-instructions.md
@@ -0,0 +1,549 @@
+---
+title: Copilot instructions for CNCF TechDocs analysis
+applyTo: **/*.md
+---
+
+# CNCF TechDocs Analysis Copilot Instructions
+
+The CNCF TechDocs analysis focuses on evaluating the quality and completeness of
+project documentation. Until now human reviewers have been performing this
+analysis, and still will be. The goal of this project is to provide a harness
+and workflow for writers to use for having Copilot to provide responses. As
+such, predefined prompts are provided to guide Copilot in providing analysis
+responses. Predefined prompts should also alleviate inconsistencies resulting
+from having the writer craft the prompt.
+
+Given that the analysis writers are providing their own analysis, the Copilot
+analysis must be written as to require minimal editing by the writers, such as
+making fragments into complete sentences, or adding context to a comment.
+
+## Analysis Criteria
+
+The focus is to analyze documentation for CNCF projects and to provide comments,
+recommendations, and issues.
+
+Review sources:
+
+- Analysis criteria for evaluating content:
+ https://github.com/cncf/techdocs/blob/main/docs/analysis/criteria.md.
+- Template for the analysis report:
+ https://github.com/cncf/techdocs/blob/main/docs/analysis/templates/analysis.md
+
+## Analysis Guidelines
+
+Things to keep in mind while doing the analysis:
+
+Look for:
+
+- Quick wins – low-effort changes that would have a major impact.
+- Large, systemic issues that you can organize a number of issues around.
+- The two or three most important issues that impede documentation
+ effectiveness.
+- Anything the project does exceptionally well. We can call these out as
+ examples in other evaluations!
+
+Don't get bogged down in detail when writing comments. Include enough detail
+that you can describe how to implement a suggested solution. A sentence or two
+is sufficient for most issues.
+
+Keep in mind the overall goal of the technical documentation: to make its users
+more effective. Focus on issues that get in the way of that goal.
+
+It is not necessary to come up with a recommendation in every case, especially
+for elements that are satisfactory or if a recommendation would result in
+minimal improvement.
+
+Analysis criteria is further specified in the prompt files under
+`.github/prompts/`.
+
+## Analysis responses style
+
+Readers of the analysis are subject-matter experts in the project's ecosystem
+(named in the "Current Repository" section) who want to improve the
+documentation quickly. Write for them: be concise and actionable, and skip
+explanations they don't need.
+
+- Write in complete sentences, using active voice and the imperative mood.
+- Fragments are fine inside a bulleted list that follows an introductory
+ sentence.
+- Explain any term or acronym that a senior engineer in the project's ecosystem
+ might not know.
+- Don't list technologies in parentheses; readers already know them.
+- Use parentheses only when the content is needed to understand the
+ recommendation.
+- When a sentence would list four or more items, end the paragraph with an
+ introductory sentence followed by a bulleted list of the items.
+- You can refer to Markdown files instead of page titles; but unless the name is
+ obvious, also provide the page title. No need to include relative paths as
+ long as the page title is clear.
+- Keep paragraphs under about 4 sentences; split longer ones.
+- Treat any paragraph limit in a prompt as a maximum, not a target.
+- If you're unsure whether something is technically wrong, phrase it as a
+ question for the SME rather than asserting it.
+- Follow the project's documentation conventions as described in "Current
+ Repository". For Kubernetes-ecosystem projects that means UpperCamelCase for
+ API objects (Pod, Deployment) and code formatting for commands, fields, and
+ file names.
+
+## Analysis Criteria and Predefined Prompts
+
+The analysis has three sections (Project Documentation, Contributor
+Documentation, and Website & Infrastructure). Each section contains multiple
+areas, and each area has its own criteria and prompts for evaluation.
+
+The AI assisted analysis harness is organized into two types of files: criteria
+and prompt Markdown files. These files are organized further by `areas` and
+`sections` folders. These files live under `.github/criteria/areas`,
+`.github/criteria/sections`, `.github/prompts/areas`, and
+`.github/prompts/sections` respectively. Generated output lives in
+`.github/output/analysis` and `.github/output/issues`.
+
+
+
+```text
+.github/
+ copilot-instructions.md
+ criteria/
+ areas/.md # Per-area data: display name, file stem, questions, comment guidance
+ sections/.md # Per-section data: display name, slug, member areas and comment-file stems
+ prompts/
+ areas/
+ answers.prompt.md # Shared engines
+ comment.prompt.md
+ recommendations.prompt.md
+ full.prompt.md
+ -.prompt.md # Per-area wrappers
+ sections/
+ section-comment.prompt.md # Shared engine
+ -comment.prompt.md # Per-section wrappers
+ issues/
+ rank-recommendations.prompt.md # Ranks recommendations into input/ai-ranked-recommendations.csv
+ create-issues.prompt.md # Generates numbered issue files from ranked recommendations
+ create-umbrella-issues.prompt.md # Groups issue files into umbrella issues
+ templates/
+ doc-issue.md # Documentation issue template (replace with the project's own)
+ umbrella-issue.md # Umbrella issue template
+ input/
+ ai-ranked-recommendations.csv # Written by /rank-recommendations, read by /create-issues
+ output/
+ analysis/--.md # Per-area outputs
+ analysis/--comment.md # Section-level comments
+ issues/-.md # Generated standalone issue files
+ issues/U--.md # Generated umbrella issue files
+ issues-coverage.md # Issue list and recommendation-to-issue mapping
+```
+
+
+
+Criteria files for an area define the per-area data: display name, output-file
+stem, question set, and comment guidance. The area name is the criteria filename
+without `.md` (for example, `.github/criteria/areas/information-architecture.md`
+defines the `information-architecture` area).
+
+Criteria files for a section define the section's display name, slug, and member
+areas (with the stem of each area's comment file).
+
+Prompt files for areas are organized into three layers so the per-area questions
+(data) are separated from the task logic (verbs):
+
+- Per-area wrappers (`-.prompt.md`) — the entry points you invoke,
+ for example `/information-architecture-answers`. Each wrapper simply binds one
+ criteria area to one shared engine.
+- Shared engines (`answers.prompt.md`, `comment.prompt.md`,
+ `recommendations.prompt.md`, all in `.github/prompts/areas/`) — the reusable
+ procedure for each output type. They are project-agnostic: the project name
+ and documentation label are read from the "Current Repository" section below,
+ so the same engines work in any repository.
+
+Prompt files for sections follow a similar structure, with section-level
+wrappers and an engine (`section-comment.prompt.md`), all in
+`.github/prompts/sections/`, to synthesize comments from the member areas.
+
+For areas only, there is also an optional composite engine `full.prompt.md`,
+that runs the `answers`, `comment`, and `recommendations` engines for one area
+in that order (recommendations depends on the answers and comment files existing
+first). A per-area `full` wrapper (for example,
+`/information-architecture-full`) invokes it to produce all three output files
+in a single run.
+
+The `section-comment.prompt.md` engine writes a two-to-five paragraph overall
+comment for one section by synthesizing that section's existing per-area comment
+files (it does not re-analyze the documentation), and it prepends a summary
+ratings table scraped from each area comment's `Rating:` line. Its data lives in
+`.github/criteria/sections/.md`, which lists the section's display
+name, slug, and member areas with the stem of each area's comment file. A
+per-section wrapper (for example, `/project-documentation-comment`) invokes it.
+Because the per-area comment files are a precondition, run the relevant
+`-comment` prompts first. By default the output is written to
+`.github/output/analysis/--comment.md` (for example,
+`kubevirt-project-documentation-comment.md`), overridable with a `title` input.
+
+Each criteria area needs three wrapper files (`answers`, `comment`,
+`recommendations`), and the wrappers are mechanical: they reference the area
+name and embed the display name in the description. A `full` wrapper is optional
+per area.
+
+By default a prompt writes to `--.md` in the
+`.github/output/analysis` directory (for example,
+`kubevirt-information-architecture-answers.md`). Provide an optional `title`
+input to override the filename. To add or change questions for an area, edit
+only its `.github/criteria/areas/.md` file.
+
+Output types: `answers`, `comment`, `recommendations` (plus the optional `full`
+composite). At the section level there is one additional output type, the
+section-level `comment` produced by the `section-comment` engine and its
+per-section wrappers.
+
+The analysis document has three sections: Project Documentation, Contributor
+Documentation, and Website & Infrastructure. Each section contains multiple
+criteria areas that are evaluated separately, and the results are synthesized
+into section-level overall comments.
+
+Sections (for the section-level overall comment):
+
+
+
+| Section | Section slug | Member areas (comment-file stems) |
+| ------------------------- | ------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
+| Project Documentation | project-documentation | information-architecture, new-user, content-maintainability, content-creation-process, inclusive-language |
+| Contributor Documentation | contributor-documentation | communication-methods-docd, beginner-issue-backlog, new-contributor, project-governance |
+| Website & Infrastructure | website-infrastructure | single-source-requirement, website-requirements, usability-accessibility-devices, branding-design, case-studies, seo-analytics, maintenance-planning, agent-readiness |
+
+
+
+Areas (the Area column is the criteria filename under `.github/criteria/areas/`
+and the prefix of the per-area wrapper prompts):
+
+
+
+| Area | Display Name | Output File Stem | Section in analysis.md |
+| -------------------------------- | --------------------------------------- | ------------------------------- | ------------------------- |
+| agent-readiness | AI Agent Readiness | agent-readiness | Website & Infrastructure |
+| beginner-issue-backlog | Beginner Friendly Issue Backlog | beginner-issue-backlog | Contributor Documentation |
+| branding-design | Branding and Design | branding-design | Website & Infrastructure |
+| case-studies | Case Studies | case-studies | Website & Infrastructure |
+| communication-methods-documented | Communication Methods Documented | communication-methods-docd | Contributor Documentation |
+| content-creation-process | Content Creation Process | content-creation-process | Project Documentation |
+| content-maintainability | Content Maintainability | content-maintainability | Project Documentation |
+| inclusive-language | Inclusive Language | inclusive-language | Project Documentation |
+| information-architecture | Information Architecture | information-architecture | Project Documentation |
+| maintenance-planning | Maintenance Planning | maintenance-planning | Website & Infrastructure |
+| new-contributor-content | New Contributor Getting Started Content | new-contributor | Contributor Documentation |
+| new-user-content | New User Content | new-user | Project Documentation |
+| project-governance-documentation | Project Governance Documentation | project-governance | Contributor Documentation |
+| seo-analytics | SEO, Analytics, and Site Search | seo-analytics | Website & Infrastructure |
+| single-source-requirement | Single-Source Requirement | single-source-requirement | Website & Infrastructure |
+| usability-accessibility-devices | Usability, Accessibility and Devices | usability-accessibility-devices | Website & Infrastructure |
+| website-requirements | Website Requirements | website-requirements | Website & Infrastructure |
+
+
+
+### Example: invoking a predefined prompt
+
+To have Copilot answer the information architecture questions, invoke the
+per-area wrapper as a slash command in the current directory:
+
+```text
+run /information-architecture-answers
+```
+
+This runs the `information-architecture` questions through the shared `answers`
+engine and writes the result to the default file
+`.github/output/analysis/kubevirt-information-architecture-answers.md`.
+
+To override the output filename, pass a `title` input:
+
+```text
+run /information-architecture-answers title: my-analysis
+```
+
+That writes the answers to `.github/output/analysis/my-analysis.md` instead of
+the default filename. The same pattern applies to every area and output type —
+for example, `/inclusive-language-recommendations` or
+`/new-user-content-comment`.
+
+## Analysis.md and Output Files Mapping
+
+Predefined prompts create Markdown files of their AI generated output. The
+content from these files, without the temporary H1 headings at the top, is
+copied into specific locations in the analysis.md file.
+
+
+
+| Output file | Location in analysis.md |
+| ----------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
+| `-project-documentation-comment.md` | **Start**: After the ratings table that follows the first paragraph that follows the "Project Documentation" H2. **End**: Before the sentence "The following sections contain assessments of each element of the Project Documentation rubric." |
+| `-contributor-documentation-comment.md` | **Start**: After the ratings table that follows the first paragraph that follows the "Contributor Documentation" H2. **End**: Before the sentence "The following sections contain assessments of each element of the Contributor Documentation rubric." |
+| `-website-infrastructure-comment.md` | **Start**: After the ratings table that follows the first paragraph that follows the "Website & Infrastructure" H2. **End**: Before the sentence "The following sections contain assessments of each element of the Website & Infrastructure rubric." |
+| `--answers.md` | **Start**: After the first paragraph that follows the H3 heading for an area, e.g. "### Information Architecture". That first paragraph should end with the sentence: "We evaluate on the following:". **End**: Before the H4 "Comment" heading. |
+| `--comment.md` | **Start**: After the H4 "Comment" heading. **End**: Before the next H3 or H2 heading. **Note**: Currently, only the Strengths and Weaknesses of the area comments are pasted into analysis.md. **Note**: The rating for the area (last line in the output) is later manually copied by a writer into the area summary ratings table for the section. |
+| `--recommendations.md` | **Start**: Under the H2 headings "Project documentation recommendations", "Contributor documentation recommendations", or "Website & infrastructure recommendations" and under the H3 heading for the area. **End**: Before the next H3 or H2 heading. |
+
+
+
+## Recommendations and Issues
+
+The `/rank-recommendations` prompt collects the recommendations from the
+per-area recommendations files in `.github/output/analysis/` and ranks them into
+`.github/input/ai-ranked-recommendations.csv`, with the following columns:
+
+- `Section` - Either the "Project Documentation", "Contributor documentation",
+ or "Website & Infrastructure" section.
+- `Area` - The specific area within the section that the recommendation pertains
+ to. The area names in the CSV are the display names used in the analysis, not
+ the criteria area filenames.
+- `Recommendation` - The AI-written recommendation describing the action that
+ should be taken.
+- `Suggested Priority` - The ranking priority: `1 - Urgent`, `2 - High`, or
+ `3 - Backlog`. These priorities were only for the recommendation ranking and
+ may be adjusted when creating issues.
+
+The priority labels used for issues are `urgent`, `high`, and `backlog`,
+matching the CSV ranking without its number prefix. The upload process maps them
+to the target repository's own labels using the "Priority label mapping" table
+in the "Current Repository" section. Assume all three mapped labels exist when
+writing the issue files; the pre-flight checklist in the harness `index.md`
+covers creating them.
+
+Every issue also gets the `help wanted` label. It exists in the repository and
+signals that maintainers are seeking community help; CNCF uses it to surface
+documentation tasks on [CLOTributor](https://clotributor.dev).
+
+Issues are a subset of the recommendations that have been identified as problems
+or areas needing attention. Not all recommendations are issues; some may be
+suggestions for improvement that do not indicate a problem. Copilot is to create
+the issues based on the ranked recommendations, and then group them into
+umbrella issues. Copilot may change the priority of the issues as it sees fit.
+As a reference, see the umbrella issues in
+[CNCF TechDocs Assistance issues tracker #221](https://github.com/cncf/techdocs/issues/221),
+the KEDA
+[standalone issue example](https://github.com/kedacore/keda-docs/issues/1363),
+and the KEDA
+[umbrella issue example](https://github.com/kedacore/keda-docs/issues/1361). The
+project's own assistance request is listed in the "Current Repository" section.
+
+Copilot will create Markdown files of the issues with updated priorities as
+applicable. These files will be stored in the `.github/output/issues/`
+directory. A process will then upload them to the project's repository, so every
+file in that directory must be a complete, uploadable issue. Issue creation runs
+in two passes, each with its own prompt:
+
+1. `/create-issues` writes one file per standalone issue, numbered sequentially.
+2. `/create-umbrella-issues` reads those files and writes umbrella issues that
+ link to them.
+
+In writing the issues, Copilot should use the following guidelines:
+
+- Source the issues only from the ranked recommendations CSV and the per-area
+ recommendations files in `.github/output/analysis/`. Do not add issues from
+ general knowledge of the project's repositories; that over-generates issues
+ the assessment did not identify.
+- Ensure that the issues are clearly described and actionable. Follow the
+ headings of the documentation issue template under `.github/templates/`
+ (`doc-issue.md` by default; the "Current Repository" section names the file).
+ Replace the default with the project's own documentation issue format when it
+ has one.
+- Each issue should take about two to four hours for a technical writer, or
+ engineer, with project context to complete.
+- Small tasks can be consolidated into one issue where appropriate. Avoid
+ flooding the project: aim for far fewer issues than recommendations.
+- Umbrella issues group three to ten related issues. Follow the
+ `.github/templates/umbrella-issue.md` template: an `## Umbrella Issue`
+ overview and a `## Sub-issues` list that links to the sub-issue files. The
+ umbrella does not contain the sub-issue content.
+- Copilot is at liberty to create subheadings in the issue files as needed to
+ organize the content effectively, but keeps the template's top-level headings.
+- Everything outside the front matter is the issue description and must be
+ GitHub-flavored Markdown.
+- Ensure the following front matter (metadata) is included at the top of each
+ issue file.
+ - Create a title and append the simulated issue number as `#{issue number}`.
+ It becomes the GitHub issue title.
+ - Set `labels` to the priority label (`urgent`, `high`, or `backlog`) plus
+ `help wanted`. Labels become GitHub issue labels.
+ - Set `repo` to the issues repository URL from the "Current Repository"
+ section.
+
+ ```yaml
+ ---
+ title: Add a user-facing troubleshooting page #9007
+ labels: [high, help wanted]
+ repo: https://github.com///issues
+ ---
+ ```
+
+### Issue numbers
+
+Issue numbers simulate GitHub issue numbers so that files can reference each
+other before upload. They are five digits, start at 9001, and increment by one
+for each issue in the order written. Umbrella issues continue the sequence after
+the last standalone issue. The `## Issues` table in
+`.github/output/issues-coverage.md` maps each number to its title, label, and
+file, and is how the umbrella prompt finds the next free number.
+
+In an umbrella issue, each sub-issue is one list item whose link text is the
+sub-issue title and number and whose target is the sub-issue file, relative to
+the umbrella file:
+
+```markdown
+- [Reorganize Concepts #9938](9938-reorganize-concepts.md)
+```
+
+#### Issue file names
+
+Save the issue files to the `.github/output/issues/` directory. Name standalone
+issue files `{issue-number}-{condensed-issue-title}.md` and umbrella issue files
+`U-{issue-number}-{condensed-issue-title}.md`. The condensed title is a
+lowercase, hyphenated version of the issue title, no more than about five words:
+
+- Keep the action verb and the main subject noun; drop articles, conjunctions,
+ and secondary clauses.
+- Name the topic (for example, `navigation`, `footer`, `virtctl`), not the
+ analysis area it came from.
+- When the title lists several changes, use a collective noun such as
+ `improvements` or `updates` instead of listing them.
+- Strip punctuation from version numbers (`v1.9` becomes `v19`).
+
+Examples of a file name built from a full title:
+
+
+
+| Issue title | File name |
+| ----------------------------------------------------------------- | --------------------------------------- |
+| Add a user-facing troubleshooting page #9007 | `9007-add-troubleshooting-page.md` |
+| Move Release Notes out of the main navigation #9004 | `9004-move-release-notes.md` |
+| Document the v1.9 VirtualMachineBackup API #9012 | `9012-document-v19-backup-api.md` |
+| Create a new-user getting started path #9061 | `U-9061-create-getting-started-path.md` |
+| Fix navigation gaps and reorganize information architecture #9062 | `U-9062-fix-navigation-gaps.md` |
+
+
+
+To archive a previous run, move its files into a sub-folder of
+`.github/output/issues/` (for example, `prev_1/`). The prompts ignore
+sub-folders and the folder's `readme.md`.
+
+### Rank recommendations AI prompt
+
+The prompt lives in `.github/prompts/issues/rank-recommendations.prompt.md`. Run
+it after all seventeen area recommendations files exist:
+
+```text
+run /rank-recommendations
+```
+
+It reads every `-*-recommendations.md` file in
+`.github/output/analysis/`, assigns each recommendation a `1 - Urgent`,
+`2 - High`, or `3 - Backlog` priority by impact and effort, and writes
+`.github/input/ai-ranked-recommendations.csv`. Review the ranking before running
+`/create-issues`; to adjust it, re-run with the corrections in the same message.
+
+### Create issues AI prompt
+
+The prompt lives in `.github/prompts/issues/create-issues.prompt.md` and is the
+single source of truth. Run it as a slash command from the repository root:
+
+```text
+run /create-issues
+```
+
+It deletes issue files from a previous run, writes the numbered standalone issue
+files, and writes `.github/output/issues-coverage.md` with the issue table, the
+recommendation-to-issue mapping, priority adjustments, and counts.
+
+To re-run after coaching Copilot on scope, run the command again and add the
+corrections in the same message, for example
+`run /create-issues — split the "Getting started" issue into two`.
+
+### Create umbrella issues AI prompt
+
+The prompt lives in `.github/prompts/issues/create-umbrella-issues.prompt.md`.
+Run it in a new session after `/create-issues` has finished and the writer has
+reviewed the standalone issues:
+
+```text
+run /create-umbrella-issues
+```
+
+It reads the standalone issue files and the `## Issues` table in
+`issues-coverage.md`, groups the issues into themes of three to ten, writes the
+`U-` umbrella files with the next free issue numbers, and appends the umbrellas
+to the coverage report. It does not modify standalone issue files or re-read the
+recommendations; if an issue needs re-scoping, re-run `/create-issues` first.
+
+To adjust the grouping, run the command again with the corrections in the same
+message, for example
+`run /create-umbrella-issues — merge the analytics and site-ownership umbrellas`.
+
+## Current Repository
+
+This section is the single place the engines and issue prompts read project
+context from. Replace every `` placeholder before running any
+prompt; the issue prompts stop if a placeholder is still present. See
+`examples/kubevirt/current-repository.md` in the harness for a completed
+example.
+
+
+
+- Project name:
+
+- Documentation label:
+
+- Ecosystem:
+
+- Main repository:
+- Secondary repositories:
+
+- Published documentation URL:
+- Project website URL:
+- Issues repository URL:
+
+- Issue template file:
+
+- CNCF project page URL:
+
+- Assistance-request issue:
+
+
+
+Copilot shall output Markdown files from the AI-assisted analysis to the
+`.github/output/analysis` directory and issue files to the
+`.github/output/issues` directory in the current repository.
+
+### Priority label mapping
+
+The upload process maps the harness labels to the issue repository's labels.
+Confirm each target label exists before uploading.
+
+| Harness label | Repository label |
+| ------------- | ----------------------------------------------- |
+| `urgent` | |
+| `high` | |
+| `backlog` | |
+| `help wanted` | `help wanted` |
+
+### What This Repo Is
+
+
+
+### Content Architecture
+
+
+
+```text
+docs/
+ index.md
+```
+
+### Key Conventions
+
+
+
+#### No commits
+
+This work is solely for documentation analysis. Copilot makes no commits to the
+documentation or application code in this repository; it writes only to
+`.github/input` and `.github/output`.
diff --git a/docs/analysis/ai-harness/_github/criteria/areas/agent-readiness.md b/docs/analysis/ai-harness/_github/criteria/areas/agent-readiness.md
new file mode 100644
index 00000000..c1a6958e
--- /dev/null
+++ b/docs/analysis/ai-harness/_github/criteria/areas/agent-readiness.md
@@ -0,0 +1,35 @@
+# AI agent readiness - Website and Infrastructure
+
+- Display name: AI Agent Readiness
+- File stem: agent-readiness
+
+## Questions
+
+- Does the documentation site publish an `llms.txt` file at the site or docs
+ root that follows the llmstxt.org structure (H1 title, blockquote summary, H2
+ sections of link lists)?
+- Do all links in `llms.txt` resolve, point to Markdown versions of pages, and
+ stay in sync with the published site (for example, generated at build time)?
+- Do HTML and Markdown pages include a directive near the top pointing agents to
+ `llms.txt`?
+- Is a clean Markdown version of each page served at the same URL with `.md`
+ appended or substituted, with content matching the HTML version?
+- Are pages rendered server-side or statically generated, with the main content
+ starting near the top of the response rather than behind large navigation or
+ script payloads?
+- Are pages small enough to avoid truncation in an agent's context window, and
+ do tabbed components and code fences serialize cleanly to Markdown?
+- Is the documentation publicly reachable without authentication gates or CDN
+ bot challenges, and do pages use correct HTTP status codes and standard HTTP
+ redirects?
+- Does the project monitor its CLOMonitor "Agent readiness" checks or run
+ `afdocs check` against the site, ideally in CI?
+
+## Comment guidance
+
+- Additional instructions: Reference sources for this area are the llms.txt
+ specification (https://llmstxt.org/), the CLOMonitor agent readiness checks
+ (https://clomonitor.io/docs/topics/checks/#agent-readiness), and the AFDocs
+ Agent-Friendly Documentation Spec (https://afdocs.dev/). Where possible,
+ verify by fetching the live site (`/llms.txt`, a page URL with `.md` appended)
+ rather than relying on the repository source alone.
diff --git a/docs/analysis/ai-harness/_github/criteria/areas/beginner-issue-backlog.md b/docs/analysis/ai-harness/_github/criteria/areas/beginner-issue-backlog.md
new file mode 100644
index 00000000..c9441830
--- /dev/null
+++ b/docs/analysis/ai-harness/_github/criteria/areas/beginner-issue-backlog.md
@@ -0,0 +1,16 @@
+# Beginner friendly issue backlog - Contributor Documentation
+
+- Display name: Beginner Friendly Issue Backlog
+- File stem: beginner-issue-backlog
+
+## Questions
+
+- Are docs issues well-triaged?
+- Is there a clearly marked way for new contributors to make code or
+ documentation contributions (i.e. a “good first issue” label)?
+- Are issues well-documented (i.e., more than just a title)?
+- Are issues maintained for staleness?
+
+## Comment guidance
+
+- Additional instructions: None.
diff --git a/docs/analysis/ai-harness/_github/criteria/areas/branding-design.md b/docs/analysis/ai-harness/_github/criteria/areas/branding-design.md
new file mode 100644
index 00000000..35ee03c9
--- /dev/null
+++ b/docs/analysis/ai-harness/_github/criteria/areas/branding-design.md
@@ -0,0 +1,15 @@
+# Branding and design - Website and Infrastructure
+
+- Display name: Branding and Design
+- File stem: branding-design
+
+## Questions
+
+- Is there an easily recognizable brand for the project (logo + color scheme)
+ clearly identifiable?
+- Is the brand used across the website consistently?
+- Is the website’s typography clean and well-suited for reading?
+
+## Comment guidance
+
+- Additional instructions: None.
diff --git a/docs/analysis/ai-harness/_github/criteria/areas/case-studies.md b/docs/analysis/ai-harness/_github/criteria/areas/case-studies.md
new file mode 100644
index 00000000..6aff04fe
--- /dev/null
+++ b/docs/analysis/ai-harness/_github/criteria/areas/case-studies.md
@@ -0,0 +1,17 @@
+# Case studies - Website and Infrastructure
+
+- Display name: Case Studies
+- File stem: case-studies
+
+## Questions
+
+- Are there case studies available for the project and are they documented on
+ the website?
+- Are there user testimonials available?
+- Is there an active project blog?
+- Are there community talks for the project and are they present on the website?
+- Is there a logo wall of users/participating organizations?
+
+## Comment guidance
+
+- Additional instructions: None.
diff --git a/docs/analysis/ai-harness/_github/criteria/areas/communication-methods-documented.md b/docs/analysis/ai-harness/_github/criteria/areas/communication-methods-documented.md
new file mode 100644
index 00000000..5b213a7a
--- /dev/null
+++ b/docs/analysis/ai-harness/_github/criteria/areas/communication-methods-documented.md
@@ -0,0 +1,17 @@
+# Communication methods documented - Contributor Documentation
+
+- Display name: Communication Methods Documented
+- File stem: communication-methods-docd
+
+## Questions
+
+- Is there a Slack/Discord/Discourse/etc. community and is it prominently linked
+ from your website?
+- Is there a direct link to your GitHub organization/repository?
+- Are weekly/monthly project meetings documented? Is it clear how someone can
+ join those meetings?
+- Are mailing lists documented?
+
+## Comment guidance
+
+- Additional instructions: None.
diff --git a/docs/analysis/ai-harness/_github/criteria/areas/content-creation-process.md b/docs/analysis/ai-harness/_github/criteria/areas/content-creation-process.md
new file mode 100644
index 00000000..4d4f2754
--- /dev/null
+++ b/docs/analysis/ai-harness/_github/criteria/areas/content-creation-process.md
@@ -0,0 +1,19 @@
+# Content creation process - Project Documentation
+
+- Display name: Content Creation Process
+- File stem: content-creation-process
+
+## Questions
+
+- Is there a clearly documented (ongoing) contribution process for
+ documentation?
+- Does the code release process account for documentation creation & updates?
+- Who reviews and approves documentation pull requests?
+- Does the website have a clear owner/maintainer?
+
+## Comment guidance
+
+- Good examples:
+ - https://github.com/nats-io/nats-site/blob/master/MAINTAINERS.md
+ - https://thanos.io/tip/contributing/how-to-contribute-to-docs.md
+- Additional instructions: None.
diff --git a/docs/analysis/ai-harness/_github/criteria/areas/content-maintainability.md b/docs/analysis/ai-harness/_github/criteria/areas/content-maintainability.md
new file mode 100644
index 00000000..85874b8c
--- /dev/null
+++ b/docs/analysis/ai-harness/_github/criteria/areas/content-maintainability.md
@@ -0,0 +1,17 @@
+# Content maintainability - Project Documentation
+
+- Display name: Content Maintainability
+- File stem: content-maintainability
+
+## Questions
+
+- Is the documentation searchable?
+- Are there plans for localization/internationalization with regards to site
+ directory structure? Is a localization framework present?
+- Is there a clearly documented method for versioning of content?
+
+## Comment guidance
+
+- Good examples:
+ - https://kubernetes.io/docs/
+- Additional instructions: None.
diff --git a/docs/analysis/ai-harness/_github/criteria/areas/inclusive-language.md b/docs/analysis/ai-harness/_github/criteria/areas/inclusive-language.md
new file mode 100644
index 00000000..83523dac
--- /dev/null
+++ b/docs/analysis/ai-harness/_github/criteria/areas/inclusive-language.md
@@ -0,0 +1,17 @@
+# Inclusive language - Project Documentation
+
+- Display name: Inclusive Language
+- File stem: inclusive-language
+
+## Questions
+
+- Are there any customer-facing utilities, endpoints, class names, or feature
+ names that use non-recommended words as documented by the
+ [Inclusive Naming Initiative](https://inclusivenaming.org) website?
+- Does the project use language like "simple", "easy", etc.?
+
+## Comment guidance
+
+- Good examples: None.
+- Additional instructions: Focus the comment on any inclusive language concerns
+ in the documentation.
diff --git a/docs/analysis/ai-harness/_github/criteria/areas/information-architecture.md b/docs/analysis/ai-harness/_github/criteria/areas/information-architecture.md
new file mode 100644
index 00000000..369feb5a
--- /dev/null
+++ b/docs/analysis/ai-harness/_github/criteria/areas/information-architecture.md
@@ -0,0 +1,26 @@
+# Information architecture - Project Documentation
+
+- Display name: Information architecture
+- File stem: information-architecture
+
+## Questions
+
+- Is there high level conceptual content?
+- Is the documentation feature complete?
+- Are there step-by-step instructions documented for features in tasks and
+ tutorials?
+- Are there any key features that are documented but missing task documentation?
+- Is the “happy path” (most common use case) documented?
+- Are tasks clearly named according to user goals?
+- If the documentation doesn't suffice, is there a clear escalation path for
+ users needing more help? (FAQ, Troubleshooting)
+- If the product exposes an API, is there a complete reference that includes
+ documented CLIs as applicable?
+- Is content up to date and accurate?
+- Does the documentation need restructuring?
+
+## Comment guidance
+
+- Good examples:
+ - https://prometheus.io/docs
+- Additional instructions: None.
diff --git a/docs/analysis/ai-harness/_github/criteria/areas/maintenance-planning.md b/docs/analysis/ai-harness/_github/criteria/areas/maintenance-planning.md
new file mode 100644
index 00000000..587309f7
--- /dev/null
+++ b/docs/analysis/ai-harness/_github/criteria/areas/maintenance-planning.md
@@ -0,0 +1,18 @@
+# Maintenance planning - Website and Infrastructure
+
+- Display name: Maintenance Planning
+- File stem: maintenance-planning
+
+## Questions
+
+- Is the website tooling well supported by the community (i.e., Hugo with the
+ Docsy theme) or commonly used by CNCF projects?
+- Is there active cultivating website maintainers from within the community?
+- Are site build times reasonable?
+- Do site maintainers have adequate permissions?
+- Is the website accessible via HTTPS?
+- Does HTTP access, if any, redirect to HTTPS?
+
+## Comment guidance
+
+- Additional instructions: None.
diff --git a/docs/analysis/ai-harness/_github/criteria/areas/new-contributor-content.md b/docs/analysis/ai-harness/_github/criteria/areas/new-contributor-content.md
new file mode 100644
index 00000000..ec32bb11
--- /dev/null
+++ b/docs/analysis/ai-harness/_github/criteria/areas/new-contributor-content.md
@@ -0,0 +1,14 @@
+# New contributor getting started content - Contributor Documentation
+
+- Display name: New Contributor Getting Started Content
+- File stem: new-contributor
+
+## Questions
+
+- Do you have a community repository or section on your website?
+- Is there a document specifically for new contributors/your first contribution?
+- Do new users know where to get help?
+
+## Comment guidance
+
+- Additional instructions: None.
diff --git a/docs/analysis/ai-harness/_github/criteria/areas/new-user-content.md b/docs/analysis/ai-harness/_github/criteria/areas/new-user-content.md
new file mode 100644
index 00000000..c048353d
--- /dev/null
+++ b/docs/analysis/ai-harness/_github/criteria/areas/new-user-content.md
@@ -0,0 +1,21 @@
+# New user content - Project Documentation
+
+- Display name: New User Content
+- File stem: new-user
+
+## Questions
+
+- Is “Getting started” clearly labeled? (e.g “Getting started”, “Installation”,
+ “First steps”, etc.)
+- Is installation documented step-by-step?
+- If needed, is guidance provided for multiple operating systems and platforms?
+- Do users know where to go after reading the getting started guide?
+- Is your new user content clearly discoverable, such as on the documentation
+ home page?
+- Is there sample code or content that can easily be copy-pasted?
+
+## Comment guidance
+
+- Good examples:
+ - https://falco.org/docs/getting-started/
+- Additional instructions: None.
diff --git a/docs/analysis/ai-harness/_github/criteria/areas/project-governance-documentation.md b/docs/analysis/ai-harness/_github/criteria/areas/project-governance-documentation.md
new file mode 100644
index 00000000..9efe6cba
--- /dev/null
+++ b/docs/analysis/ai-harness/_github/criteria/areas/project-governance-documentation.md
@@ -0,0 +1,12 @@
+# Project Governance Documentation - Contributor Documentation
+
+- Display name: Project Governance Documentation
+- File stem: project-governance
+
+## Questions
+
+- Is project governance clearly documented?
+
+## Comment guidance
+
+- Additional instructions: None.
diff --git a/docs/analysis/ai-harness/_github/criteria/areas/seo-analytics.md b/docs/analysis/ai-harness/_github/criteria/areas/seo-analytics.md
new file mode 100644
index 00000000..8192b967
--- /dev/null
+++ b/docs/analysis/ai-harness/_github/criteria/areas/seo-analytics.md
@@ -0,0 +1,20 @@
+# SEO, analytics, and local site search - Website and Infrastructure
+
+- Display name: SEO Analytics and Site Search
+- File stem: seo-analytics
+
+## Questions
+
+- Is analytics enabled for the production server?
+- Is analytics disabled for all other deploys?
+- If project is using Google Analytics, has it migrated to GA4?
+- Can Page-not-found (404) reports easily be generated from site analytics?
+- Is site indexing supported for the production server, while disabled for
+ website previews and builds for non-default branches?
+- Is local intra-site search available from the website?
+- Are the current custodian(s) of the analytics accounts (such as Google CSE)
+ documented?
+
+## Comment guidance
+
+- Additional instructions: None.
diff --git a/docs/analysis/ai-harness/_github/criteria/areas/single-source-requirement.md b/docs/analysis/ai-harness/_github/criteria/areas/single-source-requirement.md
new file mode 100644
index 00000000..bb893a34
--- /dev/null
+++ b/docs/analysis/ai-harness/_github/criteria/areas/single-source-requirement.md
@@ -0,0 +1,13 @@
+# Single source requirement - Website and Infrastructure
+
+- Display name: Single-Source Requirement
+- File stem: single-source-requirement
+
+## Questions
+
+- Does the project have a single source for its documentation? If not, is there
+ a reason?
+
+## Comment guidance
+
+- Additional instructions: None.
diff --git a/docs/analysis/ai-harness/_github/criteria/areas/usability-accessibility-devices.md b/docs/analysis/ai-harness/_github/criteria/areas/usability-accessibility-devices.md
new file mode 100644
index 00000000..aee3279c
--- /dev/null
+++ b/docs/analysis/ai-harness/_github/criteria/areas/usability-accessibility-devices.md
@@ -0,0 +1,18 @@
+# Usability, accessibility and devices - Website and Infrastructure
+
+- Display name: Usability Accessibility and Devices
+- File stem: usability-accessibility-devices
+
+## Questions
+
+- Is the website usable from mobile?
+- Are doc pages readable?
+- Are all / most website features accessible from mobile -- such as the top-nav,
+ site search and in-page table of contents?
+- Are color contrasts significant enough for color-impaired readers?
+- Are most website features usable using a keyboard only?
+- Does text-to-speech offer listeners a good experience?
+
+## Comment guidance
+
+- Additional instructions: None.
diff --git a/docs/analysis/ai-harness/_github/criteria/areas/website-requirements.md b/docs/analysis/ai-harness/_github/criteria/areas/website-requirements.md
new file mode 100644
index 00000000..ca6c8668
--- /dev/null
+++ b/docs/analysis/ai-harness/_github/criteria/areas/website-requirements.md
@@ -0,0 +1,13 @@
+# Website requirements - Website and Infrastructure
+
+- Display name: Website Requirements
+- File stem: website-requirements
+
+## Questions
+
+- Are most of the applicable CNCF Website Guidelines satisfied? See
+ https://github.com/cncf/techdocs/blob/main/docs/website-guidelines-checklist.md
+
+## Comment guidance
+
+- Additional instructions: None.
diff --git a/docs/analysis/ai-harness/_github/criteria/sections/contributor-documentation.md b/docs/analysis/ai-harness/_github/criteria/sections/contributor-documentation.md
new file mode 100644
index 00000000..51a50ec4
--- /dev/null
+++ b/docs/analysis/ai-harness/_github/criteria/sections/contributor-documentation.md
@@ -0,0 +1,17 @@
+# Contributor Documentation
+
+- Display name: Contributor Documentation
+- Section slug: contributor-documentation
+
+## Areas
+
+Each row is an area in this section: its criterion label (used for the summary
+ratings table) and the stem of its existing per-area comment file
+(`--comment.md`).
+
+| Criterion | Comment file stem |
+| ----------------------------------------- | -------------------------- |
+| Communication methods documented | communication-methods-docd |
+| Beginner friendly issue backlog | beginner-issue-backlog |
+| "New contributor" getting started content | new-contributor |
+| Project governance documentation | project-governance |
diff --git a/docs/analysis/ai-harness/_github/criteria/sections/project-documentation.md b/docs/analysis/ai-harness/_github/criteria/sections/project-documentation.md
new file mode 100644
index 00000000..ec44bd91
--- /dev/null
+++ b/docs/analysis/ai-harness/_github/criteria/sections/project-documentation.md
@@ -0,0 +1,18 @@
+# Project Documentation
+
+- Display name: Project Documentation
+- Section slug: project-documentation
+
+## Areas
+
+Each row is an area in this section: its criterion label (used for the summary
+ratings table) and the stem of its existing per-area comment file
+(`--comment.md`).
+
+| Criterion | Comment file stem |
+| -------------------------- | ------------------------ |
+| Information architecture | information-architecture |
+| New user content | new-user |
+| Content maintainability | content-maintainability |
+| Content creation processes | content-creation-process |
+| Inclusive language | inclusive-language |
diff --git a/docs/analysis/ai-harness/_github/criteria/sections/website-infrastructure.md b/docs/analysis/ai-harness/_github/criteria/sections/website-infrastructure.md
new file mode 100644
index 00000000..5df4ad05
--- /dev/null
+++ b/docs/analysis/ai-harness/_github/criteria/sections/website-infrastructure.md
@@ -0,0 +1,25 @@
+# Website and Infrastructure
+
+- Display name: Website and Infrastructure
+- Section slug: website-infrastructure
+
+## Areas
+
+Each row is an area in this section: its criterion label (used for the summary
+ratings table) and the stem of its existing per-area comment file
+(`--comment.md`).
+
+
+
+| Criterion | Comment file stem |
+| ------------------------------------------- | ------------------------------- |
+| Single-source for all files | single-source-requirement |
+| Meets min website req. (for maturity level) | website-requirements |
+| Usability, accessibility, and design | usability-accessibility-devices |
+| Branding and design | branding-design |
+| Case studies/social proof | case-studies |
+| SEO, Analytics, and site-local search | seo-analytics |
+| Maintenance planning | maintenance-planning |
+| AI agent readiness | agent-readiness |
+
+
diff --git a/docs/analysis/ai-harness/_github/examples/kubevirt/current-repository.md b/docs/analysis/ai-harness/_github/examples/kubevirt/current-repository.md
new file mode 100644
index 00000000..456fb45c
--- /dev/null
+++ b/docs/analysis/ai-harness/_github/examples/kubevirt/current-repository.md
@@ -0,0 +1,92 @@
+# KubeVirt example: Current Repository section
+
+This is the "Current Repository" section of `copilot-instructions.md` as filled
+in for the KubeVirt user guide analysis
+([cncf/techdocs#343](https://github.com/cncf/techdocs/issues/343)). Use it as a
+model when completing the fill-in template in your own copy of
+`.github/copilot-instructions.md`. The accompanying `kubevirt-doc-issue.md` is
+the issue template the KubeVirt run used in place of the generic
+`templates/doc-issue.md`.
+
+## Current Repository
+
+- Project name: KubeVirt
+- Documentation label: the KubeVirt user guide
+- Ecosystem: Kubernetes
+- Main repository: [KubeVirt](https://github.com/kubevirt/kubevirt)
+- Secondary repositories:
+ [KubeVirt.github.io](https://github.com/kubevirt/kubevirt.github.io) (website
+ and lab docs)
+- Published documentation URL: https://kubevirt.io/user-guide/
+- Project website URL: https://kubevirt.io/
+- Issues repository URL: https://github.com/kubevirt/user-guide/issues
+- Issue template file: kubevirt-doc-issue.md
+- CNCF project page URL: https://www.cncf.io/projects/kubevirt/
+- Assistance-request issue: cncf/techdocs#343
+
+Copilot shall output Markdown files from the AI-assisted analysis to the
+`.github/output/analysis` directory and issue files to the
+`.github/output/issues` directory in the current repository.
+
+### Priority label mapping
+
+| Harness label | Repository label |
+| ------------- | -------------------------- |
+| `urgent` | `priority/critical-urgent` |
+| `high` | `priority/high` |
+| `backlog` | `priority/backlog` |
+| `help wanted` | `help wanted` |
+
+### What This Repo Is
+
+This is the [KubeVirt user guide](https://kubevirt.io/user-guide), a
+documentation-only site built with [MkDocs](https://www.mkdocs.org/) using the
+`mkdocs-material` theme and `mkdocs-awesome-nav` plugin. All content lives in
+`./docs` as Markdown files. There is no application code.
+
+### Content Architecture
+
+```text
+docs/
+ .nav.yml # Top-level navigation order
+ index.md
+ architecture.md
+ cluster_admin/ # Installation, feature gates, RBAC, node ops
+ user_workloads/ # VM lifecycle, instancetypes, virtctl, startup scripts
+ compute/ # CPU/memory, live migration, hugepages, NUMA
+ network/ # Interfaces, hotplug, binding plugins, Istio
+ storage/ # CDI, volumes, snapshots, clone, export
+ debug_virt_stack/ # Debugging guides
+```
+
+### Key Conventions
+
+#### Navigation order via `.nav.yml`
+
+Every subdirectory under `docs/` has a `.nav.yml` that explicitly controls page
+ordering. Alphabetical order is intentionally not used. When adding a new page,
+add it to the relevant `.nav.yml`.
+
+#### Redirects in `mkdocs.yml`
+
+Old page paths (e.g. `operations/`, `virtual_machines/`) are redirected to their
+new locations via the `redirects` plugin in `mkdocs.yml`. When moving or
+renaming a page, add an entry there.
+
+#### No commits
+
+This work is solely for documentation analysis. There are no commits to the
+application code in this repository.
+
+#### Spelling dictionary
+
+The yaspeller dictionary is sourced from
+`kubevirt/project-infra/images/yaspeller/.yaspeller.json`. If a technical term
+causes false positives, it needs to be added there (upstream), not locally —
+unless a local `yaspeller.json` override is present.
+
+#### MkDocs extensions in use
+
+Pages can use: `admonition`, `footnotes`, `toc` with `permalink`,
+`pymdownx.highlight`, `pymdownx.superfences`, `attr_list`, and `pymdownx.emoji`.
+These are already configured in `mkdocs.yml` — no additional setup needed.
diff --git a/docs/analysis/ai-harness/_github/examples/kubevirt/kubevirt-doc-issue.md b/docs/analysis/ai-harness/_github/examples/kubevirt/kubevirt-doc-issue.md
new file mode 100644
index 00000000..8b6bb877
--- /dev/null
+++ b/docs/analysis/ai-harness/_github/examples/kubevirt/kubevirt-doc-issue.md
@@ -0,0 +1,24 @@
+---
+title: { title } #{Issue number}
+labels: [high, help wanted]
+repo: https://github.com/kubevirt/user-guide/issues
+---
+
+
+
+## Description
+
+A clear and concise description of what the issue is.
+
+## What you expected
+
+A clear and concise description of what you expected.
+
+## URL
+
+Provide a link to the documentation.
+
+## Additional context
+
+Add any other context about the issue here.
diff --git a/docs/analysis/ai-harness/_github/input/readme.md b/docs/analysis/ai-harness/_github/input/readme.md
new file mode 100644
index 00000000..76403e00
--- /dev/null
+++ b/docs/analysis/ai-harness/_github/input/readme.md
@@ -0,0 +1,16 @@
+# About this folder
+
+Use this folder to place temporary prompt files, spreadsheets, or anything else
+you ask Copilot to read in a session.
+
+One file is required by the issue pipeline:
+
+- `ai-ranked-recommendations.csv` — the ranked recommendations that
+ `/create-issues` reads. The `/rank-recommendations` prompt produces it from
+ the per-area recommendations files in `../output/analysis/`. Columns:
+ - `Section` — `Project Documentation`, `Contributor Documentation`, or
+ `Website & Infrastructure`.
+ - `Area` — the area display name used in the analysis (for example
+ `Information Architecture`), not the criteria filename.
+ - `Recommendation` — the recommendation text, one per row.
+ - `Suggested Priority` — `1 - Urgent`, `2 - High`, or `3 - Backlog`.
diff --git a/docs/analysis/ai-harness/_github/output/analysis/readme.md b/docs/analysis/ai-harness/_github/output/analysis/readme.md
new file mode 100644
index 00000000..46e9a655
--- /dev/null
+++ b/docs/analysis/ai-harness/_github/output/analysis/readme.md
@@ -0,0 +1,8 @@
+# Analysis output
+
+The area prompts (`/-answers`, `/-comment`,
+`/-recommendations`, `/-full`) and the section prompts
+(`/-comment`) write their Markdown output here. The
+`/rank-recommendations` and `/create-issues` prompts read from this folder.
+
+This readme exists so Git keeps the folder; leave it in place.
diff --git a/docs/analysis/ai-harness/_github/output/issues/readme.md b/docs/analysis/ai-harness/_github/output/issues/readme.md
new file mode 100644
index 00000000..442a85f7
--- /dev/null
+++ b/docs/analysis/ai-harness/_github/output/issues/readme.md
@@ -0,0 +1,10 @@
+# Issue output
+
+`/create-issues` writes numbered standalone issue files here
+(`{issue-number}-{condensed-title}.md`) and `/create-umbrella-issues` writes
+umbrella issue files (`U-{issue-number}-{condensed-title}.md`). The upload
+process treats every `*.md` file in this folder except this readme as an issue
+to create.
+
+To keep a previous run, move its files into a sub-folder (for example
+`prev_1/`); the prompts ignore sub-folders.
diff --git a/docs/analysis/ai-harness/_github/output/readme.md b/docs/analysis/ai-harness/_github/output/readme.md
new file mode 100644
index 00000000..82380b8d
--- /dev/null
+++ b/docs/analysis/ai-harness/_github/output/readme.md
@@ -0,0 +1,11 @@
+# About this folder
+
+This folder contains two sub-folders for Copilot to place output:
+
+- `analysis/` — per-area and per-section output files written by the area and
+ section prompts (`--.md`).
+- `issues/` — numbered standalone and umbrella issue files written by
+ `/create-issues` and `/create-umbrella-issues`.
+
+The `/create-issues` prompt also writes `issues-coverage.md` directly in this
+folder, outside `issues/`, so it is not uploaded as an issue.
diff --git a/docs/analysis/ai-harness/_github/prompts/areas/agent-readiness-answers.prompt.md b/docs/analysis/ai-harness/_github/prompts/areas/agent-readiness-answers.prompt.md
new file mode 100644
index 00000000..e2492dd2
--- /dev/null
+++ b/docs/analysis/ai-harness/_github/prompts/areas/agent-readiness-answers.prompt.md
@@ -0,0 +1,20 @@
+---
+mode: agent
+description:
+ Answer the CNCF TechDocs AI agent readiness questions for the documentation.
+---
+
+# AI Agent Readiness answers
+
+Run the shared **answers** analysis for the `agent-readiness` criteria area.
+
+1. Read the criteria definition in `.github/criteria/areas/agent-readiness.md`.
+2. Read and follow the shared procedure in
+ `.github/prompts/areas/answers.prompt.md`, treating `agent-readiness` as the
+ selected area.
+
+Optional output filename override: `${input:title}` — if non-empty, use it as
+the output filename; otherwise use the engine's default
+(`--answers.md`).
+
+Output the file to the `.github/output/analysis` directory.
diff --git a/docs/analysis/ai-harness/_github/prompts/areas/agent-readiness-comment.prompt.md b/docs/analysis/ai-harness/_github/prompts/areas/agent-readiness-comment.prompt.md
new file mode 100644
index 00000000..c91214d1
--- /dev/null
+++ b/docs/analysis/ai-harness/_github/prompts/areas/agent-readiness-comment.prompt.md
@@ -0,0 +1,19 @@
+---
+mode: agent
+description: Write a comment on the AI agent readiness of the documentation.
+---
+
+# AI Agent Readiness comment
+
+Run the shared **comment** analysis for the `agent-readiness` criteria area.
+
+1. Read the criteria definition in `.github/criteria/areas/agent-readiness.md`.
+2. Read and follow the shared procedure in
+ `.github/prompts/areas/comment.prompt.md`, treating `agent-readiness` as the
+ selected area.
+
+Optional output filename override: `${input:title}` — if non-empty, use it as
+the output filename; otherwise use the engine's default
+(`--comment.md`).
+
+Output the file to the `.github/output/analysis` directory.
diff --git a/docs/analysis/ai-harness/_github/prompts/areas/agent-readiness-full.prompt.md b/docs/analysis/ai-harness/_github/prompts/areas/agent-readiness-full.prompt.md
new file mode 100644
index 00000000..0252c544
--- /dev/null
+++ b/docs/analysis/ai-harness/_github/prompts/areas/agent-readiness-full.prompt.md
@@ -0,0 +1,22 @@
+---
+mode: agent
+description:
+ Run the full `agent-readiness` analysis (answers, comment, and
+ recommendations) for the documentation.
+---
+
+# AI Agent Readiness full analysis
+
+Run the shared **full** analysis for the `agent-readiness` criteria area.
+
+1. Read the criteria definition in `.github/criteria/areas/agent-readiness.md`.
+2. Read and follow the shared procedure in
+ `.github/prompts/areas/full.prompt.md`, treating `agent-readiness` as the
+ selected area.
+
+Optional output filename override: `${input:title}` — if non-empty, use it as
+the base name for all three output files (`-answers.md`,
+`-comment.md`, `-recommendations.md`); otherwise use each engine's
+default (`--.md`).
+
+Output the file to the `.github/output/analysis` directory.
diff --git a/docs/analysis/ai-harness/_github/prompts/areas/agent-readiness-recommendations.prompt.md b/docs/analysis/ai-harness/_github/prompts/areas/agent-readiness-recommendations.prompt.md
new file mode 100644
index 00000000..ef84718d
--- /dev/null
+++ b/docs/analysis/ai-harness/_github/prompts/areas/agent-readiness-recommendations.prompt.md
@@ -0,0 +1,22 @@
+---
+mode: agent
+description:
+ Provide recommendations for improving the AI agent readiness of the
+ documentation.
+---
+
+# AI Agent Readiness recommendations
+
+Run the shared **recommendations** analysis for the `agent-readiness` criteria
+area.
+
+1. Read the criteria definition in `.github/criteria/areas/agent-readiness.md`.
+2. Read and follow the shared procedure in
+ `.github/prompts/areas/recommendations.prompt.md`, treating `agent-readiness`
+ as the selected area.
+
+Optional output filename override: `${input:title}` — if non-empty, use it as
+the output filename; otherwise use the engine's default
+(`--recommendations.md`).
+
+Output the file to the `.github/output/analysis` directory.
diff --git a/docs/analysis/ai-harness/_github/prompts/areas/answers.prompt.md b/docs/analysis/ai-harness/_github/prompts/areas/answers.prompt.md
new file mode 100644
index 00000000..472e162c
--- /dev/null
+++ b/docs/analysis/ai-harness/_github/prompts/areas/answers.prompt.md
@@ -0,0 +1,45 @@
+---
+mode: agent
+description:
+ Shared engine for producing analysis answers. Normally run via a per-area
+ wrapper such as /information-architecture-answers.
+---
+
+# Shared engine: answers
+
+This is the reusable procedure for answering an analysis area's questions. It is
+normally invoked through a per-area wrapper prompt (for example,
+`/information-architecture-answers`), which selects the criteria area for you.
+
+## Inputs
+
+- Area — the criteria area to analyze. When run from a wrapper, the wrapper
+ names it. If you reached this engine without an area, ask the user to choose
+ one of the areas defined in `.github/criteria/areas/` (the area name is the
+ criteria filename without `.md`).
+- Title (optional) — overrides the default output filename.
+
+## Procedure
+
+1. Read the criteria definition at `.github/criteria/areas/.md`. It
+ defines the area's Display name, File stem, and Questions.
+2. Determine the project name from the "Current Repository" section of the
+ repository Copilot instructions. Derive a project slug by lowercasing the
+ name and replacing spaces with hyphens (for example, "KubeVirt" becomes
+ `kubevirt`).
+3. Answer every question in the criteria file's "Questions" section, using the
+ sources described in the "Current Repository" section as context.
+
+## Output
+
+- Present the answers as indented paragraphs by two spaces under each question.
+ Format each question as a bullet, not as a heading. Do not bold the answers.
+- If an answer is "yes" or "no", provide a brief explanation.
+- Aim for two to three paragraphs.
+- Write the result to a Markdown file in the `.github/output/analysis`
+ directory:
+ - If a title was provided, name the file `.md`.
+ - Otherwise name it `--answers.md`.
+ - If a file exists by the same name, overwrite it.
+
+Output the file to the `.github/output/analysis` directory.
diff --git a/docs/analysis/ai-harness/_github/prompts/areas/beginner-issue-backlog-answers.prompt.md b/docs/analysis/ai-harness/_github/prompts/areas/beginner-issue-backlog-answers.prompt.md
new file mode 100644
index 00000000..e7e84104
--- /dev/null
+++ b/docs/analysis/ai-harness/_github/prompts/areas/beginner-issue-backlog-answers.prompt.md
@@ -0,0 +1,23 @@
+---
+mode: agent
+description:
+ Answer the CNCF TechDocs beginner friendly issue backlog questions for the
+ documentation.
+---
+
+# Beginner Friendly Issue Backlog answers
+
+Run the shared **answers** analysis for the `beginner-issue-backlog` criteria
+area.
+
+1. Read the criteria definition in
+ `.github/criteria/areas/beginner-issue-backlog.md`.
+2. Read and follow the shared procedure in
+ `.github/prompts/areas/answers.prompt.md`, treating `beginner-issue-backlog`
+ as the selected area.
+
+Optional output filename override: `${input:title}` — if non-empty, use it as
+the output filename; otherwise use the engine's default
+(`--answers.md`).
+
+Output the file to the `.github/output/analysis` directory.
diff --git a/docs/analysis/ai-harness/_github/prompts/areas/beginner-issue-backlog-comment.prompt.md b/docs/analysis/ai-harness/_github/prompts/areas/beginner-issue-backlog-comment.prompt.md
new file mode 100644
index 00000000..db686c6d
--- /dev/null
+++ b/docs/analysis/ai-harness/_github/prompts/areas/beginner-issue-backlog-comment.prompt.md
@@ -0,0 +1,22 @@
+---
+mode: agent
+description:
+ Write a comment on the beginner friendly issue backlog of the documentation.
+---
+
+# Beginner Friendly Issue Backlog comment
+
+Run the shared **comment** analysis for the `beginner-issue-backlog` criteria
+area.
+
+1. Read the criteria definition in
+ `.github/criteria/areas/beginner-issue-backlog.md`.
+2. Read and follow the shared procedure in
+ `.github/prompts/areas/comment.prompt.md`, treating `beginner-issue-backlog`
+ as the selected area.
+
+Optional output filename override: `${input:title}` — if non-empty, use it as
+the output filename; otherwise use the engine's default
+(`--comment.md`).
+
+Output the file to the `.github/output/analysis` directory.
diff --git a/docs/analysis/ai-harness/_github/prompts/areas/beginner-issue-backlog-full.prompt.md b/docs/analysis/ai-harness/_github/prompts/areas/beginner-issue-backlog-full.prompt.md
new file mode 100644
index 00000000..bf5b12c3
--- /dev/null
+++ b/docs/analysis/ai-harness/_github/prompts/areas/beginner-issue-backlog-full.prompt.md
@@ -0,0 +1,23 @@
+---
+mode: agent
+description:
+ Run the full `beginner-issue-backlog` analysis (answers, comment, and
+ recommendations) for the documentation.
+---
+
+# Beginner Friendly Issue Backlog full analysis
+
+Run the shared **full** analysis for the `beginner-issue-backlog` criteria area.
+
+1. Read the criteria definition in
+ `.github/criteria/areas/beginner-issue-backlog.md`.
+2. Read and follow the shared procedure in
+ `.github/prompts/areas/full.prompt.md`, treating `beginner-issue-backlog` as
+ the selected area.
+
+Optional output filename override: `${input:title}` — if non-empty, use it as
+the base name for all three output files (`-answers.md`,
+`-comment.md`, `-recommendations.md`); otherwise use each engine's
+default (`--.md`).
+
+Output the file to the `.github/output/analysis` directory.
diff --git a/docs/analysis/ai-harness/_github/prompts/areas/beginner-issue-backlog-recommendations.prompt.md b/docs/analysis/ai-harness/_github/prompts/areas/beginner-issue-backlog-recommendations.prompt.md
new file mode 100644
index 00000000..ae95b46d
--- /dev/null
+++ b/docs/analysis/ai-harness/_github/prompts/areas/beginner-issue-backlog-recommendations.prompt.md
@@ -0,0 +1,23 @@
+---
+mode: agent
+description:
+ Provide recommendations for improving the beginner friendly issue backlog of
+ the documentation.
+---
+
+# Beginner Friendly Issue Backlog recommendations
+
+Run the shared **recommendations** analysis for the `beginner-issue-backlog`
+criteria area.
+
+1. Read the criteria definition in
+ `.github/criteria/areas/beginner-issue-backlog.md`.
+2. Read and follow the shared procedure in
+ `.github/prompts/areas/recommendations.prompt.md`, treating
+ `beginner-issue-backlog` as the selected area.
+
+Optional output filename override: `${input:title}` — if non-empty, use it as
+the output filename; otherwise use the engine's default
+(`--recommendations.md`).
+
+Output the file to the `.github/output/analysis` directory.
diff --git a/docs/analysis/ai-harness/_github/prompts/areas/branding-design-answers.prompt.md b/docs/analysis/ai-harness/_github/prompts/areas/branding-design-answers.prompt.md
new file mode 100644
index 00000000..c20c7bee
--- /dev/null
+++ b/docs/analysis/ai-harness/_github/prompts/areas/branding-design-answers.prompt.md
@@ -0,0 +1,20 @@
+---
+mode: agent
+description:
+ Answer the CNCF TechDocs branding and design questions for the documentation.
+---
+
+# Branding and Design answers
+
+Run the shared **answers** analysis for the `branding-design` criteria area.
+
+1. Read the criteria definition in `.github/criteria/areas/branding-design.md`.
+2. Read and follow the shared procedure in
+ `.github/prompts/areas/answers.prompt.md`, treating `branding-design` as the
+ selected area.
+
+Optional output filename override: `${input:title}` — if non-empty, use it as
+the output filename; otherwise use the engine's default
+(`--answers.md`).
+
+Output the file to the `.github/output/analysis` directory.
diff --git a/docs/analysis/ai-harness/_github/prompts/areas/branding-design-comment.prompt.md b/docs/analysis/ai-harness/_github/prompts/areas/branding-design-comment.prompt.md
new file mode 100644
index 00000000..c0ed58d5
--- /dev/null
+++ b/docs/analysis/ai-harness/_github/prompts/areas/branding-design-comment.prompt.md
@@ -0,0 +1,19 @@
+---
+mode: agent
+description: Write a comment on the branding and design of the documentation.
+---
+
+# Branding and Design comment
+
+Run the shared **comment** analysis for the `branding-design` criteria area.
+
+1. Read the criteria definition in `.github/criteria/areas/branding-design.md`.
+2. Read and follow the shared procedure in
+ `.github/prompts/areas/comment.prompt.md`, treating `branding-design` as the
+ selected area.
+
+Optional output filename override: `${input:title}` — if non-empty, use it as
+the output filename; otherwise use the engine's default
+(`--comment.md`).
+
+Output the file to the `.github/output/analysis` directory.
diff --git a/docs/analysis/ai-harness/_github/prompts/areas/branding-design-full.prompt.md b/docs/analysis/ai-harness/_github/prompts/areas/branding-design-full.prompt.md
new file mode 100644
index 00000000..b19dc37d
--- /dev/null
+++ b/docs/analysis/ai-harness/_github/prompts/areas/branding-design-full.prompt.md
@@ -0,0 +1,22 @@
+---
+mode: agent
+description:
+ Run the full `branding-design` analysis (answers, comment, and
+ recommendations) for the documentation.
+---
+
+# Branding and Design full analysis
+
+Run the shared **full** analysis for the `branding-design` criteria area.
+
+1. Read the criteria definition in `.github/criteria/areas/branding-design.md`.
+2. Read and follow the shared procedure in
+ `.github/prompts/areas/full.prompt.md`, treating `branding-design` as the
+ selected area.
+
+Optional output filename override: `${input:title}` — if non-empty, use it as
+the base name for all three output files (`-answers.md`,
+`-comment.md`, `-recommendations.md`); otherwise use each engine's
+default (`--.md`).
+
+Output the file to the `.github/output/analysis` directory.
diff --git a/docs/analysis/ai-harness/_github/prompts/areas/branding-design-recommendations.prompt.md b/docs/analysis/ai-harness/_github/prompts/areas/branding-design-recommendations.prompt.md
new file mode 100644
index 00000000..f09f2866
--- /dev/null
+++ b/docs/analysis/ai-harness/_github/prompts/areas/branding-design-recommendations.prompt.md
@@ -0,0 +1,22 @@
+---
+mode: agent
+description:
+ Provide recommendations for improving the branding and design of the
+ documentation.
+---
+
+# Branding and Design recommendations
+
+Run the shared **recommendations** analysis for the `branding-design` criteria
+area.
+
+1. Read the criteria definition in `.github/criteria/areas/branding-design.md`.
+2. Read and follow the shared procedure in
+ `.github/prompts/areas/recommendations.prompt.md`, treating `branding-design`
+ as the selected area.
+
+Optional output filename override: `${input:title}` — if non-empty, use it as
+the output filename; otherwise use the engine's default
+(`--recommendations.md`).
+
+Output the file to the `.github/output/analysis` directory.
diff --git a/docs/analysis/ai-harness/_github/prompts/areas/case-studies-answers.prompt.md b/docs/analysis/ai-harness/_github/prompts/areas/case-studies-answers.prompt.md
new file mode 100644
index 00000000..ca43c9b0
--- /dev/null
+++ b/docs/analysis/ai-harness/_github/prompts/areas/case-studies-answers.prompt.md
@@ -0,0 +1,20 @@
+---
+mode: agent
+description:
+ Answer the CNCF TechDocs case studies questions for the documentation.
+---
+
+# Case Studies answers
+
+Run the shared **answers** analysis for the `case-studies` criteria area.
+
+1. Read the criteria definition in `.github/criteria/areas/case-studies.md`.
+2. Read and follow the shared procedure in
+ `.github/prompts/areas/answers.prompt.md`, treating `case-studies` as the
+ selected area.
+
+Optional output filename override: `${input:title}` — if non-empty, use it as
+the output filename; otherwise use the engine's default
+(`--answers.md`).
+
+Output the file to the `.github/output/analysis` directory.
diff --git a/docs/analysis/ai-harness/_github/prompts/areas/case-studies-comment.prompt.md b/docs/analysis/ai-harness/_github/prompts/areas/case-studies-comment.prompt.md
new file mode 100644
index 00000000..5007f16d
--- /dev/null
+++ b/docs/analysis/ai-harness/_github/prompts/areas/case-studies-comment.prompt.md
@@ -0,0 +1,19 @@
+---
+mode: agent
+description: Write a comment on the case studies of the documentation.
+---
+
+# Case Studies comment
+
+Run the shared **comment** analysis for the `case-studies` criteria area.
+
+1. Read the criteria definition in `.github/criteria/areas/case-studies.md`.
+2. Read and follow the shared procedure in
+ `.github/prompts/areas/comment.prompt.md`, treating `case-studies` as the
+ selected area.
+
+Optional output filename override: `${input:title}` — if non-empty, use it as
+the output filename; otherwise use the engine's default
+(`--comment.md`).
+
+Output the file to the `.github/output/analysis` directory.
diff --git a/docs/analysis/ai-harness/_github/prompts/areas/case-studies-full.prompt.md b/docs/analysis/ai-harness/_github/prompts/areas/case-studies-full.prompt.md
new file mode 100644
index 00000000..a93c5b83
--- /dev/null
+++ b/docs/analysis/ai-harness/_github/prompts/areas/case-studies-full.prompt.md
@@ -0,0 +1,22 @@
+---
+mode: agent
+description:
+ Run the full `case-studies` analysis (answers, comment, and recommendations)
+ for the documentation.
+---
+
+# Case Studies full analysis
+
+Run the shared **full** analysis for the `case-studies` criteria area.
+
+1. Read the criteria definition in `.github/criteria/areas/case-studies.md`.
+2. Read and follow the shared procedure in
+ `.github/prompts/areas/full.prompt.md`, treating `case-studies` as the
+ selected area.
+
+Optional output filename override: `${input:title}` — if non-empty, use it as
+the base name for all three output files (`-answers.md`,
+`-comment.md`, `-recommendations.md`); otherwise use each engine's
+default (`--.md`).
+
+Output the file to the `.github/output/analysis` directory.
diff --git a/docs/analysis/ai-harness/_github/prompts/areas/case-studies-recommendations.prompt.md b/docs/analysis/ai-harness/_github/prompts/areas/case-studies-recommendations.prompt.md
new file mode 100644
index 00000000..34c84c9e
--- /dev/null
+++ b/docs/analysis/ai-harness/_github/prompts/areas/case-studies-recommendations.prompt.md
@@ -0,0 +1,21 @@
+---
+mode: agent
+description:
+ Provide recommendations for improving the case studies of the documentation.
+---
+
+# Case Studies recommendations
+
+Run the shared **recommendations** analysis for the `case-studies` criteria
+area.
+
+1. Read the criteria definition in `.github/criteria/areas/case-studies.md`.
+2. Read and follow the shared procedure in
+ `.github/prompts/areas/recommendations.prompt.md`, treating `case-studies` as
+ the selected area.
+
+Optional output filename override: `${input:title}` — if non-empty, use it as
+the output filename; otherwise use the engine's default
+(`--recommendations.md`).
+
+Output the file to the `.github/output/analysis` directory.
diff --git a/docs/analysis/ai-harness/_github/prompts/areas/comment.prompt.md b/docs/analysis/ai-harness/_github/prompts/areas/comment.prompt.md
new file mode 100644
index 00000000..df3de2bb
--- /dev/null
+++ b/docs/analysis/ai-harness/_github/prompts/areas/comment.prompt.md
@@ -0,0 +1,54 @@
+---
+mode: agent
+description:
+ Shared engine for producing an analysis comment. Normally run via a per-area
+ wrapper such as /information-architecture-comment.
+---
+
+# Shared engine: comment
+
+Reusable procedure for writing an analysis comment for one area. Normally
+invoked through a per-area wrapper prompt (for example,
+`/information-architecture-comment`), which selects the criteria area for you.
+
+## Inputs
+
+- Area — the criteria area to analyze. When run from a wrapper, the wrapper
+ names it.
+- Title (optional) — overrides the default output filename.
+
+## Procedure
+
+1. Read the criteria definition at `.github/criteria/areas/.md`. Use its
+ Display name, File stem, and Comment guidance (good examples and any
+ additional instructions).
+2. Determine the project name and documentation label from the "Current
+ Repository" section of the repository Copilot instructions (for example, "the
+ KubeVirt user guide"). Derive the project slug by lowercasing the name and
+ replacing spaces with hyphens.
+3. Write one to three paragraphs for a high-level comment. No need to replicate
+ points from the answers output. Follow with two bulleted lists: one of
+ strengths and one of weaknesses. Preceded the lists with labels (not bold)
+ "Strengths:" and "Weaknesses:".
+4. You can follow with any "Additional instructions" from the criteria file. You
+ may reference the listed "good examples" as models of quality.
+5. Add a rating for this area, using the CNCF 1–5 scale:
+ - 1 - Not present
+ - 2 - Needs improvement
+ - 3 - Meets standards
+ - 4 - Meets or exceeds standards
+ - 5 - Exemplary
+
+ State the rating on its own line at the end of the comment in the form
+ `Rating: -