From 07315110cb627faeaf6fc1782ff66eaa30d0441d Mon Sep 17 00:00:00 2001 From: ki7mt Date: Tue, 6 Oct 2026 15:30:21 +0000 Subject: [PATCH 1/3] Direction: QSO Graph Desktop replaces the logger, SDK, ADIF service and club server plans; llm-stack moves to KI7MT - Home and Products: the product table is now the MCP servers (available) and QSO Graph Desktop (in design). The separate net logger, its SDK, the ADIF service and the self-hosted club server are folded into it. - llm-stack moves to KI7MT's own account: page and nav entry removed, with a redirect to its new home. --- docs/index.md | 7 +- docs/products.md | 32 ++--- docs/servers/index.md | 3 +- docs/servers/llm-stack.md | 280 -------------------------------------- mkdocs.yml | 2 +- 5 files changed, 15 insertions(+), 309 deletions(-) delete mode 100644 docs/servers/llm-stack.md diff --git a/docs/index.md b/docs/index.md index 79aae22..5da4afb 100644 --- a/docs/index.md +++ b/docs/index.md @@ -20,11 +20,8 @@ QSO Graph is open amateur radio software for your station: logging, nets, awards | Product | What it is | Status | |:--------|:-----------|:-------| -| **QSO Graph Logger** (QGLogger) | A contest-style logger for nets. Lean, fast and secure: it runs the net, and hands your contacts to the logger you already use | In development | -| **[QSO Graph SDK](https://github.com/qso-graph/qso-graph-sdk)** (QGSDK) | The build kit for QGLogger: one command to a pinned build environment on Windows or Linux | Available | -| **qso-graph-adif** | The ADIF specification as a service: fields, enumerations and data types by version, validation and lookups, through an API and a web interface | Planned | -| **qso-graph-core** | Club services for clubs that have none of their own: members, awards, net history | Planned | -| **qso-graph-atlas** | HF propagation data and analysis | Planned | +| **MCP servers** | Connect AI assistants to logbooks, public services, ADIF and propagation data | Available | +| **QSO Graph Desktop** | One app for your station on Windows, macOS and Linux: your logbook, nets, awards, spots and your radio, with your callsigns and logins kept in your own OS keyring | In design | More on each in [Products](products.md). diff --git a/docs/products.md b/docs/products.md index bf89744..e10af2b 100644 --- a/docs/products.md +++ b/docs/products.md @@ -9,6 +9,10 @@ QSO Graph is several products, not one program. Each stands alone: use the one t | Product | Kind | Status | |:--------|:-----|:-------| | [MCP servers](#mcp-servers) | Python packages for AI assistants | Available | +| [QSO Graph Desktop](#qso-graph-desktop) | Desktop app (Windows, macOS, Linux) | In design | + +--------|:-----|:-------| +| [MCP servers](#mcp-servers) | Python packages for AI assistants | Available | | [QSO Graph Logger](#qso-graph-logger) | Desktop app (Windows, Linux) | In development | | [QSO Graph SDK](#qso-graph-sdk) | Build kit | Available | | [qso-graph-adif](#qso-graph-adif) | Service: API and web interface | Planned | @@ -23,26 +27,12 @@ QSO Graph is several products, not one program. Each stands alone: use the one t [The servers](servers/index.md) · [Getting Started](getting-started.md) · [Security](security.md) -## QSO Graph Logger - -**QGLogger is a contest-style logger for nets.** It does one job: running and following a net, quickly and reliably. It isn't another general-purpose logger; there are already many good ones. Your contacts go to the logger you already use, by ADIF, and to LoTW, eQSL and QRZ. It's lean (a native desktop app) and secure. The rule it is built around: nothing interrupts an operator running a net. Updates never install during a net, a new version reads the old log, and the check-in grid doesn't stall. - -Every update is signed by more than one person, and the app checks those signatures before it installs it. It follows ADIF, so an operator can take their log to any other logger. - -## QSO Graph SDK - -**QGSDK** is the build kit for QGLogger: one command sets up a pinned build environment (Qt, compilers, packaging tools) on Windows or Linux. The build itself is plain CMake, so the SDK is a convenience, never a requirement. - -[GitHub](https://github.com/qso-graph/qso-graph-sdk) - -## qso-graph-adif - -The [ADIF specification](https://adif.org/) as a service: its fields, enumerations and data types by version, with validation and lookups, through an API and a web interface. It brings together the ADIF engine behind [adif-mcp](servers/adif-mcp.md) and ADIF's published reference data, so every QSO Graph product reads ADIF from one place. - -## qso-graph-core - -Club services for clubs that have none of their own: members, awards and net history, with an API. Built to run on a club's own server. +## QSO Graph Desktop -## qso-graph-atlas +**One app for your station**, on Windows, macOS and Linux: your logbook, the nets you join or run, where +you stand on awards and what you still need, spots, and your radio, in one place. Your callsigns and +logins are kept in your own operating system's keyring, never in a file and never on our servers. It +follows ADIF, so your log goes anywhere. Built to enterprise security standards and tested accordingly. -HF propagation data and analysis, as a service other products can use, built on the [IONIS-AI](https://ionis-ai.com/) datasets. +It is in design. Earlier plans for a separate net logger, an ADIF service and a self-hosted club server +are folded into it. diff --git a/docs/servers/index.md b/docs/servers/index.md index 6447cfb..db461cc 100644 --- a/docs/servers/index.md +++ b/docs/servers/index.md @@ -4,7 +4,7 @@ render_macros: true # MCP Servers -QSO Graph provides {{ server_count() }} MCP servers ({{ tool_total() }} tools), plus the qso-graph-auth credential foundation, the qsp-client relay and the llm-stack, covering amateur radio logging, confirmations, propagation services, and local LLM integration. Start with [Getting Started](../getting-started.md). +QSO Graph provides {{ server_count() }} MCP servers ({{ tool_total() }} tools), plus the qso-graph-auth credential foundation and the qsp-client relay, covering amateur radio logging, confirmations, propagation services, and local LLM integration. Start with [Getting Started](../getting-started.md). ## How it works @@ -78,7 +78,6 @@ You: "You have 3 new confirmations: JA1ABC on 20m FT8, ..." | Package | Purpose | Auth Pattern | |---------|---------|-------------| | [qsp-client](qsp-client.md) | QSP — relay MCP tools to any local LLM endpoint | None (local) | -| [llm-stack](llm-stack.md) | Docker Compose — Open WebUI + llama.cpp + MCP tools in a browser | None (local) | --- diff --git a/docs/servers/llm-stack.md b/docs/servers/llm-stack.md deleted file mode 100644 index d4f820b..0000000 --- a/docs/servers/llm-stack.md +++ /dev/null @@ -1,280 +0,0 @@ -# llm-stack - -**Local LLM + 42 ham radio MCP tools in a browser. No cloud, no API keys, no subscriptions.** - -A Docker Compose reference stack that wires together Open WebUI, llama.cpp (GPU-accelerated), and 5 qso-graph MCP servers. Clone, configure, launch — ask your local LLM about propagation conditions, POTA spots, WSPR data, and more. - -```bash -git clone https://github.com/qso-graph/llm-stack.git -``` - -[GitHub](https://github.com/qso-graph/llm-stack) - ---- - -## What It Does - -llm-stack bundles three services into a single `docker compose up -d`: - -1. **llm-engine** — llama.cpp with CUDA GPU acceleration, serving a quantized LLM -2. **open-webui** — browser chat interface with tool-calling support -3. **mcp-tools** — 5 qso-graph MCP servers exposed as OpenAPI endpoints via [mcpo](https://github.com/open-webui/mcpo) - -``` -┌─────────────────────────────────────────────┐ -│ Docker: ai-net network │ -│ │ -│ ┌──────────┐ ┌──────────┐ │ -│ │llm-engine│◄─────│ open-webui│ :3000 │ -│ │ :8000 │ │ (browser) │ │ -│ │ (GPU) │ └────┬──────┘ │ -│ └──────────┘ │ OpenAPI calls │ -│ ▼ │ -│ ┌──────────────────────────────────────┐ │ -│ │ mcp-tools container │ │ -│ │ │ │ -│ │ mcpo :8001 → solar-mcp (6 tools) │ │ -│ │ mcpo :8002 → pota-mcp (6 tools) │ │ -│ │ mcpo :8003 → wspr-mcp (8 tools) │ │ -│ │ mcpo :8004 → sota-mcp (4 tools) │ │ -│ │ mcpo :8005 → iota-mcp (6 tools) │ │ -│ │ mcpo :8006 → ionis-mcp (11 tools) │ │ -│ └──────────────────────────────────────┘ │ -└─────────────────────────────────────────────┘ -``` - ---- - -## Quick Start - -```bash -# 1. Clone and configure -git clone https://github.com/qso-graph/llm-stack.git -cd llm-stack -cp .env.example .env # Defaults work for 16 GB VRAM - -# 2. Download the LLM model (~5.5 GB) -./scripts/download-model.sh - -# 3. Launch -docker compose up -d - -# 4. Open browser -# http://localhost:3000 -``` - -Create an account on first visit (local only, not shared anywhere). - ---- - -## Requirements - -- **NVIDIA GPU** with 8+ GB VRAM (16 GB recommended) -- **Docker** with [NVIDIA Container Toolkit](https://docs.nvidia.com/datacenter/cloud-native/container-toolkit/latest/install-guide.html) -- ~8 GB disk for the default model + ~2 GB for container images - ---- - -## GPU Compatibility - -The default Docker image (`ghcr.io/ggml-org/llama.cpp:server-cuda`) supports Turing through Ada Lovelace GPUs. Blackwell GPUs need a local build. - -| Architecture | GPUs | SM | Default Image | Notes | -|-------------|------|:--:|:-------------:|-------| -| Turing | RTX 2060–2080, T4 | 75 | Yes | | -| Ampere | RTX 3060–3090, A100 | 80/86 | Yes | | -| Ada Lovelace | RTX 4060–4090, L40 | 89 | Yes | | -| Blackwell | RTX 5070–5090, B200 | 100/120 | **No** | Use `llm-engine/Dockerfile` | - -### Blackwell Build (RTX 5070/5080/5090) - -If you have a Blackwell GPU, build the engine locally: - -```bash -docker build -t ghcr.io/ggml-org/llama.cpp:server-cuda \ - -f llm-engine/Dockerfile llm-engine/ -docker compose up -d -``` - -This compiles llama.cpp with SM 120 CUDA support. Build takes 10–20 minutes depending on CPU cores. - -!!! warning "Blackwell NVIDIA Driver" - RTX 5080/5090 GPUs **require the open kernel modules**. On RHEL/Rocky Linux: - - ```bash - sudo dnf module enable nvidia-driver:open-dkms - sudo dnf install kmod-nvidia-open-dkms - ``` - - The standard `nvidia-driver:latest-dkms` will **not work** — the GPU will appear in `lspci` but `nvidia-smi` will show "No devices found." - ---- - -## GPU Sizing - -| GPU VRAM | Model | Context | VRAM Used | Notes | -|----------|-------|---------|-----------|-------| -| 8 GB | Qwen2.5-3B Q5_K_M | 8K | ~3 GB | Basic tool calling, limited reasoning | -| 16 GB | Qwen2.5-7B Q5_K_M (default) | 16K | ~6.4 GB | Good tool calling, tested on RTX 5080 | -| 24 GB | Qwen2.5-14B Q5_K_M | 16K | ~12 GB | Better reasoning, fewer prompting issues | -| 48+ GB | Qwen2.5-32B Q5_K_M | 32K | ~24 GB | Best quality, set `LLM_CTX_SIZE=32768` | - -To use a different model, download the GGUF file into `models/` and update `LLM_MODEL` in `.env`. - ---- - -## Configuring Tools in Open WebUI - -After launching, register the MCP tool servers: - -1. **Admin Panel → Settings → Tools** (or Connections → Tool Servers) -2. Add each server as type **OpenAPI** (NOT "MCP Streamable HTTP"): - -| Name | URL | Tools | -|------|-----|-------| -| Solar MCP | `http://mcp-tools:8001` | 6 — conditions, alerts, forecast, X-ray, solar wind, band outlook | -| POTA MCP | `http://mcp-tools:8002` | 6 — spots, park info, stats, scheduled activations | -| WSPR MCP | `http://mcp-tools:8003` | 8 — spots, band activity, propagation, grid activity, SNR trends | -| SOTA MCP | `http://mcp-tools:8004` | 4 — spots, alerts, summit info, nearby summits | -| IOTA MCP | `http://mcp-tools:8005` | 6 — island lookup, search, DXCC mapping, nearby groups | -| IONIS-AI MCP | `http://mcp-tools:8006` | 11 — propagation analytics (requires datasets) | - -3. **Enable tools per chat** — click the wrench icon in the chat input area -4. **Model settings** — in Advanced Params, set Function Calling to **Native** - -!!! note "OpenAPI, not MCP" - Use **OpenAPI** connection type, not "MCP Streamable HTTP." Open WebUI's native MCP support is broken as of v0.7.2. The mcpo proxy handles the translation. - ---- - -## Available Tools - -### Solar Weather (6 tools) -Live space weather from NOAA SWPC — solar flux, Kp index, X-ray flux, solar wind, alerts, and HF band outlook. - -### POTA (6 tools) -Parks on the Air — live activator spots, park info, activator/hunter stats, scheduled activations, parks by location. - -### WSPR (8 tools) -Weak Signal Propagation Reporter — live spots, band activity, top beacons, top spotters, path propagation, grid activity, longest paths, SNR trends. - -### SOTA (4 tools) -Summits on the Air — live spots, activation alerts, summit info, nearby summits. - -### IOTA (6 tools) -Islands on the Air — group lookup, island search, DXCC mapping, nearby groups, programme statistics. - -### IONIS-AI (11 tools, optional) -Propagation analytics from 175M+ signatures — band openings, path analysis, solar correlation, dark hour analysis, current conditions. Requires [IONIS-AI datasets](https://sourceforge.net/projects/ionis-ai/files/v1.0/) (~15 GB). - ---- - -## IONIS-AI Datasets (Optional) - -To enable the 11 IONIS-AI propagation analytics tools: - -1. Download datasets from [SourceForge](https://sourceforge.net/projects/ionis-ai/files/v1.0/) (~15 GB) -2. Set `IONIS_DATA_DIR` in `.env` to the download directory -3. Launch with the IONIS-AI override: - -```bash -docker compose -f docker-compose.yaml -f docker-compose.ionis.yaml up -d -``` - -Without IONIS-AI datasets, the other 30 tools still work. - ---- - -## Cloudflare Tunnel (Optional) - -To expose your instance publicly: - -1. Create a tunnel at [Cloudflare Zero Trust](https://one.dash.cloudflare.com/) -2. Set `CLOUDFLARE_TUNNEL_TOKEN` in `.env` -3. Launch with the tunnel profile: - -```bash -docker compose --profile tunnel up -d -``` - ---- - -## Example Queries - -Once tools are enabled, ask questions like: - -- *"What are current solar conditions?"* -- *"Show me live POTA activations in a table"* -- *"What WSPR propagation is there on 20m right now?"* -- *"Find SOTA summits near Denver"* -- *"Look up IOTA group OC-001"* - -!!! tip "Smaller models need guidance" - 7B models sometimes answer from training data instead of calling tools. Prefix your question with the tool name: *"Use solar-mcp — what are current conditions?"* or add a system prompt instructing the model to always use tools for real-time data. - ---- - -## Updating - -```bash -# Pull latest MCP server versions from PyPI -docker compose build --no-cache mcp-tools -docker compose up -d mcp-tools -``` - ---- - -## Troubleshooting - -**GPU not detected in container:** -Verify NVIDIA Container Toolkit is installed and configured: -```bash -sudo nvidia-ctk runtime configure --runtime=docker -sudo systemctl restart docker -docker run --rm --gpus all nvidia/cuda:12.8.1-base-ubuntu22.04 nvidia-smi -``` - -**Tools not calling:** -Enable tools via the wrench icon in the chat input. Set Function Calling to Native in model Advanced Params. - -**Connection refused on tool servers:** -Verify mcp-tools is on the same Docker network: `docker network inspect llm-stack_ai-net` - -**Out of VRAM:** -Reduce `LLM_CTX_SIZE` in `.env` (try 8192) or use a smaller quantization (Q4_K_M). - -**Blackwell GPU — "No devices found":** -Switch to open kernel modules. See the [Blackwell Build](#blackwell-build-rtx-507050805090) section. - ---- - -## Port Map - -| Port | Service | Purpose | -|------|---------|---------| -| 3000 | Open WebUI | Browser chat UI | -| 8000 | llm-engine | LLM inference API (GPU) | -| 8001–8006 | mcpo | MCP tool servers (OpenAPI proxy) | - ---- - -## Performance (Tested) - -Validated on EPYC 7302P + RTX 5080 (16 GB VRAM), Rocky Linux 9.7: - -| Metric | Value | -|--------|-------| -| Model | Qwen2.5-7B-Instruct Q5_K_M | -| VRAM used | 6.4 GB / 16.3 GB (39%) | -| Prompt throughput | ~1,033 tokens/sec | -| Generation speed | ~138 tokens/sec | -| MCP tool latency | <1 sec (solar, POTA, WSPR) | - ---- - -## Dependencies - -- [llama.cpp](https://github.com/ggml-org/llama.cpp) — LLM inference engine (CUDA) -- [Open WebUI](https://github.com/open-webui/open-webui) — browser chat interface -- [mcpo](https://github.com/open-webui/mcpo) — MCP-to-OpenAPI proxy -- [qso-graph MCP servers](https://github.com/qso-graph) — open amateur radio software, built to work together diff --git a/mkdocs.yml b/mkdocs.yml index 941a9f7..7865355 100644 --- a/mkdocs.yml +++ b/mkdocs.yml @@ -55,6 +55,7 @@ plugins: - redirects: redirect_maps: servers/qsp-mcp.md: servers/qsp-client.md # renamed 2026-09-28 + servers/llm-stack.md: https://github.com/KI7MT/llm-stack # moved to KI7MT 2026-10 how-it-works.md: spec/index.md # the spec itself, imported, replaced its summary 2026-10 - macros: render_by_default: false @@ -104,7 +105,6 @@ nav: - NetLogger: servers/netlogger-mcp.md - Infrastructure: - QSP (Tool Relay): servers/qsp-client.md - - LLM Stack: servers/llm-stack.md - Architecture: architecture.md - Testing: testing.md - Security: security.md From 645707d7b168f17050081e1100b93d366569dddb Mon Sep 17 00:00:00 2001 From: ki7mt Date: Tue, 6 Oct 2026 15:31:20 +0000 Subject: [PATCH 2/3] Keep QGSDK: the build kit for QSO Graph's standalone Qt/CMake apps (KI7MT) --- docs/index.md | 1 + docs/products.md | 9 +++++++++ 2 files changed, 10 insertions(+) diff --git a/docs/index.md b/docs/index.md index 5da4afb..c62e22c 100644 --- a/docs/index.md +++ b/docs/index.md @@ -22,6 +22,7 @@ QSO Graph is open amateur radio software for your station: logging, nets, awards |:--------|:-----------|:-------| | **MCP servers** | Connect AI assistants to logbooks, public services, ADIF and propagation data | Available | | **QSO Graph Desktop** | One app for your station on Windows, macOS and Linux: your logbook, nets, awards, spots and your radio, with your callsigns and logins kept in your own OS keyring | In design | +| **[QSO Graph SDK](https://github.com/qso-graph/qso-graph-sdk)** (QGSDK) | The build kit for QSO Graph's standalone apps: Qt and CMake, one command to a pinned build environment on Windows or Linux | Available | More on each in [Products](products.md). diff --git a/docs/products.md b/docs/products.md index e10af2b..97fd97c 100644 --- a/docs/products.md +++ b/docs/products.md @@ -10,6 +10,7 @@ QSO Graph is several products, not one program. Each stands alone: use the one t |:--------|:-----|:-------| | [MCP servers](#mcp-servers) | Python packages for AI assistants | Available | | [QSO Graph Desktop](#qso-graph-desktop) | Desktop app (Windows, macOS, Linux) | In design | +| [QSO Graph SDK](#qso-graph-sdk) | Build kit | Available | --------|:-----|:-------| | [MCP servers](#mcp-servers) | Python packages for AI assistants | Available | @@ -36,3 +37,11 @@ follows ADIF, so your log goes anywhere. Built to enterprise security standards It is in design. Earlier plans for a separate net logger, an ADIF service and a self-hosted club server are folded into it. + +## QSO Graph SDK + +**QGSDK** is the build kit for QSO Graph's standalone apps: one command sets up a pinned build +environment (Qt, compilers, packaging tools) on Windows or Linux. The build itself is plain CMake, so the +SDK is a convenience, never a requirement. + +[GitHub](https://github.com/qso-graph/qso-graph-sdk) From 920fbbf6d988c9120ec8c11c1e13c019ba1107f3 Mon Sep 17 00:00:00 2001 From: ki7mt Date: Tue, 6 Oct 2026 15:37:49 +0000 Subject: [PATCH 3/3] Specification: being rewritten for QSO Graph Desktop; stop importing the old spec qso-graph-spec goes private while it is rewritten (KI7MT). The site no longer fetches it at deploy; one page says it is being rewritten, and the old /spec/ pages redirect there. --- .github/workflows/deploy.yml | 6 ------ Makefile | 1 - docs/index.md | 4 ++-- docs/llms.txt | 3 +-- docs/products.md | 2 +- docs/specification.md | 10 ++++++++++ mkdocs.yml | 16 ++++++++-------- 7 files changed, 22 insertions(+), 20 deletions(-) create mode 100644 docs/specification.md diff --git a/.github/workflows/deploy.yml b/.github/workflows/deploy.yml index 88dc580..39d092e 100644 --- a/.github/workflows/deploy.yml +++ b/.github/workflows/deploy.yml @@ -43,12 +43,6 @@ jobs: GITHUB_TOKEN: ${{ github.token }} run: python scripts/collect_servers.py - # The specification, word for word, at its latest vX.Y.Z tag (spec.lock: latest; scripts/fetch_spec.py). - - name: Import the specification - env: - GITHUB_TOKEN: ${{ github.token }} - run: python scripts/fetch_spec.py - - name: Build (strict) run: mkdocs build --strict diff --git a/Makefile b/Makefile index 0f52e4f..109cf79 100644 --- a/Makefile +++ b/Makefile @@ -14,7 +14,6 @@ install: ## Install Python dependencies data: ## Collect every server's released version and tools $(PYTHON) scripts/collect_servers.py - $(PYTHON) scripts/fetch_spec.py build: ## Build the static site into site/ $(MKDOCS) build diff --git a/docs/index.md b/docs/index.md index c62e22c..40b8653 100644 --- a/docs/index.md +++ b/docs/index.md @@ -30,7 +30,7 @@ More on each in [Products](products.md). **[ADIF](https://adif.org/) is the base.** Every QSO Graph tool reads and writes ADIF, the format the whole hobby already shares, and uses ADIF's own definition for every field ADIF defines. **No one-off custom fields:** when a tool genuinely needs something ADIF doesn't have, it is defined **once**, published, and used the same way across every QSO Graph tool where it applies. That costs more than a quick private field, and it's a cost accepted deliberately: it's what keeps the tools working together, and what lets you take your log anywhere. -Every tool stands alone, and the pieces talk through published interfaces and shared reference data, not shared code. The rules behind that are in the [QSO Graph specification](spec/index.md). +Every tool stands alone, and the pieces talk through published interfaces and shared reference data, not shared code. The rules behind that are in the [QSO Graph specification](specification.md), being rewritten for QSO Graph Desktop. --- @@ -67,7 +67,7 @@ Dashboard, physics lab, DXCC progress, path analyzer, and log viewer, all powere ## Project Links - **GitHub**: [github.com/qso-graph](https://github.com/qso-graph) -- **Specification**: [QSO-GRAPH-SPEC](spec/index.md) ([source](https://github.com/qso-graph/qso-graph-spec)) +- **Specification**: [being rewritten](specification.md) for QSO Graph Desktop - **Demo**: [qso-graph-demo.vercel.app](https://qso-graph-demo.vercel.app/) - **Testing**: [108/108 PASS](testing.md): security audit, ADIF 3.1.7 official test corpus, forensic validation - **Related**: [IONIS-AI](https://ionis-ai.com/): HF propagation prediction from 14B amateur radio observations diff --git a/docs/llms.txt b/docs/llms.txt index 9a42b35..2be72d7 100644 --- a/docs/llms.txt +++ b/docs/llms.txt @@ -38,7 +38,7 @@ ## Documentation - [Products](https://qso-graph.io/products/): every QSO Graph product, what it is, and its status. -- [Specification](https://qso-graph.io/spec/): QSO-GRAPH-SPEC as published: the vision, the eight pillars (each with a mechanical test), the contracts, governance. +- [Specification](https://qso-graph.io/specification/): being rewritten for QSO Graph Desktop; published again when ready. - [Getting Started](https://qso-graph.io/getting-started/): Installation with uv (servers run with uvx), credential setup, MCP client configuration for Claude Desktop, Claude Code, ChatGPT, Cursor, VS Code, and Gemini CLI. - [Architecture](https://qso-graph.io/architecture/): System design — foundation layer, credential flow, rate limiting, read-only security model. - [Testing & Validation](https://qso-graph.io/testing/): four test layers per server, ADIF 3.1.7 official test corpus validation, forensic tests from real operator data. @@ -59,5 +59,4 @@ - GitHub: https://github.com/qso-graph - Documentation: https://qso-graph.io - Demo: https://qso-graph-demo.vercel.app -- Specification: https://github.com/qso-graph/qso-graph-spec/tree/v1.0.1 - Related: https://ionis-ai.com (HF propagation prediction from 14B amateur radio observations) diff --git a/docs/products.md b/docs/products.md index 97fd97c..bd3c32e 100644 --- a/docs/products.md +++ b/docs/products.md @@ -4,7 +4,7 @@ render_macros: true # Products -QSO Graph is several products, not one program. Each stands alone: use the one that applies to you and ignore the rest. They follow the same [specification](spec/index.md), so moving between them is easy. +QSO Graph is several products, not one program. Each stands alone: use the one that applies to you and ignore the rest. They follow the same [specification](specification.md), so moving between them is easy. | Product | Kind | Status | |:--------|:-----|:-------| diff --git a/docs/specification.md b/docs/specification.md new file mode 100644 index 0000000..e6ad977 --- /dev/null +++ b/docs/specification.md @@ -0,0 +1,10 @@ +# Specification + +The QSO Graph specification is being rewritten for [QSO Graph Desktop](products.md#qso-graph-desktop). + +The earlier version was written for a separate net logger, a direction QSO Graph has since left. It will +be published here again once the rewrite is ready. + +The rules that every QSO Graph tool already follows still hold: [ADIF](https://adif.org/) is the base, +ADIF's own definition is used for every field ADIF defines, and credentials stay in your operating +system's keyring. diff --git a/mkdocs.yml b/mkdocs.yml index 7865355..9074ef1 100644 --- a/mkdocs.yml +++ b/mkdocs.yml @@ -56,7 +56,13 @@ plugins: redirect_maps: servers/qsp-mcp.md: servers/qsp-client.md # renamed 2026-09-28 servers/llm-stack.md: https://github.com/KI7MT/llm-stack # moved to KI7MT 2026-10 - how-it-works.md: spec/index.md # the spec itself, imported, replaced its summary 2026-10 + how-it-works.md: specification.md + spec/index.md: specification.md # spec being rewritten for QSO Graph Desktop, 2026-10 + spec/VISION.md: specification.md + spec/PILLARS.md: specification.md + spec/contracts/index.md: specification.md + spec/contracts/club-definition.md: specification.md + spec/governance/index.md: specification.md - macros: render_by_default: false on_undefined: strict @@ -74,13 +80,7 @@ extra: nav: - Home: index.md - Products: products.md - - Specification: - - spec/index.md - - Vision: spec/VISION.md - - Pillars: spec/PILLARS.md - - Contracts: spec/contracts/index.md - - Club definition: spec/contracts/club-definition.md - - Governance: spec/governance/index.md + - Specification: specification.md - MCP Servers: - servers/index.md - Getting Started: getting-started.md