feat(mission-control): sync launchpad and runbooks with upstream main

- Merge-aligned doc-manifest regeneration (58 doc-derived runbooks)

- Launchpad: Phoenix Deploy API, Meta testnet 2138 runbook, aggregator route matrix

- Curated runbook: check-chain138-rpc-health.sh; README env vars; catalog test threshold

Made-with: Cursor
This commit is contained in:
2026-03-29 10:13:59 +08:00
parent fa5de3ba01
commit 252b766a53
5 changed files with 235 additions and 5 deletions

View File

@@ -34,6 +34,10 @@ pnpm --filter mission-control run generate:runbooks
| `GIT_BASH_PATH` | Windows: full path to `bash.exe` if not under default Git paths. |
| `NEXT_PUBLIC_HELPER_SCRIPTS_URL` | Launchpad link for helper site (default `http://localhost:3000`). |
| `NEXT_PUBLIC_EXPLORER_URL` | Launchpad link for explorer (default `https://explorer.d-bis.org`). |
| `NEXT_PUBLIC_PHOENIX_DEPLOY_API_URL` | Launchpad link for Phoenix Deploy API health (default `http://localhost:4001/health`). |
| `NEXT_PUBLIC_TESTNET_2138_RUNBOOK_URL` | Meta testnet 2138 runbook (Gitea markdown). |
| `NEXT_PUBLIC_ROUTE_MATRIX_URL` | Aggregator route matrix JSON in repo. |
| `NEXT_PUBLIC_DOCS_MASTER_URL` / `NEXT_PUBLIC_OPERATIONAL_RUNBOOKS_URL` | Override doc deep links on the launchpad. |
## Test

View File

@@ -1,5 +1,5 @@
{
"generatedAt": "2026-03-27T13:14:31.612Z",
"generatedAt": "2026-03-29T02:12:54.013Z",
"runbooks": [
{
"id": "doc-00-meta-deploy-confirm-and-full-e2e-runbook-39d840a5",
@@ -111,7 +111,7 @@
{
"id": "doc-03-deployment-add-liquidity-pmm-chain138-runbook-f349d900",
"title": "Add Liquidity to PMM Pools (Chain 138) — Runbook",
"summary": "**Purpose:** Add base/quote liquidity to the three DODO PMM pools on Chain 138 (cUSDT/cUSDC, cUSDT/USDT, cUSDC/USDC).",
"summary": "> Historical note (2026-03-26): this runbook originated during the earlier three-pool PMM phase. Current canonical Chain 138 PMM addresses are `DODOPMMIntegration=0x5BDc62f1ae7D630c37A8B363a1d49845356Ee72d` and `DODOPMMProvider=0x5CAe6Ce155b7f08D3a956F5Dc82fC9945f29B381`.",
"whyItMatters": "This links documentation to executable automation in the monorepo. Operators get repeatable runs and an audit trail.",
"audienceHelp": "Use Practice mode when a script supports it. Set Proxmox host and RPC override when your environment differs from defaults.",
"docPath": "docs/03-deployment/ADD_LIQUIDITY_PMM_CHAIN138_RUNBOOK.md",
@@ -268,6 +268,71 @@
"complianceFramework": "DBIS-MC-DOC-RUNBOOK-1",
"executionNote": "Automated steps are the scripts explicitly referenced in this runbook. Review the documentation for prerequisites (SSH, VPN, secrets) before running in production."
},
{
"id": "doc-03-deployment-chain138-pmm-redeploy-and-pool-funding-runbook-619d5ab4",
"title": "Chain 138 PMM Redeploy and Pool Funding Runbook",
"summary": "**Purpose:** Execute the live on-chain PMM remediation and funding sequence on Chain 138 in the correct order:",
"whyItMatters": "This links documentation to executable automation in the monorepo. Operators get repeatable runs and an audit trail.",
"audienceHelp": "Use Practice mode when a script supports it. Set Proxmox host and RPC override when your environment differs from defaults.",
"docPath": "docs/03-deployment/CHAIN138_PMM_REDEPLOY_AND_POOL_FUNDING_RUNBOOK.md",
"prerequisites": [
"Read the linked markdown runbook for safety and ordering.",
"Bash (Linux, macOS, WSL, or Git Bash on Windows) for .sh steps; Node for .mjs.",
"Network, SSH, or API access as required by the underlying scripts."
],
"steps": [
{
"title": "Documentation",
"plainText": "Open and follow: docs/03-deployment/CHAIN138_PMM_REDEPLOY_AND_POOL_FUNDING_RUNBOOK.md",
"technicalNote": "Automated steps below are derived from script paths mentioned in that file."
}
],
"inputs": [
{
"name": "proxmoxHost",
"label": "Proxmox host",
"type": "string",
"help": "Used as PROXMOX_HOST in the environment for scripts that read it (e.g. 192.168.11.10).",
"example": "192.168.11.10",
"default": "192.168.11.10"
},
{
"name": "rpcUrlOverride",
"label": "RPC URL override (optional)",
"type": "string",
"help": "If non-empty, set as RPC_URL_138 for scripts that use Chain 138 RPC.",
"example": "http://192.168.11.211:8545",
"default": ""
},
{
"name": "practiceMode",
"label": "Practice mode (--dry-run where supported)",
"type": "boolean",
"help": "When enabled, each step whose script advertises --dry-run receives that flag.",
"default": false
}
],
"execution": {
"steps": [
{
"interpreter": "bash",
"scriptRelative": "scripts/mint-for-liquidity.sh",
"args": [],
"supportsDryRun": false
}
]
},
"touchpoints": [
{
"id": "pipeline_exit",
"label": "All automated steps completed",
"description": "Aggregate exit status of the script chain.",
"passCondition": "exit_zero"
}
],
"complianceFramework": "DBIS-MC-DOC-RUNBOOK-1",
"executionNote": "Automated steps are the scripts explicitly referenced in this runbook. Review the documentation for prerequisites (SSH, VPN, secrets) before running in production."
},
{
"id": "doc-03-deployment-contract-deployment-runbook-30840969",
"title": "Contract Deployment Runbook",
@@ -2828,7 +2893,7 @@
{
"id": "doc-05-network-e2e-cloudflare-domains-runbook-1bbeb05c",
"title": "E2E Success Runbook: Cloudflare Domains",
"summary": "**Last Updated:** 2026-02-05",
"summary": "**Last Updated:** 2026-03-27",
"whyItMatters": "This links documentation to executable automation in the monorepo. Operators get repeatable runs and an audit trail.",
"audienceHelp": "Use Practice mode when a script supports it. Set Proxmox host and RPC override when your environment differs from defaults.",
"docPath": "docs/05-network/E2E_CLOUDFLARE_DOMAINS_RUNBOOK.md",
@@ -3148,7 +3213,7 @@
"interpreter": "bash",
"scriptRelative": "scripts/update-all-dns-to-public-ip.sh",
"args": [],
"supportsDryRun": false
"supportsDryRun": true
}
]
},
@@ -4234,6 +4299,71 @@
],
"complianceFramework": "DBIS-MC-DOC-RUNBOOK-1",
"executionNote": "Automated steps are the scripts explicitly referenced in this runbook. Review the documentation for prerequisites (SSH, VPN, secrets) before running in production."
},
{
"id": "doc-testnet-defi-oracle-meta-testnet-2138-runbook-baf4850c",
"title": "Defi Oracle Meta Testnet (Chain ID 2138) — Runbook",
"summary": "**Last Updated:** 2026-03-27",
"whyItMatters": "This links documentation to executable automation in the monorepo. Operators get repeatable runs and an audit trail.",
"audienceHelp": "Use Practice mode when a script supports it. Set Proxmox host and RPC override when your environment differs from defaults.",
"docPath": "docs/testnet/DEFI_ORACLE_META_TESTNET_2138_RUNBOOK.md",
"prerequisites": [
"Read the linked markdown runbook for safety and ordering.",
"Bash (Linux, macOS, WSL, or Git Bash on Windows) for .sh steps; Node for .mjs.",
"Network, SSH, or API access as required by the underlying scripts."
],
"steps": [
{
"title": "Documentation",
"plainText": "Open and follow: docs/testnet/DEFI_ORACLE_META_TESTNET_2138_RUNBOOK.md",
"technicalNote": "Automated steps below are derived from script paths mentioned in that file."
}
],
"inputs": [
{
"name": "proxmoxHost",
"label": "Proxmox host",
"type": "string",
"help": "Used as PROXMOX_HOST in the environment for scripts that read it (e.g. 192.168.11.10).",
"example": "192.168.11.10",
"default": "192.168.11.10"
},
{
"name": "rpcUrlOverride",
"label": "RPC URL override (optional)",
"type": "string",
"help": "If non-empty, set as RPC_URL_138 for scripts that use Chain 138 RPC.",
"example": "http://192.168.11.211:8545",
"default": ""
},
{
"name": "practiceMode",
"label": "Practice mode (--dry-run where supported)",
"type": "boolean",
"help": "When enabled, each step whose script advertises --dry-run receives that flag.",
"default": false
}
],
"execution": {
"steps": [
{
"interpreter": "bash",
"scriptRelative": "scripts/validation/validate-config-files.sh",
"args": [],
"supportsDryRun": true
}
]
},
"touchpoints": [
{
"id": "pipeline_exit",
"label": "All automated steps completed",
"description": "Aggregate exit status of the script chain.",
"passCondition": "exit_zero"
}
],
"complianceFramework": "DBIS-MC-DOC-RUNBOOK-1",
"executionNote": "No shell/Node script paths were detected in this markdown. Mission Control runs repository config validation so you still get an automated check; follow the documentation for the full manual procedure."
}
]
}

View File

@@ -0,0 +1,67 @@
{
"id": "check-chain138-rpc-health",
"title": "Chain 138 RPC health (HTTP + peers + public probe)",
"summary": "Runs the repository script that checks Besu HTTP RPCs in parallel (head spread, peer counts) and probes public RPC capability against the documented matrix.",
"whyItMatters": "Catches silent RPC drift, split heads, or under-peered nodes before wallets and bridges fail in production.",
"audienceHelp": "You need bash (WSL, Git Bash, or Linux/macOS) and network reachability to the RPC IPs in config/ip-addresses.conf. Tunables: RPC_MAX_HEAD_SPREAD, RPC_MIN_PEERS, RPC_TIMEOUT_SEC, CHAIN138_PUBLIC_RPC_URL.",
"docPath": "scripts/verify/check-chain138-rpc-health.sh",
"prerequisites": [
"Bash and curl available on PATH.",
"Optional: config/ip-addresses.conf present for LAN IP overrides."
],
"steps": [
{
"title": "Parallel RPC checks",
"plainText": "The script queries each configured HTTP endpoint for block number and peer count, then compares head spread and minimum peers.",
"technicalNote": "See scripts/verify/check-chain138-rpc-health.sh header for env defaults."
},
{
"title": "Public capability probe",
"plainText": "Validates the public RPC URL against the documented support matrix (methods / capabilities).",
"technicalNote": "CHAIN138_PUBLIC_RPC_URL overrides https://rpc-http-pub.d-bis.org"
}
],
"inputs": [
{
"name": "proxmoxHost",
"label": "Proxmox host",
"type": "string",
"help": "Passed as PROXMOX_HOST for any downstream tooling that reads it (this script primarily uses RPC IPs).",
"example": "192.168.11.10",
"default": "192.168.11.10"
},
{
"name": "rpcUrlOverride",
"label": "RPC URL override (optional)",
"type": "string",
"help": "If non-empty, set as RPC_URL_138 in the environment for consistency with other runbooks.",
"example": "http://192.168.11.211:8545",
"default": ""
},
{
"name": "practiceMode",
"label": "Practice mode (--dry-run where supported)",
"type": "boolean",
"help": "This script does not implement --dry-run; leave off for a real check.",
"default": false
}
],
"touchpoints": [
{
"id": "exit_ok",
"label": "Script exit",
"description": "check-chain138-rpc-health.sh exited 0.",
"passCondition": "exit_zero"
}
],
"complianceFramework": "DBIS-MC-CHAIN138-RPC-1",
"execution": {
"steps": [
{
"interpreter": "bash",
"scriptRelative": "scripts/verify/check-chain138-rpc-health.sh",
"args": []
}
]
}
}

View File

@@ -28,6 +28,14 @@ export function getLaunchDestinations(): LaunchDestination[] {
href: envUrl('NEXT_PUBLIC_EXPLORER_URL', 'https://explorer.d-bis.org'),
kind: 'external',
},
{
id: 'phoenix-deploy-api',
title: 'Phoenix Deploy API',
description:
'Gitea webhooks, deploy stub, Proxmox VE rail, health summary. Run locally: cd phoenix-deploy-api && npm run dev (default port 4001).',
href: envUrl('NEXT_PUBLIC_PHOENIX_DEPLOY_API_URL', 'http://localhost:4001/health'),
kind: 'external',
},
{
id: 'docs-master',
title: 'Documentation index',
@@ -45,5 +53,25 @@ export function getLaunchDestinations(): LaunchDestination[] {
),
kind: 'docs',
},
{
id: 'meta-testnet-2138-runbook',
title: 'Meta testnet (2138) runbook',
description: 'DeFi Oracle Meta testnet deployment and wallet flow (Wagmi, MetaMask JSON, RPC).',
href: envUrl(
'NEXT_PUBLIC_TESTNET_2138_RUNBOOK_URL',
'https://gitea.d-bis.org/d-bis/proxmox/src/branch/main/docs/testnet/DEFI_ORACLE_META_TESTNET_2138_RUNBOOK.md',
),
kind: 'docs',
},
{
id: 'aggregator-route-matrix',
title: 'Aggregator route matrix',
description: 'JSON matrix of NPM / aggregator routes for operators (also available as CSV in config/).',
href: envUrl(
'NEXT_PUBLIC_ROUTE_MATRIX_URL',
'https://gitea.d-bis.org/d-bis/proxmox/src/branch/main/config/aggregator-route-matrix.json',
),
kind: 'docs',
},
];
}

View File

@@ -4,9 +4,10 @@ import { loadAllRunbookSpecs } from '@/lib/load-specs';
describe('runbook catalog', () => {
it('merges hand-written specs with all doc-derived runbooks', () => {
const all = loadAllRunbookSpecs();
expect(all.length).toBeGreaterThanOrEqual(56);
expect(all.length).toBeGreaterThanOrEqual(58);
const ids = new Set(all.map((s) => s.id));
expect(ids.has('health-self-check')).toBe(true);
expect(ids.has('check-chain138-rpc-health')).toBe(true);
expect([...ids].some((id) => id.startsWith('doc-'))).toBe(true);
for (const s of all) {
expect(s.execution.steps.length).toBeGreaterThan(0);