Revision control

++ # Contributing
++
++ How to add an agent, a skill, a pipeline stage, an instruction, or a
++ doc page to the Qt Doc Agent Framework.
++
++ If you only want to know what already exists, read the tree — every
++ agent has a row in [`agents/README.md`](agents/README.md) and every
++ skill has a row in [`skills/README.md`](skills/README.md).
++
++ ## Architecture context
++
++ The framework runs as a four-layer chain: **harness → orchestrator →
++ agent → skill.** Every added artifact lands in exactly one layer, and
++ that decision drives everything else — which directory it lives in,
++ whether it needs frontmatter, and how it's dispatched. See
++ [`CLAUDE.md`](CLAUDE.md) for the layer table.
++
++ ## Ground rules
++
++ 1. **Only verified, working changes land in qtqa.** Planned work,
++ drafts, and sketches live outside the commit. A row appears in
++ `agents/README.md` or `skills/README.md` only when the artifact is
++ real and exercised.
++ 2. **Every rule an agent enforces is codified as S / R / T.**
++ - **S-source** if the rule comes from an external authority (QUIP,
++ Qt Writing Guidelines, Microsoft Style Guide).
++ - **R-rule** if it's a concrete language do/do-not distilled from an
++ S-source (`skill-language-style`).
++ - **T-rule** if it's an AI tell to suppress (`skill-ai-tells`).
++ Rules that don't fit any of the three are either written down for AI
++ use or explicitly excluded. Silent conventions don't survive.
++ 3. **Pin the model.** New agents pin `claude-opus-5-5` in frontmatter,
++ not the `opus` alias.
++ 4. **Copyright year is the current calendar year** for new files
++ (2026 as of this writing).
++ 5. **Prose that ships gets checked against `skill-ai-tells`.** Tier 1
++ hits are hard failures; Tier 2 hits need rewrites; Tier 3 is
++ tolerated (Qt's own corpus uses those patterns).
++ 6. **Deterministic first.** If a script or tool can produce the result
++ (grep, Vale, QDoc, ImageMagick, a format checker), the artifact
++ calls it instead of asking the LLM. Deterministic results repeat
++ across runs and cost no tokens. Each agent marks which of its steps
++ are deterministic (tool call) and which need LLM judgment. Checks
++ that repeat go into `tools/` as scripts.
++ 7. **Trace and test every rule claim.** Before a rule, exemption, or
++ "never"/"always" lands in a skill or agent:
++ - **Trace** it down the chain (C/G rule → R-rule → S-source) and quote
++ the S-source text. A claim that exists only in a derived rule is
++ unverified. Rewording at each step can change the meaning
++ ("renders in bold" became "bold instead of `\uicontrol`").
++ - **Test** it against the corpus with grep: qt5.git, and the repo
++ the rule targets (for example, qt-creator for C9). Record the
++ count and the commit. If the corpus contradicts the claim, the
++ claim is wrong or needs a scope.
++ - **Separate markup from output.** "Bold", "italic", and "code font"
++ describe rendering; name the QDoc command that produces it.
++
++ ## Adding an agent
++
++ 1. **Decide fan-out or stage.** Fan-out agents dispatch further
++ subagents; stage agents only load skills. Default is stage. Fan-out
++ is only for orchestrator-shaped work (batch, multi-repo, parallel
++ research).
++ 2. **Create `agents/{name}.md`** with YAML frontmatter:
++ ```yaml
++ ---
++ name: {name}
++ description: One sentence, action-first, states the pipeline stage.
++ model: claude-opus-5-5
++ # tools: only include Agent if this is a fan-out agent.
++ ---
++ ```
++ 3. **In the body, declare:**
++ - Which pipeline (A / B / C / D) the agent serves.
++ - Which skills it loads, when, and via which of the seven loading
++ patterns (see
++ [`doc/loading-patterns.md`](doc/loading-patterns.md)).
++ - Its own verification gate (what it checks before returning).
++ 4. **Add a row to `agents/README.md`** in the pipeline mapping table.
++ 5. **Extend the orchestrator.** Update `agents/orchestrator.md`
++ dispatch table with the new task-to-agent mapping.
++ 6. **Write the instruction.** Add
++ `doc/instructions/how-to-use-{name}.md` (short, task-oriented;
++ long-form goes elsewhere in `doc/`).
++ 7. **Run the initial check.** Load
++ [`skills/skill-framework-fitness/SKILL.md`](skills/skill-framework-fitness/SKILL.md)
++ and
++ [`skills/skill-security-hygiene/SKILL.md`](skills/skill-security-hygiene/SKILL.md)
++ and apply both to the new agent. Framework fitness catches pipeline,
++ registration, and chain defects; security hygiene catches secrets,
++ PII, and public/internal boundary breaches. Landing is blocked on
++ either producing a High or Critical finding.
++
++ ## Adding a skill
++
++ 1. **Create `skills/skill-{name}/SKILL.md`** with the standard skill
++ frontmatter (`name`, `description`, `metadata`). Description drives
++ discovery; be specific about triggers.
++ 2. **Choose the loading pattern** (see the seven patterns in
++ [`doc/loading-patterns.md`](doc/loading-patterns.md)).
++ Document the choice in the SKILL.md header.
++ 3. **If the skill codifies a rule set**, mark the entries S / R / T so
++ agents can cite them.
++ 4. **Add a row to `skills/README.md`** under the pipeline mapping.
++ 5. **Link from every agent that uses it.** Agents declare their skill
++ dependencies in their own body.
++
++ ## Adding a pipeline stage
++
++ Pipelines B, C, and D are still being built. To add or refine a stage:
++
++ 1. **Update the pipeline flow.** Edit `README.md` and
++ `agents/orchestrator.md` so the pipeline table reflects the new
++ stage.
++ 2. **Add or extend the agent.** Follow "Adding an agent" above.
++ 3. **Write the how-to.** `doc/instructions/how-to-{pipeline-verb}.md`.
++ 4. **Add the doc page.** `doc/{topic}.html`, once the stage is real
++ enough to document for external readers.
++
++ ## Adding an instruction
++
++ Instructions live in `doc/instructions/` and are short, task-oriented
++ Markdown. Convention: filenames start with `how-to-`.
++
++ 1. **Create `doc/instructions/how-to-{action}.md`.**
++ 2. **State the target pipeline in the opening line.**
++ 3. **Include copy-paste-ready sample prompts** pinned to
++ `claude-opus-5-5`.
++ 4. **Cross-link to the S / R / T rules the pipeline enforces.**
++
++ ## Adding a doc page
++
++ Doc pages are long-form reference material for readers who run or
++ extend the framework; Qt Group renders them as a site internally.
++
++ 1. **Mirror the internal `qt-doc-agent-guide` shape.** Markdown source
++ next to the HTML output, `images/` for referenced media.
++ 2. **Add the page to `doc/README.md`** expected-pages table.
++ 3. **Deploy separately** from qtqa via rsync (see the deploy note in
++ `doc/README.md` once the script lands).
++
++ ## Naming conventions
++
++ - **Agents.** `{verb}-{scope}` or `{scope}-{role}`. Existing shapes:
++ `qt-doc-reviewer`, `doc-shaper`, `qdoc-warning-fixer`, `orchestrator`.
++ Lowercase, hyphenated, no `agent-` prefix.
++ - **Skills.** `skill-{topic}`. Lowercase, hyphenated, `skill-` prefix
++ mandatory. Example: `skill-ai-tells`, `skill-qdoc-output`.
++ - **Instructions.** `how-to-{action}.md`. Lowercase, hyphenated,
++ Markdown.
++ - **Doc pages.** `{topic}.html` (+ `{topic}-content.md` when the HTML
++ is generated from Markdown). Lowercase, hyphenated.
++ - **Pipelines.** Referenced by letter (A / B / C / D). Names are
++ descriptive but the letter is the identifier.
++ - **Rules.** S1, S2, ...; R1, R2, ...; T1, T2, .... Sequential,
++ never renumber after publication.
++
++ ## Verification requirements before landing
++
++ Every added agent runs through the orchestrator's verification gates
++ (see `agents/orchestrator.md`, "Post-agent verification"). Additionally:
++
++ - **All new agent and doc prose:** run through `skill-ai-tells` Tier
++ 1 + Tier 2 patterns. Zero hits at Tier 1.
++ - **All new rule entries:** confirm the source citation. R-rules link
++ to their S-source; T-rules cite the corpus calibration.
++ - **Initial check** on any new agent, skill, or doc page:
++ [`skill-framework-fitness`](skills/skill-framework-fitness/SKILL.md)
++ and
++ [`skill-security-hygiene`](skills/skill-security-hygiene/SKILL.md).
++ Framework fitness applies the 9-layer methodology adapted for this
++ framework; security hygiene catches secrets, PII, and the
++ public/internal boundary.
++
++ ## Scale strategy
++
++ As the framework grows past the first handful of agents and skills:
++
++ - **Flat directories hold to ~20 entries.** Beyond that, subdivide by
++ pipeline (`agents/pipeline_b/`, etc.) rather than by alphabet.
++ - **Only verified, working artifacts land in the tree.** Planned or
++ half-built work lives outside the commit — the subdir READMEs are
++ the authoritative "what exists" list.
++ - **Cross-links use relative paths**, so moves don't break them.
++ - **Every subdir README opens with a one-line role statement and a
++ link back to top-level `README.md` and `CONTRIBUTING.md`.**