Skip to content

Convert the restored articles to Markdown - #188

Merged
hiciefte merged 23 commits into
bisq-network:mainfrom
hiciefte:ci/markdown-fidelity
Nov 11, 2026
Merged

hiciefte merged 23 commits into
bisq-network:mainfrom
hiciefte:ci/markdown-fidelity

Conversation

@hiciefte

@hiciefte hiciefte commented Nov 11, 2026 •

Copy link
Copy Markdown
Collaborator

Replaces #184. The restored articles become Markdown wherever the site still looks as designed, so reviewers can edit them in the browser and diffs stay readable.

What changes

  • All 209 restored articles are Markdown: paragraphs, lists, links, emphasis, simple tables and 1,403 of 1,411 headings. Figures, complex tables, code with link targets and the gap markers stay HTML.
  • Headings keep their IDs explicitly (## Title {#id}), so rewording a heading can't break links; the build fails on a missing or duplicate ID. The old wiki anchors (#List_of_Teams) stay.
  • Headings use Starlight's link icon instead of the site's # button (accepted after before/after screenshots).
  • The restored HTML is kept unchanged in migration/restored-articles/. migration/markdown-format.json records which Markdown file renders the same as each preserved article. Both are preserved materials, and so is every other record article pages are built from (template renderings, repairs, aliases, articles, navigation, routes, recovery-evidence/) and the two MDX pages, which run code at build time. Migration notes may only gain notes with IDs of their own, each cited by a receipt in the same PR for every article it is shown on.
  • The fidelity check renders each Markdown article as the published page shows it (after the page's link, template and heading replacements, now shared in scripts/lib/article-page.mjs), parses it as part of a whole page, and compares it with its preserved HTML. Receipt rules apply to that page, so a Markdown image, heading or link, or a <body> or </main> tag, can't get past them.
  • Receipts are stricter: a figure is locked as a whole, caption included. Code blocks, tables and gap markers change only if the receipt lists them in changed_locked_content (named by code ID, or by the heading they follow); invisible and other non-printing characters only if it lists them in added_invisible_characters.
  • The build fails when anything else takes an article's place: Astro's page-conflict warnings, a docs entry published at another route than its path or with unknown front matter (such as head), unknown page files, unknown entries or HTML in public/. Each article page must show exactly what the check saw, with unique IDs and the same scripts around it as every other article page.
  • scripts/convert-articles-to-markdown.mjs converts newly imported wiki revisions the same way.

Checked

  • 212 article pages at 1440 and 390 px: identical apart from the heading icon. Page heights, the search index and all 7,246 IDs are unchanged; links to a heading land 1–5 px differently.
  • npm test (166 tests) and the strict npm run build pass, also with the project base path. The tests no longer depend on committed receipts or live article files: they pass with a real receipt committed and with wording proposals open. The check still passes on the HTML articles on main.
  • Three rounds of an independent security review found ways around the check. Each is fixed and kept as a regression test, and every attack now fails check, receipts or the build. Code under src/ and scripts/ and pages that aren't articles stay outside the check (CONTRIBUTING.md, "Limits"). The PR stays a draft until the review is done.

After merge

This changes article files, so it needs a documentation reviewer's approval.

Render restored wiki articles written in Markdown exactly like their
converted HTML. Headings carry their existing ID explicitly
({#id}); a missing or duplicate ID fails the build, so rewording a
heading cannot break saved links. Article headings get no Starlight
anchor-link wrapper, and external Markdown links keep
rel="noopener noreferrer". Other pages keep Starlight's defaults.

Add scripts/convert-articles-to-markdown.mjs, which converts an
article's HTML body to Markdown deterministically. It renders every
block with the site's own pipeline and keeps the original HTML where
Markdown would render differently. It also runs on newer wiki
revisions rendered by scripts/migrate-wiki.py.
Convert the 209 restored articles with
node scripts/convert-articles-to-markdown.mjs --all. Wording and
rendered pages are unchanged: headings keep their IDs and legacy
anchors, and HTML remains only where Markdown renders differently,
such as figures, code with source IDs, gap markers and complex tables.

The three additional historical articles stay HTML, because their
receipts cover the HTML.
Keep both test lists in package.json.
Scripts that read the article sources, such as the section repair test
and the backup comparison, match a link followed by its "section not
recovered" marker as written. Keep that link as HTML; the rendered
pages are unchanged.
Keep the 209 restored articles as they are on main (HTML, with the
recorded line-break formatting) in migration/restored-articles/. The
fidelity gate starts every article's chain there, so the originals stay
verifiable against migration/restoration-fidelity.json without pandoc or
the recovery data.

The directory is a preserved restoration material: check fails when a
pull request changes it. A material the base does not have yet may be
added by the pull request that adds it to the guard, so this one can be
introduced.
Each article is now a checked chain from its preserved restored HTML:
accepted HTML edits, at most one Markdown conversion, then accepted
Markdown edits. migration/markdown-format.json records each conversion
by the hashes of the HTML it replaced and of the Markdown. On every run
the gate renders both with the site's own Markdown pipeline and requires
the same page, normalizing only what a browser does not show: attribute
order, whitespace at line edges and in runs (not inside pre or code),
Starlight's dir="auto" on inline code, and Starlight's heading link in
its exact form. The HTML must render as itself, and a later change to the
recorded Markdown needs a receipt.

Receipts record the replaced Markdown and undo to exactly the converted
file. The structure rules of an accepted or awaiting edit now apply to
the rendered elements, since Markdown adds images, headings, links,
autolinks, footnotes, asides and raw HTML without a source tag; the
allowlist and locked elements are unchanged, inline code may carry
Starlight's dir="auto", and HTML that reaches past the article fails.
Articles still in HTML keep the source-level rules as well.

The renderer runs only on the package versions it was checked with, and
npm run build compares it with the build for every article. The receipts
job installs the packages it now needs.
The site applies section repairs and archived templates to the rendered
article (src/components/SourceHistory.astro). A Markdown heading carries
its ID as {#id}, so the section repair check now looks for the target ID
on the target's rendered page and confirms each repair still applies to
the source article's rendered page. Template placements are counted on
the rendered page too, and the tests render the articles first.
Explain that receipts record the replaced Markdown, that accepted edits
are checked on the rendered page, how a conversion is recorded and
checked, and which differences the conversion check allows.
Give every article heading Starlight's standard anchor link instead of
the site's own "#" copy button, which is removed. Headings that stay
HTML, including the additional historical articles and headings added
from archived templates, get the same markup and link to their
existing ID. The link label drops the space articles keep at the end
of headings.

The link keeps the copy button's size, so headings wrap and take the
same space and section anchors stay in place. Search output is
unchanged. The converter compares Markdown with the original HTML as
the site renders it, so the article files are unchanged.
The site now adds Starlight's heading link to every article heading,
Markdown and HTML alike. The conversion check compares the two rendered
pages with their heading links, so the links must match as well; the
normalization stays attribute order, invisible whitespace and dir="auto"
on inline code.

An HTML article must still render as its source. The heading link is the
one thing the site adds there, so that comparison accepts it only in the
exact form the site renders for the heading's ID and text, learned from a
sample heading; anything else in a wrapper still counts.
@coderabbitai

coderabbitai Bot commented Nov 11, 2026 •

Copy link
Copy Markdown

Important

Review skipped

Too many files!

This PR contains 466 files, which is 366 over the limit of 100.

To get a review, reduce the PR to 100 files or fewer by splitting it into smaller PRs or changing its base branch.

Upgrade to a paid plan to raise the limit.

Usage-priced reviews support at most 300 files.

Run configuration

Commits

Reviewing files that changed from the base of the PR and between 3d7e7bb and 7600575.

Files selected for processing: 466

  • .github/workflows/check.yml
  • CONTRIBUTING.md
  • astro.config.mjs
  • migration/markdown-format.json
  • migration/restored-articles/account-limits.md
  • migration/restored-articles/ach-transfer.md
  • migration/restored-articles/altcoins-instant.md
  • migration/restored-articles/altcoins.md
  • migration/restored-articles/amazon-egift-card.md
  • migration/restored-articles/arbitration.md
  • migration/restored-articles/arbitrator.md
  • migration/restored-articles/atomic-swap.md
  • migration/restored-articles/automatic-backup-script.md
  • migration/restored-articles/automatic-backup.md
  • migration/restored-articles/backing-up-application-data.md
  • migration/restored-articles/backing-up-your-wallet-seed.md
  • migration/restored-articles/backup.md
  • migration/restored-articles/bisq-1.md
  • migration/restored-articles/bisq-2-mobile-applications.md
  • migration/restored-articles/bisq-2-roles.md
  • migration/restored-articles/bisq-2-wallet.md
  • migration/restored-articles/bisq-2.md
  • migration/restored-articles/bisq-easy.md
  • migration/restored-articles/bisq-maintainer.md
  • migration/restored-articles/bisq-price-indices.md
  • migration/restored-articles/bisqpro.md
  • migration/restored-articles/bitcoin-holidays.md
  • migration/restored-articles/bitcoin-units.md
  • migration/restored-articles/bizum.md
  • migration/restored-articles/bsq-swaps.md
  • migration/restored-articles/bsq.md
  • migration/restored-articles/burning-men.md
  • migration/restored-articles/buyerverifiesprepareddelayedpayouttx-exception-error.md
  • migration/restored-articles/capitual.md
  • migration/restored-articles/cash-by-mail.md
  • migration/restored-articles/cbdc.md
  • migration/restored-articles/celpay.md
  • migration/restored-articles/changing-your-onion-address.md
  • migration/restored-articles/cloning-an-offer.md
  • migration/restored-articles/command-line-options.md
  • migration/restored-articles/community-manager.md
  • migration/restored-articles/compensation-maintainer.md
  • migration/restored-articles/compensation.md
  • migration/restored-articles/connecting-to-your-own-bitcoin-node.md
  • migration/restored-articles/contributor-checklist.md
  • migration/restored-articles/contributor-privacy-and-opsec.md
  • migration/restored-articles/create-a-new-wallet-for-your-data-directory.md
  • migration/restored-articles/creating-a-payment-account.md
  • migration/restored-articles/critical-bugs.md
  • migration/restored-articles/dao-technical-overview.md
  • migration/restored-articles/dao-user-reference.md
  • migration/restored-articles/data-directory.md
  • migration/restored-articles/data-privacy.md
  • migration/restored-articles/decentralized-autonomous-organization.md
  • migration/restored-articles/delayed-payout-transaction-pending-in-mempool-and-cpfp.md
  • migration/restored-articles/deposit-transaction-pending-in-mempool-and-cpfp.md
  • migration/restored-articles/deposit-transaction.md
  • migration/restored-articles/dev-team.md
  • migration/restored-articles/development-process.md
  • migration/restored-articles/dispute-resolution-in-bisq-1.md
  • migration/restored-articles/dispute-resolution-in-bisq-2.md
  • migration/restored-articles/domestic-wire-transfer.md
  • migration/restored-articles/donation-address-owner.md
  • migration/restored-articles/downloading-and-installing.md
  • migration/restored-articles/dumping-delayed-payout-transactions.md
  • migration/restored-articles/emergency-wallet.md
  • migration/restored-articles/encrypting-your-wallet.md
  • migration/restored-articles/events-calendar.md
  • migration/restored-articles/face-to-face-payment-method.md
  • migration/restored-articles/failed-trades-reimbursement-of-trade-fees-and-miner-fees.md
  • migration/restored-articles/faster-payments-system-sbp.md
  • migration/restored-articles/faster-payments.md
  • migration/restored-articles/fee-reimbursement-agent.md
  • migration/restored-articles/fiat.md
  • migration/restored-articles/finding-your-arbitrator.md
  • migration/restored-articles/finding-your-mediator.md
  • migration/restored-articles/fix-arch-release.md
  • migration/restored-articles/foss.md
  • migration/restored-articles/frequently-asked-questions.md
  • migration/restored-articles/funding-your-wallet.md
  • migration/restored-articles/getting-your-first-btc.md
  • migration/restored-articles/glossary.md
  • migration/restored-articles/growth-team.md
  • migration/restored-articles/how-do-i-send-fiat-to-bisq.md
  • migration/restored-articles/how-to-back-up-your-bisq-wallet-seed.md
  • migration/restored-articles/how-to-be-a-market-maker-on-bisq.md
  • migration/restored-articles/how-to-buy-bsq-on-bisq.md
  • migration/restored-articles/how-to-buy-btc-on-bisq-with-cad.md
  • migration/restored-articles/how-to-buy-btc-on-bisq-with-eur.md
  • migration/restored-articles/how-to-buy-usdt-on-bisq.md
  • migration/restored-articles/how-to-create-an-offer-to-buy-btc-with-eur.md
  • migration/restored-articles/how-to-create-an-offer-to-sell-btc-with-eur.md
  • migration/restored-articles/how-to-do-arbitrage-on-bisq.md
  • migration/restored-articles/how-to-do-remittance-on-bisq.md
  • migration/restored-articles/how-to-run-pricenode.md
  • migration/restored-articles/how-to-run-seednode.md
  • migration/restored-articles/how-to-sell-bsq-on-bisq.md
  • migration/restored-articles/howto.md
  • migration/restored-articles/identity.md
  • migration/restored-articles/import-bisq-wallet-as-watch-only-wallet-in-sparrow.md
  • migration/restored-articles/imps.md
  • migration/restored-articles/installing-your-own-bitcoin-node.md
  • migration/restored-articles/introduction-to-the-dao.md
  • migration/restored-articles/introduction.md
  • migration/restored-articles/issues-with-fiat-payments.md
  • migration/restored-articles/last-resort-restore.md
  • migration/restored-articles/linux-memory-arenas.md
  • migration/restored-articles/local-reputation.md
  • migration/restored-articles/main-page.md
  • migration/restored-articles/making-a-compensation-request.md
  • migration/restored-articles/making-a-reimbursement-request.md
  • migration/restored-articles/manual-payout.md
  • migration/restored-articles/manually-select-seednodes.md
  • migration/restored-articles/matrix-bisq-chat.md
  • migration/restored-articles/mediation.md
  • migration/restored-articles/mediator.md
  • migration/restored-articles/mempool-explorer-operator.md
  • migration/restored-articles/mining-fees.md
  • migration/restored-articles/mobile-notifications.md
  • migration/restored-articles/monero-explorer-operator.md
  • migration/restored-articles/monese.md
  • migration/restored-articles/musig-tradelimits.md
  • migration/restored-articles/neft.md
  • migration/restored-articles/nequi.md
  • migration/restored-articles/network-status-indicator.md
  • migration/restored-articles/ops-team.md
  • migration/restored-articles/participating-in-a-dao-voting-cycle.md
  • migration/restored-articles/paxum.md
  • migration/restored-articles/paying-trading-fees-with-bsq.md
  • migration/restored-articles/payment-account-age-witness.md
  • migration/restored-articles/payment-method-maintainer.md
  • migration/restored-articles/payment-methods-en.md
  • migration/restored-articles/payment-methods-es.md
  • migration/restored-articles/payment-methods.md
  • migration/restored-articles/paysera.md
  • migration/restored-articles/paytm.md
  • migration/restored-articles/performance-tips.md
  • migration/restored-articles/phase-zero.md
  • migration/restored-articles/pix.md
  • migration/restored-articles/pricenode-operator.md
  • migration/restored-articles/pricenode.md
  • migration/restored-articles/project-management.md
  • migration/restored-articles/proposals-maintainer.md
  • migration/restored-articles/proposals.md
  • migration/restored-articles/reducing-memory-usage.md
  • migration/restored-articles/remote-control-via-web-browser-using-xpra.md
  • migration/restored-articles/reputation.md
  • migration/restored-articles/reputation2.md
  • migration/restored-articles/restoring-application-data.md
  • migration/restored-articles/restoring-your-wallet-from-seed.md
  • migration/restored-articles/resyncing-spv-file.md
  • migration/restored-articles/revolut.md
  • migration/restored-articles/roles-maintainer.md
  • migration/restored-articles/roles.md
  • migration/restored-articles/rtgs.md
  • migration/restored-articles/running-bisq-in-china.md
  • migration/restored-articles/running-bisq-on-linux-using-vnc.md
  • migration/restored-articles/running-bisq-on-qubes.md
  • migration/restored-articles/running-bisq-on-tails.md
  • migration/restored-articles/running-from-the-command-line.md
  • migration/restored-articles/running-on-hidpi-screen.md
  • migration/restored-articles/satispay.md
  • migration/restored-articles/security-deposit.md
  • migration/restored-articles/security-team-lead.md
  • migration/restored-articles/security-team.md
  • migration/restored-articles/sepa-instant.md
  • migration/restored-articles/sepa-p550.md
  • migration/restored-articles/sepa-p551.md
  • migration/restored-articles/set-up-a-revolut-payment-account.md
  • migration/restored-articles/set-up-a-sepa-payment-account.md
  • migration/restored-articles/skrill.md
  • migration/restored-articles/stakeholder.md
  • migration/restored-articles/standup.md
  • migration/restored-articles/strike.md
  • migration/restored-articles/support-agent-knowledge-base.md
  • migration/restored-articles/support-agent.md
  • migration/restored-articles/support-team-lead.md
  • migration/restored-articles/support-team.md
  • migration/restored-articles/swift.md
  • migration/restored-articles/switching-to-a-new-data-directory.md
  • migration/restored-articles/table-of-penalties.md
  • migration/restored-articles/taking-an-offer.md
  • migration/restored-articles/teams.md
  • migration/restored-articles/templates-as-macros.md
  • migration/restored-articles/tikkie.md
  • migration/restored-articles/trade-payout-address-reuse-issue.md
  • migration/restored-articles/trade-protocols.md
  • migration/restored-articles/trading-bsq.md
  • migration/restored-articles/trading-costs.md
  • migration/restored-articles/trading-fees.md
  • migration/restored-articles/trading-grin.md
  • migration/restored-articles/trading-l-btc.md
  • migration/restored-articles/trading-monero.md
  • migration/restored-articles/trading-rules.md
  • migration/restored-articles/translation.md
  • migration/restored-articles/troubleshooting-network-issues.md
  • migration/restored-articles/troubleshooting-wallet-issues.md
  • migration/restored-articles/troubleshooting.md
  • migration/restored-articles/ubiquitous-law-enforcement.md
  • migration/restored-articles/updating-bisq.md
  • migration/restored-articles/updating-bsq-trading-fees.md
  • migration/restored-articles/upi.md
  • migration/restored-articles/us-postal-money-order.md
  • migration/restored-articles/user-support.md
  • migration/restored-articles/verse.md
  • migration/restored-articles/wallet.md
  • migration/restored-articles/watch-keys.md
  • migration/restored-articles/wiki-operator.md
  • migration/restored-articles/wiki-style-guidelines.md
  • migration/restored-articles/wise-usd.md
  • migration/restored-articles/wise.md
  • migration/restored-articles/youtube-admin.md
  • migration/restored-articles/zelle.md
  • package.json
  • scripts/accepted-edits.test.mjs
  • scripts/archived-templates.test.mjs
  • scripts/astro-build.mjs
  • scripts/check-awaiting-receipts.mjs
  • scripts/check-immutable-materials.mjs
  • scripts/check-rendered-articles.mjs
  • scripts/check-section-repairs.mjs
  • scripts/check-source-fidelity.mjs
  • scripts/check-template-renderings.mjs
  • scripts/convert-articles-to-markdown.mjs
  • scripts/convert-articles-to-markdown.test.mjs
  • scripts/fixtures/converted/automatic-backup-script.md
  • scripts/fixtures/converted/bitcoin-units.md
  • scripts/fixtures/converted/contributor-checklist.md
  • scripts/fixtures/converted/critical-bugs.md
  • scripts/fixtures/converted/last-resort-restore.md
  • scripts/fixtures/converted/teams.md
  • scripts/fixtures/converted/trading-monero.md
  • scripts/fixtures/converted/troubleshooting.md
  • scripts/fixtures/markdown-conversion/sample-article.html.md
  • scripts/fixtures/markdown-conversion/sample-article.md
  • scripts/immutable-materials.test.mjs
  • scripts/lib/accepted-edits.mjs
  • scripts/lib/archived-templates.mjs
  • scripts/lib/article-page.mjs
  • scripts/lib/built-pages.mjs
  • scripts/lib/html-tree.mjs
  • scripts/lib/immutable-materials.mjs
  • scripts/lib/markdown-conversion.mjs
  • scripts/lib/markdown-format.mjs
  • scripts/lib/recovered-link-aliases.mjs
  • scripts/lib/render-markdown.mjs
  • scripts/lib/rendered-html.mjs
  • scripts/lib/template-html.mjs
  • scripts/record-accepted-edit.mjs
  • scripts/record-markdown-format.mjs
  • scripts/rendered-html.test.mjs
  • scripts/section-repairs.test.mjs
  • scripts/wiki-markdown.test.mjs
  • src/components/SourceHistory.astro
  • src/content/docs/wiki/account-limits.md
  • src/content/docs/wiki/ach-transfer.md
  • src/content/docs/wiki/altcoins-instant.md
  • src/content/docs/wiki/altcoins.md
  • src/content/docs/wiki/amazon-egift-card.md
  • src/content/docs/wiki/arbitration.md
  • src/content/docs/wiki/arbitrator.md
  • src/content/docs/wiki/atomic-swap.md
  • src/content/docs/wiki/automatic-backup-script.md
  • src/content/docs/wiki/automatic-backup.md
  • src/content/docs/wiki/backing-up-application-data.md
  • src/content/docs/wiki/backing-up-your-wallet-seed.md
  • src/content/docs/wiki/backup.md
  • src/content/docs/wiki/bisq-1.md
  • src/content/docs/wiki/bisq-2-mobile-applications.md
  • src/content/docs/wiki/bisq-2-roles.md
  • src/content/docs/wiki/bisq-2-wallet.md
  • src/content/docs/wiki/bisq-2.md
  • src/content/docs/wiki/bisq-easy.md
  • src/content/docs/wiki/bisq-maintainer.md
  • src/content/docs/wiki/bisq-price-indices.md
  • src/content/docs/wiki/bisqpro.md
  • src/content/docs/wiki/bitcoin-holidays.md
  • src/content/docs/wiki/bitcoin-units.md
  • src/content/docs/wiki/bizum.md
  • src/content/docs/wiki/bsq-swaps.md
  • src/content/docs/wiki/bsq.md
  • src/content/docs/wiki/burning-men.md
  • src/content/docs/wiki/buyerverifiesprepareddelayedpayouttx-exception-error.md
  • src/content/docs/wiki/capitual.md
  • src/content/docs/wiki/cash-by-mail.md
  • src/content/docs/wiki/cbdc.md
  • src/content/docs/wiki/celpay.md
  • src/content/docs/wiki/changing-your-onion-address.md
  • src/content/docs/wiki/cloning-an-offer.md
  • src/content/docs/wiki/command-line-options.md
  • src/content/docs/wiki/community-manager.md
  • src/content/docs/wiki/compensation-maintainer.md
  • src/content/docs/wiki/compensation.md
  • src/content/docs/wiki/connecting-to-your-own-bitcoin-node.md
  • src/content/docs/wiki/contributor-checklist.md
  • src/content/docs/wiki/contributor-privacy-and-opsec.md
  • src/content/docs/wiki/create-a-new-wallet-for-your-data-directory.md
  • src/content/docs/wiki/creating-a-payment-account.md
  • src/content/docs/wiki/critical-bugs.md
  • src/content/docs/wiki/dao-technical-overview.md
  • src/content/docs/wiki/dao-user-reference.md
  • src/content/docs/wiki/data-directory.md
  • src/content/docs/wiki/data-privacy.md
  • src/content/docs/wiki/decentralized-autonomous-organization.md
  • src/content/docs/wiki/delayed-payout-transaction-pending-in-mempool-and-cpfp.md
  • src/content/docs/wiki/deposit-transaction-pending-in-mempool-and-cpfp.md
  • src/content/docs/wiki/deposit-transaction.md
  • src/content/docs/wiki/dev-team.md
  • src/content/docs/wiki/development-process.md
  • src/content/docs/wiki/dispute-resolution-in-bisq-1.md
  • src/content/docs/wiki/dispute-resolution-in-bisq-2.md
  • src/content/docs/wiki/domestic-wire-transfer.md
  • src/content/docs/wiki/donation-address-owner.md
  • src/content/docs/wiki/downloading-and-installing.md
  • src/content/docs/wiki/dumping-delayed-payout-transactions.md
  • src/content/docs/wiki/emergency-wallet.md
  • src/content/docs/wiki/encrypting-your-wallet.md
  • src/content/docs/wiki/events-calendar.md
  • src/content/docs/wiki/face-to-face-payment-method.md
  • src/content/docs/wiki/failed-trades-reimbursement-of-trade-fees-and-miner-fees.md
  • src/content/docs/wiki/faster-payments-system-sbp.md
  • src/content/docs/wiki/faster-payments.md
  • src/content/docs/wiki/fee-reimbursement-agent.md
  • src/content/docs/wiki/fiat.md
  • src/content/docs/wiki/finding-your-arbitrator.md
  • src/content/docs/wiki/finding-your-mediator.md
  • src/content/docs/wiki/fix-arch-release.md
  • src/content/docs/wiki/foss.md
  • src/content/docs/wiki/frequently-asked-questions.md
  • src/content/docs/wiki/funding-your-wallet.md
  • src/content/docs/wiki/getting-your-first-btc.md
  • src/content/docs/wiki/glossary.md
  • src/content/docs/wiki/growth-team.md
  • src/content/docs/wiki/how-do-i-send-fiat-to-bisq.md
  • src/content/docs/wiki/how-to-back-up-your-bisq-wallet-seed.md
  • src/content/docs/wiki/how-to-be-a-market-maker-on-bisq.md
  • src/content/docs/wiki/how-to-buy-bsq-on-bisq.md
  • src/content/docs/wiki/how-to-buy-btc-on-bisq-with-cad.md
  • src/content/docs/wiki/how-to-buy-btc-on-bisq-with-eur.md
  • src/content/docs/wiki/how-to-buy-usdt-on-bisq.md
  • src/content/docs/wiki/how-to-create-an-offer-to-buy-btc-with-eur.md
  • src/content/docs/wiki/how-to-create-an-offer-to-sell-btc-with-eur.md
  • src/content/docs/wiki/how-to-do-arbitrage-on-bisq.md
  • src/content/docs/wiki/how-to-do-remittance-on-bisq.md
  • src/content/docs/wiki/how-to-run-pricenode.md
  • src/content/docs/wiki/how-to-run-seednode.md
  • src/content/docs/wiki/how-to-sell-bsq-on-bisq.md
  • src/content/docs/wiki/howto.md
  • src/content/docs/wiki/identity.md
  • src/content/docs/wiki/import-bisq-wallet-as-watch-only-wallet-in-sparrow.md
  • src/content/docs/wiki/imps.md
  • src/content/docs/wiki/installing-your-own-bitcoin-node.md
  • src/content/docs/wiki/introduction-to-the-dao.md
  • src/content/docs/wiki/introduction.md
  • src/content/docs/wiki/issues-with-fiat-payments.md
  • src/content/docs/wiki/last-resort-restore.md
  • src/content/docs/wiki/linux-memory-arenas.md
  • src/content/docs/wiki/local-reputation.md
  • src/content/docs/wiki/main-page.md
  • src/content/docs/wiki/making-a-compensation-request.md
  • src/content/docs/wiki/making-a-reimbursement-request.md
  • src/content/docs/wiki/manual-payout.md
  • src/content/docs/wiki/manually-select-seednodes.md
  • src/content/docs/wiki/matrix-bisq-chat.md
  • src/content/docs/wiki/mediation.md
  • src/content/docs/wiki/mediator.md
  • src/content/docs/wiki/mempool-explorer-operator.md
  • src/content/docs/wiki/mining-fees.md
  • src/content/docs/wiki/mobile-notifications.md
  • src/content/docs/wiki/monero-explorer-operator.md
  • src/content/docs/wiki/monese.md
  • src/content/docs/wiki/musig-tradelimits.md
  • src/content/docs/wiki/neft.md
  • src/content/docs/wiki/nequi.md
  • src/content/docs/wiki/network-status-indicator.md
  • src/content/docs/wiki/ops-team.md
  • src/content/docs/wiki/participating-in-a-dao-voting-cycle.md
  • src/content/docs/wiki/paxum.md
  • src/content/docs/wiki/paying-trading-fees-with-bsq.md
  • src/content/docs/wiki/payment-account-age-witness.md
  • src/content/docs/wiki/payment-method-maintainer.md
  • src/content/docs/wiki/payment-methods-en.md
  • src/content/docs/wiki/payment-methods-es.md
  • src/content/docs/wiki/payment-methods.md
  • src/content/docs/wiki/paysera.md
  • src/content/docs/wiki/paytm.md
  • src/content/docs/wiki/performance-tips.md
  • src/content/docs/wiki/phase-zero.md
  • src/content/docs/wiki/pix.md
  • src/content/docs/wiki/pricenode-operator.md
  • src/content/docs/wiki/pricenode.md
  • src/content/docs/wiki/project-management.md
  • src/content/docs/wiki/proposals-maintainer.md
  • src/content/docs/wiki/proposals.md
  • src/content/docs/wiki/reducing-memory-usage.md
  • src/content/docs/wiki/remote-control-via-web-browser-using-xpra.md
  • src/content/docs/wiki/reputation.md
  • src/content/docs/wiki/reputation2.md
  • src/content/docs/wiki/restoring-application-data.md
  • src/content/docs/wiki/restoring-your-wallet-from-seed.md
  • src/content/docs/wiki/resyncing-spv-file.md
  • src/content/docs/wiki/revolut.md
  • src/content/docs/wiki/roles-maintainer.md
  • src/content/docs/wiki/roles.md
  • src/content/docs/wiki/rtgs.md
  • src/content/docs/wiki/running-bisq-in-china.md
  • src/content/docs/wiki/running-bisq-on-linux-using-vnc.md
  • src/content/docs/wiki/running-bisq-on-qubes.md
  • src/content/docs/wiki/running-bisq-on-tails.md
  • src/content/docs/wiki/running-from-the-command-line.md
  • src/content/docs/wiki/running-on-hidpi-screen.md
  • src/content/docs/wiki/satispay.md
  • src/content/docs/wiki/security-deposit.md
  • src/content/docs/wiki/security-team-lead.md
  • src/content/docs/wiki/security-team.md
  • src/content/docs/wiki/sepa-instant.md
  • src/content/docs/wiki/sepa-p550.md
  • src/content/docs/wiki/sepa-p551.md
  • src/content/docs/wiki/set-up-a-revolut-payment-account.md
  • src/content/docs/wiki/set-up-a-sepa-payment-account.md
  • src/content/docs/wiki/skrill.md
  • src/content/docs/wiki/stakeholder.md
  • src/content/docs/wiki/standup.md
  • src/content/docs/wiki/strike.md
  • src/content/docs/wiki/support-agent-knowledge-base.md
  • src/content/docs/wiki/support-agent.md
  • src/content/docs/wiki/support-team-lead.md
  • src/content/docs/wiki/support-team.md
  • src/content/docs/wiki/swift.md
  • src/content/docs/wiki/switching-to-a-new-data-directory.md
  • src/content/docs/wiki/table-of-penalties.md
  • src/content/docs/wiki/taking-an-offer.md
  • src/content/docs/wiki/teams.md
  • src/content/docs/wiki/templates-as-macros.md
  • src/content/docs/wiki/tikkie.md
  • src/content/docs/wiki/trade-payout-address-reuse-issue.md
  • src/content/docs/wiki/trade-protocols.md
  • src/content/docs/wiki/trading-bsq.md
  • src/content/docs/wiki/trading-costs.md
  • src/content/docs/wiki/trading-fees.md
  • src/content/docs/wiki/trading-grin.md
  • src/content/docs/wiki/trading-l-btc.md
  • src/content/docs/wiki/trading-monero.md
  • src/content/docs/wiki/trading-rules.md
  • src/content/docs/wiki/translation.md
  • src/content/docs/wiki/troubleshooting-network-issues.md
  • src/content/docs/wiki/troubleshooting-wallet-issues.md
  • src/content/docs/wiki/troubleshooting.md
  • src/content/docs/wiki/ubiquitous-law-enforcement.md
  • src/content/docs/wiki/updating-bisq.md
  • src/content/docs/wiki/updating-bsq-trading-fees.md
  • src/content/docs/wiki/upi.md
  • src/content/docs/wiki/us-postal-money-order.md
  • src/content/docs/wiki/user-support.md
  • src/content/docs/wiki/verse.md
  • src/content/docs/wiki/wallet.md
  • src/content/docs/wiki/watch-keys.md
  • src/content/docs/wiki/wiki-operator.md
  • src/content/docs/wiki/wiki-style-guidelines.md
  • src/content/docs/wiki/wise-usd.md
  • src/content/docs/wiki/wise.md
  • src/content/docs/wiki/youtube-admin.md
  • src/content/docs/wiki/zelle.md
  • src/markdown/wiki-markdown.mjs
  • src/scripts/article-experience.ts
  • src/styles/custom.css

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Pre-merge checks: Inconclusive 2

Failed Failed checks: 2 inconclusive

Check name Status Explanation Resolution
Title check Pending This assessment has not completed. The check will be retried on the next pre-merge check run.
Description check Pending This assessment has not completed. The check will be retried on the next pre-merge check run.

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

Share

migration/markdown-format.json said which Markdown each article was
converted to, but a pull request could change an article and set the new
hash, so the edit passed as a fresh conversion that needs no receipt. Make
the record a preserved restoration material. This pull request adds it,
so it is exempt; later pull requests cannot change it without changing
the guard.
A review of the gate found ways around it; this closes them.

- Parse rendered articles as part of a whole page, inside <main>, not as
  a fragment. A fragment parse dropped a <body> or <html> start tag, whose
  attributes (onload, hidden, inert, dir) the browser adds to the page,
  and a </main> that moves the rest of the page out of <main>. These now
  fail, and tags that act on the page's own elements are refused outright.
- Check the page after its string replacements. The link, section,
  template, media and heading replacements move from SourceHistory.astro
  into scripts/lib/article-page.mjs, which the page and the gate both
  run, so a change the comparison ignores (a line break before a gap
  marker) can no longer make the page link other text. The link and
  template patterns now match text only.
- Compare each figure as a whole, so a receipt cannot wrap an image in a
  new link or change its caption.
- Code blocks, tables and recovery gap markers change only when the
  receipt lists them in changed_locked_content, and invisible characters
  (format characters such as zero-width spaces and bidirectional
  controls) are added only when it lists them in
  added_invisible_characters. An awaiting edit names them, and the drafted
  receipt lists them.
- After the build, each built article page must show exactly the checked
  article, with its IDs unique on the page, and only known page files may
  exist under src/pages/, so a static page cannot replace an article.
- dir="auto" counts as right-to-left for code holding RLM, ALM, RLE, RLO
  or RLI, and heading text is inserted with function replacements.

Each confirmed attack is a regression test, and the self-test re-records
two conversions to check they fail.
The receipts job runs the pull request's code with a token, and the gate
needs no install script, so npm ci runs with --ignore-scripts there.
CONTRIBUTING.md describes what a receipt may now change, the conversion
record as a preserved material, and the checks on built pages.
The check compared how often each invisible character occurred, so an
edit could take one out in one place and put it into a URL, a number or a
word elsewhere. Now every invisible character in a change's accepted text,
written out or as a character reference, must be listed in the receipt's
added_invisible_characters. The count comparison stays as a backstop.
A pull request could change a template rendering and its hash and so put
any HTML into articles, or reword a migration note shown on article
pages, without a receipt. Every record under migration/ that pages build
on, and recovery-evidence/, is now a preserved material: template
renderings and definitions, section and link repairs, alias evidence,
articles, navigation, routes, the recovered category and the source
formatting. Correcting one needs its own pull request that also changes
the guard.

The migration notes may only gain notes. Existing notes stay byte for
byte, and each new note must be cited by a receipt the pull request adds
or changes, so a documentation reviewer approves it with the receipt. A
test keeps every file under migration/ classified.
A docs entry elsewhere with slug "wiki/teams/index" and a head script won
the article's route, and public/Teams/index.html replaced an old wiki
address; Astro only warned. Now the build fails on either warning
(scripts/astro-build.mjs), and after it:

- every docs entry must keep the route its path gives it, set only known
  front-matter fields (no head), be Markdown or a known MDX page, and
  take no old wiki address or alias;
- public/ may hold only its known entries and no HTML;
- what runs or loads around the content must be the same on every
  article page, apart from the contents-list scripts.

Template renderings may also put in only plain template HTML.
…stably

- Invisible characters now include default-ignorable, control (other
  than tab and line breaks), unassigned, private-use and surrogate code
  points, so U+17B4, U+180B, U+FFF0 or U+E0080 are flagged.
- They are judged by position in the rendered article's decoded text, so
  a hand-written receipt that splits a character reference across a
  change boundary cannot move one unlisted.
- Code blocks keep their code's ID as their name; tables and gap markers
  are named by the heading they follow and their number there, so
  dropping one no longer renames the rest, and each is compared with the
  text around it, so moving one counts as changing it.
- <noscript> and <template> are refused in article content.
- record-accepted-edit.mjs fills the receipt's lists from the check's
  findings, as the receipts job's drafts do.
Explain which migration records are preserved and how a correction
goes, how migration notes are added, the new names for locked parts,
the wider invisible-character rule, and what the build refuses so that
pull requests without article changes are covered too.
The two MDX docs pages run code when the site is built: an import could
push a script into every page's head or change the notes article pages
show. Both are now preserved materials, which keeps the site as it is.

Migration notes: note IDs are unique, so a note cannot stand in for an
existing one; a new note has an ID of its own; and every article a new
note is shown on needs a receipt in the same pull request that cites it.
The gate also fails on duplicate note IDs, and a receipt change may not
end inside a character reference the following text completes.
- Code blocks, tables and gap markers are compared together with their
  section and their place among the locked parts, so two code blocks with
  the same surroundings cannot trade places unlisted.
- public/ allows only certain file types per folder: fonts and their
  licence, images and the media index, text and JSON. An SVG or XHTML
  file could be a page of its own.
- Template renderings may link outside the site only to GitHub, the one
  host the archived renderings use.
- No docs entry other than the two known MDX pages may hold an import or
  export statement.
The tests mixed their own approval rule with the repository's receipts,
so the first real accepted edit would have failed npm test, and newer
tests read live articles, so a wording proposal on Teams,
Troubleshooting or the backup script failed it too. The tests now leave
out every committed receipt, use their own settings, and read converted
fixtures checked against the preserved originals and the conversion
record. A test commits a valid receipt for a real article with the
repository's own settings, and each review case is a regression test.
Name what the check does not cover (code under src/ and scripts/, and
pages that are not restored articles), and describe the MDX pages as
preserved materials, the migration note rules, the public file types and
how locked parts are compared.
@hiciefte
hiciefte marked this pull request as ready for review November 11, 2026 15:39
@hiciefte
hiciefte requested a review from a team November 11, 2026 15:39
@hiciefte
hiciefte merged commit 4c216b7 into bisq-network:main Nov 11, 2026
3 checks passed
hiciefte added a commit to hiciefte/documentation that referenced this pull request Nov 11, 2026
main converted the restored articles from HTML to Markdown (bisq-network#188). Each
article this branch edits is now the converter's output for the branch's
edited HTML (scripts/convert-articles-to-markdown.mjs), and renders to the
same page as that HTML. The wording change itself is unchanged.
hiciefte added a commit to hiciefte/documentation that referenced this pull request Nov 11, 2026
main converted the restored articles from HTML to Markdown (bisq-network#188). Each
article this branch edits is now the converter's output for the branch's
edited HTML (scripts/convert-articles-to-markdown.mjs), and renders to the
same page as that HTML. The wording change itself is unchanged.
hiciefte added a commit to hiciefte/documentation that referenced this pull request Nov 11, 2026
main converted the restored articles from HTML to Markdown (bisq-network#188). Each
article this branch edits is now the converter's output for the branch's
edited HTML (scripts/convert-articles-to-markdown.mjs), and renders to the
same page as that HTML. The wording change itself is unchanged.
hiciefte added a commit to hiciefte/documentation that referenced this pull request Nov 11, 2026
main converted the restored articles from HTML to Markdown (bisq-network#188). Each
article this branch edits is now the converter's output for the branch's
edited HTML (scripts/convert-articles-to-markdown.mjs), and renders to the
same page as that HTML. The wording change itself is unchanged.
hiciefte added a commit to hiciefte/documentation that referenced this pull request Nov 11, 2026
main converted the restored articles from HTML to Markdown (bisq-network#188). Each
article this branch edits is now the converter's output for the branch's
edited HTML (scripts/convert-articles-to-markdown.mjs), and renders to the
same page as that HTML. The wording change itself is unchanged.
hiciefte added a commit to hiciefte/documentation that referenced this pull request Nov 11, 2026
main converted the restored articles from HTML to Markdown (bisq-network#188). Each
article this branch edits is now the converter's output for the branch's
edited HTML (scripts/convert-articles-to-markdown.mjs), and renders to the
same page as that HTML. The wording change itself is unchanged.
hiciefte added a commit to hiciefte/documentation that referenced this pull request Nov 11, 2026
main converted the restored articles from HTML to Markdown (bisq-network#188). Each
article this branch edits is now the converter's output for the branch's
edited HTML (scripts/convert-articles-to-markdown.mjs), and renders to the
same page as that HTML. The wording change itself is unchanged.
hiciefte added a commit to hiciefte/documentation that referenced this pull request Nov 11, 2026
main converted the restored articles from HTML to Markdown (bisq-network#188). Each
article this branch edits is now the converter's output for the branch's
edited HTML (scripts/convert-articles-to-markdown.mjs), and renders to the
same page as that HTML. The wording change itself is unchanged.
hiciefte added a commit to hiciefte/documentation that referenced this pull request Nov 11, 2026
main converted the restored articles from HTML to Markdown (bisq-network#188). Each
article this branch edits is now the converter's output for the branch's
edited HTML (scripts/convert-articles-to-markdown.mjs), and renders to the
same page as that HTML. The wording change itself is unchanged.
hiciefte added a commit to hiciefte/documentation that referenced this pull request Nov 11, 2026
main converted the restored articles from HTML to Markdown (bisq-network#188). Each
article this branch edits is now the converter's output for the branch's
edited HTML (scripts/convert-articles-to-markdown.mjs), and renders to the
same page as that HTML. The wording change itself is unchanged.
hiciefte added a commit to hiciefte/documentation that referenced this pull request Nov 11, 2026
main converted the restored articles from HTML to Markdown (bisq-network#188). Each
article this branch edits is now the converter's output for the branch's
edited HTML (scripts/convert-articles-to-markdown.mjs), and renders to the
same page as that HTML. The wording change itself is unchanged.
hiciefte added a commit to hiciefte/documentation that referenced this pull request Nov 11, 2026
main converted the restored articles from HTML to Markdown (bisq-network#188). Each
article this branch edits is now the converter's output for the branch's
edited HTML (scripts/convert-articles-to-markdown.mjs), and renders to the
same page as that HTML. The wording change itself is unchanged.
hiciefte added a commit to hiciefte/documentation that referenced this pull request Nov 11, 2026
main converted the restored articles from HTML to Markdown (bisq-network#188). Each
article this branch edits is now the converter's output for the branch's
edited HTML (scripts/convert-articles-to-markdown.mjs), and renders to the
same page as that HTML. The wording change itself is unchanged.
hiciefte added a commit to hiciefte/documentation that referenced this pull request Nov 11, 2026
main converted the restored articles from HTML to Markdown (bisq-network#188). Each
article this branch edits is now the converter's output for the branch's
edited HTML (scripts/convert-articles-to-markdown.mjs), and renders to the
same page as that HTML. The wording change itself is unchanged.
hiciefte added a commit to hiciefte/documentation that referenced this pull request Nov 11, 2026
main converted the restored articles from HTML to Markdown (bisq-network#188). Each
article this branch edits is now the converter's output for the branch's
edited HTML (scripts/convert-articles-to-markdown.mjs), and renders to the
same page as that HTML. The wording change itself is unchanged.
hiciefte added a commit to hiciefte/documentation that referenced this pull request Nov 11, 2026
main converted the restored articles from HTML to Markdown (bisq-network#188). Each
article this branch edits is now the converter's output for the branch's
edited HTML (scripts/convert-articles-to-markdown.mjs), and renders to the
same page as that HTML. The wording change itself is unchanged.
hiciefte added a commit to hiciefte/documentation that referenced this pull request Nov 11, 2026
main converted the restored articles from HTML to Markdown (bisq-network#188). Each
article this branch edits is now the converter's output for the branch's
edited HTML (scripts/convert-articles-to-markdown.mjs), and renders to the
same page as that HTML. The wording change itself is unchanged.
hiciefte added a commit to hiciefte/documentation that referenced this pull request Nov 11, 2026
main converted the restored articles from HTML to Markdown (bisq-network#188). Each
article this branch edits is now the converter's output for the branch's
edited HTML (scripts/convert-articles-to-markdown.mjs), and renders to the
same page as that HTML. The wording change itself is unchanged.
hiciefte added a commit to hiciefte/documentation that referenced this pull request Nov 11, 2026
main converted the restored articles from HTML to Markdown (bisq-network#188). Each
article this branch edits is now the converter's output for the branch's
edited HTML (scripts/convert-articles-to-markdown.mjs), and renders to the
same page as that HTML. The wording change itself is unchanged.
hiciefte added a commit to hiciefte/documentation that referenced this pull request Nov 11, 2026
main converted the restored articles from HTML to Markdown (bisq-network#188). Each
article this branch edits is now the converter's output for the branch's
edited HTML (scripts/convert-articles-to-markdown.mjs), and renders to the
same page as that HTML. The wording change itself is unchanged.
hiciefte added a commit to hiciefte/documentation that referenced this pull request Nov 11, 2026
main converted the restored articles from HTML to Markdown (bisq-network#188). Each
article this branch edits is now the converter's output for the branch's
edited HTML (scripts/convert-articles-to-markdown.mjs), and renders to the
same page as that HTML. The wording change itself is unchanged.
hiciefte added a commit to hiciefte/documentation that referenced this pull request Nov 11, 2026
main converted the restored articles from HTML to Markdown (bisq-network#188). Each
article this branch edits is now the converter's output for the branch's
edited HTML (scripts/convert-articles-to-markdown.mjs), and renders to the
same page as that HTML. The wording change itself is unchanged.
hiciefte added a commit to hiciefte/documentation that referenced this pull request Nov 11, 2026
main converted the restored articles from HTML to Markdown (bisq-network#188). Each
article this branch edits is now the converter's output for the branch's
edited HTML (scripts/convert-articles-to-markdown.mjs), and renders to the
same page as that HTML. The wording change itself is unchanged.
hiciefte added a commit to hiciefte/documentation that referenced this pull request Nov 11, 2026
main converted the restored articles from HTML to Markdown (bisq-network#188). Each
article this branch edits is now the converter's output for the branch's
edited HTML (scripts/convert-articles-to-markdown.mjs), and renders to the
same page as that HTML. The wording change itself is unchanged.
hiciefte added a commit to hiciefte/documentation that referenced this pull request Nov 11, 2026
main converted the restored articles from HTML to Markdown (bisq-network#188). Each
article this branch edits is now the converter's output for the branch's
edited HTML (scripts/convert-articles-to-markdown.mjs), and renders to the
same page as that HTML. The wording change itself is unchanged.
hiciefte added a commit to hiciefte/documentation that referenced this pull request Nov 11, 2026
main converted the restored articles from HTML to Markdown (bisq-network#188). Each
article this branch edits is now the converter's output for the branch's
edited HTML (scripts/convert-articles-to-markdown.mjs), and renders to the
same page as that HTML. The wording change itself is unchanged.
hiciefte added a commit to hiciefte/documentation that referenced this pull request Nov 11, 2026
main converted the restored articles from HTML to Markdown (bisq-network#188). Each
article this branch edits is now the converter's output for the branch's
edited HTML (scripts/convert-articles-to-markdown.mjs), and renders to the
same page as that HTML. The wording change itself is unchanged.
hiciefte added a commit to hiciefte/documentation that referenced this pull request Nov 11, 2026
main converted the restored articles from HTML to Markdown (bisq-network#188). Each
article this branch edits is now the converter's output for the branch's
edited HTML (scripts/convert-articles-to-markdown.mjs), and renders to the
same page as that HTML. The wording change itself is unchanged.
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