diff --git a/.gitignore b/.gitignore index 2974ef46..6e50d0b1 100644 --- a/.gitignore +++ b/.gitignore @@ -45,3 +45,11 @@ logs/ .vibe/skills/openspec-*/ !.vibe/skills/openspec-workflows/ + +# Jekyll docs — local Bundler state and build output +docs/.bundle/ +docs/_site/ + +# local bundle installs (bundle config path vendor/bundle) +docs/vendor/ + diff --git a/docs/Gemfile.lock b/docs/Gemfile.lock index 972dd413..582f1a58 100644 --- a/docs/Gemfile.lock +++ b/docs/Gemfile.lock @@ -1,21 +1,21 @@ GEM remote: https://rubygems.org/ specs: - addressable (2.8.7) - public_suffix (>= 2.0.2, < 7.0) + addressable (2.8.9) + public_suffix (>= 2.0.2, < 8.0) base64 (0.3.0) colorator (1.1.0) - concurrent-ruby (1.3.5) + concurrent-ruby (1.3.6) csv (3.3.5) em-websocket (0.5.3) eventmachine (>= 0.12.9) http_parser.rb (~> 0) eventmachine (1.2.7) - ffi (1.17.2) + ffi (1.17.3) forwardable-extended (2.6.0) google-protobuf (3.25.8-x86_64-linux) - http_parser.rb (0.8.0) - i18n (1.14.7) + http_parser.rb (0.8.1) + i18n (1.14.8) concurrent-ruby (~> 1.0) jekyll (4.4.1) addressable (~> 2.4) @@ -50,15 +50,17 @@ GEM jekyll (>= 3.7, < 5.0) jekyll-watch (2.2.1) listen (~> 3.0) - json (2.17.1.2) - kramdown (2.5.1) - rexml (>= 3.3.9) + json (2.19.3) + kramdown (2.5.2) + rexml (>= 3.4.4) kramdown-parser-gfm (1.1.0) kramdown (~> 2.0) liquid (4.0.4) - listen (3.9.0) + listen (3.10.0) + logger rb-fsevent (~> 0.10, >= 0.10.3) rb-inotify (~> 0.9, >= 0.9.10) + logger (1.7.0) mercenary (0.4.0) minima (2.5.2) jekyll (>= 3.5, < 5.0) @@ -72,7 +74,7 @@ GEM rb-inotify (0.11.1) ffi (~> 1.0) rexml (3.4.4) - rouge (4.6.1) + rouge (4.7.0) safe_yaml (1.0.5) sass-embedded (1.69.5) google-protobuf (~> 3.23) @@ -80,7 +82,7 @@ GEM terminal-table (3.0.2) unicode-display_width (>= 1.1.1, < 3) unicode-display_width (2.6.0) - webrick (1.9.1) + webrick (1.9.2) PLATFORMS x86_64-linux diff --git a/docs/bundles/backlog/overview.md b/docs/bundles/backlog/overview.md new file mode 100644 index 00000000..7b252c93 --- /dev/null +++ b/docs/bundles/backlog/overview.md @@ -0,0 +1,114 @@ +--- +layout: default +title: Backlog bundle overview +nav_order: 2 +permalink: /bundles/backlog/overview/ +--- + +# Backlog bundle overview + +The **Backlog** bundle (`nold-ai/specfact-backlog`) connects SpecFact to external backlog tools (GitHub Issues, Azure DevOps, and other adapters), adds ceremony-oriented workflows, dependency analysis, delta tracking, and deterministic backlog policy checks. + +## Prerequisites + +- [SpecFact CLI](https://docs.specfact.io) installed +- Bundle installed: `specfact module install nold-ai/specfact-backlog` (or include it via `specfact init --profile …`) +- For provider access: configure tokens or use `specfact backlog auth` where your adapter requires it + +## Command surface + +After installation, `specfact backlog --help` lists the backlog command group. The backlog category also mounts **policy** as `specfact backlog policy` (see below). + +### Ceremony (`specfact backlog ceremony`) + +| Command | Purpose | +|--------|---------| +| `standup` | Alias for daily standup-style views (`backlog daily`) | +| `refinement` | Alias for AI-assisted refinement (`backlog refine`) | +| `planning` | Delegates to sprint-summary style flows when available | +| `flow` | Kanban-style flow views when available | +| `pi-summary` | PI summary views when available | + +### Core workflows + +| Command | Purpose | +|--------|---------| +| `daily` | Daily standup table: filtered items, optional interactive mode, summarize prompts | +| `refine` | AI-assisted template-driven refinement (preview/write, filters, DoR checks) | +| `add` | Create backlog items with hierarchy and Definition-of-Ready validation | +| `sync` | Sync backlog graph with stored baseline and export delta outputs | +| `verify-readiness` | Verify release readiness for selected backlog items | +| `analyze-deps` | Analyze backlog dependencies for a project | +| `diff` | Show changes since baseline sync | +| `promote` | Validate promotion impact and print promotion intent | +| `init-config` | Scaffold `.specfact/backlog-config.yaml` structure | +| `map-fields` | Interactive mapping of ADO fields to canonical names | + +### Delta (`specfact backlog delta`) + +| Command | Purpose | +|--------|---------| +| `status` | Compare current graph to baseline; show delta summary | +| `impact` | Downstream dependency impact for an item | +| `cost-estimate` | Rough effort points from delta volume | +| `rollback-analysis` | Rollback risk from current delta | + +### Policy (`specfact backlog policy`) + +Deterministic policy validation against backlog snapshots (bundled with this package; not core CLI-owned). + +| Command | Purpose | +|--------|---------| +| `init` | Scaffold `.specfact/policy.yaml` from a template | +| `validate` | Run policy checks (JSON/Markdown/both) | +| `suggest` | Patch-ready suggestions (no automatic writes) | + +See [Policy engine](policy-engine/) for details. + +### Auth (`specfact backlog auth`) + +Backlog provider authentication for **GitHub** and **Azure DevOps**: store tokens, run OAuth / device-code flows, inspect status, and clear credentials for setup and troubleshooting. + +| Subcommand | Purpose | +|------------|---------| +| `azure-devops` | Authenticate to Azure DevOps via PAT (`--pat`) or OAuth (interactive browser or `--use-device-code`) | +| `github` | Authenticate to GitHub (or GitHub Enterprise) via RFC 8628 device code flow; optional `--client-id`, `--base-url`, `--scopes` | +| `status` | Show stored auth state for supported providers (valid vs expired tokens) | +| `clear` | Remove stored tokens; optional `--provider` (`azure-devops` or `github`) or omit to clear all | + +## Bundle-owned prompts and templates + +Refinement and ceremony flows **emit prompts and instructions** for your IDE copilot. Those assets ship with the backlog bundle (and related payloads); they are **not** maintained as core CLI-owned files. Install or refresh IDE resources with `specfact init ide` (and your team’s bundle publishing workflow) so the CLI and bundles stay aligned. + +## Quick examples + +Validate the exact flags for your adapter: + +```bash +specfact backlog daily --help +specfact backlog refine --help +specfact backlog delta status --help +specfact backlog policy validate --help +specfact backlog auth --help +specfact backlog auth status --help +specfact backlog auth github --help +``` + +GitHub refinement preview (typical entry point): + +```bash +specfact backlog refine github --preview --labels feature +``` + +Daily standup scope: + +```bash +specfact backlog daily github --state open --limit 20 +``` + +## Deep dives + +- [Refinement](refinement/) +- [Dependency analysis](dependency-analysis/) +- [Delta](delta/) +- [Policy engine](policy-engine/) diff --git a/docs/bundles/code-review/overview.md b/docs/bundles/code-review/overview.md new file mode 100644 index 00000000..0d2b2fa4 --- /dev/null +++ b/docs/bundles/code-review/overview.md @@ -0,0 +1,58 @@ +--- +layout: default +title: Code Review bundle overview +nav_order: 2 +permalink: /bundles/code-review/overview/ +--- + +# Code Review bundle overview + +The **Code Review** bundle (`nold-ai/specfact-code-review`) extends the shared **`specfact code`** command group with **`review`** workflows: governed review runs, **reward ledger** history, and **house-rules** skill management. + +Use it together with the [Codebase](../codebase/overview/) bundle (`import`, `analyze`, `drift`, `validate`, `repro`) on the same `code` surface. + +## Prerequisites + +- `specfact module install nold-ai/specfact-code-review` +- Optional tool installs (Ruff, Radon, Semgrep, Pyright, etc.) as described in command help + +## `specfact code review` — nested commands + +| Command | Purpose | +|--------|---------| +| `run` | Execute a governed review (scope, JSON output, `--fix`, TDD gate, etc.) | +| `ledger` | Inspect and update review reward history | +| `rules` | Manage the house-rules skill (`show`, `init`, `update`) | + +### `ledger` subcommands + +| Subcommand | Purpose | +|------------|---------| +| `update` | Update ledger entries | +| `status` | Show ledger status | +| `reset` | Reset ledger state | + +### `rules` subcommands + +| Subcommand | Purpose | +|------------|---------| +| `show` | Show current rules configuration | +| `init` | Initialize rules/skill assets | +| `update` | Update rules content | + +## Bundle-owned skills and policy packs + +House rules and review payloads ship **inside the bundle** (for example Semgrep packs and skill metadata). They are **not** core CLI-owned resources. Install or refresh IDE-side assets with `specfact init ide` after upgrading the bundle. + +## Quick examples + +```bash +specfact code review run --help +specfact code review ledger status --help +specfact code review rules show --help +``` + +## See also + +- [Code review module](../../modules/code-review/) +- [Codebase bundle overview](../codebase/overview/) — import, drift, validation, repro diff --git a/docs/bundles/codebase/overview.md b/docs/bundles/codebase/overview.md new file mode 100644 index 00000000..9658b7da --- /dev/null +++ b/docs/bundles/codebase/overview.md @@ -0,0 +1,74 @@ +--- +layout: default +title: Codebase bundle overview +nav_order: 2 +permalink: /bundles/codebase/overview/ +--- + +# Codebase bundle overview + +The **Codebase** bundle (`nold-ai/specfact-codebase`) mounts under `specfact code` alongside the Code Review bundle. It focuses on **brownfield import**, **contract coverage analysis**, **drift detection**, **sidecar validation**, and **reproducible validation suites**. + +For automated review runs (Ruff, Semgrep, ledger, rules), see [Code Review](../code-review/overview/) — also on the `code` command group. + +## Prerequisites + +- `specfact module install nold-ai/specfact-codebase` (often together with `nold-ai/specfact-project`) +- Python repos for import/sidecar workflows; optional tool installs (CrossHair, Specmatic, Ruff, etc.) per command help + +## Command groups (`specfact code …`) + +### `import` — brownfield intake + +| Entry | Purpose | +|-------|---------| +| `specfact code import` (default) | Import a repository into a project bundle (`from-code` behavior; see `--help`) | +| `specfact code import from-bridge` | Import from an external bridge/export flow | + +Advanced import topics: [Project import command features](../project/import-migration/) (cross-bundle). + +### `analyze` — structure and contracts + +| Command | Purpose | +|--------|---------| +| `contracts` | Analyze codebase for OpenAPI contract coverage and related signals | + +### `drift` + +| Command | Purpose | +|--------|---------| +| `detect` | Detect drift between implementation and specifications | + +### `validate` — sidecar + +| Command | Purpose | +|--------|---------| +| `sidecar init` | Initialize a sidecar workspace for external-repo validation | +| `sidecar run` | Run the sidecar validation pipeline | + +### `repro` — reproducibility + +| Command | Purpose | +|--------|---------| +| Default when no subcommand | Run the full validation suite | +| `setup` | Prepare repro validation setup | + +Use `specfact code repro --help` for the default invocation flags (`--repo`, `--verbose`, `--sidecar`, …). + +## Bundle-owned prompts for import/generation + +Import and enrichment flows may ship **prompts or helper templates** with the bundle. They are **bundle payload**, not core-owned assets. Align your IDE with `specfact init ide` after bundle upgrades. + +## Quick examples + +```bash +specfact code import --help +specfact code analyze contracts --help +specfact code drift detect --help +specfact code validate sidecar init my-bundle /path/to/repo +specfact code repro --verbose --repo . +``` + +## Deep dives + +- [Sidecar validation](sidecar-validation/) diff --git a/docs/bundles/govern/overview.md b/docs/bundles/govern/overview.md new file mode 100644 index 00000000..0eb3df23 --- /dev/null +++ b/docs/bundles/govern/overview.md @@ -0,0 +1,45 @@ +--- +layout: default +title: Govern bundle overview +nav_order: 2 +permalink: /bundles/govern/overview/ +--- + +# Govern bundle overview + +The **Govern** bundle (`nold-ai/specfact-govern`) adds **enforcement** and **patch-mode** workflows: configure quality gates tied to SDD plans, and preview/apply patches with explicit write controls. + +## Prerequisites + +- `specfact module install nold-ai/specfact-govern` +- Project bundles with SDD manifests when using SDD enforcement paths + +## `specfact govern enforce` + +| Command | Purpose | +|--------|---------| +| `stage` | Configure enforcement stages for bundles and plans | +| `sdd` | Enforce SDD quality gates against manifests and plans | + +## `specfact govern patch` + +| Command | Purpose | +|--------|---------| +| `apply` | Preview and apply patches (local or upstream with `--write`) | + +## Bundle-owned policy packs + +Enforcement may ship **bundle-local policy packs or presets** with the package. Treat them as **bundle payload** referenced by the govern module, not as core CLI-owned configuration. Refresh IDE-facing resources with `specfact init ide` (core IDE prompts from installed modules). When updating the Code Review **house-rules** skill, use `specfact code review rules init --ide` or `specfact code review rules update --ide` (e.g. `--ide cursor`, `--ide claude`, `--ide codex`, or `--ide vibe`; see `--help`). + +## Quick examples + +```bash +specfact govern --help +specfact govern enforce stage --help +specfact govern enforce sdd --help +specfact govern patch apply --help +``` + +## See also + +- [Command reference](../../reference/commands/) — nested `govern` commands diff --git a/docs/bundles/project/overview.md b/docs/bundles/project/overview.md new file mode 100644 index 00000000..d02b2262 --- /dev/null +++ b/docs/bundles/project/overview.md @@ -0,0 +1,94 @@ +--- +layout: default +title: Project bundle overview +nav_order: 2 +permalink: /bundles/project/overview/ +--- + +# Project bundle overview + +The **Project** bundle (`nold-ai/specfact-project`) manages SpecFact **project bundles** (personas, locks, roadmap export), links them to backlog providers, coordinates **development plans** (features, stories, SDD alignment), **syncs** external tools (Spec-Kit, OpenSpec, GitHub, Linear, Jira, …), and **migrates** legacy layouts to bundle-centric structure. + +## Prerequisites + +- SpecFact CLI and a repository with `.specfact/` layout +- Bundle installed: `specfact module install nold-ai/specfact-project` +- For backlog-linked flows: install [Backlog](../backlog/overview/) and link a provider + +## Command families + +The project lifecycle surface loads from this bundle across **`specfact project`**, **`specfact plan`**, top-level **`specfact sync`**, and **`specfact migrate`** (see each group’s `--help` after install). The `project` group also nests a `sync` Typer; prefer the **top-level** `specfact sync …` entry when documented in the command reference. + +### `specfact project` — bundles and personas + +| Command | Purpose | +|--------|---------| +| `link-backlog` | Link a project bundle to a backlog adapter and project id | +| `health-check` | Project health including backlog graph checks | +| `devops-flow` | Integrated DevOps stage actions for a linked bundle | +| `snapshot` | Save the linked backlog graph as a baseline snapshot | +| `regenerate` | Re-derive plan state from bundle + backlog graph | +| `export-roadmap` | Export roadmap milestones from dependency critical path | +| `export` | Export persona-owned sections to Markdown | +| `import` | Import persona-edited Markdown back into the bundle | +| `lock` / `unlock` / `locks` | Section locks for collaborative editing | +| `init-personas` | Initialize persona mappings in the manifest | +| `merge` | Three-way merge with persona-aware conflict handling | +| `resolve-conflict` | Resolve a specific merge conflict | +| `version` | Subcommands for bundle versioning | +| `sync` | Same sync Typer as top-level `specfact sync` (see below) | + +### `specfact plan` — plans, stories, and reviews + +| Command | Purpose | +|--------|---------| +| `init` | Initialize or adopt a development plan for a bundle | +| `add-feature` / `add-story` | Add plan items | +| `update-idea` / `update-feature` / `update-story` | Update plan content | +| `compare` | Compare manual vs automatic plan inputs | +| `select` | Select active plan context | +| `upgrade` | Upgrade plan artifacts | +| `sync` | Sync plan artifacts with repo state | +| `promote` | Promotion workflow for plan readiness | +| `review` | Plan review workflows | +| `harden` | Harden SDD and related artifacts | + +### `specfact sync` — bridges and automation + +Use the top-level group (`specfact sync --help`). + +| Command | Purpose | +|--------|---------| +| `bridge` | Import/export bridge for external tools and adapters | +| `repository` | Repository-scoped sync operations | +| `intelligent` | Higher-level orchestrated sync | + +### `specfact migrate` — structure migrations + +| Command | Purpose | +|--------|---------| +| `cleanup-legacy` | Remove empty legacy top-level directories under `.specfact/` | +| `to-contracts` | Migrate verbose bundles toward contract-oriented layouts | +| `artifacts` | Migrate plan and artifact layouts | + +## Related: codebase import + +Brownfield **code import** (`specfact code import`, `specfact import …`) lives in the [Codebase](../codebase/overview/) bundle; it often feeds project bundles. See [Import command features](import-migration/) for behavior that spans both bundles. + +## Bundle-owned prompts and plan templates + +Plan and review flows may ship **prompts or templates** with the bundle. Treat them as **bundle payload**, not core CLI sources of truth. Refresh IDE-facing resources with `specfact init ide` after upgrades so editors receive the same artifacts the CLI expects. + +## Quick examples + +```bash +specfact project link-backlog --adapter github --project-id owner/repo --bundle my-bundle --repo . +specfact plan init --help +specfact sync bridge --help +specfact migrate artifacts --repo . +``` + +## See also + +- [DevOps flow](devops-flow/) +- [Import command features](import-migration/) diff --git a/docs/bundles/spec/overview.md b/docs/bundles/spec/overview.md new file mode 100644 index 00000000..54f1b829 --- /dev/null +++ b/docs/bundles/spec/overview.md @@ -0,0 +1,81 @@ +--- +layout: default +title: Spec bundle overview +nav_order: 2 +permalink: /bundles/spec/overview/ +--- + +# Spec bundle overview + +The **Spec** bundle (`nold-ai/specfact-spec`) mounts under the **`specfact spec`** command group. That group aggregates **OpenAPI contract lifecycle** commands, **Specmatic** integration (mounted as the `api` subgroup), **SDD** manifest utilities, and **generate** workflows for contracts and prompts. + +Install the bundle, then confirm the mounted tree with `specfact spec --help`. + +## Prerequisites + +- `specfact module install nold-ai/specfact-spec` +- Optional tooling per workflow (Specmatic, OpenAPI files, etc.) + +## `specfact spec contract` — OpenAPI contracts + +| Command | Purpose | +|--------|---------| +| `init` | Initialize contract artifacts for a bundle | +| `validate` | Validate OpenAPI/AsyncAPI specs | +| `coverage` | Report contract coverage signals | +| `serve` | Serve specs for local testing | +| `verify` | Verify contract consistency | +| `test` | Run contract-oriented tests | + +## `specfact spec api` — Specmatic (API spec testing) + +| Command | Purpose | +|--------|---------| +| `validate` | Validate specs via Specmatic | +| `backward-compat` | Compare two spec versions for compatibility | +| `generate-tests` | Generate Specmatic test suites | +| `mock` | Run a Specmatic mock server | + +## `specfact spec sdd` — SDD manifests + +| Command | Purpose | +|--------|---------| +| `list` | List SDD manifests in the repo | + +### `constitution` subcommands + +| Subcommand | Purpose | +|------------|---------| +| `bootstrap` | Bootstrap constitution markdown for Spec-Kit compatibility | +| `enrich` | Enrich constitution content | +| `validate` | Validate constitution structure | + +## `specfact spec generate` — generation and prompts + +| Command | Purpose | +|--------|---------| +| `contracts` | Generate contract artifacts from plans | +| `contracts-prompt` | Emit prompts for contract work | +| `contracts-apply` | Apply generated contract changes | +| `fix-prompt` | Prompt-driven fix flows | +| `test-prompt` | Prompt-driven test flows | + +## Bundle-owned prompts + +Generate and contract flows emit **prompts** shipped with the bundle. They are **bundle resources**, not core CLI files. Use `specfact init ide` to refresh IDE exports after bundle upgrades. + +## Quick examples + +```bash +specfact spec --help +specfact spec contract validate --help +specfact spec api validate --help +specfact spec sdd list --repo . +specfact spec sdd constitution validate --help +specfact spec generate contracts --help +``` + +## See also + +- [Command reference](../../reference/commands/) — bundle-to-command mapping +- [Contract testing workflow](../../guides/contract-testing-workflow/) diff --git a/docs/index.md b/docs/index.md index 06a03285..4fae5846 100644 --- a/docs/index.md +++ b/docs/index.md @@ -13,14 +13,14 @@ The modules site owns all bundle-specific deep guidance. Core CLI platform docs ## Official Bundles -| Bundle | Description | -|--------|-------------| -| [Backlog](bundles/backlog/refinement/) | AI-assisted refinement, delta commands, dependency analysis, policy engine | -| [Project](bundles/project/devops-flow/) | DevOps flow, import/migration, project setup | -| [Codebase](bundles/codebase/sidecar-validation/) | Sidecar validation, codebase analysis | -| [Spec](reference/commands/) | Specification management | -| [Govern](reference/commands/) | Governance and compliance | -| [Code Review](reference/commands/) | Automated code review with ruff, radon, semgrep | +| Bundle | Overview | Deep dives | +|--------|----------|------------| +| Backlog | [Overview](bundles/backlog/overview/) | [Refinement](bundles/backlog/refinement/), [delta](bundles/backlog/delta/), [policy](bundles/backlog/policy-engine/) | +| Project | [Overview](bundles/project/overview/) | [DevOps flow](bundles/project/devops-flow/), [import features](bundles/project/import-migration/) | +| Codebase | [Overview](bundles/codebase/overview/) | [Sidecar validation](bundles/codebase/sidecar-validation/) | +| Spec | [Overview](bundles/spec/overview/) | [Command reference](reference/commands/) | +| Govern | [Overview](bundles/govern/overview/) | [Command reference](reference/commands/) | +| Code Review | [Overview](bundles/code-review/overview/) | [Module guide](modules/code-review/) | ## Getting Started diff --git a/openspec/specs/bundle-overview-pages/spec.md b/openspec/specs/bundle-overview-pages/spec.md new file mode 100644 index 00000000..e7beba22 --- /dev/null +++ b/openspec/specs/bundle-overview-pages/spec.md @@ -0,0 +1,37 @@ +# bundle-overview-pages Specification + +## Purpose + +Define requirements for official bundle overview pages on the modules documentation site: each official bundle has a single landing page that lists commands, prerequisites, quick examples, and bundle-owned resource setup guidance aligned with the mounted SpecFact CLI surface. + +## Requirements + +### Requirement: Bundle overview pages SHALL provide complete bundle entry points + +Each official bundle SHALL have a single overview page that lists its commands, prerequisites, examples, and relevant bundle-owned resource setup guidance. + +#### Scenario: Overview page lists all bundle commands + +- **GIVEN** a bundle overview page such as `bundles/backlog/overview.md` +- **WHEN** a user reads the page +- **THEN** every registered command and subcommand for that bundle is listed +- **AND** each command has a brief description + +#### Scenario: Overview page includes quick examples + +- **GIVEN** a bundle overview page +- **WHEN** a user reads the page +- **THEN** at least one practical example is shown for each major command group + +#### Scenario: Overview page explains bundle-owned resource setup when relevant + +- **GIVEN** a bundle overview page for a bundle that ships prompts or workspace templates +- **WHEN** a user reads the page +- **THEN** the page explains which resources are bundled with that package +- **AND** it points to the supported setup flow such as `specfact init ide` or bundle-specific template/bootstrap commands + +#### Scenario: Command examples match actual CLI + +- **GIVEN** a command example in an overview page +- **WHEN** compared against the actual `specfact --help` output +- **THEN** the command name, arguments, and key options match diff --git a/tests/unit/docs/test_docs_review.py b/tests/unit/docs/test_docs_review.py index 71d94f03..1bb2c0f6 100644 --- a/tests/unit/docs/test_docs_review.py +++ b/tests/unit/docs/test_docs_review.py @@ -401,6 +401,10 @@ def test_moved_files_have_redirect_from_entries() -> None: rel = path.relative_to(_docs_root()) if not any(str(rel).startswith(d) for d in moved_dirs): continue + # New per-bundle landing pages (not migrated from guides/) have no legacy URL. + parts = rel.parts + if len(parts) >= 3 and parts[0] == "bundles" and path.name == "overview.md": + continue metadata, _ = _split_front_matter(_read_text(path)) if not metadata: continue diff --git a/tests/unit/test_modules_docs_site_contract.py b/tests/unit/test_modules_docs_site_contract.py index 9519d1bb..02d709e3 100644 --- a/tests/unit/test_modules_docs_site_contract.py +++ b/tests/unit/test_modules_docs_site_contract.py @@ -56,9 +56,12 @@ def test_modules_layout_keeps_sidebar_module_focused() -> None: def test_docs_tree_does_not_reference_retired_public_hosts() -> None: + skip_parts = frozenset({"vendor", "_site", ".bundle", ".jekyll-cache"}) for path in REPO_ROOT.joinpath("docs").rglob("*"): if not path.is_file(): continue + if skip_parts.intersection(path.parts): + continue text = _read(path) for host in OUTDATED_DOCS_HOSTS: assert host not in text, f"{path} still references retired host {host}"