chore: rename quicproquo → quicprochat in docs, Docker, CI, and packaging

Rename all project references from quicproquo/qpq to quicprochat/qpc
across documentation, Docker configuration, CI workflows, packaging
scripts, operational configs, and build tooling.

- Docker: crate paths, binary names, user/group, data dirs, env vars
- CI: workflow crate references, binary names, artifact names
- Docs: all markdown files under docs/, SDK READMEs, book.toml
- Packaging: OpenWrt Makefile, init script, UCI config (file renames)
- Scripts: justfile, dev-shell, screenshot, cross-compile, ai_team
- Operations: Prometheus config, alert rules, Grafana dashboard
- Config: .env.example (QPQ_* → QPC_*), CODEOWNERS paths
- Top-level: README, CONTRIBUTING, ROADMAP, CLAUDE.md
This commit is contained in:
2026-03-07 18:46:43 +01:00
parent a710037dde
commit 2e081ead8e
179 changed files with 1645 additions and 1645 deletions

View File

@@ -79,14 +79,14 @@ $COMPOSE up -d --wait
# ── Step 3: Verify server reachable via QUIC ──────────────────────────────────
step "Verifying QUIC connectivity from alice..."
$COMPOSE exec -T alice qpq health
$COMPOSE exec -T alice qpc health
# ── Step 4: Alice — register identity + upload KeyPackage ─────────────────────
step "Alice: register-state..."
$COMPOSE exec -T alice qpq register-state --state /chat/alice.bin
$COMPOSE exec -T alice qpc register-state --state /chat/alice.bin
ALICE_KEY=$($COMPOSE exec -T alice qpq whoami --state /chat/alice.bin \
ALICE_KEY=$($COMPOSE exec -T alice qpc whoami --state /chat/alice.bin \
| grep 'identity_key' | awk '{print $3}' | tr -d '[:space:]')
info "Alice identity: ${ALICE_KEY}"
@@ -98,9 +98,9 @@ fi
# ── Step 5: Bob — register identity + upload KeyPackage ───────────────────────
step "Bob: register-state..."
$COMPOSE exec -T bob qpq register-state --state /chat/bob.bin
$COMPOSE exec -T bob qpc register-state --state /chat/bob.bin
BOB_KEY=$($COMPOSE exec -T bob qpq whoami --state /chat/bob.bin \
BOB_KEY=$($COMPOSE exec -T bob qpc whoami --state /chat/bob.bin \
| grep 'identity_key' | awk '{print $3}' | tr -d '[:space:]')
info "Bob identity: ${BOB_KEY}"
@@ -112,21 +112,21 @@ fi
# ── Step 6: Alice creates group ───────────────────────────────────────────────
step "Alice: create-group 'docker-chat'..."
$COMPOSE exec -T alice qpq create-group \
$COMPOSE exec -T alice qpc create-group \
--state /chat/alice.bin \
--group-id docker-chat
# ── Step 7: Alice invites Bob ─────────────────────────────────────────────────
step "Alice: invite Bob..."
$COMPOSE exec -T alice qpq invite \
$COMPOSE exec -T alice qpc invite \
--state /chat/alice.bin \
--peer-key "$BOB_KEY"
# ── Step 8: Bob joins ─────────────────────────────────────────────────────────
step "Bob: join group..."
$COMPOSE exec -T bob qpq join --state /chat/bob.bin
$COMPOSE exec -T bob qpc join --state /chat/bob.bin
# ── Step 9: Launch tmux ──────────────────────────────────────────────────────
@@ -140,8 +140,8 @@ echo " Ctrl+D exits a pane."
echo " tmux kill-session -t qpc-chat to stop."
echo ""
ALICE_CMD="$COMPOSE exec alice qpq chat --state /chat/alice.bin"
BOB_CMD="$COMPOSE exec bob qpq chat --state /chat/bob.bin"
ALICE_CMD="$COMPOSE exec alice qpc chat --state /chat/alice.bin"
BOB_CMD="$COMPOSE exec bob qpc chat --state /chat/bob.bin"
# Kill any stale tmux session with the same name.
tmux kill-session -t qpc-chat 2>/dev/null || true

View File

@@ -1,5 +1,5 @@
#!/usr/bin/env bash
# Cross-compile quicproquo for musl targets (OpenWrt / embedded Linux).
# Cross-compile quicprochat for musl targets (OpenWrt / embedded Linux).
#
# Produces statically linked, stripped binaries optimised for size.
# Requires: cargo-zigbuild (preferred) or cross.
@@ -8,7 +8,7 @@
# ./scripts/cross-compile.sh # all targets
# ./scripts/cross-compile.sh x86_64-unknown-linux-musl # single target
#
# Output: target/<triple>/release/qpq-server (stripped)
# Output: target/<triple>/release/qpc-server (stripped)
set -euo pipefail
@@ -47,7 +47,7 @@ SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
PROJECT_ROOT="$(cd "$SCRIPT_DIR/.." && pwd)"
cd "$PROJECT_ROOT"
echo "=== quicproquo cross-compilation ==="
echo "=== quicprochat cross-compilation ==="
echo "Build tool: $BUILD_CMD"
echo "Targets: ${TARGETS[*]}"
echo ""
@@ -55,8 +55,8 @@ echo ""
FAILED=()
for target in "${TARGETS[@]}"; do
echo "--- Building for $target ---"
if $BUILD_CMD --release --target "$target" --bin qpq-server; then
BINARY="target/$target/release/qpq-server"
if $BUILD_CMD --release --target "$target" --bin qpc-server; then
BINARY="target/$target/release/qpc-server"
if [ -f "$BINARY" ]; then
SIZE=$(stat -c%s "$BINARY" 2>/dev/null || stat -f%z "$BINARY")
SIZE_MB=$(echo "scale=2; $SIZE / 1048576" | bc)

View File

@@ -1,7 +1,7 @@
#!/usr/bin/env bash
# ── qpq Dev Shell ─────────────────────────────────────────────────────────────
# ── qpc Dev Shell ─────────────────────────────────────────────────────────────
#
# Builds qpq (if needed), starts a local server, registers Alice + Bob, then
# Builds qpc (if needed), starts a local server, registers Alice + Bob, then
# opens a tmux session with two side-by-side REPL panes and a server-log strip.
#
# Layout (window 0 — "chat"):
@@ -12,7 +12,7 @@
# │ /create-group g ← or create a group │ /join ← to accept invite │
# │ │ │
# ├──────────[ SERVER LOG ]────────────────────┴──────────────────────────────┤
# │ live qpq-server stdout / stderr │
# │ live qpc-server stdout / stderr │
# └───────────────────────────────────────────────────────────────────────────┘
#
# Window 1 — "ref": full slash-command cheatsheet (read-only)
@@ -23,7 +23,7 @@
# ./scripts/dev-shell.sh --resume reuse existing state files + server data
# ./scripts/dev-shell.sh --help show this message
#
# Stop: Ctrl-C here OR tmux kill-session -t qpq-dev
# Stop: Ctrl-C here OR tmux kill-session -t qpc-dev
# Ref: Ctrl-B 1 (inside tmux → cheatsheet window)
# Nav: Ctrl-B ←/→ (switch Alice ↔ Bob pane)
# Ctrl-B z (zoom current pane)
@@ -33,19 +33,19 @@ set -euo pipefail
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
PROJECT_ROOT="$(cd "$SCRIPT_DIR/.." && pwd)"
BIN_DIR="$PROJECT_ROOT/target/debug"
SESSION="qpq-dev"
SESSION="qpc-dev"
SERVER_PORT=7000
SERVER_ADDR="127.0.0.1:$SERVER_PORT"
SERVER_NAME="localhost"
# All runtime state lives in /tmp so the project tree stays clean
RUN_DIR="/tmp/qpq-devshell"
RUN_DIR="/tmp/qpc-devshell"
DATA_DIR="$RUN_DIR/server-data" # server stores TLS cert + OPAQUE data here
CA_CERT="$DATA_DIR/server-cert.der"
LOG_FILE="$RUN_DIR/server.log"
QPQ="$BIN_DIR/qpq"
QPQS="$BIN_DIR/qpq-server"
QPQ="$BIN_DIR/qpc"
QPQS="$BIN_DIR/qpc-server"
# ── Colours ────────────────────────────────────────────────────────────────────
GRN='\033[0;32m'; CYN='\033[0;36m'; YLW='\033[1;33m'; RED='\033[0;31m'; NC='\033[0m'
@@ -125,7 +125,7 @@ cleanup() {
step "Shutting down..."
tmux kill-session -t "$SESSION" 2>/dev/null || true
if [[ -n "$SERVER_PID" ]] && kill -0 "$SERVER_PID" 2>/dev/null; then
info "Stopping qpq-server (PID $SERVER_PID)..."
info "Stopping qpc-server (PID $SERVER_PID)..."
kill "$SERVER_PID" 2>/dev/null || true
wait "$SERVER_PID" 2>/dev/null || true
fi
@@ -135,7 +135,7 @@ cleanup() {
trap cleanup EXIT INT TERM
# ── Start server ───────────────────────────────────────────────────────────────
step "Starting qpq-server on $SERVER_ADDR..."
step "Starting qpc-server on $SERVER_ADDR..."
"$QPQS" \
--listen "$SERVER_ADDR" \
--data-dir "$DATA_DIR" \
@@ -166,7 +166,7 @@ for i in $(seq 1 20); do
done
sleep 0.5 # brief pause for the QUIC listener to open
QPQ_GLOBAL=(--ca-cert "$CA_CERT" --server-name "$SERVER_NAME")
QPC_GLOBAL=(--ca-cert "$CA_CERT" --server-name "$SERVER_NAME")
# ── Build REPL command strings ─────────────────────────────────────────────────
# Registration is handled automatically by the REPL on first launch:
@@ -177,7 +177,7 @@ QPQ_GLOBAL=(--ca-cert "$CA_CERT" --server-name "$SERVER_NAME")
# the identity key from ever being bound on a subsequent REPL launch.
repl_cmd() {
local user="$1" pass="$2"
echo "$QPQ ${QPQ_GLOBAL[*]} repl \
echo "$QPQ ${QPC_GLOBAL[*]} repl \
--state $RUN_DIR/${user}.bin \
--server $SERVER_ADDR \
--username $user \
@@ -244,7 +244,7 @@ tmux send-keys -t "${SESSION}:1" "clear" Enter
# Heredoc piped through cat so it renders immediately and stays visible
tmux send-keys -t "${SESSION}:1" "cat << 'CHEAT'
╔══════════════════════════════════════════════════════════════════════════╗
║ qpq REPL ─ Slash Command Cheatsheet ║
║ qpc REPL ─ Slash Command Cheatsheet ║
╠══════════════════════════════════════════════════════════════════════════╣
║ GENERAL ║
║ /help show all commands in the REPL ║
@@ -303,7 +303,7 @@ tmux send-keys -t "${SESSION}:1" "cat << 'CHEAT'
║ ║
║ EXIT / STOP ║
║ Ctrl-B :kill-session Enter kill tmux + triggers script cleanup ║
║ tmux kill-session -t qpq-dev from any other terminal ║
║ tmux kill-session -t qpc-dev from any other terminal ║
║ /quit (in Alice or Bob pane) exit that REPL only ║
╚══════════════════════════════════════════════════════════════════════════╝
CHEAT" Enter
@@ -315,7 +315,7 @@ tmux select-pane -t "${SESSION}:0.0"
# ── Print startup summary ──────────────────────────────────────────────────────
printf "\n"
printf "${GRN}╔══════════════════════════════════════════════════════╗${NC}\n"
printf "${GRN}${NC} ${GRN}qpq dev shell — ready${NC} ${GRN}${NC}\n"
printf "${GRN}${NC} ${GRN}qpc dev shell — ready${NC} ${GRN}${NC}\n"
printf "${GRN}╠══════════════════════════════════════════════════════╣${NC}\n"
printf "${GRN}${NC} Session ${CYN}%s${NC}\n" "$SESSION ${GRN}${NC}"
printf "${GRN}${NC} Server ${CYN}%s${NC}\n" "$SERVER_ADDR (log → $LOG_FILE) ${GRN}${NC}"
@@ -326,7 +326,7 @@ printf "${GRN}║${NC} Quick DM: ${CYN}[Alice pane]${NC} type: /dm bob
printf "${GRN}${NC} Cheatsheet: Ctrl-B 1 (inside tmux) ${GRN}${NC}\n"
printf "${GRN}${NC} Exit: Ctrl-B :kill-session Enter ${GRN}${NC}\n"
printf "${GRN}${NC} or from another terminal: ${GRN}${NC}\n"
printf "${GRN}${NC} tmux kill-session -t qpq-dev ${GRN}${NC}\n"
printf "${GRN}${NC} tmux kill-session -t qpc-dev ${GRN}${NC}\n"
printf "${GRN}╚══════════════════════════════════════════════════════╝${NC}\n"
printf "\n"

View File

@@ -6,14 +6,14 @@ cd "$(git rev-parse --show-toplevel)"
INTERACTIVE=false
[[ "${1:-}" == "--interactive" ]] && INTERACTIVE=true
SESSION="qpq-screenshot"
SESSION="qpc-screenshot"
SERVER_PORT=17123
SERVER_ADDR="127.0.0.1:${SERVER_PORT}"
DATA_DIR=$(mktemp -d)
CERT="${DATA_DIR}/server-cert.der"
KEY="${DATA_DIR}/server-key.der"
QPQ="./target/debug/qpq"
SERVER="./target/debug/qpq-server"
QPQ="./target/debug/qpc"
SERVER="./target/debug/qpc-server"
SLOG="${DATA_DIR}/server.log"
cleanup() {
@@ -26,7 +26,7 @@ trap cleanup EXIT
# ── Build ────────────────────────────────────────────────────────────────────
echo "Building binaries..."
cargo build --bin qpq --bin qpq-server 2>&1 | tail -1
cargo build --bin qpc --bin qpc-server 2>&1 | tail -1
# ── Start server ─────────────────────────────────────────────────────────────
echo "Starting server on ${SERVER_ADDR}..."