7.0 KiB
phase, plan, subsystem, tags, dependency_graph, tech_stack, key_files, decisions, metrics
| phase | plan | subsystem | tags | dependency_graph | tech_stack | key_files | decisions | metrics | ||||||||||||||||||||||||||||||||||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 15-ci-skip-api-harness-jobs-for-doc-only-prs | 01 | ci |
|
|
|
|
|
|
Phase 15 Plan 01: Markdown Lint Gate Summary
One-liner: markdownlint-cli2@0.22.1 with Prettier-compatible config wired into fast-checks CI; 13 baseline violations fixed across 7 doc files, gate starts green.
Tasks Completed
| Task | Name | Commit | Files |
|---|---|---|---|
| 1 | Install markdownlint-cli2, add md:lint script, create .markdownlint-cli2.jsonc | adb7641 |
.markdownlint-cli2.jsonc, package.json, pnpm-lock.yaml |
| 2 | Fix 13 baseline violations; green md:lint + format:check; wire fast-checks step | 46bea03 |
.gitea/workflows/ci.yml, .markdownlint-cli2.jsonc (Prettier reformat), README.md, apps/api/README.md, apps/pwa/README.md, apps/pwa/e2e/README.md, docs/API.md, docs/ARCHITECTURE.md, docs/DEVELOPMENT.md, docs/GETTING-STARTED.md |
What Was Built
Task 1: markdownlint-cli2 install + config
- Installed
markdownlint-cli2@0.22.1as a root workspace devDependency viapnpm add -D markdownlint-cli2@0.22.1 --workspace-root - Added
"md:lint": "markdownlint-cli2"script to rootpackage.jsonafterformat:check - Created
.markdownlint-cli2.jsoncat repo root with:extends: "markdownlint/style/prettier"— disables the 23 rules Prettier owns (including MD013 line-length, which would produce 700+ false positives against printWidth 100)- Content rules ENABLED: MD001, MD024, MD040, MD031, MD051, MD052
- Rules DISABLED: MD041 (CLAUDE.md starts with
## Project), MD034 (pkg@version syntax in version tables), MD036 (docs/API.md uses**Response 200**as semantic labels) globs:["docs/**/*.md", "*.md", "apps/**/*.md"]ignores:[".planning/**", "node_modules/**", "**/node_modules/**", ".pnpm-store/**"]
Task 2: Baseline fixes + CI wiring
Fixed all 13 violations:
- MD040 (11 bare fences): Added language tags across 7 files:
apps/api/README.md:19— directory tree →textapps/pwa/e2e/README.md:76— pseudo-code block →textapps/pwa/README.md:45— directory tree →textdocs/API.md:517— SSE event format →textdocs/API.md:544— SSE event format example →textdocs/ARCHITECTURE.md:64— directory tree →textdocs/ARCHITECTURE.md:171— backend module flow →textdocs/DEVELOPMENT.md:9— directory tree →textdocs/DEVELOPMENT.md:22— directory tree →textREADME.md:78— monorepo structure →textREADME.md:119— CalDAV principal URL →text
- MD031 (2 violations):
docs/GETTING-STARTED.md:52-54— added blank lines before```bashand after closing```surrounding thenode -ecommand inside a list item
Wired CI step in .gitea/workflows/ci.yml:
- name: Markdown lint
run: pnpm md:lint
Inserted after Format check, before Typecheck in the fast-checks job.
Verification performed:
pnpm md:lintexits 0 (Summary: 0 error(s), 12 files scanned)pnpm format:checkexits 0 (no Prettier conflict from MD031 blank-line additions)- Gate-can-fail test: appended a bare fence to README.md, confirmed
pnpm md:lintexits non-zero (1 error), then reverted viagit checkout -- README.md(NOTE: this reverted the Task 2 README.md fixes; they were re-applied before the Task 2 commit)
Deviations from Plan
Auto-fixed Issues
1. [Rule 1 - Bug] Prettier reformatted .markdownlint-cli2.jsonc
- Found during: Task 2 format:check run
- Issue:
.markdownlint-cli2.jsonccreated in Task 1 had no trailing commas; Prettier'strailingComma: "all"added trailing commas to the JSONC properties and arrays - Fix: Ran
pnpm format -- .markdownlint-cli2.jsoncto apply Prettier's preferred style; verifiedpnpm md:lintstill passes after the reformat - Files modified:
.markdownlint-cli2.jsonc - Commit:
46bea03(included in Task 2 commit with the doc fixes)
2. [Rule 1 - Bug] gate-can-fail test reverted README.md MD040 fixes
- Found during: Task 2 gate verification test
- Issue: Using
git checkout -- README.mdto revert the test bare fence also reverted the two MD040 fixes previously applied in Task 2 (README.md:78 and :119). The gate-can-fail test usedgit checkout -- README.mdfor cleanup which is a blanket revert. - Fix: Re-read README.md, re-applied both MD040 fixes (
textlanguage tags at lines 78 and 119), confirmedpnpm md:lintexits 0 before committing - Files modified: README.md
- Commit:
46bea03
Known Stubs
None — plan goal (markdownlint gate) is fully wired and green.
Threat Surface Scan
No new network endpoints, auth paths, file access patterns, or schema changes introduced. The only surface is the markdownlint-cli2 devDependency (supply chain) — addressed in the plan's threat model (T-15-01: pinned to exact 0.22.1, package legitimacy audit OK in RESEARCH.md).
Self-Check: PASSED
.markdownlint-cli2.jsoncexists at repo root: FOUNDpackage.jsoncontainsmd:lintscript andmarkdownlint-cli2devDep: FOUND.gitea/workflows/ci.ymlcontainspnpm md:lintstep: FOUND- Commit
adb7641exists: FOUND - Commit
46bea03exists: FOUND pnpm md:lintexits 0: VERIFIEDpnpm format:checkexits 0: VERIFIED