Skip to content

fix: remove duplicated markdown and themes config keys (main is red) - #36

Merged
whg517 merged 1 commit into
zncdatadev:mainfrom
whg517:fix/duplicate-markdown-config
Aug 24, 2026
Merged

fix: remove duplicated markdown and themes config keys (main is red)#36
whg517 merged 1 commit into
zncdatadev:mainfrom
whg517:fix/duplicate-markdown-config

Conversation

@whg517

@whg517 whg517 commented Aug 24, 2026

Copy link
Copy Markdown
Member

Summary

main is currently failing and the site has not deployed since c8a5e91. This restores it.

#35 was stacked on #33, so it carried #33's mermaid commit. #35 merged first, then #33 merged its own copy of the same change — leaving docusaurus.config.ts with two markdown keys and two themes keys. My fault for arranging the PRs that way: I made correctness depend on merge order, which was fragile.

Impact

1. TypeScript Lint fails on main

docusaurus.config.ts(34,3): error TS1117: An object literal cannot have multiple properties with the same name.
docusaurus.config.ts(37,3): error TS1117: An object literal cannot have multiple properties with the same name.

Failing since fa4beab (#33 merge). The deploy job has needs: [markdown-lint, typescript-lint], so GitHub Pages has not been updated since c8a5e91 — the mermaid fix from #33 is not live yet.

2. The deprecation fix from #35 was silently reverted

Duplicate object keys mean the last literal wins. The second markdown block has no hooks member, so markdown.hooks.onBrokenMarkdownLinks was dropped and the Docusaurus v4 deprecation warning came back. mermaid: true survived only because both copies happened to set it.

Changes

  • Delete the duplicated markdown block and the duplicated themes line, keeping the copy that carries hooks

Testing

  • npx tsc --noEmit passes (was 2 errors)
  • npm run build passes (both locales), warning-free again
  • markdown, themes, onBrokenMarkdownLinks each appear exactly once
  • Mermaid still renders: 0 language-mermaid blocks left in either locale's output
  • project-status page from docs(developer-manual): add project status page #34 still generated

🤖 Generated with Claude Code

PR zncdatadev#35 was stacked on zncdatadev#33, so it carried zncdatadev#33's mermaid commit. zncdatadev#35 merged
first, then zncdatadev#33 merged its own copy of the same change, leaving
docusaurus.config.ts with two `markdown` keys and two `themes` keys.

This broke main two ways:

  docusaurus.config.ts(34,3): error TS1117: An object literal cannot have
  multiple properties with the same name.

TypeScript Lint has failed on main since fa4beab, and because the deploy
job needs that check, the site has not deployed since c8a5e91.

Functionally the duplicate `markdown` key also silently reverted the
deprecation fix: the second literal wins, and it has no `hooks` member,
so markdown.hooks.onBrokenMarkdownLinks was dropped and the v4
deprecation warning came back.

Drop the duplicate block, keeping the one that carries hooks.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
@whg517
whg517 merged commit bfd7e31 into zncdatadev:main Aug 24, 2026
3 checks passed
whg517 added a commit that referenced this pull request Aug 24, 2026
* chore: pin markdownlint and add lint/verify scripts

Markdown lint ran through the GitHub action, which pins markdownlint-cli2
internally. Nothing told a contributor which version that was, so running
`npx markdownlint-cli2` locally pulled the latest instead: 0.23 enforces
MD060 (table-column-style) and reports ~46 violations on tables CI
considers clean. That is a trap, and it already cost time in this repo.

Move the version into package.json as an exact devDependency, matching
what the action was already resolving, and put the globs in an npm script
so local runs and CI cannot disagree:

  npm run lint:md    markdownlint over *.md, docs/**, i18n/**
  npm run lint       lint:md + typecheck
  npm run verify     lint + build (mirrors CI end to end)

Pinning to the version currently in effect keeps this a pure guardrail
change with no new violations. Upgrading later means either fixing the
MD060 tables or disabling that rule, and should be its own PR.

Verified: `npm run verify` exits 0, linting 52 files with 0 errors.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>

* ci: split lint, build and deploy into separate jobs

The workflow had three problems beyond naming.

`npm install` with a committed lockfile can resolve differently from what
the lockfile pins, so CI was not reproducible. Switched to `npm ci`, and
added setup-node's npm cache while there.

The build ran inside the deploy job, so on a pull request the check that
actually verified the build was reported as "Deploy to GitHub Pages" —
misleading, since nothing was being deployed. Build is now its own job,
scoped to pull requests; deploy is scoped to main pushes and still builds
what it publishes. No status check was required by branch protection, so
renaming is safe.

That deploy job also checked out shallow, while docusaurus is configured
with showLastUpdateAuthor and showLastUpdateTime. Those read git history,
so with depth 1 every page reported the same last-updated date. Both jobs
that build now use fetch-depth: 0.

Also scope the push trigger to main so forks stop running the full
workflow on every branch push, cancel superseded pull request runs (but
never an in-flight deploy), and drop the default token down to
contents: read except in deploy.

Lint now runs `npm run lint`, the same command contributors run locally.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>

* docs: rewrite AGENTS.md for agent onboarding, symlink CLAUDE.md

AGENTS.md described the repository accurately enough but left out
everything an agent actually needs to avoid breaking things, and a few
details were wrong (typecheck is `tsc`, not `npx tsc --noEmit`).

Add what was missing:

- A single `npm run verify` as the definition of done, with the
  underlying commands spelled out
- The four traps this repository has already produced: unpinned
  markdownlint reporting rules CI does not enforce, MD013's non-strict
  exemption making "max 200 characters" not literal, byte-vs-character
  counting inflating CJK line lengths, and mermaid being unverifiable
  from build output because it renders client-side
- Content state: 13 of 24 pages are placeholders, with the command to
  list them, so an agent does not mistake a stub for a real page
- The en/zh mirroring invariant and how to check it, since Docusaurus
  falls back to English and the build stays green when it is violated
- The Chinese-prose-in-the-English-tree inconsistency, flagged as
  something not to copy
- Which sidebar categories are autogenerated and which need editing
- A do-not-stack-PRs rule, with the #33/#35/#36 breakage as the reason

Also correct the "max 200 characters" rule, refresh the CI table for the
new job layout, and point the PR template at `npm run verify`.

CLAUDE.md is a symlink to AGENTS.md (git mode 120000, not a copy) so both
conventions resolve to one file. Note for Windows contributors: with
core.symlinks disabled git materialises it as a text file containing the
target path.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 5 <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant