Skip to content

Commit a4392c4

Browse files
sir-sigurdclaude
andauthored
Add markdownlint CI job and fix broken doc links (#123)
* Add markdownlint CI job and fix broken doc links Add a markdownlint job to CI that lints the top-level Markdown docs with markdownlint-cli2, configured via .markdownlint-cli2.yaml. The config disables noisy/stylistic rules (line-length, bold-as-heading, table-pipe-spacing), sets MD024 to siblings-only for the CHANGELOG, and globs *.{md,markdown} (non-recursive) so spec/ working notes and .github/ are excluded. Fix the existing violations to establish a green baseline: - README: repair the stale table of contents (drop entries with no in-doc target, add the real sections), demote stray H1s to H2 with subsections bumped one level, add languages to bare code fences. - OPERATIONS: fix cross-reference anchors that omitted the heading's "(N minutes)" suffix. - Normalize blank lines around headings, fences, and lists. Two OPERATIONS checklist links (#capacity-monitoring, #security-audit) point to sections that do not exist yet; they are left in place with an inline markdownlint-disable and a TODO referencing the issue. Fixes #95 Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> * Fill in CHANGELOG PR number Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> * Use rule-name aliases in markdownlint config Reference rules by their readable names (line-length, no-emphasis-as-heading, table-column-style, no-duplicate-heading) instead of MD0xx IDs. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> * Drop CHANGELOG entry A CI/docs-tooling change does not warrant a release note. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> * Use rule-name alias in inline disable directives Reference link-fragments instead of MD051 in the markdownlint-disable comments, matching the config style. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> * Add blank line before list in CHANGELOG Pre-existing MD032 violation surfaced by the new markdownlint baseline. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> * Correct MD060 description in config comment table-column-style (MD060) governs table cell padding consistency; the previous comment described it as "table pipe spacing," which is MD055. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> * Defer README TOC fix to a separate PR Restore the original table-of-contents entries verbatim and suppress the broken in-doc anchors with a markdownlint-disable block plus a TODO referencing #95, rather than deciding the TOC restructure here. The navigation/content decision (which sections belong, cross-doc links) belongs in a focused PR; this one stays scoped to the lint baseline. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> * Lint all Markdown recursively With spec/ removed (#122), there's no working-notes directory left to avoid, so widen the glob from top-level *.{md,markdown} to recursive **/*.{md,markdown} in both the config and the CI action (the action's default glob is non-recursive and overrides the config, so it's set explicitly). This auto-covers future nested docs like module READMEs. The only newly-linted file, .github/pull_request_template.md, opens with a section heading rather than an H1; skip first-line-heading inline since it's a template fragment, not a standalone document. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> * Use disable-file for the template's first-line-heading exemption MD041 is about the file's first line, so the exemption belongs to the whole file, not one line. disable-line was positional and would silently stop working if the template gained a line above the heading. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> * Lint Markdown via pinned npx instead of the action Replace DavidAnson/markdownlint-cli2-action@v23 with a pinned `npx markdownlint-cli2@0.22.1` run. A moving major action tag auto-adopts new releases that can add or tighten rules and break CI with no repo change; a pinned npm version is content-immutable, so the linter is reproducible. It also matches the local invocation, and lets the config's globs drive file selection without duplicating them in the workflow. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> * Tighten TOC link suppressions and fix two retargetable entries - Retarget Troubleshooting and Terraform Commands Reference to the real sections; only the five entries needing cross-doc decisions (#95) stay. - Switch the README disable block to per-line disables so a TOC entry added later still gets dead-anchor checking. - Reword the TODO: #95 tracks the broken links themselves, not a restructure. - Indent the suppression comments under the preceding list item so the TOC and checklists render as single lists (an unindented HTML comment between bullets splits the list). Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> * Freeze the linter via lockfile and ignore vendored trees - Move the markdownlint-cli2 pin into package.json + package-lock.json and run `npm ci` in CI: a bare `npx <pkg>@<version>` still resolves deep transitive deps fresh on every run, while the lockfile freezes the whole tree and makes the pin visible to update tooling. - Add `ignores` for .terraform/ and node_modules/: markdownlint-cli2 has no default exclusions, and `terraform init` vendors registry modules whose READMEs would fail local runs. - Ignore node_modules in .gitignore. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> * Trim package.json to the essentials Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> --------- Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
1 parent 618bf01 commit a4392c4

10 files changed

Lines changed: 1549 additions & 51 deletions

File tree

.github/pull_request_template.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
<!-- markdownlint-disable-file first-line-heading -->
12
## Description
23

34
## TODO

.github/workflows/ci.yml

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,17 @@ jobs:
1919
terraform_wrapper: false
2020
- run: terraform fmt -check -recursive -diff
2121

22+
markdownlint:
23+
runs-on: ubuntu-latest
24+
steps:
25+
- uses: actions/checkout@v6
26+
# Globs and rules come from .markdownlint-cli2.yaml. npm ci installs the
27+
# exact tree from package-lock.json, so no markdownlint (or transitive)
28+
# release can change rules or break CI without a repo change; bump the
29+
# version deliberately via package.json.
30+
- run: npm ci
31+
- run: npx --no-install markdownlint-cli2
32+
2233
validate:
2334
runs-on: ubuntu-latest
2435
strategy:

.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,3 +2,4 @@
22
.terraform
33
.terraform.lock.hcl
44
tfplan
5+
node_modules

.markdownlint-cli2.yaml

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
# markdownlint-cli2 configuration. See https://github.com/DavidAnson/markdownlint
2+
# for the full rule reference.
3+
config:
4+
# Line length: prose, tables, and long links routinely exceed any fixed width.
5+
line-length: false
6+
# Bold-as-heading: the docs deliberately use bold text as inline labels.
7+
no-emphasis-as-heading: false
8+
# Table column style: enforces consistent cell padding across tables;
9+
# cosmetic, tables render correctly either way.
10+
table-column-style: false
11+
# Duplicate headings: the CHANGELOG repeats Added/Changed/Fixed per release,
12+
# which is the Keep a Changelog convention. Only flag duplicates under the
13+
# same parent heading.
14+
no-duplicate-heading:
15+
siblings_only: true
16+
# Lint every Markdown file in the repo. Both local runs and CI invoke
17+
# markdownlint-cli2 with no glob arguments, so this is the single source of
18+
# truth for which files are linted.
19+
globs:
20+
- "**/*.{md,markdown}"
21+
# markdownlint-cli2 has no default exclusions, so vendored trees must be
22+
# ignored explicitly: `terraform init` vendors registry modules (and their
23+
# READMEs) under .terraform/, and npm installs under node_modules/.
24+
ignores:
25+
- "**/.terraform/**"
26+
- "**/node_modules/**"

CHANGELOG.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,7 @@ Optional release notice.
3838
## [1.6.0] - 2026-02-24
3939

4040
If you rely on the default `search_instance_type` / `search_dedicated_master_type`:
41+
4142
- Upgrading from a version prior to 1.5.0 will fail on `terraform apply`. Upgrade to 1.5.0 first.
4243
- If you have reserved m5 instances, pin the instance types explicitly to keep using them.
4344

OPERATIONS.md

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -12,20 +12,24 @@ This document provides comprehensive operational procedures for cloud teams mana
1212

1313
### Daily Checklist
1414

15-
- [ ] Health check (5 min) - [Instructions](#daily-health-checks)
15+
- [ ] Health check (5 min) - [Instructions](#daily-health-checks-5-minutes)
1616
- [ ] Monitor alerts - [Dashboard Links](#monitoring-dashboards)
1717
- [ ] Review logs - [Log Locations](#log-management)
1818

1919
### Weekly Checklist
2020

21-
- [ ] Backup verification (10 min) - [Instructions](#backup-verification)
22-
- [ ] Security updates (15 min) - [Instructions](#security-updates)
21+
- [ ] Backup verification (10 min) - [Instructions](#backup-verification-10-minutes)
22+
- [ ] Security updates (15 min) - [Instructions](#security-updates-15-minutes)
23+
<!-- TODO: no "Capacity review" section exists yet; see https://github.com/quiltdata/iac/issues/95 -->
24+
<!-- markdownlint-disable-next-line link-fragments -->
2325
- [ ] Capacity review (10 min) - [Instructions](#capacity-monitoring)
2426

2527
### Monthly Checklist
2628

27-
- [ ] Capacity planning (20 min) - [Instructions](#capacity-planning)
28-
- [ ] Cost review (15 min) - [Instructions](#cost-optimization)
29+
- [ ] Capacity planning (20 min) - [Instructions](#capacity-planning-20-minutes)
30+
- [ ] Cost review (15 min) - [Instructions](#cost-optimization-recommendations)
31+
<!-- TODO: no "Security audit" section exists yet; see https://github.com/quiltdata/iac/issues/95 -->
32+
<!-- markdownlint-disable-next-line link-fragments -->
2933
- [ ] Security audit (30 min) - [Instructions](#security-audit)
3034

3135
## Installation Procedures

0 commit comments

Comments
 (0)