mirror of
https://github.com/coder/coder.git
synced 2026-09-24 15:04:27 +08:00
## Summary Replaces 9 stale docs paths and 2 stale doc anchors in `site/src/`, and adds a TS/TSX audit script (`site/scripts/audit-docs-paths.mjs`) plus unit tests that scan the codebase for paths that resolve via `coder.com/redirects.json`. ### Redirect-target updates (9) Each of these paths' `/docs/...` source matches a Next.js redirect rule, so requests today produce a 302 on `coder.com`. The audit script identifies them by cross-referencing against `redirects.json`. - Five update product-code references to `/ai-coder/ai-bridge` (renamed to `/ai-coder/ai-gateway` in v2.33). - One updates a commented-out reference to `/templates#template-filtering` in `TemplatesFilter.tsx`. - Three update notification-template mock data in `testHelpers/entities.ts` that pointed at the renamed `/docs/templates/schedule`. ### Anchor-only updates (2) These paths are still live on `coder.com` (no redirect), but their `#fragment` no longer matches a heading on the destination page. Fragments are evaluated client-side and never sent to the server, so the audit script does not catch them. Found and verified manually against the current docs. - `AuditFilter.tsx`: `/admin/security/audit-logs#filtering-logs` → `/admin/security/audit-logs#how-to-filter-audit-logs`. The current heading is `## How to Filter Audit Logs` in [`docs/admin/security/audit-logs.md`](https://github.com/coder/coder/blob/main/docs/admin/security/audit-logs.md). - `UserAuthSettingsPageView.tsx`: drops the stale `#openid-connect` anchor; the path itself (`/admin/users/oidc-auth`) is unchanged. The page H1 is now `# OpenID Connect`, so the bare path lands at the same place the anchor used to. None are user-visible label changes; only the doc target URLs change. ## Audit script `site/scripts/audit-docs-paths.mjs` cross-references TS/TSX docs-URL references against `coder.com/redirects.json` and reports anything that resolves via a redirect (which means stale source). It catches four forms: - `docs("/...")` / `docs('/...')` / `` docs(`/...`) `` - `` docs(`/.../${expr}/...`) `` (literal prefix, flagged as dynamic) - `"https://coder.com/docs/..."` and other quoted forms - `](https://coder.com/docs/...)` and `](/docs/...)` markdown-link forms The full audit (26 findings: 9 in `coder/coder/site/`, 17 in `coder/coder.com/src/`) lives in [DOCS-253 on Linear](https://linear.app/codercom/issue/DOCS-253) rather than being committed to the repo. Re-run locally with: ```bash node site/scripts/audit-docs-paths.mjs \ --redirects=/path/to/coder.com/redirects.json \ --roots=/path/to/coder/site/src,/path/to/coder.com/src ``` Default output goes to `docs/.audit/redirects-audit-YYYY-MM-DD.md`, which is gitignored. ## Tests `site/scripts/audit-docs-paths.test.mjs` has 59 cases covering the four regexes, `matchRedirect` (exact, `:path*`, `:slug(.*)`, miss), `findMatchingRedirect`, `stripQueryAndFragment`, `literalPrefix`, `extractReferences` end-to-end with line numbers and multi-line `docs()` calls, `buildReport` (empty input, repo grouping and sort order, fragment annotation, unclassified section), `walk` against a real temp filesystem (recursion, extension filter, `SKIP_DIRS` pruning, missing/file inputs, seeded results), and `runCli` (missing-root warning, real-but-empty root). Run with `pnpm exec vitest run scripts/audit-docs-paths.test.mjs --project=unit` from `site/`. ## Notes - User-visible "AI Bridge" label text is not changed here. Renaming the product surface from "AI Bridge" to "AI Gateway" is tracked separately by the AI Governance team in AIGOV-233. - A vitest assertion that no literal path in `site/src/` resolves via a redirect will land in a follow-up PR (DOCS-257), so future drift fails fast in CI. - A generated `DocsPath` type for the `docs()` helper is planned in DOCS-254. - The `/docs/templates/schedule` drift in `entities.ts` also appears in `coderd/notifications/testdata/*.golden` test fixtures and in historical SQL migrations under `coderd/database/migrations/`. Those are tracked under DOCS-256 (A2: non-TS audit) and not in scope here. ## Related work - Linear: DOCS-253 (this PR), parent DOCS-209. - Companion redirect rule on the coder.com side: coder/coder.com#826. - Companion fixes for the 17 coder.com findings: coder/coder.com#876 (supersedes the closed coder/coder.com#827, which was made redundant by coder/coder.com#832). <details> <summary>Implementation plan (Linear DOCS-209)</summary> | Phase | Scope | Linear | Status | |---|---|---|---| | D | Versioned redirect for `/docs/@v2.33.x/ai-coder/ai-bridge` in `coder.com/redirects.json` | DOCS-255 | coder/coder.com#826 open | | A1 | TS/TSX audit + autofix in `coder/coder/site/` | DOCS-253 | This PR | | A1 follow-up | Same autofix in `coder/coder.com/src/` (3 remaining findings after coder/coder.com#832) | DOCS-281 | coder/coder.com#876 open | | A2 | Non-TS audit in `coder/coder` (Go, comments, markdown) | DOCS-256 | Backlog | | A3 | code-server audit | DOCS-252 | Backlog | | B | vitest assertion against `redirects.json` | DOCS-257 | Blocked by A1 | | C | Generated `DocsPath` type | DOCS-254 | Blocked by B | </details> --- Generated by Coder Agent on behalf of @nickvigilante. --------- Co-authored-by: Coder <coder@users.noreply.github.com>
124 lines
2.0 KiB
Plaintext
124 lines
2.0 KiB
Plaintext
# Common ignore patterns, these rules applies in both root and subdirectories.
|
|
.DS_Store
|
|
.eslintcache
|
|
.gitpod.yml
|
|
.idea
|
|
.run
|
|
**/*.swp
|
|
gotests.coverage
|
|
gotests.xml
|
|
gotests_stats.json
|
|
gotests.json
|
|
node_modules/
|
|
vendor/
|
|
yarn-error.log
|
|
|
|
# Test output files
|
|
test-output/
|
|
|
|
# VSCode settings.
|
|
**/.vscode/*
|
|
# Allow VSCode recommendations and default settings in project root.
|
|
!/.vscode/extensions.json
|
|
!/.vscode/settings.json
|
|
# Allow code snippets
|
|
!/.vscode/*.code-snippets
|
|
|
|
# Front-end ignore patterns.
|
|
.next/
|
|
site/*-storybook.log
|
|
site/coverage/
|
|
site/storybook-static/
|
|
site/test-results/*
|
|
site/e2e/test-results/*
|
|
site/e2e/states/*.json
|
|
site/e2e/.auth.json
|
|
site/playwright-report/*
|
|
site/.swc
|
|
|
|
# Make target for updating generated/golden files (any dir).
|
|
.gen
|
|
/_gen/
|
|
.gen-golden
|
|
|
|
# Build
|
|
bin/
|
|
build/
|
|
dist/
|
|
out/
|
|
|
|
# Bundle analysis
|
|
site/stats/
|
|
|
|
*.tfstate
|
|
*.tfstate.backup
|
|
*.tfplan
|
|
*.lock.hcl
|
|
!provisioner/terraform/testdata/resources/.terraform.lock.hcl
|
|
.terraform/
|
|
!coderd/testdata/parameters/modules/.terraform/
|
|
!provisioner/terraform/testdata/modules-source-caching/.terraform/
|
|
|
|
**/.coderv2/*
|
|
**/__debug_bin
|
|
|
|
# direnv
|
|
.envrc
|
|
.direnv
|
|
*.test
|
|
|
|
# Loadtesting
|
|
./scaletest/terraform/.terraform
|
|
./scaletest/terraform/.terraform.lock.hcl
|
|
scaletest/terraform/secrets.tfvars
|
|
.terraform.tfstate.*
|
|
|
|
# Nix
|
|
result
|
|
|
|
# Data dumps from unit tests
|
|
**/*.test.sql
|
|
|
|
# Filebrowser.db
|
|
**/filebrowser.db
|
|
|
|
# pnpm
|
|
.pnpm-store/
|
|
|
|
# Zed
|
|
.zed_server
|
|
|
|
# dlv debug binaries for go tests
|
|
__debug_bin*
|
|
|
|
**/.claude/settings.local.json
|
|
|
|
# Local agent configuration
|
|
AGENTS.local.md
|
|
|
|
# mise local overrides
|
|
mise.local.toml
|
|
.mise.local.toml
|
|
mise.*.local.toml
|
|
.mise.*.local.toml
|
|
|
|
# `mise oci build` writes its OCI image layout here by default.
|
|
mise-oci/
|
|
|
|
/.env
|
|
|
|
# Ignore plans written by AI agents.
|
|
PLAN.md
|
|
|
|
# Ignore any dev licenses
|
|
license.txt
|
|
|
|
# Agent planning documents (local working files).
|
|
docs/plans/
|
|
|
|
# Local audit reports (e.g. site/scripts/audit-docs-paths.mjs output).
|
|
# The file is for local inspection only.
|
|
docs/.audit/
|
|
|
|
/release-action
|