From 4142754d4a71e6a949c817dfaa412d6c3f3f47d0 Mon Sep 17 00:00:00 2001 From: Jorge Rivera Date: Thu, 15 Oct 2026 19:39:14 +0200 Subject: [PATCH] chore: drop private repository references from the public repo The skills sync and its fixtures clone DevelopmentFinanceObservatory/skills in place of the old private repository, comments name the public repositories, and the package author is ONE Campaign (data@one.org). --- .copier-answers.yml | 2 +- CONTRIBUTING.md | 4 ++-- README.md | 2 +- content/hub/get-started/use-studio.md | 2 +- content/hub/skills/use-in-your-agent.md | 10 ++++----- content/hub/skills/what-a-skill-is.md | 10 ++++----- pyproject.toml | 2 +- src/dfo_docs/docsync/edits.py | 7 ++++--- .../docsync/fixtures/edits/sampler.edited.md | 2 +- .../fixtures/edits/sampler.expected.md | 2 +- .../pages/conventions-live.baseline.md | 2 +- .../fixtures/pages/conventions-live.edited.md | 2 +- .../fixtures/pages/conventions-live.source.md | 2 +- .../fixtures/pages/conventions.baseline.md | 2 +- .../fixtures/pages/conventions.source.md | 2 +- .../pages/use-in-your-agent.baseline.md | 21 ++++++++----------- .../pages/use-in-your-agent.raw-export.md | 15 +++++++------ .../pages/use-in-your-agent.source.md | 21 ++++++++----------- .../fixtures/pages/use-studio.baseline.md | 2 +- .../fixtures/pages/use-studio.source.md | 2 +- .../fixtures/probe/sampler.baseline.md | 2 +- tests/docsync/fixtures/probe/sampler.doc.md | 2 +- .../docsync/fixtures/probe/sampler.edited.md | 2 +- .../docsync/fixtures/probe/sampler.export.md | 2 +- tests/docsync/fixtures/sampler.baseline.md | 2 +- tests/docsync/fixtures/sampler.source.md | 2 +- tests/docsync/test_edits.py | 21 ++++++++++--------- tests/test_manifest.py | 2 +- tests/test_skills.py | 2 +- 29 files changed, 73 insertions(+), 78 deletions(-) diff --git a/.copier-answers.yml b/.copier-answers.yml index 626d96d..4bca36a 100644 --- a/.copier-answers.yml +++ b/.copier-answers.yml @@ -1,7 +1,7 @@ # Changes here will be overwritten by Copier; NEVER EDIT MANUALLY _commit: main _src_path: https://github.com/ONEcampaign/bblocks-projects.git -author_email: jorge.rivera@one.org +author_email: data@one.org author_name: ONE Campaign include_notebooks: false include_pytest: true diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 621ee9e..09a9718 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -98,7 +98,7 @@ Only published pages are valid link targets. The link check fails for a page abs A source repository keeps its pages in a docs folder and declares them in a nav sidecar. The build looks for the sidecar in three places, in this order: `docs/mkdocs.yml`, a root `mkdocs.yml`, and a root `zensical.toml`. The docs root is the sidecar's own `docs_dir`, resolved from the folder the sidecar sits in. -Use a root `mkdocs.yml` when user-facing pages sit in a subfolder separate from a repository's internal docs. dfo-apis publishes `docs/guide/` this way: +Use a root `mkdocs.yml` when user-facing pages sit in a subfolder separate from a repository's internal docs. `apis` publishes `docs/guide/` this way: ```yaml site_name: API @@ -129,7 +129,7 @@ Then register the repository in `sources.yaml`: In `sources.yaml`, `docs_dir` sets which folder the build checks out. Match it to the sidecar's `docs_dir`. Set `path` to `extra.dfo.path`. The build fails if they differ. Add a `mount` entry in `hub.yaml` that names the source row. To register a repository before publication, set `enabled: false` with a `reason` and leave it out of `hub.yaml`. A mount for a disabled source fails the build. Every registered repository must be public. The README covers `exclude`, `kind: external`, `kind: skill`, and each build failure. -Before opening a pull request in the source repository, check its nav against its pages from a dfo-docs checkout. Then check links from the source repository's docs folder: +Before opening a pull request in the source repository, check its nav against its pages from a `docs` checkout. Then check links from the source repository's docs folder: ``` uv run python scripts/check_nav.py /path/to/source-repo diff --git a/README.md b/README.md index 10a364e..1028863 100644 --- a/README.md +++ b/README.md @@ -8,7 +8,7 @@ To write a page or publish a repository's docs, read [CONTRIBUTING.md](CONTRIBUT Add a row to `sources.yaml` with `name`, `repo`, `ref`, `docs_dir`, and the `path` the documentation should publish at. A row with `kind: external` points at a package that publishes its own documentation elsewhere, and carries a `url` instead of a `docs_dir`. -A row with `kind: skill` publishes a repository of agent skills, such as dfo-skills. It needs no sidecar. The build walks `docs_dir` and publishes each directory that holds a `SKILL.md` as a skill page at `/`, with each file in its `references/` as a page at `//references/`. Directories whose names start with `_` stay out. The row must set `docs_dir`, `path`, and `title`, and it may not set `exclude`. It may set `internal_dir`, a second directory the build walks the same way. Skills under `docs_dir` are offered for install. Skills under `internal_dir` are published at the same `/` and are not offered. A directory name may appear under only one of the two. Until the repository has the `internal_dir` directory, the build warns and reads `docs_dir` alone. Its `hub.yaml` mount becomes one group titled by `title`. A `categories.yaml` in `docs_dir` lists skills under `sources` or under a domain in `domains`, and each category becomes a group inside the mount, titled in sentence case: Sources, and Domains with a group such as Sovereign debt inside it. Categories and the skills in them follow the file's order. Skills the file leaves out come first, in directory order, and without the file that is every skill. Each skill page opens with a header the build writes from the front matter: the skill's name and the first sentence of its `description`. For a skill under `docs_dir`, whatever its category, the build writes a zip to `corpus//.zip`, holding `/SKILL.md` and `/references/*.md` as committed, records the zip on the page's manifest entry as `bundle_path`, and adds a line to the header that links to the hub page on using skills in your own agent and to the zip. A skill under `internal_dir` gets no zip, no `bundle_path`, and no such line. +A row with `kind: skill` publishes a repository of agent skills, such as `skills`. It needs no sidecar. The build walks `docs_dir` and publishes each directory that holds a `SKILL.md` as a skill page at `/`, with each file in its `references/` as a page at `//references/`. Directories whose names start with `_` stay out. The row must set `docs_dir`, `path`, and `title`, and it may not set `exclude`. It may set `internal_dir`, a second directory the build walks the same way. Skills under `docs_dir` are offered for install. Skills under `internal_dir` are published at the same `/` and are not offered. A directory name may appear under only one of the two. Until the repository has the `internal_dir` directory, the build warns and reads `docs_dir` alone. Its `hub.yaml` mount becomes one group titled by `title`. A `categories.yaml` in `docs_dir` lists skills under `sources` or under a domain in `domains`, and each category becomes a group inside the mount, titled in sentence case: Sources, and Domains with a group such as Sovereign debt inside it. Categories and the skills in them follow the file's order. Skills the file leaves out come first, in directory order, and without the file that is every skill. Each skill page opens with a header the build writes from the front matter: the skill's name and the first sentence of its `description`. For a skill under `docs_dir`, whatever its category, the build writes a zip to `corpus//.zip`, holding `/SKILL.md` and `/references/*.md` as committed, records the zip on the page's manifest entry as `bundle_path`, and adds a line to the header that links to the hub page on using skills in your own agent and to the zip. A skill under `internal_dir` gets no zip, no `bundle_path`, and no such line. If the repository needs to sit under a grouping heading, or nest alongside another package, add it to `hub.yaml`'s nav as a `mount` (or `external`) entry. A grouping heading such as `bblocks` or `ODA` lives only in `hub.yaml`, since no source repository declares it. diff --git a/content/hub/get-started/use-studio.md b/content/hub/get-started/use-studio.md index 8caa60d..3a275a4 100644 --- a/content/hub/get-started/use-studio.md +++ b/content/hub/get-started/use-studio.md @@ -10,7 +10,7 @@ This example asks for an overview of health spending in Kenya and produces a pin The walkthrough takes about ten minutes and uses two of the five queries available without an account. Sign in first if you want to save your canvas or ask more than five queries. - + ## Step 1: Ask a question diff --git a/content/hub/skills/use-in-your-agent.md b/content/hub/skills/use-in-your-agent.md index 6f0c45a..df76531 100644 --- a/content/hub/skills/use-in-your-agent.md +++ b/content/hub/skills/use-in-your-agent.md @@ -44,7 +44,7 @@ These steps cover Claude on the web, the Claude desktop app, and Cowork. To install one skill on its own, download its zip, then open Customize, then Skills, click +, and choose "Upload a skill". Uploaded skills need code execution switched on in Claude's settings. - + ::tab{label="ChatGPT"} @@ -56,7 +56,7 @@ Whether you can upload a skill depends on your ChatGPT plan, and in a ChatGPT wo 1. Wait for ChatGPT to finish scanning the skill. 1. Start a new chat. - + @@ -75,7 +75,7 @@ Gemini takes skills on a personal Google Account, for people aged 18 or over, wi - + ::tab{label="Claude Code"} @@ -114,7 +114,7 @@ An agent that reads the Agent Skills format loads a skill from a folder on your 1. Start a new session. - + Check your agent's documentation if it reads a different folder. Keep the unzipped folder whole, because `SKILL.md` points to the files in `references/` by relative path. @@ -162,7 +162,7 @@ Download the zip again from the skill's page. In Claude, ChatGPT, or Gemini, del ::: - + ## Next diff --git a/content/hub/skills/what-a-skill-is.md b/content/hub/skills/what-a-skill-is.md index 63907af..1fda52e 100644 --- a/content/hub/skills/what-a-skill-is.md +++ b/content/hub/skills/what-a-skill-is.md @@ -32,7 +32,7 @@ oda-measures/ `SKILL.md` holds YAML front matter with three fields. `name` matches the directory name. `description` says what the skill covers and when to load it, and it's the text an agent matches a question against. `license` names the licence, `CC-BY-4.0` for every DFO skill. Below the front matter, the body lists the reference files and says when to read each one. -`references/` holds the long material: definitions, method notes, defaults. The dfo-skills repository adds two rules of its own, checked in CI by `scripts/validate_skills.py`: +`references/` holds the long material: definitions, method notes, defaults. The `skills` repository adds two rules of its own, checked in CI by `scripts/validate_skills.py`: - Pointers stay one level deep. `SKILL.md` names every reference file, and no reference file sends the agent on to another. - Keep each paragraph and list item on one line. @@ -59,19 +59,19 @@ Some skills point to others. [`oda-dataset-selection`](../../dfo-skills/oda-data ## Where skills live in the DFO -The dfo-skills repository holds each skill in its own directory, and each `description` says what its skill covers. `skills/` holds the skills offered for install. `internal/skills/` holds the skills the DFO's own assistant uses and that are not offered for install, such as `dfo-faq`. Each skill also has a page in this section, which shows its `SKILL.md` with its reference files as pages beneath it. Sources lists the skills that each explain one dataset, such as [`oda-dac1`](../../dfo-skills/oda-dac1/SKILL.md). Domains lists the skills that explain a subject across datasets, grouped by domain, such as Sovereign debt. +The `skills` repository holds each skill in its own directory, and each `description` says what its skill covers. `skills/` holds the skills offered for install. `internal/skills/` holds the skills the DFO's own assistant uses and that are not offered for install, such as `dfo-faq`. Each skill also has a page in this section, which shows its `SKILL.md` with its reference files as pages beneath it. Sources lists the skills that each explain one dataset, such as [`oda-dac1`](../../dfo-skills/oda-dac1/SKILL.md). Domains lists the skills that explain a subject across datasets, grouped by domain, such as Sovereign debt. -dfo-pipelines checks dfo-skills for new commits and publishes each skill to the [knowledge graph](../data/knowledge-graph.md) as an `AgentSkill` node. Each reference file is an `AgentSkillReference` node. +The `pipelines` repository checks the `skills` repository for new commits and publishes each skill to the [knowledge graph](../data/knowledge-graph.md) as an `AgentSkill` node. Each reference file is an `AgentSkillReference` node. Install the skills under `skills/` in your own assistant to use them. ## How the DFO assistant uses skills -The DFO assistant is an agent too, and it reads the same skills from the knowledge graph. dfo-apis serves them through its Skills API, and the DFO MCP server gives the assistant two tools over it: `get_skill` loads a skill's `SKILL.md` and lists its reference files, and `get_skill_file` reads one of those files. +The DFO assistant is an agent too, and it reads the same skills from the knowledge graph. The `apis` repository serves them through its Skills API, and the DFO MCP server gives the assistant two tools over it: `get_skill` loads a skill's `SKILL.md` and lists its reference files, and `get_skill_file` reads one of those files. The descriptions the assistant matches against come from its data search. Skills are attached to datasets, and the search result names up to five skills attached to the datasets it found. A question about DFO itself goes straight to [`dfo-faq`](../../dfo-skills/dfo-faq/SKILL.md). -An edit to a skill reaches the assistant after dfo-pipelines publishes it to the graph and the Skills API refreshes its index, which it does every 15 minutes. +An edit to a skill reaches the assistant after `pipelines` publishes it to the graph and the Skills API refreshes its index, which it does every 15 minutes. ## Next diff --git a/pyproject.toml b/pyproject.toml index bf255c1..b3314c5 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -4,7 +4,7 @@ version = "0.1.0" description = "Fetches, normalises, and publishes documentation aggregated from DFO source repositories." authors = [ - { name = "ONE Campaign", email = "jorge.rivera@one.org" } + { name = "ONE Campaign", email = "data@one.org" }, ] readme = "README.md" diff --git a/src/dfo_docs/docsync/edits.py b/src/dfo_docs/docsync/edits.py index 16688dd..e61ba94 100644 --- a/src/dfo_docs/docsync/edits.py +++ b/src/dfo_docs/docsync/edits.py @@ -1884,9 +1884,10 @@ def _same_list_kind(block: Block, other: Block) -> bool: def heading_anchor(heading: str) -> str: """The anchor the docs site gives a heading with Markdown text `heading`. - The site (dfo-website `docsSlug`) takes the heading's rendered text, code spans - included, lowercases and trims it, drops every character but ASCII letters, - digits, `_`, `-` and whitespace, and turns each run of whitespace into `-`. + The site (`docsSlug` in the website repository) takes the heading's rendered + text, code spans included, lowercases and trims it, drops every character but + ASCII letters, digits, `_`, `-` and whitespace, and turns each run of whitespace + into `-`. """ text = "".join(_text_content(_MARKDOWN.parseInline(heading)[0].children or [])) dropped = _SLUG_DROP_RE.sub("", text.lower().strip()) diff --git a/tests/docsync/fixtures/edits/sampler.edited.md b/tests/docsync/fixtures/edits/sampler.edited.md index 7b685de..a7abb1d 100644 --- a/tests/docsync/fixtures/edits/sampler.edited.md +++ b/tests/docsync/fixtures/edits/sampler.edited.md @@ -43,7 +43,7 @@ and its second line. 1. Clone the skills repo. ```sh -git clone --depth 1 https://github.com/ONEcampaign/dfo-skills.git +git clone --depth 1 https://github.com/DevelopmentFinanceObservatory/skills.git ``` 2. Copy the skills into a skills folder. diff --git a/tests/docsync/fixtures/edits/sampler.expected.md b/tests/docsync/fixtures/edits/sampler.expected.md index f17dd94..40194c1 100644 --- a/tests/docsync/fixtures/edits/sampler.expected.md +++ b/tests/docsync/fixtures/edits/sampler.expected.md @@ -45,7 +45,7 @@ An unindented callout body. 1. Clone the skills repo. ```bash - git clone --depth 1 https://github.com/ONEcampaign/dfo-skills.git + git clone --depth 1 https://github.com/DevelopmentFinanceObservatory/skills.git ``` 1. Copy the skills into a skills folder. diff --git a/tests/docsync/fixtures/pages/conventions-live.baseline.md b/tests/docsync/fixtures/pages/conventions-live.baseline.md index 4560720..67465d5 100644 --- a/tests/docsync/fixtures/pages/conventions-live.baseline.md +++ b/tests/docsync/fixtures/pages/conventions-live.baseline.md @@ -40,7 +40,7 @@ A proxy in front of every route enforces three limits before the request reaches | `413` | Request body too large. | | `415` | The media type is unsupported. Send `Content-Type: application/json`. | -**Author note:** TODO: rate-limit thresholds; set in proxy config, not recorded in dfo-apis. +**Author note:** TODO: rate-limit thresholds; set in proxy config, not recorded in the apis repository. **Author note:** TODO: byte ceiling; set in proxy config. diff --git a/tests/docsync/fixtures/pages/conventions-live.edited.md b/tests/docsync/fixtures/pages/conventions-live.edited.md index aa597d8..a07e90d 100644 --- a/tests/docsync/fixtures/pages/conventions-live.edited.md +++ b/tests/docsync/fixtures/pages/conventions-live.edited.md @@ -41,7 +41,7 @@ A proxy in front of every route enforces three limits before the request reaches | `413` | Request body too large. | | `415` | The media type is unsupported. Send `Content-Type: application/json`. | -**Author note:** TODO: rate-limit thresholds; set in proxy config, not recorded in dfo-apis. +**Author note:** TODO: rate-limit thresholds; set in proxy config, not recorded in the apis repository. **Author note:** TODO: byte ceiling; set in proxy config. diff --git a/tests/docsync/fixtures/pages/conventions-live.source.md b/tests/docsync/fixtures/pages/conventions-live.source.md index ced0545..67fd7c1 100644 --- a/tests/docsync/fixtures/pages/conventions-live.source.md +++ b/tests/docsync/fixtures/pages/conventions-live.source.md @@ -38,7 +38,7 @@ A proxy in front of every route enforces three limits before the request reaches | Status | Meaning | | ------ | ------------------------------------------------------------------------------------------------------------------------------- | -| `429` | Too many requests. | +| `429` | Too many requests. | | `413` | Request body too large. | | `415` | The media type is unsupported. Send `Content-Type: application/json`. | diff --git a/tests/docsync/fixtures/pages/conventions.baseline.md b/tests/docsync/fixtures/pages/conventions.baseline.md index 4560720..67465d5 100644 --- a/tests/docsync/fixtures/pages/conventions.baseline.md +++ b/tests/docsync/fixtures/pages/conventions.baseline.md @@ -40,7 +40,7 @@ A proxy in front of every route enforces three limits before the request reaches | `413` | Request body too large. | | `415` | The media type is unsupported. Send `Content-Type: application/json`. | -**Author note:** TODO: rate-limit thresholds; set in proxy config, not recorded in dfo-apis. +**Author note:** TODO: rate-limit thresholds; set in proxy config, not recorded in the apis repository. **Author note:** TODO: byte ceiling; set in proxy config. diff --git a/tests/docsync/fixtures/pages/conventions.source.md b/tests/docsync/fixtures/pages/conventions.source.md index ced0545..67fd7c1 100644 --- a/tests/docsync/fixtures/pages/conventions.source.md +++ b/tests/docsync/fixtures/pages/conventions.source.md @@ -38,7 +38,7 @@ A proxy in front of every route enforces three limits before the request reaches | Status | Meaning | | ------ | ------------------------------------------------------------------------------------------------------------------------------- | -| `429` | Too many requests. | +| `429` | Too many requests. | | `413` | Request body too large. | | `415` | The media type is unsupported. Send `Content-Type: application/json`. | diff --git a/tests/docsync/fixtures/pages/use-in-your-agent.baseline.md b/tests/docsync/fixtures/pages/use-in-your-agent.baseline.md index fd190ed..6283071 100644 --- a/tests/docsync/fixtures/pages/use-in-your-agent.baseline.md +++ b/tests/docsync/fixtures/pages/use-in-your-agent.baseline.md @@ -4,7 +4,7 @@ Copy the DFO skills into an agent you run to give it the DFO team's methods for ODA questions. -**Author note:** TODO: add a route for the DFO assistant in DFO Studio once dfo-ai loads dfo-skills (dfo-ai docs/upstream-asks.md item 8\) and SKILLS\_ENABLED is on in production. The assistant and the MCP server's `search` tool do not load skills today. State then whether the reader needs to do anything. +**Author note:** TODO: add a route for the DFO assistant in DFO Studio once the assistant loads skills and SKILLS\_ENABLED is on in production. The assistant and the MCP server's `search` tool do not load skills today. State then whether the reader needs to do anything. ## In Claude Code @@ -13,16 +13,13 @@ Claude Code reads skills from two folders. Skills in `~/.claude/skills/` load in ### Before you start - Claude Code installed. -- Read access to `ONEcampaign/dfo-skills` on GitHub. The repository is private, so this route works only for ONE staff. - -**Author note:** TODO: dfo-skills must be public, with a licence, before this route works for readers outside ONE. Remove the access line above when it is. ### Steps 1. Clone the skills repository. ```sh -git clone --depth 1 https://github.com/ONEcampaign/dfo-skills.git +git clone --depth 1 https://github.com/DevelopmentFinanceObservatory/skills.git ``` 2. Copy the skills into a skills folder. @@ -31,7 +28,7 @@ git clone --depth 1 https://github.com/ONEcampaign/dfo-skills.git ```sh mkdir -p ~/.claude/skills -rsync -a --exclude _template dfo-skills/skills/ ~/.claude/skills/ +rsync -a --exclude _template skills/skills/ ~/.claude/skills/ ``` **Tab: For one project** @@ -42,13 +39,13 @@ rsync -a --exclude _template dfo-skills/skills/ ~/.claude/skills/ ```sh mkdir -p .claude/skills -rsync -a --exclude _template path/to/dfo-skills/skills/ .claude/skills/ +rsync -a --exclude _template path/to/skills/skills/ .claude/skills/ ``` The `_template` directory holds the files for creating a new skill. Exclude it when copying skills. Copy a single skill by naming its directory without a trailing slash. On macOS, a trailing slash copies `SKILL.md` and `references/` directly into `skills/`. ```sh -cp -R dfo-skills/skills/oda-measures ~/.claude/skills/ +cp -R skills/skills/oda-measures ~/.claude/skills/ ``` 3. Start a new Claude Code session. @@ -75,17 +72,17 @@ Ask a question one of the skills covers, such as "Should I use grant equivalents Pull the repository, then sync the skills. `rsync` overwrites changed files and leaves your other skills alone. ```sh -git -C dfo-skills pull -rsync -a --exclude _template dfo-skills/skills/ ~/.claude/skills/ +git -C skills pull +rsync -a --exclude _template skills/skills/ ~/.claude/skills/ ``` -Delete a skill's directory when dfo-skills removes it. `rsync` leaves the local copy in place. +Delete a skill's directory when the skills repository removes it. `rsync` leaves the local copy in place. ### Other agents An agent that supports the Agent Skills format can read these directories. Copy each skill directory into its skills folder, keeping `SKILL.md` and `references/` together because `SKILL.md` points to its reference files by relative path. -**Author note:** TODO: add a "Programmatically" route. dfo-apis includes a Skills API that lists skills and serves each skill's body and reference files, with no public deployment yet. Document the Skills API (GET /api/skills, GET /api/skills/{skill\_id}, GET /api/skills/{skill\_id}/resources/{path}) and link the API pages once a public deployment serves it with DFO\_SKILLS\_SURFACE on. +**Author note:** TODO: add a "Programmatically" route. `apis` includes a Skills API that lists skills and serves each skill's body and reference files, with no public deployment yet. Document the Skills API (GET /api/skills, GET /api/skills/{skill\_id}, GET /api/skills/{skill\_id}/resources/{path}) and link the API pages once a public deployment serves it with DFO\_SKILLS\_SURFACE on. ## Next diff --git a/tests/docsync/fixtures/pages/use-in-your-agent.raw-export.md b/tests/docsync/fixtures/pages/use-in-your-agent.raw-export.md index ad66efd..b0a7098 100644 --- a/tests/docsync/fixtures/pages/use-in-your-agent.raw-export.md +++ b/tests/docsync/fixtures/pages/use-in-your-agent.raw-export.md @@ -13,14 +13,13 @@ Claude Code reads skills from two folders. Skills in `~/.claude/skills/` load in ### Before you start - Claude Code installed. -- Read access to `ONEcampaign/dfo-skills` on GitHub. The repository is private, so this route works only for ONE staff. ### Steps 1. Clone the skills repository. ```sh -git clone --depth 1 https://github.com/ONEcampaign/dfo-skills.git +git clone --depth 1 https://github.com/DevelopmentFinanceObservatory/skills.git ``` 2. Copy the skills into a skills folder. @@ -31,7 +30,7 @@ git clone --depth 1 https://github.com/ONEcampaign/dfo-skills.git ```sh mkdir -p ~/.claude/skills -rsync -a --exclude _template dfo-skills/skills/ ~/.claude/skills/ +rsync -a --exclude _template skills/skills/ ~/.claude/skills/ ``` ::tab{label="For one project"} @@ -42,7 +41,7 @@ rsync -a --exclude _template dfo-skills/skills/ ~/.claude/skills/ ```sh mkdir -p .claude/skills -rsync -a --exclude _template path/to/dfo-skills/skills/ .claude/skills/ +rsync -a --exclude _template path/to/skills/skills/ .claude/skills/ ``` ::: @@ -52,7 +51,7 @@ rsync -a --exclude _template path/to/dfo-skills/skills/ .claude/skills/ The `_template` directory holds the files for creating a new skill. Exclude it when copying skills. Copy a single skill by naming its directory without a trailing slash. On macOS, a trailing slash copies `SKILL.md` and `references/` directly into `skills/`. ```sh -cp -R dfo-skills/skills/oda-measures ~/.claude/skills/ +cp -R skills/skills/oda-measures ~/.claude/skills/ ``` 3. Start a new Claude Code session. @@ -79,11 +78,11 @@ Ask a question one of the skills covers, such as "Should I use grant equivalents Pull the repository, then sync the skills. `rsync` overwrites changed files and leaves your other skills alone. ```sh -git -C dfo-skills pull -rsync -a --exclude _template dfo-skills/skills/ ~/.claude/skills/ +git -C skills pull +rsync -a --exclude _template skills/skills/ ~/.claude/skills/ ``` -Delete a skill's directory when dfo-skills removes it. `rsync` leaves the local copy in place. +Delete a skill's directory when the skills repository removes it. `rsync` leaves the local copy in place. ### Other agents diff --git a/tests/docsync/fixtures/pages/use-in-your-agent.source.md b/tests/docsync/fixtures/pages/use-in-your-agent.source.md index 39c383a..1f6bf45 100644 --- a/tests/docsync/fixtures/pages/use-in-your-agent.source.md +++ b/tests/docsync/fixtures/pages/use-in-your-agent.source.md @@ -6,7 +6,7 @@ description: Copy the DFO skills into Claude Code or another Agent Skills agent. Copy the DFO skills into an agent you run to give it the DFO team's methods for ODA questions. - + ## In Claude Code @@ -15,16 +15,13 @@ Claude Code reads skills from two folders. Skills in `~/.claude/skills/` load in ### Before you start - Claude Code installed. -- Read access to `ONEcampaign/dfo-skills` on GitHub. The repository is private, so this route works only for ONE staff. - - ### Steps 1. Clone the skills repository. ```bash - git clone --depth 1 https://github.com/ONEcampaign/dfo-skills.git + git clone --depth 1 https://github.com/DevelopmentFinanceObservatory/skills.git ``` 1. Copy the skills into a skills folder. @@ -35,7 +32,7 @@ Claude Code reads skills from two folders. Skills in `~/.claude/skills/` load in ```bash mkdir -p ~/.claude/skills - rsync -a --exclude _template dfo-skills/skills/ ~/.claude/skills/ + rsync -a --exclude _template skills/skills/ ~/.claude/skills/ ``` ::tab{label="For one project"} @@ -44,7 +41,7 @@ Claude Code reads skills from two folders. Skills in `~/.claude/skills/` load in ```bash mkdir -p .claude/skills - rsync -a --exclude _template path/to/dfo-skills/skills/ .claude/skills/ + rsync -a --exclude _template path/to/skills/skills/ .claude/skills/ ``` ::: @@ -52,7 +49,7 @@ Claude Code reads skills from two folders. Skills in `~/.claude/skills/` load in The `_template` directory holds the files for creating a new skill. Exclude it when copying skills. Copy a single skill by naming its directory without a trailing slash. On macOS, a trailing slash copies `SKILL.md` and `references/` directly into `skills/`. ```bash - cp -R dfo-skills/skills/oda-measures ~/.claude/skills/ + cp -R skills/skills/oda-measures ~/.claude/skills/ ``` 1. Start a new Claude Code session. @@ -79,17 +76,17 @@ Ask a question one of the skills covers, such as "Should I use grant equivalents Pull the repository, then sync the skills. `rsync` overwrites changed files and leaves your other skills alone. ```bash -git -C dfo-skills pull -rsync -a --exclude _template dfo-skills/skills/ ~/.claude/skills/ +git -C skills pull +rsync -a --exclude _template skills/skills/ ~/.claude/skills/ ``` -Delete a skill's directory when dfo-skills removes it. `rsync` leaves the local copy in place. +Delete a skill's directory when the skills repository removes it. `rsync` leaves the local copy in place. ### Other agents An agent that supports the Agent Skills format can read these directories. Copy each skill directory into its skills folder, keeping `SKILL.md` and `references/` together because `SKILL.md` points to its reference files by relative path. - + ## Next diff --git a/tests/docsync/fixtures/pages/use-studio.baseline.md b/tests/docsync/fixtures/pages/use-studio.baseline.md index 42240c2..2888e88 100644 --- a/tests/docsync/fixtures/pages/use-studio.baseline.md +++ b/tests/docsync/fixtures/pages/use-studio.baseline.md @@ -12,7 +12,7 @@ A canvas with one pinned line chart, "Current Health Expenditure Per Capita in K Studio generates a new plan, title, and answer for each run. The chart uses the same data. -**Author note:** TODO: verify the chart title, plan and answer against the staging site; they come from the recorded Studio session dfo-ai docs/transcripts/studio\_transcript\_plan.jsonl. +**Author note:** TODO: verify the chart title, plan and answer against the staging site; they come from the recorded Studio session in the ai repository, docs/transcripts/studio\_transcript\_plan.jsonl. ## What you'll learn diff --git a/tests/docsync/fixtures/pages/use-studio.source.md b/tests/docsync/fixtures/pages/use-studio.source.md index 0501347..590bd8b 100644 --- a/tests/docsync/fixtures/pages/use-studio.source.md +++ b/tests/docsync/fixtures/pages/use-studio.source.md @@ -14,7 +14,7 @@ A canvas with one pinned line chart, "Current Health Expenditure Per Capita in K Studio generates a new plan, title, and answer for each run. The chart uses the same data. - + ## What you'll learn diff --git a/tests/docsync/fixtures/probe/sampler.baseline.md b/tests/docsync/fixtures/probe/sampler.baseline.md index 663d502..6e76c53 100644 --- a/tests/docsync/fixtures/probe/sampler.baseline.md +++ b/tests/docsync/fixtures/probe/sampler.baseline.md @@ -25,7 +25,7 @@ A paragraph with a [relative link](../about/cite-and-licence.md), a [bare link]( 1. Clone the skills repository. ```sh -git clone --depth 1 https://github.com/ONEcampaign/dfo-skills.git +git clone --depth 1 https://github.com/DevelopmentFinanceObservatory/skills.git ``` 1. Copy the skills into a skills folder. diff --git a/tests/docsync/fixtures/probe/sampler.doc.md b/tests/docsync/fixtures/probe/sampler.doc.md index 2c92d03..0488d65 100644 --- a/tests/docsync/fixtures/probe/sampler.doc.md +++ b/tests/docsync/fixtures/probe/sampler.doc.md @@ -22,7 +22,7 @@ A paragraph with a [relative link](../about/cite-and-licence.md), a [bare link]( 1. Clone the skills repository. ```bash -git clone --depth 1 https://github.com/ONEcampaign/dfo-skills.git +git clone --depth 1 https://github.com/DevelopmentFinanceObservatory/skills.git ``` 1. Copy the skills into a skills folder. diff --git a/tests/docsync/fixtures/probe/sampler.edited.md b/tests/docsync/fixtures/probe/sampler.edited.md index 5ec5929..355c85d 100644 --- a/tests/docsync/fixtures/probe/sampler.edited.md +++ b/tests/docsync/fixtures/probe/sampler.edited.md @@ -26,7 +26,7 @@ An inserted paragraph. 1. Clone the skills repo. ```sh -git clone --depth 1 https://github.com/ONEcampaign/dfo-skills.git +git clone --depth 1 https://github.com/DevelopmentFinanceObservatory/skills.git ``` 1. Copy the skills into a skills folder. diff --git a/tests/docsync/fixtures/probe/sampler.export.md b/tests/docsync/fixtures/probe/sampler.export.md index 663d502..6e76c53 100644 --- a/tests/docsync/fixtures/probe/sampler.export.md +++ b/tests/docsync/fixtures/probe/sampler.export.md @@ -25,7 +25,7 @@ A paragraph with a [relative link](../about/cite-and-licence.md), a [bare link]( 1. Clone the skills repository. ```sh -git clone --depth 1 https://github.com/ONEcampaign/dfo-skills.git +git clone --depth 1 https://github.com/DevelopmentFinanceObservatory/skills.git ``` 1. Copy the skills into a skills folder. diff --git a/tests/docsync/fixtures/sampler.baseline.md b/tests/docsync/fixtures/sampler.baseline.md index 3faf9db..7432548 100644 --- a/tests/docsync/fixtures/sampler.baseline.md +++ b/tests/docsync/fixtures/sampler.baseline.md @@ -45,7 +45,7 @@ and its second line. 1. Clone the skills repository. ```sh -git clone --depth 1 https://github.com/ONEcampaign/dfo-skills.git +git clone --depth 1 https://github.com/DevelopmentFinanceObservatory/skills.git ``` 2. Copy the skills into a skills folder. diff --git a/tests/docsync/fixtures/sampler.source.md b/tests/docsync/fixtures/sampler.source.md index 983d40b..b3f6db9 100644 --- a/tests/docsync/fixtures/sampler.source.md +++ b/tests/docsync/fixtures/sampler.source.md @@ -46,7 +46,7 @@ An unindented callout body. 1. Clone the skills repository. ```bash - git clone --depth 1 https://github.com/ONEcampaign/dfo-skills.git + git clone --depth 1 https://github.com/DevelopmentFinanceObservatory/skills.git ``` 1. Copy the skills into a skills folder. diff --git a/tests/docsync/test_edits.py b/tests/docsync/test_edits.py index 773ed75..54909d9 100644 --- a/tests/docsync/test_edits.py +++ b/tests/docsync/test_edits.py @@ -5,11 +5,12 @@ deleteContentRange); its baseline is the recorded `sampler.baseline.md` or `pages/.baseline.md`, which the upload reproduced byte for byte. `.expected.md` is the source with exactly those edits made by hand. -`pages/conventions.*` is a dfo-apis page and its recorded baseline, which holds -Author notes on lines of their own and in table cells. `pages/use-studio.*`, -`pages/connect.*` and `pages/methods.*` are hub and dfo-ai pages with their recorded -baselines, holding Author notes beside paragraphs, tabs and code blocks. -`pages/conventions-live.*` is an earlier version of the dfo-apis page, its recorded +`pages/conventions.*` is a page from the apis repository and its recorded baseline, +which holds Author notes on lines of their own and in table cells. +`pages/use-studio.*`, `pages/connect.*` and `pages/methods.*` are pages from the hub +and the ai repository with their recorded baselines, holding Author notes beside +paragraphs, tabs and code blocks. +`pages/conventions-live.*` is an earlier version of that page, its recorded baseline, and Google's export after an editor resolved a TODO note, pressed Enter at the end of a paragraph and typed a sentence, and typed a paragraph below the page's final list. @@ -273,7 +274,7 @@ def test_a_note_resolved_in_place_becomes_page_text(note: str, answer: str) -> N def test_a_table_cell_note_resolved_in_place_follows_the_table() -> None: - note = "TODO: rate-limit thresholds; set in proxy config, not recorded in dfo-apis." + note = "TODO: rate-limit thresholds; set in proxy config, not recorded in the apis repository." answer = "The rate limit is 10 calls per second, set in the proxy config." source = _read("pages/conventions.source.md") table_end = ( @@ -736,13 +737,13 @@ def test_each_note_a_region_turns_into_text_is_flagged() -> None: ) STUDIO_NOTE = ( "**Author note:** TODO: verify the chart title, plan and answer against the" - " staging site; they come from the recorded Studio session dfo-ai" - " docs/transcripts/studio\\_transcript\\_plan.jsonl." + " staging site; they come from the recorded Studio session in the ai" + " repository, docs/transcripts/studio\\_transcript\\_plan.jsonl." ) STUDIO_COMMENT = ( "" + " they come from the recorded Studio session in the ai" + " repository, docs/transcripts/studio_transcript_plan.jsonl. -->" ) ANSWER = "The staging site shows the same title." diff --git a/tests/test_manifest.py b/tests/test_manifest.py index 97d5a03..aeba756 100644 --- a/tests/test_manifest.py +++ b/tests/test_manifest.py @@ -875,7 +875,7 @@ def test_skill_corpus_files_carry_the_header_and_keep_links(tmp_path): assert not (corpus_root / "dfo-skills" / "_template").exists() -# The page entry and the download link that dfo-website's sync and link resolver are +# The page entry and the download link that the website's sync and link resolver are # tested against. Both repositories hold these literals. _BUNDLE_PAGE = { "path": "skills/oda-crs", diff --git a/tests/test_skills.py b/tests/test_skills.py index 5840d7d..e0acb6c 100644 --- a/tests/test_skills.py +++ b/tests/test_skills.py @@ -21,7 +21,7 @@ write_skill_bundle, ) -# The seven published dfo-skills descriptions, as YAML parses them, and the lead each gives. +# The seven published skill descriptions, as YAML parses them, and the lead each gives. REAL_DESCRIPTIONS = [ ( "dfo-faq",